No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 958 | 959 | 960 |...| 978 | 979 | 980 || Next»

シマリスの子供が出回る季節だなぁ

この週末に実家に帰っている.そんで今日は家族で買い物に出た.うちの家族は買い物ついでによくペットショップによるのだが,今日もやっぱりペットショップによった.で,昨日入荷したらしいシマリスの子が居たわけで,数十分悩んだ挙句に購入決定.店員が手で掴んだときは鳴いていたのだが,家に帰ってみると人の手の上でしか寝付かない.どうやらちゃんと手乗りになってくれるらしい.とにもかくにも,また長生きしてくれることを願いつつ,新しい家族の一員が増えましたとさ.

ただいまの最小n回HelloWorldプログラム

とりあえず,bash などのシェルスクリプトで外部の yes と head を呼ぶバージョン:

yes $0|head -$1

ただし,"Hello World"というファイル名で保存して,

bash Hello\ World 10

などで実行.とりあえず 15バイトで今のところ最小.

次に,perl で

print"$0\n"x$ARGV[0]

を同様に "Hello World" というファイル名で保存.

perl Hello\ World 10

などで実行.とりあえず 20 バイトで外部コマンド使用せず.

実行時のファイル名を使用しない場合には,それぞれ $0 を Hello World で置き換えるべし.その場合,24バイトと29バイトになる.

さて,これ以上縮まるかどうか... とりあえず言語の候補としては perl 以外に無い気がするのでむりかも.文字列と数値を自動で変換してくれて繰り返しが簡単でコマンドライン引数が簡単に扱えて... そんな言語が他にあったかなぁ?

DHCP on Cygwin

coLinux に対して DHCP でIPを割り振りたい.ホストPCがネットワークにつながっていなくても.

ということで,簡単な解決法はネットワークの共有を使ってひとつのインターフェースを 192.168.0.1 に固定し,その上で Windows の DHCP が立ち上がるようにすればいい.この場合,接続が切れていようが問題ない.しかし,この方法は少々使いにくいので,自前でDHCPを動かしてみることにした.

で,Cygwin にDHCPがあるだろうと思ってたら無かったわけで,自分でコンパイルしてやらないとならない.とりあえず,cygwin でコンパイルするためのパッチをここらへん(dhcp-3.0.1rc11-cygwin.patch)から落としてきて,本体を ISC (dhcp-3.0.2.tar.gz)から落としてくる(バージョンが違うが気にしない).落としたら解凍してパッチ当ててコンパイルしてインストール.(パッチのときに行が合わないと文句が出るが無視)

tar xfvz dhcp-3.0.2.tar.gz
cd dhcp-3.0.2
/bin/patch -p1 < ../dhcp-3.0.1rc11-cygwin.patch
./configure
make
make install

で,設定ファイル(/etc/dhcpd.conf)を適当に書いてやる.下のは 192.168.1.250 のインターフェースに対して DHCP を立ち上げている.

local-address 192.168.1.250; # This limits dhcpd to listening to this interface
max-lease-time 180;
default-lease-time 180;
ddns-update-style none;
option routers 192.168.1.250;
subnet 192.168.1.0 netmask 255.255.255.0 {
   authoritative;
   range 192.168.1.100 192.168.1.200;
   log(debug, "debug 192 DHCPD-logging");
   log(debug, binary-to-ascii(10,8, ".", packet(24,4)));
}

実行は

dhcpd -d eth1

とかやれば動くのだが...  少々問題が.とりあえず,DHCPを動かすインターフェースにケーブルが接続されていないと起動できない.そのため,coLinux の立ち上げ直後にしか dhcpを立ち上げるタイミングが無い.

さーてどうしようかなあ?

最短のn回 "Hello World "

ちょっとした疑問.

コマンドライン引数から回数 n を読み込み,"Hello World"を n 回(n行)出力する

というプログラムを作るとして,ソースコードのバイト数換算で最短となるプログラムはどれくらい短いのだろうか? 条件として以下を考える.

  • インタプリタ形式であれば
    interpreter sourcecode n
    
    のようにインタプリタプログラムを指定してよい.(#! の行はバイト数にカウントしない)
  • 外部のファイルに対して入出力してはいけない.(stdout のみ出力可能)
  • Hello World 以外の文字を出力してはいけない.('"'とかを出してはいけない)
  • 自前でプログラミング言語を作った場合はその処理系も倍とすうとしてカウントする.
  • コマンドライン引数が正当でない場合の処理は考えなくてよい.

さてどれくらい短くできるかな? Unix の標準的なコマンド sed, grep, awk, head, tail, yes とかは使ってもいい場合にはどうだろう?

雨は嫌だ...

自転車には泥除けが付いていない.木から落ちてきた雄花だか雌花だかが道路一面に広がっている.そして今日は雨が降った.

そんな中を全力で自転車こいだ.

結果としてかなり悲惨な状況になった.これだから雨は嫌~.まあ,泥除けをつければいいんだけど.

JApplet の add と setLayout

Swing のいくつかのコンポーネントは getContentPane() というメソッドを使って ContentPane を取得し,そのContentPane に子要素を追加(add)したりレイアウト指定(setLayout)しなければならない.

で,Java 1.4 では JApplet もこの制約のかかるクラスであるため,間違って直接 add を使うコードを書くとコンパイルは通るが実行時にエラーを吐いて止まってしまう.一方,Java 5 では親切なことに add などが getContentPane().add などにリダイレクトされるようにオーバーライドされている.よって,直接 add を使うコードを Java 1.4 でコンパイルしたバイトコードも,実行環境が Java 5 であれば実行時にエラーを吐くことなく動く.

と,こんな仕様のため,今日はマシンによって動かないプログラムを見事に作ってしまったのであった.

«Prev || 1 | 2 | 3 |...| 958 | 959 | 960 |...| 978 | 979 | 980 || Next»
Search
Feeds

Page Top