2011.10.23

街中でシャワートイレを探せるサービスをはじめました

【速報】Mashup Awards 7の2nd Stageまで勝ち残っちゃいました!
http://mashupawards.tumblr.com/post/13109536199/ma7-mashup-battle-2nd-stage-27

街中でトイレが見つからない!なんてときのためにサイトを作りました。

Continue reading "街中でシャワートイレを探せるサービスをはじめました"

|

2009.07.25

ArduinoでLivedoor Reader未読数チェックのEthernet Shield版

Ethernet_shield

ArduinoにTCP/IPを喋らせるEthernet Shieldというのがあるのは知っていたが、ちょっと高いし「TCP/IPなんてパソコンに喋らせればいいじゃん」と思っていた。ただ、Livedoor Readerの未読数が100件以上のときにArduinoでLEDを点灯させるを作りながら、未読チェックのためだけにパソコンを起動させておくのも逆に面倒なので、習作のつもりでEthernet Shiled版を作ってみた。

Rubyなどでネットワークプログラムを書くのと比べ

  • 自身のIPと接続先のIPを指定する。DNSは引けない
    (接続先がレンタルサーバなどバーチャルホストの場合、HOSTヘッダを指定する)
  • サーバからのレスポンスはヘッダ部もボディ部も全て受け取り、自分で処理する
  • 1バイトごとに1パケットで送ってしまう。相手によっては、ちょっと顰蹙

といったところでハードルがある。ArduinoでTwitterにポストするのが人気なのは、レスポンスを処理するのに苦労しなくても、投げっぱなしで面白いものになるからだろう。

それはともかく、LEDを点灯するだけなので、

  • Livedoor Readerの未読が100以上であれば1を返すCGIをレンタルサーバ上に置き、
  • Arduino側はHTTPレスポンスを空行が来るまで読み飛ばし、ボディ部の最初が1のときLEDを点灯

というコードを書いた。小型ブレッドボードもEthernet Shieldにすっぽり収まっていい感じ。30分に1回チェックに行くだけなので「おお、快適!」という感じはしないが、パソコンを触る前に「パソコンを立ち上げても、どうせ見るニュースは少ないんだよな」と確認できるのは、ジワジワと手放せないものになってくるんじゃないだろうか。

ソースは相変わらずgistで公開中

http://gist.github.com/154718

Arduino側で指定しているldr.cgi?user=XX&thr=100の部分を書き換えれば、僕の借りているサーバ経由にはなるが、Arduino+Ethernet Shieldだけで動作チェックにはなる。ただし、あまり頻繁にやると僕がLivedoorとさくらインターネットから締め出されるので、豪快にやりたい方はご自身の環境でお願いします。

【AD】

一応、ネットワークプログラミングなので、飛んでいるパケットをWiresharkなどで見た方がデバッグがはかどると思います。変に再送しまくっても相手に迷惑ですし。

パケットキャプチャ入門―LANアナライザWireshark活用術
パケットキャプチャ入門―LANアナライザWireshark活用術 竹下 恵

おすすめ平均
starsネットワークを視覚的に理解
starsトラブルシューティングやケーススタディーがもう少しほしかった
starsWIRESHARKのリファレンス本
stars入門書です
stars自習用には申し分ない、中高生にもどうぞ。

Amazonで詳しく見る
by G-Tools

Ethernet Shieldから出ているパケットを見るために必要なミラーリング対応のHUB。自分のPCをサーバにする場合はサーバで見ればいいので不要ですが、外部のサーバとArduinoを喋らせる場合は必須。

アライドテレシス CentreCOM FS808TP V1 レイヤー2スイッチ(10/100M) RoHS版 0014R アライドテレシス CentreCOM FS808TP V1 レイヤー2スイッチ(10/100M) RoHS版 0014R

アライドテレシス 
売り上げランキング : 54632

Amazonで詳しく見る
by G-Tools

洋書で、かつ予約受付中だけど、凄く気になる。

Programming Interactivity: Unlock the Power of Arduino, Processing, and Openframeworks Programming Interactivity: Unlock the Power of Arduino, Processing, and Openframeworks
Joshua Noble

Oreilly & Associates Inc  2009-07
売り上げランキング : 5201

Amazonで詳しく見る
by G-Tools

| | Comments (0) | TrackBack (0)

2009.07.21

Livedoor Readerの未読数が100件以上のときにArduinoでLEDを点灯させる

前にArduinoからPC(MacBook)へのシリアル通信について書いた(その1その2)。例えばArduinoに接続した加速度センサの値を、PCに処理させたいときに使える。

逆に、PCからArduinoにシリアルで何かを送ってArduinoに仕事をさせることはできないかと考えてみた。

で、具体的な例として、Livedoor Readerの未読数を下記のURLから取得するスクリプト(Rubyとか)をPC上で定期的に走らせ

http://rpc.reader.livedoor.com/notify?user=<userId>

未読が100件以上であれば、PCからArduinoにUSB経由のシリアル通信で送信する。Rubyであれば、下記のように書ける。(ruby-serialportのインストールが必要)

port = "/dev/cu.usbserial-A7006SUC"
sp = SerialPort.new(port,9600,8,1,SerialPort::NONE)
sp.puts(1)
sp.close

Arduino側はSerial.read()で読み込むのだが、この関数は最初の1バイトしか読めないので、LEDを光らせたいときは「1」、消したいときは「0」を送信するということにした。

ソースは、いつも通りgithubに置いておく。

http://gist.github.com/150230

Rubyのスクリプトをcronで定期的に回せば、未読数が100件以上のときだけLEDが光る。LEDを消したいときはArduino の基盤上のリセットボタンを押せばよい。なぜかArduinoにUSBが刺さっているだけなくArduino IDEでシリアルモニタを開いていないと動いてくれないが、これは仕様だろうか。

もちろん、Livedoor Readerの未読数に限らず、PCで(もしくはRubyで)条件判定できるものであれば何でもよい。流行ものとしては

  • twitterのダイレクトメッセージに反応してみる
  • WebHookに反応してみる

なんてことが考えられるが、そもそもPCが稼働していなければいけないのは面倒だと思う。PCを常時起動しなくてもすむよう、Ethernetシールドを試してみようか。

【追記】

実際に試してみました。→こちら

Arduinoイーサネット・シールド Arduinoイーサネット・シールド

スイッチサイエンス 
売り上げランキング : 11038

Amazonで詳しく見る
by G-Tools

| | Comments (0) | TrackBack (0)

2009.07.19

Arduinoのシリアル出力をRubyで処理してみた

Arduinoネタは、まだまだ続く。

Arduinoの出力先としてProcessingもいいが、Rubyで取れるようにしておいた方が、ファイル出力したり、Webに流し込んだりが楽そう。高価なEthernet Shieldに頼らなくても済むし。

ところで、環境は最近買ったMac Book(Mac OS X 10.5.7)で開発環境もスッカラカンだったので、そこから始める。

rubygemsを1.2以降にする

ruby-serialport 0.7.0のREADMEを見たらgemでインストールする方法が書いてあるのだが、Mac OS X(10.5.7)に最初から入っていたgem 1.0.1でインストールしようとしたら、1.2以降を要求されたので、まずgemのアップデートから始める。

sudo gem install rubygems-update

上記コマンドで1.3.4になった。

もしgemが入っていなかったら(gem -vと打って何も表示されなかったら)MacPortsなどでインストールする必要があるが、ここでは割愛。

ruby-serialportのインストール

多分、これでOKだと思うのだが

sudo gem install ruby-serialport

なぜかうまくいかなかったので、RubyForgeから.gemをローカルに落としてきて

sudo gem install ruby-serialport-0.7.0.gem

とやったらOKとなった。

Rubyでシリアルで取得した値をそのまま表示

こちらを参考(というか、ほとんどそのまま)

http://www.ok.kmd.keio.ac.jp/ruby/?p=37

ただ取得した文字列を表示するだけなのでArduinoのIDEと同じだが、センサの値をrubyのライブラリで処理できるのは大きな進歩。

RubyとArduinoのソースはgistに置きました。

http://gist.github.com/149614

Arduinoをはじめよう Arduinoをはじめよう
船田 巧

オライリージャパン  2009-03-27
売り上げランキング : 2460

Amazonで詳しく見る
by G-Tools

| | Comments (0) | TrackBack (0)

2009.07.17

Arduinoで加速度センサを使ってみた

Arduinoネタが続く。

光センサで明るさを検出して「何か」を起こすのもよいが、動きを検出するのも面白そうなので加速度センサを買った。正直、どんなものかわからなかったのだけど、まあ1000円だし。

センサのX軸、Y軸、Z軸の出力をArduinoのアナログインプットの0、1、2に繋ぎ、USB経由でPCにデータを送り込む。Arduinoのシリアルモニタで生データを見てもいいが、Processでシリアル通信をグラフィックに表示させるサンプルを書いてみた。ブレッドボード上に刺したセンサを傾けたり振り回すと画面上の赤い丸が動く。【動画はこちら】

これって加速度というの?というのが正直な感想。センサを動かさなくても微妙に動いていたり、生データのままでは使いにくそうだ。WiiやiPhoneでは相当キャリブレーションやバッファリングをしているのだろう。

主に参考にしたのはこちら。

建築発明工作ゼミ2008: Arduino-Processing シリアル通信1
はてなユーザーの評価  livedoorユーザーの評価

ArduinoとProcessのソースは下記のgistに置いた。USBのデバイス名はArduino IDEのTool/Serial PortでSerial Monitorに出力されるデバイス名に書き換えること。

http://gist.github.com/148434

さて、これで何を作ろう。

| | Comments (1) | TrackBack (0)

2009.07.11

Arduinoで光センサを使ってみた

Arduino_01

いつか、作ってみたいものができたら始めよう、と思っていたarduinoですが、作りたいものも思いつかないまま見切り発車してみました。

Amazonでも買えるキットにはArduino本体に加え、LEDや光センサ、スイッチ、ブレッドボードまで入っていて「Arduinoをはじめよう」に書かれていることを一通りは試せます。写真は手前のCdSセルという光センサの値に応じてLEDの点滅速度が変わるというもの。

センサの値をEthernetシールドからtwitterに投稿するのが流行ってますが、これ単体でもセンサの値をUSB経由でPCに送ってきて、それだけでも色々なものが作れそう。

Arduinoをはじめようキット
Arduinoをはじめようキット
スイッチサイエンス 
売り上げランキング : 945


Amazonで詳しく見る
by G-Tools

| | Comments (0) | TrackBack (1)

2009.04.17

選択した文字列を右クリックでtwitter投稿するOpenSearch[totoc]

totoを予想するための情報を片っ端からtwitterに投稿したくて、twitter投稿ブックマークレットを作ってみたが、わざわざマウスをツールバーまで動かしてブックマークレットを呼び出す操作が面倒くさい。

uessay: toto予想にtwitterを使ってみる
はてなユーザーの評価  livedoorユーザーの評価  Buzzurlにブックマーク

そこで、過去にFirefoxで選択した文字列を右クリックで検索エンジンに渡すOpenSearchという技術を検索エンジン以外にも応用できないか考察したことがあったので、これをtwitter投稿に試してみた。

uessay: OpenSearch Descriptionで選択した文字列を右クリックから取得する
はてなユーザーの評価  livedoorユーザーの評価  Buzzurlにブックマーク

そんなわけで書いてみたのが、こちら。

totoc

上のリンクをFirefoxで開くと素っ気ないページが表示されるが、右上の検索窓のプルダウンから"twitterに投稿"を追加すると

Totoc1

こんな感じで文字列を選択して右クリックからtwitterに投稿できる。多分、マウス移動距離、キーボード入力とも、これよりスピーディにtwitter投稿できる方法は存在しないんじゃないだろうか。

Totoc2_2

totocというネーミングは、totobの次という意味合い。僕としてはtoto予想に使うつもりだが、普通にtwitterに投稿するツールとしても便利だと思う。

uessay: jQueryで他サイトのtoto予想を効率よく収集するブックマークレット[totob]
はてなユーザーの評価  livedoorユーザーの評価  Buzzurlにブックマーク

 

--

【AD】TSUTAYA DISCASかDMM.comのどちらかを契約しようかと検討中。TSUTAYAはベストセラーのDVDなど映画以外の品数が多くて勉強好きにはよさそうですね。

| | Comments (0) | TrackBack (0)

2009.02.07

jQueryで他サイトのtoto予想を効率よく収集するブックマークレット[totob]

toto予想のために前シーズンのJリーグの公式記録を解析していたが、残念なことに、今シーズンの日程が発表された途端に参照できなくなってしまった。というわけで当初の予定、つまり他の予想屋の情報を効率よく摂取するほうに専念することにする。

前に、予想屋のブログを自動で解析するようなものを作りたいと書いたが、自動解析は諦めた。費用対効果が悪そうだし、開幕まで間に合わなさそうだし。

そのかわり、こんな戦法を思いついた。

  1. はてなブックマークのブックマークレットと同じように、既存のページにオーバーレイするブックマークレットを作り、手動でtoto予想を集める。jQueryを使えばオーバーレイするダイアログを1行で書けるので、これを使う。
  2. ストレージはMySQLなどのRDBMSではなくGoogle Spreadsheetのform機能を使って流し込む。幸いgoogleドメインの外からpostしても使える。

で、作ってみたのがこちら。ブックマークレットにして呼び出すと任意のページでダイアログをオーバーレイ表示する。それぞれのチェックボックスが何を意味するかは書いてないがtotoに詳しい人ならわかるかな。で、送信ボタンを押すと、Google Spreadsheetにポストされる。(色々と見にくい点は後述)

totob/03.js (old version : 02.js)

作るうえで苦労したことを幾つか書いておく。

ブックマークレットからjQueryを使う

JavaScriptを本格的に使ったことがないので知らなかったが、jQueryのような外部スクリプトをスクリプト中でロードするのは簡単ではないらしい。amachangが提案している方法も、なぜかブックマークレットでは使えなかった。

で、ブックマークレットの中でjQueryを呼び出してみた。ブックマークレットが長くなる点が気になるが、Firefoxでは動いているのでOKとしておく。

ブックマークレットにCSSを適用させられない

最初に作った試作版ではjQuery用のCSSを適用していて、ダイアログの色やボタンまで、バッチリ装飾されている。好みではないが、jQuery標準のfloraというテーマだ。

totob/01.html

ブックマークレットで表示しているダイアログにもCSSを適用できたらいいのだが、jQueryお得意のCSSの要素変更も試しても適用されず、ものすごくカッコ悪い。

(ここから追記)ブックマークレットで表示しているダイアログにCSSを適用するには、ダイアログを表示した後にjQueryでCSSプロパティを操作すればよい。最初、ダイアログを表示させる前に指定したが効果がなかった。そんなものかな。

元のCSS(http://view.jquery.com/tags/ui/latest/themes/flora/flora.dialog.css)で

.flora .ui-dialog,
.flora.ui-dialog {
background-color: #e6f7d4;
}

とあった場合、

$('div.ui-dialog').css({
'background-color':'#e6f7d4'
});

と書く。これを、flora.dialog.cssに書いてある分だけ延々と手作業。これってjQueryをブックマークレットから使う時だけの苦労かな。誰か汎用化してないかな。

なお、元のCSSではdiv要素という指定はないので$('[class="ui-dialog"]')と指定する書き方もあるが、クラスだけを指定すると非効率的とnitoyonさんが書いていたので、なるべく要素を指定することにした。

まあ自分でしか使わないので放置プレイかな。

jQueryで作る Ajaxアプリケーション
jQueryで作る Ajaxアプリケーション 沖林 正紀

おすすめ平均
stars最初の一歩
stars初心者に優しくない
starsjQueryの知識を深めるのにはちょうどいい。
starsjQueryへの理解を深める上で最適な教科書

Amazonで詳しく見る
by G-Tools

| | Comments (0) | TrackBack (2)

2009.01.11

OpenSearch Descriptionで選択した文字列を右クリックから取得する

Firefoxは選択した文字列を右クリックから検索エンジンに渡すことができて便利だ。似たようなことはJavaScriptのブックマークレットでもできるかもしれないが、マウスをブックマークツールバーまで動かす分と、JavaScriptを呼び出す一瞬のモッサリの分だけ、この方法が早い。

Os1

これを実現するためにはFirefoxの検索バーに検索エンジンを登録すればよいのだが、登録するための仕組みがOpenSearchである。OpenSearchフォーマットのXMLファイルをサーバ上に置き、各ページのヘッダに、このXMLファイルのリンクを埋め込んでおくと検索バーのプルダウンが青く光り、指定した検索エンジンを追加できるようになる。

簡単そうなので、さっそく、申し込んだばかりのさくらのサーバで動かしてみた。これ以上ないくらいシンプルなページだが、検索バーに登録すると、右クリックからこのページに文字列を渡せるようになる。

言うまでもないが、このページが検索ページである必要はなく、HTTP GETやPOSTで文字列を受け取るページであればなんでもよい。単純にメモを蓄積するのに使ってもいいし、Yahoo! Pipesに飛ばしてもいいかもしれない。(最初は、Pipesにリダイレクトしようと思ってOpenSearch Redirect for Pipesというサイトにする予定だった。作ってもメリットなさそうなのでやめたけど)

ソースはこちら。

http://gist.github.com/45629

XML Hacks―エキスパートのためのデータ処理テクニック
XML Hacks―エキスパートのためのデータ処理テクニック Michael Fitzgerald

おすすめ平均
stars目的が合えば、それなり(または相当に)に便利
starsXMLの「スゴさ」がよく分かる

Amazonで詳しく見る
by G-Tools
入門XML
入門XML エリック・T・レイ

おすすめ平均
starsSeniorなSEにとっての「入門書」です
starsバランスのとれた優れた入門書

Amazonで詳しく見る
by G-Tools

| | Comments (0) | TrackBack (0)

2008.10.27

Yahoo! Pipesの地図出力をYahoo! Japanの地図で表示させる

Yahoo! Pipesの地図表示が「面白いけど使えない」という話を何度か書いたことがある。どれぐらい使えないかというと、Art Beat APIで新宿駅周辺1500mを表示させたときの表示が、こんな感じで、ズームすると「Sorry」と表示されてしまう。

Pipes1

で、他の地図のAPIに渡せば、それなりの表示をしてくれるんじゃないかと、こんなのを作ってみた。

PipesY!Map

(注:Lacoocanを解約する予定ですので、ソースのみGitHubで見ることができるようにしました。http://gist.github.com/44722

Pipesymap1

Yahoo! Pipesを使ったことのある人ならわかると思うが、URLからid=....の部分をコピペするとPipesのgeorssをマッピングする。残念ながら表示位置の調整は手動で、何もしないと新宿中心である。

「ソースを見る」で表示するとHTMLとJavaScriptを合わせて25行しかないが、ちょっと苦労したのでメモしておく。自分で作ってみたい人はどうぞ。

Yahoo! 地図によるgeorss表示

元々はGoogle Maps APIで作ろうと思っていた。Yahoo!のバックエンドをGoogleでフロントエンドするなんて素敵だなぁ、と思いながらGoogle Maps APIのgxmlのXMLから緯度経度を抜き出して表示するサンプルなどを見ていたが、肝心のRSSからgeocodeを抜き出す方法がよくわからない。

で、検索してるとYahoo!地図では、なんと1行でgeorssを読み込み、マーカーや吹き出しまで表示してくれるのだとか。

GeoRSSを表示してみよう! - 地図スタッフブログ - Yahoo!ブログ
はてなユーザーの評価  livedoorユーザーの評価 

乱立するgeorss

早速、PipesのRSSを読み込ませてみたが、案の定、そのままでは読み込んでくれないらしい。Pipesが出力するgeocodeは、こんな感じである。

<geo:long>139.69826169864</geo:long>
<geo:lat>35.693038126664</geo:lat>

一方、Yahoo!地図のサンプルで読み込ませているワイワイマップは、こんなに冗長である。

<ygeorss:point>139.701495 35.68979694</ygeorss:point>
<geo:Point><geo:long>139.69826169864</geo:long>
<geo:lat>35.693038126664</geo:lat></geo:Point>
<georss:point>35.693038126664 139.69826169864</georss:point>

何事か!ということはヘッダに書いてある。

<rss version="2.0"
xmlns:georss="http://www.georss.org/georss" 
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" 
xmlns:ygeorss="http://map.yahoo.co.jp/ygeorss" xmlns:media="http://search.yahoo.com/mrss">

結局、PipesのRSSを読み込んでgeocodeの部分だけを書き換えるプロキシを書いて、その返り値をYahoo!地図に渡したら動いた。

それ以外は工夫してないのだけど、コードを書くこと自体が久しぶりなので構想から随分とかかってしまった。追加機能とか、そのうちに。

--

Rubyレシピブック 第2版 268の技
Rubyレシピブック 第2版 268の技 まつもとゆきひろ

おすすめ平均
starsプログラム言語一つにつきレシピ本は持っておくべき。
stars「Rubyでやりたい」のならとりあえず読んでみて

Amazonで詳しく見る
by G-Tools

| | Comments (0) | TrackBack (0)