自由課題

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

node.jsを支えるlibuvのチュートリアル"uvbook" :ネットワーク処理

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

ネットワーク処理

libuvにおけるネットワーク処理は直接BSDソケットを用いた場合のそう変わりませんが、いくつかのことは簡単になっており、全てはノンブロッキングであり、コンセプトは同じです。加えてlibuvはBSDソケットを用いたソケットの準備、DNSルックアップ、色々なソケットパラメータの調整のようなやっかいで何度も必要となる低レベルの処理を抽象化するためのユーティリティ関数を提供します。

uv_tcp_tuv_udp_t 構造体はネットワークI/Oのために用いられます。

続きを読む

node.jsを支えるlibuvのチュートリアル"uvbook" :ファイルシステム

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

ファイルシステム

単純なファイルシステムの読み取り/書き込みには uv_fs_* 関数群と uv_fs_t 構造体を用います。

Note
libuvのファイル操作はソケット操作とは異なります。ソケット操作はOSから提供されたノンブロッキング操作を用いています。ファイルシステム操作は内部的にはブロッキング関数を用いていますが、これらの関数はスレッドプールの内部で呼び出され、アプリケーションとのやりとりが必要になるときにイベントループに登録されたウォッチャに通知されます。

全てのファイルシステムは2つの形態を持ちます - 同期的非同期的 です。

同期的 な形態はコールバックが指定されない場合に自動的に呼び出され(、そして ブロック され)ます。関数の戻り値はUnixの戻り値と同様です(通常は成功時に0、エラー時に-1)。

非同期 な形態はコールパックが渡された時に呼び出され、戻り値は0となります。

続きを読む

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のリリースを待つ
      (もしくは最新のソースをビルドする))
続きを読む