Hyper-V (ハイパーV)とは

  • Microsoft社が提供する、1台のコンピュータ上に仮想的に複数台のコンピュータが起動しているようにみせかける事ができる機能
  • 下の参考URLの画像が分かりやすい。Windows OS内の、複数のウィンドウ上にそれぞれWindows 8やUbuntuなどが起動中である事が確認できる。

参考:

Microsoft’s Virtual Machine Hub: Hyper-V Server 2019

ジェネリック (generic)とは

  • 特定のデータ型に依存しない汎用的なクラスまたはメソッドを定義する機能
  • 通常Typeの意味であるT型と記述するのが一般的

例 (C#):

ジェネリックを使用しない場合、それぞれのデータ型について定義する必要がある。

static void Sample(int x){
    Console.WriteLine(x);
}
static void Sample(double x){
    Console.WriteLine(x);
}

ジェネリックを利用すると下のような汎用的なコードが書ける。

static void Sample<T>(T x){
    Console.WriteLine(x);
}

バッキングフィールドとは

  • プロパティ値を格納するために裏側で自動生成されるフィールドのこと
  • Kotlinでは、フィールドという形でのメンバ変数は直接宣言できず、プロパティ(フィールド+ getter/setter)という形をとる。privateで内部データ的なプロパティ値を別に保持しなくとも、getter/setter内で自動的に生成されたfieldというキーワードでプロパティ値にアクセスできる。

例 (Kotlin):

fieldキーワードでプロパティ値にアクセスできる。

class Sample(){
    var sample: Int = 0
        get() {
            return field
        }
        set(value) {
            field = value
        }
}

よって、下の_dataのようなプロパティ値を明示的に持たなくて良い。

class Sample(){
    private _data: Int = 0
    
    var sample: Int
        get() {
            return _data
        }
        set(value) {
            _data = value
        }
}

実際には下のようにgetter/setterも省略可能。一見フィールドのように見えるが、裏側ではgetterとsetterがバッキングフィールドにアクセスしている。

class Sample(){
    var sample: Int = 0
}

参考:

速習 Kotlin: Javaより簡単!新Android開発言語を今すぐマスター 速習シリーズ

Kotlinのプロパティとは

クラスの実装 〜 プロパティとバッキングフィールド

海外から日本の入出国記録を入手した話

2019年の話ですが、日本の普通自動車免許更新のためにアメリカから遠隔で日本の入出国記録を開示請求したのですが、大分苦労したのでその過程をシェアしたいと思います。

TL;DR:

  • 日本に協力者がいれば、海外から日本の入出国記録の開示請求は可能
  • 超面倒臭い
  • 日本の入出国時に顔認証ゲートをくぐってもスタンプはもらった方が良い

惰性で日本の普通自動車免許を維持し続けているのですが、この時アメリカにいる間に更新期限が過ぎてしまっていました。通常、海外滞在中に免許が切れても、期限から3年以内でかつ”海外にいた事を証明”できれば学科・技能試験免除されます。

イ 失効日から6か月を経過し3年を経過しない場合

 海外滞在等やむを得ない理由のため、上記「ア」の期間内に試験を受けることができなかった場合には、当該事情がやんでから1か月以内であれば、免許試験のうち、技能試験及び学科試験が免除されます。

ですが、その”海外にいた事の証明”が厄介で、運転免許センター側は法務省管轄の入出国記録にアクセスできないため、免許を更新する人が海外にいた事を証明する事になります。海外在住者は免許センターにパスポートを持参し、免許センター側はパスパートのスタンプの入国と出国の日付を見て、更新期間中に日本にいなかった事を確認します。

ただ僕の場合、免許センターの窓口の方に入国のスタンプが一つ足りないと指摘されました。仕事の日本出張時に一度調子に乗って導入されたばかりの顔認証ゲートをくぐって、スタンプをもらい忘れていたようです。

「霞ヶ関の法務省に入出国記録を、直接行って請求するか、郵送で請求してください。」

と、年末の地方の田舎では難しい事を言われて、日程的に無理だったのでこの年は免許更新は断念しました。このようなトラブルは当時多かったらしく、確かに現在では警視庁のホームページには以下のような注意書きがあります。

 なお、出入国手続において顔認証ゲートを通過した場合、旅券にはスタンプ(出入国記録)が押印されません。

 スタンプが押印された旅券を用いる場合には、顔認証ゲートの通過後、出国手続時には航空機への登場前、入国手続時には税関検査前に担当職員に申し出て、旅券にスタンプの押印を受けて下さい。

次回の日本帰国時にリベンジキメるべく、法務省出入国在留管理庁に電話して事情を説明すると海外からでも請求可能ということでした。その時に話した内容が以下です。

1、海外の日本大使館にて在留証明を入手
・住民票の代わり。
・サンフランシスコ大使館の場合、直接窓口で入手する必要がありました。また、在留証明は有効期限は1ヶ月とのことなので、入手したら入国在留管理庁に郵送するまでタイムリーに動く必要があります。

2、開示請求書を書く
・空いたスペースに日本の連絡先(住所・電話番号)も書く事。
・日本の協力者に収入印紙買ってもらい貼ってもらう。収入印紙の金額は入国在留管理庁のホームページでご確認ください。
・PCで書いてOK。
・印刷はレターサイズでOK。昔はA4でなければならないと書かれてた覚えがありましたが、今はないようです。

3、返信用封筒の宛先は海外の現住所を書く事
・日本の協力者への返信は不可。
・切手も海外へ届く分の金額を貼っておく事。

例えば、収入印紙を買ってもらったり、日本の連絡先が必要だったり、日本に協力者が必要になってきます。僕は実家の両親の助けを求めることにしました。書類一式をまず日本の実家に送り、収入印紙を貼ってもらい、海外の現住所行きの返信用封筒を含めた一式を入国在留管理庁へ転送してもらいました。従って、計3つの封筒が必要になってきますね。結構ややこしいので両親に理解してもらい上手くできるか心配でしたが、無事入国在留管理庁から返信があり、入出国記録を入手できました。

以上、海外から遠隔で日本の入出国記録の入手の方法を書きました。合計でどれくらい時間がかかったかは忘れてしまいましたが、在留証明の有効期限が1ヶ月しかないのと、日本に帰国する前に入国在留管理庁から返信がないといけないので、時間をうまく計算する必要があります。

今後僕と同じような経験する方がいらっしゃるかもしれないと思い記事を書きましたが、この記事がお役に立てれば幸いです。

参考:

出入(帰)国記録に係る開示請求について

海外滞在中で日本の免許をお持ちの方

final修飾子とは

  • finalとして変数を初期化すると、その後定数として扱われ、値が変更する事がされない事を保証する (再代入不可)。
  • constとの違いは、constはコンパイル時に初期化されるが、finalは初回使用時に初期化使用時に初期化される

例 (Dart):

String name = "Bob";
final a = name;
const b = name; // Error

参考:

A tour of the Dart language

@NonNull/@NotNullアノテーションとは

  • フィールドやメソッドの引数、戻り値にNullを許容しないことを明示するアノテーション
  • インポートするライブラリによって挙動が異なり、Nullの時に例外を投げたり、静的解析でエラーを検出したりする

参考:

Nonnullって、何ですか?

Android: NonNullアノテーション

アノテーション(annotation)とは

  • @マークから始まる注釈機能
  • 説明を付与する機能だけで無く、古くなった非推奨の関数の使用に注意を促したり(@deprecated)、オーバーライド時のスペルミスを(@override)防ぐ機能などがある

参考:

【Java】アノテーションの使い方

Java @Override アノテーション活用法

シグネチャ(シグニチャ、signature)とは

  • 関数の実装において、関数名、引数の数、型や順番で構成された識別子
  • 言語によっては戻り値の型を含む場合もある
  • 呼び出す関数を識別するために用いられる。例えば、言語によっては関数名が同じで引数が異なる関数を許容(オーバーロード)するため、区別が必要になってくる。

例 (C++):

class Sample{
  int add(int a, int b){ // "add(int a, int b)"がシグネチャ。C++においては戻り値は含めない。
    return a + b;
  }
};

参考:

シグネチャ