Category Archives: Programming

Programming

Processing で FlickrAPI を呼び出す

Processing を使って、FlickrAPI を呼び出してみました。

コードを書き始めたのはしばらく前なのですが、Flickr の API Service が頻繁に落ちているためになかなか進まずに結構時間がかかってしまいました。

まあ頑張れば Related Tag Browser みたいなものも作れるわけなんですが、まずはちょっとしたものを。

Daughter Browser

flickrapi.jpg「Daughter」というタグを持つ写真を Flickr から最新20件分取得し、スライドショーを行うサンプルです。コード自体は比較的簡単に作成できました。Java はお遊び程度にしか使ったことがないので、あまり良くない部分もあるかもしれませんが、まあ練習ということで。

XMLパーサは Processing のフォーラムで紹介されていた NanoXML Lite を使用。使用例は toxi さんnanoxml test が参考になります。

ちなみにアプレットにしたときには Flickr に直接アクセスできないため、アプレットと同一ドメインのサーバにプロクシを用意する必要があります。TOM さんの Flickr Rainbow を参考に PHP でプロクシを作成し、Flickr 経由でアクセスできるようにしました。

Programming

Processing インストール

Processingのインストールは簡単です。とりあえず Windows 環境にインストールしてみました。

公式サイトのダウンロードページで「↓Windows」をクリックし、アーカイブをダウンロードします。Java の実行環境がインストールされている場合には「Without Java」の方でもよいですが、Java を含んだものを選んでおけば間違いないでしょう。

あとはアーカイブを解凍して、適切な場所に置くだけです。ただし日本語フォルダ名などで不具合があるという記述もどこかで読んだ記憶があるので、「C:\Processing\」などのフォルダに置いておくと吉かも知れません。

あとは Processing.exe をダブルクリックするだけです。「File」→「Sketchbook」→「Examples」以下のメニューで色々なサンプルコードを読み込めます。まずはそれらを開いて、実行してみるとよいでしょう。

ちなみにハマった点をいくつか。


プロクシ経由でネットワークアクセスができない

Socketを使い、コード上でHTTPプロクシにGETコマンドを投げれば無理やりプロクシ経由でインターネットにアクセスするコードが書けました。が、Processing では loadImage メソッドなどで URL を指定すればHTTP経由でサーバ上の画像を読み込むことが可能です。これらがプロクシ経由のアクセス環境において、デフォルトではうまく機能しません。

まず Processing 本体を起動している run.bat の

start javaw -ms128m -mx128m processing.app.Base

start javaw -ms128m -mx128m -DproxyHost=192.168.xxx.xxx -DproxyPort=xxxx processing.app.Base

と変更し、プロクシサーバのアドレスを指定してみましたがうまくいきません。(Processing本体のアップデートチェックのためには、これも指定しておいた方がよいかも?)

さらに調べてみると、設定情報ファイルである preference.txt を直接編集することでうまくいきました。preference.txt が格納されているディレクトリは、Processing を起動して「File」→「Preference」で表示されるダイアログで確認できます。

まず Processing を終了させ、preference.txt をエディタで開きます。そして「run.options=」という記述がある行を見つけ、

run.options=-DproxyHost=192.168.xxx.xxx -DproxyPort=xxxx

と追加します。

これで、プロクシ経由でアクセスするコードが実行可能になりました。


エクスポートしたアプレットが Sleipnir で実行されない

最新の Sun Java Plug-in がインストールされていても、Sleipnir で Java 1.4 or later が必要などといわれて実行できない場合があるようです。ただし IE 等では問題なく実行できます。これは、Sleipnir が Sun Microsystems社製のプラグインをインストールしても、Microsoft社製のプラグインを使用してしまう場合があるからだそうです。

【参考サイト】 SleipnirでJavaアプレットを動作させるには

このサイトを参考に対処すれば、Sleipnir でも Sun の Java Plug-in を利用するようにでき、問題なく実行できました。

Programming

Processing でビジュアルプログラミング

Processing [BETA] 公式サイトより

Processing is a programming language and environment for people who want to program images, animation, and sound. It is used by students, artists, designers, architects, researchers, and hobbyists for learning, prototyping, and production.

processing.jpg以前から話題となっていたビジュアルプログラミング環境の Processing が、 2005/4/20 より公式サイトからダウンロード可能となっています。バージョンは 1.0βとなっています。α版ではメールによる申し込みが必要でしたが、今回は自由にダウンロードできます。

Processing は Flash と比較されがちですが、FAQ の 「Dude, Where’s the Timeline? This Sucks… / Awesome! A Flash Killer! 」にも「We’re not targeting Flash. (…中略…)There are things that are always going to be better in Flash, and other types of work that will always be better in Processing. 」などとあるとおり、競合するものではありません。それぞれ状況に応じて選択すればよい、というスタンスなんでしょうね。

Processing では、Flash にあるようなタイムラインやレイヤーなどの概念がありません。オーソドックスなゲームプログラミングのように、ループ内で画面をごっそり書き換えることによってモーションを実現します。要するに、コンテンツオーサリングツールというよりは単なるビジュアルプログラミングのフレームワークいった感じでしょうか。

画素単位の描画やシリアルへポートへのアクセスなどにも対応しており、かなり手軽にコードを書いて実行できます。加えて Processing 上で作成したコードは簡単にJavaアプレットにエクスポートでき、Web等で配布可能です。

簡単な視覚的シミュレーションや GUI のプロトタイピング、インタラクティブ UI の検証などに使うと便利かもしれません。あと簡単なゲームも作りやすそうですね。

色々なアーティストの方々が作成された Processing による作品群は、公式サイトの「Exhibition」で見ることができます。


【リンク】

Programming

カブロボ

大会概要 | カブロボ・コンテストより

カブロボ・コンテストは、PC上で動作するソフトウェアのロボット(ソフトウエア・エージェント)のプログラムを作成して株の売買を自動で行い、その運用成績を競うものです。コンテスト期間中は、そのロボットに対して参加者が指示を出すことはできません。 参加者があらかじめ設定したプログラムに従ってソフトウェアのロボットが売買を行います。

おもしろそう。株の知識は殆どありませんが・・・。

Programming

Windowsマウス入力色々

Win32で、マウス入力を得る方法エトセトラ。(知っているor分かった範囲)

通常はもちろんウィンドウメッセージのWM_MOUSEMOVEやWM_?BUTTON?をウィンドウプロシージャでハンドリングしてやれば済む話なのだが、訳あって他の方法も検証してみる必要があったのでメモ。
read more »

Books Programming

今気になっている本

Code Reading―オープンソースから学ぶプログラミングテクニック
トップスタジオ, まつもと ゆきひろ, 平林 俊一, 鵜飼 文敏

おすすめ平均
全てのプログラマに読んで欲しい最高の教科書
プログラマ以外の人も読んでみると良いのでは

Amazonで詳しく見る4839912653

read more »

Programming

文字列リテラルの連結(C言語)

先日、他の人が書いたソースを見ていた後輩君からこんな質問を受けました。

char str[] = "abc"
             "def"
             "ghi";

「こんな書き方ってできるんですか?」
read more »

Programming

MSVC6.0のリンクエラー

error LNK2001: 外部シンボル "__chkesp" は未解決です

というリンクエラーが出てしまって困った。ただしDebug版のみで、Releaseビルドでは起こらない。まあ、当然か。

_chkespというのは、名前の通りespをchkする関数。要するに関数ポインタコールスタックをチェックするデバッグ支援用の関数である。実際には、自分でこの関数を呼び出すことはない。DebugビルドではVCのコンパイラが自動的に、関数の呼び出し前にespをesiに保存し、呼出し後にesiとespのコンペアを行ってから_chkesp() を呼びだすコードを吐き出す。

ここまでは知っていたんだが。ではCRTライブラリを追加してみるとどうか。

リンクオプションでlibcmtd.lib(マルチスレッドなので)を追加してみると、今度は

msvcrtd.lib : error LNK2005: _sprintf はすでにlibcmtd.lib(sprintf.obj) で定義されています

と、使っているCRTライブラリの関数が多重定義となってしまう。MFCの共有DLLとバッティングしているんだろうか。わからん。

で、結局「PRB: LNK2001: Unresolved External Symbol __chkesp」に書いてあるとおり、/GZオプションを外してコールスタックの正当性チェック自体を無効にする以外にないのかと半ば諦めかけていたのだが、少し調べていたら

VC++の小技

の「CRTをぜんぜん使わないDLL」項に_chkespを実装してしまう解決方法を発見。単純に実装すると_chkesp()内のAPI呼び出しで_chkespを再帰呼出してしまう問題があるわけですか。確かに。

結局この方は内部API呼出もインラインアセンブラで実装し、__declspec(naked)を用いてプロローグ・エピローグコードを生成しないようにすることで回避しいる。

なるほど。勉強になりました。

Programming

VB6でHWND_BROADCASTが受け取れない

仕事でハマってしまった。また忘れてハマリそうなのでメモ。

Windowsのあるアプリケーションがウィンドウメッセージをブロードキャストしていて、それを受け取って処理する別アプリをVBで書こうととした場合うまく処理できない。

単純にFormをサブクラス化してメッセージを受け取ればできるだろうと高を括っていたのだが、うまくいかない。ブロードキャストするメッセージを登録するのにRegisterWindowMessage APIを使っているが、もしやそれがうまくいっていないのかと思ったがそうでもない。

よくよく調べてみると、VBの場合はちょっと工夫がいるのだということが分かった。

SendMessage(HWND_BROADCAST…)でブロードキャストしたメッセージは、トップレベルウィンドウにしか送られない、とMSDNには書いてある。

VB(確認したのはVB6)では、単純なFormを表示するアプリケーションを作成して動かした場合でも、裏でいくつかのトップレベルウィンドウが生成されているようだ。SPYでウィンドウクラス名を調べてみると、フォームは”Form1″ ThunderRT6FormDCなどとなっているが、それ以外に”Project1″ ThunderRT6Mainというクラスをウィンドウを確認できる。(RT6という部分は多分VBのバージョンによって変わるんだろう)

Form1のウィンドウプロシージャをフックしてサブクラス化しても、このメッセージを受け取ることはできないようなので、試しにThunderRT6Main側をSPYしてみると・・・ビンゴ。

で、このウィンドウのハンドルを取得するには、GetWindow(Form1.hWnd, GW_OWNER)とすればよい。

というわけでやっと解決。悩むこと約数時間。お疲れ様でした<自分

これって、ひょっとするとVB使いさん達の間では常識なんでしょうか・・・?
read more »

Programming

WideStudio

ちょっと仕事でT-Engine用の開発環境を整える必要があり、色々調べていたところWideStudio for T-Engineを見つける。

サイト中の「WideStudioとは」を見ると、

WideStudioは、Windows95,98,WindowsNT,Windows2000,
Linux,FreeBSD,SOLARIS,MacOSX(X11が必要です)上で動作する、
C/C++、Ruby、Python の純国産の完全フリーのウィンドウアプリケーション統合開発環境です。

とある。

X11/MITライセンスによる配布で、独自のクラスライブラリを持ち、GCC上でマルチプラットフォームなGUIアプリ開発が可能となる。もちろんそれぞれのプラットフォームに対応したGCC開発環境を準備する必要はあるが。

ところで、このWideStudioの開発者である平林俊一さんは、このソフトウェアでTurboLinux主催の第1回PENGUINS@Work!にて、個人部門最優秀賞を受賞している。

また、IPAの平成15年度未踏開発ソフトウェア創造事業にも採択されており、TRONといえば言わずと知れた坂村健氏がマネージメントしてWideStudio for T-Engineが開発されたようだ。

個人でマルチプラットフォームなIDEを開発してしまうなんて・・・すごいですね。
read more »