2020/10/13

Windows 10 機の接続モニタより高い解像度で Chrome リモートデスクトップを使いたい (NVIDIA 機向け)

我が家の Windows 10 機は、グラフィックカードが NVIDIA GeForce GTX 1050 です。接続しているモニタは16年物くらいのえらい古い物なんですが、最近壊れてしまって、電源を入れてから1秒くらいしか画面が映りません……。でも、MacBookPro から Chrome リモートデスクトップで接続して使っているため、特に困っておらず、買い替えに至っていません。

ただちょっと不満だったのが、解像度が 1280×1024 になってしまうことでした。Windows 純正のリモートデスクトップでは、クライアント側の環境に合わせて解像度が変更できますが、Chrome リモートデスクトップではモニタに映っている通りの解像度にしかなりません。接続されているモニタの解像度が 1280×1024 のため、Chrome リモートデスクトップでも 1280×1024 で使うしかないのです。クライアント側の MacBookPro は、通常 1440×900 という解像度なのですが、私は Display Menu というアプリを使って 2880×1800 まで解像度を上げています。そのため 1280×1024 というのはとても狭く感じ、不満だったのです。

ここ数ヶ月、どうにかして 2880×1800 の解像度で Windows 10 機に接続できないかといろいろ試していたのですが、やっとできたので、その手順を記しておきたいと思います。

2020/08/31

Java 15 そろそろ来ますね

OpenJDK 15 は、Final Release Candidate が出ており、2020/9/15 に GA となる予定です。もう間も無くですね。

どんな機能が入るのか、ざっと紹介しておきます。

2020/08/29

R - 入門本編 5章 配列と行列

R における「配列 (array)」は、ベクトルを多次元に拡張したものである。2次元のものは特に「行列 (matrix)」と呼ぶ。逆に言うと、R では3次元以上のものは行列とは呼ばない。

R - 入門本編 4章 順序付き因子と順序無し因子

R では質的変数、すなわち順序尺度、名義尺度を表現する方法として「因子 (factor)」が用意されています。モデル構築にあたっては、順序尺度は「順序付き因子 (ordered factor)」、名義尺度は「順序無し因子 (unordered factor)」として正しくデータを表現しておく必要がありますので、よく理解しておきましょう。

2020/08/23

R - 入門本編 3章 オブジェクト、そのモードと属性

R の型システムの入門編。型をいちいち明示しない言語では、型システムをちゃんと理解しておかないとちょいちょいつまずくので、しっかり把握しておきたい。

2020/08/20

R - 入門本編 2章 数字とベクトル

R を使うにあたって、ベクトルの理解は必須です。ベクトルを基本的なデータ構造とし、様々な演算子や関数がベクトルに対して定義されることにより、データ分析のためのプログラミングが非常に簡潔に記述できるようになっています。
An Introduction to R の2章に沿いつつ (古い版ですが……)、若干の+αがあります。

2020/08/16

jnethack-3.6.6-0.1 を macOS Catalina 10.15.6 で動かしてみた

JNetHack をやりたくて、ビルドしてみたのですが、ちょっと手こずったので、記録しておきます。参考になれば幸いです。

JNetHack って何?

知らない方も多いと思うので、簡単に説明しておきますと、JNetHack は NetHack を日本語化したものです。

NetHack はいわゆるローグライクゲームです。rogue → Hack → NetHack と発展してきた、rogue の直系の子孫的存在です。

2020/07/28

第1期決算出しました

決算処理を終えました。確定申告も済ませました。
今年は難しいお金の動きはなかったので、何とか自力で終えられました。よかったです。
第2期は税理士さん頼まないとちょっと厳しいかもしれません。いっぱい稼がないとですね。

決算で忙しかったので、記事が全然進んでいませんが、下書きは多少書き溜まっているので、随時出していこうと思います。
引き続きよろしくお願いいたします。

2020/06/06

R - 実践編 5 多変量時系列のモデル推定

R の vars パッケージや dse パッケージを使って、多変量時系列を VAR モデルや状態空間モデルにフィッティングさせてみました。

2020/05/28

R - 実践編 4 時系列のモデル推定

時系列データに当てはまるモデルの推定を R で行ってみましょう。実践編 3 で用いたものと同じ時系列 TS を対象として、モデルを推定した様子を紹介したいと思います。

R - 実践編 3 時系列の単位根検定

R で実際に時系列データの単位根検定をしてみましょう。Phillips-Perron 検定と Augmented Dickey-Fuller 検定が使用できます。

R - 実践編 2 データフレームにおける計算、集計

分析対象データをデータフレームに読み込んだあと、本格的な分析に入る前に、計算や集計などを行う必要があることが多いかと思います。R での代表的なやり方を説明します。

R - 実践編 1 ファイルの読み込み、データフレームの加工

実際に R でデータ解析を行うために、CSV ファイル、TSV ファイルの読み込みを行ったときの知見をまとめました。

2020/05/27

都心にカブトムシいた!

先日、千鳥ヶ淵付近を散歩していたら、カブトムシを発見しました。

カブトムシ

こんな都心部にカブトムシがいるとは、と思いましたが、良く考えたら靖国神社や皇居にはいっぱい居るはずですね。そのあたりから飛んできたんでしょうか。それよりも、5月にこんなしっかりしたサイズのカブトムシが居ることの方が珍しいかもしれません。

いずれにしても珍しいものを見ました。

R - 入門本編 7章 ファイルからデータを読み込む

実践的には、プロンプトから data.frame() だの c() だのを駆使してデータフレームを構築することはまずありません。当然ながら、外部ファイルからデータを読み込んでデータフレームを構成することができますので、その方法を習得しておきましょう。

2020/05/24

アーキテクチャ設計のポイント

業務要件を実現するだけであれば、アーキテクチャ設計は不要です。ではアーキテクチャ設計では何をすべきなのか? 私がアーキテクチャ設計を行うときのポイントを備忘録的にまとめました。


2020/05/23

時系列分析 (5) - 状態空間モデル

AR, MA, ARMA, ARIMA, VAR, VARMA, VARIMA, ... などの時系列モデルは、観測値を直接モデル化するものでした。今回紹介する状態空間モデル (State-space model) の場合は、状態の時系列変化と、その状態から観測される値とに分けてモデル化する手法です。AR モデル、ARMA モデルなども状態空間表現を取ることができますし、状態空間モデルではより多様なシステムが記述できます。例えば、時変的な回帰係数を持つ回帰モデルなどが表現できます。
また、状態空間モデルではカルマンフィルタという強力なアルゴリズムによって、条件付き同時分布が効率よく計算できるため、ARMA のパラメータ推定を行うに際して、ARMA の状態空間表現に対してのカルマンフィルタによる推定が良く行われています。


時系列分析 (4) - 多変量の時系列分析

複数の変量が相互作用を持って発展していく形の時系列は珍しくありません。こういったデータは、各変量を個別にモデル化しようとしてもうまくいきません。このような場合は、ベクトル自己回帰 (Vector Autoregressive / VAR) モデルが有効な場合があります。VAR モデルは、AR モデルを多変量に拡張したものです。今回は VAR モデルについて簡単に触れたいと思います。


2020/05/22

時系列分析 (3) - モデルの推定と診断

いよいよ、時系列データからモデルを作ることを考えます。モデルを推定し、そのモデルの善し悪しを診断する方法を紹介します。

2020/05/21

時系列分析 (2) - 自己相関のモデル

ある時系列データが、自己相関検定を経て自己相関があると分かったら、その自己相関のモデル化に取り組む価値があります。自己相関のモデル化にあたっては、移動平均過程 (MA過程) と自己回帰過程 (AR過程) という2つの過程が基本となります。この2つの過程とその組み合わせである自己回帰移動平均過程 (ARMA過程) について見ていきましょう。

2020/05/20

時系列分析 (1) - 時系列の性質の把握

為替レートなどの価格時系列データの分析をよく行うので、統計学的に分析する場合の一般論について書いてみました。
理系大学の学部生が使う教科書に書いてあるレベルより少し丁寧に説明しているつもりです。

2020/05/19

R - 研究編 5 メモリ管理に関する関数

R のメモリ管理に関する関数をまとめて紹介します。

R - 附録 1 pkginfo() - パッケージ内のオブジェクトの一覧を表示する

R のパッケージ内のオブジェクトの一覧を表示する関数です。オブジェクトの名前とクラスとサイズを表示します。

2020/05/16

R - 研究編 1 評価機構

R は、C や Java で育ったプログラマには直感的には馴染み辛い、ある種独特な評価機構を持っているので、その振舞いを他のプログラミング言語と比較する形でまとめてみました。

MetaTrader4 設定情報取得スクリプト

MetaTrader4 で、口座情報、証拠金状況情報、時刻情報、マーケット情報、商品情報を取得するスクリプトを作りました。

AccountXxx() や MarketInfo() を使って情報を取得するスクリプトはけっこうあちこちで見掛ける、珍しくもなんともないものなのですが、一応いくつか特徴があります。

  • コード値を返すものは、その意味が分かるようなメッセージにしている
  • 日付・時刻はフォーマットしている
  • サーバ時刻とローカル時刻の時差を計算している
  • 単位のある数値は、単位を表記するようにしている
    • point とか % とか
    • 例えば JPY 口座で USDCHF の情報を見ているときに、各種金額が JPY なのか USD なのか CHF なのかを明示している
  • おそらく MetaTrader5 由来だと思うのですが、AccountInfoXxx() や SymbolInfoXxx() でしか拾えない情報があるので、それらも表示するようにしている

2020/05/06

R Version 4.0 リリース

4/24、R Version 4.0 がリリースされました。主要な変更点を説明します。

2020/05/05

日付処理 - 月末日を計算する

月末日を求めたいときは、だいたい月で条件分岐しますよね。1, 3, 5, 7, 8, 10, 12月なら31日、4, 6, 9, 11月なら30日、2月なら閏年判定をやって28か29日。

でも今回は、計算式で月末日を算出してみたいと思います。

日付処理 - MetaTrader - ニューヨークサマータイム判定 (第n日曜日以降判定)

ニューヨークのサマータイム期間は、以下のようになっています。

  • 2006年以前
    • 4月第1日曜日~10月最終日曜日
  • 2007年以降
    • 3月第2日曜日~11月第1日曜日

ある日がサマータイム期間に入っているかどうかを判定するためには、第n日曜日以降なのかどうかを調べる必要があります。
Java ならこうするだけなのですが、今回は MetaTrader での実現を考えました。MetaTrader ではサマータイム情報を持っていないため、算出してみようという話です。

Blogger - 本ブログのテーマ等の変更


いくつか理由があって、本ブログのテーマや、記事の構造などを変更してみました。1つは、トップページに表示される記事が少ないと思ったこと。他に、Google のインデックス登録が進まないのが、レスポンスが悪いせいではないかと思ったことや、Blogger テーマの XML の構造が複雑で管理しにくいと思ったことなどです。
ざっと、どんなことをやったか書いておきたいと思います。


2020/05/02

日付処理 - Java - ニューヨークサマータイム判定

JRE がちゃんとアップデートされていて、2007年のサマータイム開始・終了日の変更に対応していれば、これでOK。

Java - Generics のワイルドカードについて

Java 総称型における、型パラメータのワイルドカードを正しく理解しましょう。上限境界、下限境界についても説明します。Capture helper idiom についても触れています。

Java - Proxy でプロパティアクセスログを取る

java.lang.reflect.Proxy は、動的プロキシを生成するためのクラスです。
ここで言うプロキシとは、オブジェクトを包み込むような形で、かつ元のオブジェクトの型を維持したオブジェクトです。プロキシはメソッド呼び出しを代理で一旦受け取り、何らかの処理を追加できます。型は維持されるので、呼び出し元からはプロキシを介していることをあまり意識する必要がありません。

動的プロキシのサンプルとして、getter/setter へのアクセスをロギングするようなプロキシを生成するユーティリティクラスを作ってみました。

Java - 赤ちゃんに動画を見せているときに PC/Mac を操作されるのを防止する

昔 (8年ほど前)、娘に PC で DVD を見せているときに、キーボードをいじってしまっていろんなことが起きるのを防ぐために作成した Babyproof という Java アプリケーションです。
当時は Java 6 の時代で、Windows での使用しか想定していませんでしたが、今回は Java 14 ベースの Mac 版にリライトしてみました。Windows でも動くんじゃないかと思いますが、未確認です。

Java - 割り込み可能な反復処理スレッドを作る

Java にはスレッドに対する割り込み機構があります。
スレッドからスレッドに interrupt シグナルを送って、割り込みたいという意思を伝える仕組みです。しかし、どんなスレッドでも interrupt を送れば割り込める、というような簡単なものではなく、割り込まれる側のスレッドが、interrupt シグナルを受け取ったときの処理を正しく実装していなければ、割り込むことはできません。
具体的には、InterruptedException や Thread.interrupted() のハンドリングを正しく行う必要があります。
今回はサンプルとして、繰り返し処理をし続けるスレッドを割り込み可能として作るためのちょっとした基底クラスを用意しましたので、見ていきたいと思います。

2020/05/01

Java の文字列連結の変遷とベンチマーク

Java で文字列を連結するときは、+ 演算子ではなく StringBuffer や StringBuilder を使え、ということがよく言われてきました。
しかし、そうしなければならない理由や、しなくてもいいケース、あるいは + 演算子の方が良いケースもあることが、正しく理解されていないように思います。ベンチマークも交えて詳しく説明します。

2020/04/30

Java のショートサーキット演算子の評価順序

ショートサーキット演算子 (&&, ||) の結合優先順位は && が先で || が後です。
でも、評価順序はどうなっているのでしょう? a || b && c という式で試してみました。

Java の演算子の処理時間

演算命令1回の処理時間は極めて短かく、タイマの精度よりも大幅に小さいです。1回の処理時間を直接測定することはできません。それを極力正確に測定することを試みました。

AtCoder 用 Java テンプレート (剰余演算編)

I/O編に引き続いて、剰余演算編。
AtCoder では、素数を法とした剰余類環上で答えを出す問題がちょいちょい出るようです。剰余類環の性質を知っているかどうかを試したいというよりは、巨大数計算で困らせたくないという親切心のようなので、よく使う性質はコードテンプレートに入れておこうかと思い、作ってみました。

2020/04/29

AtCoder 用 Java テンプレート (I/O編)

Twitter でなぜか競技プログラミングクラスタにつながったようなので、ちょっと AtCoder をやってみたり。競技プログラミングは初めてです。あ、大昔に SuperCon '95 や PSC 98 に出ましたが、TopCoder 系のは初めて。

ぶっつけ本番でやってみましたが、けっこう難しいし、Java で参戦したんですが、I/O 系のコードがめんどくさい。ちょっとテンプレートを用意してみることにしました。

MacOS Catalina で MetaTrader4 を動かす

MacOS Catalina (10.15.x) では、32ビットアプリケーションが動作しなくなりました。
そのため、様々な FX 業者で MT4 for Mac として配布している、MacOS 上の Wine を使って MT4 を動かしているようなものは、軒並動作しなくなってしまいました。

そこで、別のアプローチで動かしてみましたので、ご紹介します。

2020/04/26

2020/04/22

Blogger と AdSense

このブログは Blogger を使っています。

最初、Google sites で考えていたのですが、AdSense 広告が載せられないということで、断念しました。
次に考えたのが Drupal で、AWS 上に EC2 + RDS Aurora で Drupal 8 環境を作ってみたのですが、あまりに高コストで、やはり断念。

結局、Blogger に落ち着きました。

で、Blogger で AdSense を使う場合、管理画面の収益メニューから、AdSense に申し込めるようになったら申し込む、という手筈らしいので、がんばって記事を書きつつ、申し込めるようになるのを待ってました。
でもなかなかならない。一説には半年くらいはかかるとのこと。そこまで待ちたくないですね。

でも、ちょっと変わった手順で、AdSense が有効になりました。
  1. AdSense 側で、このブログのドメインを登録する
  2. AdSense 管理画面から自動広告を有効にする
Blogger 管理画面からは AdSense が使えないように見えていますし、AdSense ウィジェットは機能しないのですが、AdSense 側でドメインの審査が通れば、自動広告が有効にできることが分かりました。

AdSense 管理画面から、このドメインの見積もり収益が見えるようになったので、ちゃんと機能しているようです。

2020/04/21

Lombok を使って本質的なコーディングに集中しよう

Lombok を使えば、いわゆるボイラープレート (言語仕様上しかたなく書くコード) を減らすことができます。

Blogger コンテンツに自動的に関連記事を掲載する

Blogger コンテンツに自動的に関連記事を掲載するために、テーマに手を加えます。

2020/04/18

Java 9 以降の新機能ピックアップ

最近、現役で現場で Java エンジニアやっている人の話をいくつか聞いていると、Java の機能についての理解が Java 8 までで止まっている人が多い気がしました。Oracle 版の有償化やサポートライフサイクルの変更などの影響で、Java 8 の延長サポートを使っているシステムが多く、Java 9 以降の経験を積んでいる Java エンジニアがあまり増えていないのではないかな、と思っています。

ここでは、Java 9 以降 Java 13 までに追加された機能をいくつか抜粋して紹介したいと思います。
Java 14 についてはこちらの記事をご覧ください。

Java 14 の新機能 (10) - JEP 370: Foreign-Memory Access API (Incubator)

JEP 370: Foreign-Memory Access API (Incubator)

Foreign-Memory Access API とは?

Java プログラムにおいて使用するメモリは、通常ヒープ領域の中から確保されます。ヒープはガーベジコレクタの管理下にあり、オブジェクトの生成に応じて必要なメモリがヒープから割り当てられ、オブジェクトが消滅したメモリはガーベジコレクタによって識別されて未使用ヒープに戻ります。

しかし Java でも、オフヒープメモリ(Off-Heap-Memory) または外部メモリ (Foreign-Memory) と呼ばれる、ガーベジコレクタの管理外のメモリを使用する需要はあり、以前からオフヒープメモリアクセスを行う実装は存在していました。大きく分けて3つの方法があります。

JDK Flight Recorder で物理メモリを監視してみたけど何か変

Java 14 の新機能である、Foreign-Memory Access API の記事を書こうと思い、試しに 4GB のヒープ外メモリを割り当ててアクセスするプログラムを書いてみました。
メモリ確保状況を確認するため Java 14 の JFR Event Stream を使って、jdk.PhysicalMemory を監視してみたのですが、解放が反映される様子がありません。
top コマンドの出力を横に並べてみると、そちらではちゃんと即座に解放されていることが確認できました。その様子を動画に撮ってみました。

2020/04/17

Java 14 の新機能 (9) - JEP 368: Text Blocks (Second Preview)

JEP 368: Text Blocks (Second Preview)

Java 13 での JEP 355: Text Blocks (Preview) を受けて、仕様を修正しての Second Preview です。まだ Preview レベルなので、明示的に有効化しないと使えません。

テキストブロックとは?

テキストブロックとは、複数行に渡る文字列リテラルの記法です。他の言語では、here document とか here string とか raw string とか verbatim とか呼ばれている記法です。

Java 14 の新機能 (8) - JEP 361: Switch Expressions (Standard)

JEP 361: Switch Expressions (Standard)

switch 式が Preview から標準になりました。

Java 14 の新機能 (7) - JEP 359: Records (Preview)

JEP 359: Records (Preview)

record とは

Java 14 から、データを保持するための immutable なクラスを定義するための新しい構文が追加されました。それが record です。
データを保持するために、以下のような性質を持つクラスを定義することは、Java では頻繁にあります。

  • immutable であること
    • コンストラクタでフィールドを全て設定し、フィールドは final
  • 値を取り出すメソッドを持っていること
  • final クラスであること
  • hashCode, equals, toString が適切に定義されていること
とても頻繁に定義するので、IDE で自動生成したり、Lombok のような特殊な仕組みを使ったりしていました。
これからは、record がサポートしてくれます。

JDK 14.0.1 出ました

まだ Java 14 の紹介記事が書き終わってませんが、JDK 14.0.1 が出ました。Oracle JDK も OpenJDK も出ています。

2020/04/14

Java 14 の新機能 (6) - JEP 358: Helpful NullPointerExceptions

JEP 358: Helpful NullPointerExceptions

NullPointerException 発生時のエラーメッセージが詳しくなりました。

使い方

今のところ、デフォルトでは無効になっていて、VM 引数を付けて有効にする必要があります。-XX:+ShowCodeDetailsInExceptionMessages を付けてください。

Java 14 の新機能 (5) - JEP 352: Non-Volatile Mapped Byte Buffers

JEP 352: Non-Volatile Mapped Byte Buffers

MappedByteBuffer は java.nio でメモリマップドI/Oを行うときに使う ByteBuffer です。その MappedByteBuffer が不揮発メモリ (Non-Volatile Memory/NVM) 向けに改良されました。
おそらく、Filesystem DAX を使って mmap で NVDIMM に直接アクセスするシチュエーションを考慮したものだと思います。

深夜の九段坂公園


新型コロナウイルスの蔓延で、外出しづらい日々が続いておりますね。私は人の少ない深夜に、近所の九段坂公園まで散歩してきました。

九段坂公園は以前は、地面が波打ってたり、銅像が立っているけど何の情報も無かったりと、微妙な公園でしたが、最近リニューアルを終えて綺麗で広々した感じになっています。

行ったのは 3:00AM 頃で、誰も居ないだろうと思っていたのですが、番町エリアの内側と違って靖国通り沿いは深夜でもけっこう人通りがありました。車もかなり走っていたので、ちょっとうるさいし空気悪いですね。

やっぱり散歩は大通りには出ないでおこう思いました。

2020/04/13

Blogger コンテンツに自動的に目次を付ける

Blogger 記事に自動的に目次を付けるガジェットを作ってみました。
様々な目次自動生成機構を見てみたのですが、複数記事のあるページに目次を付けたかったので、主にこちらを参考にして作ってみました。
汎用性がちゃんとあるのかどうか分かりませんが、公開したいと思います。

2020/04/12

Java 14 の新機能 (4) - JEP 349: JFR Event Streaming

JEP 349: JFR Event Streaming

JDK Flight Recorder という機能が OpenJDK 11 から含まれています。JRockit 由来の機能で、VM 内部のイベントをファイルに記録し、VM の実行中でも終了後でも、Mission Control や JFR API を使ったプログラムでプロファイリング的に解析できるというものです。

動作中の VM に対しても使えるのですが、記録されたイベントを走査していく形の API なので、リアルタイム監視目的にはちょっと使いづらい API でした。
そこにきて今回、ストリーム形式の API が追加され、イベントドリブンな形で JFR イベントにアクセスできるようになりました。インプロセスでの JFR イベント処理はもちろん、記録されたファイルを解析するときも、どちらも EventStream という統一されたインターフェースでアクセスできます。

2020/04/11

Java 14 の新機能 (3) - JEP 345: NUMA-Aware Memory Allocation for G1

JEP 345: NUMA-Aware Memory Allocation for G1

NUMA とは、Non-Uniform Memory Access の略で、マルチプロセッサのコンピュータアーキテクチャの1形態です。CPU コアにメインメモリのコントローラが内包されており、メインメモリが従属する CPU コアが決まっています。CPU コアは、自分の持っているメモリ (ローカルメモリ) には高速にアクセスできますが、他コアのメモリ (リモートメモリ) へはコア間接続 (インターコネクト) 経由でアクセスするため、遅くなります。
対義語は UMA (Uniform Memory Access) で、全コアがコア外のメモリコントローラ経由でメインメモリにアクセスするようになっていて、どのコアもどのメモリへも均一のアクセス速度を持つ形態です。
Intel では Core i7 や Xeon の Nehalem 世代以降、NUMA になっています。AMD だと Opteron は NUMA です。Ryzen は NUMA も UMA も出来るというびっくり仕様。

Java VM においては、Parallel GC では以前から NUMA が考慮されていましたが、他の GC では考慮されていませんでした。今回、G1 GC で NUMA を考慮するようになりました。
具体的にはまず、各 NUMA ノードに均一にヒープを確保します。その上で、新しいオブジェクトを割り当てるときには、それを行うスレッドに紐付く NUMA ノード上のメモリを優先的に割り当てます。生存期間の短いオブジェクトは、割り当てたスレッドからのアクセスが断然多いということが経験上分かっているため、効率が良くなります。
大きいオブジェクトや古い世代のオブジェクトは、この限りではなくなります。

有効化するには、-XX:+UseNUMA オプションを付けて起動します。

2020/04/10

Java 14 の新機能 (2) - JEP 343: Packaging Tool (Incubator)

JEP 343: Packaging Tool (Incubator)

自己完結型 (つまり、Java Runtime を含んだ形) で Java アプリケーションをパッケージ化するツールです。jpackage というコマンドになっています。

Java 14 の新機能 (1) - JEP 305: Pattern Matching for instanceof (Preview)

JEP 305: Pattern Matching for instanceof (Preview)

instanceof 演算子にパターンマッチング機能が追加されました。いわゆる instanceof-and-cast idiom を書かずに済むようにするための文法拡張です。Preview なので、明示的に Preview レベルの機能を有効にしてあげないと使えません。

Java 14 リリース

Java 14 が出ましたね。
https://jdk.java.net/14/
https://openjdk.java.net/projects/jdk/14/

早速 Pleiades Eclipse も Java 14 入りのバージョンが用意されました。
Pleiades Eclipse 2020-03 リリース 〜 Java 14 新機能を試そう!

余談ですが、おじさんは jdk14 って書かれると、jdk 1.4 を思い出しちゃいます。

さて、新機能は以下の通りです。次の記事から、順番に紹介していきたいと思います。

2020/04/08

Java の final の仕様(3) - final フィールドのセマンティクスの有用性と仕組み

final フィールドのセマンティクス

final フィールドは初期化されたら変更されることはありません。そのため、final フィールドへのアクセスと、通常のフィールドへのアクセスは、その意味するところ (セマンティクス) が少し異なってきます。例えば、通常のフィールドの内容の参照は、「そのタイミングでの値」を取得するという意味を持ちますが、final フィールドの場合は内容が変わりませんから、「そのタイミングでの」という意味は抜け落ちます。
Java は final フィールドのセマンティクスを活用して、メモリアクセスの最適化をしたり、同期化を減らしたり、セキュリティを担保したりしています。Java 言語仕様に沿って確認してみたいと思います。

2020/04/07

Java の final の仕様(2) - final クラス/メソッド

(1) - final 変数 に続いて、今回は final クラスと final メソッドの話です。こちらは final 変数ほど難しくはありません。

Java の final の仕様(1) - final 変数

Java の final の仕様について検索している方が多いように見受けられます。final キーワードは、変数、クラス、フィールド、メソッドの宣言に付加できますが、どういう意味になるかは簡単なようで意外にややこしいものです。Java 言語仕様に基づいてきっちり理解しておきましょう。
まず、final 変数について見ていきたいと思います。final クラス/メソッドについては次の記事をご覧ください。

2020/04/06

MathJax Version 3 入れてみた

今まで MathJax Version 2 でしたが、Version 3 に変えてみました。

2020/03/30

R - 研究編 4 zoo パッケージ - 時系列のための拡張パッケージ

zoo パッケージは、時系列を扱うためのクラス zoo および zooreg とその操作のための関数群を提供するパッケージです。特に、不規則時系列 (観測値の間隔が一定ではない時系列) を取り扱うことを目的として設計されています。各種の仕様は、ts クラスや base パッケージにおける振舞いの自然な拡張となるよう配慮されており、それらに慣れている方はスムースに使い始めることができます。

2020/03/28

型システムにおける共変性と反変性

共変、反変、不変とは?

オブジェクト指向言語で親クラスに対して子クラスを定義する際、親子で型が違っても、型システムを壊さないパターンがいくつかあります。そのパターンの中で出てくるのが、共変、反変、不変というキーワードです。
共変とは、広い型を持つ親クラスから、狭い型を持つ子クラスを導出する際に、合わせて広い型から狭い型へ変わることを指します。反変とは逆に、狭い型から広い型へ変わること、不変とは型が変わらないことを指します。

R - 研究編 3 時系列データ

R には、時系列データを扱うクラスとして、ts クラスが用意されています。R における時系列データの取扱いの基本となりますので、ts クラスのデータの取扱い方法を見ていきたいと思います。

2020/03/25

Tomcat で ActiveDirectory 認証または LDAP 認証を使う

JAAS という Java 標準の認証・認可サービスの仕様に基づいて、外部システムの認証・認可を利用することができます。
ActiveDirectory または LDAP を用いて認証・認可を行いたい場合は、Realm (レルム) として JNDIRealm を使用します。JNDI 経由でユーザ情報、ロール情報を取得して JAAS に結び付けるための Realm です。LDAP は JNDI でアクセスすることができますし、ActiveDirectory は LDAP データベースで出来ていますので、この方法で実現できます。

2020/03/22

R って何?

R とは、統計解析向けプログラミング言語です。オープンソースソフトウェアです。
ベクトル処理の記述やデータのグラフ化、多変量解析や時系列解析が簡単かつ強力に行えることが特徴で、データサイエンティストの方が良く使っています。最近は Python に押されて少し人気に翳りが見えてきましたが、それでも強力なツールであることに変わりはありません。

本ブログでは R を実用的なレベルで使えるように、解説していきたいと思います。

R には、An Introduction to R という大変よく出来たチュートリアルがあります。昔は日本語版をお作りの方もいらっしゃったのですが、最近はありません。
まずは、これをなぞるような形で解説していければと思います。その後、私の専門である時系列解析を中心により実践的な内容を加えていきます。

当社のITインフラ

当社のITインフラは、SaaSを活用しており、サーバやストレージは保有していません。
どのようなサービスを利用しているか、紹介します。

開発工数と開発期間の見積方程式 (COCOMO)

開発規模が大きくなれば、開発工数が大きくなり、開発期間も長くなる。

ソフトウェア・エンジニアでなくても当たり前ですよね。
でも、開発規模が大きくなったとき開発工数がどれくらい大きくなるのか、開発工数が大きくなったとき開発期間がどれくらい長くなるのか、と言うと、ちょっと難しい質問になります。

2020/03/21

Java のシングルトンを正しく実装しよう

Java プログラマの皆さん、シングルトンを正しく実装できますか? 「そんなの簡単だよ」とおっしゃると思いますが、意外と注意点が多いものです。ここでは正しいシングルトンの実装を確認しておきたいと思います。

Initialization-on-demand holder idiom

Initialization-on-demand holder とは?

Nested static class が使えて、そのクラスの初期化が、そのクラスに初めてアクセスされたときに行われるようになっている言語では、Initialization-on-demand holder という idiom で変数の遅延初期化を行うことができます。
クラスの初期化は同期化されているはずなので、マルチスレッドプログラムでも多重に初期化が実行されることはありません。また、アウト・オブ・オーダー実行によって初期化が不完全な変数を参照してしまうこともありません。
シングルトンインスタンスの遅延初期化によく用いられます。

Double-checked locking は使わないようにしましょう

Double-checked locking (DCL) とは?

Double-checked locking とは、マルチスレッドプログラムにおいて、複数スレッドから参照される変数について、初めて参照されたときに一度だけ初期化を行いたい場合に、同期化のコストを最小化するために考えられた idiom です。
変数への代入が行われるのは初期化時だけなので、同期化が必要なのはそのときだけです。したがって、初期化が終わっているときは同期化をしないようにすることで、同期化のコストを回避しようという発想です。

アウト・オブ・オーダー実行に気を付けよう

現代のアーキテクチャのコンピュータでマルチスレッド・プログラミングをする場合には、アウト・オブ・オーダー実行のことを理解しておく必要があります。
プログラマの皆さんは、「プログラムは思った通りに動くのではない。書いた通りに動くのだ。」と教わってきたと思いますが、イマドキのコンピュータでは、書いた通りには動いていません。
アウト・オブ・オーダー実行について、しっかり理解しておきましょう。

HTML 用色見本

色の名称による色見本

R - 研究編 2 日付・時刻に関するデータ構造と演算

大抵のプログラミング言語で、日付・時刻に関するデータ構造と演算の事情は、歴史的経緯と互換性の影響で混沌としている。R もやはりややこしい状況になっている。
R に用意されている日付・時刻のためのクラスが複数あるので、それぞれの機能を紹介したいと思う。

R - 入門本編 6章 リストとデータフレーム

R の再帰的データ構造である「リスト」と、その特別な形である「データフレーム」について理解する。どちらも実践的に R を使っていくのに必須なデータ構造なので、その操作に習熟しておかなければならない。

2020/03/14

MetaTrader4 の ExpertAdvisor 動作サンプルを動画で公開しました

最近作成した EA の動作がなかなか爽快なので、動画にして YouTube に載せてみました。
MacOSX の標準機能で録画して、iMovie で早送りにして会社ロゴをオーバーレイしてみました。iMovie から直接 YouTube にアップロードできるんですね。とてもお手軽でした。

2020/03/12

MT4 のログをチケット番号で整理する perl ワンライナー

MT4 で1つのチケット (リーブオーダーやポジション) に対して何度も OrderModify() するような、かつ大量のチケットをハンドルするような EA を動かしていると、各チケットがどういう経緯を経ているのかが追いづらくなることがあります。 そのため、以下のような perl ワンライナーで簡易的に整理するようにしてみました。

2020/02/21

Web フォントの読み込み中にテキスト表示

Google PageSpeed Insights の指摘を見ていたところ、「Webフォント読み込み中の全テキストの表示」という指摘を受けました。
フォントの表示方法は、@font-face の font-display で決めます。初期値は、auto (ブラウザ定義) とのことですが、これを swap としてやることで、Web フォントの読み込みが完了するまでは、代替フォントで表示することになります。

2020/02/18

HTML の viewport について

Google Search Console の URL 検査で、モバイルユーザビリティに関する検査があります。この中で、viewport に関する設定の妥当性チェックがありました。
このブログでは、エラーになっていたので、今回以下のように直してみました。Google Search Console から提示された通りに書いてみました。

2020/01/03

日付処理(1) - 日付・カレンダー処理の基礎知識

はじめに

アプリケーションエンジニアにとって、日付・カレンダーに関する業務ロジックを組み立てる機会はとても多いことと思います。最近の言語処理系はカレンダー管理系の標準ライブラリを持っていることが多いと思うので、正しく使いこなせればそれほど難しいことでは無くなってきています。

この記事では、日付・カレンダーに関する業務ロジックの典型的なものを Java, Python のコードスニペットとして紹介したいと思います。Java, Python における標準ライブラリを活用した実用的な例に加えて、日付・カレンダー処理に関する基礎知識とアルゴリズムも解説します。原理を把握したい方、便利なカレンダーライブラリの無い環境でどうしても実現しないといけない方などの参考にもなるかと思います。

MacOSX の Python 環境構築

MacOSX の Python 環境を作ったので、メモ程度ですが記録しておきます。

2020/01/01