どさにっき(アナログ) 〜2010年10月下旬〜

by やまや
<< = >>

2010年10月24日(日)

無題

_ きのうから風邪。つらい。

_ なんで週末に風邪ひくかな。どうせ寝込んで動けないなら平日に休もうよ。

Helloworldless Hello world

_ 布団の中で唸りながらあなごる。だいぶ前に出題された Helloworldless Hello worldという問題。Hello, world! を構成する文字をひとつも使わないで Hello, world! を出力せよ。この問題にさらに縛りをふやして、アルファベットと数字も禁じて、記号のみで Hello, world! を出力してみる。

_ 似たようなことは 前にもやってるので、カンタンにできるよね、と思ったら意外と苦しんだ。「記号だけ」ならば以前と同じだからカンタンなんだけど、Hello, world! に含まれる文字を使わない、という縛りもあるので、つまり半角スペースが使えない。ということは文字コードから文字に変換するための echo -e が使えない。

_ そのほかに文字コードから文字を得る方法。

$ echo . | tr . \\101
A
tr は変換先の文字を8進数で指定できる。が、空白文字が必要。また、記号だけで "tr" という2文字を得ることもできない。
$ echo $'\101\x41'
AA
bash 限定だが、$'' の中に8進、16進(その他各種エスケープされた文字列)を書くと変換してくれる。が、$'' の中では変数は展開されないため、数字をそのまま埋め込む必要があり、記号縛りという制約下では使えない。
$ echo 65P | dc
A
逆ポーランド電卓 dc は数値から文字への変換ができる。しかも、空白文字が必要ない。さらに、"tr" と違って、"dc" は 0-9a-f の文字だけで構成されてるので作りやすい。

_ sh による記号だけの Hello, world! までの流れ。

  1. 変数 $var の長さが ${#var} で得られることを利用して 5 という数字を得る
  2. /???/???/??5??? というワイルドカードで /usr/bin/md5sum をマッチさせる
  3. てきとーな文字列の md5 ハッシュから 0-9a-f からなる文字列を得る
  4. この文字列から acdf の4つのアルファベットを得る
  5. スタックから数値を pop して文字に変換して push する a、スタックの中身を表示する f というふたつの dc のコマンドを使って P というアルファベットを得る(dc<<<80af)
  6. dc に文字コード+Pの羅列を食わせて Hello, world! を出力
af で数値から文字に変換して出力できるのに、なぜそれを使わずにわざわざ P というコマンドを使うかというと、f は出力によけいな改行が含まれて消すのがめんどくさいため。

_ ということで、完成品は こちら。golf 的な圧縮はほとんどしてないので、頑張ればサイズはもっと小さくなるはず。linux + bash 用に書いたけど、たぶん OpenSolaris でも動くはず(試してないが)。bash 以外のシェルや、*BSD な環境では動かない。

_ ……あ、半角スペースが使えないならタブにすればよかったのか。悩んだ時間はなんだったのか。まあ今さらもういいや。

_ ちなみに、記号縛りではなく、数字は使っていい(アルファベットだけダメ)、という縛りならば、bash では

__=....
/???/???/?${#__}<<<$'\110\145\154\154\157\54\40\167\157\162\154\144\41'
でできる。カンタンすぎてつまんないね。bash 以外だとかなりめんどくさくなるけど。


2010年10月25日(月)

無題

_ 風邪がよくならないので、休んでおうちで単純作業。大昔に買った CD をとっかえひっかえリッピングするだけのかんたんなお仕事です。

_ 飽きた。

_ とりあえず40枚ほど取り込んだ。少な目に見積もってもまだ100枚以上は残ってる。他にも、持ってるはずなのに見当たらない CD/DVD がたくさんあるので、封印したままどこにしまいこんだのか忘れてしまったものが段ボール単位でどっかに存在してると思われる。ぜんぶ取り込むかどうかはわからんけど、そんなの持ってたっけ、と自分でも忘れてる CD を思い出すためにも棚おろしはしてやらんとなぁ。重複して購入してるものもいくつか見つけたし。

_ あと、MacBook Air 11'' をポチった。……あれ?


2010年10月28日(木)

えあー。

_ そんなわけで、MacBook Air 11'' が届きました。メモリ 2GB、ディスク 64GB のいちばん安いの。これじゃちと非力かなー、後で増やせないんだから増強済みのものにしたほうがいいかなー、と考えもしたけど、いま使ってる MacBook Pro 13'' を退役させるのではなく補完する使い方をするのであればこのスペックでも問題なかろうと判断した。

_ セットアップ。たいむまーしんにおーねがいー。初回起動時に、画面の指示にしたがって MacBook Pro で Time Machine 用に使ってる外付け HDD を接続。MBP のディスクの中身をすべて Air にもってくるとあふれるが、どこをリストアするか選べるので、溢れないようにてきとーに見繕う。そんなわけで、Air では flash が外された、とかいう話もあるけど、うちの環境ではとくに何をするでもなくはじめから flash が使えた。その他ふだん使ってるアプリが最初からインストールされてる。使うつもりのないものまでインストールされてるけど(VirtualBox とか)。

_ VirtualBox で使ってるディスクイメージやら iTunes の曲やらが巨大すぎて TimeMachine によるリストアではホームディレクトリは諦めざるを得なかったけど、Mac は Windows と違ってレジストリのようなめんどくさいものはなくて、ただファイルをコピーするだけだからラクでいいよね。開封してから1時間でふだん使うには困らないレベルにまでなった。Windows なら1日仕事だよ…。

_ ただね、Time Machine からリストアするにも、もう少し領域を細かく指定できるとよかったんだけどね。ホームディレクトリが巨大すぎてリストアできないのはしかたないけど、特定のいくつかのフォルダを除外すれば戻せたわけで、そういう指定ができないのは残念。まあ、使わんファイルまでリストアされることがなかったからよかったと前向きに考えることにするけど。

_ まだそんなに使いこんでないのでパフォーマンスその他の評価は書かない。すぐわかるハードウェアまわりについて。暗いところでキーボードが発光する機能が削られてた。地味にイタい。夜の車内(もちろん車中泊してるときだ)で明かりがなくても PC を使えたのはこれのおかげなんだけど、これがないと電灯が必要になってしまう。あと、うちのだけかもしれんが本体とディスプレイをつなぐヒンジが弱いような。ネジを増し締めするだけでもよさそうだけど、そんなもん見当たらんよ。それにしても、MacBook Pro 13'' の半分以下の軽さというのはすばらしすぎる。MBP はもはやダンベルにしか思えなくなってきた…。

_ あと、再インストール用の USB メモリは想像してた以上に小さい。サムドライブどころか小指サイズ。これは落としてもぜったいに気付かん。もっとデカくていいのに。

_ あくまで MBP がメインで MBA はサブのつもりだったんだけど、逆にこっちがメインでこいつじゃこなせないことだけ MBP を使う、という方向になりそうな予感…。


<< = >>
やまや