あどけない話

Internet technologies

TLS 1.3 開発日記 その3 バージョン

これは、http2 Advent Calendar 2016の7日目の記事です。今回はTLSのバージョンについて書きます。TLSのバージョンは、Client Hello と Server Hello を交換することで決めます。 Client Hello TLS 1.3 の Client Hello は、TLS 1.2 と互換性を維持するため…

TLS 1.3 開発日記 その2 暗号スイート

これは、http2 Advent Calendar 2016の3日目の記事です。今回は暗号スイートについて書きます。TLS 1.2 の暗号スイートは、たとえば以下のような感じでした。 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 これは次のような意味です。 鍵交換は使い捨て楕円Diffie…

TLS 1.3 開発日記 その1 実装状況

これは、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 と呼ばれ、…

h2load を使おう

これはhttp2 Advent Calendar 2015の25日目の記事です。これまで web サーバのスループットを図るには weighttp が定番でしたが、これから h2load を使いましょう。h2load は、nghttp2と一緒に配布されているベンチマークツールです。以下のような特徴があり…

GHC とスペースとリーク

これは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]僕が人生で起こした唯一のスペースリーク

これは、Haskellスペースリーク Advent Calendar 2015の7日目の記事です。僕は Haskell で主に IO なコードを書いているからか、あまりスペースリークを起こしたことがない。これまで起こした唯一のスペースリークは、サーバプログラムの中の以下のようなコ…

Strict Haskell

次のバージョンである GHC 8.0 では、正格評価用のプラグマして Strict と StrictData が提供されます。環境を作ってみたので、少し試しました。以下のファイルを用意します。 {-# LANGUAGE DeriveFunctor #-} module A where data List a = Nil | Cons a (L…

Haskell の Monad とは言語内DSLのフレームワークである

この記事は、Haskellを勉強してある程度分かったけど、Monadで挫折した人のための記事です。10分間で、Monadに対する納得感を得ることを目的としています。他の言語でいう「モナド」にも通用する内容ですが、Haskell の文法や用語を用いますので、他の言語の…

Haskell Relational Record をリリースしました

Haskell Relational Record (HRR)尻叩き担当の山本です。この記事では、HRR のリリースについて説明します。なお、これは Haskell Advent Calendar 2014 の25日目の記事です。 HRR とは何か? HRRは、日比野さんが中心となって開発が進められている関係代数…

HTTP/2から見えるTLS事情

これは HTTP/2 アドベントカレンダー19日目の記事です。この記事はたくさんの資料を読んだ上で書きましたが、間違いとか勘違いとかがあるかもしれません。もしあれば、指摘していただけると幸いです。 実質的に必須となったTLS HTTP/2は、HTTP/1.1と同じく、…

HTTP/2 Frame test case の使い方

これは HTTP2 Advent Calendar 2014の4日目の記事です。日本のHTTP/2 コミュニティでは、相互接続性を検証するためにHPACK test caseを作成し、好評を得ました。現在は、Frame test caseの作成に取り組んでいます。この記事では、Frame test caseの使い方に…

Emacs 24.3/24.4 on Mac のフォント設定

Emacs で一番難しいのはフォントの設定です。特に Mac では地獄のように難しいです。とうわけで、Emacs 24.3 と来る Emacs 24.4 でうまくフォントを使うための設定を公開しておきます。なお、Mac では素の Emacs を使ってはいけません。Emacs Mac port を使…

来る Emacs 24.4 を Mac で安定させる

もうすぐリリースされる Emacs 24.4 を Mac で使うと、ほんとうにイライラします。 なぜなら、 落ちる 中国語のフォントを読もうとしてしばらく待たされる が頻発するからです。NEWS を読んでいて、以下を見つけました。 ** New Core Text based font backen…

複数のGHCを共存させる

GHC 7.8.1 がリリースされ、type family がうまく扱えない問題が発覚したため、すぐに GHC 7.8.2 がリリースされました。このおかげで Yesod が、うまくビルドできるようになりました。しばらくして、GHC 7.8.3 もリリースされる気配があります。また、一ヶ…

RSSリーダ BazQux と DNS キャッシュ

BazQux(バズクックス)は、Google Reader の代替として密かに注目されている RSS リーダです。実装と運用を一人でやっている Vladimir Shabanov さんによると、BazQux のウリは、 高速である ブログのコメントも表示できる 複数のビューがある モバイルに対応…

Real World Haskell の古いところ

Real World Haskell の内容が古くなってきたので、どこが古いかとか、それに変わる新しいものは何とか、まとめたいと思う。Real World Haskell―実戦で学ぶ関数型言語プログラミング作者: Bryan O'Sullivan,John Goerzen,Don Stewart,山下伸夫,伊東勝利,株式…

Implementation and Analysis of HPACK 05

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…

ByteString あれこれ

Haskell で高速なプログラムを書くには ByteString の深い知識が必要となる。鍵となるのは、Data.ByteString.Internal というモジュールである。このモジュールは公開されているが、ドキュメントは隠されているので、詳しく知るためにはソースを読まないとい…

書評: Parallel and Concurrent Programming in Haskell

Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming作者:Marlow, SimonO'Reilly MediaAmazonこの本には、その名が示すように Haskell (正確には GHC(Glasgow Haskell Compiler))が提供する並列(paral…

Haskell ポインタープログラミング

早いもので、今年も12月25日となりました。メリークリスマス! うちのちびっ子怪獣たちも、サンタさんに書いた手紙通り、レゴをもらってご満悦のようです。そして今日は、Haskell Advent Calendar 2013 の最終日でもあります。 Haskellらしい? 「純粋なコー…

Haskellでデザインレシピ

お茶の水女子大学 理学部 情報科学科 准教授 浅井健一さんインタビューを読んで、思い出しだので書いておきます。デザインレシピを使ったプログラミングを実践するなら Haskell が最適です。以下に簡単な例を示します。 目的 作成するプログラムが何をするの…

Building GHC head on Mavericks with Xcode 5

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…

[Haskell] GHC 7.8 と静的/動的ライブラリ

これまで Twitter でさんざん間違った情報を流してきましたので、反省して正しい情報を書いておきます。おそらく、これで間違いないです。 GHC 7.8 自体 GHC 7.8 自体は動的リンクされます ちなみに、GHC 7.8 から、GHC 自体が -O2 でコンパイルされます。(…

cabal 1.18 が提供するサンドボックスの小技

cabal 1.18 のサンドボックスがどういう機能か知らない人は、An Introduction to Cabal sandboxes か 2013年8月現在のHaskell開発環境をどうぞ。それで、sandbox サブコマンドの--sandbox オプションが早速役に立ったというお話。 --sandbox オプション パッ…

GHC と gold

GHCのコンパイル速度は、お世辞にも速いとは言えないのだが、一番イライラするのはリンクが遅いこと。これは GNU ld が遅いからである。という訳で、速いと言われる gold を使うためのメモ。GHC 7.6.3 までは gold が使えない。なぜなら、GNU ld 固有のオプ…

Hash-flooding DoS と SipHash

以前、僕が実装している web サーバ Mighty が、Haskell で書いているにも関わらず、セグメンテーションフォールトを起こしていた。調べたところ hashable ライブラリがリンクする C の DJBX33X が、SipHash に変わったことが原因だった。このときから SipHa…

Mac に ThreadScope をインストールする方法

ThreadScope は、GHC が生成する event log を可視化ツールです。以前、試行錯誤して Mac にインストールしたときのメモが出て来ました。並列並行本が出版された今、需要が高いような気もするので、公開しておきます。Parallel and Concurrent Programming i…