路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

ひとりごと

2008-12-13 09:15:28 | その他
英語を入力してるつもりで「take」とタイプしたら「bamboo」が出てくるようにして欲しいかなあ?

煩わしくて仕方ないと思うんだけど。そんなIME絶対使いたくないけどなあ。

Re: BOF: MSもScalaの方向性に気がついた様子

2008-12-13 01:22:43 | Birds-Of-Feather
2008/10/23のエントリのフォローアップです。

記事「It's Official: Visual Studio 2010 Will Ship with F#」
http://www.infoq.com/news/2008/12/FSharp-Release
によると、

F#が、正式にVS2010の一部として配布されるようです。

(今までは、IronPythonのように、Visual Studioとは別個に、単独で配布されていました。)

なるほど、関数型プログラミングスタイルがどーのこーの、と言ってたのは、これを意味してたのか・・・

.Netの上に作られた言語だから、F#で書いたライブラリをC#から呼び出すとかも、問題なくできるだろうし。

C#に関数型プログラミングの機能を入れるよりは、いい選択肢かも。

(2008/12/17 追記)
記事「Erlang Style Concurrency for .NET Applications Part 1 - CCR」
http://www.infoq.com/news/2008/12/CCR
によると、

Coordination Currency Runtimeなるものが提供されているんだそうです。
Erlangのアクターモデルに倣って(?アクターモデルは勉強してないのでよくわかかりませんが)、メッセージを投げるとタスクを実行してくれるポートを用意してるんだそうです。

ロボティクス部門が作った、というのが現実味がありますね・・・

プログラムの実行に必要なメモリ量を知りたい

2008-12-12 20:53:40 | プログラミング
あるプログラムを実行して、利用したメモリ量のピークを調べる。

というのをPythonでやってみます。

Windows, CPython 32bit版限定ですが・・・

どうやら、PSAPIのGetProcessMemoryInfoというのを使えば良さそうです。

Pythonからこの関数を呼び出すラッパを書くのは面倒だなあ、と思ったら、
psapi.pyというのがありました。作者のGreg Hazelさんに感謝しつつ、利用します。
http://www.koders.com/python/fid746A02473CB489389E55F55866F023DB7D42D814.aspx?s=suck

psapi.GetProcessMemoryInfoという関数は、引数としてプロセスのハンドルを渡す必要があります。ちょうど、subprocessのPopenのアンドキュメンテッド(?)な_handleというインスタンス変数がハンドルを格納していました。

結果、コードは以下のようになりました。

--------------------
# measureit.py

import sys
import subprocess

import psapi

if __name__ == '__main__':
  if len(sys.argv) == 0:
    print "measureit command-line"
    sys.exit(0)
  
  commandLine = sys.argv[1:]
  
  subp = subprocess.Popen(commandLine)
  subp.wait()
  
  memInfo = psapi.GetProcessMemoryInfo(psapi.DWORD(subp._handle))
  print memInfo["PeakWorkingSetSize"]
  
  sys.exit(subp.returncode)
--------------------

使い方は、対象となるプログラムを呼び出すコマンドラインを、measureit.pyの引数とします。

たとえば、
measureit.py cmd.exe /c
で、cmd.exe /cを実行するのに必要となったメモリ量を印字します。

C++03書けない・・・

2008-12-11 16:56:20 | プログラミング
ここ数週間、ちょこちょこっとC++0xの情報を集めては「あー、いいなー」とか「何で今まで無かったんだよ」とか思ってました。

で、今日いざC++03でソースを書こうとすると、全く書けません。

「あー、これはfor_eachとlambdaだよなあ。いやせめてauto」とか
「ポインタ渡しじゃなくてmoveがいいよなあ」とか
「このテンプレートクラスに別名つけたいよなあ」とか、

・・・もう後から後から邪念がわきます。

「VS 2010のコンパイラかgcc 4.4でコンパイルしてください」とか言ったら怒られるよなあ。絶対。

軽い!Puppy on Kohjinsha SH6

2008-12-08 21:17:35 | ガジェット
一本とられた、というか、まいった、というか。

CPUは600MHz、画面は1024x600、のネットブック
(ってことばはまだなかったときに買った)
Kohjinsha SH6ですが、Puppy Linuxだと恐ろしく軽い。

OFX2さんの記事「Puppy Linux(パピーリナックス)」
http://nofx2.txt-nifty.com/it/2008/11/usbpuppy-linux-.html
にしたがって、

USBメモリにインストールして(?といういいかたでいいのか)
Puppy Linuxを使ってみました。

しかも、何度か起動しているうちに、ブートに必要なファイルを
並べ替えて高速化してくれる、という機能まで付いてました。

ブートも、USBメモリからだというのを一瞬忘れるくらい早いし。

すごいなあ。Web見るだけなら、まったく不自由ないや。

ひとりごと

2008-12-04 03:27:26 | その他
「テレビ局や新聞社が軒並み経営不振」って、当たり前でしょーに。

よく2008年の末まで、延命できてたよなあ。そっちの方が不思議。

VC++ PPL, DirectX演算シェーダー, Accelerator Project

2008-12-03 21:56:11 | Birds-Of-Feather
うぇー。

MSから並列プログラミングに関するライブラリが3種類も出てました。いつの間にか。

Parallel Pattern LibraryはC++から利用できるライブラリで、C++0xのlambdaを最大限利用したparallel_for(_each)とか、もっと粗粒度のものやらを備えてます。GPUではなくてCPU向け(多分。今のところは)。

下の参考であげている1つ目のやつを見ると、VS 2010のへんてこりんな見慣れないツリー状のコールグラフが、PPLを活用したプログラムでは必須だというのがよくわかります。

DirectX Compute Sharederはその名の通り、DirectXの仕掛けを通じてGPUに計算させるやつ。サンプルコードを見てみると、DirectXらしく、いろいろと儀式めいた呼び出しが必要。

てゆーか、これだったらCUDA使ってもそんなに変わらんのじゃなかろうか。

3つ目は、記事「[Gamefest 08#07]DirectX 11でデータ並列コンピューティングをサポートする演算シェーダとは」
http://www.4gamer.net/games/033/G003329/20080908021/
を読んで知ったのですが、

Accelerator Projectは、Microsoft Researchで公開されているもので、.Net上の言語(サンプルにはC#とVBのソースがありました)で、並列計算用の配列やらマトリックスやらを提供しています。それらにデータを格納して、あとは普通にそれらのデータ間で計算するようなコードを書けば、勝手に並列化してくれるらしい。

すごい。野心的。

とはいえ、GPUにやってもらおうと思ったら、現状ではDirectXしかなさそうな感じだし。MS Researchは純粋に研究をやっていて、MSの商用開発とはくっついてないという話だから、Accelarator ProjectがMSのプロダクトになるのはそうとう先の話だろうし。そもそもなるかどうかさえわからないし。

将来的には、PPLはGPUに対応してくれると期待していいんでしょうか? > MS様。

参考:
http://channel9.msdn.com/pdc2008/TL25/
http://www.gamedev.net/community/forums/topic.asp?topic_id=516043
http://research.microsoft.com/Research/downloads/Details/25e1bea3-142e-4694-bde5-f0d44f9d8709/Details.aspx

Pythonのmultiprocessingその2(か3)

2008-12-03 20:09:49 | プログラミング
Python 2.6のmultiprocessingの実験してます。

いわゆる「計算」の量に比べてデータ転送量が多いと、せっかく複数のプロセスに分割しても、プロセス間のデータ転送に時間が食われて、パフォーマンスが出ません。却って遅くなったりします。(ソースは出せないのですけれども)。

で、データ転送したくなければ、プロセス間共有メモリ(multiprocessing.Valueかmultiprocessing.Array)を使えばいい、

となりそうなものなのですが、格納できるデータ型がctypesのものに制限されていて、Pythonらしいコードは書けそうにありません。

あー、なやましい。

GILフリーのスレッドさえ入れてくれれば・・・

Python 4000に期待するしかないのかなあ。

VirtualBox インストール失敗

2008-12-03 15:50:59 | その他
VirtualBoxを、2.0.4 → 2.0.6にアップデートしたら、起動しなくなりました。

一応、参考までに、環境を記しておきます。

・VirtualBoxは64bit版(AMD64)。
・ホストOSはVista 64bit Ultimate
・ゲストOSとしてUbuntu 8.10を入れてました。

それにしても、Vistaの「プログラムのアンインストールまたは変更」で、「バージョン」の欄がデフォルトで表示されないようになってるのは不思議。納得いかない。

見出しの部分を右クリックして設定を変更すれば出せるようにはなってるので、使ってるVistaは全部、設定変更しました。

名前にバージョン番号を埋め込んどけ、ということでしょうか。

それとも、バージョンのつけ方が変だから(4 -> 2000 -> XP -> Vista -> 7実は6.1)、本当のバージョン番号は目に付かないところに追いやりたいということでしょうか。

OSXにもアンチウィルスソフトは必要

2008-12-03 14:23:51 | その他
記事「Appleがウイルス対策ソフトの利用を奨励」
http://www.itmedia.co.jp/news/articles/0812/03/news029.html
によると、

「米Appleがこれまでの姿勢を転換し、Macユーザーにウイルス対策ソフトの利用を促す告知をサイトに掲載した。」

んだそうです。

まあ時間の問題だったんですけど・・・

この意味でも、MacがWintel PC並にこなれてきたってことですね。

だらだらブラウジング専用にしてたMacBook Pro、どうしよう。

(追記 2008/12/04)
記事「アップル、ウイルス対策ソフトの推奨ページを削除」
http://japan.zdnet.com/news/sec/story/0,2000056194,20384687,00.htm
によると、

件のページ、早速、削除されたようですね。

この記事のオリジナル
http://news.cnet.com/8301-1009_3-10111958-83.html
の後半が、

なぜか翻訳されたものでは省略されているので、ほんの一部、引用します。

「But malware isn't just taking advantage of operating system weaknesses anymore. In fact, the majority of such threats now come from code that targets weaknesses in browsers and other applications that aren't platform specific.」