Emacs+MetalsでScalaのデバッガを使う

こういう話がありました。

Feature Request : Support for scala in dap-mode · Issue #196 · emacs-lsp/dap-mode を見てもdap-modeの使い方がよく分からなかったし別に時間をかける所じゃないなと思ったので、デバッグする時だけはIntelliJを使うことにしようとしたのですが、私の環境だとUIが崩壊してデバッグ設定以前の問題になってしまいます。

実はMetalsの(というかlsp-mode+dap-modeの)デバッガはいま普通に機能するけど、確かに使い方(使える状態にするコツ)がちょっとむずかしい感じがしますね。実際にはやることはあんまりないんだけど、いざやろうとすると時間を食うと思うので、時間を食われてやった側の人間としてやり方を書き記しておこうと思います。本当は最近のEmacsのモダンな環境ぜんぶ紹介するみたいなのを書いてそこで(他の言語の場合も含めて)書くつもりだったけど、取り急ぎScalaのことだけ書きます。

続きを読む

Docker Quizを力技で解く

こういうのがあった:

自社のインターンの課題だけど, 僕は今年のインターンには全く関わっていないので, 新鮮な気持ちで問題を楽しめた. みんな話題にしているのはQ7でなかなか骨がある. 全体的にCTFっぽさがある(参加したことないのでしらんけど)中で, Q7はとくにそっち方向の面白さがある.

Q7 このイメージのentrypointとして指定されているコマンドのソースコードを復元して、この問題の答えを取得せよ

ソースコードを復元して」と言われて「うーん, それホントに復元しないとダメかな?」と考えていたら「ワシも若い頃はバイナリ畑を守るバイナリアンとして村のために戦ったもんじゃ」みたいな気持ちが急激に湧いてきて, 復元せずに解いてやろう, となった.

ちなみに, 実際は途中で諦めて普通にソースコードを復元して解いてしまったので, ここに書くのは「後にして思えばこうやってたら解けてたな」というやつです. 後出しジャンケンです. あと想定された解き方と違うとはいえ, 読めばQ7の答えがわかってしまうので自分で挑戦したい人は挑戦した後で読むことをオススメします.

続きを読む

なぜ型ファーストで考えるのか

How do you imagine a building? You consciously create each aspect, puzzling over it in stages.

Inception

型なし言語に馴染みはあるものの型付言語をいざ使ってみたらどういう気持ちで書いたらいいのかわからなかったと同僚から相談があり, それをきっかけにして社内の勉強会で以下の話をしました.

よく型なし vs. 型付の文脈では「型を書くのは面倒だ」「安全の方が大事だ」「でも面倒だ」「それは型推論を前提にしていないからだ」などの議論になりがちな気がしますが、これはあくまで「計算ありきの型」を考えているからで, 「型ありきの計算」だと全く見え方が違います. 「型はある種の仕様」とおもえば, 型ファーストであることと, 型なし言語でテスト駆動開発(TDD)するときに最初にテストを書くこととは, 同じなんだよなぁと思っていました. そして型ファーストが重要な理由をつきつめていくと, Curry-Howard同型対応があるからだなぁという結論に至ったので, それを言語化しました. せっかくなのでスライドを公開するとともに、口頭で補ったところも含めて丁寧に記事として書き起こしました。

続きを読む

ポートフォリオをYAMLなどからJekyllで生成するようにした

自分の過去の登壇・執筆情報の管理が面倒になってきたのと, Twitter等に貼ってあった自己紹介のページがあまりに得体が知れない感じになってしまっていたので, ポートフォリオというかプロフィールというか, そういうものを用意することにした. 静的ページでいいけど, 1次情報はYAMLかなにか, 管理しやすいものになっていると助かるので, まぁJekyllでいいでしょ, という感じでミニマルに作りはじめた. ブログ記事とかGitHubリポジトリとかもかいつまんで載ってるといいかもね, とやっていったらそこそこのボリュームになってしまった. でも最近は歳を取ったのか趣味でコードを書くモチベーションが低くて全体的に意識が低い.

続きを読む

LSP時代のScala開発環境: Metals, Bloop (on Emacs / lsp-mode)

これまでScalaでの開発にはENSIMEを使ってきたけど, もうそろそろ頃合いだとおもうのでMetalsに乗り換えた. エディタ側でLSPのサポートが充実してきているのでこれはだいぶ簡単で, さっくり乗り換えることができた.

Metalsはビルド部分は裏側でBloopを使っているので, テストの実行なんかもこれに乗っかるとだいぶ楽になる. けどEmacsからBloopを利用するにはまだちょっと面倒なところもあったので, この際いろいろ整備してみた.

続きを読む

プログラムで解く数学パズル: 囚人とスイッチの部屋の問題 - 解答の自動チェックのしくみ

この記事ははてなエンジニア Advent Calendar 2018の18日目の記事です. 昨日はid:WindymeltSmart::Argsのパーサを書いたでした. 明日の担当はid:hokkai7goです.

他の担当者の記事は割と業務っぽいものが多いですが, 今回は趣味っぽいゆるゆるのネタです. 社内でとある数学パズルを紹介したところAdvent Calendarに書いてくれとリクエストがあったので, 紹介します. 単に問題を紹介するだけでは面白くないので, コードを書いて解答できるようにしてみました.

続きを読む

契約による設計と名前による型づけ, およびオブジェクトの不変性

契約による設計と名前による型づけ

最近, 社内で契約による設計の話が雑談として何度か出ていて, id:hakobe932さんが社内勉強会で紹介していたり, id:shiba_yu36さんがWEB+DB PRESSSmart::Argsで制約をチェックする記事を書いていたり, 活発な議論になっている. インスタンスのファクトリメソッドとオプショナルな型を組み合わせると事前・事後条件を満たすことが保証できて, id:hakobe932さんの資料で言うところの「要求型」と「保護型」の区別も明確になってよいという話を書こうかとおもっていた. (これはそのうち別で書く.)

続きを読む

正規表現の名前つきキャプチャを便利にする

Java 7から正規表現で名前つきキャプチャが使えて, Scalascala.util.matching.Regex.Matchでもそれに相当する機能がある(インタフェースや実装はJava標準のものとは別)けれど, ちょっと不便なところをどうにかしているうちに, インデックスによるキャプチャグループの上に独自に名前つきキャプチャグループを実装するような形になった.

続きを読む

APIへのPUTやDELETEもブラウザから試す

APIサーバを作っているととにかくcurlで叩いてレスポンスを| jq .して見て, とやっていてリクエストボディのJSONの中括弧や引用符の対応がとれてなくてイライラしたり, 必要なヘッダをつけ忘れていてハマったり, とにかく非効率な感じがしてきたので, ブラウザ上から操作できるようにして, リクエスト内容の編集も(コマンドラインよりは)簡単にできるようにしてみた.

続きを読む

はてなブログに移行した

ようやく, このブログをはてなダイアリーからはてなブログに移行した. これまでなかなか移行できていなかった理由や, 移行を機に改めた点についてまとめておく.

続きを読む