2019/09/09

Visual Studio Codeのプラグイン導入

背景


仕事で、ドキュメント作成やプログラミング作成にVisual Studio Code (以下vscode)を使用している。
個人的によく使うプラグインについて記載する。

記事の目的


ドキュメント作成やプログラミング作成でよく使うプラグインを記載する

Visual Studio Codeのプラグイン導入


ここでは、vscodeのプラグイン導入方法と使用方法について記載する。

Code Spell Checker

Code Spell Checker
Code Spell Checkerは、英語のスペルチェックを自動で行ってくれるプラグインである。

利点
  • プログラミングの際のクラス・関数・変数名、文言などのスペルミスを未然に防ぐことができる
  • スペースで区切られていない単語(ThisIsAPen)のスペルチェックも可能

使用方法
  • 自動的に、スペルミスした単語が強調される

Markdown Preview Enhanced


Markdown Preview Enhancedは、マークダウン形式で記載したドキュメントをプレビューできるプラグインである。

利点
  • マークダウン形式のドキュメントを変更すると、プレビュー画面へ変更が即座に反映される
  • htmlやpdf形式などで出力することができる

使用方法
  • ctr+shift+v: プレビュー画面表示
  • プレビュー画面右クリック: 保存タブ表示(html, pdfなど)

PlantUML

PlantUML

PlantUMLは、UML形式で記述した図をプレビューできるプラグインである。


利点
  • UML形式形式の図を変更すると、プレビュー画面へ変更が即座に反映される
  • 画像形式などで出力することができる

使用方法
  • Alt+D: プレビュー画面表示

まとめ


  • Visual Studio Codeのプラグインについて調査、記載した

参考文献



変更履歴


  1. 2019/09/10: 新規作成

2019/09/07

Visual Studio Code導入手順

背景


仕事で、ドキュメント作成やプログラミング作成にVisual Studio Code (以下vscode)を使用している。
そこで、Windows及びUbuntuへのvscodeの導入方法と、初期設定について記載する。

記事の目的


Visual Studio Codeを導入する

Visual Studio Codeの導入


ここでは、vscodeの導入方法と使用方法について記載する。

vscodeとは

Visual Studio Code

vscodeは、Microsoftが開発したオープンソースのエディターである。

利点

  • Windows, MacOS, Linuxで動作し、操作方法がほぼ共通である
  • 多くのプラグインが存在し、ワンクリックで導入できる
  • 比較的軽量で、使用中にストレスを感じることがない
  • デフォルトでgitと連携しており、commit, push, pull, diffがワンクリックで行え、バージョン管理や変更点確認が容易にできる

導入方法(Windows編)

Windowsへのvscodeの導入手順は、下記の通りである。
  1. 公式サイトから、インストーラをダウンロードする
  2. インストーラを起動し、インストール行う
  3. vscodeのインストーラ(Windows)

導入方法(Ubuntu編)

Ubuntuへのvscodeの導入手順は、下記の通りである。
  1. vscodeのインストールに必要なプログラムをインストールする
  2. $ sudo apt install curl apt-transport-https
  3. aptのリポジトリで使用するマイクロソフトのキーをダウンロードする
  4. $ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
  5. ダウンロードしてきたキーを/etc/apt/trusted.gpg.d/にコピーする
  6. $ sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
  7. リポジトリを登録する
  8. $ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
  9. インストールする
  10. $ sudo apt update
    $ sudo apt install code
  11. 起動する
  12. $ code .

初期設定方法

初期設定方法は、下記の通りである。
  • 日本語化
    1. vscodeを開く
    2. 「view」を選択する
    3. 「comanndo palette」を選択する
    4. 「configure display language」を選択する
    5. 「locale」を「en」から「ja」に書き換える。
    6. "locale":"ja" // Changes will not take effect until VS Code has been restarted.
    7. 左側にある四角いアイコン(extension)をクリックする
    8. 検索窓から「Japanese Language Pack for Visual Studio Code」を検索しインストールする
    9. vscodeを再起動する
  • 全角・半角スペースの表示設定
    1. vscodeを開く
    2. 「code」から「preferences」>「Settings」を選択する
    3. 「Editor:Render Whitespace」の項目を「all」に変更する

アンインストール方法(Ubuntu編)

Ubuntuからのvscodeのアンインストールは、下記の通りである。
  1. vscodeのインストールに使用したプログラムとvscodeをアンインストールする
  2. $ sudo apt remove apt-transport-https curl code
    $ sudo apt autoremove
  3. リポジトリを削除する
  4. $ sudo rm /etc/apt/sources.list.d/vscode.list
  5. ダウンロードしてきたキーを削除する
  6. $ sudo rm /etc/apt/trusted.gpg.d/microsoft.gpg

まとめ


  • Visual Studio Codeの導入方法について調査、記載した

参考文献



変更履歴


  1. 2019/09/07: 新規作成

2019/09/05

実行中のrosノードを全て終了させるスクリプトの作成方法

背景


実行している複数rosノードをCtr+Cでkillする際、時々一部のノードが終了されずにバックグラウンドで実行される場合があった。このような場合、次にrosノードを起動した際に不具合が生じる可能性がある。そこで、実行中のrosノードを全てkillするスクリプトを作成した。

記事の目的


実行中のrosノードを全てkillするスクリプトを作成する

kill_all_rosnode.sh


ここでは、実行中のrosノードを全てkillするスクリプトの記述方法について記載する。

スクリプトの作成方法

スクリプトの作成方法は以下の通りである。
  1. スクリプトkill_all_rosnode.shを作成する
  2. #!/bin/bash
    echo "Kill all ros nodes!"
    ps aux | grep ros | grep -v grep | awk '{ print "kill -9", $2 }' | sh
    exit 0
  3. スクリプトに実行権限を与える
  4. $ chmod +x ./kill_all_rosnode.sh 

スクリプトの実行方法

実行方法は以下の通りである。
$ ./kill_all_rosnode.sh
Kill all ros nodes!

まとめ


  • 実行中のrosノードを全てkillするスクリプトを作成した

参考文献



変更履歴


  1. 2019/09/05: 新規作成

2019/09/03

USBポートでデバイス名を固定する方法(Linux)

背景


同一デバイスを複数接続し、それらのデバイス名を固定する必要があった。デバイスが同一の為、udevのベンダーIDとプロダクトIDを利用してデバイス名を固定することができなかった。そこで、接続したUSBポートを用いた識別を行った。

記事の目的


同一デバイスを、接続したUSBポートの場所で識別し、デバイス名を固定する

接続したUSBポートでデバイスを識別


ここでは、ベンダーIDとプロダクトIDを利用した通常の識別方法と、接続したUSBポートの場所でデバイスを識別する方法についてそれぞれ記載する。

ベンダーIDとプロダクトIDを利用した識別方法

ベンダーIDとプロダクトIDを利用したデバイスの識別及びデバイス名の固定方法は下記の通りである。

  1. デバイスのベンダーIDとプロダクトIDの検索
  2. lsusbを用いて、デバイスのベンダーIDとプロダクトIDを検索する
    $ lsusb
        Bus 002 Device 002: ID idVendor:idProduct Intel Corp.
        Bus 003 Device 016: ID 054c:06c1 Sony Corp.
            :
        Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  3. udevルールの作成
  4. /etc/udev/rules.dにルールファイルを作成する
    $ sudo nano /etc/udev/rules.d/80-nfc.rules
        SUBSYSTEM=="usb", ATTR{idVendor}=="054c", ATTR{idProduct}=="06c1", SYMLINK+="nfc"
    
    これで、Bus 003 Device 016: ID 054c:06c1 Sony Corp.が/dev/nfcとして毎回認識されるようになった。

接続したUSBポートの場所を利用した識別方法

上記方法では、同一のデバイスの場合、識別できない。そこで、接続したUSBポートで識別する。
  1. デバイスが接続されたUSBポートを探索する
  2. /dev/serial/by-path/以下に、接続したデバイスがUSBポートの位置で識別され、配置されている
    $ ls /dev/serial/by-path/
    pci-0000:00:1a.0-usb-0:1:1.0-port0
    pci-0000:00:1d.0-usb-0:2:1.0-port0
  3. シンボリックリンクを作成し、デバイス名を固定する
  4. /dev/にシンボリックリンクを作成することで、そのUSBポートに接続したデバイスのデバイス名が固定される
    $ sudo ln -s /dev/serial/by-path/pci-0000:00:1a.0-usb-0:1:1.0-port0 /dev/nfc
    これで、USBポートpci-0000:00:1a.0-usb-0:1:1.0-port0に接続されたデバイスが/dev/nfcとして毎回認識されるようになった。

備考

  • /dev/serial/by-id/以下に、接続したデバイスがシリアル番号で識別され、配置されている
  • /dev/disk/以下に、接続したディスクが/dev/serial/と同様の形でに配置されている

まとめ


  • 同一デバイスを、接続したUSBポートの場所で識別し、デバイス名を固定する方法について記載した

参考文献



変更履歴


  1. 2019/09/03: 新規作成

2019/09/01

Doxygen対応のコメント記載方法(C, C++)

背景


仕事でプログラミングする際に、関数に説明を追加する場合が多いため、Doxygen対応のコメント方法について記載する。

記事の目的


Doxygen対応のコメント記載方法について記す

Doxygen対応のコメント


ここでは、Doxygen対応のコメント記載方法について記す。

ファイルへのコメント

ファイルの先頭に、ファイル内のプログラムの説明を記載する。
/**
 * @file ファイル名.h
 * @brief 簡単な説明
 * @author 書いた人
 * @date 作成日付
 */

関数へのコメント

関数毎に、関数の説明を記載する。
/**
 * @fn func1(int, int)
 * ここに関数の説明を書く
 * @brief 要約説明
 * @param arg1 引数の説明
 * @param arg2 引数の説明
 * @return 戻り値の説明
 * @sa 参照すべき関数を書けばリンクが貼れる
 * @detail 詳細な説明
 */
void func1(int arg1, int arg2)
{}

変数へのコメント

変数毎に、変数の説明を記載する。
//! 変数へのコメント
int a = 0;

マクロへのコメント

マクロ毎に、マクロの説明を記載する。
/** @def
 * マクロのコメント
 */
#define MAX_XXX 256

列挙体へのコメント

列挙体毎に、列挙体の説明を記載する。
/**
 * @enum Enum
 * 列挙体の説明
 */
enum Enum {
    //! 列挙体の各要素の説明
    EnumItem1 = 0x00,

    //! 列挙体の各要素の説明
    EnumItem2 = 0x01
};

構造体へのコメント

構造体体毎に、構造体の説明を記載する。
/**
 * @struct     構造体名
 * @brief      構造体の説明
**/
struct Struct{
    //! 構造体の各要素の説明
    StructItem1 = 0x00,

    //! 構造体の各要素の説明
    StructItem2 = 0x01
};

クラスへのコメント

クラス毎に、クラスの説明を記載する。
int global_var1
int global_var2
int global_var3
int global_var4

/*! @class Class1
    @brief  クラスの説明
*/
class Class1 {
public:
    /*! メンバ1の説明 */
    int member1;

    int member2; /*!< メンバ2の説明を横につける */

    /*! メソッド1の説明 */
    int method1(int var1, int var2);

    /*! メソッド2の説明。詳細説明
        @param[out]     var1    var1の説明
        @param[in]      var2    var2の説明
        @param[in,out]  var3    var3の説明
        @par            Refer
        - 参照するグローバル変数 global_var1
        - 参照するグローバル変数 global_var2
        @par            Modify
        - 変更するグローバル変数 global_var3
        - 変更するグローバル変数 global_var4
        @return         成功 0, 失敗 0 以外 など
        @exception      例外。不要であればnoneを記述
    */
    int method2(int var1, int var2, int var3) {
    ...
    }
};

まとめ


  • Doxygen対応のコメント記載方法を調査、記載した

参考文献



変更履歴


  1. 2019/09/01: 新規作成

MQTTの導入

背景 IoTデバイスの接続環境構築のため、MQTT(mosquitto)の導入を行った。 記事の目的 MQTT(mosquitto)をUbuntuに導入する mosquitto ここではmosquittoについて記載する。 MQTT MQTT(Message Qu...