Hatena::ブログ(Diary)

つかさのほえほえ日記 このページをアンテナに追加 RSSフィード Twitter

2012-08-02

グッバイはてなダイアリー

あいさつ

つかさです。

ブログを移転します。移転先はつかさのほえほえ日記です。

http://hoehoetukasa.blogspot.jp

ここで書いた記事は消さずに残す予定です。記事の移行も少しずつ行うつもり。


            r 、
        r 、_ .⊆ヽ`二ミヽ、
      (`_ー-=r‐ァ゙=,三ミ、`、 } _
        ,⊆三彡' / ,r===゙゙'---‐¨=丶
       ,ゞ=,.= ‐' /              .:i
        し¬_r=彳、            .:::i
            }c`'ー--- ───---:::'{
          ,. ¬、_O   ___O__...::::::_2!、   いこう ここもじき腐海に沈む
        /      .. ̄..  ....::::: ̄:: .:::::ヽ
        /         ,.-t_r‐テ=:.‐ャrテ‐x`.::::::::ヽ
     /      ,. イ `こニ ´゙  Fニ´「[`ヽ、:::::ヽ、
    , '"    ,.r‐'i"「:..._゙ゝ‐-ー- 、r  レ;z亠ッ`'ー゙=ミ- '
  ,f=‐:-,,-<. i::. l:. l:_,≦-`    ` -'" ´_=ミー"_,.:ヽ
 /.:.    `:.  ゙ヾ. l:..ヽ、彡,´        、ミミ゙ー"⌒:ヽ
_/.:._     :.   `'ー-、〃;"   ,,  ,、 、ヾツ   ...;;ヘ
⌒゙ー:...._   `;,,_   ''≠彡ッ彡;,ソ,,リ、,ミ゙ 丶-‐....::::;;〉

2012-06-16

Pythonでプログラムを作るときのTips

あいさつ

つかさです。

プログラム本体とは関係ないが、詰まったりしたことのメモ

py2exeの使い方

実行ファイル形式にするので定番が、py2exeらしい。

ここからダウンロードPythonのバージョンによって、違うのをインストールしないとだめのようだ。僕は2.7を使ってるのでpy2exe-0.6.9.win32-py2.7.exeをダウンロードした。

f:id:tukasa1919:20120616201859j:image

そしてこれをインストール

では、これで実行ファイルを作る方法。

setup.pyを作ります。

setup.py
import sys
import os

from distutils.core import setup
import py2exe

py2exe_options = {
  "compressed": 1,
  "optimize": 2,
  "bundle_files": 3}

setup(
  options = {"py2exe": py2exe_options},
  windows = [{
            "script" : "SETZER.py", "icon_resources": [(1,"py.ico")],

            "name" : "SETZER",
            "version" : "0.01",
            "description" : "",
            "company_name" : "hoehoeSoft",
            "url" : "http://d.hatena.ne.jp/tukasa1919/",
            
            }],
  zipfile = "lib/library.zip")

そしてこれを、実行ファイルがあるフォルダに入れ、PPxであれば次のようなコマンドを打つ。

CD %1 %: C:\Python27\python.exe setup.py py2exe
ポイント

ポイントは二カ所。bundle_filesと、zipfileです。

bundle_filesで、実行ファイルの大きさを変えることができます。3になると小さくなります。

ただ、これだとディレクトリに、関連するファイルがたくさんできてうっとうしい。そこで、サブフォルダにそれらをまとめて入れたいと思うことになると思います。

そのときに設定するのが、zipfileです。ここで

zipfile = "lib/library.zip"

とすることで、libフォルダを作りそのなかに.pydとか.dllとかの雑多なファイルをまとめられるようにできます。

sitecustomize.py

エンコードの設定のため、デフォルトエンコーディングを変えたほうがいいらしいので、変える。

  • sitecustomize.py
import sys

sys.setdefaultencoding("mbcs")

このファイルを

C:\Python27\Lib\site-packages

に入れます。

UNICODEへの変換方法

Pythonをいじっていて一番躓いたのが、エンコードのエラー。何かにつけて

UNICODE DECODE ERROR

みたいな文字が出てしまう。

とりあえず、外部から何か文字列を取り出し、内部で作業したいなら、UNICODEに変換するというのが無難らしい。

そして、再び外部に出力するときには、Shift-jisなりUTF-8なりにする、と。

というわけで、UNICODEに変換する方法です。

                lookup = ('utf_8', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213',
            'shift_jis', 'shift_jis_2004','shift_jisx0213',
            'iso2022jp', 'iso2022_jp_1', 'iso2022_jp_2', 'iso2022_jp_3',
            'iso2022_jp_ext','latin_1', 'ascii')
                for encoding in lookup:
                    try:
                        hoge = hoge.decode(encoding)
                        break
                    except:
                        pass

ファイルから読み取るなりGUIから入力された文字を読み取るなりする場合には、とりあえずこれを挟んでUNICODEデコードするといいみたいです。

で、出力するときにはエンコードをする。

.encode("UTF-8")

だとか

.encode("Shift-jis")

をくっつければいいみたいです。技術志向 | Python 文字コードの判定と変換を参考にしました。

作業フォルダを実行ファイルのあるフォルダに

ファイルのはじめの方に、以下を追加すると、作業フォルダを実行ファイルのある場所に固定できる。もちろんosインポートしておきましょう。

os.chdir(os.path.dirname(sys.argv[0]) or '.')

アイコンの作成

EDGEを使う。僕は横幅32縦幅32で作った。

Editor

LREditXyzzy+py-modeというのが選択肢としてあるみたいだ。

僕はずっとLREditを使ってた。

Ctrl + E Ctrl + Oで、アウトラインが出るのが便利。

2012-06-13

ソフトウェア配布用のHP作りました

あいさつ

つかさです。

ここでSETZERの更新をするたびに記事を書くというのもあれなので、配布用のHPを作りました。

hoehoeSoft

f:id:tukasa1919:20120613123905j:image

バグとか要望とかありましたらtwitterなりメールなり何なりで知らせてください。

2012-06-12

Python用メニューとTree

Pythonスクリプトを実行するためのPPxメニュー。

  • Pythonの実行」は、アプリケーションを終了しても窓を閉じないように
  • 「py2exe」は実行ファイルの作成用
  • 「Tree」はPythonには関係ないが、たまにフォルダ構造のコピーをとりたいときのため。今まではフリーソフトでやってたがこっちのほうが楽だと気づいた。
M_cmdMenu	= {
Pythonの実行	= CD %1 %: C:\Python27\python.exe %FCD
py2exe	= CD %1 %: C:\Python27\python.exe setup.py py2exe
Tree	= CD %1 %: Tree
}

2012-06-11

wxPythonでAA管理ツールを作ろう!閑話休題 AAの登録

あいさつ

つかさです。

今回からは応用編です。基礎的なやり方を学んでいく、というのからはずれます。

問題点

AAを管理する方法で問題になるのは、「一々AAの登録をするのが面倒」ということに尽きると思います。

  • AAに一意的に名前を付けられるか。たとえばつかさAAは複数あるが、それぞれをどう名付けるのか
  • 名前をつけるのが難しい場合はどうするのか
  • 名前を付けたとして、分かりやすいものならいいが、それ以外ならあとで検索して、たどれることが無理になるのではないか

データベースみたいなのを作って、一々タグを付けて管理していくというのもありえますが、個人でやる以上、手間がかかりすぎて破綻すると思います。また一意的にタグをどのようにしてつけるかも難しそうです。用途に合わせてというのも、AAの場合では無理でしょう。

またデータベースを集団で作るというのも、それで有用なのができるのかどうか。誰でもたどれるキーなんてあり得るのか。

画像管理の方法の応用

そこで思いついたのが、画像管理の方法の応用です。

画像というのは、ネットで落としてきた場合でも、名前というのは適当なわけです。一意的に名付けなんてしようがない。ならばどう管理するかというと、フォルダ分けを使うわけです。猫耳でもケモナーでもテリシアでも柊つかさでもめがねっこでも、とりあえずフォルダを作って名前で判別するようにしておく。そしてそのなかに、ファイル名は適当で画像を放り込んでいく。そして、あとで画像を探す場合には、そのフォルダ名からありそうなフォルダへまずいって、そのあと内容を表示して、その画像をめくっていって目的のを見つける。こういうことをするわけですね。

  • ファイル名は適当

f:id:tukasa1919:20120611121558j:image

  • 画像表示をして管理

f:id:tukasa1919:20120611121557j:image

AA管理への応用

これを応用するとどうなるか。AAにあわせて、フォルダを用意するわけです。柊つかさ、中指、お断りします、みたいにAAにあわせてカテゴリ分けをする。そして、そのなかにファイル名は適当に、AAを放り込んでいく。あとは、検索するときにはそのフォルダ名をキーにして、目的のフォルダへまずいって、そのあとでそれをひとつひとつツールチップ表示で閲覧しながら目的のAAを探す。

D:\bin\SETZER\AAList
└─AAList
    ├─お断りします
    ├─ねじれ
    ├─ほむら
    ├─まどかマギカ
    ├─ゆのっち腹パン
    ├─ゆるしてにゃん
    ├─ティッシュ
    ├─テリシア
    ├─ビンタ
    ├─中指
    ├─化物語
    ├─柊つかさ
    ├─矢印
    └─長門有希

フォルダ名をキーとすることで、その中のファイル名は適当でもよくなるのですね

実装へ

で、このような構造を作ったとしてどうやってそれをプログラムで実装するか、です。

まずはじめに考えたのが、fenrirの方法をまねること。ディレクトリとファイルというように分離し、ディレクトリモード、ファイル検索モードと分離する。

そして、ディレクトリにヒットしたら、カーソルキーを横に押せばそこにあるファイルが一覧表示。それにカーソルをあわせると、ツールチップ表示がなされる。

fenrirにツールチップ表示がついたのを考えてくれるといいと思います。まあこのように、モード分けをしたランチャを作ってしまえば可能なわけですね。

問題点は、ランチャを作る手間がいるということ。今まで作ってきたのよりははるかに複雑なわけです。さらに、ListBoxではなくListCtrlを使う必要が出るでしょう。さっすがにAA管理ツール程度で、そこまでやるのはなあという気がします。

発想の転換

そうして思いついたのが、「キーをディレクトリ+連番にする」です。

どうせフォルダに放り込んだのなら、名前なんて見ないんだからどうでもいい。それなら、そのフォルダにあるファイルをすべて、「ディレクトリの名前+連番」にして、ListBoxに他のと一緒に並べたらそれでいいのではないか。それと、対応するパスを辞書で結びつければそれでいい。そうすれば、そのディレクトリの名前を検索すれば、その中にあるのがヒットし、表示される。あとは、そこからツールチップ表示で選択すればいい。

柊つかさディレクトリに入れたテキストファイルは、そのファイル名にかかわらず次のように表示され、それぞれがキーとして、そのパスと結びつけられることになる。

このようにすれば、一々ディレクトリ構造を実現する必要もないし、また名前とか適当なままフォルダに放り込んだとしても何の支障もない。またルートフォルダにおいた、ファイル名をつけてそれで判別したいファイルとも矛盾しない。ただ、ルートフォルダには名前-数字.txtというのをおかないようにすればいいだけだし、おいたとしたってAAが一つ表示されなくなるだけでたいしたことではない。

工夫

工夫として、名前-1のファイルをリストの上の方に並べれば、検索キーにもなるだろう。

ここではフォルダ構造は一階層のみだが、複数にすることもやろうとすればできるはず。

まとめ

ということで、ではこれを実際にどうやって実装するかという話を次回行います。

このあたりにくるともう、最初の趣旨の、基本的な作り方を知ってみるとかいうのとはかけはなれてきてるような。応用編というか、参考にしたいひとだけ見るという感じでしょうね。僕はこう進んだ、という一つのサンプルとしてご覧下さい。