MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Twelve-Factor AppによるモダンなWebアプリケーションの特徴


Cloud Native Architectures: Design high-availability and cost-effective applications for the cloud (English Edition)

目次

  • 目次
  • はじめに
  • 1. 一つのリポジトリに一つのアプリケーション
  • 2. 依存関係は明示的にファイルとして宣言し、それだけでアプリケーションを動かせるようにする
  • 3. ソースコードと設定を分離し、設定環境変数に格納する
  • 4. バックエンドサービスは簡単に交換可能にできるように実装する。
  • 5. ビルド、リリース、実行の3つのステージを厳密に分離し、順番に実行する。
  • 6. アプリケーションを1つもしくは複数のステートレスなプロセスとして実行するようにする。
  • 7. それぞれのアプリはWebサーバーを内包し、ポートバインディングで外部にサービスを公開する
  • 8. 垂直スケール(CPU, メモリ増強)ではなく、水平スケール(インスタンス数の増加)で過負荷に対応する。
  • 9. サービスは即座に起動・終了することができるようにし、簡単に廃棄できるようにしておく。
  • 10. 開発環境と本番環境をできるだけ一致させる
  • 11. ログは標準出力に出力し、本番環境では実行環境がそれらをまとめて最終出力形態に出力するようにする。
  • 12. 管理プロセスはアプリケーションの初期化処理などに組み込み、自動化する
  • 参考資料
  • MyEnigma Supporters

はじめに

Twelve-Factor Appは、2012年にHerokuのエンジニアが提案した、

モダンなWebアプリケーションのために重要な12の項目をまとめたものです。

12factor.net

qiita.com

en.wikipedia.org

kakakakakku.hatenablog.com

www.slideshare.net

www.redhat.com

 

こちらの12の項目は、使うプログラミング言語によらず、

現在でも言及されることが多い普遍的なアドバイスが多いため、

かなり自分でも勉強になったので、まとめておきたいと思います。

元の英語のドキュメントの直訳だとかなりわかりにくかったので、

自分なりに意訳しています。

 

続きを読む

各プログラミング言語におけるAuto resource management実装


【電子合本版】Code Complete 第2版 完全なプログラミングを目指して

目次

  • 目次
  • はじめに
  • Python
  • Java
  • C++
  • Julia
  • 参考資料
  • MyEnigma Supporters

はじめに

プログラミングをしていると、

リソースを使った時に、

処理が終わったり、処理中に例外が発生しても、

必ずリソースをクローズしたい

いう処理をよく実装すると思います。

 

このような処理を

Auto resource management

と呼ぶらしいのですが、

多くのプログラミング言語は、

言語の機能として、

このような仕組みを簡単に実装する機能を提供しています。

 

そこで、今回は

各プログラミング言語で

Auto resource managementを実装する方法をまとめておきたいと思います。

 

続きを読む

Effective Javaを読んで心に響いたこと


Effective Java 第3版

目次

  • 目次
  • はじめに
  • コンストラクタの代わりにstaticファクトリメソッドを検討する。
  • あるクラスの引数が多かったり、オプション設定などがある場合は、builderパターンを使う
  • 全ての関数の引数はチェックをし、publicな関数はException を投げ、privateなものはAssertionを使う。
  • 絶対に来ない所では、AsserttionErrorを投げる
  • nullチェックにはObjects.requireNonNullを使う
  • Dateは使わないようにする
  • 参照型を引数で受け取る時は防御的にコピーしてフィールドにする
  • クラスがpublicでなければ、アクセッサはいらない。
  • try-finallyよりもtry-with-resourcesを選ぶ
  • ネストクラスはインスタンス化が不要であればstaticにしておく。
  • 参考資料
  • MyEnigma Supporters

はじめに

Effective * を読んで心に響いたシリーズのEffective Java編です。

myenigma.hatenablog.com

myenigma.hatenablog.com

Javaの中級を目指す人にはおすすめの一冊でした。

入門は下記を参照ください。

myenigma.hatenablog.com

続きを読む

Pythonの公式パッケージインストーラpipと仮想環境venvの使い方


Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ

目次

  • 目次
  • はじめに
  • pip逆引きメモ
    • pipはなんの略ですか?
    • pipでインストールできる公式ライブラリはどこで管理されていますか?
    • pipはインストールする必要がありますか?
    • 現在のpipのバージョンを確認したい
    • pipを最新にアップデートしたい
    • パッケージのインストール
    • gitリポジトリからのインストール
    • パッケージファイルからのインストール
    • 現在編集しているパッケージをインストール
    • requirements.txtによる複数のパッケージのインストール
    • 現在インストールされているパッケージからrequirements.txtを作成する
    • 現在インストールされているパッケージのリストとバージョンを表示
    • アップデート可能なパッケージを表示する
    • 他のパッケージに依存してない(使っていなかったら削除できる)パッケージを表示する
    • Editモードでローカルのコードをインストールしたパッケージを表示する
    • パッケージの情報を表示する
    • パッケージのアップデート
    • パッケージのアンインストール
    • 現在の環境で依存関係が壊れているか確認する
    • キャッシュされたパッケージのデータのリストを表示する
    • キャッシュされたデータを削除する
    • pipのコマンドをbashで補完してほしい
    • pipをコードから呼ぶ場合、スレッドセーフですか?
  • 仮想環境venvの使い方
    • 仮想環境の作成
    • 仮想環境のアクティベート
      • POSIX系
      • Windows系
    • 仮想環境のデアクティベート
  • 参考資料
  • MyEnigma Supporters

はじめに

続きを読む

テキストベースでかっこいいドキュメントを作成したい人のためのSphinx, reStructuredText入門


Software-Dokumentation mit Sphinx: Zweite ueberarbeitete Auflage (Sphinx 2.0)

目次

  • 目次
  • はじめに
  • Sphinx
  • reStructuredTextでよく使う表現
    • セクション(章立て)
      • 各セクションをリンクする場合
    • URLをリンクする場合
    • 数式のナンバリングと参照
      • sphinx_rtd_themeを使っていて、数式番号が変なところに表示される場合
      • includeしたrstファイルで数式のラベルが重複しているとワーニングが出る
    • 画像を表示する
  • GitHubリポジトリのドキュメントやコードから生成されたドキュメントをgithub pagesで公開する
  • SphinxのページにGoogle AnalyticsやGoogle Adsのコードを埋め込む
  • ソフトウェアドキュメントの構成
    • 設計ドキュメント(DESIGN.md, ARCHITECTURE.md)
    • 使用方法 (HOW_TO_USE.md, RECIPE.md, TUTORIAL.md)
    • 運用 (DEPLOYMENT.md)
  • ソフトウェアドキュメントを書くコツ
    • 毎回2行だけ文章を書き、読み返して修正するというものです。
  • 参考資料
  • MyEnigma Supporters

はじめに

著名なOSSを見るとそのOSSのオンラインドキュメントも、

ソースコードと同じgitリポジトリで

管理されていることが多いです。

そのような、テキストベースで

オンラインドキュメントを作成できるツールとして有名なのが、

Pythonで作られているのSphinxです。

www.sphinx-doc.org

 

続きを読む

Python標準ライブラリのFlagがシンプルで使いやすいという話


Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ

目次

  • 目次
  • はじめに
  • Python標準ライブラリのFlagの使い方
  • 参考資料
  • MyEnigma Supporters

はじめに

Pythonの標準モジュールのenumの中に、

Flagというクラスがあるのですが、

docs.python.org

これが、結構シンプルで使いやすかったので、

かんたんに使い方をまとめておきたいと思います。

続きを読む

Juliaにおける分散・並列処理入門


並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング

目次

  • 目次
  • はじめに
  • 並行、並列処理のマクロまとめ
  • 並行・並列処理の比較
  • 参考資料
  • MyEnigma Supporters

はじめに

Juliaの特徴に、分散・並列処理がしやすいという特徴があります。

julialang.org

 

Juliaでは言語の並行・並列処理として、

  • 1 非同期タスク、コルーチン (並行処理)

  • 2 マルチスレッド

  • 3 分散処理 (並列処理)

  • 4 GPU計算

の4つの方法をサポートしていますが、

docs.julialang.org

今回の記事では、3の分散、並列処理の概要を

下記の記事を元に紹介したいと思います。

docs.julialang.org

 

1.の並行処理に関しては、下記を参照ください。

myenigma.hatenablog.com

 

続きを読む

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リクエストを並行処理で実施する

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

 

続きを読む