今までちょろっと隣県に突入したりすることを遠征ってずっと言ってたんですが,これは単なるドライブだよな,と今日思いました.いや,それはまぁ別にどっちでもいいとして.
今日は,久しぶりにコシのあるうどんが食べたくなったな,ということで,昼前から香川にうどんを食べに行ってきました.サモと揃って一日中休みだったのと,ガソリンが安くなったのと,自分の春休み最後の遊びだと思って,という 3 つの理由から,2 人して行って来ました.久しぶりに高速を使ったのですが,非常に快適でした.
で,高松の辺りで一旦高速を下りて国道 11 号線を愛媛方面に向かって進んでいたところ,坂出辺りで適当なうどん屋さんを発見.そして目的通りコシのあるうどんを食べて満足したところで,せっかくだからもうちょっとブラブラするか,ということで,国道 11 号線を更に愛媛方面に向かうことに.
まずは,以前から気になっていた善通寺の MAX PLAZA というゲーセンに行こうということになりました.ここは QMA の大会がしょっちゅう開かれていて,地元ゲーセンの知り合いがよくそれに参加していたのです.で,少し迷いました(ゲーセンだからと思って 11 号線を反れて市街地の方へ向かったためですw)が到着.当然昼間なので最高に過疎ってます \(^o^)/ とりあえず DDR を 1 クレだけプレイしてドライブを再開することに.
次は,徳島の同じ地点に端点を持ち,そこから讃岐山脈の北側と南側でそれぞれ西へ西へと延びる国道 11 号線と国道 192 号線が愛媛県四国中央市の川之江で合流することを改めて確かめよう,という,ドライブ好きでかつ地理好きな人じゃないと恐らく理解出来ないであう目的のために愛媛を目指すことになりました.途中でトラックの車両トラブルによって発生した渋滞に巻き込まれたりもしましたが,ひとまず無事に合流地点に到着.「ああ,ここからひたすら東に行けば,また徳島にある国道 11 号線の端点に行けるんだなぁ…」としみじみ感じたりしました.
多分,かなり少数の人しかこの何とも言えない楽しみは分かってくれないだろうな… orz
で,その後は件の 192 号線ではなくて徳島自動車道を通って帰りましたw や,だって下道(したみち,って読めるよね?)は県境の辺りで峠道をクネクネ走るし,時間も掛かるしでダルいかなぁ,と思ってw
そして,夕方くらいに徳島の市街地に帰ってきました.あ,特にオチはありません.まぁ,単純に楽しかったですよ,ってことでww
何日か前の記事です.それにしても,最近酷いですよね.自分も「かしら!」のときに,とらの前で買い物をしている友人を待っているとき通行人の女性に何の目的は知りませんが声掛けしまくってる DQN くさい男 2 人組を見ました.
何度も言いますがいわゆる「オタク」とあなた方が思っているものは,アニメ・ゲーム好きの,あの街での単なる多数派です.電気街としての側面も忘れないで下さい.
色々とやばいのに,呑気に日記書いたり Filn2 や Twitter で遊んだりしています.昨夜は徹夜で麻雀してたし.
Filn2 はリリースから日を追うごとに軽くなってきてますね.リリース当初,ログインゲーだったのでどうなることかと思いましたが,段々といい感じに.早速不具合修正や新しい要望に対して RoR の力を発揮させているようです.
あと Twitter も Web の方で細かい仕様変更があったようで.Twit 使ってりゃ関係なかったんでしょうが(API の仕様は変わらないだろうから),Tween 使ってたのでもろ影響が出ましたw
色々と楽しいです.やべえけど.まぁいつものことなんスけどね.やばいときほど,何もかもが楽しく感じられるっていうあの感覚 \(^o^)/
どうやら配列や vector の添え字には size_t を使うのが普通のようです.Effective C++ 第 3 版のイントロダクション xiv ページに書いてました.以前添え字に unsigned int を使って問題が起こるという内容の日記を書いたのですが,訂正します.
先日から研究室で Java を本格的に使い始めたのですが,Java って基本型の参照渡しや,参照の参照(C 言語風に言うとポインタのポインタ)渡し,ってのがどうやっても出来ないんですよね.言語仕様的な意味で.
で,出力が 2 つある関数を作りたかったんだけどどうやってもそれが出来ないもんだから Java 爆発しろとか C# いいよとか言ってたんですが,それってちょっと違うなとしばらく経ってから思うようになりました.
よく考えてみたらそういう関数が欲しくなる,って設計自体がまずかったんですよね.実は 2 つの出力のうち片方はその関数で取得するべきもんじゃなかったのです.もっと別の取得方法があったんです.そしてそっちの方が,デザイン的にもすっきりしたんですよ.
つまり,戻り値が 1 つしかなくて,引数を出力的な使い方するのも出来ないから,1 つの関数で 2 つの出力を得るのは配列以外では不可能だよ.でもなくても問題ない(はずだ)よ,ってのが,Java という言語の設計思想なんじゃないかなぁ,と思ってみたり.いあ,まだ本当にそうなのかは分かりませんが.
てことで,データの相互の関連性などをよく考えて設計することは大事だよなぁ,言語仕様に文句垂れる暇があったらもう一回設計を見直して見るべきだなぁ,と感じたりした,そんなオハナシでした.
14時
>2つ以上の戻り値が必要だったら、構造体を作ってそれを返せばよくないですか?(sue445)
多分この辺はプログラマによって結構意見が分かれるところだと思います.僕個人にとってその手法は「出来るけどやるべきじゃないこと」に分類されるんですよね.そういう構造体を仮に作ったとして,用途はそれしかないわけで,やっぱり構造体ってのはまとまったデータをあっちこっちとやりとりされるために使われるべきなんじゃないかなぁ,と思うんです.あと,その構造体をどこに定義するか,なんという名前にするかも,結構分からないんですよね… orz
ちなみに今回はどうやって解決したかですが,まずクラス A とクラス B を出力として受け取りたいという需要があったんですね.でも,よく考えれば A に getB というメソッドが付随されるべきだったんです.B は A に依存している,と.それで設計を変更して解決したのです.
ようやく原因特定しました.やっぱり VS2005 で DX ライブラリを用いるとき,#include <fstream> をソース中のどこかに書いただけでリンク時にエラーが出ます.
ということで公式掲示板の過去ログを fstream で検索かけたらこんなのが出ました.
で,書いてある通り DxLib.h の中身を弄ったらリンク成功しやがんのwwww これでまた少しは進展があるかも.頑張ろう.
最新作が先日アップされました.
(sm3034729) こなたとかがみのファイナルファンタジー4(再)・第六話「防衛戦」
ちなみに日記には書きませんでしたが第 5 話も以前にアップされてます.
(sm2855772) らき☆すた?エッフエフにしてやんよ(仮)・第五話「急襲、マザーボム!」
これらの動画をまとめてチェックしたい人はこのマイリストをチェックするといいでしょう.
内容の方はこれで第一部完,と言ったところ.それで固定タイトルの募集がされてます.私はもちろん「こなたんファンタジー」に票を入れるコメントを投げまくってます.
しかし,あのあとやっぱり独自のライブラリを組み込んだらリンク時に膨大なエラーを吐かれました orz
涙目になりつつも,いっそいい機会だと思って Visual C++ 2008 Express Edition を入れてみました.DX ライブラリの公式ページに,2008 のインストール方法とプロジェクトを作る方法が既に記載されていたからです.
そして画面中央に点を打つだけのプログラムから始め,ここはエラーなくバイナリ生成完了.次に,ファイルから数字を読み取ってそこに点を打つプログラムにしてみたら,これも問題なくバイナリ生成完了.しかし,独自のライブラリを組み込んだら途端にリンク時エラー.
ここで,ようやくコンパイラやリンカが悪いのではなく自分のライブラリ or プロジェクト中のソースに問題があるのだと確定します.
そこで,まずはライブラリにせずにライブラリのソースをプロジェクト中に直接持ってくる方法を実行.結果,リンク時エラー.
次に,そのライブラリの,特に怪しい fstream 絡みの機能の使用だけをコメントアウト.結果,バイナリ生成完了.その後,ライブラリのソースをプロジェクトから外し,再び作成済みのライブラリをリンクするように設定.結果,バイナリ生成完了.
ここで,ようやくライブラリ中の何が悪いのかまで判明しました.
どのような関数の使用をコメントアウトしたら直ったかというと,
unsigned int readUint8(ifstream &fin); //バイナリファイルの現在の読み込み位置から 1 バイトを符号無し整数(リトルエンディアン)として読み取る
unsigned int readUint16(ifstream &fin); //バイナリファイルの現在の読み込み位置から 2 バイトを符号無し整数(リトルエンディアン)として読み取る
unsigned int readUint32(ifstream &fin); //バイナリファイルの現在の読み込み位置から 4 バイトを符号無し整数(リトルエンディアン)として読み取る
int readSint8(ifstream &fin); //バイナリファイルの現在の読み込み位置から 1 バイトを符号付き整数(リトルエンディアン)として読み取る
int readSint16(ifstream &fin); //バイナリファイルの現在の読み込み位置から 2 バイトを符号付き整数(リトルエンディアン)として読み取る
int readSint32(ifstream &fin); //バイナリファイルの現在の読み込み位置から 4 バイトを符号付き整数(リトルエンディアン)として読み取る
という関数です.もちろん,これの対極として writeUint8 や writeSint32 なども存在します.
この関数の他と違う特徴と言えば,ファイルストリームが参照渡しされることくらいでしょうか.とにかく,これと Visual C++ と DX ライブラリを組み合わせると何故かリンク時にエラーが出るのです.
ちなみに出るエラーは
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) は既に LIBCMTD.lib(typinfo.obj) で定義されています。
というようなもの.似たようなのが酷いときは 6 つくらいでます.コメントアウトする量によって出る量が変わるというのも妙ですが,とりあえず気にしないことにします(気に出来ないとも言う orz).
これ,誰か同じ症状に陥ったことのある人いるのかな?
ちなみに,BCC ではまったく問題なく使えてました.
2008-04-24 訂正:どのように訂正したかは 24 日の日記参照.
22時
>ただ単にDXと自作ライブラリでリンクしているランタイムライブラリが違うのでは?
>あとはMFCの使用の設定が違うとか?
ランタイムライブラリの不整合という失敗は以前にもしたので違うと思います…と書こうと思ってライブラリのプロジェクトをチェックしたらそこがミスってました orz
無事リンク成功です.これでようやく作り出せる… ありがとうございました.
しかし,そうすると「ライブラリを別途作ったらミスしたので,それらをもういっそプロジェクトに組み込んでしまえ,とやっても出来なかった」というミスが不可解になりますが,これもこっちのミスでした.なんということはない,プロジェクトのプロパティの設定を戻してなかったのです orz つまり,いっそと思ってプロジェクトにソースを組み込んでたのに,誤ったライブラリを結局リンクしようとしてコケてしまっていたということですね.
つまりやっぱり僕はどこまで行ってもドジっ娘としての本領を発揮し続けているということで…はぁ… orz
とりあえず先日の日記は打消し線で消しておきました orz