気持ち早めに帰着。
野暮用で寝るのは遅くなったり。
遅めに帰着。
あまりの眠さに急速停止。
AM中に起床。洗濯したり掃除したり。
そういや、「パンキッシュな衣装」ってフンワリとイメージはできるものの、
具体的にどういうのを指すんだろう?と思いWeb検索してみたり。
ところが、意外と出てこない。ゴスロリほどの明確な定義はまだ無いようです。
「パンキッシュゴシック」なる単語も存在しているようだったので検索して
みたところ、どうやらこちらはゲームの「アイドルマスター」の
ある追加衣装コンテンツの呼び名らしい。ファッションジャンルの
ひとつなのかと思いきや、実はゲーム発の造語のようです。数年後には
一般に浸透する可能性があるかも.......どうだろ?(^^;
ぼんやりWebを検索していたら、UNIX等のスクリプトの先頭に「#!....」と書く
この一行目の事を「shebang(シバン)」
と呼ぶのを知ったり。知りませんでした(^^;
英語のWikipedia
にはもっと色々書かれているようですが、TANEの英語力の問題で正しく意味が
取れないのは残念な感じです(^^; 機械の力を借りて読んでみたところ、
「#」のsharp と「!」をbangと読んで合成した造語が語源という感じのようです。
また、「#」をhashと呼ぶ場合もあるようで、shebangの別の呼び方にsha-bangやhash-bangが含まれているのは
この為のようです。因みにTANEは「井桁(イゲタ)ビックラ」(シャープでもビックリでもありません)
と読んでいます(^^;;
そういや、井桁とシャープには違いがある(参考)
らしいですが、その違いが関係あるのは日本語文字圏の人だけで、ASCII圏の人には
そんな区別は無いかも。あえて区別した場合、C#は 「C#」ではなく「C♯」が正しいと。
なんか面倒臭いので英数字類は全角では無く半角で書くようにしているTANEでした。
朝から休出。
夜帰ってからあまりの眠さに急速停止。
日付越え。
ちょろっとWeb巡回して終了。
日付越え前に帰着。
ちょろりコーディング。
日付越え前に帰着。
ちょろりコーディング。
大幅に日付越え。
ちょろっと調べ事をして終了。
遅めに帰着。
OpenCL。D言語から使う方法を探ってみたり。githubに
cl4dというプロジェクトが
存在していたので使ってみたり。少し手直しする箇所がありましたが、
clほげほげ関数を直呼び出しするのは使えそうな感じ。
AM中に起床。
Wings3Dのリリース版は1.4.1ですが、この版のErlangは少し前のバージョンを
ベースにビルドされています。このため、Wings3D 1.4.1と Erlangの最新版(R15B01)を
組み合わせると、Wingsの方に少し手を入れる必要がありました。で、何気にWings3Dの
スナップショットのビルドを試してみたところ、こちらはOpenCL対応が行われている為、
別途OpenCLバインディングを使えるようにする必要がありました。
そんな流れから、OpenCLを入れてみる事にしたり。「OpenCL(Open Computing Language)は
OpenCL C言語による、マルチコアCPUやGPU、Cellプロセッサ、DSPなどによる異種混在の
計算資源(ヘテロジニアス環境、ヘテロジニアス・コンピューティング)を利用した
並列コンピューティングのためのクロスプラットフォームなフレームワーク」です
(Wikipediaより引用)。
OpenCLというライブラリをダウンロードすれば使える感じなのか?と思っていたのですが、
どちらかと言うと各ハードウェアベンダーがOpenCLというフレームワークに合わせて
インターフェースを提供するという感じになっているようです。なので、NVIDIAの
GPUを利用したOpenCLライブラリが欲しいと思えば、NVIDIAによって提供される
SDKなりドライバなりを入手する必要があります。そんな訳で
こちら
のサイトからドライバやSDKを一式ダウンロードして入れてみました。
でも、まだ具体的にどう使うのかは良く判ってなかったり(^^;
基本的にはOpenCLというラッパーを経由してCUDAで実行しているという感じみたい。
そのような仕組みですから、GPUコードはCPUコードとは別に用意する必要があります。
Cで書いたベクター演算のループを自動的にGPUコードにコンパイルするような仕組みでは
ありませんので、敷居は高いと思います。GPUコードはOpenGLのGLSL
の様に実行時コンパイルする形のようです。GPUコードのデバッグは難しそうかも。
コンパイルを試してみたり。デバイスを問い合わせるサンプルコードのほんの一部を
切り出してコンパイルしてみました。
起きたら午後もいい時間。寝すぎ。
Wings3Dの64bitコンパイル。esdlのtestディレクトリの実行が
失敗するので、wings以前の問題っぽい。sdl_driver.dllがそもそも探せていないのか、
ローディングに失敗しているのかの区別がイマイチ付かず。
そういえば、最近「東京MX」の受信状態が悪くて映像が見られない確率の方が
上がっています。土曜の夕方に放送されている「探偵ナイトスクープ」を観るのが
東京MXにチャンネルを合わせる唯一のタイミングなのですが、ここ数週間はそのタイミング
で受像できない感じ。
早くもなく遅くもなく。
Wings3Dの64bitコンパイル。esdlに付属のSDL.dllとsdl_driver.dllが32bitバイナリ
という事に気づき、SDL.dllから64bitコンパイルしたり。ひとまずコンパイルは
できたものの、うまく使えるバイナリが生成できているのかはイマイチよくわからず。
で、ビルドしたwingsを実行してみたのですがやっぱりダメ。
あまりの眠さに急速停止。
気持ち遅めに帰着。
Wings3Dの64bitコンパイルを試してみたり。Erlangの64bit版をインストール、
ErlangからSDLを使う為のライブラリを入れて、Wings3Dの1.4.1をmake。
エラー無くコンパイルできた?ものの、実行すると何やらエラー。
Dump written 2012-7-20_1-28 Version: 1.4.1 Window: "<Unknown Window Name>" Reason: {enoent,[{erlang,open_port,[{spawn,"sdl_driver"},[binary]],[]}, {sdl,init,1, [{file,"c:/PROGRA~1/ERL59~1.1/lib/esdl/src/sdl.erl"}, {line,65}]}, :
日付け越え前に帰着。
あまりの眠さに急速停止。
日付け越え前に帰着。
Emacs24でgrepモードで日本語がうまく検索できない件をWebで探っていたら、
color-moccur
というのが良さげなのを知ったり。元々Meadowのパッケージにはインストールされていた
のですが、使った事ありませんでした(^^; で、使ってみたところ、もうこれで十分と
いう感じ。もっと早く存在に気づけばよかった.....
昼頃起床。
野暮用処理。
Emacs24を少し使ってみたのですが、diredで日本語ファイル名がうまく表示できないとか、
細かい所が色々とダメで結局Meadowに戻ってしまいました(^^;
恐らく、Meadow相当にするにはこう設定すれば良いってのがきっとあるに違い無いのですが、
Web検索してもその辺がまとまってるのが無くて難儀な感じだったり。
AM中に起床。
プロ遊の下のマンデルブロ集合プログラムを更新してみました。御参考まで。
Emacs24。ファイル名補完が少し怪しい感じだったのを無理矢理な感じで対処
してみたり。そんな訳で、他にもいくつか対処した点の覚え書き。
(if (featurep 'meadow) (progn (mw32-ime-initialize);;; (setq default-input-method "MW32-IME")) (progn (w32-ime-initialize);;; (setq default-input-method "W32-IME") (setq-default w32-ime-mode-line-state-indicator "[--]") (setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))))
(if (not (featurep 'meadow)) (progn (setq inhibit-startup-message t) ;; スタートアップ画面を出さない (setq default-directory (replace-regexp-in-string "Directory " "" (replace-regexp-in-string "//" "/" (replace-regexp-in-string (replace-regexp-in-string "\\\\+" "/" (getenv "HOME")) "~/" (replace-regexp-in-string "\\\\+" "/" (pwd))))) ) ))default-directoryという変数に環境変数HOMEがフルパス展開されてカレントディレクトリパスとして 書かれていたのを、"~/"のままになるような書き換えてます。因みにMeadowではdefault-directory には"~/"のまま入っているようです。
(defconst keisen-unit-length (char-bytes (aref keisen-table 0)) "罫線素片のバイト数") ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ (defconst keisen-unit-length 1 "罫線素片のバイト数")てな感じ。沢山あるので括弧の対応を良く見て直す必要がありますが、この直し方で 普通に使える感じになりました。
AM中に起床。
暑くてぐったり。
もそもそとコーディング。Win32APIバインディングの64bit対応をマージしたり、
マルチスレッド化したマンデルブロ集合描画プログラムの公開準備をしたり。
日付越え前に帰着。
あまりの眠さに急速停止。
日付越え前に帰着。
gcc-4.7.xブランチ(DMD2.059マージ版)のMinGWビルドを試してみたり。結果から言うと失敗。
DMD2.058マージ版は力ずくでビルドできたのですが、なんかビルド自体ができなくなってる感じにも。
一番大きいのは、asm文がGDCでは使えなくなっている点。これどうすんだ?
日付越え。
gdcにぼちぼち更新が入っているようですが、MinGWはまだ2.059ベースのDMDに
マージされてなかったり。gcc-4.7.x向けのブランチのビルドをFedora17(64)で
試してみたところ問題無くビルドできたり。
日付越え前に帰着。
emacs 24。SVGやPDFを直接インライン表示できたりとかなり良いのですが、
ロード時に文字コードを誤る場合があったり。もうあとひとつという感じ。
そういや、愛用のkeisen-mule.elが24で廃止された関数を使っているのでそのままではエラー
します。が、(char-bytes var)を 1に置き換えればなんとなく使えるようです。
Meadowでも(char-bytes var)はvarに何を入れても1が返る感じでした。
日付越え前に帰着。
何気にemacs24の情報を探っていたら、Windowsで使えるバイナリで割とまともな
感じなのを見つけたり
(こちらのサイト)。
なにが使えるかと言いますと、画像表示系のサポートが一通り入っている点。
IMEサポートも入っていそうなので少し設定を試みたり。
今までのNT-Emacsに比べると大分良い感じに使えそうな予感がするものの、
24で動かなくなったLISPコードがあったり、普段使っている便利な感じの
LISPがパッケージインストールできなかったり。でも、がんばれば乗り換えられる
かも?というレベル。気のせいかも知れませんが。
AM中に起床。
バクマン(20)。最終巻。怒涛の勢いで〆たという感じでしたが大団円で完結。
全編通して適度なフィクションさ加減が良かったと思います。
gdc。ぼちぼちと更新が加えられている模様。なんか4.7.xのサポートがブランチに
なってしまってたり。MinGWの方はベースが4.6.xなもんですから、バイナリ配布
の都合で4.7.x以降になかなか追従してくれない。個人的にはバイナリ配布を
止めれば良いのにと思わなくはありませんが、MinGW自体にパッチを当てる必要が
あったりしてたようなので、ビルドの面倒臭さを天秤にかけるとあまり強くも言えない
所(^^; でも、1ヶ月ほど前にMinGWにgcc-4.7.0がリリースされたので、そろそろ
乗り換えられるのを期待したいところ。
昼過ぎ起床。
ClangやLLVMの最適化の仕組みについてWebを探ってみるも、
日本語ではあまり詳しく説明されたものを見つけられなかったり。
先日のコードはループの回数が確定した時点で一意の式から結果を
求められる訳ですが、そういう最適化が行われるのか否かは不明。
日付け越え。
Clangについて少し調べたり試したり。
C言語のフロントエンド&LLVM
をバックエンドにしたコンパイラです。一部のOSプロジェクトでは
GCCを置き換えを発表しているそうな。で、Cygwinで何気にclang
とか打てば使えたので少し試してみたり。で、次のようなほぼ意味の無い
コードを試してみたところ、面白い結果になりました。
#include <stdlib.h> #include <stdio.h> int main(int argc, char* argv[]) { long long int i,j,k ; long long int num = atoi(argv[1])*0x100000000 ; j=0 ; k=0 ; for( i=0 ; i<num ; i++ ){ j=i+k ; k=i+j ; } printf("j=%08x_%08x, k=%08x_%08x\n",(int)(j>>32), (int)(j&0xffffffff), (int)(k>>32), (int)(k&0xffffffff)) ; return(0) ; }
$ clang -O2 test.c $ time ./a.out 2 j=fffffffc_00000001, k=fffffffe_00000000 real 0m0.063s user 0m0.000s sys 0m0.015s $ gcc -O2 test.c $ time ./a.exe 2 j=fffffffc_00000001, k=fffffffe_00000000 real 0m11.399s user 0m11.309s sys 0m0.062s
$ time ./a.out 65536 j=fffe0000_00000001, k=ffff0000_00000000 real 0m0.049s user 0m0.015s sys 0m0.030s
日付け越え前に帰着。
ちょろりコーディング。
日付け越え前に帰着。
ちょろっとWeb巡回して終了。
日付け越え前に帰着。
PS2アーカイブス。PSアーカイブスのPS2版。エミュレーションで動かしているのかしら?
だとすると、PS3発売から時間は結構経ってはいるもののそれはそれでスゴイかも。
ハードを直叩きしていないものについて、PPCターゲットで再コンパイル
しただけかも知れませんが、それだとHDリメイクしてくれた方が良いかもなぁ?
と思わなくもありません。
アイコン埋め込みの件。昨日、イメージを差し替えてもエクスプローラでの
表示が切り替わらない件、どうもアイコンイメージがキャッシュされていた模様。
48x48で埋め込んだ実行ファイルを改めて表示してみたら、ちっこいサイズでしか
表示されませんでした。となると、WindowsXPでは48x48で、Windows7では
256x256で表示可能にするにはどうすりゃいいんだ?
日付け越え前に帰着。
Windowsアプリのアイコンについて。リソーススクリプトでアイコンファイルを
指定して実行ファイルに埋め込む訳ですが、複数のサイズを持つのが良い
みたいなのをWebで見たり。WindowsXP向けとかに32x32のサイズのアイコンを
埋め込んでいると、Windows7でのエクスプローラで特大サイズ表示した時でも
少し小さいサイズで表示されます。
でも、複数のアイコンファイルを含める書き方がイマイチ判りませんでした。
色々試した感じ、スクリプトで並べたICON指定の先頭のイメージがWindowsXPでは表示される
ようでした。
ただよく判らないのが、一度256x256のアイコンイメージを埋め込んで、Windows7の
エクスプローラで特大アイコン表示をしました。結果は256x256で表示されます。
ところが、256x256を48x48に変えて実行ファイルを再リンクしました。エクスプローラで
特大表示しても48x48で表示されるハズと思ったのですが、何故か256x256の
イメージが表示されたり。うーむ訳がわからん。
昼頃起床。
マンデルブロ集合描画プログラムで1.0e200倍まで潜ってみたり。
元々1.0e201倍を上限としていたのですが、1.0e150倍くらいで座標解像度が
足りなくなっているというのに今頃気づいて、MPF/MPFRの精度を少し上げてみました(^^;
320x240で模様のある所を探しながら1.0e200倍まで到達してみたのですが、
自己相似という事もあって途中の景色は何度か見た事ある感じだったり。
深く潜ってもあまり面白い事は無かったかもと言ってしまうと身も蓋も無い
のですが(^^;;;;
因みに、深く潜るほど描き上がるのに時間がかかるのですが、320x240サイズで7CPU使い
で1.0e200くらいだと約10分。まぁまぁ時間がかかるという感じでしょうか。
TVの報道番組やバラエティ番組で字幕が出る場合ってあると思うのですが、
何故か メイン(main) の字幕がどの局も例外無く「メーン」となっているのに
違和感を覚えてしかたがありません。Webで検索してみたところ、
ルールに従った表記という事らしい
(参考)。
エー?そうなのぉ?
D言語。core.simd というモジュールを使う事で、SIMD命令用のベクトル型
を宣言できると共に、SIMD命令を使用してオプティマイズがされるようになるというものです。
D言語マニュアルのベクトル演算拡張機能
の項によると、何故か「OSXでの32bitターゲット」と「その他の64bitターゲット」で
サポートされているという事になっていて、Windowsの32bitターゲットでは
SIMD命令列が出てこないらしい。以下のようなコードを32bitと64bitのgdcでコンパイル&実行
してみました。
import std.stdio; import std.string ; import core.simd ; int main() { version( GNU ) writef("I am GNU\n" ) ; version( Unix ) writef("I am Unix\n" ) ; version( Windows ) writef("I am Windows\n") ; version( MinGW ) writef("I am MinGW\n" ) ; version( cygwin ) writef("I am cygwin\n" ) ; version( Win32 ) writef("I am Win32\n" ) ; version( Win64 ) writef("I am Win64\n" ) ; version( Posix ) writef("I am Posix\n" ) ; version( X86 ) writef("I am X86\n" ) ; version( X86_64 ) writef("I am X86_64\n" ) ; double2 a,b,c,s ; a = 3 ; b = 4 ; c = 5 ; for( int i=0 ; i<2000000000 ; i++ ){ s = a / b + c; c = s + i ; } writef("a = %s\n",a.array) ; writef("b = %s\n",b.array) ; writef("c = %s\n",c.array) ; writef("s = %s\n",s.array) ; return(0) ; }
$ gdc -m32 -O2 simd_test.d $ time ./a.exe I am GNU I am Windows I am MinGW I am Win32 I am X86 a = [3, 3] b = [4, 4] c = [2e+018, 2e+018] s = [2e+018, 2e+018] real 0m39.177s user 0m0.000s sys 0m0.093s
$ gdc -O2 simd_test.d $ time ./a.exe I am GNU I am Windows I am MinGW I am Win64 I am X86_64 a = [3, 3] b = [4, 4] c = [2e+018, 2e+018] s = [2e+018, 2e+018] real 0m9.697s user 0m0.000s sys 0m0.125s