東方算程譚

Oriental Code Talk ── επιστημηが与太をこく、弾幕とは無縁のシロモノ。

目次

Blog 利用状況

ニュース

著作とお薦めの品々は
東方熱帯林へ。

別館: 茶ネタなら
恵比寿亭茗茶楼

あわせて読みたい

わんくま

  1. 東京勉強会#2
    C++/CLI カクテル・レシピ
  2. 東京勉強会#3
    template vs. generics
  3. 大阪勉強会#6
    C++むかしばなし
  4. 東京勉強会#7
    C++むかしばなし
  5. 東京勉強会#8
    STL/CLRによるGeneric Programming
  6. TechEd 2007 @YOKOHAMA
    C++・C++/CLI・C# 適材適所
  7. 東京勉強会#14
    Making of BOF
  8. 東京勉強会#15
    状態遷移

CodeZine

  1. Cで実現する「ぷちオブジェクト指向」
  2. CUnitによるテスト駆動開発
  3. SQLiteで組み込みDB体験(2007年版)
  4. C++/CLIによるCライブラリの.NET化
  5. C# 1.1からC# 3.0まで~言語仕様の進化
  6. BoostでC++0xのライブラリ「TR1」を先取りしよう (1)
  7. BoostでC++0xのライブラリ「TR1」を先取りしよう (2)
  8. BoostでC++0xのライブラリ「TR1」を先取りしよう (3)
  9. BoostでC++0xのライブラリ「TR1」を先取りしよう (4)
  10. BoostでC++0xのライブラリ「TR1」を先取りしよう (5)
  11. C/C++に対応した、もうひとつのUnitTestFramework ─ WinUnit
  12. SQLiteで"おこづかいちょう"
  13. STL/CLRツアーガイド
  14. マージ・ソート : 巨大データのソート法

@IT

  1. Vista時代のVisual C++の流儀(前編)Vista到来。既存C/C++資産の.NET化を始めよう!
  2. Vista時代のVisual C++の流儀(中編)MFCから.NETへの実践的移行計画
  3. Vista時代のVisual C++の流儀(後編) STL/CLRによるDocument/Viewアーキテクチャ
  4. C++開発者のための単体テスト入門 第1回 C++開発者の皆さん。テスト、ちゃんとしていますか?
  5. C++開発者のための単体テスト入門 第2回 C++アプリケーションの効率的なテスト手法(CppUnit編)
  6. C++開発者のための単体テスト入門 第3回 C++アプリケーションの効率的なテスト手法(NUnit編)

AWARDS


Microsoft MVP
for Visual Developer - Visual C++


Wankuma MVP
for いぢわる C++


Nyantora MVP
for こくまろ中国茶

Xbox

Links

記事カテゴリ

書庫

日記カテゴリ

2008年10月8日 #

先にゆってよー

なかなか復帰できないぞ の続き。

ざっくし書けたとこで実データもらって試運転。
...ありゃ? URL毎に集計すんだけど ぜーんぶ ..../index.html でやんの。
なんでかなーって調べてみたら、
ログにあるデータが .../index.html?%E7%A8... みたく ?に続くパラメータ
で各ページに飛ばしてました。

ε 「なんすかコレ?」
ボ 「あー、wiki使ってこさえたってゆー」
ε 「…パラメータんとこで集計するっきゃないっしょね」
ボ 「んじゃよろしくね」

ったくもー。 %E7%A8... のとこ、どうやらeuc-jpみたい。
なのでバイナリに変換、さらにeuc-jp→shift_jis変換かけてごにょごにょ。
あーマンドクセー

posted @ 10:07 | Feedback (0)

なかなか復帰できないぞ

ふー。立て続けに「やっつけ仕事」が舞い込んでばたばたしてますわぁ。

ボス@隣の部署:「あのね、Web-pageのアクセス・ログを解析したいんだけど」
επιστημη:「大量?」
ボ 「うん、かなり。生ログはベタなテキストファイル」
ε 「さくさくーとパースしてテケトーなデータベースに溜め込んだらえぇですわ」
ボ 「うーん、そんだけのためにDBサーバ立てるのもなー」
ε 「サーバ要らずのDBありますょ?」
ボ 「…そなの? んじゃ一本書いてよ」
ε 「ぅぁー...まいっか。昼メシおごってくださいね」
ボ 「んじゃおねがいね。あ、ショボいマシンしか空いてないから.NET勘弁」
ε 「ヒギィ」

なんてな。
で、C++ネイティブでSQLite使って書きました。
ベタテキストのパースは正規表現が楽そうだったけど
むりくり strほげほげ 関数群でごりごり。

てかさー、こんくらいテメェんとこの新人君に食わせてやんなよー

# テイルズ・オブ・ヴェスペリア がそろそろ終盤。
# エステリーゼ様はどぉなっちゃうのでしょうかドチドチ♪

posted @ 9:40 | Feedback (6)

2008年9月30日 #

りはびり

ご無沙汰してまーす。

いろいろあってここんとこエントリできませなんだ。
最大の要因はロスト・オデッセイですかねぇ(マテ
取りこぼしたお宝探してウロついてたらいつのまにやら
レベルごんごん上がっちまって、ラスボスがあっけなく
落ちちゃってちとがっかり。

昔ながらのターン制/コマンド入力タイプのRPGが好きです。
いまどきのアクションRPGはせわしなくてどぉも。

ともかくも、またぼちぼちと再開しますなり。

# ロスオデ終わったその次は ルミネスRez
# スク水シューティングトリガーハート・エグゼリカ かなー...

posted @ 11:28 | Feedback (7)

2008年9月12日 #

郵便局がお手紙を受け取ってくれません

困ったときは釣り糸を垂れるテスト ^^;

System.Net.Mail.SmtpClientでSMTPにメールを送りつけてるんだが、
ちーとも受理してくれません。認証にしくってるポ。

Outlookがメール投げてるトコをパケット・モニタで覗いたところ:

EHLO しろホスト
AUTH LOGIN
Base64な しろアカウント
Base64な しろパスワード
MAIL FROM: しろやぎさん
RCPT TO: くろやぎさん
...

ってな段取りで送りつけてるみたい。
コレとおんなじことすればいいはずなんだけど、
System.Net.Mail.SmtpClient ではどぉすんだ?

SmtpClient smtpClient = new SmtpClient("森の郵便局",25);
smtpClient.Credentials = 
  = new NetworkCredential("しろアカウント","しろパスワード","しろホスト");
smtpClient.Send("しろやぎさん", "くろやぎさん","読んでね", "こんにちは");

↑これだと認証が通ってないみたいなの。 おしえてえらいひと。

posted @ 12:10 | Feedback (35)

2008年9月9日 #

涼しくなったというのに

体調を崩してますしくしく。一日中だるだるーて感じ。
blogも更新できてないしメールのお返事も滞りがち。ごめんしてねー

一日お仕事をお休みして昼間っから惰眠をむさぼってたもんだから
夜中に目が冴えちゃって...ハコサブローの大作RPGをゆるゆるーと進めちう。
アレです、ロスト・オデッセイ。 DVD4枚組。目下ようやく2枚目の半ばあたり(たぶん)。
シーンが切り替わる際のロード時間がもちーと短ければ気持ちいいんですけどね。
それはそうと、セーブ・ポイントまであと5歩ってとこで
なんでバカ堅いザコ敵に囲まれるかなー(ぷんすか

あとはXbox LIVE!アーケード のダウンロード・ゲームをちらほら。
 Q-entertainment の作品がノリがえぇですね、RezとかE4とかルミネスとか。
近々メテオスがリリースされるらしい、楽しみですわ。
# Rezやりたさに真夜中にファミマに走ってゲイツ・ポイント買ってきました♪

ハコサブローてば70年代のアメ車みたいです。デカくて騒々しい。
ケーブルがゴツいので本体の見掛け以上に奥行きを要します。
ほんでもってファンが五月蝿いです。筐体の振動もかなりのもんだし、
背面からは熱風が吹き出します。
聞くところによれば製造ロットによるらしく、ずいぶんと静かな筐体も出回っているとか。
んなわけで「リビングのテレビには繋がないでねっ!」とカミさんに釘刺されまして、
Dsub15-VGA出力のケーブル買って来ました。おかげですっかりヒキコモリ

... Xboxネタへの食いつきはどんなかなー

posted @ 13:26 | Feedback (6)

2008年9月4日 #

タスクシステム頓挫 orz

うーん、そーなのかー...

自機/敵機/弾などなどの動きをタスクに分割し、
それぞれ個別にオブジェクト定義してうんぬんしてたわけですが...遅い。
大したことやらせてないのに80fpsがやっと。
こんなんじゃ先が思いやられます。
どうもSystem.Collections.Generic族(List<T>とか)使ったり、仮想メソッド
経由でごしょごしょやるとパフォーマンスがかくんと落ちるポいです。
美しく書こうとしちゃイカンみたい、一旦全部捨てて考え直しだなこりゃ。

posted @ 23:32 | Feedback (0)

Handle-Body イディオム

C++Dayでmeltさんが紹介してくれた shared_ptr を使ったおあそび。

C#でいう参照型のようにふるまう猫。

#include <memory>
#include <string>
#include <iostream>

// VC++9 SP1 でサポートされた std::tr1::shared_ptr を使います
namespace std { using namespace std::tr1; }
using namespace std;

class Cat {
  // 猫Body
  class CatImpl {
    friend class Cat;
    string name;
    string tail;
    CatImpl(const string& n, const string& t) : name(n), tail(t) {}
    void greet() const { cout << name << "だ" << tail << endl; }
  public:
    ~CatImpl() { cout << "ばいばい" << tail << endl; }
  };
  std::shared_ptr<CatImpl> impl; // 猫Handle
public:
  void greet() const { impl->greet(); }
  static Cat make(const string& n, const string& t) {
    Cat result;
    result.impl = shared_ptr<CatImpl>(new CatImpl(n,t));
    return result;
  }
};

int main() {
  Cat s = Cat::make("シュウたん","にゃー");
  Cat m = Cat::make("マグさん","ほげ");
  Cat c; // シュウたん/マグさん にすり替わります!!
  // コピーしているように見せかけて、ぢつはしてまてーん
  c = s; c.greet();
  c = m; c.greet();
}

# C++ネタもたまには書かんとのぅ...

posted @ 16:37 | Feedback (5)

2008年9月3日 #

いいコトバだよねぇ

ネタ元 → 福岡勉強会 #3 準備スレ

手弁当」 ・・・情緒溢れるいいコトバだと思いますねぇ。
なんか仕事手伝ってもらったなら、報酬は無理としても
せめてメシぐらい振舞うじゃないですか。
それを「手弁当で」っていうんだから
「あなたのためならメシすら持参しますよ」って心意気ですよね。

それを手伝ってもらう側から口にするのは
「メシも出せんほどカツカツでやってます。儲けなんかアウトオブガンチューです」
ってこと。これまた見上げた心意気なのでありますよ。

posted @ 18:05 | Feedback (9)

2008年9月2日 #

"ぽっぷさん"からおてがみを貰う方法

突然降って湧いた相談事で。

メールを読み、送信者に応じて転送するちっさなアプリが欲しいんだって。
メールを送る方は Wankuma.Net.Mail が使えそう。

それはそうとして、POP3から拾ってくるのはどうすりゃえぇの?
.Net Framework の System.Net.Mail 名前空間には 送り側(SMTP)しか見当たらんのですががが。

# 生socketでプロトコル実装? やれちゅーたらやるけどさぁ....

[追記] さっそく釣れたおさかなさんに訊いてみたところ、TcpClient用意して
"ぽっぷさん"に直接お伺いをたてろ、ってことのようです。
貰ったメールがmulti-partだったりしたときの分割ルーチンなんかもテメェ
でこしらえにゃならんのかな。マンドクセー...

posted @ 15:41 | Feedback (16)

タスクシステム試作(3)

タスクシステム試作(2) のつづき。

んー、悩ましい...
こんなシナリオを考える:
 - ザコ敵が数機、編隊を組んで飛来
 - 定位置に到達したらバラ弾を散布
 - 一定時間で散開
 - 自弾に接触したザコ敵は破壊され編隊から離脱、
 そいつが撃ったバラ弾も消失

これをタスクシステムで組み立てると
編隊は複数のザコ敵の集合で構成されます。
それぞれのザコ敵は散布したバラ弾を持ってます。

ここでザコ敵が被弾したとき、編隊から離脱するんだから、

ザコ敵.Update() {
  if ( 被弾した ) {
    this.バラ弾を消去();
    編隊.離脱(this);
  }
}

こんなカンジのロジックになるかしら。
問題は 編隊.離脱(this) なのよ。オノレを編隊から抜かにゃならん。
ってことは、編隊の参照をどっかに持ってにゃならんのです。
数多くのザコ敵それぞれが所属する編隊の参照を持つことが
時間と空間を圧迫せんだろうか。
機体番号と所属する編隊との辞書を用意し、被弾したらその辞書
を引くのだろうか...

時間と空間の制約が厳しい環境下での実装はホント久しぶりです。
リアルタイムな組み込みモノは経験ありますけど、タスクがダイナミックに
追加/削除される形態は初めてなの。

posted @ 10:12 | Feedback (4)

流行ってんの?

二つ名メーカーやってみた。

επιστημηさんの二つ名は...

サタニックテンペスト
惨劇警報

なんすかコレ。ドンピシャやないですかwww

※ 掲示板にスットンキョーな質問するとサタニックテンペストが降臨します♪

posted @ 9:29 | Feedback (3)

2008年9月1日 #

タスクシステム試作(2)

タスクシステム試作のつづき

えいやーでごりごり書き殴ったタスクシステム、
それっぽくなったぞでこさえた"弾幕もどき"に適用してみた。
# プロジェクト差し替えてあります。

絵を構成してるパーツってたぁくさんあります。
XNAを素で使うとそれぞれの更新と描画がUpdate/Drawの
中にごしゃっと書かにゃならんのですが、タスクシステム使うと
それぞれ個別に書けてキレがよろしい。

まだまだ、です。"キレがいい"の裏返しが残っています。
実際のゲームでは自機/敵/弾などなどの相互のインタラクション
が絡んだときに現タスクシステムが正しく/使いやすくできてるか
がわかってません。

なんちゃてーなタスクシステムですけど、
使ってくれていちゃもんつけてくれるひと求ム。

posted @ 10:07 | Feedback (0)

C/C++の将来性

ネタ元:
C/C++ の将来性 [C++]日輪の存在 C/C++ の将来性 その 2

僕があんまり語っちゃいけない希ガス^^; なのでさっくり。
たくさんの言語が生まれ、そして消えていきます。
消え方にもいろいろあって、ホントに影も形もなくなっちまうのもあれば、
ほとんど見かけなくなってはいるものの”その道"では磐石の存在であるものも。

なんやかんやゆーてもね、C/C++は偉大であり巨大なんですよ。
星の数ほどもある手続き型言語を一掃したのがCであり、
Cのスゴさ(優れたとこも邪悪なとこも)を引き継いだのがC++ですからね。
そしてまたOSから汎用アプリまで広汎にカバーするのもC/C++のウリです。

とはいえ苦手な分野もたくさんあります。
C++の欠点を克服すべく現れた多くの言語が隆盛を誇っています。
C++以降に現れた言語なんだからC++より優れていてアタリマエ。
が、そいつらがC++の影響を受けてないとは言わせないぜ。

で、こんだけ巨大(言語仕様もユーザ数も)で影響力の大きい言語
が急速に凋落するとは考えにくい。生まれて四半世紀の今現在でも
言語仕様とライブラリの強化/拡張を続けているのがその証左です。

C/C++は生き残りますよ確実に。
ただ、それが僕らの身近なところに棲息するかはなんともね。

posted @ 9:39 | Feedback (7)

2008年8月30日 #

わんくま同盟横浜勉強会 #1 「C++ Day」

お疲れっしたー。

生憎の天候の中集まってくださったみなさま、
毎回の勉強会運営にご助勢くださるスタッフ各位、
おかげさまで滞りなく終えることができました。
心より御礼申し上げます。

まぁ、いーあんばいの"こゆさ"で楽しめました。
これより薄いとつまらんし、濃いとついてけなくなるかなー

で、懇親会で出たネタで「Graphics Day」はいかがかと。
DirectXやらOpenGLやら、あるいはその応用としてのゲームとか。
美麗なデモ満載のセッションを観客として愉しみたく存じます。

posted @ 21:58 | Feedback (8)

タスクシステム試作

まぢもんのゲームなんて作ったことないεπιが
勘だけを頼りにタスクシステムを考えるココロミ。

えーと、要はTaskを順に動かせばいいんだな。

interface ITask {
  void Update(); // 状態を変える
  void Draw(); // 描く
}

これを複数個まとめ、一気にUpdate/Drawできればいい。
そんなTask集合もまた、Taskであっていいよな。

public interface ICompositeTask : ITask {
  /// オーナー
  TOwner Owner { get; set; }
  /// 子タスクを追加する
  void AddTask(ITask task, int priority);
  /// 子タスクを削除する
  bool RemoveTask(ITask task);
  /// Updateの直前に行うこと
  void BeginUpdate();
  /// Update直後に行うこと
  void EndUpdate();
  /// Drawの直前に行うこと
  void BeginDraw();
  /// Drawの直後に行うこと
  void EndDraw();
}

なんてこと考えてます。
いつになったら"わんくまシューティング"が動きだすやら。
遊びだから。ゆっくりゆっくり。


↑ XNAを意識してますが、XNA不要です。
managed DirectX なんかでも使えるハズ。

キモは掴んでるハズなんだが、
ゲームに必要な機能が思いつかんし、
パフォーマンスを考慮してまてん。
同好の志を求ム。

posted @ 0:13 | Feedback (5)