グッバイはてなダイアリー
あいさつ
つかさです。
ブログを移転します。移転先はつかさのほえほえ日記です。
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:..ヽ、彡,´ 、ミミ゙ー"⌒:ヽ _/.:._ :. `'ー-、〃;" ,, ,、 、ヾツ ...;;ヘ ⌒゙ー:...._ `;,,_ ''≠彡ッ彡;,ソ,,リ、,ミ㍉゙ 丶-‐....::::;;〉
Pythonでプログラムを作るときのTips
あいさつ
つかさです。
プログラム本体とは関係ないが、詰まったりしたことのメモ
py2exeの使い方
実行ファイル形式にするので定番が、py2exeらしい。
ここからダウンロード。Pythonのバージョンによって、違うのをインストールしないとだめのようだ。僕は2.7を使ってるのでpy2exe-0.6.9.win32-py2.7.exeをダウンロードした。
そしてこれをインストール。
では、これで実行ファイルを作る方法。
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で作った。
ソフトウェア配布用のHP作りました
あいさつ
つかさです。
ここでSETZERの更新をするたびに記事を書くというのもあれなので、配布用のHPを作りました。
バグとか要望とかありましたらtwitterなりメールなり何なりで知らせてください。
Python用メニューとTree
wxPythonでAA管理ツールを作ろう!閑話休題 AAの登録
あいさつ
つかさです。
今回からは応用編です。基礎的なやり方を学んでいく、というのからはずれます。
問題点
AAを管理する方法で問題になるのは、「一々AAの登録をするのが面倒」ということに尽きると思います。
- AAに一意的に名前を付けられるか。たとえばつかさAAは複数あるが、それぞれをどう名付けるのか
- 名前をつけるのが難しい場合はどうするのか
- 名前を付けたとして、分かりやすいものならいいが、それ以外ならあとで検索して、たどれることが無理になるのではないか
データベースみたいなのを作って、一々タグを付けて管理していくというのもありえますが、個人でやる以上、手間がかかりすぎて破綻すると思います。また一意的にタグをどのようにしてつけるかも難しそうです。用途に合わせてというのも、AAの場合では無理でしょう。
またデータベースを集団で作るというのも、それで有用なのができるのかどうか。誰でもたどれるキーなんてあり得るのか。
画像管理の方法の応用
そこで思いついたのが、画像管理の方法の応用です。
画像というのは、ネットで落としてきた場合でも、名前というのは適当なわけです。一意的に名付けなんてしようがない。ならばどう管理するかというと、フォルダ分けを使うわけです。猫耳でもケモナーでもテリシアでも柊つかさでもめがねっこでも、とりあえずフォルダを作って名前で判別するようにしておく。そしてそのなかに、ファイル名は適当で画像を放り込んでいく。そして、あとで画像を探す場合には、そのフォルダ名からありそうなフォルダへまずいって、そのあと内容を表示して、その画像をめくっていって目的のを見つける。こういうことをするわけですね。
- ファイル名は適当
- 画像表示をして管理
AA管理への応用
これを応用するとどうなるか。AAにあわせて、フォルダを用意するわけです。柊つかさ、中指、お断りします、みたいにAAにあわせてカテゴリ分けをする。そして、そのなかにファイル名は適当に、AAを放り込んでいく。あとは、検索するときにはそのフォルダ名をキーにして、目的のフォルダへまずいって、そのあとでそれをひとつひとつツールチップ表示で閲覧しながら目的のAAを探す。
D:\bin\SETZER\AAList └─AAList ├─お断りします ├─ねじれ ├─ほむら ├─まどかマギカ ├─ゆのっち腹パン ├─ゆるしてにゃん ├─ティッシュ ├─テリシア ├─ビンタ ├─中指 ├─化物語 ├─柊つかさ ├─矢印 └─長門有希
フォルダ名をキーとすることで、その中のファイル名は適当でもよくなるのですね
実装へ
で、このような構造を作ったとしてどうやってそれをプログラムで実装するか、です。
まずはじめに考えたのが、fenrirの方法をまねること。ディレクトリとファイルというように分離し、ディレクトリモード、ファイル検索モードと分離する。
そして、ディレクトリにヒットしたら、カーソルキーを横に押せばそこにあるファイルが一覧表示。それにカーソルをあわせると、ツールチップ表示がなされる。
fenrirにツールチップ表示がついたのを考えてくれるといいと思います。まあこのように、モード分けをしたランチャを作ってしまえば可能なわけですね。
問題点は、ランチャを作る手間がいるということ。今まで作ってきたのよりははるかに複雑なわけです。さらに、ListBoxではなくListCtrlを使う必要が出るでしょう。さっすがにAA管理ツール程度で、そこまでやるのはなあという気がします。
発想の転換
そうして思いついたのが、「キーをディレクトリ+連番にする」です。
どうせフォルダに放り込んだのなら、名前なんて見ないんだからどうでもいい。それなら、そのフォルダにあるファイルをすべて、「ディレクトリの名前+連番」にして、ListBoxに他のと一緒に並べたらそれでいいのではないか。それと、対応するパスを辞書で結びつければそれでいい。そうすれば、そのディレクトリの名前を検索すれば、その中にあるのがヒットし、表示される。あとは、そこからツールチップ表示で選択すればいい。
柊つかさディレクトリに入れたテキストファイルは、そのファイル名にかかわらず次のように表示され、それぞれがキーとして、そのパスと結びつけられることになる。
このようにすれば、一々ディレクトリ構造を実現する必要もないし、また名前とか適当なままフォルダに放り込んだとしても何の支障もない。またルートフォルダにおいた、ファイル名をつけてそれで判別したいファイルとも矛盾しない。ただ、ルートフォルダには名前-数字.txtというのをおかないようにすればいいだけだし、おいたとしたってAAが一つ表示されなくなるだけでたいしたことではない。
工夫
工夫として、名前-1のファイルをリストの上の方に並べれば、検索キーにもなるだろう。
ここではフォルダ構造は一階層のみだが、複数にすることもやろうとすればできるはず。
まとめ
ということで、ではこれを実際にどうやって実装するかという話を次回行います。
このあたりにくるともう、最初の趣旨の、基本的な作り方を知ってみるとかいうのとはかけはなれてきてるような。応用編というか、参考にしたいひとだけ見るという感じでしょうね。僕はこう進んだ、という一つのサンプルとしてご覧下さい。
SETZER ver0.1 公開
あいさつ
つかさです。
今までのAA管理ツールから大きく変更しました。クリップボード管理を中心にしてます。
Download SETZER ver.0.1.zip
※最新版はhoehoeSoftに
- 常駐してホットキー(デフォルトだとCapsLock)でOnOffトグル
- クリップボードを監視して履歴を再利用
- Tabによる切り替えで、クリップボード履歴モード、AA貼り付けモード、ブックマークモードが使える
- SnapTextの機能(クリップボードを監視してテキスト形式で保存)の組み込み
- UNICODE対応
- Migemo対応
要はeClipだとかClip.netみたいな、クリップボード履歴を取得、蓄積して再利用するツールです。
操作はeClipだとかとほとんど同じです。インクリメンタルサーチかカーソルで目的のアイテムを選択し、Enterを押すことで、直前までアクティブだったウィンドウに貼り付けることができます。
- ウィンドウを閉じる→ESC
- アイテム選択→カーソルキー
- 選択アイテム貼り付け→Enter
- モードの切り替え→Tab
Tabキーを押すことで、モードが切り替わります。リストボックスに表示されるリストが
- クリップボード履歴
- AAリスト
- ブックマーク
- また最初へ
と切り替わり、Enterを押したときの挙動も変化します。
できること
クリップボードモード
クリップボードにコピーされたテキスト一覧が表示されます。
インクリメンタルサーチかカーソル移動でアイテムを選択し、Enterを押せば、直前までアクティブだったウィンドウにその文字列を貼り付けることができます。
AA(アスキーアート)モード
テキストファイル形式でAAListにためたAAを一覧表示します。
Enterを押すことで、直前までアクティブだったウィンドウに、そのAAを貼り付けられます。
AAを登録する場合は、AAListフォルダか、AAListのサブフォルダに、テキスト形式で保存してください。
使い方
とりあえずMigemoを使えるようにしましょう。これを使わないと、このソフトの意義は半減します。
辞書の取得
まず、Migemoの辞書を手に入れます。
KaoriYaに行き、C/Migemoをダウンロードします。僕が落としたのは、cmigemo-default-win32-20110227.zipでした。
それを解凍した中に、
- han2zen.dat
- hira2kata.dat
- migemo-dict
- roma2hira.dat
- zen2han.dat
というファイルがあります。UTF-8フォルダ内にあるものとcp932フォルダ内にあるものの二種類がありますが、どちらでもよさそうです。これを、SETZERのDictフォルダにコピーします。
SETZER.iniの変更
次に、SETZER.iniをエディタで開き、MAINセレクションのisearchtypeの値を1に変更し、保存します。
isearchtype = 1
これで、次回起動時に、ローマ字のままで日本語を検索することが可能になります。
- クリップボードモードでも
- AAモードでも
- ブックマークモードでも
このように、ローマ字で日本語を検索し、絞り込むことができます。
SnapText ver0.1 & SETZER ver0.03 公開
あいさつ
つかさです。
SnapTextとSETZERの新しいバージョンを公開します。
SnapText
常駐してクリップボードを監視し、テキストがクリップボードにコピーされればそれをテキストファイル形式で、指定したフォルダに自動保存するソフトです。ScreenShotをとればそれを自動でjpgとかにして保存してくれるソフトと、似たようなものと思ってくれていいです。
想定してるのはSetzerとの連携です。AAを大量にAAListのサブフォルダにためたいという場合にこれを用いるとはかどります。
SnapTextを起動し、AAList内の柊つかさなり暁美ほむらなりピングドラムなり好きなフォルダを指定し、そのキャラのAAがおいてあるAA保管サイトに行けば、もうあとは欲しいAAを選択してコピーを繰り返すだけで、AAを登録できるわけです。
Download SnapText ver.0.1.zip
※最新版はhoehoeSoftに
SETZERの更新
今までは、AAList内のファイルがShift-Jisで無い場合は読み込めませんでしたが、それに対応しました。UTF-8とかでも大丈夫です。
Download SETZER ver.0.03.zip
※最新版はhoehoeSoftに
今後の予定
次回あたりのバージョンから、SETZERを常駐させ、eClipやClip.netみたいなクリップボード管理ツールに変更しようと思ってます。AA管理は、その一つのモードという仕方で残すことになります。
あと一々ブログの記事にして載せるのも何だし、GoogleSitesとかで新しいHPを作ってそこに置くようにしようかとも思ってます。