JJUG CCC 2023 Fall ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2023 Fallに参加しました! 前回よりも参加者が大幅に増えて、ワイワイと盛り上がった中でいろんな話が聞けて楽しかったです! 特に、一足先に次回の Java 22 でリリース予定の Foreign Function & Memory API と String Template の話があって、使…

JJUG CCC 2023 Spring ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2023 Spring に参加しました! 今回、なんとJJUG CCC 参加9年目にして初登壇してきました。色んな人から「えっ、初?」って言われましたw1 セッションは、javap を使ってクラスファイルを読んでみよう という、ややマニアックな内容です。頑張って…

JJUG CCC 2022 Fall ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2022 Fall に参加しました! オンライン開催も、今回で4回目。 今回はスタッフとして参加1して、ちょっとだけ司会をしました。スムーズに進行できていたら幸いです。 今回、特によかったなーと思ったのが、完成度の高いもちださんのセッション。 ま…

Jextract を使って、Java から libcurl を使ってみる

Jextract に libcurl を呼び出すサンプルがありました。これを試しに動かしてみました。 (まだ Preview の Foreign Function & Memory API を使います) ちなみに、ほかにも以下のライブラリを使うサンプルが置いてあります。 ディレクトリ 実行するライブ…

Java の Charset のバイトオーダーとBOM

Java のサポートされているエンコーディングの一覧を見ていると、UTF-16, UTF-16BE, UTF-16LE, x-UTF-16LE-BOM とあって、なにが違うんだろうと思って調べてみました。 まとめると、読み・書き時のバイトオーダー (BO) 1 と書き込み時の BOM (Byte Order Mar…

年/月/日 の一部が省略された日付をパースして LocalDateTime を取得する方法

年が省略されている日付(月/日)の場合 まずは、DateTimeFormatter を用意します。 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd"); 次に、日付を MonthDay クラスでパースします。 MonthDay monthDay = MonthDay.parse("07/18", for…

左腕のハードウェア故障についてのご報告

6月6日(土)に自転車でお散歩していた際に転倒し、左腕がクラッシュしました。 それにより、しばらくの間は右腕のみの片系運用となっておりました。 数日が経過しても左腕からのアラートが治まらない状態が続いたことから、病院に詳細なデバッグを依頼したと…

JJUG CCC 2022 Spring ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2022 Spring に参加しました! いつも以上におもしろいセッション盛りだくさんで、参加してとても楽しかったです。 LINEのトラブルシューティングのような現場での経験をもとにした話から、バイトコードのようなJavaのコアな話まで、とてもバランス…

Java のラムダ式を使った際に、invokedynamic により生成されるクラスファイルを調べてみた!

Java のラムダ式が、どのようにコンパイルされ実行されているか気になりますよね。 そこで、クラスファイルを分析して、その中身を調べてみました。 なお、今回は OpenJDK 17.0.1 を使って調べています。 バージョンによって挙動が異なる場合があるので、ご…

JJUG CCC 2021 Fall ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2021 Fall に参加しました! JJUG CCC オンラインも3回目ということで、JJUG運営の方も参加者の方もお互い慣れてきた感じがします。 自分も、今回は夕方から用事があったので、時間差でセッションを見ながら電車で移動ということをやりました。ラジ…

Outlook のメールファイル(.msg ファイル)をテキストに展開するツールを用意しました

たまに、Outlook のメールファイル(.msg ファイル)が添付で送られてくるのですが、手元に Windows 版の Outlook がなくて1内容を確認できなくて困ることが多々…。 そこで、.msg ファイルをテキストファイルに展開するツールを用意しました。 (添付ファイ…

いつから touch コマンドでファイルを作れるようになったのか

答え: 最初から 最初の touch コマンド FreeBSD の touch のマニュアル曰く、touch コマンドは Version 7 の AT&T UNIX で登場したそうです。 HISTORY A touch utility appeared in Version 7 AT&T UNIX. touch(1) - FreeBSD Manual Pages このときの man …

JJUG CCC 2021 Spring ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2021 Spring に参加しました! 前回に引き続き、今回もオンライン開催となりました。 オンラインだと移動が楽というメリットがあって、これはどっちのセッション見ようかなーというときに、途中でさっとほかの動画に移れるのは便利でした。 あとは…

「正しい番号が入力されていること」という難しさ

バリデーションの難しさについて、少し考えてみましょう。 (結論だけ読みたい人は、こちら) 例えば、通販サイトの基本設計書で「入力フォームの電話番号の項目に、正しい電話番号が入力されていない場合はエラーとすること」と書かれていたとします。 では…

Javaのバージョン別、テキストファイルを一括で読み込む方法まとめ

前回の記事(Javaのバージョン別、1行ずつファイルを読む方法まとめ)への感想で、このような話がありました。 丸々読み込む方法のまとめもお願いします!— ユースケ (山本裕介) (@yusuke) May 3, 2021 というわけで、今回はテキストファイルを一括で読み込…

Javaのバージョン別、1行ずつファイルを読む方法まとめ

Java でファイルを読み込む処理は、バージョンが上がるごとにどんどん簡単に書けるようになっていきました。 今回は、どれだけ簡単になっていったかを Java のバージョンごとにまとめて説明します。 なお、ここでは以下の処理を行うコードをもとにしています…

JDK 1.0 (Java 1.0.2) を入手したので、GitHub に置いておきました。

JDK 1.0 (Java 1.0.2) を入手したので、GitHub に置いておきました。 https://github.com/YujiSoftware/JDK1.0 なんと、Windows 10 上でも動きます。 あと、src.zip も展開して置いた ので、GitHub 上で読めます。 Java 考古学者のみなさま、ぜひご活用くだ…

jq の入っていない環境で、JSON をフォーマットする方法

JSON をフォーマットしたいけど、jq が入っていない!ということがよくあります。 そういう時は、Ruby や PHP を使いましょう! Ruby の場合 ruby -rjson -e 'puts JSON.pretty_generate(JSON.parse(STDIN.read))' ↓ こんな風に表示されます! [qiita@exampl…

M5StickC と MH-Z19B を使って、二酸化炭素濃度計を作りました

ネットの情報をもとに、M5StickC とMH-Z19B (CO2センサー)を使って二酸化炭素濃度計を作りました。 作ったといっても、M5StickC と MH-Z19B をつないで、さくっとプログラミングしただけ。簡単でした。 一年ぐらい運用していますが、なかなか便利です。 グ…

Java の + 演算子による文字列結合は、どのように処理されているのか

Java 9 以降 JEP 280: Indify String Concatenation に基づき、 + 演算子による文字列結合は以下のようにコンパイルされるように変わりました。 invokedynamic #7, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/Object;I)Ljava/lang/String; …

JJUG CCC 2020 Fall ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2020 Fall に参加しました! 今回は、初のオンライン開催ということで、いつもと違って自宅からの視聴。 でも、twitter のハッシュタグを見るとみんなでわいわいやってる感は変わらず、質疑応答もありでいつもと変わらず楽しめました。 それに加え…

ド・モルガンの法則は大事!大事!超大事!

「ド・モルガンの法則」ってなにそれ?おいしいの?って聞かれたことがあります。 おいしくはないのですが、プログラムを書く上では超大事!です。 ここでは、プログラムを読み書きするうえでド・モルガンの法則をどのように使えばいいかを紹介します。 ド・…

8進数リテラルはプログラミング言語ごとに異なる

8進数を表記する文法は、主に以下の3つがあります。 (二番目と三番目は分かりにくいですが ゼロ オー1 です) プリフィックスとして 0 を付与する (例: 0123) プリフィックスとして 0o を付与する (例: 0o123) プリフィックスとして 0O を付与する (例: 0O1…

SELECT文で本番環境を落としたお話

本番環境でやらかしちゃった人 Advent Calendarで、このパターンのやらかしはなかったのでキーボードを叩くことにしました。 番外編のつもりでお楽しみください。 この記事が、新たな障害発生を防ぐことにつながれば幸いです。 何をやったのか ある日、ちょ…

Object#clone() メソッドからスローされる CloneNotSupportedException はどのようにハンドリングするべきか

Java の Object#Clone() メソッドは throws CloneNotSupportedException が宣言されています。 protected native Object clone() throws CloneNotSupportedException; しかし、クラスが Cloneable インタフェースを実装していれば CloneNotSupportedExceptio…

Ansible で Mackerel を操作するプラグインを作りました!

Ansible で Mackerel の設定を取得したり変更したりできたらなーと思う時があります。 例えば… アラートが鳴ってしまうのを防ぐために、Ansible 実行中はホストのステータスを standby にしたい 特定のロールが設定されているホストの場合だけ、ファイルをコ…

JJUG CCC 2019 Fall ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2019 Fall に行ってきました! 最近 Java のシステムをまたいじるようになって*1、 Java 欲が高まってきていたところにいろんなセッションを聞けてすごいテンション上がりました。 特に、「開け!ドメイン駆動設計の扉」がちょうどこれから一部のシ…

Stack Overflow のタグから、どのフレームワークについてよく質問されているのかプログラミング言語ごとに分析してみた

Stack Overflow の質問には、その内容を示すタグが付与されています。 このタグ、よく見ると「言語」+ 「フレームワークやライブラリの名称」という構成が多いです。 つまり、これを分析すれば、言語ごとに質問の多い(つまり、よく使われている、人気がある…

Java のバージョンを上げるだけで、プログラムは速くなるのか

よく Java の実行バージョンを上げるだけで速くなるという話を聞きます。 でも、本当にそうなのでしょうか。また、本当だとしたらどれぐらい速くなるのでしょうか。 そこで、簡単なプログラムで実験してみました。 実験概要 実験用に、数独を解く Java のプ…

strptime は環境によって挙動が違う

PHP には、日付文字列をパースするための strptime という関数があります。 これを使って、Sun, 19 Apr 2015 11:43:30 GMT という文字列を %a, %d %b %Y %H:%M:%S %Z というフォーマットでパースした結果、以下の通り環境によって異なる結果になりました。 s…