このブログのCSSを少し弄った。

弄る度にtext/plainに近づいてる気がするが、フォームとかリンクは必要なのでやはりhtmlは便利。

そもそも技術系ブログにはUIとかあんまり関係無いと思う。この文章も殆はフィードリーダーで読まれるだろう。PVやUUも全く当てにならない。Analyticsに分かるのはGoogleからパーマリンクに直接入ってくる人の傾向ぐらい。技術ブログにとって本当に大事なお客様はフィードリーダーで購読してくれる人だ。

実際の感触とAnalyticsが乖離してからかなり経つ。フィードリーダーで読んでくれる人の動向を簡単につかむ方法はないだろうか。

右上の検索をGoogleのサイト内検索に変えてみました。

SEO的にはいろんなパターンがあるハズの検索結果ページをGoogleドメインに持ってかれるのは良くないことだと思うんですが、仕事のサイトではないのでそんなん知らん。

変えた一番の理由は、今はドリホ上のRailsで動かしてるこのブログをapp engineに移行したときに日本語全文検索が面倒臭そうだからです。(今は面倒なのでタイトルと本文をLIKE '%foo%'してる。)

カテゴリとかタグとか構造化しない代わりに全文検索で補うというのがコンセプトなので楽して行きたいです。

持ってるMacBookの型番:MB466J/A

MacBook 2.0GHz Core 2 Duo/13.3"/2G/160G/8xSuperDrive DL/Gigabit/802.11n/BT/Mini DisplayPort

VirtualBoxをいちいち立ち上げるのが面倒なので、windowsのservice + coLinuxみたいに自動起動がしたい。

それには今まで避けてきたlaunchdを使わなくてはいけない。

Mac OS X 10.4(Tiger)から標準になったlaunchdは要はinit + inetd + daemontoolと理解。システム起動時にroot権限で動くLaunchDaemonsとログインしたときにユーザー毎に動くLaunchAgentsがあるそうです。(厳密には少し違うけど)

それぞれ指定のディレクトリにplist(プロパティリスト)というXMLの設定ファイルを作って、launchctlでloadするという流れ。

VirtualBoxはCUIでもVBoxManageコマンドでほとんどの操作が出来るのでLaunchAgentsで、

% VBoxManage startvm "仮想マシン名" --type headless

が動くようにしてやれば良いハズ。

~/Library/LaunchAgents/org.komagata.balloon.virtualbox-debian.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.komagata.balloon.virtualbox-debian</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/VBoxManage</string>
<string>startvm</string>
<string>debian</string>
<string>--type</string>
<string>headless</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

基本、ProgramArgumentsにargvを渡すだけみたいです。

% launchctl load ~/Library/LaunchAgents/org.komagata.balloon.virtualbox-debian.plist

これで設定が読み込まれたので再起動してみる。

Sun VirtualBox

すると立ち上がってはいるけど何故か"中断"の状態。

OnDemandをfalseにすると立ち上がるが、監視して終了しても自動的に起動する状態になるので、固定でメモリを確保するVirtualBoxでは気軽に落としたりしたいのでちょっと面倒。メモリが2Gなので増設すれば256MBぐらい気にならなくなるかな?

参照:Undocumented Mac OS X:第1回 initを置き換えるlaunchd【前編】 (1/3) - ITmedia エンタープライズ

VirtualBox, Debian

$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.2-1.1' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-cld --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.3.2 (Debian 4.3.2-1.1)

helloworld.s

.code32
.text
.global main

main:
movl $4, %eax
movl $1, %ebx
movl $msg,%ecx
movl $len,%edx
int $0x80

movl $1, %eax
int $0x80

.data
msg: .asciz "Hello, world!\n"
msgend: len = msgend - msg
$ as -o helloworld.o helloworld.s
$ ld -Ttext 0x0 -e main -o helloworld helloworld.o
$ ./helloworld
Hello, world!

Mac OS X(未完了)

% gcc -v
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5646.1~2/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5646) (dot 1)
% as -a=helloworld.lst -o helloworld.o helloworld.s
FATAL:/usr/bin/../libexec/gcc/darwin/x86_64/as: I don't understand 'a' flag!

-aオプションは無い。

% as -o helloworld.o helloworld.s
helloworld.s:3:Unknown pseudo-op: .global
helloworld.s:3:Rest of line ignored. 1st junk character valued 109 (m).

.globalはだめ.globl。

% ld -Ttext 0x0 -e main -o helloworld helloworld.o
ld: unknown option: -Ttext

-Tオプションは無い。

% ld -e main -o helloworld helloworld.o
% ./helloworld
zsh: illegal hardware instruction ./helloworld

そもそもMac OS Xのldはbinutilsのldじゃないそうです。勉強はlinux上で進めていくことにします・・・。

参照

machidaさんがWordPress勉強会に行ってきたそうで、おみやげを貰いました。

酷いMacBook

ウソみたいだろ・・・これで外でも普通に仕事してるんだぜ・・・。

p0t.jpのドメインを失って暫く。

売ってもらったりできるのかなと思って調べてみると、

% whois p0t.jp | nkf -u
[ JPRS database provides information on network administration. Its use is ]
[ restricted to network administration purposes. For further information, ]
[ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e' ]
[ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. ]

Domain Information: [ドメイン情報]
[Domain Name] P0T.JP

[登録者名] エヌエムケーケー
[Registrant] N.M.K.K

[Name Server] dns1.name-hosting.net
[Name Server] dns2.name-hosting.net

[登録年月日] 2009/07/01
[有効期限] 2010/07/31
[状態] Active
[最終更新] 2009/07/01 01:15:02 (JST)

Contact Information: [公開連絡窓口]
[名前] エヌエムケーケー
[Name] N.M.K.K
[Email] info@namemarket.jp
[Web Page]
[郵便番号] 150-0031
[住所] 東京都渋谷区
桜丘町20-1
[Postal Address] Shibuya-ku
20-1 Sakuragaoka-cho
[電話番号] 03-5456-5167
[FAX番号]

N.M.K.Kでググッたところ取り戻すのは難しそう。YHVHみたいで何か怖いですね。関わらない方がいいのかな・・・。

YHVH
還暦プログラマの挑戦(Haskell に挑む→F#による言語造り)

なにが、私を、そうさせたか。

還暦直前のプログラマです。
(厳密に言いますと、2008年1月1日、戊子(つちのえね)で還暦ということです。
2008年4月某日で60歳になりました)
最近引退したので、元プログラマというべきでしょうか。
還暦をマジかに控え、400時間、500時間労働はこたえました。おかげで、10Kg以上もやせて、メタボリックなんとやらは心配なくなったみたいな。
時間ができたらやりたいと思っていた事が2つありました。

  • 言語を作る。(CMLと名前だけ決まっています)
  • OSを作る。(CMosと、名前だけ決まっています)
こんなおり、どこかで読んだのを、ちょいと思い出してしまったのが、かの「Haskell」です。
なんとかいう天才プログラマが、数ヶ月でHaskellを学び、また数ヶ月でPerlのV6を作っちゃったとか。
刺激的な話題ですよね。
で、めづらしいもの好きのオヤジとしては、つい環境を作っちゃって、お勉強をはじめたわけです。
「還暦の手習い」です。

この方の様な生活にとても憧れます。

とりたてて"天才"でも"スーパーハッカー"でもなくてもプログラムが好きで書き続けていれば還暦を迎えられ、その後に自分の楽しみのプログラムを書いて暮らせる老後生活が送れる。

我々にそういう希望を持たせてくれます。とても素敵なロールモデル。

内容もとても好きです。

地道な勉強やコーディングの合間にある発見や手応え。分からないことにも正面からスーっと入っていく自然体が素敵です。

常日頃、3億円あったらディアスポラのヤチマのように真理鉱山に引き篭って死ぬまで暮らしたいと思っていますが、既に体現されている方がいるとは羨ましい限りです。

ディアスポラ (ハヤカワ文庫 SF)
クリスマスの和菓子屋

和菓子屋「にーちゃん、なに見てくさって屁ぇこいてんねん」

昨日8086と486の本を読んで(とても面白かったので一気に読んでしまいました)x86_64の一般命令とレジスタをちょろっと見たのでjonesforthが何となく読めるようになりました。(コメント内にgasのシンタックスの説明すらちょっと書いてあってとても親切)

(OSやドライバを書くのが目的ではないでシステム系の難しい機能は飛ばしました。)

そこでまずforthが分からないとしょうがないのでgforth(gnuのforth実装)を入れてみることに。

$ sudo port install gforth
(...)
/usr/bin/gcc-4.2 -I./../arch/386 -I. -Wall -O2 -arch x86_64 -fomit-frame-pointer -fforce-addr -no-cpp-precomp -DHAVE_CONFIG_H -DDEFAULTPATH='".:/opt/local
/lib/gforth/site-forth:/opt/local/share/gforth/site-forth:/opt/local/lib/gforth/0.7.0:/opt/local/share/gforth/0.7.0"' -I/opt/local/include -fno-gcse -fno-s
trict-aliasing -fno-crossjumping -fno-reorder-blocks -falign-labels=1 -falign-loops=1 -falign-jumps=1 -fno-defer-pop -fcaller-saves -fno-inline -DGFORTH_DEB
UGGING -DENGINE=2 -o engine2-noll.o -c ./engine.c
/var/tmp//cc6XyjEK.s:1482:Incorrect register `%r13' used with `l' suffix
/var/tmp//cc6XyjEK.s:1525:Incorrect register `%rbx' used with `l' suffix
/var/tmp//cc6XyjEK.s:1587:Incorrect register `%rbx' used with `l' suffix

が、エラー。rbxレジスタが使えないというのは何となく64bit対応部分がおかしいのかなと予想。

building gforth on Mac OS X Snow Leopard (10.6.x) - comp.lang.forth | Google グループ

The error does not occur in 64-bit mode, with an updated version
of Anton's configure line:

./configure x86_64-apple-darwin10.2.0

Targetをちゃんと指定しないと駄目みたいです。

$ ./configure CC="gcc -m32"

でも行けるっぽいですが、せっかくのCPUなので前者で入るようにportfileに下記を追加。

$ sudo port edit gforth
(...)
configure.args x86_64-apple-darwin10.2.0
(...)

今度はちゃんと入りました。

% gforth
Gforth 0.7.0, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
1 2 + . 3 ok
bye

キター!

参照:MacPorts Guide

はじめて読む8086―16ビット・コンピュータをやさしく語る (アスキーブックス)

基礎と16bit CPUを知るために。

はじめて読む486―32ビットコンピュータをやさしく語る

32bit CPUを知るために。

x86アセンブラ入門―PC/ATなどで使われている80x86のアセンブラを習得 (TECHI―Processor)

gasの文法を知るために。