2013-05-18
Goはじめました
以前から興味はあったけど手を出していなかったGo言語ですが、Go 1.1のリリースで、64bit整数も使えるようになったことだし、そろそろやってみる事にします。当面の目標は今までC++で書いていたネットワークサーバ・プログラムをGoで書くことです。
環境構築
普段使っているOSXにGo言語の環境を作ります。
Go言語のインストール
Homebrewであれば以下のコマンドで一発です。
$ brew install go $ cat hello.go package main import "fmt" func main() { fmt.Printf("hello, world\n") } $ go run hello.go hello, world
環境変数
Go関連の環境変数を設定します。
brew upgrade したらGOROOTの設定も変わるようにしています。
program_exists () { type "$1" &> /dev/null ; } if program_exists go; then function setupGOROOT() { local GOPATH=`which go` local GODIR=`dirname $GOPATH` local GOPATH_BREW_RELATIVE=`readlink $GOPATH` local GOPATH_BREW=`dirname $GOPATH_BREW_RELATIVE` export GOROOT=`cd $GODIR; cd $GOPATH_BREW/..; pwd` } setupGOROOT fi export GOPATH=$HOME/.go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Vimの設定
基本的にVim使いなのでVimにGo関連の設定を追加します。*1
まず、Goに付属のVim設定をftpluginとして追加します。
$ ln -s $GOROOT/misc/vim $HOME/.vim/ftbundle/go/vim-go
$GOROOTが変更された場合にvimのプラグインも追従するように以下をbashの設定に加えます。
function setup_go_vim() { local GO_VIM_PATH=$HOME/.vim/ftbundle/go/vim-go if [ -e $GO_VIM_PATH ]; then local CURRENT=`readlink $GO_VIM_PATH` local NEW=$GOROOT/misc/vim if [ "${CURRENT}" != "${NEW}" ]; then rm $GO_VIM_PATH ln -s $NEW $GO_VIM_PATH fi fi } setup_go_vim
さらに、補完を便利にするためにgocodeを追加します。
go get -u github.com/nsf/gocode ln -s $GOPATH/src/github.com/nsf/gocode/vim $HOME/.vim/ftbundle/go/gocode
さらに、neocomplcacheと連携して自動で補完を起動する設定を行います。
if !exists('g:neocomplcache_omni_patterns') let g:neocomplcache_omni_patterns = {} endif let g:neocomplcache_omni_patterns.go = '\h\w*\.\?'
参考サイト
*1:unbundleの場合の設定です
2013-05-14
Hachioji.pm #28 に行ってきた
5/11に開催されたHachioji.pm #28に行って来ました。
LT
@moznion君が既にまとめてくれているので、そちらを見るといいと思います。
Hachioji.pm #28 に行ってきました - その手の平は尻もつかめるさ
自分のLT
Algorithm::HyperLogLogを--pureperl-onlyオプション対応させた話と、Data::FuzzyHashの話をしました。
Data::FuzzyHash は PHP でも使われている ssdeep を使用しています。
質問でもありましたが、fuzzy hash で判定できるのはあくまでもバイト列の類似性なので、画像の類似検索の場合は画像フォーマットを統一する必要があります。また、類似画像検索の場合は画像に特化した別のアプローチもあるので、そちらを検討したほうが良いと思います。
2013-04-21
Node.js v0.11.0 以降におけるC++ Addon への影響
Node.js v0.11.0 で C++ Addon をコンパイルすると以下の様な warning が出るようになりました。
warning: 'New' is deprecated [-Wdeprecated-declarations]
これは、Node.js v0.11.0 の V8 において V8::Persistent<T> のメソッドで第1引数にv8::Isolateのインスタンスを取らない関数に V8_DEPRECATED 指定がされるようになったためです。
v8::Isolateのインスタンスは v8::Isolate::GetCurrent() で取得できるので、それを渡すようにすれば問題ありません。
See also:
2013-04-13
CPANモジュールでサポートしていないOSのTest ReportをNA(Not Available)にする
CPANモジュールでサポートしていないOSのTest ReportをNA(Not Available)にしたい場合はMakefile.PLやBuild.PLで以下のようにする必要があります。
unless ($^O eq "MSWin32" || $^O eq "cygwin") { die "OS unsupported\n"; }
CPAN Testersのツールは以下のメッセージを検出した場合に、NAとして扱います。
また、Devel::AssertOSを使用することで同様のことが可能です。
See also:

