mizdra's poem

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

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:正確には正式名称は「課外活動施設一斉清掃」であるが, 「サークル棟一斉清掃」と呼ばれることが多い.

2018-07-07

七夕ですね

特にこれといったことはやりませんが.

地震

ゲームやっている時に緊急地震速報のアラームが鳴ってびっくりした.

#NowPlaying for Google Play Music

Google Play Musicで再生中の曲をTwitterで共有するブラウザ拡張機能「#NowPlaying for Google Play Music」を v1.0.1 にアップデートした. アップデート内容は以下の通り.

  • 曲名やアーティスト名などにアンパサンドなどのURIで特別な意味を持つ文字が含まれている時, 正しいツイートを生成できない問題を修正
  • 共有ボタンが表示されないことがある問題を修正

github.com

今回のバージョンから, GitHubリポジトリにCHANGELOGを含めるようにしてみた. CHANGELOGはgit-chglogを使ってコミットメッセージから自動生成している. シュッと生成できてめちゃめちゃ便利だった.

2018-07-06

今日の電車

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

休講情報表示システム

弊サークルの部室には, 弊学の休講情報を掲載するWebページを表示するディスプレイが配置されており, 部員が休講情報に高速にアクセスする手段を提供している. 果たしてディスプレイ1枚を常時可動させ, 手元のスマートフォンからも数タップでアクセス可能なページを表示させる意味があるのか, という点については議論の余地があるだろう. が, 弊学の教務課がWebページを更新する度にそれを紙に印刷し, 掲示板に張り出しているという処置が取られていることに対する対抗運動であると考えるならば, 妥当と言えるかもしれない *1.

さて, この休講情報表示システムだが, 最近システムに利用されている端末が壊れたまま放置されていたため, 他の部員と協力して復活させることにした. 僕が担当したのはブラウザを開き, 休講情報を画面に表示する部分. 端末にはマウスは接続されていないため, どうにかしてブラウザをCLIから操作する必要がある. こういう時に GoogleChrome/puppeteer が便利.

const puppeteer = require('puppeteer')

const RELOAD_INTERVAL = 10 * 60 * 1000 // 10 minutes

async function setup() {
  const browser = await puppeteer.launch({ headless: false, args: ['--disable-infobars'] })
  const page = await browser.newPage()
  await page.goto('http://kyoumu.office.uec.ac.jp/kyuukou/kyuukou.html')

  return { browser, page }
}

async function main() {
  const { browser, page } = await setup()

  // 最新の休講情報を表示するため定期的にWebページをリロードする
  while (true) {
    await page.reload()
    // viewport size を window inner size に合わせる
    // ref: https://github.com/GoogleChrome/puppeteer/issues/1183#issuecomment-383722137
    await page._client.send('Emulation.clearDeviceMetricsOverride')

    // 表をフルスクリーンで表示
    await page.$eval('table', (el) => {
      el.webkitRequestFullscreen()
      el.style.backgroundColor = 'white' // そのままだと全画面表示したときに黒になるので, 背景色を変更
    })
    await page.waitFor(RELOAD_INTERVAL)
  }
}

main()

puppeteerは本来Chromiumをヘッドレスブラウザとして操作するためのライブラリで, デバッグのために puppeteer.launch({ headless: false }) という実際のウインドウを表示するオプションが付いている. これを利用することで, ユーザはブラウザが実際にどのような挙動を示すのかを目で確認しながらpuppeteerを使ったコードをデバッグできる. 今回はこの機能を流用し, puppeteerをモダンなJavaScript APIでブラウザを操作できるライブラリとして利用している.

実際に動かすと以下のような感じになる. ついでにFullscreen APIでちゃんと表を全画面表示してくれて最高ですね.

f:id:mizdra:20180707012100g:plain

*1:実際どのような理由で設置されているのかは僕は把握しておらず, 適当なことを書いています.

2018-07-04

今日の電車

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

痛み

最近歩いたり息を吸う時に, 右肺の下あたりが痛むようになった. この症状は少なくとも6年前から現れていたと認識していて, 症状が出るのも不定期だし, 痛みが出ても暫く経つと収まっていたので, そんなに深刻に考えていなかった.

弊サークルにある#healthという, 健康に関する話をするチャンネルにこの話を投げてみた所, 「肋間神経痛」というワードが出てきた. Wikipediaから引用すると,

肋間神経痛(ろっかんしんけいつう、intercostal neuralgia)とは、ろっ骨に沿って走る神経が何らかの原因で痛む症状のこと。

...

考えられる原因として一番多いのが、不自然な姿勢をとった時、また運動不足・疲労によって神経が骨や筋肉にはさまれて(絞めつけられて)突然起きる原発性。

...

姿勢を変えた時や呼吸するとき、物を持ち上げる時に痛みが現れるのが特徴で、発症している時に咳やくしゃみ等の生理現象から、ちょっとした外部からの力を加えられることで肋骨を骨折する危険性がある。

肋間神経痛 - Wikipedia

そういえば電車に乗ったときに突然くしゃみが出る時がよくあるけど, あれも関連しているのかなあ. アレルギー性鼻炎を発症しているので, それが原因かと思っていたけど. ともかく, 病院で診てもらうのが良さそうですね.