つぶやき電気自動車
電気自動車を
東京から会津まで走らせる、というプロジェクトに参加していました。
電気自動車+地域振興なプロジェクトです。
ローカル・リンク
地域文化をつなぐ個性派電気自動車の旅。
9/14~23にかけて、
東京永田町から福島県会津美里町を電気自動車で旅をします。
電気自動車の普及活動を行いながら、
地域間で物流・人流・情報流通が起こるつながりを作ります。
実際には
一緒に走りたかったんですが、
いろいろ予定も合わなかったので
「電気自動車をtwitter bot化」という形でお手伝いさせてもらいました。
evjourney (@evjourney) | Twitter
改造したのはトヨタのコムスです。
機能
- 簡易ストカー機能
カメラから写真を自動的に撮ってtwitpicに投げる
#evjourney
銀座の景色
- 位置情報機能
Google Gearsのgeolocation APIを叩いて、GPS無しでも位置情報がわかるようにしました
evjourney on Twitter: "千代田区なう? http://bit.ly/25txHS
#evjourney"
参考:GPS×Twitter4Rでたのしい位置情報ライフ
連絡用twitterボット
こういう作りにすれば
- アカウント非公開なので,チームの人しか見れない
- DMなので他のfollowerに見られる心配もない
ただ,
「twitter4rを使ってDMを最新一件だけ取得」
ってのにちょっとハマったのでメモ.
messagesで全部とってきて,ループ一回だけ回して出る,というバッドノウハウが必要っぽい.*1
require 'rubygems' require 'twitter' begin client = Twitter::Client.new(:login => "name", :password => "passwd") $rcvdmsg = client.messages(:received) #最新のDMを一件取得 $rcvdmsg.each do |msg| $name = msg.sender.screen_name $msgtext = msg.text break end #投稿 $message = $msgtext + " [from @" + $name + "]" client.status(:post, $message) rescue end
*1:他の方法でできるよってのがあれば教えてください...
若井優也トリオ@大塚ドンファン
たまには日記を。
大塚のドンファンというジャズバーで、知り合いの若井君が演奏していたので行ってきました.
若井優也トリオ@大塚ドンファン
- 若井優也(p)
- 佐藤ハチ恭彦(b)
- 原大力(d)
ジャズピアニスト若井優也のブログ | ライブスケジュールなど。誤情報ありましたらお知らせください!
大学を出てからは毎日のようにどこかで演奏しているみたいです。
天才の定義はいろいろあると思いますが、
「それでしか生きられない人」
を天才というのなら、彼は間違いなく天才でしょう。
数学が滅茶苦茶できて、大学も卒業しているのに、ピアニストとして生きる道を選んだのですから。
純粋に自分の能力だけを信じて生きている人はかっこいいなぁ、と思った夜なのでした。
植木鉢をtwitter bot化するハック
超ほしかった
植物と話せるPlant Twitterキット - Engadget 日本版
これを買えば植木鉢がtwitter botになる!ほしい!
しかしThinkGeekで$99.99... いくら円高とはいえ、ちょっと気が引けるお値段。
というわけで作ってみた。
Water me!とThank you!しか言わない元祖に比べたらなんと愛らしいことよ。
ちなみに元祖ページはこちら。
Botanicalls » Kits
Arduino使ってるので実は回路もコードも公開されてるのです。XPortでLAN直結する感じですね。
でも今回は研究室常駐のポニョ(デンマークカクタス)をtwitさせるのが目的なので、遊んでいたMac miniを使うことにします。
- 植木鉢の抵抗値読む
- 抵抗値が大きい(つまり水が少ないと)
- "Water me!"
ちなみに席替えにより窓際から離れてしまったので、XBeeで無線化してやりました。
XBeeも誰にも使われずに研究室で眠っていたのを活用。これぞ技術の無駄遣い?
Mac miniにXBee
XBee便利。ふつうにシリアル叩けば無線になっている。
Arduino側のコード
int val;//受信データ用の変数を用意 int com; //コマンド用変数 void setup(){ Serial.begin(9600); } void loop(){ if(Serial.available()>0){ //データが来たら com = Serial.read(); //シリアルを読む if(com==97){ // 'a'コマンドが来たときだけ10回抵抗値を読んで返す for(int i=0;i<10;i++){ val = analogRead(0); Serial.println(val); } } } }
Mac mini側
Rubyでやってます。
twitter4rとruby-serialportが必要。
require 'rubygems' require 'twitter' require 'serialport' def generateMessage messages = ["ぽにょ、あまいのがすきー", "キラッ☆", "ポニョ、光合成するー", "足っていいな かけちゃお!", "あの子がだーいすーきー", "ニモっていいな食べちゃお", "セガール,爆破,すきー", "ポニョ、@iwkn すきー", "ずっとポニョのターン!"] msg = messages[rand(messages.size)] return msg end #シリアルポートを指定 port = "/dev/tty.usbserial-******" sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE) sp.putc "a" #read serial values #10個の値の平均をとる $val = 0 for i in 0..9 $val = $val + sp.gets.to_i end $val = $val/10 #p $val #つぶやき if($val > 500) $message = "Water me!" else $message = generateMessage end #p $message begin client = Twitter::Client.new(:login => "name", :password => "password") client.status(:post, $message) rescue end
あとはこいつをcronで定期的に実行する。実世界botもわりと簡単ですね。
Processing + Twitter
たまにはプログラミングの話。
ProcessingからTwitterに投稿する方法について
ふつうにJavaで
hwhack: Processingでtwitterと http認証 (basic auth)
- Authenticatorで認証
- http://twitter.com/statuses/update.xmlを指定し、URLConnectionでPOST
ってだけだが、POSTした後ちゃんと受信をしないとうまくいかないみたい。
import java.net.*; //ユーザ名とパスワード String user = "user"; String pass = "password" ; //リクエストURL。update.xmlを指定 String url = "http://twitter.com/statuses/update.xml" ; //認証まわり class BasicAuth extends java.net.Authenticator{ private String user; private String pass; public BasicAuth(String user, String pass) { this.user = user; this.pass = pass; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user,pass.toCharArray()); } } void setup() { BasicAuth tw_authenticator = new BasicAuth(user, pass); Authenticator.setDefault(tw_authenticator); try{ URL helloURL = new URL("http://twitter.com/statuses/update.xml"); URLConnection con = helloURL.openConnection(); con.setDoOutput(true); PrintWriter out = new PrintWriter(con.getOutputStream()); //POSTするメッセージ out.print("status= test"); out.close(); //POSTした後は受信 InputStreamReader in = new InputStreamReader(con.getInputStream()); BufferedReader br = new BufferedReader(in); String line; while((line=br.readLine()) != null) { System.out.println(line); } br.close(); in.close(); }catch (IOException e) { e.printStackTrace(); } } void draw() { }
twitter4jを使う
Twitter API - TwitterまとめWiki
Twitter APIのJavaラッパを書いた人がいるのでそれを使わせてもらう。
http://yusuke.homeip.net/twitter4j/ja/index.html
準備として、libraries/twitter4j/library/
内にjarファイルを放り込んでおく。
Processingが認識してくれないっぽいので、twitter4j.jarにリネームする必要があるみたい。
import twitter4j.*; void setup(){ try{ //ユーザ名とパスワード Twitter twitter = new Twitter("user","password"); //メッセージ Status status = twitter.update("test"); //投稿したメッセージを表示 System.out.println(status.getText() + " POSTED"); }catch(Exception e){ System.out.print(e.getMessage()); } } void draw(){ }
圧倒的に簡単になりましたね。
LEDスローウィー
クリスマス終了のお知らせはもちろん知っているが
「本当に心から楽しいクリスマスなんて、子供の頃に体験できればしめたもの。
大人になればなるほど、クリスマスは辛くなる。
でも、だからこそ素晴らしいのだ。
今夜だけは、あらゆるものが輝いている」
写真はLED Throwies: 7 Steps (with Pictures) より。
こんなんが作りたくて。
作ってみた
3色LEDバージョン。色が変わりつつ点滅
やっぱり一個じゃ寂しいね。
http://jp.makezine.com/blog/2008/12/make_throwies_to_learn_oh.html
材料:
- LED
- ボタン電池
- 磁石
- セロテープ
コスト:0円(引き出しに入ってたジャンク)
製作時間:30秒くらい
将来的には
お手軽ソーシャルハックに使えそう。
大量にポケットに忍ばせて、野良AP近くの電柱とかに貼ったりするの。
エアギアみたくチーム作って、エアトレック履いて街中を疾走しつつ貼りまくりたい。
俺たちストームライダーにとってはエンブレムは誇りでありチームのテリトリーの証。
エンブレムの上にエンブレムが貼られたときそれが戦いの合図になる。
「賭けろよ、エンブレムを」
MTM02
Hacker's cafeのメンバーとしてMake: Tokyo Meeting 02に出展しました。
何やってたか
出したのはこれ。Linkmanの「メッセージの回転」キット。
エラーが発生しました
・・・をちょっとハックして、肉眼では見えないようにした。
名付けて"Invisible Display"
"Make: Tokyo Meeting" が読める!
ハックっていうか単純に赤外線LEDに付け替えただけなんですが、意外に反響があってびっくり。
Sekai CameraとかARとかデジタルサイネージとか、そういう文脈を共有できる人は特に食いつきがよかった感じ。
メモ
以下感じたことめも。
- 「どうやって遊ぶか」のインストラクションは大事
- POPと技術シートはちゃんと印刷して作るべし。
- 子供さんやガイジンさんもいたので、解説の絵とか英語とかわかりやすくする必要あり。"What do you mean by Invisible Display?"とか言われてあたふたしたし。
- 0.2秒でインパクトを伝えられるように
- 止まらないモノを作る
- これはiii Exhibitionでも感じたけど、止まらないモノはちゃんと準備しないとなかなかできない。特に今回は「出さないか」と言われて1週間切っていたのでほとんど思いつきで「作ってみた」レベル。ケータイによって機種依存がかなりあった。実はiPhoneからはあんまり見えなかったりとか。
- それでも出すのは面白い
来場者の皆さん、O'Reillyの皆さんありがとうございました。
次回も出すぞー。