これは、http2 Advent Calendar 2016の7日目の記事です。今回はTLSのバージョンについて書きます。TLSのバージョンは、Client Hello と Server Hello を交換することで決めます。 Client Hello TLS 1.3 の Client Hello は、TLS 1.2 と互換性を維持するため…
これは、http2 Advent Calendar 2016の3日目の記事です。今回は暗号スイートについて書きます。TLS 1.2 の暗号スイートは、たとえば以下のような感じでした。 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 これは次のような意味です。 鍵交換は使い捨て楕円Diffie…
これは、http2 Advent Calendar 2016の1日目の記事です。現在、IETF で TLS 1.3 の標準化が大詰めを迎えています。僕も TLS 1.3 の標準化に参加しており、仕様の分かりにくい部分を直したり、TLS 1.3 を Haskell で実装したりしています。この開発日記のシリ…
Haskell 2010 では、同じファイルに重複したフィールドラベルを定義できない。たとえば、以下はエラーになる。 data Foo = Foo { same :: Int } data Bar = Bar { same :: Float } -- これはダメ この問題を解決する案は、OverloadedRecordFields と呼ばれ、…
これはhttp2 Advent Calendar 2015の25日目の記事です。これまで web サーバのスループットを図るには weighttp が定番でしたが、これから h2load を使いましょう。h2load は、nghttp2と一緒に配布されているベンチマークツールです。以下のような特徴があり…
これはHaskellスペースリーク Advent Calendar 2015の17日目の記事です。 :sprint と MonomorphismRestriction サンクのリークを防ぐには、どの式がサンクかを理解する必要がある。そのために便利なのが、GHCiの:sprint コマンドだ。MonomorphismRestriction…
これはHaskellスペースリーク Advent Calendar 2015の14日目の記事です。スレッドリークとは一般的に、終了させることを忘れたスレッドが残り続けることを言う。これは終了させ忘れたのが悪いという他ない。一方で、GHC では、スレッドを終了させたにもかか…
これはHaskellスペースリーク Advent Calendar 2015の8日目の記事です。IOのコードは、普通に書けば末尾呼び出しの最適化が効く形になる。たとえば、こんな感じ: foo :: Char -> String -> IO Int foo a b = do c <- bar a b zoo b c woo c woo :: Int -> I…
これは、Haskellスペースリーク Advent Calendar 2015の7日目の記事です。僕は Haskell で主に IO なコードを書いているからか、あまりスペースリークを起こしたことがない。これまで起こした唯一のスペースリークは、サーバプログラムの中の以下のようなコ…
次のバージョンである GHC 8.0 では、正格評価用のプラグマして Strict と StrictData が提供されます。環境を作ってみたので、少し試しました。以下のファイルを用意します。 {-# LANGUAGE DeriveFunctor #-} module A where data List a = Nil | Cons a (L…
この記事は、Haskellを勉強してある程度分かったけど、Monadで挫折した人のための記事です。10分間で、Monadに対する納得感を得ることを目的としています。他の言語でいう「モナド」にも通用する内容ですが、Haskell の文法や用語を用いますので、他の言語の…
Haskell Relational Record (HRR)尻叩き担当の山本です。この記事では、HRR のリリースについて説明します。なお、これは Haskell Advent Calendar 2014 の25日目の記事です。 HRR とは何か? HRRは、日比野さんが中心となって開発が進められている関係代数…
これは HTTP/2 アドベントカレンダー19日目の記事です。この記事はたくさんの資料を読んだ上で書きましたが、間違いとか勘違いとかがあるかもしれません。もしあれば、指摘していただけると幸いです。 実質的に必須となったTLS HTTP/2は、HTTP/1.1と同じく、…
これは HTTP2 Advent Calendar 2014の4日目の記事です。日本のHTTP/2 コミュニティでは、相互接続性を検証するためにHPACK test caseを作成し、好評を得ました。現在は、Frame test caseの作成に取り組んでいます。この記事では、Frame test caseの使い方に…
Emacs で一番難しいのはフォントの設定です。特に Mac では地獄のように難しいです。とうわけで、Emacs 24.3 と来る Emacs 24.4 でうまくフォントを使うための設定を公開しておきます。なお、Mac では素の Emacs を使ってはいけません。Emacs Mac port を使…
もうすぐリリースされる Emacs 24.4 を Mac で使うと、ほんとうにイライラします。 なぜなら、 落ちる 中国語のフォントを読もうとしてしばらく待たされる が頻発するからです。NEWS を読んでいて、以下を見つけました。 ** New Core Text based font backen…
GHC 7.8.1 がリリースされ、type family がうまく扱えない問題が発覚したため、すぐに GHC 7.8.2 がリリースされました。このおかげで Yesod が、うまくビルドできるようになりました。しばらくして、GHC 7.8.3 もリリースされる気配があります。また、一ヶ…
BazQux(バズクックス)は、Google Reader の代替として密かに注目されている RSS リーダです。実装と運用を一人でやっている Vladimir Shabanov さんによると、BazQux のウリは、 高速である ブログのコメントも表示できる 複数のビューがある モバイルに対応…
Real World Haskell の内容が古くなってきたので、どこが古いかとか、それに変わる新しいものは何とか、まとめたいと思う。Real World Haskell―実戦で学ぶ関数型言語プログラミング作者: Bryan O'Sullivan,John Goerzen,Don Stewart,山下伸夫,伊東勝利,株式…
HPACK 05 has following compression mechanisms: Index By sharing learning dictionary of headers, a header can be represented as a small integer. Reference set By comparing a set of the previous indices and that of the current indices, diffe…
Haskell で高速なプログラムを書くには ByteString の深い知識が必要となる。鍵となるのは、Data.ByteString.Internal というモジュールである。このモジュールは公開されているが、ドキュメントは隠されているので、詳しく知るためにはソースを読まないとい…
Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming作者:Marlow, SimonO'Reilly MediaAmazonこの本には、その名が示すように Haskell (正確には GHC(Glasgow Haskell Compiler))が提供する並列(paral…
早いもので、今年も12月25日となりました。メリークリスマス! うちのちびっ子怪獣たちも、サンタさんに書いた手紙通り、レゴをもらってご満悦のようです。そして今日は、Haskell Advent Calendar 2013 の最終日でもあります。 Haskellらしい? 「純粋なコー…
お茶の水女子大学 理学部 情報科学科 准教授 浅井健一さんインタビューを読んで、思い出しだので書いておきます。デザインレシピを使ったプログラミングを実践するなら Haskell が最適です。以下に簡単な例を示します。 目的 作成するプログラムが何をするの…
Updated on 4 Dec 2013.I upgraded to Mavericks and Xcode 5. There is still "gcc" but it is in fact "clang": % which gcc /usr/bin/gcc % gcc --version Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include…
これまで Twitter でさんざん間違った情報を流してきましたので、反省して正しい情報を書いておきます。おそらく、これで間違いないです。 GHC 7.8 自体 GHC 7.8 自体は動的リンクされます ちなみに、GHC 7.8 から、GHC 自体が -O2 でコンパイルされます。(…
cabal 1.18 のサンドボックスがどういう機能か知らない人は、An Introduction to Cabal sandboxes か 2013年8月現在のHaskell開発環境をどうぞ。それで、sandbox サブコマンドの--sandbox オプションが早速役に立ったというお話。 --sandbox オプション パッ…
GHCのコンパイル速度は、お世辞にも速いとは言えないのだが、一番イライラするのはリンクが遅いこと。これは GNU ld が遅いからである。という訳で、速いと言われる gold を使うためのメモ。GHC 7.6.3 までは gold が使えない。なぜなら、GNU ld 固有のオプ…
以前、僕が実装している web サーバ Mighty が、Haskell で書いているにも関わらず、セグメンテーションフォールトを起こしていた。調べたところ hashable ライブラリがリンクする C の DJBX33X が、SipHash に変わったことが原因だった。このときから SipHa…
ThreadScope は、GHC が生成する event log を可視化ツールです。以前、試行錯誤して Mac にインストールしたときのメモが出て来ました。並列並行本が出版された今、需要が高いような気もするので、公開しておきます。Parallel and Concurrent Programming i…