GitHub Actions で Haxe コードをビルドするために setup-haxe を作成した

はじめに Haxe ビルド環境をセットアップするための krdlab/setup-haxe を作成して Marketplace に公開しました. github.com github.com 背景 仕事の方で Haxe を使っているリポジトリ*1があって,このリポジトリから共通ライブラリが生成されている状況に…

コマンドラインツールにテンプレート機能を取り入れるための調査と実験

はじめに Yeoman の generator みたいなテンプレート機能を自前のコマンドラインツール*1に作り込む必要が生じたので調査しました. 結論としては yeoman-environment と mem-fs-editor,inquirer あたりを組み合わせることで容易に実現できました. Yeomon …

Keycloak を利用して OpenID Connect ライブラリ (haskell-oidc-client) の動作確認をする

はじめに 昨年末に以下の Issue が来ていたことに気付いて修正したのですが,リリース前に Keycloak を用いて haskell-oidc-client の動作確認をできないか試したところ,とても簡単に実施できました. github.com 今回はその方法をまとめたものです. 方法 …

daab on kubernetes

はじめに Raspberry Pi 4 Model B (4GiB) に k3s を導入して複数の試作ボットを single node 上でコンパクトに稼働させられないかな?と考えていて,今回はまずベースとなるマニフェストを Docker Desktop for Mac の kubernetes 上で作成してみます. 要件 …

GitHub Actions と semantic-releaseを組み合わせて Node.js パッケージのリリースフローを整備する試み

はじめに オープンソースとして公開しているとある複数のパッケージでリリースフローが整備されいないという問題があって,昨年末は少々頭を悩ませていました. そこで今回は GitHub Actions と semantic-release を組み合わせて npm へのリリース作業*1を自…

Ansible のモジュールを check mode と差分表示に対応させる

はじめに Ansible の実行時に --check を指定すると check mode (dry run) として (リモートに変更を加えることなく) 実行され,--diff を指定すると変更内容の差分が表示されます. ただしモジュール側がこれらのオプションをサポートしている場合に限りま…

Servant に Experimental モジュールとして追加された認証の仕組み

はじめに 久しぶりに Haskell に戻って Servant を触ってみたら,いつの間にか認証周りの仕組みが実験的に追加されていました. 興味がわいたため,Authentication in Servant とコードを読みながら少しだけ仕組みをのぞいてみました. バージョン情報 lts-7…

「Chainerによる実践深層学習」を読みながら Chainer に入門した話

はじめに 「Chainerによる実践深層学習」という本を読みながら実際に chainer を触ってみました. http://shop.ohmsha.co.jp/shopdetail/000000004728/ 実際に書いたコードはこちらです. https://github.com/krdlab/examples/tree/master/try-chainer 翻訳…

RabbitMQ の分散構成はどうするのが良さそうか?

はじめに モジュール間連携のイベントバスとして RabbitMQ を使用したいのですが,クラスタを組む場合にどうするのが良いのかな?ということを調べてみました *1. なお,以降では「CAP のうち CP 特性が欲しい」ということを念頭において調査しています. …

Haskell で書いた Web サービスにおける IO 部分の自動テスト

Haskell で書いた Web サービスの自動テストを考えたとき,IO の部分が問題になる場合があります. KVS や DBMS を利用する部分は CI サービス上で必要なものを起動すれば問題ないのですが,外部サービスと連携する部分は問題として残ります. またデグレす…

OpenID Connect 1.0 Relying Party を実装するための Haskell 用ライブラリ

タイトルの通り,OpenID Connect 1.0 のクライアントライブラリを作りました.Hackage に上げてありますので cabal install で導入できます. 背景 Web サービスを作成するにあたって認証をどうするかは悩ましいところです.先々の展望を考慮して自前で実装…

haskell-servant の利用例とちょっとだけ仕組みの調査

はじめに Haskell には大小様々な Web フレームワークがあります.(yesod, scotty, spock, apiary, rest, 等々) API サーバを作りたいときは scotty を利用することが多かったのですが,つい最近 haskell-servant というパッケージ群を知りました. 小さな A…

haskell-relational-record の MySQL driver

こちらの記事 で作者の方が haskell-relational-record の解説をされています. MySQL からも使いたいなぁと思ったので,他の RDBMS driver をまねて MySQL driver を書いてみました. haskell-relational-record-driver-mysql 少しずつブラッシュアップして…

Haskell の machines に入門してみた,というお話

はじめに io-streams パッケージがリリースされた折にふと「conduit,pipes,io-streams 以外の streaming data を扱うライブラリには何があるんだろうか?」と疑問に思いつぶやいてみたところ, machines がある ということを教えていただきました. 気にな…

LTSV format parser in Haskell

はじめに 少し前から LTSV が話題になっています.ログ出力データの処理がやりやすそうです. http://ltsv.org/ 上記サイトに載っているとおり仕様がシンプルですから,パーサの練習問題としてもってこいな気がしました. attoparsec による実装 ByteString …

cassy: Cassandra client for Haskell

最近 Cassandra を利用する機会がありまして,今回はその絡みで調べてみたことです. そういえば最近になって 1.2 がリリースされましたね.atomic_batch とか気になります. はじめに cassy は Haskell で書かれた Cassandra クライアントです.ClientOptio…

LAPACK wrapper + Matrix/Vector + Some well-known statistical techniques = Lisys

長らく放置状態になっていた Lisys ですが,コード管理を GitHub に変更しました.コード管理が中途半端なまま放置するのは精神的によくありませんでしたので.https://github.com/krdlab/lisys これはなに? 「LAPACK のほんの一部を C# 向けにラップ + Mat…

resourcet パッケージのコードを読んでみた

久しぶりに時間を確保できたため,Resource モナドのあたりを調査してみました.結果としてはよくわからない部分*1 が残っているのですが,ごちゃごちゃを一旦整理する目的で書き出してみました. 見出し はじめに 基本的な使い方 リソース解放 例外安全性 m…

Conduit で Twitter Streaming API を扱う

忙しいときほど他のことをやりたくなるのは人の性なのか...というわけで今回も Haskell 関連の内容です. はじめに Twitter の Streamimg API から取得した内容を Conduit で処理する,という内容です.Streaming API は Source として利用するのに最適な…

超単純 HTTP サーバ (練習)

去年から,仕事の合間に時間を見つけてはちまちまと Haskell の勉強をしていました. でも本を読むだけでは今一なので,ここら辺で一回まとまったものを書いてみようかと.初心者なのは承知の上でコードをさらそうかと. あと Haskell 良いですね.まだうま…

TameJS と Fiber による非同期処理の記述 (2/2)

前回の続きで今回は Fiber の話題.ずいぶんと日が空いてしまいました. 見出し はじめに 環境 node-fibers とは? Fiber の利用例 Fiber を使った非同期処理の記述例 終わりに はじめに 今回は fiber を導入し,非同期 API のコールバック周りを少し整理し…

TameJS と Fiber による非同期処理の記述 (1/2)

前回からかなり時間が空いてしまいました...やっと時間取れた.今回は 2 回に分け,1 回目で TameJSを,2 回目で node-fibers を取り上げたいと思います. ちなみに,「この方法が良い」と言うよりは「こんな方法もありますよね」というスタンスで書いて…

node.js アプリの負荷分散構成を考える

node.js の負荷分散について考えてみました (フェイルオーバは考慮できていません).個人レベルなので 1 台のハード上に仮想マシンを 5〜6 個立ち上げて実験しています. 見出し はじめに cluster で負荷分散 寄り道:cluster の仕組み 例えばこんな全体構成…

Mongoose のモデルに独自メソッドを追加する

久しぶりに Mongoose ネタです.Schema の API である static メソッドについて少しだけ. 今回は短め. 見出し 何ができる? 登録した関数内での処理 実際の定義 参考にした情報 何ができる? 例えば User というモデルを定義 (UserSchema) したとします.U…

ちょっとだけ Inside node.js

またしてもスケジュールきつめのプロジェクトに放り込まれた KrdLab です.Java ジャバしてます.IDE がないとコード書くのがしんどすぎて,もううんざりです. はじめに 何らかのプラットフォームを利用する場合,その仕組みについて知っておくことは,より…

Mongoose のコネクション周り

node.js + MongoDB はイイ感じです.というわけで Mongoose ネタの続き. 見出し connect と disconnect 明示的にコネクションを扱う Connection とイベント connect と disconnect require で取得する Mongoose オブジェクトには connect と disconnect が…

node.js から MongoDB にアクセス (Mongoose の紹介)

node.js から MongoDB にアクセススためのライブラリに Mongoose があります.今回はこれを紹介しようと思います.O/R Mapper っぽく使えるように設計されており,既存の O/R Mapper を使ったことがある人にとっては,比較的わかりやすい仕様です. 見出し M…

お久しぶりです

今,大災害の発生により大変なときであり,ここ数日のニュースは見てるとしゃれになりません. ひとまず今自分にできることを済ませた上で,できる限り平常運転で行こうと思います.何卒ご了承くださいますようお願い申し上げます. ...大学時代の研究室…

Y combinator

最近は残業と休日出勤ばかりでうんざりの KrdLab です. 今回はちょっと毛色の違う話題を.内容はいつの間にか自分用のまとめになってしまいましたが... Y combinator とは? 不動点コンビネータの一種. 不動点とは,ある関数 F を定義したとき,F(p) = …

OutOfMemoryError を分析する

最近仕事で Java ばかりの KrdLab です.そんな中,Eclipse の Memory Analyzer (MAT) が素晴らしかったので紹介. http://www.eclipse.org/mat/ はじめに Java ではメモリリークによって OutOfMemoryError (OOME) が発生する.このリークを特定する作業はな…