hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

工作

会社の勉強会で電子工作のハンズオンがあって,ポチポチやってたら,ボタンを押してる間だけLEDがチカチカするデバイスができた.押すと光るのはかわいい.

WiFiにつながって,HTTPリクエストを投げられて,技適も通っているという夢のようなデバイスなのだけど,これまで電子工作あまりやったことがなかったので,ランダムな数字をUSBから出力したり(デバイス上で動く意味はない),ボタンの入力を受け取ったり,LEDを光らせたりしたところで満足してしまった.

 

何かをやってたときに似てると思ったけど,レゴのマインドストームで遊んでたときだった.学生のころ留年したら実験の内容が変わってしまい,再履修して後輩たちとマインドストームで遊んで単位もらった思い出がある.マインドストームには明るさセンサーとかスピーカーとかがつながって,C言語のサブセットでちょろっと書いて,明るさに応じてピロピロ音が出るやつとかを作っていた.

 

もうちょっとやると実用的なデバイスを作れそうでたのしそうだけど,実用的なデバイスを作ってしまうと,ソフトウェアをほったらかしにするといずれはぶっ壊れるように,ハードウェアもいつかは物理的にぶっ壊れるので,そのときに直す気力があるのかが気になる.

アーキテクチャ的には,とりあえずAPIを叩くことだけをおもしろデバイスに実装して,その先のAPIのやりとりは慣れた言語とかで書くのが楽そう.それくらいならハードウェアが壊れたあとの世界では最悪curlでなんとかなりそうで,それくらいの世界ではAmazonのIoTボタンが技適通って日本でも使えるようになっててほしい.

押すとピカピカ光るデバイスができた

先週の振り返り

こよみモードを見ながら先週の振り返りをしてみる.

月曜日

月曜に行ったのは1週間ぶりの2回目で,歯型を取られたり,けっこう心配になるようなことを言われたりして,元気がなくなった.
blog.sushi.money

火曜日

gitのリポジトリから情報を集めて補完することについて日記を書いてる.最近バイトの人がVim版を作ってくれて,そっちはスクリーンショットでGoのimportを書く例を貼っててモダンな感じだった.Perlの補完の様子を見せらるよりは,Goの補完のほうが便利そう.
blog.sushi.money

水曜日

帰ろうとしたら上司が偶然やってきて飲みに行って,朝3時くらいまで飲んでいて,朝は起きられなかった.そういえばLINEブログを1日だけ使って,何記事か投稿して,飽きてしまった.
blog.sushi.money

木曜日

この頃は仕事が終わったら毎日会社に残ってAtomプラグインをちまちま作ってた.月曜から作ってて,とりあえずGitHubに上げた,というかんじ.
blog.sushi.money

金曜日

カマルに行って,ヨドバシで同僚を見送って,メトロに行った.疲れていたので,煙たくてつらい,という感じでありつつも,結局朝までいてしまった.おなかすきつつも何も食べずに寝た.
blog.sushi.money

土曜日

Kindleもらって助かった,という日記を書いていた.晩ご飯にボロネーゼソースを作ったりした.レシピ通りに作っていくと,いきなり赤ワイン600ml入れます,という記述が出てびっくりした.調理用ワイン買ったものの全部なくなった.生のパスタと和えるとめちゃうまかった.
blog.sushi.money

日曜日

ボジョレーなのかボージョレなのか,ふんいきなのかふいんきなのか,バーバーなのかバブアーなのか.きのうの残ったソースでラザニアを作って食べた.ラザニアは初めて食べたけど,こんな料理があるのか,という,カロリーの鬼という感じ.
blog.sushi.money

2015年

東京に行っていたようだった.去年はダサいセーターが流行っていたけど,スマートフォンで写真をその場で加工できることと関係ありそう.そのチープ感が時代と合っていたと思う.では今年は??
blog.sushi.money

2014年

牡蠣の釜めしを食べに行っていた.そういえばこれおいしかったのでまた行きたいな.何度かトライして,いっぱいで入れませんってなって,あきらめてアジェに行ったりして,週末に行って並んだら入れたのだった.
blog.sushi.money

2013年

最近ではあまりjQuery使わなくなってしまって,Reactをちょっと書いたりしている.こないだはkeyに意図せず改行が混ざって,すごい変な動きをしていた.Reactの考え方はけっこう好きで,サーバーサイドで一度HTMLをレンダリングするだけ,というときにも,旧来のようにテンプレートで文字列を切り貼りして書くよりは,Reactみたいにコンポーネントを組み立てて,タグを組み合わせて生成するほうがよいのでは? といったことを考えている.そのうちReactのPerl版のPeactを作ると思う.
blog.sushi.money

PerlのテンプレートエンジンText::Xslate用のリファクタリングツールXRTをRubyで作った

PerlのテンプレートエンジンであるXslateのテンプレートを静的解析してリファクタリングするためのツール,XRT(Xslate Refactoring Tool)というのをRubyで作った.

背景

仕事でWebアプリケーションのテンプレートをText::XslateのTTerseで書いているのだけど,長期間開発していると,テンプレートがだんだん複雑になってくる.

長くなったり,ネストが大きくなったりしたテンプレートは分割したいのだけど,壊さないよう注意深くエディタで切り取って,新たなファイルを作って,貼り付け,という作業が発生して,緊張感が高く,[% END %]が足りないとコンパイルエラーになったり,中途半端に失敗するとdivを閉じ忘れていたりする.

コードの一部を別の関数に切り出す機能はIDEなどに搭載されていて,人間がやるよりは機械のほうが得意そうなので,ツールを作ることにした.

インストール

Rubyで書いていて,Rubygemsに上がっているので,gem install xrtでインストールできる.

gem install xrt

いまのところ,2つのコマンドがある.

制御構造のネスト数を表示する

たとえば,以下のようなテンプレートがあるとして,

<html>
  <body>
    [% FOR item IN items %]
      [% IF item.title %]
        <h1>[% title %]</h1>
      [% END %]
    [% END %]
  </body>
</html>

xrt dumpコマンドを実行すると,制御構造のネスト数をあわせて表示してくれる.最初のFORでネスト数が1になり,その後のIFで2になっていること分かる.

最後のENDで0に戻っていて,コンパイルできるテンプレートは必ずネストが0で終わるので,このテンプレートは動きそうとういことが分かる.

% xrt dump templates/sample.html
Dumping templates/sample.html
<html>
  <body>
    0[% FOR item IN items %]1
      1[% IF item.title %]2
        <h1>2[% title %]2</h1>
      2[% END %]1
    1[% END %]0
  </body>
</html>
0

テンプレートの一部を別のテンプレートに切り出す

xrt extractでテンプレートの一部を別の新しいテンプレートに切り出すことができる.

さきほどのテンプレートのうち,FOR文を別のテンプレートに切り出したいときは,以下のように実行する.

% xrt extract templates/sample.html '[% FOR item IN items %]' templates/ _items.tt

結果は以下で,FOR文ごとtemplates/_items.ttに移動している.最初は4つほどあったインデントも,ファイルが移動したので0からのスタートになっていて便利.

# tempaltes/sample.html
<html>
  <body>
    [% INCLUDE "_items.tt" %]
  </body>
</html>
# templates/_items.tt
[% FOR item IN items %]
  [% IF item.title %]
    <h1>[% title %]</h1>
  [% END %]
[% END %]

このように,xrt dumpで切り出す候補を眺めて,xrt extractで分割,を繰り返すことで,安全にテンプレートを小分けにすることができる.

ご利用ください

きのうの晩から作り始めて,夕方ごろには動くようになったので良いペースで作れた.

Text::XslateはPerlのライブラリなのだけど,リファクタリングツールがXslateのAPIに直接依存すると,Xslate本体の開発にあわせて壊れたりしそうなので,実装は共通化せず,Rubyで書くことにした.

内部的には,リファクタリングをするのに必要なくらいの粒度でテンプレートをパースして,構文木を作って,置き換える操作を定義していくことで実装していて,IFやWRAPPERやFORはブロック,とか,ブロックはENDで終わる,とかそういう感じの素朴なパーサーを書けば完成したので,うまくいったと思う.

どうぞご利用ください.

今後

きのうから作り始めたので,いろいろやりたいことはあって,

  • 余計なINCLUDEをその場に展開したい
  • テンプレートを2つ渡すと共通部分を括り出してほしい
  • エディタから呼べるようにしたい
  • Linterを作って,許容するネスト数の上限を超えてたらテストが落ちるようにしたい
  • TTerseにしか対応していないのでKolonも対応したい
    • 僕はKolon使ってないのでモチベーションは低い

など,いろいろやりたいことはあるけど,とりあえず仕事のリファクタリングでは使えそうなくらいにはなったので使っていきたい.

歯医者

  • よく磨けてますね
    • よかった
  • その履物かわいいですね
    • sou souで買えます
    • 尖ったものを踏むと危ない
  • 今日は前歯の小さな虫歯を治します
    • 削らなくてもレーザーで,1分くらいで治った,すごい
    • 逆に言うと奥の虫歯はレーザーでは治らない規模らしくて良くない
  • 親知らず抜きたくなったら言ってください,19時からでも大丈夫
  • 早く問題を解決したいので次に抜くことにした



糸井重里が会社の虫歯を減らす活動をしていると話していて,良い話だった.大きくなってから見つかるよりは,小さいうちに見つかったほうがよいし,レーザーでぴぴっと治るので楽そう.健康が一番大切.

はじめの年に見つかった社内総虫歯数は、35本。頑張って治療するのですが、毎年新入社員も来ますし、新たに発見される虫歯もあって、なかなかゼロにはならないんです。でも、3年後には一桁にはなりました。

糸井重里から働く人へ ちゃんとメシ食って、風呂入って、寝てる人にはかなわない (3/3) 〈AERA〉|dot.ドット 朝日新聞出版

「チームが機能するとはどういうことか」を読んでておもしろかったところ

プロジェクトの終了後に省察する,という章に書かれてたことがおもしろかった.ピクサーのスタジオの創始者のエド・キャットムルが始めたことの話.

  • ピクサーのスタジオでは,省察することが渋られて,みんなで振り返るより先に映画の成功を楽しみたがってしまっていた
  • そこで,
    • またやりたいと思うことを5つリストアップして話しあう
    • 次に,もうやりたくないと思うこと5つについて話しあう
  • それによって,ポジティブさとネガティブさのバランスが保たれて,安全な環境が生まれる


この方式よさそうで,バランスよく振り返れそう.
本によると,信頼しあった上で率直な意見が言えるような関係を作って,チームとして学習を続けられるようにしましょう,ということだった.
飛行機の副操縦士が操縦士に向かって,操縦ミスってるのでは?エンジン燃えてるのでは?とか言うと怒られそうだけど,そこで対立を恐れて黙ってしまうと,自分の命よりも,上司に怒られて嫌な気持ちにならないことを優先している,ということになる.という話が載っていて,たしかにと思った.


チームを作る立場の人に向けて,という本でもあるけど,何らかのチームに所属している人にはおすすめの良い本.Kindleで読める.

チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ

チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ

シャトー・ド・ラ・リゴディエル・ボージョレ・ヌーヴォー

金賞って書いてあったので買ってみた.苺のジュースみたいな甘い感じ.ボージョレ・ヌーヴォー以前に飲んだときはたしか3年前で,解禁されると同時の近所の店で飲んだりしていて,もっと味が薄いフラットなイメージだったけどこれはおいしく飲めた.あとは,よく行くワイン屋の人が,ボージョレ・ヌーヴォーをありがたがって飲むくらいなら同じ値段でおいしいワインはいくらでもある,という話をしていた.ワイン屋の人によると,おいしいワインの選び方としては,ラベルがしっかりしてるやつを選ぶとよいらしい.ラベルがしっかりしてると高いのでは?という気もする.
ワインでも飲むかというときに選ぶ基準はよくわからなくて,ちょっと前は「建物の絵が描いてあるやつを飲んだところおいしかった」という認識をしていて,最近になって,建物の絵のワインはたくさんあることが分かってきて,あのおいしいワインは何だったのか分からなくなってしまった.ふだんはセブンイレブンのヨセミテロードシャルドネを飲んでいる.750mlで600円.