Ubuntu12.04LTS + iPhone5 でUSBテザリングをする方法

iPhone5では日本でもテザリングが解禁になったため、お外で一時的にパソコンをネット接続する際にとても重宝するようになりました。私はUbuntuの入ったPCをお外に持ち出すことが多いのでWifiテザリングを利用していたのですが、カンファレンス等で沢山の人が集まるとwifiが汚染されて全く繋がらなくなることが多いです。

そこで、UbuntuでUSBテザリングを試みたのですが、残念ながらUSBケーブルを差しても何も起こりません。。

googleさまにお伺いしたところ、とても良いページを見つけました。

USBテザリングに対応させる方法(お手軽版)

お手軽版のやり方は、カーネルモジュールにバイナリパッチを当てます。そのため、カーネルをいちいちコンパイルする必要がありません。

$ cp /lib/modules//kernel/drivers/net/usb/ipheth.ko (適当なディレクトリ)
$ bless (適当なディレクトリ)/ipheth.ko
(バイナリエディタ bless を使って、下記を書き換える)
  • 検索機能を使って '9412' を探し、該当箇所を 'A812' に変更
  • 変更した後、保存して終了
$ rmmod ipheth
(既にiphethがインストール済みの場合)

$ insmod (適当なディレクトリ)/ipheth.ko

うまくいけば、USBケーブルを接続するとethernetインタフェース名が増えているはずです。

東京Ruby会議10 参加してきました

1月13-14日に開催された東京Ruby会議10に参加してきました。また、14日はmrubyネタで発表してきましたので、軽くレポートします。

会議について

東京Ruby会議(http://tokyo10.rubykaigi.info/)は、RubyKaigi のような会を地方でも開催しよう、という趣旨で始まった会だそうです。私は、今回初めて東京Ruby会議に参加させていただきました。今回の開催場所は千葉市美浜文化ホールという場所で、なんと東京ではなく千葉県(しかも幕張メッセの東)でした。私は埼玉県在住なので、流石に千葉は遠いですね。。でも、当日会場エントランスに張り出された出身地の地図を見ると北は北海道、南はオーストラリアから参加されている人もいらっしゃるようでした。

発表内容について

「軽量Rubyで実現する柔軟なルータ -SEILへの軽量Rubyの組み込み- 」というお題目で、発表してきました。あまり説明が上手なほうではないのでうまく参加者の皆様に伝わったかどうか怪しいですが...メッセージとしては以下の3つを詰め込みました。

  • Rubyユーザのみなさん、mrubyがあれば、大好きなRuby言語を使って、組み込み機器開発の世界にどんどんコミットできますよ!
  • mrubyは組み込み機器だけでなくアプリに組み込んでも便利なんです
  • mrubyは生まれたばかりのため、貢献できることが山ほどありますよ!

といった感じです。

今回の発表は組み込み開発系のネタを扱っているため、会議の参加者層から想像するとアウェイな感じになるかも..と考えていたのですが、いざ会議に参加してみると組み込みネタやホームオートメーションネタもありで、参加者の皆さんの興味範囲が驚くほどに広いことが分かりました。もう少しコードや技術寄りの話を織り交ぜても良かったのかもしれません。

会議全体の感想

東京Ruby会議はフレンドリーな雰囲気の会議で、とても気に入りました。おそらく、そのように感じるのはスタッフの皆様のご尽力の賜物なのだと思います。また、バッジ交換やアンチボッチランチ/ディナーなど、初めて会議に参加されても寂しい思いをしない仕掛けが沢山用意されている点も素晴らしいです。大人数の集まりでも、工夫次第でコミュニティの絆を深めることができる、素敵なイベントでした。黒Ruby会議には参加しませんでしたが、きっと面白いネタを肴にワイワイと盛り上がっていたのでしょうね。
一つだけ残念な点は、天候不良のため14日の講演が14時以降はキャンセルになりました。こればかりは運が無かったとあきらめるより他ありません;-(

Raspberry Pi + mruby その1

昨年末に、Raspberry Pi を入手しました。あまり試す時間が取れなかったのですが、お正月を利用して色々と調べたメモを残しておきます。


USBシリアルコンソール

Raspberry Pi用に販売されている USB to TTL Serial Cable を購入しました。Raspberry Piには GPIOポートがあり、デフォルトではGPIO14, GPIO15番ピンにシリアルコンソールがマッピングされています。
(http://elinux.org/RPi_Low-level_peripherals)
上記写真のような配列で接続すると、電源もUSBシリアルケーブルから供給されるため、別途電源用のUSBケーブルを用意する必要はない模様です。

PC側は、115200bpsに設定します。USBシリアルケーブルは、Linux, Mac, PC全てに対応しています。但し、私が試した限りでは、Windows8についてはドライバが未対応のため動作しませんでした。

Raspbian “wheezy"

まずは、www.raspberrypi.org から提供されているOSイメージを試しました。
wheezyは Raspberry Pi 向けにカスタマイズされたdebianで、設定用のコマンド(raspi-config)がインストールされています。SDカードにOSイメージを書き込んだだけだと、容量が固定になってしまうので、本コマンドを用いることでファイルシステムのリサイズができます。

wheezyを軽く使った印象としては、swapパーティションは極力利用されないような設定になっていたり、mountオプションに noatime が付けられていたりと、SDカードの消耗を最小限に抑えるチューニングがされていることを除けばdebianそのものとして利用できる模様です。

mrbgemsの使い方

本日、本家のmrubyに mrbgemsが pull-up されたので、mrbgemsの使い方について簡単にまとめておきます。

mrbgemsとは

mrbgemsとは、mruby拡張ライブラリを簡単に組み込むことができる仕掛けです。crubyのgemと考え方は近いですが、mrubyの場合は機器やアプリへの組み込みが主体なので、ランタイムではなくビルドタイムに拡張ライブラリを組み込みます。

使い方

本家mrubyにmrbgemsが組み込まれはしましたが、現在のところ本機能はdefault disableになっています。mrbgemsを有効にするには、以下の箇所を書き換える必要があります。
Makefile(追加)

export ENABLE_GEMS = true

include/mrbconf.h

...
#define DISABLE_GEMS           /* Package Manager mrbgems */
//#define DISABLE_GEMS         /* Package Manager mrbgems */
...

mrbgems/GEMS.active (サンプルコードを追加する場合)

$(MRUBY_ROOT)/doc/mrbgems/ruby_extension_example

あとは、通常通り make コマンドを実行するだけで、ruby_exension_example が自動的に組み込まれます。mrbgemsはソースコードのパスにmrubyのソースコードの外を指定することもできるので、mrbgemのソースコードのみを配布することが簡単にできます。

EAPL-Trainer mruby 試してみました

株式会社アイ・エル・シーさんが発売されたmruby学習キット「EAPL-Trainer mruby」をEmbedded Technology 2012 で購入しました。簡単ながら動作テストをしてみましたので、レポートとしてまとめておきます。

EAPL-Trainer mrubyとは

株式会社アイ・エル・シーさんが発売されたmruby学習キットです。組み込みボードとしては、ルネサス エレクトロニクス社が「がじぇっとるねさす」として企画・開発された、GR-SAKURAボードを用いています。GR-SAKURAは"arduino"とIOポートがピン配列互換になっているため、arduinoで提供される「シールド」と呼ばれる拡張デバイスが一部使用できるそうです。


できること

GR-SAKURAボード上でmrubyプログラムを実行することができます。
開発環境はArduino互換のため、下記のようにArduinoC言語開発と同じような要領でコードを記述することができる模様です。

arduinoで LEDを点滅
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}
EAPL-Trainer mruby でLEDを点滅
def setup() 
    gr_pinMode($PIN_LED0, $OUTPUT) 
end 
def loop() 
    gr_digitalWrite($PIN_LED0, 1) 
    gr_delay(100) 
    gr_digitalWrite($PIN_LED0, 0) 
    gr_delay(100) 
end

軽く調べて分かったこと

  • GR-SAKURAはRXduinoがインストールされている模様です。GR-SAKURAボード+C言語の開発はルネサス テクノロジさんが提供しているweb上のサービスを用いることで出来ますが、RXduinoのソースコード自体はオープンソースではない模様です
  • EAPL-Trainer mrubyには、GR-SAKURAボード用のmrubyが組み込まれています。ファームウェアを入れ替えるためには、おそらく下記のものが必要になると思われます
    • RXduino ソースコード (2012年12月7日以降は、特殊電子回路株式会社さんからライセンス販売される模様)
    • ルネサスE1エミュレータ
    • EAPL-Trainer用にカスタマイズされたmruby (株式会社アイ・エル・シーさんが提供してくれることを期待..)

個人的には、タッチパネル付きLEDよりEthernetを使ってみたいところですが、開発環境を自前で用意するのはそれなりに大変そうですね。

KTM Freeride 350 試乗しました

JNCC WEX R2(爺ガ岳) に出場してきました。前日にはKTMなどインポータ主催の試乗会があり、遂に KTM Freeride 350 に試乗することができました!
以下に試乗レポートをまとめます。


  • エンジンが極低速でも良く粘る。オフロード車でトライアルをしても楽しめそう
  • ハンドル切れ角が大きい
  • フロントホップが簡単にできる
  • フォーミュラの油圧クラッチを搭載。クラッチが軽く操作性が良い
  • 足つきが良い(セローより少し高い程度)
  • 電動ファン付きの小型ラジエターを搭載。低速での走行を継続してもオーバーヒートの心配が少ないし、ラジエターがせり出していないためぶつけて壊す心配が少ない
  • エアフィルタは Twin Air製、かなり小型なスポンジタイプのフィルタが使われていました

Freeride 350はアクセルを開けてもEXC程にはパワーが出ませんが、私の腕前であれば充分に速いです。車検を通す必要がなければ、サイレンサー等を変えることでパワーを向上させることができるのかもしれません。

T-RIDE のパーツが入手できない状態が続いているので、そろそろKTMへの乗り換えを真剣に検討中です。競技に使うバイクは部品を安定供給してくれることがとても大切ですね。

和製IaaSって、実はVPSだよね?

最近、Amazon EC2 や OpenStack を使って感じたことをまとめます。

  • EC2やOpenStackの設計思想
    • 計算ノードは、計算のみに専念させる。データの永続化は提供しない
    • 永続化したいデータと、そうではないデータの選別をユーザがしなければならない
    • ユーザには、今までと異なるサーバ管理の仕組みをマスターしてもらわなければならないが、その代わりIaaSのメリット「伸縮性」を提供できるようになる
  • 和製IaaSの設計思想
    • 手軽に利用できるVPSを提供する
    • ユーザには、今までと同じやり方でサーバ管理をしてもらえるが、そのかわり「伸縮性」は提供できない

EC2は日本のIaaSとは違い、インスタンスを削除(terminate)した時点で全てのデータは失われてしまいます。ストレージに永続性が無いことをデメリットと考える人が結構いるかもしれませんが、このことはIaaSで「伸縮性」を実現するためには絶対に必要な要件だと考えられます。

まず、永続性が無いことがユーザにもたらすメリットとしては、管理者がOS管理の手間から解放されます。EC2であれば、インスタンスを起動すれば常に最新の(セキュリティパッチ等の施された)OSイメージをブートさせることができます。また、サービスホストの構築はplainなOSイメージから cloud-init の仕掛けを用いて自動構成できるので、(設計次第では)沢山のインスタンスプログラマブルに設置できるようになります。

IaaS提供者側のメリットとしては、和製IaaS(≒VPS)に比べて運用コストを圧倒的に下げることができます。
和製IaaSの場合は、ユーザに提供しているストレージは全て永続性があるため、堅牢なファイルサーバを用意してiSCSI等を用いてマウントする必要があります。堅牢なファイルサーバを作るためには高価なアプライアンスが必要になるため、コストが上昇します。また、ネットワーク経由でストレージをマウントすることになるため、性能が低くなることも考えられます。

EC2やOpenStack等の場合は、OSイメージを計算ノードにコピーした上でCOW(Copy On Write)のストレージをローカルに作成すれば良いので、特別なファイルサーバも不要になります。

最近は日本でも Noah や さくらのクラウド など、EC2 に引けを取らない価格帯のサービスが提供されるようになりましたが、残念ながらコストの面では、和製IaaSはEC2に勝てないように思います。