Make組ブログ

Python、Webサービスや製品開発、ライブラリー開発についてhirokikyが書きます

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…

aiohttp.ClientSessionのリクエストをaioresponsesでモックする。特定のホストへのアクセスは許可する

aiohttp.ClientSession() でのアクセスをテスト時にモックしたいときに、 aioresponses というライブラリーが使えます。 github.com Pythonのrequestsライブラリーを簡単にモックできる responses というライブラリーがあるのですが、そのresponses-likeに使…

pytest-asyncioとpytest-aiohttpを一緒に使うとRuntimeError got Future attached to a different loopがでる

pytest-asyncio と pytest-aiohttp を同時に使うと、テストの中で使うイベントループが別のものになってしまってエラーが出ます。 RuntimeError: Task <Task pending coro=<...> cb=[...]> got Future <Future pending> attached to a different loop github.com github.com aiohttpを使ってるWebアプ</future></task>…

asyncioとpytestでテスト用fixtureを作るときにgot Future <Future pending> attached to a different loopが出る話

Pythonでasyncioを使うアプリケーションのテストを書くとき、event loopに気を遣ってあげないとエラーになるという話です (今回はaiohttpを使ってWebアプリを作っているときに起こりました)。 こんなエラーがでました。 RuntimeError: Task <Task pending coro=<...> cb=[...]> got</task>…

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

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

プログラミングすると「イライラ」する。向いてない?への回答

ふとこの前プログラミングを教えているときに言われたことです。 「プログラミングをしていると『イライラ』してしまうんですが。。」 「プログラミングをしてイライラしてしまう自分はプログラミングが向いてないんじゃないか」とか、「良くないことなのか…

DjangoGirlsTokyo 4 でコーチをしました #djangogirls

DjangoGirls Tokyo #4 でコーチをしてきました。 私がコーチをするのは 第1回目 以来です。 djangogirls.org 進め方としては、 Django Girls Tutorial というチュートリアルを参加者の方が進めて学んで、コーチがサポートします。 このチュートリアルはかな…

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

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

27歳になりました

今日で27歳になりました 人生とか語り出すなんて、 Break out! 五億年先でいい 「BREAK OUT!」 相川七瀬 より NANASE AIKAWA BEST ALBUM "ROCK or DIE"アーティスト: 相川七瀬出版社/メーカー: motorod発売日: 2013/09/04メディア: MP3 ダウンロードこの商…

作りたいWebアプリのアイディアを迷走せずに作る方法。まず、エディターを閉じることから始めよう

何かを作りたいときは、エディターをいきなり起動してはいけません。 エディターを閉じて、まずはイメージをまとめることに集中しましょう。 なぜこの文章が必要か なぜ何かを作る前にイメージをまとめる必要があるのでしょうか? 頭の中には完璧な作りたい…

仕事で書いた匠メソッドをCacooに移行した

先日、匠メソッドをCacooで書くととても良いという話をしました。 匠メソッドについてや、Cacooで使うメリットは以下を読んでください。 blog.hirokiky.org そこで PyQ チームでもCacooを使って匠メソッドをしてみることにしました (もともと、開発当初から…

Cacooで匠メソッドをやると、Webで同期するし同時編集もできるし良い、という話

何かを開発するとき、いきなりエディターを立ち上げていませんか? 製品、サービスを作るときは要求、要件を分析してまとめてから作るのがオススメです。 そんなときに匠メソッドという要求開発の手法を、僕個人も BeProud の仕事でも使っています。 匠Metho…

gunicornでPython製Webアプリケーションを動作させよう(DjangoとFlask)

前の記事ではWSGIアプリケーションをWSGIサーバー(gunicorn)で起動する方法を説明しました。 ここではgunicornを使って、Python製WebフレームワークでできたWebアプリケーションを起動しましょう。 blog.hirokiky.org なぜgunicornなどのWSGIサーバーを使…

Spacemacsでvue-modeかつflycheckする

emacs(Spacemacs)+ vueファイルをずっと模索している。 というのもjs2-modeがmmm-modeに対応しないので、JSを書くときにjs-modeで不便だったりする。 web-modeを使っても似たようなものなので、なんとかしたいこの頃。 模索中の設定 .spacemacs に以下追加…

HTMLのli要素でアイコンフォントを使って、かつ改行時にインデントを揃えるCSS

css

アイコンフォントを使って li 要素の list-style をカッコよくします。 li要素の list-style でアイコンフォントを一覧の頭に表示するには、以下のように擬似要素を使ってできます。 この例では Material Icons アイコンフォントを使っています。 ul { list-…

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

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

「RPGの宿屋」は必要ない?

今日は、このツイートが良い疑問を投げてるなぁと思ったので、僕の考えをまとめました。 RPG宿屋いらないんじゃ説。街に行くたびに必ず使うインフラかつ、宿泊そのものにゲームとしての価値要素がない。毎回ルーチンワークになるならば、街に帰還したら自動…

宝探しと仏像彫刻と、ものづくり

あなたが何かを作るとき、どういうイメージでものを作っていますか? 日経なんかを読んでいるとスタートアップが買収されたとか不祥事をおこしたとか事業撤退、転換したという話を毎日読めます (僕は日経とかそういうニュースは好きで読んでいます)。 そう…

#stapy Pythonのコア開発者のパネルディスカッションでモデレーターをしました

photos.google.com Start Python Club主催のPython Global Meetupというイベントで登壇しました。 https://photos.google.com/share/AF1QipPtD1KElDUYuK8aRbWrmA0YgMoEUiI9xdPiZlzJg1_jEbpi8VQRuQ5r7e-W8CdxjA?key=eEJsSUVZWExaZXExY0tJN21vYXd1UTZZMWtvckpR…

CodeMirrorでphrasesオプションを使ってUIを日本語化できるようになったという話

2018年8月25日にリリースされたCodeMirrorの5.40.0から、検索ダイアログなどのUIを日本語化できるようになりました。 New features New method phrase and option phrases to make translating UI text in addons easier. github.com 何が嬉しいのか CodeMir…

DjangoRestFrameworkのSerializerから関数/メソッドの結果をフィールドの値として返す

DjangoRestFrameworkのSerializer(ModelSerializer)で、フィールドの値を関数/メソッドの結果で返したいことがあります。 これはバリデーションとしてSerializerを使うのでなく、モデルから辞書に値を変換したい場合の話です。 例えば、フィールドの日時が…

Ansibleでファイルの存在確認にstatを使ったら大きいファイルには動作が遅すぎたのでやったこと

Ansibleでファイルが存在しているかによって処理を分けたいことがあります。 そんなときは stat を使うとできますが、対象のファイルが数GB単位で大きいと処理が遅くなります。 下の例ではファイルが存在しないときだけ実行するタスクを書いています。 - nam…

Ubuntu18.04でDockerのDNS解決がホストのDNSにならない問題の話

Ubuntu18.04でDocker (17) を動かすとホストのDNSの設定を使わずに 8.8.8.8 を使ってしまう問題がありました。 何が困るかというと、AWSで動かしている場合ローカルのDNSを使わずにパブリックIPを引いてしまうとSecurityGroupの許可設定が効かないことです。…

pay.jpでプランを変更すると変更前のプランの金額で決済される不具合(修正済み)に当たった

注意書き 以下の本文は情報だけを伝えようと書いています。 この文章は個人や企業を評価する意図はありません。 本文 pay.jp で定期課金のプランを契約期間中に変更すると、変更前のプランの料金で決済される不具合に当たりました。 この不具合は現在(2018/…

クラウドファンディングは支援(バック)するときが気持ちの最高潮なのかなと思った

www.kickstarter.com クラウドファンディングは支援(バック)するときが気持ちとして最高潮なんじゃないかなって思ったという話です。 僕はクラウドファンディングが好きでKickstarterで色々眺めたり支援したりしています。 PebbleTime、PebbleTime2、HighP…

Ubuntu18.04でIMEの切り替えが遅い気がしたのでibusからfcitxに変えた

Ubuntu18.04を使っていてIMEの切り替えがどうにも遅い気がした。 ほんの0.5秒程度もたくつ気がするレベルなんだけど、HTMLとか書いていると頻繁に英語と日本語の入力を切り替えるのでかなりストレスになっていた。 原因は分からないけど、とりあえずibusから…

ツールやプロセスやメソッドも大事だけど、人や中身や見えない文化も大事だと思っている

僕はツールとかプロセスじゃない、人とか中身とか文化とか空気感みたいなのが大事だと思っている。 自分自身、エンジニアというか、ステレオタイプのThe工学の人間的な発想じゃないのは思ってる。 まず最初に。開発メソッドとかツール、プロセスっていうのは…

軽いi7のノートパソコンにUbuntu入れたいならASUS ZenBook Flip S をオススメしたい

こんなノートパソコンが欲しい人にオススメしたい Intel Core i7 第8世代(Kaby Lake Refresh)4コア メモリー16GB 13インチ Full HD 重さ1kg USB-C給電 Ubuntuがインストールできた キーボードが悪くない ASUS ZenBook Flip Sをオススメしたい ASUS ZenBook…

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

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