2011-01-01から1年間の記事一覧

自分が英語をリスニングできない理由

英語リスニングのお医者さん [改訂新版]を読んだ。中学で習うような英単語を使った英文でさえ聞きとれないことに自分は馬鹿なんじゃないかと思っていたが、聞き取れない理由がなんとなくわかった。聞き取れない理由は 英語は母音の音がとても強いため、(日本…

screen の backtick をいつか使う(mkfifo使用)

screen の backtick をいつか使う - l1o0の日記 でファイルの変更を読み取るのに、周期的にファイルを監視していたが、kazuhoのメモ置き場 を参考に、mkfifoを使えば簡単にプロセス間通信を実現できることがわかった。 mkfifo mkfifoを使えばファイルをI/Fと…

ディレクトリをブックーマーク

zsh

zsh で移動するディレクトリをブックマークできたら便利なんじゃないかと思い、探したがあまり見つからない。ということでbd (bookamrk directory) という簡単なコマンドを自作。 ディレクトリをブックマークに登録 bd コマンドに登録したいディレクトリを渡…

bookmark.el でブックマーク名を自動入力

bookmark.el の使いづらいところと言えば、ブックマーク名を自分で入れなきゃらないところ。ブックマーク名を自動で入れればかなり便利になるんじゃないかと考え、「ファイル名:行数:関数名」と自動でブックマーク名を入れることにした。which-functionとい…

Coro で Thread-Specific Storage パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を参考に Coro で Thread-Specific Storage パターンを実装。Thread-Specific Storage パターンは、スレッドごとのコインロッカー。 スレッドがコインロッカーを初めて使うときは、そのスレ…

Coro で Two-Phase Termination パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を参考に Coro で Two-Phase Termination パターンを実装。Two-Phase Termination パターンは別スレッドに止まれと命令して、別スレッドに終了処理させる。終了処理が終ってスレッドが終了…

Coro で Future パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を参考に Coro で Future パターンを実装。Future パターンは別スレッドに仕事を投げて、戻りにID (引き換え券)を貰う。あとで引き換え券を渡して結果を確認する。 #!/usr/bin/perl use str…

Coro で Worker-Thread パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を参考に Coro で Worker-Thread パターンを実装。Worker-Thread パターンはワーカースレッドが依頼を待ち、依頼が来たら処理する。 #!/usr/bin/perl use strict; use warnings; package Cl…

Coro で Thread-Per-Message パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を参考に Coro で Thread-Per-Message パターンを実装。Thread-Per-Message パターン は メッセージを送ると新しく一つのスレッドが割り当てられて、そのスレッドが処理を行なう。 #!/usr/b…

Coro で Read-Write Lock パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を参考に Coro で Read-Write Lock パターンを実装。Read-Write Lockは、 スレッドが読んている間は、別のスレッドも読める スレッドが書いている間は、別のスレッドは読めない スレッドが…

Coro で Producer-Consumer パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を参考に Coro で Producer-Consumer パターンを実装。Producer-Consumer パターン は メッセージキューだが、キューが一杯のときはキューに入れようとする待たされる。キューが空のときキ…

Coro で Balking パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を参考に Coro で Balking パターンを実装。Balking パターン途中で止めること(Balkする=途中で止める)。この例だと「保存しようとしたけど、既に保存されていたらやめちゃおう。」 use str…

Coro で Guarded-Suspension パターン (Coro::Signal使用)

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 の Guarded-Suspension パターンを Coro で実装。前回は Coro::Channelを使ったが、Coro::Channelを使うとキューが一杯になると、ブロックしてしまう。 use strict; use warnings; use Coro…

Coro で Guarded-Suspension パターン (Coro::Channel使用)

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 の Guarded-Suspension パターンを Coro で実装。Guarded-Suspension パターンは要するにメッセージ送受信。Coro::Channel を使ったが、 Coro::Channel を使うと厳密には、Producer-Consume…

GNU PIC の出力画像を綺麗にする

GNU PIC の出力画像が綺麗でないことが不満だったが、一旦SVGファイルにしてから、png などの画像にすれば綺麗になることがわかった。 今までの画像出力 文字が滲んでいるし、曲線のギザギザも気になる。フォントを変えても文字の滲みは改善しない。 SVG に…

Streaming API で XMLの読み出し

Libxml2 の Streaming API っていうのは、 XML を頭から解析するときに役立つ API。SAXと違ってハンドラを登録する必要がないから楽。 #include <stdio.h> #include <libxml/tree.h> #include <libxml/xmlreader.h> void processNode(xmlTextReaderPtr reader) { const xmlChar *name; const xmlChar *val</libxml/xmlreader.h></libxml/tree.h></stdio.h>…

Writing API で XMLの書き出し

Libxml2 の Writing API っていうのは、 XML を頭から出力するときに役立つ API。 #include <stdio.h> #include <string.h> #include <libxml/encoding.h> #include <libxml/xmlwriter.h> #define MY_ENCODING "UTF-8" /*****************************************************************************************/ /*</libxml/xmlwriter.h></libxml/encoding.h></string.h></stdio.h>…

属性の削除

xmlHasPropで属性を持っているか確認しあと、xmlRemovePropでその属性を削除。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int del_attribute(xmlNodeSetPtr nodes) { xmlAttrPtr attr; int size; int i; size = (nodes) ? nodes->nodeNr : 0; for(</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

ノードの削除

xmlUnlinkNodeでノードを切り話したあと、xmlFreeで削除する。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int del_node(xmlNodeSetPtr nodes) { int size; int i; size = (nodes) ? nodes->nodeNr : 0; for(i = 0; i < nodes->nodeNr; ++i) { xmlU</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

属性の追加

xmlNewPropで属性を追加できる。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int add_attribute(xmlNodeSetPtr nodes) { int size; int i; size = (nodes) ? nodes->nodeNr : 0; for(i = 0; i < nodes->nodeNr; ++i) { xmlNewProp(nodes->nodeTab[i</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

テキストの追加

テキストを追加するには、ノードを追加するのと同じようにxmlNewNodeでノードを作って、xmlAddChildで親にくっつればいい。テキストもツリーの一部に過ぎないので。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int add_text(xmlNodeSetPtr nodes) {</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

ノードの追加

ノードを追加するには、xmlNewNodeでノードを作って、xmlAddChildで親にくっつればいい。以下、XPathでノードを検索して、そのノードの下に新しいノードをくっけている。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> int add_node(xmlNodeSetPtr nod</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

Libxml2 で XPath

xmlXPathEvalExpression()でXPathに一致したノードのリストを取得できる。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> void trim(char *str) { int i; for (i = strlen(str) - 1; 0 <= i; i--) { if ((str[i] == '\r') || (str[i] == '\n') || (str</libxml/xpath.h></libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

DOM で tree walk (Libxml2)

DOM で XML のツリー構造を解析する。ノードはリストになって、同じ階層のノードは node->next で、子のノードは cur_node->children で辿ることができる。 #include <stdio.h> #include <string.h> #include <libxml/tree.h> #include <libxml/parser.h> void trim(char *str) { int i; for (i = strlen(str) - </libxml/parser.h></libxml/tree.h></string.h></stdio.h>…

DOM でXML 作成 (Libxml2)

DOMでXMLファイル書き出す。xmlNewDoc()でDOMの雛形をつくる。xmlNewNode()でノードを作成して、ルートノードからくっつけていく。 #include <stdio.h> #include <libxml/tree.h> #include <libxml/parser.h> xmlNodePtr add_node(xmlNodePtr node, char *node_name, char *text, char *attr, char *at</libxml/parser.h></libxml/tree.h></stdio.h>…

Libxml2 環境

Libxml2でコンパイルするにはコンパイルオプションを以下のようにする。 gcc `xml2-config --cflags` srouce.c -o a.out `xml2-config --libs` この後のエントリで役に立つ例を書く予定。とりあえず、Libxml2の使い方の例。役に立たないけど、XMLファイルを…