Welcome!

tex2e

Mako

(tex2e)


フルスクラッチでTLS 1.3プロトコルスタックを自作できるエンジニア



ゲームとパソコンが好きだったので、高専の情報科に入学。 高専祭でゲームをクラスメイトと作って学生会長賞を取ったり、 友達とRailsで夜祭入場管理&抽選システムを作って運用したりした。 いろんなプログラミング言語を触る言語オタクになってTeXでプログラミングしたり、UNIX哲学に感化されてシェル芸人を目指していた時期もある。 本科卒業と同時に電気情報システム専攻科に入学。 セキュリティ・キャンプ全国大会2018のTLS1.3/暗号ゼミを修了した。 2019年の暗号化通信ゼミのチュータとして参加して今に至る。

専門特化系の技術者ではないですが、自分の守備範囲は Web系/暗号技術/プロトコル/セキュリティ などです。

Works

今まで作ってきた作品などです。 これら以外にもいろいろGithubで公開しています。 技術系の成果物や備忘録として作成した「晴耕雨読」という技術系ブログもあります。 私の興味・関心分野について知りたい方は、こちらをご覧ください。




Ecoris

View on GitHub

「Ecoris」は高専3年生の高専祭(工嶺祭)のクラス企画で展示した LeapMotion で行う3Dテトリス。Ecoris は 3Dテトリス + エコ に由来し、手の動きを利用して缶ブロックを潰したり、生ごみブロックを振って小さくしながら遊ぶテトリス。このプログラム(C#)部分を担当し、工嶺祭の「学生会長賞」を勝ち取った。使用環境は Unity + C#

Search Comments

View on GitHub | Visit Website

「Search Comments」は有名なレポジトリや、コード内コメントの質が良いと思われるレポジトリなどを対象にコメントを抽出しておいて、それらを言語別で検索できるサービス。使用環境は、コード内のコメントの抽出は Ruby、検索サイトは JavaScript + React

Browser Editor

View on GitHub | Visit Website

「BrowserEditor」はブラウザ上で Sublime Text のような操作を行うことができるエディタ。自分の好みのエディタをインストールできない環境でも、少しでも快適に作業することを目的として作ったやつ。使用環境は JavaScript + Ace.js + maximize-select2-height

Recursive Tree Renderer

View on GitHub | Visit Website

「Recursive Tree Renderer」は、ランダム性を有する再帰木を描画するツール。作成した再帰木は、背景を無色透明で保存することができる。再描画ごとにランダムな樹形が描かれるので、美形が出るまで何回も描画させたり、各パラメータを変更しつつ遊んでもらえると嬉しいです。使用環境は JavaScript + p5.js

Sutcliffe Pentagons

View on GitHub | Visit Website

「Sutcliffe Pentagons」はサトクリフの五角形を描画するためのツール。ネスト数や半径や角度を変更できるほか、五角形以外の図形を描くことができます。各パラメータを変更しつつ遊んでもらえると嬉しいです。使用環境は JavaScript + p5.js

Nagano Open Data

View on GitHub | Visit Website

「Nagano Open Data」は2015年時点での長野市の保育園の一覧をGoogle Map上に表示するサイト。本来なら色々な施設の情報とかを載せたいと考えていたが、施設の緯度経度を求める必要があるため、データ入力の手間などから長野市の保育園のみを表示させている。使用環境は JavaScript + Google Cloud Platform (Maps API)

ruNNing AWay

View on GitHub

「ruNNing AWay」は高専4年生の高専祭(工嶺祭)のクラス企画で展示した LeapMotion で行う、扉を開けまくるゲーム。ゲームデザインはホラー系であるが全く怖くはない。ブラウザで遊べるのが最大の売り。クラスメイトが展示した「落ち魂」と共に、こちらも「学生会長賞」を勝ち取った。使用環境は ES6 + three.js + leapjs

quadratic formula

View on GitHub | Visit Website

「二次方程式の解計算ツール」は二次方程式の解を計算するためのツール。二次方程式の解計算ツールでは、分数・平方根・虚数などの表示がきれいに見えるように MathJax を利用している。使用環境は JavaScript + MathJax

ejjedict

View on GitHub

「ejjedict」は英和和英辞典として使えるアプリ。Mac の 辞書.app のようなアプリを Mac 以外でも使いたいと思ったのが作成に至った経緯。Webで検索すれば辞書の代わりにはなるけど、回線速度が遅い時とかは重宝する。Mac/Windows/Linux で実行可能。使用環境は Electron + AngularJS

yalp

View on GitHub

「yalp」は LaTeX 文章の構造を解析し、JSON 形式に変換するプログラム。もともとは学校の課題として提出するレポートにキャプションは書かれてあるか、参照は正しく行われているか、などを調べる品質チェッカーとして利用する予定だったが、1000行の LaTeX ファイルに対して構文解析に数秒ほどかかる有様なので、利用には至らなかった。使用環境は Perl6

gold-heist

View on GitHub

「Gold Heist」はロボットに見つからずにお宝を手に入れるローグライク・ステルスゲーム。高専4年のプログラミング演習で提出した課題でもある。高専の電気情報科のアピールとして、体験入学の展示にも使われた (2017, 2019の体験入学で展示されたことは確認済み)。使用環境はC言語で OpenGL, GLUT, glpng

rokumoku

View on GitHub

「Rokumoku」は五目並べを拡張した六目並べ(コネクト6)をターミナルで遊べるようにしたもの。サーバ側のプログラムを起動して、クライアント側の接続数が2つになるとゲームが始まる。高専5年のネットワークプログラミングの課題でもあり、@KoiShinとの共同制作。使用環境はC言語で ncurses, socket

color-name

View on GitHub | Visit Website

「色の名は。」は HTML5 で追加された Input Color を使って色を選択し、その色に最も近い色のトップ10の名前を表示する。まだ会ったことのない色を、探しているあなたのために。ブラウザやOSの環境によって Input Color の挙動が異なるので、PC の Firefox からアクセスして遊ぶのがオススメです。使用環境は JavaScript

puzzdemic

View on GitHub | Visit Website

「Puzzdemic」は高専5年生の高専祭(工嶺祭)のクラス企画で展示した、パズルでワクチンを作って世界を救うゲーム。2048というパズルゲームにPandemic (ボードゲーム) の協力型プレイとパンデミック要素を加えたもの。産業フェアの長野高専のブースの展示にも使われた。最新のChrome推奨。キーボードで遊ぶときはWASDと矢印キーを使ってください。使用環境は JavaScript + D3 + イベント駆動

yorusai-entrance

View on GitHub

「5031 yorusai entrance」は学生証のバーコードによる夜祭の入場管理と抽選を行うシステム。@nobuyoとの共同制作。工嶺祭(こうれいさい)を数字に置き換えると 5031 になるところが名前の由来である。もともと、学外の人の入場問題と抽選で当選した学籍番号の人が会場にいない問題を解決するために作られた。2017年の工嶺祭夜祭でこのシステムが実際に稼働した。使用環境は Ruby on Rails

nnct-cancel-info

View on GitHub

「NnctClassInfo」は長野高専の補講情報のページから休講・補講情報を取得するAPI群を提供するサービス。以前は休講・補講日の前日になるとメールを送信するようにしていたが、今ではクラスのSlackに休講・補講情報を流すようにしている。私が高専本科を卒業するまで稼働していた。使用環境は Rails + GoogleAppScript + Slack

word-roots

View on GitHub

「word-roots」は英単語の語源を調べるためのコマンド。例えば colloquium(研究会)という単語を見たときに語源 loqu(話す)を発見するのは結構難しいので、それならプログラムで調べようと思って作ったもの。単語によっては間違った語源を抽出してしまうので悪しからず。ツリー構造の様に表示するのはtreeコマンドを自作したとき以来のこだわり。使用環境は Python

latex2pptx

View on GitHub

「latex2pptx」は LaTeX によって作られた PDF スライドと、テキストファイルに書いたノートから、パワーポイントを作成するためのコマンド及び環境のこと。卒業研究発表会ではこれを使って発表に臨んだ。作成した理由は主に、TikZで書いた図をスライドの方でも使い回したかったのと、数式を示す必要があったからである。使用環境は Python + python-pptx + ImageMagick + LaTeX Beamer

multiple-precision

View on GitHub

「Integer」は高専3年のときに多倍長演算の授業で作成したプログラム群。本科卒業前に昔のコードを綺麗にした上で除算アルゴリズムを改良して公開することにした。自宅のパソコンを使ってガウスのarctan系公式で円周率の小数点以下1000桁を求めるのに0.3秒、10000桁を求めるのに2分7秒かかる。もちろんGMPには到底及ばない。使用環境は C言語

lifegame

View on GitHub

「Lifegame」は私が知っている言語でライフゲームを実装したものを集めたレポジトリ。何種類の言語を使えるかを説明するために作っていたが、LaTeXでライフゲームを作ったあたりで既に満足してしまっている。使用言語は c, java, lisp, python, ruby, js, go, perl, php, scala, erlang, elixir, c#, f#, swift, verilog, bash, awk, latex, ...

auto-sushiDA

View on Blog

「Auto-SushiDA」はGUIオートメーションと画像認識と光学文字認識で、タイピングゲーム「寿司打」を自動化したもの。荒らしが増えないように自動化ソースコードは公開していないが、システム構成などについてはブログの記事として書き留めてある。使用環境は Python + PyAutoGUI + PyOCR + Tesseract

rfc-translater

View on GitHub | Visit Website

「RFC Translater」はRFCを自動翻訳するためのツール群と、それによって翻訳したRFCのサイトのこと。原文と翻訳文を並べて読みたいのと、RFCの本文は改行されていて改行を除去した上でGoogle翻訳に渡さないと適切な訳が得られない煩わしさを解決するために作成した。使用環境は Python + Selenium など

rfc-translater-figs

Visit Website

「RFC Figures」はRFC Translaterからの派生物です。アスキーアートは、ASCIIのみを使って自分の意見や世界観を表現するためのものです。RFCにはアスキーアート職人による作品の数々が散りばめられています。我々はRFCのアスキーアートを文化財だと考えており、これらの文化財を保護する目的でサイトを作成しました。

その他の成果物

  • 技術系ブログ (Jekyll + GitHub Pages)
    晴耕雨読
  • レポート提出時のLaTeXの構造や内容をチェックするツール
    latex-test
  • MeCabのElixir向けバインディング
    mecab-elixir
  • MacOS向け改良(改造)版のStegsolve
    stegsolve-macos
  • 楕円曲線のCurve25519とCurve448を使ったDiffie-Hellman鍵交換のPython実装
    elliptic-curves
  • AEAD暗号のChaCha20-Poly1305のPython実装
    chacha20-poly1305
  • マルコフ連鎖による文章の自動生成
    markov-chain-sentence-generator
  • OpenCVでサイゼリアの間違い探しを解くツール
    saizeriya-spot-the-difference
  • 研究室の自動開錠システムに関するプログラム群
    auto-door-unlock
  • TLS 1.3のPython実装 (鍵共有とパケット暗号化のみ)
    mako-tls13
  • 過去問道場のサイトで広告ブロック検知を回避しつつ広告を非表示にするChrome拡張
    my-ad-blocker (非公開)
  • 使用時間制限のために特定サイトに一定時間アクセス不可にするChrome拡張
    my-site-blocker (非公開)

Skills

プログラミング言語は多くの言語から影響されて作られた経緯があるため、幾つかの言語を同時に勉強するのが効率がいいかなと思っています。もちろん勉強した全ての言語を使いこなせるという訳ではないですが、勉強した中で特に好きな言語(~= 得意な言語)について紹介します。


Languages


Ruby

純粋なオブジェクト指向・省略できる括弧・メタプログラミングの柔軟性 の三拍子が揃っているため、最も自由度が高く、効率的にプログラムが書ける言語の1つだと思っている。優秀な正規表現を持つ点もポイント。

Elixir

Ruby風な構文で書ける関数型言語。ErlangのVM上で動く。関数型言語の考え方と、Erlangのシステムと、Rubyのように扱えるオブジェクトが合わさった素晴らしい言語。macroによるメタプログラミングも強力。

Python

「やりかたは明確な一つの方法にすべき」という考え方が強いが完全ではない。お気に入りの点は、関数やクラスに対して docstring を書けるところ。機械学習プログラミングや研究のときによくお世話になっている。

C#

静的かと思えば var を使って型の推論もできる。デリゲート(ラムダ式)は+演算子を使って1つのデリゲートにすることも可能だし、-演算子を使って特定のデリゲートを削除することも可能。この時点でイベント駆動開発待った無し。

Bash

様々な環境で標準で用意されている言語。GNU拡張が使えるのか使えないのかで時々発狂しそうになる (GNU is not Unix)。複雑なことをさせようとするとコードが途端に汚くなるので、複雑な場合は python にやらせた方が良いと思う。


Environment


Atom

Github製のエディタ。Gitリポジトリでは前のコミットとの差分が行番号の左側に表示されるのが便利だと思ってる。20万行以上あるファイルを開くと固まるのが玉に瑕。その時は Sublime Text を使っている。

Git

バージョン管理システム。プログラミングで失敗したときに前のバージョンに戻すことができるため、これを使うことで気兼ねなくリファクタリングなどの変更を加えることができる。

GitHub

Gitのバージョン管理を複数人で共有するためのWebサービス。作ったコードのほとんどがGithub(それ以外はBitbucket)に上がっているため、私のパソコンのHDDがぶっ壊れても大丈夫な運用をしている。

Learned Languages


今まで勉強した言語の一覧を散布図で表しました。横軸が開発スピードを、縦軸が好みの度合いを、円の大きさは言語の使用頻度を表しています。開発スピードは、個人的な判断ですが、僕がその言語に使い慣れているかどうかで判断しています。なお、言語の使用頻度が高いからと言って、開発スピードが早くなるとは限りません。


Contact


GitHub Twitter