No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 1272 | 1273 | 1274 |...| 1292 | 1293 | 1294 || 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 であれば実行時にエラーを吐くことなく動く.

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

自転車が危険かも

4年間乗ってた自転車があちこちボロっちくなってきた.というか,ぼろぼろとあちこちのネジやら止め具などが落ちてしまっている.

似たようなパーツで修理してはいるけどそろそろ危ないかも.折りたたみ自転車だからうまく衝撃を与えると二つ折りになる可能性も出てきたし... 一番重いギアのときに力を掛けすぎるとチェーンが飛びまくるし... やっぱちゃんと直すか.時間ができたら.

«Prev || 1 | 2 | 3 |...| 1272 | 1273 | 1274 |...| 1292 | 1293 | 1294 || Next»
Search
Feeds

Page Top