2014年12月25日木曜日

OpenStack/CloudStack/Eucalyptusが教えてくれること


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


今年最後のカレンダーネタです。
http://www.adventar.org/calendars/602
http://www.adventar.org/calendars/547


OpenStackやCloudStack、Eucalyptusといった、いわゆるクラウド基盤ソフトウェアを技術的に学習することで得られるものは多々あります。

ビジネス的には、自社のサービス基盤の効率化への活用だったり、SIビジネスを展開する材料にしたりできます。これらを習得する過程で、基礎的なLinux/Unixに関する技術も習得できるようになるため、エンジニアとって有用な教材であるといえます。さらに、構築したクラウド基盤上でどのようにシステムを構築し、運用するのか、という視点を持つことで、従来とは異なった、「クラウドネイティブ」なシステムデザインしていくきっかけにもなるとも思います。

このように様々なことが学習できる優秀な教材でもあるクラウド基盤ソフトウェアでありますが、中でも抑えておくべきポイントとして「抽象化」の考え方があります。


抽象化(ちゅうしょうか、英: Abstraction、独: Abstraktion)とは、思考における手法のひとつで、対象から注目すべき要素を重点的に抜き出して他は無視する方法である。反対に、ある要素を特に抜き出して、これを無視したり、切り捨てる意味もあり、この用法については捨象するという。従って、抽象と捨象は盾の両面といえる。
Wikipedia より

この観点でこちらに記事を書きました。
http://www.atmarkit.co.jp/ait/articles/1412/12/news016.html

その他の関連記事はこちら(宣伝)
http://www.atmarkit.co.jp/ait/subtop/features/kwd/openstack.html

OpenStackやEucalyptus、そしてCloudStackは多岐にわたるITインフラ(サーバー、ネットワーク、ストレージ)を抽象化し、より大量の計算リソースを素早く、簡単に扱えるようにしてくれます。

この流れは計算機の正当な進化に沿ったものであると言えます。計算機の世界は抽象化の層を積み重ね今日に至っており、OpenStackはその抽象化の層をまた1つ追加しようとしています。そして計算機のビジネスは抽象化の一番外側にいる層が現実世界との接点となり、ビジネスが発生するポイントになります。だからこそ、多くのITベンダーがOpenStackに注目し、こぞって開発に参画し、次世代のビジネスを主導権を取ろうと勝負しています。

クラウド基盤ソフトウェアを学習するとき、あるいはビジネスでの活用を検討するときには、この抽象化の意味を良く考える必要があります。一体、何のためにこの層が必要だったのか?この意味を考え、理解すれば自ずと、クラウド基盤ソフトウェアの正しい活用方法というものがわかるはずです。



来年から大学でクラウド基盤ソフトウェアに関する講義を持つ予定ですが、学生の皆様には表層的な「使い方」ではなく、こういった計算機の本質的な考え方を伝えていければと考えています。

それではまた来年もよろしくお願いします。


2014年12月21日日曜日

民明書房刊「クラウドの歴史」より


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


今日は皆様に我が国における、クラウドの歴史について少し紹介させてください。

おぷすたや
あゝおぷすたや
おぷすたや

この句は、江戸時代中期に詠まれたものであると伝えられている。
信越地方の藩主の嫡男が、出島で見かけた”おぷすた”なるものに心を奪われ、思わず口にしてしまったものを偶然に通りかかった魚拓職人が記録し、現代に至る。

それまでは幕府の定めた”くらうど”しか使えなかった諸藩は、このおぷすたに大変な関心を示し、皆がこぞって利用するようになった。
幕府のくらうどは、”くらうど”といいながら、利用するには専門の職人が要求書を書面で送る必要があり、実際に使えるようになるまで、1周間以上待たねばならず、時には1ヶ月以上も待たされる時もあったという。

このような状況に不満が蓄積されていた背景もあり、おぷすたは国内で爆発的に普及した。
ただ利用するだけではなく、足りない機能をみんなで開発し、いかに自分の藩が素晴らしい貢献をするかを競い合い、いつしか貢献度に応じて藩の格付けまでされるようになった。
また、当時は通信手段も乏しく、隣の藩と連絡を取るために街道の整備が急速に進み、これが後の東海道となり、日ノ本の経済を活性化させる要因ともなっていく。

しかし、この状況を面白くないと思った幕府は、禁おぷすた令を発して、諸藩のおぷすたへの取り組みを禁止した。
後の世に言う、「仮想環境憐れみの令」である。

曰く

・仮想マシンはペットのように可愛がらねばならん。
・それにオープンソースなどサポートがなくて使えない
・もし何かあったら誰が保証するんだ

というのが幕府の言い分であった。
当然、多くの人がこの考え方に反発した。中でも強硬に反発したのが大塩平蜂郎であった。大塩は元幕府の役人であったが、幕府のくらうどに対する考え方が我慢できず出奔した経緯を持つ。大塩は幕府に対して、

「1時間後に仮想環境を100台用意しろ」
「俺が寝ているときに負荷が上がったら、勝手に仮想環境を増強しろ」

などと無理難題を要求した。当然これに対応できない幕府は要求を無視するが、これに怒った大塩によって引き起こされたのが有名な「大塩平蜂郎の乱」であるのはあまりにも有名である。

この後も、幕府はなんとかおぷすたの勢力を抑えこもうとするが、一度広がったおぷすたの考え方は市場に浸透し、既に国内から一掃するのは不可能であった。幕府内にも反発する勢力が日に日に増大し、最後には幕府が折れることで、一連の騒動は幕を閉じる。

そしてその後、誰もが自由に使えるおぷすたは大いに広がり、江戸後期には様々なコンテンツビジネスがおぷすた上で展開され、江戸の住民を多いに楽しませたという。














ちなみに全部フィクションであることは言うまでもない( http://www.adventar.org/calendars/602 )


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