IT @ Floating Log

2010-05-04 (*)

# ギョエテくん

ギョエテくん というサービスを作ってみた。 最初は「ガロア vs ガロワ 夜明けの決闘」みたいな名前にしようかと思ったけど、ゲーテの例の方が人口に膾炙しているかな、と思って名前は最後に変えた。

「ギョエテとは 俺のことかと ゲーテ言い」 と有名な川柳にあるように、外国人のカタカナによる表記には揺れがあります。 ここでは、そういった情報を収集してみたいと思います。

という内容。 正しさは、興味が無くてどれぐらいバラエティに富んだ用例を収集できるかなので、お暇な方はデータを投入して下さい。

使い方としては、最初のページにある検索で、原語(Göthe とか)やカタカナ表記(ギョエテ とか)で検索して、用例がなければ(あっても追加していいけど)フォームに誰がいつ使ったといった情報を追加して送信すれば OK。

posted at 22:28:32    #
 
2010-04-30 (*)

# 並行性と相対性理論

どこから話し始めるのがいいのか分からないが、思いついたのは一つの図を描いているときだった。 二次元のデータを計算するのに、たとえば (i,j) のデータを求める計算は x<i かつ y=j または x=i かつ y<j のデータに依存するとする。 このとき、この (i,j) のデータに依存するのは x≧i かつ y≧j のものである。 要するにデータを第一象限に描くとすると、四角形を縦横2分割(x=i と y=j で)して、左下が (i,j) の依存する領域、右上が (i,j) に依存する領域と分かれることになる。 これは光円錐だな、と思ったわけだ。

(特殊)相対性理論においては、光速度は不変にして最速、何者も光より速く動くことはできない決まりである。 そこで、因果関係が有り得る範囲というものも光の速度より速く広がらないので、その境界線を図にしたものが光円錐と呼ばれる。 (本当は4次元の中に図示すべきものだが、空間を1次元時間を1次元の2次元で描いてしまうのは良くある。) 時間軸の負の側つまり過去の因果関係の有り得る領域と逆側の未来に因果関係の有り得る領域があって、この円錐の外側は因果関係の無い領域である。 この領域の出来事は現在という点から見ると、過去でも未来でもない、と簡単に言ってしまうことにしよう。

ということで、データの依存性の図を光円錐と思って、過去でも未来でもない領域は何だろう、と思うと、現在計算している計算と独立に計算できる領域なのである。 じゃあ並行に実行できるじゃん、と思うと同時に世界は並行に動いているんだなあ、と。 逆に言うと「光円錐」というよりたまたま光が限界線になっている「因果円錐」と呼ぶべきなのではないか、とも。

思いつきも言葉にすると長いなあ。

posted at 19:33:36    #
 
2010-04-24 (*)

# 論理演算子

とある Java の本を図書館で見ていたら論理演算子として & とか | が紹介されていた。 && とか || はショートカット演算子とか何とか。 むしろ & とか | がビットごとの演算子だろう、とさっき「Java 演算子」でぐぐってみたら、たとえば先頭に出てくる Java 入門 | 演算子 というページの記述がまさにこのタイプだった。 案外蔓延しているのか?

posted at 13:13:52    #
 
2010-03-11 (*)

# star -- simplified tar もしくは *ar

その昔 jar は偉大なり と書いた。 今でもそう思うが、tar も jar もコマンド体系が複雑である。 そこで、機能を絞ってしまってはどうか、と。

tar のオプション指定には個人ごとに好みがあるのだが、次の三つに集約し、他は無視する。

cf
c(reate) f(ile) つまり新しくアーカイブファイルを作る
tf
t(able of) f(ile) つまりアーカイブの内容を確認する
xf
(e)x(tract from) f(ile) つまりアーカイブから取り出す

多くの人が xvzf のように使うのは知っている(これも流儀によって xzvf だったり zxvf だったり)が、今や(というかもう何年も前から) GNU tar は z なしで x を使える。 v は、要らないだろうといつも思っているが、まあ付けたい人のために -v というオプションを許そう。 ということで、上の三つだけをサブコマンドと思う。

残りは引数のファイル名を見て判断する。 .tar.gz だったら tar 形式で gzip 圧縮し、.jar や .zip だったら zip 形式を使う。 できれば他の形式にも対応する。

ということで、コンセプト実証用シェルスクリプト:

#!/bin/sh -

subcommand=$1
case $subcommand in
  cf) ;;
  tf) ;;
  xf) ;;
  *) echo "invalid subcommand";
     exit 1 ;;
esac
shift

if [[ $1 == "-v" ]]; then
  subcommand="${subcommand}v";
  shift
fi

if [[ $1 =~ \.tar(\..*)?$ ]]; then
  command=tar;
  if [[ $1 =~ \.gz$ ]]; then
    subcommand="${subcommand}z"
  elif [[ $1 =~ \.bz2$ ]]; then
    subcommand="${subcommand}j"
  fi;
elif [[ $1 =~ \.([jwe]ar|zip)$ ]]; then
  command=jar
else
  echo "ambiguous argument $1";
  exit 1;
fi

exec $command $subcommand $*

本当は Windows にこそこういうものを用意してもらいたいものである。

posted at 10:08:16    #
 
2010-02-17 (*)

# コメントの分離

ソースコードとコメントは別レイヤーに置けないのだろうか。 確かにエディターだけで両方書けるのは素晴らしいが、そもそも別の目的のものをひとまとめにするから、コードの変更に追随できずに無意味になるコメントといった問題が生ずる。 現在の技術をもってすれば、二つのファイルを一体に見せるなどわけもない。 であれば、いつまでもソースコードにコメントを埋め込んでないで分離したらどうだろう。

というようなことを AR という技術から夢想する。 ソースコードがリアリティー。

posted at 09:06:24    #
 
2010-02-06 (*)

# コメントのスコープ

プログラムに書くコメントにはそれぞれ自然な適用範囲がある。 この範囲を実際に書いてみたらどうだろう。 たとえば

# this function do something {
def f(x):
    ....
# }

とか

# later initialized {
foo = None
bar = None
# }

とか。 コードが Python でもこの範囲指定にはインデントを使えないし、c に対しては範囲指定に波括弧({})を使わない方がエディターで対応する括弧を探す時に楽かもしれない。

posted at 12:05:36    #
 
2009-12-21 (*)

# install-elisp

twitter で install-elisp という、emacs lisp のプログラムをインストールする emacs lisp プログラムに触れていた人がいた(作者っぽい)。 それをインストールする ebuild を書いた。

install-elisp が取ってきたプログラムをインストールする場所は自分で決められるのだが、~/.emacs.d/ に入れるようにサンプルが書いてあったのでその通りにした。 そして、そのことに安堵感を覚える自分がいる。 なぜか。

ホームディレクトリの下はパッケージ管理していないものが置いてあっても自己責任である。 たとえ依存関係を解決してくれなくても、そういうもの、と思うだけである。

翻って、常々気持ち悪いと思う Python の easy_install は、基本的に /usr/lib の下にある site-packages にファイルを置こうとする。 これがいけない(ということに、今回思い至った)。 easy_install のような仕組みは個人的なパッケージ導入に留まっていればいいのであって、システムとしてのパッケージ管理と競合するべきではない。 勿論、依存関係はどこに入れようと同じであるから、機能として重なる部分はあるのでそこは API などで提供して上げるのはいいと思う。 しかし、システムとして提供するものをインストールするのは、他人の領分を侵す行為であると思うのだ。

Windows にパッケージ管理が存在しないのは別問題なので、それは別途対処していただきたい。

posted at 20:50:24    #
 
2009-11-25 (*)

# LattE

LattE というソフトウェアをインストールしなければいけなかったのだが、かなりクラクラする代物。 ソフトウェアのできの話ではなく、インストール方法。 最初は ebuild を作ろうかと思ったけど、無理(やってやれないことはないだろうけど手間ばかり掛る)。

linux だと ./install だと一発です、と書いてあるものの、こちとら OS X なので案の定うまくいかない。 インストールのステップを追ってやってみようと中身を見たら、まずはシェルスクリプト代わりのC++プログラムをコンパイルさせる。 実質的に system しか呼んでないプログラムって。

malloc.h が OS X には無いのでコメントアウトする。 本当は適当なマクロで #ifdef して分岐すべきなんだろうけど、まあ自分用だからいいか。

cdd というプログラムはバイナリーで収められているのだが、ELF なので OS X では実行できない。 cdd+ の 0.77dev1 というのが一緒にあるので、まあこれだろうと思ってコンパイルしたら通らない。 仕方ないのでぐぐったら、どうもスイスにいる日本人らしき人が作者。 cdd and cddplus Homepage に 0.77a というのが置いてあって gcc 4.1 でコンパイルできる、と書いてあるのでそれをもらってきてコンパイル。

ということでどうやら動く。 C++ をシェルスクリプト代わりに使う、というのが、何はともあれ本日一番の衝撃。

posted at 00:02:24    #
 
2009-10-01 (*)

# link-local

解っていないままに書く。

Konica Minolta の mc1650-en というプリンターを使っているのだが、印刷しようとするたびにプリンターを認識させるところからやり直さないといけない、といういらつく状況なのである。 基本的に DHCP で繋げばいいと思っているので、IP アドレスの割り振りは DHCP/BOOTP を選択してある。 上手くこれでアドレスが取得できれば 133.1. というプレフィックスになるはずなのだが、頻繁に 169.254. というプレフィックスのアドレスを使いたがる。 169.254/16 は IPv4 link-local (RFC 3927) に使うものなんだそうだ。 要するに DNS サーバーにアドレスを聞かないでも、自分で振ってしまえるアドレス。

ということで DHCP サーバーからアドレスをもらえたりもらえなかったりしている、あるいはリース更新に失敗するために IP アドレスが安定しない。 ここまでが前段。

今度はこのプリンターを Mac から探す方だが、Bonjour という機構でリストを出してくれるのでその中から選択する。 ここまではどちらのアドレスでも良い。 ところが、プリンターを選択した後にドライバーの選択をするところで link-local の方のアドレスでは失敗するらしい。 ここのところはプリンターの名前しか出てないので(IP アドレスの)違いは表面上判らないのであくまで推測。 失敗するというのはまずドライバーが自動選択で出てこないし、この自動選択に失敗したが最後プリンターの機種からドライバーを探して「追加」ボタンを押しても、「失敗しました」というダイアログが出るだけでプリンターの追加は不可能という現象である。 そうなるともう何もできない。 詳細はユーザーには知らされないので、できないということしか判らない。

Mac のプリンター追加方法は Bonjour の他に直接 IP を指定する方法もあって、これで HP Jet何とかを選べば、ドライバーも指定できて印刷自体は普通にできる。 ただ、元来固定でない IP アドレスを直接指定しているので気持ち悪い。

まとめると結局は「このプリンターが DHCP サーバーと上手くやる設定が知りたい」ということになる。

posted at 22:37:04    #
 
2009-09-18 (*)

# Vista Business

とりあえず PC 買っていいよと言われたので ThinkPad X200s を買ってもらった。 それが今日届いて、プリンターの設定とかしてた。

OS は Vista の Business というのが入っていた(デフォルトで特に考えてなかった)。 Gentoo prefix の Windows Guide (pdf)を見たら、SUA が無いから入れられないらしい。 何てこった。 まあ、firefox と emacs と python をそういうものを経由せずにただインストールしておけば当面困りはしないのではあるが。

posted at 01:53:20    #
 
2009-07-14 (*)

# emacs-cvs-23.0.96

放置している間に 23.0.96 までバージョンが上がってきた。 そろそろリリースか? ということで、前回の 23.0.93 の時とほぼ同じように ebuild を修正した。

疑問が1つ。 open -a はどこからアプリケーションを探し出し、どこからアプリケーション名を取得するのか?

man には特に何も書いていないのだが、場所はどこでもよくて、名前はファイル名から、のようだ。 ~/Applications 辺りからシンボリックリンクを張って、複数バージョンを切り替えるようなことを考えていたのだが、シンボリックリンクは見てくれないという実験結果。 シンボリックが駄目ならハードリンク、ということで cp -la した。

あとはフォントが惨めだったので、この辺を参考に

(when (= emacs-major-version 23)
  (set-default-font "Courier-14")
  (modify-all-frames-parameters (list (assq 'font (frame-parameters)))) ;複数フレームに対応
  (set-fontset-font
   (frame-parameter nil 'font)
   'katakana-jisx0201
   '("Hiragino Maru Gothic Pro" . "iso10646-1"))
  (set-fontset-font
   (frame-parameter nil 'font)
   'japanese-jisx0212
   '("Hiragino Maru Gothic Pro" . "iso10646-1"))
  (set-fontset-font
   (frame-parameter nil 'font)
   'japanese-jisx0208
   '("M+1MN+IPAG" . "iso10646-1"))
  (set-fontset-font
   (frame-parameter nil 'font)
   'latin-iso8859-1
   '("courier" . "iso-10646-1"))
)

を .emacs に書いておく。 必要に応じて他の言語のフォントも指定しておくべきなのだろうが、この方法以外に簡単な方法があるのではないかという疑念(半分は期待)ゆえに今はこれぐらい。

posted at 00:40:48    #
 
2009-06-20 (*)

# 本当にあからさまなゴミだけ弾く awk スクリプト

最近大学のメールサーバーがスパムの多さに音を上げて弾くのを諦めたらしい。 ということで .forward でスクリプトを呼び出す。 昔のコードの使いまわしなので、exit 65 に意味があるのかどうかすら忘れた。

#!/usr/bin/awk -f

BEGIN {
    spam = 0;
    i = 1;
    mailcommand = "/usr/sbin/sendmail tensousaki@example.com";
}
spam {next}
/^[Mm]essage-[Ii][Dd]:.*<[^>]+$/ {spam = 1; next}
/yumenosekai\.org/ {spam = 1; next}
/otonanorakuen\.com/ {spam = 1; next}
/mixclub\.org/ {spam = 1; next}
{
    message[i] = $0;
    i = i + 1;
}
END {
    if(spam) {
        exit_as_it_is_a_spam();
    } else {
        for (i = 1; i <= NR; i = i + 1) {
            print message[i] | mailcommand;
        }
        close(mailcommand);
    }
}

function exit_as_it_is_a_spam() {
    exit 65;
}

next の処理がいかにも非効率なんだけど nextfile をこの文脈で使っていいものかを把握していない。 疑問点は、標準入力から読んでいるときに nextfile を使うと END に飛べるのかということ。

posted at 03:18:40    #
 
2009-05-22 (*)

# Wanderlust フォークか?

本気なのかどうか判らないが、wl-en で「フォークしたらいんじゃね」という人が出始めた。 そういう議論にも反論が出てこないし、実現する可能性はあると思う。 もっとも、現在のメンテナーが「じゃあ交代」といえばフォークにはならない可能性も残る(でも連絡しても梨の礫とか)。 注目。

posted at 18:59:28    #
 
2009-05-18 (*)

# そういえば Google Books って便利なの?

ということで、先ほどの Introduction to the Construction of Class Fields を調べてみた。

このページ。 全部は読めない。 意図的に抜けたページを作っているらしい。

出版社(この本では CUP = Cambridge University Press だ)のページへのリンクもある。 試しに飛んでみても Unavailable - out of print だが。

じゃあってんで、Dover 版のページ。 こっちは最初の20ページ程度と裏表紙だけ読める。 そこに書いてある値段は7ドル95セント。 つまり定価800円。 でも品切れ。

結局、定価の20倍で買うか図書館を活用するしかない。 検索…うーん。 いざというときの保険としては心許ないなあ。

posted at 23:47:28    #
 
2009-04-21 (*)

# umask 022

最近の1人1グループ的な環境なら 022 じゃなくて 002 でいいんじゃないかと思った。 発想の元は逆に共有ディレクトリにグループ書き込み不可なファイルを作られたからなんだけど。

posted at 23:58:08    #
5月 2010
       1
2 3 4 5 6 7 8
9101112131415
16171819202122
23242526272829
3031     
4月
2010
 6月
2010

Gentoo Linux, Python, PyDS, NZMATH, SIMATH 以外の情報技術系ノンセクション。

Feed Icon Letterimage

Python
Desktop
Server

© 2010, Matsui Fe2+ Tetsushi