タグ

ブックマーク / tarao.hatenablog.com (12)

  • なぜ型ファーストで考えるのか - 貳佰伍拾陸夜日記

    How do you imagine a building? You consciously create each aspect, puzzling over it in stages. Inception 型なし言語に馴染みはあるものの型付言語をいざ使ってみたらどういう気持ちで書いたらいいのかわからなかったと同僚から相談があり, それをきっかけにして社内の勉強会で以下の話をしました. よく型なし vs. 型付の文脈では「型を書くのは面倒だ」「安全の方が大事だ」「でも面倒だ」「それは型推論を前提にしていないからだ」などの議論になりがちな気がしますが、これはあくまで「計算ありきの型」を考えているからで, 「型ありきの計算」だと全く見え方が違います. 「型はある種の仕様」とおもえば, 型ファーストであることと, 型なし言語でテスト駆動開発(TDD)するときに最初にテストを書くこととは, 同じ

    なぜ型ファーストで考えるのか - 貳佰伍拾陸夜日記
  • 契約による設計と名前による型づけ, およびオブジェクトの不変性 - 貳佰伍拾陸夜日記

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

    契約による設計と名前による型づけ, およびオブジェクトの不変性 - 貳佰伍拾陸夜日記
  • Maybeに限らずJavaで直和型を実現できるか - 貳佰伍拾陸夜日記

    JavaでMaybeを説明した以下の記事について, id:tozimaさんと某所*1でやりとりしていたら, 有益な話が出てきたのではないか, ということになったので, 紹介. 基的にやりとりをそのまま*2抜粋したものに, 適宜補足を加えていきます. 発端 2012-06-29 04:29id:tozima こんな記事があった。 Java の語彙で Maybe を説明してみる - ぐるぐる~ 直和型のエンコーディングである、 でMaybeモナドを説明している、まっとうな記事です。気になったのは、上のエンコーディングを Java の上でやって、なにか変なことが起きないのかということ。例えば記事中では、 *3 みたいなことが、Javaでは禁止できない、ってことについて触れています。この他には変なことはおきないんでしょうか? 僕には全然Java的な言語への直感がないので教えてください!!! 「.

    Maybeに限らずJavaで直和型を実現できるか - 貳佰伍拾陸夜日記
  • APIへのPUTやDELETEもブラウザから試す - 貳佰伍拾陸夜日記

    APIサーバを作っているととにかくcurlで叩いてレスポンスを| jq .して見て, とやっていてリクエストボディのJSONの中括弧や引用符の対応がとれてなくてイライラしたり, 必要なヘッダをつけ忘れていてハマったり, とにかく非効率な感じがしてきたので, ブラウザ上から操作できるようにして, リクエスト内容の編集も(コマンドラインよりは)簡単にできるようにしてみた. 特徴 スタンドアロンなサーバとして動くのでどんなAPIサーバに対しても使える API叩く先のホストをコマンドライン引数で指定するとそこへリバースプロキシする 結果のJSONを自動整形・ハイライトする そういうのやってくれる拡張入れてるときは余計なことはしないで拡張に任せる リクエスト内容のエクスポートが可能 パーマリンク curlコマンド HTTPプロトコル インストール golang環境を用意する 以下のコマンドを実行 $

    APIへのPUTやDELETEもブラウザから試す - 貳佰伍拾陸夜日記
  • bullet-scala: N+1クエリ問題を回避する - 貳佰伍拾陸夜日記

    Scala関西 Summit 2015での発表で触れていたN+1クエリ問題をなんとかするためのライブラリを公開した. 発表は以下のもので, ここでは「関係モナド」という名前で紹介していたけれど, これは口頭でも説明したように便宜上てきとーにつけた名前であって, とくにそういう名前のよく知られたモナドがあるというわけでもなければ, そもそもモナドであるかどうかはあまり質的ではない. この発表のあとに, Rails (Active Record)でのbulletのようにN+1問題の検出をScalaでやる方法はないだろうか, と言っている人がいたので, そういうものを探していて辿りつけるとよかろうということで, bullet-scalaという名前にした. もちろんN+1問題の検出のためのライブラリというわけではないし, 動的に検出するのではなく原理的に問題が発生しないようにするものなので, 思

    bullet-scala: N+1クエリ問題を回避する - 貳佰伍拾陸夜日記
  • Scalaで生SQL - SlickのSQL補間子にリストを渡す 他 - 貳佰伍拾陸夜日記

    ScalaSQLを書くのにSlickで便利にやる話. Slickでは生SQLを補間子(sql"...")で書けるけれど, リストが渡せなくてWHERE column IN ($list)できなかったり, 他にもいくつか不便なところがあったのでなんとかした. 最近になってScalaを書き始めたのでScala力を上げるための練習も兼ねている. なぜ生SQLか 社内では既にMackerelでSlickを使っていて, liftedな書き方をしているけれど, これはぱっと思いつくだけでも以下のような実運用上の課題があった. そもそもどの部分がクエリを表しているのかぱっと見わかりづらい 意図せず複雑なクエリになることがある 非Scalaエンジニアが読めない とくに最後のは, たとえばインフラ系のエンジニアが(クエリログを精査した結果などから)やばいクエリの出所を探そうと思ったときに全く手がつけられな

    Scalaで生SQL - SlickのSQL補間子にリストを渡す 他 - 貳佰伍拾陸夜日記
  • Evil: EmacsをVimのごとく使う - 付録 (カスタム変数一覧) - 貳佰伍拾陸夜日記

    Evilのカスタム変数の一覧です. 導入編 設定編 拡張編 付録 カスタム変数一覧 evil-auto-indent evil-shift-width evil-shift-round evil-cross-lines evil-move-cursor-back evil-repeat-move-cursor evil-kbd-macro-suppress-motion-error evil-track-eol evil-bigword evil-mouse-word evil-cjk-emacs-word-boundary evil-cjk-word-separating-categories evil-cjk-word-combining-categories evil-want-fine-undo evil-want-change-word-to-end evil-want-C-i-

    Evil: EmacsをVimのごとく使う - 付録 (カスタム変数一覧) - 貳佰伍拾陸夜日記
  • Evil: EmacsをVimのごとく使う - 導入編 - 貳佰伍拾陸夜日記

    You underestimate the power of the dark side. Star Wars: Episode VI - Return of the Jedi EmacsはLispで自由自在に拡張でき, エディタの枠におさまらず, コンピュータ上でのあらゆる創造的活動のための環境として発達してきました. しかし, 少なくともファイルを閲覧し編集するという操作に関しては, vi/Vimが非常に優れたインタフェースであることもまた事実です. 両者はそれぞれが根強いファンを抱え, 長らく宗教戦争を繰り返してきました. この対立が止揚された結果として生まれたのがEvilです. Emacsのなんでもありな環境の上でVimをエミュレートすることで, EmacsでありながらVimの操作性を実現したのです. 稿では, Evilとは何かということに始まり, 具体的な導入方法について解説し

    Evil: EmacsをVimのごとく使う - 導入編 - 貳佰伍拾陸夜日記
  • ノートPCでLinuxの仮想化 - 貳佰伍拾陸夜日記

    いままではノートPCではWindowsを使ってきた. なんだかんだで使い慣れて*1いたり, あるいはハードウェア機能をフルに活かすためには他に選択肢が無かったりした. でも最近はペンタブ搭載機でもLinuxがふつうに動いたりするし, Windowsを使っていてもどうせ仮想OSとしてLinuxを動かしていて, Windows上のLinuxをべんりに使うためのバッドノウハウが溜まってしまいつつあったので, 思い切ってWindowsを使うのをやめることにした*2. ノートPCでカジュアルにLinuxを使うなら, できるだけ新しいソフトウェアが動いてほしい. Debianならunstableを入れたい. でもなんかアップデートして急に動かなくなったりしたら困る. そこで仮想化ですよ! ただ, ノートPCの仮想化にはいろいろ問題点もあるので, 整理して解決策をまとめておく. 仮想OSの運用方法 ノー

    ノートPCでLinuxの仮想化 - 貳佰伍拾陸夜日記
  • Emacs上のターミナルを最強に: term+.el - 貳佰伍拾陸夜日記

    第6回関西Emacs勉強会で, Emacs上で最強のターミナル(端末)環境を実現する話をしてきました. 以下がそのとき用いたスライドです. Emacs上のターミナルを最強に from Lintaro Ina このスライドだけでは, とりあえず使ってみるのではなく常用したい場合にどうしたらよいかわかりにくいと思うので, その辺りを補足しながら, きちんとしたドキュメントを書くまでの暫定の使い方を書いておこうと思います. 更新履歴 2012-11-07 端末バッファを別ウィンドウに開くコマンドの仕様変更(term-plus-mux-el@ed343fb)に追従 2012-10-24 リポジトリ構成の変更に伴い配布場所とインストール方法の説明を変更term+mux-newのセッションを訊く条件が変更されたのを反映 これは何? Emacs上の端末エミュレータです. もともとterm.elというもの

    Emacs上のターミナルを最強に: term+.el - 貳佰伍拾陸夜日記
  • Vimperatorのコマンドラインで自動的にIMEをオフにする - 貳佰伍拾陸夜日記

    VimperatorのコマンドラインでIMEがオンになっていると, f等でヒントを選択できなくて困ることがある. 32ビットのWindows XPを使っていたときは, ime_controller.jsを使うことでコマンドラインや挿入モードでは自動的にIMEをオフにすることができたけれど, 他の環境でうまく動作しなくて困っていた. ime_controller.jsが動かないのはFirefoxにおけるCSSのime-modeプロパティの動作環境が限られているのが原因で, Firefoxに限らずたとえばIME and DiMENSiONもうちの環境(Windows 7 64ビット)では動作が不完全(たまにIMEの状態が反映されない, IMEのオン・オフを制御できない)だったりして, IMEをアプリケーションから制御すること自体が難しいらしい*1. そんな中で, Linux上のVimperat

    Vimperatorのコマンドラインで自動的にIMEをオフにする - 貳佰伍拾陸夜日記
  • JavaScriptで読む「ラムダ計算基礎文法最速マスター」 - 貳佰伍拾陸夜日記

    以前書いた「ラムダ計算基礎文法最速マスター」(以下「最速マスター」)は, 予想以上に多くの人に興味を持ってもらえたようですが, 同時に難しくてわからなかったという人も多かったようです. 反響から察するに, 構文を見慣れていない(と錯覚してしまう)ことが理解の妨げになっていたように思います. ラムダ計算の構文は, 実際には全く特殊なものではありません. このことがよくわかるように, 「最速マスター」のラムダ計算の簡約の例をすべてJavaScriptの構文で書いてみました. ......という内容になるはずでしたが, 気がついたらラムダ計算のインタプリタをJavaScriptで実装していました! 実際に動かせるものは下記URLにあります. https://tarao.github.io/LambdaJS/#js 動作確認と既知の問題 Firefox 3.6 Google Chrome 4.1

    JavaScriptで読む「ラムダ計算基礎文法最速マスター」 - 貳佰伍拾陸夜日記
  • 1