作ったものとか技術とか一覧
動きが分かりやすいものの一部はここにまとまってるかも知れない: Akka HTTPを用いたHTTPベースのファイル転送サーバー
目的
アカウントなしでファイルを送り会える
curlやwgetのような他のCUIをインストールせずに使える
時間で削除されたりセキュリティ的なもの
好きなタイミングでの削除
などなど
最善手を打ち続ければ引き分ける(はず)
経路の可視化付き
こちらはリアルタイムに描画できるタイプ
うまく距離関数を定義すれば好きなレンダリングができる GitHub公式ぽいリポジトリカードをSVGとして生成するサーバーサイド ScalaのXMLリテラルを活用
利点は、静的型付けなScalaをかけることで、IDEなどを使って安全で効率的なコーディング/リファクタリングができること
Scalaの構文木(AST)を辿りながらPraatに変換していく ThreadやFutureなしで非同期処理ができる
クライアントサイドでエンドツーエンド暗号化などの仕組み
メッセージチャット/通話/画面共有/手書き文字共有などがある ルービックキューブの回転記号からステップ・バイ・ステップでキューブをスクランブルできるWebアプリ Scalaのcase classの#copy()メソッドをTypeScriptで実現するライブラリ
npmでインストール可能
型安全にcopyを実現でき、間違った使い方をしてもコンパイル時に教えてくれるように設計 Tex形式の数式をコマンドライン上で美しいSVG画像として生成するコマンド
npmでインストール可能
その一方npm版の方は、Dockerへの依存がなくなっていて、そこが利点 型安全に配線を可能にするMIPSアーキテクチャのシミュレーション(CPU) リストの長さが型付けされていて、リストのtakeやdropなどの演算と長さがどうなるかをコンパイル時正しく計算するための証明
リストのtakeしたときに
鳥というよりハエみたい
タブローを使った論理式のソルバー
充足可能性などの証明ができる
音楽ファイルMIDIをHaskell使えるデータ構造に変換するReader
バイナリファイルの構造を読み取るノウハウを知るため
LISPの方言Schemeのサブセットなインタプリタ
リテラル型やUnion型などを持ち、型安全性を追求した静的型付けのスクリプト言語(現在非公開)
一貫性を持った仕様にすることに力を入れたもの
構文解析を楽にするためにS式にインスパイアされた構文になっている あとで、モダンな構文でASTを生成すれば、見た目はモダンになる Rustを目指すわけではなく、GCが必要なる機能を取り除いた最小限を目指した 最終的にはGCはつけたいので、所有権などの話はない ラムダ式やStringを持たないのもそういう理由
上記のコンパイラをフォークして、ガベージコレクションや、Union型などを追加して、より現在の言語に近づけたコンパイラ(現在非公開) assertしたときにソースコードの式をランタイム時に表示とコンパイル時assertを可能にするライブラリ
他言語であるように、assert()内の式がエラーメッセージを含めたかった
staticAssert()の方は、コンパイル時にassertできる
複数言語の字幕を同時に読めるTED
例えば、同じ動画の日本語と英語とフランス語を同時表示して、各言語での言い回しを勉強できる
パソコン通販ドスパラの見積もりCSV生成をするChrome拡張機能
モールス信号をブラウザで打てる簡単なWebアプリ
shortやlongなどの時間を変えたりでき、モールス信号を打つ練習に使う
宿題の予定を共有できるアプリのWebクライアント
実際のTEDxに利用された
setTimeout(f, 1000)ではなく現在時刻を使って補正して精度を向上させている
GitHubリポジトリの履歴をさかのぼり最初のコミットに戻れるChrome拡張機能
様々な言語の配列形式の出力に対応
自分の脳にある変換アルゴリズムを書き起こしたようなもの
利点は、命令形のwhileループ=>宣言的な末尾再帰に変換できること
この変換は自明なのか、こういう研究とか論文とかあるのか知りたいところ
上記のWebアプリ、書こうと思えばブロックとか使って色々うまくいかない例を作る意地悪もできるが、そういったあら捜しではなく変換のアイデアは伝えるために使っている。
書き途中の内容などがわかったりして、迅速に相手が言いたいことが察せたりできる
$ cat in.gif | gif-progress > out.gif
英単語のような文字列を生成する
マルコフ連鎖のようなものを使って文字のコーパスから遷移確率を導いてそれを使って生成している 主な目的はバッファを溢れさせること
圧縮系のコマンドだとバッファが一定までたまらないと次に進まないかったりして、そうときに使うことを想定している
printf "hello" | verbose | verbose -dで使える
ハッシュの計算結果が標準出力ではなくttyに吐かれるためパイプをつないで行きやすいというメリットがある 内部ではtarを使っていてこのCLIがインストールされていない環境でもtarがあればバックアップ・リストアできるようになっている。 リポジトリのテンプレートエンジン
.ではなくて、パイプでメソッドチェーンを繋げていけるライブラリの作成
HashマップをJSONのように扱えるようにするライブラリの作成
単純なmethod missingによる実装
例えば、user["id"]をuser.idのようにアクセス
その他いろんなデータ加工によく利用
使い捨てのプログラムは簡単に書けるRubyをよく使ってます
TUIベースのテトリス
「エンジニアに優しい、ファイル転送サーバ」のコマンドラインツール
SwingによるGUIオセロ
Confusion MatrixからAccuracy/Precision/Recall/F-measureを計算するライブラリ
pipでインストール可能
pipでインストール可能
Pythonで[1, 2, 3].map(lambda x: x*2)などができる
elcはC言語をJavaやPythonや他言語に移植できるコンパイラ
elvmは既存のCプログラムを純粋なJavaやPythonや他言語に変換できる Cプログラムが純粋なHaskellに変換できる
Haskell版に関して書いた記事
リポジトリがちゃんと別の環境で動く証拠になるためCIが好き 言語とライブラリと環境の組み合わせなどで少しノウハウを蓄積した
公開していて使っている場所一覧