Java の final の仕様について検索している方が多いように見受けられます。final キーワードは、変数、クラス、フィールド、メソッドの宣言に付加できますが、どういう意味になるかは簡単なようで意外にややこしいものです。Java 言語仕様に基づいてきっちり理解しておきましょう。
まず、final 変数について見ていきたいと思います。final クラス/メソッドについては次の記事をご覧ください。
番町のITおじさんが書く、ITエンジニアの教養ブログです。様々なプログラミング言語やソフトウェア工学についての知識、ITやIT業界の歴史、動向などを取り上げます。
2020/04/07
2020/04/06
2020/03/30
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 データベースで出来ていますので、この方法で実現できます。
ActiveDirectory または LDAP を用いて認証・認可を行いたい場合は、Realm (レルム) として JNDIRealm を使用します。JNDI 経由でユーザ情報、ロール情報を取得して JAAS に結び付けるための Realm です。LDAP は JNDI でアクセスすることができますし、ActiveDirectory は LDAP データベースで出来ていますので、この方法で実現できます。
2020/03/22
R って何?
R とは、統計解析向けプログラミング言語です。オープンソースソフトウェアです。
ベクトル処理の記述やデータのグラフ化、多変量解析や時系列解析が簡単かつ強力に行えることが特徴で、データサイエンティストの方が良く使っています。最近は Python に押されて少し人気に翳りが見えてきましたが、それでも強力なツールであることに変わりはありません。
本ブログでは R を実用的なレベルで使えるように、解説していきたいと思います。
R には、An Introduction to R という大変よく出来たチュートリアルがあります。昔は日本語版をお作りの方もいらっしゃったのですが、最近はありません。
まずは、これをなぞるような形で解説していければと思います。その後、私の専門である時系列解析を中心により実践的な内容を加えていきます。
ベクトル処理の記述やデータのグラフ化、多変量解析や時系列解析が簡単かつ強力に行えることが特徴で、データサイエンティストの方が良く使っています。最近は Python に押されて少し人気に翳りが見えてきましたが、それでも強力なツールであることに変わりはありません。
本ブログでは R を実用的なレベルで使えるように、解説していきたいと思います。
R には、An Introduction to R という大変よく出来たチュートリアルがあります。昔は日本語版をお作りの方もいらっしゃったのですが、最近はありません。
まずは、これをなぞるような形で解説していければと思います。その後、私の専門である時系列解析を中心により実践的な内容を加えていきます。
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 です。変数への代入が行われるのは初期化時だけなので、同期化が必要なのはそのときだけです。したがって、初期化が終わっているときは同期化をしないようにすることで、同期化のコストを回避しようという発想です。
アウト・オブ・オーダー実行に気を付けよう
現代のアーキテクチャのコンピュータでマルチスレッド・プログラミングをする場合には、アウト・オブ・オーダー実行のことを理解しておく必要があります。
プログラマの皆さんは、「プログラムは思った通りに動くのではない。書いた通りに動くのだ。」と教わってきたと思いますが、イマドキのコンピュータでは、書いた通りには動いていません。
アウト・オブ・オーダー実行について、しっかり理解しておきましょう。
プログラマの皆さんは、「プログラムは思った通りに動くのではない。書いた通りに動くのだ。」と教わってきたと思いますが、イマドキのコンピュータでは、書いた通りには動いていません。
アウト・オブ・オーダー実行について、しっかり理解しておきましょう。
R - 研究編 2 日付・時刻に関するデータ構造と演算
大抵のプログラミング言語で、日付・時刻に関するデータ構造と演算の事情は、歴史的経緯と互換性の影響で混沌としている。R もやはりややこしい状況になっている。
R に用意されている日付・時刻のためのクラスが複数あるので、それぞれの機能を紹介したいと思う。
R に用意されている日付・時刻のためのクラスが複数あるので、それぞれの機能を紹介したいと思う。
R - 入門本編 6章 リストとデータフレーム
R の再帰的データ構造である「リスト」と、その特別な形である「データフレーム」について理解する。どちらも実践的に R を使っていくのに必須なデータ構造なので、その操作に習熟しておかなければならない。
2020/03/14
MetaTrader4 の ExpertAdvisor 動作サンプルを動画で公開しました
最近作成した EA の動作がなかなか爽快なので、動画にして YouTube に載せてみました。
MacOSX の標準機能で録画して、iMovie で早送りにして会社ロゴをオーバーレイしてみました。iMovie から直接 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 フォントの読み込みが完了するまでは、代替フォントで表示することになります。
フォントの表示方法は、@font-face の font-display で決めます。初期値は、auto (ブラウザ定義) とのことですが、これを swap としてやることで、Web フォントの読み込みが完了するまでは、代替フォントで表示することになります。
2020/02/18
HTML の viewport について
Google Search Console の URL 検査で、モバイルユーザビリティに関する検査があります。この中で、viewport に関する設定の妥当性チェックがありました。
このブログでは、エラーになっていたので、今回以下のように直してみました。Google Search Console から提示された通りに書いてみました。
このブログでは、エラーになっていたので、今回以下のように直してみました。Google Search Console から提示された通りに書いてみました。
登録:
投稿
(
Atom
)