generated at
作ったものとか技術とか一覧
動きが分かりやすいものの一部はここにまとまってるかも知れない: https://nwtgck.github.io

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