We’ve updated our Terms of Use to reflect our new entity name and address. You can review the changes here.
コーンフレーク食べた後の皿を放置してたら、こびり付いて取れなくなってしまったとき用の曲がなかったので用意しておきましたまとめ→mylist/37719543
Haskellの型クラスは、うまく使えば高いパフォーマンスと抽象度を両立できる、優れた仕組みである。その使い方のコツは、決して理解の難しいものではない。 小さな性質、大きな恩恵 プログラマは大きなものを小さく見せがちだ。オブジェクト指向プログラミングに慣れている人がやりがちなアンチパターンとして、欲しい機能と、それを分割する基準が現実に寄りすぎていて、一つ一つが巨大というものがある。 普通のプログラミングではありえない例かもしれないが、たとえば家を作りたいことを考える。「ベッド」「箪笥」「台所」「冷蔵庫」「トイレ」「風呂」のように設備ごとに分けた抽象化をしたいと考えるだろう。確かにこれは理に適っているように見える。だが、これらの設備を型クラスでまとめるのは悪手だ。 風呂やトイレには水を利用できるという性質が、冷蔵庫には電気が必要だ。部屋と部屋は壁で仕切られ、場合によっては扉があるかもしれな
Reasoning about Errors in Free Monads and Their Interpreters Free Monads are a powerful abstraction for modeling operations in your program. While there are many articles about free monads, there are relatively few about using free monads. At my current work we have a large Free Monad that abstracts various actions one might do against data in our system. We also have three interpreters: a pure in
So yesterday I saw someone ask about how many times the variable m gets evaluated in the following Haskell snippet: maxOccurs :: [Int] -> (Int, Int) maxOccurs a = (m, n) where m = maximum a n = length (filter (==m) a) I knew just based on common sense that m only gets evaluated once (when it is first needed, no sooner, no later) but I realised I didn't know the exact mechanics behind that. I grabb
An oft-stated argument against static typing is that heterogenous lists are unreasonably difficult to model. Why is static typing being so difficult? Why can’t it just be like dynamic typing? This is a specious argument. For example, in one article I read, I saw: In fact you can program heterogeneous lists in dependently typed languages, but it’s unreasonably complicated. Python makes no complaint
2015-06-21 Ipython Notebookの上でmatplotlibを使ってグラフを描画していると,値の出力の下にグラフが描画されるときがある.plt.plotなどでは<matplotlib.lines.Line2D at 0x111762fd0>の1行で済むのだけれども,plt.histではn, bins, patchesといった値が出力されるので,グラフが画面下に追いやられることがある. そういうときは,以下のように行末にセミコロンを付けると出力を抑制することができる. plt.hist([sp.stats.uniform.rvs(0,1) for x in xrange(10000)], bins=100, normed=True); ほかには,_ = plt.histのようにアンダースコアに出力を吸収させる方法もあるようだ.あと自分は何故か2行目にprintを書くという
OS X のハイパーバイザーである xhyve を試してみた。 xhyve とは #FreeBSD のハイパーバイザーである bhyve を OS X に移植したものであり、OS X 10.10 Yosemite に追加された Hypervisor.framework で実装されている。 特徴 # 超軽量で 230 KB スタンドアロンで依存関係はなし BSD ライセンス カーネル拡張を必要としない bhyve のカーネルコードはユーザーモードコードに移植されて、Hypervisor.framework を呼び出すようになっている マルチ CPU をサポート ネットワークをサポート Linux ディストリビューションを実行可能 他の OS も実行可能に拡張できる システム要件 # OS X 10.10.3 Yosemite 2010 年以降に発売された Mac 注意点 #VirtualBo
Today’s programming landscape is dynamic and polyglot. Interlanguage interoperability is a mainstay — it’s almost unavoidable that a given piece of code will be used without the knowledge of the original author. So it’s surprising to learn most static type systems completely ignore the pragmatics of running statically typed code in the real world. Who can use this code? Can they break the type inv
Hey all! As many of you know, my summer internship’s primary project is to try to better specify and document all the fiddly details you need to understand to correctly write unsafe Rust code. My current primary effort for this is TURPL: The Unsafe Rust Programming Language. TURPL is meant to complement TRPL as an advanced text. What exactly should or should not be included in TURPL is currently u
使いやすさを目指したコマンドラインパーザー、optparse-declarativeというのを作りました。 これは何ですか? コマンドラインオプションを解析して、しかるべき処理を呼び出すためのライブラリです。ちゃんとした機能を備えたコマンドラインパーザーを、とにかく書きやすい形のAPIで提供することを目指して作っています。 コマンドラインパーザーっていうのは、プログラム全体のライフライクルから考えると、いじっている時間は決して長いわけではないので、新しいプログラムをつくろうかとなった時に、はてどうやってライブラリを使うのだったんだろうかと毎回忘れてしまいます。それでもって、それがわかりづらいものだと、その思い出すという事自体がわりと心理的障壁になってしまったりしていけないと思って、そういうところを目指したものを作りました。宣言的で型レベルとタイトルに入っていますが、簡単さを目指していたら勝
While writing the source code of a 3D engine, we can have many types of problems. These may range from simple problems of code that will not compile, to harder problems like memory leaks. At IMVU, we have automated solutions in place to help find these kinds of problems. For example, unit testing combined with Valgrind has helped us track down a lot of memory leak problems. But what about performa
継続モナドって何に使うんだ問題に対する一つの例。 リソース管理の問題 プログラミングをやっていると必ずまとわり付いてくるのがリソース管理の問題です。ここで指すリソースというのは、ファイルのハンドルだとか、ソケットだとか、排他処理のためのロックだとか、グラフィックのハンドルだとかそういう話で、GCのない言語だとメモリの管理もこれに含まれるでしょうか。 言うまでもなく、リソースを確保した後はしかるべきタイミングで確実に解放してやる必要があります。しかし往々にして、現実のプログラムではリソースの解放漏れが発生してしまいます。単に解放するコードを書き忘れると言うのが一番単純でしょうもない理由ですが、それでも、C言語のようにリソース解放のための特別な仕組みを持たない言語では、これを徹底するのも結構骨の折れることだったりします。それはともかく、もう少し高尚な悩みとしては、例外との組み合わせで発生する解
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く