RubyでホストのMac Addressを取得する方法(How to Use macaddr-1.2.0)
RubyでそのOSで認識されているネットワークインタフェースのMacアドレス一覧を取得する方法.
素直にifconfigを呼び出しでパースするのが早い気もするけど,macaddrなるgemsがあったので使ってみた.
インストールは
sudo gem install macaddr
でおわり.でも僕の環境ではsystemuが無いと怒られてrequire出来なかったのでsystemuも入れた.
sudo gem install systemu
Rdocを読む限りメソッドは2つ.
1つは一番若い名前のインターフェースのmac addressを取得する.
もう一つは複数のインターフェースが有る場合に全部のインターフェースのmac addressのリストを返す.
require 'rubygems' require 'macaddr' p Mac.addr p Mac.addr.list
サンプルコードはこれで終わり.
RDocにはifconfigのラッパーだと書いてある.
したがって,Bridge Interfaceなども含めたifconfig -a で見えるmac addressを持つインターフェースは全部取れる.
本当にmac address,及びそのリストだけ取得される.
贅沢を言えば論理名を同時に取得するメソッドが欲しかった.
Adobe HTTP Dynamic StreamingとOSMFPlayerでストリーミングサーバー
大量に持っているmp4ファイルをどこからでも見れるようにストリーミングサーバーを作成したくて,色々調べてみた.
無料で作れる物としてはApacheにモジュール導入するだけで済むAdobe HTTP Dynamic Streaming+OSMFPlayerが一番イケてそうだったので,試しに導入してみたメモ.
導入環境はDebian 5.0.8 amd64 + Apache2.2.9
Adobe HTTP Dynamic Streaming自体はApache2.2以降なら動くらしい.
まず,Adobeのサイトから以下の3つの物をダウンロード(無料で作れるAdobeアカウントが必要)
HTTP Origin モジュール
File Packager
OSMFのサンプル
今日現在ダウンロードするとファイル名は以下の3つ.
adobe_f4f_apache_module100_linux_x64.zip
adobe_f4fpackager100_linux_x64.zip
OSFMPlayer_zeri2.zip
OSMFPlayerのファイル名がおかしいのは仕様だと思いますw
解凍した中に入っているファイル名の綴りは"OSFM"です.
まず,apacheのモジュールの導入.
unzip adobe_f4f_apache_module100_linux_x64.zip
cd HTTP_Module_1.0_Linux_x64/adobe/f4fmodule
中に以下の3つのファイルが入っている.
libexpat.so.1
libF4V.so
mod_f4fhttp.so
これをモジュール置き場にコピー.
apache2からmoduleは/etc/apache2/mods-availableに実体を置き,/etc/apache2/mods-enabledにシンボリックリンクを張る仕様になったのでその通りに...
sudo cp libexpat.so.1 libF4V.so mod_f4fhttp.so /etc/apache2/mods-available/
cd /etc/apache2/mods-enabled
sudo ln -s ../mos-available/libexpat.so.1 libexpat.so.1
sudo ln -s ../mos-available/libF4V.so libF4V.so
sudo ln -s ../mos-available/mod_f4fhttp.so mod_f4fhttp.so
Apacheに設定しているDocumentRoot(Defaultだと/var/www)の中あたりに配信するファイルを作成するディレクトリを作成.
バーチャルホストの設定とかはご自由に.
sudo mkdir /var/www/video
次に,Moduleへ処理を渡す設定ファイルを作成する.
sudo vim /etc/apache2/conf.d/dstreaming.conf
ファイルの中身は以下の内容
(備考)moduleのパスは絶対パスを書かないとうまく動かなかった...
LoadModule f4fhttp_module /etc/apache2/mods-enabled/mod_f4fhttp.so
HttpStreamingEnabled true
HttpStreamingContentPath "/var/www/video"
これで設定は終わるのでApacheを再起動
sudo /etc/init.d/apache2 restart
次に動画の変換.
File_Packerを解凍します.
unzip adobe_f4fpackager100_linux_x64.zip
cd HTTP_Module_1.0_Linux_x64/adobe/f4fmodule
中に実行バイナリとライブラリが入っているので,ライブラリを所定の場所へ移動.
実行バイナリは/usr/binあたりに入れます.
sudo cp libexpat.so.1 libF4V.so mod_f4fhttp.so /usr/lib/
sudo cp f4fpackager /usr/bin/
cd ~/
これで動画が変換できるはずなのでmp4ファイルを用意して変換します.
変換と言っても,ファイルの分割とマニフェストファイル作成が主な作業なのですぐ終わります.
sudo f4fpackager --input-file MP4FILE.mp4 --output-path /var/www/video
#MP4FILEの場所は適宜読み替えてください
これで/var/www/videoに.MP4FILE.f4m, MP4FILE.f4f, MP4FILE.f4xの3つのファイルが出来てるはずです.
次にブラウザでビデオを見るためのOMSFPlayerを設定します.
これは自由に作れるので,後に改造すれば良いんですが,とりあえずAdobeのサンプルをそのまま設置して見ます.
sudo cp OSFMPlayer_zeri2.zip /var/www/
cd /var/www
sudo unzip OSFMPlayer_zeri2.zip
これで
OSMFPlayer.htmlその他のファイルがDocumentRootに展開されます.
imagesとかscriptsなんてフォルダが出来るので,webコンテンツを既に持っているなら/var/www/playerみたいなディレクトリに展開する方が良いかもしれません.
これでブラウザで以下のようにアクセスすれば動画が見れます.
http://SERVER_ADDRESS/OSMFPlayer.html?url=http://SERVER_ADDRESS/video/MP4FILE.f4m
以上です.
iptablesや.htaccessの設定は各自ご自由に.
動画を追加したり,コンテンツリストとサムネイルを表示するようなフロントエンドが欲しくなるな.今度作るかな...
Synergyの導入(MacがサーバでUbuntuがクライアント)
23inchワイドディスプレイでMacとUbuntuのデュアルディスプレイ環境を構築していたが,キーボードとマウスは1セットにしたい.
これまではELECOMのKVM SWITCHで対応していたけど,KVMでマウスキーボードとメインディスプレイは切り替わるが,サブディスプレイは入力切り替えを別途しなければいけなかった.
また,MacとUbuntuで別々な作業をしたいこともあるし,MacとUbuntuでディスプレイを一台ずつ.それで居てマウスキーボードを共有できる方が便利じゃないかと考えた.
これを実現するのがSynergy.複数台のコンピュータで,どれか一台に繋がっているマウスとキーボードを共有できる.
ディスプレイが並んで居ることが前提で,マウスカーソルが隣のディスプレイと自由に行き来できるようになり,マウスカーソルが有る方にキーボードも繋がっていることになる.
今回はキーボードとマウスはMacにつなげる.UbuntuはSynergy経由でMacのマウスとキーボードを共有.
sudo port install synergy
設定ファイルはサーバになる方(キーボードとマウスが物理的に繋がってるマシン)にのみ必要.
Mac Portsでインストールすると,/opt/local/etc/synergy/に設定ファイルのサンプルがあるので,それを同じ場所にコピーして編集する.
sudo cp /opt/local/etc/synergy/synergy.conf.sample /opt/local/etc/synergy/synergy.conf
sudo vi /opt/local/etc/synergy/synergy.conf
設定内容は各マシンに名前をつける.各名前のマシンのIPアドレス,ディスプレイの位置関係を設定する.
今回は左のディスプレイがMac,右がUbuntu.
設定内容は以下のような感じ.synergy.conf.sampleにはディスプレイが上下の場合の設定も書いてるので,必要で有れば参考に.
section: screens
mac-air: ←Macの名前
192.168.0.63: ←MacのIP address
dev-ubuntu: ←Ubuntuの名前
192.168.0.30: ←UbuntuのIP Address
endsection: links
mac-air:
right = dev-ubuntu ←mac-airのディスプレイに対して右にUbuntuのディスプレイdev-ubuntu:
left = mac-air ←dev-ubuntuのディスプレイに対して左にmac-airのディスプレイend
設定が終わったら,実行.
sudo synergys
オプション無しでデーモンで起動する.-fをつけるとデバッグメッセージが表示できる.
apt-get install synergy
Ubuntuは今回はクライアントとして動作させるので設定は不要
sudo synergyc --name dev-ubuntu 192.168.0.63
debian 6.0.1にmozc導入
商用OSにかたっぱしからATOKを入れる僕的にDebian標準のAnthyは正直イラッとするのでMozcを導入してみた。
メモ。
参考はこの辺なんだけど、僕の環境ではちょっと違ったのでメモ。
ビルドに必要パッケージのインストール
sudo apt-get install libibus-dev libqt4-dev libssl-dev libcurl4-openssl-dev libssl-dev libprotobuf-dev protobuf-compiler scim libscim-dev gyp libgtest-dev libzinnia-dev svn-buildpackage
debパッケージ作成
mkdir /usr/src/mozc
cd /usr/src/mozc
sudo svn co http://mozc.googlecode.com/svn/trunk/src
cd src
debuild -uc -us
インストール
sudo apt-get install ibus python-ibus
sudo dpkg -i ../ibus-mozc_x.x.x.x_*.deb ../mozc-server_x.x.x.x_*.deb ../mozc-utils-gui_x.x.x.x_*.deb
~/.bashrc の最後に以下を追加
export XMODIFIRES="@im=ibus"
export GTK_IM_MODULE="ibus"
export QT_IM_MODULE=ibus
再起動して
gnome の左上のメニューの
システム->設定->入力メソッドの切替器
を選択して一覧から"Use iBus(ibus)"を選択.OK.
続いて
システム->設定->iBusの設定
を選択して,インプットメソッドのタブのなかで"インプットメソッドの選択"から
日本語->Mozc
を選択.追加.
これで標準でCtrl+Spaceで Mozcが起動するはず.
メニューバーの右端のMozcのアイコンを選択して
レンチのマーク->Property
で細かい設定ができる.
変換方法をATOKライクにしたかったらここで設定できる.
Rubygems net/sshとnet/ssh/shellの関係
最近までrubyでsshをはった処理を書くときにはnet/sshを使っていた。
でもnet/sshでは、単発処理はかけるし、その標準出力は取得出きるけど、
cd hogehoge
touch hoge
cd
ln -s hogehoge/hoge fuge
みたいなディレクトリを移りながらの作業は記述できなかった。
そしたら、そういう目的用にnet/ssh/shellなるgem packageがあるのを発見。
この辺を参考にしながら導入した。
いくつか引っかかったのでメモ。
導入環境はDebian6.0.1
Ruby1.8.7 Rubygems1.3.7
net/sshが入っている事が前提なので、無ければ最初に
sudo gem install net-ssh
次に、 net-ssh-shellのインストール
普通にgemで入れる事もできるが、gemで入るバージョンにはバグがあるらしいのでgitで最新版を入れる。
ここで、添付のREADMEどおりにやったら、僕の環境ではうまくはいらなかった。
ので、ちょっとアレンジ。
cd net-ssh-shell
sudo gem install bundler
sudo gem install echoe
sudo gem build net-ssh-shell.gemspec
これでカレントディレクトリに
net-ssh-shell-0.2.0.gem
ができてるはずなので
sudo gem install net-ssh-shell-0.2.0.gem
で完了。
一応サンプルプログラム。
SSHセッションの呼び出し方はnet-sshとオプション共々同様。
#!/usr/bin/env ruby require 'rubygems' require 'net/ssh' require 'net/ssh/shell' Net::SSH.start('HOSTNAME', 'USERNAME',:keys =>'~/.ssh/id_rsa') do |ssh| ssh.shell do |sh| sh.execute! "cd /tmp" sh.execute! "touch testtest.test" p sh.execute! "exit" end end
Ruby-gtk2のProgressBarの色を変える
gtk2のProgressBarを使っていて,バーがいっぱいになったら色を変えたいとする.
これにちょっとはまったのでメモ.
(目標の写真)
ProgressBarの色を変えたい場合は
sample_progress.modify_bg(Gtk::STATE_PRELIGHT,Gdk::Color.new(RED,GREEN,BULE))
みたいに書く.
RED,GREEN,BLUE はそれぞれ16bit(0~65535)の数字.
Gtk::STATE_NOMALじゃないかと思うんだが,STATE_NOMALだとバーの背景色が変わる.
そして,modify_fgなんじゃ無いかと思うんだが,modify_fgだとProgressBarのテキストの色が変わる.
英語のドキュメントを読んでもはっきりとした理由はわからんかった(汗
で,サンプルコード.
#!/usr/bin/env ruby require 'gtk2' #バーは2個 BarNum = 2 #PrgressBarを作成 progreBars = [] BarNum.times do |i| progreBars[i] = Gtk::ProgressBar.new progreBars[i].text = "#{format("%03d",i + 1)} " end ##Windowの終了 window = Gtk::Window.new window.signal_connect("delete_event"){ false } ##プログラムの終了 window.signal_connect("destroy"){ Gtk.main_quit } ##2つのProgressBarを縦に整列 packbox = Gtk::VBox.new(false, 0) packbox.pack_start(progreBars[0], true, true, 0) packbox.pack_start(progreBars[1], true, true, 0) #各ウィジットをwindowに貼り付け,タイトルセット. window.border_width = 10 window.add(packbox) window.title = "Ruby/GTK+2 Test Code" window.show_all #0.1秒間隔でランダムにバーを進める Thread.start do loop do barid = rand(BarNum) if progreBars[barid].fraction < 1.0 then progreBars[barid].fraction += 0.1 progreBars[barid].text = "#{(progreBars[barid].fraction * 100.0).round}" + "\%" if progreBars[barid].fraction >= 1.0 then progreBars[barid].modify_bg(Gtk::STATE_PRELIGHT,Gdk::Color.new(0,65535,0)) end end if progreBars[0].fraction >= 1.0 and progreBars[1].fraction >= 1.0 then return 0 end sleep(0.1) end end Gtk.main