wrongwrongな開発日記

しんまいさんの忘備録

【Windows】環境変数をいくら編集してもPathが通らなかったときの対処【Java】

状況

下記の記事を参考に環境変数を設定しても設定が反映されず、javaコマンドが通りませんでした。 www.atmarkit.co.jp

コンソールには以下のようなエラーが出ていました。

PS C:\Users\wrongwrong> java
Error opening registry key 'Software\JavaSoft\Java Runtime Environment'
Error: could not find java.dll
Error: could not find Java SE Runtime ENvironment.

解決法

www.scriptlife.jp

上記記事を参考に環境変数の一番上にJAVA_HOME%\bin\を移動したところ正常に認識されました。原因は不明です……。 f:id:wrongwrongwrongwrong163377:20190421150900p:plain

大学院を辞めてから、この1年を振り返って

自分は去年、約半年で大学院を辞めて就職をしました。

平成最後の日なので(エイプリルフール)、学校を辞めたきっかけ、辞めてから今日までについてを振り返ろうと思います。

wrongwrong163377.hatenablog.com

改めて、大学院を辞めたきっかけ

少し長くなりますが、改めて大学院を辞めたきっかけをまとめます。

2017年春、ものづくりにハマる

大学院を辞めた一番のきっかけは、ものづくりにハマったことだと思います。

ちょうど2年ほど前になりますが、自分は大学3年から4年にかけて(2017年)の春休みに、初めてのAndroidアプリを作成しました。
人生で初めて、他人に使ってもらうためのプログラムを書いたのです。

これがきっかけとなってブログを始め、新しいアプリを作ったり、研究でもAndroidのアプリケーションを作ったりと、徐々にスキルアップを果たしていきました。

それらが実り、年末の卒業研究発表では先生方から良い評価を頂くことができました。

2018年1, 2月、全力でのものづくりを改めて経験する

ことが大きく動いたのは2018年の1, 2月です。

日記にも残していますが、壮絶なクソコードに対してほぼ自分ひとりの手でリライトを行い、1本の業務用アプリケーションを実質的に1から作りきりました。

お金を貰って作っていることもあって、自分だけの時とは比べ物にならないほど責任を感じましたし、やりきった時には人生でも最大に近い達成感を得ました。
今思い返せば、自分にとってはこれこそがやりがいだったのだと思います。

とは言え、この頃はまだ大学院を卒業する気満々でした。

2018年3 ~ 6月、就活を始めつつ、学校生活が精神に来る

「就活は早めにやって、M2では研究に集中しよう」という思惑から早めの就職活動を始めました。
それまでは世間にどんな就職先が有るだとか、どんな風に働くのかだとか、そういうことは全く知らずに生きてきましたが、人事やエンジニアの方から直接『こんなキラキラした生活ができるよ!』と伝えられたことで、就職に対する不安感は減っていきました。

一方学校生活は、カリキュラム的な問題で特に前期の前半は講義が忙しかったのですが、そこに外部発表を入れてしまったため、更に大変な思いをしていました。
「研究には力を入れたい、大学院に行く以上いいものを作って発表したい」という思いが強くあったのですが、それが学校側にかき消されていく感じが非常に辛かったです。

結局、そもそも講義を受けるよりは一人で勝手に進めたい質だった(B4では1年間講義が無かったので忘れていました)、バイトや趣味でコードを弄っている時間が一番楽しく感じている、研究の方向性が自分の思っていたのとズレてきた、など、学校に通う意味が見いだせなくなっていきました。

そんなこんなで、7月には「少なくとも一旦学校を離れよう」と決心しました。

まとめ

長々書きましたが、ここまでの経緯全てをまとめたのが、退学エントリで書いた「アクセルとブレーキを同時に踏み込んでいるような感覚が強くなった」という言葉です。

自分は元々学校生活が嫌いでした。
友達と過ごす時間や、たまに自分の感性に刺さる内容が出たときは楽しかったです。
しかし、講義は基本的に密度不足で楽しいと思えず、自分の自由で進めていくこともできず、常に縛られている、ブレーキをかけられているという感覚がありました。

学校で楽しくやっていけている友人が多いことを思えば、単純に合わなかったんだなと強く思います。

そんな中、自分が自分自身のやりたいことを理解し始め、やりたいことに対してその他のことが障害になり始めてしまい、結局辞めて就職した方がいい結果が出ると確信したため、辞めて就職することを選びました。

辞めはしましたが、自分が自分のやりたいことを理解し、それを実現するだけの実力が付く所まで面倒を見ていただいたという意味で、学校には感謝しか有りません。
辞めるに際して非常に多くの方にご迷惑をおかけしてしまったので、それに関しては何らかの形で恩返しをしなきゃなと思っています。

大学院を辞めてから今日までのこと

さて、今自分は、『大学院をスパッと辞めて良かったか?』と問われれば、まず間違いなく良かったと言える状況にあります。

理由は以下3点です。

  • 自分が好きなことをずっとやっていられる
  • 金がちゃんと手に入る
  • 学生時代より自由に生きられている
自分が好きなことをずっとやっていられる

3点の内一番大きいのが、自分が好きなことをずっとやっていられることです。

学生時代には、講義や研究という雑音が多く、興味を検証し切るモチベーションが保てていませんでしたが、それが褒められ、客観的に評価され、実績と賃金につながっていくことはとてもやりがいを感じられます。

また、自分の作ったものをより多くの人が使うという感覚もやりがいになっています。

金がちゃんと手に入る

2番目に大きいのが金です。

バイトをやってお金を稼いではいましたが、それとは比べ物にならないほど多くのお金を稼げています。
とりあえず当面食っていくアテが有ることは精神衛生上非常によろしいです。

本やエアガンを買うだとか、趣味をやるにしても金が無いことには始まりません。
もっといい部屋に住みたい、もっといい酒が飲みたいと、物欲には事欠かない質なので、これからも評価と賃金を得られるように頑張っていきます。

学生時代より自由に生きられている

これは会社が自由にさせてくれていることも大きいですが、学生時代より自由に生きることができています。

ちゃんとした裁量労働制なので、例えば出勤時間は遅くても構いませんし、退勤時間は早くても構いません。
リリース前は結構きつかったりもしましたが、これはなにか予定を入れるのに非常にありがたいです。

そして東京は勉強会やらイベントやらに事欠きません。
やりたいと思った時にやりたいことができる、そんな環境と金が有れば、騒音と排ガスと人混み以外はとても良い環境です。

最後に

自分は3月で見習いを卒業し、今月からは立場と賃金が上がることになります。

また、今月は副業も始める事になりました。

色々とやっていることが多くなりつつありますが、個々にやることの質は落とさず、体調も崩さないように、色んなことに油断せずやっていきたいと思います。

【レビュー】ステアーHCを買った

以前エアガンを買いたいと書いてましたが、買いました。
ステアーHCです。

まだ実戦では使えてませんが、サラッと撃った感覚を書きます。

www.tokyo-marui.co.jp

ステアーHCを選んだ理由

選んだ理由は以下の3点です。

  • ブルパップ式であり、コンパクトさとインナーバレル長を両立できる
  • Vグリップが付属するため全体では(多分)安い
  • 珍しい形が気に入った

撃ってみた感想

やっぱりエアガンを撃つのは楽しいですね。

個人的に、以下4点が気になりましたが、慣れれば十分やっていける範囲かなと思いました。

  • 少々トリガーが重い
  • 重い
  • 動作音がうるさい
  • レールの位置が低い

悪い書き方になりましたが、個々に補足します。

少々トリガーが重い

ステアーHCは、トリガーを引くだけではセミオートで、トリガーを引ききって初めてフルオートで撃てるという仕様になっています。

Noob的には「あっ!と思ったら味方だった」的な場面でありがたいと感じますが(まだサバゲできてないので分からないけど!)、その分トリガープルが長く重いように感じました。

重い

単純に筋力不足です。

しばらく無いでしょうが、次買うときは「付属品と弾込で約3kgは思ったより重い」ということは念頭に置きます。。。

動作音がうるさい

実銃では「ブルパップ式は機関部が耳に近くてうるさい」という評価をよく耳にしますが、エアガンでもここまでうるさいとは思いませんでした。

事前に調べた複数のレビューでもうるさいうるさいと言われてましたが、本当にうるさかったです。

ただ、同じブルパップ式のPS90 HCはそこまでうるさくなさそうだったんですよね。
こはちょっと擁護できない欠点です。

レールの位置が低い

アイアンサイトや、 Very 100というダットサイトを用いて試射してみましたが、レールの位置が低くて覗くのが大変でした。

 サイトを覗くときは頭を傾けるべきではないとよく言われますが、レールの位置が低いと、これを実践するには頬をストックにがっつり押し付ける必要があって少し辛いです。

ただし、レールの位置が低いことには以下のような利点もあります。

  • 位置が高いと(極端な例はP90)サイトの原理的に命中精度が低くなる
  • 位置が低い分には後からパーツを追加して対応可能

この辺りは一回使わなければ調整が効かないかなと感じました。
後、Very 100よりもドットの位置が高くて覗きやすそうという意味で、ベクターオプティクス マーベリック T1というダットサイトが気になっています。
かなり評価が高い製品ですし、期待できるかな、と。

まとめ

欠点も当然有りますが、現実的にはステアーHCが一番自分に合っていたかなと思います。

周辺機器含め沼感がすごいですが、ハマれるのが楽しいですね。

【プログラミング】何かをダウンロードするようなエンドポイントで、Edgeでのみダウンロードにならなかった話

問題

CSVをダウンロードさせるようなエンドポイントを立てた時、ChromeFireFoxではダウンロードになるのに、Edgeでのみダウンロードにならないという状況が発生しました。

問題のコード

エンドポイントのコードは以下です。フレームワークはSpringBootです。

@GetMapping(value = "/api/csv-all", produces = "text/csv")
public void allCsv(
        @RequestParam("id") Integer id,
        HttpServletResponse response
) {
    response.setCharacterEncoding(CSVCharset);

    response.setHeader(
            "Content-Disposition",
            "attachement;filename=\"" + createFilename(i) + "\""
    );

// 以下省略

原因

実は以下の部分にtypoがありました。これを直せばEdgeでもダウンロードになりました1

    response.setHeader(
            "Content-Disposition",
            // attachementが正しい綴り!
            "attachement;filename=\"" + createFilename(i) + "\""
    );

  1. この修正でFireFoxでもダウンロードするファイル名が変わりました。

【日記】秋葉原に行った

気になった製品

東プレ REALFORCE91UG-S

仕事では以前当てたリアルフォースRGB(光らせてない)を使っていますが、スペースキーの右側が外れるのとテンキーが邪魔なのが不満です。

買い替え先にするならREALFORCE91UG-Sでしょうか。スペースが短く、All荷重30gのテンキーレス静音リアフォです。
仕事用ならベストなキーボードだと思ってます。

 会社で「入力機器の購入に全額補助が出る制度」ができるという噂が有るので、それが来たら買うつもりです。(来なくても消費税上がるなら買います。)

ROCCAT Kone AIMO

2017年に購入したThermaltake Tt eSports VENTUS Zをずっと使ってきましたが、ボタンの反応がおかしくなってきたので買い換えようかなと思っています。

同じマウスを買わないという前提なら、今日手に取った中では ROCCAT Kone AIMOがいい感じでした。

Razer Mambaも候補として考えていましたが、高い上に手に持ってもピンと来ないなどしたので除外します。

ハードウェア的にはVENTUS Zが一番気に入ってるんですけどねー……。
同じマウスは2回書いたくないので、少なくともVENTUS Z以外を買うつもりです。

 東京マルイ ステアーHC

サバゲーに行って以来エアガンの購入を検討していましたが、ステアーHCを買うつもりです。
購入タイミングは次のサバゲー開催が決まり次第かな……。

www.tokyo-marui.co.jp

ストック部が長すぎやしないかと思ってましたが、G&G L85 A1を構えた所*1そこまでキツさが無かったので、画像から分析すると*2*3より短かったステアーHCならちゃんと構えられるかなと思っています。

カスタムパーツも一緒に買うつもりです。
サプレッサー、ダットサイト、フォアグリップ……。お金がいくらあっても足りないな……。

*1:レプマート様で触らせて頂きました

*2:「(公式画像の全長/画素数)x公式画像のストックからトリガー部までの画素数」で計算

*3:G&G L85 A1が410.7mm、東京マルイ ステアーHCが384.1mmでした

【Java】引数のListに対するStream処理がコンパイルできない状況への対処

以下のコードは、Listを内容のクラスの名前の配列にして返すという内容です。
List内の型に関係なく実行できるコードであるため、一見正しいように見えますが、このコードはコンパイルできません。

String[] toNameArray(List list) {
    return list.stream().map(it -> it.getClass().getName()).toArray(String[]::new);
}

対処

以下のように、ジェネリクスで「何でも取る」ということを明示すれば解決できます。

String[] toNameArray(List<?> list) {
    return list.stream().map(it -> it.getClass().getName()).toArray(String[]::new);
}
補足

例え「ジェネリクスに全く影響されずに実行できるコード」であっても、それを明示するジェネリクスを書かなければ警告やコンパイルエラーとなります。
つまり、「何が指定されていても構わない」という場合は<?>ジェネリクスとして指定しなければならないということです。

おまけ

Qiitaに投稿した、この例を含むジェネリクス関連の記事です。
qiita.com

【日記】ニコニコのプレミアム会員になった

Why?

ぶっちゃけ画質やらサービスはクソだと思いますが、中学校からずっと楽しませて頂きましたし、低画質解除やらを気にするのが馬鹿らしいと思ってました。
社会人になって給料も貰ったので、日常的に使うものや払いたいものには金を払おうと思います。

せめて自分の払う金で(微々たるものだけど!)投稿者様の受けられるサービスが良くなればいいなと思います。

後お金がもっと欲しいです。