MyEnigma

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

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


チーム開発実践入門──共同作業を円滑に行うツール・メソッド 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
      • Java
      • Python
    • 10. Two Phase Termination
      • Java
      • Python
    • 11. Thread Specific Storage
      • Java
      • Python
    • 12. Active Objectパターン
      • Java
      • Python
  • 参考資料
  • MyEnigma Supporters

はじめに

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

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

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

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

 

今回は、冒頭の本を元に

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

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

 

続きを読む

お家のルンバを自律移動ロボットにする(ハードウェア編)


ルンバ690 アイロボット ロボット掃除機 wifi対応 遠隔操作 自動充電 清掃予約 髪の毛 ペットの毛のゴミ 畳などの床に R690060【Alexa対応】

目次

  • 目次
  • はじめに
  • ルンバ 690
  • Raspberry Pi 3 Model b+
  • モバイルバッテリー
  • USB-シリアルケーブル
  • TODO
  • 参考資料
  • MyEnigma Supporters

はじめに

自宅で簡単な自律移動ロボットを動かしたいなと急に思い、

色々検討していました、

そんな時に、不意に自分の家にはお掃除ロボットのルンバがあることに気が付きました。

 

ルンバはカバーの下にシリアルポートが隠されているモデルがあり、

そのポートに公開されているプロトコルでコマンドを送ると、

ルンバを外部から制御することができます。

 

今回の記事では、

自宅のルンバを自律移動ロボット化するための、

ハードウェアの部分の内容を記事にしたいと思います。

 

ソフトウェアに関しては別の記事にまとめる予定です。

また、この記事のハードウェア部分も今後順次、更新予定です。

 

続きを読む

バージョン管理初心者のためのGit入門


Gitが、おもしろいほどわかる基本の使い方33 改訂新版〈バージョン管理、GUI、Sourcetree、Bitbucket〉

目次

  • 目次
  • はじめに
  • gitコマンド
  • git clone
    • git clone --recursive URL
    • git clone --depth 1 URL
  • git init
    • git init --bare --share
  • git status
  • git commit
    • git commit -a
    • git commit --amend "new message"
    • git commit -v
    • git commit -m "bug fix"
  • git log
    • git log -- pretty=short
    • git log file_name
    • git log -p
    • git log --graph
  • git diff
    • git diff <ブランチ名> <ブランチ名>
  • git branch
    • git branch <ブランチ名>
    • git branch -a
    • git branch -m <古いブランチ名> <新しいブランチ名>
    • git branch -d feature
    • git branch <ブランチ名> origin/<ブランチ名>
  • git remote
    • git remote add hoge https://hogehoge.git
    • git remote -v
  • git checkout
    • git checkout <ブランチ名>
    • git checkout -b <新しいブランチ名>
    • git checkout -
    • git checkout -b <ブランチ名> origin/<ブランチ名>
    • git checkout HEAD <ファイル名>
  • git reset
    • git reset HEAD
    • git reset --hard
  • git revert
    • git revert HEAD
  • git clean
    • git clean -df
    • git clean -xdf
  • git stash
  • git merge
    • git merge <ブランチ名>
    • git merge --no-ff hoge
    • git merge --squash
  • git rebase
    • git rebase -i HEAD~2
  • git push
    • git push -u origin master
  • git submodule
    • git submodule add URL
    • git submodule update --init --recursive
  • gitでのソフト開発メモ
    • トピックブランチ
  • gitでタブ補完を使うようにする
  • git初期設定
    • 名前とEmailの設定
    • コマンドをカラーで読みやすくするための設定
    • コミットログのエディタをvimにする
  • 参考資料
  • MyEnigma Supporters

はじめに

個人的なGitの使い方メモです。

 

その他のGit関連のツールに関しては、下記を参照ください。

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

続きを読む

シェルスクリプト逆引きメモ


フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門 改訂2版

目次

  • 目次
  • はじめに
  • シェルスクリプトをデバックモードにする。
  • error関数とabort関数を使う
  • コマンドが使えるか確認する
  • 複数のファイルを連結する
  • 二つのコマンドを一行で実行する
  • シェル変数のデフォルト値
  • カレントディレクトリ以下の全ファイルからxxxという文字列を検索
  • $$は予約語でプロセス番号を表す。
  • cutコマンドを使うと各列の一部のデータを取得できる。
  • 数字列を取得する場合はegrepを使うと良い
  • awkの使い方
    • awkは位置指定付きのgrepとして使える
    • awkでは文字列を”“で囲むと文字列扱い、囲まないと数値扱いになる
  • sedの使い方
    • nanが混入してしまったデータを0に置き換える
    • 単語置換
  • 参考資料
  • MyEnigma Supporters

はじめに

長めのシェルスクリプトを作るときに、

便利な逆引きメモです。

続きを読む

Googleが科学的に研究した良い組織を作る方法『Google re:Work』


成長企業は、なぜOKRを使うのか?

目次

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

はじめに

Googleが公開している、

良い組織を作る方法が素晴らしかったので、

t.co

読みながら、Twitterでメモしたものをまとめておきます。

続きを読む

ロボットエンジニアのためのgRPC入門


WEB+DB PRESS Vol.110

目次

  • 目次
  • はじめに
  • gRPCとは?
  • gPRCの特徴
    • Protocol buffersでRPCを定義することで、様々な言語のサーバ・クライアント実装が自動生成可能
    • 通信プロトコルにHTTP/2を使うことで高速化、双方向通信、streaming等を実現
    • 通信のデータ量が小さく、データ解釈時の計算時間も短い
  • ProtoファイルでのRPCの宣言
    • Unary RPC
    • Server streaming RPC
    • Client streaming RPC
    • Bidirectional streaming RPC
  • gRPCのサンプルコード
    • Python
      • Unary RPC
      • Server streaming RPC
      • Client streaming RPC
      • Bidirectional streaming RPC
  • gPRCのgの意味
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、データのシリアライズフォーマットである

Protocol buffersを紹介しましたが、

myenigma.hatenablog.com

このProtocol buffersでシリアライズされたデータは、

以前の記事のようにバイナリのファイルとして保存することもできますが、

gRPCと言われる通信方法で、

複数のプロセス間を通信させることが多いようです。

 

今回の記事では、このgRPCの概要と簡単なサンプルコードを

紹介したいと思います。

続きを読む

ロボットエンジニアのためのProtocol buffers入門


Practical gRPC (English Edition)

目次

  • 目次
  • はじめに
  • Protocol buffersとは?
  • Protocol buffersの特徴
    • 様々なプラットフォームや言語で利用することができる
    • データサイズが小さい
    • エンコードやデコードが早い
    • データの構造を精密に規定できる
    • データフォーマットに後方互換性がある。
    • JSONに変換できる
    • デメリット
  • protoファイルを作成する時の注意点
  • protobufのコンパイラのインストール
    • MacでHomebrewをって、公式のprotobufをインストール場合
    • ubuntuへの公式protobufのインストール
    • Juliaでprotoファイルをコンパイルする
  • 使い方
    • C++
    • Python
    • Java
    • Julia
  • protoファイルのスタイルガイド
  • Protocol buffersと一緒に使うと便利なツール
    • protoc-gen-lint
    • protoc-gen-doc
  • ProtoBuf3で変わったこと
  • Protocol buffersを通信のデータフォーマットとして利用しているプロジェクト
  • 参考資料
  • MyEnigma Supporters

はじめに

ロボットをやっていると、

複数の言語で作られた、

複数のサービス間でデータをやりとりしたくなります。

ROSが使える場合は、ROSのTopicを使えば良いですが、

myenigma.hatenablog.com

どうしてもROSが使えない場合は、JSON+HTTPなどの他の方法を使う必要があります。

myenigma.hatenablog.com

 

今回の記事では、JSONと似たデータフォーマットの一種である、

Protocol buffersの概要と簡単な使い方を紹介したいと思います。

 

続きを読む

JSON初心者のためのJSON Schema入門


Introduction to JavaScript Object Notation: A To-the-Point Guide to JSON (English Edition)

目次

  • 目次
  • はじめに
  • JSON Schemaとは?
  • JSONファイルからJSON Schemaを生成する
  • JSON SchemaでJSONをvalidateする
  • JSON Schemaからドキュメントを生成する
  • JSON SchemaからJSON解釈用コードを生成する
  • 参考資料
  • MyEnigma Supporters

はじめに

最近、

構造化されたデータや、

設定ファイルなどにJSONを使うことが多くなってきました。

myenigma.hatenablog.com

しかし、JSONは

あまりにもフレキシビリティが高いデータフォーマットなので、

意図しない構造のJSONファイルを受け取ってしまうことがあります。

そのようなときに、JSONの構造やデータの中身が意図したものになっているのか、

確認する手法が必要です。

 

そこで、JSONファイルの構造やデータの中身を定義したものを、

JSON Schemaと呼びます。

今回の記事では、JSON初心者のために、

JSON Schemaを利用するのに必要最低限の方法を紹介したいと思います。

 

続きを読む