けいぞうのメモ帳

言語設計のお勉強

MVarが"thread blocked indefinitely in an MVar operation"する時のデバッグ方法

haskellのmutexであるMVarがデッドロックを起こしたときのデバッグ方法を解説する。 そもそもMVarはhaskellにおけるもっともプリミティブな非同期共有の方法であり、 必要がないならばasyncやstmなどの高度な表現を用いることが推奨される。 環境 MAC OS X V…

mruby-implerr mgem

github.com 設計上起こり得ないエラーを処理する例外クラスのmgemを公開した。 これは、主に作業中のmgemにおいて使われることを想定している。 分岐や変更の多い処理で一時的に例外をなげて、実装に考慮漏れがあることを明示するために用いる。 テストを走…

QUICメモ "Design and Internet-Scale Deployment"

この記事は ACM SIGCOMM “17において発表される The QUIC Transport Protocol: Design and Internet-Scale Deployment の紹介です。 僕が読んだことや関連したdraftをつらつらと記述していきます。 このpaperはIETFにおいて標準化作業中のQUIC transport pro…

haskell のcereal package example

{-# 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 :…

Data.Binary.GetのGet MonadにおけるMonadFail

できること 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…

haskellでbinaryにread&write

binary packageのGet/Put Monadを使いBinary classにgetとputを実装することでData.ByteString.Lazy.Internal.ByteStringとデータ構造を変換する事ができる。 ネットワークプロトコルフォーマットパーサの実装の参考として、http2 packageを覗いた。 unsafep…

haskellでUDP

間違えてTCPのサンプルを置いていたから修正した。 UDP user datagram protocol. https://www.ietf.org/rfc/rfc768.txt HeaderのadressはIPv6時にはちゃんと128bitに変わる。 haskell network Network.Socket.ByteString 俗に言うhaskellで書くC言語のコード…

QUIC追っかけ日記01

QUICについて Googleが主導しているHTTP+TLS+TCPに変わる新たなプロトコル。 アップグレードされたHTTPにたいしてそのTLS+TCPの部分を効率よく通信するために策定されている。 まだインターネットドラフト段階で、 https://tools.ietf.org/html/draft-ietf-q…

rust langでturing machineもどき

github.com rustの線形型やリージョン推論をすごいすごい言っていたりするのにコードを書いていないのは良くないので、 rust langの練習用にチューリングマシンエミュレータのようなものを作った。 あまり説明する気のない説明 状態Sと、記号と空白記号の集…

mrbox -- mruby binary manager -- を改めて紹介する

mruby advent calendarで書いたmrubyのバイナリを管理するmruby-cli wareがとりあえず困らない程度に実装出来たのでご紹介します。 mruby 以前書いた記事を参照ください。mruby1.0.0だか1.1.0の頃の話ですが変わったところはないと思います。 keizobookman.h…

mrubyの実行バイナリをbuild_config.rbごとにswitchしたい話

このエントリーはmruby Advent Calendar 2016 - Qiita の7日目として書かれました。 昨日はyharaさんの 細かすぎて見つからなかったmrubyの非互換 - NaCl非公式ブログ でした。 細かいところを詰めていく技術はぜひ見習いたいものです。 あらすじ mrubyはラ…

pi calclusを学ぶにあたって参照したドキュメントとその紹介その一

動機 ぼくはgopherなのでgorutine/channelを用いたプログラミングが好きだ。 ついでに非同期、並行プログラミングも好ましいもので、haskellやrustなんかの手法を知ってにやにやしている。 それらにともなって背景とされるhoareのCSPとその拡張のpi calclus…

rust1.7.0のTcpStreamに関する所見

tl;dr; rust 不慣れな感じがバリバリ出ている僕のための覚え書きエントリ intro 今後様々なプロトコルを様座な言語で実装する遊びを行うに当たってはじめにrustでなんか実装することにしたから、rust 1.7.0のstd::net::TcpStreamに 関する取り回しを考えてみ…

pixiv 2016 SPRING BOOT CAMP に行ってバックエンド(の一部)を触ってきた

inb4, tl;dr ssl.pixiv.net の感想エントリです。 github面接で受かった 技術職と総合職(一般職)が半々で二十人弱来てた やることは運用されているコードの改善 ミドルウェア/処理サーバ実装を好むインフラ系技術職は(おそらく)僕だけだった グループ開発だ…

libvmod_mrubyなるものを作り始めた

概略 HTTPアクセラレータVarnish Cacheの設定言語VCL。そのVCLにmrubyのコードを呼び出せるようにした。 今後はRubyでVCLの設定をスクリプティングできるようにして、C言語ライクなVCLより柔軟性が高いであろうRubyのDSLで設定をいじれるようにしたい。ので…

とあるvim宣教師の手記

vim advent calendar Vim Advent Calendar 2013 : ATNDの131日目です。 昨日はsupermomonga さんのジャズだって聴ける。そう、Vimならね。 - かなりすごいブログでした。 jazzradio.vimよいですね。 vimテクニックバイブルに対して戦いていた友達に教えて…

mrbgemの話それから標準ライブラリの話

少なかった mrubyコードリーディングをする際、mruby周りを調べました。 その時、よくmrbgemなるものがある事をよく耳にしました。 なんじゃろほいと謎に思いながら放置していたのですが、 mruby advent calendar を漁っていた時に 断片的な情報を拾っていっ…

mrubyを読む準備

mrubyコードリーディングが楽しいので準備から考えたこと、調べたことを纏めていきたいと思います。 まず、準備とmrubyの周囲についてを纏めてみました。 きっかけ 大学が春休みになった("14/3/1時点~)。あと、OSSだった。 プログラミングできないのがつら…

NeoBundleLazy の設定をしてみた

vim

golang , scala など、vim の標準にまだ syntax がない言語を触り始めました。 もちろんvim でやるために syntax などをNeoBundle してもってきていますが、 だんだんと vim が重くなってきてvim を開くのにワンテンポ遅れるようになりました。 これはいけな…

FreeBSD 9 にopenjdkを入れたかった...

FreeBSDにopenjdkを入れようとして入らなかった話。 本題 そも、openjdkを入れたかった理由はportsからscalaを入れようとしたところ、 「javaVMないから先にこっち入れなよ」(意訳)と言われたせいでありました。 しかし、openjdkを入れようとするとTrigger…