|
・どうも、鏑矢です。まー皆さん知ってると思いますが、かなゆ〜の復活です。毎日毎日、プログラミングのこととかを書いたり、皆さんに送っていただいた質問に答えたりします。金菜さんじゃなくわてが答えるってことで、自由度高いです(爆)。……でもなんとなく恥ずかしいのは気のせい?
・えっと、実は今日はプログラミングしてないんです。でも投稿があったんでそれを載せましょー。もしなかったらいきなりお休みだったかも……(汗)。まずひとつめ。 |
|
・情報ありがとー。っていうかずっと C++ としてしか使ってませんでした(爆)。もともと C++ 使いたいから cc じゃなくて gcc を使ったってところもあるし。これって前に「 -c が【C言語で】ってゆースイッチだと思った」とかの話かな?
・もひとつツッコミよん。 |
|
・こんにちはです。変わってたってどんくらい変わってたんだろう……。えっと、リソースのロケールについてははっきしいってよく分かりませんでした(汗)。リソースの右クリックメニューから【コピーの挿入】を選んでターゲットの言語を選ぶと、ひとつのIDに複数言語のリソースを割り当てることができます。こうすることでひとつのアプリに複数言語のリソースを組み入れられて、OSのロケール設定にあわせて自動的に選択されるんだそうです。
・「だそうです」ってのは、実はうまくいかなかったから(汗)。コントロールパネルの「地域」を変えれば自動的に変えられると思ったんだけど、そうなりませんでした。うーむ。もしテスト用のターゲットがあればそれで試してくださいです。主な情報源は、MSDNの「リソースに変更を加えてコピーする」とかナレッジベースの J041143 とか。あとリソースを地域別DLLに封じ込める方法とかもあります。これはMSDNの「テクニカル ノート 57: MFC コンポーネントのローカライズ」を読んでみてください。 ・おー、のっけから歯切れ悪い解答だ(爆)。まーうちらしいかも。これからも質問ばんばん送ってねー。 ・でわまたっ! |
・やっほー。今日は DirectX をちょっと試してみました。
・ってゆーか実際に試す段になるまで結構時間かかりました(汗)。とりあえずオフィシャルページにあるチュートリアルをダウンロードして、テストプロジェクトを作ってコンパイル。しかーし無茶苦茶変なコンパイルエラー発生。原因はVC6付属のインクルード&ライブラリファイルに古い DirectX のものがあったからだった……。優先順位を上げることで解決。 ・しかし、コード見てもなーんか分かんないです。いやまーゆっくりじっくり見れば分かるだろうけど、量多いし憶えなきゃいけないこと多くて結構大変。とりあえずCOMインターフェイスの知識があるだけでも良かったかもしんない。とりあえずゆっくり調べていくことにしましょう。 ・ちなみに最終目的は、ゲームの作成。とあるシューティングゲームの構想があるんで、1ヶ年計画ぐらいで作ってみようかなーと。あとえーかげん DirectX は知っておかないといかんかなと思って。今度 OpenGL も試してみましょう。んでもダウンロードすんのめんどいなー、なんかのCD−ROMにSDK入ってないかな。 ・あとぷらとわ1話作成。今回のバージョンが終了するまでにまだ結構掛かる……なんかのんびりしすぎって感じもするけど、ま、そんなにあっさりマスターできるもんでもないし、それもいーんじゃないかなーとか。うん。 ・でわまたっ! |
・今日は OpenGL とかで遊んでました。
・日記の方で教えていただいたページで OpenGL for Win32 SDK をダウンロードして(マイクロソフトにあるんですねぇ)、こちらのページのサンプルを試してみました。 DirectX に比べて、導入が楽だったなー。 ・中身的にはまだちゃんと理解してないんでよく分かんないです(汗)。とりあえず両方とも使ってみて、知識深めようと思ってます。でもやっぱ難しそうだなー。どっちもアニメーションフリップの仕組みがよーわかんないんで調べてみないと。メッセージ処理を阻害しないでよくあれだけなめらかに動くもんだなー。 ・あと、ちょっとHTML関係のプログラムに興味あったんで、 Inside Windows の1997年9月号に載ってた MiniWWW とゆーのを試してみる。なんか、エラーもなしにページの読み込みが途中で終わっちゃうことがあるのがちょっと不安。何が悪いのかなー。 ・ホントはたすかぶとかのバージョンアップが先なんだけど、どーも面倒で(汗)。それよか、新しいアプリ作った方が楽しそう。それにあわせてKTLを強化して、それをベースにバージョンアップするっていうのが結構手っ取り早いかもしんない。やってみるかなー。 ・でわまたっ! |
・今日はこのツッコミから!
|
|
・おー、助言助かります〜。OpenGL に Java 用があるとは。やっぱ知識として知っとくんだったら OpenGL かなー。でもゲーム作ったり、ページの人気上げるんなら DirectX って気も(爆)。とりあえず両方勉強しとこー。「HTMLなアプリ」は一応HTML構文解析が中心。でも昨日テストしたのはHTTPの部分だけ。微妙微妙。ちなみに MiniWWW は特定のアドレスの index.html ページをただ読み込むものです。
・質問! 「テストはローカル」ってことは、うちのPCにウェブサーバーを入れるってことでしょーか。どーゆーのを入れればいいんでしょう。なんかむずかしそ……。あと昨日のエラーは単に OutputDebugString() がうまく出力してないだけでした(汗)。ファイルに出したらちゃんと全部読み込んでました。ご迷惑かけたです。 ・で、今日はたいしてプログラミングしてないです(汗)。とりあえず適当なファイルを読み込んで保存してみたり。結構道は遠いんで、のんびりいくつもりです。文字列検索とかって苦手な分野だし(汗)。あと実験のもえーかげんしないとなー。 ・でわまたっ! |
・はひー、とりあえず今27日の1時半だけど、とりあえず昨日載せようと思ってたのだけ。まずはキャリコさんからのお便り。
|
|
・どうもですー、で、とりあえず HTTPd を使ってみました。お”、家の中のファイルがホームページのように! なんか感動。ところがなぜか、127.0.0.1 経由だと MiniWWW のテストアプリがうまく動かないのです(泣)。エラーチェックは全部通るのに、recv() で固まっちゃって、数分間帰ってきません。で、帰ってきたら何事もないように振舞うし。とりあえずテストクラスはこちら。
|
class CPageLoader { enum { PORT_NO = 80 }; SOCKET m_uiSocket; public: CPageLoader() : m_uiSocket( 0 ) { WSAData stData; int iErr = WSAStartup( MAKEWORD( 1, 0 ), &stData ); if( iErr != 0 ) OutputError(); m_uiSocket = socket( PF_INET, SOCK_STREAM, 0 ); if( m_uiSocket == INVALID_SOCKET ) OutputError(); } ~CPageLoader() { closesocket( m_uiSocket ); WSACleanup(); } void Load ( const char *const p_pchUrl , const char *const p_pchLoadFile , std::ostream &p_rcOStrm ) { DWORD dwIp = GetIpAddress( p_pchUrl ); Connect( dwIp ); Loop( p_pchLoadFile, p_rcOStrm ); } private: DWORD GetIpAddress( const char *const p_pchUrl ) { DWORD dwIp = inet_addr( p_pchUrl ); //ドット形式のアドレスをIPアドレスへ変換。 if( dwIp != INADDR_NONE ) //うまくいったら return dwIp; //そのまま返します。 // うまくいかなかったら変換。 hostent* pstHost; pstHost = gethostbyname( p_pchUrl ); //ホスト名から IP アドレスに変換。 if( pstHost == NULL ) OutputError(); return *( reinterpret_cast< DWORD * >( pstHost->h_addr ) ); } void Connect( DWORD p_dwIp ) { SOCKADDR_IN stAddr; stAddr.sin_family = AF_INET; //TCP/IPを選択 stAddr.sin_port = htons( PORT_NO ); //ポートの指定 stAddr.sin_addr.s_addr = p_dwIp; //IPアドレスの指定 int iErr = connect( m_uiSocket, (const struct sockaddr*)&stAddr, sizeof( stAddr ) ); if( iErr != 0 ) OutputError(); } void Loop( const char *const p_pchFile, std::ostream &p_rcOStrm ) { char pchGetComm[256]; sprintf( pchGetComm, "GET %s\n", p_pchFile ); int iRes = send( m_uiSocket, pchGetComm, strlen( pchGetComm ), 0 ); if( iRes == SOCKET_ERROR ) OutputError(); int iSize = 0; char buf[4096]; while( 1 ) { iSize = recv( m_uiSocket, buf, 4095, 0 ); //ここで止まる……。 if( iSize == 0 ) break; if( iSize == SOCKET_ERROR ) OutputError(); buf[iSize] = '\0'; p_rcOStrm << buf << std::flush; } } void OutputError() { throw( WSAGetLastError() ); } }; void Test() { CPageLoader cPageLoader; std::fstream cFStrm( "Output.txt", std::ios::out ); cPageLoader.Load( "www.justnet.ne.jp", "/index.html", cFStrm ); }
・なんか変なとこがあったら言ってね。ただし例外処理は除く(笑)。これはちょっと間違った実装方法ですね〜。
・てなことを書こうと思ってたんだけど再セットアップで遅れてしまいました。いやー、キャリコさんのメールとっととコピーしといて良かったです。ただ、もしかしたら今日明日休むかも(汗)。VCのキーカスタマイズしないとなー。 ・でわまたっ! |
・いや〜、昨日はごめんです。だいたい復旧したんだけど、まだ IME 周りが整ってないから日本語入力が大変で・・・<ほら、これ、いつもと違うでしょ。ま〜そんなこたともかく、今日もお便りからよん。
|
|
・うおー、ありがとうです! 動きましたよ!! 原因はやっぱ GET で Host を渡していなかったからでした。いや〜、やっぱサンプル適当に使ってるだけじゃダメですね(汗)。RFC しっかり読んでみます。それか本買ったほうが早いかも。1冊あると安心だし。
・あと HOSTS.SAM の Tips 面白いですね。これ届く前に HOSTS.SAM の方は試していたんですが、そのときには「あ〜、わざわざ 127.0.0.1 なんて打たずに localhost でいいんだ」くらいにしか思ってませんでした。これは便利かも。 ・んでもひとつよん。 |
|
・なるほど、送信コマンドが全部食われるまで送りつづけるわけですね。こーゆー細かい部分まで憶えるのは大変かもな〜。ま、試さなきゃ憶えられないんだし、今はいろいろしてみましょー( あと if( iRes == SOCKET_ERROR ) { の中カッコはいらないですよね)。
・「間違った」のは例外処理のとこです。あーやってただ数字だけ投げてると受けるほうは死ねます(笑)。Winsock エラーに特化した std::runtime_error 派生クラスを投げるのが正解でしょう。あと throw() をシグネィチャーに付けないと。同期問題は、ワーカースレッドなら「知ってる」んでそのほうが楽っぽい(爆)。 ・まー結局のところ、もっと RFC とかのドキュメントを読まないとあかんかも。んでも久々にやりがいある分野かもしんない。あ、でも実験とっとと終わらせといたほうがいいかも(汗)。 ・でわまたっ! |
・今日はあんまプログラミングしてません(汗)。とりあえず、実験用プログラムの下準備。
・あ、知らない人用に言っとくと、実験っていうのは「電子情報学実験」とゆ〜、大学の授業のことです。プログラムを組んだりして結果をレポートにまとめて提出します。今回の実験は1月13日の提出のもの。もともとソースコードはあるんだけど、いろいろ手直ししないといけなかったり。ってゆ〜かそれが楽しい(爆)。 ・実験の内容は、音声データを窓関数に掛けて FFT 掛けて gnuplot で出力して「何を言ってるか」を判別すること。で、そのプログラムの中では typedef struct { double re, im; } COMPLEX;ってゆー構造体で複素数を表してます。知ってる人は知っての通り、標準 C++ ライブラリにこれとほとんどおなじクラステンプレート std::complex があるんで、これに移行するために今日は std::complex のテストしてました。 ・しかし、いまいちわかんないとこもあり。これを std::log() とかに掛けたときの振る舞いがよくわかんないな〜。複素数で log を求めるってことの意味がいまいちよくわかってないのかも。コードが見やすい SGI 版で……と思ったら std::complex って STL には含まれてないんだよね(汗)。ま、時間はまだあるし、のんびり見てこっと。 ・でわまたっ! |
・今日も実験プログラムをちょこっと。ところがところが、これがかなりの難敵であることが判明。 FFT ってことでそのロジックの理解や、文法の古さ、1行になるべく詰め込もうとする書式、そしてグローバル変数と悪夢って感じ(泣)。ホント言うと、実験には「プログラムの解析」は必要ないんで、時間がやばくなったらパスすべきだけど、でもこれできないとなんかつまんない(爆)。
・尺八郎さん、ゆっくりでい〜ですよ〜。 ・でわまたっ! |
・今日も引き続き実験プログラミング。やっとこさ、全体像が掴めました。実行結果も、学校の方でしたのと同じだったんでひと安心。それにしても、グローバル変数は使ってるし、 malloc() しといて free() しないし、変数名は意味不明だし、ひとつ関数を置いてから再帰呼び出ししてるし、なかなか大変だったです。
・ま、こういうのも結構重要な経験だし、 FFT 自体は理解しとかないとね。これからどんどんリファインさせて、実際にどういうアルゴリズムで動いているか把握したいです。ただ2重ループが多いんで、 STL アルゴリズムにそのままかませるのはちょっと難しいかも。 ・でわまたっ! |
・今日はお休みぴょん。明日もたぶん。
|
(C)KAB-studio 1999 ALL RIGHTS RESERVED. |