このプレゼンテーションでは、AlphaGoなど、大きなニュースとして扱われたディープラーニングの有名論文を引用しながら、ディープラーニングの内部を紐解いていきたいと思います。Read less
Python練習(分散と不偏分散) 奥村先生の「分散は\(n\)で割るか\(n-1\)で割るか」の数値実験を(Rではなく)Pythonでやってみます。 参照 分散は n で割るか n − 1 で割るか ソース \(n\)で割る分散はddof=0で、\(n-1\)で割る不偏分散はddof=1です。 lack_listでは、与えられたリストから要素を一個ずつ落としたリストのリストを作ります。 print_varsでは、要素を一個ずつ落としたリストの(不偏)分散と、もともとのリストの(不偏)分散を並べて表示します。 import numpy as np def lack_list(a): s = [] for k in range(0,len(a)): t = a.copy() del t[k] s.append(t) return s def print_var(l, ddof=0): v =
最近かなり流行っている「Linux プログラミングインタフェース」を読んでたら、lseek(2) の解説で Sparse File (スパースファイル) の話が出てきたので、実装が気になって調べてみた。 4 章 ファイル I/O:統一されたインタフェース 4.7 ファイルオフセットの変更: lseek() ファイル末尾を越えた位置へシークするとどうなるでしょうか? そしてその位置で I/O を実行すると? … (略) 意外 に思われるかもしれませんが、書き込みは可能なのです。 refs: https://www.oreilly.co.jp/books/9784873115856/ Sparse File とは 簡単に言うと、内部に NULL のかたまり(ファイルホール)を含むファイルのこと。こんなやつ。 1 2 # ls -shl sparse_file 4.0 K -rw-r-
今回は「ドキュメント管理は意外と高度なことができる」というテーマで、そのドキュメントを追加・更新・削除する操作について解説します。 きっと、他の検索エンジンと比べ、その高機能ぶりに驚くはずです。 直感的に分かりやす API Elasticsearch は検索をはじめ、各種設定やサーバの状態取得など、ほとんどの操作を API として提供しています。もちろんドキュメントの追加・参照・更新・削除の API も提供していて、その仕様はとてもシンプルで直感的に使いこなすことができます。 ドキュメントをあらわす URL スキーマは以下のようになっています。 /{index}/{type}/{id} 基本的には、各種ドキュメントのエンドポイントに対して、GET PUT POST DELETE HEAD メソッドで追加・更新・削除などの操作が可能です。 例えば、posts というタイプを持つ blog イ
screenというものすごく便利なアプリケーションがあります。上記写真のように、1つのターミナル内で、仮想的に複数の端末を起動させることができるものです。 ただ慣れるまでは少々使い方がとっつきづらいという話も聞きますので、今回はscreenを基本的に使えるまでのチュートリアルを紹介したいと思います。 どんなことができるの? 複数の仮想端末をあげるとどういったメリットがあるのでしょうか?実際に自分はscreenを使うまではターミナルを複数起動させ、Desktop上はターミナルだらけになっていました。 実際はそれでも問題は起きないのですが、個人的にはローカルPC側では極力起動しておくアプリケーションを少なくしたいと思っているため、screenを使うようになりました。 ただそれだけであればWindowsならPoderosa,MacならiTerm,GnomeならGnome端末があるのですが、scr
開発の作業をしているときは、複数のホストのサーバーを行き来していろいろとオペレーションをするようなことがあると思います。 そんなときに1つのサーバーから作業できるよう、ssh経由でリモートのサーバーをマウントし、Localのファイルシステムのように見せることができるsshfsを紹介したいと思います。 sshfsのインストール Debian/Ubuntuならaptで簡単インストールできます。なお、fuseグループに入っている必要があるので、その設定まで実施します。なお、ユーザー名はwadapで実施します。 $ sudo apt-get install sshfs $ sudo adduser fuse wadap $ newgrp fuse以上、簡単ですね。 早速リモートホストをマウント リモートホストをマウントするのは簡単です。マウントポイントをつくって、sshfsコマンドを実行するだけ。
円周率を計算するようなホビープログラムに限らず、グラフ探索・組み合わせ探索のように長時間CPUを使うワークというのは実務でも出てきます。 こういうとき、UI設計の基本として「重い処理はワーカースレッドに任せ、UIスレッドはすぐに処理を返す」というのは最近では常識になってきた感がありますし、C#のasync/awaitのように処理系側のサポートも充実してきました。 これに加えてもう一つ大事な基本があります。 【CPUをちょくちょく解放すること】 です。 シングルコアのマシンで特に顕著な影響が出ますが、長時間CPUを使う計算をしていると他のプロセスはまったく動けなくなります。OSシェルさえ。マルチコアマシンでも、コア数と同じ数だけそういう重いプロセスが出現した時点で同じことになります。 プリエンプティブマルチタスクで動作する現代のOSでも、自発的にCPUを解放しないプロセスは高頻度に制御を奪わ
はじめに この連載ではUNIX系OSなどで使われるスレッド「pthread」についてサンプルを交えて説明していきます。pthreadはPOSIXが仕様化したスレッドモデルです。サンプルはCと一部C++、調査環境はFedora 8(2.6.23.1-49.fc8)、32bit、glibc-4.1-2、gcc-4.1.2-33およびFedora Core 6(2.6.18-1.2798.fc6)、32bit、glibc-2.5-3、gcc-4.1.1-30を使用しています。 前回の記事 第1回:pthreadについて(概要・生成) 第2回:pthreadについて(同期) 4. 条件変数(1/3) 同期処理を行う際、ある共有情報が条件を満たしたらスレッドが動いて欲しい、という時があります。それまではサスペンドしてて欲しいですが、条件が満たされた時に他のスレッドから処理を始めるよう合図する仕組みが
pthread_cond_waitで寝ているthreadに対して、ptherad_cond_signalにて起こして、そのthreadが再度寝るまでの間にpthread_cond_signalが複数回(2回として)Callされた場合、どのような挙動になるのでしょうか? 最初のSignalをA、以下B,Cとすると A->cond_wait->B->cond_wait->C となるのでしょうか? 宜しくお願い致します。 >waitしていたthreadが稼動している状態でのsignal発行は空振りに終わるということでしょうか? その通りです。 ptherad_cond_signalが発行されたとき、pthread_cond_waitで待機しているスレッドがなければ、そのシグナルは無視されます。 参考までに下記の実験結果を参照下さい。(空白は全角にしてます) ソースプログラム ----------
今回はマルチスレッドプログラミングでの厄介な問題、メモリ同期について。 要するにきちんと排他制御しろという当たり前の話なんだけど、何故きちんと排他制御しないといけないのかまで深く説明してるのはあまり見ない気がします。 例 例えばこんなコードで bool g_complete = false; int g_message[100]; void foo(int i) { g_message[i/10] = 42; g_complete = true; } void bar() { while(!g_complete) { // foo() が終わるまで busy loop して待つつもり } printf("%d\n", g_message[0]); } マルチスレッドでワーカースレッドが foo() を呼び、メインスレッドが bar() で仕事が終わるのを待って結果を表示する、ということをや
本連載ではシステムコールプログラミングの例も掲載していく予定ですが、本記事ではLinuxに追加されたepollを採りあげ、インターネットサーバでのPthread利用と比較してみます。 はじめに マルチスレッドプログラミングが普及し、POSIX threadも制定され、Pthreadの利用は目新しいものではなくなりましたが、スレッドにまつわる迷信や誤った認識を、だいぶ減ったとはいえ、今でもたびたび耳にします。例として、 スレッドはプロセスよりも軽いので、多数作成しても軽快に動作する スレッドはプログラミングを簡単にしてくれ、1つの処理だけに集中できる などがあります。しかし、これらは常に真であるとは限りません。本記事ではマルチスレッドの概念や入門を繰り返すのではなく、その利用方法をHTTPサーバのサンプル実装を基に考察します。更にLinuxに追加された独自機能のepollインタフェースを用い
Worker Thread パターンは、スレッドをあらかじめ起動しておくことにより、スレッドの起動するコストを削減することと、スレッドの数を制御することが出来るパターンです。 Boost.Function を使ってある程度汎用的にするとこんな感じになりました。 // Worker Thread class thread_pool { private: std::queue<boost::function0<void> > queue_; boost::thread_group group_; boost::mutex mutex_; boost::condition condition_; public: thread_pool(int size) { for (int i = 0; i < size; i++) { group_.create_thread(boost::bind(&th
Worker Thread パターンでスレッドプールを作ってみた。 worker_thread.h #ifndef ANMELT_THREAD_WORKER_THREAD_H_INCLUDED #define ANMELT_THREAD_WORKER_THREAD_H_INCLUDED // Boost #include <boost/thread.hpp> #include <boost/shared_ptr.hpp> #include <boost/function.hpp> #include <boost/bind.hpp> #include <boost/noncopyable.hpp> namespace anmelt{ namespace thread { template<class Container> class worker_thread : boost::noncop
threadpool is a cross-platform C++ thread pool library. In general terms thread pools are an efficient mechanism for asynchronous task processing within the same process. They realise the thread pool pattern. A thread pool manages a group of threads in order to process a large number of tasks. Since multiple threads can be executed in parallel this approach may be very efficient regarding the over
ネットで調べてもあまり具体的なサンプルがなかったので、一通りの動きが確認できるサンプルになるよう気をつけた。 /* スレッドプールのサンプル */ #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <time.h> /** スレッドプール情報 */ struct { /** 実行中タスク配列 */ struct t_pool { /** タスク */ void* (*pFunction)(void*); /** タスクに渡すパラメータ */ void* pParameter; /** ExecutorのスレッドID */ pthread_t pId; }* atPool; /** 実行予定タスクのキュー */ struct t_task { /** タスク */
色々書いたので備忘のために貼り付けておく コードの解説 threadStartでスレッド起動 スレッド内で、executeメソッドが呼ばれて、メンバ変数 data の値を表示し続ける setDataメソッドで、メンバ変数 data の値を更新。この時、executeメソッドの処理の区切りまで待機する デストラクタで、スレッドを破棄する。この時、executeメソッドの処理の区切りまで待機する コード #include <stdio.h> #include <pthread.h> #include <iostream> class ThreadTest { private: pthread_t thread_handler; // スレッドハンドラ pthread_mutex_t mutex; // ミューテックス(排他処理で優先権を決めるやつ) int data; public: Thre
スレッドプール(thread pool)を実装するには、暇なときはthreadを寝かせておいて必要なときに起こす、というイベント通知の仕組みが必要になる。 UnixでC/C++で実装するときはpthreadの条件変数を使うのが普通だと思われるが、適当なファイルディスクリプタをopenしておいてread等でブロックさせる方法でも実装できそう。 どのようなやり方が一般的なのか、いくつか有名どころのOSSの実装を調べてみた。 libuvの場合 https://github.com/joyent/libuv 単純にpthread_cond_waitをつかっている 1 static void worker(void* arg) { struct uv__work* w; QUEUE* q; (void) arg; for (;;) { uv_mutex_lock(&mutex); while (QU
お仕事中、こんなビルド警告に遭遇しました。 class Foo { double d; int i; public: Foo( int i, double d ) :i(i), d(d){} }; int main( void ) { Foo foo( 1, 3.14 ); return 0; } このコード (test.cpp) を -Wall オプション付きでビルドするとこんな感じで怒られます。 C:\tmp\cpp>g++ test.cpp -Wall test.cpp: In constructor `Foo::Foo(int, double)': test.cpp:4: warning: `Foo::i' will be initialized after test.cpp:3: warning: `double Foo::d' test.cpp:7: warning: when
Rで RandomForest を試してみたのでメモ。 参考書籍は, はじめてのパターン認識です。 決定木 決定木は木構造の有向グラフです。目的変数が量的データの場合は回帰木となり, 質的データの場合は分類木となります。 Rでは {rpart} で決定木を構築できます。 アンサンブル法 アンサンブル法は, 複数の弱分類器から高性能な強学習器を生成する仕組みで集団学習とも言います。 アンサンブル法はブースティングとバギングの2つの枠組みがよく知られています。 バギング (Bootstrap AGGregatING) はブートストラップサンプリング (Bootstrap Sampling) と集約 (Aggregating) の2つの要素からなります。 ブートストラップサンプリングは n 個のサンプルデータから重複を許してランダムに n 個選択するリサンプリング手法です。 得られたサブセットで
Exactly How to Make Use Of Airbnb Booking Airbnb is an internet site and also mobile app that matches people seeking a place to remain with property owners happy to rent their homes, apartments, castles, and also luxury yachts. The firm assists in the deal and also bills a service fee for every booking. The solution permits users to search… What Does an Accident Legal Representative Do? An acciden
Hamee advent calendar13日目 Ansible advent calendarの13日目 の投稿です。 まだGoもAnsibleも良くわかってない頃に作った、Goの環境を整えるAnsibleの設定をリファクタリングしました。 やってる事はごく当たり前なんですが、冪等性を担保し、changedが出ないことによって何回でもいつでも実行できる環境にしたので、その過程をメモします。 まえおき リファクタリング前と リファクタリング後はそれぞれリンクをご参照下さい Goのバージョンを最新に Goのバージョンが1.4で古かったので1.5に上げました。 ちなみに1.4と1.5はこんな感じに違うそうです。 URL内にバージョン番号をハードコードしていたのでvarsの中に移して、バージョン番号の変更漏れを起こさないようにしました。(差分) 以後はURLに変更がなければこのように変えるだけ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く