w-zero3 でモデム接続する際の設定方法

忘れないうちにメモしておく。
とりあえず lsusb して認識されてるかチェック。

Bus 001 Device 003: ID 04dd:9242 Sharp Corp. 

とか見えてればよろしい。
modprobe で ipaq に追加。dmesg して ttyUSB0 とかが見れれば ok。

usb 1-1: PocketPC PDA converter now attached to ttyUSB0

pppconfig はまあ適当に。
pon して接続。


あとは同期とかだなあ…

にこにこ

ニコニコのマイリストがいっぱいになるたびに、拡張マイリスト作るか作るかと何度も思いつつ、結局マイリスト整理してやり過ごしてきたのですが、とうとう面倒になったので…

http://castor.s26.xrea.com/products/greasemonkey/nicovideo_additional_mylist.html

拡張マイリストを使い始めました。ありがたやー。
ただ、悲しいことにこれまでのマイリストからの移行が大変面倒くさい。ので、マイリストのページに「リストの動画全てを拡張マイリストに登録するボタン」を適当に追加とかしてみました。
確認とかとることなく問答無用で全部追加するので誤爆に注意だ!

http://niha.sakura.ne.jp/nicovideo_additional_mylist.user.js

煮るなり焼くなり好きにしていいようなのでしました。
テストとかあんまりしてないとか、一部理解できてないところがあるとか、まあ何か問題あっても知りませんみたいな感じで…
ていうか並び替えとかそういう需要ありそうなものを実装しろよという感じですね…

中途半端なプログラマ

こんにちはニートです。


先月くらいに見た覚えがあったんですが何か shinh さんが言及されてたので釣られてみとくか。

「変数のスコープは狭いほど良い」と妄信する

とりあえず狭いほど安全なのは確か。良いかどうかは未だにボクには分からない。
あんまり大きいコード書いたことないからたかが変数のスコープに困らされた経験は幸運なことにまだない。

「同じロジックのコードを2度以上書くな」と妄信する

ふむふむ…

第一に、将来的なプログラムパターンの変更の可能性がある

第二に、抽象化レベルの話がある。

NVIっていう素晴らしいメソッドがあるよ!(NVIが適用できないときはどうするのかな?)

第三に、共通化の投資効果の話がある。

よく知らんけど説得力はない。本当に時間なかったらコピペするか共通化するかとか些細な問題すぎるとしか思えない。セコく浅ましい時間短縮術を使う前に適用すべきことがあると思う。まあ知らないけどね!

第四に、将来の保守性や拡張性、というのは、たびたび幻想でしかない。

主張が一定正しく通る場面は現実には多いと思うけれど、しかしそれが最初の主張につながったりは絶対しない。と思う。

ちなみに抽象化っぽいのは良いプログラマが持つと保守性と拡張性が両方そなわり最強に見える。悪いプログラマが持つと逆に頭がおかしくなって死ぬ。

と昔の偉い人も言ったそうですよ。嘘ですが。
何が言いたいかというと保守性とか拡張性は正しくコードを抽象化すれば勝手についてくるもので、そもそもそれのために…というのはおかしい話なんじゃないかなあという。あんまり大きい略

第五に、抽象化し、共通ルーチン化しすぎたプログラムは、可読性が低くなり、スキルの低いプログラマに引き継ぎをしなければならなくなったときに、途方に暮れてしまうことがある。

shinh「一方俺はバイトで eval を使いまくったコードを書いて自分以外に触れないようにした」
ていうかこれは明らかにおかしい。というかこの一文でこの記事が釣りであるということが分かる。抽象化の結果共通化されすぎるなんてことは正しく抽象化が行われていれば起きない。
多分本当に主張すべきなのは「ルーチンの共通化を不必要にしすぎたコードは正しい抽象化が行われず可読性が低くなり〜」だと思う。何かコードの共通化と抽象化をごちゃ混ぜにして抽象化が悪みたいな書き方に所々なってるのは全くよくない。
まあボクはまたこうして釣られてしまった。悲しいことだなあ。

Cyan

標準で map reduce とかは欲しいなあ。
あと文字とか。文字列のオブジェクトはあるけど文字のオブジェクトはないっていうのが悲しい。
というか遅さ改善されないとゴルフ場では timeout 祭できついという説も。
追記:ドキュメントになってないだけで init で色々用意されてた!

character subsets in anagol

生きてます。
あんまり人気はない問題でしたがおもしろいコードだったので少しだけ紹介。正規表現の気持ち悪さが際立ってる感じがとてもいい。
まずは ksk さんのコード。43B。

$><<[p].product(*gets.scan(/()(.)/)|[[$/]])

配列の組み合わせを列挙する関数 product を使っているのですが、引数が面白い。
uniq の代わりと要素の追加に 「|」 を使うのは基本として「scan(/()(.)/)」が気持ち悪くていい。この発想はなかった。

irb(main):011:0> p [p].product(*"123\n".scan(/()(.)/)|[[*$/]])
[[nil, "", "", "", "\n"],
 [nil, "", "", "3", "\n"],
 [nil, "", "2", "", "\n"],
 [nil, "", "2", "3", "\n"],
 [nil, "1", "", "", "\n"],
 [nil, "1", "", "3", "\n"],
 [nil, "1", "2", "", "\n"],
 [nil, "1", "2", "3", "\n"]]

すごく綺麗。というか product とか知らなかった。これ使ったらめちゃくちゃ簡単じゃないか…
で、次は自分のコード。42B。

s=$/;gets;s+=[p,*s]*$1while/(.)#$1+/;$><<s

ぱっと見では何やってるかあんまり分からないと思います。
while の条件になっている正規表現は「一回目は文字列全体にヒットし、二回目から $1 の前の文字にヒットする」ようになってます。
一回目は $1 は nil なので正規表現は /(.)+/ と解釈されます。これ不思議なんですが $1 には最後の文字が入るんですよね。
二回目以降は前回ヒットした文字の一つ前の文字にヒットします。素晴らしー。
文字列を作る部分は、まあ勘で読んでください。おしまい。