Make組ブログ

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

DjangoCongress JP 2019を主催したよという話

DjangoCongress JP 2019というイベントを主催しました。 2018年もDjangoCongress JP 2018 を主催しましたが、今年も主催しました。 全員であわせて130人くらいが参加するイベントになりました。 「130人にもなるとやっぱ人多いなぁ」 と、集合写真を撮ってい…

雑談: YouTubeの話題を共有できなくて寂しいのでオススメのYouTuberを共有したい会

ブログを読まなくなって久しいhirokikyです。 最近はYouTubeばかり観ています。Twitterのみる頻度が減って「話題」についていけて無い寂しさを感じる今日この頃です。 そこで オススメのYouTuberを紹介して僕の友達にも観てもらおう という記事です。 そして…

雑談: 約束の時間に早く行き過ぎる病

僕は待ち合わせというのがすごく苦手です。何なら、先に予定が入っていると不安になります。 楽しい飲み会でも、「1週間後にこの時間で」となると、その間の時間ソワソワしてしまって急激にテンションが下がります(予定が始まればすごく楽しい)。 それで、…

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…

匠メソッドでステークホルダーをこぼさない発想法 〜 使う人と買う人が違うときがある?

匠メソッドのステークホルダーモデルは、価値分析モデルや要求分析ツリーと比べると簡単に見られがちに思います。 ですが、 ステークホルダーをこぼすと、価値も要求もこぼれていきます 。 今日はステークホルダーを発想していく方法を紹介します。 罠なのは…

Marketo(マルケト)のメールで変数(トークン)からリンクを作るときはスキーム(https...)をなしにすべきらしい

Marketo で動的なメールを書くときの話です。 以下の条件での話です Marketoでメールを書く メール内のリンクを、リードのフィールド値などトークンを使いたい メール内のリンクのクリックをトラッキングしたい このとき、変数の値を https://example.com/ …

aiohttpのWebSocketクライアントの実装をソースコードリーディングしていく

こんにちは、最近 aiohttp をすごく使っています。 Web-DBな処理はDjangoで実装して、非同期処理が必要なサーバーやクライアントをaiohttpで書くという住み分けをしています (今までNode.jsを使っていたところをaiohttpで実装しています)。 平たく言うとaioh…

なぜ食べ物を残してはいけないのに積読をするのだろう?

「食べ物を粗末にしてはいけない」と言われても、それを疑う人はいないと思います。 幼少期から全日本人が教えられていることだと思います。強制力の違いはあれど、誰しも教えられたことだと思います。 ですが、粗末にしてはいけないのは食べ物だけでしょう…

雑談: AIは牛乳を注ぐ女の夢を見るか?

雑談です。 AIは牛乳を注ぐ女の夢を見るのか? 牛乳を注ぐ女というのはフェルメールのあの絵のことです。 ja.wikipedia.org 今の世の中はAI、ディープラーニングの話題がホットです。 ですが今言われるAIはとどのつまり機械学習で、僕が学生のときは「弱いAI…

Djangoのresponse.set_cookieはmax_ageを指定すればexpiresが勝手に計算される

DjangoでCookieを設定するときは response.set_cookie を使います。 response = TemplateResponse(...) response.set_cookie("key", "value", max_age=3600) 今まで知らずに expires も自分で計算して設定していましたが、 max_age を指定して expires を指…

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…