タグ

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

  • 橋本商会 » ruby-opencvをインストールして顔認識した

    ruby-opencvは5年ぐらい前に停止したopencvというgemを、ser1zwさんという方がOpenCV2.x系に対応させ、Ruby2.0に対応させ、と着実にアップデートしているプロジェクト。 先日これをみて、そういえば良いプロジェクトなのに全く試してなかったと思い出してまずインストールした。 ruby-opencvの進捗の話(2014年2月版) – ser1zw's blog 試しに作ったものはここに置いてある https://github.com/shokai/ruby-opencv-study 感想 まだ大した事試してないけど、感想としては、ドキュメントが無い。でもOpenCV体のドキュメント見てそのままRubyの常識にそって書き直したらふつうに動くのでドキュメントなくてもいいかなと思った。 Rubyだとそのオブジェクトが持っているメソッド一覧はObject#methods

    橋本商会 » ruby-opencvをインストールして顔認識した
  • 橋本商会 » node-webkitでNHK Newsを連続自動再生するアプリ作った

    あまりにも世情にうといので作った。 NHKRSSを定期的にチェックして、新着ニュースの動画を連続自動再生する。 とてもテレビっぽい。おかげで4日後にオリンピックが開催されるという事を知れた。 ソースコード https://github.com/shokai/nhk-news-app zipでダウンロード https://github.com/shokai/nhk-news-app/releases node-webkitはネイティブアプリ作成のためにwebkitが改造されたwebブラウザで、HTML/JavaScript/CSSが実行できるだけでなくnode.jsのAPIもそのまま呼び出せる。 つまりjQueryでDOM操作すると同時にnodeのライブラリを使うような処理が、同じプログラムファイルにまとめて書ける。変にブリッジを書く事なくいつものnodeのように require(‘モジュ

    橋本商会 » node-webkitでNHK Newsを連続自動再生するアプリ作った
  • 橋本商会 » NodeにLindaを実装した

    艦これの冬のイベントやりながらcoffee書いてたらLindaができた。おかげで三隈大和大鳳以外全部集まったけどコミケに行けなかった。 前にRubyで実装したこれ Ruby上に並列言語拡張Lindaを実装してWebSocket/Cometで使えるようにした を Node+Socket.IOで実装しなおした。 https://npmjs.org/package/linda-socket.io RubyよりNode+coffeeの方が並列処理書きやすい。特に体よりもテスト、coffee+asyncにだいぶ助けられた。あとなんだかんだでEventMachineに気を使って書くのが疲れる。 Node版はタプルに配列が使えないようにした。全部Object(hash)にした。流れているデータを読んで意味がわかりにくいのと、request-response形式で返すタイプの時にマッチングがしにくいため

  • 橋本商会 » Sinatra+Haml+jQuery入門

    研究室の後輩にSinatraとhamlとjQueryを教えるために作ったテンプレートについて、ここにも書いておく ソースコード https://github.com/shokai/sinatra-template 実際動いているもの http://masui.sfc.keio.ac.jp/sinatra-template/ git clone git://github.com/shokai/sinatra-template.git ■Sinatraを何に使うか Sinatra+haml+jQueryが便利。 Railsと似てるけど、ちょっと違う。 個人的には RailsHTMLのページをいっぱい作るのに便利 Sinatra → 画面遷移あまりしなくて、同じURLのままjsonのAPIをjQueryのajaxで取得して動的に表示を変えるwebページを作るのには便利 に感じる。 でもSi

  • 橋本商会 » fluentdにsyslog-ngのログファイルを全部流し込みたい

    バイト先(大学)で、syslog-ngに流れてくるログをfluentdに流し込もう事になった。最終的にMongoDBに入れる。 windows/mac/unix系など色々なOSが入り乱れた環境なので、各ホストからはsyslogで飛ばすのがいいらしい。んで、最終的にモダーンなfluentdやmongodbに通して使おうという感じ。 (特にnt-syslogがすごいよくできてて、windowsなのにちゃんとutf-8で送ってくれるしえらい) fluentdのプラグインを作り始めたけどまだ完成してない。なんか間違ってるとかこうした方がいいという情報あったら教えてください。 (ちなみにgem search fluent –remote | grep tail で見つかる物は全部ソース読んだり試したけど要求仕様を満たすgemは無かったです) syslogをfluentdに流し込む fluentdのt

  • 橋本商会 » プログラマブル電球hueをRubyから使う

    研究室にPhilipsのhueが来たので使ってみた。amazonでも売ってるけど3万円ぐらいする高級品だったのでおそるおそる扱った。 hueの仕様 bridgeと呼ばれる円盤型の母艦に、15個のhue電球が無線接続(zigbee?)される。 bridgeは有線LANケーブルで接続され、HTTPのAPIを持つ。 OSはFreeRTOSで、lwIPでTCP/IPを実装している。 bridgeにはボタン1つとステータスLEDしか付いていないが、ローカルIPアドレスが http://www.meethue.com/api/nupnp で確認できて、あとはwebブラウザから見れる。 電球部分はごく普通のE26口金なので、家の天井や電気スタンドで使えるはず。 API http://developers.meethue.com/にドキュメントがある。 HTTPのAPIなので、同じLANの中からならどのマ

    橋本商会 » プログラマブル電球hueをRubyから使う
  • 橋本商会 » ScalaでAndroidアプリを作る

    普段Javaで書いている部分をScalaで書けるようになった。 Javaだと、文字列や複雑なデータ構造を処理したり、関数プログラミングがしづらい。lambda無いし。そういう部分だけでもScalaでやりたい。 https://github.com/pfn/android-sdk-pluginというフレームワークを使って、既存のAndroidアプリのプロジェクトScalaJavaを混ぜこぜに書けるようにする方法を説明する。 全体の簡単な手順 homebrewでscalaとsbtをインストールする Androidプロジェクトを普通に作る or 既存のAndroidプロジェクトを用意する sbtで使う設定ファイル3つを配置する sbt初回起動時に必要なライブラリがインストールされて、Androidプロジェクトとsbtプロジェクトが共存した状態になる sbtでandroid:packageす

    橋本商会 » ScalaでAndroidアプリを作る
  • 橋本商会 » Scalaをちょっと勉強した

    Scalaを勉強した結果、今日のNode.js初級入門勉強会でcoffee-scriptが書けるようになってた。coffee気持ち悪いと思ってたけど苦手克服できてよかった。 Java/JRuby/Scala ScalaJavaJRubyはRubyScalaJavaのシンタックスをシンプルに直して、Java使ってて不満な文字列、正規表現、配列やMap、無名関数や高階関数などの機能を追加した、より良いJavaという印象。 JRubyはRubyがJVM上で動いていて、ついでにJavaの機能も使える言語だと思う。 JRubyと比べると、JRubyよりもJavaに寄っている気がする。Javaのライブラリをスクリプト言語から使いたい時は今後はscala使おうと思う。 Scalaは型宣言をしなければならないのが良い。JRubyの方がRubyに寄っていて、スクリプト言語としての使い勝手はRuby

  • 橋本商会 » Ruby中級入門という勉強会やりました

    今日やりました。夏休みだというのにたくさん人が来た。OBも来た。 増井研ではRubyは決してもう熱い最新の言語というより成熟した言語という感じで見られていて、実際若者は皆Node.jsを使っています。 でも俺はRubyの書き心地が好きなので、Rubyのどのへんが使ってて好きかをスライドにまとめてみました。なんかRuby書いてると、UIの使い勝手を地味に上げている時と同じあたりの脳の部位が活性化してて気分がいい。 スライド アプリ内ライブラリやgemの作り方と、どういう点に気をつけて実装しているかまとめました。

  • 橋本商会 » 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初級入門という勉強会やりました

    まず全員Ruby2.0.0をインストールさせつつ、俺がRubyの色々なことを紹介したり、ライブコーディングした。 今日の資料です Rubyそこそこ使ったことある人と全く使ったこと無い人が半々だった。 使ったことある人は前半がためになったとのこと。 ない人は後半のArrayやHashにsortやuniqやreverseなどをチェーンしていったり、mixやmaxやfindなど痒い所に手がとどくの良かったようだ。 スライドを前日からtwitterで公開していたら、@shigeyas先生からgem紹介にpryとawesome_printがあったほうがいいのでは、というツッコミがあって追加した。 「gemの使い方を調べる」のところでpryとawesome_printを使って色々調べるのも追加した。 教育体験のせいで1時間以上のスライドでも3時間ぐらいあれば作れるようになってしまった。 実演 最後にぶ

    橋本商会 » Ruby初級入門という勉強会やりました
  • 橋本商会 » 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で返せない

  • 橋本商会 » 世界一柔軟で好意的に解釈してくれるプログラム言語BabaScriptを作りました

    rubygemsでインストールできます % gem install babascript ソースコードはこちら https://github.com/masuilab/babascript BabaScriptとは コンピュータが得意なことはコンピュータに、人間が得意なことは@takumibabaが処理するプログラム言語です 使用方法 ワンライナー % baba -e "アイス買ってきて" 馬場スクリプトはRuby風に書ける言語で、日語で書いた部分は馬場くんが実行してくれます test1.bb #!/usr/bin/env baba if 0 < Time.now.hour and Time.now.hour < 5 もう寝ろ!! else 意識を高めてコードを書こう! end 実行 % baba test1.bb 0時から5時の間は寝ろ、という指令が送れます。 Rubyの中に馬場スクリ

    橋本商会 » 世界一柔軟で好意的に解釈してくれるプログラム言語BabaScriptを作りました
  • 橋本商会 » Skype API Rubyラッパーのgem作った

    今日は早起きしたのでさくっと作った。 rb-skypemacがRuby1.8でしか動かなかったり、Ruby4Skypeがソースを修正しないと動かなかったり、どのskype gemもリポジトリが公開されてなくてパッチ送れなかったので1から作りなおした。 https://github.com/shokai/skype-ruby https://rubygems.org/gems/skype linuxだとruby-dbus、macだとrb-appscriptを使うんだけどOS毎に別のgemをdependencyに入れるのどうすればいいんだろう・・ gemspecの中でRUBY_PLATFORMを見てspec.add_dependencyしたらローカルでbundle installすると大丈夫だけど、rubygems.org経由でgem installするとlinuxなのにrb-appscrip

  • 橋本商会 » LAN内の全てのホストのIPアドレスとMacアドレスを取得する

    1から254までpingうって反応あったホストにarpしてMacアドレスを取得した。 昔LAN内の全ホストにgrowl送りつけたりしていた時と同じノリだ Raspberry PiがDHCPでどこに行ってしまったかもわかるし、定期的に実行すれば端末が(つまり人が)増えたり減ったりするのもわかって楽しい。 実行にはparallel gemが必要 gem install parallel ruby macaddrs.rb 192.168.1.1

    橋本商会 » LAN内の全てのホストのIPアドレスとMacアドレスを取得する
  • 橋本商会 » 信用出来ないRubyスクリプトを安全にevalしたかった

    たぶん大丈夫だと思うんだけどヤバかったら教えて下さい。 (皆様からの温かいトマホーク(2)(3)によるとやっぱダメなようです) 要件 – ブラウザでRubyのコード書かせて、サーバーに保存してサーバーで実行したい – 危険な事はされたくない。ファイルへのアクセスやコマンドの実行、やたら時間のかかる処理など – 安全に実行できたらコードの返り値を取得したい。コードが危険だったらエラーを取得したい。 – 危険な事されても、コード実行しているプロセスは終了しないでエラーをブラウザに返したい。 – コードはWebサーバーと同じプロセスで実行したい 調査 ということで調べていたらsafelevelを使えばいいらしい – Programming Ruby: The Pragmatic Programmer's Guide – Rubyのセーフレベル4環境とその使い方 – ¬¬日常日記 $SAFEに0〜

  • 橋本商会 » 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とArduinoとTwitterで天気予報を見る

    こういうのを数年おきに、その時の近代的な実装で作りなおしてみるとプログラミング環境の進歩がわかる。 1. 今日傘が必要かどうか表示してくれるてるてる坊主 晴れの時 雨が降る可能性がある時 ウチでは15分おきにその日の天気予報を取得して表示している。うちテレビ無いけどこれのお陰で傘を忘れたりしなくなった。 プログラムはものすごい単純になっている。Rubyのみ。 Macで開発してRaspberry Piにデプロイした。Ruby動くUNIX系ならどこでも動くはず。 require 'rubygems' require 'arduino_firmata' require 'weather_jp' arduino = ArduinoFirmata.connect weather = WeatherJp.get '東京' if weather.today.rain > 30 # 降水確率30%以上 a

    橋本商会 » RubyとArduinoとTwitterで天気予報を見る
  • 橋本商会 » ino使うとCUIでArduinoをビルドできて便利

    実際Arduinoは.inoを.cppにしてavrgccしてavrdudeしているだけなので、CUIだけで書き込むのは難しくないんだけど いいツールがあったので今後はこれ使っていく事にしたい。 モニタついてないサーバーに接続したArduinoを直す時とかにも便利。 というかArduino IDE微妙だからいつもemacs使ってるし、もうinoでいいんじゃないかな http://inotool.org 動作にはpythonが必要。 インストール MacのMountain Lionでは最初からpythonとeasy_installが入っているので % sudo easy_install ino % which ino プロジェクトを作る プロジェクトのディレクトリは作ってくれない % mkdir testapp % cd testapp % ino init ディレクトリが2つ、libとsrc

    橋本商会 » ino使うとCUIでArduinoをビルドできて便利
  • 橋本商会 » Rubyのワンライナーでプレゼンタイマー作った

    研究会の初回授業があったんだけど、自己紹介タイム、序盤に1人5分ぐらい喋ってて時間が押してきたので プレゼンタイマーを作って乗り切った。 20分で25人ぐらい自己紹介させた。 1分タイマーを作った ruby -e '60.downto(0) do |i| puts "#{i} "+"|"*i; sleep 1 end; `say 終了`' こういうの5秒ぐらいあればすぐ作れてRubyはえらい。 これをフルスクリーン表示した。 1秒ごとにバーが減っていって、1分経つと「終了!!」と言ってくれる。言いにくい事を言ってくれるのが良い。 昨年末の研究会説明会で面白そうなやつ釣ったら来てくれたのでうれしかった。

    橋本商会 » Rubyのワンライナーでプレゼンタイマー作った