2014年12月11日木曜日

Emacsでプレゼン資料を作る(landslide)


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


OpenStack Advent Calendar 2014 のネタです。
http://www.adventar.org/calendars/569
http://www.adventar.org/calendars/602

なんでEmacsなんだよ、と思われる方もいると思います。まずは話を聞いてください。

OpenStack には Upstream Training というコントリビューターを育成するプログラムがあります。これまで、グローバルで3回開催されています。

1回目 OpenStack Summit Atlanta
2回目 Upstream Training Japan
3回目 OpenStack Summit Paris

今後の予定は、たぶんこんな感じになると思います。

4回目 OpenStack Days Tokyo 2015(予定)
5回目 OpenStack Summit Vancouver(予定)
6回目 OpenStack Summit Tokyo(予定)

実は、世界でこのトレーニングを受けることができるのは、Summitに参加した人か、日本に住んでいる人だけになります。日本のトレーニングはローカライズもされています。貴重ですね。


と、これは本題ではなく、このトレーニングで使われている教材が、githubに公開されています。
https://github.com/openstack/training-guides/tree/master/doc/upstream-training

スライドの実態はこのあたりです。テキストファイルです。
https://github.com/openstack/training-guides/blob/master/doc/upstream-training/01-release-cycle.rst

このテキストファイルを landslide というツールに食べさせると、HTML5のプレゼンファイルができます。
https://github.com/adamzap/landslide


という事で、Okinawa OpenDays 2014 で開催される、OpenStackハンズオンの資料をlandslideで作ってみました。
http://irixjp.github.io/20141212_okinawa/handson.html/


landslide を使ってみた感想をまとめます。

・Emacsで資料を書ける(Markdown or rst形式)
・テキストベースのスライドなら使いやすい
・画像を交えると結構苦しい
・印刷がかなり難しい、PDF変換も綺麗にはいかない(今は)
・CSSに詳しくないと、カスタマイズが難しい。
・レイアウトが環境によってずれる(Win/Mac/Linux/ブラウザ)


と、一長一短かなと思いました。
一方で、これにブログ記事をスライド形式で書くのも面白いと思いました。


ちなみに、S式でプレゼンを書くツールもあります。
https://github.com/fukamachi/L5

Emacs org-mode をプレゼン風に使うelもあります。
http://pastelwill.jp/wiki/doku.php?id=emacs:org-tree-slide


PPT/KEYにはもう飽きたよ、という方は次のOpenStack勉強で使ってみてください(保証もヘルプもしませんが)

それでは良いお年を。


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


2014年8月29日金曜日

gnupack devel 12.10 非公式アップデート


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


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

アップデートの概要 12.03 to 12.10

・実験的に emacs-w32 を配置(ntemacsとは分離して配置)
・connect-proxy, corkscrew を配置
・cygwin 関連パッケージのアップデート

ダウンロードはこちらから。
gnupack_devel-12.10-unofficial.exe


既知の問題
・Windows8 64bit で特定コマンドが実行できない → export LANG=C する事で回避はできます。
fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFEA0000 != 0x0 mem alloc base 0xFFEA0000, state 0x1000, size 20480, Win32 error 487

・df 時にローカルドライブ以外の容量取得がエラーになる。
# df
df: `/g'
ファイルシス   1K-ブロック     使用    使用可 使用% マウント位置
C:               249954300 59996268 189958032   25% /c


2014年8月18日月曜日

How to use python-swiftclient


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


リファレンスはこのあたり。
http://docs.openstack.org/developer/python-swiftclient/

大体はリファレンスに記載されている。一部サンプルが無くてわかりづらいところをメモ。



2014年7月13日日曜日

複数NIC環境でDHCPを使った際の resolv.conf の上書きについて


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


RHEL6/CentOS6において、複数のNICを持つ環境でそれぞれのインターフェースでDHCPを有効にした場合(以下のようなケース)

eth0(dhcp) → eth1(dhcp) → eth2(dhcp)

この時、 resolv.conf の設定は、最後にUPしたインターフェースの設定で上書きされてしまいます。これを防ぐには、事前に特定インターフェースの resolv.conf 上書きを停止することで問題を回避できます。


resolv.conf を上書きさせたくないインターフェースの ifcfg-ethX に以下を追記します。

PEERDNS="no"

これだけ。