読者です 読者をやめる 読者になる 読者になる

外部API使用でも安心してコードをかくための、mock をつかったテスト

Twitter や Facebook に限らず、外部APIを叩かなければならない場面は出てくる。ただでさえテストコードかけないと不安になるのに、外部APIの挙動にあわせてうまく連携しないといけないケースでテストコードがかけないのはかなりこわい。そういうとき、mock …

Django のダミーデータを大量投入するスクリプトを対話環境に対応させるシェルスクリプトで自動化した

やっぱりだるかった Django アプリのダミーデータを大量投入するスクリプトをかく - AtAsAtAmAtArAのをコピペ運用でもよかったけど、コピペ条件かわったりいちいちもうそういうのだるかったので、やっぱりデータを初期化するところまで自動化することにした…

Facebook いいねボタンの挙動を localhost で検証する

Facebook app 登録 まあしましょう ドメイン設定が必要 app の設定で localhost とかだとなんかだめっぽかったので以下を参考にした localhost環境で、Facebook のJavaScript APIでOAuth認証をする - Goodpic testapp.comこの場合 Mac がローカルだからいい…

Django でメールを送信と確認

メールを送信する。Python 標準モジュールやライブラリにもありそうだけど、Django 組み込みであるのでそれを利用する。 日本語1.4::メールの送信 — Django 1.4 documentation つかう ドキュメントのままです from django.core.mail import send_mail send_m…

Python の全角半角処理に zenhan が便利

バリデーションとか検索とか だいたい全角半角でどうとか変換とかかませたりする。で、Python で有名なところだと zenhan というのがある。 導入 PyPi にある。うれしい。 pip install zenhan つかう 公式にもあるけど、ヘルプ見た感じでも難しくない import…

vim で python 開発するとき pyflakes + PEP8 = flake8 が便利

補完とかは Python 開発で便利な jedi-vim いれてみたらたしかにライフチェンジングだった - AtAsAtAmAtArA とかみよう。 PEP8 する必要があった 今まではシンタックスだけの pyflakes だけしてた。PEP8 はある程度守ってるけど80行折り返しと行間については…

django-debug-toolbar は便利(とVirtualboxのVMで表示にハマった件について)

class base view がわからない 存在は前から知っていたけど、まあ別にいいやって思ってて使ってなかった。でも久々の Django でいろいろ忘れてるし、あと 1.5 を使うのはいいけど class base view が mixin しまくってて拡張や仕様変更や保守に強そうという…

Sphinx のビルドをファイル監視して自動で行う

Sphinx でドキュメントを書く必要があったので、せっかくなので make html をいちいち手打ちしないで自動でビルドするようにした。 先人はいる ファイル監視してスクリプトってのはまあある話で、Python なら watchdog というのが使えるようだ。 参考 watchd…

パーフェクトPythonを読んだ

パーフェクトPython (PERFECT SERIES 5)作者: Pythonサポーターズ出版社/メーカー: 技術評論社発売日: 2013/03/05メディア: 大型本購入: 1人 クリック: 47回この商品を含むブログ (2件) を見る 1冊で言語仕様から最新の技術までを網羅した内容。網羅的に解説…

Python 開発で便利な jedi-vim いれてみたらたしかにライフチェンジングだった

+python コンパイルがだるそうだった Big Sky :: python 補完のVimプラグイン「jedi-vim」がスゲー をみてからきになってはいたけどだらだらしててやってなかった。./configure, make, make install さえだるい*1。けど、誰かの記事でまた「vim + python の…

はてなブログで簡易はてなカレンダーモジュール機能を実装する

ある人から「記事一覧機能はいいけど縦長すぎる。はてダみたいなのがほしかった」ほしいというのでどうやらそれっぽいものならできそうなのでつくってみた。所要時間は調査(5分)、実装(15分)、テストやデザインなどの調整(10分)って感じだったので30分くらい…

PhoneGap(Cordova)アプリで jQuery Mobile で複数画面遷移する HTML ファイルを生成する

HTML ファイルをどう扱うか考えていた というのが以前の記事 PhoneGap(Cordova) + jQuery Mobile でアプリを構築しようとして調べた雑多なこと - atas ベタ書きで固定フッターやヘッダーを出力するのはさすがに面倒だし絶対ミスがおこる。一般的な Web フレ…

拙い自分がコードレビューをする場合に気にするポイントはなんだろうという話

いつもはコードレビュー受ける側です コードレビューなんてできる立場じゃねーわと思いつつも、忙しくなってくるとなおざりになってくるし、しかしなにもしないのもいやなので「僕がレビューしてもいいですか?」って聞いたら「まあいいんじゃないの」ってこ…

テストかくとき skip とdocstring メモ

ほえー 知らなかったのでまとめておく テストを skip したいときは @skip デコレータが使える 参考::26.3. unittest — Unit testing framework — Python v3.4.0a1 documentation 実際は Django でやってるけど中身は似てるはず*1。まるまる引用すると class …

Django の Storage の exists が SuspiciousOperation でハマったけど別にそれ問題じゃなかった話

Storage を使う必要があるからつかってるんだけど、その Storage で実装されているものと os モジュールで実装されているものでは内部的に若干挙動が異なることがある。というかことなってハマった。 絶対パスか相対パスかって話 具体的には MySQL でこんな…

Fabricの階層化に使う @ task デコレータの挙動

fabric を扱う可能性が出てきた 今まで概要は知っていたけどもうちょっと知らないといけなさそうだしちょっとさわってみた 概要 公式::Fabric — Fabric 1.7 documentation 参考::Fabric デプロイツールのPythonicな書き方 - Ian Lewis 参考::Fabricを使って…

小飼弾氏の基調講演を聞いて各言語の join と正規表現の実装についてなんかまあ考えた話 #pyconjp

マサカリが飛び交ったPyCon2012 Day2 基調講演 講演を聞いたけど、いろいろ腑に落ちなかったりした。まあ各セッションとその講演についての感想は pyconjp2012 行ってきたよ各セッション感想 #pyconjp - atas に書いたのでそちらを参照してください。 404 Bl…

pyconjp2012 行ってきたよ各セッション感想 #pyconjp

感想をメモする おつかれさまでした たぶんいまごろ運営スタッフは打ち上げでしょう。正式にはまだ3日目のSprintもあるけど、自分は参加しないしこういうでかいイベント(YAPCやHTML5ConfやRubyKaigiやPHPカンファレンス)は行ったことがないので新鮮だった。…

Django の Storage よくわかんないけど無理やり握りつぶして粉砕した話(から、できるだけ例外処理しないロジックをつくりましょうの話)

Django の Storage ってのがあんまりよくわかっていない とりあえず公式ドキュメントは以下 カスタムのストレージシステムを作成する — Django v1.0 documentation 基本的にはなんかこう OS のファイルシステムみたいな感じにさわれる?まあストレージってい…

Python/Djangoやってて少しは例外処理に慣れてきた気がする

油断していると 500 エラーで落ちる なんかちょっと機能をつくったり改修していたりすると、その場では動いても、なんらかの形でデグレったり違う改修によって入力される想定されるデータとは異なるものがはいってきたりする。なので、例外処理必要。油断し…

__call__ と callable がよくわかんなかった話

なんかライブラリとかみてるとたまに __call__ とか callable がでてきた なので軽く調べたけど、a = A(); a() でフックっぽく呼ばれるというのはわかったけどなにがどう便利なのか正直わかんなかった。 イマイチ __call__ がどう便利なのかがわからなかった…

名前空間衝突させて10分くらいハマった話

なんか読み込みがおかしい import ssh ... ... conn = ssh.SSHClient() ... ... いろいろあって paramiko だけじゃなくて ssh モジュール単体で同じ事をやろうとした。しかしなぜか ssh モジュールがうまくうごかない。しかたないから dir(ssh) とか see(ssh…

SFTP で任意のディレクトリ以下のリモートファイルをコピーする

これもそんなに難しい話ではないです。SFTP で Python ってググったらたくさん paramiko がヒットするし、サンプルコードがたくさんみつかります。正直公式ドキュメントは見づらいのでいちおうソースコード軽く読んだりしたけど。 公式ドキュメント::API Doc…

pyftpdlib で簡易FTPサーバーを立てる

簡易的に FTP サーバーをたてるときにすごく楽。構築方法はググれば簡単だけど、いちおうまとめておく。 公式ドキュメントの参考::pyftpdlib - Python FTP server library - Google Project Hosting 導入 pip でいいです pip install pyftpdlib 構築 で、た…

fabricのenvって辞書が頭良かったので再実装してみた

fabric は Python製のデプロイなどを行うスクリプト 公式ドキュメントは以下 参考::Fabric — Fabric 1.4.4 pre-alpha (76f466d) documentation あとは @IanMLewis さんのドキュメントが詳しい 参考::Fabric デプロイツールのPythonicな書き方 - Ian Lewis で…

文字列フォーマットあれこれ

基礎的なところから >>> "%s" % 'hoge' 'hoge' >>> "%d" % 10 '10' >>> "%.02d" % 2 '02' さすがにここらへんはわかるんだけど "This %(hoge)s is %(moge)s" % { "hoge":"hogehoge", "moge":"mogemoge" } # hogehoge is mogemoge キーでとることもできる。 %…

blockdiagをMacでもUbuntu Serverでも導入する

最初に言っておく。PILが危険だ easy_install は危険だ!!!!インストールは簡単だがアンインストールがタルい!!!!*1PIL でハマるから pip を使うんだ!!!! Pythonの環境構築メモ - atas PIL まわりでハマる可能性はかなりあるから、公式ドキュメン…

os.mkdir()とos.path.exists()とos.path.join()とかの話

ある特定のディレクトリを掘りたかった もともと toge というディレクトリにファイルを吐き出すという処理をしていたいところに /hoge/moge/toge みたいに掘りたいという話になった。最初はおれは def generate_dir(base_dir): if os.path.exists(u"ほげ"): …

csv.DictReaderが便利

TSV(CSV)から要素(ヘッダー)を取り出して文字コードを変更してなんか処理したい時の話 - atas の続き CSVのある uniq な文字列のヘッダーに対して、その column をとってくる処理をおれはゴリ押しで index つくって作成していた。 import csv csv_file = csv…

TSV(CSV)から要素(ヘッダー)を取り出して文字コードを変更してなんか処理したい時の話

ジェネレータについて 普通のリストや関数を返すときは return で返してやればいいけれど、繰り返し処理ができるオブジェクト= itrable なオブジェクトのときは yield で一時的に処理を止めて一つづつ値を返すことができる。 # 関数の定義 >>> def hoge(): .…

PILとlibjpegがUbuntuでみつかんねーよっていうエラーの話

なんかPILいれたのにUbuntuでうごかねーっていう 結論としては libjpeg-devをいれる 適切な位置にシンボリックリンクを貼ってやる PILをいれる でよかった。 詳細 sudo apt-get install libjpeg-dev sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/l…

ユニコード文字列を含むファイルの読み書きにはcodecsを使う

ある複数のidから特定のidの状態をファイルに保存する簡単なスクリプトだったのだが # coding=utf-8 import requests def main(): ids = range(1, 100) with open('hoge', 'w') as f: for id in ids: data = {} data['No'] = id r = requests.post(PATH, dat…

「サーバーサイドの知識の無さに全俺が泣いた」レベルの入社当時の人に読ませたら少しはアドバイスになったであろうPythonとDjangoの前提知識メモ

前提知識大杉。なので自分が入社当時のスペックで知らなかったことを概説的に一気にまとめてみようと思う。これが誰か初学者の役に立ったら幸いです。 当時のスペック 中学校のころBasicに触れるものの、randomにlineひいただけ 高校のころ情報の授業でn進法…

QueryDictをどうにかして拡張してハッシュ化したパスワードでログインしたかった話

パスワードのハッシュ化は基本 まあそりゃ平文で保存するはずないのであるユーザーがあるパスワードをつくったときはハッシュ化します こんなmodels.pyがあるとする from django.db import models class User(models.Model): name = models.CharField(u"名前…

Ubuntu 11.10から12.04LTSに変えたらvirtaulenvが動かなくなった件について

pip freezeすらうごかない これではvirtauelenv環境がぶっ壊れたのとおなじじゃないか!!!! 解決方法その1::virtualenvそのものをつくりなおす Ubuntuを12.04にupgradeしたらvirtualenv環境で'cannot import urandom'と出るようになった - kk6のメモ帳* …

Skypeをキーボードショートカットでラクしたかった(Skype4Pyでがんばろうとしてダルくなった話)

Skypeは優れたグループチャットツールだが、キーバインド変えるとかないし、キーボード派にとっては拷問だ!!!! こんな腐ったプロダクトおれが正してやる!!!!ってSkype4Pyを漁ってたのだけど、デフォルトのキーバインドも悪くないことに今再気づいて…

minimockを使う、という話

あまり詳しいことはわかっていない 詳細はpypiの公式ドキュメント( MiniMock 1.2.8 : Python Package Index ) かminimockの使い方 - 今川館 を参考にしてください 自分なりの理解 モックはテストをする上でダミーとして差し替えるもの。もちろん本物のデータ…

今日のハマり(PythonとMySQL絡みとか)

pip install MySQL-pythonをいれるときにpython2.7-devが必要 python.hがありませんって言ってた。ググったらpython2.6-devだった。今回は2.7なので解決 sudo apt-get install python2.7-devあと mysql_configがないってエラーが言われた。libmysqlclient15-…

XMLをパースして辞書にしてリストの入れ子にする

たぶんもっとスマートなやり方があるとおもう 結果的に作りたかったのはこんな感じ [ {aaa:bbb, ccc:ddd} {eee:fff, ggg,hhh} ...... ] おれにはうまく思いつかなかったんや。ゴリ押しの方法。 DjangoのViews.pyです #AmazonAPIをセットする外部関数 api = A…

PythonでAmazonのAPIを使う

大まかな流れ APIキーを手に入れる ライブラリの選定 実際に試してみた python-amazon-product-api bottlenose 事前準備 - APIキーとアソシエイトタグの入手 ここのページを参考にしました。素直にアカウントとってAPIキーを発行してもらいます。アソシエイ…

JSのSyntaxまわりのvim環境を整える(ついでにPythonも)

CoffeeScriptは好きです だけど結局JavaScriptで書かなきゃいけないことも多いだろうし、せっかくなのでJSのSyntax関係を整えようと思った。 まずは処理系が必要です もっぱらNodeに頼ってるので(というかNodeの開発しようとしてるし)Nodeをインストールする…

CharFiledにつっこんだテキストを@やハッシュタグに対応するためにカスタムテンプレートフィルターをつくった

models.CharFiledは勝手にテキストノードっぽい感じでつっこんでくれる だからエスケープとか考えなくていいけれど、その代わり逆にinnerHTML的にあるテキストに対して書き換える動作をしたかった。そのためにはカスタムテンプレートを自作する必要があった…

Tweepyでt.coを展開する

APIドキュメントは古かった Welcome to tweepy’s documentation! — tweepy v1.4 documentation 1.4のドキュメントがSphinxであるのだけど、現在は1.8だし、Twitter APIの仕様もけっこう変わってたりする。一番大きいのはUserStraemなのかもしれないけど、今…

Djangoで他のオブジェクトをそのまま保存したかった

経緯 スカンディナヴィア半島2(Twitter Web クライアント)を作るためにDjangoでTweepyからとってきたオブジェクトをそのまま保存したほうがいいと思った tweetpy でとれたobjectをDjangoで保存したい→pickleしよう - Togetter 結論 無理だった。理由は2つ そ…

DjangoでMySQLを使うメモとか

環境 Ubuntu 11.04 インストール 普通にapt sudo apt-get install mysql-server sudo apt-get install python-mysqldb MySQLの設定 /etc/mysql/my.cnf の [mysqld] に追加 default-character-set=utf8 character-set-server=utf8 skip-character-set-client-…

CygwinでVirualenv環境を整えようとしてハマったメモ

いつも通り環境を構築すればいいだけだった Pythonの環境構築メモ - AtAsAtAmAtArA これのとおりにやろうとしたのに2つハマった。 その1::pipとvirtualenvとvirtualenvwarapperの設定を先にするのをわすれて、easy_installしたものをアンインストールしなけ…

正規表現とか重複とかハマったとことかのメモ

forms.py from hoge.models import User import re class CreateProfileForm(forms.ModelForm): checkbox = forms.CharField(label=u'規約に同意する', widget=forms.CheckboxInput()) class Meta: model = User fields = ('name',) def clean_name(self): n…

Mac OS X Lion にしたら mercurial と Virtualenvwrapper がぶっ壊レタ件について

結論 全部入れなおせ たぶん Python が2.7系になったからだと思う。 アンインストール+インストール gccをいれる Lionにするとgccが見つからないとかアホなことがおこるので入れなおす。*1 AppStoreでXcodeを入れて、インストール。アプリケーションからInst…

fabric情弱なおれがなんか教わったからてきとーにまとめておく

thx @xxx ++ おれがかくことはてきとーなのでid:xxx てんてーに聞くように!!!! fabricとは Pythonでシェルをラップしてくれる便利的なもの。それだけだったら別にシェルスクリプトでよくね?ってなるけど、 リモートで複数設定で使える Pythonでかける …

idという変数を使っていてTypeErrorでハマった

こんなviews.pyかいてた リファクタリングしていた def thread(request,answer_id): '''QAスレッドの閲覧と投稿''' user = get_user(request) is_answered = Answer.objects.filter(user=user,question__pk=id).count() > 0 if request.method == "GET": que…