タグ

ブックマーク / shokai.org (9)

  • 橋本商会 » ArduinoとRubyで赤外線リモコン作ってWebから操作できるようにした

    (追記)色々改良された → ArduinoとRubyで赤外線リモコン をgemにした ————- 帰宅前にスマホからクーラーをつけれるようにした。Arduinoと合計150円ぐらいの部品と、このRubyで書いたアプリ https://github.com/shokai/arduino_ir_remote だけで使える。 ソフトウェア部分はまだアップデートされるだろうけど、(rubygemにするとか)ハードウェアはもうこれ以上変更しないので是非自作してお試しください。 動かなかったり欠陥があったら、githubのissueかtwitterで@shokaiにどうぞ。 動いている証拠動画 実際に使いたいのはエアコンだけど、エアコンは地味なのでテレビでやってみた。 研究室にあるパナソニックとシャープのテレビで試したら両方とも動いた。 パナソニックテレビから学習した赤外線データはgistに貼った。

    橋本商会 » ArduinoとRubyで赤外線リモコン作ってWebから操作できるようにした
  • 橋本商会 » RubyのlambdaやProcとblock渡しとコールバック関数

    先日のRuby初級入門2013で事前に「Rubylambdaとかblockとか教えて」と言われていたけど、どうみても初心者向けの内容ではないので無視していたので解説する lambda{ コード }とProc.new{ コード }の差がよくわからない ここ読め RubylambdaとProcの違いは? – QA@IT rubylambdaとprocの比較実験 – Qiita [キータ] まとめると 内部でreturnした時と、引数の数が違うときの挙動が違うそうです block渡しを使ったイベント登録について do 〜 endブロックで渡された処理はすぐにyieldで返さなくてもいい block渡しを受け取れる関数を宣言する方法 例えば、フィボナッチ数列を次々と生成する場合を考える。 フィボナッチ数列は無限に続くので、計算が終わらない。 無限に終わらない処理は結果をreturnで返せない

    xef
    xef 2013/07/19
  • 橋本商会 » Ruby上に並列言語拡張Lindaを実装してWebSocket/Cometで使えるようにした

    Lindaは1990年ごろに出来た言語。 タプルスペースという共有メモリ空間でタプル(オブジェクト)を共有して、in/out/rd/inp/rdpという命令で操作する事で大抵の並列処理が記述できるという物。 仕様は単純なんだけどセマフォなどのロック機構やジョブキューも超簡単に記述できる。いわば分散並列処理のための最小セット。 既にCやJavaの実装があり、Rubyでも咳さんのRindaがある。 で、今回作ったLinda gemではタプルのマッチング判定とオンメモリのタプルスペースの読み書き機能と、それぞれのテストコードしか実装されていない。 複数のプロセスからタプルスペースに接続して読み書きする機能は実装されていない。 マッチングは配列タプルは要素の前方一致、Hashタプルは自身のKeyとValueが相手に全部含まれていればtrueとしている。 Linda RocketIO Linda g

  • 橋本商会 » Ruby書くならBundler使え

    Rubyでプログラム書くにあたって、bundlerを使わないプログラムは1年ぐらい経つと動かなくなってる事が多々あって、bundlerマジ重要なのと ぐぐってもあまりbundlerの利点や説明がまとまってる記事がなかったので 研究室のwikiに書いた記事を転載しておく。 Bundlerとは Bundler: The best way to manage a Ruby application's gems プロジェクト内で使うRubygemsを管理するしくみ。 プロジェクトの一番上のディレクトリに「Gemfile」というテキストファイルを置き、その中にgemの名前(と必要あればバージョンも)書く。 % bundle install というコマンドで、gemが一括インストールできる プログラム内で require 'bundler' Bundler.require と書くと、gemが一括req

    xef
    xef 2013/03/29
  • 橋本商会 » Raspberry PiでRuby/Arduino/Twitter/webcam

    Raspberry Piが届いたのでセットアップしてArduinoでサーボモーター動かしたり、CdSで明るさ読んでTweetしたり、webcamでJPEGに撮影したりした。 raspbianというほぼdebianなOSを入れたのでかんたんだった。 購入 RSコンポーネンツをキャンセルしてModMyPiでケース付きのを買った。10日ぐらいで届いた。 Makershedでも売ってる。 SDカードにRaspberry Piを書き込む akiroom情報でRaspbian “wheezy”を使うことに。 Amazonで買った16GBのSDHCカードに入れた。4GBあれば足りると思うけど安かったので16GB。 http://www.raspberrypi.org/downloadsからzipでダウンロードしてきて、 MacUSBメモリにUbuntuのインストールディスク作ると同じ手順でSDカードに

    橋本商会 » Raspberry PiでRuby/Arduino/Twitter/webcam
  • 橋本商会 » Node.jsのEventEmitterをRubyに移植した

    ものすごい必要だったので作った。 rubygemsに登録しておいたので gem install event_emitter で使える。 ドキュメントはここ Ruby EventEmitter バグ、機能要望などは githubのissueかtwitterかメールでお願いします EventEmitterとは Node.jsのコアライブラリ。lib/events.jsにある。 nvmでnodeをインストールすると ~/.nvm/src/node-v0.8.14/lib/events.js とかにある。 どんなオブジェクトにでも一発でonとemitという関数を追加できて、 obj.on(‘イベント名’, コールバック)でコールバック登録して obj.emit(‘イベント名’, 引数)でイベントを発火させる。 nodeの全てのライブラリがイベント駆動するためによく使ってる機能。 addEventL

  • 橋本商会 » RubyからArduinoを操作できるようにFirmataプロトコルを移植した

    Javaから移植した → Arduino Firmata on Ruby インストール gem install arduino_firmata Ruby 1.8.7と1.9.2で動作確認してる。serialport gemを使ってるのでJRubyでは動かない。 できること・使い方 RubyからArduinoのデジタル・アナログの入出力が使える。 例えばTwの内部APIと温度センサLM35DZと組み合わせると、9行で温度をtweetできたりして便利。 #usr/bin/env ruby require 'rubygems' require 'arduino_firmata' require 'tw' arduino = ArduinoFirmata.connect "/dev/tty.usbmodem621" puts temp = arduino.analog_read(1)*100*5/

    橋本商会 » RubyからArduinoを操作できるようにFirmataプロトコルを移植した
  • 橋本商会 » HerokuのSinatraにバックグラウンドワーカーを詰め込んで節約

    Webアプリと同じプロセスにworker入れてお金節約できる。 Webアプリは “リクエスト来る→サーバーで処理→レスポンス返す” というのを繰り返すわけだが、サーバーでの処理に時間がかかる場合にそこを別のプロセスに任せて、先にレスポンスを返しておいて、あとで結果は取りに来てよ、という実装をする事がある。 時間がかかる処理は2つに大別できる。 動画をエンコードするとか。CPU負荷が高くて時間がかかるのでWebサーバーとは別の場所で動かしたい Twitter APIを10回ぐらい使った結果をまとめて返すとか。CPU負荷は低いけどIO待ちが長い 2の方について、HerokuRuby環境で安く上げる方法をまとめる。 手法 HerokuのcedarスタックでRuby使う時はwebサーバーとしてThinが起動する。 ThinはEventMachineの中で動いてるので、EM::defer等が使え

  • 橋本商会 » SinatraっぽいWAFを作る、46行で

    “Tamago”というWeb Application Frameworkを作った。 https://github.com/shokai/tamagoに置いてある。 昨日学校に行く前にメシをいながらHerokuやSqaleやらPaaSについて調べていたら、SinatraやRailsではなくRackを直接使ってPaaSで動かしている人たちが何人かいた。 sqale使ってみた – komagataとか。 で、電車の中でふとWAFを作ってみたらどうかと思って作ってみた。 最終的に学校に着く頃にこんな風に書けるのができてた。 GETやらPOSTで指定したパスへのアクセスを受け取って、Hamlのテンプレートが使えたりするDSLが使える。 get '/' do haml :index end post '/' do Time.now.to_s end get '/env' do ENV.keys.so

    橋本商会 » SinatraっぽいWAFを作る、46行で
    xef
    xef 2012/05/30
  • 1