MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Googleなどで利用されているDesign Doc入門


How Google Works (日本経済新聞出版)

目次

  • 目次
  • はじめに
  • Design Docの要点メモ
  • 参考資料
  • MyEnigma Supporters

はじめに

GoogleなどのIT企業がソフトウェアを開発する際には

Design Docというドキュメントを利用しているそうです。

 

Design Docは「設計書」と訳されることが多いですが、

日本語の設計書とは少し意味合いが違うようです。

 

今回は、このDesing Docの要点を、

末尾の参考資料を元に勉強してみたので、

自分用のメモとしてまとめておきたいと思います。

続きを読む

SciPy 1.7.0がリリースされました


Mastering SciPy

目次

  • 目次
  • はじめに
  • Tweetまとめ
  • 参考資料
  • MyEnigma Supporters

はじめに

本日、

自分が開発者のメンバーとして参加している

SciPyの新しいバージョン1.7.0がリリースされました🎉

github.com

今回は、1.7.0の新機能や特徴を、

連続ツイートでまとめてみたので、

そちらを、あとから参照しやすいように

記事としてまとめておきます。

 

過去のバージョンの記事は下記の通りです。

myenigma.hatenablog.com

myenigma.hatenablog.com

 

続きを読む

各プログラミング言語における並行処理入門


Go言語による並行処理

目次

  • 目次
  • はじめに
  • 並行処理概要(async/await)
  • 並行並列処理関連用語まとめ
  • Pythonにおける並行処理
    • 並行処理によるHTTPリクエストサンプル
  • Juliaにおける並行処理
    • 並行処理によるHTTPリクエストサンプル
  • 参考資料
  • MyEnigma Supporters

はじめに

昨今、ネットワークを通して協調的に動くシステムを

作ることが多いため、

並行処理は重要な技術だと思います。

 

しかし、この並行処理は、様々な専門用語があり、

昔から分かりづらいなと思っていたので、

色々調べながらまとめてみました。

 

加えて、いくつかのプログラミング言語で、

実際にHTTPリクエストを並行処理で実施する

サンプルコードを紹介したいと思います。

 

続きを読む

Julia 1.6 Highlights まとめ


The Little Book of Julia Algorithms: A workbook to develop fluency in Julia programming

目次

  • 目次
  • はじめに
  • Twitterメモ
  • 参考資料
  • MyEnigma Supporters

はじめに

ついに待ちに待ったJulia 1.6がリリースされたのですが、

Julia1.6で導入された新機能に関して調べながら、

Twitterでメモを取ったのでまとめておきます。

続きを読む

PythonのデフォルトのUnitTestsではなくpytestを使うべき7つの理由

目次

  • 目次
  • はじめに
  • PythonのデフォルトのUnitTestsではなくpytestを使うべき7つの理由
    • 1. クラスを作らずにシンプルな関数でテスト関数を作ることができる。
    • 2. 様々なassert関数を覚えなくて良い
    • 3. テストが失敗した理由がわかりやすい
    • 4. テストの検索と実行が高機能 (auto discovery)
    • 5. 様々なプラグインが公開されており、簡単に機能追加できる
    • 6. UnitTestsで作成されたテストも実行できる
    • 7. テストの実行時間のランキングを簡単に作成してくれる
  • 便利なコマンドライン引数表
  • PythonのIDEとpytestの連携
  • 参考資料
  • MyEnigma Supporters

はじめに

これまで、自分はPythonのユニットテストには、

PythonのデフォルトのUnitTestsを使っていましたが、

docs.python.org

myenigma.hatenablog.com

自分がコントリビュートしているPython OSSの殆どが

pytestというテストフレームを使っていたので、

気になって調べてみました。

docs.pytest.org

PythonのデフォルトのUnitTestsではなくpytestを使うべき7つの理由

下記は、これまでPythonデフォルトのUnitTestsを使ってきた自分が、

pytestを使ったほうが良いなと思った7つの項目です。

 

1. クラスを作らずにシンプルな関数でテスト関数を作ることができる。

UnitTestsはJavaのユニットテストフレームワークである

JUnitをベースとして開発されているため、

docs.python.org

テストを作成する時に毎回UnitTestsクラスを継承した

テストクラスを作成する必要があります。

 

一方、pytestの場合、クラスは作る必要がなく、

test_*.py または、*_test.pyというファイルに、

test_*という名前の関数をさえ作れば、

pytestが勝手にその関数を検索して、テストとして実行してくれます。

 

これにより、テストを書く敷居がかなり低くなり、

テストを書きやすくなると思います。

 

2. 様々なassert関数を覚えなくて良い

UnitTestのテストは、assertTrueやassertEqualなど、

様々なassert関数を使ってテストを作成しますが、

どのようなassert関数使うべきか覚える必要があります。

 

pytestでは、Pythonのデフォルトキーワードである

assert文を使って、条件を書くことによりテストを評価します。

これにより、すべてのテストコードを一貫性をもって、

作成することができると思います。

 

3. テストが失敗した理由がわかりやすい

UnitTestsで作成したテストが失敗した場合、

そのテストが失敗したことはわかりますが、

なぜそのテストが失敗したのかは、

テストの結果をみるだけではわかりにくいと思っていました。

 

一方、pytestの場合、

下記の公式ドキュメントにあるように

失敗したテストに関しては、

それぞれの値がどのような値であったせいで、

テストが失敗したのかをわかりやすく表示してくれます。

docs.pytest.org

 

加えて、コマンドライン引数で設定することにより、

テストが失敗したときに定義されていた

それぞれの変数の中身なども表示することができ、

再度テストを実行しなくても、

テストのログだけで、ある程度のデバックができるようになっています。

 

4. テストの検索と実行が高機能 (auto discovery)

UnitTestsにも、自動的にテストコードを検索して、実行する

auto discovery機能がありますが、

pytestにauto discoveryはより一層使いやすく、高機能だと思います。

 

例えば、

$ pytest

とタイプすることで自動的にcurrent directory以下のテストを検索してくれますが、

検索するディレクトリを指定したり、

あるテストファイルの一部のテストのみ実行したり、

テスト名の部分一致で検索して実行なども

すべてコマンドライン引数を設定することで可能です。

 

5. 様々なプラグインが公開されており、簡単に機能追加できる

pytestには、プラグイン機能があり、

様々な便利な追加機能のためのプラグインが公開されています。

 

例えば、

マルチスレッドや分散処理でテストを並列実行するpytest-xdistや

pypi.org

文法/コードスタイルチェッカーであるpyflakesを実行するpytest-flakes

github.com

コードカバレッジを確認するpytest-cov

pypi.org

などがあります。

これらのプラグインは、それぞれpipでインストールでき、

あとは必要な設定やデータをpytestのオプションに指定すれば

それぞれの機能を利用可能です。

 

6. UnitTestsで作成されたテストも実行できる

pytestは、Pythonのデフォルトのテストフレームワークである

unittestで作成されたテストも実行可能です。

docs.python.org

これにより、すでに沢山のUnitTestsベースのテストが存在している

プロジェクトにおいても、pytestで既存のテストを実行しつつ、

少しづつ、pytestのテストに置き換えていくことができます。

 

また、UnitTestsベースのテストが失敗したときも、

pytestで実行した場合、わかりやすく失敗した理由を表示してくれます。

 

7. テストの実行時間のランキングを簡単に作成してくれる

--duration=0というオプションを使うことにより、

簡単にテストの実行時間の遅いものからランキングリストを作ってくれます。

下記は自分のOSSの場合の出力例です:

f:id:meison_amsl:20210131212126p:plain

上記のように、簡単にどのテストが失敗しているのかわかり、

そのような遅いテストを改善したり、

テスト対象のコードそのものを改善することができます。

 

便利なコマンドライン引数表

コマンドライン引数 機能
-l トレースバックとともにローカル変数も表示
-v すべてのテスト名とその結果を表示
--lf 前回失敗したテストだけを実行
-x 最初の失敗したテストでテストを止める
-Werror Warningが出たときもエラーにする
--durations=N テスト実行時間がN秒以下のテストを表示(0に場合はすべて)

 

PythonのIDEとpytestの連携

JetbrainsのPython IDEであるPycharmは、

myenigma.hatenablog.com

テストフレームワークとして、pytestに対応しています。

下記の公式ドキュメントにある通り、

IDEからテストを実行し、テスト結果をわかりやすく表示したり、

auto discoveryでテストを検索することもできます。

pleiades.io

pleiades.io

 

続きを読む

SciPy 1.6.0がリリースされました

目次

  • 目次
  • はじめに
  • Tweetまとめ
  • 参考資料
  • MyEnigma Supporters

はじめに

本日、

自分が開発者のメンバーとして参加している

SciPyの新しいバージョン1.6.0がリリースされました🎉

github.com

 

今回は、1.6.0の新機能や特徴を、

連続ツイートでまとめてみたので、

そちらを、あとから参照しやすいように

記事としてまとめておきます。

 

過去のバージョンの記事は下記の通りです。

myenigma.hatenablog.com

 

続きを読む

Google製のJava便利ライブラリGuava入門

目次

  • 目次
  • はじめに
  • com.google.common.base.Optional
  • com.google.common.base.Preconditions
  • com.google.common.collect.Ordering
  • com.google.common.collect.Range
  • com.google.common.collect.Multiset
  • com.google.common.collect.Multimap
  • com.google.common.collect.Bimap
  • com.google.common.collect.Table
  • com.google.common.cache
  • com.google.common.base.Joiner
  • com.google.common.base.Splitter
  • com.google.common.primitives
  • com.google.common.base.Stopwatch
  • com.google.common.collect.ImmutableList
  • @VisibleForTesting
  • Unsigned対応
  • Graph
  • 参考資料
  • MyEnigma Supporters

はじめに

PythonやJuliaを使っている人が、

Javaを使うと、

言語のデフォルト機能が足りないなと

思うことがあると思います。

 

そんな時に便利なのが、

Googleが開発公開しているJavaライブラリであるGuavaです。

github.com

qiita.com

 

Guavaは、Javaのデフォルト機能で実装すると、

コードの量が長くなってしまったり、

バグが入りやすくなってしまうコードを、

簡潔に、バグが入りにくく実装することを

目的に開発されています。

 

Guavaはかなり古くから開発されているため、

Java8などで導入された機能とかぶっている部分も多いですが、

それでもまだデフォルトの機能にはない沢山の機能が実装されています。

 

今回の記事では、

Guavaの代表的な機能の概要と

コードサンプルを紹介したいと思います。

 

すべてのコードサンプルはこちらでも公開しています。

github.com

続きを読む

数理最適化初心者のための(線形)割当問題の概要とscipy.optimize.linear_sum_assignmentによる解法

目次

  • 目次
  • はじめに
  • (線形)割当問題とは?
  • scipyを使った解法
  • 参考資料
  • MyEnigma Supporters

はじめに

今回の記事は、

数理最適化Advent Calendar 2020の23日目の記事です。

qiita.com

 

今回の記事では、

数理最適化の基本的な問題の一つである、(線形)割当問題の概要と、

www.msi.co.jp

Pythonのライブラリの一つであるscipyを使った解法について紹介したいと思います。

www.scipy.org

続きを読む

書評メモ:『ゼロから学ぶPythonプログラミング Google Colaboratoryでらくらく導入』

目次

  • 目次
  • はじめに
  • 書評メモ
  • 参考資料
  • MyEnigma Supporters

はじめに

冒頭の書籍を読んだ書評メモです。

続きを読む