エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

windowsでnpmの更新に失敗していたので解消して優勝する

発端

久々にnpmで何か作ろうとして、npm init -y したら、以下のメッセージが出てきた。

   ╭────────────────────────────────────────────────────────────────╮
   │                                                                │
   │      New major version of npm available! 6.14.5 -> 7.11.1      │
   │   Changelog: https://github.com/npm/cli/releases/tag/v7.11.1   │
   │               Run npm install -g npm to update!                │
   │                                                                │
   ╰────────────────────────────────────────────────────────────────╯

言われた通りにアップデートしようとしたら、若干ハマったので、記録に残す。
なんか、タイトルがラノベ並みに長くなってしまったな。。。

環境

$ npm -v
6.14.5

vscodeの内容貼り付け

バージョン: 1.55.2 (system setup)
コミット: 3c4e3df9e89829dce27b7b5c24508306b151f30d
日付: 2021-04-13T09:35:57.887Z
Electron: 11.3.0
Chrome: 87.0.4280.141
Node.js: 12.18.3
V8: 8.7.220.31-electron.0
OS: Windows_NT x64 10.0.19041

問題

言われたとおり、npm install -g npm したんだが、下記のエラーが。。。。

$ npm install -g npm
npm ERR! code EEXIST
npm ERR! path C:\Program Files (x86)\Nodist\bin\node_modules\npm\bin\npm-cli.js
npm ERR! dest C:\Program Files (x86)\Nodist\bin\npm.cmd
npm ERR! EEXIST: file already exists, cmd shim 'C:\Program Files (x86)\Nodist\bin\node_modules\npm\bin\npm-cli.js' -> 'C:\Program Files (x86)\Nodist\bin\npm.cmd'
npm ERR! File exists: C:\Program Files (x86)\Nodist\bin\npm.cmd
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\XXXXXX\AppData\Roaming\npm-cache\_logs\2021-04-29T05_27_15_503Z-debug.log

※XXXXXXは、伏字

なんで、言われた通りにしたらエラーが???

解決方法

npm updateで失敗

調べた結果、下記のコマンドでアップデートできると知って、ウッキウキでコマンドを実行

npm update -g npm

そして、バージョン確認

$ npm -v
6.14.5

なんで???
・・・思考がとまること1分・・・
よくよく考えたら、windows環境だと、nodistでnodeとnpmのバージョン管理していたことを思い出した。

nodistで最新バージョンを挿れて優勝していく

nodistがバージョンアップを止めてそうだったので、nodistからアップデートを行うようにする。

やることは、下記の通り

  1. nodeのバージョン確認
  2. 使えるnodeのバージョンを調査
  3. 使うnodeをインストール
  4. npmをnodeに合わせる

順番に説明する。

nodeのバージョン確認

「敵を知り己を知れば百戦危うからず」と孫子の兵法でも言ってるので、まずは、どういう状況に置かれているのか調べる。

$ node -v
v14.5.0

まずは、今のバージョン把握OK。

使えるnodeのバージョンを調査

使えるnodeのバージョンを調査する。セキュリティやパフォーマンスの観点から、最新版を利用したい。

$ nodist dist
~中略~
  15.13.0
  15.14.0
  16.0.0

16.0.0が最新のLTSっぽいので、16.0.0をインストールすることに決定。

nodeをインストール

nodist use v7.2.0

なんか、インストールはいろんな文法があるみたいだけど、上記の文法が個人的には理解しやすかったので、上記コマンドでインストールする。

終わったら、インストールできているか確認

$ node -v
v16.0.0

大丈夫だね。

npmをnodeに合わせる

npmとnodeは組み合わせが決まっているので、nodistを使って、最新nodeで使えるnpmを挿れて優勝していく。

$ nodist npm match

上記が終わると、nodeに合致するnpmが使える状態になっているはず。
個人的には、7.11.xxxになっていて欲しい

$ npm -v
7.10.0

ちょっと古いみたいだけど、ま、いっか。。。
準優勝くらいは、できたと思う。

雑記

windowsだと、nodistで管理していたことを忘れる。。。
もう、windows標準でライブラリ管理提供したほうがいいのではなかろうか?

もしくは、npm updateしたときにnodistが何かメッセージ吐いてくれれば、あんまり悩まないのになぁ~とは思った。

参考サイト

よく使うnpmコマンド - Qiita

[Node.js] Node.js の導入(Windows編) - Qiita

nodistの基本操作 - Qiita

2021/04/12週 気づきと振り返り Azure Functionsは怖くない

業務こなしての問題・気づき

C#.NET

何か知らんけど、なぜか.NET案件に入ってしまった。。。

ライブラリ管理

どうやるのが普通なんだろうか?
Javaだとgradleとかmavenとかでやるけど、.NET系は何でしているのか分からん。

案の定、環境構築でミスって時間がかかってしまったよ。。。
手動でライブラリ配置とかは、無理がある。
ライブラリ数は両手じゃ数えられないくらいに増えているし、企業が扱うものとなると、大規模になるから、管理系のライブラリが1つはないと難しい。

eclipse後遺症

ショートカットをeclipseと同じコマンドでやろうとして、何で動かないんだ?って一瞬焦る。

IDEが違うと、よく起こるよね。。。
設定で似せたりできるのなら、合わせた方が無難な気がする。
オジサンの頭じゃ、新しいことになれるまで時間がかかる。

LINQ

ラムダ式だから、特に違和感なく使えてる。

Javaのストリームと比べると、使いづらく感じる。
俺が使いこなせてないだけかも知れないが、JavaでできることがC#でできないのに憤りを覚える。

あと、for文で書かないと実現できないことが多すぎる気もする。

ASP.NET

初めて触るけど、HTMLベースなのはいいが、デザイナーとの共存は無理そうだな。。。
必ず、エンジニアが大幅に手を入れる必要性がある。
HTMLヘルパーをよく使うが、それをデザイナーに求めるのは無理そう。

個人的には、あんまり使いたくはないな。。。

async/awaitで悩んだ

web apiを作ったので、当然のように、webサイトから叩く機能も作った。

async/awaitは、javascriptと同じような感覚で使ったのだが、デットロックが発生してかなり悩んだ。。。
下記の資料を見て解決はしたけど、未だに納得はしてない。

www.slideshare.net

闇が深そうな予感がするので、深入りはしないが、いろんな人が.NETの開発で悩まされる場所なんだということは理解できた。
javascriptと同じ感覚で使うのは、危険だというのが今回の教訓。

Azure Functions

使ってみたけど、web APIを作るのとほぼ変わらない。

クラウドってワードで、何か得体の知れないものってイメージがあるみたいだが、Web APIを何度か作って来たものとしては、それほど何度の高いものではなかった。

HTTPの知識と、セキュリティ絡みの知識があれば、難なく作れそうな感じがする。

あとは、仮想環境がイメージできれば、基本的にWebアプリの開発と変わらない。
参画する前に、かなりビビらされたが、それほど身構えなくても良かったなとは思った。

その他

情報処理技術者試験

ネットワークスペシャリストを受けた。
ほとんど勉強することができなかったが、ある程度は書けたと自負しております。
でも、合格しているとは思えないんだよな。。。

visual studioでの開発

動作は、思ったより軽快だった。
ただ、eclipseを長く使ってきたので、いろいろと迷いはする。

料理に凝りだした

在宅も1年近くになろうかという今になって、料理に凝るようになってきた。
youtubeで料理動画とかよく見る。
ざっくり下味の付け方とかをよく見る。大さじ一杯とか細かい分量言われても、覚えられないので、感覚的に覚えて、あとは実践しながら分量を好みで入れることが多い。

肉料理は、下味をちゃんとつけられるかどうかで旨さが全然違うと感じた。
意外と、外食並の味だったら、下味さえちゃんとすれば再現できるんだなとは思った。

子ども・動物系の動画

最近、 子ども・動物系の動画もよく見る。
単純に、行動が予想できないから、面白い。
芸人のありきたりなネタを見るより、癒やされるし笑ってしまう。

幼稚園児の動画を見てると、俺はどうだったのか思い出しちゃうね。
少なくとも、サンタは信じてなかったし、お遊戯会がものすごく嫌いだった。
大人の自己満足に付き合ってあげるのが、面倒だな~と思っていたフシがある。
サンタがいい例。サンタがいないことはとっくに分かっているのだが、大人が子どもに求めてるリアクションをしなければならないのが、無性に嫌だった。
家族は、サンタに会うのを恥ずかしがってると思っていたらしいが、やりたくもないことをやるから恥ずかしかったのだよ。。。
お遊戯会も同じ。クソダサ踊りを公衆の面前でやらなければならないことが苦痛。
保育園のときは、お昼寝の時間とかあったけど、寝たことはなかったな。
そもそも、昼寝は時間を無駄にしているという価値観だった。
保育園の頃のお昼寝の時間は、天井のシミを見て、何かを空想していた記憶がある。
今考えると、相当面倒臭い子どもだとは思う。。。

そう考えると、動画に写ってる子は、純粋だな~と感心してしまう。

たまに、ひねくれた子どもも見てみたいな~とは思う。

【Java】Java16先取り調査 環境構築編

検証環境

Visual Studio Codeのバージョン情報そのまま貼り付け。

バージョン: 1.53.2 (system setup)
コミット: 622cb03f7e070a9670c94bae1a45d78d7181fbd4
日付: 2021-02-11T11:48:04.245Z
Electron: 11.2.1
Chrome: 87.0.4280.141
Node.js: 12.18.3
V8: 8.7.220.31-electron.0
OS: Windows_NT x64 10.0.19041

環境構築

sdkmanがインストール済みで話を進める。
sdkmanのインストールやら使い方は、過去の記事参照

suzaku-tec.hatenadiary.jp

Java16のインストール

インストールするバージョン情報を確認する。

$ sdk list java

結果

================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 AdoptOpenJDK  |     | 15.0.2.j9    | adpt    |            | 15.0.2.j9-adpt
               |     | 15.0.2.hs    | adpt    |            | 15.0.2.hs-adpt
               |     | 11.0.10.j9   | adpt    |            | 11.0.10.j9-adpt
               |     | 11.0.10.hs   | adpt    |            | 11.0.10.hs-adpt
               |     | 11.0.9.open  | adpt    |            | 11.0.9.open-adpt    
               |     | 11.0.5.hs    | adpt    | local only | 11.0.5.hs-adpt
               |     | 8.0.282.j9   | adpt    |            | 8.0.282.j9-adpt
               |     | 8.0.282.hs   | adpt    |            | 8.0.282.hs-adpt
               |     | 8.0.275.open | adpt    |            | 8.0.275.open-adpt
 Alibaba       |     | 11.0.9.4     | albba   |            | 11.0.9.4-albba
 Amazon        |     | 15.0.2.7.1   | amzn    |            | 15.0.2.7.1-amzn
               |     | 11.0.10.9.1  | amzn    |            | 11.0.10.9.1-amzn
               |     | 8.282.08.1   | amzn    |            | 8.282.08.1-amzn
 Azul Zulu     |     | 15.0.2       | zulu    |            | 15.0.2-zulu
               |     | 15.0.2.fx    | zulu    |            | 15.0.2.fx-zulu
               |     | 11.0.10      | zulu    |            | 11.0.10-zulu
               |     | 11.0.10.fx   | zulu    |            | 11.0.10.fx-zulu
               |     | 8.0.282      | zulu    |            | 8.0.282-zulu
               |     | 8.0.282.fx   | zulu    |            | 8.0.282.fx-zulu
               |     | 6.0.119      | zulu    |            | 6.0.119-zulu
 BellSoft      |     | 15.0.2.fx    | librca  |            | 15.0.2.fx-librca
               |     | 15.0.2       | librca  |            | 15.0.2-librca
               |     | 11.0.10.fx   | librca  |            | 11.0.10.fx-librca
               |     | 11.0.10      | librca  |            | 11.0.10-librca
               |     | 8.0.282.fx   | librca  |            | 8.0.282.fx-librca
               |     | 8.0.282      | librca  |            | 8.0.282-librca
 GraalVM       |     | 21.0.0.2.r11 | grl     |            | 21.0.0.2.r11-grl
               |     | 21.0.0.2.r8  | grl     |            | 21.0.0.2.r8-grl
               |     | 20.3.1.2.r11 | grl     |            | 20.3.1.2.r11-grl
               |     | 20.3.1.2.r8  | grl     |            | 20.3.1.2.r8-grl
               |     | 19.3.5.r11   | grl     |            | 19.3.5.r11-grl
               |     | 19.3.5.r8    | grl     |            | 19.3.5.r8-grl
               |     | 19.1.0       | grl     |            | 19.1.0-grl
 Java.net      |     | 17.ea.13     | open    |            | 17.ea.13-open
               |     | 17.ea.2.pma  | open    |            | 17.ea.2.pma-open
               |     | 17.ea.2.lm   | open    |            | 17.ea.2.lm-open
               |     | 16.ea.36     | open    |            | 16.ea.36-open
               |     | 15.ea.36     | open    | local only | 15.ea.36-open
               |     | 15.0.2       | open    |            | 15.0.2-open
               | >>> | 15.0.1       | open    | local only | 15.0.1-open
               |     | 14.ea.36     | open    | local only | 14.ea.36-open
               |     | 14.ea.24     | open    | local only | 14.ea.24-open
               |     | 11.0.10      | open    |            | 11.0.10-open
               |     | 11.0.2       | open    |            | 11.0.2-open
               |     | 8.0.282      | open    |            | 8.0.282-open
               |     | 8.0.265      | open    |            | 8.0.265-open
 Mandrel       |     | 21.0.0.0     | mandrel |            | 21.0.0.0-mandrel
               |     | 20.3.1.2     | mandrel |            | 20.3.1.2-mandrel
 SAP           |     | 15.0.2       | sapmchn |            | 15.0.2-sapmchn
               |     | 11.0.10      | sapmchn |            | 11.0.10-sapmchn
 TravaOpenJDK  |     | 11.0.9       | trava   |            | 11.0.9-trava
================================================================================
Use the Identifier for installation:

    $ sdk install java 11.0.3.hs-adpt
================================================================================

欲しいのは、Java16なので、下記のコマンドで16.ea.36をインストール。

$ sdk install java 16.ea.36-open

インストールできたかバージョン確認。

$ java -version
openjdk version "16" 2021-03-16
OpenJDK Runtime Environment (build 16+36-2231)
OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)

$ javac -version
javac 16

ちゃんと変わったので、環境構築終了

2021/02/01週 気づきと振り返り 「辛い」しか思いつかない

業務こなしての問題・気づき

画面に詰め込み過ぎは良くない

画面に大量に項目があるのだが、結合テストがキツイ。。。
打鍵ミスも多いし、頭がパンクしそう。。。

期限もあるし、かなり焦る。
正直、データ準備するだけで億劫になるのが辛い。

業務がわからない状態での結合テスト

テストになってるのかよく分からない。。。
業務がわからないから、データ準備もかなり苦戦する。

聞いたら、若干キレ気味に答えられるし、苦痛が半端ないですわ。。。

はじめての心療内科

案外あっさり終わった。
ヒアリングして薬だった。

なんか、もっとこう掘り下げられるのかと思ったが、そんなものなのだろうか?

軽めの睡眠薬と気分高揚の薬をもらった。

【書評】コンピュータアーキテクチャのエッセンス

読むに至ったきっかけ

翔泳社ブックアンバサダー』に応募した結果、当選したので読むに至る。
いくつか候補があったが、一番興味を引いたので選んだ。

目次

第1章 序論と概要

■第1部 基礎

第2章 デジタル論理回路の基礎
第3章 データとプログラムの表現

■第2部 プロセッサ

第4章 さまざまなプロセッサと計算エンジン
第5章 プロセッサの種類と命令セット
第6章 データパスと命令実行
第7章 オペランドのアドレッシングと命令表現
第8章 CPU:マイクロコード、保護、プロセッサモード
第9章 アセンブリ言語とプログラミングパラダイム

■第3部 メモリ

第10章 メモリとストレージ
第11章 物理メモリと物理アドレッシング
第12章 キャッシュとキャッシング
第13章 仮想メモリ技術と仮想アドレッシング

■第4部 入出力

第14章 入出力の概念と用語
第15章 バスとバスアーキテクチャ
第16章 プログラム駆動と割り込み駆動の入出力
第17章 デバイスと入出力とバッファのプログラミング

■第5部 高度な話題

第18章 並列処理
第19章 パイプライン処理
第20章 電力とエネルギー
第21章 性能評価
第22章 アーキテクチャのサンプルと階層構造
第23章 ハードウェアのモジュール化

リンク

コンピュータアーキテクチャのエッセンス[第2版](Douglas E. Comer 吉川 邦夫)|翔泳社の本

感想

献本頂いた本なので、若干贔屓目で読んでいるかも。
また、ITエンジニアと仕事に従事しているので、そういう視点から見ての感想である点を考慮して感想を見ていただければと思う。

ざっくり呼んだ感想としては、非情に内容が濃い本であったと思う。
1度ですべてを理解するのは不可能。何度も読み返したり、ネットで調べながらの作業になる。
実際、読むのがかなり大変だった。書いてある内容を吟味して、自分の中に落とし込むのが大変な1冊だったと思う。

学校で習った知識の深堀り的な意味合いが強い印象だった。
デジタル回路の仕組みや理論は、読み返しても難しい。AND、OR、NANDは、電子回路で理解はしているのだが、電子回路の設計にどう役立っているのか、学生時代はよく分からなかった。
本書を呼んで、実際に電流や時間の流れを考慮してくると、ANDとかの単純なものより、XORとかの方が使いやすいという考え方が腑に落ちた。情報処理技術者試験とかでもXORで難解なものが出てくることがあるが、どちらかというと、実務に近い方の問題だったのかもしれない。
メモリやデータの扱いに関しては、ハードよりの記載が多く、Javaエンジニアである自分には、少しハードルが高かった。学生時代にC言語を少しやっていたので、ある程度の話にはついていけたが、メモリの扱いやポインタとかを使ってない言語系の人には、かなり難解かもしれない。

本書を通して一番感じたのは、人間にとっての分かりやすさが、そのままコンピュータにとっての分かりやすさ、効率化ではないことだと感じた。
プログラマーとしてハードの知識を知っていることで、効率化に活かせるような気がするが、個人的には、最適化よりも、まずは理解しやすいものを作るべきだと思っている。
人間に理解しやすいものから、どれだけハードに寄せるかは、作ったあとに考える必要があるので、ハードの知識は、そのときに必要になってくる。
本書の知識が必要になってくるのは、そういった当たり前ができるようになってからだと思う。
自分の知識レベルを吟味した上で、本書は読むべきだと思った。
※自分に対しては、早かった気がする。。。

まとメモ

続きを読む

2021/01/18週 気づきと振り返り

業務こなしての問題・気づき

スケジュール大事

胃が痛むようなプロジェクトに入っているのだが、スケジュールがあることの大事さを痛烈に感じてる。

スケジュールがないと、頑張るラインが判断できず、真面目な僕は死ぬまで頑張るを選択してしまうのです。。。

スケジュール感が分からないのは、精神的プレッシャーを感じる。
スケジュールは、立てておかないと、チーム開発では致命的だと思った。

見当違いでも、スケジュールはあるべきだと思う。
見当違いのスケジュールは、立てた人が責任を負えばいいので、とりあえずスケジュール立てて欲しい。

VSCodeのterminal起動時に`Cannot read property ‘length‘ of null`

きっかけ

mac OSのバージョンアップして、vscode開いたときにterminalが開かなかったので、メモ

対処

bashzshに変更

terminalの設定を/bin/zshに変える。

settings.jsonを設定

settings.jsonに、下記を設定する。

"terminal.integrated.localEchoStyle": "#ffffff",

workspaceのsettings.jsonに追記したけど、既定の設定の方のsettings.jsonに追記しても大丈夫な気がする。

原因(おそらく)

.vscodeのフォルダができなかったのが原因な気がする。
「lengthがnullになってる」みたいなメッセージだったけど、なんでこの設定で直るのかは、よく分からなかった。。。

参考サイト

Cannot read property ‘length‘ of null while opening vscode terminal_昔风不起,唯有努力生存!-CSDN博客
※なんかポップアップが大量に出てきたから、リンクを開くときは注意して。

Catalinaでデフォルトシェルが「zsh」に変わる、bashとの違いは? - 新・OS X ハッキング!(241) | マイナビニュース