超セレブな携帯向け割り勘電卓をPythonで書いてみた
携帯電話向け「割り勘電卓」を公開します - 頭ん中
さんを見て、PythonでCGIを書く勉強に書いてみました。
本体:
http://ama-ch.com/cgi-bin/warikan.cgi
均等割り電卓と同じ「ような」動作をします。携帯向けとか言いながら携帯向けにWebを作ったことなどないので、ただ携帯からも使えますっていうだけです。あ、テキストエリアにistyle="4"という値を与えると携帯の入力モードが最初から数字になることは弄ってて知りました。勉強になりました。
使いどころ:
せっかく作ったので使いどころを解説します。
一見パクリ低機能な電卓ですが、Pythonで書いているので通常のint型での最大値2^31=2147483647より大きい値でも正確に計算することができます。メモリが許す限り計算できます。
なので、お会計が21億4748万3648円以上の時に、ぜひ使ってください。まさにセレブ向けですね!
ちなみに僕の携帯の電卓では9999億9999万9999まで計算できました。
ソース:
相変わらず汚い><
http://gist.github.com/9649
#!/usr/bin/python # -*- coding: utf-8 -*- """ warikan.cgi 飲み会で使える割り勘電卓 """ import cgi import cgitb; cgitb.enable() print "Content-type: text/html" html = """ <html><title>割り勘電卓</title><body> <form action="warikan.cgi"> <p> 総額: <input name="amount" type="text" istyle="4" size="6" value="%s" />円<br /> 人数: <input name="persons" type="text" istyle="4" size="2" value="%s" />人<br /> </p> <input type="submit" value="計算する" /></form> <p>%s</p> </body></html> """ form = cgi.FieldStorage() #CGIに渡されたデータを取得 try: amount = int(form.getfirst("amount", "0")) persons = int(form.getfirst("persons", "1")) except: amount = 0 persons = 1 def calc(amount, persons): if not (amount % persons): warikiri = "一人あたり%d円です。<br />" % (amount / persons) # ぴったり額 else: warikiri = "" payment1 = (amount / persons) / 100 * 100 # 多め額 payment2 = (amount / persons) / 100 * 100 + 100 # 少なめ額 while payment1 * persons < amount: payment1 += 100 while payment2 * persons > amount: payment2 -= 100 return "%s一人あたり%d円だと、%d円余ります。<br />一人あたり%d円だと、%d円足りません。" % (warikiri, payment1, payment1*persons-amount, payment2, amount-payment2*persons) if persons and (amount / persons): result = calc(amount, persons) else: result = "" print html % (amount, persons, result)
便利なコマンドラインランチャをMac + Windowsで使おう その2
前回に引き続き、今回はWindowsのソフトをご紹介します。
僕はMac + VMWare Fusion + Windowsという組み合わせでシームレスにMacとWindowsを行き来しているので、WindowsでもLaunchBarとなるべく同じ機能・操作感になるようにしてみました。
Windows編 〜下準備〜
XKeymacs
WindowsでEmacs風のキーバインドを実現するためのソフトです。Macでは普通にC-F/C-B,C-N/C-Pのようなカーソル移動ができるので、矢印キーを押すために手を移動するのは非常に面倒です。
XKeymacsを使えばカーソル移動だけでなく様々なEmacs風キーバインドが使えるようになり、操作性が劇的に向上します。Unix/Linux系OSに慣れている人は、もはやこれが入ってないWindowsは使えないでしょう。
ただ、元々のWindowsのショートカットキーがほぼ全滅するのに加えて、操作対象アプリによってはXKeymacsでのキーバインドも受け付けないことがあります。僕の場合はFirefoxでC-Fを押してもC-Sを押してもページ内検索ができませんでした。
C-QでXKeymacsのON/OFFが切り替えられるので、利用したい機能によって臨機応変に切り替えるようにするとよさげです。アプリケーション単位で細かく設定できるのかも知れないけど、とりあえずこの使い方で概ね満足しています。
Windows編 〜fenrir〜
概要
fenrirは一応ランチャということになっていますが、個人的には「ファイルのインクリメンタルサーチソフト」という認識です。
入力した文字列を高速で検索し、部分一致したものをリストアップします。LaunchBarと同じように学習する賢いヤツで、一度選択したものは次回から優先的に表示されるようになります。
*.exeを検索・実行すればランチャになりますが、フォルダや*.exe以外のファイルも探せるので、簡易ファイラーにもなります。
fenrirを使えば、フォルダ名の一部を入力→Enterですぐに目的の場所へたどり着けます。これすごい便利!
使い方など
僕の設定や使い方を公開します。
・ホットキー
デフォルトではCapsLockですが、MacBookのCapsLockキーは押すとライトが付いたり消えたりして落ち着かないので、alt+英数キーにしました。なぜか英数キーは設定時に「CapsLock」と表示される。
・フォルダ展開キー
XKeymacsのキーバインドでC-F/C-Bを押してもなぜかうまくフォルダ展開ができないので、
Optionのフォルダ展開/親フォルダ展開をそれぞれCtrl+F/Ctrl+Bに設定します。
・スキャンファイルと場所の設定
data/scan.iniファイルでスキャンするファイルタイプと、スキャンから除外するパスを指定できます。
この除外パスを細かく指定するほどスキャンが高速になるので、なるべく丁寧にやりましょう。
僕のscan.ini↓
\;*.exe;*.com;*.exe;*.bat;*.txt;.doc;*.xls;*.ppt;*.pdf;*.ini;*.dll;*.html;*.htm;*.url;*.js;*.jpg;*.jpeg;*.gif;*.bmp;*.psd;*.ai;*.mp3;*.mid;*.wav;*.m4a;*.wma;*.rm;*.ram;*.mpg;*.mpeg;*.avi;*.mov;*.ogg;*.m4a;*.zip;*.rar;*.lha;*.lzh; C:\ -C:\Documents and Settings\Owner\Local Settings -C:\RECYCLED -C:\RECYCLER -C:\WINDOWS -C:\cygwin
何でも屋 デスクトップ高速検索1行ランチャ fenrirさんを参考にさせて頂きました。
・複数ファイルを選択できるようにする
data/fenrir.iniに
SingleSel=0
を追加すると、Shift+矢印キーで複数ファイルが選択できるようになります。
・Migemoを導入する
Migemoを入れれば英字入力のまま日本語が検索できるようになります!LaunchBarもこれ導入してほしい!
まずKaoriYa.netからバイナリ(DLL)リリース版 for Windowsをダウンロードして、解凍後fenrir.exeと同じフォルダにmigemo.dllとdictフォルダをコピーします。
次にfenrir.iniを編集します。
一旦fenrirを終了させた状態で、MigemoMode=3と編集すれば、小文字入力でMigemoサーチが開始するようになります。これで「desuku」とか入れればちゃんと「デスクトップ」が候補になります。やった!
Migemoのその他の情報はいまちゃんblog - fenrirがmigemoに対応してしまった。さんの情報が詳しくて丁寧です。
・あふと連携させる
fenrirはローカルファイルへアクセスするためのコストをかなり軽減してくれます。これだけファイルやフォルダが簡単に表示できるなら、次はコピーしたり移動させたくなるのは当然の流れです。
でもfenrirにファイルのコピーをするような機能はないし、かといってエクスプローラを開いてごにょごにょするのは手間だし・・・
よし、キーボード主体ファイラーを使おう!
・・・ということであふをダウンロードしてきます。Susie-PluginだのアーカイバDLLは各自
あふの設定と使い方 - 詫間電波高専 情報総合研究会
や
あふ v0.204 マニュアル
で調べましょう。
あ、アーカイバDLLのインストールはcaldixを使うのが断然ラクです。ボタン一発で完了!
あとはfenrirの設定を編集して、フォルダをあふに送れるようにします。
cmdフォルダを開き、以下のファイルを作ります。
1enter.txt
[.\\\; あふ左|"C:\Program Files\afx0226\AFX.EXE" -s -l"%P" ]
5enter.txt
[.\\\; あふ右|"C:\Program Files\afx0226\AFX.EXE" -s -r"%P" ]
これでフォルダを選択した状態でAlt+Enterであふ左ウィンドウで、Alt+Shift+Enterであふ右ウィンドウで開くことができます。
詳しい設定方法はwikiの解説に載っています。
Alt+Enterであふに送ればそのままあふがアクティブになるので、ファイルのコピーや移動もキーボードから手を離さずに行えます。ただあふはXKeymacsのキーバインドとかぶりまくるので注意が必要です!
あ、そういえばあふもMigemo対応してるんですよ。
えーとこんなとこかな。instant.iniを編集すれば色んなコマンド入力で色々できるようになりますが、そっち関係はLaunchBarでやっているので今回は触れません。
fenrirの欠点
かなり便利なfenrirですが、「ソフト名」で検索したり、インデックス名を編集することができません。
例えば「メモ帳」や「電卓」とか入力しても出てきてくれません。インストールしてあるゲームもexeファイルの名前がわからないと直接fenrirから呼び出すことができません。
ひとまずブラウズモードで何とかするか、後述のLaunchyを使うのが良いと思います。まぁフォルダやショートカットがヒットしてそこから辿れることが多いんですが。
Windows編 〜Launchy〜
参考
Launchy IT-Freak.com
Launchyもfenrirっぽいランチャです。多分スタートメニューをスキャンしてインデックスしているので、スタートメニューに登録されているワードで検索が可能です。
なので、先ほど述べたfenrirの欠点だった「メモ帳」も余裕で起動できます。むしろ「notepad」だとダメです。メニューにない言葉なので。なんてゆーか「スタートアップの代わり」って感じですほんと。
他にも「GO」と入力→Google登場→Tab→ワード入力でGoogle検索できたり、「rebo」で「System Reboot」が選べたり、数式を入れれば簡易電卓になったりと、ちょこちょこ気の利いた機能がついています。
fenrirの補助的な使い方をすると良い感じです。
使い方など
Launchyはほとんどいじらずに使っています。英語ソフトだしよくわからんってのもあるんですが。
とりあえずLaunchyはスキンが豊富でかっこいい!まずはスキンをダウンロードしてニヤニヤするのがいいと思います。
スキンはフォーラムかdeviantARTでダウンロードできます。
僕のオススメはKeepin It Greenです。爽やかな緑色でとってもクール!
えーとあとはオプションで
・Hide Launchy when it loses focus
・Always center Launchy
・Show hidden files in browse mode
この辺をチェックしてあります。ホットキーはデフォルトのAlt+Spaceのまま。
Pluginを入れたりすればもっと色々できそうですが、ひとまず満足しているので興味なし。
デフォルトではスタートメニューのソフトしか起動できませんが、OptionのCatalogタブでファイルタイプとパスを指定してあげれば色々なファイルがスキャンできるようになります。
僕はソフトを一通りC:\Program Filesに入れているので、Catalogタブで
・C:\Program Filesを追加
・左側のファイルタイプに「*.exe」を追加
・「Include executables」「Include directorys」をチェック
・下にある「Rescan Catalog」ボタンをカチリ
という作業をすれば、LaunchyからC:\Program Files以下の全ての*.exeファイルを呼び出せるようになります。
このCatalog編集をある程度やれば、メインランチャがLaunchyでもいけるくらい便利になると思います。
終わりに
2回に渡って今回僕が導入したランチャ環境+αを紹介させて頂きました。
MacではCommand+SpaceでLaunchBarが起動,Space3*1でWindowsへ移動し、Alt+英数でfenrirが、Alt+SpaceでLaunchyが立ち上がるようになっています。全て違うホットキーなのでかぶる心配もなく、非常に快適です。
コマンドラインランチャはいいですよ、手の移動がすごく少ないので、思考を邪魔しません。少し慣れと、細かくカスタマイズをするなら手間と少しの知識はかかりますが・・・。
メニュー型ランチャでアイテムを登録してカチカチするのが面倒だと思っているそこのあなた、この機会にぜひ乗り換えましょう!
*1:仮想デスクトップの名前のようなもの
便利なコマンドラインランチャをMac + Windowsで使おう その1
はじめに
みんな大好きランチャソフト!ある程度使うアプリケーションの種類が増えてくると、みなさんランチャを使い始めますよね?色々なランチャを調べたり使い比べて、自分にとって1番良いものを選ぶと思います。
僕は長らくOrchisを使っていましたが、今年の春にMacBookを買ったことで環境ががらりと変わり、改めて色々なソフトを見直してみました。
それで、今回導入してみたランチャ環境がWindowsでもMacでも幸せになれる感じなのでご紹介します。
僕がランチャに求めるもの
コマンド入力型
MacBookにマウスないからなるべくキーボードで済ませたい><
アイテムを登録する必要がない
ランチャは便利だけど、アイテムを登録するのがかなり面倒。インクリメンタルサーチな感じで提示してくれるのが良い!
ひとまずこの2点が大前提。MacとWindowsの両方でこれを満たせるソフトを紹介します。
Mac編 〜LaunchBar〜
今やマカーの僕ですから、最初はMacの方からいきます。
公式
概要
LaunchBarはPC内の(ほぼ)どんなアイテムにも一瞬でアクセスできるようにする起動ユーティリティです。このソフトを知ったから同じようなことをWindowsのソフトでもできないか調べたのが、このエントリのきっかけです。
19.95ドルのシェアウェアです。2200円くらいですね。フリーでも使えますが、しばらく使っていると購入を促すダイアログが出るようになります。*2
とんでもなく高機能でかつ安定しています。高機能な割に設定項目は少なくて、少々のカスタマイズですぐに威力を発揮します。ヘルプもとても丁寧に書かれており、わからない点は大体ヘルプを読んで解決できます。全文英語だけど、かなり優しい英語で書いてくれているので英語が苦手な人でも大丈夫!僕でも読めました!
あと詳しい解説は参考サイトでも読んでください><
使用例
・ホームディレクトリ以下の全ファイルを検索対象にする
Cmd+YでConfigurationを開いて、ホームフォルダを追加。OptionsでSearch Scopeを「Search All Subfolders」,Search forを「Any Item」にする。初回スキャンがフリーズしたみたいに重くなるので注意。
こうしておけば、ファイル名やフォルダ名の一部をLaunchBarに放り込むだけで目的のファイルが見つかります。もうFinderはいらない!
・見やすい辞書を導入する
主にAppleScriptの小物発表: LaunchBarにlarge-typeで辞書を表示するAppleScript
こちらで公開されているAppleScriptを適当なフォルダに展開します。
LaunchBarでdictionary yahoo.scptを呼び出す→スペース→単語入力で、画面上にYahoo!辞書から意味が表示されます。さっと調べられて便利!
Dictionary.appに単語を渡しても調べられますが、この方法だとDictionary.appにフォーカスが移ってしまい、英語を読み進めている時などはかなり邪魔になります。
・サーチテンプレートをカスタマイズする
LaunchBarはサーチエンジンを呼び出していつでも検索が可能です。
通常のサーチエンジン以外で自分がよく利用するものを登録しておくと、非常に便利になります。
「http://d.hatena.ne.jp/ama-ch/searchdiary?word=*」を追加すれば、このブログ内をLaunchBarから検索できるようになります。
Configuration画面の左側には「Search Templates(ほげほげ)」といくつか並んでいるのは、検索対象のページの文字コード種別によって登録する場所を変えるためです。はてダならソースを開くと最初の方に
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
と書かれているので、「Search Templates(EUC)」へ追加します。間違えてUTF-8に追加したりすると、日本語が化けてしまい検索できません。
Shift-Jisなどリスト中にない文字コードは、自分でCustom Search Templatesを追加してOptionで指定することで扱えるようになります。
・FirefoxのブックマークをLaunchBarから開けるようにする
デフォルトではFirefoxのブックマークがスキャン対象になっていないので、まずConfigurationのリストから「Firefox Bookmarks」にチェックを入れます。
Optionsを見ると、
/Users/ユーザー名/Library/Application Support/Firefox/Profiles/hogehoge.default/bookmarks.html
が指定されていると思います。もし違えばこれを指定します。ただFirefoxが通常ではこのファイルにブクマを吐き出さない*3ので、ちゃんと吐き出すように設定を変更します。
Firefoxのアドレス欄に「about:config」と打ち込み、「browser.bookmarks.autoExportHTML」をtrueにすると、(多分)アプリケーションの終了時にbookmarks.htmlを書き出すようになります。
これでLaunchBarからFirefoxのブクマも開けるようになりました!
・ついでにシェルコマンドも何個か実行できるようにする
Configurationの「Unix Executables」にチェックを入れ、Indexに/binの中身を適当にD&D。リスト内のコマンドはLaunchBarから実行できるようになる。実行時は新規にターミナルかiTermが開かれます。
辞書もそうだけど、LaunchBar+AppleScriptがかなり便利!
書けなくても最初からiTunesの操作やゴミ箱を空にしたり、ログオフ・再起動などができるスクリプトが用意されているので、それを使うだけでも十分便利です。
Mac番外編 〜QuickSilver・Butler〜
QuickSilverもLaunchBarと同じようなソフトです。むしろQuickSilverの方が有名なのかな?
僕も最初はこちらを使っていましたが、LaunchBarの方が軽くて安定している・シンプルで使いやすいという印象を持ったので乗り換えました。
また、QuickSilverはLaunchBarと比べて
という大きな違いがあります。
あと類似ソフトとしてButlerというのもあります。これは使ったことがないのでよく分かりません。クリップボード履歴が良いらしい?
Macにも良いソフトは沢山あることがよくわかりますね!
僕はたまたまLaunchBarが大ヒットしたけど、好きなものを使うのが良いと思います!
欠点もある
検索時に日本語を扱えないため、完全に日本語のアイテムが探せません><
LaunchBarとQuickSilverにはこの問題があります。Butlerは確か日本語も扱えます。
ただ、入力時に日本語(IMEのON/OFFとか)を考えなくていい分作業効率も上がるので、まるっきり欠点という訳でもないかも?
Migemoに対応してくれれば1番良いんだけどね!
現状での対応方法(LaunchBarのみ)
・Indexの日本語名をローマ字に書き換える
呼び出し名をローマ字にすれば良いんだけど、いちいち書き換えるのはめんどくさい・・・
・browseモードで探す
例えばhoge/あいうえお.txtというファイルをLaunchBarから開きたいなら、hogeを開いてファイルブラウズモードで階層を辿るという方法。数が多いと大変だけど、これが現実的かな?
意外と長くなってしまって疲れたので、Windows編は次回!
入門GNU Emacs 第13章まとめ
- 13章
- ヘルプシステム
詳細ヘルプコマンド
キー操作 | 表示内容 |
---|---|
C-h c | このキー入力がどのコマンドを実行するのか |
C-h k | このキー入力がどのコマンドを実行し、それが何をするのか |
C-h f | この関数が何をするのか |
C-h v | この変数がどんな意味で、その値は何か |
C-h m | カレントバッファのモード |
C-h b | このバッファすべてのキーバインディング |
C-h w | このコマンドのキーバインド |
C-h s | このバッファの構文テーブル |
C-h l | 自分が入力した最後の100文字 |
C-h e | このセッション中において、ミニバッファに表示されたメッセージは何か |
aproposコマンド
キー操作 | コマンド名 | 表示内容 |
---|---|---|
C-h a | apropos-command | この単語を含むコマンドは? |
なし | apropos-variable | この正規表現を含む変数は? |
なし | apropos-value | この正規表現が設定される変数は? |
なし | apropos-documentation | この正規表現が説明に含まれるドキュメントの場所は? |
なし | apropos | この正規表現を含む関数と変数は? |
入門GNU Emacsおわりー!
色々飛ばしたけど、ようやくEmacsに「入門」できた気がする。
Emacsは、エディタというより統合Lisp処理系という感じ。これが無料だなんて素晴らしすぎる。GNUばんざい!
EmacsのシェルモードでPythonを起動すると違うとこから起動する
Emacsをめでたくフルスクリーンでも使えるようになり、
- コード編集画面
- 実行・デバッグのためのシェルモード
- バッファ一覧など
という感じで3つのウィンドウを配置するようになりました。
シェルモードのおかげでEmacs上で実行までできて便利だなーと思っていたら、インストールしてあるはずのモジュールが「ありません」というエラーが。あれ?
変だなと思ってEmacsとiTermでsys.pathの出力を比べてみました。
・iTerm
>>> import sys >>> for i in sys.path: ... print i ... /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/simplejson-1.9.1-py2.5-macosx-10.3-i386.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/MySQL_python-1.2.2-py2.5-macosx-10.3-i386.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/setuptools-0.6c8-py2.5.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/mechanize-0.1.7b-py2.5.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/ClientForm-0.2.7-py2.5.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/py2app-0.3.6-py2.5.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/bdist_mpkg-0.4.3-py2.5.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/macholib-1.1-py2.5.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/modulegraph-0.7-py2.5.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/altgraph-0.6.7-py2.5.egg /Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5 /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/pygoogle /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/gtk-2.0 >>> len(sys.path) 21
>>> import sys >>> for i in sys.path: ... print i ... /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5 /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/PIL /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/gtk-2.0 >>> len(sys.path) 11
んん、明らかに違う場所から読み込んでる。本来はiTermの方が正しい(普段使ってる)んだけど・・・
ひとまずiTermの方のsys.pathをコピーしてPYTHONPATHを指定したらモジュールの読み込みはできるようになったものの、これじゃ応急処置だなぁ。なんでEmacsのシェルモードだと全然違うんだろう?原因は一体なんなんだー
あと、シェルモードでPythonのインタラクティブシェルを使っている時、for文中などでTabを押してもインデントされない。これもなかなか困る。