えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

Windows11 Insider Preview + WSLg動作確認など(Twitterアーカイブ)

Windows Insider Previewを試してみた。「WSLg」がやばい - えいあーるれいの技術日記の続きです。

f:id:Ray_ar:20210629225725j:plain

Windows11が2021年6月29日にInsider Previewとして配信されました。久しぶりのWindowsアップグレードであったため、SNSなどで話題になりました。

早速Windows11を入れていろいろ確認してみましょう。

インストール

インストールについては、Windows10のInsider Previewでdevチャンネルに切り替えて、Windows updateから更新を行います。1時間くらいインストールに時間がかかりました。

再起動を行いました。

NVIDIA Driverが心配だったのですが、とくに問題なく起動できました。

NVIDIAドライバの生存確認をしました。Windows Terminal (PowerShell) を起動して、"nvidia-smi.exe"を実行します。

???となったところについて、CUDAのサポートバージョンが11.4になっていました。NVIDIA Driver versionが470から471.11にアップグレードされるようです。べつに困る人はいないと思いますが、少し注意しておきましょう。

WSLgについて

※Dockerを使う予定はなかったので試していないです。

Windows10 Insider Previewで動いていたWSLgがWindows11でお試ししました。

Ubuntu(WSL2)のターミナルを開いてRviz2を起動しました。

期待通りではありましたが、起動できました。しかし、まだ不具合が残っているのかわかりませんが、Darknetの画像描画が正しくされていませんでした。(画像なし)

おそらくすぐ改善されるとは思いますが、OpenCV系の描画には少し問題がありそうですねーー。

Windows11のデザインについて

GUIが丸みが出ているようです。

ウィジェット(新機能)

スマートフォンみたい

誘導がわかりやすくなりました。文字の大きさなどがおおきくなって見やすくなりました。

アプリケーションも丸っぽくなっています。例えばTera Term(SSHやシリアルコンソールなどが使える便利アプリ)

その他にもタッチを前提にした使い方に最適化されているものもあるそうです。私はそれを持っていないので試していません。

少し問題点?

残念ながら、今のところ少し困るところもあります。

ところどころにFPSが表示されます。Windows10ではWindows TerminalでFPSが表示されることもありましたが、スタート画面でも見られるようになってしまいました。(う〜ん????)

これは、設定で変えられるとは聞きますが、FPSを確認するテストをすることもあるので、できればOFFにしたくないです。

Windows11にアップデートすべきか

Windows11にアプデしていいとおもいます。特に致命的な不具合があるわけではないと思いました。

ただし、絶対にGUIの不具合だけは起こしたくない場合はInsider Previewに切り替えないほうが良さそうです。

The font Arial-ItalicMT is not embedded in the file. の対処法

論文を提出するときにたまに遭遇するエラー。「The font Arial-ItalicMT is not embedded in the file.」。IEEE系の論文だとこのエラーが起こるみたいです。

論文投稿最終日ギリギリに提出する場合にはこのエラーは理不尽そのものでしょう(実際遭遇して詰みかけた…)

ほとんどの場合、Adobe printerで解決することができるらしいですが、そんなもの買っていないので、対処ができません。

しかし、これはUbuntu (WSL)のgsコマンドで解決できるみたいです。

$ gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dEmbedAllFonts=true -sOutputFile=./output.pdf -f input.pdf

論文投稿お疲れさまでした☕

参考サイト

askubuntu.com

Remote Repositoriesを使ってみる。GitHubリポジトリをVSCodeで直接編集!?

Remote-repositoriesというVSCodeのツールが発表されました。

code.visualstudio.com

このツールは、オンライン接続を前提としてGitHubリポジトリVSCode上で取り扱うことができるとても強力なツールです。

わずか数ステップでGitHubリポジトリをコミットでき、ディスクを全く圧迫しない(findコマンドで検出できない)ため、GitHub上で面倒なタブ移動とVSCodeならではのClone作業のどちらも不要になります。

しかも、一度登録すれば簡単にリポジトリに復帰することができるので、ブラウザのGitHubVSCodeで読むということが簡単に実現してしまいます。

少し試してみたので、主な機能について紹介したいと思います。

インストール

VSCodeは予めインストールされていることを前提とします。

「Extensions」タブにおいて「remote repositories」と入力して検索して、「Remote Repositories」をインストールします。

f:id:Ray_ar:20210617111705p:plain

GitHubアカウントの紐づけ

GitHubリポジトリへのアクセスは、1度だけGitHubアカウントを登録する必要があります。

この登録することでどのリポジトリからもワンクリックアクセスが可能になります

登録にはGitHubに登録されているウェブブラウザが必要です(開いたタブでログインすればOKです)

f:id:Ray_ar:20210617114416p:plain

GitHubリポジトリへのURLを貼り付け、Enterを押すと、初回のみ自動的にWebブラウザが開くので、ログインするなりして登録します。

f:id:Ray_ar:20210617115943p:plain

これでリポジトリを取得できます(Cloneしていません)。

編集作業(めちゃ快適)

GitHubへのコミットはなんとわずか2ステップ!

  1. なにかしら変更を加える
  2. "Source Controll"タブに移動し、コミットメッセージを入力する
  3. チェックボタンを押す

f:id:Ray_ar:20210617105630p:plain

結果、チェックボタンを押した時点でのコミットがGitHubリポジトリに上書きされ、ログが残りました。

f:id:Ray_ar:20210617105644p:plain

ブランチの作成やチェックアウトも簡単です。これまでのGitHub連携のときと同様に使うことができます。

注意点

GitHubの仮想環境にアクセスしているらしいので、次の点に注意が必要です。下記は、Remote Repositoriesの翻訳です。

デバッグ、ターミナル、タスク - 現在はサポートされていません。ターミナルはローカルファイルシステム上で開き、リモートリポジトリの仮想ファイルシステムにはアクセスできません。

・限定的な言語インテリジェンス - 多くの言語がリモートリポジトリの仮想環境をまだ理解していないため、インテリセンスやGo to Definitionなどの機能が影響を受ける可能性があります。

・検索 - GitHubの検索には、ブランチのインデックスを作成できないなどの制限があります。リモートリポジトリでは、インデックスを有効にすることでこの制限を回避し、全文検索を行うことができます。インデクシングは、GitHub からリポジトリの浅いクローンを取得してローカルで全文検索を行うもので、GitHub のファジーなデフォルトブランチのネイティブ検索よりも強力です。リモートリポジトリのインデックス化は、検索ビューから有効にできます。

・エクステンションの制限 - すべてのエクステンションが仮想ワークスペースでの実行をサポートしているわけではありませんが、時間の経過とともにサポートするエクステンションが増えていきます。ローカルファイルへのアクセスに大きく依存しているエクステンションは、この設定をサポートできません。詳細については、以下の仮想ワークスペースのセクションを参照してください。

コンパイルや実行は難しいみたいですねー。PCに保存されているわけではなく、あくまでリモートアクセスらしいです。

そのため、この機能の使いみちとしてはドキュメント・Wiki編集が向いてそうです。

開発途上ということもあり、これからもっといい機能が追加されるといいですね。

少なくとも軽く確認したいのにクローンをいちいち行うのが面倒な人やファイル管理が面倒な人向けだなーと思いました。

VSCodeとは?

VSCode (Visual Studio Code)はMicrosoftが開発するクロスプラットホームなIDE機能付きエディタです。軽量・Git付き・リモートアクセス可・GUIの美しさなどのエディタに求める要素をほぼ全て詰め込んだ非常に強力なツールで、2019年の時点で51%のシェアを誇る大人気エディタとなりました。

VSCodeに外部プラグインを作ったり(PlatformIO)、VSCodeを他のエディタのベース(Arduino 2.0)にすることもできるなどの圧倒的な拡張性があるのも特徴。

オススメ書籍(画像は商品リンクにつながっています)

無料なのに強いPDFエディタ「Microsoft Edge」をUbuntuで使う

 Windows10だとかなり鬱陶しい扱いを受ける何かと不遇なブラウザアプリ「Microsoft-edge」。

f:id:Ray_ar:20210615135806j:plain

 コレが、意外にもUbuntuだと使える機能が多くて便利な場合があります。

 それは、「PDF書き込み機能」。PDF書き込みには専用のエディタを購入することが前提になります。結構書き込む機会はあるので、必須アプリとなりがちですが、学生のお財布を考えると少し買うのを躊躇するかもしれません。

 Microsoft EdgeはPDF書き込み機能やハイライト機能がデフォルトでついており、無料のPDFライターとしても非常に完成度の高いアプリです。

 そのMicrosoft Edgeが今年の3月頃にUbuntuにDev版としてリリースされました。

 他の記事でも紹介されていますが、とてもオススメなので、メモを兼ねて紹介します。

インストール

次の手順でインストールします

$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
$ sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
$ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list'
$ sudo rm microsoft.gpg
$ sudo apt update   
$ sudo apt install microsoft-edge-dev

起動

起動アイコンを押すか、microsoft-edgeコマンドで起動します。

 Google Chromeのようなウェブブラウザと同様にPDFを開くことができます。

 インクやハイライトを使うことができ、落書き可能です。タッチパッドやマウス、ペンタブレッドなどで書くことができます。

 以下の画像のように、PDFにいろいろ書き込むことができます。(AVRマイコンにヘイトがあるわけではありません)

f:id:Ray_ar:20210615135927p:plain

 保存するときは、Ctrl+sで保存できます。

参考資料など

参考記事を示します。

https://docs.microsoft.com/ja-jp/deployedge/microsoft-edge-pdf

https://www.infoq.com/jp/news/2021/01/microsoft-edge-linux-preview/

M5 Core2のRTCからUNIXTIMEを取り出す

 久しぶりに誰得情報を流したいと思います。この記事ではM5 Core2のRTCからUNIXTIMEを取り出すプログラムを解説します。


 M5 Stack Core2にはマイコンボードには珍しくRTC(リアルタイムクロック)が内蔵されています。

 RTCは時間を正確に刻むことができるデバイスで、PCや時間管理が必要な組み込みデバイスによく搭載されます。ソフトウェアタイマと異なり、とても精度がいいのにデバイスの電池切れに関わらず長期間動き続けることができます。

 M5 Core2のRTCを使えば、目覚まし時計や腕時計などの実装を行ってスリープモードを実装したとしても時間を保持することが容易になり、工作の幅が広がるというわけです!

 さて、私はそのRTCを使ってコンピュータに対して時間指定の命令をしたいと思ってしまいました。(誰がなるんかい)

 しかし、RTCのクラスにはxx年xx月xx日xx時xx分xx秒という表記を行うように設計されているため、最初からUNIXTIMEを取り出せない仕様になっています。一応、それを実現させるためのmktimeというTime.hの関数はあるものの、M5 Core2ではクラッシュしてしまいました。そこで、新しく自分用の時間管理プログラムをつかうことにしました。

時間設定

 初回出荷時のM5 Core2のRTCには時間が書き込まれているわけでもないので、設定が必要です。

 3110’s gists · GitHub氏が公開されていたプログラムを使ってRTCの設定を行いました。(後に解説するプログラムのベースにもなっています。ありがとうございます。)

NTPを使ってM5Stack Core2のRTCを設定する · GitHub

実際にRTCの時間からUNIXTIMEに変換

 実際にUNIXTIMEに変更します。

 基本的には、時間変更の式で日本時間のコンピュータ時間にする→3600×9でUNIXTIME(イギリス時間)に直すという順で変更します。

 下記リンクで公開しています。

github.com

 ソースコードを以下に示します。(timetools.cpp)

uint32_t timetools::makeTime(int tm_year, int tm_mon, int tm_mday, int tm_hour, int tm_min, int tm_sec) {
  int i;
  uint32_t seconds;
  static uint8_t monthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

  seconds = tm_year * (SECS_PER_DAY * 365);
  for (i = 0; i < tm_year; i++) {
    if (LEAP_YEAR(i)) {
      seconds += SECS_PER_DAY;
    }
  }

  // add days for this year, months start from 1
  for (i = 1; i < tm_mon; i++) {
    if ( (i == 2) && LEAP_YEAR(tm_year)) {
      seconds += SECS_PER_DAY * 29;
    } else {
      seconds += SECS_PER_DAY * monthDays[i - 1]; //monthDay array starts from 0
    }
  }
  seconds += (tm_mday - 1) * SECS_PER_DAY;
  seconds += tm_hour * SECS_PER_HOUR;
  seconds += tm_min * SECS_PER_MIN;
  seconds += tm_sec;
  
  return seconds;
}

 引数を構造体にしたところM5 Core2がクラッシュしてしまったので、int型の引数を大量に付けてしまいました。まだまだ勉強不足です。C++むずい

 いわゆる典型的なunixtime->一般的な時間表記の逆バージョンになっています。実際に呼び出す際はtimetools *ttools;でクラスを宣言した状態で、

ttools = new timetools();
uint32_t unixtime = ttools->get_unixtime_from_RTC() - (3600*9);

でunixtimeを取得可能です。