つぶやき電気自動車

電気自動車を

東京から会津まで走らせる、というプロジェクトに参加していました。
電気自動車+地域振興なプロジェクトです。
ローカル・リンク

地域文化をつなぐ個性派電気自動車の旅。
9/14~23にかけて、
東京永田町から福島県会津美里町を電気自動車で旅をします。
電気自動車の普及活動を行いながら、
地域間で物流・人流・情報流通が起こるつながりを作ります。

実際には

一緒に走りたかったんですが、
いろいろ予定も合わなかったので
「電気自動車をtwitter bot化」という形でお手伝いさせてもらいました。
evjourney (@evjourney) | Twitter


改造したのはトヨタのコムスです。



カメラとeeePC+EMOBILE搭載

機能

  • 簡易ストカー機能

カメラから写真を自動的に撮ってtwitpicに投げる
#evjourney

銀座の景色

  • 位置情報機能

Google Gearsのgeolocation APIを叩いて、GPS無しでも位置情報がわかるようにしました
evjourney on Twitter: "千代田区なう? http://bit.ly/25txHS
#evjourney"

参考:GPS×Twitter4Rでたのしい位置情報ライフ

結果

twitter bot自体は1日目で稼働停止してしまいました。
現場では電気自動車が充電ポイントに到達する前に電池切れ、
という事態がちょくちょく発生し、そんな余裕なかったようです。
やっぱりついていくべきだったかなぁ。

ともあれ、現場のみなさま、本当にお疲れさまでした!

連絡用twitterボット

最近参加しているプロジェクトで

連絡用にtwitterを使いたい,という要望があったので作ってみた.
流れとしては

  • 非公開のアカウント
  • そのアカウント宛にDM
  • DMされたメッセージをtweet

こういう作りにすれば

  • アカウント非公開なので,チームの人しか見れない
  • 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

とりあえず,

そんなに活発でもないのでこれを毎分cronしてごまかす.
そろそろ常駐型botの作り方勉強しないとなー.

twicco使えよってツッコミはなしの方向で..

*1:他の方法でできるよってのがあれば教えてください...

若井優也トリオ@大塚ドンファン

たまには日記を。


大塚のドンファンというジャズバーで、知り合いの若井君が演奏していたので行ってきました.

若井優也トリオ@大塚ドンファン

  • 若井優也(p)
  • 佐藤ハチ恭彦(b)
  • 原大力(d)

ジャズピアニスト若井優也のブログ | ライブスケジュールなど。誤情報ありましたらお知らせください!

大学を出てからは毎日のようにどこかで演奏しているみたいです。

天才の定義はいろいろあると思いますが、

「それでしか生きられない人」
を天才というのなら、彼は間違いなく天才でしょう。
数学が滅茶苦茶できて、大学も卒業しているのに、ピアニストとして生きる道を選んだのですから。

純粋に自分の能力だけを信じて生きている人はかっこいいなぁ、と思った夜なのでした。

植木鉢をtwitter bot化するハック

超ほしかった

植物と話せるPlant Twitterキット - Engadget 日本版
これを買えば植木鉢がtwitter botになる!ほしい!
しかしThinkGeekで$99.99... いくら円高とはいえ、ちょっと気が引けるお値段。

というわけで作ってみた。

http://twitter.com/ponyoV3

  • ポニョは電脳空間と直結した植木鉢です。
  • ポニョなので知能指数は低めです。<= bot的に重要
  • ポニョはデンマーク生まれなので、緊急時は英語で叫びます。

Water me!とThank you!しか言わない元祖に比べたらなんと愛らしいことよ。


ちなみに元祖ページはこちら。
Botanicalls » Kits
Arduino使ってるので実は回路もコードも公開されてるのです。XPortでLAN直結する感じですね。

でも今回は研究室常駐のポニョ(デンマークカクタス)をtwitさせるのが目的なので、遊んでいたMac miniを使うことにします。

  1. 植木鉢の抵抗値読む
  2. 抵抗値が大きい(つまり水が少ないと)
  3. "Water me!"

ちなみに席替えにより窓際から離れてしまったので、XBeeで無線化してやりました。
XBeeも誰にも使われずに研究室で眠っていたのを活用。これぞ技術の無駄遣い?



Mac miniXBee
XBee便利。ふつうにシリアル叩けば無線になっている。



ジャキーン!ArduinoXBeeの2階建てだぁ!


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)

  1. Authenticatorで認証
  2. 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 APIJavaラッパを書いた人がいるのでそれを使わせてもらう。
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スローウィー

クリスマス終了のお知らせはもちろん知っているが

「本当に心から楽しいクリスマスなんて、子供の頃に体験できればしめたもの。
大人になればなるほど、クリスマスは辛くなる。
でも、だからこそ素晴らしいのだ。
今夜だけは、あらゆるものが輝いている」

http://www.instructables.com/files/deriv/FTK/28ZB/AXIEP27TMAP/FTK28ZBAXIEP27TMAP.MEDIUM.jpg
写真はLED Throwies: 7 Steps (with Pictures) より。
こんなんが作りたくて。

作ってみた

普通バージョン
http://farm4.static.flickr.com/3084/3132791339_98a4b997f5.jpg

3色LEDバージョン。色が変わりつつ点滅
http://farm4.static.flickr.com/3201/3132791787_c28f034b9d.jpg
http://farm4.static.flickr.com/3294/3133613382_117075685e.jpg
http://farm4.static.flickr.com/3125/3133614862_81f03e0e24.jpg
やっぱり一個じゃ寂しいね。


http://jp.makezine.com/blog/2008/12/make_throwies_to_learn_oh.html
材料:

コスト:0円(引き出しに入ってたジャンク)
製作時間:30秒くらい

将来的には

お手軽ソーシャルハックに使えそう。
大量にポケットに忍ばせて、野良AP近くの電柱とかに貼ったりするの。

エアギアみたくチーム作って、エアトレック履いて街中を疾走しつつ貼りまくりたい。
俺たちストームライダーにとってはエンブレムは誇りでありチームのテリトリーの証。
エンブレムの上にエンブレムが貼られたときそれが戦いの合図になる。
「賭けろよ、エンブレムを」

MTM02

Hacker's cafeのメンバーとしてMake: Tokyo Meeting 02に出展しました。

何やってたか

出したのはこれ。Linkmanの「メッセージの回転」キット。
エラーが発生しました
http://www.marutsu.co.jp/images/mm12/081201/0000000200039314_1.jpg

・・・をちょっとハックして、肉眼では見えないようにした。
名付けて"Invisible Display"


ケータイから見るとあら不思議


"Make: Tokyo Meeting" が読める!

ハックっていうか単純に赤外線LEDに付け替えただけなんですが、意外に反響があってびっくり。
Sekai CameraとかARとかデジタルサイネージとか、そういう文脈を共有できる人は特に食いつきがよかった感じ。

メモ

以下感じたことめも。

  • 「どうやって遊ぶか」のインストラクションは大事
    • POPと技術シートはちゃんと印刷して作るべし。
    • 子供さんやガイジンさんもいたので、解説の絵とか英語とかわかりやすくする必要あり。"What do you mean by Invisible Display?"とか言われてあたふたしたし。
  • 0.2秒でインパクトを伝えられるように
    • 上とも関連するが、歩きながら見て「なんだこれ」→「アッー!ネギ振ってる!」くらいのわかりやすさが必要。その意味でニコニコ技術部さんは技術力もさることながらデモ方法が洗練されていた。極小ミクの前に虫メガネ置いてあったりとか。
    • 今回の例で言うと、わざわざケータイ取り出す人はあんまりいないので、WebCamつけっぱなしとかの展示法にすればよかった。
  • 止まらないモノを作る
    • これはiii Exhibitionでも感じたけど、止まらないモノはちゃんと準備しないとなかなかできない。特に今回は「出さないか」と言われて1週間切っていたのでほとんど思いつきで「作ってみた」レベル。ケータイによって機種依存がかなりあった。実はiPhoneからはあんまり見えなかったりとか。
  • それでも出すのは面白い
    • そんなわけで「陸ハッカーならぬ陸Makerとか言われたらどうしよう」とかどんよりしながら参加したわけですが、disったりする文化がMAKE: 界隈には無いようです。こんなものでも「すげえええ」って言われるのはやっぱり嬉しいですな。

来場者の皆さん、O'Reillyの皆さんありがとうございました。
次回も出すぞー。