自由課題

学んだり、考えたり、試したりしたこと。

node.jsを支えるlibuvのチュートリアル"uvbook" :基礎

この文書はuvbookの日本語翻訳の一部となります。文書そのものの説明その他については目次をご覧ください。

libuvの基礎

libuvは 非同期イベント駆動 のプログラミングスタイルを強制します。 libuvの中心的な機能はイベントループとI/Oと他の活動(activity)の通知をベースにしたコールバックを提供することです。libuvはタイマのようなユーティリティ、ノンブロッキングのネットワークのサポート、非同期のファイルシステムへのアクセス、子プロセス等を提供します。

続きを読む

node.jsを支えるlibuvのチュートリアル"uvbook" :イントロダクション

この文書はuvbookの日本語翻訳の一部となります。文書そのものの説明その他については目次をご覧ください。

イントロダクション

この'書籍'はWindowsUnixで同じAPIを提供するハイパフォーマンスなイベント駆動(evented)I/Oライブラリとしてlibuvを使うためのチュートリアルです。

この書籍はlibuvの主要な部分について言及するよう意図していますが、全ての関数やデータ構造を扱うリファレンスではありません。公式のlibuvのドキュメントはlibuvのヘッダファイル自身に含まれています。

この書籍はまだ執筆中であるため不完全ですが、成長するにつれて読み応えがあるものになるでしょう。

続きを読む

node.jsを支えるlibuvのチュートリアル"uvbook" :目次

はじめに

node.jsの基礎となるライブラリにlibuvというものがあります。以前からnode.jsの仕組みについて気になっていたので調べようと思ったところ、uvbookというlibuvのチュートリアルがあったので訳してみることにしました。

この文書のライセンスについて

この文書のライセンスは Creative Commons - Attributionであり、翻訳前の原文は https://github.com/nikhilm/uvbook となります。掲載するにあたり、見出しのスタイルなど、文書の体裁・フォーマットを一部変更しています。また、関連するコードはパブリックドメインです。

目次

イントロダクション
基礎
ファイルシステム
ネットワーク処理
スレッド
プロセス
イベントループ
ユーティリティ

この書籍について

Nikhil Maratheはプログラミングをする気のなかったある日(2012年6月16日)の午後にこの書籍を書き始めました。彼はnode-taglibの仕事をしている間、libuvのよいドキュメントのなさに苦しめられていました。リファレンスが存在しているのにも関わらず、包括的なチュートリアルがありませんでした。この書籍はその要求に対するアウトプットであり、正確を期す努力をしています。それは、Nikhilが若く未熟であり、ある点でひどく誤っている可能性があるということです。もしあなたが間違いを見つけた場合、彼はあなたに教えてほしいと思っています。また、レポジトリをfork し、pull reqestを送ることによりこの書籍に貢献することができます。

Nikhilは2つのライブラリの意味に関して記載されているMarc Lehmannによるlibevについての素晴らしいman pageのおかげでこの書籍を執筆することができました。

この書籍はSphinxvimによって作成されました。

ライセンス

この書籍の内容はCreative Commons - Attributionに基いてライセンスされています。すべてのコードは public domain です。

リーダブルコードを書くこと、あるいはコードをデザインすること

リーダブルコードという書籍を読みました。
私はデザイナというわけでは全くないのですが、視覚デザイン(知覚心理学)におけるゲシュタルトの法則と類似点を感じたのでまとめておきます。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

続きを読む

vagrant sshがスリープすると切断される件

MBPでVagrantを使っている最中にスリープさせると、スリープ復帰後SSHが切断される現象が起きてかなり不便だったので他に困っている人がいないか調べてみました。 他に困っている方がいるかも知れないので備忘録ついでに書いておきます。

現象

vagrant sshで接続したままスリープさせてスリープ復帰すると

Connection to 127.0.0.1 closed by remote host.

というメッセージを残してSSHが切断されていました(100%再現)。繋ぎ直せばよいのですが、編集中の内容が破棄されていたりするので地味に不便でした。

対応策

  • 発生環境
    • 現象が起きるのはOSX版を使っている人だけらしい
  • 対策
    • VirtualBoxを4.3.2にバージョンダウンする。
      (もしくは4.3.8のリリースを待つ
      (もしくは最新のソースをビルドする))
続きを読む

makecontext関数でコルーチンを実装してみる

ユーザレベルでコンテキストの切り替えを行う関数としてmakecontextという関数があります(ここでいうコンテキストはこれです)。 これを使うとpthreadやプロセスを利用せずに処理の流れを制御できます。
車輪の再発明感がかなりありますが、この関数と関連する関数を使って簡単なコルーチンライブラリを実装してみました。

レポジトリは以下です。
https://github.com/kimito/libcr

続きを読む

ファイバ・コルーチン実装まとめ

リアクティブプログラミングを行うにあたって、並行処理の方法としてマルチスレッドモデルではなくファイバ(またはコルーチン)を使うことがひとつのポイントに思えたので調査してみました。なお、範囲は普段自分がよく使う言語ということで、C/C++/Ruby/Javascriptにしました。

続きを読む