SewiGの日記
2006-05-06 [土] [長年日記]
■ [Programming] 久しぶりにPCの前に15時間
優先タスクを処理していかないと趣味の時間がどんどん減っていくね。高々、1000行のプログラムにこんなに時間が掛かってしまったのは、プログラムの設計に時間を掛けすぎたのが原因かもしれない。でも、どう書いたらスッキリしたコードになるだろうかとか細かいところが気になるんですよ。他人に見せても恥ずかしくない設計をして、他人に見せても恥ずかしくないコードを書く。時間は掛かるけど、重要なこと。
というか、Cで書いてくださいって依頼があったのでどうもモチベーションがね。
2006-05-10 [水] [長年日記]
■ [Other] 大分大学がJABEEに認定されてた
2005年度認定プログラム (2006/05/09)
普通に卒業した人よりもレベルが高いことが認められて、技術士一次試験免除やらいろいろと良いことがあるようです。ま、確かにJABEE対応コースだったので成績評価がほんの少しだけ厳しかったからね。とは言え、いつの時代も最後に頼れるのは己の技術力。
2006-05-11 [木] [長年日記]
■ [Network][Book] 最近のGoogle
- グーグル、日本でも書籍全文検索サービス提供へ (ITmedia)
最近、競合会社の勢いに押され気味だったGoogleが、最近Google Desktop 4やGoogle Co-op、Google Trends、Google Notebookと一気に巻き返しを図っています。結構Webアプリが増えましたね。最近は署名のないローカルアプリケーションを不用意に起動してはいけないという流れになりつつありますし、常に最新版という強みもあって、Webアプリへの流れは自然なものでしょう。(デベロッパーとしても楽できてうれしいしね)
そんな中、日本でも書籍全文検索サービスの提供ときました。Amazon.co.jpがすでにサービスしているわけですが、Googleが検索技術でAmazonを上回るのでしょうか。それとも別の方法でしょうか。Amazonの場合は書籍検索の後、レビューを見て購入までできるのが手ごわいのでここが課題ですかね。
2006-05-13 [土] [長年日記]
■ [PC] クマさんを配置すれば物事はうまくいく
何か悩み事があって誰かに相談したいけど、相手に迷惑をかけたくないだとか恥ずかしいだとかいうことでなかなか相談しづらいことがあります。また、相談される側も忙しくて対応できない場合があります。
そんなときは相談したい人が事前に誰かと相談してそれでも解決しないときに本当の相談員と会話すればいいのです。
アメリカのとある会社の受付窓口にはクマのぬいぐるみが置いてあって、「まずクマに相談内容を吹き込んでください。問題が解決しない場合は相談員をお呼びください」みたいなシステムがあるそうです。
言われてみると合理的な手段です。実際に私もいろいろ相談を受けていて相手が内容を話しているうちに自己解決する場合が多いです。誰かに自分の考えを伝えるというプロセスが重要なのです。その役目を果たしてくれるのがクマさんなのです。
ペアプログラミングなど使わなくてもコレで、たいていのバグは見つかるではないかと思います。人によっては、クマでなくてもいいと思いますが。
2006-05-17 [水] [長年日記]
■ [Network] 小倉優子を装うトロイの木馬
久しぶりにタイトルだけで笑ってしまった。プログラムが小倉優子を装うのかよ、と。ディスプレイの向こうから女の子が飛び出してくるのは何年先のことでしょうか。
mixiとかYahooとかのヘッドラインは本来の記事のタイトルより短くして、それでも内容が一目でわかるように努力してるんだけど、これはひどい。トロイの木馬が小倉優子を装うんだからね。
正式な記事名は以下の通りです。
- 小倉優子の画像を装い、Winnyにローカルファイルを公開する「Exponny.B」 (InternetWatch)
記事の内容自体は、別になんてことない良くある偽装アプリのことを紹介しているだけなんですけどね。
2006-05-22 [月] [長年日記]
■ [Other] 今のゲーム
最近発売されているゲームに恋愛シミュレーションゲームが増えた気がします。コンシューマ用に新規に開発したものもありますが、PCからの移植が多いと思います。萌えならなんでも売れるとか、特典を付加して再販すれば最小の労力で売上が上がるなどいろいろ理由はあると思います。
しかし、一番の理由はゲームの面白さにあると思います。一般の人がプレイすると30時間掛かるゲームもありますが、長すぎます。かといって2000円以下で売られているゲームは単発モノでやりこみ要素が無いものが大半です。
そんななか恋愛シミュレーションは、長くても10時間もあればコンプできるでしょう。そして、隠しイベントなどオマケ要素もありやりこめます。この適度のプレイ時間とゲームしてますって感覚にオタクの購入意欲の相乗効果で恋愛シミュレーションが売れているのだろうと思います。
このシステムがいかに優れているかは、街がPSPで再販されたことを見ればみればわかるでしょう。
2006-05-23 [火] [長年日記]
■ [Programming] 久しぶりにProlog
最近Lispを使っていたので、Prologのことを結構忘れてました。組み込み述語を自分で書いたりして思い出してます。バックトラックしたり組合せとか使ってクイズ解かせる分にはおもしろいんだけど、課題で使う用途ってなんかPrologの良さが出てこないのが残念。
2006-05-26 [金] [長年日記]
■ [Music] 島みやえい子 - ひぐらしのなく頃に
買ってきました。
「ひぐらしのなく頃に」は、ダークな曲調で歌詞も面白いです。ひぐらしのなく頃にのOP曲。アニメ版ひぐらしのなく頃には未チェックだけど、オリジナル版の雰囲気は出てると思います。
「all alone」はイントロのメロが好き。これが曲の柱になってて、えい子先生の歌声と合わさると少し不思議な感じのする綺麗な曲になった、という感じでしょうか。
↓試聴
http://www.animate.tv/pv/detail.php?id=pcd060413a&page=0&m=&c=&sea=&tid=&rid=
2006-05-27 [土] [長年日記]
■ [Programming] X11プログラミングメモ(1)
とりあえず、ウィンドウを開いてみる。
#include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> Display *display; Window root, window; int screen; XEvent event; int main(int argc, char *argv[]) { display = XOpenDisplay(NULL); screen = DefaultScreen(display); root = RootWindow(display, screen); window = XCreateSimpleWindow(display, root, 100, 100, 640, 480, 4, BlackPixel(display, screen), WhitePixel(display, window)); XStoreName(display, window, "Hello, X11 world"); Atom atom1, atom2; atom1 = XInternAtom(display, "WM_PROTOCOLS", False); atom2 = XInternAtom(display, "WM_DELETE_WINDOW", False); XSetWMProtocols(display, window, &atom2, 1); XMapWindow(display, window); XFlush(display); XSelectInput(display, window, ExposureMask | ButtonPressMask | UnmapNotify); for(;;) { XNextEvent(display, &event); switch (event.type) { case Expose: break; case ButtonPressMask: if (event.xbutton.button == 1) { XDestroyWindow(display, window); XCloseDisplay(display); exit(0); } break; case ClientMessage: if (event.xclient.message_type == atom1 && event.xclient.data.l[0] == atom2) { XDestroyWindow(display, window); XCloseDisplay(display); exit(0); } } } }
まず、#include <X11/Xlib.h>と#include <X11/Xutil.h>は、お ま じ な い。Xプログラミングでは、XOpenDisplay()によりXサーバに接続するという一見すると大掛かりなことをします。でも複数のDisplayが扱えて弁理だったりします。接続したらディスプレイのIDを取得します。ハンドルみたいなもんです。使い終わったらXCloseDisplay()で閉じます。
そして、Window型にrootとwindowと2つありますが、XにはDisplayごとに1つrootwindowという一番親となるウィンドウがあります。GNOMEや、KDEなんかはrootwindow上でうまく動いています。なのでウィンドウもrootwindowから作成できます。XCreateSimpleWindow()でウィンドウを作成してウィンドウのIDを取得します。
作成したウィンドウはXMapWindow()で表示準備をして、XFlush()でバッファに溜まったメッセージを送信します。
あとはプログラムが終了するまでメッセージ処理をするだけです。使用しないメッセージまで受信したら無駄なのでXSelectInput()で受信したいメッセージを選択します。Exposeでウィンドウの再描画をしたり、ButtonPressMaskでマウスの処理をしたり、ClientMessageでウィンドウに関する処理をします。ほかにもいろんなメッセージがあります。終了するときは、XDestroyWindow()とXCloseDisplay()を使用します。残りのコードは、クローズボックスをクリックされたときの処理です。これが意外に面倒。
2006-05-28 [日] [長年日記]
■ [Programming] X11プログラミングメモ(2)
次に描画。これでおもしろいアプリケーションも作れるでしょう。
#include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/keysym.h> Display *display; Window root, window; int screen; XEvent event; KeySym key; GC gc; unsigned long GetColor(Display *display, char *color) { Colormap cmap; XColor c0, c1; cmap = DefaultColormap(display, 0); XAllocNamedColor (display, cmap, color, &c1, &c0); return (c1.pixel); } int main(int argc, char *argv[]) { display = XOpenDisplay(NULL); screen = DefaultScreen(display); root = RootWindow(display, screen); window = XCreateSimpleWindow(display, root, 100, 100, 640, 480, 4, BlackPixel(display, screen), WhitePixel(display, window)); XStoreName(display, window, "Hello, X11 world"); Atom atom1, atom2; atom1 = XInternAtom(display, "WM_PROTOCOLS", False); atom2 = XInternAtom(display, "WM_DELETE_WINDOW", False); XSetWMProtocols(display, window, &atom2, 1); XMapWindow(display, window); XFlush(display); XSelectInput(display, window, ExposureMask | KeyPressMask | ButtonPressMask); gc = XCreateGC(display, window, 0, 0); XSetForeground(display, gc, GetColor(display, "black")); XSetBackground(display, gc, GetColor(display, "white")); for(;;) { XNextEvent(display, &event); switch (event.type) { case Expose: XDrawImageString(display, window, gc, 20, 50, "Hello", 5); XDrawLine(display, window, gc, 0, 0, 100, 100); XDrawPoint(display, window, gc, 20, 50); XDrawRectangle(display, window, gc, 80, 70, 50, 50); XFillRectangle(display, window, gc, 180, 170, 50, 50); XDrawArc(display, window, gc, 200, 200, 50, 50, 0, 360*64); XFillArc(display, window, gc, 250, 250, 50, 50, 0, 360*64); break; case KeyPress: key = XKeycodeToKeysym(display, event.xkey.keycode, 0); if (key == XK_q) { XDestroyWindow(display, window); XCloseDisplay(display); exit(0); } break; case ButtonPressMask: XDestroyWindow(display, window); XCloseDisplay(display); exit(0); break; case ClientMessage: if (event.xclient.message_type == atom1 && event.xclient.data.l[0] == atom2){ XDestroyWindow(display, window); XCloseDisplay(display); exit(0); } } } }
まず、#include <X11/keysym.h>とKeySymはキー入力で必要です。
そして、GCは描画に必要なものです。グラフィックコンテキスト。XCreateGC()を使用して取得します。GCさえあれば、あとは簡単。XSetForeground()で色を指定して、描画関数で描くだけです。このときXColorでRGB値を1つずつ指定するのが面倒なので、GetColorで名前を指定します。描画関数にはXDrawImageString、XDrawLine、XDrawPoint、XDrawRectangle、XDrawArcなどがあります。DrawをFillにした関数もあって、そっちは塗りつぶせます。あとはメモリ内での画像を扱うPixmapとか転送のXCopyArea()とか。
これで、タイマ回して画像でも表示させれば面白そうなアプリケーションが作れそうですね。音声はそのうち。
2006-05-29 [月] [長年日記]
■ [Programming] Postscriptファイルっておもしろいね
単なる印刷用のファイルフォーマットとばかり思ってましたよ。ところが、スタック計算機として利用できるのです。これは面白いです。なんか、PSでHTTPサーバを作った方もいらっしゃるそうで、驚きです。
とりあえず、PSで基本的な描画を行うためのメモを書いておきましょう。
%で始まる行はコメントです。で、PSは%!PSで始めることになっています。
で、ここから図形などを描画していくわけですが、ここで直線や曲線の組合せをパスと呼ぶことだけ覚えててください。図形の描画はパスを作って表示をするという2段階で実現できます。
newpathオペレータで新しいパスを作成します。これでキャンバスみたいなものができたのでこの上に図形を描きます。
strokeオペレータでパスを描画します。
showpageオペレータでディスプレイやプリンタに出力します。これで1ページですね。
あとは、図形の描画ですが、直線にの描き方を説明します。PSでは左下が原点で右方向がx、上方向がyになります。movetoオペレータで基準となる点を指定します。x,y座標を指定する必要があるので、movetoオペレータには2つの引数をスタックにプッシュします。
そして、linetoオペレータで基準の点から指定座標までのパスが引けます。相対的な位置の指定にはrmoveto,rlinetoを使用します。
ほかにも、弧を描くオペレータなどもあります。
closepathで閉じてないパスを閉じたり、setlinewidthで線幅を指定したり、setrgbcolorで色の指定ができます。テキストも表示できますが、フォントの指定が必要です。
とりあえず、まとめ。hoge.psってファイル名にでもして、印刷するなりgvで表示してください。
%!PS-Adobe-3.0 5 setlinewidth newpath 1 0 0 setrgbcolor 10 10 moveto 100 0 rlineto stroke 0 0 1 setrgbcolor 200 350 100 315 225 arc fill closepath stroke showpage
2006-05-30 [火] [長年日記]
■ [Music][Programming] CPSフリー化
キタコレ。
CPSは、MIDI、オーディオ、I/Fをモジュール化して、どのように接続するかをプログラミングして作曲したりできるソフトです。この世界ではMAX/MSPが有名ですが、CPSも同じような処理ができる優れものです。これがフリーになったと考えるとうれしい限りです。
2006-05-31 [水] [長年日記]
■ [Software] バックアップよりも整理
最近はバックアップするにも対象の容量が肥大化して困りものです。ある程度はDVD-Rやファイルサーバに保存しておけばいいのですが、数が多くなると管理が面倒です。そこで、バックアップするかしないかを振り分ける必要があります。
まず、Googleデスクトップ検索なんてどうでしょう? 動画や音声、画像、テキストなどあらゆるものを高速に検索できます。プレビューも出て便利です。しかし、ファイルの移動、削除などができないので困りもの。動画や音声ファイルなんかは画像、テキストに比べれば数が少ないので、とりあえず画像について考えていきましょう。
少し前のニュースですが、
- Google、PicasaのLinux版リリース (ITmedia)
これとか、画像を意味分類できて、しかもファイルの管理もできます。ファイルシステムのファイル名に関係なく分かりやすく名前をつけて、日付とかいろいろと探索できて便利。Linuxでも動作するようになったのでちょっと便利に。
こうやって、いらないファイルは消してしまう。バックアップに困ったら、まず整理です。
● konayuki [PS版「街」は、EDフルコンプするまでやりこみましたよ。 美麗グラフィックを売りにした長大なRPGよりも、短時間でプ..]
● SewiG [やべ、すごく返事を書くのが遅れました。 >差別化 そうですね。「うちのゲームはこんなにおもしろい」がほしいところ。..]