Make組ブログ

Python、Webアプリや製品・サービス開発についてhirokikyが書きます。

Python

10年以上のノウハウを詰め込んだ「自走プログラマー」を執筆しました

自走プログラマー表紙 「自走プログラマー」という本が出ます! この本は僕と清水川さん、tell-kさんで、株式会社ビープラウドの仕事として書いた本です。 自走プログラマーには僕の10年来の開発ノウハウを詰め込みました。清水川さんtell-kさんに至ってはも…

Pythonのリストはイテレーターでない。わかりやすい(はずの)イテレーターとイテラブルの説明

こんにちは。 Pythonに関する書籍を書く際や、人に説明するときに「リストはイテレーター」と言っていませんか? それは間違いです。僕自身も勘違いしちゃうことがよくあるので、記憶を整理する意味でもブログにまとめておきます (もし間違えていたら教えて…

Djangoのマイグレーションで実行される処理(とSQL)を確認する方法

Djangoのマイグレーションで実行される処理(とSQL)を確認する方法を説明します。 先日の記事では「Djangoマイグレーションを無停止で反映する方法」を説明しましたが、そのためにはマイグレーションでどんなSQLが実行されるかが重要になります。 blog.hiro…

DjangoマイグレーションをWebアプリが無停止のまま安全に反映する方法

Djangoはデータベースマイグレーションの機能を持っています。 ですが、 実際、Djangoマイグレーションってどう使うの? という疑問が多いかと思います。 docs.djangoproject.com この記事では、 マイグレーションを稼働中のアプリケーションに、無停止でど…

ブログ記事に書くPythonコードはPEP8を厳密に守るべき?

ブログに書くコードスニペットはPEP8を厳密に守るべきでしょうか。 pep8-ja.readthedocs.io ブログ記事に書くPythonコードはPEP8を気にしすぎなくて良いのでは 僕はブログ記事に書くPythonコードは、PEP8をそこまで気にしないで良いと思っています。 ブログ…

invokeで実行されるコマンドをプロジェクトルートから実行する方法

invoke(pyinvoke)というプロジェクト管理用のツールを使っていたときに出た疑問の解決方法を説明します。 とはいえ、私自身もまだこの方法で良いのか疑問なので、より良い方法を知っている人はぜひ教えてください。 invoke(pyinvoke)とは プロジェクトでの開…

もうPythonの細かい書き方で議論しない。blackで自動フォーマットしよう

「ここで改行するほうがキレイで良いと思います」 『いや、私はこちらのほうがキレイ良いと思います』 コードレビューでこういう議論をしたことはありませんか? 大切なことだとは思いますが、生産性にはあまり直結しません。議論を避けるために書き方を決め…

PythonでValueError: I/O operation on closed fileを避けるためにwith open() return せずにコンテキストマネージャーにする

Pythonでファイルを with open してファイルを読む前に return しちゃうとファイルがクローズしてしまいます。 ValueError: I/O operation on closed file エラーが発生します。 def load(): with open(...) as f: return csv.reader(f) >>> for row in load…

PythonとRubyの比較をよく聞かれるので明示するか略せるかが違うよという説明をまとめておいた

よくプログラミング初心者の方に「PythonとRubyの違いを教えてください」と聞かれるので書いておきます。 免責 あくまで僕がプログラミング初心者さんに説明するときにこの説明を使うよという視点です。読んでる方が思う視点とか別の意見はぜひご自身のブロ…

Python3.8のPEP572 (Assignment Expression) とリスト内包表記でフィボナッチ数列を作って遊んだ記録

あつおさんがPEP572でフィボナッチ数列を作って遊んでいたので、僕も遊んでみた。 Python 3.8.0a1時点の話です。 はじめてのPEP 572書いた>>> [((p1+p2), (p3:=p1), (p1:=p2), (p2:=p3+p2))[0] for x in (range(2, 10), (p1:=1), (p2:=1))[0]][2, 3, 5, 8, 1…

Pythonのaiohttpでストリーム(aiohttp.web_ws.WebSocketResponse)をPipeする

最近Pythonの非同期処理、asyncioを使ったプログラムを書いています。 今までは非同期だとNode.jsを使っていたんですが、aiohttpや周辺ライブラリーが揃ってきたようなので使っています。 Node.jsの場合、Streamは stream.pipe(other_stream) のようにPipeで…

Pythonのtyping.Tupleで可変長のタプルとしてアノテーションする

mypy使っていますか?私は最近プロジェクトにも入れて使っています。 ですが typing.Tuple の扱いがうまく分かっていなくて、こんなプログラムを書いていました。 # 悪い例 import typing my_tuple: typing.Tuple[str] = () my_tuple = ('mymodule.myfunc', …

WSGIアプリケーションとは?WebフレームワークからWSGIサーバーまで

まえがき このブログ記事は、ある大きなドキュメントの一部のために書いています。 WSGIを説明している記事やドキュメント、本はたくさんあるので、このブログ記事で新しく説明されることはありません。 本文 PythonのWebアプリケーションは WSGI という仕様…

Djangoで親の親のモデルを1クエリーで取る

Djangoのモデルから親のモデルを取ると(select_relatedなどしていないと)1クエリー実行されてしまいます。 以下のように、親のさらに親を取ろうとすると2クエリー実行されます。 me.parent.parent me.parent の時点で1クエリー実行されて、 parent.parent …

DjangoでDB非依存に権限管理できるライブラリーdjango-keeperを作りました

Djangoで権限管理ってどうやっていますか? Django自体が持つGroupやPermissionはイマイチ業務では使えないというのが実際のところなのではと思います。 そんな悩みを解決するために django-keeper というライブラリーを作りました。 こんな悩みに: DBで権限…

DjangoでオレオレWidgetを作ってみた(Renderer編)

ウィジェットとは、Django で HTML の入力エレメントを表現するためのオブジェクトです。ウィジェットは、 HTML のレンダリングや、個々のウィジェットに対応するデータをGET/POST 辞書から抽出する処理を行います。 http://djangoproject.jp/doc/ja/1.0/ref…

Ubuntu で M2Crypto 使おうとしてハマった

Ubuntu で M2Crypto を使おうとしてハマった。 ImportError: /home/hirokiky/.virtualenvs/hogeenv/local/lib/python2.7/site-packages/M2Crypto/__m2crypto.so: undefined symbol: SSLv2_method エラー文は上記のようなものがでた。

#pyhack Python mini Hack-a-thon(第19回)に参加してきました

(第19回)Python mini Hack-a-thon - connpass#pyhackに参加してきました。3度目です。 やったことは Djangoのドキュメント翻訳 とあるイベントのミーティング

#pyhack Python mini Hack-a-thon(第18回)に参加してきました

(第18回)Python mini Hack-a-thon - connpass#pyhackに参加してきました。2度目です。

Webフィードが何語で書かれているかfeedparserで取る

Webフィードが何語で書かれているかという情報がどこにあるのかというメモ。 フィードの形式、バージョンによって若干違うようです。 fd = feedparser.parse(url) if fd.version == 'rss091u' #RSS0.91 lang = fd.feed.language elif fd.version == 'rss10':…

MeCabで集合知プログラミングのサンプルコードを日本語対応

MeCabを使って集合知プログラミングという書籍のサンプルコードの日本語対応をしてみた.書籍でも日本語対応について書かれてるけど,Yahoo!形態素解析が使われてるんでレスポンスが悪い.大量のデータを用いて分類機とかの性能を評価するには不向きなので,…

Python3 でドキュメントフィルタリング - Python Advent Calendar 2011

これは 2011 Pythonアドベントカレンダー(Python3) - connpass の記事です。 @ryoaita さんの指名を受けました、22日目の @hirokiky です。 このアドベントカレンダーはPython3に関することをみんなで書きましょうというものです。そこでこの記事では Python…

#pyhack Python mini Hack-a-thon14に参加

(第14回)Python mini Hack-a-thon - connpassに参加してきました 昼ご飯に食べたソーセージが美味しかった。 終わり。ってのは嘘

Python で値が整数が小数か判定する

Python で、入力された値が整数か小数か判定する関数を書いたのでメモ。 入力は float 型しか受け付けません。

O'REILLY配布のサンプルコード(集合地プログラミング 6章)にあるバグ

1ヶ月前にバグ報告したのですが、まだ反映されてません。 ダウンロードしなおして同じところでハマったので、こちらにも残しておきます。

#PyConJP 2011に参加してきました。

こんにちはhirokikyです。 Pythonのカンファレンスがあるということで、#PyConJPに参加してきました。 PyCon JP 2011 上の写真は、PyConJPでつけていたネームプレートです。 発表の内容はもちろん、イベント自体がとても楽しかったです。

htmlをプレーンテキスト化するPythonスクリプトでハマったこと

htmlをプレーンテキストにしたいなぁとググっていると html2text.py HTMLをプレーンテキストに: つちのこ、のこのこ。 こちらのhtml2text.pyが小さめで便利そうです。 しかしハマる点があります。

文字列が回文かどうかを判定する関数を書いた

Pythonの組み込み関数のzipに感動したのと、reversedと上手く組み合わせれたのが嬉しくて更新。