0

モノ作る時に気をつけている事とか

10月半ばごろに、適当に飲みながら?話した事を郡山さんがテープ起こししてくれたので

コピペしてみる。

ただし、ほんのちょっとだけ(暴言とか)編集した。

あと、俺は普段語尾は「である」調ではないんだけど、郡山さんが文字起こしするとそうなる。

—————-

情報世界と物理世界を同じもののように、タコの足のようにくっつけて、ひとつのものとして作る必要がある。そのための考え方であり技術の選び方を考えなければならない。「ウェブのサービス」などのように分けて考えるものではなくて、全てが一つのものである。「ウェブサービスを作りたい」と言うのではなくて、何か作りたいものの中の部品としてウェブサービスがある。

プログラムを書いている時に試行錯誤している。プログラミングは実装ではなくて、プログラムを書くことが設計である。書いてすぐ試して、というスケッチしているような中でデザインをしていく。

Pileusをつくっている時に、いきなり「こういうもの」として頭で描こうとしても、詳細に踏み込めない。作った後の今だったら、こういう傘があってこっちに振ったらこうなって歩くのにあわせて地図が動いて読んで、表示が変わって、撮影したものがアップロードされた時に自動的にタグがついて、などは分かる。

それらは、つくってみるまで具体化してなかった。「flickrの写真が出る」とかまでは言っていて、それがどう出るかとかどういう時に出ないのかとか、そういう条件を叩き出さないといけなかった。しかし、作らないとそれができない。

なぜ作らないとできないか。それは、人間の言葉は表現力に限界があるからである。普通の人間の言葉は、同時に並列にものごとが起こっていることとか、凄く複雑な論理構造(それとこれ、かつ、そうでない、など)を表現することができない。

この2つができないから、最初からPileusの完全な設計図を書くことができない。そのため、簡単にユースケースを書いた段階からどんどん作る必要がある。作ることが設計図を書くことになる。

作らないとインタラクションの詳細が分からない。むしろ、例えば影電話の場合、作ってすぐコンパイルして実機で影の行灯の表示やぼかしをかけたほうがいいなとか、ゆらぎを入れた方がいいなとか、やってみたら無い方がいいなとか、そういうことが分かる。そういったことは絶対に試しながらじゃないと分からない。設計する時には、人間の言語では表現することができない。設計はコンピュータの言語で行う。

Read more

0

GPS ConnectorをUSB版SiRFstarIII用対応アップデート

10ヶ月ぶりのアップデート。

■過去記事

s.h.log: GoogleEarth+GPS+DigitalCompass

s.h.log: C#用クラス: シリアル接続GPSのラッパーをver up

USB版のGPS SiRFstarIIIを買ってきて試して、ちょっとアップデートした。

GpsConnectorLib.cs (VisualStudio2005 / C#2.0)

いくつか関数名が変わったので入れ替える人はKY(コード嫁)でお願いします

さっそくPileusに組み込んだ

DSC06915DSC06933

■動作確認機種

・SiRFstarIII BC-337(CF版)

・SiRFstarIII GU-20(USB版)

■使い方

最初にシリアルポートと同じノリで設定する

usingOrg.Shokai.Util

GpsConnectorgps=newGpsConnector();

gps.PortName=”COM1″;

gps.BaudRate=4800;

if(!gps.IsOpen)gps.Open();

あとは、GpsConnectorクラスはデータ受信してパースをやってくれるので

好きなときにgpsDataメンバにアクセスしてデータを取り出せばいい

double latitude = gps.gpsData.lat; // 緯度

double longitude = gps.gpsData.lon; // 経度

詳しいデータは、GpsConnector.toString()でも出てくるのでそっちも見てね

USB版は常に電源供給しているので、CF版と違ってすぐ衛星を補足できていい。絶対USB版の方がオススメですね

0

GM – translate JK slang

しゅんpさんがKY KYうるさいのと、clip – 女子中高生が使っている略語を見たのとで作った。

ページがロードされた瞬間に翻訳するGreaseMonkey script。

install → translate JK slangs – Userscripts.org

varslang_dic=[

[“JK”,”女子高生”],

[“KY”,”空気読めない”],

[“HK”,”話変わるよ”],

[“IW”,”意味わからない”],

[“HD”,”暇な時電話する”],

[“KZ”,”からみづらい”],

[“MT”,”まさかの展開”],

[“MA”,”まじありえない”],

[“DK”,”大事なとこで噛む”],

[“BY”,”場が読めない”],

[“OD”,”お肉大好き”],

[“WH”,”話題変更”],

[“KB”,”空気ぶち壊し”],

[“TK”,”とんだ勘違い”],

[“KK”,”過剰な勘違い”],

[“CC”,”超かわいい”],

[“HP”,”はみだしパンツ”],

[“WK”,”しらける”],

[“MM”,”マジめんどくさい”],

[“KI”,”カラオケ行こう”],

[“MS”,”みんなに避けられてる”],

[“DK”,”男子高校生”],

];

functiontranslate_jk(){

varbody=document.body.innerHTML;

for(vari=0;i
varreg=newRegExp(slang_dic[i][0],”g”);

body=body.replace(reg,slang_dic[i][1]);

}

document.body.innerHTML=body;

}

window.addEventListener(‘load’,translate_jk,true);

0

C# – HTTPから非同期でデータ取得

かなり他にネタが貯まってるんだけど、とりあえず今作ってるのの整理としてpostしておく。

XMLHttpRequest使えばいいんじゃないか、とも思ったがそんなに面倒でも無いので前のを非同期化してみた。

Download => Org.Shokai.Web.AsyncWebRequest.cs

VisualStudio2005Pro / C#2.0環境で動作確認。

Thread使ってるのでHTTPリクエスト中もGUIが固まらない。

■使い方(簡単に)

AsyncWebRequestにResponseというクラスを引数に持つcallback関数を登録して、

get(); すればデータ全部受信した時にcallbackが呼ばれる。Response.contentの中にHTML全部入ってる。

■使い方

usingOrg.Shokai.Web;

AsyncWebRequestasyncReq=newAsyncWebRequest();

asyncReq.encoding=Encoding.UTF8;

asyncReq.sleepTime=1;

sleepTimeとエンコードは自動的に初期化されるので、省略して構わない。

コールバック関数をどこかに書いておく。

publicvoidonAsyncResponse(Responseres)

{

Console.WriteLine(res.content);//受信したデータ

}

さあ、さきほどのコールバック関数を登録して、いざ呼び出したまえ!

asyncReq.onResponse+=onAsyncResponse;

asyncReq.get(newUri(“http://shokai.org”));

レスポンスはResponse.bodyの中に入ってるので、コールバック関数の中で適当に料理してね。

Read more

0

C# – HTTPからデータ取得

XML取得してparseは以前やったけど

s.h.log: C#でRSSリーダを作ってみるテスト

生のHTMLを取得するのはこれが初めて

こんな感じでgetできる関数 getPage()を作る

Stringpagedata=getPage(newUri(“http://shokai.org”));

Console.WriteLine(pagedata);

参考:WebRequest、WebResponseクラスを使ってファイルをダウンロードし表示する: .NET Tips: C#, VB.NET, Visual Studio

usingSystem.Net;

usingSystem.IO;

usingSystem.Text;

publicStringgetPage(Uriurl)

{

WebRequestwebreq=WebRequest.Create(url.ToString());

WebResponsewebres=webreq.GetResponse();

Encodingenc=Encoding.UTF8;

Streamst=webres.GetResponseStream();

StreamReadersr=newStreamReader(st,enc);

Stringhtml=sr.ReadToEnd();

sr.Close();

returnhtml;

}

thread化していないので、相手方のサーバーのレスポンスが返ってくるまで止まるので注意。