このBlogは移転しました。今後は aish.dev を御覧ください。

【求む】Twitter 音声読み上げクライアント Tweet it Loud!【人柱】

Tweet it Loud! はTwitterのタイムラインを音声で読み上げるWindows用アプリケーションです。このアプリケーションは、スクリーンリーダNVDA日本語化プロジェクトの成果物を元に開発しています。 ダウンロード http://www.pythonpath.jp/download/tweetitlou…

internのひみつ

Pythonにはintern()という組み込み関数がある。結構特別扱いで重要な組み込み関数なのだが、使い道が今ひとつ分かりにくいのか知らない人も多いようだ。 intern (一定の区域内に)拘禁する, 抑留する. [新英和(第7版)・和英(第5版)中辞典 株式会社研究…

プログラミングを学んでみたい人に

Twitterなんかをいろいろ眺めていると、もどかしくってたまらなくなってしまうことがある。プログラミングをやってみたいな〜と思いながらも、いつまでも最初の一歩を踏み出せない、そんな人を見たときだ。踏み出してはみたものの、自分の進路に自信を持てな…

is演算子のふしぎ

Pythonには、二つのオブジェクトが同じオブジェクトかどうか判定する is演算子というのがある。==演算子とちょっと似ているが、==演算子は二つのオブジェクトの値が等しいかどうかを判定し、is演算子は値に関わらず異なるオブジェクトが指定されればFalseを…

Python2のsoftspace

いまさら言うのもなんだが、Python3ではファイルのsoftspaceが廃止されている。これはprintステートメントでテキストを出力するとき、先頭にスペースを付加するかどうかのフラグだ。Python2ではprintステートメントの最後に , をつけると print "a", # 改行…

リストのかけ算

Python初学者が引っかかる落とし穴に、 seq = [[]] * 5 seq[0].append('A') print(seq) としたとき、どのような出力が出るか?というのがある。 一見、 [['A'], [], [], [], []] となりそうだが、実際には [['A'], ['A'], ['A'], ['A'], ['A']] となる。 seq…

さくらVPSでLVMを設定したときのメモ

新しくさくらVPSで 1.5Gプランを契約してみたが、このプランではディスクが仮想ドライブ2台として提供されている。デフォルトで入っているCentOS5のインストールでは、2台目のディスクが /home ディレクトリにマウントされているようだ。いろいろOS入れ替え…

Pythonバージョンの選びかた

Pythonはおよそ18ヶ月ごとに新しいメジャーバージョンをリリースする慣習になっていて、これまでにたくさんのバージョンがリリースされ、広く利用されてきた。Pythonの開発では後方互換性を保つことが非常に重視されていて、通常のアプリケーションであれば…

Pythonで学ぶ「詳解 UNIXプログラミング」(その17) おしまい

以上でPythonで学ぶ「詳解 UNIXプログラミング」シリーズを終える。軽いネタのつもりで書き始めたが、サンプル一つ一つにきちんと目を通すのはなかなか楽しく、思ったよりも時間がかかってしまった。短期間にこんなにたくさんのos.fork()を書いたのは初めて…

Pythonで学ぶ「詳解 UNIXプログラミング」(その16) 第19章 擬似端末

19.1 〜 19.3 Pythonのpty.fork()でptyのオープンとforkを行うことができる。pty.fork()はこのサンプルと同等の機能が実装されており、Linux/BSD/Solaris/Cygwin等の各プラットフォーム対応のコードが入っている。ただし、子プロセス側でのtermioとウィンド…

デコレータの元関数を保存する

テスト等でデコレータのデコレート前の関数を保存する必要があるなら、こんなのはどうだろう? import sys def tee(f): sys._getframe(1).f_locals['_raw_'+f.func_name] = f return f デコレートした関数オブジェクトから元の関数を取り出すのは難しいし、…

func_closureのひみつ

Pythonでデコレータで修飾した関数から、修飾される前の関数を取り出したいというニーズは多いようでデコレータ式を適用した関数から元の関数名を探す - gumi Engineer’s Blog デコレータを外す - logiqboard デコレータを取り除いて見たかった。 - podhmoの…

Pythonで学ぶ「詳解 UNIXプログラミング」(その15) 第15章〜第18章

以下の章 第15章 高度なプロセス間通信 第16章データベースライブラリ 第17章 PostScriptプリンタとの通信 第19章 モデムの発信 のサンプルは省略する。第15章ではプロセス間でファイルディスクリプタを受け渡す技法を解説しているが、この技法はPythonでは…

Pythonで学ぶ「詳解 UNIXプログラミング」(その14) 第14章 プロセス間通信

14.1 パイプを介して親から子へデータを転送する import sys, os r, w = os.pipe() pid = os.fork() if pid: # parent os.close(r) os.write(w, "hello world\n") else: # child os.close(w) line = os.read(r, 80) print line 14.2 ページ表示プログラムへ…

Pythonで学ぶ「詳解 UNIXプログラミング」(その13) 第13章 デーモンプロセス

13.1 デーモンプロセスの初期化 import sys, os pid = os.fork() if pid: sys.exit(0) # parent goes bye-bye # child continues os.setsid() # become session leader os.chdir("/") # change working directory os.umask(0) # clear out file mode creatio…

Pythonで学ぶ「詳解 UNIXプログラミング」(その12) 第12章 高度な入出力

12.1 ブロックしない大量のwrite import os, sys, fcntl buf = sys.stdin.read() print >>sys.stderr, "read {0} bytes".format(len(buf)) wrote = 0 fno = sys.stdout.fileno() val = fcntl.fcntl(fno, fcntl.F_GETFL, 0) fcntl.fcntl(fno, fcntl.F_SETFL, …

Pythonで学ぶ「詳解 UNIXプログラミング」(その11) 第11章 端末入出力

11.1 割り込み文字を無効にし、ファイルの終わりの文字を変更する import os, sys, termios if not os.isatty(0): sys.exit("standard input is not a terminal device") vdisable = os.fpathconf(sys.stdin.fileno(), "PC_VDISABLE") if vdisable < 0: sys.…

Pythonで学ぶ「詳解 UNIXプログラミング」(その10) 第10章 シグナル

10.1 SIGUSR1とSIGUSR2を捕捉する簡単なプログラム import signal def sigusr(signo, frame): # one signal handler for both signals print "received", "SIGUSR1" if signo == signal.SIGUSR1 else "SIGUSR2" signal.signal(signal.SIGUSR1, sigusr) signa…

Pythonで学ぶ「詳解 UNIXプログラミング」(その9) 第9章 プロセスの関係

9.1 オーファンドプロセスグループの作成 import sys, os, time, signal, traceback def pr_ids(name): print "{0} pid={1} ppid={2} pgrp={3}".format( name, os.getpid(), os.getppid(), os.getpgrp()) def sig_hup(signum, frame): print "SIGHUP receive…

Pythonで学ぶ「詳解 UNIXプログラミング」(その8) 第8章 プロセス制御

8.1 fork関数の例 import sys, os, time glob = 6 buf = "a write to stdout\n" STDOUT_FILENO = sys.stdout.fileno() def main(): global glob var = 88 # automatic variable on the stack os.write(STDOUT_FILENO, buf) # we don't flush stdout print "b…

Pythonで学ぶ「詳解 UNIXプログラミング」(その7) 第7章 プロセスの環境

7.1 終了ハンドラの例 import atexit def my_exit1(): print "first exit handler" def my_exit2(): print "second exit handler" atexit.register(my_exit2) atexit.register(my_exit1) atexit.register(my_exit1) print "main is done" Python 2.6以降では…

VMWareのDebian系Linuxゲストで、サスペンド/リジュームするとネットワーク接続が切れる件

何回も同じ事を調べているのでメモ。http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1923 より/etc/network/interfacesに、auto eth0 を追加。 auto lo + auto eth0 iface lo inet loopback

「詳解UNIXプログラミング」のひみつ

詳解UNIXプログラミングの小口を見ると、各章が区別できるように印が印刷されている。こんな感じだ。この印は5列からなっており、一列目は第一章から第七章、二列目は第八章から第一二章、三列目は第一三章から第一九章、四列目は付録、五列目は索引となっ…

Pythonで学ぶ「詳解 UNIXプログラミング」(その6) 第6章 システムデータファイルと情報

6.1 getpwnam関数 import pwd def getpwnam(name): for rec in pwd.getpwall(): if rec.pw_name == name: return rec パスワードファイル関連の関数はpwdモジュール、シャドウパスワード関連の関数はspwdモジュール、グループファイル関連の関数はgrpモジュ…

Pythonで学ぶ「詳解 UNIXプログラミング」(その5) 第5章 標準入出力ライブラリ

5.1 getc()とputc()を用いて標準出力へコピーする import sys while True: c = sys.stdin.read(1) if not c: break sys.stdout.write(c) 5.2 fgets()とfputs()を用いて標準出力へコピーする import sys for line in sys.stdin: sys.stdout.write(line) Pytho…

Pythonで学ぶ「詳解 UNIXプログラミング」(その4) 第4章 ファイルとディレクトリ

4.1 指定したファイルの種類を出力する import sys, os, stat for filename in sys.argv[1:]: print "{0}:".format(filename), try: st = os.lstat(filename) except Exception, e: sys.exit("lstat error") mode = st[stat.ST_MODE] if stat.S_ISREG(mode):…

UnicodeDecodeError/UnicodeEncodeErrorに悩まないPython 2.x プログラミング

最近、ときどきTwitterで「Python」を検索して眺めていたのだが、Pythonの分かりにくいところとして「UnicodeDecodeErrorが出てうざい」という不満をよく見かけるようだ。 確かに、Pythonでは、数字やアルファベット以外のユニコード文字を使おうとすると、…

Pythonで学ぶ「詳解 UNIXプログラミング」(その3) 第3章 ファイル入出力

3.1 標準入力ファイルがシーク可能で有るかどうかを調べる import os try: os.lseek(0,0,os.SEEK_CUR) except OSError: print "cannot seek" else: print "seek OK" lseek()が失敗すると、OSError例外が発生する。 3.2 lseek()でファイル内部に間隙を作成す…

Pythonで学ぶ「詳解 UNIXプログラミング」(その2) 第2章 UNIXの標準化と実装

2.1 sysconfとpathconfの定義値を出力する import os, sys for name in sorted(os.sysconf_names): try: value = os.sysconf(name) except OSError: value = "(not defined)" print name, value for name in sorted(os.pathconf_names): try: value = os.pat…

Pythonで学ぶ「詳解 UNIXプログラミング」(その1) 第1章 概論

1.1 ディレクトリ内の全てのファイルをリストする import sys, os if len(sys.argv) != 2: sys.exit("a single argument (the directory name) is required") try: filenames = os.listdir(sys.argv[1]) except OSError: sys.exit("can't open {0}".format(s…