Hatena::ブログ(Diary)

WebService::Blog->new( user => ’hide_o_55’ )

2013-05-25

CMakeでSSEが使えるか調べる

CMakeで、その環境でSSE命令が使えるかどうかを調べるモジュールを作りました。ベースはこれですが、マクロ化、SSE4.2対応、-msse4.1やーmsse4.2を使えないgcc 4.3未満の場合の対応を追加してます。

あとは、CMakeLists.txtで以下のようにすればOKです。

INCLUDE(FindSSE)
FindSSE ()
IF(SSE4_2_FOUND)
    SET(SSE_DEFINITIONS -DUSE_SSE4_2 -msse4.2)
ENDIF(SSE4_2_FOUND)

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*\.\?'

f:id:hide_o_55:20130518045125p:image:w360

参考サイト

*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:

Addons Node.js v0.11.0 Manual & Documentation

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として扱います。

  • No support for OS
  • OS unsupported

また、Devel::AssertOSを使用することで同様のことが可能です。

See also:

CPAN Authors FAQ