エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

2009-01-01から1年間の記事一覧

デスマーチ

目の前の――あるいは長期にわたる経験から学ばない指揮官は、無駄な死がいずれは勝利につながるとでもいうように、やみくもに戦力を投入しつづけるのです はからずしも望まぬ司令官になってしまった主人公の話「彷徨える艦隊」の第2巻での、その主人公のセリ…

Leopardはじめました

周回遅れでiBookにLeopardを入れました。本当はこの秋にでるSnow Leopardまでいまの環境で引っ張りつもりだったんですが、Snow LeopardがPowerPCをサポートしないと知り(手持ちのiBookはPowerPCマシン)、観念してLeopardを購入。丸一日かけてLeopardの環境に…

QuickSortの実装・補遺

少し整理。あとポインタだけでなく、イテレータ(ランダムアクセスイテレータ)でも使えるように記述を少し変更。 template<typename T> void swap(T& lhs, T& rhs) { T temp(lhs); lhs = rhs; rhs = temp; } template<typename iterator_t> void qsort(iterator_t begin, iterator_t end) { if(</typename></typename>…

QuickSortの実装を学習しなおしました

でも、釈然としないのはなぜだろう? template<typename T> void swap(T* lhs, T* rhs) { T temp = *lhs; *lhs = *rhs; *rhs = temp; } template<typename T> void qsort(T* begin, T* end) { if((end - begin) <= 1) return; T* left = begin; T* right = end - 1; T pivot = *right;</typename></typename>…

QuickSortの実装を忘れた…

わけあって、ソートのプログラムを書こうとしたんですが。 あれ、C/C++でどうやって実装するんだっけ?こことか読んで、勉強のしなおしが必要です。 Haskellならやりたいことをそのまま書き連ねるだけなので楽でいいのに…。 qsort [] = [] qsort (a:as) = (qs…

もっとエキスパートがいてもいいんじゃないだろうか

このところ、他のチームのソースコードを入手して、時間があるときに眺めているのですが。「ここのチームのコードはきれいだっ」というのにお目にかかれず。どちらかというと、「なんだこれは?」というコードを目にすることもすくなくなく。だからといって自…

統計的に正しいランキングを行う方法をC++とかHaskellとかで書く

http://d.hatena.ne.jp/makiyamakoji/20090512/p1のコードを参考に(というか、ほとんど一緒ですが)C++で書き直してみた。 #include <algorithm> #include <stdexcept> #include <cmath> double calcNormalDistPercentile(double percent) { if((percent <= 0) || (1 <= percent)) { throw </cmath></stdexcept></algorithm>…

聴くことと話すこと、書くことと読むこと

このあいだ、仕事場の電話を取ったら英語で話しかけられました。相手がゆっくりと簡単な言い回しをしてくれたのと多少なりとも英語番組を聴いたりしていたおかげか、聞き取りにはなんの問題もなかったんですが…。如何せん言葉が出てこない。言っていることは…

if N is included in X ...

C++

// 演算子を定義する部分 template<typename T, typename U> struct Operator { explicit Operator(const T& lhs) : lhs(lhs) {} const T& lhs; }; template<typename T, typename U> inline Operator<T, U> operator % (const T& lhs, U) { return Operator<T, U>(lhs); } enum ISINCLUDEDIN { isIncludedIn }; template</t,></t,></typename></typename>

メッセージのダブルディスパッチ

C++

…のサンプル。 GitHub - mattsan/MessagingSample メッセージオブジェクトを作るのにmapで生成関数を選択しているのにちょっとコストがかかる。実行時に初期化してるし。 メッセージの数や種類がプログラムの動作中に変化することは少ないので、これをローコ…

「適切な契約期間は?」

このあいだのエントリでも書いたように、雇用について関心が高まっている今日この頃。あっ、と気付いたのがG.W.ワインバーグの著書「コンサルタントの道具箱」で契約期間について書かれた一節。 「適切な契約期間は?」という節で、契約は短期にしなさい、依…

diffをつくる(3) -後編

C++

任意のコンテナに対してdiffをとれるようにテンプレートにしました。 ポイントはテンプレートになっているのが、diffの入り口Diff::ond関数だけというところです。このためdiffを求めるプログラムの大半をバイナリとしてライブラリ化することもできます。ま…

diffをつくる(3) -中編

C++

経路を記憶するしくみを追加し、実際に文字列を比較してみます。 コードの様子が変わったように見えるかもしれませんが、やっていることの実質はおなじです。 メンバのtree_に編集の操作(delete/common/add)がツリーとして記録されます。diffの最後で見つか…

diffをつくる(3) -前編

C++

「O(ND)」というのは、この手続きにかかる計算量のことですが、それがそのままアルゴリズムのことをさす言葉になっているようです。 詳しい解説はこのページなどをみてもらうとして、ともかく実装。 #include <string> #include <vector> #include <stdexcept> int snake(int x, int y, </stdexcept></vector></string>…

diffをつくる(2) -補遺

C++

diffをつくる(2)で掲載したコードは文字列を比較するコードですが、std::stringを他のコンテナに替えればそのコンテナどうしのdiffがとれます。 任意のコンテナのdiffをとれるようにテンプレートにしたものを掲載。この例ではstd::stringのdiffとstd::vector…

diffをつくる(2)

C++

昨日のコードでつくったグラフをもとに、SES(Shortest Edit Script)を見つけるコードを追加しました。体裁が変わったように見えますが、makeGraphまでは基本的に昨日と同じコードです。 今日のキモはfindSESのコード。もっとも少ない手順で一方の文字列から…

diffをつくる

C++

わけあって、diffを自作中。で、いろいろネット上で情報を集めている最中。 検索をかけてみるとこのページがあちこちからリンクされていたので、読んでいるんですが…後半部分がまだよくわかりません。 仕方がないので、理解したところまでコードに変換してい…

エンジニアの閉塞感

タイトルがよくないと思う。前著にあやかってタイトルが決められたんだと思うんですが、内容とあってないような気がします。個人的な話ですがそのタイトルから敬遠していた部分があります。最近になって著者のブログなどを拝見するうちに興味がわいて読んで…

Gitのpushがよくわかりません

バージョン管理には久しくSubversionを使っていて、その後分散バージョン管理が便利そうだとMercurialを使いはじめました。 さらにその後、Gitもわりと使われていることを知り、少なくとも使えるようにしておこうと一通り使い方を調べてみたんですが…git-pus…

「数学ガール」発掘しました

以前、部屋の片付けをしたときにどこかの箱に放り込んでそのまま行方不明になっていた「数学ガール」を、今日ようやく発掘しました。これでコミックス上巻を読んでから気になっていた気になっていたことが解消。 なにが気になっていたかというと、ミルカさん…

アジャイルと効力感

無気力の心理学―やりがいの条件 (中公新書 (599))作者: 波多野誼余夫,稲垣佳世子出版社/メーカー: 中央公論新社発売日: 1981/01/22メディア: 新書購入: 3人 クリック: 52回この商品を含むブログ (35件) を見る 最近読んだ本。 効力感というのは、おおざっぱ…

採用前の活動は誰のため

ちょっと古いニュースですが、先ほど初めて目にしたので。 ケータイ「契約」実績で「特別採用」 学生から不満と批判の声 : J-CASTニュース 最初、リンクされていたブログの記事などで概要を目にしたときは「そんな乱暴な話があるのか」と思ったんですが、今…

続・S式パーサ

C++

文字列(二重引用符で囲まれた文字列)と整数値を識別するようにしました。 パースに失敗した時にgotoで後始末に跳ぶようになっています。この部分、当初は例外で実装しようとしたんですがパースエラーは例外じゃないだろう、ということで書き直し。いろいろ言…

S式パーサ

C++

無駄にでかくなってしまいました。 半端ですがさらしておきます。できること: S式をパースしてオブジェクトにします。オブジェクトは出力できます。 (,),.,空白以外は全部識別しに使える文字扱いです。引用符とか関係ありません。

著作物は誰のものか

このリリースで注目すべき点は、彼らがJASRAC登録を回避したことだった。業界の常識では、メジャーの流通に乗せるなら著作権登録は当たり前なわけだが、彼らはその常識には従わなかったわけだ。そうした理由は簡単で、ユーザーの二次利用を妨げないためだ。…

UMTP認定試験を受けてきた

UMTP認定試験去年のLevel1 Test1に続き、Level1 Test2を受けてきました。今回受験するにあたって要項をよく読んでみると、Test2が合格すればLevel1認定されるとのこと。ってことは、去年のTest1の受験は意味なかったのかと思えてくるけれど、おかげで弱点わ…

自作の中置演算子で広がる世界

C++

おとといのエントリで書いた演算子を、汎用的に使えるようにしてみました。 // Operators.h #ifndef OPERATORS_H #define OPERATORS_H template<typename T, typename U> struct Operator { explicit Operator(const T& lhs) : lhs(lhs) {} const T& lhs; }; template<typename T, typename U> inline Operator<T, U></t,></typename></typename>…

自作の演算子その2

C++

#include <iostream> // 例:三次元ベクトルクラス class Vec3 { public: explicit Vec3(double x = 0, double y = 0, double z = 0) : x_(x), y_(y), z_(z) {} double x() const { return x_; } double y() const { return y_; } double z() const { return z_; } Vec3</iostream>…

今日目にした驚愕のコード

C++

array.operator[](i); foo.operator=(bar); 普通より難しいことしていると思う…。 どうやってoperator overrideを学んだんだろう…註:「こんなことができるんだ」というのではなくて、「なんでわざわざ面倒な書き方してるんだ」という驚愕です。念のため

わたしはコンパイルスイッチがきらいです

// Foo.h #ifndef FOO_H #define FOO_H typedef struct foo_tag { int hoge; #if defined(USE_FUGA) int fuga; #endif int uhyo; } Foo; #endif//FOO_H // IncUhyo.cpp #include "Foo.h" void incUhyo(Foo* foo) { ++foo->uhyo; } // Main.cpp #include <stdio.h> #in</stdio.h>…