もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

WindowsにcapstanをインストールしてOSvを起動してみた

はじめに

オープンソースカンファレンス2014 Kansai@KyotoでOSvの何たるかをご教示頂きました。
(ざっくり、JVMの動作に必要なLinux APIをエミュレーションする超軽量なOSとのこと。)

調べるとWindowsVirtualBoxと言う我が家のクラウド環境(?)もサポートされてるみたいなので、インストールしてみることにしました。

最終的にはマイクラサーバが動けば良いなと。

WindowsでOSvを動かしてみよう

あらかじめインストールしてあったもの

  • Windows 7 Pro 64bit(OSv自体が64bitのみサポートみたいなので、32bit OSはアウトと思います。)
  • SourceTree(内部gitを有効にしたもの) 1.5.2.0
  • VirtualBox 4.3.12

Go言語をインストールする。

capstanはGoogle謹製のGo言語で書かれているため、http://golang.org/dlから、Windows版を入手します。

f:id:moguno:20140803214923p:plain

なんとなくお勧めされた64bit版をチョイス。
インストール先はデフォルトのc:\go\にしました。

SourceTreeでcapstanのリポジトリをクローンする。

https://github.com/cloudius-systems/capstanをクローンします。

f:id:moguno:20140803193841p:plain

8/3時点のHEADは、0.1.2 + 2014/7/29 4:38までのコミットでした。

作業用コマンドプロンプト起動用バッチファイルを作る。

capstanをインストール or 実行するためには、下記のプログラムにパスを通す必要があります。

  • go.exe
  • git.exe
  • VBoxManage.exe

加えて、GOPATHにgo言語のルートになるフォルダを設定する必要があります。

毎回設定するのは面倒なのでバッチファイルにします。

・capstan_cmd.bat

set PATH=%PATH%;c:\go\bin
set PATH=%PATH%;c:\Users\desktop\AppData\Local\Atlassian\SourceTree\git_local\bin
set PATH=%PATH%;"c:\Program Files\Oracle\VirtualBox"
set GOPATH=c:\go\

cmd

capstanのインストール

さて、ここからはコマンドプロンプトでの作業です。
さっきのバッチファイルからコマンドプロンプトを起動し、install.batを実行します。

c:\>cd \Users\desktop\Documents\capstan ←capstanをクローンしたフォルダ

c:\Users\desktop\Documents\capstan>install

c:\Users\desktop\Documents\capstan>set package=github.com/cloudius-systems/capst
an

c:\Users\desktop\Documents\capstan>for /F %i in ('git describe --tags ') do set
version=%i

c:\Users\desktop\Documents\capstan>set version=v0.1.2-4-gdb6eb7e

c:\Users\desktop\Documents\capstan>go get github.com/cloudius-systems/capstan
# github.com/cloudius-systems/capstan
c:\go\src\github.com\cloudius-systems\capstan\capstan.go:64: too few values in struct initializer
c:\go\src\github.com\cloudius-systems\capstan\capstan.go:95: too few values in struct initializer

・・・(同様のエラーが続く)

あらら、エラーです。

cliのバージョンダウン

エラーの原因はcapstanが使っているcliと言うパッケージでした。
StringFlag()メソッドに渡す引数の数が足りていない様です。

調べると、cliパッケージが8/3(今日やん・・・)にバージョンアップ(1.2.0)しており、その際にメソッドの仕様が変わったようです。

1.1.0にバージョンダウンして何とかします。

c:\Users\desktop\Documents\capstan>cd \go\src\github.com\codegangsta\cli\

c:\Go\src\github.com\codegangsta\cli>git checkout 1.1.0
Note: checking out '1.1.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 27ecc97... Merge pull request #112 from AudriusButkevicius/swap

再度capstanのインストール

c:\Users\desktop\Documents\capstan>install

c:\Users\desktop\Documents\capstan>set package=github.com/cloudius-systems/capst
an

c:\Users\desktop\Documents\capstan>for /F %i in ('git describe --tags ') do set
version=%i

c:\Users\desktop\Documents\capstan>set version=v0.1.2-4-gdb6eb7e

c:\Users\desktop\Documents\capstan>go get github.com/cloudius-systems/capstan

c:\Users\desktop\Documents\capstan>go install -ldflags "-X main.VERSION v0.1.2-4
-gdb6eb7e " github.com/cloudius-systems/capstan

c:\Users\desktop\Documents\capstan>

うまくいきました。

OSvの起動

引き続きコマンドプロンプトからOSvを起動します。
コマンド一発で仮想HDDイメージのダウンロードから起動までやってくれます。楽ちん。

VirtualBoxマネージャーのウインドウを開いておくと動的にVMがセットアップされていくのが見えて楽しいです。

C:\Users\desktop\Documents\capstan>capstan run -f 8000:8000 cloudius/osv
Downloading cloudius/osv/index.yaml...
126 B / 126 B [=====================================================] 100.00 %
Downloading cloudius/osv/osv.vbox.gz...
73.09 MB / 73.09 MB [===============================================] 100.00 %
Created instance: cloudius-osv
OSv v0.11
eth0: 10.0.2.15

[/]% ←OSvのプロンプト

Webインターフェースを起動する

ホストマシンからhttp://localhost:8000にアクセスするとめでたくWebインターフェースが表示されます。
f:id:moguno:20140803204302p:plain

今日はここまで。

うまく行ってないところ

VMが終了できない。

WebインターフェースからshutdownしたりVirtualBoxマネージャーからACPIシャットダウンしてもOSvが終了しません。
コンソールにはこんなメッセージ。

exception nested too deeply
[backtrace]

例外が死ぬほど出てる感じ?

ブリッジモードで起動できない

capstanから-bオプションを使ってブリッジモードで起動しようとしてもVMが起動しませんでした。

Ubuntuユーザに送る!国産 Twitter クライアント「mikutter」の楽しみ方( 14.04版)

去年の年末に書いたmikutter Advent Calendar 15日目 Ubuntuユーザに送る、国産twitterクライアント「mikutter」の楽しみ方 - もぐてっくが時の流れで色々上手くいかなくなっているので14.04向けに加筆修正してみました。

Ubuntu14.04にmikutterをインストールしてみよう

(※コマンドラインに抵抗が無い方は、こっちでバージョン3.0系をインストールするのもアリです。
Ubuntu14.04でもmikutter 3.0が使いたい! - もぐてっく

mikutterはUbuntu13.10からUbuntuソフトウェアセンター経由でインストールが出来る様になりました。

さっそくソフトウェアセンターの検索窓に「mikutter」と入力し、インストールを始めましょう。

f:id:moguno:20131215003958p:plain

検索に引っかからない場合は、まずソフトウェアアップデートを行うと良い様です。


では、画面左側のランチャーからmikutterを起動して見ましょう。

mikutterが起動すると、流暢な日本語でTwitterのサイトから暗証番号(PINコード)を取得する様に促されます。

f:id:moguno:20131215004044p:plain

「あれ、mikutterってもしかしてアレ系のソフトなん・・・?」などと一抹の不安を抱きつつ、URLをクリックしてユーザ名とパスワードを入力し、PINコードを入手しましょう。

インスタントメッセンジャーを思わせるウインドウが表示されればセットアップは完了です。

f:id:moguno:20131215004208p:plain

起動直後は検索タブがアクティブなので何も表示されませんが、「t」アイコンのタブをクリックする事でタイムラインが表示されます。

プラグインを導入してみよう

mikutterの特徴はまぁ色々とあるのですが、その最たる物は強力なプラグイン機構だと思います。

mikutterのプラグインは非常に簡単に作成出来るため、有志の皆様が日々モリモリとプラグインを量産しています。

その結果、12/15の時点で公式Wikiに登録されているだけでも78種類。
その全てが日本語完備と言うちょっと凄い状況になっています。

  • 公式Wiki(7/30現在落ちてます。)

Plugin - mikutter Wiki

Mikuregator


プラグインTwitterを使いやすくするものからTwitter以外のWebサービスに対応するものまで実に多彩です。
プラグインを使いこなすことで、まさに自分だけのmikutterを手に入れることが出来ちゃいます。

それでは、プラグインの一般的な配布形態であるGitHubからのインストール手順を解説して行きます。


(1)ちょっとその前に俺の話を聞いてくれ。

実は、mikutterには「みくったーちゃん」と言うマスコットキャラクターが住んでいます。

f:id:moguno:20140730111031p:plain
(mikutter 3.0.3 icon.pngより)

はふぅん。可愛いですね。

彼女はmikutterのナビゲーター的存在で、実績やアクティビティなどのイベントを可愛く通知してくれます。

そんな僕らの心の清涼飲料水であるみくったーちゃんなのですが、残念ながらUbuntu版には彼女は出てきません。

(パッケージ登録時のMLを拝見すると、どうも初音○クと混同されてライセンス的な所がグレーと判断された様です。)

じゃあ、Ubuntu版ではどうなっているかと言うと、ピンク色の丸い人工知能がその役目を担っています。

f:id:moguno:20140730111336p:plain

これはこれでまっとうなTwitterクライアントっぽくてアリなんですが、やっぱりみくったーちゃんと一緒にいたい!

と言う訳で、今回は「みくったーちゃんに帰って来てもらうプラグインを導入することにします。

(2)GitHubのサイトを開く

それでは、拙作プラグイン「mikutter-okeri」を導入してみます。
まずは、GitHubのページに飛んでください。

moguno/mikutter-okaeri · GitHub

(3)GitHubで[Download ZIP](Zipでくれ)ボタンを押して、プラグインをダウンロードします。

f:id:moguno:20131215004915p:plain

(4)Zipファイルの展開

(a)ダウンロードしたZipファイルをアーカイブマネージャで開き、展開ボタンを押します。

f:id:moguno:20140730111429p:plain

(b)Ctrl + Hを押して隠しファイルを表示させ、.mikutterフォルダに移動します。

f:id:moguno:20131215005141p:plain

(c).mikutterフォルダにpluginフォルダを新規作成します。

f:id:moguno:20131215005352p:plain

(d).mikutter/pluginフォルダにZipを展開します。

これで~/.mikutter/pluginフォルダの下にmikutter-okaeri-masterフォルダが出来たはずです。

(5)展開したmikutter-okaeri-masterフォルダのフォルダ名から-masterを削除します。

f:id:moguno:20140730111519p:plain

プラグインの.rbファイルとフォルダ名を合わせないとプラグインとして認識してくれないので、ここ何気に重要です。


以上でプラグインの導入は完了です。
mikutterを再起動すると、みくったーちゃんとの感動の再会が果たせますv

f:id:moguno:20140730111648p:plain

もしもプラグインが気に入らなければ、フォルダを削除してmikutterを再起動すればOKです。

「バグ技(察し)」でもっと便利に

実はmikutterにはプラグインフォルダに特定の名前のファイルを置くと、何故だか昔のUIに戻ってしまう」と言う問題があります。

作者もこの問題は認識しており、Twitterのデザインガイドラインを逸脱する恐れがあるとして、ユーザに注意喚起を行っています。

しかしながらこの問題はフレームワークの基本設計に関わるため修正が困難で、現在に於いても解決策は見つかっていません。

そんな状況を良い事に、Twitterデザインガイドラインが気に入らない一部のユーザは、このバグ技を利用して直感的な旧UIを使っていると言う状況です(察し)。


ここでは、mikutter初心者の皆さんが誤ってこの問題を再現させないために、具体的な再現条件を書いておきます(察し)。

(1)~/.mikutter/pluginフォルダを開く。

f:id:moguno:20140730180558p:plain

(2)空のドキュメントを作成する。

f:id:moguno:20131215011507p:plain

(3)ドキュメントのファイル名をdisplay_requirements.rbに変更する。

f:id:moguno:20140730180616p:plain

これで再現手順は完了です。

mikutterを再起動すると、懐かしのUIが出現してしまいます。怖いですね(察し)。
下部の青い鳥がいなくなっていたり、時刻表示が絶対時刻になったりしていますね。

f:id:moguno:20140730180647p:plain

なんか実績「display_requirements」が解除されていますが、きっとバグでしょう(察し)。

mikutterを使う際には、誤って上記の手順を踏まない様に十分注意しましょう(察し)。

タブのアイコンサイズ変更&タブ名表示mikutterプラグインを作った

これなん?

mikutterのタブのアイコンサイズ変更とか、タブ名を併記させたりとか。

f:id:moguno:20140729130621p:plain


次の2つのプラグインで実現しています。

  • mikutter-tab-hardpoint

タブプラグインのための前提プラグイン
サンプルとしてタブのアイコンサイズを変更する機能が付いてます。

  • mikutter-tab-label

タブにタブ名を併記させます。要mikutter-tab-hardpoint。

インストール

GitHubからダウンロードしてプラグインディレクトリに格納して下さい。

moguno/mikutter-tab-hardpoint · GitHub
moguno/mikutter-tab-label · GitHub


設定

mikutter-tab-hardpoint

f:id:moguno:20140729130722p:plain

  • タブのアイコンサイズ

タブのアイコンサイズを変更出来ます。
mikutterデフォルトのサイズは24です。

mikutter-tab-label

f:id:moguno:20140729131011p:plain

  • 保存された検索
  • プロフィール
  • リスト

タグ名を表示するタブの種別を選びます。
デフォルトは「保存された検索」のみチェックしています。

mikutter-tab-hardpoint API

filter_tab_update_widget { |i_tab, widgets| }

  • i_tab: GUI::Tab

タブ

  • widgets: Hash

タブに追加するGTKウィジェットインスタンスを格納します。
ハッシュの構造は下記のYAMLの通りです。

left:
  []
center:
  []
right:
  []

ウィジェットは:left、:center、:rightの順にタブに追加されます。
また、ウィジェットは配列の若い順にタブに追加されます。