hagio.org - 日記

Powered by PENS


Index

2009: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2010: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2011: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2012: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2013: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2014: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2015: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2016: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2017: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)

今月のアルバム [ 投稿 | 編集 ]


編集

June 2010

Jun 14 (Mon)

21:19

今日の Python : wc コマンドを作る (wc.py)
無駄に長いだけの単なる getopt の練習になってしまったが、 面倒でない範囲でできる限り忠実に再現したつもり。

#!/usr/bin/env python import sys, getopt def usage(): print "Usage: %s [-cmlLw] FILES" % sys.argv[0] def wc(f): (c, m, l, L, w) = (0, 0, 0, 0, 0) for line in f: c += len(line) m += len(line.decode('UTF-8')) l += 1 L = max(L, len(line)-1) w += len(line.split()) return (c, m, l, L, w) if __name__ == "__main__": try: opts, args = getopt.getopt(sys.argv[1:], "cmlLw") except getopt.GetoptError: usage() sys.exit(0) # set defaults opt_c = True # bytes opt_m = False # chars opt_l = True # lines opt_L = False # max-line-length opt_w = True # words if opts: (opt_c, opt_l, opt_w) = (False, False, False) for (opt, val) in opts: if opt == "-c": opt_c = True elif opt == "-m": opt_m = True elif opt == "-l": opt_l = True elif opt == "-L": opt_L = True elif opt == "-w": opt_w = True (total_c, total_m, total_l, total_L, total_w) = (0, 0, 0, 0, 0) if not args: args.append("-") for arg in args: if arg == "-": f = sys.stdin else: f = open(arg, "r") (c, m, l, L, w) = wc(f) f.close() if opt_l: print " %5d" % l, if opt_w: print " %5d" % w, if opt_m: print " %5d" % m, if opt_c: print " %5d" % c, if opt_L: print " %5d" % L, print arg total_c += c total_m += m total_l += l total_L = max(total_L, L) total_w += w if len(args) > 1: if opt_l: print " %5d" % total_l, if opt_w: print " %5d" % total_w, if opt_m: print " %5d" % total_m, if opt_c: print " %5d" % total_c, if opt_L: print " %5d" % total_L, print "total"

-m オプションはまだ実装してない。 -m も実装した。

[hagio@lab Python]$ wc -cmlLw *.py 17 48 343 343 43 bin.py 28 82 719 719 59 buddy.py 4 12 79 79 28 compare.py 87 255 2287 2287 51 graph.py 40 91 1003 1003 71 memcurses.py 38 77 881 881 63 memstat.py 21 35 398 398 41 ncurses.py 54 134 1463 1463 101 netmonitor.py 19 30 246 246 40 open.py 24 73 510 510 52 sdx.py 5 13 112 112 36 split.py 18 35 371 371 52 tcp_client.py 28 57 624 624 64 tcp_server.py 85 284 1992 1992 67 wc.py 468 1226 11028 11028 101 合計 [hagio@lab Python]$ ./wc.py -cmlLw *.py 17 48 343 343 43 bin.py 28 82 719 719 59 buddy.py 4 12 79 79 28 compare.py 87 255 2287 2287 51 graph.py 40 91 1003 1003 71 memcurses.py 38 77 881 881 63 memstat.py 21 35 398 398 41 ncurses.py 54 134 1463 1463 101 netmonitor.py 19 30 246 246 40 open.py 24 73 510 510 52 sdx.py 5 13 112 112 36 split.py 18 35 371 371 52 tcp_client.py 28 57 624 624 64 tcp_server.py 85 284 1992 1992 67 wc.py 468 1226 11028 11028 101 total

07:51

(昨日の分の) 今日の Python:10 進数を 2 進数に変換する dec2bin.py (32bit only; ちょっと修正版)

$ cat dec2bin.py #!/usr/bin/env python import sys def bin(dec): ret = "" for i in range(31, -1, -1): if dec & (1 << i): ret += "1" elif ret: ret += "0" return ret if __name__ == "__main__": if len(sys.argv) > 1: print bin(int(sys.argv[1])) else: print "Usage: %s dec" % sys.argv[0]

$ ./dec2bin.py 12345 11000000111001 $ ./dec2bin.py 1024 10000000000

ネタを思いつかずしょーもないものになってしまったが、 Python でもビット演算はできるということで。

Jun 13 (Sun)

21:57

久しぶりにケイタに会ってきた。こっちに来てからも地元の友達と会えるというのは嬉しいものですね。 そしていろんなことを真面目に、よく考えている彼には、いつも感心させられる。 オレも技術にばかり夢中になってないで、もっと視野を広く持たねば… と考えさせられるのであった。 まあ、オレの脳みその構造はそうはなっていないから困っているわけですが。

Jun 12 (Sat)

14:34

コーヒーが好きなので、よくドトールやらタリーズやら行くのだが、 なんだかんだ言ってスターバックスのコーヒーはうまいと思う (店としては、安いドトールが好きだが)。 ということで、あの味を家でも味わいたいと思い、スタバの豆を買ってきた。 ミルもあるけど自分で挽くのは正直面倒なので、挽いてあるやつ。グラム 400 円と少々高価ではあるが。。 さすがに自分でいれると入れ方が良くないため店で飲むよりは劣るが、それでもあの独特の香りは変わらない。 スーパーで売ってるどの豆よりもうまい。

ちなみに、このコーヒーカップは自分で作ったものだ。 サイズ、形状、厚さなどオレなりのコーヒーカップの理想型を追求したが、色がいまいち。 こればっかりは土と薬が決まっているのでどうにもならない。 でも、自作のコーヒーカップで美味しいコーヒーを飲む、これはなかなかイイですよ。

ソーサーは残り時間 5 分で作成したんで何も言わんといてください。。

ついでに(?)ザキヤマさんも購入。さすがに角瓶とかよりかなり飲みやすい。

02:09

垂れ流さないで同じ位置に表示ってどうやるんだろうね?

一般的には、ncurses というライブラリを使うらっし。

ということで、さらにプラス 1 時間 Python : memstat.py の ncurses バージョン (memcurses.py)
初めて使ってみたけど、意外と簡単にできた。こりゃ楽しいわ。

#!/usr/bin/env python import sys, time, curses def main(argv): win = curses.initscr() if len(argv) > 1: interval = int(argv[1]) else: interval = 1 f = open("/proc/meminfo", "r") prev = [] while True: win.clear() win.addstr(0, 0, "Every %d.0s : %s" % (interval, time.ctime())) i = 0 try: for line in f: win.addstr(i+2, 0, line[:-1]) cur = line.split()[1] try: if cur != prev[i]: win.addstr(" %+d" % (int(cur) - int(prev[i]))) prev[i] = cur except IndexError: prev.append(cur) i += 1 win.addstr("\n") win.refresh() f.seek(0) time.sleep(interval) except KeyboardInterrupt: break curses.endwin() f.close() return 0 if __name__ == "__main__": sys.exit(main(sys.argv))

watch 風にインターバルと時刻を表示するようにしてみた。

Every 5.0s : Sat Jun 12 02:07:15 2010 MemTotal: 3888216 kB MemFree: 197128 kB -124 Buffers: 278784 kB Cached: 2899436 kB SwapCached: 0 kB Active: 892592 kB +32 Inactive: 2655908 kB HighTotal: 3144000 kB HighFree: 50284 kB -124 LowTotal: 744216 kB LowFree: 146844 kB ...

01:02

今日の 30 分 Python : /proc/meminfo の増減を見る (memstat.py)

#!/usr/bin/env python import sys, time def main(argv): if len(argv) > 1: interval = int(argv[1]) else: interval = 1 f = open("/proc/meminfo", "r") prev = [] while True: i = 0 try: for line in f: print line[:-1], cur = line.split()[1] try: if cur != prev[i]: print "%+d" % (int(cur) - int(prev[i])) prev[i] = cur else: print except IndexError: prev.append(cur) print i += 1 time.sleep(interval) print f.seek(0) except KeyboardInterrupt: break f.close() return 0 if __name__ == "__main__": sys.exit(main(sys.argv))

指定したインターバルでの /proc/meminfo の変化を表示する。 インターバルのデフォルト値は 1 秒。

$ ./memstat.py 5 ... MemTotal: 3888216 kB MemFree: 199036 kB Buffers: 278720 kB Cached: 2898740 kB SwapCached: 0 kB Active: 890720 kB +280 Inactive: 2656076 kB -20 HighTotal: 3144000 kB HighFree: 51820 kB LowTotal: 744216 kB LowFree: 147216 kB ...

垂れ流さないで同じ位置に表示ってどうやるんだろうね?

Jun 11 (Fri)

22:39

PENS を写メに対応させるにはどうしたらいいか。

  1. メールをサーバに取り込む
    • メールサービスを動かしてそこに直接送るようにする
    • Gmail に送ってそこから取り込むようにする
  2. 添付ファイルを抽出して、画像として保存する
  3. PENS に渡す

やはり最初のフェーズが一番難しそう。Postfix でもはじめるかな。

Jun 9 (Wed)

19:52

/proc/buddyinfo のそれぞれのゾーンの合計値を計算するスクリプト。小学生問題。

#!/usr/bin/env python import sys if len(sys.argv) == 1: f = open("/proc/buddyinfo", "r") for line in f: print line[:-1], items = line.split() total = 0 for val in range(0,11): total += int(items[4+val]) * 4 * 2**val print total, "KB" f.close() else: for file in sys.argv[1:]: f = open(file, "r") for line in f: if len(line) > 1: print line[:-1], items = line.split() total = 0 for val in range(0,11): total += int(items[6+val]) * 4 * 2**val print total, "KB" else: print line, f.close

後半部分はログ解析用。冗長なのは気にしない。 とりあえず完成速度重視で、アレどうやるんだっけ?というのをなくすための訓練。

$ ./buddy.py Node 0, zone DMA 306 255 180 27 1 0 0 1 1 1 0 10656 KB Node 0, zone Normal 1095 3053 111 549 747 207 19 0 0 0 1 131412 KB Node 0, zone HighMem 186 590 713 495 149 43 6 0 0 0 1 53384 KB

01:11

ps で得られる情報を最大限出力する方法:

$ ps -emwwo "$(ps L | awk '{print $1}' | tr '\n' ',')"

vi で set nowrap しないとまず読めない。

ちなみに Mac だと BSD 系の ps コマンドなので、ちょっとオプションや出力が変わって

$ ps -ewwo "$(ps L | tr ' ' ',')"

のようになる。ps はオプションがありすぎてよくわからないので、まだ出せるものがあるかもしれない。

00:32

今のような仕事をしていると、ソースを読む力はつくのだが、書く力がつかない。 さっき、ちょっとしたプログラムを Python で書いていたが、アルゴリズムをコードに直せなくて自分自身にキレそうだった。 これはマジでリハビリせねばならんでござるよ。

Jun 7 (Mon)

23:14

日本で iPad のキラーアプリになるものがあるとすれば、それはマンガだろうと予想する。

Jun 5 (Sat)

14:41

唐突に日本酒の種類について調べてみたのでメモ。日本人なら知っておかなければなるまい。 単なる Wikipedia の抜粋だけど。

本醸造酒
精米歩合 70% 以下の白米、米麹および水と醸造アルコールで造った清酒で、香味及び色沢が良好なもの。 使用する白米 1 トンにつき 120 リットル(重量比でおよそ 1/10)以下のアルコール添加をしてもよい。
純米酒
白米、米麹および水だけを原料として製造した清酒で、香味及び色沢が良好なもの。 ただし、その「白米」は、3 等以上に格付けた玄米又はこれに相当する玄米を使用し、 さらに「米麹」の総重量は、白米の総重量に対して 15% 以上必要である。
吟醸酒・純米吟醸酒
精米歩合 60% 以下の白米、米麹および水を原料とし、吟味して製造した清酒で、固有の香味及び色沢が良好なもの。 最後に吟醸香を引き出すために使用する白米 1 トンにつき 120 リットル(重量比でおよそ 1/10)以下の醸造アルコールを添加する。 吟醸酒のうち、醸造用アルコールを添加していないものを特に純米吟醸酒と言う。
大吟醸酒・純米大吟醸酒
精米歩合 50% 以下の白米、米麹および水を原料とし、吟味して製造した清酒で、吟醸酒よりさらに徹底して低温長期発酵する。 固有の香味及び色沢が特に良好なもの。最後に吟醸香を引き出すために少量の醸造アルコールを添加する場合もある。 大吟醸酒のうち、精米歩合 50% 以下の白米、米麹及び水のみを原料とするものを純米大吟醸酒と言う。

Jun 4 (Fri)

21:12

ということで、ビール祭り開催中。 普段飲まないようなビールばかり買ってきた。プレミアムモルツはわりと飲むけど、単にうまいのでメンバー入り。

ギネスは久しぶりに飲んだが甘いなー。こんな甘かったっけ?これは正直、スーパードライに最適化されたオレの口には合わない。 いま、プレミアムモルツ以外を飲んでしまったけど、どれもどっちかというと「重い」ビールなので、3 本で限界である。 ハリキって飲み始めたが、しんどくなってきた。ビールならいくらでもいけると思ってたが、ゼイタクビールだと意外ときついのね。。

計算したら、ビールだけで 500 kcal くらい。ゲフ。これで多少太れたらいいが。

Jun 3 (Thu)

20:37

月も変わって六月。だんだんビールが一番美味しい季節になってきますね。あぁ、早く週末こないかな。 次の日が仕事の日は飲まないようにしているので、ここんところ週末のビールが待ち遠しくてたまらないのだ。 ふと、前に住んでいた家では、どこかでもらったサッポロビールのジョッキを使っていたことを思い出した。 ただの缶ビールでも、ジョッキに入れて飲むとやっぱりひと味違う。口にスッと入ってくるんで、気持ちがいい。 オレはビールを飲んでるんだ!という気持ちにさせてくれる。

でもあれ実家に置いてきたんだよなあ。東京に来るときに、寮に住むってんで極力荷物を減らして、 結局そんなに大きくない段ボール 5 箱くらいでやってきたから、ビールジョッキなんて持って来れなかった。 実家からあれだけ送ってもらうのもなんだしなぁ。3 月まではツレが上野の近くに住んでいたので、 合羽橋も歩いていける距離だったのだが、あんときに買っとけば良かったと今さら後悔。 近所でもないのにあえて行くような場所でもないし・・・どっかビールジョッキ売ってるとこないですかね。 ハンズとかならありそうだけど高そうな気がする。

とりあえず Amazon で探してみたところ、いちばんに出てきたのが コレ。んなもん誰が買うかよ・・。 カロリーなんて気にしてたらせっかくのビールもうまくなくなるわ。と、太らないオレだから言えることかもしれんけど。

ということで、なんだかいつも以上にビールが飲みたくなってきた。 明日はビール祭りでもやるか。ジョッキは週末探しに行こう。

5 月(2) へ


↑戻る