2008年5月14日水曜日

iPod Touch 1.1.4でmouseDownイベントを取得するには


iPod Touch 1.1.4でmouseDownイベントを取得する。

・__GSEventの宣言が必要。

・__GSEvent.i4がx座標、__GSEvent.i5がy座標。
 いずれもfloat型。

・UIResponderのサブクラスに定義する。

・短辺がx軸、長辺がy軸。
typedef struct __GSEvent {
long i0;
float i1;
long eventType;
float i3;
float i4;
float i5;
} __GSEvent;

- (void)mouseDown:(struct __GSEvent *)fp8
{
NSLog(@"(%f,%f)", (*fp8).i4, (*fp8).i5);
}

2008年5月11日日曜日

ブラウザとサーバで双方向通信


古橋貞之の日記より
Ajaxはクライアントの都合でサーバーに通信を仕掛けるpull型の通信ができ、Cometはサーバーが好きなタイミングでクライアントへデータを送りつけるpush型の通信ができるわけですが、新たに双方向の通信ができる技術を開発しました。...
とのこと。

ブラウザとサーバで双方向通信ってどうやるんだ?
と思っていると、
...仕組みはどうなっているかと言うと、通信部分にFlashを使っています。Flashとサーバーとの通信には、ActionScriptのSocketを使っています。...
だって。
Flashってソケット通信できたのか!
なるほどなぁ

2008年5月7日水曜日

フォルダ内のファイルの拡張子を一括削除


OSXのAutomatorを使えば、
フォルダ内のすべてのファイルに一括で拡張子を付けることができる。
しかし、逆に一括で削除することが出来なくて困った。

そこで、シェルスクリプトで拡張子を一括削除する1行を書いてみた。
for i in `ls`; do mv $i ${i:0:${#i}-4};done
${variable:offset:length}で変数variableをスライスできる。

さらに、${#i}の部分でファイル名の文字数を取得し、
そこから"."+拡張子3文字分を引いている。

カレントディレクトリ内のすべてのファイルから、
3文字の拡張子を取り除く。

例:hoge.txt -> hoge

2008年5月4日日曜日

Cocoaで"~/"を展開するには


Cocoaで、"~/Documents"などを展開して

ホームディレクトリの絶対パスを得るには、
- [NSString stringByStandardizingPath]
を使う。たとえば、
NSString* d;
d = [@"~/Documents" stringByStandardizingPath];
NSLog(d);
のようにする。

2008年5月2日金曜日

【Haskell】Networkモジュール


Networkモジュールを使ってみた。
import Network
import System.IO

main = withSocketsDo (
do s <- listenOn $ PortNumber 8080
(h, n, p) <- accept s
print ( h, n, p )
getLineAndPrint s h
sClose s
)

getLineAndPrint s h = do l <- hGetLine h
print l
exitTest l
where exitTest "exit\r" = return ()
exitTest _ = getLineAndPrint s h

PortNumber 8080 をlistenOnして、acceptする。

hGetLineソケットから読み込み、printする。

もし入力されたものが"exit\r"なら終了。

そうでなければ、引き続き読み込む。

【Python】OSからのシグナルをハンドルする


signalモジュールを使うと、OSからのシグナルをハンドルできます。

たとえば、プログラムを停止するときの"Control + C"。

これもシグナルの1つです。

こんなコードを書くことで、"Control + C"をハンドルできます:
import signal

def handler( signum, frame ):
print 'Signal handler called with signal', signum

signal.signal( signal.SIGINT, handler )

while True:
pass
このコードを実行すると・・・"Control + C"を押しても停止しません!

決まった停止手順を踏ませたい場合など、

"Control + C"を無効にしたいときに使えます。