2012年11月28日水曜日

(雑記)今後のブログについて


ああ、Direct3Dってもうややこしすぎるわ。
ゲーム会社の人ってこれを軽く息を吐くように扱えちゃうわけ?信じられん。ゲーム系行かなくてほんとうによかった…。才能ねぇはやっぱり。


はいそれでは今後のブログの方針といいますか、何系の記事に特化するかというのをですねちょっと決めていこうかと思います。

まず候補は
1.数学(物理)系
2.サンプルQt C++アプリ
3.3Dゲームサンプル

のどれかにしようかなと思っています。
1はですね、「すうがくやぶつりにくるしんでいる、みなさまのおやくにすこしでもたてればおもったからです。」
((訳)私の数学・物理の能力が「中学校からやりなおせ」レベルですので、アウトプットを通して自分のレベルアップを図りたい。)
というこれまた非常に崇高な思想に基づいているのですぐにでもとりかかりたいです。

2はですね、どうしましょうかね。Qtはdigiaでしたっけ次は。リファレンスへのリンクも全部パァですよ。そんでもってなんかスゥ~っと消えていきそうな予感。素人勘ですけどなんか長所が短所になりそうなんですよね。
OSを選ばないというのはいいことなんだけど、供給元からのサポートが入ってるわけではないでしょう?これ?OS側の変化についていけるんですかね?metroアプリとか造るならQtは選択肢に絶対入らないですよね。(metroがどうなるかわかりませんが)appleやlinux側だっていつ方針かえるかわかったもんじゃないですよ。だとしたら各プラットフォームの専用のメジャーな開発環境でやったほうが結果的に変なバグだとかに悩まされなくて楽なんじゃないのかと思っています。(というかQtはデスクトップ向けではないのかもしれません…。)
まぁただQtにはお世話になったので何か簡単なアプリ製作記事でも作れればなぁと思っています。リネームソフトかボンバーマンみたいな簡単な2Dゲームを予定しています。(速度的にゲームは厳しいのかな)

3はですね。超絶難航中です。Direct3Dは非常に難しいです。まだ満足いくクラス設計すらできていません。いや3Dモデル表示だけなら大丈夫なんです。アニメーションが…よくわからん。Xファイルのサポートも打ち切られてるようですし、一応9でやっておりますが、アニメコントローラで組んでいってよいものなのだろうか?まぁとりあえずできていないんで却下です。当分無理なんじゃないかと思います。1日20分を開発にかけたとしてたぶん半年はかかるでしょうね。
DXライブラリなら楽なんですが...ただDXライブラリだけではいつまでたっても技術レベルも上がらないし、何の評価にもならないんですよね。

とまぁそういうわけで当分1と2をやっていこうと思います。

以上です。

2012年11月26日月曜日

(雑記)最近思ったこと

経済状態の悪化が進んでおります。ソニー、シャープなどの大企業の経営悪化はもちろんのこと、中小企業も瀕死の状態です。今いる退社予定の会社も超絶不況で、超絶暇で、謎の理由で超絶給料ピンハネされています。そんでもって設備投資も予定キャンセルしたりとまぁ超絶クソッたれ状態です。ものづくり日本なんて呼ばれていましたが、もう日本はものづくりでは生き残れないのではないかと思っています。

全てのものづくりがダメだとはいいません。岡野工業株式会社のような凄まじい世界競争力のある製品を持っているのなら問題なく生き残れるでしょう。だけどこういった会社はまれな例外です。(俺も俺もと何にも武器持たずに海外出て身ぐるみはがされないように気をつけてください。)
それ以外のレベルのものづくり企業はどう考えても外国の圧倒的価格競争力の前に太刀打ちできないでしょう。

では太刀打ちできなくなったとき日本ってどうなるの?って考えると、かなりヤバイ状態になるだろうなと思います。地方はほぼ仕事なし、都会は超絶格差社会とこんな感じになるんじゃないかと思います。正社員なんて身分も次第になくなっていくんじゃないかと思います。今当たり前のように受けられるサービスも縮小される可能性大です。そんでもってダメ押しの出生率低下と超高齢化社会のコンボです。2050年にはこのままいくと約3人に1人が65歳以上って荷物重すぎて若者立ち上がれないっすよ。

対策としては、今のうちに貧乏に対する免疫をつけておくことくらいですかね... 金かからない趣味探すとか、とにかく現実から逃げられるなにかを探さないと精神がやられちゃうかも!☆?(笑)です。クソッ!

平凡な人には厳しい世の中になっていきそうです。

とりあえず以上です。

2012年11月25日日曜日

( C# )フォルダ以下の特定の拡張子のファイルをすべて取得する

はいどうも。お久しぶりです。
ブログはこれからも細々と続けようかと思っています。更新頻度はがっつり減るとおもいますがね。

今回はC#フォルダ以下の特定の拡張子のファイルをすべて取得するコードを書いていきます。空クラス作って以下コピペで動くかと思います。

ではコードを


    class Search
    {
        /// <summary>
        /// フィルタ対象拡張子を格納
        /// </summary>
        static private string[] targetExtentions;

        /// <summary>ルートパス以下全てのファイルを指定拡張子のみでフィルタリングして取得する(非再帰)</summary>
        /// <param name="root_path" />検索対象絶対フォルダパス
        /// <param name="extention" />検索拡張子名配列(この配列に合致した拡張子のファイルを全て取得する)
        static public string[] FileSearchAllDirctory(string root_path, string[] extention)
        {
            if (extention == null) return null;

            targetExtentions = extention;
            List<string> pathList = new List<string>();
            Stack<string> dirctory_stack = new Stack<string>(200);
           
            Func<string bool="bool"> filter_function = new Func<string bool="bool">(Filtering);

            if (!Directory.Exists(root_path))
            {
                throw new ArgumentException();
            }

            dirctory_stack.Push(root_path);

            while (dirctory_stack.Count > 0)
            {
                string current_path = dirctory_stack.Pop();//検査対象パスを格納
                string[] sub_path = null;//current_path内の全てのフォルダパスを格納する配列

                try
                {
                    sub_path = Directory.GetDirectories(current_path);//current_path内の全てのフォルダを全て抽出する。
                }
                catch (UnauthorizedAccessException)
                {
                    continue;
                }
                catch (DirectoryNotFoundException)
                {
                    continue;
                }
                catch
                {
                    continue;
                }

                IEnumerable<string> raw_file_array = null;
                IEnumerable<string> filtering_file_array = null;

                try
                {
                    raw_file_array = Directory.GetFiles(current_path);
                    filtering_file_array = Enumerable.Where<string>(raw_file_array, filter_function);
                }
                catch (UnauthorizedAccessException)
                {
                    continue;
                }
                catch (DirectoryNotFoundException)
                {
                    continue;
                }
                catch
                {
                    continue;
                }

                foreach (string file in filtering_file_array)
                {
                    FileAttributes attribute = File.GetAttributes(file);

                    if ((attribute & FileAttributes.Hidden) != 0)
                    {
                        continue;
                    }

                    try
                    {
                        pathList.Add(file);
                    }
                    catch (FileNotFoundException)
                    {
                        continue;
                    }
                    catch
                    {
                        continue;
                    }
                }

                foreach (string path in sub_path)
                {
                    FileAttributes attribute = File.GetAttributes(path);

                    if ((attribute & FileAttributes.Hidden) != 0)
                    {
                        continue;
                    }

                    dirctory_stack.Push(path);
                }
            }

            return pathList.ToArray();
        }

        /// <summary>ファイルのフィルタリングに使用。</summary>
        /// <param name="name" />絶対ファイルパス
        /// <returns>trueならば拡張子にヒット、falseなら違う</returns>
        static private bool Filtering(string name)
        {
            string extention = string.Empty;

            try
            {
                extention = Path.GetExtension(name);

                foreach (string target_extention in targetExtentions)
                {
                    if (string.Compare(extention, target_extention, true) == 0)
                    {
                        return true;
                    }
                }
            }
            catch
            {
                return false;
            }

            return false;
        }
    }

まぁ説明せずとも見ればわかるはずです。 使い方は
string[] files = Search.FileSearchAllDirctory(@"C:\", new string[] { ".txt", ".jpg", ".bmp" });
のように使います。 以上です。

FileSearchAllDirctoryはマイクロソフトの非再帰取得関数の説明ページを参考にしました。