mizdra's poem

雑なこと (日記/技術ポエム/メモ/…) を書くブログです.

2018-07-13

今日の電車

  • 行き: 勝ち
  • 帰り: 勝ち

救急箱

弊部室には救急箱が備えられていて, 絆創膏や体温計, 冷却材などの救急用具が入っている. 今日はこの中に入っている殆どの救急用具の使用期限が切れていたので, それらをリプレースした. 中には3年前が使用期限のものもあって, マジか状態だった. 皆さんもおうちにある救急箱の点検を定期的に行いましょう.

2018-07-12

自作言語

昨日から引き続き課題の自作言語を作ってた. 一年前に学んだアセンブリのこと結構忘れていて, 唸りながらアセンブリを書いている状態. にゅ〜.

npm

こわい.

qiita.com

そういえばnpmアカウントの2FA無効化したままだな…と思い出したので, シュュと有効化しておいた. 2FA, 導入も簡単でやっておくと安心ではあるけど, ワンタイムパスワードジェネレータのインストールされたスマホを紛失すると, 復旧が面倒なのが難点. 2FAを有効化した全サービスのリカバリーコード入力するのだるそう.

2018-07-11

今日の電車

  • 行き: 負け
  • 帰り: 勝ち

自作言語

課題で自作言語を作っている. とはいっても一から全てやる訳ではなく, 数値演算や標準入力/標準出力などの基本的な機能の付いたテンプレートを与えられ, それをカスタマイズする形で機能を実装している.

開発にはテスト駆動開発 (TDD) を導入している. 元々, 少しずつ小さな機能を実装していくタイプの課題だったので相性も良い. 例えば do-while 文の実装では, 以下のように先にテストを書き, それから実装する.

#!/bin/bash

################################################
# do-while 文はブロックを評価した後に条件式を評価する.
# 評価された値が真ならループし, 偽ならループを抜ける.
################################################

program=$(cat <<EOS
main {
    x = 0;
    do {
        print x;
        x = x + 1;
    } while (x == 1);
}
EOS
)

input=$(cat <<EOS
EOS
)

expected_output=$(cat <<EOS
0
1
EOS
)

./assert-run.sh "$program" "$input" "$expected_output"

TDDについて知りたいときは, TDD伝道師と呼ばれる和田さん訳の本を読むと良さそう. 僕はまだ第Ⅱ部までしか読みきれてないけど…

テスト駆動開発

テスト駆動開発

2018-07-10

今日の電車

  • 行き: 勝った気持ち
  • 帰り: 勝ち

GitHub

部室で作業をしていたけど, GitHubが落ちたので帰ることにした. なお, 別にGitHubを使った作業をしていた訳ではなく, ただ帰る口実にしたかっただけ.

静的例外

C++に静的例外と呼ばれる, 実行時にコストの掛からない例外を実装する提案が出ているらしい.

記事でも触れられているけど, 関数に throws を付けることで戻り値の型が expected<T,E> likeに拡張されて, 静的ディスパッチが可能になるという感じみたい? これってつまりRustで言うところの Result<T, E> 相当のものだよね. Rustと違うのは, ある関数が例外を返す可能性があることを戻り値の型 (Result<T, E> など) ではなく throws で表現し, match式ではなくtry-catch文でハンドリングする点だという理解. 面白そう.

Rust

読んだ.

Cargoにおけるsemverについて, めちゃめちゃ詳しく書かれている. どういう変更がBreaking Changeに当たるのかがRFCで定義されていて, そこまでやるのか…という気持ち. 何かあらゆるものがRFCで定義されているような印象を持っているけど, RFCで扱う内容の範囲とかどっかで決まっていたりするのだろうか.

この記事を読んで cargo yank というコマンドを知った. npm unpublish と同じように, あるクレート(パッケージ)を非公開にしたい時に使うコマンドだけど, 非公開対象のクレート(パッケージ)の扱いが異なる. npm unpublishnpm 上から完全にパッケージを削除するのに対し, cargo yankcrates.io からクレートを削除せず残したまま, クレートへの新規の依存を禁止する. ただ, 新規に Cargo.lock に追加できなくなるだけ. クレートに依存する既存のプロジェクトは cargo yank された後も問題無く動作する. つまり, npmで発生していたようなleft-pad問題は発生しない. 健全で良さそう.

yosuke-furukawa.hatenablog.com

2018-07-09

今日の電車

  • 行き: 負け
  • 帰り: 負けた気持ち

FPGA

授業でFPGAを触っている. Quartusを使ってエイヤッと回路図を書いて, 使用するFPGAのモデルを指定して, 回路図の入出力と対応するFPGA側の入出力を指定して, データをFPGAに書き込む. たったこれだけで動いた. 思っていたよりも簡単にFPGAって扱えるんですね. 便利.

2018-07-08

今日の電車

  • 行き: 勝った気持ち
  • 帰り: 勝った気持ち

サークル棟一斉清掃

弊学にはサークル棟一斉清掃 *1 と呼ばれる行事があり, その名の通り様々なサークルの部室がある建物の一斉清掃を行うものである. 年に夏と冬の2回開催され, 今日はその夏のサークル棟一斉清掃日だった.

色々あって予定よりも人手が不足していて大変だったけど, なんとか4時間くらいで終えることができた. 何だかんだで弊サークルは歴史があるので, 清掃中に化石が発掘されたりする. 今回の清掃では数十年前に発行した部誌が発掘された.

ちなみに, 部誌は弊サークルのWikiにて無料で読めるので, 是非.

Rust

読んだ.

TRPLのFirst Editionに無かった事柄を, Second Editionを読んで補っている. とりあえず今はスマートポインタ周りを学習している. Second Editionでは Rc の役割を分かりやすい例を出して説明していて, とても良かった.

*1:正確には正式名称は「課外活動施設一斉清掃」であるが, 「サークル棟一斉清掃」と呼ばれることが多い.