iconv binding for golang を書いてみた
golang の DB モノは、なにやら、database api とやらで共通化しようという動きがあるようだ。それに合わせて、書き直したいと思いつつも、日本語エンコード対策に手をだしてしまった。21世紀になっても、政権交代しても、UTF-8 ですべて片づくというわけにはいかないものだ。
ということで、まずは、iconvでやってみた。本当は nkf にしたかったが、複雑だったので、あきらめた。
しかし、iconv でも、些細なことにはまってしまった。
iconv(libiconv) を使うときの一般的な注意点:
- iconv_open()は toencode, fromencode の順である。
- ポインタでわたすのはバッファと、バイト長。
- ポインタで戻ってくるのはバッファと、エンコード成立回数
- malloc() とか事前にしておくこと。
go-iconv では、このへんはゴニョゴニョしてある。しかし、もっとちゃんと書き直すつもり。
PostgreSQL bindings for golang アップデート
GetLength() とか追加。API デザインは CPAN Pg を真似ている。
続々でてくるライブラリをみて、yyyc514/go-datamapperとか、tokuhirom/go_datamapperが気になるところ。
アクセス方法を抽象化して、DBMS 依存を分離するのを協調してやりたい。
あと、rdoc(ruby) や perldoc みたいなのがほしい。
go-pg に FetchRow() 追加
PostgreSQL binding for golang をアップデート。
CHANGES
- FetchRow() を実装(implemented FetchRow())
- GetIsNull() が Bool を返すように(GetIsNULL() return bool type)
- PgExec が PgResults を返すように(PgExec() return PgResult type)
KNOWN-THING
これで、最低限の機能として、connect, exec, close ができるので、SELECT なんかも普通に使えるはずなので、何かに役に立てばうれしい。次は、test と、その他のお便利関数を実装したい。
golang の for についてだが、while や untile がないのはシンプルでいいんだけど、脱出をきれいに書くにはどうすればいいのか、理解できていない。よくわからんエラーメッセージもでるし。
GO 言語で PostgreSQL につなぐ
早速、実用に使いたいので、GO 言語(golang)で PostgreSQL につないでみたくなった。
課題:
1.GO 言語から、PostgreSQL につなぐ。
PostgreSQL bindings for golang
2.そのためには、GO 言語から、外部の C ライブラリを呼び出す必要がある。
C library(libpq) binding for golang.
いい加減だが、なんとかクリア。
続きを読むCentOS 5.2 で GO 言語
寝つけないので、ちまたで、話題になっている、GO 言語に参加。
ちなみに、家のサーバのハードウエアは、しょぼい。
CPU: AthlonXP 1700+
MEM: 768MB
OS は CentOS 5.2 だ。
今回は、その上で GO をインストールしてうごかしてみる。
$ sudo yum --enablerepo=rpmforge install mercurial $ hg clone -r release https://go.googlecode.com/hg/ $GOROOT $ vi ~/.bash_profile GOHOME=$HOME/go GOARCH=386 GOOS=linux GOBIN=$GOHOME/bin PATH=$PATH;$GOBIN export GOHOME GOARCH GOOS GOBIN PATH (上記を追加) $ source ~/.bash_profile $ cd $GOROOT/src $ ./all.bash
10分ぐらい待って、ビルド完了。
早速。
$ cat hello.go package main import "fmt" func main() { fmt.Printf("Hello, World!\n") } $ 8g hello.go $ 8l hello.8 $ ./8.out Hello, World!
なるほど。
お作法で気になる点
- メソッドの頭は大文字なのか。
- インデントは1なのか?
まあ、ぼちぼちためそう。
XPから、7のディスクを共有することのトラブルシュート その2
XP、7、共有のキーワードで、ここを見に来る人が多いようなので、基本的なトラブルシューティングを書いておく。
やったのはこの環境。
+--------------+ | +--------------------+ | win XP Pro | | | win 7 Home Premium | | 192.168.10.2 | | | 192.168.0.1 | | |---|-->| C:\Share | | user: foo | | | user: bar | +--------------+ | +--------------------+ 192.168.10.0/24 | 192.168.0.0/24
XP 側
OS: Windows XP Pro
IP address: 192.168.0.1
User: foo
7 側
OS: Windows 7 Home Premium
IP address: 192.168.0.2
User: bar
ホームグループとか参加なし。
XP Pro から 7 Home Premium のディスクをマウント。
1. Windows 7 側設定
1-1. C:\Share フォルダ作成
1-2. 右クリックで「共有」-> 「特定のユーザー...」。
1-3. 共有オーナー(bar)を追加しておく。
誰でも(Everyone)にしておけと書いてる解説も多いが、適宜制限するように。
1-4. 「共有」ボタンを押す。
1-5. 「終了」ボタンを押す。
1-6. スタートメニュー->「コントロールパネル」->「ネットワークの状態とタスクの表示」
1-7. アクティブなネットワークの表示 -> 社内ネットワーク
1-8. 左メニューにある「共有詳細設定の変更」を押す。
1-9. ホームまたは社内
・ネットワークの探索を有効にする
・ファイルとプリンタの共有を有効にする
・パスワード保護の共有を有効にする
1-10. 「変更の保存」ボタン押す。
2. Windows XP 側設定
コマンドプロンプト起動の場合
2-1. XP のスタートメニューから、
「ファイル名を指定して実行...」より、"cmd" を実行。
2-2. 共有
net use Z: \\192.168.0.1\Share /USER:bar /PERSISTENT:YES
ここでパスワード入れる。
"/PERSISTENT:YES" で再起動後も共有。
直接共有
2-1. XP のスタートメニューから、
「ファイル名を指定して実行...」より
\\192.168.0.1\
ここでユーザー・パスワード入れる。
3. ファイアウォール
Norton やファイアウォールの設定をしている場合、今回、セグメントが異なるので、Inbound を許可しておく。
Netbios In-Boundを許可
SMB In-Boundを許可
あいかわらず、適当だが、こんな感じ。