東方算程譚

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
    状態遷移
  9. 名古屋勉強会#2
    WinUnit - お気楽お手軽UnitTest

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. マージ・ソート : 巨大データのソート法
  15. ヒープソートのアルゴリズム

@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

記事カテゴリ

書庫

日記カテゴリ

2009年7月2日 #

営業活動の成果

C++テンプレートテクニック」おかげさまでぼちぼちと売れてくれました。

アフィリエイトでせしめたギフト券がそこそこ貯まり、
がんばった自分へのご褒美にゲームを一本。

デススマイルズ

アーケード・シューティングのXBOX移植っす。
なんとまぁ、Continue回数無制限っちゅーヌルさ炸裂で
小学生にも及ばぬドへたれシューターのεπιちゃんもエンディングが拝めます (^^;;;;;

posted @ 22:56 | Feedback (3)

2009年6月29日 #

VS2010β : ラムダ式はmanagedでも使えんのけ?

VS2010β のC++はラムダ式をサポートしてくれよるワケだが、
ラムダ式はC++/CLIでも使えるんだろか....やってみた。

#include <cliext/vector>
#include <cliext/algorithm>

int main(){
    cliext::vector<System::String^> v;
    v.push_back(L"ラム");
    v.push_back(L"ダっちゃ!");
    cliext::for_each(v.begin(), v.end(),
      [](System::String^ s) { System::Console::Write(s);});
}

結果: 
 error C3498: 's': you cannot capture a variable that has a managed type
 → managed型の変数をキャプチャすんなやゴルァ

だそうです ヽ(`Д´)ノウワァァァン
目下のところ、ラムダ諦めて↓こーするっきゃなさげ。

namespace {
  struct print {
    void operator()(System::String^ s) const {
      System::Console::Write(s);
    }
  };
}

int main(){
    cliext::vector<System::String^> v;
    v.push_back(L"ラム");
    v.push_back(L"ダっちゃ!");
    cliext::for_each(v.begin(), v.end(), print());
}

System::Int32とか、C++native型とコンパチならば許してくれるみたいですが...

int main(){
    cliext::vector<System::Int32> v;
    v.push_back(123);
    v.push_back(456);
    cliext::for_each(v.begin(), v.end(),
                     [](System::Int32 n) { System::Console::Write(n);});
}

しょぼーん (´・ω・)

posted @ 15:59 | Feedback (7)

2009年6月25日 #

すこしのことにもせんだつはあらまほしきことなり

ボス「ウチの社内ページのアクセス数を解析したいのよ」
επιστημη「はぁ...生データはナニがあるんすか?」
ボ「Apacheが吐いたアクセス・ログが残ってるから、こいつを加工/集計してほしいのね」
ε「あー了解...ちょいちょいと作れる思うなりー」

...なんてなお話になりまして。 てかなんでこげなお仕事が舞い込むかなー...
データベースにでもぶっ込めばえぇわけですが、こんだけのために
SQLServerやらなんやら大げさなもん使いたくないてーことらしい。

で、生ログさえもってくればスタンドアロン機上のコマンドラインで
ちょいちょいと動かせる”ぷち集計器"をこしらえておりました。
しょぼーいマシンで動かせるてのが必須要求なんで.NET使わず
C++でひょいひょいと。データベース使わんとツラいので毎度毎度のSQLite

でね、生ログ(CSVみたいなもん)パースしてDBに押し込んぢまえば、
あとの集計やらなんやらはC++でどーこーって問題じゃなく、
SQL書いて実行するだけなのね。

が! あたしゃ自他ともに認めるDBおんち。SQLはド素人です。
あーでもね/こーでもねとこねくり回して結局「お持ち帰り」に(とほほーい)。

おうち帰ってメシ食って、茶ぁしばきながら(茶菓子つき)SQLと格闘しちょりました。
あ、メッセンジャに えムナウ さんみっけー♪ 教えてもらっちゃおーっと。

...五分で解決しました ^^;
いやまったく、「すこしのことにもせんだつはあらまほしきことなり」

# ムシャムシャしながらやった。DB屋なら誰でもよかった。今では関数かいてる。

posted @ 10:53 | Feedback (6)

2009年6月22日 #

押入れの小人たち

僕んち、テレビの地上波がサパーリなのでCATVです。
今までCATV屋さんは自前の光回線持ってなくて、NTTからヒモ借りてウチに供給してました。
このたびめでたく自前回線引っ張ったので張り替え工事させてくれ、と。
ついでにIP電話にしませんか? internetも乗り換えませんか? とのオファー。
試算すると電話代ソコソコお安くなり、その分でinternet利用料払えそう。
total-costでいいセンいくので乗り換えることにしました。

で、御覧のアリサマ。右から電話用VoIPモデム、internet用Cableモデム、無線LANのホスト、
今までのルータつきADSL-modemを取っ払うことになったので急遽ヨドバシで買ってきたルータ。
ルータのポートに空きがあるんでいずれNASとか買ったら押入れに直行しそう。

とにかく動きゃいーやでひっ掴んできたいっちばん安いルータ : 2,830円
イザというとき最も頼りになる何の変哲もない7mの直結用ケーブル : 1,430円
次の週末まで待てない! っちゅーからモロモロの雑用がてら仕事休んだ一日: priceless

不安なのがCATV-internetです。工事後しばらくは30Mbpsで繋がるけども、じきに8Mbpsに落っこちます。
30Mbpsで繋がる現在、実効10Mbps(1/3)くらい出てるんでカイチョーですが、これが8Mbpsに落ちると...1/3になったらヤダー

posted @ 18:55 | Feedback (2)

2009年6月15日 #

charは虚数ですか?

ネタ元 → char と signed char

ちゃっぴタンからメッセンジャのお誘い。
納得いかねぇ! らしいので追試しました(VC9,VC10β共)

#include <typeinfo>
#include <iostream>

int main() {
  signed char sc[1];
  char c[1];
  unsigned char uc[1];

  std::cout << typeid(sc).name() << std::endl;
  std::cout << typeid( c).name() << std::endl;
  std::cout << typeid(uc).name() << std::endl;
}

結果、signed char / char / unsigned char はそれぞれ別物だとさ。
char は 符号付き でも 符号なし でもない、と。 んなアホな。

posted @ 0:01 | Feedback (16)

2009年6月14日 #

ビギナ萌えー

C 値の保持にかんして

か、かわいぃぃ♪ "きゅうん"ときちゃう。
僕にもこんな頃があったんだよなぁ。
それが今ではすっかりスレちゃって...

posted @ 16:19 | Feedback (1)

2009年6月12日 #

以下についてちょっとフォロー

宿題だか課題だか知らないが、末尾再帰はループに置き換えることができます。

Wikipediaによりますと、

/* 変換前 */
T_0 func (T_1 a_1,T_2 a_2,..., T_n a_n ) {
   P
   return func(na_1 , na_2 ... na_n); 
}

この形をした(末尾)再帰は:

/* 変換後 */
T_0 func (T_1 a_1,T_2 a_2,..., T_n a_n ) {
   while (1) {
     P
     T_1 nTmp_1 = na_1;
     T_2 nTmp_2 = na_2;
        :
     T_n nTmp_n = na_n;
     a_1=nTmp_1;
     a_2=nTmp_2;
      :
     a_n=nTmp_n;
   }
}
/* T_i は型、P は手続き、na_i は式を表す。それ以外の識別子は変数を表す。
 * Pの中に最低1個のreturn文がないと無限ループあるいはスタックオーバーフローになる。
 */

...だってさ。
再帰関数であまりに有名な階乗(factorial)についてやってみましょ。

/* 元ネタ */
int fact(int n) {
  if ( n == 0 ) return 1;
  return n * fact(n-1);
}

こいつを上記 変換前 の形に整形します。

int fact_(int x, int n) {
  if ( n == 0 ) return x; // ここが P に相当
  return fact_(x*n, n-1); // 末尾再帰
}

int fact(int n) {
  return fact_(1,n);
}

んでもって 変換後 にあるルールで変換します。

#include <iostream>

int fact_(int x, int n) {
  while ( true ) {
    if ( n == 0 ) return x;
    int nTmp_1 = x*n;
    int nTmp_2 = n-1;
    x = nTmp_1;
    n = nTmp_2;
  }
}

inline int fact(int n) {
  return fact_(1,n);
}

int main() {
  std::cout << fact(4) << std::endl;
}

おー、できたできた。

posted @ 11:35 | Feedback (0)

2009年6月11日 #

以下について教えてあげよう♪

宿題だか課題だか知らないが、文字列変換問題ですな。

・大文字は小文字に、数字は'0','1','2'...を'9','8','7'...と反転させる。
・ただし、'#'以降の文字は変換しない。
・例として "Abc012_59F_#012Gh"を渡した場合の戻り値は "abc987_40f_#012Gh"となる。

ちょーしぶっこいてラムダ使って解いてみるなり。

#include <iostream>
#include <string>
#include <algorithm>

int main() {
  std::string str = "Abc012_59F_#012Gh";
  std::cout << '[' << str << ']' << std::endl;

  std::transform(
    str.begin(), 
    std::find(str.begin(),str.end(), '#'),
    str.begin(),
    [](char x) -> char {
      if ( x >= '0' && x <= '9' ) return '9' - x + '0';
      if ( x >= 'A' && x <= 'Z' ) return x - 'A' + 'a';
      return x;
    }
  );

  std::cout << '[' << str << ']' << std::endl;
}

posted @ 23:11 | Feedback (14)

2009年6月9日 #

でゅあるですぷれいなりー

先週末、アキバにひとっ走りしてディスプレイ買ってきたなりー。

Faithに転がってたFull-HDのテケトーなのをひっつかんできました。
4:3-17"と16:9-21.5"だとタテがおおむね同じでラッキィです。

グラボからはDVIがふたっつ出てたんでHDMIでデカい方/Dsubで今までのに接続。
デカい方はDsub入力余ってるんでハコサブローつなぎました。
# MassEffect 進んでません...とことんFPSおんちなり orz

わーい、これでMSDN開いたままコード書けるよーん♪

# てかね、この環境に慣れちゃうと会社のショボいマシンがツラいす。
# 起案書いた当時はかなりのもんだったのにー ← PentiumD/4G-mem/GeForce7600

posted @ 21:40 | Feedback (14)

ゆってみるもんだねー

なんでやねん のつづき。

Feedbackに文句いうたった。
準でないもんをstdに置くなやゴルァ(゚Д゚#)」

お返事キター

   おっしゃる通りです。 私たちはすでにこちらを修正し、
   
Visual Studio 2010 の次期リリースでの変更を予定しています。

...あれまずいぶんと素直じゃないの♪


posted @ 9:56 | Feedback (4)

2009年6月7日 #

勉強会あふたけあ : ラムダ式

勉強会おつかれっしたー。

変数名がどーのコメントがどーのなんてなお話は誰もが
ヒトコトありそうなネタなんで、程よいツッコミが心地ようございました。

で、懇親会の席であんどちんからの質問:

  vector<int> primes;
  for_each(prines.begin(), primes.end(), 
           [](int x) { cout << x << ' '; });
              ~~~←ここに auto って書けないの?

えー、残念ながら。

ラムダ式は変数に押し込むことができるんですわ。

auto print = [](int x) { cout << x << ' ';};
for_each(primes.begin(), primes.end(), print);

みたいに。
こんなケースがあるもんだからラムダ引数をautoにできんのです。

[追記] 片桐姐さんにプーアルもろたー♪

いぃ感じに年を重ね、落ち着いた味わいでございますよ。

posted @ 0:47 | Feedback (3)

2009年6月3日 #

6/6 わんくま東京勉強会

今週末のわんくま東京勉強会は溜池山王ですってよ。

...僕がトリ? まいったねー。今回正直準備不足。
仕込みがロクにできてません。50分もたせる自信がねぇ。
επιστημηの無様なgdgd状態が見たいならゼヒいらっしゃいませ。

とはいえせっかく足を運んでいただいたミナサマにはなにかしら
お持ち帰りいただきたいわけで、Visual Studio 2010β で
サポートされる Visual C++ の新機能(C++0X対応分)について、
その目玉となるラムダ式あたりをさくっと紹介できればなーと考えておりますです。

posted @ 8:53 | Feedback (2)

2009年6月2日 #

Mass Effect 始めました

あちこちで始まってます、Mass Effect

ノベル・ゲームの進行にガン・シューティングの挟まった
RPGてゆーの? そんな感じ。

物語として面白いなーと思います。
ガン・シューティングはめっさ苦手なのでお話の続きが
なかなか読めずに凹んでます。

επι的嗜好としてはRPGはブルードラゴンとかロスト・オデッセイとか、
クラシックなコマンド・バトルでストーリーを追うタイプが好みです。
Mass Effectのストーリはすっごく面白い(まだまだ始まったばっかだけど)。
少しずつ、じっくり遊びましょうかね♪

# 合間にLode Runnerやってます。25th アニバーサリなんだって。
# その昔PC-8801で遊んでました ナツカチー

posted @ 9:00 | Feedback (6)

2009年5月26日 #

あまぞんでおかいものふたつ

ひとつめ: 電気ケトル
茶藝部顧問には必須アイテムでございます。
長いこと愛用してたやつ、水漏れを起こしちゃってね。
これなしでは生きていけません。NO-TEA, NO-LIFE。

ふたつめ: DS-10
京王技研のアナログ・シンセ MS-10 を ニンテンドウDS で再現したやつな。
冨田勲とかせっせと聴いてたおやぢにはアナログ・シンセの音はグっと
くるもんがあるわけよ。

印税入って無駄遣いちうなう。

posted @ 13:31 | Feedback (8)

2009年5月22日 #

捨てる神あらば拾う神あり

愛機がお星さまになっちゃったもんだから想定外の
支出に少なからず凹んでおったわけですが

先月出した「C++テンプレートテクニック」が
めでたく重版となりました。っしゃあ!
ひと月経たずして重版てーのは立派なもんです。
これでマザボが買えますヨカタヨカタ

お蔭様でなかなかの評判をいただいております。
アキラくん、ほんとありがとです&お疲れ様でした。
願わくは三刷、いや四刷までいきたいなーと
できたてホヤホヤのお星さまに願かけております。

posted @ 11:18 | Feedback (4)