タグ

実装に関するthaimのブックマーク (9)

  • Service Objectがアンチパターンである理由とよりよい代替手段(翻訳)|TechRacho by BPS株式会社

    近年、RailsアプリにService Objectを追加するメリットを説く記事が次から次へと量産されています。私は記事において、それがなぜ正しくないかを述べたいと思う次第であります。もっとよい方法はあるのです。 私はこれまで、Service Objectに関するネット上の議論にときおり参加しては、問題に対するまっとうな解決方法としてService Objectが正しくない理由について繰り返し見解を述べてきました。実際、私は多くの場合においてService Objectよりもっとよい解決方法があると考えるのみならず、Service Objectはオブジェクト指向設計原則への配慮が損なわれている兆候を示すアンチパターンとして取り扱っています。 このような深遠なポイントを細切れのツイートやコメント欄を追って理解するのは大変です。そこで私は、私の見解を正確に表すいくつかの現実的なコードを詳しく

    Service Objectがアンチパターンである理由とよりよい代替手段(翻訳)|TechRacho by BPS株式会社
  • Linuxのpipeの実装を見てみる - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    Unix V6のpipe()と比べてLinuxのpipe()どう実装しているんですかねーなんて話を最近したのでちょっと見比べてみた。 V6のpipeははじめてのOSコードリーディング 読書会 (15)でやったところなんだけど、俺は風邪ひいて家で引きこもってたので・・・ V6のpipeの挙動は大体こんな感じ。 pipeはルートディスクのストレージ領域を4096B(8ブロック)使用し実現する 4KBのデータ領域はひとつのファイルとして扱われる(inodeが割り当てられる) オンメモリではなくてストレージを経由するが、バッファサイズが小さいのでブロックデバイスのバッファキャッシュが効きやすいようになっている pipeの受け手がデータを読みだす前に他の優先度の高いプロセスがブロックデバイスを使用するとキャッシュが効かなくなる可能性あり でも、データはストレージに書かれているので内容が壊れると言った

    Linuxのpipeの実装を見てみる - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • Linuxのネットワークインターフェース名って何を基準に決めてるのかを確認してみる - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    そういえば何を基準にインターフェース名を決めてんだっけ?というのを確認してみる。名前をつけているのはudevというか今ならsystemdですかね。とにかくそのルールが知りたかったのです。 うちのデスクトップのイーサネットカードだとこんな感じのインターフェース名になっている。 masami@saga:~$ ip addr 2: enp101s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 そこでググってみるとArch LinuxのMLからudev-builtin-net_id.cというものに辿り着く。 これがインターフェース名を決めているコードっぽいけど、コメントにルールが書かれているのでそちらを見てみると以下のような記述が。 * Two chara

    Linuxのネットワークインターフェース名って何を基準に決めてるのかを確認してみる - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
    thaim
    thaim 2014/06/09
    こういった規則は気になること多いけど、なかなか明記されてない。これ参考にいろいろ調べてみるのは面白いかも。
  • 僕はもう、そんなにナイーブじゃないんだ - Qiita

    Machine Learning Advent Calendarの20日目です。 はじめに Naive Bayes(NB)とその改良版のTransformed Weight-normalized Complement Naive Bayes(TWCNB)、Averaged One-Dependence Estimators(AODE)という手法について解説と実装を書きます。 Naive Bayes NBはベイズの定理と特徴変数間の独立性仮定を用いた分類器です。文書のカテゴリ分類等でよく利用されます。 NBは、事例$X$に対し$P(y|X)$が最大となるクラス$y$を分類結果として返します。$P(y|X)$は、ベイズの定理を用いて、以下のように展開が可能です。 P(y|X) = \frac{P(y, X)}{P(X)} = \frac{P(X|y)*P(y)}{P(X)} \propto P

    僕はもう、そんなにナイーブじゃないんだ - Qiita
  • ベイズ線形回帰(PRML§3.3)の図版再現 - Qiita

    ご挨拶 今日から始まりました Machine Learning Advent Calendar 2013 幹事の @naoya_t です。今年もよろしくお願いします。 (日時間では日が変わってしまいました。大変遅くなり申し訳ございません。アルゼンチン標準時(GMT-3)にはぎりぎり間に合いました!) このアドベント・カレンダーの記事内容は、パターン認識・機械学習・自然言語処理・データマイニング等、データサイエンスに関する事でしたら何でもOKです。テーマに沿っていれば分量は問いません。(PRML, MLaPP等の読んだ箇所のまとめ、実装してみた、論文紹介、数式展開、etc.) 執筆する皆さんも読むだけの皆さんも共に楽しみましょう! 日のお題 今日は、みんな大好きPRMLから軽めの話題ということで、§3.3の「ベイズ線形回帰」から、図3.8と図3.9を再現してみたいと思います。 等価カーネ

    ベイズ線形回帰(PRML§3.3)の図版再現 - Qiita
  • userspace RCU(QSBR)の使い方と解説 - くまメモ

    http://lttng.org/urcu|Userspace RCU という大変クールなプロジェクトがあります。 「RCU(リードコピーアップデート)をユーザースペースで行うもの」という事で、そこだけ聞くとなんのこっちゃという感じ。 リードコピーアップデートって何よ リードコピーアップデートそのものの正しい説明はWikipedia*1 でも読んでもらうとして、Wikipediaを読むのすら面倒な人の為に説明すると「みんなで共有してるデータをfree()しても良いタイミングを見極める技術」です。 特定の構造体をみんなで共有して書き換えたりしたいな → Lockとればよくね? すごく頻繁にアクセスするし読み出しの方が多いからLockはやだな → Read-Write Lockでよくね? Read-Write LockだとAtomic命令多すぎてパフォーマンスでないな → Lock無くしてデー

    userspace RCU(QSBR)の使い方と解説 - くまメモ
  • QEMU Code Overview slides available

  • クイックソート殺し - d.y.d.

    19:39 12/09/01 クイックソート殺し こういう系統の話。 Quicksort Killer (kazoo04さん) qsortを撃墜し(最悪ケースを与え)てみた。 (qnighyさん) A Killer Adversary for Quicksort (shinhさんの解説) Webアプリケーションに対する広範なDoS攻撃手法(hashdos)の影響と対策 (徳丸さんの解説) ただのクイックソートは要素数 N の配列をソートするのに最悪 N2 オーダの時間がかかってしまう、 そしてそれは pivot を偏って選びまくってしまった時に発生する、というのはよく知られた話だと思います。 といっても、広く使われている言語/ライブラリのソート関数はその辺り気をつけられていて、最悪時も O(N log N) になるアルゴリズムで実装されている…と思い込んでいたのですが(例えば C++

  • Big Sky :: C言語から使えるJSONパーサ、JSMNを試してみた。

    上記の様に、トークンは各識別毎に作られます。オブジェクトのキーおよび値もそれぞれのトークンとして格納されます。 jsmn_parse はトークンの量が不足している場合、エラー JSMN_ERROR_NOMEM を返します。例えば、どれだけの量のトークンが JSON 文字列として与えられるか分からない場合、トークンのサイズを広げる必要があります。この場合、jsmn ではパーサを再初期化する事なしに、トークンを広げて再度 jsmn_parse を実行する事でパースを続行出来る様になっています。 ただしどれだけの量が不足していたかは分からないので、適度な増減を考慮する必要があります。 今日は試しに twitter のパブリックタイムラインをパースしてみました。 #include <assert.h> #include <string.h> #include <memory.h> #include

    Big Sky :: C言語から使えるJSONパーサ、JSMNを試してみた。
  • 1