読者です 読者をやめる 読者になる 読者になる

【VisualStudioC#】App.config を分割【xml】

C#で開発していて、簡単に設定ファイルを作成したいと思った。
けど、App.config が長くなるのはなぁって思ったので外部ファイルにした。

① 外部ファイルを作成する。とりあえず、 setting.xml を作成。

setting.xml の内容は以下の通りとする。

<?xml version="1.0" encoding="utf-8" ?>
<setting>
  <add key="TEST1" value="1"/>
  <add key="TEST2" value="2"/>
</setting>

② 外部ファイルを App.config で設定する。

setting.xml を config ファイルと同等と使用するためには、
App.config にも少し設定が必要だ。

App.config ファイルに以下の設定を書きこむ。
書きこむ箇所は2箇所ある。
まずひとつ目は、 configSections の下。そこに name には xml で設定した名前を記入する。
今回は「setting」とする。

<configuration>
  <configSections>
     // 略
    <!-- その他設定ファイル使用宣言-->
    <section name="setting"
     type="System.Configuration.NameValueFileSectionHandler"
     restartOnExternalChanges="false"/>
  </configSections>
</configuration>

ふたつ目の設定は /appSetting の下に外部ファイルを読み込むと記述する。
なお、setting.xml は、 App.config と同じ場所にいなければならないので、
setting.xml のプロパティ -> 詳細 -> 出力ディレクトリにコピー の設定を「常にコピーする」
に変更する必要がある。

  </appSettings>
  <!-- setting ファイル-->
  <setting configSource="setting.xml" />

これでファイル側の設定は完了する。次、読み込み側。
③ 設定ファイルを読み込む

using System.Collections.Specialized;

private void readXML()
{
    // xml ファイル名を渡すと内容が取得できる。
    var setting= (NameValueCollection)ConfigurationManager.GetSection("setting");
    // key をわたすと、 value が string で戻ってくる。
    string strTest1= setting["TEST1"].Trim();
}

以上が一連の流れとなる。
今後使うことがあるかもしれないので、一応メモとして残しておく。

【SQL】重複データの削除【SQLite】

重複データが存在した。

ツライ。

そんな重複データを削除するために、SQLを書いたのでメモ。

 

CREATE TABLE NEW_TB AS 

SELECT 
    *
FROM PLAYINFO
WHERE  SERVER_ID IS NOT NULL 
GROUP BY SERVER_ID HAVING COUNT(SERVER_ID)

UNION 
SELECT 
    *
FROM TEST1
WHERE 
    SERVER_ID IS NULL ;

ALTER TABLE TEST1 RENAME TO OLD_TB;
ALTER TABLE NEW_TB RENAME TO TEST1;

えっと、TEST1のSERVER_IDが重複してるからNEW_TBというところに

重複を覗いたテーブルを準備!

「UNION」というキーワードで、SELECT文がつなげてめっちゃ便利!

そして、TEST1をOLD_TBという名前に変更!

NEW_TBをTEST1に変更!とすれば、重複データは見事になくなります(/_;)

 

うれしいい!

【C#】C#初心者が感動したSELECT【DataTable】

DataTable って便利よね。
ほんとうに便利です~。ぐふふ~。ってぐらい便利。
SQLのデータをぶち込んでおけば、DataTable 内で select できるなんて!!
// DataTable 生成

DataTable dt = new DataTable();

// ※sqlData はDataSet でDBから取得したデータが入っているよ~。

dt = sqlData.Tables["SQL"];

// 例えば、IDが 2 のものがあるか確認したい!

int idCheck = (from row in dt.AsEnumerable() 
                where row.Field<long>("ID") == 2 
                select row).Count();

if(idCheck > 0 ){
    Console.WriteLine("2のものあるよ~")
}

ホント便利過ぎて震えた…
C# 初心者には強い味方だ!

【VisualStudioC#】動画の長さを取得する【Shell32】

VisualStudio C# で動画(mp4ファイル)の長さを取得する処理を作成した。

色々調べたが、何故かうまくいかない…! Shell32 がうまく使えない…!
成功した例をいかに示す。というか、関数を作った。

 

① shell32 を使用する準備をする。
using shell32; としたいところだが、参照設定しないと使用できない。

f:id:chipomote:20150915132432p:plain

参照設定にて、マウスの右クリック→参照の追加をクリックすると、上記の画面が出るので、
Microsoft Shell 」と検索をする。検索し、チェックを入れて完了をすると、
ソリューションにshell32が追加される。

 

② shell32 を使用するための関数を作成する

    public Shell32.Folder GetShell32NameSpaceFolder(Object folder)
    {
        Type shellAppType = Type.GetTypeFromProgID("Shell.Application");

        Object shell = Activator.CreateInstance(shellAppType);
        return (Shell32.Folder)shellAppType.InvokeMember("NameSpace",
        System.Reflection.BindingFlags.InvokeMethod, null, shell, new object[] { folder });
    }

 

③動画の再生長の長さを取得する

第一引数にファイル名を渡す(フルパスで)
すると、第二引数に動画の秒数が帰ってくる。
FolderItem なども使用するので、 using shell32 以外にも using System.IO も必要になる

private bool getPositionValue(string _movieName, ref int _val)
    {
        // shellClass クラスのインスタンス生成
        string strResultValue;

        // FolderItemインタフェイス
        FolderItem fItem = null;
        FileInfo fInfo = new FileInfo(_movieName);

        // Folderインタフェイス
        Folder f = GetShell32NameSpaceFolder(fInfo.DirectoryName);

        try
        {
            // ファイル情報を取得する
            fItem = f.ParseName(fInfo.Name);

            if (fItem != null)
            {
                // 時間を取得する
                // OS判定して、XP以前とインデックス区別
                // XPはMajor:5 Minor:1、7はMajor:6 Minor:1、8はMajor:6 Minor:2
                int index = 0;
                System.OperatingSystem os = System.Environment.OSVersion;

                if (os.Version.Major < 6)
                {
                    index = 21;
                }
                else
                {
                    index = 27;
                }

                strResultValue = f.GetDetailsOf(fItem, index);
                if (strResultValue.Trim() == "")
                {
                    Console.WriteLine("{0}:{1} は破損している可能性があります。", DateTime.Now.ToString("F"), _movieName);
                    return false;
                }

                // 時間の変換を行う
                string[] timeList = strResultValue.Split(':');
                _val = int.Parse(timeList[0]) * 3600;
                _val += int.Parse(timeList[1]) * 60;
                _val += int.Parse(timeList[2]);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("{0}:{1}のファイル秒数取得に失敗しました。({2})", DateTime.Now.ToString("F"), _movieName, e.Message);
            return false;
        }
        finally
        {
            // null を代入
            f = null;
            fInfo = null;
            fItem = null;
        }

        return true;
    }

人工知能がみる夢【DeepDream】

とても面白いサイトを御存知でしょうか?

Google人工知能がみる夢。

を簡単にクラウド上で体験できるサイト!

例えば、この美味しいラーメンが…!

ちなみにこの画像は、先日食べた千葉県柏市のラーメン屋ですw

f:id:chipomote:20150710094943j:plain

 

なんと…!

f:id:chipomote:20150710095006j:plain

こんなに可愛い画像に大変身!

それは、以下のサイトで出来ます。

psychic-vr-lab.com

 

ヴァーチャルリアリティ関連技術の研究開発を行うオズミックコーポレーション株式会社Psychic VR Labと人工知能アルゴリズム事業化を行う株式会社イントロンワークスは共同で、誰でも簡単に画像をアップするだけでGoogle社の開発した深層学習(ディープラーニング)アルゴリズムDeep Dreamを利用できるウェブインターフェースを公開した。公開後24時間で約1万3千枚の写真が投稿され話題になっている。(なお2015年7月7日現在1時間に2,000枚のペースで世界中から画像が集まっている。)

 

とのことです👀

私個人的には人工知能とか機械学習は全然わからないので、すごいなぁって

兎に角月刊ムーを買う人間としては、たまらなくクセになる画像が

出来上がるわけですな。

【Unity】Unity初心者が積んだこと

先日から unity 開発を本格的に開始した。
まぁ、それはいいとして
先日どうしてもわからない現象に悩まされた。


親オブジェクトに rigidbody を使用すると、
子オブジェクトでは何故か OnMouseDown() ,OnMouseDrag(),OnMouseEnter()など
マウス関係の関数に飛んでこないという…


解決方法としては、親オブジェクトに rigidbody を使用しない。
が正しいのかと思うが…
とある一定の時だけrigidbodyを追加したかったのです…

// Rigidbody を動的に追加
GameObject myobj  = GameObject.Find("親オブジェクト名");
Rigidbody myRigidbody  = myobj.AddComponent("Rigidbody") as Rigidbody;

こうして、動的にrigidbody を追加することにより、
今回の衝突?を回避することができた。
どれだけ時間がなくなったか…
思い出としてブログに残しておく。

余談だが、OnMouseDown()は、collider がMesh でも Box でもどれかが
設置されていないと反応しない。

【イベント体験】シドニアの騎士

先日、VRの体験ができるっていうことを知り、
新宿にて、Oculus Riftの体験をしてきました

体験してきたのは、面白法人カヤック作の、
シドニアの騎士 継衛発進体験装置 です。

実はシドニアの騎士という漫画、アニメさえ全く知らずに
当日グッツを買い、VRの体験をしました。

これが、マシンの全体像!
すごいのかすごくないのか、正直わかりません。

f:id:chipomote:20150310094120j:plain


Oculus Riftちゃん発見!!!

f:id:chipomote:20150310094102j:plain


マシンに座るとこんな感じになります。
まわりのお客様たちは、ワクワクしている感じがありましたね

f:id:chipomote:20150310093952j:plain


【体験してきての感想】
VRマシンを体験したあと、補完するためにシドニアの騎士の映画もみました。
みたあとで、あのVRはアニメのまんまの世界観だったな。
と再認識できました。

ただ、VRはやはり体験してみないと、
その面白さや、すごさを実感できないんだなと思いました。
それと、このコンテンツ、長さが丁度良いと感じました。
わたしはもともとOculus酔いするので、吐きそうになる前に終わってよかった的な。

開発者の人とお話したかったのですが、その方がオペレーションをされていたので、
お話できなかったのが残念でした。

これから、こういった形のVRが体験できるイベントに積極的に参加したいなと思います!
おわり