Typescript+NodejsでCPU使用時間を取得する

やりたくなったので記録に残しつつ実施。

概要

Windows上でCPUの使用時間を取得するnodejsコードを作成する。

環境準備

プロジェクトを新規作成。

version確認

> node -v
v20.5.1
> npm -v
9.8.0

init および install。

> npm init -y ; npm install typescript ts-node @types/node -D

初期設定

tsconfigの生成。

> .\node_modules\.bin\tsc --init --rootDir src --outDir bin 

package.jsonのscriptsを以下の通り編集(変更)する。

scripts: {
    "start": "ts-node src/index.ts",
    "bulid": "tsc"
}

開発

osパッケージからCPU情報取得して使用時間に取得日時を付与して表示するコードを作成する。osパッケージの情報は下記参照。 nodejs.org

プログラム生成

ソースファイル配置。

> New-Item src\index.ts -Force 

index.tsを以下の通り編集する。

import os from 'os';

// CPU情報の使用時間にcore番号と取得日時を付与して表示/1sec
setInterval(()=>{
    const cpus: os.CpuInfo[] = os.cpus();
    const date = new Date();
    const data = cpus.map((cpu, index) => ({date: date.toISOString(), core: index, ...cpu.times}));
    console.log(data);
}, 1000);

デバッグ実行

下記コマンドでテスト実行する。

> npm start build

> electron@1.0.0 start
> ts-node src/index.ts build

[
  {
    date: '2023-08-27T15:27:01.558Z',
    core: 0,
    user: 19031,
    nice: 0,
    sys: 153921,
    idle: 3063328,
    irq: 9890
  },

  :

正常動作確認。

JSコード生成

下記コマンドでコンパイル&ビルド

> npm run build

binディレクトリ配下にindex.jsが出力されることを確認。

感想

作業時間2時間ほど。(ほぼosモジュールの機能確認と作るものの内容決めだったが… 端末のシステム情報取得して表示するというのは課題として作りやすくていいかもしれない。 コーディング時間は10分程度。

今後は取得した情報をグラフ化したりできればいいなぁと思います。

使用端末

使用している端末。ゲームもできるという事で購入したがちょいちょいフリーズする…

XREAL Beamを使ってみて ~買っても問題ない人&買わない方がいい人~

XREAL Beam皆さん使用してますか?私は結構使用してます
X(旧Twitter)をみていていろんな意見があったので私が使っていて買っても問題ない人、買わない方がいい人について所感を述べてみたいと思います。

買っても問題ない人&買わない方がいい人

以下に該当する方は買っても問題ありません。

  • 新しいガジェットで遊びたい人
    私がそうですが、新しいもの好きの人は楽しめると思います。
  • ニンテンドースイッチを持っていて大画面でゲームしたい人
    接続して問題なく使えるので持ってる方で迫力あるゲームをしたい人は楽しめます。
  • Thunderbolt4 / DisplayPort Alt Modeの出力ポートがあるデバイス等を持っているが複数ディスプレイを配置するスペースが自宅にない人
    当然のことながらXREAL Air / Beam単体ではその楽しさは発揮できません。そして物理的ディスプレイを置く必要がありませんので省スペースでPCを扱う際に効果を発揮するデバイスだと思います。
  • 寝っ転がってThunderbolt4 / DisplayPort Alt Modeの出力ポートがあるデバイスのあるPCを使う人
    眼鏡型デバイスという事でどんな姿勢でも画面が見れるという事が利点の一つです。寝っ転がって映画など見れるのはARグラス全般に言えますがかなりの利点だと思います。
  • 外出時にThunderbolt4の出力ポートがあるデバイスを利用して仕事したい人
    私は外でそういったことはしませんが上記の使い方ができます。メインディスプレイの表示をオフにすればショルダーハックの心配もなくなります。
  • ARグラスの技術が発展してほしくて投資したい人
    技術発展にはお金がかかります。リリースされたものを購入することで開発の支援になります。
  • XREAL Air / Beamを使いこなせる人
    他使いこなせる人は買っても問題ありません。当然ですね。

逆に以下に該当する方は買わない方がいいです。

  • XREAL Air / Beamに実用性を求めている人
    必須級の実用性があるかというとそうではありません。現状なくてもも問題ないといったレベルの代物です。今後に期待。
  • ディスプレイ何枚でも買える環境がある人
    長時間使用していると目が疲れます。1日3時間ほどぶっ続けで使用しましたがそこそこ目に疲労がたまりました。
  • Thunderbolt4 / DisplayPort Alt Modeの出力ポートのデバイスを持っていない人
    当然出力できるデバイスがなければ活用できません。Beam事態にアプリを入ればできますが公式が推奨している使い方ではないので自己責任になります。
  • XREAL Air / Beamを使いこなせない人
    XREAL Air / Beamは道具です。使いこなせない人が買っても置物にしかなりません。

Beamに望んでいること

さっさとChromeCast対応してほしいですね。あとはBeam自体にNebulaアプリインストールできるようにしてAirCastできるようにしてほしいところ。

その他

スマホのカメラと連動して危険察知とか情報を表示とかできるようになれば面白そうですね。すでに以下のような技術も検討されているみたいですし。

ascii.jp

ドローン+カメラができるなら以下の製品で何かできそうではありますが、金欠のため試せず。だれかやってくれませんか…

XREAL Air / Beam

XREAL Beamのアクセサリ類購入

Twitterで紹介している人がいたのでCan Doに行き以下のコンパクトハードケースとカラフルストラップを購入。 名前の通り若干硬いケースと、色付きのストラップ。ストラップは灰、黄色、ピンクとあったが青を購入。

このぴったりのおさまり具合。まるでこれ専用に作られたような感じ。

誤って手を放してもストラップつけると安心ですね。

XREAL Beam到着&いろいろセッティング

XREAL Beam が我が家に到着

段ボールの箱にシックでおしゃな箱に梱包されて到着。先行予約おまけの付属のUSB-Cケーブル同梱されていた 。

開封後の本体とXREAL Airの画像

初期設定1

説明書によるとXREAL Airグラスを接続すると起動するようなのでグラスを装着して本体に接続 。2~3秒で起動しXREALのロゴが描画される。しばらく待っていると操作説明のチュートリアルが表示されるので画面の案内に従い下へスクロールする。初期設定が開始されまずは言語、地域の設定を促されるので日本語、日本を選択して次へ進む。

早速問題が発生

あの…一部中国語のままなのですが…まぁ初期ロットだろうしそういうこともあるだろうと気にせず続きを実行。

初期設定2

WiFi接続設定が求めらる。スキップして設定いろいろ変更したかったがスキップなどはできないようだ(正直あとで設定できるようにしてほしい)。指示に従いWiFi設定して次へ進んだところいきなりFWのアップデートが入る。発売後まだ日がたってないのにアップデートされるのか…と疑問に思いつつも終わるまでマリオカート8をして時間つぶす。

無事起動

FWアップデートが終わったら無事(一部中国語のままだが)起動する。初期画面は時計表示、Bluetoothボタン、WiFiボタン、ユーザガイド、ミラーリングガイドのみの簡素な画面である(Eva launcherというホームアプリらしい)。

Nintendo Switchと接続

Beam本体左側のUSB-Cと付属のUSB-CケーブルをNintendo SwitchのUSB-Cに接続すると問題なく認識され、ゲームができる。

今までだとヘッドマウントディスプレイで首を振るとそのまま画面が追従してきたが、Beamの空間ディスプレイでは微妙に頭が揺れる程度では画面が付いてこないためかなり見やすいものとなっていた。好みの問題があると思うが、私はこちらのほうが見やすいと感じた。

ゲーム画面の遅延なども体感できずマリオカート8であれば通常通りプレイが可能であることは確認できた。

Google Pixel7a と接続

ほとんどのデバイスと接続できるとうたっていたBeamだが、事前の紹介でMiracastの技術を使用して接続とあったので正直期待していなかった。まぁその通り有線、無線ともにGoogle Pixel7aは接続できなかった

iPhone と接続

持ってないので試せず。
Twitter…あ、Xで投稿されている内容ではYoutubeアプリなどのキャストもまともに見れないとのこと。

Miracast可能端末 と接続

持ってないので試せず。
Twitter…あ、Xで投稿されている内容ではYoutubeアプリなどのキャストもまともに見れないとのこと。

裏技

ここから先は公式が何も保証していない内容になるため、このブログを見て試す人が出ても自己責任になる内容です

素の状態だと現状Nintendo Switch専用のデバイスジャ正直微妙だなぁとおもいつつも、TwitterやWebで情報をあさっていたところRedditに下記投稿がされているのを発見。全文英語ですが、要するにAndroidであるBeam本体にアプリをいれる方法があります。Beamにはまだまだ可能性があるので一緒に楽しもうぜという内容ですね。
www.reddit.com

必要なもの

私が使用しているのは以下

個人的にエレコムの製品ははずれがないと思っています。エレコム最高!
慣れるのに時間かかる。細かい操作は無理。値段相応の機能。ごろ寝タブレット用に購入したが使いにくくてほぼ使わなかったがこういう時に役に立つ。Mode+Dで活用。

アプリインストール準備 簡易手順

  1. Bluetoothマウス、キーボードを接続
  2. Win + n キーで通知を開く(Twitter...あ、Xで見た情報)
  3. 通知を広げて歯車アイコンをクリックして設定を開く
    ※1 ここで私は問題発生。何度クリックしても設定が開けなかった。最終的にBeamをリセット→言語設定→WiFi接続→通知表示→歯車アイコンを選択を繰り返していたら解消した。原因不明。そういえば一部中国語も何回か試すうちに直っていた。
    ※2 設定が開けばあとはAndroidおなじみの手順となる。必要なら言語設定もここで行う。
  4. 設定からデバイス情報を表示
  5. ビルド番号を連打して開発者モードをONにする
  6. システムから詳細を開き開発者モードを開く
  7. 下のほうにある「アクティビティを保持しない」を有効にする(有効にしないと動画再生系のアプリで動画が再生できなくなったりする)

アプリインストール手順

手順というほどでもないが、ここまで来たらあとはブラウザを開いてapkをダウンロードしインストールするだけである
BeamにプリインストールされているブラウザはLightningブラウザのようなのでとりあえずそちらを利用して取得する

  1. 設定メニューからすべてのアプリを開く
  2. すべてのアプリを表示
  3. Lightningを選択
  4. アプリ名を検索してapkダウンロード(上記リンクの投稿でAptoide TVというものを利用していたのでせっかくなのでそちらを利用)
  5. 設定メニューからすべてのアプリを開く
  6. すべてのアプリを表示
  7. ファイルを選択
  8. ダウンロードにapkが表示されているのでクリックしてインストール

あとはお好みで必要なアプリを入れる。

私がいれたアプリ

これでBeam本体とXREAL AirのみでどこでもYoutubeとPrimeビデオ、自宅のメディアサーバーの動画ファイルが見れるようになったので快適な生活を送ることができる。
Redditに投稿してくれた兄貴には感謝の気持ちでいっぱいです。

Gemforexがサービス一時停止だってよ

gemforex.com

見事に被害にあった愚かな人間です。はい。
8/1にサービス再開され出金できるようになることを期待するしかないわけだが、M&Aがほぼほぼ確定ならサービス止める必要ないから駄目だろうなぁ。
というか普通に8/1にサービス開始されるとしてユーザがそのまま使い続けたいと思いますかね?少なくとも私はサービス再開されたら全額出金しますよ。だって怖いもん。
問題は利益が出ているので税金がかかること。ずるずる継続して倒産しなければだしていた利益に課税されちゃうってところですね…。

8/1にサービス再開しないなら、調べた感じさっさと倒産してくれれば税金はかからないはず。

というわけで、とりあえずXMTradingに口座作りました。ここから再スタートです。(懲りない愚か者)
昨日の17時ごろに新規口座開設申し込み、必要書類アップロードして24時ごろに審査通りました連絡が来ました。早いっすね!マイナンバーカードの唯一のメリットを受けました。

Nodejs v20 が公開されたので使ってみる~単一実行可能ファイル作成を試す~

主な更新箇所

下記6点(詳細はリンクを参照)
* Experimental Permission Model
* A synchronous import.meta.resolve
* Stable Test Runner
* V8 JavaScript engine updated to 11.3
* Single Executable Apps
* Ada to 2.0

あとはWindowsもARM版がリリースされてるとのこと

openjsf.org nodejs.org

アンインストール

既存Versionをアンインストール

sudo apt remove nodejs apt

インストール

私の環境はUbuntuなのでaptで…と言いたいところだけどまだ公開されてないっぽいのでバイナリを取得
以下からダウンロード
Download | Node.js

$ VERSION=v20.0.0
$ DISTRO=linux-x64
$ wget https://nodejs.org/dist/$VERSION/node-$VERSION-$DISTRO.tar.xz -O /tmp/node-$VERSION-$DISTRO.tar.xz
$ sudo mkdir -p /usr/local/lib/nodejs
$ sudo tar -xJvf /tmp/node-$VERSION-$DISTRO.tar.xz -C /usr/local/lib/nodejs 
$ sudo ln -s ./node-$VERSION-$DISTRO /usr/local/lib/nodejs/node

wgetするURLはダウンロードページのバイナリを指定

.profileに下記追加

export PATH=/usr/local/lib/nodejs/node/bin:$PATH

Version確認

$ . .profile
$ node -v
v20.0.0
$ npm version
{
  npm: '9.6.4',
  node: '20.0.0',
  acorn: '8.8.2',
  ada: '2.0.0',
  ares: '1.19.0',
  brotli: '1.0.9',
  cldr: '42.0',
  icu: '72.1',
  llhttp: '8.1.0',
  modules: '115',
  napi: '8',
  nghttp2: '1.52.0',
  nghttp3: '0.7.0',
  ngtcp2: '0.8.1',
  openssl: '3.0.8+quic',
  simdutf: '3.2.7',
  tz: '2023c',
  undici: '5.21.0',
  unicode: '15.0',
  uv: '1.44.2',
  uvwasi: '0.0.16',
  v8: '11.3.244.4-node.3',
  zlib: '1.2.13'
}

試してみる

パフォーマンス改善の[V8 JavaScript engine updated to 11.3]
使いやすくなった[Stable Test Runner]
モジュール開発に使用する[A synchronous import.meta.resolve]
権限管理が可能になる[Experimental Permission Model ] [Ada to 2.0]は2.0に更新
上記はとりあえず追々やりたいと思う

個人的に気になったSingle Executable Appsを試したいので試す。

Single Executable Apps

直訳で単一実行可能アプリ。つまりNodejsで実行可能バイナリファイルが作成できるようになったという事。
まだ試験的な機能らしいが、もしこれが本実装された場合、今後Nodejsをインストールせずに作成したNodejsアプリが実行可能になるため、配布などがしやすくなる。とてもうれしい。
どうも機能が組み込まれたのはNode19.7からとのこと。Node18までしか触ってなかったのでもっとちゃんと追っていきたいなと思う。

APIドキュメントにサンプルがあるのでまずはそれを試す。

Single executable applications | Node.js v20.0.0 Documentation 見た感じ作成したスクリプトでBLOBを作成してインストールしているnodeコマンドに挿入して動かす仕組みっぽい。(すごいことしてない?)
とりあえずサンプルそのまま試す。

  1. サンプルスクリプト生成
$ echo 'console.log(`Hello, ${process.argv[2]}!`);' > hello.js 
  1. 構成ファイルを作成
$ echo '{ "main": "hello.js", "output": "sea-prep.blob" }' > sea-config.json 
  1. BLOBを生成
$ node --experimental-sea-config sea-config.json 
Wrote single executable preparation blob to sea-prep.blob
  1. ベース実行可能ファイル作成
$ cp $(command -v node) hello
  1. バイナリの署名を削除 MacOSWIndowsはここで署名削除をする。

6 生成したベース実行可能ファイルにBLOBを挿入 Linuxは下記コマンドで挿入可能。npxはnodejs v20に標準でインストール済み。postject も実行時にインストールしてくれるっぽい。

npx postject hello NODE_SEA_BLOB sea-prep.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 

github.com

  1. バイナリに電子署名 MacOSWIndowsはここで署名をする。

  2. 実行してみる

$ ./hello 世界
Hello, 世界!
(node:4453) ExperimentalWarning: Single executable application is an experimental feature and might change at any time
(Use `hello --trace-warnings ...` to show where the warning was created)

試験的な機能である旨警告は出ますが実行はできました。

  1. 出力されたファイルを確認
$ ls -l hello
-rwxr-xr-x 1 nao nao 95685760 Apr 21 01:16 hello

Nodejsのバイナリにくっつけているため最小でも92MBになりますね…