2010-03-21
焼き鳥の宮本屋
武之助や益康経路マッサージの近くにある宮本屋に行ってきた。
焼き鳥はおいしく、日本で食べるのと変わらない。
ネギ間は一つ一つがでかい!
ナンコツはかりかりしておいしい!
先日行った瑞兆焼き鳥店とメニュー・味ともに似ていた。
どちらも皮はパリパリだったが、これが北京のデフォルトなのか。
ただ、焼き鳥が出てくるのが少し遅かった。早い時間に行ったので客は私一人なのに。。。
オーダー
お通し
皮・・・2本
ネギ間・・・2本
ナンコツ・・・3本
豆腐サラダ
朝日生ビール・・・2杯
計78元
1,000円ちょっと。日本だと2,500円くらいいきそう。
近いし安いし2週間に1回くらい来そう。
2010-03-18
施偉桜子足道は全身+足裏で100
亮馬橋の武之助で、焼きそば+あったかサラダを食べた後、近くにある施偉桜子足道へ行ってきた。
全身+足裏で100元という安い値段。近くにある益康経路マッサージが、同じサービスを120元でやっているから、絶対それに対抗している。いいこと。
2010-03-17
boost1.41にXMLファイルの読み取り、書き込み機能が追加
boost1.41にXMLファイルの読み取り、書き込み機能が追加されていた。XMLだけでなく、JSONやINIにも対応している。
ほとんどboostのサンプルから持ってきて、ソースを書いてみた。
次のdebug_settings.xmlファイルがあることが前提。
<debug> <filename>debug.log</filename> <modules> <module>Finance</module> <module>Admin</module> <module>HR</module> </modules> <level>2</level> </debug>
#include <boost/property_tree/ptree.hpp> #include <boost/property_tree/xml_parser.hpp> #include <string> #include <set> #include <exception> #include <iostream> struct debug_settings { std::string m_file; // ログファイル名 int m_level; // ログレベル std::set<std::string> m_modules; // ロギングが可能なモジュール }; // XMLファイルから読み出し void load(const std::string &filename) { // property tree オブジェクトの作成 using boost::property_tree::ptree; ptree pt; // XMLファイルの読み込み read_xml(filename, pt); // タグ名を指定してXMLの要素「ログファイル名」を取得 m_file = pt.get<std::string>("debug.filename"); // タグ名を指定してXMLの要素「ログレベル」を取得。取得できない場合は、0を設定する。 m_level = pt.get("debug.level", 0); // <debug>-<modules>の子要素(<module>)を全て取得して、set変数へ設定 BOOST_FOREACH(ptree::value_type &v, pt.get_child("debug.modules")) m_modules.insert(v.second.data()); } // XMLファイルへ書き出し void save(const std::string &filename) { // property tree オブジェクトの作成 using boost::property_tree::ptree; ptree pt; // ログファイル名を<debug>-<filename>へ設定 pt.put("debug.filename", m_file); // ログレベルを<debug>-<level>へ設定 pt.put("debug.level", m_level); // 全てのモジュール名をset変数から取得して、<debug>-<modules>-<module>へ設定 BOOST_FOREACH(const std::string &name, m_modules) pt.put("debug.modules.module", name, true); // XMLをファイルへ書き出し write_xml(filename, pt); } int main() { try { // ファイルの読み込み load("debug_settings.xml"); // ファイルの書き出し save("debug_settings_out.xml"); } catch (std::exception &e) { std::cout << "Error: " << e.what() << "\n"; } return 0; }
2010-03-16
四合軒のビールはぼったくり!
地球の歩き方に載っていた「四合軒」に行ってきた。
京倫飯店の4Fにあり、国貿駅と永安里駅のどちらからでも、歩いて5分程度だ。
食べ物は安い。そこいらに沢山ある大衆向けの店と、サービス料15%を除けば変わらない。
フカヒレご飯も80元と安く、すごくおいしかった。
写真は取り損ねたが、すごい綺麗な画像がここに載っていた。
しかし!
ビールが高すぎる!!
なんで燕京ビールが90元もするんだ!!!
普通の店だったら10元も取らない。
料理はおいしいくて値段も安いのに、20:30のこの時間になんでこんなに空いているの?と思ったが、酒でぼっってるからだ。
帰りは三元橋までタクシーの予定だったが(20元程度)、もうお金を使いたくなかったので、電車で帰ってきた。
非常に不愉快だった。せっかくのおいしい料理が台無しになった。
RFC5572 - TSP (Tunnel Setup Protocol) のトンネル部分
トンネリングでIPv6NW同士を接続するプロトコルに、IPv6 Tunnel Broker with the Tunnel Setup Protocol (TSP)がある。
gogo6のgogoServerはこの技術で、IPv6 over UDP/IPv4 を実現している。
UDPで Symmetric NAT を超えられるのか?という疑問があったが、なんのとこはなく、
トンネリングサーバとClient間でのみ通信が発生するので、トンネリングサーバの実装さえ気をつければよい。
送受信用のソケットをサーバに1個つくって、それを使えば良いだけだ。
RFC内の 4.5.2. IPv6-over-UDP Tunnels にも書いてある(言い方は違うけど、言っていることは同じだ)。
If a v6udpv4 tunnel is configured, the same source/destination
address and port used during the TSP signaling are used to configure
the v6udpv4 tunnel.
TCP はこう。各クライアントごとにソケットを作って、それを管理する。
なのでUDPの場合、アプリケーションで状態を管理する必要がある(まあこの辺は実装次第なんでしょうけど)。
またTCPのような信頼性を付与するために、TSPヘッダーが存在して、そこにはTCPのようにシーケンスナンバーが存在する。






