新しいCUDA Toolkit環境で、昔のCUDA 6.5とかを使ったVisual Studioのプロジェクトを開こうとすると、エラーが起きて読み込めない。古い環境をピンポイントで指定している部分がProjectファイルに含まれているためらしい。
そこで、vcxprojファイルを直接エディター(emacsとか)で開いてみると、XMLタグのImportタグに、
CUDA 6.5.props
などと書いてある部分がある。そこを、6.5->9.1と書き換えてやる。それだけでちゃんと読み込めるようになる。また、環境変数
CUDA_PATH_6.5
とかバージョンを決めているところを、
CUDA_PATH
と変えてやるとよいようだ。
ちなみに、2017年12月19日現在の最新のVisual Studio 2017 (15.5.2かな)とCUDA Toolkit 9.1は互換性がないので注意。古い2017なら動くらしいが、どうもCUDAのVSのバージョンチェックでエラーが起きるようだ。残念なことに古いVS 2017は手に入れられないようなので、バージョンアップには注意が必要だ。
2017年12月20日水曜日
2017年12月15日金曜日
HPCの未来
昔、スーパーコンピュータと言われていたトップエンドのコンピュータは、特別にあしらえたベクトルプロセッサを搭載し、べらぼうなスピードで計算を実行できた。
ここで培われた技術がコンシューマレベルのパソコン用CPUに下ろされ、ボトムエンドコンピュータが桁上げされていった。
そしてスパコンがスパコンたる牙城だったCPUとメモリのバス速度も速くなって、もはやカスタムCPUの存在意義は無くなり、並列コンピュータへの道が加速していった。
そして、並列の粒度を小さくして、膨大な数のスレッドを大量に処理するGPUが注目され、今度は、GPUではなく同じような能力を持つチップが開発され、注目を集めた。
光速が変わりようが無いので、CPUを小さくすることで計算速度を上げるしか無いのだが、もう限界に近い。GPUやペジーの様に膨大な数のスレッドを処理するコプロセッサが現在の主流と言えるのかもしれないが、メモリーアクセスがいつもボトルネックになる。
バンクコンフリクトなんぞは、昔からN社のSXシリーズでも問題になっていたが、GPUでも残っている。
シリコンコンピューティングの今後はメモリーとコプロセッサの通信の部分しか残っていないのかもしれない。そうだとすれば、あとはハードウェアのネットワーキング技術に掛かっている。3次元的なネットワーク網とか。もしかしたら、星野先生のPAXに戻るのかもしれない。
量子コンピュータとシリコンコンピュータの間をつなぐものが欲しいなあ。光なんだろうけど。シリコンよりも小さくないと意味が無いので、そんな小さいところを粒子として扱うことが必要だと、ものすごいエネルギー(短波長)の光量子を発生させなければならないのは多分大変なんじゃ無いか。
ここで培われた技術がコンシューマレベルのパソコン用CPUに下ろされ、ボトムエンドコンピュータが桁上げされていった。
そしてスパコンがスパコンたる牙城だったCPUとメモリのバス速度も速くなって、もはやカスタムCPUの存在意義は無くなり、並列コンピュータへの道が加速していった。
そして、並列の粒度を小さくして、膨大な数のスレッドを大量に処理するGPUが注目され、今度は、GPUではなく同じような能力を持つチップが開発され、注目を集めた。
光速が変わりようが無いので、CPUを小さくすることで計算速度を上げるしか無いのだが、もう限界に近い。GPUやペジーの様に膨大な数のスレッドを処理するコプロセッサが現在の主流と言えるのかもしれないが、メモリーアクセスがいつもボトルネックになる。
バンクコンフリクトなんぞは、昔からN社のSXシリーズでも問題になっていたが、GPUでも残っている。
シリコンコンピューティングの今後はメモリーとコプロセッサの通信の部分しか残っていないのかもしれない。そうだとすれば、あとはハードウェアのネットワーキング技術に掛かっている。3次元的なネットワーク網とか。もしかしたら、星野先生のPAXに戻るのかもしれない。
量子コンピュータとシリコンコンピュータの間をつなぐものが欲しいなあ。光なんだろうけど。シリコンよりも小さくないと意味が無いので、そんな小さいところを粒子として扱うことが必要だと、ものすごいエネルギー(短波長)の光量子を発生させなければならないのは多分大変なんじゃ無いか。
2017年10月26日木曜日
Joomla 3.8 + T3 Framework
Joomlaをサイトに使っている。JA-T3 Frameworkを使っているが、GoogleさんにMobile Friendlyでないと怒られてしまう。確認するとiPhoneだけはやるけど、Androidさんには冷たい。
で、最新のT3 FrameworkのT3 Blankを入れると、昔のJA-T3とはプラグインがかぶるらしくて混在できない。仕方が無いので、昔のテンプレートプラグインは休んで貰うことにした。でも、昔の方がしっくりくるデザインだった。でもモバイルフレンドリにはなったようだ。とりあえずはオーケー。
で、最新のT3 FrameworkのT3 Blankを入れると、昔のJA-T3とはプラグインがかぶるらしくて混在できない。仕方が無いので、昔のテンプレートプラグインは休んで貰うことにした。でも、昔の方がしっくりくるデザインだった。でもモバイルフレンドリにはなったようだ。とりあえずはオーケー。
明るい未来
一次産業は、そのほとんどがロボットによって行われ、安定な供給、たぶん工業のような2次産業的な体制になる。水産業は全自動的な監視システムを用いた国際的な取り決めに基づいて漁獲高が決められる。ただほとんどが養殖によって賄われる。漁もロボット船が行い、生育の度合いとか種類とかをちゃんと選別してくれて今みたいに無駄が無い。
二次産業も、ロボット化が進み、ヒトの介在はほとんど無くなる。車で言えば、デザインを決めるのはヒトが行うだろうが、安全性のチェックから製造までをロボットがやるだろう。
三次産業の内、医者、弁護士、などデータベースをベースに判断するような職種はヒトからAIに多くをサポートされるようになり、国民は無料で24時間サービスを受けられる。警官や消防士などもロボットだろうな。
と言うことになれば、国民は食の心配が無くなるので、何をしよう。伝統工芸とか、デザインみたいな嗜好性の強いもの、料理、研究、学問。。。
こうして考えると、この未来で、重要なのは、自前の食料の確保と、エネルギーの確保が最重要課題なのかな。でも原子力も核融合力もいらんなぁ。
二次産業も、ロボット化が進み、ヒトの介在はほとんど無くなる。車で言えば、デザインを決めるのはヒトが行うだろうが、安全性のチェックから製造までをロボットがやるだろう。
三次産業の内、医者、弁護士、などデータベースをベースに判断するような職種はヒトからAIに多くをサポートされるようになり、国民は無料で24時間サービスを受けられる。警官や消防士などもロボットだろうな。
と言うことになれば、国民は食の心配が無くなるので、何をしよう。伝統工芸とか、デザインみたいな嗜好性の強いもの、料理、研究、学問。。。
こうして考えると、この未来で、重要なのは、自前の食料の確保と、エネルギーの確保が最重要課題なのかな。でも原子力も核融合力もいらんなぁ。
2017年10月9日月曜日
Kuman 信号発生器買ってみた
ゆっちゃんに貰ったファンクションジェネレータキットがどうしても動作しないので、 Kuman 信号発生器をAmazonでぽちっとやった。中国深圳から10日以上掛かってとどいたものの、それは「UNO」と基盤に書かれた見慣れたものだった。で、販社に連絡したところ直ぐに送っていただけた。組み上げて、別に買ってあったArduino UNOでプローブしたところ、信号が全く検出できない。どうなってるのかと、色々やっている内に、実はArduinoのAnalog Portがこけていることが判明。信号が出ていることは確認したけれど、ケースに入れようとしたら、雌ねじの一つのねじ山が無い。ありかー。直ぐに送ってくれるらしいけど。。。
担当の方はすごく反応が早いし、誠実だけど、ちょっと、疲れた。
Arduinoの方も代替品を送ってくれるらしい。ちょっと心配だったので二つ買っといて良かった。でも、なぜか1つ増えて、半故障品も一つ。2つかったら4つになった。これってわらしべもどきか。
品質は値段の割には十分だと思うけどね。
担当の方はすごく反応が早いし、誠実だけど、ちょっと、疲れた。
Arduinoの方も代替品を送ってくれるらしい。ちょっと心配だったので二つ買っといて良かった。でも、なぜか1つ増えて、半故障品も一つ。2つかったら4つになった。これってわらしべもどきか。
品質は値段の割には十分だと思うけどね。
2017年10月1日日曜日
Visual Studio for macOS
ゆっちゃんに貰ったC#のコードを、せっかくVS for macOSが出たんだから移植してみようと思い立ち、プロジェクトファイルを読み込んで,ランさせようとしたら、オチタ。
じゃあということで、Hello Worldから始めようと思った。新しいプロジェクトを作成して、Cocoaアプリを指定したが、なにかライブラリが無いという。
Xamarinの何かが足らないのかなと思い、Unitiyがらみから、.NET Coreを入れてみたりしたけど、ダメ。もしかしたらXcodeがらみか、と気がついて、Xcodeを立ち上げたら、コンポーネントをインストールしますってメッセージが出た。ドキドキしながら待ち、Hello Worldをビルドしたら、ちゃんと出来た。よかった。
ゆっちゃんコードは、この次にって事になった。
じゃあということで、Hello Worldから始めようと思った。新しいプロジェクトを作成して、Cocoaアプリを指定したが、なにかライブラリが無いという。
Xamarinの何かが足らないのかなと思い、Unitiyがらみから、.NET Coreを入れてみたりしたけど、ダメ。もしかしたらXcodeがらみか、と気がついて、Xcodeを立ち上げたら、コンポーネントをインストールしますってメッセージが出た。ドキドキしながら待ち、Hello Worldをビルドしたら、ちゃんと出来た。よかった。
ゆっちゃんコードは、この次にって事になった。
2017年7月25日火曜日
Integrated Performance Monitoring Library
正式には、Integrated Performance Monitoring ライブラリと言う。プログラムの内部関数の時間などを計測し、パフォーマンスの改善につなげるためのライブラリツール。使い方はプログラムリンク時に、IPMライブラリを指定することによって、利用する。計測結果は、標準出力またはファイルに出力される。MPIの通信時間など広くプログラム実行速度のチェックに使われているらしい。
インストール[編集]
2017年現在、ソースはGitHubから提供されている。
git clone https://github.com/nerscadmin/IPM.git cd IPM ./configure --with-os=LINUX --with-compiler=gcc --with-arch=LINUX --with-cpu=INTEL --prefix=~/ --with-hpm=PAPI make make install
これでUbuntu17.04ではインストールされた。インストールされる場所は、自分のルートディレクトリの~/bin, ~/lib, ~/etcである。
使い方[編集]
プログラムリンク時に、その一番お尻にライブラリを指定する。
mpicc foo1.o foo2.o -lfoo -lboo -L~/lib -lipm -o foo
そして、並列処理を始める。
mpirun -np 120 foo arg1 arg2 ...
実行終了時に標準出力やファイルに結果が出力される。出力されるファイルは、xxx_xxx.xmlというファイルになる。このファイルはxmlファイルで階層データになっていてそのままではよく分からないので、グラフィックに出力させる。そのツールは既に用意されている。
~/bin/ipm_parse -html xxx_xxx.xml
すると、ディレクトリが作られ、内部にHTMLファイルがセーブされているのでそれをウェブブラウザで表示すればよい。
2017年7月14日金曜日
PhotoRec WoW!
母の調子が悪いと父に聞いて、具合を聞いてみると、遠出して撮ってきた写真を間違えて全部消してしまったとのこと。具合が悪いのは歩いたため膝が痛くなったらしい。心痛もあるのかな。そこで、メモリーカードの復活の呪文をネットで探してみた。
最悪、昔使ってたノートンユーティリティーみたいに有料ソフトがあるだろうと思っていたら、良さそうなのが見つかった。http://www.cgsecurity.org/wiki/PhotoRec。
インストールして使ってみたところ、消えてなくなった数百のJPEGファイルが復活した。ほお。すごいね。
最悪、昔使ってたノートンユーティリティーみたいに有料ソフトがあるだろうと思っていたら、良さそうなのが見つかった。http://www.cgsecurity.org/wiki/PhotoRec。
インストールして使ってみたところ、消えてなくなった数百のJPEGファイルが復活した。ほお。すごいね。
2017年6月13日火曜日
ViennaCLのBenchmark BLAS on iMac 21.5 Late 2013
機種名: iMac
機種 ID: iMac14,3
プロセッサ名: Intel Core i5
プロセッサ速度: 2.9 GHz
プロセッサの個数: 1
コアの総数: 4
二次キャッシュ(コア単位): 256 KB
三次キャッシュ: 6 MB
メモリ: 16 GB
チップセットのモデル: NVIDIA GeForce GT 750M
種類: GPU
バス: PCIe
PCIe レーン幅: x16
VRAM(総量): 1024 MB
製造元: NVIDIA (0x10de)
この環境で、ViennaCLのベンチマークを走らせてみる。
まず、CPUから。
./examples/benchmarks/dense_blas-bench-cpu
Benchmark : BLAS
----------------
sCOPY : 3.07 GB/s
sAXPY : 3.74 GB/s
sDOT : 3.02 GB/s
sGEMV-N : 0.431 GB/s
sGEMV-T : 0.767 GB/s
sGEMM-NN : 0.591 GFLOPs/s
sGEMM-NT : 0.541 GFLOPs/s
sGEMM-TN : 0.574 GFLOPs/s
sGEMM-TT : 0.543 GFLOPs/s
----
dCOPY : 5.83 GB/s
dAXPY : 7.02 GB/s
dDOT : 5.7 GB/s
dGEMV-N : 0.82 GB/s
dGEMV-T : 1.46 GB/s
dGEMM-NN : 0.557 GFLOPs/s
dGEMM-NT : 0.51 GFLOPs/s
dGEMM-TN : 0.579 GFLOPs/s
dGEMM-TT : 0.573 GFLOPs/s
OpenMP版
Benchmark : BLAS
----------------
sCOPY : 9.14 GB/s
sAXPY : 10.3 GB/s
sDOT : 9.33 GB/s
sGEMV-N : 1.28 GB/s
sGEMV-T : 2.34 GB/s
sGEMM-NN : 2.01 GFLOPs/s
sGEMM-NT : 1.97 GFLOPs/s
sGEMM-TN : 2.04 GFLOPs/s
sGEMM-TT : 1.97 GFLOPs/s
----
dCOPY : 12.7 GB/s
dAXPY : 18.1 GB/s
dDOT : 15.4 GB/s
dGEMV-N : 2.15 GB/s
dGEMV-T : 3.75 GB/s
dGEMM-NN : 2.02 GFLOPs/s
dGEMM-NT : 1.99 GFLOPs/s
dGEMM-TN : 2.06 GFLOPs/s
dGEMM-TT : 2.07 GFLOPs/s
コア分だけ速くなってる。
次はOpenCL
./examples/benchmarks/dense_blas-bench-opencl
----------------------------------------------
Device Info
----------------------------------------------
Name: GeForce GT 750M
Vendor: NVIDIA
Type: GPU
Available: 1
Max Compute Units: 2
Max Work Group Size: 1024
Global Mem Size: 1073741824
Local Mem Size: 49152
Local Mem Type: 1
Host Unified Memory: 0
Benchmark : BLAS
----------------
sCOPY : 19.3 GB/s
sAXPY : 46.8 GB/s
sDOT : 41.6 GB/s
sGEMV-N : 25.5 GB/s
sGEMV-T : 23.7 GB/s
sGEMM-NN : 31.6 GFLOPs/s
sGEMM-NT : 33.9 GFLOPs/s
sGEMM-TN : 29.5 GFLOPs/s
sGEMM-TT : 31 GFLOPs/s
----
dCOPY : 48.4 GB/s
dAXPY : 55.2 GB/s
dDOT : 44.9 GB/s
dGEMV-N : 23.5 GB/s
dGEMV-T : 23.2 GB/s
dGEMM-NN : 14.8 GFLOPs/s
dGEMM-NT : 14.9 GFLOPs/s
dGEMM-TN : 14.2 GFLOPs/s
dGEMM-TT : 14.6 GFLOPs/s
そして、CUDA。
./examples/benchmarks/dense_blas-bench-cuda
Benchmark : BLAS
----------------
sCOPY : 24.5 GB/s
sAXPY : 52.1 GB/s
sDOT : 37.5 GB/s
sGEMV-N : 40.8 GB/s
sGEMV-T : 26.4 GB/s
sGEMM-NN : 38.2 GFLOPs/s
sGEMM-NT : 38 GFLOPs/s
sGEMM-TN : 39.6 GFLOPs/s
sGEMM-TT : 38.1 GFLOPs/s
----
dCOPY : 56.3 GB/s
dAXPY : 52.8 GB/s
dDOT : 47.1 GB/s
dGEMV-N : 37.4 GB/s
dGEMV-T : 27.1 GB/s
dGEMM-NN : 22.5 GFLOPs/s
dGEMM-NT : 23 GFLOPs/s
dGEMM-TN : 22.5 GFLOPs/s
dGEMM-TT : 22.4 GFLOPs/s
GPUの圧勝。ただ、CPU版の単精度計算と倍精度計算でFLOPS値が同じくらいなのは、AVX2の命令系を使っていないのだろう。まあ、使っても単精度が倍になるくらいか。それともSIMDは使ってないのか。それならば最大16倍速くなる。
2017年6月11日日曜日
Joomla 2.5 -> 3.5 ERRO: Could not open /var/www/bin/index.html for writing.
やっと終わった。
CentOS6.8では、PHP5.1がデフォルトで入っていて、remiリポジトリから5.6をとってきてインストールすることは出来た。これは別記事に子細が書いてある。
で、環境が整ったので、Joomla2.5.58から3.5.xにアップデートをしてみた。
Administrator画面から、「Joomlaの更新」を選んで一応簡単にできる。Joomlaサイトの記述に依れば、ほとんどは大丈夫らしいが、うちはダメだった。
どうも、Joomla1.xからアップグレードでサイトを更新していると、二つのディレクトリ:
ああ、焦った。
CentOS6.8では、PHP5.1がデフォルトで入っていて、remiリポジトリから5.6をとってきてインストールすることは出来た。これは別記事に子細が書いてある。
で、環境が整ったので、Joomla2.5.58から3.5.xにアップデートをしてみた。
Administrator画面から、「Joomlaの更新」を選んで一応簡単にできる。Joomlaサイトの記述に依れば、ほとんどは大丈夫らしいが、うちはダメだった。
どうも、Joomla1.xからアップグレードでサイトを更新していると、二つのディレクトリ:
/var/www/bin/が無く、これが無いとエラーになってしまう。そこで、これらのディレクトリを自分で掘ってしまうことにした。つまり、
/var/www/layouts/
mkdir /var/www/binをしたところ、エラーは発生せずに無事にアップグレードできました。
mkdir /var/www/layouts
cd /var/www
chown apache:apache bin layouts
ああ、焦った。
2017年6月9日金曜日
Database connection error (2): Could not connect to MySQL.
Joomlaを2.5で運用している。本当は最新の3.5にしたいんだけど、サーバがCentOS6.8でデフォルトのMySQLやPHPが3.5に対応していない。そこで、MySQLを5.5に、PHPを5.6に変更してみた。
まず、MySQLは本家本元が用意してくれているリポジトリからとってくる。yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm yum install yum-utilsこれは簡単だった。データベースがあれば、mysql_upgradeして必要なデータベースの変更を行う。失敗することもあるらしいので、データを予めダンプするなりして置くことはいうまでもなく必要。
yum-config-manager --disable mysql56-community
yum-config-manager --enable mysql55-community
yum install mysql mysql-devel mysql-server mysql-utilities
つぎは、PHP。自分でソースからコンパイルするのも有りだけど、とりあえずメンテナーのしっかりしているところから持ってくる方が得策。で、REMIのリポジトリからとってくることにした。
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpmこれで良かったはずだったのが、Joomlaのホーム画面をブラウズする と、
yum install --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo \
php-gd php-xml php-mysqlnd
Database connection error (2): Could not connect to MySQL.
が出てしまった。これはどうもmySQLへのアクセスに使うアカウントが使えない際に発生するとJoomlaの人たちが言っている。でも何もいじってないし。で、調べてみた。となっていて、パスワードの長さが16だった。PHP5.5からはmySQLとのアクセスにphp-mysqlnd (mysqllnd)を使っていて、 どうも昔の短いパスワードが使えなくなったらしい。本来なら、
mysql -uroot -p mysql -e 'select User,length(Password) from user;'
Enter password:
+----------+------------------+
| User | length(Password) |
+----------+------------------+
| root | 16 |
| joomla | 16 |
| web | 16 |
+----------+------------------+
となるらしい。これを解決するには、もし、/etc/my.cnfに"old_password=1" があるなら、0に変えて、その後リスタート。そして、パスワードを変更してやる。それでオーケー。のはず。mysql -uroot -p mysql -e 'select User,length(Password) from user;'
+----------+------------------+
| User | length(Password) |
+----------+------------------+
| root | 41 |
| root | 41 |
2017年6月1日木曜日
C++ Matrix Vector Libraries
行列とベクトルの演算に関するライブラリは、基本がNetLibのBLASで、そのAPIは同じで実装に色々工夫がされているライブラリがたくさんある。しかしながらそのインターフェースは昔ながらのサブルーチンコールになっている。
その一方、C++はそのオペレータオーバーロードという仕組みによって、行列やベクトルの演算が、まるで教科書にある数学的な書式で行うことが出来る。たとえば、
ところが、この演算をC++でやると、実行速度が極めて遅くなるという問題が起こる。それは、上記の演算は実は、
この問題を解決したのが20年以上前に、あるカナダ人学生が考え出した、Expression Templateという方法だ。このC++独特の実装技術を用いると、tmpを使わないで済む様になる。
現在のC++の行列演算ライブラリはこの技術を用いているが、現在は更に色々な問題が発生している。 共通するのはキャッシュミスヒットによる性能の悪化である。
その一方、C++はそのオペレータオーバーロードという仕組みによって、行列やベクトルの演算が、まるで教科書にある数学的な書式で行うことが出来る。たとえば、
b = M * a;のように書けば、行列Mにベクトルaを掛けて、その結果をベクトルbに代入するということになる。変なサブルーチンを呼ばなくてもいいから簡単である。
ところが、この演算をC++でやると、実行速度が極めて遅くなるという問題が起こる。それは、上記の演算は実は、
tmp = M * a;という一時的にベクトルデータを格納するtmpというインスタンスが必要となってしまうからだ。tmpが小さければ良いが、大きくなれば大問題となる。
b = tmp;
この問題を解決したのが20年以上前に、あるカナダ人学生が考え出した、Expression Templateという方法だ。このC++独特の実装技術を用いると、tmpを使わないで済む様になる。
現在のC++の行列演算ライブラリはこの技術を用いているが、現在は更に色々な問題が発生している。 共通するのはキャッシュミスヒットによる性能の悪化である。
b = M * V
一番簡単な演算で、四則演算量は、
N * (N + N-1)である。 これを計算時間で 割ってやると、FLOPS値が得られる。
FLOPS = 計算量 / 時間
Boost
N=1000のとき、0.118404 GFLOPSを得た。Boostでは関数の形で積算は行われるので、参考までのデータとなる。
Eigen3
N=1000のとき、3.19285 GFLOPSを得た。
Blaze
N=1000のとき、1.077 GFLOPSを得た。
BoostはETを用いていなく、更にEigen3とBlazeはSSE3などのSIMD命令を使っているので差が大きく出ている。
b = M*M*V
このかたちの演算を行うとき、問題が存在する。コンパイラは左から式を解釈していくため、まずM*Mを計算し、その後、(M*M)*Vをおこなってしまう。これを右から順に行えば、二つの行列とベクトルの演算になるので、行列と行列の演算を行ってしまうよりも遙に少ない演算量で行える。少ない方での四則演算量は、行列の長さをNxNとすると、
2 * N * (N+N-1)となる。
Boost
Boostでは、積算は関数で行われるようになっているので、参考までにあげる。
b = prod( M, V);N=1000のとき、0.114209 GFLOPSを得た。
b = prod( M, b);
Eigen3
N=1000のとき、0.0246804 GFLOPSを得た。
Blaze
N=1000のとき、1.11148 GFLOPSを得た。
この場合、M*Vのパフォーマンスに比べてEigen3はかなり悪い。これは、左から演算を行っているためだろう。また、Blazeは彼らの言う、Smart Expression Template技術によってこのような場合もうまく計算している事が分かる。
2017年5月26日金曜日
Inno Setup Compiler 5.5.9 (u)
Windows向けインストーラ作成プログラムの中の一つ、Inno Setup Compilerについて簡単に使い方を説明する。
Free Softwareで、GitHubでソースコードも公開されている。このソースコードそのもののライセンス形態はかなり緩い。変更しても公開する必要に関して言及されていないので、たぶんそのまま持って商用にも使える。ただ、著作権表示に関しては厳密にせよということが書かれている。http://www.jrsoftware.org/
これらの内、必要なものをダウンロードする。この時、両方とも欲しいような場合、別なフォルダーにインストールすれば良いらしい。
Inno Setup Compilerを立ち上げ、WelcomeウィンドウのNew fileでCreate a new script file using the Script Wizardを選択すると、簡単に自分用の雛形を作ることが出来る。
単にアプリケーションをインストールするだけならばこれでインストーラを作成できる。
ここで、Wizardのほぼデフォルトの設定で作成されたスクリプトを以下に示す。
C:\Program Files (x86)
にインストールされてしまう。64bitアプリケーションならば、
C:\Program Files
にインストールされるべきである。64bitアプリだけインストールしたいのならば、
DefaultDirName={pf}\{#MyAppName}
の{pf}を{pf64}に変更すれば良い。
そのためには、まず、
で{tmp}ディレクトリにvcredist_x64.exeをコピーするように指定する。ちなみにFlagsで処理後には消去指定してある。
そして、
日本語などのメッセージは既にInno Setup 5のディレクトリ内に、Languagesというディレクトリ内部に各言語の.islファイルとして用意されている。これを用いるには、スクリプトの中で、
という[Languages]というsectionに追加する。するとインストーラのメッセージを日本語にする事が出来る。
Free Softwareで、GitHubでソースコードも公開されている。このソースコードそのもののライセンス形態はかなり緩い。変更しても公開する必要に関して言及されていないので、たぶんそのまま持って商用にも使える。ただ、著作権表示に関しては厳密にせよということが書かれている。http://www.jrsoftware.org/
インストール
平成29年5月現在、このソフトのオリジナルサイトからのバイナリは2種類、Unicode対応と非対応のものだ。Inno Setup Helpにある記述によると、Inno Setup 5.3.0からこの形態になった。これらの内、必要なものをダウンロードする。この時、両方とも欲しいような場合、別なフォルダーにインストールすれば良いらしい。
使い方
平成29年5月現在、バージョン5.5.9において、拡張子 .iss を持つテキストベースのスクリプトファイルに全ての情報を書き込み、Inno Setup Compilerでインストーラを作成する、という流れとなっている。Inno Setup Compilerを立ち上げ、WelcomeウィンドウのNew fileでCreate a new script file using the Script Wizardを選択すると、簡単に自分用の雛形を作ることが出来る。
単にアプリケーションをインストールするだけならばこれでインストーラを作成できる。
ここで、Wizardのほぼデフォルトの設定で作成されたスクリプトを以下に示す。
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{xxxxxxxxxxxxxxxxxxxxx}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\Readme.txt"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
64bitアプリ用の修正
このままでも所定のアプリ、'''MyProg.exe'''をシステムの指定のディレクトリにインストールされる。ただ、x64になってから、デフォルトでは、C:\Program Files (x86)
にインストールされてしまう。64bitアプリケーションならば、
C:\Program Files
にインストールされるべきである。64bitアプリだけインストールしたいのならば、
DefaultDirName={pf}\{#MyAppName}
の{pf}を{pf64}に変更すれば良い。
Redistributable Packages
古い開発環境で開発されたアプリを最新のOSでの動作をさせようとすると、マイクロソフトがそれように提供している追加のパッケージをインストールしないとランタイム時にエラーを起こしてしまう。そのため、ユーザのためには、予めインストーラで提供できれば良い。そのためには、ディレクティブ、[Files]でそのファイルをどこに出力するかを指定し、[Run]ディレクティブで実行させれば良い。そのためには、まず、
[Files]
Source: "C:\Users\foo\vcredist_x64.exe"; DestDir: {tmp}; Flags: deleteafterinstall
で{tmp}ディレクトリにvcredist_x64.exeをコピーするように指定する。ちなみにFlagsで処理後には消去指定してある。
そして、
[Run]で実行させることを指定する。
Filename: {tmp}\vcredist_x64.exe; Parameters: "/q /norestart"; \
StatusMsg: "Installing VC++ 2013 Redistributables..."
日本語などのメッセージは既にInno Setup 5のディレクトリ内に、Languagesというディレクトリ内部に各言語の.islファイルとして用意されている。これを用いるには、スクリプトの中で、
[Setup]
...
[Languages]
Name: japanese; MessagesFile: compiler:Languages\Japanese.isl
という[Languages]というsectionに追加する。するとインストーラのメッセージを日本語にする事が出来る。
2017年5月25日木曜日
Windows用インストーラー作成ソフト
今更ながらインストーラの必要性を少し感じ、どんなソフトがあるのか調べてみた。ちなみに、Mac OSXでは、スタティックリンクされたアプリであれば、追加するライブラリは、多分無いので、インストーラの必要性を感じていなかった。WindowsではStatic Linkしていても、システム系で互換性のためのファイルがOSのバージョンアップで無くなることがある。
以下に、インストール作成ソフトを挙げてみる。
ただし、Visual Studioの無料版であるExpressやCommunityというバージョンでは、機能拡張が使えないので、これらのソフトはVisual Studio Express系の内部から使うことが出来ないことに注意して欲しい。
以下に、インストール作成ソフトを挙げてみる。
ただし、Visual Studioの無料版であるExpressやCommunityというバージョンでは、機能拡張が使えないので、これらのソフトはVisual Studio Express系の内部から使うことが出来ないことに注意して欲しい。
InstallShield LE
現在、Visual Studioの公式インストーラのようだ。Visual Studioのプロジェクト追加からこの無料版ソフトをインストール出来る。
Advanced Installer
Free版があり、Microsoft MVP か MCT、もしくはブログなどSNSで宣伝してくれれば無料にする。そのブログなどのURLを知らせる必要がある。
InstallAware
メールアドレスを登録するとFree版がダウンロードできる。
WiX
Windows Installer XMLの略で、WiX。もともとMicrosoftの開発だったが、現在はちがい、その上、Open Source Projectである。
Inno Setup
無料のソフトで、独自のフォーマットで作成される。続く。
2017年5月19日金曜日
両手打ちバックハンドの歴史
朝食の時に、女房とテニスの話をしていて、ふと両手打ちバックハンドっていつくらいからいたんだろう、と言う話が出た。
実際にテレビなどで見た記憶では、男子ではジミー・コナーズ、ビョルン・ボルグ、クリフ・ドライスデール、女子ではクリス・エバートが頭によぎった。
雑誌かなんかで読んだ記憶では、パンチョ・セグラという選手のフォアが両手打ちだった。
で、ちょっと調べてみた。有名なのは、ビビアン・マクグラス。このオーストラリアの男子!選手が両手打ちを有名にしたと言われているようだ。この人は1930年代の人らしい。
どっかのフォーラムによると、1920年代あたりにはものすごく変わった打ち方の人たちがいたらしいので、そのころにも両手打ちの萌芽があったのかもしれない。
ATPのサイトで世界ランキング一位になった人たちのリストを見ると、面白いことが分かる。40年くらい前には両手打ちの選手が少なかったにもかかわらず、コナーズ、ボルグが一位。最近では、両手打ちバックの選手が多いにもかかわらず、フェデラーが長いこと一位だった。今はジョコビッチ、マレーだけど。いずれにせよ、余り両手打ちの選手の一位というのは多くないみたいだ。今後はわからないけど。
実際にテレビなどで見た記憶では、男子ではジミー・コナーズ、ビョルン・ボルグ、クリフ・ドライスデール、女子ではクリス・エバートが頭によぎった。
雑誌かなんかで読んだ記憶では、パンチョ・セグラという選手のフォアが両手打ちだった。
で、ちょっと調べてみた。有名なのは、ビビアン・マクグラス。このオーストラリアの男子!選手が両手打ちを有名にしたと言われているようだ。この人は1930年代の人らしい。
どっかのフォーラムによると、1920年代あたりにはものすごく変わった打ち方の人たちがいたらしいので、そのころにも両手打ちの萌芽があったのかもしれない。
ATPのサイトで世界ランキング一位になった人たちのリストを見ると、面白いことが分かる。40年くらい前には両手打ちの選手が少なかったにもかかわらず、コナーズ、ボルグが一位。最近では、両手打ちバックの選手が多いにもかかわらず、フェデラーが長いこと一位だった。今はジョコビッチ、マレーだけど。いずれにせよ、余り両手打ちの選手の一位というのは多くないみたいだ。今後はわからないけど。
2017年3月17日金曜日
ママ友ランチ
最近テニスをやった後、ちょこちょこと昼飯を食べることがある。
久々にコナズ珈琲に行ったら、やたらに赤ちゃん連れが多い。なにこれ、なんかのイベントか?と思うほど。
聞くと、結構多いですよと。まあ、若いママ達が息を抜ければ良いんだけど、そんなにしょっちゅう来てるママが多いとなると、カロリーも心配だけど、なんか、5百円玉を握りしめて、定食屋でサバ定かなんかを食べてるパパたちを思い浮かべて、勝手にすこし切なくなった。
久々にコナズ珈琲に行ったら、やたらに赤ちゃん連れが多い。なにこれ、なんかのイベントか?と思うほど。
聞くと、結構多いですよと。まあ、若いママ達が息を抜ければ良いんだけど、そんなにしょっちゅう来てるママが多いとなると、カロリーも心配だけど、なんか、5百円玉を握りしめて、定食屋でサバ定かなんかを食べてるパパたちを思い浮かべて、勝手にすこし切なくなった。
2017年3月10日金曜日
Global Flags
C++でマルチプラットフォームのアプリケーションを開発していて、急にWindowsで終了時にエラーが出るようになった。
ある配列をdeleteする際にエラーが出る。一応、複数回deleteしても大丈夫なような仕組みを入れているので、どっかでHeap領域を越えてアクセスしている可能性が高いかもと思い、なんかツールが無いかと探してみた。
Windows SDK 8.1というのをインストールしてみた。これには、WinDbg.exeやGlobal Flags、Application Verifierというのが含まれている。このうち、Global FlagsとかApplication VerifierというのがHeapのチェックをしてくれるらしい。
Global Flagsを立ち上げて、Image Fileというタブで該当のアプリケーション名を入れて、TABキーを押して、いろいろとチェック項目を入れる。
いろいろやったが、何の問題も見つけられない。終了時だけエラーが出る。
その後、アプリだけ動かそうとして、Explorerからダブルクリックして立ち上げようとすると、
落ち着いてみると、恐らくアプリの名前でシステム的に何かしているのだろうと思い、使ったアプリ、Global FlagsとApplication Verifierでなんか登録解除の方法が無いかを調べたが全然見つからない。とほほ。
最終的にやっと見つけた方法は、Global FlagsのImage Fileタブで、登録と同じように、アプリ名を入れてTABを押すと、登録されているチェック項目がでてくるので、それらを外して再登録すると元通りになった。
いやぁ、焦った。
でも、最初の問題が解決してないんだよなあ。
ある配列をdeleteする際にエラーが出る。一応、複数回deleteしても大丈夫なような仕組みを入れているので、どっかでHeap領域を越えてアクセスしている可能性が高いかもと思い、なんかツールが無いかと探してみた。
Windows SDK 8.1というのをインストールしてみた。これには、WinDbg.exeやGlobal Flags、Application Verifierというのが含まれている。このうち、Global FlagsとかApplication VerifierというのがHeapのチェックをしてくれるらしい。
Global Flagsを立ち上げて、Image Fileというタブで該当のアプリケーション名を入れて、TABキーを押して、いろいろとチェック項目を入れる。
いろいろやったが、何の問題も見つけられない。終了時だけエラーが出る。
その後、アプリだけ動かそうとして、Explorerからダブルクリックして立ち上げようとすると、
プログラムxxが開始できません 指定されたファイルが見つかりません
とエラーが出て、立ち上がらない。古いバージョンの同じ名前のアプリも同様。どうなっているのじゃと半分パニックになった。落ち着いてみると、恐らくアプリの名前でシステム的に何かしているのだろうと思い、使ったアプリ、Global FlagsとApplication Verifierでなんか登録解除の方法が無いかを調べたが全然見つからない。とほほ。
最終的にやっと見つけた方法は、Global FlagsのImage Fileタブで、登録と同じように、アプリ名を入れてTABを押すと、登録されているチェック項目がでてくるので、それらを外して再登録すると元通りになった。
いやぁ、焦った。
でも、最初の問題が解決してないんだよなあ。
2017年1月25日水曜日
Drobo5D 静かになる
我が社のストレージのメイン、Drobo5Dのファンがうるさくて仕方が無い。保証は延長していなかったので、有償でどのくらい掛かるのかPrincetonサポートに聞いてみたら、10万くらいかかるとのこと。あほかい。新品が買えるわ。
仕方が無いので、バラしてみて掃除を試みた。既に先人がいっぱいいるし、歴代MacBookもバラしているし、安心して始めた。
意外に簡単にばらせるが、ファンを取り外すためには、コネクターを外さなければならないのだが、最近ひどくなって来ている老眼のために、コネクターにストッパがあるのか無いのか分からない。無理に引っ張って壊すと怖いので、とりあえずエアーで埃を吹っ飛ばした。
結果、起動したときはうるさかったけど、だんだん静かになってきた。とりあえず、ヨシとしよう。
仕方が無いので、バラしてみて掃除を試みた。既に先人がいっぱいいるし、歴代MacBookもバラしているし、安心して始めた。
意外に簡単にばらせるが、ファンを取り外すためには、コネクターを外さなければならないのだが、最近ひどくなって来ている老眼のために、コネクターにストッパがあるのか無いのか分からない。無理に引っ張って壊すと怖いので、とりあえずエアーで埃を吹っ飛ばした。
結果、起動したときはうるさかったけど、だんだん静かになってきた。とりあえず、ヨシとしよう。
2017年1月20日金曜日
新しいRAID、Fire!
センチュリーの林檎派・QUADRaider EZがとうとう壊れ、代わりに届いた、Mac周辺機器の老舗、Sonnet TechnologyのFusion QRが届いた。
顔つきなどが似てる感じがしたけど、梱包を解いてびっくり。同じだ。多少のデザイン変更はあるけど、ケースやHDDアダプタなどほとんど同じ。なるほど。秋葉館のラインアップからQUAD Raiderが消えて、どうしたのかと思っていたけど、こういうことなのか。
こんなにはっきり、技術移管が見えたのは珍しい。電源がアダプタータイプになったのは、私のとこと同じようなトラブルが多かったと言うことなのかな。
それで今、急ごしらえのTime Machineディスクからこの新しいRAIDドライブにデータを移動している。3日掛かるらしい。今2日目。USB3.0からThunderbolt->Firewire800なのにこんなに掛かるとは。とほほ。
顔つきなどが似てる感じがしたけど、梱包を解いてびっくり。同じだ。多少のデザイン変更はあるけど、ケースやHDDアダプタなどほとんど同じ。なるほど。秋葉館のラインアップからQUAD Raiderが消えて、どうしたのかと思っていたけど、こういうことなのか。
こんなにはっきり、技術移管が見えたのは珍しい。電源がアダプタータイプになったのは、私のとこと同じようなトラブルが多かったと言うことなのかな。
それで今、急ごしらえのTime Machineディスクからこの新しいRAIDドライブにデータを移動している。3日掛かるらしい。今2日目。USB3.0からThunderbolt->Firewire800なのにこんなに掛かるとは。とほほ。
2017年1月10日火曜日
Amazon Kindle Barrans
いやー、ひどいですね。Kindle。不毛なる荒野と化している。内容的に、多分何のレギュレーションも無く、個人が勝手に出版できるようで、幾つか見ただけだけど、内容が、PCのスクリーンショットに多少解説をつけただけのモノが、たった数ページとかで千円近くで売られている。
出版社がきちんと関わっている本なら、量/質の最低限は担保されている(はず)。スマホ画面で7ページが千円近いなんてほとんどサギに近い。しかもほとんどがスクショ。
こんなのが今Amazonにあふれているのですよ。しかも、数人のサクラと思しきレビューアが5★を与えているので、数人は引っかかる。とりあえず、ページ数をチェックしてみることが大切です。試し読みで目次だけは観られるはずで、目次が無いなんて言うのは書籍としては論外。自分の身は自分で守りましょう。
私?。とりえあず、Kindle Unlimitedのおかげで自腹は避けられました。怪しさ満載だったので、中身の確認がしたかった。
出版社がきちんと関わっている本なら、量/質の最低限は担保されている(はず)。スマホ画面で7ページが千円近いなんてほとんどサギに近い。しかもほとんどがスクショ。
こんなのが今Amazonにあふれているのですよ。しかも、数人のサクラと思しきレビューアが5★を与えているので、数人は引っかかる。とりあえず、ページ数をチェックしてみることが大切です。試し読みで目次だけは観られるはずで、目次が無いなんて言うのは書籍としては論外。自分の身は自分で守りましょう。
私?。とりえあず、Kindle Unlimitedのおかげで自腹は避けられました。怪しさ満載だったので、中身の確認がしたかった。
2017年1月6日金曜日
新しいRAID HDD
我が家では、メインストレージにDrobo 5Dを使い、Time Machine用に、センチュリーの林檎派、QUAD Raider EZを使っていた。
ところがこのQUAD、秋口にいきなり赤いLEDが点灯し、ピーピーなってオフラインになってしまった。おそらく電源系。秋葉館に電話したら、古すぎて保守部品も無いとのこと。その後、だましだまし使っていた。急ごしらえのTime Machine用にロジテックのLHR-2BDPU3をソフトRAID0で運用。
しかし、昨日とうとう、QUADが完全にいかれた。
この、QUAD Raider EZは、インターフェースが、USB2とFirewireがついている。それでDroboはThunderbolt、QUADにはDroboからThunderboltでデイジーチェーンでつなぎ、Firewire変換アダプタで安定動作できていたのが気に入っていた。なにより少ないUSBポートを使いたくなかった。
さて、2017年現在、USB-3がメインで、Thunderboltでも少ないのに、Firewireなどはほとんどない。そんな中、昔からのMacベンダのSonnet Technologiesさんが、Fusion QRという比較的安価な(ロジテックが安すぎる)RAIDシステムを販売しているのを見つけた。
このFusion、Firewire 800が2つ、eSATAが1つ、USB3.0が1つ付いている。嬉しいねぇ。
ポチッ。
ところがこのQUAD、秋口にいきなり赤いLEDが点灯し、ピーピーなってオフラインになってしまった。おそらく電源系。秋葉館に電話したら、古すぎて保守部品も無いとのこと。その後、だましだまし使っていた。急ごしらえのTime Machine用にロジテックのLHR-2BDPU3をソフトRAID0で運用。
しかし、昨日とうとう、QUADが完全にいかれた。
この、QUAD Raider EZは、インターフェースが、USB2とFirewireがついている。それでDroboはThunderbolt、QUADにはDroboからThunderboltでデイジーチェーンでつなぎ、Firewire変換アダプタで安定動作できていたのが気に入っていた。なにより少ないUSBポートを使いたくなかった。
さて、2017年現在、USB-3がメインで、Thunderboltでも少ないのに、Firewireなどはほとんどない。そんな中、昔からのMacベンダのSonnet Technologiesさんが、Fusion QRという比較的安価な(ロジテックが安すぎる)RAIDシステムを販売しているのを見つけた。
このFusion、Firewire 800が2つ、eSATAが1つ、USB3.0が1つ付いている。嬉しいねぇ。
ポチッ。
登録:
投稿 (Atom)