2009年7月2日
#
「C++テンプレートテクニック」おかげさまでぼちぼちと売れてくれました。
アフィリエイトでせしめたギフト券がそこそこ貯まり、
がんばった自分へのご褒美にゲームを一本。
「デススマイルズ」
アーケード・シューティングのXBOX移植っす。
なんとまぁ、Continue回数無制限っちゅーヌルさ炸裂で
小学生にも及ばぬドへたれシューターのεπιちゃんもエンディングが拝めます (^^;;;;;
2009年6月29日
#
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);});
}
しょぼーん (´・ω・)
2009年6月25日
#
ボス「ウチの社内ページのアクセス数を解析したいのよ」
επιστημη「はぁ...生データはナニがあるんすか?」
ボ「Apacheが吐いたアクセス・ログが残ってるから、こいつを加工/集計してほしいのね」
ε「あー了解...ちょいちょいと作れる思うなりー」
...なんてなお話になりまして。 てかなんでこげなお仕事が舞い込むかなー...
データベースにでもぶっ込めばえぇわけですが、こんだけのために
SQLServerやらなんやら大げさなもん使いたくないてーことらしい。
で、生ログさえもってくればスタンドアロン機上のコマンドラインで
ちょいちょいと動かせる”ぷち集計器"をこしらえておりました。
しょぼーいマシンで動かせるてのが必須要求なんで.NET使わず
C++でひょいひょいと。データベース使わんとツラいので毎度毎度のSQLite。
でね、生ログ(CSVみたいなもん)パースしてDBに押し込んぢまえば、
あとの集計やらなんやらはC++でどーこーって問題じゃなく、
SQL書いて実行するだけなのね。
が! あたしゃ自他ともに認めるDBおんち。SQLはド素人です。
あーでもね/こーでもねとこねくり回して結局「お持ち帰り」に(とほほーい)。
おうち帰ってメシ食って、茶ぁしばきながら(茶菓子つき)SQLと格闘しちょりました。
あ、メッセンジャに えムナウ さんみっけー♪ 教えてもらっちゃおーっと。
...五分で解決しました ^^;
いやまったく、「すこしのことにもせんだつはあらまほしきことなり」
# ムシャムシャしながらやった。DB屋なら誰でもよかった。今では関数かいてる。
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になったらヤダー
2009年6月15日
#
ネタ元 → 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 は 符号付き でも 符号なし でもない、と。 んなアホな。
2009年6月14日
#
C 値の保持にかんして
か、かわいぃぃ♪ "きゅうん"ときちゃう。
僕にもこんな頃があったんだよなぁ。
それが今ではすっかりスレちゃって...
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;
}
おー、できたできた。
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;
}
|
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
なんでやねん のつづき。
Feedbackに文句いうたった。
「標準でないもんをstdに置くなやゴルァ(゚Д゚#)」
お返事キター
おっしゃる通りです。 私たちはすでにこちらを修正し、
Visual Studio 2010 の次期リリースでの変更を予定しています。
...あれまずいぶんと素直じゃないの♪
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にできんのです。
[追記] 片桐姐さんにプーアルもろたー♪

いぃ感じに年を重ね、落ち着いた味わいでございますよ。
2009年6月3日
#
今週末のわんくま東京勉強会は溜池山王ですってよ。
...僕がトリ? まいったねー。今回正直準備不足。
仕込みがロクにできてません。50分もたせる自信がねぇ。
επιστημηの無様なgdgd状態が見たいならゼヒいらっしゃいませ。
とはいえせっかく足を運んでいただいたミナサマにはなにかしら
お持ち帰りいただきたいわけで、Visual Studio 2010β で
サポートされる Visual C++ の新機能(C++0X対応分)について、
その目玉となるラムダ式あたりをさくっと紹介できればなーと考えておりますです。
2009年6月2日
#
あちこちで始まってます、Mass Effect
ノベル・ゲームの進行にガン・シューティングの挟まった
RPGてゆーの? そんな感じ。
物語として面白いなーと思います。
ガン・シューティングはめっさ苦手なのでお話の続きが
なかなか読めずに凹んでます。
επι的嗜好としてはRPGはブルードラゴンとかロスト・オデッセイとか、
クラシックなコマンド・バトルでストーリーを追うタイプが好みです。
Mass Effectのストーリはすっごく面白い(まだまだ始まったばっかだけど)。
少しずつ、じっくり遊びましょうかね♪
# 合間にLode Runnerやってます。25th アニバーサリなんだって。
# その昔PC-8801で遊んでました ナツカチー
2009年5月26日
#
ひとつめ: 電気ケトル
茶藝部顧問には必須アイテムでございます。
長いこと愛用してたやつ、水漏れを起こしちゃってね。
これなしでは生きていけません。NO-TEA, NO-LIFE。
ふたつめ: DS-10
京王技研のアナログ・シンセ MS-10 を ニンテンドウDS で再現したやつな。
冨田勲とかせっせと聴いてたおやぢにはアナログ・シンセの音はグっと
くるもんがあるわけよ。
印税入って無駄遣いちうなう。
2009年5月22日
#
愛機がお星さまになっちゃったもんだから想定外の
支出に少なからず凹んでおったわけですが
先月出した「C++テンプレートテクニック」が
めでたく重版となりました。っしゃあ!
ひと月経たずして重版てーのは立派なもんです。
これでマザボが買えますヨカタヨカタ
お蔭様でなかなかの評判をいただいております。
アキラくん、ほんとありがとです&お疲れ様でした。
願わくは三刷、いや四刷までいきたいなーと
できたてホヤホヤのお星さまに願かけております。