Boost.Intrusive のコンテナを hook なしで使う

Boost.Intrusive を使いたい場面は結構あるものの、なんだ hook とか書かなくちゃいけないのか、既存のデータ構造には適用できないのか、と諦めていた。ところが、よくよくソースを読んでみると ValueTraits という trait クラスを指定することで完全にノー…

Boost.Graph の graphviz リーダだけを使ってみる

もう単純に boost::adjacent_list とかその辺に興味がない場合どうすればいいかって話です。適当な MutableGraph コンセプトを実装するクラスを用意してやればまあ一応動くみたいです。 #include <map> #include <string> #include <iostream> #include <boost/property_map/property_map.hpp> #include <boost/property_map/dynamic_property_map.hpp> #include </boost/property_map/dynamic_property_map.hpp></boost/property_map/property_map.hpp></iostream></string></map>

Boost.PHP で SPL のイテレータを実装する

残念ながら所用で参加できなかった モダンPHP勉強会。SPL の発表を Ust 経由で聞いて楽しくなってきたので、Boost.PHP でインターフェイスを実装できるようにしてみた。追記: Boost.PHP の導入については、id:Kiske さんが素敵なチュートリアルを書いている…

Boost.CoroutineとBoost.OptionalとBoost.Pythonを使って、C++クラスの内部イテレータをPythonの外部イテレータとして見せる

追記: うっかり戻り値ポリシーのところで boost::python::return_internal_reference<> を使ってしまい、メモリリークを引き起こしていたので修正しました。Stackless Python であれば continuation が使えるので、Python 側で C++ をまたぐ外部イテレータと…

Boost.Python の機能をざっと紹介してみる

Boost の一部ながらも「実用的」すぎるため、とかくテンプレートメタプログラミングを愛好する諸兄から黙殺されてきた不幸のライブラリ、Boost.Python。Boost.勉強会でこいつの魅力を伝えようと思ったのだけど、時間の都合で無理だったので、簡単に紹介して…

アメーバなうクライアントを Python で書いてみる

タイムライン取得とかつくらんとなー。つけた。http://gist.github.com/253169 # encoding: utf-8 import urllib2 import cookielib import re import xml.dom as dom import xml.dom.minidom as minidom from BeautifulSoup import BeautifulSoup, Tag, Com…

display_errorsが謎の副作用を持っている箇所について

昨日 id:narusase さんよりお便りをいただきました。 はじめまして narusaseです。↓このあたりに軽くまとめてありますが・・・ http://d.hatena.ne.jp/narusase/20091203 http://d.hatena.ne.jp/narusase/20091204htmlspecialcharsのdisplay_errorsの解釈が…

Shibuya.pm テクニカルトーク #12 で発表してきました

果たしてPHPやPythonの人が行っていいのかどうか、しかも発表はGoの話でPerl関係ないしって感じで、微妙なアウェイ感でした。というか最近どこで喋ってもアウェイ感があるわけですが。GoでKVSを書けるのかView more documents from ... ....※実際に作ってみ…

PL_keyword_plugin で、Perl の lexer と re2c を組み合わせる

さいきん PL_keyword_plugin というのをよく耳にするので、ためしにつかってみました。p5-php-embedたとえば use PHP::Embed; $a = ; print $a, "\n"; こんなふうに PHP をインラインで Perl にまぜたりできる。じつは、内部的には PHP を pipe でよびだす P…

Go の X11 ライブラリを試してみる

default ブランチの方の pkg/exp 以下にすでに含まれている、パッケージ draw/x11 を試してみた。このパッケージは Xlib を介さず、直接 X プロトコルを喋って X サーバと通信して画面描画を行うようになっている。まったくよく実装するよほんとに。次のプロ…

enum型とtypeof()とgccとg++

次のような C のコードを gcc でコンパイルしたとき、シンボル「a」のデバッグ情報がどのように DWARF になっているかを dwarfdump で見てみると... enum X { A }; typeof(A)* a; なんかとても残念なことになっていた。 LOCAL_SYMBOLS: <1>< 45> DW_TAG_enum…

enum 型とテンプレート特殊化

追記: テンプレートの特殊化と同時にインスタンス化されていたというだけでした。仕様のどこに書いてあるのかは調査中以下のように template specialization というのはインスタンス化されたもの、明示的に特殊化されたもの両方を内包する概念のようでした。…

fontconfig により選択されるフォントを知るには

fc-match コマンドを使うのだけど、引数として渡すべきパターンの書き方がよく分からなくて参った。 $ fc-match sans DejaVuSans.ttf: "DejaVu Sans" "Book" $ fc-match sans:weight=200 DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold" $ fc-match sans:lang=ja…

Boost.Python で static property を定義したクラスを含むモジュールをロードしようとするとエラーが出る件

この問題は Python 2.6.3 以降で発生する。たとえば、次のようなモジュールを作成し、 #include <boost/python.hpp> #include <string> class MyClass { public: static std::string get_foo() { return "test"; } }; BOOST_PYTHON_MODULE(_test) { using namespace boost::python; cla</string></boost/python.hpp>…

Ada, Go, Erlang, Scala, Stackless Python, Java (java.util.concurrent), シェルスクリプトの適当すぎる比較

同じようなコードをそれぞれの言語で書いてみた。Ada: with Ada.Text_IO; with Ada.Strings.Unbounded; procedure MyTest is use Ada.Strings.Unbounded; use Ada.Text_IO; task MyTask is entry Hello(Message: String); end; task body MyTask is Received…

VMware Server 上で利用している Windows XP のイメージを KVM に移行する際、ブルースクリーン (0x0000007B) が出てしまう問題への対処法

ずっとこれで困っていて、いろいろ検索をしてみたのだけど、結果的に「Migrating Virtual PC Windows servers to KVM」の次の記述が役に立った。 To avoid getting a 0x0000007b / 0x7b BSOD on startup due to the mass storage controller changing, run t…

PHPにメッセージキューとそれを扱う糖衣構文を実装してみた (「PHPのすべらない話 #3」)

Goにできて、PHPにできないはずはない!というわけでやってしまいました。まあ、これにメッセージキューとメッセージスロットを足しただけなんですが。

「10〜30分で何となく分かるGo」という資料

を Python Hack-a-thon #2 のために作りました。単なるまとめなので、間違いがあったらぜひ指摘してください。10〜30分で何となく分かるGoView more documents from ... ....追記: サンプルコードの zip はこちら

Erlang 付属のパーサジェネレータ Yecc を使ってみた

Yacc なんかと同じ LALR(1) パーサジェネレータである Yecc を、ちょっと興味がわいてみたので使ってみた。ルール記述ファイルの形式は次のようにまったく Yecc 独自のものとなっている。Yacc よりはわかりやすいかも。 %% コメントは『%%』で始める %% 以下…

Go のサンプルいくつか

Methods: package main import "log"; type string_list struct { items []string; } func (self *string_list) Join(sep string)(string) { retval := ""; for i := 0; i < len(self.items); i++ { if i > 0 { retval += sep; } retval += self.items[i]; }…

なんか Go で書くのが流行ってるみたいなので

追記:「kzk's blog」の「Writing TokyoCabinet wrapper for Go language」で紹介御礼。この記事は cgo を使った TokyoCabinet のラッパーの書き方を解説しているので、下記のコードと組み合わせて本当に tc が backend になっている KVS を書いてみるのもよ…

Erlang でモジュールをディスアセンブルする

自分用メモ。全然ドキュメントがないので困っている。OTP のソースを眺めていたら beam_disasm というモジュールを発見した。どうもこれをつかえばいいようだ。test.erl -module(test). -export([add/2, add/3]). add(X, Y) -> X + Y. add(X, Y, Z) -> add(a…

PHPの「えせプログラミング言語」の弊害

先日のエントリーでも少し触れたが、PHPの最大の問題点は、それが持つ「一見その言語構造がよくあるプログラミング言語の形をとりながら、プログラミング言語の最も大切なところを外している『えせプログラミング言語』である」点にある。Webアプリケーショ…

Python の文法だけを Ruby っぽくしてみたらどうなるか実験した

こんにちわ、あらびきプログラマー moriyoshi です。Python が生理的に嫌いな人からよく聞く話として「インデントでブロック構造を表す」ってのがありますね。じゃあ中身はそのままで文法だけ Ruby っぽくしたらどうなるんでしょうかね。Python はトークナイ…

PHP をテンプレートエンジンとしてもっと頑張らせるパッチ

これは発表中に紹介したものだけど、「意欲的」な内容の割におもしろさが伝わらなかった気がするので改めて紹介。 きょうび論理構造を無視して、純粋に入力を文字列として扱うテンプレートエンジンっていらねーって思いませんか? PHP はテンプレートエンジン…

PHPカンファレンス2009へのご来場ありがとうございました

追記: スライドの TMP_VAR の図に誤りがありましたので差し替えました。と、まるで主催のような言い方になってしまいましたが、いやいや、主催の方々はほとんど睡眠してないとのことで、本当に頭が上がらないです。本当に発表の場をくださったことに感謝しま…

これまで作成した変態パッチを管理しているgithubのレポジトリ

追記: 漏れていた 2 つのパッチを追加 追記2: git fetch が抜けていたので訂正 実はこれも発表の際に降れておくべきだったんだけど、PHP のソースコードの VCS が subversion に移行したおかげで git のミラーが実現し、楽しくパッチを VCS で管理しつつ ups…

Phython がようやくまともに動くようになってきたので告知

Phython は、PHP だけで実装された Python の処理系です。になる予定です。名前から思いついて最近こつこつ作ってきましたが、今のところ、組み込み関数とかはまったく実装されておらず、またスクリプト中でクラス定義もできないなど、ほんとに基本的なもの…

PHP カンファレンス 2009 で喋ることになっているようです

09/05 (土) のテックデイで『PHP を「いじり」倒す 10 の方法』と題した発表を行います。内容は…このブログで紹介してきた ZendEngine ハックなどの詳細を説明したりとか、PHP のエクステンションを簡単に作る方法を紹介したりといった感じです。PHPは高性能…

kmyacc に各種パッチを当てまくったバージョンを fork しました

毎回オリジナルを落としてきてパッチを当てたりだとかするのが面倒なので fork しました。みんなそう思ってたよね?http://github.com/moriyoshi/kmyacc-forked/以下のパッチが当たっています。 id:yukoba さんによる Python サポート id:yukoba さんと id:ku…

Ada を触っての個人的なメモ

あまりこういうチラ裏エントリは書かないつもりでいたけど。どうしても RHEL4 上で gcc 4.3 のパッケージを作らないといけないという状況にいて、何度も試行錯誤を繰り返す中、途中で出てくる gnat という文字がどうにも気になってしまったので Ada を触って…

PHP に autoboxing 追加するパッチ

先日は、大量の「これはひどい」タグをありがとうございました。これからも PHP の生けるマジコンとして突っ走る所存です。 配列は、以下のようにして繋ぐことも val = $a; } } function ref($a) { return new Ref($a); } ref(array(1, 2, 3))->val[0]; PHP …

「パッチを当ててやってもいいんだぞ、お前が嫌なら」

PHP では以下のように new してすぐメソッドを呼べない getOffset(); PHP で引数をそのまま返す関数を作っておくと便利 PHP はどうせマジメな言語ではないので自分用に作り替えるくらいが丁度いい。以下 diff↓

float型の値に対してビット演算する

id:ichii386 に phpでunsigned int超えそうなbit演算する方法っていいのないかな? と言われたので 64ビットアーキテクチャにすれば? と言ってみたのだが、一応、考えてみた。仕組みといっても大したことはなく、ソースの通り。52ビットまでならこうやってご…

言語の GC 機能と参照カウント (後編-1)

追記: 最後の図の「C」の参照カウントが 1 ではなく 2 になっていたのを修正 次回は cycle collector の実装と、回避方法について書く予定。 言語の GC 機能と参照カウント (中編) と 2008 年の 5 月 31 日に書き残して早 1 年と 2 ヶ月を迎えようとする中の…

テンプレートメンバ関数と仮想関数を (半ば強引に) 組み合わせる

c++

追記: タイトルが不正確だと思ったので修正。Wassr で id:kazuhooku さんがつぶやいていたので、それに触発されて。それにしてもこの 2 つは本当に水と油だね。typeinfo 見てディスパッチする、というのがばっちりはまる場合というのも結構ありそうだけど、…

push_back(...) vs. insert(end(), ...)

明らかに前者の方が速いだろうと思っていたがコンパイラをなめていたようだ。 g++ (Ubuntu 4.3.3-5ubuntu4) 4.3.3 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty…

va_list を Boost.Tuple に変換する

意味あるかどうかわかんないけど思いついたので。↓以下テストコード

PHPEncode書いた

The JUI 2009 Returnsに参加してきました。発表者の皆様お疲れさまでした!!!!JavaScript は柔軟な文法を持っていながら、ドメイン特化型言語として生まれた宿命か、何度もその寿命を宣告されてきた言語だと思いますが、今回の発表はそんなことを微塵も感…

Objective-C を使わずに Cocoa を使ってみるテスト

PyObjC とか RubyCocoa とかの話ではなく、C で書くって話。 なんかも結局 #import 使ってるので全部自前で用意した次第。 $ gcc -o test test.c -framework AppKitなどとしてコンパイルして実行すると空のウィンドウが出現します。Objective-C 2.0 の API …

Quercus on GAE/J で Low-level datastore API を使う

昨日は GDD の GAE Hackathon で、id:kagigotonet さんと 2 人で PHP (笑) チームを作り、あれこれとやってました。私の方では結局 Quercus にパッチを当てて (バグを直して) Datastore の API を直接使えるようにするということをやりました。これまでも Da…

Issue 2517: Error when printing an exception containing a Unicode string

この先が気になって調べてみた。Issue 2517: Error when printing an exception containing a Unicode stringこの問題は デフォルトのエンコーディングが ascii となっている件→デフォルトのエンコーディングが「何のための」エンコーディングのデフォルトな…

VLゴシックのsynthetic emboldeningを抑制して、表示に高級感を。

Free な OS の標準的な日本語フォントとして Vine Linux をはじめ様々なディストリビューションに採用されている「VL ゴシック」。字体の見やすさなどから、徐々に愛好者を増やしているようなんだけど、前々から気にくわなかったのがこれの太字。小さい文字…

印刷して電車の中で読める (かもしれない) TCP ECHO サーバのソースコード (1)

アーキテクチャに関する質問として、「○○の仕組みってどうなってるの」というようなことを聞かれても、説明下手なせいか、なかなか口で説明できないことがある。そこで「UTSL (ソース読めばいいよ)」と言いたいんだけど、かといって実際に、これを読むといい…

select のなかみ

一応 select(2) も読んであったので説明しとく。メインループは非常に短いので抜粋。ここにはビットマップの転送処理は含まれていないので注意。max_select_fd() の前後が rcu_read_lock() と rcu_read_unlock() で囲まれているのは、ドキュメント (Document…

AcotieScriptはすでにllvmに対応している

yacc と lex で簡易言語の AcotieScript っての作ってみた→ http://github.com/moriyoshi/AcotieScriptというわけでみなさんよろしく まとめperlとrubyはparserをyaccでやってトークナイザはlex使わないで自前でやってる。 PHPもyacc使ってるが何かスッゲー…

epollのなかみ

よく C10K 問題とかいって epoll(7) の話が出てきて select(2) 遅いね poll(2) 遅いねってなるんだけど、正直なところ、これらのシステムコールを実際に使ってコードを書いてみたひとはどのくらいいるのだろう。ましてや eventpoll が何やってるか知っている…

llvm-py を使ってみた。

llvm-pyはドキュメントがめちゃくちゃよく書けているのはいいんだけど、バインディングとしての完成度は…普通かな。0 から 9 までの値をそれぞれ 2 倍したものを表示するサンプルを書いてみた。実は with を初めて使った。basic block (BB) のセマンティクス…

メタクラスと__getattribute__()

演算子オーバーロードがどう動いているのかを確かめるため、いろいろ意地悪なサンプルを書いてみる。 class MyType(type): def __init__(self, name, bases, dict): type.__init__(self, name, bases, dict) self.__add__ = lambda self, rhs: 1 def __getat…

SAXのハンドラをコンビネータっぽく書いてみた

これも有用性は不明。DOMツリーをトラバースするなりDigester (古い?)使うなりしたほうがいいと思いますけどね。 <document> <list> <item>a</item> <item>b</item> <item>c</item> </list> <list> <item>a</item> <item>b</item> </list> </document> こんな XML ツリーをパースするコードです。可読性はSAXハンドラを素で書いたにしてはいい方かもしれないけど、悪い。リフレ…