タグ

ブックマーク / blog.monochromegane.com (12)

  • 待ち行列理論に使われる分布に従う乱数をGo言語で生成する

    待ち行列理論をシミュレーションする際にいくつかの分布に従う乱数を生成する必要があったのでメモ. また,確率まわりの用語と分布についても理解が曖昧な点があったのでこの機会にまとめておく. 用語の整理 確率 確率は, \[ \frac{ある事象の起こる場合の数}{全ての事象の起こる場合の数} \] で求められる. 確率変数 確率変数は,事象に対応した実数のこと. 確率変数には,離散型と連続型の二種類がある. サイコロの出目のようなものは離散型で,身長や体重のような(原理的には)連続の値になるものは連続型. 確率分布 確率分布は確率と確率変数との対応付け. そもそも辞書的な意味での「分布」は「粗密の程度を含めた,空間的な広がり具合」を表す. 度数分布では階級と度数(階級に含まれる変量の数)の対応付けであった. また,これらの分布は,度数分布と同様に確率分布表や確率分布グラフとして表すことができる

    待ち行列理論に使われる分布に従う乱数をGo言語で生成する
  • The Platinum Searcherを5倍高速化するためにやったこと

    この記事は Go Advent Calendar 2015 その2 の 15日目の記事です。 先日、5倍の高速化を実現した高速検索ツールThe Platinum SearcherのV2をリリースしました。 今回は、高速化にあたり工夫した点をまとめておこうと思います。 The Platinum Searcherの基実装について 以前、GoConferenceで発表した資料にまとめてあるので、興味のあるかたはご覧ください。 基的にはFind、Grep、PrintのGoroutineがそれぞれの結果をChannelを経由して渡すつくりになっており、それぞれのGoroutine内で並行で処理を行うために更にGoroutineを起動しています。 ボトルネックの調査 今回は完全書き直しだったのでボトルネックを潰していくという手法ではなかったのですが、再実装にあたり、気をつけるべき点を確認する上でも

    The Platinum Searcherを5倍高速化するためにやったこと
  • Go言語でTCPやソケット通信を多重化,高速化するsmux(ソケットマルチプレクサ)をつくった · THINKING MEGANE

    サーバ間で分散処理を行う際の相互通信におけるボトルネックを解消するため,smux(Socket multiplexer)を開発している. サーバ間の相互通信におけるボトルネックとその解決策 一対のサーバ間で多数のリクエストとレスポンスが送受信され,信頼性の高い通信としてTCPを利用する場合,コネクション確立のオーバーヘッドを排除するために接続の再利用が行われる.しかしながら,クライアントは送信に対する受信を待つ必要があるため,レスポンスまでに幾許かの処理時間を要する状況では送信のキューがたまってしまう.そこで複数の接続を利用することでこれを解消する方法が取られるが,追加の接続はリソース使用に関するオーバーヘッドを発生させてしまう.なにより各接続におけるレスポンス待ち時間は依然として解決しておらず,接続の利用面から見て非効率である.そこで,単一の接続において,仮想的に並行送受信を行う方法が提

    Go言語でTCPやソケット通信を多重化,高速化するsmux(ソケットマルチプレクサ)をつくった · THINKING MEGANE
    a2ikm
    a2ikm 2018/05/03
    HTTP/2が早々に頭打ちになってるのはヘッダとかの処理の差?
  • Go言語でオンライン外れ値検出エンジンSmartSifterを実装した

    推薦システムにおける被推薦者の文脈把握に向けて確率的な手法での行動分析を検討している.そこで,データマイニングによる異常検知で紹介されていたオンライン外れ値検出エンジンであるSmartSifterの理解を深めるため実装してみた. SmartSifter On-line Unsupervised Outlier Detection Using Finite Mixtures with Discounting Learning Algorithms. This method is proposed by Yamanishi, K., Takeuchi, J., Williams, G. et al. (2004) refs: http://cs.fit.edu/~pkc/id/related/yamanishi-kdd00.pdf SmartSifterはデータの発生分布が時間とともに非定常に

    Go言語でオンライン外れ値検出エンジンSmartSifterを実装した
  • Treasure Dataのスケジュールジョブをコードで管理するPendulumというgemをつくった

    Treasure Dataに収集したデータを集計・出力するためにジョブをスケジュール登録するにあたり、ブラウザコンソールやAPIから直接行うと履歴管理やレビューができないといった課題を解決するために Pendulum というgemをつくりました。 PendulumはDSLで記述された定義に従い、Treasure Dataのスケジュールジョブを管理します。 定義ファイルをGit管理することで、履歴管理やGitHubと連携したコードレビューが可能になります。 余談ですが、Pendulumは振り子という意味で、定期的な実行という意味と宝探しのダウジング的な意味から連想しています。ペンデュラム。響きがカッコイイ。 使い方 Schedfileという名前で定義ファイルを用意して、 schedule 'my-schedule-job' do database 'db_name' query 'selec

    Treasure Dataのスケジュールジョブをコードで管理するPendulumというgemをつくった
  • Alfredと辞書.appで高速快適な英語環境を手に入れる

    今まで英語の辞書にWeblioを使ってコーディングや、PullRequestのときの参考にしていたのですが、ネットワーク越しということもあり、遅く感じることがあったので、AlfredMac標準の辞書.appを組み合わせて快適高速な英語環境をつくりました。 Alfredと辞書.app Alfredは有名なランチャーアプリ。Hotkeyで起動して検索やアプリの起動をすばやく行うことができます。 辞書.appはMac標準の辞書アプリです。(自分の中では)全然目立たない存在だったけど、使ってみると実はかなり便利。 ローカルアプリケーションなので起動、検索が高速、さらにインクリメンタルサーチにも対応しています。 特にコーディングのときは、webの検索をじっと待つ時間はリズムが崩れるのでローカルアプリケーションの反応のよさは心地よいです。 設定 Alfredから辞書.appを呼び出す Alfred

    Alfredと辞書.appで高速快適な英語環境を手に入れる
  • Go言語でコマンドラインオプションをさくっと設定ファイル対応させるライブラリをつくった

    Goでコマンドラインオプションのあるツールを提供していると設定ファイルに定義できるようにしてほしいという要望が来ますが、意外とオプションと設定ファイルで定義が冗長になったりして煩わしいのでライブラリにしてみました。 conf+flagでconflagです。 いつものコードに 3行 追加するだけでコマンドラインオプションを設定ファイルに書いておけるようになります。 使い方 以下のような感じで、flag.Parse()を実行する前に、設定ファイルからflagに設定する値を呼び出すコードを追加します。 // フラグを定義します var procs int flag.IntVar(&procs, "procs", runtime.NumCPU(), "GOMAXPROCS") // コマンドラインオプションを解析する前に設定ファイルからフラグに値を設定します if args, err := con

    Go言語でコマンドラインオプションをさくっと設定ファイル対応させるライブラリをつくった
    a2ikm
    a2ikm 2015/05/31
    こういうの、rubyにもあるのかな
  • Go言語での構造体実装パターン

    Go言語での構造体実装は、埋込や独自コンセプトのインターフェースといったGo言語独自の機能を理解して行う必要があります。 今年からGo言語を始めましたが理解が曖昧なままだと実装に迷うことが何度かありました。今回よい機会なので、Go言語での構造体実装パターンとしてまとめてみることにしました。 構造体実装パターン 実装パターンの洗い出しとして、GoFデザインパターンをGo言語で実装する手法をとりました。 その中で繰り返し現れる実装をGo言語での構造体実装パターンとしてまとめてみました。 コンストラクタ関数 エクスポートによるアクセス許可 インターフェースによるポリモフィズム 構造体によるポリモフィズム 構造体によるサブクラス・レスポンシビリティ 構造体による移譲 関数による移譲 以下、それぞれのパターンを解説していきます。 コンストラクタ関数 Go言語には構造体のコンストラクタがないため、構造

    Go言語での構造体実装パターン
  • Go言語でActiveRecordライクなORMをつくった

    Goで DataMapperじゃなく、ActiveRecordライクにDB操作したいと思ってつくってみました。 go/parserとgo/astでソースを解析、個々の構造体ごとにARなコードを生成します。 argen ActiveRecord** Gen**eratorでargenです。 クイックスタート テーブルを表す構造体に+ARアノテーションをマークします。

    Go言語でActiveRecordライクなORMをつくった
  • Go Conference 2014 spring で発表してきた

    5月31日にGoConference 2014 springというイベントで pt & Goroutine というタイトルの発表をさせてもらいました。 今年に入ってから Go言語をさわるようになって、pt(The Platinum Seacher)というGoでつくったagライクな高速検索ツールを公開しており、そこからのつながりで今回の発表となりました。 内容的には、以下のスライドのとおり、同ツールの高速化の経緯をたどりながらGo言語の並行処理を実現する機構であるGoroutineの使い方を知ってもらうという構成でした。 TLの反応などを見ると、需要はあり一定の満足はもらえたんじゃないかなとほっとしています。 200名ぐらいの参加者がいて、海外からのスピーカー来ているという今回のカンファレンスは、福岡から参加した自分にとってはなかなか格的なもので、たくさん刺激を受けたし、こういうところで話

    Go Conference 2014 spring で発表してきた
    a2ikm
    a2ikm 2014/06/09
  • Go言語でag(The Silver Searcher)ライクな高速検索ツールをつくった。EUC-JP/Shift-JISも検索できマス。

    いまや高速パターン検索といえばag(The Silver Searcher)ですが、検索対象がUTF-8のテキストを前提としているため、EUC-JPやShift-JISといったファイルを検索するのに課題があります。 これまで、それらの日語文字セットを検索できるようにするため、色々とagの改造、公開を行っていました。 ag(The Silver Searcher)でEUC-JP/Shift-JISのファイルも検索できるようにしてみた 日語圏特化型ag -白金- の配備が完了しました しかし、特定の国の文字コードだけに特化した修正というのをmasterに取り込んでもらうわけにもいかず、派生ブランチとして追随するのも、やはり面倒… そこで年始にGo言語を触ったのをきっかけに、Go言語でパターン検索ツールをつくってみました。 せっかくなのでポストagを目指して、プラチナサーチャー(The Pl

    Go言語でag(The Silver Searcher)ライクな高速検索ツールをつくった。EUC-JP/Shift-JISも検索できマス。
    a2ikm
    a2ikm 2014/01/16
    OSX 64bitで`pt foo`したらNot implemented言われた
  • LGTMでめでたさを伝えるChrome拡張をつくった

    先日、高速にドッグフードをべる方法を見て、LGTMとLGTM.inというサービスを知りました。 LGTMは、“looks good to me."の略で、GitHubのプルリクに対するOKコメント、LGTM.inは、そのコメントにノリのいい画像を添えてspice upしようというサービスです。コードレビューの終わりにめでたさを伝えてもらえれば、字面だけのLGTMよりもうれしいし、そういう小さな承認はお互いに大事。 ということで、LGTMでめでたさを伝えるChrome拡張をつくりました。 LGTM Chrome拡張 インストールはこちらから。 Chrome ウェブストア/LGTM 拡張を起動するとLGTM.inから取得したランダム画像を3件表示します。 画像が気に入らないときはMore LGTMボタンをクリックして画像を再取得できます。 使い方 使用したいLGTMの画像をクリックするとUR

    LGTMでめでたさを伝えるChrome拡張をつくった
  • 1