2014年9月24日水曜日

gnupack(cygwin)上でsary をコンパイルする


このエントリーをはてなブックマークに追加


sary: Suffix Arrayのライブラリとツール
http://sary.sourceforge.net/index.html.ja

Suffix Array というデータ構造を使う場合に必要になるコマンドとライブラリ。巨大な辞書ファイルの検索などに用いられます。

Emacs + SDIC で辞書環境を作る際、英辞郎のインデックス化とその後の検索に sary/mksary というコマンドが必要になります。これをgnupackでコンパイルして利用できるようにしてみます。

といっても、gnupack x86_64 00.01 版ではコンパイル済みのバイナリを本体に含めています。自分でコンパイルしたい場合は、gcc-core, gcc-g++, libglib2.0, libglib2.0-devel, pkg-config が必要となります。

$ wget http://sary.sourceforge.net/sary-1.2.0.tar.gz
$ tar zxvf sary-1.2.0.tar.gz
$ cd sary-1.2.0/

このままだとguessファイルが古く、configureに失敗しますので、config.guess関連を以下のファイルで差し替えます。
---------------
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
---------------

後はいつも通りです。
./configure --prefix=/app/cygwin/local
make: make install


2014年9月23日火曜日

もうLenovo製品は永久に買わない、というお話


このエントリーをはてなブックマークに追加


** 2014/09/23 24:00 追記***
想像以上に記事が注目を集めてしまい、私の主観に基づく見解で書かれたT440sとLenovoのイメージが拡散してしまうのは本意ではありませんので、個人的な意見や見解は削除しておきます。よろしくお願いいたします。
---------------------------------------

度重なるT440sのトラブルに、思うことはあるのですが、Lenovo本家が運用している掲示板でも T440s nightmare というスレッドが立ち上がっており、盛り上がってる感じでした。

この1年間にT440sで発生したことを記録しておきます。


openstack clients on windows(cygwin)


このエントリーをはてなブックマークに追加


Windowsからいろいろ使えると便利です。

ここ http://aikotobaha.blogspot.jp/search/label/gnupack から最新版のgnupackを落としてください。

後は、
easy_install virtualenv virtualenvwrapper


環境変数を設定(例
if [ -f /usr/bin/virtualenvwrapper.sh ]; then
   export WORKON_HOME=~/.virtualenvs
   source `which virtualenvwrapper.sh`
fi

export PIP_DOWNLOAD_CACHE=~/.pip_cache


インストール
pip install python-novaclient python-neutronclient python-swiftclient python-cinderclient
* python-glanceclient はコンパイルエラーになります。crypto周り??


cygwin的に必要となるパッケージは以下。
gcc-core
 libxml2
 libxml2-devel
 libxslt
 libxslt-devel
 openssl-devel
 libffi
 libffi-devel
 yaml


gnupack 非公式アップデート x86_64版 00.01 pretest リリース


このエントリーをはてなブックマークに追加


*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

もう32bitで使う人も少ないかと思い。64bit版にしました。pretestリリースなので、いろいろ足りていませんが、動作速度は劇的に改善しています。

・gnupackランチャー(mintty.exe) のみオリジナルを配置し、その他は削除しています(改良したいけど、時間もVCもない)
・cygwinを64bit版に入れ替え
・NTEmacs, Gvim, TDMを削除
・CygwinネイティブでコンパイルしたEmacs24.3を配置(IMEパッチ適用済み)
・apt-cygを本家最新版に(2013/12版)

ダウンロードは こちら から。

Windows2008で作成し、Win8で動作確認(中)をしています。


現在のところ確認できた問題点
・manが文字化け(LANG=Cで治る)
・screenが動かない(/tmp/userscreen/xxxxxxx の権限が700云々)
・emacs-w3m のロードが、不定期に重くなり、以下が出力
1 [sig] emacs 6444 get_proc_lock: Couldn't acquire sync_proc_subproc for(5,1), last 6, Win32 error 122
503 [sig] emacs 6444 proc_subproc: couldn't get proc lock. what 5, val 1


2014年9月10日水曜日

LXDE/LXpanel デジタル時計 の日付・曜日・時間表示


このエントリーをはてなブックマークに追加


LXDEのタスクバー(LXpanel)のデジタル時計アプリに日付・曜日・時間を表示させる方法。

時計を右クリックし、「デジタル時計の設定」を選択し、「時刻表示のフォーマット」に、

%F %A %R

とか書くと、こうなります。


使えるフォーマット文字は、man date で出てくるものです。

一部抜粋(man date)
%a ロケール表示による曜日の省略名 (例: Sun、日)
%A ロケール表示での曜日の完全名 (例: Sunday、日曜日)
%b ロケール表示での月の省略名 (例: Jan)
%B ロケール表示での月の完全名 (例: January)
%c ロケール表示での日付と時刻 (例: Thu Mar 3 23:05:25 2005)
%C 世紀。%Y と同様だが下2桁が省略される (例: 20)
%d 月の中の何日目かを表す値 (例: 01)
%D 日付。 %m/%d/%y と同様
%e スペースで字幅調整された月の中の何日目かを表す値。%_d と同様
%F 完全形式の日付。 %Y-%m-%d と同様
%g ISO 週番号の最後の2桁 (%G 参照)
%G ISO 週番号の年部分 (%V 参照)。通常は %V と同時に使用される
%h %b と同様
%H 時 (00..23)
%I 時 (01..12)
%j 年の開始日からの日数 (001..366)
%k スペース詰めの時 ( 0..23)。 %_H と同様
%l スペース詰めの時 ( 1..12)。 %_I と同様
%m 月 (01..12)
%M 分 (00..59)
%n 改行
%N ナノ秒 (000000000..999999999)


2014年9月3日水曜日

ConoHaのオブジェクトストレージサービスについて。


このエントリーをはてなブックマークに追加


ConoHa のサービスにオブジェクトストレージサービスが実装されました。OpenStack Swift ベースとの事です。
https://www.conoha.jp/blog/tech/2642.html

大体の使い方はここに書いてあります。
https://www.conoha.jp/guide/guide.php?g=48


サンプルに書いていない、アップロードしたファイルをクライアントに対して直接参照させる方法について書いてみます。これは画像配信等で有効です。

$ pip install python-keystoneclient python-swiftclient
エラーが出る場合はOS側のライブラリ等が足りません。エラーメッセージを見れば大体何が足りないかはわかると思います。

コンパネから取得できる情報を以下の変数に設定
$ vim openrc_conoha
export OS_AUTH_URL=API Auth URL
export OS_TENANT_ID=テナントID
export OS_USERNAME=ユーザー名
export OS_PASSWORD=自分のパスワード

$ source openrc_conoha
$ swift stat
       Account: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Containers: 0
       Objects: 0
         Bytes: 0
Meta Quota-Bytes: 110058536960000
   X-Timestamp: 1409734987.60990
  Content-Type: text/plain; charset=utf-8
 Accept-Ranges: bytes


コンテナを作成します。
$ swift post container01
$ swift list
container01

$ swift stat container01
       Account: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     Container: container01
       Objects: 0
         Bytes: 0
      Read ACL:
     Write ACL:
       Sync To:
      Sync Key:
 Accept-Ranges: bytes
   X-Timestamp: 1409736843.00552
    X-Trans-Id: tx2eb6ef4622c34c1a90c62-005406e0a8
  Content-Type: text/plain; charset=utf-8

ファイルのアップロードを行います。
$ cat hoge.txt
hogehoge

$ swift upload container01 hoge.txt 
hoge.txt

$ swift stat container01
       Account: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     Container: container01
       Objects: 1
         Bytes: 9
      Read ACL:
     Write ACL:
       Sync To:
      Sync Key:
 Accept-Ranges: bytes
   X-Timestamp: 1409736843.00709
    X-Trans-Id: tx70d3fe1c2c534d2d8f513-005406e148
  Content-Type: text/plain; charset=utf-8

コンテナの属性を変更して、誰でも読み取り可能にします。
$ swift post --read-acl ".r:*,.rlistings" container01

$ swift stat container01
       Account: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     Container: container01
       Objects: 1
         Bytes: 9
      Read ACL: .r:*,.rlistings
     Write ACL:
       Sync To:
      Sync Key:
 Accept-Ranges: bytes
    X-Trans-Id: txd0161d15696c407cadd5b-005406e2d3
   X-Timestamp: 1409736843.00552
  Content-Type: text/plain; charset=utf-8

オブジェクトストレージのエンドポイントを取得します。この値はスタティックなので、一度取得してしまえば変更されることはありません。
$ keystone endpoint-get --service object-store
+------------------------+---------------------------------------------------------------------------+
|        Property        |                                   Value                                   |
+------------------------+---------------------------------------------------------------------------+
| object-store.publicURL | https://objectstore-r1nd1001.cnode.jp/v1/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------------+---------------------------------------------------------------------------+
xxxxxxxxxxxx 部分にはテナントIDが入ります。


このアドレスに、コンテナ名/ファイル名 をつけてアクセスすると、直接ファイルの中身が参照できます。
$ curl https://objectstore-r1nd1001.cnode.jp/v1/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/container01/hoge.txt
hogehoge

上記の例では Swift のCLIを利用していますが、もちろんReST APIを利用してもよいですし、Pythonであれば swiftclient を import して、プログラムの中からストレージを扱うことが可能になります。

プログラムからアップロード等する場合の例はこちらを参考にしてください。
http://aikotobaha.blogspot.jp/2014/08/how-to-use-python-swiftclient.html