依存型の話

m-hiyama.hatenablog.com 上記の記事を読んで、また少し、依存型についてのイメージが明確になったように思う。 圏論を勉強する途中で、その例として何度か依存型には出くわしているし、それとは独立の流れでも、「依存型っていうものがあるらしいけど、まだ…

大きなシステムのトラブルを起こしてみると

転職したのがそれなりに、というかかなり、というかめっちゃでかいシステムを扱う会社なので、トラブルが起きた時も被害がすごいんですよね。一時間システムが止まっただけで被害額がこれだけになる、と上司や同僚から聞かされるにつれ、そういったトラブル…

PythonのWebフレームワーク - Falcon(1)

仕事以外でWebアプリを作るかも、という話になっていて、言語もフレームワークも自由なのでどーしよーかな、と迷っているところです。こういう場合はだいたい、作り慣れている、業務で経験あるものを選ぶのが手堅いというのは分かりつつ、技術者のサガとして…

WebAssemblyのname section

去年WebAssemblyのインタプリタを作って、最近はbinary formatに対応したものを作ろうとしている。特に明確な目標があるわけではない。 前回は最小限で形になる範囲しか対象にしなかったので、仕様書の一部を読めていなかった。具体的には、verificationがそ…

Slackアプリを作りたい

唐突ですが、そういうことです。本来はあまり特定のプラットフォームに乗ったアプリを書くことは好きではないんですが、そんなもんどんなプログラミング言語でも、多かれ少なかれ巨人の肩に乗って書いているので拡大解釈すればいけます。 www.shoeisha.co.jp…

Rustのimpl Traitが使えそうで使えない場所

前提の復習 trait objectについて復習している。各書籍にはどう書いてあったんだっけ。 O'ReillyのプログラミングRust まず、O'ReillyのプログラミングRustだと、11.1.1 トレイトオブジェクトに書いてある。 www.oreilly.co.jp 勝手に今知りたいポイントだけ…

LEB128形式の数値をRustで読み取る

WebAssemblyのbinary formatでは、数値の読み込み時にLEB128形式と呼ばれる可変長のフォーマットを使う。以下を参考にして、その関数をRustで書いてみた。ちなみに書籍の中ではRubyで書かれているので、比較のためその部分だけ抜粋する。 booth.pm Ruby実装…

Rustのrotate shift

超小ネタ。Rustには標準でrotate shiftが用意されている。例えば左に1つずらすrotate_leftだと、調べてみると基本的な型にはそれぞれ実装されている。ちなみに専用のtraitがあるというわけではないらしい。 doc.rust-lang.org 挙動に関しては特に驚くような…

設計のしかたを教えるのは難しい

いきなり勉強会で話すことになって、前々からやりたかった「設計のきほん」というテーマで話したが、いまいち反応が薄くて反省しているという話。 なんか巷でのバズワードや流行りの手法に振り回されずに、そもそも設計ってなんで必要なんだっけ?大切な原則…

IT技術書ってなくなるの

緊急事態になりましたね。 それはいったん置いておいて、iPadに入っている技術書を眺めていたら、技術自体はまだあるし、内容もよかったのに、書籍の情報が古くなってしまっている本もたくさんあるなあ、と突然思った。ちなみに(厳密には数学書とかもあるが…

配色を検索したい

記事の内容とは直接関係ないんだけど、以下の記事の中でのsyntax highlightの配色がとてもいいなと思うんですよ。完全に好みの問題だけど。 nmi.jp で、普段VS Codeを使っているのでそこで同じ配色のテーマを見つけたいなと思ったんですけど、これってどうや…

正月に書いたコード

正月には久しぶりにWebAssemblyの仕様書を読み直して、それをもとに少しだけコードを書いていた。去年の夏休み以来だ。WebAssembly1.0になってから結構経つが、まだあまり変わった感じはない。確か、1.0になったときに関数が複数の値を返せるようになったん…

「お子さま」の覚悟

去年からほぼイベントらしいこともなく、新年が始まった。とはいえ、ここ5年ほどは毎年こんな感じだ。テレビもないしそもそも行事めいたことに労力を割く習慣がないので、少しずつ、年末年始はただの冬休みへと、粘性が高めのまま、変化し続けている。それで…

Algebraic Property Graph

近況 転職後1ヶ月半、初の連休でゆっくりできた。在宅勤務が続く中で一つ気づいたのは、一日誰とも会話せずに仕事するとメンタルを病む、ということ。事務的な報告ではダメで、仕事の内容でも全く問題ないがとにかく話すべき。そういう意味では、単なる作業…

転職しました

6月から新しい環境で働いている。先月も休まず働いていたので、急に切り替わった感触が強い。 規模の差 前職と現職の差は大きい。まず、人数。前職の全社員数は、今の自部署のたぶん1/3ぐらいしかいない。要するにめちゃ増えた。見渡す限り、ソフトウェアエ…

webpackのローダの設定を混ぜるな

概要 小ネタです。webpackには、動作を拡張できる「ローダ」という仕組みがあるのですが、その動作を設定ファイル(webpack.config.js)で変更することができます。今回はここの書き方でハマったという話です。 対応バージョン $ webpack --version 4.8.1 ロ…

圏論シンポジウムに参加した

昨日、圏論シンポジウムに参加してきました。約100人の席がほぼ埋まってました。参加者として記名するタイミングで、そこに「大学名」「役職」という欄を見つけて、ああ、部外者(=研究者以外)向けではないんだな、と感じた(他意はなく、新鮮だっただけ)。…

Python.hの場所を取得する

丸一年、ブログ書いてないですね。気にせず小ネタ。 Pythonには拡張モジュールというものがあって、CやC++などの言語でPythonのモジュールを作ることができます。 docs.python.org そしてそのために必須なCヘッダとして、 Python.h がありますが、このヘッダ…

2018年を振り返る

普段はこういった、一年を振り返るような記録を残すことはない。ただ、今年は区切りをつけたい理由があるので書く。 2018年は長かった。一言で言えば、仕事に追われた一年だった。2017年に技術者として行き詰まりを感じて長期の休暇を取り、ひょんなことから…

Rustで圏論(6) 小圏・関手・自然変換

0, 1, 2, 3, 小圏 0(対象も射もない圏)、 1(対象が1つと恒等射のみの圏)、 2(対象が2つと、それぞれの恒等射・その間の1つの射からなる圏)、 3(対象が3つとそれぞれの恒等射、射も3つで1つの射が残り2つの射の合成である圏) をそれぞれRustで表現し…

Rustで圏論(5) イチ圏がなかなか作れない

イチ圏 前回はゼロ圏(対象も射も持たない圏)をRustで表現してみました。 次は、1(対象が1つと、その恒等射のみを持つ圏)を定義してみようと思います。 少しダサいですが、勝手に「イチ圏」と表記します。 構造体を作る #[derive(PartialEq)] struct Cate…

Rustで圏論(4) ゼロ圏を作る

対象の族と射の族の型を変更した 今回定義している圏のトレイトCategoryの中には、対象のHashSet(C0)と射のHashSet(C1)を返すメソッドが定義されていました。今回、思うところもあってHashSetからIteratorに変更しました。気分の問題といえばそこまでで…

Rustで圏論(3) 圏はトレイトでは?

前回の話 前回、同型かどうかを判断するコードの中に間違いがあるという話を書きました。 中心となる処理は以下です。 fn is_isomorphism(&self, object1: &str, object2: &str) -> bool { self.has_arrow(object1, object2) && self.has_arrow(object2, obj…

Rustで圏論(2) マクロで独自記法

【要訂正】同型を判断したい 前回は圏を構造化したところまででした。というわけで、そこから様々なことを調べられるようにしたい。 手始めに、同型かどうかを調べる関数を追加した(関数名がダサいのは気にしないでください)。 しかし、実はこの関数の中身…

Rustで圏論(1)

発端 圏論を勉強しているのだが、本格的に書籍を買ってから約一年になる。圏論の勉強では、実際に手を動かして図式を書かないとかなり効率が悪くて、ものぐさな自分もさすがにペンでお絵かきしていた。が、だんだんそれもイヤになってしまい、せっかくなので…

Programming Rustを読んだ

以下の書籍を読んだので、その感想を書くことにする。 shop.oreilly.com やっとProgramming Rustを最後まで読み切った〜!雑に読めばすぐだがちゃんと読むと大変だったぞ!!!— イロノワ (@ironoir) 2018年4月19日 というわけで、タイトルが紛らわしいが、…

新しい言語の学び方の一工夫

「見渡したい」 人それぞれだろうが、私は新しいものを学ぶ時、全体像を把握したい人間だ。「見渡したい」という表現がしっくりくる。 プログラミング言語に関しても同様である。Hello Worldだけ見せられても、スッキリしない。まずは「文法の一覧と標準ライ…

Rustで文字列・ファイル、両方からbyteを読みたいだけなのに

バイト配列をイテレータで読み込みたい Rustでプログラミング言語を作っている。基本的には、ソースコードはファイルを読み込むのだが、テストのために固定の文字列をソースコードとして読ませたくなることが多い。そういうわけで、字句解析器(Lexer)に両…

勝手にevalしない言語をRustで作ったら意外なものになった

概要 この記事は言語実装Advent Calendar 2017 25日目用として書かれたものです。 Advent Calendar初参加です。迷っていたら25日が空いていたので、思い切って飛び込んでみました。 でもよく見たら、なんだかテーマは高度なことばかり。 私はそのようなこと…

Rustでimplの実装を複数ファイルに書く

発端 小ネタ。お題そのままであるが、implの中身が長くなると、分けたくなる。そのためだけに別の空structを作って処理を移譲するのはなんか躊躇う。 implは分けられる ところが、公式にもある通り、そもそもimplは複数のブロックに分けて書ける。 struct hy…