MyEnigma

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

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

目次

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

はじめに

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

続きを読む

Web初心者のためのWebSocket概要と各言語におけるサンプルコード


WebSocket: Lightweight Client-Server Communications (English Edition)

目次

  • 目次
  • はじめに
  • WebSocketとは?
  • Pythonにおけるサンプルコード
  • Juliaにおけるサンプルコード
  • サンプルコードのリポジトリ
  • 参考資料
  • MyEnigma Supporters

はじめに

以前、通常のHTTPを使った、

簡単なプロセス間通信の方法を記事にしましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

 

通常のHTTPでは、

通信方式request-response型なので、

クライアントがサーバに話しかけないと、

サーバが、クライアントに話しかけることができませんでした。

そこでウェブアプリケーションにおいて、

双方通信によく使われるのがWebSocketです。

ja.wikipedia.org

今回はこのWebSocketについて概要と

各言語でのサンプルコードを紹介したいと思います。  

続きを読む

Juliaコードの初回実行を高速化するためのPackageCompiler.jl入門


1から始める Juliaプログラミング

目次

  • 目次
  • はじめに
  • パッケージのロードをsysimageで高速化する
  • 関数の初期実行をsysimagesで高速化する
  • REPL用のデフォルトパッケージをロードしたsysimageを作る便利関数
  • 参考資料
  • MyEnigma Supporters

はじめに

これまでPythonでやってきたことを、

Juliaで置き換えようとすると、まず初めにぶつかるのが、

Juliaのコードにおけるライブラリのロードや、

初めて使う関数の計算が遅いなど、

いわゆる初回実行が遅い問題が気になってきます。

(英語ではこの問題をlatencyと呼んでいるそうです

github.com

)

 

Juliaは基本的に初回実行時にコードをJITコンパイルして実行するため、

動的言語でありながら、高速な実行を実現できているので、

myenigma.hatenablog.com

この初回実行が遅いのはある程度はしょうがないのかなと思います。

 

しかし、

毎回使うライブラリのロードや

変更が不要な関数が、

毎回遅いのはなんとかならないのかなと思っていました。

 

そこで、この問題の一つの解決策がPackageCompiler.jlです。

github.com

julialang.github.io

 

概要はこちらの動画を参照していただけるとわかると思いますが、

www.youtube.com

sysimageと呼ばれるJuliaのセッション保存機能を使って、

いつも利用するライブラリをロードした状態や、

関数のJITコンパイル結果を保存することにより、

そのsysimageを使って、juliaコードを実行したときに、

初回実行を高速化することができます。

(Julianのsysimageに関しては、こちらを参照ください

julialang.github.io)

 

今回の記事では、このPackageCompiler.jlとsysimagesを使うことで、

Juliaのコードの初回実行を高速化する方法を簡単に紹介したいと思います。

続きを読む

GitHubのOSSで最新のドキュメントを各コミット毎に簡単に確認できるようにする


SphinxでKindle本を作る

目次

  • 目次
  • はじめに
  • Circle CIでドキュメントをビルドするCIを作る
  • circleci-artifacts-redirectorを設定する
  • 参考資料
  • MyEnigma Supporters

はじめに

OSSにとってドキュメントは、

出来るだけ多くの人に使ってもらうために重要です。

 

近年のOSSでは、

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

テキストベースでドキュメントの元のデータを管理し、

Sphinxや

www.sphinx-doc.org

Documenter,jl

github.com

のようなドキュメント作成ライブラリを使って、

htmlベースのドキュメントを自動生成し、

そのデータをインターネット上に公開するのが一般的です。

 

このようにドキュメントをgitで管理すると、

ドキュメントの改善を通常のコードと同様に

プルリクエストベース(PR)で、レビューして

改善することができます。

 

このような、

PRベースでドキュメントの変更をレビューするのは便利なのですが、

一つ面倒なのが、

他人のドキュメントのPRをレビューするときに、

そのPRのブランチを手元にチェックアウトし、

ドキュメントをビルドしないと、

最新のドキュメントの見た目などを確認できないことです。

 

また、レビューの結果を反映した、

各コミット毎にこの作業をしないといけないので

以前から非常に面倒だなと感じていました。

 

昔からこのフローを改善したいなと思っていたのですが、

最近開発に参加している、SciPyが非常に良い方法を利用しているのに気がつきました。

github.com

 

この方法では、

PRの各コミット毎にCIが回るので、

そのCIの一環として、最新のコードでドキュメントをビルドし、

そのドキュメントをそのままブラウザ上で確認出来るようになります。

 

もう少し具体的には、

下記のように、PRでコミットすると

GitHubのCIの画面に、

build_doc artifactという項目が表示され、

f:id:meison_amsl:20200725204409p:plain

 

この項目のDetailsをクリックすると、

下記のように、CIで生成された最新のドキュメントを

ブラウザ上で確認することができます。

f:id:meison_amsl:20200725204515p:plain

これを見ながら、

簡単に最新のドキュメントの結果をレビューすることができます。

 

今回の記事では、

こちらの設定方法について説明します。

続きを読む

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


LAPACK利用の手引―行列計算パッケージ

目次

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

はじめに

本日、

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

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

github.com

 

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

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

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

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

続きを読む

ロボティクスにおける最近傍点探索のためのscipy.spatial.cKDTree入門


NumPy&SciPy数値計算実装ハンドブック (Pythonライブラリ定番セレクション)

目次

  • 目次
  • はじめに
  • kdtreeとは
  • scipy.spatial.KDTreeの使い方
    • kdtreeの作成
    • 最近傍点の探索
    • ある点から一定範囲の点を探索
    • 2つのkd-tree同士のある一定距離範囲内の点の探索
    • 1つのkd-tree内のある一定距離範囲内の点の探索
    • 2つのkd-treeの各点の距離を計算する
  • 参考資料
  • MyEnigma Supporters

はじめに

ロボティクスにおいて、

最近傍点探索はよく使われる計算です。

例えば、衝突検知や、センサ情報の対応点探索などに

最近傍点探索は使われます。

 

最近傍点探索を使う時に、

一番よく問題になるのが、計算量です。

単純にbrute forceで最近傍点を探すと、

計算時間は探索する点の数に応じて増加してしまいます。

 

そこで、よく使われるのがkd-treeです。

en.wikipedia.org

このkd-treeを使うことで、大量のデータがあっても、

比較的、高速に最近傍点探索を計算することができます。

 

このkd-treeを使うには、

様々なライブラリがすでに存在しています.

例えば、以前紹介したFLANNも

kd-treeをデータ構造に利用しています。

myenigma.hatenablog.com

 

今回の記事では、

Pythonの科学技術計算のライブラリであるSciPyの中にある、

scipy.spatial.KDTreeというモジュールの使い方を紹介したいと思います。

scipy.github.io

  

続きを読む

SpaceXの社員だけどなにか質問ある?


Spacex Tシャツ 半袖 メンズ ワンポイント カットソー 日常 マルネック 薄手 シンプル 防汗 伸縮性 通気

目次

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

はじめに

SpaceXのソフトウェアエンジニアの人たちがredditに降臨して、

すごく細かい内容について、色々答えていたので、

Twitterでメモしながら、呼んでみました。

そのメモ用記事です。

続きを読む

初心者のためのコンテナオーケストレーションツールKubernetes入門


しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識

目次

  • 目次
  • はじめに
  • Kubernetesとは?
  • Kubernetesによる専門用語
    • Pod
    • Node
    • Cluster
  • Kubernetesの基本機能
    • 複数の物理サーバやVMでのコンテナ管理
    • コンテナのデプロイ
    • コンテナ間のネットワーク管理
    • コンテナの負荷分散
    • コンテナの監視と自動復旧
    • コンテナのアップデート
  • 参考資料
  • MyEnigma Supporters

はじめに

Dockerなどのコンテナシステムを管理するシステムとして、

myenigma.hatenablog.com

コンテナオーケストレーションシステムがあります。

 

このコンテナオーケストレーションツールの中で、

ほぼデファクトスタンダードなのが、Kubernetesです。

kubernetes.io

ja.wikipedia.org

  

今回の記事では、こちらの書籍を元に

自分が、k8sについて学んだ内容をまとめておきたいと思います。


しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識

 

続きを読む

ロボティクスにおける幾何学処理のためのscipy.spatial.transform.Rotation入門


3次元回転: パラメータ計算とリー代数による最適化

目次

  • 目次
  • はじめに
  • scipy.spatial.transform.Rotationにおける三次元回転の表現方法
  • 三次元点の回転
  • 回転の掛け合わせ
  • 逆回転
  • 参考資料
  • MyEnigma Supporters

はじめに

ロボティクスにおいて、幾何学処理、

特に三次元の回転は基本的な処理です。

myenigma.hatenablog.com

 

上記の記事で、ROSのtfを使った場合の三次元回転処理や、

C++のEigenを使った場合の三次元回転処理を紹介しましたが、

Pythonで三次元回転を扱う場合には、

scipy.spatial.transform.Rotationを使うのが便利です。

docs.scipy.org

 

今回の記事では、

このscipy.spatial.transform.Rotationの使い方について

簡単に紹介したいと思います。

 

続きを読む

各プログラミング言語における変数名と変数の値を簡単に出力する方法まとめ


情熱プログラマー ソフトウェア開発者の幸せな生き方

目次

  • 目次
  • はじめに
  • Python
  • Julia
  • Shell script
  • C++
  • Java
  • IDEの機能を使う
  • 参考資料
  • MyEnigma Supporters

はじめに

先日の記事で、

Pythonにおけるロギングの方法を紹介しましたが、

myenigma.hatenablog.com

ロギングで一番よく実施するのが、

ある変数名と変数値を出力することです。

 

例えばPythonで、

あるxという変数があり、その変数の値が100である場合、

通常のprint関数を使うと、

100

と表示されます。

しかし、そのときにはその表示された値がxのものであることを覚えているため、

問題ありませんが、後日アプリケーションのデバックをするときには、

その出力がどの変数であるかはおそらく覚えていないので、

最低では、ログや標準出力には

x = 100

と表示させておきたくなります。

 

上記のような処理は、プログラミング中には大量にコーディングすることになるので、

できるだけ、簡単にコーディングしたいものです。

 

そこで、今回は自分がよく使用しているプログラミング言語において、

上記の内容を簡単に実施する方法をまとめておきたいと思います。

 

続きを読む