MyEnigma

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

JavaのFutureとCompleteFutureの違い


プロになるJava―仕事で必要なプログラミングの知識がゼロから身につく最高の指南書

目次

  • 目次
  • はじめに
  • Java8のCompleteFuture
  • 利点1: 手動での処理停止
  • 利点2: Futureの処理を完了したときに呼ばれるCallback関数を設定できる
  • 利点3 複数のFutureを繋いで処理することができる。
  • 利点4: Exception処理が実装できる。
  • Java9でのCompleteFutureの改善
    • timeout関連のAPIの追加
  • CompletableFutureの最大スレッド数の設定
  • 参考資料
  • MyEnigma Supporters

はじめに

最近様々な並列処理を学んでいるのですが、

Javaで説明されていることが多いため、

Javaにおける並列処理やスレッドを学んでいます。

 

そこで気になったのは、Future/promiseパターンによる並列パターンは

ja.wikipedia.org

Pythonにも、Juliaにもあり、

myenigma.hatenablog.com

Javaの標準機能にももちろん存在しているのですが、

FutureとCompleteFutureという2つの実装があり、

違いがよくわからなかったので、まとめてみました。

 

続きを読む

ロボットエンジニアのためのFinite State Machine入門


有限オートマトン入門

目次

  • 目次
  • はじめに
  • Finite State Machine:FSM 有限状態機械とは
  • PythonのFSMライブラリ transitions
    • 状態 State
    • 遷移 Transitions
    • 作成したFSMを図にする
  • JavaにおけるEnumを使ったシンプルなFSM
  • 参考資料
  • MyEnigma Supporters

はじめに

ロボットのソフトウェアを開発していると、

一番悩ましいのが状態の管理です。

ロボットがあるタスクを実施するには、

たくさんの状態を定義し、

正しく遷移させ、

それぞれで正しく振る舞わないといけません。

 

そんなときによく利用されるのが、

Finite State Machine:FSM (有限状態機械, 有限オートマトン)というモデルです。

ja.wikipedia.org

このモデルを使って、状態を設計し、ソフトウェアを組むと、

複雑な状態を管理しないと行けない場合でも、スッキリとしたコードが書けます。

 

今回の記事ではFSMの概要とサンプルコードを紹介したいと思います。

 

続きを読む

Googleのデータアナリストから学ぶデータ解析の心得


分析者のためのデータ解釈学入門 データの本質をとらえる技術

目次

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

はじめに

下記の記事で、Googleのデータアナリストが、

データ解析の心得を公開しており、

シンプルながら心に響いたので、

連続Tweetとしてまとめてみました。

developers.google.com

 

続きを読む

ソフトウェア設計での指針となる資料


A Philosophy of Software Design, 2nd Edition (English Edition)

目次

  • 目次
  • はじめに
  • 私は状態 (state)、結合 (coupling)、複雑性 (complexity)、コード量 (code) の順に削減することでコードを最適化する。
  • A Philosophy of Software Design
  • ラムダ式について
  • 良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方
  • 参考資料
  • MyEnigma Supporters

はじめに

最近良い資料が多いので自分用にまとめておきます。

続きを読む

Union Find Tree (素集合データ構造)の概要とサンプル実装


問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

目次

  • 目次
  • はじめに
  • Union Find Tree (素集合データ構造)の概要
    • 1. Union by size
    • 2. 経路圧縮 (Path compression)
  • Union Find Treeの各操作と計算量
  • Juliaによるサンプル実装
  • 参考資料
  • MyEnigma Supporters

はじめに

あるデータ集合の複数のコネクション情報から、

最終的なグループ集合を高速に計算したいときに、

よく利用されるデータ構造が、

Union Find Tree (素集合データ構造)です。

ja.wikipedia.org

今回は、

このUnion Find Tree (素集合データ構造)の概要と

サンプル実装について紹介したいと思います。

 

続きを読む

優先度付きキュー(二分ヒープ)の概要とサンプル実装


問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

目次

  • 目次
  • はじめに
  • 優先度付きキュー(ヒープ)の概要
  • 優先度付きキューの各処理の計算量
  • Juliaによる実装
  • 参考資料
  • MyEnigma Supporters

はじめに

ダイクストラ法などを実装したいときには、

myenigma.hatenablog.com

Openセットの中で毎回コストが最小のノードを選択する必要がありますが、

毎回ノードの最小値を検索しても良いですが、

より効率的に最小のノードを選択する方法として、

優先度付きキューを使う方法があります。

ufcpp.net

 

今回の記事では、この優先度付きキューの概要と

サンプル実装について紹介したいと思います。

 

続きを読む

差分進化法(Differential Evolution)による大域的最適化の概要とPythonサンプルコード

f:id:meison_amsl:20220212224118g:plain


Differential Evolution: A Practical Approach to Global Optimization (Natural Computing Series) (English Edition)

目次

  • 目次
  • はじめに
  • 差分進化法とは?
  • 差分進化法のアルゴリズム概要
    • 1.Mutation(突然変異)
    • 2.Crossover(交叉)
    • 3.Selection(生存選択)
  • 差分進化法のPythonサンプルコード
  • 参考資料
  • MyEnigma Supporters

はじめに

コスト関数の微分不要なソルバーには、

Nelder Meadが有名ですが、

myenigma.hatenablog.com

このソルバーは基本的に局所最適化用なので、

複雑な問題には局所解に落ち込んでしまうという問題があります。

そこで微分不要な大域最適化ソルバーとして、

差分進化法(Differential Evolution)があります。

この記事では差分進化法による大域的最適化の概要と

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

続きを読む

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


Mastering SciPy

目次

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

はじめに

本日、

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

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

github.com

今回も、1.8.0の新機能や特徴を、

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

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

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

 

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

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

続きを読む

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を実装する方法をまとめておきたいと思います。

 

続きを読む