2017-01-01から1年間の記事一覧
haskellのmutexであるMVarがデッドロックを起こしたときのデバッグ方法を解説する。 そもそもMVarはhaskellにおけるもっともプリミティブな非同期共有の方法であり、 必要がないならばasyncやstmなどの高度な表現を用いることが推奨される。 環境 MAC OS X V…
github.com 設計上起こり得ないエラーを処理する例外クラスのmgemを公開した。 これは、主に作業中のmgemにおいて使われることを想定している。 分岐や変更の多い処理で一時的に例外をなげて、実装に考慮漏れがあることを明示するために用いる。 テストを走…
この記事は ACM SIGCOMM “17において発表される The QUIC Transport Protocol: Design and Internet-Scale Deployment の紹介です。 僕が読んだことや関連したdraftをつらつらと記述していきます。 このpaperはIETFにおいて標準化作業中のQUIC transport pro…
{-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE DeriveGeneric #-} module Main where import Data.Serialize import GHC.Generics data Dist = Dist { distInt :: Int, distString :: String } deriving (Generic, Show) instance Serialize Dist main :…
できること Get Monadの中でControl.Monad.Fail.failを実行すると、runGetOrFailのときにLeftを取ることが出来る。 runGetOrFailが取る引数はユーザが定義した任意の構造体へのdecoderであるGet Monadのため、 Get Monadの失敗をユーザがハンドルできる。 Mo…
経緯 ソフトウェアの基礎一人勉強会するか— ずっとアニメ見ていたい (@keizo042) 2017年3月6日 #self_taught_sf— ずっとアニメ見ていたい (@keizo042) 2017年3月6日 やり方 twitterのハッシュタグ #self_taught_sf に色々書いていく。 ある程度まとまったらt…
binary packageのGet/Put Monadを使いBinary classにgetとputを実装することでData.ByteString.Lazy.Internal.ByteStringとデータ構造を変換する事ができる。 ネットワークプロトコルフォーマットパーサの実装の参考として、http2 packageを覗いた。 unsafep…
間違えてTCPのサンプルを置いていたから修正した。 UDP user datagram protocol. https://www.ietf.org/rfc/rfc768.txt HeaderのadressはIPv6時にはちゃんと128bitに変わる。 haskell network Network.Socket.ByteString 俗に言うhaskellで書くC言語のコード…
QUICについて Googleが主導しているHTTP+TLS+TCPに変わる新たなプロトコル。 アップグレードされたHTTPにたいしてそのTLS+TCPの部分を効率よく通信するために策定されている。 まだインターネットドラフト段階で、 https://tools.ietf.org/html/draft-ietf-q…
github.com rustの線形型やリージョン推論をすごいすごい言っていたりするのにコードを書いていないのは良くないので、 rust langの練習用にチューリングマシンエミュレータのようなものを作った。 あまり説明する気のない説明 状態Sと、記号と空白記号の集…