サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
fits.hatenablog.com
CDK で既存 VPC とのピアリング設定等を行う場合、Vpc.fromLookup を用いて VPC を参照する事になると思います。 VPC ID のハードコーディングを避けるには、SSM(Systems Manager)のパラメータストアから値を取得する方法が考えられます。 CDK で SSM パラメータストアの値を参照するには、以下のような方法が用意されていますが、Vpc.fromLookup の vpcId へ指定できたのは (b) で (a) は駄目でした。 (a) StringParameter.valueForStringParameter ※ (b) StringParameter.valueFromLookup ※ valueForTypedStringParameter や new StringParameter(・・・).stringValue でも同じ (a) の戻
従来のイベントソーシングのような手法だと、特定の State(というよりは Entity かも)を永続化するための手段として Event を用いるというような、あくまでも State 中心の発想になると思います。 そこで、ここでは下記のような Event 中心の発想に切り替えて、在庫管理(在庫数を把握するだけの単純なもの)を考えてみました。 State は本質ではなく、Event を解釈した結果にすぎない(解釈の仕方は様々) Event を得たり、伝えたりするための手段として State を用いる 要するに、Event こそが重要で State(Entity とか)は取るに足らない存在だと(実験的に)考えてみたって事です。 従来のイベントソーシング 本件 State が目的、Event が手段 Event が目的、State が手段 なお、ここでイメージしている Event は、特定のドメ
Node.js の製作者が新たに作り直した Deno という JavaScript/TypeScript 実行環境があります。 Deno の内部では、V8 JavaScript エンジンの呼び出しに rusty_v8 という Rust 用バインディングを使っていたので、今回はこの rusty_v8 を使って Rust コード内で JavaScript コードを実行してみました。 rusty_v8 今回のサンプルコードは http://github.com/fits/try_samples/tree/master/blog/20200705/ 設定 rusty_v8 を使うための Cargo 用の dependencies 設定は以下のようになります。 Cargo.toml ・・・ [dependencies] rusty_v8 = "0.6" JavaScript コード実行 以下の Ja
Rust で WASI 対応の WebAssembly を作って、スタンドアロン実行や Web ブラウザ上での実行を試してみました。 WASI(WebAssembly System Interface) は WebAssembly のコードを様々なプラットフォームで実行するためのインターフェースで、これに対応した WebAssembly であれば Web ブラウザ外で実行できます。 Rust で WASI 対応の WebAssembly を作るのは簡単で、ビルドターゲットに wasm32-wasi を追加しておいて、rustc や cargo build によるビルド時に --target wasm32-wasi を指定するだけでした。 wasm32-wasi の追加 > rustup target add wasm32-wasi 標準出力へ文字列を出力するだけの下記サンプルコードを --
Kotlin で Scala の Scalaz や Cats のような関数型プログラミング用のライブラリを探していたところ、以下を見つけたので試してみました。 Λrrow 0.7.3 ソースは http://github.com/fits/try_samples/tree/master/blog/20180822/ はじめに Λrrow は以下のような要素で構成されており、Haskell の型クラス・インスタンスのような仕組みを実現しているようです。 Datatypes (Option, Either, Try, Kleisli, StateT, WriterT 等) Typeclasses (Functor, Applicative, Monad, Monoid, Eq, Show 等) Instances (OptionMonadInstance 等) そして、その実現にはアノテーショ
トピックモデルは潜在的なトピックから文書中の単語が生成されると仮定するモデルのようです。 であれば、これを「Python でアソシエーション分析」で行ったような併売の分析に適用するとどうなるのか気になったので、gensim の LdaModel を使って同様のデータセットを LDA(潜在的ディリクレ配分法)で処理してみました。 ソースは http://github.com/fits/try_samples/tree/master/blog/20180313/ 1. はじめに データセット gensim で LDA を処理する場合、通常は以下のような lowcorpus フォーマットを使った方が簡単なようです。(LowCorpus で処理できるので) <文書数> <文書1の単語1> <文書1の単語2> ・・・ <文書2の単語1> <文書2の単語2> ・・・ ・・・ ただ、1行目が冗長なように
「トピックモデルを用いた併売の分析」ではトピックモデルによる併売の分析を試しましたが、今回は gensim の Word2Vec で試してみました。 ソースは http://github.com/fits/try_samples/tree/master/blog/20180617/ はじめに データセット これまで は適当に作ったデータセットを使っていましたが、今回は R の Groceries データセット ※ をスペース区切りのテキストファイル(groceries.txt)にして使います。(商品名にスペースを含む場合は代わりに _ を使っています) ※ ある食料雑貨店における 30日間の POS データ groceries.txt citrus_fruit semi-finished_bread margarine ready_soups tropical_fruit yogurt c
前回 と同様の処理を Java8 のラムダ式を使って実装してみました。 Apache Flink 1.2.0 今回のソースは http://github.com/fits/try_samples/tree/master/blog/20170313/ サンプル 前回 の処理をラムダ式を使って Java で実装すると以下のようになりました。 MoneyCount.java import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.tuple.Tuple2; public class MoneyCount { public static void main(String... args) throws Exception { ExecutionEnvironment env =
Spring 5 で導入される Spring Web Reactive を試してみました。 本来なら Spring Boot で実行する事になると思いますが、今回は Spring Boot を使わずに Undertow で直接実行してみます。 ソースは http://github.com/fits/try_samples/tree/master/blog/20161115/ サンプル作成 ビルド定義 現時点では Spring Web Reactive の正式版はリリースされていないようなのでスナップショット版を使います。 Undertow を実行するために undertow-core、JSON で結果を返す処理を試すために jackson-databind を依存関係へ設定しています。 build.gradle apply plugin: 'application' mainClassNa
Groovy で Lucene の API を使用して Solr や Elasticsearch のインデックスの内容を確認してみました。(Lucene 6.2.1 の API を使用) ソースは http://github.com/fits/try_samples/tree/master/blog/20161024/ (a) ドキュメントの内容を出力 まずは、ドキュメントに属するフィールドの内容を出力する処理です。 DirectoryReader から Document を取得し、フィールド IndexableField の内容を出力しています。 dump_docs.groovy @Grab('org.apache.lucene:lucene-core:6.2.1') import org.apache.lucene.index.DirectoryReader import org.ap
Java Flight Recorder (JFR) は Java Mission Control (jmc) や jcmd コマンドから実行できますが、今回は以下の MBean を使って JMX から実行してみます。 com.sun.management:type=DiagnosticCommand この MBean は以下のような操作を備えており(戻り値は全て String)、jcmd コマンドと同じ事ができるようです。 jfrCheck jfrDump jfrStop jfrStart vmCheckCommercialFeatures vmCommandLine vmFlags vmSystemProperties vmUnlockCommercialFeatures vmUptime vmVersion vmNativeMemory gcRotateLog gcRun gcRun
HotSpot VM の世代別 GC において、オブジェクト(インスタンス)には年齢 (age) が設定されており、Minor GC が適用される度にカウントアップされ、長命オブジェクトかどうかの判定に使われるとされています。 そこで今回は、Groovy で JDI (Java Debug Interface) と Serviceability Agent API を使って、実行中の Java アプリケーションへアタッチし、オブジェクトの年齢を取得してみたいと思います。 使用した環境は以下の通りです。 Groovy 2.4.6 Java SE 8u92 64bit版 (JDK) ソースは http://github.com/fits/try_samples/tree/master/blog/20160425/ はじめに 今回は、JDI の SA PID コネクタ (sun.jvm.hots
前回、(ConvNetJS による処理結果を)折れ線グラフ化した方法に関して書いておきます。 D3.js ソースは http://github.com/fits/try_samples/tree/master/blog/20160222/ 準備 Node.js で D3.js を使うには、下記モジュールを npm でインストールします。 d3 (D3.js) jsdom インストール例 > npm install d3 jsdom --save D3.js は DOM を操作しますので、Node.js で使うには DOM を扱う jsdom のようなモジュールが必要となります。 (1) 折れ線グラフ(SVG)作成 前回は csv ファイルの内容をグラフ化しましたが、今回は変数定義した配列の値を折れ線グラフ化する事にします。 (配列の値を縦軸、配列のインデックス値 + 1 を横軸にします)
Excel Builder (.js) を使って、Web ブラウザ上で動的に Excel ファイル (.xlsx) を作成し、ダウンロードする方法をご紹介します。 ソースは http://github.com/fits/try_samples/tree/master/blog/20150822/ サンプル作成 まずは、HTML を用意します。 今回は、download というリンク (a タグ) をクリックすると Excel ファイル (.xlsx) をダウンロードするようにしてみます。 Excel Builder (.js) は RequireJS に依存しているため、RequireJS を読み込むようにして data-main 属性へ実行する js ファイルを指定します。 index.html <!DOCTYPE html> <html> <head> <script data-mai
Commons BeanUtils に Bean のプロパティをコピーする BeanUtils.copyProperties() というなかなか便利なメソッドがありますが、同名のメソッドが Spring にもあります。 (当然ながらパッケージ名は異なります) ちなみに Seasar2 にも BeanUtil.copyProperties() というものがあります。 ここで、Commons のものと Spring のもので引数の順序が逆になっていたりと紛らわしい違いがあるので簡単にまとめてみました。 Commons BeanUtils 1.8.3 Spring Beans 3.2.4 分類 第一引数 第二引数 例外 MapからBeanへのコピー Commons コピー先 コピー元 検査例外あり ○ Spring コピー元 コピー先 実行時例外のみ × パッケージ名や throws 定義されて
Spring Data Redis のデフォルト設定に関して、個人的に気になった点を挙げておきます。 (1) キーと値に JdkSerializationRedisSerializer を適用 (2) トランザクションサポートが無効化 (enableTransactionSupport = false) 今回使用したモジュールは以下。 Spring Boot Starter Redis 1.2.5 ( Spring Data Redis 1.4.3 ) サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20150827/ はじめに 今回作成したサンプルの Gradle 用ビルド定義です。 spring-boot-gradle-plugin を使わず、gradle run で実行するようにしました。 build.grad
書籍「データサイエンティスト養成読本 機械学習入門編 (Software Design plus)」を参考に、numpy・scipy・matplotlib・scikit-learn パッケージをインストールした Python 3.5.0 の環境を Docker イメージとして作成してみました。 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20151029/ python イメージをベースに作成 まずは、Docker の最新 python イメージ (この時は Python 3.5.0) をベースに Docker イメージを作成します。 なお、書籍では libblas-dev をインストールしていましたが、ここでは代わりに libatlas-base-dev をインストールしています。 Dockerfile FRO
java.sql.ResultSet を java.util.stream.Stream 化する方法はいくつか考えられますが、今回は以下の方法を試してみました。 Spliterator インターフェースの実装クラスを作成 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20151026/ Spliterator インターフェースを直接実装 java.util.Spliterator インターフェースを直接実装する場合、以下の 4つのメソッドを実装します。 メソッド名 内容 備考 tryAdvance 要素を個々にトラバースする 要素が存在する場合に引数の Consumer をその要素で実行し true を返す estimateSize 残りの要素数の推定値を返す 不明な場合は Long.MAX_VALUE を返す c
nginx で Web サーバーをリバースプロキシする際は以下に注意が必要です。 (nginx 1.8.0 と 1.9.4 で確認) リバースプロキシ先からの HTTP レスポンスヘッダーのサイズが proxy_buffer_size の設定値を超えると 502 Bad Gateway エラーとなる その場合のエラーログは次の通りです。 エラーログ例 2015/08/24 00:34:03 [error] 3672#4680: *6 upstream sent too big header while reading response header from upstream, ・・・ このエラーが発生した場合は、proxy_buffer_size の値をレスポンスヘッダーのサイズより大きくする必要があります。 proxy_buffer_size のデフォルト値は 4KB か 8KB に設
EclipseLink 2.6.1 RC1 を使って JPA の一対多リレーションシップを下記 2通りで試し、SQL の実行内容などを調査してみました。 (a) 単方向: @OneToMany + @JoinColumn (b) 双方向: @OneToMany + @ManyToOne 簡単にまとめると次の通りです。 タイプ 使用したアノテーション one側のデータ登録SQL many側のデータ登録SQL (a) 単方向 @OneToMany, @JoinColumn insert insert, update (b) 双方向 @OneToMany, @ManyToOne insert insert (a) の場合に insert だけでは無く update も実施していました。 ソースは http://github.com/fits/try_samples/tree/master/blo
Google の各種 API を使うためのアクセストークンをサービスアカウントを使って取得してみました。 ライブラリは Google API Client Library for Java を使います。 Google API Client Library for Java 1.20.0 ソースは http://github.com/fits/try_samples/tree/master/blog/20150608/ はじめに 今のところ Google API を使用するには以下のような方法があるようで、 今回は (1) の方法で行います。 番号 方法 用途 アクセストークンの取得方法 Google アカウントで API 利用 (1) サービスアカウント利用 サーバーアプリケーション JSON Web Tokens (JWTs) 制限あり (2) Google アカウントで承認 Webサー
Gradle の application プラグインにおける起動スクリプトの自動生成を無効化する方法です。 Gradle 2.4 ソースは http://github.com/fits/try_samples/tree/master/blog/20150607/ はじめに application プラグインを使用して gradle build を実行すると、下記のような構成の zip と tar ファイルが build/distributions へ生成されます。 bin へ起動スクリプトを自動生成 (bat と bash 用) lib へ各種 JAR ファイル ※ を配置 src/dist 内のディレクトリやファイルをそのままの構成で配置 ※ ビルドによって生成された JAR と依存モジュールの JAR 例えば zip ファイルの中身は以下のようになります。 zip ファイル内の構成例
Spring を使った Web アプリケーションへ Ehcache を適用し、JMX でキャッシュ状況を取得できるようにしてみました。 Ehcache サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20150508/ Spring へ Ehcache を適用 Spring には Cache Abstraction 機能が用意されており、Cache 用のアノテーションをメソッドへ付ければメソッドの戻り値をキャッシュできます。 (デフォルトでは、メソッドの引数がキャッシュキーとなります) 実際のキャッシュ処理には以下のようなライブラリや API が利用でき、今回は Ehcache を使用します。 ConcurrentMap Ehcache Guava GemFire JSR-107 (JCache) なお、キャッシュ用
Java 8 で List<V> を Map<K, V> へ変換するようなグルーピング処理をいくつか試してみました。 ソースは http://github.com/fits/try_samples/tree/master/blog/20150420/ はじめに 今回は、下記をリスト化した List<Data> を id でグルーピングして Map<String, Data> へ変換します。 class Data { private String id; private String name; public Data(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } ・・・ } Java 8 より前のバージョンでは以下のようにすると思います。 拡張
今回は Querydsl JPA のコード生成を Gradle で実施してみました。 Gradle 2.3 Querydsl 3.6.2 ソースは http://github.com/fits/try_samples/tree/master/blog/20150322/ はじめに Querydsl JPA では JPA のエンティティクラスを元に Querydsl JPA 用のコードを自動生成して使います。 この場合のコード生成は querydsl-apt モジュールに含まれているアノテーションプロセッサ com.querydsl.apt.jpa.JPAAnnotationProcessor を javac のコンパイルオプションへ指定するだけです。 javac -processor com.mysema.query.apt.jpa.JPAAnnotationProcessor ・・・ G
MaxMind が提供している無償の IP Geolocation DB である GeoLite と Java 用ライブラリを使って IP アドレスから国や都市を特定してみました。 今回は Java 用ライブラリの下記 2種類を試してみる事にします。 MaxMind DB Reader GeoIP2 Java API どちらも Maven のセントラルリポジトリから入手でき、MaxMind DB Reader は low-level API、GeoIP2 は high-level API な印象となっています。 また、GeoLite には下記 2種類があり、上記ライブラリで使えるのは GeoLite2 の方です。 GeoLite2 GeoLite Legacy 今回のソースは http://github.com/fits/try_samples/tree/master/blog/20141
javax.tools と Compiler Tree API を使って Java のソースファイルをパースしてみました。 Java SE 8u31 前回 と同じように、ソースファイルを AST 化した CompilationUnitTree (実際は JCTree$JCCompilationUnit) を取得し、簡単な TreeVisitor を適用します。 今回のソースは http://github.com/fits/try_samples/tree/master/blog/20150208/ はじめに ソースファイルを CompilationUnitTree 化する一般的な方法が分からなかったので、とりあえず以下のような方法で試してみました。 (com.sun.tools.javac.main.JavaCompiler は Compiler Tree API ではありませんが) (a
Java のボイラープレートを補完してくれる Lombok の処理内容が興味深かったので、これを真似た簡単なサンプルプログラムを作ってみました。 Lombok 1.14.8 ソースは http://github.com/fits/try_samples/tree/master/blog/20150117/ はじめに Lombok はアノテーションプロセッサを使って AST (抽象構文木) の変換を実施しています。 Lombok の使い方 まずは Lombok を使って下記のような Java ソースのコンパイルを試してみます。 val や @Value が Lombok の機能を使用している箇所です。 Sample.java import lombok.val; import lombok.Value; public class Sample { public static void mai
前回の 「Reactor で skip・take 処理」 と同様の処理を Akka Streams を使用し Java 8 で実装してみました。 Akka Streams 1.0 M2 ソースは http://github.com/fits/try_samples/tree/master/blog/20150112/ はじめに Gradle を使ってビルド・実行するため、下記のような build.gradle を用意しました。 build.gradle apply plugin: 'application' repositories { jcenter() } dependencies { compile 'com.typesafe.akka:akka-stream-experimental_2.11:1.0-M2' } mainClassName = 'sample.Sample1' /
次のページ
このページを最初にブックマークしてみませんか?
『なんとなくな Developer のメモ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く