カテゴリ: python

主な情報はヘッダから採るようにしているが、やはり少々影響は受ける。
PythonJavaの混成アプリで今回影響を受けたのはPython部分。Pythonは普段使わないからすぐ忘れてその度に文法をWebで検索して思い出す…。インデントで挙動が変わるのだけはどうかと思う。いや読みやすくなるのは判るが…。
どんどん変わるであろうHTMLはPythonで受けて整形というか情報を取り出し、本処理のJavaの方はリコンパイルを避ける事で変更に強い設計にした筈だったが、Pythonの文法を忘れるという罠が…全部Javaにすべきだったか…。だが今から作り直すのも面倒…。
そいえばいつのまにか新しいサムネイルの大きさというか、リサイズをしてくれる処理が出来たようで


等々、メイン画像の大きさを色々変えられるっぽい。サムネイルには効かないようだが。

このエントリーをはてなブックマークに追加 mixiチェック

ソースからのビルドにも失敗したので、今度は別PCにインストール後、C:\Python32\をディレクトリごと固めてこのPCにコピー。パスを直下とDLLsとlibsに通してpythonコマンドを実行すると

python32.dllが見つかりません

エラー。ちなみにC:\Python32\配下にpython32.dllなんてファイルはそもそも存在しない。python32.libならあるけど。System32とかに入っているのだろうか?それとも静的リンク版ならpython32.libの方を使ったりするのだろうか。
→インストールしてちゃんと動作してる方のPCにもpython32.dllは無かった。謎。LinuxのlddみたいなコマンドってWindowsでは何だろう?

このエントリーをはてなブックマークに追加 mixiチェック

という訳でPython 3.2.2をソースからビルドする羽目に。こういうの苦手なんだが…昔から一発で通った試しがあまり無い。でもWindowsだしUnix程#ifdefの迷路って訳でも無いだろう…多分…。
http://www.python.org/download/releases/3.2.2/ から Gzipped source tar ball (3.2.2) をダウンロード。一番一般的なtar.gzだ。7zで解凍できる。
展開したディレクトリ直下のREADMEを読む。

On Windows, see PCbuild/readme.txt.

それだけか。素っ気無いな。

Microsoft Visual C++ 2008 Express Edition is required at the very least.

何、Express Editionでビルドできるのか。だったら最新のVisual Studio 2010 Express Editionで…と思ったけどインストール面倒なのでまぁいいや。そもそも今、.msiが正常動作しなくてこんな羽目になってるんだし。

All you need to do is open the workspace "pcbuild.sln" in Visual Studio,

PCBuild直下のpcbuild.slnをVS2005開く

選択されたファイルはソリューションファイルですが、このアプリケーションより新しいバージョンで作成されたため開くことができません

ダメじゃん。だが慌てるのはまだ早い。さっきVC8.0ってディレクトリを見つけてあるんだ。

Legacy support

                          • -

You can find build directories for older versions of Visual Studio and
Visual C++ in the PC directory. The legacy build directories are no longer
actively maintained and may not work out of the box.

PC/VC6/
Visual C++ 6.0
PC/VS7.1/
Visual Studio 2003 (7.1)
PC/VS8.0/
Visual Studio 2005 (8.0)

…うーむ、もはやメンテナンスされてないとか動かないかも知れないとか言ってるし…。とりあえずソリューションは開けたのでビルド。

10>コンパイルしています...
10>randtable.c
10>c1 : fatal error C1083: ソース ファイルを開けません。'..\..\..\bzip2-1.0.5\randtable.c': No such file or directory
10>huffman.c
10>c1 : fatal error C1083: ソース ファイルを開けません。'..\..\..\bzip2-1.0.5\huffman.c': No such file or directory
10>decompress.c
10>c1 : fatal error C1083: ソース ファイルを開けません。'..\..\..\bzip2-1.0.5\decompress.c': No such file or directory
10>crctable.c
10>c1 : fatal error C1083: ソース ファイルを開けません。'..\..\..\bzip2-1.0.5\crctable.c': No such file or directory
10>compress.c
10>c1 : fatal error C1083: ソース ファイルを開けません。'..\..\..\bzip2-1.0.5\compress.c': No such file or directory
10>bzlib.c
10>c1 : fatal error C1083: ソース ファイルを開けません。'..\..\..\bzip2-1.0.5\bzlib.c': No such file or directory
10>blocksort.c
10>c1 : fatal error C1083: ソース ファイルを開けません。'..\..\..\bzip2-1.0.5\blocksort.c': No such file or directory
10>bz2module.c
(以下略)他色々

bzlib.cなんてファイルは無いぞ。別のOSSのソースが必要とか?多分、ソースを入手したりパスを変更したりするより、VC++2010 Express Edition入れた方が早い。しかしmsiが動作しない。
何か嫌になってきたな。さらばPythonXML処理が簡単に書けるのは気に入っていたよ…。

このエントリーをはてなブックマークに追加 mixiチェック

3.2.1をアンインストールして、3.2.2をインストールしようとしたところ、インストーラ

msiexec.exe の 0x6d6d5eaa でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000020 を読み込み中にアクセス違反が発生しました。

で必ず異常終了する。3.2.1のインストーラも3.1.4も3.0.1のも同様。
以前成功したはずの3.2.1まで異常終了するところを見ると何となくPythonばかりではなく*.msiはみんなそうなるような気がしないでも無いが試していない。私のPCは以前もHotSpot JVM 1.6シリーズが異常終了するようになったりしてて何か変なんだけど多分その類じゃないかと疑っている。何故そうなるのかは不明。
PythonWindows版だけは何故かソースが無いし、まぁとにかくこのPCでPythonは使えなくなったのでお別れである。せっかくやっと使えるようになったのに…。作ったばかりの先日のアレもJavaに移植しないと。うむ、面倒…。というか後ひとつ、毎日定期的に流してる奴があってそっちの移植が急務か。さらばPython
→と思ったら http://www.python.org/download/releases/3.2.2/ ソースあった。ビルドできるかなーVisual Studioのプロジェクト付きじゃなかったらもう嫌ん。
 →プロジェクトはあるが、slnが6つもある。どれだ。VC++7.1用と8用とか色々あるんだけど。というか私のVisual Studio 2005 ってVC++8だっけ?7だっけ?VC++6.0は聞いた事あるがVC++7.0はあまり聞かないので2005が7だった気がするが…しばらく使ってないから忘れてる…。いや、VC++6.0から2005の間に確か2002があってそれが7か。ということは2005はVC++8。うむ。というかインストールディレクトリ名が

C:\Program Files\Microsoft Visual Studio 8

だった。

このエントリーをはてなブックマークに追加 mixiチェック

SJCPも無事終わったので、再び取り掛かる。大体の所は完成して確かにXMLを読んでテキストを吐く処理に関してはJavaより簡潔。ただ「〜」他の文字コード問題とか、PHPで末尾に使うとマズイ文字とか細々したのがまだ。Jythonとかなら自作クラス呼べたのだろうか。そういえばgroovyはそういうの得意らしいけどまぁいいや。
→ http://www.jython.jp/ ドメイン乗っ取られてるし。
とりあえず試運転代わりに http://nekora.main.jp/comic/thumb/cfnm/all/ を自動作成してみたり。世の中色々ジャンルは尽きないね。

このエントリーをはてなブックマークに追加 mixiチェック

を使って何度も実行していると、pythonw.exe ってプロセスがどんどん増えていく不気味な謎。そしてその内、IDLEが固まってプロセスをKILLすることになる。
http://ar.aichi-u.ac.jp/python/idle/
この辺?

このエントリーをはてなブックマークに追加 mixiチェック

XMLをちょっと操作するとかのワンライナーには良いんだが、print文に日本語入れると実行時にエラーになるのがいやん。
IDOLに到ってはソース中に日本語コメント入れるとセーブ時に文句を言う始末。
多分文字コードが何か制限があるんだろうな。utf-8じゃなきゃダメとか。
→これか http://www.python.jp/Zope/articles/japanese/Python4Japanese-2 ソース中に宣言が要るのか

# coding=エンコーディング名
このエントリーをはてなブックマークに追加 mixiチェック

の雛形が無いかなー、と思ったら
ここにあった。

import threading
import random
import Queue
import time

class ThreadPool:
    def __init__(self, count):
        self._queue = Queue.Queue(0) # infinite sized queue
        self._threads = [threading.Thread(target=self._run) for _ in xrange(count)]
        for thread in self._threads:
            thread.start()

    def _run(self):
        #実際に使う時はここでDBへのコネクション等を作る
        while 1:
            func = self._queue.get()
            if func is None:
                break
            #func(connとか)
            func()
        #conn.close()とか

    def submit(self, func):
        if func is None:
            raise ValueError("None is not allowed here")
        self._queue.put(func)

    def shutdown(self):
        for thread in self._threads:
            self._queue.put(None) # terminator
        for thread in self._threads:
            thread.join()

def create(id, wait):
    def func():
        print "task %d started (%2d sec)" % (id, wait)
        time.sleep(wait)
        print "task %d done" % id
    return func

def main():
    pool = ThreadPool(3)
    try:
        for id in xrange(10):
            pool.submit(create(id, random.randint(5, 15)))
    finally:
        pool.shutdown()
    print "completed"

if __name__ == '__main__':
    main()

という良さげなのが。while 1がちょっと気になるけどまぁこれで備えは万全。
それにしてもPython

def create(id, wait):
    def func():
        云々

というのはPythonの不思議な書き方で、ここに出てくるid,waitはその下のfunc()から参照可。

このエントリーをはてなブックマークに追加 mixiチェック

Java -> SQLite3 -> Pythonで文字化け無し。
要素技術はクリアしたので後は組み込むばかり。
→うむ。組み込んだ。明日実地で試す。

このエントリーをはてなブックマークに追加 mixiチェック

文字列をshift_jisなtxtに書き出す前にutf-8の段階で、301cをff5eに置換するとOK。

str=str.replace(u'\u301c', u'\uff5e')
このエントリーをはてなブックマークに追加 mixiチェック

↑このページのトップヘ