タグ

ブックマーク / kazu-yamamoto.hatenablog.jp (10)

  • さようなら遅延評価 - あどけない話

    Haskellがとっつきにくい原因の一つに遅延評価がある。入門書では、無限リストと遅延評価がことさら強調される。しかし、Haskellを業務で使ってみると、遅延評価が煩わしくなってくる。遅延評価なしでもほとんどのことは実現できるし、メモリーの使用量は推測できないし、あまりいいことはない。 Haskellの評価戦略が、他の言語と同じように正格評価だったらよかったのに。 今まで、このようなセリフを何度聞いたか分からない。 そもそも遅延評価が役立つことはあるのだろうか? ある。お世辞抜きに、少なくとも以下の3つでは当に役立つ。 リスト(あるいは類似のデータ構造)処理 純粋性に対する暗黙のテスト 効率的なCAS 1.はよいだろう。2.は純粋さを守るために必要だが、コンパイラを開発する人にとって重要なのであり、ユーザには関係ない。3.は、並行プログラミングの奥義である。atomicModifyIO

    さようなら遅延評価 - あどけない話
    yyamano
    yyamano 2019/02/15
  • JSON - あどけない話

    JSONP とは一体何か教えてと言う友達がいるので、まず JSON から説明したいと思います。(その友達は、JSON と JSONP の区別がついていませんでした。。。) JSON は、偉大なる Crockford先生が RFC 4627で定めた JavaScript 用のデータ形式です。Web サーバとブラウザの間でデータを交換する際に、そのデータ形式として使われることが多いです。 ちなみに JSON とは、JavaScript Object Notation の略称です。 JavaScript をよく知らない人のために Java はよく知っているけど、JavaScript は知らないという人にとって、オブジェクトがリテラルで書ける、つまり new なんかせずともプログラム中に記述できると言うとビックリするかもしれません。何を隠そう、JavaScript のオブジェクトとは連想配列(ハッ

    JSON - あどけない話
    yyamano
    yyamano 2015/06/26
  • HTTP/2から見えるTLS事情 - あどけない話

    これは HTTP/2 アドベントカレンダー19日目の記事です。 この記事はたくさんの資料を読んだ上で書きましたが、間違いとか勘違いとかがあるかもしれません。もしあれば、指摘していただけると幸いです。 実質的に必須となったTLS HTTP/2は、HTTP/1.1と同じく、暗号化なし/ありのポートとして、80と443を使います。そのため、通信開始時にHTTP/1.1とHTTP/2をネゴシエーションするための仕組みが、HTTP/2で定められています。 このように仕様としては暗号化なしのHTTP/2が定義されていますが、Firefox や Chrome が TLS を要求するために、実質的は暗号化ありが必須となっています。これは、米国の監視プログラムPRISMに代表される広域監視(pervasive surveillance)に対抗するために、IETFがさまざまな通信にプライバシの強化を要求する方

    HTTP/2から見えるTLS事情 - あどけない話
    yyamano
    yyamano 2015/01/19
  • Emacs 24.3/24.4 on Mac のフォント設定 - あどけない話

    Emacs で一番難しいのはフォントの設定です。特に Mac では地獄のように難しいです。とうわけで、Emacs 24.3 と来る Emacs 24.4 でうまくフォントを使うための設定を公開しておきます。 なお、Mac では素の Emacs を使ってはいけません。Emacs Mac port を使いましょう。パッチを当てるのは面倒なので、早く github なんかで公開されるといいですね。 ちなみに、素の Emacs を Dock から起動すると PATH を引き継がないので、はまります。Emacs Mac port なら PATH を引き継いでくれます。 フォントの設定 以下をお好みに合わせて変えて .emacs などに入れて下さい。 ;; 以下はフレームの設定 (defvar my-frame-parameters '((height . 40) (width . 80) (top

    Emacs 24.3/24.4 on Mac のフォント設定 - あどけない話
  • 来る Emacs 24.4 を Mac で安定させる - あどけない話

    もうすぐリリースされる Emacs 24.4 を Mac で使うと、ほんとうにイライラします。 なぜなら、 落ちる 中国語のフォントを読もうとしてしばらく待たされる が頻発するからです。NEWS を読んでいて、以下を見つけました。 ** New Core Text based font backend for Mac OS X 10.5 and newer. To use the old font backend, use the following on the command line: % defaults write org.gnu.Emacs FontBackend ns GNUstep and Mac OS X 10.4 use the old font backend.新しいフォントバックエンドを使うのが問題かもしれないと思い、defaults を変え古いバックエンドで暮らし

    来る Emacs 24.4 を Mac で安定させる - あどけない話
    yyamano
    yyamano 2014/06/16
    defaults write org.gnu.Emacs FontBackend ns
  • 書評「型システム入門」 - あどけない話

    端的に説明するなら「正しく型付けされた項はおかしくなることがない」ことを学ぶための壮大な。型に関する圧倒的な知識を持ち、説明がうまく、根気づよい人にのみ記すことができた英語の良書が、型システムを愛する訳者と監訳者、および(書中に名前が出てくる方も含む)豪華なレビュアの情熱によって翻訳された記念すべき書籍。税抜きで6,800円と高いが、それ以上の価値があるである。 型システム入門 −プログラミング言語と型の理論− 作者: Benjamin C. Pierce,住井英二郎,遠藤侑介,酒井政裕,今井敬吾,黒木裕介,今井宜洋,才川隆文,今井健男出版社/メーカー: オーム社発売日: 2013/03/26メディア: 単行(ソフトカバー) クリック: 68回この商品を含むブログ (11件) を見る 動的言語のプログラマと静的型付き言語のプログラマの間で、型についての議論が定期的に沸き上がる。今後、

    書評「型システム入門」 - あどけない話
    yyamano
    yyamano 2013/04/04
  • Cocoa Emacsでのフォント設定 - あどけない話

    Cocoa Emacs をそのまま使うと、等幅フォントの設定が使い物になりません。日語文字の幅は、英語文字の倍であるべきです! Web を調べても、みんな困っていることが分かっただけ。そこで自分でハックしてみましたが、到底手に負えないことが分かりました。(フォントEmacs の最も難しい部分です!) という訳で、Cocoa Emacs の Adrian Robert さんにメールしたところ、「フォント周りは半田さん」とのこと。結局、半田さんに質問しました。 そしてついに、Carbon な Emacs 22 でも CocoaEmacs 23 でも、希望通りにフォントを設定することができました。 以下がそうです。僕は、ヒラギノ丸ゴを使っています。 (setq my-font "-*-*-medium-r-normal--14-*-*-*-*-*-fontset-hiramaru")

    Cocoa Emacsでのフォント設定 - あどけない話
  • 実践的な Haskell の本 - あどけない話

    Perl6 は何年経っても正式にリリースされません。そんな Perl6 を Audrey Tang さんは、たったの数ヶ月で作りました。その実装は Pugs と呼ばれています。短期間の開発を可能にした秘密兵器は Haskell です。 その Audrey さんが、2006年に日で Haskell について説明してくれました(資料)。残念ながら、そのころの僕は Haskell に興味がなかったのでチュートリアルは受けていませんが、その概要にはこう書かれています。 コーナーケースを探すのにユニットテストを書くのに疲れた? QuickCheck を使ってコンピュータに書かせちゃいましょう。正規表現ベースのパーサはメンテナンスしにくいのに気づいた? Parsec を使って 15分で Perl6 の完全なパーサを書く方法を勉強しましょう。デッドロックやレースコンディションはもううんざり? STM

    実践的な Haskell の本 - あどけない話
  • 関数型プログラミングと代入 - あどけない話

    関数型プログラミングでは、よく「代入は使ってはならない」と言われます。関数型言語の一種である Emacs Lisp を生業とする僕は、この言葉に長年悩まされてきました。代入を使わないで実用的なプログラムを書くことは無理だからです。 もちろん、問題の内容が数学の関数に類似したものなら、代入も副作用もないプログラムを書くことは簡単です。階乗(factorial)のコードは、以下のように奇麗に実装できます。 (defun factorial(n) (if (= n 1) 1 (* n (factorial (1- n))))) しかし、こう書けることと、実際にこう書くかということとは別問題です。 Scheme のように末尾最適化を実装していて、末尾再帰をループに変換してくれるなら、上記を末尾再帰に変換したコードを書くでしょう。 しかし、Emacs Lisp には末尾最適化がありませんから、スタッ

    関数型プログラミングと代入 - あどけない話
    yyamano
    yyamano 2007/12/19
    gotoがよくない本当の理由。関数型プログラミングの利点は高階関数と遅延評価。もう少し良く考えないと、この主張が正しいのかどうか僕にはわからない。
  • Emacs Lisp のパターン - あどけない話

    デザイン(設計)パターンという程のことはない、Emacs Lisp のパターンを思いつくままに書きます。心は、 高階関数を書こう マクロを書こう です。 mapcar mapcar は、引数に関数をとる高階関数のよい例です。リストを取り、それぞれの値を加工して、新しいリストを返すパターンのときは、mapcar を使いましょう。 (mapcar '1+ '(1 2 3 4)) ;; => (2 3 4 5) mapcar には、自分のさせたい仕事を実装した関数を渡しましょう。 (defun f(x) (1+ (* x 2))) (mapcar 'f '(1 2 3 4)) ;; => (3 5 7 9) mapcar を連結しましょう。(オブジェクト指向でのメッセージの連結に似ていますね。) (mapcar '1+ (mapcar (lambda(x) (* x 2)) '(1 2 3 4)

    Emacs Lisp のパターン - あどけない話
  • 1