weekly news 2020-08-24

JavaのRecordsで値を変更したコピーを作る構文の提案

Java 14からRecordsが搭載されていますが、いまのところ値の一部を変更したコピーを作ることはできません。 メソッドとして実現するのも、Javaでは名前付き引数がないので難しく、ビルダーのようなものを作っても利用が煩雑になりそうです。
ということで新しく構文を導入するという話が持ち上がっています。

Point p;
Point pp = p with { x = 3; }

amber-docs/reconstruction-records-and-classes.md at master · openjdk/amber-docs

Epicの開発者アカウントの全停止が通達される

Epicが30%ボリすぎと訴えてfortniteがBANされるということが起きましたが、開発者アカウントが停止されるようです。
そうするとUnreal Engineも実質Apple環境で使えなくなるので、影響はかなり広いです。
AppleがEpicの開発者アカウント全停止を通達 - PC Watch

Microsoft Flight Simulator 2020発売

CNN.co.jp : 米マイクロソフト、伝説の「フライトシム」の新作発表

地形データは自動生成です。自動生成の雰囲気はこんな感じ
2020年版「Microsoft Flight Simulator」の陰の立役者はオーストリア拠点のスタートアップBlackshark.ai | TechCrunch Japan

自動生成なので、ところどころ変な建物も発生してる模様。
福岡でも建物の中を車が通ったりしていました。
メルボルンに超巨大ビル出現!『Microsoft Flight Simulator』で世界中に不思議スポットの出現報告相次ぐ | Game*Spark - 国内・海外ゲーム情報サイト

無償のFPGA利用環境

ACRiというグループが、東工大にリモートから利用できるFPGA環境を提供しています。

東京工業大学構内には、100枚を超えるFPGAボードや開発用ソフトウェアなどが用意されている。これらのツール群をリモート環境で活用することができる」

ACRi、無償のオンラインFPGA利用環境を開設 - EE Times Japan

スバル車にZILINX FPGA

ステレオカメラからの3D化にFPGAを使っているそうな。
低遅延というのがやはり大事らしい。
スバルの新型「アイサイトX」、心臓部にザイリンクスのFPGAを採用 新型「レヴォーグ」を支えるZynq UltraScale+ MPSoC - Car Watch

ファーウェイへの制裁

アメリカの技術を使った半導体の輸出が禁止されました。
自前でのファウンドリはまだ難しいので、Samsongにお願いするしかないのかな。
ARMもつかいにくくなると、これはRISC Vへの移行が早まるかな。
CNN.co.jp : 米、ファーウェイに追加制裁 半導体の供給を禁止

自動生成ブログがハッカーニュースで1位に

GPT-3生成のブログ、ハッカーニュースで1位に

Gmailで障害

GmailやGoogleドライブのサービス障害が復旧へ - PC Watch

Rustファンデーション設立

Laying the foundation for Rust's future | Rust Blog

「Rust Foundation」が年内にも設立。Rust言語のコアチームとMozillaが発表 - Publickey

りんなが独立

雑談ができるAIを売りにする感じかな
りんなが国民的AIを目指しMicrosoftから卒業。rinna株式会社を設立 - PC Watch

NetBeansでJavaFX開発をする

NetBeansJavaFXのプログラムを作る方法を解説します。

プロジェクトを作る

まずはプロジェクト作成です。「Java with Maven」カテゴリの「FXML JavaFX Maven Archtype(Gluon)」を選んで「Next」を押します。
f:id:nowokay:20200716005904p:plain

いろいろ入力する項目がでますが、とりあえずそのまま「Finish」を押します。
f:id:nowokay:20200716005929p:plain

そうするとプロジェクトの作成が始まります。初回はいろいろとダウンロードが行われるので時間がかかると思います。

NetBeansじゃなくても、次のMavenコマンドで同じプロジェクトが生成できます。

$ mvn -DarchetypeGroupId=com.raelity.jfx \
  -DarchetypeArtifactId=javafx-archetype-fxml-netbeans \
  -DarchetypeVersion=0.0.4 \
  -DarchetypeRepository=https://repo.maven.apache.org/maven2 \
  -DgroupId=kis \
  -DartifactId=mavenproject18fx \
  -Dversion=1.0-SNAPSHOT \
  -Dpackage=kis.mavenproject18fx \
  -Djavafx-version=13 \
  -Djavafx-maven-plugin-version=0.0.4 \
  -Dadd-debug-configuration=Y \
  -Darchetype.interactive=false \
  --batch-mode \
  org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate"

ファイル構成

生成されたプロジェクトは、こんな感じのファイル構成になってます。
f:id:nowokay:20200716010611p:plain

App.javaは起動ファイル。
画面がPrimaryとSecondaryが切り替わるというプログラムになっているので、それぞれのコントローラがあります。
あと、Other SourcesのほうにFXMLファイルがあって、ここで画面が定義されています。
あとはプロジェクト構成のPOMファイルがありますね。

module-info.javaはモジュール定義ファイルなのですが、慣れないうちは あとあとハマりがちなので、消しておいたほうがいいです。

実行してみる

プロジェクトを右クリックして、メニューから「Run」を選ぶと実行できます。 f:id:nowokay:20200716010632p:plain

コマンドではjavafx:runで実行できます。

$ mvn javafx:run

実行すると次のような画面が出ます。
f:id:nowokay:20200716010658p:plain

ボタンを押すと次の画面に切り替わります。
f:id:nowokay:20200716010712p:plain

SceanBuilderの導入

それではちょっと画面をいじってみましょう。
画面定義はFXMLファイルに記述されているので、このファイルを書き換えればいいのですが、やはりビジュアルエディタで操作したい。
f:id:nowokay:20200716012443p:plain

JavaFXではScene Builderというツールが用意されているので、このツールをインストールします。
ダウンロードは次のサイトで行えます。
Scene Builder - Gluon f:id:nowokay:20200716011202p:plain

NetBeansの「Tools > Option」で設定を開いて、「Java」の中の「JavaFX」タブでScene Builderをインストールした場所を設定します。
f:id:nowokay:20200716011524p:plain

これでFXMLファイルをダブルクリックするとScene Builderが開くようになるんですが、メニューが文字化けしています。
f:id:nowokay:20200716011734p:plain

ここではメニュー操作は行わないのでそのままにしていてもいいんですが、目障りでもあります。
とりいそぎ、英語設定にしておきます。
Scene Builderをインストールしたフォルダの下のAppフォルダにSceneBuilder.cfgというファイルがあるので、これを編集してJVMオプションの項目に-Duser.language=enを追加します。

[JVMOptions]
--add-opens
javafx.fxml/javafx.fxml=ALL-UNNAMED
-Duser.language=en

ただ、恐らくパーミッションがなくて保存できないので、どこか別のところで保存して上書きコピーするか、Usersに変更のパーミッションを設定します。
f:id:nowokay:20200716011925p:plain

そうすると、メニューが英語で表示されるようになりました。
f:id:nowokay:20200716011613p:plain

日本語で表示したい場合には、検索するといろいろ出てくるのでそこの手順に従うといいと思います。
SceneBuilder 11 の文字化けを直す - Qiita

やってることは同じですが、コマンドからJarファイルを操作して対処するほうが正統っぽいやりかたです。 SceneBuilder 11で日本語が文字化けする事象の修正方法 - タツノオトシゴのブログ

ボタンを置いてみる

Scene Builderが使えるようになったので、ボタンを配置してみましょう。
ControlsからButtonを選んで一番下においてみます。
f:id:nowokay:20200716012531p:plain

保存してFXMLファイルを確認するとButtonが追加されているのがわかります。
f:id:nowokay:20200716012605p:plain

実行するとボタンが表示されていますね。ただ、ここではボタンを押してもなにも起きません。
f:id:nowokay:20200716012630p:plain

ということで、ボタンを押したときの処理として次のようなメソッドをPrimariController.javaに追加します。

    @FXML
    private void buttonAction() {
        System.out.println("Hello");
    }

そうすると、Scene BuilderでOn Actionに設定できるようになります。
f:id:nowokay:20200716012836p:plain

FXMLはこんな感じになります。
f:id:nowokay:20200716012921p:plain

実行すると、ボタンを押したときにHelloとコンソールに表示されるようになりました。
f:id:nowokay:20200716012949p:plain

コンポーネントの操作

最後に、コンポーネントから値を読み取ったり値を設定したり、コンポーネントの操作を行ってみます。

TextFieldとTextAreaを置いてみます。
f:id:nowokay:20200716024503p:plain

TextFieldとButtonを横に並べたいのだけど、全体がVBOXになっているので、ここにHBOXをいれて横にコンポーネントが並べれるようにしています。
f:id:nowokay:20200716024549p:plain

TextFieldとTextAreaを扱うフィールドを追加して、@FXMLアノテーションを付けておきます。

    @FXML
    private TextField textField;
    
    @FXML
    private TextArea textArea;

importなどはこんな感じになります。ctrl+shift+i で補完できます。 f:id:nowokay:20200716024754p:plain

そうするとScene Builderのほうでfx:idに設定できるようになります。対応するものを設定します。
f:id:nowokay:20200716025031p:plain

ボタンを押したときの処理を書き換えます。

    @FXML
    private void buttonAction() {
        textArea.appendText(textField.getText() + "\n");
    }

実行すると、テキストフィールドになにか入力してボタンを押すとテキストエリアに表示されるようになりました。
f:id:nowokay:20200716025917p:plain

ということで、あとはいろいろコントロールを追加したり処理を追加したりしてアプリケーションを作っていくことになりますね。

せんたっきを買った

せんたっき、壊れてしばらくたっていた。

けど、せんたっきの通り道に棚を置いてたりして、せんたっき様の通り道がなかったので、片付けるまで買えないってことになっていた。

なので、しばらくコインランドリー通いだったんだけど、2時間かかるし、それで洗濯の間隔があいて旅行前に服がないとか、やっぱかなり不便だった。

で、主に邪魔になっていた本の山がちくちくと裁断スキャンして片付いたのと、このたびおうち生活が長くなって部屋が片付いて、7年ごしにようやく せんたっき様が通れるようになったので、買った。
キャッシュレス還元が終わるので6月中に買いたいなと思っていたら、ちょうど新機種も出たところで、旧機種が安くなっていた。 f:id:nowokay:20200715201654p:plain

せんたっき、結構重くて、ひとりでは運べないと思っていたのでふたりで運ぶかなと思っていたら、おにいさんがひとりで軽々と運んでいたのが驚きであった。あれひとりで持てるもんなんやな。 そんで、設置までしてもらったら、しばらく使ってなかった排水溝がつまってたりしてせんたっき稼働できなかったんだけど、クラシアンに来てもらって使えるようになった。

まあ、洗剤いれてセットしわすれたりもしたけど、家にせんたっきあるのはとてもいい。

コインランドリー通いだと、頻度を減らすためにそれなりにパンツとか靴下とかのストックが必要で、ちょっとヨレヨレとかは捨てずにおいたんだけど、頻繁に洗濯できるようになったのでハズレと感じていた靴下やパンツなどを全部捨てれたのもよい。

コインランドリー、こういうこともあったりして嫌いではなかったのだけど、やっぱり単純にめんどい。

乾燥機つきにしたんだけど、頻度たかければ量が少ないので干すのも手間ではなくて、まだ一回しか使っていない。 冬になったら使うかもな。

一人暮らしならトイレのドアを閉めては いけない

一人暮らしならトイレのドアを閉めては いけないし、トイレのドアの前に段ボールなど立てかけてはいけない。
トイレのドアが開かなくなったら死ぬ。

「トイレ 閉じ込め」で検索すると事例が結構でてくるけど、通話中であったり同居人に助けられたり約束していた人が110番してくれていたり、だいたい他者によって助けられている。

あと、助かった人はおもしろおかしくツイートしてバズるのだけど、おそらく亡くなった人はツイートしないので広まりにくい。

こういうの見ると怖い。

近所のマンションでトイレに閉じ込められての死亡事故がありました。独身のサラリーマンの方で、会社も欠勤し電話も出ないため、まさかトイレに閉じ込められていたことは想定外だったようです。

https://qa.itmedia.co.jp/qa9578401.html

携帯を持って入ればいいのだけど、こういう事故というのは たまたま携帯もってないときに起こる。
ということでトイレのドアは閉めないほうがいいのだけど、うっかり閉まってしまいその拍子に壊れる、みたいなことも考えられなくはない。

で、対策として工具を常備すればいいというのがあるけど、トイレのドアを壊せる工具は結構おおげさなものになる。
ということで、笛を置いておくのが一番コスト安で死ぬ危険性は減らせるんじゃないだろうか。

笛があったとこで、どうやって外に知らせるかと考えるとモールスがよさそう。 SOSはわかりやすい。

・・・---・・・

TOILETならこう。

- --- ・・ ・-・・ ・ -

いまは笛がないので、とりいそぎソプラノサックスのマウスピースを置いている

2023/1/24 追記 ブコメにある、トイレで夫婦死亡というのはこの話。ちなみに、そんな高齢ではなく、40代夫と50代妻の夫婦
トイレの内外で夫婦怪死!巨漢夫ドアの前で急死、閉じ込められた妻は熱中症: J-CAST テレビウォッチ

LeetCodeを解いてみる配信 2020-07-07

LeetCodeを解く配信をした
https://www.youtube.com/watch?v=BbpOyov5ib0www.youtube.com

飲んでたノンアルコールビールはこれ

XORしていく

XOR Operation in an Array - LeetCode
動画は1:52から。

startとnが与えられるので、start + i * 2をどんどんXORしていく。
問題をそのまま書いたら解けた感じ

四角を塗っていく

Subrectangle Queries - LeetCode 動画は8:12から。

二次元配列が与えられて、左上と右下と値が与えられるのでその範囲を新しい値で更新していく。
Mediumのくせにやたら簡単だったので、評価が低い。 最初は二重ループでやって、遅いしメモリも食ってることでArrays.fillを使ったんだけど、そんなに改善しないのであきらめ。

小さい数字を数える

How Many Numbers Are Smaller Than the Current Number - LeetCode
動画は22:40から。

数値の配列が与えられるので、それぞれの要素についてそれより小さい数値がいくつあるか数える。
最初は素直に二重配列にしたんだけど、やっぱりかなり遅かったんで、まずは単純にキャッシュした。
それでもそこまで速くならなかったので、最初にそれぞれの数値を数えて、あらかじめ各数値についてそれより少ない数がいくつかるかを計算するようにした。
そうすると速くはなったんだけど、メモリを食うってことになった。改善点思いつかんかったので、そこで終了

microKEY 2がWindowsの休止から復活後に認識されないのは電源不足

DTM用の鍵盤としてmicroKEY 2を使っているのだけど、休止状態にして復帰したときに認識されなくなっているということがよくあった。
こうなると再起動するまでダメなので結構不便。
f:id:nowokay:20200703124257p:plain

で、ドライバを入れなおしたりいろいろ試行錯誤をしていたのだけど、どうも電源が不足しているぽい。
ということで、USB2ではなくUSB3につなぐことで解決したような気がする。

ちなみに、鍵盤はnanoPADと一緒に引き出しに置いている。
この引き出しはサンワサプライの70cm幅のキーボードスライダー100-KB003なんだけど、机の上端から15cmくらいになってヒザがあたるので、角度調節付きの100-KB005のクランプを使っている。KB005だと幅が足りない。

ということでKB003のクランプとKB005のトレーが余っているので、欲しい人は声かけてください。



rFactor 2が起動しない / rFactor 2 won't launch

rFactor 2というレーシングシミュレータがあるんだけど起動しなかった。
rFactor 2 that is a racing simulator won't launch.

この「プレイ」ボタンを押すと「停止」に変わるんだけど、しばらくするとなにも言わずに1秒くらいで「プレイ」に戻る。
After pushing 'Play' button, it will change 'Stop' but 1 sec later, it returns 'Play' with no message. f:id:nowokay:20200702231259p:plain

SteamLibraryフォルダの下にsteamapps\common\rFactor 2\Launcher\Launch rFactor.exeという実行ファイルがあったので起動して確認してみる。
そうすると、「MSVCR110.dllが見つからないため、コードの実行を続行できません。~」というエラーが出た。
Under the SteamLibrary folder there is an exe file named `steamapps\common\rFactor 2\Launcher\Launch rFactor.exe, launch the file.
Then, I get an error 'The Program can't start because MSVCR110.dll is missing...'. f:id:nowokay:20200629122911p:plain

調べてみると、ここから「Visual C++ Redistributable for Visual Studio 2012」をダウンロードすればいいらしい。
After googling I get an information that says downloading 'Visual C++ Redistributable for Visual Studio 2012' from the link below is a solution.
https://www.microsoft.com/en-us/download/details.aspx?id=30679

Downloadボタンを押すといくつか候補がでるので、「VSU_4\vcredist_x86.exe」にチェックを入れてNextボタンを押すとダウンロードできる。
Pushing 'Download' button shows file list, you must check 'VSU_4\vcredist_x86.exe' and push 'Next', download will start.
f:id:nowokay:20200702232406p:plain

これをインストールすると無事起動できた。
I got it after installing it. f:id:nowokay:20200702232635p:plain

しかしrFacotr 2は車の挙動のシミュレーションはすごいんだけど、インターフェイスがめちゃ素っ気なくて、ほんとにガチ勢向けだなという雰囲気。
BTW, rFactor 2's simulation of vehcle's behavior is great, but the interface is dreary. It seems it is for hardcores.