Javaを勉強するための環境設定(NetBeans版)

はじめに

NetBeansを使ってJavaの勉強をはじめるという人むけの環境設定の解説です。
インストールするものは2つです。

Java環境のインストール

NetBeansJavaで動くのと、そもそも目的がJavaの勉強なんで、Javaのインストールが必要です。

AdoptOpenJDKのダウンロード

Javaには様々なディストリビューションがありますが、次の理由からここではAdoptOpenJDKを使います。
https://adoptopenjdk.net/

  • 最新バージョンがある
  • 様々な用途でライセンス上 問題なく使える
  • インストーラがある(環境変数などの設定が不要)
  • サイトで迷いにくい

JavaはOpenJDKとしてオープンソースで開発されているのですが、AdoptOpenJDKはOpenJDKをビルドしてインストーラなどをつけて配布するプロジェクトです。
サイトに行くと、ブラウザからOSを判別してくれているのですが、バージョンが11になっているので、ここでは最新の14にしておきましょう。
f:id:nowokay:20200621084228p:plain

AdoptOpenJDKのインストール

ダウンロードしたファイルを起動するとインストールが始まります。
ライセンスの確認がありますが、OpenJDKがGPL v2ベースのライセンスなので、AdoptOpenJDKも同様にGPL v2になっています。
GPL v2はいろいろなところで出てくるライセンスなので、一度は内容を確認しておいたほうがいいですが、ソフトウェアを使うだけであれば特に気にする部分はないと思います。
f:id:nowokay:20200621085522p:plain

次にいろいろな設定が出ます。ここで、3番目の「Set JAVA_HOME...」は選択しておいたほうがいいでしょう。
f:id:nowokay:20200621085601p:plain

インストール確認

インストールが終わったら、インストールされているか確認してみましょう。
Windowsシステムツール」から「コマンドプロンプト」を選んで、コマンドプロンプトを立ち上げます。
ここで「java」と入力してEnterキーを押したときにいろいろ出てくれば、Javaが正しくインストールされています。 f:id:nowokay:20200621092222p:plain

java -version」と入力するとバージョン情報が表示されて、Java 14であることやAdoptOpenJDKの実行ファイルであることが確認できます。
f:id:nowokay:20200621092521p:plain

NetBeansのインストール

さて、ではNetBeansをダウンロード、インストールしましょう。

NetBeansのダウンロード

NetBeansのダウンロードはここからできます。
https://netbeans.apache.org/download/index.html
いまの最新版は12なので、これをダウンロードします。
f:id:nowokay:20200621100236p:plain

今回はインストーラ付のバイナリをダウンロードします。
f:id:nowokay:20200621100432p:plain

そうするとまたたくさんリンクが現れて面食らうのですが、一番上にあるおすすめサイトを選ぶといいと思います。
f:id:nowokay:20200621101442p:plain

NetBeansのインストール

ダウンロードしたファイルを実行するとインストールが始まります。
f:id:nowokay:20200621102845p:plain

PHP開発をする予定のない人は、PHPはずしていいと思います。そのほかは残しておきましょう。
f:id:nowokay:20200621102925p:plain

NetBeansApacheライセンスになっています。これもよく出てくるライセンスなので一度は ちゃんと読んでおいたほうがいいですが、使う分には特に問題ないと思います。
f:id:nowokay:20200621103009p:plain

インストール場所は、特にこだわりがなければそのまま。
f:id:nowokay:20200621103230p:plain

アップデートのチェックはそのままでいいと思います。 f:id:nowokay:20200621103248p:plain

これでインストールが始まります。

NetBeansの起動

デスクトップに置かれたアイコンなどからNetBeansが起動できます。

NetBeansは「プロジェクト」という単位でプログラムを管理します。
ツールバーの2番目にある「New Project」ボタンを押すと新しいプロジェクトが作れます。
f:id:nowokay:20200621110305p:plain

プロジェクトの種類を選ぶダイアログが出ますが、そのまま「Java with Maven」の「Java Application」を選びます。
f:id:nowokay:20200621110525p:plain

初回はJava開発用の機能をアクティベートする必要があります。 JavaFXにチェックが入ってますが、当面必要ないのではずしておきましょう。このチェックを入れなくてもJavaFXアプリケーションの開発は可能です。
f:id:nowokay:20200621111240p:plain

アクティベートが終わるとプロジェクト名などを入力するダイアログが出ます。とりあえずそのままFinishしましょう。それぞれの意味は勉強が進んでから知っていけばいいと思います。
f:id:nowokay:20200621111505p:plain

プロジェクトが生成されると、このようになります。
f:id:nowokay:20200621112209p:plain

「Source Package」の中の「com.mycompany...」で右クリックしてメニューから「New > JFrame Form」を選びます。(JPanel Formではない)
f:id:nowokay:20200621112259p:plain

JFrame Form作成ダイアログが出ますが、とりあえずそのままFinishしましょう。
f:id:nowokay:20200621112518p:plain

こんな感じでフォームエディタが開きます。中央にフォームデザイン、右にコンポーネントパレットが表示されています。
f:id:nowokay:20200621112657p:plain

コンポーネントパレットのSwing Controlsの2番目にある「JButton」をクリックします。 f:id:nowokay:20200621113005p:plain

そうしたら、フォームの適当なところをクリックして配置します。
f:id:nowokay:20200621113206p:plain

配置したボタンをダブルクリックします。
f:id:nowokay:20200621115230p:plain

そうするとボタンが押されたときの処理を記述するコードが生成されます。
f:id:nowokay:20200621115402p:plain

sout と入力して[tab]を押すとSystem.out.printlnが入力されます。
f:id:nowokay:20200621115442p:plain

ダブルクォートの間にカーソルがあるので、そのまま「Hello!」と入力します。
f:id:nowokay:20200621115538p:plain

それでは実行してみましょう。
エディタ上で右クリックして、メニューから「Run File」を選びます。
f:id:nowokay:20200621115721p:plain

ビルドが行われます。初めての場合にはいろいろなダウンロードが行われるので、しばらく待つ必要があります。
f:id:nowokay:20200621115836p:plain

ウィンドウが表示されました。
f:id:nowokay:20200621115927p:plain

ボタンを押すとOutputウィンドウに「Hello!」と表示されるはずです。
f:id:nowokay:20200621120023p:plain

これでJavaのプログラムを組んで動かすことができました。
それでは、Javaの勉強がんばってください。 f:id:nowokay:20200621120446p:plain

LeetCodeを解いてみる配信 2020-06-16

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

今日はアコギを弾いてから始めた。アコギは曲を覚えてなかったので中途半端なところまで。

配列の合計の配列

Running Sum of 1d Array - LeetCode
動画は 5:05 から。
配列が与えられて、i番目の要素にはi番目までの合計をいれるというもの。
Acceptまではすぐだったんだけど、メモリ使用量が50%だったのでがんばった。
結局、結果用の配列を用意するのではなくて与えられた配列を書き換えることでメモリ節約していた。

配列の並べ替え

Shuffle the Array - LeetCode
動画は 17:10 から。
[x1, x2, ... , xn, y1, y2, ... , yn]の順番で与えられた配列を[x1, y1, x2, y2, ... , xn, yn]に並べ替えるもの。
とりあえず解いてみたら100%, 100%になったんだけど、与えられた配列の書き換えでいけるかなーとやってみようとして、やっぱだめって気づいて次にいった。

予備の飴をもらったら一番になれるかどうか

Kids With the Greatest Number of Candies - LeetCode
動画は 32:50 から。
子どもたちがいくつか飴をもっていて、それとは別に予備の飴があって、その予備の飴を全部もらったら一番多くもってることになる子どもはTrue, そうじゃなかったらFalseを返すというやつ。
コードは比較的すぐ書けたけど、やっぱメモリが60%になってて、ちょっとがんばろうということでArrayListを使っていたのを、配列を用意してArrays.asListした。
それで89%になったので、そこで終了。

初めて買ったノートパソコンを処分した

片付けてたらノートパソコンとして初めて買ったパソコンが出てきたのだけど、液晶はダメになってるし触るとボロボロになっていくしで、回収に出した。
本命は3枚あった液晶ディスプレイなのだけど。
f:id:nowokay:20200611193706j:plain
ちなみに、自立しないのでうしろのトレーで支えている。

もちろんAppleではなくて、AcerのTravelMate 514TXVというもの。 f:id:nowokay:20200611193608j:plain

この時期だと、ぐぐってもネット記事とか全くない。かろうじて出てくるのはこのスペック一覧。
https://www.cnet.com/products/acer-travelmate-514txv-14-1-celeron-win98-se-64-mb-ram-6-gb-hdd/

Celeron 466MHzでメモリ64MB、ハードディスク6GB、ディスプレイ1028x768なので、当時としては結構ほどほどなやつ。それなりに高かった記憶。
DVDもフロッピードライブも内蔵で便利だった。というか、たぶんそういう条件で絞っていくとこれしか残らなかったんだと思う。
f:id:nowokay:20200611194712j:plain

一緒にLANカードも出てきた。モデムはついていたけどLANはついていなくて、まだあまり家庭内でネットワークを組むというのはなかったんだと思われる。 f:id:nowokay:20200611201133j:plain

メモリ空きスロットがあるはずなんだけど、埋まってたので、増設していたかもしれない。そんな気もする。
f:id:nowokay:20200611194536j:plain

ハードディスクはカタログ通りなので、そのまま換装せずに使っていたのかな。ハードディスク入れ替えるくらいなら買い替えたほうがいいって感じだったんだろう。
f:id:nowokay:20200611201003j:plain

銅板に覆われてるのがCeleronで、右下にあるのがグラフィックチップのNeoMagicのMagicMedia 256AVかな。
ALiのM1543というのはAladdin Pro IIチップセットのNorth Bridge側で、探せばSouth BridgeのM1543があったはず。ちゃんとよく見ておけばよかった。
f:id:nowokay:20200611201459j:plain
しかしもうメモリコントローラはCPUに内蔵されてるし、ノースブリッジとかサウスブリッジとか言わないですね。

佐川さんにひきとられて、リネットジャパンに送られていきました。
https://www.renet.jp/

徹底図解 パソコンのしくみ 新版

徹底図解 パソコンのしくみ 新版

キーボードを洗った

家ではSK-6000というキーボードを20年近く使っているのだけど、その間まったく洗ったりせずにいたので結構汚れていた。
ちゃんと撮ってなかったので、キー配列確認用に撮ってたやつ。
f:id:nowokay:20200607063443j:plain

オフィスにキープーラーがあるので、こんど出社したときに持って帰ったらキーボード掃除しようと思っていたのだけど、つい出来心で右上のナゾのマウスキーを外してみて、案外簡単にはずれるなーとウォーターポンププライヤを使って全部外してしまったのであった。
で、洗剤いれたボウルに浸して、ひとつづつひたすら拭く。
f:id:nowokay:20200607063351j:plain

3時間くらいかけてきれいになった!
これはなんか満足感高い。
f:id:nowokay:20200607063305j:plain

でめでたしめでたし、ではなくて、同じのがもうひとつあるのであった。
これは火事にあった家に置いてあったやつなので、煤けている。
けど、また今度、気が向いたときにやなー。
f:id:nowokay:20200607065327j:plain

ARCHISS キートップ引き抜き工具 Ergo Grip Keycap Remover AS-KREGP01

ARCHISS キートップ引き抜き工具 Ergo Grip Keycap Remover AS-KREGP01

  • 発売日: 2017/01/05
  • メディア: Personal Computers

NetBeansがWindowsで拡大率100%のときになんも表示してくれない

ディスプレイを買い替えたとき、文字が小さいなぁと思ってWindowsの拡大率を125%にしていたのだけど、音を扱う系のアプリでうまく表示してくれないことが多くて100%に戻したらNetBeansがなにも表示してくれない。
ブログの画像読み込み中で空白になってるのかと勘違いしてしてしまうくらい、なんも表示してくれない。
f:id:nowokay:20200603230204p:plain

結局のところ、etc/netbeans.confにあるnetbeans_default_options-J-Dsun.java2d.noddraw=trueというところをfalseにすると表示されるようになった。
これはtrueだとDirect Drawを使わなくなるやつで、その場合のほうが問題が解決することが多いのだけど、今回は違った・・・
https://docs.oracle.com/javase/jp/7/technotes/guides/2d/flags.html#noddraw

あと、11.3では125%表示のときに横幅の計算は100%相当で行うためかファイル名の末尾が切れたりしている。
f:id:nowokay:20200603234401p:plain

ファイル名は拡張子が切れるくらいで気にしなければいいんだけど、テストがこけたときのActualがまったく見えないので結構こまっていた。
f:id:nowokay:20200603234629p:plain
but was...なんだよーってなる。これは11.4で解決されるのだけど、まだ先になりそう。
※ 6/13追記 NetBeans12.0が出て解決されていた

ちなみに音を扱う系のアプリというのはCubase 10で、Cubase 9のときはちゃんと表示してくれていたプラグインでもうまく表示できないことがある。
これはちゃんと表示されている。
f:id:nowokay:20200603232541p:plain

で、あれ、こんな感じで表示が~ってやろうとしたら、なんかうまく表示している・・・問題が解決してしまった。
けど100%表示のほうが画面が広いし文字が小さいのもあまり気にならなくなってるので、そのまま100%表示でいこう。

LeetCodeを解いてみる配信 2020-06-01

LeetCodeを解く配信を始めてます。
https://www.youtube.com/watch?v=KrhM06muekcwww.youtube.com

最初になんか楽器を練習して、人が集まったらLeetCodeを始めてる感じ。
あと、今日はVSTエフェクトをモリモリかけてみたのでそのテストでもあった。

残りより大きくなる要素を最小限に取り出す

最初はeasy
Minimum Subsequence in Non-Increasing Order - LeetCode
動画では9:15くらいから
配列からいくつかの要素をとってきて、その合計が残りの合計よりも大きくなる最小要素数の部分列を得るというものです。
ソートして総合計の半分以上になるまで要素をとっていく作戦です。 速さ97.22%で100%じゃなかったけど、あきらめ。

昇順・降順にならぶ3要素をすべて取り出す

次は前回やったmediumの問題が遅かったのでメモ化で速くしようという回 Count Number of Teams - LeetCode
動画では23:07くらいから。
24msで17.45%と結構遅かったので再帰をキャッシュして速くしようとした。
引数を範囲を考えつつひとつのlongにまとめてキーにする作戦。
それでも7msで60.21%とかだった。
discussionみてたら3重ループでやってるのがあったのでマネしてみたら16msで遅かった。
もっと見たら2重ループでやってるのがあって、たぶんこれが速いんだけど、配信中に理解できなそうだったのであきらめ。 Python short solution, >97.70%, O(n2) - LeetCode Discuss

二つの配列の片方を順番いれかえでもう片方と同じ並びにできるか

もうひとつeasy Make Two Arrays Equal by Reversing Sub-arrays - LeetCode
動画では45:50くらいから。
問題としては、配列の一部をとりだして逆順にするという操作を繰り返してもう片方の配列と同じ並びにできるかというものだけど、結局のところその操作で任意の並びにできることが示せれば、両者が同じ要素をもっているか判定するだけでいける。
で、n-1要素が任意に並べ替えれるなら、n番目にくるべきものをn-1番目にもってきてn番目の要素と入れ替えれば任意の並べ替えができることを利用して、2要素ならひっくり返すだけというのが示せるのですべての要素数で任意の並びにできることがわかる。
ということで、あとは数値が1000までなので1000要素の配列を用意して最初の配列で各要素の分をインクリメント、2番目の配列の各要素の分をデクリメントして、すべてが0なら同じ要素をもってるって判断。

厚生労働省の都道府県別陽性者のフォーマットががらっと変わってしまった

こんな感じで都道府県別の感染者数を表示できるようにしてるわけですが、厚生労働省のフォーマットが変わってしまったのでまとめておく。
nowokay.hatenablog.com

新しいものはこれ
f:id:nowokay:20200510034204p:plain https://www.mhlw.go.jp/content/10906000/000628667.pdf

いままでのはこれ
f:id:nowokay:20200510034235p:plain https://www.mhlw.go.jp/content/10906000/000627630.pdf

いままでも連番が入るとか数値にカンマが入るとかちょこちょこ変更は入ってたのだけど、今回はデータの意味も結構かわってしまった。
重症者やPCR検査数も入ったので、データとしては よりよくなったわけではあるけど。
東京のデータも都の発表値と一致するようになって、改めて都のデータをとりにいく必要がなくなったのもいいですね。

ということで困ったところ

  • 「不明」・・・いままでゼロとして扱ってたものが明確に不明になったのかな
  • 「確認中」の項目が・・・いままでは入院者に入ってたぽい
  • 徳島の死者も不明に・・・1名亡くなっていたはずだけどどうなった
  • 都道府県名にスペースが・・・取り除くの面倒
  • たまに全角スペースが・・・取り除くの面倒
  • 「県」「都」がなくなった・・・あわせるの面倒
  • 長野の最初の文字が「⾧」に・・・区別つかないけど別の文字

最後の「⻑」はこの文字だと教えてもらった
https://ja.wiktionary.org/wiki/%E2%BB%91
通常の「長」はこっち。
https://ja.wiktionary.org/wiki/%E2%BE%A7
「部首「⾧」の呼称として用いる場合の書体」って、なんでこんなのが入ったんだろう。🤔

追記
新型コロナウイルス感染者等情報把握・管理支援システム(仮称)」というのが5月から運用されて、そろそろ先行利用がはじまるみたいですね。
集計結果もそれにあわせて変わったということかな。
https://www.mhlw.go.jp/content/000626714.pdf
f:id:nowokay:20200510163808p:plain