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

by やまや
<< = >>

2010年1月21日(木)

Thunderbird 3.0.1

_ 出たらしい。 修正項目の一覧IMAP の未読件数がおかしくなるバグ(517461)が fix されていることを確認。

_ さっそく入れ替えて use_condstore をデフォルトの値に戻した。

_ おーい。直ってないよ。未読が存在しないはずのフォルダを見にいくと、何千通ものメールが未読に戻っちゃうよ。ダメじゃん。3.0 と同じ方法で回避できるのでまったく使いものにならないわけじゃないけど。

Kindle で自費出版

_ 日本で自費出版といったら、老い先短いじいさんが(自分的には)波瀾万丈な自分史を書いたり(自分的には)傑作ばかりの句集を作って親戚一同に配りまくる(けど誰にも読まれず埃をかぶる)、というイメージが強いけど、でもそれは実際は主流ではないだろう。正確なところは知らんけど、でも十中八九今の自費出版でいちばん多いのは同人誌と見て間違いないと思う。あ、いや、アララギとかホトトギスとかそっちのじゃなくて。

_ で、 Amazon の Kindle DTP。今のところ日本からは利用できないようだけど、あくまで「今のところ」であって、すぐ対応されるだろう、きっと(それとも米国アカウントがあるとすでに使えたりするのかしら)。こういうガジェットに飛びつく層と同人誌を作る層/好む層ってそんなに離れてないと思われる(少なくとも自分史を書く爺さんよりはるかに近い)ので、日本でもサービスがはじまると同人誌向けにけっこう流行りそうな気がする。

_ 一方で、amazon その他の電子書籍屋に対して、旧来からの商業出版社は 業界団体を作って対抗するようだ。電子化の流れにまったく逆らうわけでもないだろうけど、もちろん今まで自分たちが掌握していた市場をあっさり amazon に明け渡すつもりがあるはずもないので、人気作家の新作がいきなり電子化されて読めるなんてことはこの先5年やそこらはないだろう。ほとんどの場合版権は1社独占な契約だろうから、著者が Kindle の高い印税を魅力に感じたとしても、版権を持ってる出版社が首をタテに振らないかぎりは出せないし。kindle が本格的に日本でサービス展開をはじめたとしても、読みたい本がないというわけだ。ビジネスチャンスを求めて積極的に電子書籍を出す小さな出版社も出てくるだろうが、その中からわざわざそのために電子ブックリーダーを買い求める人が続出するほど話題になる本が出てくる可能性は低いと思う。

_ という推測を元に1年先の日本の状況を予言してみる。「Kindle を見たら中身はエロ同人でいっぱいだと思え」


2010年1月22日(金)

1/8

_ ついに 1.0.0.0/8 まで割り当てるハメになったそうな。v4 アドレスの枯渇きわまれり。

_ 割り当てを受けたのは APNIC とのことなので、日本でもこのアドレスをもらうところがあるかもしれない。1.1.1.1 とか 1.2.3.4 とかのアドレスにどれだけのインチキトラフィックが発生するのかひじょーに興味があるので、もしもこのアドレスをもらった幸運な(不運な?)組織があればせひとも情報を公開してほしいものだ。

_ これまでもこういうアドレスに向けられた(でも到達できない)トラフィックはけっこうあったはずで、それを防ぐために 1.0.0.0/8 を bogon フィルタにつっこんでる組織も多いと思われる。もしそうなってたらこれを抜かなきゃいけないんだけど、忘れられて放置される例もそこそこありそうな気がする。google の 8.8.8.8 みたいに 1.1.1.1 や 1.2.3.4 というアドレスで何か商売をやろうとするところも出てくるかもしれないけど、きっとどこかで「なんでうちからアクセスできないのー」とかいう悲鳴が上がるんだろうな。


2010年1月25日(月)

素数計算

_ 100までの素数を求める変態スクリプト。とっても遅い。

#!/bin/sh
[ -n "$a" -a "$a" = "$b" ] && echo ${#a}
expr ${#a} : ... >/dev/null && exit
a=.$a
b=..
{ [ ${#a} -le ${#b} ] || expr $a : "\($b\)*$" >/dev/null && sed /q/q || { b=.$b; sed '/q/!d;/q/q';} } <$0>>$0

_ 変態その1。100まで繰り返すのに for や while のような制御構文、あるいは再帰呼び出しを一切使っていない。っていうか、100という数値も出てこない。変態その2。素数の判定のためには数値が割り切れるかどうかという判定が必要なはずなのに、剰余計算していない。

_ いちおう解説。最下行の expr が 剰余計算のかわり。スクリプトはここで終わっているように見えるがそれは錯覚で、実際は終了せず素直に次の行を実行する。はじめの expr が終了条件。実行終了した後で、もう1回スクリプトを見てみると「次の行」の意味がわかりやすいと思う。

_ 同じ手法を使った変態 FizzBuzz。素数よりはわかりやすいと思う。

#!/bin/sh
x=.$x
n=
>/dev/null expr "$x" : '\(...\)*$' && echo -n Fizz || n=${#x}
>/dev/null expr "$x" : '\(.....\)*$' && echo Buzz || echo $n
>/dev/null expr "$n" : ... && exit || sed /q/q $0 >> $0

_ この小技を実用的に使える場面は、たぶんどこにもない。


2010年1月27日(水)

smtp_bind_address を変えてメールを送る

_ 複数の IP アドレスを持っている postfix サーバが、送信元アドレスによって IP アドレス(smtp_bind_address)を使いわけてメールを送るにはどうすればいいか。 1年半ぶりの完結編。といっても実際に試したわけじゃないけど。

_ FILTER を使う方法

Incompatibility with snapshot 20100117
======================================

The meaning of an empty content filter next-hop destination has
changed.  Postfix now uses the recipient domain, instead of using
$myhostname as in Postfix 2.6 and earlier.  To get the old behavior
use "default_filter_nexthop = $myhostname", or specify a non-empty
next-hop content filter destination.

Major changes with snapshot 20100117
====================================

The FILTER action in access maps or header/body_checks now supports
sender reputation schemes that dynamically choose the SMTP source
IP address.

This is implemented by specifying FILTER actions with empty next-hop
destinations in access maps or header/body_checks, and by configuring
in master.cf one Postfix SMTP client for each SMTP source IP address,
where each client has its own "-o myhostname" and "-o smtp_bind_address"
settings.
以前は失敗した方法だが、現在開発中の 2.7 snapshot では仕様変更したことでうまくいくようになったとのこと。

_ sender_dependent_relayhost_maps を使う方法

Major changes with snapshot 20091209
====================================

sender_dependent_default_transport_maps, a per-sender override for
default_transport. It's original motivation is to use different
output channels (with different source IP addresses) for different
sender addresses, in order to keep their IP-based reputations
separate from each other.

The result value syntax is that of default_transport, not transport_maps.
Thus, sender_dependent_default_transport_maps does not support the
special transport_maps result value syntax for null transport, null
nexthop, or null email address.

This feature makes sender_dependent_relayhost_maps pretty much
redundant (though sender_dependent_relayhost_maps will often be
easier to use because that is the only thing people want to override).
微妙に目的からズレたパラメータだったために使えなかったが、開発中の 2.7 snapshot ではまさにどんぴしゃなパラメータが新設されて目的が実現できるようになったとのこと。

_ 参考: Design: sender-dependent default_transport/ Postfix sender reputation support in snapshot 20100117/ sender policies (filter, sender_dependent_xxx)

_ ちうことで、2.7 では こんなめんどくさいことをしなくてもよくなりそうです。あとは、この snapshot 版の機能が正式版にちゃんと取り込まれることを祈りましょう。いつ出るんだか知らないけど。

_ その他、2.7 snapshot で現時点までに実装されたもののうち目についたもの。

spammer をひっかけるために postscreen で偽の応答を返して、でも smtp_reply_filter で「しかたない腐れサーバだな」とその応答を矯正してしまって postscreen に蹴られる、なんてアホなシナリオを思いついてしまった。


2010年1月28日(木)

Hello, world

_ ただの Hello, world です。

H(){
expr "$1" : '\(.\)'; }
l(){ IFS=""; }
l
o(){ echo -n `H $@`; }
,(){ echo
 }
while
o $line;
read -r \
line; do :
done < $0
! ,
bash、ash (freebsd)、zsh で動作確認。ksh、dash (debian) では不可(どちらも "," という名前のシェル関数を定義できない)。ねこ大好き。


2010年1月29日(金)

Hello, world

_ ただの Hello, world です。

> cat hello.sh
#!/bin/sh
___=${0%.*}
___=${___##*/}
____=${___#?}
______=${___%$____}
________=${____%???}
_______=${____#???}
_____=${____%$_______}
___=`/???/$________?$______$_______ /???/$________?$______$_______`
___=${___#/???/}
__=\\${#__}
______=${_____#??}$__${#_______}${#____}${#___}
_____=$__${#_______}${#______}${#__}
______=$______!
$___ -$________ $__${#_______}${#________}${#_________}$____, $__${#________}${#__}${#______}$_______$_____$______

> sh hello.sh
Hello, World!
文字化けじゃありません。 1個だけある 0 を消すうまい方法をだれか考えてください。


2010年1月31日(日)

FFFTP 騒動

_ うーん、なんだかなー。

_ FTPS や SFTP ではない素の FTP を使うのが間違い、とかいってる人もいるみたいだけど、それ違うでしょ。いや、そりゃ暗号化できればそれに越したことはないけど、今回の FFFTP 騒動は通信内容を傍受されたわけではなくて、ローカルに置いてあった情報が盗まれる、という話。FTP じゃなくてFTPS を使っていたとしても、その FTPS をおこなうアプリケーションがログイン情報を平文ないしは簡単に解読できる形式でローカルに保存していたら同じように盗まれてサイトを改竄される可能性がある。つまり純粋にアプリケーションの実装ないしは利用者の運用の問題であって、プロトコルの問題ではない。

_ 今回はたまたま FFFTP やその他の FTP クライアントがターゲットになったけど、プロトコルの問題ではないので、同じような攻撃はほかでも起きうる。どっかの Web サービスが HTTPS で運営されていたとしても、そのログイン情報や Cookie がローカルに平文で保存されていたら、それを盗まれて勝手に自分のアカウントでなんか変なことをされるかもしれない。メールサーバが TLS 対応だったとしても、ログイン情報がローカルに平文で保存されていたら、それを盗まれて他人にメールを読まれたり spam 送信に使われるかもしれない。telnet じゃなくて ssh を使っていたとしても、秘密鍵がパスフレーズなしで使えるものだったら、それを盗まれて他人にログインされてしまうかもしれない。ぶっちゃけ、ログイン情報を PC に保存できて、次回からそういう入力が一切不要でログインできてしまうアプリはぜんぶ危険。

_ もちろん、素の FTP よりも FTPS が使えるのならそっちの方がいいのは言うまでもない。ただ、ネットワークトラフィックの盗聴を防ぐことと、ローカルデータを盗まれることを防ぐことはまったく異なる話であって、どちらか片方やればいいという問題ではない、両方やらなきゃダメ、ということは理解しておかなければならない。こういう悪さをする malware に感染しないように日頃から脆弱性対策したりアンチウイルスソフトの定義ファイルアップデートに勤しむのも重要だけど、ゼロデイ攻撃もあるので完全ではない。重要な情報、せめてパスワードぐらいは PC に保存せずに自分の頭で覚えておく、というのがいいんだろうけど、脳味噌の記憶領域はそんなに大きくないよ! どうすんの! どうしようもないよ! うーん、困った(←ヒドいオチだ)。

無題

_ あー、そうだ。malware によるトラフィックの盗聴対策には通信経路の暗号化が有効なんだけど、stunnel のような平文-SSL ゲートウェイなツールは役に立たない、ということは理解しておいた方がいいかな。

_ こういうツールは自分の PC と外部との通信を暗号化するのが目的なので盗聴者が外部にいる場合には有効だけど、同じ PC の中で malware が盗聴してれば SSL 変換前の通信が見えちゃって意味なし。アプリが自前で暗号化するものじゃないとダメ。

_ ただし、トラフィックを覗き見しているのは malware だけでなく、アンチウィルスソフトやアプリケーションファイアウォールも危険な通信がおこなわれていないか監視している。アプリが自前で暗号化している場合この監視もできなくなるので注意。最近のアンチウィルスはこれをムリヤリ監視するために、ネットワークトラフィックではなく、アプリに対するプラグインのような形でアプリ内部で動作するものもあるけど、アプリごとに個別に対応する必要があるので、かなりメジャーなブラウザやメーラーしか対応していない。

Hello, world

_ 0 が消えて記号だけで Hello, world が書けるようになりました。スクリプト名が hello.sh でなければならない、という縛りもなくなりました。ただし、MacOSX でしか動きません。Snow Leopard の /bin/sh (=bash) で確認。OSX でも root だと動きません。

#!/bin/sh
_____=~
_____=${_____#/??}
______=${_____#?}
_____=${_____%$______}
____=${______#?}
______=${______%$____}
__=`/???/$_____??[^$______] /???/$_____??[^$______]`
__=${__#/???/}
_________=${__#???}
____=\\${#_______}${#_____}
_______=$____${#__}${#__}
________=$____${#_______}${#__}
___=$________$_______
_______=-$_____
__________=$________$_______
$__ $_______ $____${#___}$_____$________$________$_________, $____${#_______}${#__________}$_________$______$___!

_ 解説。単純に echo Hello, World! してるだけ。具体的な手順は次のとおり。~ (自分自身のホームディレクトリ、OSX では /Users/XXX) から e と r の文字を切り出す。ワイルドカードで /???/e??[^r] をマッチさせて /bin/echo を得る([^r] は /bin/expr とマッチしないようにするため)。得られた /bin/echo から echo を得る(BSD 系の /bin/echo は -e が使えないためシェルのビルトイン echo を使う)。あとは変数 $var の文字列長を ${#var} で得られることを利用して8進数で文字コードを作り、echo -e で出力。

_ というわけで、ホームディレクトリが /Users/xxx の OSX ではなく /home/XXX や /export/home/XXX な環境ならば、~ から h、o、e を取り出して /???/e?ho にマッチさせて echo を取り出す、という手順に書き換えればよい。 0 を含んだバージョンの場合は $0 (= 自分自身のスクリプト名、今回は hello.sh) から h、e、o の文字を切り出し以下同じ、でやっている。

_ とにかくいかにして echo の4文字を得るかがキモ。echo さえできればあとは eval という文字列も作れるので、Hello, world どころかもっと複雑な制御構造を持つスクリプトも書けるようになるはず。ためしてないけど。echo を得るのにワイルドカード展開以上にうまい方法が見つからなかったので、たとえば事前に touch /tmp/echo しておくと、あるいはその他まぎらわしいファイルが存在すると、それだけでマッチに失敗してコケる。


<< = >>
やまや