MyEnigma

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

Pythonにおける型ヒント入門


Advanced Python Development: Using Powerful Language Features in Real-World Applications

目次

  • 目次
  • はじめに
  • Pythonの型ヒント
  • 型アノテーションの書き方
  • 静的型チェッカー mypy
    • インストール方法
    • ターミナル上での使い方
    • mypy.iniの作り方
  • PyCharm
    • PyCharmでの型入力
    • PyCharmでの型チェック
  • CI上でチェックする
  • 参考資料
  • MyEnigma Supporters

はじめに

Pythonは動的言語で、

型を指定する必要は無いのですが、

それが原因で、意図しない入力が関数が入力されたりして、

バグの温床になりがちです。

 

そこで、Python3.5あたりから、

型ヒント(型アノテーション)という機能が追加されました。

docs.python.org

これにより、変数や、関数の入出力に型情報を追加することができ、

意図しないコードの使用や状態を事前に検知することができます。

 

今回の記事では、

このPythonの型ヒントの概要について説明したいと思います。

 

続きを読む

Python3.7で導入されたdataclass入門


Python実践入門 ── 言語の力を引き出し、開発効率を高める (WEB+DB PRESS plusシリーズ)

目次

  • 目次
  • はじめに
  • 通常のclassとdataclassの比較
    • dataclassの良いところ
      • データを格納する箱であることを明確にできる。
      • クラス定義を短くかける
      • 型情報を書くことでデータ構造が見やすくなる。
      • Printしたときに、そのままオブジェクトの中身を表示できる。
      • asdict関数でdictに変換できる。(Dictから簡単にJSONにも変換できる)
      • Dict(JSON)からdataclassを作ることもできる
      • Frozen引数を使うことで、簡単にイミュータブルにもできる。
      • データが作られたときに、自動後処理機能を追加することができる。
    • dataclassの残念なところ
      • コレクションの初期化
  • 参考資料
  • MyEnigma Supporters

はじめに

C++ユーザやJuliaユーザがPythonを使っている時の不満の一つとして、

データを格納する目的のstructが無いことが上げられます。

 

もちろんPythonのclassを使って、データのみを格納することもできますが、

記述が冗長になりますし、コールドリーディングしているときに、

データを格納するためのclassなのか、

それともより汎用的なクラスなのかが、一見してわかりにくいことがあります。

 

そこでPython3.7から導入されたのが、dataclassです。

docs.python.org

これを使えば、Pythonでも明示的にデータ格納用のクラスを簡単に実装できます。

また、下記のツイートの通り、アプリケーションの設定データ管理として、

このdataclassを使うと非常に便利です。

 

今回の記事では、このdataclassの概要について説明したいと思います。

続きを読む

一歳以下の子育てに便利だったもの


はじめてママ&パパの育児―0~3才赤ちゃんとの暮らし 気がかりがスッキリ! (実用No.1シリーズ)

目次

  • 目次
  • はじめに
  • Google Home mini
  • Nature Remo mini
  • ベビーモニター
  • スマート体重計
  • デロンギ(DeLonghi) オイルヒーター
  • フィッシャープライス レインフォレスト ジャンパルー2
  • 参考資料
  • MyEnigma Supporters

はじめに

Next major version was released😆

今年、初めての子供が生まれて、

一年間、試行錯誤で子育てをしてきました。

 

最近、知り合いに子供が生まれて、

どんなものが便利だった?と聞かれたので

今後同じことを聞かれた時のために、

まとめておきます。

 

続きを読む

Juliaの関数のtype annotationとJIT compile


Julia High Performance: Optimizations, distributed computing, multithreading, and GPU programming with Julia 1.0 and beyond, 2nd Edition (English Edition)

目次

  • 目次
  • はじめに
  • Juliaの関数のtype annotationとJIT compile
  • 参考資料
  • MyEnigma Supporters

はじめに

今回の記事は、

Julia Advent Calendar 2019の7日目の記事です。

qiita.com

(空いていたので埋めました。)

続きを読む

Java初心者のためのMaven入門


Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

目次

  • 目次
  • はじめに
  • Mavenとは
  • インストール
    • Mac
  • Mavenで使えるコマンドライン
  • InteliJでMavenを使う
  • MavenのCentralリポジトリから利用可能なライブラリを検索する
  • 参考資料
  • MyEnigma Supporters

はじめに

Pythonなどの動的言語に慣れた人が、

C++やJavaのようなコンパイル言語を使う時に、

一番初めに戸惑うのが、

ビルドツールだと思います。

 

今回は、Javaのビルドツールとして、

広く使用されているMavenの概要について説明します。

続きを読む

ロボットエンジニアのためのMQTT (Message Queue Telemetry Transport) 入門


MQTT Essentials - A Lightweight IoT Protocol

目次

  • 目次
  • はじめに
  • MQTTとは?
  • MQTTの特徴
    • Pub/Sub型の通信により1 対多の非同期通信が可能
    • 通信データ量が小さい
    • 消費電力や計算スペックが小さい
    • データの順序と欠落がないことが保証される。
    • Durable SubscriptionとRetain
    • メッセージの伝送保証(QoS)
    • クライアント障害時などに、Will(遺言)を送信することが可能
  • MQTTを使う時に注意すべきこと
    • 一度に送れる最大データサイズとトピック名の最大サイズ
    • データフォーマットを規定しない(No Interoperability)
    • トピックを検索する機構がない
    • 常にTCPのコネクションをkeepし続ける必要がある
    • セキュリティに関しては別途検討が必要
  • MQTTを使った実用例
  • MQTT通信のサンプルコード
    • コマンドラインツール
    • Python
  • 参考資料
  • MyEnigma Supporters

はじめに

ロボットによく使われる通信プロトコルとしては、

ROSで使われるXML-RPC通信

ysuga.net

ROS2で使われるDDS(Data Distribution Service),

ja.wikipedia.org

WEBで広く利用されるHTTP

myenigma.hatenablog.com

Googleが開発しているgRPC

myenigma.hatenablog.com

などがありますが、

MQTT (Message Queue Telemetry Transport) もよく利用されます。

 

今回の記事では、MQTTの概要と

MQTTを利用した通信のサンプルコードについて紹介したいと思います。

続きを読む

困った時の逆引きGitメモ(JetBrains IDE編)


やりたいことが今すぐわかる 逆引きGit入門

目次

  • 目次
  • はじめに
  • 前回コミットした時の状態に戻す
  • 直前のコミットをなかったコトにする
  • 無理やりリモートリポジトリにローカルを合わせる
  • 更新されたファイルの一覧を表示する
  • あるコミットメッセージを変更する
  • 複数のコミットをまとめる
  • 以前のコミットを分割する
  • 他のブランチの、ある特定のコミットのみをマージする。
  • GitHubのForkリポジトリを更新する
  • GitHubでforkした自分のリポジトリを更新する
  • コマンドラインではできて、IDEからはできないこと
  • 参考資料
  • MyEnigma Supporters

はじめに

以前、困った時の逆引きGitメモの

コマンドライン編を書きましたが、

myenigma.hatenablog.com

今回はPyCharmやClion, InteliJで有名な

JetbrainsのIDEを使った場合のGit逆引きメモです。

myenigma.hatenablog.com

 

IDEのGit用のGUIを使うことで、

インタラクティブにGitのヒストリーを整理したり、

様々なブランチやリモートに対する差分管理がしやすくなります。

 

JetBrainsのIDEに関しては、前述の記事や、

下記の記事を参照ください。

samuraism.com

www.jetbrains.com

 

Gitそのものに関しては、下記を参照ください。

myenigma.hatenablog.com

myenigma.hatenablog.com

www.jetbrains.com

pleiades.io

続きを読む

チーム開発初心者のためのコードレビュー入門


チーム開発実践入門──共同作業を円滑に行うツール・メソッド WEB+DB PRESS plus

目次

  • 目次
  • はじめに
  • コードレビューツール
    • GitHub
    • Redmine Code Review プラグイン
    • Review board
    • Upsource
    • Crucible
  • コードレビューで注意すべきこと
    • レビュワーは完璧主義にならない
    • 可能であれば、コードレビューを開始する前にレビュワーを選び、大まかな設計方針を決めておく
    • できるだけ良い部分は褒める
    • コードレビューのサイズはできるだけ小さくする
    • コードレビューの反応はできるだけ早くする
    • コードスタイルはスタイルガイドに従う
    • レビュワーがレビューで、確認すべきこと
    • コメントは論理的に、そして礼儀をもって
    • 良いコードレビューの作り方
  • コードレビューでよく使われる言葉
    • PR
    • LGTM
    • IMO
    • Nit
    • TL;DR.
  • 参考資料
  • MyEnigma Supporters

はじめに

個人でコードを書く時には、

あまり気にしないプログラミングフローとして、

コードレビューがあります。

 

最近は、様々なソフトウェアの開発が

GitHub上で実施されることが多く、

気軽に他人のソフトウェアに

コントリビュートできるようになりました。

 

そこで重要なのが、コードレビューです。

コードレビューは簡単にいうと、

他の人と一緒に、コードを確認して、

より良いものにする作業ですが、

うまくコードレビューツールを使いこなしたり、

レビューをお願いする側も、レビューする側も

色々注意しなくては、

無限に時間を費やしてしまいがちだと思います。

 

今回は、様々なコードレビューツールの概要と、

様々な資料が指摘している、

コードレビューで注意すべきことを

自分用にまとめておきたいと思います。

 

続きを読む

Pythonで制御の動きを見て理解する『Pythonによる制御工学入門』


Pythonによる制御工学入門

目次

  • 目次
  • はじめに
  • 良いと思った所1: 制御工学の広い分野を一冊で学ぶことができる。
  • 良いと思った所2: Jupyter notebookで実際に制御結果の変化を見ながら、動きを確認することができる。
  • 良いと思った所3: Pythonのプログラミングの基礎について学ぶことができる
  • この本を読んで、今後読みたいと思った本
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、『Pythonによる制御工学入門』を献本して頂きました。

 

遅ればせながら、一通り読ませていただいたため、

すばらしいと思った点と、

この本を読んで、今後はこんな本を読んでみたいなと思った内容に関して、

まとめさせていただきます。

続きを読む

各言語におけるマルチスレッドプログラミング入門


増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

目次

  • 目次
  • はじめに
  • 各言語でマルチスレッドプログラミング
    • Java
    • Python
  • マルチスレッドパターン
    • 1. Single-Threaded Executionパターン
      • Javaコード
      • Pythonコード
    • 2. Immutableパターン
      • Pythonコード
      • Javaコード
    • 3. guarded_suspensionパターン
      • Javaコード
      • Pythonコード
    • 4. Balkingパターン
      • Java コード
      • Python
    • 5. Producer-Consumer
      • Javaコード
      • Pythonコード
    • 6. Read Write Lock
      • Java
      • Python
    • 7. Thread per messageパターン
      • Java
      • Python
    • 8. Worker Thread
      • Java
      • Python
    • 9. Future (promise)
      • Java
      • Python
    • 10. Two Phase Termination
      • Java
      • Python
    • 11. Thread Specific Storage
      • Java
      • Python
    • 12. Active Objectパターン
      • Java
      • Python
  • マルチスレッドプログラミングで注意すべきこと
    • reentrant lock (再入可能ロック)
    • JavaのsynchronizedブロックとLockの実装クラス
  • 参考資料
  • MyEnigma Supporters

はじめに

最近は、マルチプロセスで複数のプロセスを協調させる

マイクロサービスが利用されることが多いですが、

GUIやハードウェアアクセスがあるソフトウェアでは、

未だにマルチスレッドプログラミングをしないといけない時も多いです。

 

今回は、冒頭の本を元に

様々な言語でマルチスレッドプログラミングを

実施する際の、メモを残しておきたいと思います。

 

続きを読む