面接。

面接行ってきた。

「学生時代一番打ち込んだことはなんですか?
 そこで得たものはなんでしょうか。

「ゲームです。
 主にギャ○ゲーに打ち込みました。
 得たものは…
 えー、それ、やりすぎで留年しました。
 結果として学生生活をもう一年得ました。
 このことは大きかったと思います。」

「あー…そ、そうですか。
 えー…。
 …。
 それでは次の質問に行きたいと思います。
 もし弊社に入られましたら、どのようなことをしたいですか。
 できるだけ具体的にお願いします。

「大人買いです。
 初任給をもらったら、大人買いしたいです。
 具体的には―――

「あー、結構です。
 …それでは最後の質問です。
 皆さん、それぞれ何らかの課題をお持ちだと思いますが
 ・その課題とは何か
 ・課題の克服方法は何か
 ・現在どの程度克服できているか
 お答えください。

「最近引き籠もりがちなんですが、それを克服したいと思います。
 克服方法としましては「NHKにようこそ!」を読み始めました。
 どの程度克服できているかですが、
 連載がまだ終了しないので何とも言えません。

「…ありがとうございました。

「ありがとうございました。

…あー、くそ。 落ちたくせーーー。

まじありえねー。
Gossip | - | trackbacks (0)

Pending

ふらっしプレーヤ
http://ncho.hp.infoseek.co.jp/
 FLASHファイル(拡張子swf)専用のプレーヤ
・UIが好みでないが何となく

C++ to HTML
http://www.cmo.jp/users/zakincho/
 C/C++ のソースコードを HTML に変換する
・見た目綺麗になるけどコピペしてそのまま使えなくなるのが残念
・結局テキスト(ソース)ファイルへのリンクを張るのがいいのかも

FinePrint
・プリンターへの出力を画像ファイルとして保存したり

winRAR
・RAR圧縮のテストのために渋々導入

Jane Style
・2chブラウザ
・他は試していないが特に不満はない

TeXインストーラ3
http://www.ms.u-tokyo.ac.jp/~abenori/mycreate/

電卓
・関数電卓はプログラミング時に重宝する


IE
MSN Messenger

拡大印刷
 …印刷出力を拡大して複数の紙面に分割して印刷するプリンタドライバ
  ・ポスター等の作成に



CD2WAV32
 …オーディオCDからオーディオデータを抽出
  ・GoGo.DLLを使用すると直接MP3を出力可能。

Exact Audio Copy
 …オーディオCDからオーディオデータを抽出
  ・ドライブによってはコピーコントロールCDのリッピングも可能。   やや古いドライブだと出来るように思う。

APlayer
 …複数の動画ファイルを簡単便利に連続で再生する
  ・ムービーのフレーム単位での再生が可能なプレイヤーということで選んだ。
  ・「Media Player Classic」よりも起動が早い。


AlquadeLite - Alquade フリー版


<できがいいと思ったゲーム>
洞窟物語


<いいかもしれないと思いつつ試用してないソフト>
窓使いの友
win高速化 xp+
edit mtu
ボイスマジック
フォントインストーラーsakura
ICONぱくら
Skype
Tools | - | trackbacks (0)

Packaged

<パッケージソフト>
Word Excel Power Point
Photoshop
Illustrator
読んde!!ココ Ver.9
ATLAS V9(翻訳ソフト)
ATOK 17
After Effects
B's Recoder

<使う頻度が低い>
Drive Image 2002
PartitionMagic
Painter
DivX
XviD
ExSTAND(絶版のためバックアップしたバージョンを使うこと)
Teleport Pro
ファイル特急便
NT Registry Optimizer
RegCleaner
Aladdin Expander 5.1J
WindowLister.chm

<ドライバ>
タブレットドライバ
PCツナイデントUSBリアルショック2ドライバ


プリンター BJ S600
http://canon.jp/ キャノン株式会社

タブレットドライバ
http://www.wacom.co.jp/ WACOM

MOユニット LMO-S638HN
USB-SCSI変換ケーブル LUB-SC
http://www.logitec.co.jp/ ロジテック株式会社

HDDもっとはい〜るKit NV-HD350W
http://www.novac.co.jp/ 株式会社ノバック
※IEEE接続なら一切のインストール不要
Tools | - | trackbacks (0)

ブログのデータのバックアップ

ここに色々メモを残すようにしだしたので
データが消えたりすると結構困るんじゃないかと思い始めた。
なのでバックアップすることにする。
どうするのがいいんだろうか。
ターミナルから何かコマンド打ち込めばいいんだろうが…

と思っていたらWinSCP3にそのまんま Commands > Synchronize というのがあった。

同期したい両フォルダ内を表示して「Direction」を「Local」にしてOK。
PC | - | trackbacks (0)

Archive

Explzh
 …万能アーカイバ
  ・全ての不満はオプションの設定で解消される、このすごさ

Archive Converter
 …書庫変換ツール

Extract it!
 …解凍専用ソフト
  ・「Melt it!」の代わりにしようと作った
  ・送るで即時解凍&元ファイル削除のために使っている

UnifyZip
 …Zipファイル用ユーティリティ
  ・書庫から指定の拡張子を持つ不要なファイルを消したり
  ・圧縮率を揃えたり

XacRett
 …解凍/復元専用ソフト
  ・DLLや実行ファイル等の外部モジュールを利用せずに40種類以上のファイルを復元可能
  ・まっさらな環境で何かを手っ取り早く解凍したい場合に
Tools | - | trackbacks (0)

プログラミング。

どっかの掲示板で見かけたやりとり。

プログラミングの話。

誰かが

「こういうことがしたいと文章で書いたら
 プログラムができあがるようにならないかなぁ。」

と言った。

それへのレス。

「今だってそう変わらないだろ。
 検索エンジンにやりたいことのキーワード書き込んで
 出てきたのをコピペして組み合わせるだけ。」

あぁ、そーかも…!
なんか肩の力抜けた。

…まぁ、コピペですまないことも多いけど。
Develop | - | trackbacks (0)

LinuxでMPEG2再生(2)

mpeg2decのソースを読んでMPEG2再生プログラムを作った。

音も出なければ、表示タイミングの同期もとれてないけど…
って、それって、mpeg2decのまんまやん。
実際表示部分を先日のSDLにすげ替えただけなんだけど
解読したことに意味があると思う。

自分がいじくったプログラムで
動画がデコードされて再生されるってのに
ちょっと感動した。

とりあえずMPEG2再生まわりはMPEG2の構造をもっと学んで
具体的な処理が決まるまで休止。

プログラムで次かかれるのはソケットプログラミングか。
Research | - | trackbacks (0)

LinuxでMPEG2再生

つまりは、プレイヤーを作るってことなのかな。

デコードはライブラリに任せることにする。
libmpeg2というのが有名っぽい。

これを使ったプレイヤーも多く、ただ再生したいのならそれらをどうぞ。

libmpeg2を使うにあたっての注意。

まずC++から使う場合はヘッダファイルのインクルードの際に

extern "C"{
#include
#include
}

のように「extern "C"」が必要。

それから、docフォルダ内のサンプルを試す場合はおそらく無音のmpeg2でないとちゃんとした画像が出力されません。

同様の理由で mpeg2dec をテストする場合
指定するファイルに音がついてるなら -s オプションで音を切り捨てないと綺麗に映像が出ません。

どれも当たり前といえばそうなんですが…。

ということで、mpeg2decのソース読んで
とりあえず映像の表示だけでもしちゃいたいです。

その際先回のSDLを使う予定。


…先回のソース、間違いだらけだったのでこっそり修正。

画面を16ビットカラーにしてぶん回してみたら
研究室のマシンで70FPS出たのでまぁよしとする。

SDL_CreateYUVOverlay()

等を使って YUV ビデオオーバレイ に描画すると
さらに表示速度を上げられるかも知れない。
Research | - | trackbacks (0)

Linuxで高速な2D描画(SDL)(2)

SDLの速度を試すと言うことでFPSを測る簡単なコードを書く。

開発には Eclipse + CDT を使った。

EclipseでSDLを使ったプログラムをコンパイルをする場合は
GCCに対して幾らかオプション指定の必要がある。

Project > Properties
から「C/C++ Build」を選び
「Configuration settings」内の

「GCC C++ Compiler」下にある
「Miscellaneous」を選び
「Other flags」のエディットボックスに
「`sdl-config --cflags`」と追記

「GCC C++ Linker」下にある
「Miscellaneous」を選び
「Linker flags」のエディットボックスに
「`sdl-config --libs`」と追記

…で動いたのだけど
何を意味しているのか良く分かっていない。
調べる必要があるなぁ。

で、簡単なソース。
ImageFunc の辺りはお遊び。

main.cpp

#include <stdlib.h>
#include "SDL.h"
#include "ImageFunc.h"

int main(int argc, char *argv[]) {

if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
exit(1);
}

atexit(SDL_Quit);

SDL_Surface *screen;

screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);

if ( screen == NULL ) {
exit(1);
}

// オフスクリーン作成
SDL_Surface* offscreen;

if (screen->format->BitsPerPixel == 16) {
offscreen = SDL_CreateRGBSurface(SDL_SWSURFACE, 640, 480,
screen->format->BitsPerPixel,
screen->format->Rmask,
screen->format->Gmask,
screen->format->Bmask,
screen->format->Amask);
/*
printf("%d, %d, %d",
screen->format->Rmask,
screen->format->Gmask,
screen->format->Bmask);
*/
} else {
offscreen = SDL_CreateRGBSurface(SDL_SWSURFACE, 640, 480,
32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0);
}

int frames = 0;

Uint32 beginTime = SDL_GetTicks();

int hue = 0;

for (;;) {
// イベント処理
SDL_Event event;

while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
SDL_FreeSurface(offscreen);
exit(0);
}
}

// 描画部分
// SDL_MUSTLOCK(offscreen) の結果によってはロック不要らしい
SDL_LockSurface(offscreen);

double r, g, b;

HSVToRGB(&r, &g, &b, hue, 1.0, 1.0);

// offscreen->format に従ったフォーマットで書き込むこと
if (screen->format->BitsPerPixel == 16) {
Uint16 p = ((int)(31 * r) << 11)
| ((int)(63 * g) << 5)
| ((int)(31 * b) << 0);

for (int i=0; i<640*480; i++) {
((Uint16*)(offscreen->pixels))[i] = p;
}
} else {
Uint32 p = ((int)(255 * r) << 16)
| ((int)(255 * g) << 8)
| ((int)(255 * b) << 0);

for (int i=0; i<640*480; i++) {
((Uint32*)(offscreen->pixels))[i] = p;
}
}

hue++;
hue%=360;

SDL_UnlockSurface(offscreen);

// screenにbitmapを描画
SDL_BlitSurface(offscreen, NULL, screen, NULL);

// screenの全領域を更新
SDL_UpdateRect(screen,0,0,0,0);

frames++;

Uint32 t = SDL_GetTicks();
Uint32 d = t - beginTime;

if (d >= 1000) {
int fps = frames * 1000 / d;

char title[16];
sprintf(title, "%d", fps);

SDL_WM_SetCaption(title, NULL);

beginTime = t;
frames = 0;
}
}
SDL_FreeSurface(offscreen);
return 0;
}


ImageFunc.cpp

#include "ImageFunc.h"
#include <math.h>
#include <algorithm>

void RGBToHSV(double r, double g, double b, double* h, double *s, double *v)
{
// r, g, b それぞれ [0, 1]
// h は [0,360)
// s と v が [0, 1]
// ただし s = 0 の場合 h = UNDEF
const double UNDEF = 360.0;

double max = std::max( std::max(r, g), b);
double min = std::min( std::min(r, g), b);

*v = max; // バリュー

// 彩度の計算 r, g, b すべて 0 なら彩度は 0
*s = (max != 0.0) ? ((max - min) / max) : 0.0;
if(*s == 0.0){
*h = UNDEF;
}else{
double delta = max - min;
if(r == max){
*h = (g-b) / delta;
}else if(g == max){
*h = 2.0 + (b - r) / delta;
}else if(b == max){
*h = 4.0 + (r - g) / delta;
}
*h *= 60.0;
if(*h < 0.0) *h += 360.0;
}
}


bool HSVToRGB(double *r, double *g, double *b, double h, double s, double v)
{
// h は [0, 360] または UNDEF
// s と v は [0, 1]
// r, g, b それぞれ [0, 1]

//const double UNDEF = 360.0;

if(s == 0.0){
//if(h == UNDEF){
*r = v;
*g = v;
*b = v;
//}else{
// return false;
//}
}else{
double f, p, q, t;
int i;
if(h == 360.0) h = 0.0;
h /= 60.0; // h を [0, 6) とする
i = (int)floor(h); // floor() は最大整数 <= h を返す
f = h - i; // f は h の小数部分
p = v * (1.0 - s);
q = v * (1.0 - (s * f));
t = v * (1.0 - (s * (1.0 - f)));
switch(i){
case 0: *r = v; *g = t; *b = p; break;
case 1: *r = q; *g = v; *b = p; break;
case 2: *r = p; *g = v; *b = t; break;
case 3: *r = p; *g = q; *b = v; break;
case 4: *r = t; *g = p; *b = v; break;
case 5: *r = v; *g = p; *b = q; break;
}
}
return true;
}


ImageFunc.h

void RGBToHSV(double r, double g, double b, double* h, double *s, double *v);
bool HSVToRGB(double *r, double *g, double *b, double h, double s, double v);


実行するとウィンドウが出てキャプションにFPSが出ます。

僕の環境では11FPSでした。
…というのもVirtual PC上での実行だったので。
Research | - | trackbacks (0)

Linuxで高速な2D描画(SDL)

Linuxで高速な2D描画を行う必要があるのだが
何を使えばいいのやら見当がつかない。
そもそも、単なる描画でさえどうやるのか知らないのだから。

Windowsならば
やれDirectXだ、アクセラレーションがきくならGDIも悪くないだ
と浮かぶのだけど。

でも、まぁ、つまるところ
ハードウェアアクセラレーションがきくということが重要に思う。

いくらか調べたのだけど、あまり情報も得られず
結局SDL(Simple DirectMedia Layer)に落ち着いた。

Simple DirectMedia Layer

よくわからないが

ビデオの表示に X11 を使い、全画面表示の場合は Xfree86 DGA(Direct Graphics Access) 拡張と 新しい MTRR(Memory Type Range Registers) アクセラレーションが 利点が生かせます。

とのこと。

ゲーム作成に使われてるということだから
おそらくこだわってチューニングしてあるだろう。

軽く使ってFPSでもはかってみよう。
Research | - | trackbacks (0)