国内旅行業務取扱管理者試験に合格しました。不純な動機で受験しましたが,合格には違いありません。

国内旅行業務取扱管理者試験に合格しました。不純な動機で受験しましたが,合格には違いありません。
先日,NTTドコモで通信障害がありましたが,スマホもタブレットもNTTドコモは使っていなかったので,「他人事」と思っていました。ところが,今朝,警備会社から何度も警備開始/警備終了の操作が行われたことを伝えるメールが大量に届いたのです。誰かが侵入したのかと思い,警備会社に問い合わせてみました。すると,警備会社との通信にNTTドコモの回線が使われており,通信障害中に発生したイベント情報が,通信が回復した時にまとめて飛んだということでした。
令和5年から消費税のインボイス制度が始まります。インボイスを発行するためには,税務署に「適格請求書発行事業者」として登録する必要があります。10月1日から申請の受付が始まりましたので,早速e-taxで申請しました。
https://www.nta.go.jp/taxes/shiraberu/zeimokubetsu/shohi/keigenzeiritsu/invoice.htm
Javaランタイム外部のメモリにアクセスしたり,ネイティブ関数を呼び出すためのAPIを提供します。以前からJNIなどの方法でアクセスすることは可能でしたが,実装が大変である上にパフォーマンスにも課題がありました。より洗練されたAPIを提供しようという意図で開発されています。
以下のプログラムではC言語の文字列の長さを返すsize_t strlen(const char *s)を呼び出します。コンパイル時には,–add-modules jdk.incubator.foreignオプションをつける必要があります。また,実行には–add-modules jdk.incubator.foreign オプションに加えて,–enable-native-access=ALL-UNNAMEDオプションもつける必要があります。
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodType;
import jdk.incubator.foreign.CLinker;
import jdk.incubator.foreign.FunctionDescriptor;
import jdk.incubator.foreign.MemoryAddress;
import jdk.incubator.foreign.MemorySegment;
import jdk.incubator.foreign.ResourceScope;
import jdk.incubator.foreign.ValueLayout;
public class ForeignFunction01
{
public static void main(String[] args) throws Throwable
{
strlen("Hello World!");
}
private static void strlen(String string) throws Throwable
{
MethodHandle strlen = CLinker.getInstance().downcallHandle(
CLinker.systemLookup().lookup("strlen").get(),
MethodType.methodType(long.class, MemoryAddress.class),
FunctionDescriptor.of(CLinker.C_LONG_LONG, CLinker.C_POINTER)
);
MemorySegment str = CLinker.toCString(string, ResourceScope.newImplicitScope());
long length = (long)strlen.invokeExact(str.address());
System.out.printf("Length of string \"%s\" is %d\n", string, length);
}
}
警告:実験的なモジュールを使用しています: jdk.incubator.foreign
警告1個
WARNING: Using incubator modules: jdk.incubator.foreign
Length of string “Hello World!” is 12
ベクトル演算をサポートしているCPUに向けてベクトル演算をサポートするAPIを提供するものである。
Java 15から「非推奨」とされていたRMIアクティベーション機能,具体的にはjava.rmi.activation
パッケージが削除されています。
Java 15からプレビューとして含まれていたシールクラスが正式に導入されました。内容については過去の記事をご参照ください。
実験的なコンパイラAOT(ahead-of-time)コンパイラとJIT(Just-in-time)コンパイラが削除されています。AOTコンパイラはJEP 295で導入されたものです。またJITコンパイラはJEP 317で導入されたものです。
セキュリティマネジャーに関連するほとんどのクラスとメソッドが非推奨となっています。また実行時にセキュリティマネジャーをインストールしようとしたり,コマンドラインでセキュリティマネジャーを有効にしようとすると警告メッセージが出力されます。
SecurityManagerTest.java:5: 警告:[removal] java.langのSecurityManagerは推奨されておらず、削除用にマークされています
SecurityManager manager = new SecurityManager();
switch文が更に拡張されている。caseラベルにクラス名を指定することで,インスタンスの型に応じて条件分岐できるようになりました。次の例ではObject型,Parent型,ChildA型のオブジェクトとnullを渡して,条件分岐させています。
コンパイルには,–enable-previewオプションと –source 17オプションをつける必要があります。
public class Switch01
{
public static void main(final String[] args)
{
Object[] array = new Object[]{ new Object(), new Parent(), new ChildA(), null };
for(Object obj : array)
{
switch(obj)
{
case null:
System.out.println("null");
break;
case ChildA c:
System.out.println("ChildA class");
break;
case Parent p:
System.out.println("Parent class");
break;
default:
System.out.println("Other class");
}
}
}
}
class Parent{}
class ChildA extends Parent{}
Other class
Parent class
ChildA class
null
更には,switchラベルに続けてboolean型の条件を続けることができるよう拡張されました。次の例ではshape変数に格納されているオブジェクトがCircleクラスの場合で,かつ,getArea()の戻り値が100を超えている場合にLarge Circleというメッセージを表示します。
public class Switch02
{
public static void main(final String[] args)
{
Shape[] array = new Shape[] { null, new Circle(1), new Circle(10), new Rectangle(5, 3) };
for(Shape shape : array)
{
switch(shape)
{
case null ->
System.out.println("null");
case Circle c && c.getArea() > 100 ->
System.out.println("Large Circle");
case Rectangle r ->
System.out.println("Rectangle");
default ->
System.out.println("other");
}
}
}
}
/** 図形 */
abstract class Shape
{
/**
面積を返す
* @return 面積
*/
abstract double getArea();
}
/** 円 */
class Circle extends Shape
{
/** 半径 */
private double radius;
public Circle(final double radius)
{
this.radius = radius;
}
public double getArea()
{
return Math.PI * Math.pow(radius,2);
}
}
/** 矩形 */
class Rectangle extends Shape
{
/** 幅 */
private double width;
/** 高さ */
private double height;
public Rectangle(final double width, final double height)
{
this.width = width;
this.height = height;
}
public double getArea()
{
return width * height;
}
}
null
other
Large Circle
Rectangle
Java 17がリリースされました。今回リリースされたJava 17はLTS(Long Term Support)版です。主な変更点を紹介していきます。
浮動小数点数の計算でオーバーフロー等が起こる場合に,CPUによって計算結果が異なってしまう現象を避けるために,常にIEEEの規格に準拠した計算を行うようにするものである。この問題が発生するのは,SSE2命令セットをサポートしていないCPU(Pentium Ⅲ以前)のマシンということなので,影響を受ける環境は少ないと思われる。
PRNGという新たな疑似乱数生成器を導入し,既存の乱数生成器も含めて統一的なインタフェースを提供する。java.util.random.RandomGeneratorというインタフェースが導入されている。さらにこれを継承したSplittableRandomGenerator,JumpableRandomGenerator,LeapableRandomGenerator,ArbitrarilyJumpableRandomGenerator,StreamableGeneratorというインタフェースが提供されている。
新しいmacOSのグラフィックAPIであるMetalに対応させたものである。
Appleがx64アーキテクチャからAArch64への移行を進めていることに対応して,AArch64へ対応するためのものである。
Java AppletのAPIが非推奨となりました。以下のクラス/インタフェースを使用するとコンパイラが警告を出すようになっている。
--illegal-access
オプションによって可能であったJDK内部のAPIを利用することが不可能となっている。
GitHubから間もなくリリースされるOpenJDK 17のソースコードをダウンロードして,ビルドしてみました。ビルド方法に書かれている通りに実行すればよいのですが,かなり多くのライブラリが必要なので,何度もconfigureをくり返すことになりました。
動作確認をすると,きちんとバージョン情報が表示されました。
e-taxで消費税の中間申告を行い,Pay-easyで納税しました。税務署に行かずに申告も納税もすませられるのはありがたいです。
本日,東京大手町の自衛隊東京大規模接種センターに行き,新型コロナウイルスのワクチン接種を受けてきました。まったく痛みはなく,注射針を刺されたことがわかりませんでした。副反応は1回目の接種で5割,2回目の接種で8割の人が何らかの異常を呈するそうなので,何かはあると覚悟しています。