goo blog サービス終了のお知らせ 

路傍のプログラマ

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

Webインストーラーに思う

2009-06-04 15:08:12 | プログラミング
VS2010ベータ、先日は英語版をインストールしてみたのですが、今日は日本語版を。

せっかくなので、Webインストーラーというのを試してみます。

・・・が、コンポーネントを全部ダウンロードし終わってからインストールするようになってるらしいのですが、混んでるのか、9kb/sec。遅い。

インストーラーでこの騒ぎだったら、クラウドが普及したりしたらいよいよヤバイのではないでしょうか。

時差通勤とかかけ声はあれど一向に進まない日本では、クラウドが本格的に導入されたら、ネットワークのラッシュアワーとか発生しそうです。

日本語にローカライズするときは「遅延証明書」を発行できるボタンを追加してください。お願いします。みんながみんな専用線を引けるほどお金持ちじゃないと思うので。 > クラウド関係の企業の中の人

(2009/06/05 一部修正)

委員会の作った言語化

2009-05-28 18:08:41 | プログラミング
"use strict;"なんてのを導入するんだったら、ブロックスコープにしてあげればいいのに。

http://google-caja.googlecode.com/svn/trunk/doc/html/es5-talk/es5-talk.html

"But static scoping isn’t lexical scoping"なんてのたまってるけど。

Faster than C#って

2009-05-27 17:24:51 | プログラミング
Pypyブログ
http://morepypy.blogspot.com/
によると、

「Faster than C#」

http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009-dotnet/cli-jit.pdf

なんだそうです。

少数のサンプルについて計っているだけっぽくて、しかも早かったり遅かったりとビミョーな結果なのですけれども・・・

どうせならCかC++と比べて欲しかったなあ。

IronPythonがctypesをサポート

2009-05-22 12:23:31 | プログラミング
IronPython 2.6のベータのリリースノートに、ctypesを追加したとの記述が。

ちょっと驚きました。

これだったら、Python-C APIを使う代わりに、ctypesから呼び出すようにすれば、C/C++で拡張モジュール書けるなあ。

うーん、すごい。

リリースから間がないのに、Issue Trackerにctypes関連の不具合がどんどん上がっているところを見ると、かなりの人が試しているみたいだし。

面白くなってきました。

VS 2010ベータ(英語版)出てる

2009-05-19 21:12:42 | プログラミング
Visual Studio 2010ベータの英語版のダウンロード始まってました。

CTPではやたらと条件きつかったので、無理かも?と思いつつ、

おそるおそるWindows 7 RC日本語版が載ってる実験用PCにインストール。

インストールの途中、SQL Server 2008の互換性うんぬん、と警告が出たのですがインストーラー自体は無事終了。

Windows Updateのお告げによるとSQL Server 2008のサービスパックがあるらしいのでそれもインストール。

で、VS2010を起動して、C++0xのラムダが入っているソースコードを(構文はうろ覚えなのでカンニングしながら)書いて、ビルド。

ちゃんと動きます。

面白い。

64ビット化計画、再び。 #5 CPython

2009-05-08 14:19:32 | プログラミング
「Pythonなら、64ビット版のインストーラーを配布してるよ」と言われそうですが、

ちょっと疑問がわいたので、ソースからコンパイルしてみます。コンパイラは配布されているCPythonと同じもの、VC 9.0 (2008)を使います。

いろいろ試したのですが、結果的にうまくいった方法は以下の通り。

(1) ソース(Python-2.6.2.tar.bz2)をダウンロードして展開したディレクトリを
c:¥Python-2.6.2とします。

(2) コマンドラインから以下を実行すると、デバッグ版のpython26_d.dllをビルドできます。
pushd c:¥Python-2.6.2
Tools¥buildbot¥build-amd64.bat

途中、コンパイラがsqlite3が無いとか、db何たらが無いとかエラーを出しますが、

とりあえず、c:¥Python-2.6.2¥amd64に*.lib, *.dll, *.pyd等が生成されるようです。

(3) チェックのため、C言語からpython26_d.dllを呼び出すソースをビルドしてみます。

VS 2008でプロジェクトを作り、ドキュメントからパクった以下のソースをペースト。

#include <Python.h>

int
main(int argc, char *argv[])
{
Py_Initialize();
PyRun_SimpleString("from time import time,ctime¥n"
"print 'Today is',ctime(time())n");
Py_Finalize();
return 0;
}

構成マネージャで、64ビット版(x64)の構成を作ります。
インクルードディレクトリに"c:¥Python-2.6.2¥include"を追加。
ライブラリディレクトリに"c:¥Python-2.6.2¥PCbuild¥amd64"を追加。

# 本来はこれで良いはずなのですが、このままだとコンパイラに「pyconfig.hが無い」と怒られてビルドできません。

(4) 通常のCPythonの配布ファイルに含まれているpyconfig.hを"c:¥Python-2.6.2¥include"にコピーします。

ビルドすると、ちゃんと動くexeができました(実行時にpython26_d.dllにパスを通しておくのをお忘れなく)。

めでたしめでたし。

ちなみに、Pyconfig.hを読んでみると、コメントに「これは自動的に生成されるファイルではない」と書いてあり、本来はインストール作業の一貫として手作業で作ることが想定されているようです。

中身は、プラットフォーム別のマクロ定義のようでした。本来はきちっと調べるべきなのかもしれませんが、今回は動くところまで確認できたので、とりあえずよしとします。

(2009/05/20 追記)
一部ファイルのパスを間違えて記述していたのを修正。

64ビット化計画、再び。 #4 JNI

2009-04-28 21:01:47 | プログラミング
64ビット版のEclipseをインストールしてふと疑問が。

EclipseってSWTだから、PureJavaじゃなくて、JNIでDLL呼び出してるよなあ。どうやって作るんだろうか。

早速試してみます。なかなか難しい。

試行錯誤した結果、以下の手順で一応できることが分かりました(実用性がほぼ無くなるほどの制約がつきます。後述)。

以下、jdkのバージョンは1.6.0_13、VCのバージョンは、9.0 (2008)です。もちろん、両方とも64ビット版です。

(1) TestJNI.javaを作成。

(2) 「javac TestJNI.java」
これにより、TestJNI.classが作成される。

(3) 「javah -jni TestJNI」
これにより、TestJNI.hが作成される。

(4) TestJNI.cを作成。

(5) 「Visual Studio 2008 x64 Win64コマンドプロンプト」で、「cl /I"c:¥Program Files¥Java¥jdk1.6.0_13¥include" /I"c:¥Program Files¥Java¥jdk1.6.0_13¥include¥win32" /MT /LD TestJNI.c」
これにより、TestJNI.dllが作成される。

ここで重要なのは、/MTオプション。(これにたどり着くのに2時間かかりました。)

(6) テスト。「java TestJNI」

上で「実用性がほぼ無くなるほどの制約」と言っているのは、VC 2008の場合に必ず動的リンクなってしまうDLLが呼び出せないこと(たとえば、printf()を利用すると、msvcr90.dllへのリンクが作られます)。

java.exeからこのDLLをロードしない限り、それを利用するDLLも「java.lang.UnsatisfiedLinkError」ではねられてしまうのですが、その方法が分かりません。

中途半端な結果ですが、とりあえず今日はここまで。

--- TestJNI.java ここから ---
public class TestJNI {
 public native void hello();
 static { System.loadLibrary("TestJNI"); }
 public static void main(String[] args) {
  new TestJNI().hello();
 }
}
--- TestJNI.java ここまで ---

--- TestJNI.c ここから ---
#include <jni.h>
#include "testJNI.h"
/*#include <stdio.h> */
JNIEXPORT void JNICALL Java_TestJNI_hello
(JNIEnv *env, jobject obj)
{
 /*printf("hello¥n");*/
 return;
}
--- TestJNI.c ここまで ---

そのものずばりの回答というわけではないのですが、↓はとても参考になりました。感謝します。

espresso3389さんのブログエントリ「WOW64のファイルシステムのリダイレクトをOFFにする」
http://d.hatena.ne.jp/espresso3389/20080619

64ビット化計画、再び。 #3 JDK/Eclipse

2009-04-28 16:44:47 | プログラミング
次。Java。

JDKの64ビット版はすぐに見つかりました。

が、Eclipseはwww.eclipse.orgのトップから見ていっても見つかりません。

結局、たよるべきは先人の知恵、ということで、

ふっちさんのブログエントリ「EclipseのWindows用64bit版のありか」
http://sparetime.ukauka.net/article/107330344.html
に記述されているURLからダウンロード。

無事、起動できました。

・・・にしても、ベータ版でも無かろうに、トップページからたどれないとは。

新手の嫌がらせ?

64ビット化計画、再び。 #2 Boost 1.38.0

2009-04-28 15:11:58 | プログラミング
次はboostをコンパイルしてみます。

(1) boost 1.38.0をダウンロード。展開(c:¥boost_1_38_0とします)。

(2) 「Visual Studio 2008 x64 win64コマンドプロンプト」を開いて、

(3) bjamのビルド。

pushd c:¥boost_1_38_0¥tools¥jam¥src
build.bat
copy bin.ntx86_64¥bjam.exe ..¥..¥..
cd ..¥..¥..

(4) boostのビルド。

bjam.exe --toolset=msvc-9.0 address-model=64 --without-python --without-regex --without-mpi --stagedir=stage64 link=static runtime-link=shared release stage
bjam.exe --toolset=msvc-9.0 address-model=64 --without-python --without-regex --without-mpi --stagedir=stage64 link=static runtime-link=shared debug stage
bjam.exe --toolset=msvc-9.0 address-model=64 --without-python --without-regex --without-mpi --stagedir=stage64 link=static runtime-link=static release stage
bjam.exe --toolset=msvc-9.0 address-model=64 --without-python --without-regex --without-mpi --stagedir=stage64 link=static runtime-link=static debug stage
bjam.exe --toolset=msvc-9.0 address-model=64 --without-python --without-regex --without-mpi --stagedir=stage64 link=shared runtime-link=shared release stage
bjam.exe --toolset=msvc-9.0 address-model=64 --without-python --without-regex --without-mpi --stagedir=stage64 link=shared runtime-link=shared debug stage
bjam.exe --toolset=msvc-9.0 address-model=64 --without-python --without-regex --without-mpi --stagedir=stage64 link=shared runtime-link=static release stage
bjam.exe --toolset=msvc-9.0 address-model=64 --without-python --without-regex --without-mpi --stagedir=stage64 link=shared runtime-link=static debug stage


後は、boostを利用するプログラムをビルドするときに、

追加のインクルード ディレクトリとして
C:¥boost_1_38_0
を指定。

追加のライブラリ ディレクトリとして、
C:¥boost_1_38_0¥stage64¥lib
を指定。

参考にしたのは

このへん
http://einaros.blogspot.com/2007/06/compiling-boost-for-x64.html

とか、このへん
http://groups.google.com/group/boost-list/browse_thread/thread/3b8ac6fed43c64b1

とか。

ちなみに、
http://www.boost.org/development/index.html
によると、

boost 1.39.0がもうすぐリリース予定なので、ちょっと待って、そっちをインストールするのも良いかも。

(同日追記)
コンパイル中にたくさん警告が出てますが、大丈夫なのかなあ。VC 2008でこんなに警告出るんだったら、gcc 4.4だったら目も当てられない状態なんじゃなかろうか。

(2009/05/08追記)
boost 1.39.0がリリースされていたので、試してみました。上記手順はそのまま使えました。

ただし、「link=sharedとruntime-link=staticの組み合わせは不許可」というエラーをいただいたので、記述を一部修正しておきました。

64ビット化計画、再び。icu4c 4.0.1

2009-04-27 22:18:20 | プログラミング
いったん断念した64ビット化ですが、(VC++は当然として)Java VMやらPythonやらで64bit版がリリースされるようになった今が潮時かも。

とりあえずICU4C 4.0.1をVC 9(2008) SP1でコンパイルしてみました。

何度かやってみて、成功した方法を記します。

(1) 4.0.1をダウンロード、展開。

以下、readmeでは、VC 2005/32ビットでコンパイルする方法が書いてあるので、基本それに従います。

(2) <ICU>binを作ってパスを通します。

(3) 次に、"<ICU>sourceallinoneallinone.sln"をVS 2008で開きます。

(ここでそのままビルドすると、32ビット版が作られて、ディレクトリがかぶるせいだと思いますが、64ビット版がコンパイルできなくなります。ご注意。)

(4) メニューの、ビルド→構成マネージャからx64のプラットフォームを新規作成。

(5) ビルドします。