コミュニケーションが生まれるツイートまとめツール
Hubot (note: it's prounounced hew-bot) A Customizable, Life Embetterment Robot Commissioned by GitHub View Hubot's Documentation (Learn about getting started, etc.) View Hubot's Source Code(via http://github.com/github/hubot/.) What is Hubot? Hubot is your friendly robot sidekick. Install him in your company to dramatically improve employee efficiency. No seriously, what is Hubot? GitHub, Inc., wr
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
最近、Node.jsに興味があります。Node.jsを調べていると、I/O関係で、非同期I/O、ノンブロッキング、コールバック等、いろいろとキーワードがでてきて混乱してきます。 そこで、ブログに書いて整理しよう思います。間違いがあれば是非、指摘してください。 言葉の定義 ◇非同期呼び出し(Asynchronous Call)と同期呼び出し(Synchronous Call)の違い 同期呼び出し(Synchronous Call) 通常メソッドを呼び出すとメソッド内の処理が完了するまで、呼び出し元には戻ってこない。このようなメソッド呼び出しのこと。 非同期呼び出し(Asynchronous Call) メソッドを呼び出した瞬間に呼び出し元に処理が戻ってくるような呼び出しのこと。非同期で呼び出されたメソッドは、環境によって処理されるタイミングが変わる。 ◇マルチスレッド(multithread
Node.jsでは、「libev」と「libeio」を組み合わせて使用しています。 下記のようなファイル読み込み処理を実行すると以下のような処理フローになります。 var path = require('path'), fs = require('fs'), filepath = path.join(__dirname, 'a.txt'), fd = fs.openSync(filepath, 'r'); fs.read(fd, 1024, 0, 'utf-8', function(err, str, bytesRead) { console.log(str); }); 0. Node.js起動時にeio_init()でnode::EIOWantPoll()をlibeioに登録する。 libeioは、pollして欲しいタイミングになると、 node::EIOWantPoll()を呼び出すよ
「libeio」は、C言語で書かれた非同期I/Oライブラリです。 実装的には、キューとスレッドプールを使い、I/Oを非同期並行処理します。 先程の「Boost application performance using asynchronous I/O」の図の右下(Asynchronous + Non-blocking)に「libeio」は位置するのではないかと思います。 libeioのサンプル 以下、libeioに含まれるdemo.cから抜粋したサンプルです。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <poll.h> #include <string.h> #include <assert.h> #include <fcntl.h> #include <sys/types.h> #includ
node.jsのスライドを見てて、プラットフォームの違いを吸収するnode.jsの核でもある非同期通信ライブラリuvを今日知ったので試してみた。 joyent/libuv - GitHub platform layer for node.js https://github.com/joyent/libuv libev/libeventをwindowsでもちゃんと使いたいという所から出てきたライブラリ。 #include <iostream> #include <uv/uv.h> int main() { int r; uv_tcp_t tcp; struct sockaddr_in server_addr; server_addr = uv_ip4_addr("127.0.0.1", 80); r = uv_tcp_init(uv_default_loop(), &tcp); uv_con
Document Data Structure in MongoDB Express MongoDB lets you easily store structured and unstructured data in a flexible and dynamic database schema. It supports CRUD operations on complex data objects using JSON as the main data type. Its an open source solution so it may not be as robust or well supported as commercial management tools. However it is easy to deploy and works well for most use cas
この本の「#77 関数へのenter/exitをフックする」で、GCCのコンパイルオプション-finstrument-functionsを使い、関数が呼び出された時、関数から復帰するときにフックを入れる方法が紹介されています。フック関数のシグニチャは以下です。 void __cyg_profile_func_enter(void* func_addr, void* call_site); void __cyg_profile_func_exit(void* func_addr, void* call_site); このフック処理に渡されるアドレスから関数名を出して、関数の実行を追う簡易な関数トレーサを作成します。アドレスから関数に変換する方法で一番簡単そうなのは、同じ本の「#62 dlopenで実行時に動的リンクする」でglibcのGNU拡張として紹介されているdladdr関数です。 #i
YAPCでmalaさんの話を聞いていて、memcachedのようにお手軽に使えるbloom filterがあるとひょっとすると便利かもしれない、とふと思ったのでAnyEventつかって、Bloom::Fasterのwrapperを書いてみました。 https://github.com/walf443/p5-bloomd-server 以下のようなプログラムを書いてサーバーを起動します use strict; use warnings; use EV; use AnyEvent; use Bloomd::Server my $cv = AnyEvent->condvar; my $server = Bloomd::Server->new( capacity => 100_000_000, backupdir => '.', ulog => 'ulog', ); $server->run $c
サーバサイドJavaScriptとして話題になっているNode.jsの開発者ライアン・ダール氏が来日し、都内で開催されたNode.jsのイベント「東京Node学園祭」で基調講演を行いました。 本記事は「Node.jsのコンセプトとは? ライアン・ダール氏による東京Node学園祭 基調講演(前編)」の続きです。 新バージョンではWindows版も登場 v0.4は、WindowsではCygwinでしか実行できませんでした。Cygwinはエミュレーションレイヤですが、古くて遅くてバギーでした。そこでMicrosoft、Cloudkick、Joyentの4人のチームでWindows版に取り組んできました。 v0.4ではlibdevとliveioが使われていました。これらはUNIXでノンブロッキングと非同期I/Oを実現するライブラリですが、Windowsでは概念があまりに違っていて対応が難しいもので
このセッションでは、前半でNodeのコンセプトを、後半では来週にもリリース予定のNodeの新バージョンについて紹介します。 このデニス・リッチーの言葉はNodeの特徴を表していて、Nodeとは機能を加えるよりもむしろ取り去ったものです。 いまのOSのインターフェイスのほとんどは、1970年代のテレプリンタのような歴史をひきずっています。ケン・トンプソンとデニス・リッチーが開発したUNIXやCは当時のPDP11のためにデザインされたもので、いまのOSもその歴史上にあるのです。 UNIXの基本概念は、対話的なコマンドラインを作るものでした。lsコマンドを打つとその結果がテレタイプに出力されるといったものです。そして基本概念には、ブロックするシステムコールやプロセスが含まれています。 ブロックするシステムコールを呼び出すと、I/Oが完了するまで戻ってきません。戻ってくるまでどれだけかかるかも分か
https://github.com/tokuhirom/Exporter-Auto なんか @EXPORT にいれるのだるくね! このプロジェクトでしかつかわないから全部 export しちゃってくれていいですよ! みたいなやつ。ありませんか? ありませんか。そうですか。そうなら、ブラウザの「戻る」ボタンを押してください。ってところまでかいてから気付きましたが、最近のブラウザって「戻る」ってかいてありませんね。はい。 で、概要ですが、Sub::Identify + B::Hooks::EndOfScope という荒技で、パブリックっぽいメソッドの一覧をみつけて @EXPORT にぶっこむというイカした技です。 Exporeter::Auto->import がよばれる時点、つまり use Exporter::Auto の時点ではまだメソッドが実際に定義されていないので、B::Hooks:
「実のところ、全てを備えていない言語 の方がプログラミングは簡単である」 デニス・リッチー “A language that doesn’t have everything is actually easier to program in than some that do.” – Dennis Ritchie 1 ソフトウェアスタックはどんどん 深くなっています。 The software stack is growing ever deeper. 2 プログラマのキャリアはローレイヤの 周辺だけに留まらなくなりました。か といって、LLなどのハイレイヤだけが それにとって変わったわけではありま せん。 そう、今は「ブラウザ」という領域が あるのです。 Programmers can spend an entire career in not just user-space... no
これを使って、MySQLの datetime 型の日付を得るには、 date("Y-m-s H:i:s"); とする。などなど。 あと、注意する点としては、 "Year:2005" のような型が得たい場合。そのまま "Year:Y" とすると、Y, a, r がフォーマットパラメーターとして解釈され、展開されてしまうので、バックスラッシュでエスケープしなければならない。 //?r (キャリッジリターン) をさらにエスケープして ??r としてある。 echo date("?Ye?a??r:Y"); 出力: Year:2005 <mktime 関数> mktime 関数 は、僕らが普段使ってる時間を、タイムスタンプというコンピューターの世界での時間に変換する関数。例えば、「2006年1月1日0時0分0秒」を mktime 関数 を使ってタイムスタンプに直すと
Linuxデバイスドライバを書く練習。/dev/fizzbuzzにしようかと思ったけど、 なんかあれだったので。まあ中身は fizzbuzzなんですが・・・。 ソース C言語をスクラッチから書くのは慣れない・・・. #include <linux/init.h> #include <linux/module.h> #include <linux/types.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/cdev.h> #include <linux/device.h> #include <asm/uaccess.h> #include <asm/string.h> MODULE_LICENSE("Dual BSD/GPL"); static int keikyu_open(struct inode *i
デフォは STDERR に出力しててたんですが、$DBIx::QueryLog::OUTPUT にファイルハンドルなら何でも設定できるようになりました。 が、今考えたら、Log::Minimal みたいな感じにしたほうがよかった! 一応、DBIx::QueryLog->logger($logger) とかで logger 指定できるのでいいんですけど。 あと、color と compresscompact と useqq っていうオプションを追加しました。 それぞれ env DBIX_QUERYLOG_(COLOR|COMPRESSCOMPACT|USEQQ) とかでも設定できます。 compress は compact にかわりました 軽く例を上げると、useqq は # local $Data::Dumper::Useqq = 1; # local $Data::Dumper::Ter
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く