Dropbox is a big user of Python. It’s our most widely used language both for backend services and the desktop client app (we are also heavy users of Go, TypeScript, and Rust). At our scale—millions of lines of Python—the dynamic typing in Python made code needlessly hard to understand and started to seriously impact productivity. To mitigate this, we have been gradually migrating our code to stati
日本語の自然言語で書かれたテキスト中から、日付や時間、期間、頻度といった時間に関する表現を抽出し、Pythonのdatetime/timedelta形式に変換できるPythonパッケージ ja-timexを作りました。この記事では基本的な使い方や動作の仕組み、このパッケージの実装方針を紹介します。 ja-timexとは 皆さんも一度はテキスト中に現れる日付や時間を正規表現でパースした経験があるのではないでしょうか?もしくはdatetime.strptime(str, '%Y/%m/%d %H:%M')といったように、datetimeに変換するパターンを書くこともあるでしょう。こうしたプログラム上で日付や時間を扱うことはよくある作業であるものの、入力されるフォーマットが複雑になったり、日付がテキストの中の一部に含まれたりすると、途端に処理が面倒になります。日付や時間は決まったルールに従ってい
Pythonに型ヒントが入ってからしばらく経ちます。型ヒントの立ち位置も、なんでもできるアノテーションとして導入されましたが、型ヒント以外の用途はあまり育たず、型ヒントが中心になり、PEPや仕様もそれに合わせて変化したり、より書きやすいように機能が追加されてきました。 本エントリーでは、Python 3.9時点での最新情報を元に、現在サポート中のPythonバージョン(3.6以上)との互換性の情報も織り交ぜながら、最新の型ヒントの書き方を紹介します。 本エントリーの執筆には、Pythonの型の有識者の@moriyoshi、@aodag、@tk0miya にアドバイスをもらいました。ありがとうございます。 環境構築Visual Studio CodeVisual Studio Codeの場合は、事前にどのインタプリタを利用するかを設定しておきます。その環境にインストールします。venvを使う
Pythonで標準ライブラリのみを使ってシンプルなジョブキューシステムを作りました。キューはRedisを使わずにインメモリに保存します。 この記事ではQueickの特徴と使い方、ジョブキューシステムについての説明、よく使われているシステムでの実装、Queickのアーキテクチャと実装について説明します。 0. きっかけ 以前Raspberry PiとNFCリーダーとSlackで研究室の入退室管理(打刻)システムを作ったのですが、Raspberry Piのネットが途切れてSlackに打刻されないことが1-2週間に1回ありました。 moriokalab.com そこでジョブキューシステムを導入して非同期にリトライする仕組みを組み込もうと思いいくつか探したのですが、基本的にキューとしてredisを使っているようでした。 Raspberry Piの中にRedis入れて運用するのが嫌でインメモリで閉じ
非同期プログラミング 非同期プログラミングについて、聞いたことのある人は多いと思います。例えば、フロントエンドで使われているJavaScriptはシングルスレッド言語で、メインスレッドをブロッキングさせないため、様々な関数は非同期処理になるよう実装されています。Node.jsもその性質を受け継ぎ、I/Oバウンドタスクに長けています。しかし、Pythonになると、並列・並行処理に対応しているため、ほとんどの人は自身のプロジェクトで非同期プログラミングを利用した経験がないでしょう。もちろん、Tornado、TwistedやGeventなどの非同期フレームワークが有名で使ったことのある人は少なくないですが、変わったエラーにぶつかった時はなかなか解決できないでしょう。 近年のPyConの傾向から見れば分かりますが、非同期プログラミングは間違いなくPythonエコシステムの次のトレンドになります。ま
Pythonとの出会いとOSSのきっかけ はじめまして、フリーランスエンジニアの服部(@hhatto)です。 現在は、ブロックチェーン関連のWebアプリケーション開発やフォント制作販売会社での研究開発・技術顧問をしています。 業務外では、OSSの開発を行っており、Python/PHP/C/Go/Rustで作成したライブラリをオープンソースとして公開しています。特にautopep8というPythonのコード整形ツールは3500以上のStarを集めました。 https://github.com/hhatto/autopep8 ▲autopep8 今回は、OSSに打ち込む理由やメリットを中心に、OSSを起点にしたキャリア形成について紹介できればと思います。 Pythonとの出会い 私がPythonに触り始めたのは、大学時代、『How to Become a Hacker』というサイトを見て影響を
Even if you write clear and readable code, even if you cover your code with tests, even if you are very experienced developer, weird bugs will inevitably appear and you will need to debug them in some way. Lots of people resort to just using bunch of print statements to see what's happening in their code. This approach is far from ideal and there are much better ways to find out what's wrong with
※最新版(2021年バージョン)がこちらにありますので合わせてご覧ください! 毎年恒例, Python本と学び方の総まとめです!*1 プログラミング, エンジニアリングに機械学習と今年(2019年)もPythonにとって賑やかな一年となりました. 今年もたくさん出てきたPythonの書籍や事例などを元に, 初心者向けの書籍・学び方 仕事にする方(中級者)へのオススメ書籍 プロを目指す・もうプロな人でキャリアチェンジを考えている方へのオススメ を余す所無くご紹介します. 来年(2020年)に向けての準備の参考になれば幸いです. ※ちなみに過去に2019, 2018, 2017と3回ほどやってます*2. このエントリーの著者&免責事項 Shinichi Nakagawa(@shinyorke) 株式会社JX通信社 シニア・エンジニア, 主にデータ基盤・分析を担当. Python歴はおおよそ9年
とある個人プロダクトを作ろうと思いついた時に、自分で欲しいなと思ったたのもあり、Pythonでとあるライブラリを作成してみました。 今回開発したものJpndlpyという名前の国立国会図書館から情報を取得するHTTPクライアントライブラリを作成しました。 国立国会図書館は、書籍タイトルや著者などの図書情報をAPIとして公開しています。国立国会図書館のAPIはいろんなプロトコルでAPIを公開しており、今回はOpenSearch形式のAPIからHTTPで図書情報を取得するためのPythonから使えるHTTPクライアントのライブラリを作成しました。 GitHub内などを探してみても同じような物を作っている方がいなかったため、自分が欲しかったというのもあり、開発してみました。 PyPiにも公開しましたので、随時アップデートしていく予定です。 国立国会図書館とは国立国会図書館とは、日本国内で発行された
Python 3.0 以降では、関数を定義するときに、キーワード専用引数 を指定できるようになりました。 def func(a, b, *, c=1, d=2): return a+b+c+d こんなのですね。引数のリストに * がある関数を呼び出すとき、* の後ろにある引数の値は、かならずキーワード引数として指定しなければいけません。 ↑の関数だと、引数 c はキーワード引数で指定すればちゃんと動きます。 >>> func(1, 2, c=10) 15 しかし、キーワードなしで呼び出すとエラーになります。 >>> func(1, 2, 10) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: func() takes 2 positional arguments but 3
古来、Pythonでは「代入は文であるべき!」と一貫して主張してきました。 C言語などでは、代入は足し算や掛け算と同じ、値を計算する「式」で、たとえば a = (b=100) / 2; と書くと、b には 100 を代入し、a に 100/2=50 を代入します。1+1 は 2 という値になる 式 ですが、b=100 も同様に値が 100 となる 式 なのです。 Pythonでは、代入は式ではないので、こういう書き方はできません。 Pythonの代入は、足し算などの演算子の仲間ではなく、if や for のような制御文の仲間で、あまり自由な書き方は出来ないのです。 Python FAQ では、その理由として Python の式中での代入を許さない理由は、この構造によって起こる、他の言語ではありがちで見つけづらいバグです: if (x = 0) { // error handling } e
Python の GUI フレームワークである Kivy は、そのままだと日本語が表示できない。 そこで、インポートするだけで日本語を表示できるようにするパッケージ japanize-kivy を作った。 github.com 知っている人はピンと来るはずだけど名前や思想は以下のパッケージをインスパイアしている。 github.com 使った環境は次の通り。 パッケージがサポートする Python は 3.6 以上を想定している。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.6 BuildVersion: 18G84 $ python -V Python 3.7.4 もくじ もくじ インストール 試す フォントのライセンスに関して インストール pip からインストールできる。 $ pip install japanize-k
この記事では、前回( Python で gRPC の単体テスト)に引き続き、 Python で gRPC を使う際の知見をご紹介します。 主に、メタデータとインターセプターの実装法と、そのテスト方法がメインになっています。 まだ experimental API だったり非 public クラスだったりしているので、公式のアナウンスがあるまではプロダクション利用は難しいようにも思いました。 目次 エラーの取扱 メタデータについて メタデータを利用する例 サーバー クライアントライブラリ メタデータを利用するクラスをテストする例 サーバー クライアントライブラリ インターセプタについて インターセプタを利用する例 サーバー用 クライアント用 インターセプタを利用するクラスをテストする例 サーバー用 クライアント用 まとめ エラーの取扱 gRPC のエラーの方法は、 gRPC Errors が
「ここで改行するほうがキレイで良いと思います」 『いや、私はこちらのほうがキレイ良いと思います』 コードレビューでこういう議論をしたことはありませんか? 大切なことだとは思いますが、生産性にはあまり直結しません。議論を避けるために書き方を決めるほうが良いでしょう (個々の問題について逐次議論するのがエネルギーを無駄にしてしまいます。一度決めて、再利用するようにしたいものです)。 今日はそのために使える black というツールを紹介します (「私はflake8を使ってるから結構です」と思われるかもしれませんが、少し違う話なので読んでみてください)。 blackを使おう Pythonのコードを自動でフォーマットしてくれる black を紹介します。 github.com blackはPythonのコードフォーマッターで、自動的にPythonプログラムの書き方を修正してくれます。 PEP8 と
よくプログラミング初心者の方に「PythonとRubyの違いを教えてください」と聞かれるので書いておきます。 免責 あくまで僕がプログラミング初心者さんに説明するときにこの説明を使うよという視点です。読んでる方が思う視点とか別の意見はぜひご自身のブログに書いてください(読みますので)。 違いはたくさんありますが、5分で簡潔に伝わる違いを伝えたいと思っています。 あと私はPythonをずっと10年近く使っていますが、Rubyはちょっとだけです。でもRubyもとても良い言語だと思っています。 (コードサンプルの色味が読みにくくてごめんなさい。気が向いたら直しときます) 本文 プログラミング初心者に簡単にPythonとRubyの違いを説明する場合ベストは「Pythonはより明示します。Rubyはより略せます」だと思っています (あくまでプログラミング初心者に5分以内に伝えると考えたときの視点です
ひょんなことから全文検索システムを作ることになり、いろいろ調べたことを備忘録的に記録しておく。 自分はいつもPython+Tornado+Nginx+MongoDBの構成でWebアプリを書いていて、この環境で手軽に全文検索ができたらいいなぁと思って試行錯誤した結果、本稿のようなことができることが分かったので公開しました。 【やりたいこと】 ・全文検索(基本的にN-gram。できれば記事内の単語を元に関連記事の表示や単語の編集など) ・主に.txtのファイル内のテキスト本文を対象とする ・アカウントを発行して外部にも公開 (ここは本記事の趣旨から外れるので除外する。) 【環境】 ・さくらVPS 2Core 1GBメモリ ・CentOS 6.2 ・Python 2.7.2 ・Tornado 2.4.1(フレームワーク) ・MongoDB 2.2.3(データベース) ・Nginx 1.2.6(W
砲撃する自走砲(PzH2000自走榴弾砲)。自走砲は戦車によく似ていますが、戦車ではありません。*本編とは関係ありません。 こんにちは、エムスリー基盤開発チーム小本です。 Pythonのパッケージ管理周りでは、 「setup.pyでrequirements.txtを読み込むのが普通なんですよね?」 「pipenv があれば venv はオワコンなんですね?」 「pyenvは要らないんですよね!?」 「Pythonは歴史が古い分、Rubyなどに比べてカオス」 みたいな混乱をよく目にします。 実際、複数のツールがあって(一見)複雑です。また「なぜこうした状況にあるのか」がドキュメント化されているわけでもありません。 なので、私なりに整理してみることにしました。 ※「追伸」を追加しました。この記事では汎用プログラミング言語としてPythonを使うケース(Webアプリとか、CLIツールとか、ライブ
はじめに コードは理解しやすくなければいけない。 リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) 作者:Dustin Boswell,Trevor Foucher発売日: 2012/06/23メディア: 単行本(ソフトカバー) コードの保守性や可読性を高めるために我々エンジニアはどんなことができるでしょうか? テストを書く 推奨されているコードスタイルに準拠する コメントを書く DRY原則に則る 変更・拡張しやすく設計する ログを出力する・監視する 適切な命名をする etc... まだまだ意識すべきことはあると思いますが、上記の項目はエンジニアであれば恐らく一度は目にしたことがあるような内容であり、暗黙的に了承されたいルールです。 しかし、これらはただの心構えであり、体現するために実際には以下のような項目に落とし込む必要
この記事はPython その2 Advent Calendar 2018の遅れてきた15日目の記事です。 最近、クローリング用のプログラムのasyncioを使った並行処理のプログラミングをしており、「asyncioのベストプラクティス」という趣旨の記事を書こうと思っていたのですが、自分自身感覚を掴めておらず、「あれ?これってasyncioのAPI自体も微妙なのでは?」「そもそもasyncioのドキュメントのドキュメントを読んでも、どの機能をどう組み合わせて使えばいいか分からない」と思ってしまっていて記事を書きかねていました。 ただ、知人から「trioというライブラリのAPI設計が素晴らしい」と薦めて頂いたのと、あまりにも待たせてしまうのも申し訳ないのでひとまず「調べてみた」レベルでアウトプットを出します。 私はまだ並列/並行/非同期処理に詳しいわけではないので、大きな思い違いをしている可能
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く