mizdra's poem

雑なこと (日記/技術ポエム/メモ/…) を書くブログです. 真に受けないでください.

2018-12-10

ゆかりスロット

www.mizdra.net

1ヶ月前に作ったアプリをゆゆ式 Advent Calendarで紹介したらバズってTwitterのトレンドに載ったり*1, 有名な漫画家の方々に遊んでもらったりした*2*3 *4. とにかく自分の想像以上に色んな人に遊んでもらえたようで驚いてる. SNSの拡散力はすごいですね.

shiki

自作言語「shiki」とそのインタプリタ開発の話. 今日はGo言語でつくるインタプリタの1章3節〜2章4節を読んだ. 読んだ際のメモを以下に貼っておく.

  • 1章
    • 字句解析について
    • テスト駆動で簡単なトークンから字句解析していく
    • 小さく始めるに当たって, それぞれの文字をどのような粒度でトークンとして扱うかについて決める
    • 数字や複合文字などは1文字ずつ空白まで読むようにする
    • 言語によって空白や改行を無視するなどの戦略を決める
      • その言語にとって意味を持つか持たないかを考えると良い
    • 2文字トークンを実装する際には先読みを用いると良い
    • 言語によるパースの難易度の違いはソースコードを解釈する際に, どの程度先まで読む必要があるかに依存する
  • 2章
    • パーサとは「入力を入力を表すあるデータ構造へと変換する」もので, 変換の過程で入力が期待された構造に従っているかをチェックする
    • 抽象構文木の「抽象」とは
      • セミコロン, 改行文字, ホワイトスペース, 波括弧などのASTとして不要なものを排除するため
    • 今回は「前章で作成した字句解析器の出力」を入力とし, 「インタプリタが要求する仕様を満たすような独自のAST」を出力とする
    • 本書では構文解析法の違いについて詳細に立ち入らない
      • ドラゴンブックなどを参考にする
      • パーサの高速化や正当性に関する形式的な証明, エラーリカバリ, 構文誤りの検出なども行わない

2章はパーサの作り方について書かれているのだけど, 大抵パーサの実装は複雑になりがちなため, 「学習目的のため作成するパーサにどういう機能を実装し, 逆にどういう機能は実装しないのか」について注意深く書かれている点が面白かった. 本書の冒頭の「はじめに」の章でも語られているが, 本書は一貫して「インタプリタがどう動いているか知りたい人向けの, 特定の理論や数学的な知識を前提としない, 学習目的のインタプリタを作る方法」について書かれており, その思想が2章によく反映されている. 例えばletによる代入文やifなどによる制御構文は扱うが, パーサの高速化や正当性に関する形式的な証明, エラーリカバリ, 構文誤りの検出などは扱わない. それらが無くともインタプリタの仕組みを理解するのに十分なので, 意図的に省かれている. それらを省く際にその理由も同時に説明していていて, 何というか, 安心して読めるような内容になっていて良い.

*1:人によってカスタマイズされているので一概には言えないけど, 少なくとも僕のアカウントから見たトレンドには載っていた.

*2:https://twitter.com/mikamikomata/status/1071833085031763968

*3:https://twitter.com/_namori_/status/1071834010211409921

*4:https://twitter.com/1093yuiko/status/1071854769793187841

2018-12-06

shiki

大学でプログラミング言語とその処理系を実装する実験をやっていて, Rust-likeな構文を持つ小さな動的型付け自作言語「shiki」*1とそのインタプリタをRustで作っている. 折角一から言語を設計するのでlexerもparserも自作しようと思って, lexやyaccを頼らず自力で実装している.

最初のうちは同じようにRustでインタプリタを実装しているわだまるさんの tsuyoshiwada/rs-monkey-langを参考に書いていた. けど字句解析や構文解析の方法が全然分からないまま手を動かしていて, 流石にこれでは良くないねということで Writing An Interpreter In Go を購入して読むことにした. ただ書写するのではなく, ちゃんと背景を知った上でインタプリタを実装できるようにするのが当面の目標. とりあえず土日はこれ読んで勉強します.

*1:名前の由来は式指向言語とゆゆ式の「式」から

TikToker whywaita

こんにちは. 電気通信大学MMAというサークルに所属するmizdraといいます. 同じサークルに所属するwhywaitaさんとは先輩(whywaita)・後輩(mizdra)の関係にあります. この記事はwhywaita Advent Calendar 2018 6日目の記事です.

adventar.org

そしてこちらは部室に転がっていたTikTokロゴのヘアピンを装備したTikTokerのwhywaitaさんです.

youtu.be

以上です.

2018-12-01

12月

12月です. 12月は例年Advent Calendarの記事をひたすら書く関係で忙しいのだけど, 今年はそんな張り切らない予定なのでそこまで忙しくならないはず. 例えば今年のPokémon RNG Advent Calendarの1日目の記事は2000文字ちょっとくらいで書いている. 2016年は15000文字, 2017年が5000文字だったことを考えると大分控えめになっていることが分かると思う.

www.mizdra.net

憑依駆動執筆

2018-09-22にprivate Scrapboxに書いたまま寝かせていたエモい文章を発見したので, 折角なので少し修正してここに載せておきます.


最近, 3つの記事を同時に書くことがあった.

体験記や紹介記事の執筆は何故だか全然速が出なかったのだけど, 聴覚情報処理障害の執筆はめちゃめちゃ速が出た. 強い当事者意識があったからというのも大きな理由の一つだが, 他にも「著者を憑依させていた」ことが関連しているのではないかと考えてみた.

障害の記事ではいつもと違う文体で書かれている所にそれが表れている. これはそういう文体で書く人を頭の中でイメージさせ, その人だったらどう書くか, ということを想像しながら書いた結果である. これを僕は「憑依駆動執筆」と呼んでいる. 憑依させる人物は実在しない仮想的な人物でも良い. その人が書きそうな文章さえイメージできれば良い. ちなみに障害の記事では慎重に議論を展開させる人を選んだ.

この憑依という行為は以前から知っていた訳でも誰かから教わった訳ではなく, 障害の記事を書いている際に自然とそういう書き方をしていることに気づいたのが始まりである. インターンシップ体験記より障害の記事のほうが明らかに書く速度が速かったので, その理由を考えたら「もしかしたら憑依しているのではないか」という考えに行き着いた.

この憑依を使いこなせれば, もっと記事を上手く書けるのではないだろうか, とも考えている. 実際, 障害の記事は以下の点がよく抑えられた良い記事になっている.

  • 本人の実体験や感想を含む
    • 大げさに, 真剣に, 慎重に
  • 障害の情報や障害者に役に立つ情報を記載する
    • 丁寧に, 正確に

憑依をすることで, 書いている間にどういう論調で文章を展開していくかが次々と分かるようになる. 暗い洞窟の中を明るいランタンを持って歩くような感覚. 憑依モデルが良いほどランタンは明るくなり, より速く歩くことが出来るようになる.

憑依するタイミングは記事を書き始める時が良いかもしれない. 展開していく文章の論調が統一されてなければ, 文章としての完成度は低くなってしまうだろうから. 記事を書いている途中で憑依させ, 論調を変えるのは読者を混乱させてしまう. ランタンを付けるタイミングは洞窟に入る前のほうが良い. 途中で付けても既に迷っていて, 出口に辿り着くまでに苦労するだろうから.

自我がどこへいってしまったのかという問題はあるが, 良い憑依モデルを採用すれば, 良い記事が書けるというメリットは少なくともあるはずである. 早速, 進捗の悪いインターンシップ体験記で試してみようと思う.

ちなみにこの記事の憑依モデルはひとでくんさんです. 比喩の所にそれが表れている (と思う).


2018-11-26

おやすみ

ここ最近帰宅時間が遅い日が多かったので, 今日はゆっくりお休みを取って元気になっていた. 10時間睡眠からの起床, プログラミング4時間, 漫画3時間, アニメ2時間, その他N時間みたいな感じ.

箱入りドロップス

読んでいた漫画は「箱入りドロップス」というもの. ちょっと前まで全然知らない作品だったのだけど, 先日きらら展で見かけてピーンときたのでAmazonの「『まんがタイムきらら展』開催記念キャンペーン」でシュッと半額で購入しておいたという経緯がある. 何だか心温まるお話でとっても良い. 良い買い物をした気がする.

箱入りドロップス 1巻 (まんがタイムKRコミックス)

箱入りドロップス 1巻 (まんがタイムKRコミックス)

2018-11-24

鍋会

今日は鍋会というサークルの現役部員やOBが集まって鍋を食べる会があった. インターネットのアバターでしか認識できていなかった人と何人か話して, この人が〇〇さんなんですね, となったりしていた.

あと色々雑談している中で「良い動画がある」と紹介されてこれを見ていたのだけど, 開幕からぶっ飛んでいて良かったので共有しておきます.

www.youtube.com

お疲れモード

沢山話したせいか, 睡眠時間が足りなかったせいか, 賑やかな場所が合わなかったせいか, 水分をあまり摂取していなかったせいか, 頭を使いすぎたせいか, ここ数日の疲れが溜まったせいかよく分からないけど, 鍋会の頃にお疲れモードに突入していた. お疲れモードに突入すると, 何かものを考えようとすると頭が痛くなる, 眠いのだけどずっと頭がビジー状態にあって寝られない, ろれつが回らない, フラフラする, 文章が上手く書けない*1, といった症状がでるようになることが過去の数回の経験で分かっている.

仮眠を取ったら回復するかなと思って会場で少し寝ようとしたのだけど, 周りは賑やかだし, 脳は覚醒しているしで全然寝られなかった. 結局その後も全然回復する様子がなかったので, 軽く食べて素直に帰宅した. 帰路は意外と平和で, 電車も座れたし, 座ったら何だか落ち着いて寝られたので最寄りに着いた頃には頭もビジー状態から回復していた. ただ, ビジー状態から回復したといっても帰宅して家族と会話した際にろれつが回っていなかったので, 完全回復ではないみたい.

とりあえず明日はHTML5 Conferenceに参加するので, すぐに寝て元気になる必要がある. 9時間睡眠を取ると完全回復することが経験則から分かっているので, できれば9時間寝たいのだけど, イベント開始時刻は10時だし電車の移動には1時間くらい掛かるし厳しい. 体調優先, 元気そうだったら行く, みたいな感じでやっていくと良さそう. おやすみなさい.

*1:今この文章も「上手く書けないなあ」と思いながら書いている

2018-11-22

日記

以前更新してから暫く間が空いてしまった. ここ最近あんまり日記を書く気分にもなれなかったのが原因なのだけど, 結局のところその状態を良しとして放置すると「まあ今日も書かなくて良いかな…」みたいな心理が働いてしまいがち. そうした状態に陥ってしまうと, 日記を書く気分を高めるような行動をしたり, 気合を入れて記事を書いたりしない限りは中々脱却できない. 脱却できれば良いのだけど, まあそういう状態に陥らないことが一番なので, また日記を継続して書いていきたい.

調布祭

明日から弊学である電気通信大学の大学祭「調布祭」が開催されます. 美味しいものを食べたり飲んだり, 催し物を眺めたりできるそうです. 弊サークルではジャンク市という部員が持ち寄った「怪しいモノ」を購入できるお店屋さんみたいなことをやります. お暇でしたら足を運んでみて下さい.

きらら展

今年/平成/今世紀史上最高のイベントに行ってきた. 結論だけ言うととにかく最高なので, 皆さんも今すぐ行きましょう.

この日のために積もりに積もったタスクを処理し, 針の穴に糸を通すようなスケジュールを組んで準備万端いざ出陣みたいな状態で会場に足を運んだ. 会場に廃校になった学校?を利用しているようで, 何だか京都国際マンガミュージアムを思い出す.

きらら作品が好きな人にとっては開幕最高, 中程最高, 終わりも最高みたいな感じの内容だった. 展示ではきららの歴史を一通り扱っているので, 自分が好きな作品の展示を楽しむのはもちろん, 知らない作品の展示を見ることもできる. 実際に「こんな良さそうな作品があるんだ〜」みたいな場面が何度もあって, これが出会いかとなった.

じっくり見ると90分くらい掛かるかな〜と思って念の為2時間予定を空けておいたのだけど, 2時間フルで満喫してしまった. なんせ描き下ろしの展示だけでも80作品もあるので, 1作品に1分掛けるだけで80分経過してしまうことになる. 恐ろしい… 終始幸せな気持ちでいられる最高のイベントでした.