Windowsからの共有をsmbfsでマウントできなかった話
この記事は Windows のレジストリ操作を含んでいます。 ここにある内容の操作をして Windows がおかしくなっても責任は負えません。 操作をする場合は自己責任でお願いします。
FreeBSD10.1 から mount_smbfs
で Windows の共有フォルダをマウントしようとしたら、4GB 以上のファイルを含んでいる場合に
mount_smbfs: unable to open connection: syserr = Cannot allocate memory
となってしまう。 ちなみに、4GB 未満のファイルしか存在しない場合にはマウント可能だが、4GB 以上のファイルを作ろうとすると固まってしまう。
なんでや!!!! と悩んでいるとこんなサイトを発見
Cannot Allocate Memory!? TimeMachine保存先をWindows共有後、新たな問題発生です - mac野郎なのか
どうやら smbfs のエラーではなく Windows 側で出ているエラーのようだ、 実際 Windows のログにも同様のエラーが出力されていた。
更に検索をかけると、どうやら Windows のレジストリをいじくると治る模様?
Windows 7 Nonpaged Pool Srv Error 2017 | alan.lamielle.net
ここに書かれている通り
HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size
に 3 を設定したらとりあえず問題なくマウントできるようになった。
しかし、この値が何を設定しているのかは謎のままなので気持ち悪い。
LinuxにHaxeを野良インストールする
Haxe公式ページに書いてある情報が古いのでメモ
NekoVMをインストールする
こちらに関しては作業したのが昔 && 野良インストールが面倒だった記憶があるので割愛。 適当にパッケージでも入れる。
Haxeをインストールする
Haxe公式ページのDownloadページにHaxeのバイナリがあるため、これを落として適当なフォルダに展開。
今回は$HOME/haxe/
へと展開したとして説明。
次に環境変数を
export HAXE_STD_PATH="$HOME/haxe/std:."
export HAXEPATH="$HOME/haxe/"
export PATH=$HAXEPATH:$PATH
と設定。
ホームページ上の古い記事だとHAXE_STD_PATH
がHAXE_LIBRARY_PATH
という名前で動かなくてハマった…
恐らくこれでHaxeの基本コマンドはすべて動くはず。
これからhaxelib setup
するとHaxeのライブラリをどこに置くか聞かれるので、パーミッションが大丈夫な場所を指定すれば大丈夫だと思う。
Haxe NMEでAndroid向けに書き出しを行ったところでハマった
Haxe NMEでAndroid向け書き出しを行ったところでハマったのでメモ。
普通にAndroid向けにセットアップまではします。
おもむろに
haxelib run nme test project.nmml android
とすると、typeinfo が無いだの algorithm が無いだの色々言われるんで
http://www.nme.io/community/forums/installing-nme/beginner-questions-android-build-failed/
ここを参考に
${ANDROID_NDK_ROOT}\sources\cxx-stl\gnu-libstdc++\4.4.3\
を
${ANDROID_NDK_ROOT}\sources\cxx-stl\gnu-libstdc++\
にコピーしましょう。
なぜ Haskell の (IO a) は IO でパターンマッチできないのか
なんてことを思ったわけです。
ちょっと考えるとただの勘違いなので恥ずかしいです。
まず IO a はそういう型名なのであって IO a という型コンストラクタではないということです。
IO の型定義は http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-prim-0.2.0.0/src/GHC-Types.html#IO に書いてありますが、ここを見るとわかるように
newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))
となっている訳ですね。
これは State モナドの定義となっていて、誤解を恐れずに言うと
IO 操作というのは、世界を引数にとって IO 操作後の世界と何かの値を返す関数
となっているわけです。
なのでそもそも (IO a) という型は a という値そのものをバインドしているのではなく、
世界に干渉して a を持ってきてくれる関数な訳ですね。
なので IO は単純なパターンマッチでは剥がすことはできません。