twitter上で親しい人のタイムラインを動的に生成するYahoo Pipes

7月 4th, 2009

shokai 未分類 , ,

修論を出した後のテンションでまたYahooPipesを作った。



親しい人で動的にタイムラインを作るpipes。
しくみは単純で、最近favを付けたり付けられたり、replyしたりされたりした相手でタイムラインを作る。
自分の発言内容やそれに対する相手の反応によってメンバーが動的に入れ替わる。

忙しくてtwitter見れない時はこれだけ見ておけば親しい人のpostはだいたいチェックできるかもしれない。


RSSにはusericons.relucks.orgを使ってアイコンを表示したりユーザ名やURLもリンクになるようにしてある
twitter dynamic timeline


pipes全体図
twitter dynamic timeline


一番上ですぐ分岐させて、左から順に
  • favをもらった相手:favotterのユーザページからHTMLスクレイピングしてる
  • 最近replyを受けた相手:オフィシャルtwitter検索でユーザ名検索してatom feedから取得
  • favをつけた相手:ユーザ個別ページからatom feedで取得
  • 最近自分がreplyした人:ユーザタイムラインからatom feedで取得
という具合。

yahoopipesは処理時間が長くなりすぎるか、pipesから相手へのアクセスが多くなりすぎるとエラーが出てしまう。

処理時間が長くならないようにするには並列化。
今回上の方で4つに分けているように、早めにsplitモジュールで分けてそれぞれでHTTPリクエストを発行させてレスポンス待ちにすればいい。
この時どれかの結果を作るのに他で取得した結果を使おうとすると結局縦に1本につなげているのと変わらなくなってしまうので注意する。

pipesから他のサイトへのアクセスについては、twitterとyahooが地理的に遠くないからなのか制限が緩くなっているのか、3秒で100アクセスぐらいしてるのにエラーはでない。


Flickrのcontactの写真をLargeサイズで全部見る

6月 12th, 2009

shokai 未分類 ,

Flickrのcontactの写真をMediumサイズで全部見るで紹介したyahoopipesで作ったfeedをGoogleReaderで見る方法、

なぜかLDRがクロールしてくれなかったので仕方なくGoogleReaderで見ていたのだが、
これ Pipes: Flickr Contacts FullPhotos
で100件Large出力してLDRに登録したらしっかりクロールしてくれるようになった。400件とかにすると駄目っぽい。


Pipes: Flickr Auto Feedをcloneして少しなおした。RSSのURLが長くなりすぎる部分とか。
Google Readerで過去の写真へ100枚ぐらい潜ると、古い写真が上の方に溜まってブラウザがどんどん溜まってまともに動かなくなる。画像の先読みタイミングも1枚ずつなのでスクロールするたびに待たされる。
LDRならLargeサイズでもストレスなく閲覧できる。


LDRではzやshift+zで画面が広くなるのでLargeサイズも見れる。
jで下スクロール、shift+jで過去記事にいける。

bitbucket.orgのユーザのcommit logをYahoo Pipesでまとめる

6月 11th, 2009

shokai 未分類 , , ,

mercurial版githubであるbitbucketで、ユーザ名を指定してそのユーザの全リポジトリのcommit logをまとめてRSSで見れるpipesを作った。


Pipes: bitbucket.org user’s all commit log


これまで、bitbucketにはリポジトリ単位でのRSSはあった。でもせっかくほかのユーザをfollowしてもその人が新しく始めたプロジェクトをRSSで知る方法が無かった。
このpipesを使えばユーザ名いれてRSSリーダに登録しておけばすぐわかる。
あるいは自分の全リポジトリマージFeedを作ってfriendsfeedに読み込ませたりできる。


それなりに大きいpipesになった
pipes: bitbucket.org user's all commit log

よく使うモジュールの組み合わせ

  • Loop+FetchPage or Loop+FetchFeed → Regex → Filter(permit matches regex)
    • スクレイピングの定番。取得して切り出してフィルタリング。
  • Rename(copy)→Regex→Loop+StringBuilder
    • itemのtitleや本文を他のプロパティから値を集めて自作する
  • UserInput→StringBuilder(正規表現生成)→Regex
    • ユーザに結果を絞り込ませたい時とか
最近ようやくpipesが楽しくなってきた。


俺のbitbucketでのアカウントhttp://bitbucket.org/shokai/

Make Tokyo Meeting 03に出展します

5月 18th, 2009

shokai 未分類 , , , ,

Make: Tokyo Meeting03に個人的に出展します

開催日:2009年5月23日(土)、24日(日)
時間:23日 12:00 – 18:00、24日 10:00 – 17:00
入場:無料
会場:デジタルハリウッド 八王子制作スタジオ
東京都八王子市松が谷1番地 – Google Maps
交通:多摩都市モノレール「松が谷駅」徒歩1分
   京王線・小田急線「多摩センター駅」徒歩10分
主催:株式会社オライリー・ジャパン 共催:多摩美術大学 情報デザイン学科
協力:デジタルハリウッド大学、東京工芸大学 メディアアート表現学科



■出展情報

  • ブース名:橋本商会
  • 展示日:5/24(日)(2日目のみ、1日目が修論中間発表のため)
  • ブースの場所:まだわからない

■展示物
2つです
  • USB Force Field : 静電気容量を使ったセンサーキット、若干数販売あり
  • 影電話 : ずっと作ってるやつ、うまい具合に暗かったら展示できたらする


■USBフォースフィールド
大変うさんくさく見えるけど、PSoC CapSenseで静電容量タッチセンサ 4つ動かしたの進化形で5cm程度の距離で反応するようになりました
(動画)

これをUSBデバイス化していくつか売ろうと思いますが需要がわからない。あまり作らないと思います
どれぐらい作ればいいんだろう。1つ3000円ぐらいになりそう。
もちろんアンテナ部分の形状を変えれば、前述のタッチセンサとしても使えるようになってます。


■影電話
これが今2台あって通信するようになってるんだけど、どうやって置いておこうかなあと考えている
(動画)

FT232RLのUSB要求電流量を最大にする

5月 17th, 2009

shokai 未分類 , , , ,

石澤さんに教えてもらったのだが、USBデバイスはホストに「自分が必要な電流量」を申告するようになっているらしい。
ArduinoやGainerやmoxaにも使われていているFT232RLというUSBシリアル変換チップもその設定ができるようになっている。
俺も秋月のFT232RL 基盤実装済みキットを使う事が多い。


■電流量の設定をする
まずFTDIのサイトからMProg(Windows用のみ)をダウンロードしてきてインストールする。
FT232シリーズのドライバももちろんインストールして、仮想COMポートとして認識しているのを確認。


MProgを起動して、
[Device]→[Scan]
[Tools]→[Read and Parse]
で接続しているFT232のデバイス設定が読み込める。
これを一旦ファイルとして保存してから、[File]→[Edit]して編集。
右上のMax Bus PowerをUSBの最大電流量である500mAに設定し、ファイルに保存。最後に[Device]→[Program]で書き込む。
FT232RLでUSB要求電力を最大にする


これでUSBケーブルを刺し直すとドライバが再インストールされ、デバイスとしての要求電流量が増えている。

セットアップ済みMeadowをインストールした

5月 9th, 2009

shokai 未分類

Meadowがいきなり壊れて日本語入力も効かないし.emacsも読み込まなくなったので、アンインストールしてこちらのMeadowに乗り換えた
Meadow/Emacs memo: 設定済み Meadow を使ってみよう

windowsではemacsはruby-mode, html-mode(blog書く用), c-mode(マイコン用)程度しか使わないのでこれで十分。良い物を公開してくれていて大変ありがたい。


setup-ja.exeをダウンロードしてきてnetworkからインストールする。setup.exe自体のバージョンが2.2だけどMeadowは3.0系が入った。

大量の設定が含まれています.そのため,特に起動はかなり遅いです. CPU 2.4GHz ,メモリ 640M , WindowsXP Pro で 5 ~ 10 秒ぐらいかかります.起動速度や動作速度を重視する方は使わないようにしてください.

と書いてあるけど、2年前に買ったMacbookでWindows XPをbootcampしてる環境でも起動時間は3秒ぐらいで特に問題は無い。


インストール先は C:\Meadow にした。
C:\Meadow\bin\RunMW32.exe から起動できる。

dot.emacs.ja を開いて .emacs.ja にファイル名変更して保存し、RunWM32.exe起動。
[esc+x]してcolor-theme-selectでblackを選択して背景を黒に変更。


Firefox拡張のIt’s All Text!でテキストエリアをRunWM32.exeで開くように設定した。

これでだいたい環境が元に戻せた。

1000分の1東京都

5月 9th, 2009

shokai 未分類 ,

先月末ビッグサイトにいってきた
1000分の1東京都 – a set on Flickr

R0011757

Google Earthと見比べてもそっくりだった。
R0011737
R0011739

現在地
R0011745

新宿
R0011767
R0011771


渋谷
R0011763

R0011800


かっこいい
R0011744


通路で展示してた
3D地図は見慣れてるけどこれだけの画角になるとこれはこれで違う。1万x1万ピクセルぐらいのモニタでGoogle Earth起動したら似たような感覚になれるのかな
R0011784

R0011733

Flickrダウンローダを作った

5月 9th, 2009

shokai 未分類 ,

Rubyで。ダウンロード部分はwgetに投げているのでUnix系でしか動かせないかもしれない。REXML::XPath使うのの勉強になった。

shokai / Flickr downloader / overview — bitbucket.org

タグ検索してユーザ指定したりもして(権限があれば)オリジナル画像を一括ダウンロードできる。


実行例

flickr-download beer,food 51753258@N00

で俺がbeerとfoodをタグを付けた写真が全部取ってこれて空腹を紛らわせれる。51753258@N00のところはユーザIDで、各ユーザぺージのRSSのURLを見ればわかる。


オリジナル画像を手に入れるためにFlickr APIのphotos.searchとphotos.getInfoのラッパーを実装した

PSoC – TX8モジュール

4月 29th, 2009

shokai 未分類 , , , ,

UARTモジュールとまるきり同じだけど、TXだけ使うとデジタルブロック1つで済むので節約したい時に使える。
とくにCY8C21334でCapSense (CSD)使うと、digital/analogともに残り1ブロックになるので、このTX8を使うかI2Cでもう1つ別のマイコンとやりとりしてそっちにシリアル通信してもらうかしないとパソコンとやりとりできない。


9600bps出すためのCPU設定。
内蔵24MHz → System Clock → VC1 → VC3と流れて分周していってTX8_1のクロックソースにする
TX8モジュール


Port_0_1まで結線する
TX8モジュール


main.c

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
void main()
{
  TX8_1_Start(TX8_1_PARITY_NONE);
  while(1){
    TX8_1_CPutString("this is test¥r¥n");
  }
}

これだけで8bit パリティ無し ストップビット1で送信できる。


あとは秋月のFT232RL基盤のRXDピンに流せばいい
橋本商会 » 秋月FT232RL基盤をPSoC CY8C29466で使ってみる


受信できた
TX8モジュール

C++/CLIで動かしているOpenCVのCvImageをC#.NETのBitmapオブジェクトにして読み込む

4月 25th, 2009

shokai 未分類 , , , , ,

橋本商会: Cで書いたOpenCVのコードをC++/CLIで.NET用DLLにしてC# Formアプリから使う の続き。
FormアプリからOpenCVのHighGUIを別ウィンドウで開いていたが、Bitmapオブジェクトにキャストする事で.NETアプリのPictureBoxなどに読み込む事が出来る。
これにより画像処理だけ高速にC++で行い、アプリケーションのUIやネットワーク部分はC#.NETで実装するといういいとこどりが出来る。


■出来た物
FormにLoadImageボタンとPictureBoxを追加。
LoadButtonを押すとShadowCamera.dllから呼び出しているOpenCV側のCvImageが変換されてBitmapになって出てくる関数を作った。
C++/OpenCVのCvImageを.NETのBitmapに変換できた

今回作っているShadowCameraは背景を蓄積させて統計を取り、差分で人物の影だけを抜き出すライブラリなので、毎フレーム計算し続ける必要がある。runCapture()の最後でwhileループさせて実現している。
なので、1つBitmapオブジェクトを用意しておき、whileループの最後で処理結果を毎回保存しておいてそれをC#側から適当なタイミングで読みに行く実装にした。
DLLであるC++/OpenCV側のループを毎フレーム回し続けながら、それをブロックする事なくC# Formアプリ側から取得できる。


例によってOpenCV勉強用mercurialリポジトリchanges19としてcommitしてある。


なお、VisualStudioはC#はutf8なのにC++はshift_jisで保存されてしまい、utf8にするとビルドできなくなってしまうのでリポジトリビューアでは文字化けしてしまっている。悲しい。
文字化けしている部分には大したこと書いてないので無視していいし、必要ならリポジトリの左側からzipでダウンロードできる。


ちなみに今回の方法は、3年以上前の開発合宿の記事に匿名様が
コメントで教えてくれたSharperCVのCvImage型をSystem.Drawing.Bitmap型に変換する方法が書かれていてそれを元にした。
やはりできなかった事とかも書いてみるものだなと思った。もちろん助けをアテにしちゃいけないが


■ShadowCamera.dll側の変更
C++プロジェクトのShadowCameraに、System.Drawingへの参照を追加する。Bitmapクラスを使うため。
C++/OpenCVのCvImageを.NETのBitmapに変換できた


「新しい参照の追加」ボタンを押す
C++/OpenCVのCvImageを.NETのBitmapに変換できた


.NETタブの下の方にスクロールしていって、System.Drawing を追加する。
C++/OpenCVのCvImageを.NETのBitmapに変換できた


ShadowCamera.hにコードを書き加える

OpenCV Study: c9320e90f1be ShadowCamera/ShadowCamera.h
DLLへの参照を追加して

using namespace System::Drawing;



勝手に書き換えられたら嫌なので、privateでグローバル変数 shadow を作っておく

private:
    System::Drawing::Bitmap^ shadow;



DLL利用側のためのアクセサを用意する

public:
    System::Drawing::Bitmap^ ShadowImage(void){
        return this->shadow;
    }

これでDLL内のshadowというBitmapオブジェクトを、DLL外から読み出す事が出来るようになった。
いまいち ^ や ~ などをつけるルールを把握しきれていないけど、他のC++/CLIアプリがそうやっていたので先人の作法に倣うことにする。


あとはrunCapture()の最後のwhileループ内で、毎回作られるimgResultというIplImage(CvImage互換)オブジェクトをdynamic_castしてshadowに保存する。

this->shadow = dynamic_cast<System::Drawing::Bitmap^>
    (gcnew System::Drawing::Bitmap(w,h,w*3, 
    System::Drawing::Imaging::PixelFormat::Format24bppRgb,
    static_cast<System::IntPtr>(imgResult->imageDataOrigin)));

長いので変換部分のみ抜粋。ShadowCamera.hの85~125行目がwhileループです

dynamic_castやstatic_castの違いはC++の新しいキャストが参考になった。
オブジェクトの代入のためのcastは.NETの上で動いているからdynamic_castで、unmanaged領域と行き来するSystem::IntPtrと*char間のcastはstatic_castになるという理解でいいのかな?



■ShadowCamera.dllを使うC# Formアプリ側の変更
ボタン(buttonLoadImage)と画像を表示するためのPictureBox(pictureBoxResult)を配置。
PictureBoxはSizeModeをStretchImageにしておくと自動リサイズされて便利。
C++/OpenCVのCvImageを.NETのBitmapに変換できた


で、ボタン押下イベントで

pictureBoxResult.Image = cam.ShadowImage();

BitmapをPictureBoxのImageプロパティに突っ込むだけで表示できる。楽ちんだ
C++/OpenCVのCvImageを.NETのBitmapに変換できた

終わり。

ボタンじゃなくてThreadなどで適当にsleepを入れながら読み込み続ければふつうに影カメラになる。

track feed