RBC勉強会で組み込みRuby
25日土曜日に福岡Rubyコンテンツセンターで久しぶりのRBCの勉強会が開かれました。
福岡CSKさんのご協力で開発中の製品を使わせて頂きました。
http://enzi.cc/
この製品の説明は上のサイトにお任せするとして、僕個人的にはハードウェアを触るのは20年ぶりで、抵抗の読み方とかコードの色の話は「あーそんなんあったよね、中身覚えてないけど」という感じのダメっぷりです。かろうじてLEDとか抵抗の役割くらいは分かる感じ。
そんな感じなので、いきなりボードを渡されても何をしたらいいのか分からんとなってしまいましたが、福岡CSK三牧さんが最初にLEDを光らせる「LEDチカチカ」略して「エルチカ」のデモを見せてくれたので、まずはそれを真似することを目標にしました。
まずはプログラムなしで、LEDを点灯させる配線をつないだだけで、光った「おー」と喜ぶ初心者っぷり。
次は、配線を変えてデジタルのIOにつないで、いよいしょエルチカを体験。
https://github.com/akm/rbc_mruby/blob/master/cds.rb#L19
enziの開発のサイクルはかなリ分かりやすかったです。
1. プログラムを記述
2. サイトのシミュレータでコンパイル=>実行ファイルダウンロード
3. SDカードに実行ファイルをコピー
4. ボードにSDカードを挿入
5. ボードを再起動
6. ターミナルで出力を確認(問題があったらターミナルで分かる)
7. 1に戻る
コンパイルの時間とか考えるとAndroidの実機テストより軽い感じです。
で、三牧さんのコードで動くことを確認したら、ちょっと要領が掴めてきたので、光センサを使ったものを作ろうということになりました。光センサが明るさを感じなかったらLEDを点灯し、明るさを感じたら消灯するというものです。
ちなみにCdSと硫化カドミウムの意味で、正しくは「硫化カドミウムセル」という名前の「フォトレジスタ」というものなのだそうです。
http://ja.wikipedia.org/wiki/フォトレジスタ
使った製品はこちら。
http://doc.chipfind.ru/hamamatsu/p3807r.htm
やってみてわかったんですが、通常は0を出力していて、暗くなると正の値を返すんですね。なるほどー。やってみると非常にわかりやすい。書いたコードがこちらです。 https://github.com/akm/rbc_mruby/blob/master/cds.rb#L6
で、ここらへんでだいぶわかってきたので、今回誰もやらないであろうと予想されていた通称「7セグ」を選択してみることに。
製品のマニュアルはこちら
http://rohmfs.rohm.com/en/products/databook/datasheet/opto/led_display/numeric/lb-603fp.pdf
うひー、意味わかんねー。
三牧さんや前席の古川さんのアドバイスとペアを組んだウチダさんの見事な回路構成によって、なんとかなっちゃうものなんですね、かなりサクッと書けました*1。
https://github.com/akm/rbc_mruby/blob/master/led_display.rb
で、実際に動いたものがこれです。
http://www.youtube.com/watch?v=7zLfmLnpnSM
もうこれができたらだいぶ満足してしまって、色々デバイス使いたいよねーとかネットワーク繋ぎたいとかそんな話をしていました。
他のペアの皆さんも温度センサを使ってLED RGBを制御したりしてました。とても楽しい勉強会でした。
僕らが作ったものは冷静に考えると特に大したモノではないんですが、13:00 に始まった勉強会で、16:00にはこれが出来上がっていたのは素晴らしい敷居の低さだと思います。これでちょっとハードウェアに近づくことができたかなと思えました。
実際のものづくりはもっと色々考えなきゃいけないことがたくさんあるんだと思いますが、初心者にとっては入り口を広げるためにとても強力なツールだと思います。
製品のリリースが待ち遠しいです。
http://enzi.cc/
ボードを貸していただいた福岡CSKの岡部さん、石井さん、三牧さん、勉強会を開いて頂いた島村さん、他さんかしてくださった皆さん、ありがとうございました。
*1:currをcuurと間違えたので時間的に結構ロスしましたがw
schema_comments-0.2.0 リリース
schema_comments-0.2.0ーalpha5 から9ヶ月も過ぎてしまいましたが、リリースしました。
https://rubygems.org/gems/schema_comments
基本的な機能は変わってませんが、MySQL用のスキーマの出力が変わっています。もし前の方が良い、という方がいたらご連絡ください。
その他、ドキュメント、ソース、放置しっぱなしの態度その他諸々にご意見のある方はぜひ、ここのコメントか、pull requestかtwitterか何かでお知らせください。
https://github.com/akm/schema_comments
[ruby] 福岡Ruby会議01
行ってきました、福岡Ruby会議01。本当すばらしいイベントでした。
まとめはこちらですね。
- 主催者 @Spring_MT のブログ http://spring-mt.tumblr.com/post/37018290719/ruby-01
- @ayato_p のまとめ http://togetter.com/li/416276
僕はあんまり皆が取り上げてないところを書いてみます。
1. 「フィードバックループを伸ばしていく」
@kakutani の基調講演での表現。正確じゃないかもだけど、僕の中でじわじわきてます。
まずは近所で小さくフィードバックをもらえるようにして、だんだん遠くの人からもフィードバックをもらえるようにしていく、ってことをイメージしました。
2. Rails cells
@Spring_MT のプレゼンで知りました。そう言えば、そういうのから遠ざかってるなー。
http://cells.rubyforge.org/
3. Rubeus
@ayato_p のLTで require 'rubeus' というコードが!僕のRubeusを使っている!
絶賛放置中ですが、人の役に立てて良かったなーと思いました。
よかったら見てやってください。
http://code.google.com/p/rubeus/
https://github.com/akm/rubeus
4. Fukuoka.rbがやってくれて良かった
RBCのスタッフをやってる僕が言うのも変ですが、ちゃんとやってるからいい感じになったんだろうなーと思いました。
素晴らしいRubyKaigiを開いて頂いてありがとうございました。
みなさん、お疲れさまでした。
またよろしくお願いします。
■
忙しさを言い訳にしてなかなか外に行けない病をこじらせてたakmです。リハビリの一環でブログを久しぶりに書きますが、久しぶりすぎて緊張しています。よろしくお願いします。
linecache19 を headに入れるのは大変
rails_adminのテストを動かそうと思ってbundle installしたらエラーになった。
Installing linecache19 (0.5.12) with native extensions Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. (中略) Requesting http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p209.tar.gz Gem files will remain installed in /Users/akima/.rvm/gems/ruby-1.9.3-head@rails_admin/gems/linecache19-0.5.12 for inspection. Results logged to /Users/akima/.rvm/gems/ruby-1.9.3-head@rails_admin/gems/linecache19-0.5.12/ext/trace_nums/gem_make.out An error occured while installing linecache19 (0.5.12), and Bundler cannot continue. Make sure that `gem install linecache19 -v '0.5.12'` succeeds before bundling.
そりゃheadですもん、p209なんてアーカイブはないよね。
ruby-1.9.3-headの環境でインストールしようとしてたんで、.rvmrc はこんな感じだったんだけど、
rvm 1.9.3-head@rails_admin --create
ちゃんとstableなバージョンのrubyを使うようにしたら、bundle installは一発で通りました。
rvm 1.9.3-p194@rails_admin --create
一番分かり易かったCAP定理の説明
CAPを理解する最も簡単な方法は分割の両側にひとつずつノードがある場合を考えることです。片方のノードだけ状態を更新できるようにすると、2つのノードに一貫性がなくなります。つまり、Cが失われます。一貫性を維持しようとすれば、一方のノードは利用できない状態であるかのように動作しなければなりません。この場合、Aが失われます。一貫性と可用性が維持できるのは、ふたつのノードが通信できる場合だけです。この場合、Pが失われます。
「12年後のCAP定理: "法則"はどのように変わったか」より
http://www.infoq.com/jp/articles/cap-twelve-years-later-how-the-rules-have-changed
@taigou に教えてもらいました。
rubyでEXCEL
もちろんWin32 OLEとかを使う方法もあるけど、それ以外にもいろいろライブラリはある。
https://rubygems.org/search?utf8=%E2%9C%93&query=excel
先頭のparseexcelは今はspreadsheetになっている。
gem | xlsx? | 書き込み? | 備考 |
spreadsheet | NG | OK | 読み書きできて実装も良さげ |
roo | OK | NG | 日本語読むのはOK。実装がイマイチな噂あり |
あと、 rubyじゃないけど、 libxlsっていうのもある。
http://libxls.sourceforge.net/
コレ使ったgemとかあった気がしたんだけど見つからんかった。
spreadsheet試してみたけど・・・
Spreadsheet.open "/path/to/file.xls"
spreadsheet動いた
Spreadsheet.open "/path/to/file.xls"
っていうのは実はirbで確かめていたんだけど、正確にはopenメソッドが帰ってこないんじゃなくて、irbに結果を出力されるために自動的に呼び出されるinspectメソッドが帰ってこないことが判明。
だからirbで試す場合こんな感じでやるべし。
$ irb -rspreadsheet 1.9.3-head :001 > book = Spreadsheet.open "tmp/atsumeyo-ze.xls"; nil => nil 1.9.3-head :002 > book.class => Spreadsheet::Excel::Workbook
bookのinspectが実行されないように、 ;nil をつけないとダメ。
spreadsheetで読み込みできることは確認できました。
spreadsheetで変更すると壊れる
既存の.xlsファイルを開いて既存のシートの既存のセルを上書きしたり、シートを追加してみたりしましたが、データが壊れてしまうようです・・・。残念。