windows

node.js(Windows版)を自前ビルドする
謎のクラッシュ(FFIでネイティブプラグインがアクセス違反で死ぬ)を追跡するため、 VCのデバッガをアタッチするべく自前ビルドする。 node-v5.3.0.tar.xz 7zipで解凍。 python2系にpathを通してvcbuild.batをたたく。 > vcbuild.bat v8もlibuvも全部入りらしくあっさりとほぼビルドできた。 SignTool Error: No certificates were found that met all the given criteria. Failed to sign exe document https://github.com/nodejs/node-v0.x-archive/wiki/Installation#building-on-windows debugビルドの作り方はこう。 > vcbuild.bat nosign debug nodeをデバッグ実行 node-v5.3.0にnode.slnができているのでこれをVisualStudio2015で開く。 nodeをスタートアッププロジェクトに指定 nodeの設定のdebugタブで、カレントディレクトリとコマンドライン引数を指定 f5 例外が再現した void CallbackInfo::DispatchToV8(callback_info *info, void *retval, void **parameters, bool dispatched) { Nan::HandleScope scope; static const char* errorMessage = "ffi fatal: callback has been garbage collected!"; if (info->function == NULL) { // throw an error instead of segfaulting.

node-ffiでstdcallが使いたい(頓挫)
Windows上でnode-ffiでdllから関数を呼びだしていたのだが、 dllにコールバックを登録した呼び出しを繰り返していると死ぬという現象に遭遇。 調べ始めた。 node-v5.3.0-x64.msi(Windows10) node-ffiはstdcallに対応してない 2014/01/25 http://stackoverflow.com/questions/21357502/calling-delphi-stdcall-function-with-panischar-from-node-js node-ffiはstdcall対応してないで。 そうなのかー。 github見るとIssueがあるけど解決されなかったぽい。 2012/01/13 * https://github.com/node-ffi/node-ffi/issues/34 残念。 ついで。node-ffiはffiにパッケージ名を改めたらしい。 https://github.com/node-ffi/node-ffi/wiki/API-changes-from-v0.x-to-v1.x node-ffiを改造できないか模索する node-ffiはlibffiのラッパーとわかる。 FFI_DEFAULT_ABI というのがcdeclになる様子でnode-ffiはそれしか対応していないのが問題。 で、調べていくと node_modules/ffi/deps/libffi/src/x86/ffitarget.h typedef enum ffi_abi { FFI_FIRST_ABI = 0, /* ---- Intel x86 Win32 ---------- */ #ifdef X86_WIN32 FFI_SYSV, FFI_STDCALL, FFI_THISCALL, FFI_FASTCALL, FFI_MS_CDECL, FFI_LAST_ABI, #ifdef _MSC_VER FFI_DEFAULT_ABI = FFI_MS_CDECL #else FFI_DEFAULT_ABI = FFI_SYSV #endif #elif defined(X86_WIN64) FFI_WIN64, FFI_LAST_ABI, FFI_DEFAULT_ABI = FFI_WIN64 #else /* ---- Intel x86 and AMD x86-64 - */ FFI_SYSV, FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ FFI_LAST_ABI, #if defined(__i386__) || defined(__i386) FFI_DEFAULT_ABI = FFI_SYSV #else FFI_DEFAULT_ABI = FFI_UNIX64 #endif #endif } ffi_abi; STDCALL発見・・・。しかし、この書き方だと64bitビルドで消滅するのではないか?

cygwin上のxorg上のtermで日本語を表示する
cygwin上のxorg上のtermで日本語を表示する cygwin版のxorg上のxtermで全角文字が微妙にずれる件との戦い。 .Xresourceで関連すると思われる項目。 XTerm*cjkWidth : true XTerm*forcePackedFont: false スクロールが発生した時に全角文字の間にスペースが入る問題 ls等でスクロールが発生した時に表示が乱れる。 XTerm*jumpScroll: false で解決したっぽい? screenの中でも同様の問題がw $ screen --version Screen version 4.02.01 (GNU) 28-Apr-14 どうも根深いらしくxtermを断念。 urxvtで頑張る .Xresource #define INCONSOLATA xft:Inconsolata:style=Medium:pixelsize=16,xft:メイリオ:pixelsize=18 urxvt*font: INCONSOLATA urxvt*boldFont: INCONSOLATA こういう感じで半角用の次に続けて全角用のフォントを指定することでうまくいった。 urxvtの中からscreenやtmuxしてもスクロール時に文字間隔が開く現象は出なくなった。

gvimのためにcygwinでxorg導入
gvimのためにcygwinでxorg導入 環境をcygwinに変えたらシンボリックリンクを使えるようになった。MSYSの時より綺麗にdotfilesの共有ができるようになったのだが、引きかえにWindows版のvimの設定が読みこめなくなってしまったw。 ということでcygwin版のgvimをインストールすることにしたのだが、こいつはxorgに依存していたのであった。 xtermの環境設定からだ xorgを使うことにしたので勢い余ってtermもxtermにしますかということで設定してみる。 まずはfont設定から。 cygwin版のxtermはトゥルータイプフォントを表示できる。使えるようにするには、 ~/.fontsディレクトリにttcファイル等を配置するだけだ。 MSゴシックの場合こうだ。 $ cd $ mkdir .fonts $ cd .fonts $ ln -s /cygdrive/C/WINDOWS/Fonts/msgothic.ttc 半角用にInconsolataも用意した。http://levien.com/type/myfonts/inconsolata.html $ ls .fonts Inconsolata.otf msgothic.ttc $ fc-match.exe Inconsolata Inconsolata.otf: "Inconsolata" "Medium" $ fc-match.exe gothic msgothic.ttc: "MS ゴシック" "Regular" フォントを指定してxtermを起動してみる。 $ DISPLAY=:0 xterm -fa "MS ゴシック" 文字の隙間が広すぎでよろしくない。 半角フォントと全角フォントを別々に指定するべし。 $ DISPLAY=:0 xterm -fa "MS ゴシック" -fd Inconsolata いい感じだ。 これを設定にするには、 ~/.Xresources XTerm*renderFont: true XTerm*faceName: Inconsolata XTerm*faceNameDoublesize: MS Gothic XTerm*faceSize: 12 xorg起動時に自動的に読みこまれるようにするには、

cygwinの導入とgit最新版のビルドまで
cygwinの導入とgit最新版のビルドまで しばらくWindows上のメインのshellをmsysgitのbashにしていたのだが、 久しぶりにcygwinに回帰した。 知らない間に環境が良くなっているじゃないの、ということで初期導入手順メモ。 既存のcygwinを掃除 “C:/cygwin”にインストール済みだが、 download済みのパッケージくらいは置いておこうということで以下のファイル/ディレクトリ 以外を削除した。 c:/cygwin + setup-x86.exe + http%3a%2f%2f... (パッケージのダウンロードディレクトリ) + etc/ あとetc/setupも削除。 これでクリーンな状態になるっぽい。 以降、 http://tar.blogru.me/entry/2014/03/20/004156 の通りにgitのビルドまで遂行。 cygwinセットアップ setup-x86.exeを実行。wgetとgitを追加インストール。 apt-cyg導入 $ mkdir -p /usr/local/src $ cd /usr/local/src $ git clone https://github.com/transcode-open/apt-cyg.git $ cp apt-cyg/apt-cyg /usr/local/bin/ 最新版gitのビルド ビルドに必要なもの install.sh set -x apt-cyg install gcc-core apt-cyg install make patch vim apt-cyg install libncurses-devel openssl-devel readline libsqlite3-devel libxml2-devel libxslt-devel apt-cyg install autoconf zlib zlib-devel libiconv python openssh tcl apt-cyg install gettext-devel apt-cyg install curl libcurl-devel ビルド

vim環境整備
vim環境整備 Windows8でコーディングができるようにvim回りを整備する。 コマンドライン環境としてPowerShellを採用してそこからvim(gvim)する方向性。 前の日記を整理して書き直し。 PowerShellを使えるようにしてvimとgitをインストールする PowerShellを管理者権限で実行して以下のように実行する。 powershell> Set-ExecutionPolicy RemoteSigned パッケージ管理として Chocolatey をインストール。dos窓で以下のように実行する。 dos> @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin powershellの設定ファイル作成する。shellの.profileに相当するファイル。 C:/Users/_USER_NAME_/Documents/WindowsPowerShell/Microsoft.PowerShell_profile.ps1 とりあえずwhichコマンド的な関数を書いておく function which([string] $command=$(throw "need command name")){ $Env:Path.Split(";") | %{ ls $_ 2> $null } | ?{ $_.Name -match "^$command" } | % { $_.FullName } } 改めてPowerShellを起動してchocolateyでvimをインストールする powershell> cinst vim gitも入れる。 powershell> cinst git cinstの実行直後はいろいろPathが通っていなかったりして使えない場合があるのでその場合はpowershellを再起動。

VS2013 express editionを入れてみた
VS2013 express editionを入れてみた で、DirectX9のプロジェクトをビルドしようとしてみたのだが D3DXが無くなっておる。 こいつは面倒くさいことになった・・・。 D3D9はあるのにD3DX9だけ無くなっているという。 D3D11対応を強いられている。

Windows8導入
Windows8導入 なんとなく去年買ってきてきてLinuxで使っていたマシンに SSDを買ってきてWindows8をインストールしてみた。 UEFIインストール UEFIインストールしたほうが起動が早いらしいのでやってみた。 起動してdelボタンを押して設定画面に入る その状態でインストールROMを挿入 起動メニューからUEFIの方のROMを選択 数秒間 ROMから起動するならなんか押せ と表示が出るのでその間にEnter WindowsではなくASUSのロゴが出て起動すればUEFIモードでの起動に成功 あとはロムの指示に従ってインストールする インストール後の環境 最近cygwinからPowerShellに移住しようとしているので、 cuiはPowerShellで。 まずは、PowerShellの権限変更。 PowerShellを管理者権限で起動して、 > Set-ExecutionPolicy RemoteSigned Chocolatey PowerShell版のapt-get的なChocolateyをインストールする。 dos窓(powershellではない)を起動してサイトに書いてある通りにコピペ。 @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin putty powershell> cinst putty vim powershell> cinst vim ~/_gvimrc colorscheme desert set iminsert=0 set imsearch=-1 set visualbell t_vb= ~/_vimrc colorscheme darkblue set hidden set nobackup git powershell> cinst git PowerShellの起動スクリプトにパスを追加

MinGW環境
MinGW環境 Irrlichtで開発を進めるにあたって開発環境をVC2010ExpressEditionからMinGWに乗り換えることにした。 後々Linux上でもコンパイルが通るようにしておきたいのでこちらの方が都合がよい。 基本的にはVCでもビルドできる状態を維持する方針ではある。 toolチェイン入手 MinGW本家ではなくTDM-GCCからgcc一式を入手する。 とりあえず32bit版を手に入れた。 bin/mingw32-make.exeをbin/make.exeにコピーしておいた。 cui整備 cygwinから使うとcygwinのincludeやlibを使われてややこしいのでDos窓ベースで開発する。 環境変数等をきっちり設定すればcygwin上でもできるのだけどやり方を忘れてしまったのでとりあえず。 http://www.nyaos.org/ Dos窓でcontrol-P, control-Nによる履歴検索やパスのデリミタに”/“を使えるようになって快適になる。 プロジェクト構成やソースの修正 スタティックリンクの順番の調整と、一部templateの仕様が違ってコンパイルが通らないところ、 boostのpragmaで自動リンクになっていたところを明示的に記述するなどを 地道に修正した。あとboostのMinGWビルドの生成。 gccの方がVCより制約が厳しい感触だった。typenameが必要な箇所とか、staticメンバ関数のラムダ内での呼び出しで thisキャプチャが無いエラーが出るなど。 逆に、何故VCでコンパイルが通っていたのか判らないところもあったがとりあえず作業完了。 ついでに、msgpack-rpc-asioの修正部分を更新。 あとでlibOVRのgcc作業をやる。 参考 http://anengineer.tumblr.com/post/13196592706/nyaos-bash-lua *nya “’ option histfilesize 3000 option savehistfile %USERPROFILE%/.history bindkey CTRL*P vzlike-previous-history bindkey CTRL_N vzlike-next-history “’