Powered by PENS
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)(2)
2018:
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)
2019:
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)
2020:
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)
2021:
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)
2022:
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)
2023:
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)
2024:
1月(1)(2) 2月(1)(2)
3月(1)(2)
今月のアルバム U.S. Beers! [ 投稿 | 編集 ]
今日の 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
(昨日の分の) 今日の 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 でもビット演算はできるということで。
久しぶりにケイタに会ってきた。こっちに来てからも地元の友達と会えるというのは嬉しいものですね。 そしていろんなことを真面目に、よく考えている彼には、いつも感心させられる。 オレも技術にばかり夢中になってないで、もっと視野を広く持たねば… と考えさせられるのであった。 まあ、オレの脳みその構造はそうはなっていないから困っているわけですが。
コーヒーが好きなので、よくドトールやらタリーズやら行くのだが、 なんだかんだ言ってスターバックスのコーヒーはうまいと思う (店としては、安いドトールが好きだが)。 ということで、あの味を家でも味わいたいと思い、スタバの豆を買ってきた。 ミルもあるけど自分で挽くのは正直面倒なので、挽いてあるやつ。グラム 400 円と少々高価ではあるが。。 さすがに自分でいれると入れ方が良くないため店で飲むよりは劣るが、それでもあの独特の香りは変わらない。 スーパーで売ってるどの豆よりもうまい。
ちなみに、このコーヒーカップは自分で作ったものだ。 サイズ、形状、厚さなどオレなりのコーヒーカップの理想型を追求したが、色がいまいち。 こればっかりは土と薬が決まっているのでどうにもならない。 でも、自作のコーヒーカップで美味しいコーヒーを飲む、これはなかなかイイですよ。
ソーサーは残り時間 5 分で作成したんで何も言わんといてください。。
ついでに(?)ザキヤマさんも購入。さすがに角瓶とかよりかなり飲みやすい。
垂れ流さないで同じ位置に表示ってどうやるんだろうね?
一般的には、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 ...
今日の 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 ...
垂れ流さないで同じ位置に表示ってどうやるんだろうね?
PENS を写メに対応させるにはどうしたらいいか。
やはり最初のフェーズが一番難しそう。Postfix でもはじめるかな。
/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
ps で得られる情報を最大限出力する方法:
$ ps -emwwo "$(ps L | awk '{print $1}' | tr '\n' ',')"
vi で set nowrap しないとまず読めない。
ちなみに Mac だと BSD 系の ps コマンドなので、ちょっとオプションや出力が変わって
$ ps -ewwo "$(ps L | tr ' ' ',')"
のようになる。ps はオプションがありすぎてよくわからないので、まだ出せるものがあるかもしれない。
今のような仕事をしていると、ソースを読む力はつくのだが、書く力がつかない。 さっき、ちょっとしたプログラムを Python で書いていたが、アルゴリズムをコードに直せなくて自分自身にキレそうだった。 これはマジでリハビリせねばならんでござるよ。
日本で iPad のキラーアプリになるものがあるとすれば、それはマンガだろうと予想する。
唐突に日本酒の種類について調べてみたのでメモ。日本人なら知っておかなければなるまい。 単なる Wikipedia の抜粋だけど。
ということで、ビール祭り開催中。 普段飲まないようなビールばかり買ってきた。プレミアムモルツはわりと飲むけど、単にうまいのでメンバー入り。
ギネスは久しぶりに飲んだが甘いなー。こんな甘かったっけ?これは正直、スーパードライに最適化されたオレの口には合わない。 いま、プレミアムモルツ以外を飲んでしまったけど、どれもどっちかというと「重い」ビールなので、3 本で限界である。 ハリキって飲み始めたが、しんどくなってきた。ビールならいくらでもいけると思ってたが、ゼイタクビールだと意外ときついのね。。
計算したら、ビールだけで 500 kcal くらい。ゲフ。これで多少太れたらいいが。
月も変わって六月。だんだんビールが一番美味しい季節になってきますね。あぁ、早く週末こないかな。 次の日が仕事の日は飲まないようにしているので、ここんところ週末のビールが待ち遠しくてたまらないのだ。 ふと、前に住んでいた家では、どこかでもらったサッポロビールのジョッキを使っていたことを思い出した。 ただの缶ビールでも、ジョッキに入れて飲むとやっぱりひと味違う。口にスッと入ってくるんで、気持ちがいい。 オレはビールを飲んでるんだ!という気持ちにさせてくれる。
でもあれ実家に置いてきたんだよなあ。東京に来るときに、寮に住むってんで極力荷物を減らして、 結局そんなに大きくない段ボール 5 箱くらいでやってきたから、ビールジョッキなんて持って来れなかった。 実家からあれだけ送ってもらうのもなんだしなぁ。3 月まではツレが上野の近くに住んでいたので、 合羽橋も歩いていける距離だったのだが、あんときに買っとけば良かったと今さら後悔。 近所でもないのにあえて行くような場所でもないし・・・どっかビールジョッキ売ってるとこないですかね。 ハンズとかならありそうだけど高そうな気がする。
とりあえず Amazon で探してみたところ、いちばんに出てきたのが コレ。んなもん誰が買うかよ・・。 カロリーなんて気にしてたらせっかくのビールもうまくなくなるわ。と、太らないオレだから言えることかもしれんけど。
ということで、なんだかいつも以上にビールが飲みたくなってきた。 明日はビール祭りでもやるか。ジョッキは週末探しに行こう。