use strict; use warnings; use utf8; use lib 'lib'; use Plusen; my $p = Plusen->bootstrap({ config => { meta => { title => "‎Perlとリアルデバイスを繋げるって快感‎", author => 'Kazuhiro Osawa - ( Yappo )', email => 'yappo shibuya pl', }, plugins => [ { module => 'ScriptLoader::Simple' }, { module => 'Device::MozRepl', }, { module => 'Device::Term', }, { module => 'Device::Growl', }, { module => 'Device::ControlFromFile', config => { path => '/tmp/devsumi-ctl.txt' } }, { module => 'Device::VFD', config => { port => '/dev/tty.PL2303-0000101D' } }, ## { module => 'Device::MissileLauncher' }, ], }, }); __DATA__ === title: who are yappo list: - at the Infomarks Corp. - YAPC::Asia 2008 のすぽんさ - 'PAUSE ID: YAPPO' - CodeRepos maintainer === title: and === title: 征夷大将軍 img: seiitaishougun.jpg === title: ここまで3日間共通テンプレート === title: Termに切り替える === title: ここ一年くらい、いろんなデバイスをPerlから制御してきました === title: Make: Tokyo も開催されてデバイスが今熱いね! === title: 昨日はkawa.netの川崎さんがWiiRemoteしてましたね! === title: 僕もつかってるよ! === title: 今日は、そんなデバイスを繋げるだけの簡単な作業をやってて気づいた事をお話しするよ === title: 泥臭い話、ずるい話など === title: 理論的やら学術的な話は無い予定 === title: デバイスドライバ云々とかもね === title: 気軽にデバイスをhackするだけの簡単なお話です === title: Gainerネタは川崎さんと被っちゃうし本しかかってなくて教えられないからやらないよ! === title: というか、なんか昨日の川崎さんの発表でDevice::Gainerやってるみたいだからやんない === title: とおもったけど CodeRepos にあるから弄り放題! === title: そうそう、今回のデバイスはMacが前提気味です>< === title: Windows is too bad! === title: 本題 === title: デバイスってなに?という定義 list: - Serial Port - USB - Bluetooth === title: LANとかVGAとかあるけど、そっちは今回扱わない。先ほどの3種類を扱います。 === title: Serial Port list: - シリアルポートなんです - Device::SerialPort - Win32::SerialPort - OS依存的な何かがあります - それぞれインタフェイス互換性ある - Device::SerialPort::Any 欲しい? === title: 使い方 1/3 code: | if ($^O =~ /win/i && $^O !~ /darwin/) { $SERIAL = 'Win32::SerialPort'; } else { $SERIAL = 'Device::SerialPort'; } eval "require $SERIAL"; $@ and carp "$SERIAL is not installed"; === title: 使い方 2/3 code: | my $serial = $SERIAL->new($opts{port}) or die; $serial->user_msg(1) or die; $serial->error_msg(1) or die; $serial->parity('none') or die; $serial->databits(8) or die; $serial->stopbits(1) or die; === title: 使い方 3/3 code: | $serial->baudrate( $config->{baudrate} || 19200) or die; $serial->handshake('none') or die; $serial->read_const_time(1000) or die; $serial->read_char_time(10) or die; $serial->write_settings or die; === title: ね、簡単でしょ? === title: Device::VFD::GP1022 ってモジュール作るのに使った === title: VFDの話 list: - 秋葉原の秋月って店で売ってる - 電光掲示板 - GP1022 - シリアルで自由に文字をながせる - 独自プロトコル、独自仕様 - でも仕様が公開されてるよ - 仕様どおりにコード書けば楽 === title: コード見る? === title: 応用例のサイト === title: シリアルデバイスは楽だよ === title: 仕様がわからなければ、頑張ってhackだ! === title: でも、仕様がわかり易いのだけやればいいよ === title: デバイスハックのポイント1 list: - 仕様がわかるデバイスをhackしよう! === title: SerialPort おわり === title: USB === title: libusb を Inline::C で使えばおk === title: とIngyの友達の嫁の友達の取引先の弟の友人の知人の知人の知人ぐらいの人がいってた === title: Mac::MissileLauncher 作りたいからやった (昨年のYAPC::Asia hackathonの成果物) === title: Device::USB ってのがあるんだけど、なんかうまく動かないからInline::Cした === title: すでに Device::USB::MissileLauncher って CPAN モジュールがあるから作るのは楽でした === title: デバイスハックのポイント2 list: - 既に実装されてるデバイスの再実装は超簡単 === title: コード見る? === title: (Ingy döt Net)++ === title: USB おわり === title: Bluetooth === title: これがやっかい === title: CPANに良さげなモジュールが無い === title: Net::Bluetooth ? === title: Mac でうごかん! === title: そもそもOS依存し過ぎ === title: 自分の場合はMac OSでやりたかったのでCocoaの知識が必要でした === title: でもラッキーな事に僕はWii Fitの板を弄りたいだけでした === title: でもラッキーな事に僕はWii Fitの板を弄りたいだけでした === title: DarwiinRemote list: - Mac OS X に対応した - Wiiリモコン制御ソフト - バランスWiiボードには対応してない - ソースコード公開してる - これ重要 === title: xcode code: | - (void) setLEDEnabled1:(BOOL) enabled1 enabled2:(BOOL) enabled2 enabled3:(BOOL) enabled3 enabled4:(BOOL) enabled4 { unsigned char cmd[] = {0x11, 0x00}; if (_isVibrationEnabled) cmd[1] |= 0x01; if (enabled1) cmd[1] |= 0x10; if (enabled2) cmd[1] |= 0x20; if (enabled3) cmd[1] |= 0x40; if (enabled4) cmd[1] |= 0x80; === title: 既存のコードをちょろっとpatchあててWiiFitの板が使えるようになった === title: でもこれは、Macのライブラリ的なFrameworksって奴しか作れなくてPerlで制御できない! === title: そこで CamelBones ですよ! === title: CamelBones list: - Mac の Cocoa と Perl のブリッジ - Ruby CoCoa の Perl 版 - でも型とかそういう実装あまい - メンテナ頑張れ! === title: CamelBones使って癖を回避すれば、簡単にMac OSネィティブな実装がPerlで書ける === title: Mac::WiiRemote とか作ったよ === title: デバイスハックのポイント3 list: - 既に実装されてるデバイスの再実装は超簡単 === title: ここで板とかのデモ === title: ここからデモようのダミーページ === title: Moose === title: ooseM === title: oseMo === title: seMoo === title: eMoos === title: Moose === title: ooseM === title: oseMo === title: seMoo === title: eMoos === title: Moose === title: Mooose === title: Moooose === title: Mooooose === title: Moooooose === title: Mooooooose === title: Moooooooose === title: Moose === title: ooseB === title: oseBo === title: seBoo === title: eBoos === title: Boose === title: だれ? === title: 例のモジュールと思った人? === title: いま === title: MoCo === title: の === title: プレゼン === title: ながら === title: だみーぺーじかいてる === title: 今naoyaさんがセクシーっていった === title: MoCoって === title: しなもんがモコモコしてるから === title: MoCoって名前かとおもった === title: そろそろ === title: でもおわりね === title: 10 === title: 9 === title: 8 === title: 7 === title: 6 === title: 5 === title: 4 === title: 3 === title: 2 === title: 1 === title: Bluetooth おわり === title: 携帯電話 === title: いきなりデモ === title: 携帯電話 おわり === title: まとめ list: - 先人の知恵や - 成果物を活用して - 楽にデバイスハックしよう! === title: おわり === title: One More Thing ... === title: Chumby Hackathon Tokyo img: chumby.jpg === title: next week にやるみたい === title: ようするに === title: Overlast企画の発注したChumbyが届いたよ! === title: これ! === title: USBの無線LANレシーバ用意してまっててね! === title: overlast++ === title: 本当にこれで終わりです