type holyshared = Engineer<mixed>

PHP、Hack、Ruby、OCaml、Rust、Javascript周りの技術ブログ

HackのコードジェネレーターをHackTestに対応させた

Hack用のテストフレームワークが出たので、HackUnitから置き換えました。 github.com そのついでに、CodegenにHackTestのテストコードを生成できるジェネレーターを追加しました。 github.com HackUnitからの移行 名前空間をHackUnitからHackTestに置き換え…

jbuilderからduneに変えた

dune1.0がリリースされたので、jbuilderからduneに置き換えました。 作業内容としてはそんなに修正箇所はありませんでした。 github.com 作業内容 jbuildファイルの変更 jbuildファイルをduneにリネーム 設定ファイルの変更 コマンドをjbuilderからduneに変…

js_of_ocamlをjbuilder(dune)で試してみた

OCamlのバイトコードをJSに変換できるツール、js_of_ocamlを試して見ました。 とりあえず、jbuilder(dune)を使用して、JSを出力できるようにはなりました。 今回はビルドの方法だけの内容です。 必要なもの opam経由で必要なパッケージをインストールします…

Hackで書いたProcessパッケージ

Processパッケージをリファクタリングしました。 https://github.com/hhpack/process 主な変更点は下記の2点です。 stream_selectからstream_awaitへの置き換え IDisposableを使用したリソース管理 stream_selectからstream_awaitへの置き換え パイプの状態…

ppx_inline_testの仕様が変わったみたい

ppx_inline_testの仕様が変わったぽいです。 今まで、テスト実行時にコンソールにテスト結果が表示される仕様だったと思うのですが、デフォルトで表示されなくなったようです。 なのでテスト実行されているのかがわかりにくくなっています。 テスト結果を表…

Hack用のコードジェネレータの新しいバージョンをリリース

Hack用のコードジェネレータの新しいバージョンをリリースしました。 前のバージョンでは、デフォルトのジェネレータしか使用できなかったのを独自のジェネレータを使用できるようにしました。 サンプルのプロジェクト下記に用意してあります。 https://gith…

HackでのJSONのパース

HackでJSONをパースする際にjson_decodeを使うと思うのですが、JSON_FB_HACK_ARRAYSが新しく指定できるようになったみたいなので調べて見ました。 また、JSONを扱う場合の実装をどうするかも検討しました。 json_decodeのオプションによる型の違い オプショ…

Scheme手習い読み終わった

定理証明手習いを途中まで読んでいたのですが、読む前におすすめされていたのと、近所の本屋に一冊だけあったので読みました。 最初にちょっとだけ読み始めて、載っているコードが非常に少なく、写経しなくても覚えれそうと思い、 ちょうど真ん中ぐらいの内…

ppx_inline_testでモジュール内にテストコードを書く

これはML Advent Calendar 2017の記事です。 枠が空いていて、誰も書いてなかったので書きました。 OCamlのテスト用のツールで、構文拡張を使用したppx_inline_testがあります。 今まで、OUnitを使っていたのですが試しに使用してみました。 使用するのに必…

Typesafetyの0.10.0をリリースした

Typesafetyの0.10.0をリリースし、下記の変更を加えました。 OASISからjbuilderへの移行 タイプチェックがパスした時も、レビューコメントを残せるようにした OASISからjbuilderへの移行 ビルドツールをOASISからjbuilderへ変更しました。 移行作業自体は1日…

jbuilderでビルドに必要なファイルを生成する

jbuilderでビルドに必要なファイルを生成する方法を調べました。 なんで調べたかというと、atdgenでjsonのパーサーのコードを出力したかったからです。 パッケージのインストール jbuilder、atdgenをインストールします。 opam install atdgen jbuilder rule…

typesafety_cliのビルドツールの変更計画

CI上でテスト前の型チェックのエラーをGitHubのPRのコメントとして投稿するツールtypesafety-cliのビルドツールを変えようとしています。 具体的にはOASISからjbuilderに移行しようとしています。 開発当初はOASISで良かったのですが、以下の理由で辛く感じ…

Hackのコード自動生成できるようにした

毎回エディタからファイル作成したり、名前空間指定したりするのが面倒なので、コードを生成できるようにした。 コードの生成というか、ファイル生成に近いです。 github.com 使い方 名前空間とディレクトリのペアに対応させるジェネレータをマッピングする…

HackでDBのマイグレーションツールを作った

HackでDBのマイグレーションツールを作ってみた。 データベースの作成、削除、スキーマ変更の適用、適用の取り消しが一通りできます。 現在のバージョンでサポートしているRDBMSはMySQLのみです。 また、マイグレーションはSQLベースです、DSLはサポートして…

プロフェッショナルSSL/TLSを読み終わった

ラムダノートさんから出ている、プロフェッショナルSSL/TLSを読み終わりました。 SSL/TLSを理解するのに、基本的に必要な情報が網羅されていて、とてもいい本だと思います。 プロフェッショナルSSL/TLS(紙書籍+電子書籍)www.lambdanote.com よかった点 鍵…

Hackで書いた自作のオプションパーサーをリファクタリングした

結構昔にHackでオプションパーサー書いていたのですが、しばらく面倒でメンテナンスを放置していました。 それをHHVM-3.21.0がリリースされてたタイミングで、メンテナンスしている他のパッケージと一緒にリファクタリングしました。 使いかたはこんな感じで…

Hackの型のチェックのエラー内容をレビューコメントとして投稿できるようにした

Hackの型チェックをCI上で行っていたのですが、エラー内容を見るのにCI環境側までいちいち見に行かないといけないので、OCamlでレビューコメントとして投稿できるtypesafety-cliを作りました。 レビューコメントは下記のような感じになります。 https://gith…

言語ファイルをチェックできるgemを作った

言語ファイルをチェックできるgem、i18n_checkerを作りました。 多言語対応をしていると、typoで翻訳されていなかったり、言語ファイルに追加漏れがあったりするので、簡単なチェックができるツールが欲しかったのが作った理由です。 サポートするファイル形…

OUnitでOCamlライブラリのテストを書く

これはML Advent Calendar 2016の18日目の記事です。 OCamlのテストフレームワークのOUnitについて解説します。 また、Oasisの簡単な説明も行います。 プロジェクトのセットアップ OCamlのプロジェクトでは、だいたいの場合はOasisを使います。 Oasisはビル…

Rustでlcovのレポートファイルをマージする

これは Rust Advent Calendar 2016 (2) の 14日目の記事です。 lcovが出力するレポートのパーサー&マージャーをRustと実装しました。 lcovはgcovの拡張版みたいなもので、gcovの出力ファイルから、HTML形式のようなコードカバレッジレポートを出力するツール…

Golangで五目並べ作った

そういえば、Golangでコード書いたことないや、と思って作ってみました。 Golangはコード読んだことあるけど、書いたことがなかったので、作り始める前に、 Golangのチュートリアルを半分くらいやったり、出勤時間にパッケージのAPI調べてたしました。 https…

Hacklangのパッケージのテストコードを、型チェックかかるようにしたかったが断念した話

タイトルの通りHacklang用のパッケージを開発していて、テストコードも型のチェックしたかったので、 できるか試してみました。 今、自分がパッケージ開発で使用しているテストツールは下記の通りです。 peridot-php/peridot - BDDテスティングフレームワー…

PHPのコードをHackのコードに変換する

PHPコードをHackのコードに置き換えるのは、最高に面倒くさいですよね。 なので、HHVMで提供されている、hackificatorを使用して、一気に変換できないかを検証してみました。 hackificatorはPHPコードをHackに置き換える為のコマンドラインツールです。 hack…

Hacklang用にベンチマーク取れるライブラリを作った

HacklangでのJITの検証とか、Vector、Setのパフォーマンスの計測がしたかったので作りました。 計測用のコードは下記のような感じになります。 namespace hhpack\performance\example; require_once __DIR__ . '/../vendor/autoload.php'; use hhpack\perfor…

typechecker-clientで型のカバレッジ取れるようにした

型チェックの比率が知りたかったので、クライントのライブラリにAPIを新しく追加しました。 ファイル/ディレクトリ単位でデータを抜いて、整形することで見やすいフォーマットに整形して表示したり、 データを別の形式に変換したりすることができます。 簡…

typesafetyっていうパッケージを作った

typesafetyというパッケージを作りました。 Hacklangでコードを書いていると頻繁に型のチェックをかけるのですが、チェックをするのにサーバーを再起動したりしないといけないのでとても面倒でした。 なので、サーバーの起動と型のチェックをまとめてできる…

Hacklang用のテスティングフレームワークを作った件

hhspecifyっていうBDD styleのテスティングフレームワークを公開しました。 下記のコマンドでcomposerを利用してインストールできます。 composer require hhspecify/hhspecify 使い方は下記の通り。 設定ファイルの作成 まず、最初に設定ファイルを作成しま…

Expectationを再設計した話。

expectationを開発していて、ちょっと気に入らない箇所がいくつか出てきたので、再設計してみた。 再設計したので、expectationはもうメンテしておらず、 expectに変わったので、注意してください。 また、peridotのプラグインも、peridot-expect-pluginに変…

いつから俺は、be_truthy/be_falseyの仕様を勘違いしていたのだ

PHPでexpectationライブラリ作っているのですが、思いっきり間違った実装をしていることに、rspecのリファレンスを見ていて、気がつきました。 matcherのtoBeTruthy/toBeFalseyが、rspecのmatcherでは、 be_truthy - nil、若しくはfalseでない be_falsey - n…

ブログ再開しました。

昔のブログとかはしばらく、残しておきます。 基本的にすべて封鎖する予定です。 旧ブログ - http://sharedhat.com/ Mootips - http://mootips.org/ プロジェクトサイト - http://sharedlab.net/ ギャラリーテーマ - http://sharedbition.com/