hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
12/16/2002 おやき
■ おやき
今日朝起きて、異様に腹が減ってたので冷凍庫の中に入っていた「おやき」を4つ程解凍して食べたら、イッパツで満腹になってしまった。おやき恐るべし。まさか仙豆でも入ってたのか?
どうでも良いけど、よくおやきとおかきを間違えるんだがどうしたもんか。
■ 新幹線
何か東北新幹線、自由席のあるやまびこが激減して、全席指定のはやてとかいうクソがまかり通り始めた。ふざけやがってJRめ。どんどん不便になってくじゃねえか。全席指定になんかすんじゃねえバカ。
■ 残悔積歩拳
なんか少し鬱かも。何事にもやる気…ていうか殺る気? がない。イヤ殺る気があったら困るが。ちなみにタイトルには意味はございませんのであしからず。良いタイトルが思い付かなかっただけざます。
■ そういや
こないだ久しぶりにdistrowatch行ったんだけど、いつの間にかGentooってMandrake、RedHatに次いで3位なんてところにいたんだね。まさかDebianを抜くとは…。すごいなぁ。
うーん、実は俺って先見の明あるかも? なんてね。むしろそりゃyoshかな。
■ 懐かしのシリーズ
「芥川」
伊勢物語の一節。高校の教科書かな? 有名な文学だから特に懐かしいわけでもないんだけどね。男の人が女の人に夜這いをかけて、どっかに拐ってしまう話。当時はコレが普通だってんだから面白い。女の人を拐ったは良いけど、鬼にその女の人を食われてしまう。その時の女の人の叫び声「あなや」はとりあえずマヌケだと思います。
■ 今日のBGM
Royal Hunt - Crown in the Mirror より "Wasted Time"
12/16/2003 ぶ
■ メモ:
既にある ebuild の「こうした方がいいんじゃないの」は Severity:enhancement,Component:Applications
新規 ebuild の登録は Severity:enhancement,Component:Ebuilds
■ [Linux][メモ] 仮想記憶(VM)ファイルシステムとバインド・マウントの使い方
Gentoo ではデフォルトでマウントされる /dev/shm を PORTAGE_TMPDIR に据えると静音/高速化を計れるらしい.でかいアプリのコンパイル時やメモリが不足してると逆効果だそうだが./tmp をバインドしたり symlink するのも良いらしい.
…しかし PORTAGE_TMPDIR が消えちゃって大丈夫なのか? /var/db/pkg と /var/cache/edb が消えなきゃ大丈夫なのかな.
そういや usata さんが Portage ツリーをメモリ上で持ってると言ってたのはこれのことかな.
■ ぐわ
調子に乗って /dev/shm に ccache と TMPDIR を乗せたら容量不足で wine のコンパイルこけた….ccache のリミットを 128M まで減らして再コンパイルするもこける.ccache を別の場所に移動するもこける.
おのれ wine のコンパイルには 500M 程度の空きじゃ足りんというのか….
□ usata [いえ、Portage ツリーを持っているのは Solaris のメモリ上に単に 展開しているだけです。仮に rsyn..]
□ atzm [やっぱり中継サーバでパフォーマンス向上をはかるならデータ置き場としてメモリを選ぶのが最適なんでしょうかねぇ. ]
□ usata [-O3 ですね。今月の UNIX USER のでびあん通信に mhatta くんが書いて ますよ。元ネタは gent..]
□ atzm [今月の UNIX USER はまだ読んでないですが,後輩いわくデフォルトが -O3 だからどうのこうのと言ってた気が..]
□ usata [mhatta くんの文章はデフォルトが -O3 であると書いていました。(違うけど) 学校は quota が100M..]
□ atzm [あれ? stage3-pentium4-20030910 の中の make.conf は CFLAGS="-O3 -..]
□ usata [あー、なるほど。言われてみて確認したらまさにその通りでした。 確かに mhatta くんは正しいですね。濡衣を着せて..]
12/16/2008 むー
■ [戯言] くそう
いつぞや も書いた気がするけど,CPAN モジュールのバグを踏んだり「ねーよwwww」な仕様やコード見たりすると萎える.
まあ,最近では Python の標準モジュールにも思ったけど. socket#makefile で返ってくる奴はタイムアウトを無効化されてるとか,SocketServer のサーバソケットを非同期的な感じにしようとするときもいことするはめになったりとか.
時と場合によるけども,ネットワーク (に限らず I/O 全般) プログラミングで永遠にブロックしっぱなしは危険信号出まくりだと思うのだが. ブロッキング I/O は書く側は楽だけど使う側には罠の多い茨の道なだけに,それを末端に押しつけるのはどうかと思うぞ.
最低限スマートな逃げ道の用意はしておいて欲しい.
Twisted という選択肢もあるけれど,外部モジュールで Python の魅力が半減するという罠.
12/16/2009 むー
12/16/2018 ふむ
■ [Py][小ネタ] NAPT 前のアドレスを知る
例えば下記のようなネットワークがあるとする.Client が Web Server にアクセスした際,NAPT Router によって NAPT される前の Client の情報を Web Server が知りたいとする.
+--------+ +-------------+ +------------+ | Client |----------| NAPT Router |--------| Web Server | +--------+ +-------------+ +------------+ 172.16.0.193 172.16.0.1 10.207.9.88 10.207.9.87
NAPT Router が Linux 箱なら,conntrack エントリがカーネルの中に保持されているので,下記のようなサービスを NAPT Router の上で動かしておくことができるだろう.
import flask
from pyroute2.netlink.exceptions import NetlinkError
from pyroute2.netlink.nfnetlink.nfctsocket import NFCTSocket, NFCTAttrTuple
app = flask.Flask(__name__)
cts = NFCTSocket()
@app.route('/conntrack', methods=['GET'])
def conntrack_get():
saddr = flask.request.args.get('saddr')
daddr = flask.request.args.get('daddr')
proto = int(flask.request.args.get('proto'))
sport = int(flask.request.args.get('sport'))
dport = int(flask.request.args.get('dport'))
tpl = NFCTAttrTuple(saddr=saddr, daddr=daddr,
proto=proto, sport=sport, dport=dport)
try:
entry = cts.entry('get', tuple_reply=tpl)
except NetlinkError:
return flask.Response(status=404)
tuple_orig = entry[0].get_attr('CTA_TUPLE_ORIG')
tuple_ip = tuple_orig.get_attr('CTA_TUPLE_IP')
tuple_proto = tuple_orig.get_attr('CTA_TUPLE_PROTO')
return flask.jsonify(saddr=tuple_ip.get_attr('CTA_IP_V4_SRC'),
daddr=tuple_ip.get_attr('CTA_IP_V4_DST'),
proto=tuple_proto.get_attr('CTA_PROTO_NUM'),
sport=tuple_proto.get_attr('CTA_PROTO_SRC_PORT'),
dport=tuple_proto.get_attr('CTA_PROTO_DST_PORT'))
if __name__ == '__main__':
app.run('10.207.9.88')
その上で Web Server が下記のように,このサービスを叩く.
import flask
import requests
app = flask.Flask(__name__)
@app.route('/', methods=['GET'])
def root():
saddr = flask.request.environ['SERVER_NAME']
daddr = flask.request.environ['REMOTE_ADDR']
sport = flask.request.environ['SERVER_PORT']
dport = flask.request.environ['REMOTE_PORT']
response = requests.get('http://10.207.9.88:5000/conntrack?'
'saddr=%(saddr)s&daddr=%(daddr)s&proto=6&'
'sport=%(sport)s&dport=%(dport)s' % locals())
if not response.ok:
return flask.Response(status=404)
entry = response.json()
return flask.jsonify(saddr=entry['saddr'],
daddr=entry['daddr'],
proto=entry['proto'],
sport=entry['sport'],
dport=entry['dport'])
if __name__ == '__main__':
app.run('10.207.9.87')
Client から Web Server にアクセスしてみると,
$ curl -s http://10.207.9.87:5000/ | jq .
{
"daddr": "10.207.9.87",
"dport": 5000,
"proto": 6,
"saddr": "172.16.0.193",
"sport": 55208
}
Web Server から,NAPT 前のオリジナルの Client のデータが返ってきていることが確認できる.
だからどうしたぼくドラえもん.
□ yosh [Gentooを使う漢がそれほど多いとは。 今までのディストリビューションと違ういうのが大きいのかな? まあ、私はヘタ..]