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"を無効にしたいときに使えます。

2008年4月25日金曜日

【SQL】FROM句でサブクエリを使う


WHERE句、SELECT句でのサブクエリは結果として値を利用する。
 
FROM句でサブクエリを利用すると、結果を1つのテーブルとして扱うことができる。FROM句でのサブクエリの利用は非常に応用性が高い。

FROM句にサブクエリを使うことで、集計関数を組み合わせた計算が出来る。たとえば、COUNTのAVGを計算することができる。

サブクエリには";"をつけない。

2008年4月23日水曜日

The Haskell School of Expression: Lerning Functional Programming Through Multimedia


こんな本を買ってみました。

Haskellの入門書なのですが、他の本とはひと味違います。

Haskellの本は、数学的な文脈で語られることが多いのですが、この本では、グラフィクス、アニメーション、コンピュータミュージックといったマルチメディアアプリケーションを題材として使っています。

レベルとしては、初級者と上級者の両方に向けて書かれています。
簡単なイントロダクションからはじまり、もっと進んだ話題へと進みます。Haskellがまったく初めての方にはややテンポが速いかもしれません。

けどさ・・・グラフィクスとかアニメーションって、純粋関数言語を使う意味があんまりないんじゃ?だって、副作用のかたまりやん;)

2008年4月20日日曜日

【Haskell】Haskellの低レイヤグラフィクスライブラリまとめ


Haskellの低レイヤグラフィクスライブラリをまとめました。
各プラットフォームのグラフィクスシステムへのバインディングです。
GLUT
OpenGL GLUT Libraryへのバインディング。
OpenGL GLUT Libraryは、プラットフォーム固有の処理を吸収してOpenGLを使いやすくするためのライブラリです。
GLFW
GLFWへのバインディングです。
GLFW(OpenGL Framework)は、GLUTと同様、プラットフォーム固有の処理を吸収してOpenGLアプリケーションを使いやすくするためのライブラリです。
GLUTよりも新しいです。
TclHaskell
TclHaskellは、Tck/tkへのバインディング。
Tck/Tkは、Unix、Windows、Macintosh上で動作するGUIスクリプティング環境です。
Win32
Win32ライブラリは、Win32APIのうちグラフィクスに関係する部分へのバインディングです。
Win32APIは、Windowsの標準APIです。
X11
X11ライブラリは、X11へのバインディングです。
X11は、Unix系OSのウィンドウシステムであるX Window Systemのバージョン11です。


2008年4月11日金曜日

【MySQL】カーソルの使い方


カーソルの宣言
DECLARE [カーソル名] CURSOR FOR [SELECT文];
カーソルを開く
OPEN [カーソル名]
1行ごとにデータを取り出す
FETCH NEXT FROM [カーソル名] INTO [変数リスト];
WHILE (@@FETCH_STATUS = 0)
BEGIN
FETCH NEXT FROM [カーソル名] INTO [変数リスト];
END;
カーソルを閉じ、リソースを解放する
CLOSE [カーソル名]
DEALLOCATE [カーソル名]

2008年4月6日日曜日

複数のファイルを1つ1つコマンドに読ませるには


複数のファイルを1つ1つコマンドに読ませる方法。

たとえば、POV-Rayのサンプルファイル(*.pov)を

一度にpovrayに処理させるには、
for i in $(ls *.pov); do povray $i; done
とする。

POV-Ray


POV-RayをPowerBookにいれた。

POV-RayはレイトレースでCGをレンダリングするためのプログラム。

OSX用のバイナリだとコマンドラインから実行できないみたいなので、ソースからコンパイル。

ここの下の方からソースコードをダウンロードして展開。

カレントディレクトリを移動して
$ cd povray-3.6.1
$ ./configure
$ make
$ sudo make install
これでok.
$ which povray
/usr/local/bin/povray
ちゃんと入っている。

2008年4月3日木曜日

MySQLでDBをコピーするには


MySQLのデータベースをコピーするには、mysqldumpを使います。

mysqldumpはデータベースをダンプするためのユーティリティですが、他のMySQLサーバにデータをコピーするのに使うことができます。

ローカルで動いているMySQLの中で"source_database"から"dest_database"へデータをコピーするには、以下のようにします。
$ mysqldump -u user_name -p -n source_database | ¥
> mysql -u user_name -p dest_database
-nオプションは、CREATE DATABASEを出力に含めないようにするためのオプションです。これを付けることで、dest_databaseへデータをコピーできるようになります。

また、コピーしたいデータベースが巨大なときもあるかと思います。そのようなときに、以下のオプションを使うと、さらに効率良くデータをコピーできます。

--no-autocommit
これをつけると、ダンプしたファイルの全体を囲うようにautocommit=0がつきます。つまり、後でリストア時にはファイル全体が1トランザクションになり、うまくいけば劇的に早くインポートできます。

--single-transaction
このオプションを付けてダンプすると--lock-tablesを付けずにシングルトランザクションでダンプするので、一貫性のあるデータをダンプできます。

--opt
これはデフォルトで有効になっているはずです。このオプションには--lock-tablesが含まれますがこれはダンプ時ではなくてインポート時にロックする指定です。


■関連エントリ

粒子法による固液連成シミュレーション


--

2008年3月31日月曜日

粒子法シミュレーション—物理ベースCG入門

東大の越塚さんによる、粒子法の入門書。

つい今月出版されたみたい。

Amazonで注文したが、まったく内容を見ずに買ったので少し不安。

粒子法というのは、流体をコンピュータでシミュレーションする方法の一つ。

流体をコンピュータでシミュレーションする方法には、大きく分けて2つある。

メッシュベースのアプローチとパーティクルベースのアプローチ。

粒子法というのは、その名の通りパーティクルベースのアプローチ。

パーティクルベースのアプローチの特徴は、波や雫といった液体表面の状態を表現しやすいという点。

この記事にソースコードを置いています。

■関連する記事
粒子法のプログラム第1回(概要)
粒子法のプログラム第2回(プログラムの大枠)
粒子法のプログラム第3回(データ構造)
粒子法のプログラム第4回(密度と圧力の計算)
粒子法のプログラム第5回(力の計算)
粒子法のプログラム第6回(境界条件と粒子位置の更新)
粒子法のプログラム最終回(粒子の出力)
【粒子法】粒子を流体としてレンダリング
3次元の粒子法シミュレーション
粒子法のシーンを2倍のサイズにしてみたが…
粒子法のシーンを2倍のサイズにしてみた



2008年3月26日水曜日

lifeclock


この時計は、人の一生を刻む時計です。

短針は、時の代わりに、その人が生まれてから何年経ったかを表します。

長針は、分の代わりに、直前の誕生日から何週間がたったかを表します。53週間で1週します。

長針の1週が1年にあたり、短針の1週がその人の一生にあたるのです。

(いまのところInternet Explorerでは動きません・・・)

使い方

あなたの生年月日を入れて以下のURLにアクセスすると、あなたのlifeclockが表示されます。

http://kamonama.sakura.ne.jp/lifeclock/lifeclock.html?yyyymmdd

yyyymmddを、あなたの生年月日で置き換えてください。

たとえば、1983年10月14日生まれの場合は、

http://kamonama.sakura.ne.jp/lifeclock/lifeclock.html?19831014

となります。

ブログパーツとして使うには

iframeを使えば、ブログパーツとして使うことができます。

たとえば、上のlifeclockは、以下のようなiframeで書かれています。
<iframe 
src="http://kamonama.sakura.ne.jp/lifeclock/lifeclock.html?19831014"
marginheight="0"
marginwidth="0"
width="172"
height="172"
frameborder="0">

2008年3月24日月曜日

【Python】sqlobject0.10


SQLObjectが0.10にバージョンアップした。
SQLObjectはPythonのO/Rマッパ。

以下、変更点の一部を紹介。
  • SQLBuilderのSelectがreversed, distinct, joinsをサポート

  • SelectResults.througnToが追加された。オブジェクトを経由せずに、SQLでリレーションをトラバースできる

  • ViewSQLObjectが追加された。

  • MySQLConectionがSSLに関係するパラメータを受け付けるようになった。ssl_key, ssl_cert, ssl_ca, ssl_capath。

  • etc.

Mac OSX トラブル対処法


Mac OSXがトラブったときの対処法。

電源を入れたあと、
  • shiftを押し続ける → セーフモード

  • Cを押し続ける → インストールディスクから起動

  • Dを押し続ける → ハードウェアテスト

  • マウスボタンを押し続ける → ディスクを取り出す

2008年3月19日水曜日

Erlang

Yaws
 HTTPサーバ

ElryWeb
 Webフレームワーク
 ORマッパつき

Mnesia
 データベース
 分散

2008年3月17日月曜日

【Python】メモリ使用量のいろんな調べ方


Pythonからプロセスのメモリ使用量を調べるにはいろいろ方法がある。
  • /proc(linux限定)
  • resourceモジュール
  • psコマンド
  • PSI(Python System Infomation)