kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

ダイエット振り返り - 2020/01/01~2020/01/19

元旦にダイエット宣言してから、半月ほど経ったので、ちょっと振り返ってみたいと思います。まずはグラフです。

f:id:kmizushima:20200119115319p:plain
2020年1月1日~2020年1月19日までの体重変化

元旦が83.8kgで、今朝が82.2kgです。その間、食事や水分摂取による上下があったことを考慮しても、1kg(適当)くらいは減って居そうな感じです。今のところ、まあまあ順調というところでしょうか。

実行しやすくシンプルな方針じゃないと続けられないので、食事は少なめで、かつ、糖質控えめでやってます(糖質制限ダイエットの本には、カロリーは減らさなくていいと書いてあるものもあるのですが、それほんとうかいなと懐疑的です)。運動も増やした方がいいに決まってるのですが、同時に運動も頑張ると意志力の問題でつらいので、基本的に食事にフォーカスしています。これ、重要。あと、極端な糖質制限は続けるのがつらいのがわかっている&無視できない副作用(頭がぼーっとする)なども見られるようなので、1食~40gくらいまでの糖質ならOKという感じでやっています。例外規則としては、糖質が避けられない場合(多人数でご飯系のお店に行く場合)はあえて制限しません。その辺制限すると、人生楽しくなくなりますしね。

糖質制限がダイエットにどの程度寄与するかは微妙な気がしますが(ケトーシス状態が継続すれば、がんがん減りそうですが、妙な作用が出そうな気もする)、糖質を減らすことは結果としてカロリーセーブにもなるし、健康にも影響は出ていないので続けてみようかと思います。あと、血糖値を毎日計測しているのですが、(原理的に当たり前とはいえ)空腹時血糖値は明らかに減っていますね。

定期的に採血もしてもらっているので、載せても恥ずかしくない状態になったら(?)、このブログにも載せてみようかなと思います。

ちなみに、私は実験も兼ねて糖質制限を試みていますが、積極的にはお勧めしません。というのは、一食当たりの糖質を制限することは、血糖値の上昇を抑える効果があるらしい、というのは、自分で計測した限りでも実感できるところなのですが、ダイエットとしてはカロリー制限ダイエットと比べて有効かは不明な点も多いし、ダイエットの際の副作用(筋肉量の減少、便秘その他)についても不明点が多いからです。

というわけで、試してみる人はあくまで自己責任でお願いします。ただ、体験談見ていると共通するのですが、(おそらく)繊維質の不足によって、便秘気味になりがちなので、食物繊維はサプリ経由などででもちゃんと摂った方がいいです。

ではでは。

IT系勉強会の参加者にお願いしたい、たった3つのこと

私は、大学院生時代含めれば、2008年から色々な勉強会を開催していて、直近数年でもそこそこの数を開いています。その動機は、技術を布教したいとか、ある分野を学ぶ人の助けになりたいとか、単に雑談の場を作りたいとか色々ありますが、別段高尚な意識があるわけでもありません。

勉強会のクオリティについてもバラツキが大きく、私がひたすらJVMの仕様を読み続ける勉強会とか、なんとなく雑談を続ける勉強会とか、色々アレなものもあり、あんまり誇れたものではないです。せっかく参加してくれたのにちょっとクオリティが微妙だったなーと反省したものも多々あります。

それはともかく、勉強会を開く中でどうしてもこれだけは守って欲しいなと思うことがあったので、年の始め頃のこの時期に書いておくことにしました。こういう記事を下手に書くと、良識ある人にだけ萎縮されてしまうみたいなリスクもありますが。

勉強会のページをちゃんと読んで、参加要件を満たしているかを確認する

最近のIT系勉強会は多くの場合、connpassで参加者を募集しています。私も、主にconnpassで参加者を募集しています。ただ、参加登録をする前に、その勉強会の参加要件を満たしているか(自分向け)かは意識して欲しいです。特に、ハンズオンやコードリーディングなど、参加者にも一定のスキルを要求する場合、そこで必要と明記している要件を満たさない方に参加されてしまうと、不必要に多くの労力を割くことになります。また、参加する方にとってもミスマッチになるかと思います。

たとえば、以前開催した、言語を作る系勉強会でいうと、Javaで作ることを前提に(当然、参加要件に明記してあった)募集していたのに、JDKのセットアップから始めていたりjavacのエラーメッセージがわからないレベルの方が参加されていたことがありました。ハンズオン企画などで、必要な要件を満たしていない方が参加されるのは主催者側のリソースを無駄に割かなければいけない行為ですし、その方が当該ハンズオンで有益なものを持ち帰ることができるわけもないので、どちらにとって良いことにはならないでしょう。

もちろん、聴講メインの勉強会では、その限りではないので、必要以上に委縮する必要はない、ということは付け加えておきます。

事情があって行けなくなったときは、必ずキャンセルする

いわゆる勉強会ドタキャン問題というやつです。

私の基準としては、急な予定が入らない限り、前日夜に、事情があっても、当日の朝までにconnpassのページ経由でキャンセルを押してもらいたいと思います。当日キャンセル自体許せないという開催者の方もいるとは思いますが、当日に体調を崩す人はいますし(私も1年くらい前まで体調不良の傾向がありました)、家庭を持っている方なら、配偶者やお子さんの体調問題で行けなくなることも仕方がないというのが私の考えです。というか、私自身が体調不良で当日キャンセルしたことがあるので、ダブルスタンダードはいかんよねという話だったりします。

ただ、そういう場合であっても、キャンセルのボタンを押せないという非常事態は滅多にないはずですので、必ずキャンセルを押して欲しいです。これは、開催者である私のモチベーションに影響するというのもありますが、キャンセル待ちの人で意欲が高い人が参加できなくなるという問題もあります(募集人数より応募人数が大幅に多い場合)。

もちろん、それでも、人間は忘れてしまう生き物ですし、何かの拍子に約束を忘れてしまうこともあるでしょう。その場合はどうしようもないですが、それを繰り返す人が主催者からどう見えるかは言うまでもありません。

自分が「お客様」ではないことを意識する

実費以上の参加費を徴収しているタイプの勉強会はその限りではないと思いますが、私に限らず、多くの(特に東京で盛んな)IT系勉強会は、有志が余暇などを割いて行っているものです。

もちろん、会場の設営などは主催者側の作業であり、必要以上に気をまわさなくても良いと思いますが、ページに記載されている注意は守って欲しいです。また、一緒にコードを読んで勉強しよう系の勉強会で、「私から講義してもらえると思った」という趣旨の言葉を一方的に言われたこともありました。もちろん、ハンズオン企画では、教えるのが前提になりますが、そうでない場合は、その旨はページに書いてあるので、ちゃんと確認して欲しいものだと思います。

あとがき

ぶっちゃけ、こういう記事を読む人には、むしろ、その辺は当然だろうという風に受け止められて、本当にメッセージを届けたい方には届かない気もしますが、それでも、書き留めておくことには意味があるかなと考えてみました。

山手線一周ウォーキング(二度目)をしてきました

一度目のときの記録

今回の記録

概要

一度目は2017なので、三年近く前のことになりますが、思い立って二度目をしてみることにしました。決意したのが昨日だったので、相方に「急にそんな運動をして大丈夫?」と心配されましたが…。なにはともあれ、昨日、二度目の山手線一周ウォーキングをしてきたのでした。

自分ルールは一度目のときと同じで、山手線を秋葉原から出発して、必ず各駅を通過して、写真をアップロードしてくること、です。

運動不足がたたったのもあり、最後の方はマジきつかったです。ジャージの上にコートを羽織っていったのですが、19:00くらいになると、寒いわ冷たい風が吹いてくるわで…。夜用に厚手のセーターとか用意しておけばよかったかもしれません。

しかし、足が限界ギリギリだったものの、10:30に出発して、23:00頃に無事、秋葉原まで戻ってくることができました。偉いぞ俺!と褒めてあげたい気持ちです。

2017のときは、秋葉原→神田→東京…というルートでしたが、今回は逆方向で、秋葉原御徒町→上野…というルートでいきました。これは、前回と変えた方が新鮮かなあと思ったのもありましたが、前回だと後半、アップダウンが激しかったり道がいりくねってたりして疲れたので、そっちを前半に回しちゃえ!みたいな理由だったりします。

感想

感想は色々ありますが、興味深かったり、面白かったことを列挙してみます。

  • 考え事がはかどる(重要)
  • 鶯谷周辺はやたらラブホがあるなあ
  • 品川以降は道がほとんどまっすぐで非常に歩きやすくて良い
  • 大崎周辺はいい感じのデートスポットがあった…がカップルが寒そうだったw
  • 色々、各駅の名物(?)とかあって、今度じっくり巡ってみたくなった

逆に、しんどかったこととしては、

  • 後半(16:00以降)、身体がしんどいが先に来て、考え事がはかどらなかった
  • 鶯谷巣鴨辺りは迷いまくりだった
  • 19:00以降、死ぬほど寒かった
  • 最後の方、足が棒だった

辺りでしょうか。凄い運動不足だったので、どうしても無理っぽそうだったら、途中で電車に乗って引き返すことも検討していましたが、そうならずに良かったです。

装備

真冬ですし、私は完膚なきまでに方向音痴ですので、色々準備していきました。

  • スマホ二台持ち
  • 大容量スマホバッテリー
    • 実際、途中でメイン機の方がバッテリー切れになったので、それがフル充電二回できるのは助かりました。
  • 断熱性高めのコート
    • これでも不十分でしたが…
  • タオル*2
    • 汗拭き用
  • アクエリアス*1
  • (追記)塩分補給手段

スマホ二台持ちは、特に良かったなあと思うところです。サブ機をGoogle Maps表示専用にしていたので、迷ったらすぐ見られましたし、メイン機のバッテリーを余計に食うこともなかったですし。ちなみに、サブ機の方がバッテリーの持ちが良く、13時間表示させ続けてましたが、半分くらいまでしかバッテリーが減ってませんでした。

あと、今日みたいに、非常にゆっくり歩くのなら、出発を1時間早めておけば、終電ぎりぎりで秋葉原から帰るというのを避けられたかもしません。

明日(今日)はきっと筋肉痛で養生してそうですけど、楽しかったです。皆さんにもお勧め…はしませんが、一周とは言わずとも、普段降りない駅を探検する旅も楽しいものだなと思ったのでした。

ダイエットします - 目標体重71kg

あけましておめでとうございます。1月1日ということで、きりがいいので、今年の目標の一つ(大きなもの)をまず宣言しておくことで、自分を追い込むメソッドを使ってみようと思います。

現在、私の身長は173cm、体重は83.4kg(今朝の起床時)。BMIは27辺りで、軽度肥満と判定されるレベルです。まあ、BMI自体はそれほど気にしていないのですが、去年の健康診断で

辺りが軒並み良くない値になっていて、生活習慣病状態です。ちなみに、酒はほとんど飲まないので、いわゆる非アルコール性脂肪肝ってやつです。中性脂肪の値なども高めです。

昨年後半あたりからダイエットを始めていて、ある程度効果は出たようなのですが、83kg~84kg辺りで体重が停滞しているのが最近の悩みです。糖質制限をしたりした結果、中性脂肪や肝機能の数値、LDLコレステロールには顕著な改善が見られたものの、体重はそこまで落ちていないように思います。

というわけで、ダイエットです。漫然とダイエットしていても仕方がないので、今年中の目標として、BMIに対する理想体重とされるよりもちょい上の70kgちょっとオーバーくらいに据えていく予定です。1か月1kgであれば、そこまで無理をせずにいけるはず…というのが目算ですが、果たしてうまく行くかどうか。 以下のようになっていれば理想です。

  • 2020年01月01日: 83kg
  • 2020年02月01日: 82kg
  • 2020年03月01日: 81kg
  • ...
  • 2021年01月01日: 71kg

現実には、漫然とダイエットしていると、停滞期が訪れるはずなので、この目標で頑張っても75kgくらいじゃないかなあと思ってますが、それでも大学1年の頃くらいにまで減るのでまあいいのではと思います。

運動はウォーキングとジョギングを増やす方向でいきますが(寒いとか調子悪いとやらないかも)、原料に支配的なのは食事ですし、基本は食事制限で行きます(去年後半もそうでした)。運動はさぼることはあっても、食事制限を継続します。

勉強会の懇親会や同僚との昼食あるいは夕食で、なんとなくしっかり食べてしまいそうな気がしますが、それ以外のものは基本的に質素にいきます。

甘いもの完全断ちとか欲望完全に絶つのは失敗するのは経験からわかりきっているので、

を買ってあります。甘いものが摂りたくなったら、これを水や炭酸水に混ぜるという戦略です。間食も完全制限とかすると、食欲抑えられなかった時に毒なので、1日1回はOKというところで行く予定(既にそんな感じ)です。ちなみに、現在の体重および過去1か月間での遷移はこんな感じです。あんまり減ってませんね(割と食べるの控えているはずなのですが)。

f:id:kmizushima:20200101083641p:plain
2020年1月時点での体重

1週間単位で振り返りをして、こつこつと減量していこうと思います。

もし、私が食事を食べ過ぎようとしていたら止めてやっていただけたら幸いです。

ではでは。

2019年を振り返ってみる

まえがき

2019年も残すところ、あと1日足らずとなりましたが、皆さま、いかがお過ごしでしょうか。

最近、振り返りを忘れていた気がするので、ちょっと2019年を振り返ってみようと思います。

2019年を表す単語

別にそういう単語とかなくていいんですが、今年はしっくり来る単語がありました。一言でいうと、「激動」あるいは「変化」です。

たとえば、5年以上勤めた前職から転職したこともそうですし、相方が出来た(曖昧な表現)こともそうです。「研究者へのリハビリ」を始めたこともそうです(この辺、いい思いまわしが思いつかないんですが、今の状態で自分が研究者を自称1するのはおかしい気がするんですよね。さりとて、完全にアカデミックに縁の無い人間かというと、そうでもない。むしろ、積極的にかかわっている方)。とにかく、人生の色々なところが変化した歳、というのがしっくり来ます。

相方が出来たら何か人生観変わるのかどうかわからなかったですが、変わらないところもありつつ、今までの頑なな考えから少しずつ解放されていっているような気もします。家族がさらに増えるとあるいはもっと何か変わるのかもしれません。

2019年の出来事

  • 1月:
    • Scala福岡 2019@LINE福岡に参加・発表。本題がパーザコンビネータで、Scalaメインじゃないけどいいのだろうかとか思ったのを覚えています。LINE福岡さんは、東京オフィスの方とはまた違った雰囲気だった(時系列的には、東京オフィスの方に後で訪れたので逆ですが)のが印象的でした。あと、きしださんたちに鍋奢ってもらったり。
  • 2月:
    • K大のI先生を囲んで有志によるランチ。I先生は世界的に有名で、その成果についても間接的には多くの人が知っているのですが、実は直接お会いするのは初めてでした。柔和でいながら、見せられた論文(I先生は初見)をサクっと数分で読んで、私たちの疑問にあれこれ答える様は圧巻でした2。こういうのは分野は違えど分かる部分はあるのですが、直観力をひたすら鍛えるしかないのだろうなあと思ったのを覚えています。このランチは、前職での同僚だったIさんが設定してくださったのですが、Iさんにはそれ以外にも色々刺激的な機会をもらったので感謝しています。
  • 3月:
    • PPL2019参加。PPLに参加するのは久しぶりだったのですが、Ruby 3の型関連のお話とか、植山 類さんのリンカ話とか、各種ポスターセッションとか、色々楽しかった。来年は運営委員(の末端)をすることになっています。
  • 4月:
    • 筑波大訪問。アカデミアの世界からやっぱり自分はしばらく離れていたのだなあ、というか、そういうブランクを感じた1日でもありました。
  • 5月: この月は、プライベートにあんまり余裕がなくて、仕事の方に全振りだった気がします。色々緊張して、不眠気味になったのも今となってはいい思い出です。
  • 6月:
    • ScalaMatsuri 2019参加とか発表とか。現在は、運営にはほぼノータッチですが、相変わらず繁盛していて(その裏側で、スタッフの方々が裏方で色々工夫されているのは、ほんと身に染みて感じています。いつもお疲れ様です)、元になったイベントを立ち上げた内の一人として、感慨深い気持ちになります。
  • 7月:
    • 現職に転職。さすがに、最初の1か月は慣れるまでに時間がかかりました。幸い、前職と比べて、使っているツールやPCの種類はあんまり変わらなかったので、比較的馴染み安かったのは助かりました。
    • SWoPP 2019参加3編集委員として参加しているという部分もあるのですが、こういうのを出張で認めてもらえる(旅費宿泊費も出る)のはありがたい限りです。懇親会では、普段話す機会がないハードウェア系の人とかと情報交換したりしていました。
  • 8月:
  • 9月:
    • 出身研究室のOB合宿に参加。OBで私だけがほぼ毎年行っているのですが、研究している空気に触れる機会を持つという意味で良い時間でした。いつまで顔を出せるかわからないですが、毎年顔を出していきたい感じです。
  • 10月:
    • Regex Festa開催。新屋さんを招待講演者としてお呼びしたおかげか、大盛況で、話も色々盛り上がりました。会社のイベントとしてやったおかげで、ベーグルとか会社予算でお出し出来たのは良かったなあと思います(なお、ベーグルは同僚の方の発案だそうな)
    • Scala研修テキスト寄贈。メイン著者の一人として、今後もメンテナンスや執筆に尽力していきたいところです。
    • 決定不能の会 2nd Season Vol.1が開催…ではなく、中止に。発表者が集まらなかったのが原因です。こういうテーマだと、輪読会とかの方がいいのかなと考え直しています。来年に企画を再始動させたいところです。
    • 第126回プログラミング研究発表会に参加(編集委員&セッション座長として)。「一般化max演算子の抽出による分岐除去」、「組込みシステム向けFRP言語における状態依存動作のための抽象化機構」、「On the Context-Freeness of WMIX Languages」辺りが特に記憶に残っています。立場が変わると、純粋に発表を楽しむというだけにはいかないところがありますが、それはそれで新しい体験なのかなと思います。
  • 11月:
    • 某ライフイベント。まあ、私にこういう日が来るとは去年くらいには夢にも思っていませんでした。ほんとに。
    • プログラミング言語作成ハンズオン Vol.2開催。今回は、抽象構文木だけをくみ上げるというコンセプトでした。少人数だったおかげで、細かな疑問にもホワイトボードで図を描いてフォローできたので、理解を深めてもらえたと思います。
    • GaalVMコードリーディング Vol.1開催。ちょっと、当日何をするか事前に決めてなかったのと、「GraalVMのコードを皆で読む」(私が講義する系イベントでない)が伝わってなかったのが、今後の改善点でしょうか。
  • 12月:
    • すえなみチャンス忘年会2019にパネラーとして参加。設計論とかよーわかってないのに大丈夫かなと思いましたが、普段聞かないお話が色々聞けて楽しかったです。
    • 年賀状を作った(!)。最後に作ったのが、大学に入る前なので、18年ぶりくらい。専用ソフトを使うかどうか迷いましたが、結局、Microsoft公式の年賀状テンプレ(PowerPoint)+Excel住所録+Word宛名印刷という構成でいきました。しかし、宛名印刷は色々不便なので、なんとかならんかなと正直思いました。

      2020年の抱負

まず、1か月に1言語作って公開する企画は継続したいところです。あとは、どっか(査読あり)に論文を1本以上投稿して、通すのも4Scala関連も、Scala 3方面中心に、今までの教育方面(Scala学習テキスト)も続ける感じで、何かやっていけたらと思います。やりたいことがあり過ぎるので、優先度をつけて管理していかないとなーと思うところですが、なかなかこれが難しい。

オチはないですが、そんな感じです。それでは、皆さま、良いお年を。


  1. 私のページ見るとわかりますが、Ph.D.取得までに、国内の査読付き論文誌3本、国際会議(査読付き)1本、その他色々。取得後は、2016にプログラミング研究会で発表したくらいで、査読付き0。これで研究者を名乗るのはちょっと…って自分でも思う感じです。それでも、構文解析などの分野では専門性を持っていると認められていることもありますし、アカデミアには恩恵を多いに受けているので、査読とか編集委員とか喜んでやったりはしてますが。

  2. このときに話題にあがったのが、当時研究開発に関連していた、Success Typingの論文だったのですが、型付け規則を見てほとんどノータイムで答えたのに鳥肌が立ったのを覚えています。「この型付け規則、なんか変じゃないでしょうか?」とかいう質問にも、即座に適切な答えが返ってきましたし。

  3. 実際には、第125回プログラミング研究発表会の方が、私にとってのメインですが。

  4. もちろん、それ自体は難しくないです。学会関連の作業を業務として認めてもらっているし、かなり積極的に補助もしてもらっているものの、(研究予算が付くわけではないという意味で)「研究」が本業ではないので、両立が課題という感じです。

WORDIAN Advent Calendar 2019/12/22: プログラミング言語Klassicの紹介

まえがき

この記事はWORDIAN advent calenderの22日目の記事です。

以前にこのブログでも触れたことがあるのですが、私が開発中のプログラミング言語Klassicについて紹介します。

Klassicの紹介

リポジトリこちらScala環境があれば、ビルド&実行できますが、まだまだ挙動変わりまくってますので、試してみたいチャレンジャーな方々以外にはお勧めしません。

さて、Klassicです。そもそも、この言語、旧称Toysといって、探偵オペラミルキーホームズシリーズ[^milky] にハマってた頃に、そこから名前を取って作った言語だったりします。当時のリポジトリを見ると、二期が黒歴史にならなければいいとかいうのがサンプルコードに書いてあったりして、懐かしいなあと思ったりしました。

それはおいといて、Klassicです。

静的型&型推論を持っている

まずは例をば。

def myFoldLeft(list) = (z) => (f) => {
  if(isEmpty(list)) z else myFoldLeft(tail(list))(f(z, head(list)))(f)
}

これは、foldLeftを実装したコードです。Klassicは私の好みもあって、静的型を持っていますが、さらに、ML系が採用しているHindley-Milner型推論を実装しています。上のコードは型宣言が一切ありませんが、次のように型が推論されます。

def myFoldLeft<A, B>(list: List<A>) = (z: <B>) => (f: (B, A) => B) => B

ML系やHaskellとかだと当たり前のようにやってくれることですね。ただ、これまで、ちゃんとした型推論を自作言語に入れたことがなかったので、その実験も兼ねて入れてみました。Algorithm Wの変種っぽいもので、適当に単一化して、ごにょごにょやってます。

def add(x, y) = x + y

みたいなのの処理はどうするか悩んだのですが、Klassicにはまだ型クラスないし、ということで、型注釈がない場合+(Int, Int) => Intだと決め打ちすることにしました(ML風)。+が実は浮動小数点数にも使えるけど、辺りもML風。

OCamlにあるレコード多相ぽいもの、というか、いわゆるrow polymorphism的なものも実装してみました。

record P {
  x: Int
  y: Int
  z: Int
}
record Q {
  x: Double
  y: Double
  z: Double
}

record T <'a, 'b> {
  x: 'a
  y: 'b
}

def add_xy(o) = {
  o.x + o.y
}
assert(3 == add_xy(#P(1, 2, 3)))
assert(3 == add_xy(#T(1, 2)))

ここで、

add_xy: {o: { x: Int, y: Int, ...}): Int

て感じに推論されるのが味噌で、必要なメンバを持っていれば、継承とか関係なしに渡せます。これは、いわゆる構造的部分型とは異なる点に注意が必要です(多相型を用いて、サブタイピングのニーズの多くを満たす方式の一つが、row polymorphismだと私は認識してますが、この辺は識者からのツッコミをお待ちしています)。

こんな感じで、Klassicは、今のところ型注釈なしにだいたいのプログラムがうまく型付けされます(健全かどうかは証明できてないですが、健全だと思いたい)。

スペース&行センシティブなリテラル

これは、他の言語にはあまり見られない特徴かなーと思います。記憶が確かなら、たぶん、Fortress辺りに影響を受けて入れたものです。

たとえば、配列(リスト)のリテラルを表記するのに、

[1, 2, 3, 4, 5]

のように書くのは一般的ですが、ここでカンマが必要なのって、これってぶっちゃけパーザの都合ですよね。ちょっとトリッキーなパーザ作ってやればスペースのみで行けるんじゃね?と思って、パーザをごりごり書いてみたら、

[1 2 3 4 5]

という風に、カンマなしスペース区切りでいけるようになった、という話です。カンマを入れてもパーズしてくれますし、スペースの代わりに改行で要素を区切ることもできます。これ、どういうときに嬉しいかというと、たとえば、表をリテラルで表記したいときに、

val tbl = [
   [1 2 3]
   [4 5 6]
   [7 8 9]
] // tbl: List<List<Int>> と推論

という感じで、より表っぽく書けるのが利点かなと思います。なお、二次元配列のときには、レイアウトから決め打ちで要素をパーズできるようにしようかと考えたことがありましたが、その方式だと二次元だけ特別扱いになってビミョーなので、止めました。マップ、セット辺りも似たような感じで書けます。

val map = %[
  "k1" : "v1"
  "k2" : "v2" 
] // map: Map<String, String> と推論
val set = %(
    1 2
    3
) // set: Set<Int> と推論

リテラルの中に複雑な式を埋め込むことも(当然)できますが、割愛。

Java FFI

Klassicは現在、Scalaで実装されていますが、そのおかげで、簡単にJavaコードを呼び出せる機能を作ることができました。たとえば、以下のプログラムを評価すると、"F"になります。

"Foo"->substring(0, 1)

Javaの型をどうKlassicの型にマッピングするか悩みどころなのですが、今のところいわゆるプリミティブだけ特殊扱いで、それ以外のJavaの参照は*って特殊な型にしています。あんまりJVMべったりにしたくはないので、色々考え中です。

プレースホルダ構文

これは、思いっきりScalaのそれに影響を受けたものなのですが、

val xs = [1 2 3]
map(xs)(_ + 1)

て書くと、

val xs = [1 2 3]
map(xs)((x) => x + 1)

と展開されます(展開ルールが抽象構文依存な辺りもScalaの影響が強い)。

ちなみに、これは思っていなかったのですが、強力な型推論プレースホルダが組み合わさったことによって、Scalaでなんとなくプレースホルダ使っても型が付かなかった式にもうまく型がつくので、結構使い勝手がいいのでは、と自画自賛しています。

その他

Klassicはある意味で、私にとっての言語の実験場みたいなものなので、思いついた機能を次の日に実装してたりすることがよくあります。プレースホルダ構文もあ、Scala-thonで1日で作ったものだったりしますし。Lispは言語を拡張できるとはいえど、言語の見た目まで変えるにはリーダーマクロを持ち出さなきゃいけないわけで、言語の見た目を色々好き勝手にカスタマイズする実験をしたい私としては、手元にこういう実験のベースとなる言語があるのが性に合ってるなと思います。

今後の予定

Klassicは、0.1.0-alpha て形で、時々、区切りのいいところで、リリースをしています。ですが、masterブランチとはかなり乖離が激しいですし、今使ってもらうのは微妙な感じです(masterのビルドしてもらった方が早いかも)。この辺は、お手軽に試せるように環境(たとえば、Scala.jsを使ってブラウザ上で処理系が動くようにあトランスパイルするとか)を整えることを考えています。あと、現在のKlassicはインタプリタなのでめちゃ遅いですが、そろそろバイトコード出力とかLLVM IR出力とかやりたいところです。

現在、既に実用的に使うために最低限の言語機能は揃っているので、処理系のクオリティアップとかREPLサポートとかもやっていきたい感じです。もし興味があればお試しいただけると幸いです(感想も送ってくれるとさらに励みになります)。

ポモドーロ・テクニックぽいもの(仮)をできるだけ厳密に実践してみた

まとめ

  • ポモドーロっぽいもの(仮)を実践してみた
    • 我流なので、ポモドーロそのものじゃないよ
  • やり方をできるだけ厳密にした
    • 5分の休憩中は、モニターを見ない
    • 25分経ったら、何がなんでも休憩する
    • 同期割り込み(電話や郵便物)やトイレは例外扱い
  • 効果:
    • どの時間に何をやっていたのか、が可視化された
    • 強制的に休憩させられるので、集中力が長続きした(主観)
    • 時間に追われる感覚がかなり減った
  • 課題:
    • 栄養補給とかはどういう枠組みでとらえるのか
    • オフィスだとそのままは実践しづらい気がする(今日は自宅作業)
    • 一時的に疲労感が高まったときの扱い(強制ストップ?)
    • ...

動機

私は割とすぐに集中する(してしまう)タイプなので、集中することは比較的容易なのですが、一方で、集中を中断するのがかなり苦手です。そのため、途中で切り替えて別に作業をしたりするのがうまくなかったり、集中し過ぎて疲労感がたまるといったことに悩まされていました。

その対処として、ポモドーロ的な、30分を単位として、25分の作業と5分間の休憩を「強制的にとる」手法が使えるのではないかと考えたのがきっかけです。集中を中断するための手法を実験したかっただけで、ポモドーロ・テクニックの5段階とか、その他思想的な部分はあんまり受け継いでませんが。

実験条件

  • 場所:自宅
    • 週1でリモート作業が許されているため
  • 時間:14:15-19:50
  • 環境:
    • トリプルディスプレイ(32inch +28inch + 13inch)
      • うち、13inchの一つはポモドーロタイマー専用
    • Tomatoesをタイマーとして利用
  • 内容:
    • Tomatoesにしたがって、25分間作業、5分休憩の繰り返しを行う
    • Tomatoesは、途中で、15分の長め休憩を入れるが、それにも従う
    • 25分が終了した時点で、例外なく作業を止める
    • 休憩の間は、例外(トイレおよび電話などの同期割り込み)を除いて、目を閉じて椅子に深く座る
      • 目を休める効果を期待

結果

f:id:kmizushima:20191216195232p:plain
本日のプロジェクト

普段は、1日の仕事を終えた後に疲労感が残ることが多く、その時点での心拍数が100回/minを超えていること(安静時は70台なので、おそらく、緊張感によるもの)もしばしばでしたが、今日は80回/min程度でしたし、疲労感も少ないように感じます。また、「強制的に休憩をとらされる」ことの効果か、比較的長く集中が続いたように思えます。ただ、この辺は「気がする」という部分もあり、実際のとこどうなのか不明ですが。一方、「ここまでやらなきゃ欲」がセーブされるので、時間に追われる感覚が減るのは良い点かなと感じました。

ただ、この辺実践可能なのは、自宅でリモート作業可能だからであって、オフィスだと、そこまで実践できるかというと微妙な感じがします(30分~1時間のミーティングとかどう処理するのって気もしますし)。一方、「時間に作業を従属させる」という考え方は、集中の中断のために色々使えそうです。