英検(2) -苦手意識-

 ちょっと前の話ですが、7/11は選挙があったのですが、私にとっては英検の2次試験(面接)がありました。
その日は準備不足もたたって朝からブルーになっていた。準2級を受けた時は簡単だったので気楽に受験できたのだが、2級の問題ではもう少ししゃべらないとダメなようで『イヤ・・・俺にはむり・・・』という感じで、受験する前から敗北感でいっぱいだった。
昼過ぎに会場に入り空調の効かない講堂で結構待たされ悶々としている中で余計なことを考え出した。
ここ10年ぐらい、散発的ではあるが英語の勉強をしてきて、楽しいと思ったこともなくせいぜい周りに、程度の低い自慢をする程度だったのだが、英検2級に合格したい思いとムリという思いが交錯してなんとも言えない緊張感を持ちながら『テストは何時や~』と待っていた。
しまいには気持ち悪くなり(多分、暑さのせいなのだが・・・)、心を落ち着かせようと『平常心、平常心。普通に会話したらええから・・・』と自分に言い聞かせ。面接に挑んだ。
面接官は、欧米人男性の方でどうも朝からのテストで相当疲れているらしく、「あ、はい、じゃこれ読んで」ってなノリで流して来た。
こちらも拍子抜けした感があり、力が抜けて英会話の授業のノリで受験してしまい、テスト中に思わず、「○○の意味ってなんですか?」みたいなことを聞いてしまった。
その時に面接官が顔が曇り、『この男は何を聞いとんのじゃ!』みたいな顔をした。

もちろんテストなので単語の意味を聞くのはご法度で、十数年ぶりの自己嫌悪で悶々とした日々が続いたが、今日の速報を見ると無事に合格していた。あぁ~本当によかった。

IT系の資格試験の場合は合格でも不合格でもなんとも思わないのだが(なぜなら実際に仕事をしていく上で資格が役にたったことは一度もないので)、英検の場合は本当にうれしかったです。次回もストレスに負けないようにテストに臨もう。
2010-07-20 | コメント:0件



眼精疲労なのでブログを読みやすくした

2か月程前になりますが、どうも目の調子が悪く眼鏡を変えました。少し度を弱くしたのですが、調子が戻り一安心していたのですが、最近、また調子が悪くなったようで、一部見えなくなった(しばらくすると見えるようになる)ので、慌てて眼科に行きました。
検査では異常が見当たらずお医者さん曰く『眼精疲労』ではないかということで目薬をもらいました。
確かに眼精疲労のようで、目薬をさすと一発で治りました。ただ、根本的にどうも目が疲れているようで、大事にしないといけないようです。

という訳でもないですが、ブログのページを変えました。コードを読みやすくしました。
今から思うと前のデザインは、やっつけ感いっぱいでした・・・。
2010-07-14 | コメント:0件



freshmeat

ADPの布教活動の一環ですが、freshmeatというソフトウェアの告知サイトがあったので登録しました。
ADP | freshmeat.net
freshmeat自体は、オープンソースへの参加は難しくない(5)作ってみる 前編 で知りました。freshmeatのサイトは英語が使われているのですが、なかなか親切なサイトで、以下のように私のつたない英語を修正してもらえました。

『ADP (Another Data Processor) is a programing language is designed for Web database programing. It is a scripting language and a lightweight programming language in which it is possible to mix SQL easily. It is easy to install.』

ちなみに元の英文は・・・まぁやめましょう。
2010-07-12 | コメント:0件



未踏ソフトの説明会に行ってきました

ADPを開発する上で避けて通れないのが、『どうやって流行らすか?』になります。
もっとも、自己満足と言われようが何と言われようがADPの開発は続けますし使ってもいくと思うので、流行らなくてもという良いという考えもなくもないのです。
しかし、個人でやる開発ならそれでOKなのですが、人と仕事をする上ではこの手のこだわりが障害になったりしますし、この手の複雑なソフトウェアは広く動作させてフィードバックをもらうことが品質面からも重要になります。

要するにプロのエンジニア目線で考えると、自分が作った言語とは言えマイナーなプログラミング言語にかかわっているヒマはないということになるのですが、であればメジャーにすればよいということで『流行らそう』ということになりました。
もちろん、大前提として、流行らすに値する言語かということもありますが、そのあたりについてはまたの機会に書きます。

で、具体的に何をするねんって話になるのですが、色々考えているのですが、もちろんこのブログも布教活動の一環としてやっているのですが、その1つとして、未踏ソフトに挑戦するということがあります。ちなみにその後は、LLイベント(http://ll.jus.or.jp/)にパネリストとしてADPを布教することを目標にしております。

未踏ソフトですが、以前は2008年の下期に応募したのですが、残念ながら採択にならず、その後仕事が忙しくなったので応募していなかったのですが、今年はタイミングよく応募できそうです。
そのような訳でちょっと知らなかったのが、いつからか年齢制限(というか年齢での優遇)が35歳未満になったらしく、今年40の私としては、『いまさら応募するのもな~』という思いと、制度の趣旨が『人材発掘』つまり天才を発掘しようということらしく『じゃなんで俺を選ばないの?』という訳のわからん自信とが交錯し、どうするか迷う面があるのですが、とにもかくにも人から評価を受けるというのは非常に大事なことなのではあります。で決めかねています。

説明会の内容ですが、私的には面白い内容でした。単なる制度の説明だけでなくちょっと聞けない技術的な話もありましたので、たまにはこういうイベントに参加するのも良いものだと思います。これからもやるでしょうから未踏に応募する人は一度説明会に参加されることをお勧めします。
2010-07-09 | コメント:0件



C++/STL 1GBのintのソートにかかる時間 2010

未踏の説明会の続きですが、説明会の中に技術的なセッションもありまして、グーグル株式会社のソフトウェアエンジニア 鵜飼さんの講演が面白かったのですが、その中で、『1GBのintのソートにかかる時間は、封筒の裏計算で、30秒』というのがありました。

パフォーマンスには一家言ある私ですが、さすがに1GBのintのソート時間にはピンと来ませんでした。
という訳で、ホントかどうかやってみました。


#include <vector>
#include <algorithm>
#include <iostream>
#include <time.h>

using namespace std;

int main(void)
{
    vector<int>        values;

    srand(time(0));
    // vectorに適当な値を入れる
    for ( int i = 0; i < 1024*1024*1024 / sizeof(int); i++ ) {
        values.push_back((int)(rand()*rand()-i));
    }

    // ソートする
    clock_t        t = clock();
    sort( values.begin(), values.end());
    cout << "Time(sort) is "
         << (double)(clock() - t) / CLOCKS_PER_SEC << "sec." << endl;

    return 0;
}


実行時間(Core i7-920 Windows7 コンパイルVC++2008 リリースモード 64ビットモード)は以下になります。上記のプログラムですが、32ビットモードでは動作しません。32ビットプロセスはリニアに1GBのメモリは確保できないです。

Time(sort) is 43.895sec.

なるほど、確かに30秒からそう離れていません。
ちなみに、この手の封筒の裏計算ですが、桁が違わなければOKと考えてよいでしょう。なので、細かい値の違いが問題になる場合は、実アプリでキチンとベンチマークをとるのがよいでしょう。
この手の結果の受け止め方ですが、おそらく一般の業務アプリを作成する人にとっては『理論的限界値』程度に思っていた方がよいでしょう。つまり

 1秒間に数百万個のint型のソートができる。数千万個になったら要注意。

と思っておけばよろしいかと思います。実際に私の経験でも行数が数百万件のソートをSQLで行うのはあまり問題になることはなかったです。(もちろんメモリが十分にあればの話ですが)。

実行時間の詳細ですが、説明では以下のとおりでした。
 ・要素を比較する回数(ソートのオーダnlogn)から、
  2^28 * log(2^28) → 2^28 * 28 → 2^28 * 2^5 → 2^33(2の33乗)回
 ・比較に際してのL1キャッシュのアクセス時間 0.5ns / 回
 ・比較に際してのブランチペナルティ 2.5ns / 回(2回に1回ペナルティがあると仮定する)

 実行時間 2^33 * (0.5 + 2.5)nsec = 25.76sec 約30秒

ただ、上記の計算ですが、ブランチペナルティが全体の速度を決定しているというのはいささか疑問があります。上記の場合、メモリのアクセス回数から計算した方が良いのでは?と思います。
つまり、
 ・要素を比較する回数(ソートのオーダnlogn)から、
  2^28 * log(2^28) → 2^28 * 28 → 2^28 * 2^5 → 2^33(2の33乗)回
 ・ 比較に際してのメモリアクセス回数 2回(リード&ライト) 2*4バイト
 ・キャッシュライン 32バイト

 ・メインメモリへのアクセス回数 2^33 * 2 * 4 / 32 = 2^31 回
 ・メインメモリアクセス性能 1回のアクセス 10nsec(DDR3のレイテンシーから)

 実行時間 2^31 * 10nsec = 21.47sec

うーん、数値的には似たり寄ったりであまり変わらないか・・・・
2010-07-09 | コメント:0件
Previous Page | Next Page