こうもりがっぱ

日々のダストボックス

Windowsからの共有をsmbfsでマウントできなかった話

この記事は Windowsレジストリ操作を含んでいます。 ここにある内容の操作をして Windows がおかしくなっても責任は負えません。 操作をする場合は自己責任でお願いします。


FreeBSD10.1 から mount_smbfsWindows の共有フォルダをマウントしようとしたら、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_PATHHAXE_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 は単純なパターンマッチでは剥がすことはできません。