Make組ブログ

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

卑下すると自分にも他人にも良くないんじゃないかという考え

「悪く言っても、自分のことだから良いだろ」と言えばそうです。 でも僕は卑下することはすごく損失が大きいことだと思っています。 ここで言う卑下は、何かあるたびに自分(や自分の周りの人やもの)を悪く言う、癖みたいなもののことです。 卑下 自分をあ…

Djangoのcacheのキーには必ず文字列を指定しよう

Djangoのキャッシュ(cache)にはキーを文字列として指定しましょう。 >>> from django.core.cache import cache >>> cache.get("mykey") # OK >>> cache.get("1") # OK >>> cache.get(1) # よくない キャッシュバックエンドの実装によっては数値でも指定で…

仕事を人に任せられず忙殺されてる人へ: 小さな組織向け業務設計の方法

こんな悩みはありませんか? なぜか忙しくてメインの仕事が進まない 人に任せられない仕事を常に抱えている 人に任せたは良いがうまくいかない 私はあります。日々仕事をする中で悩んでいます。その中で実践して、見つけたことを今日はお話します(まだまだ…

ウィーンモダン展に行ってきたWebアプリ開発者の感想

今日は、総合的な芸術、そして人の集まりというものの大切さを感じました。 ウィーンモダン展というものに先ほど行ってきましたのでその感想です。 artexhibition.jp 展示会として、行くべき? 個人的な感想の前に答えておきます。 今この記事を読んでくれて…

Slackで「お節介しちゃうチャンネル」が増えすぎて疲れてませんか?ROM専力を鍛えよう

仕事用のSlackで時間と集中が奪われすぎていないでしょうか。 Slackは相当優秀なコミュニケーションツールですが、あまり反射的に使っているとSNS疲れのような状態になってしまいます。僕は「お節介しちゃうチャンネル」が増えすぎると疲れて良くないと最近…

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

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

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サーバーを使…