プログラミング
指定フォルダ内の全ファイルについて、文字コードを自動判定して読み込み、 UTF-8に変換して保存するカスタムタスクを作成する。 文字コード自動判定については、下記のページでJcode.pmを参考にした関数が 紹介されているので、そちらを使わせていただく。 …
便利タスクを作っていく上で、実行時に処理対象を指定したりできた方がいい、 ということでユーザー入力を受け付ける方法を調査した。 方法としては2つあって、どちらもプロパティ(変数みたいなもの)に ユーザーからの入力を代入するというもの。 nantコマ…
仕事でC#を使うことになったので、勉強している。 たとえ練習でも、どうせ作るなら役に立つようなプログラムの方がモチベーションがあがるので、 コマンドラインで簡単に実行できるような便利コマンドを作りながら、言語の仕様とか、ライブラリの 使い方を習…
iPhoneのReederアプリでGoogle Readerの記事を読むようになってから スター機能を多用するようになったので、スターをつけた記事をはてブと 連携させる簡単なWebアプリを作成した。 やり方としては、 Google Readerでスター記事ページを公開する スター記事…
他の環境で使えるように最新版の設定をアップしておく。 たいした内容じゃないですよ。 _vimrc set number set fenc=utf-8 set fencs=utf-8,iso-2022-jp,euc-jp,cp932 set enc=utf-8 set backupdir=~/tmp/vim set directory=~/tmp/vim set nowrap set tabsto…
下記のコマンドを実行する python manage.py create_user -h localhost:8080 -u ユーザー名 --no-secure パスワードを聞かれるので、入力したらユーザー作成される。
Jinja2を導入すれば簡単に国際化できると思ったら大間違いだった。 Jinja2と国際化フレームワークのBabelを使うことで、Djangoの国際化機能と同じようなことが実現できる、 ということだったらしい。何度か「Kay Frameworkにしときゃ良かったか...」と思った…
Jinja2の国際化機能が使いたかったので、テンプレートシステムを今まで使っていた DjangoテンプレートからJinja2に移行した。Kay Framework に移行することも考えたのだけど、 大分作り込んじゃったサイトだったので断念し、テンプレートだけを変更。 移行自…
FoursquareのAPIのv2でモバイル版の認証画面が使えたりjsonpが使えたりするらしいので、移行してみた。 OAuth認証処理が少し変わったので、それに合わせて作成した認証用クラスや処理を公開。 下記のような認証用クラスを作成した。 foursquare_oauth.py fro…
jQuery Mobile http://jquerymobile.com/ いろいろはまったので、メモ。 バージョンは 1.0 ALPHA 2。 page毎にHTMLを分けて作成する これは好みだと思うのだけど、URL直指定でそれぞれのページを呼び出せたりするようにするなら、分けた方が簡単な気がした。…
Synapticパッケージマネージャで入るバージョンは0.0.2で辞書の追加や z/などでの記号入力ができなかったので、最新版(1.3.4)をインストールした。 既にパッケージマネージャでiBus-skkをインストールしてる場合は削除しておく ダウンロード https://github.…
色々パターンがあるみたいけど、今回僕がハマったパターンは、 ubuntuのアップデート後に再起動して、OS選択画面で「Ubuntu」を選択したら Unknown command (loadfont) と一瞬表示されてから自動的にまた再起動されてしまう、というもの。 色々試してみた結…
Windows(Vista)のappengine開発サーバがあまりにも遅いのでUbuntuに切り替えようと思い、 調べてみたらパーティションの設定もいらないお手軽なデュアルブート環境構築方法が見つかったので 試してみた。 https://wiki.ubuntulinux.jp/UbuntuTips/Install/Wu…
こちらを参考にしました http://www.freia.jp/taka/blog/356 import re f = open("error_log") pattern = re.compile(r"\[client (?P<ip>[0-9\.]+)\]") ips = {} for line in f: m = pattern.search(line) if m: ip = m.group("ip") ips[ip] = ips.get(ip, 0) + </ip>…
$ ls -S http://database-tearoom.seesaa.net/article/49061637.html より
以前下記のURLでAppEngineでの全文検索についてあれこれ考える記事を書いたけど、実際に実装した例を載せてみる。 http://d.hatena.ne.jp/piro_suke/20100721/1279643738 検証してないけどあまり多くのデータを検索対象にするには向いてないと思う。 1ユーザ…
FoursquareのAPIを使って場所系のサービスでも作ってやろう、 と思い立って作っている。 APIドキュメントのRate Limitingを読んだところ、 認証済みの場合は認証ユーザー毎、認証していない場合はIPアドレス毎に 1メソッドにつき1時間200アクセスまでと制限…
Google AJAX Search API http://code.google.com/intl/ja/apis/ajaxsearch/ ドキュメントに掲載されているサンプルでは備えつけのフォームや検索結果を表示する ようになっているのだけど、Javascript内で検索処理を実行して 結果をJSONで処理する方法もあっ…
DjangoのAdmin管理画面でForeignKeyを使用したモデルを編集する場合、 プルダウンを生成して参照先のオブジェクトを簡単に選択できるようにしてくれる。 しかし、プルダウン生成時に全てのオブジェクトを取得してきてしまうので、 参照先のデータが増えてき…
別の記事でも書いたけど、個人で開発しているWebアプリでは、だいたいjQuery UIを使用してる。 今回はその中でもよく利用しているdialogの使い方をまとめておく。 dialog機能を使うと、割と簡単にエラーダイアログやフォーム表示用のサブウィンドウを作成す…
こちらのRuby版を参考にしました。 http://d.hatena.ne.jp/tohtas/20100221/1266778938 サムネイル等で画像を縮小してから正方形にcropする。 image_api.py from google.appengine.api import images def resize_image(image_data, width, height): """画像…
Google App Engine には今のところ全文検索機能がないので、色々試してみた。 検索処理についての知識は、Web+DB Pressの53号を読んだ程度。 やりたいことは、 Twitterみたいな感じで各ユーザーが短い文章を登録するようなサービスで、その発言内容からキー…
分かりにくいタイトルだけど。 1つのファイル内に同じパターンにマッチする箇所が複数ある場合に、 個々の箇所でデータを名前つきグループ化して抽出したい場合に使える。 例えば、HTMLファイルの中からテーブルの各行から個々の列の値を取り出す時とか。 パ…
デコレータ便利。この例では呼び出しと引数だけをログしてるけど、 処理にかかった時間の計測とか、色々できそう。 log.py import logging def log_api_call(func): def decorator(*args, **kwargs): logging.info("API: %s called. params: %s %s" % (func.…
Google App Engineを使うようになって、リクエスト時間の節約のために 重いページ(HTML)のロードは最初の1回だけにして、以降はページ遷移なしで AjaxでJSONのやりとりをしてビューを変更するような方法をとることが多くなった。 UIについても毎回デザイン…
set guifont=DejaVu\ Sans\ Mono\ 10 set guifontwide=VL\ ゴシック\ 10 変えてみたらめちゃキレイでやる気でた。
ページ上で3日以内に更新された記事に「New!」と表示したりする場合に使えるフィルタを作ってみた。 datetime型と、yyyy-mm-dd形式の文字列の両方に対応。 がんばったらもっと色々なフォーマットに対応できるだろうけど、がんばれなかった。 使う時はエラー…
djangoのカスタムタグやカスタムフィルタを利用する場合はloadタグでファイル名(モジュール名)を 指定してロードする。 これまたアプリ名は必要なく、モジュール名だけで呼び出せるのだけど、 そのままだと名前がかぶる可能性があるのでアプリを指定して呼び…
djangoでデータベースのデータをインポートする時は fixtureデータを用意してloaddataコマンドでインポートする。 loaddataコマンドはアプリの指定無しでfixture名を指定するだけでインポートしてくれるのだけど、 そのままだと名前がかぶる可能性があるので…
簡単でした。 .hg/hgrc に書いてある親パスを変更するだけ。 [paths] default = ... (ここ)