AWS SDK for Go v2 でカスタムエンドポイントを使用 - MinIO へ接続

AWS SDK for Go v2 を使って S3 互換の MinIO へ接続してみました。 今回のサンプルコードは こちら はじめに 初期化(プロジェクトの作成)を実施します。 > go mod init sample AWS SDK for Go v2 で S3 を扱うための依存モジュールを追加します。 > go ge…

Spring Native でリフレクションを使ったメソッドの取得

Java の下記インスタンスに対して、それぞれ getClass().getDeclaredMethods() する処理を Spring Native でネイティブイメージ化するとどうなるのか試してみました。 (a) インナークラス (b) レコードクラス (c) ラムダ式 結果として、(a) は特に問題なし、…

SeaORM でテーブル作成とデータ操作

github で SeaORM という Rust 用の ORM を見つけたので軽く試してみました。 SeaORM 0.8 sea-orm-cli というツールを使うと、既存のテーブルから Entity 定義を自動生成してくれるようですが、ここでは自前で定義した Entity を基にテーブル作成とデータ操…

Dagger で Node.js アプリをビルドする

CI/CD のパイプラインを定義するためのツール Dagger を使って Node.js アプリのビルドを試してみました。 Dagger v0.2.7 今回使用したソースは こちら sample1. echo の実施 まずは以下の処理を Dagger で実施してみます。 (1) ローカルの input.txt ファイ…

sqlparse で SQL から更新対象のカラムを抽出

sqlparse を使って SQL の UPDATE 文から更新対象のカラムを抽出してみます。 ソースコードは こちら はじめに 更新対象のカラムを抽出するにはパース結果のトークンの中から該当部分を探して値を取得します。 例えば、以下のような UPDATE 文をパースすると…

juniper による GraphQL の処理を WebAssembly 化する

juniper を使った GraphQL の処理を WebAssembly 化し、Deno 用の JavaScript で実行してみました。 juniper v0.15.9 ソースコードは https://github.com/fits/try_samples/tree/master/blog/20220224/ はじめに 今回は wasm-bindgen と wasm-pack を使いま…

docker run 時に Kuromoji をインストールして Elasticsearch を実行

下記のオフィシャルな Docker イメージだとプラグインが導入されておらず Kuromoji を使えません。 https://hub.docker.com/_/elasticsearch そこで、docker run 時に Kuromoji をインストールして Elasticsearch を実行してみました。 はじめに Elasticsear…

辞書ベースの日本語 Tokenizer - Kuromoji, Sudachi, Fugashi, Kagome, Lindera

辞書をベースに処理する日本語 Tokenizer のいくつかをコードを書いて実行してみました。 (a) Lucene Kuromoji (b) atilika Kuromoji (c) Sudachi (d) Kuromoji.js (e) Fugashi (f) Kagome (g) Lindera 今回は以下の文を処理して分割された単語と品詞を出力…

MySQL 5.7 で非ネイティブなパーティションを判別

MySQL 5.7 へのアップグレード時に、パーティションを更新しないと該当テーブル検索時に以下のような警告が出力されるようになります。 非推奨パーティションの警告 The partition engine, used by table 'テーブル名', is deprecated and will be removed i…

Elasticsearch で nested の集計

Elasticsearch において 2層の nested 型フィールドで集計してみました。 サンプルのソースコードは http://github.com/fits/try_samples/tree/master/blog/20211127/ はじめに 下記のような 2層のカテゴリ(categories と children は nested 型)を持つド…

Elasticsearch で検索条件に合致した nested の要素だけを抽出

Elasticsearch の nested を用いた検索において、inner_hits を使って検索条件に合致した nested の要素だけを抽出するようにしてみました。 今回のソースは http://github.com/fits/try_samples/tree/master/blog/20211011/ はじめに Elasticsearch では ne…

CDK の Vpc.fromLookup では StringParameter.valueFromLookup を使う

CDK で既存 VPC とのピアリング設定等を行う場合、Vpc.fromLookup を用いて VPC を参照する事になると思います。 VPC ID のハードコーディングを避けるには、SSM(Systems Manager)のパラメータストアから値を取得する方法が考えられます。 CDK で SSM パラ…

Jest と Vue Test Utils による Vue コンポーネントのテスト

Vue CLI で作成した TypeScript 用の Vue プロジェクトに対して、Jest と Vue Test Utils(@vue/test-utils) を追加導入し、Vue コンポーネントのテスト(TypeScript で実装)を実施するようにしてみました。 今回は、Vue CLI の vue create 時に、Manually…

CDK と LocalStack でローカルに Lambda と DynamoDB の実行環境を構築

AWS CDK (Cloud Development Kit) を使って、ローカル環境の LocalStack に Lambda 関数と DynamoDB のテーブルを構築してみました。 下記のようなツールを使用し、CDK によるスタックと Lambda 関数ハンドラーは TypeScript で実装しました。 AWS CDK v1.10…

CDK で作った CloudFormation テンプレートをプログラム内からデプロイする

AWS CDK (Cloud Development Kit) では通常 cdk deploy コマンドを使ってデプロイ処理を実施します。 AWS CDK v1.98.0 これを cdk コマンドを使わずにプログラム内から実施できないか、以下の 2通りで試してみました。 (a) AWS CDK の API を利用 (b) AWS SD…

Amplify AppSync Simulator を直接使ってマッピングテンプレートを検証

Amplify AppSync Simulator は、AWS Amplify CLI に含まれているモジュールで、AppSync をローカル環境で動作確認するためのものです。(AppSync の GraphQL を処理する Web サーバーが起動するようになっている) ソースコードを見てみたところ、AppSync 用…

AWS Lambda のランタイム API サーバーを自作して関数ハンドラーをローカル実行

AWS Lambda では、(Lambda 関数の)ランタイムがランタイム API(ランタイムインターフェース)から呼び出しイベントを受け取って、関数ハンドラーを実行し、その結果をランタイム API へ返すような流れで処理が実施されているようです。 AWS Lambda 実行環…

Go言語で GraphQL - graph-gophers/graphql-go で Interface を試す

前回の graph-gophers/graphql-go を使って、GraphQL の Interface を扱ってみます。 ソースは http://github.com/fits/try_samples/tree/master/blog/20210125/ はじめに GraphQL には Interface と Union という類似の機能が用意されており、共通のフィー…

Go言語で GraphQL - graph-gophers/graphql-go で Query, Mutation, Subscription を試す

Go言語で GraphQL を扱うライブラリはいくつかありますが、今回は下記を試しました。 graph-gophers/graphql-go 文字列として定義した GraphQL スキーマを使うようになっており、それなりに使い易いと思います。 今回のソースは http://github.com/fits/try_…

Go言語でインターフェースのメソッドを列挙する

Go

Go 言語のリフレクションで型情報を扱う Type は以下で取得できます。 func TypeOf(i interface{}) Type 引数 i には値を指定する事になりますが、インターフェースの型情報を取得したい場合はどうするのか気になって試してみたところ、以下で取得できました…

イベントベースで考える在庫管理モデル

従来のイベントソーシングのような手法だと、特定の State(というよりは Entity かも)を永続化するための手段として Event を用いるというような、あくまでも State 中心の発想になると思います。 そこで、ここでは下記のような Event 中心の発想に切り替…

Docker の containerd ランタイムからイベントを受信

Docker の containerd ランタイムからイベントを受信する処理を Go 言語で実装してみました。 containerd 今回のコードは http://github.com/fits/try_samples/tree/master/blog/20201206/ はじめに ここでは、snap でインストールした Docker の containerd…

Node.js で GraphQL over gRPC 的な事をやってみる

gRPC 上で GraphQL を扱う GraphQL over gRPC 的な処理を Node.js で試しに実装してみました。 今回のコードは http://github.com/fits/try_samples/tree/master/blog/20201124/ はじめに GraphQL はクエリ言語なので基本的に通信プロトコルには依存していま…

Go言語と Rust で Mutex による排他制御

以下の 3通りを Go 言語と Rust でそれぞれ実装してみました。 (a) 排他制御なし (b) Mutex による排他制御 (c) RWロック(Readers-writer lock)による排他制御 サンプルコードは http://github.com/fits/try_samples/tree/master/blog/20201122/ Go 言語の…

Node.js で gRPC を試す

「gRPC Server Reflection のクライアント処理」では Node.js で gRPC クライアントを実装しましたが、今回はサーバー側も実装してみます。 gRPC on Node.js サンプルコードは http://github.com/fits/try_samples/tree/master/blog/20201115/ はじめに gRPC…

RLlib を使ってナップサック問題を強化学習2

局所最適に陥っていたと思われる 前回 に対して、以下の改善案 ※ を思いついたので試してみました。 より困難な目標を達成した場合に報酬(価値)へボーナスを加算 ※ 局所最適から脱して、より良い結果を目指す効果を期待 今回のサンプルコードは http://git…

RLlib を使ってナップサック問題を強化学習

ナップサック問題へ強化学習を適用すると、どうなるのか気になったので試してみました。 強化学習には、Ray に含まれている RLlib を使い、Jupyter Notebook 上で実行します。 Ray 0.8.7 今回のサンプルコードは http://github.com/fits/try_samples/tree/ma…

Deno から npm パッケージを使用する(Deno で fp-ts)

下記の方法を用いて Node.js / ブラウザ用 npm パッケージを Deno から利用してみました。 (a) Skypack の使用 (b) Deno Node compatibility の使用 npm パッケージは関数プログラミング用 TypeScript ライブラリの fp-ts を試すことにします。 fp-ts は Com…

Deno で GraphQL

GraphQL を Deno で試してみました。 https://deno.land/x に Deno 用の GraphQL モジュールがいくつかありましたが(基本的には GraphQL.js のポーティング)、ここでは GraphQL.js を直接使う事にします。 GraphQL.js v15.3.0 今回のサンプルコードは http…

rusty_v8 を使って Rust から JavaScript を実行

Node.js の製作者が新たに作り直した Deno という JavaScript/TypeScript 実行環境があります。 Deno の内部では、V8 JavaScript エンジンの呼び出しに rusty_v8 という Rust 用バインディングを使っていたので、今回はこの rusty_v8 を使って Rust コード内…