2009年11月18日

Mac OS X での Universal Binary で ライブラリ非対応 architecture のバイナリを生成しない方法

例えば Python の easy_install や MacPorts、Fink等の自動インストール系ツールを利用した場合以下のようなエラーが発生することがあります。

ld: warning: in //usr/lib/bundle1.o, missing required architecture ppc64 in file
ld: warning: in //usr/lib/libgcc_s.10.5.dylib, missing required architecture ppc64 in file
ld: warning: in //usr/lib/libSystemStubs.a, missing required architecture ppc64 in file
ld: warning: in //usr/lib/libSystem.dylib, missing required architecture ppc64 in file
ld: symbol dyld_stub_binding_helper not defined (usually in crt1.o/dylib1.o/bundle1.o) for architecture ppc64

これはリンクしようとしているライブラリが ppc64 に対応していないにもかかわらず、ppc64対応バイナリを生成しようとするために発生しています。

この場合は 環境変数に ARCHFLAGS を設定することで回避します。

export ARCHFLAGS='-arch i386 -arch x86_64 -arch ppc'

リンクするライブラリによっては当然 ppc 非対応だったりするため ARCHFLAGS の内容を変更してください。

2009年11月11日

Mac OS X 10.6 で Goをコンパイルして動作させてみた

Google が 11/10 に新言語 Go を発表したので取り敢えず動作させてみました。

難しいことはなにもない。とりあえず 32bit でコンパイルしたけど、64bitでもコンパイル可能です。テストが一部通過しない物があるみたいですが、後で調べます。

以下の手順でコンパイルと動作確認しました。ソースの取得には Mercurial が必要です。

export GOROOT=/path/to/go
export GOOS=darwin
export GOARCH=386
hg clone -r release https://go.googlecode.com/hg/ $GOROOT
cd $GOROOT/src
./all.bash
cat >hello.go <<EOF
package main
import "fmt"
func main() {
   fmt.Printf("hello, world\n")
}
EOF
8g hello.go
8l hello.8
./8.out

この他にも基本的な物を動作させてみたけど、文法は簡単ですしライブラリもそれなりにあります。

言語的には Limbo とかの影響下にあるように見えるけど、まだちゃんとさわってないので不明です。

2009年10月12日

RFC の雑学

@nezike が 「メールなどで使う署名なんですけれどまぁよく----------------とか**********が使われますよね。ところで最近--だけとか使っている人がいるんですけれど流行ってるの?」 とつぶやいたので 「署名に -- を利用するのはRFCに記述があります」 と返しました。

@totte が 「RFC‥」 とつぶやき ふぁぼ てくれたりしています。

このやりとりで案外こういうのは知られていなかったりするのだな、と思ったのでメモとして RFC に記述のあるこんな感じの利用者側に影響のありそうな雑学で結構有名な物を書いてみます。

前提として RFC の記述はあくまでお願いの範囲であり、強制ではないことを一言付けくわえておきます。

署名の区切り

メール等の署名に関しては RFC 3676 (RFC 2646 の更新版) 、「4.3.Usenet Signature Convention」に記述があります。

タイトルから分かるようにメールの署名ではなくネットニュースでの署名の区切りに関する記述ですが、メールでも利用されています。

There is a long-standing convention in Usenet news which also commonly appears in Internet mail of using "-- " as the separator line between the body and the signature of a message. When generating a Format=Flowed message containing a Usenet-style separator before the signature, the separator line is sent as-is. This is a special case; an (optionally quoted or quoted and stuffed) line consisting of DASH DASH SP is neither fixed nor flowed.

署名の区切は「ダッシュ2つ+スペース(DASH DASH SP)」にしてほしい旨が記述されています。

ThunderbirdやGmailはこの規定を利用していて、署名に自動的に付与してくれたり、著名を引用しなくしたり等様々な処理をしてくれます。

この文書では他にも「4.2.Generating Format=Flowed」に一行の長さの目安、「4.5.Quoting」に引用記号(「>」)の利用方法等メールで一般的にルールとして適用されている項目が記述されています。

例示に利用を推奨するドメイン名

RFC 2606 に予約されているドメインとして記述があります。

TLD は以下が予約されています。

.test
.example
.invalid
.localhost

.com などの実際のTLDで利用したい場合は以下が予約されています。

example.com
example.net
example.org

予約されているというのは存在しないことを意味しません。よってping等は帰ってきます。

どうしても .jp を利用したい場合はRFCではなく 汎用 JP ドメイン名における予約ドメイン名 に記述があります。

"EXAMPLE","ドメイン名例"
"EXAMPLE"の後に1桁の数字("0"から"9")がつく文字列

メールの送信テスト等で実在するアドレスに送信してしまう事故を防ぐことが可能ですし、blogの記事等で偶然記述したメールアドレスが実在のものであるなんてこともなくなります。

例示に利用を推奨するIPアドレス

IPv4 に関しては RFC 3330 に記述があります。

192.0.2.0/24 - This block is assigned as "TEST-NET" for use in documentation and example code. It is often used in conjunction with domain names example.com or example.net in vendor and protocol documentation. Addresses within this block should not appear on the public Internet.

「192.0.2.0/24」の範囲を利用すれば良いわけです。

IPv6 に関しては RFC 3849 に記述があります。

IANA is to record the allocation of the IPv6 global unicast address prefix 2001:DB8::/32 as a documentation-only prefix in the IPv6 address registry. No end party is to be assigned this address.

「2001:DB8::/32」の範囲を利用すれば良いわけです。

このIPを利用すれば「そのアドレスを利用しているのは私だ事件」のようなトラブルにまきこまれることはありません。

RFC に限らずこの手の記述がある文書が結構あったりします。知っておくと結構役に立つんぢゃないでしょうか。

2009年9月26日

identi.ca の Twitter 互換 API

identi.ca には Twitter 互換 API が実装されているのですが、日本語ではあんまり情報が無いみたいなのでメモしておきます。

identi.ca の API 仕様は http://status.net/wiki/TwitterCompatibleAPI?source=laconica に記述があります。XML と JSON で提供されています。

JSONの主要な物だけここでは書いておきますが、XMLも同じです。

Twitter 互換 API(json)
API Methods API endpoint
statuses/show https://identi.ca/api/statuses/show/###ID###.json
statuses/update https://identi.ca/api/statuses/update.json
statuses/user_timeline https://identi.ca/api/statuses/user_timeline.json

他の物も基本 Twitter と同じになっています。Twitter の API 文書は http://apiwiki.twitter.com/Twitter-API-Documentation にあります。

またAPIではありませんが、Webで見れる情報を取得できるのが以下のURLになります。

identi.ca 主要URL
Methods URL
home https://identi.ca/###USERNAME###
statuses/friends https://identi.ca/notice/###STATUS###
search/hashtag https://identi.ca/###HASHTAG###

identi.ca は PHP で作成されたオープンソースなプロダクトで作成されています。

最新版は http://status.net/wiki/Source からダウンロードできます。会社内とか自宅とかで Twitter のような物を構築したい場合利用してみると良いのではないでしょうか。

2009年9月23日

Cyberduck 3.3b3 が起動するけどウィンドウが出ない件

2009/09/21にリリースされた Cyberduck 3.3b3 ですが Snow Leopard 利用者がアップデートすると起動はするけれどもウィンドウが表示されません。

Cyberduck の beta 版は http://update.cyberduck.ch/beta/ 以下に置いてありますので、ウィンドウが表示されない人は、 3.3b2 等の旧バージョンを取得して上書きすると良いでしょう。

原因ですがバグで現在 nightly build で修正されていますので次のリリースでは問題ないでしょう。

2009/10/12追記:2009/10/09にリリースされた Cyberduck 3.3b4 にてこの問題は解消されています。
一部の人が 3.3b4 を起動すると接続先に接続しに行く問題(?)が発生しているようですが、設定を確認してください。
環境設定の「一般」に「接続先を記憶し、再起動後に接続」という設定が存在しますので、チェックを外してください。

2009年9月22日

tubuyakix.user.js に identi.ca 投稿機能をつけてみた

  • 公開場所: 紹介マニア
  • ライセンス:GPL2 もしくはそれ以降
  • 動作確認環境:Firefox3 + Greasemonkey 0.8.20080609.0 以上

Twitter、Wassrへの投稿に対応したグリモンのtubuyakix.user.jsに identi.ca への投稿機能をつけてみました。

identi.ca は1年前とかに一時的に話題になったけど、日本語への対応が微妙だったこともあってすぐに日本人の利用者が利用しなくなってしまったサービス。
現在は日本語に比較的まっとうに対応しています。

twitter 互換 API が存在するので nowa が閉鎖されたかわりに投稿機能に対応してみました。

おためしください。

2009年9月12日

Snow Leopard で mod_wsgi を設定する

Snow Leopard で mod_wsgiをコンパイルして動作させてみます。

curl -O http://modwsgi.googlecode.com/files/mod_wsgi-3.0c4.tar.gz
tar xvfz mod_wsgi-3.0c4.tar.gz
cd mod_wsgi-3.0c4
./configure

もし Python2.6.2 を独自インストールしている場合は Makefile の修正が必要です。以下の修正を実施しないと、デフォルトでインストールされている 2.6.1 の方を参照しようとします。

--- Makefile.org        2009-09-12 20:35:02.000000000 +0900
+++ Makefile    2009-09-12 20:35:44.000000000 +0900
@@ -20,8 +20,8 @@

 CPPFLAGS =  -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -DNDEBUG
 CFLAGS =  -Wc,'-arch x86_64' -Wc,'-arch i386' -Wc,'-arch ppc7400'

-LDFLAGS =   -L/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/config  -arch x86_64 -arch i386 -arch ppc7400
-LDLIBS =  -lpython2.6 -ldl
+LDFLAGS =   -L/Library//Frameworks  -arch x86_64 -arch i386 -arch ppc7400
+LDLIBS =  -framework Python -ldl

 all : mod_wsgi.la

コンパイルしてインストールします。

make
sudo make install

Apache の設定ファイルにモジュール設定を記述します。特にこだわりがないなら「/etc/apache2/httpd.conf」に追加してください。

LoadModule wsgi_module libexec/apache2/mod_wsgi.so

Trac を wsgi で動作させてみます。

「/Users/ユーザ名/Sites/trac/index.wsgi」として以下のようなファイルを作成します。

import sys
sys.stdout = sys.stderr

import os
os.environ['TRAC_ENV_PARENT_DIR'] = "/path/to/trac"
os.environ['PYTHON_EGG_CACHE'] = '/path/to/trac/eggs'

os.environ["HGENCODING"] = "UTF-8"

import trac.web.main

application = trac.web.main.dispatch_request

「/private/etc/apache2/other」以下に「wsgi.conf」のファイル名で以下のようなファイルを作成します。

WSGIScriptAlias /trac /Users/ユーザ名/Sites/trac/index.wsgi


<Directory /Users/ユーザ名/Sites/trac>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>

設定ファイルの文法が正しいことをチェックします。

apachectl configtest

Apache を再起動します。

sudo apachectl restart

「http://localhost/trac」にアクセスして動作が確認できれば成功です。