<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>きのこる庭 &#187; プログラミング言語</title>
	<atom:link href="http://kinokoru.jp/archives/category/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e8%a8%80%e8%aa%9e/feed" rel="self" type="application/rss+xml" />
	<link>http://kinokoru.jp</link>
	<description></description>
	<lastBuildDate>Wed, 09 Jan 2019 03:18:33 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.2</generator>
		<item>
		<title>【RailsによるアジャイルWebアプリケーション開発第4版】イテレーションI1 Rails4系 ログイン周りのバリデーションでハマった話</title>
		<link>http://kinokoru.jp/archives/955</link>
		<comments>http://kinokoru.jp/archives/955#comments</comments>
		<pubDate>Wed, 12 Nov 2014 12:19:26 +0000</pubDate>
		<dc:creator>Nisei Kimura</dc:creator>
				<category><![CDATA[プログラミング言語]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://kinokoru.jp/?p=955</guid>
		<description><![CDATA[<p>本に書いてある通りやっても何故かバリデーションが通らない。 何度やっても「Password Missing password」と怒られるばかり。 物は試しとGoogleで似たような人がいないか検索してみるが それらしいも [...]</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/955">【RailsによるアジャイルWebアプリケーション開発第4版】イテレーションI1 Rails4系 ログイン周りのバリデーションでハマった話</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="http://kinokoru.jp/wp-content/uploads/2014/11/images.jpg"><img src="http://kinokoru.jp/wp-content/uploads/2014/11/images.jpg" alt="images" width="225" height="225" class="aligncenter size-full wp-image-963" /></a></p>
<p>本に書いてある通りやっても何故かバリデーションが通らない。</p>
<p>何度やっても「<strong>Password Missing password</strong>」と怒られるばかり。<br />
物は試しとGoogleで似たような人がいないか検索してみるが それらしいものは見当たらない。</p>
<p>試しにModelを全コピするが一向に改善しないため、どうやらtypoではないようだ。<br />
( 元々3.2系の本だから ちょいちょい仕様が変わってたりするんだよなあ…今回もその周りのにおいがプンプンする )</p>
<p>それでもって POST時にユーザから渡って来たログを出してみて、その値を確認してみた。</p>
<pre class="brush: ruby; title: ; notranslate">
Parameters: {&quot;utf8&quot;=&gt;&quot;V&quot;, &quot;authenticity_token&quot;=&gt;&quot;c4yT/Bt6ypoDW5rl119tndpOZgLLAE4pv824XPZXRdM=&quot;, &quot;user&quot;=&gt;{&quot;name&quot;=&gt;&quot;aef&quot;, &quot;password&quot;=&gt;&quot;[FILTERED]&quot;, &quot;password_confirmation&quot;=&gt;&quot;[FILTERED]&quot;}, &quot;commit&quot;=&gt;&quot;Create User&quot;}
Unpermitted parameters: password, password_confirmation
==========================================
Unpermitted parameters: password, password_confirmation
{&quot;name&quot;=&gt;&quot;aef&quot;}
=========================================
</pre>
<p><span id="more-955"></span><br />
<strong>password</strong> と <strong>password_confirm</strong> が入っていない。それでもって、その上に何やらおかしなエラーが。<br />
「<strong>Unpermitted parameters: password, password_confirmation</strong>」</p>
<p>というわけで「<strong>Unpermitted parameters</strong>」で検索をかけた所、原因が判明。</p>
<p>Rails4系から <strong>Strong Parameters</strong> というのが導入されたらしい。<br />
どうやら ホワイトリストみたいな感じで、「このパラメータ以外は受け付けないよ」というのを generate scaffold する際にコントローラに自動で記載してくれるらしい。<br />
そこでusers_controllerを見てみると…。</p>
<pre class="brush: ruby; title: ; notranslate">
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  params.require(:user).permit(:name, :password_digest)
end
</pre>
<p>あったあった。フロント側で仮想的にパラメータを立てる際はここも変えないとダメだったみたい。<br />
というわけで以下のように変更。</p>
<pre class="brush: ruby; title: ; notranslate">
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  params.require(:user).permit(:name, :password, :password_confirmation)
end
</pre>
<p>今度は無事に通った。</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/955">【RailsによるアジャイルWebアプリケーション開発第4版】イテレーションI1 Rails4系 ログイン周りのバリデーションでハマった話</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kinokoru.jp/archives/955/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>二郎はラーメンではなく二郎というプログラミング言語である &#8211; 二郎語ではじめるプログラミング入門</title>
		<link>http://kinokoru.jp/archives/440</link>
		<comments>http://kinokoru.jp/archives/440#comments</comments>
		<pubDate>Thu, 17 Apr 2014 10:27:29 +0000</pubDate>
		<dc:creator>Nisei Kimura</dc:creator>
				<category><![CDATA[ツール系]]></category>
		<category><![CDATA[プログラミング言語]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[lex]]></category>
		<category><![CDATA[yacc]]></category>
		<category><![CDATA[コンパイラ]]></category>
		<category><![CDATA[二郎]]></category>
		<category><![CDATA[二郎語]]></category>

		<guid isPermaLink="false">http://kinokoru.jp/?p=440</guid>
		<description><![CDATA[<p>ここ最近 せっかくプログラミング言語の作り方を勉強している最中だし、どうにか二郎のコール(いわゆる二郎語の一部)をプログラミング言語で再現できないだろうかと頭を悩ませていたが、最近ようやく ある程度形になってきたのでシェ [...]</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/440">二郎はラーメンではなく二郎というプログラミング言語である &#8211; 二郎語ではじめるプログラミング入門</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="http://kinokoru.jp/wp-content/uploads/2014/04/jiromens.jpg"><img class="aligncenter size-full wp-image-557" alt="jiromens" src="http://kinokoru.jp/wp-content/uploads/2014/04/jiromens.jpg" width="578" height="402" /></a></p>
<p>ここ最近 せっかくプログラミング言語の作り方を勉強している最中だし、どうにか二郎のコール(いわゆる<strong>二郎語</strong>の一部)をプログラミング言語で再現できないだろうかと頭を悩ませていたが、最近ようやく ある程度形になってきたのでシェアする。</p>
<p>(正直な所、タイトルは「プログラミング言語」になっているものの、「やってる事ただのコンパイルじゃねーか」という感じになっちゃってます。 極めつけに「yaccとlex使ってるだけじゃねーか」って声が聞こえてきそうですが、どうか許してください )</p>
<h2>test.jiroファイルの用意</h2>
<p>以下は「<strong>二郎語</strong>」で書かれたファイル「<strong>test.jiro</strong>」である。「<strong>ニンニク入れますか？</strong>」を契機に、怒涛のコールが始まる。</p>
<pre class="brush: cpp; title: ; notranslate">

「ニンニク入れますか？」「ヤサイニンニクアブラ」「ヌキ」「ヤサイニンニクアブラ」「ニンニク」「ニンニクアブラ」「ヤサイカラメ」「ニンニクアブラ」「ニンニクアブラカラメ」「ヤサイニンニクアブラ」「アブラ」「ニンニクアブラ」「ニンニクアブラ」「ニンニク」「カラメ」「ニンニク」「ニンニク」「アブラ」「カラメ」「ニンニクアブラ」「ヤサイアブラ」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「全マシ」「ニンニク」「ヌキ」「ヤサイアブラ」「ヤサイニンニクアブラ」「ニンニクアブラ」「全マシ」「ヤサイニンニクアブラ」「ニンニク」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「アブラ」「ニンニク」「ニンニク」「ニンニク」「ヤサイカラメ」「ヤサイニンニク」「ヤサイニンニクカラメ」

</pre>
<p>ソースコード(コール)内容:  <strong>「ニンニク入れますか？」「ヤサイニンニクアブラ」「ヌキ」「ヤサイニンニクアブラ」「ニンニク」「ニンニクアブラ」「ヤサイカラメ」「ニンニクアブラ」「ニンニクアブラカラメ」「ヤサイニンニクアブラ」「アブラ」「ニンニクアブラ」「ニンニクアブラ」「ニンニク」「カラメ」「ニンニク」「ニンニク」「アブラ」「カラメ」「ニンニクアブラ」「ヤサイアブラ」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「全マシ」「ニンニク」「ヌキ」「ヤサイアブラ」「ヤサイニンニクアブラ」「ニンニクアブラ」「全マシ」「ヤサイニンニクアブラ」「ニンニク」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「アブラ」「ニンニク」「ニンニク」「ニンニク」「ヤサイカラメ」「ヤサイニンニク」「ヤサイニンニクカラメ」</strong></p>
<h2>コンパイル</h2>
<p>前述の二郎語によって記述されたコールをコンパイルするために、linux上で以下のようにコマンドを実行する。</p>
<pre class="brush: bash; title: ; notranslate">

./jiroparse test.jiro

</pre>
<p>すると、以下のように二郎語で書かれたコード(コール)をベースに<strong>「jiro.c」というC言語のファイルが出力される</strong>。</p>
<p>この中身を見てみると、二郎語によるコールがC言語に正常にコンパイルされてHello world が出力されていることがわかる( int main(void){ …、 return 0; } あたりの処理は割愛しております)。</p>
<pre class="brush: cpp; title: ; notranslate">

printf(&quot;Hello World&quot;);

</pre>
<p><span id="more-440"></span></p>
<h2>どういうことなの？</h2>
<p>結局の所、データというのは バイナリの集まりである。<br />
例えば、hello という文字列は 16進数で言う所の「68656c6c6f」である。この16進数文字列を分解すると「68」「65」「6c」「6c」「6f」となる。つまり、16進表現のセットさえつくることができれば良いわけなので、それぞれの二郎語によるコールについて、</p>
<p><strong>・「ヌキ」…0</strong><br />
<strong>・「ヤサイ」… 1</strong><br />
<strong>・「ニンニク」…2</strong><br />
<strong>・「アブラ」…4</strong><br />
<strong>・「カラメ」…8</strong></p>
<p>として割り当て、これらを組み合わせることによって成立する16進表現の2セット(=二郎語でのコール2回分)を「1文字」としてコンパイルする。</p>
<h2>二郎語における16進表現 0～16、255の例</h2>
<p><strong>0</strong> … 「ヌキ」「ヌキ」<br />
<strong>1</strong> … 「ヌキ」「ヤサイ」<br />
<strong>2</strong> … 「ヌキ」「ニンニク」<br />
<strong>3</strong> … 「ヌキ」「ヤサイニンニク」<br />
<strong>4</strong> … 「ヌキ」「アブラ」<br />
<strong>5</strong> … 「ヌキ」「ヤサイアブラ」<br />
<strong>6</strong> … 「ヌキ」「ニンニクアブラ」<br />
<strong>7</strong> … 「ヌキ」「ヤサイニンニクアブラ」<br />
<strong>8</strong> … 「ヌキ」「カラメ」<br />
<strong>9</strong> … 「ヌキ」「ヤサイカラメ」<br />
<strong>10</strong> … 「ヌキ」「ニンニクカラメ」<br />
<strong>11</strong> … 「ヌキ」「ヤサイニンニクカラメ」<br />
<strong>12</strong> … 「ヌキ」「アブラカラメ」<br />
<strong>13</strong> … 「ヌキ」「ヤサイアブラカラメ」<br />
<strong>14</strong> … 「ヌキ」「ニンニクアブラカラメ」<br />
<strong>15</strong> … 「ヌキ」「ヤサイニンニクアブラカラメ」(または「ヌキ」「全マシ」)<br />
<strong>16</strong> … 「ヤサイ」「ヌキ」<br />
<strong>255</strong> … 「ヤサイニンニクアブラカラメ」「ヤサイニンニクアブラカラメ」(または「全マシ」「全マシ」)</p>
<p>つまり、上記のセットの形態を取ることにより、たった4種類の二郎語だけで unsigned char が表現可能な0 ～ 255 までの値を全て表現することが可能となる。</p>
<p>例えば 上記に示した二郎語によるコード(コール)のうち、最初に記載されている「ヤサイニンニクアブラ」「ヌキ」という二郎語のコールはそれぞれ16進数で「7」「0」つまり70となり、これはprintfの「p」にあたる。</p>
<p>※ なお、一部のジロリアン、ロティスト、ロットマイスター、ロットマエストロのために<strong>糖衣構文として「ヤサイニンニクアブラカラメ」全てが入る場合は「全マシ」コールをサポートしている</strong>。</p>
<p>※ 「小ブタ大ブタサポートしてないのは二郎語として失格」って言われそうなので「<strong>小ブタ</strong>」「<strong>大ブタ</strong>」「<strong>小ブタダブル</strong>」「<strong>大ブタダブル</strong>」「<strong>小ブタW</strong>」「<strong>大ブタW</strong>」という二郎語のコールも一応サポートしている( ただし入れても全く意味が無いのでバイトを食うだけ )。</p>
<h2>どうしてこんなバカな真似を…</h2>
<p>この世の中、バカな真似ほど…狂気の沙汰ほど面白い…</p>
<p>因みに、元々ちゃんとプログラミング言語っぽくしようと思ったものの、二郎のコールや用語はプログラミング言語の文法規則を表現する上で相当ハードルが高く、流石に通常のプログラミング言語の作り方では表現できないと悟ったため上記の形式になった。</p>
<p>因みに brainf**kとかの言語は上のような冗長なことをせずにポインタ操作をすることで実装されているみたい。</p>
<h2>Github ( 2014.04.18追記 )</h2>
<p>とりあえずGithub上にソースコードを上げてみた。ファイル整理できてない上に誰が見てもまるっきりC言語初心者が書いたようなコードなので恥ずかしいが知ったこっちゃない。</p>
<p><a href="https://github.com/irration/jiro_programming_language" target="_blank">jiro-programming-language</a></p>
<p>それにしても人生で初めて上げたGithubのプロジェクトが二郎というのも複雑な心境。</p>
<h2>そのまた後日 ( 2014.04.21追記 )</h2>
<p>新代田にある二郎が4月末で一度お店を占めるということなので行ってきた。</p>
<p>当然店に入るとコールが飛び交っているんだけど、脳内で勝手に二郎語がコンパイルされてしまい(「ヤサイニンニクアブラ」が「7」に変換されてしまう)、もはや普通に二郎を食える身体ではなくなってしまった。</p>
<p>以上レポっす。チラシの裏すいません。</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/440">二郎はラーメンではなく二郎というプログラミング言語である &#8211; 二郎語ではじめるプログラミング入門</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kinokoru.jp/archives/440/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Cコンパイラことはじめ] 再帰的下向き構文解析の再帰ルーチンがいまいちイメージできない人に送る記事</title>
		<link>http://kinokoru.jp/archives/275</link>
		<comments>http://kinokoru.jp/archives/275#comments</comments>
		<pubDate>Sun, 09 Mar 2014 09:51:33 +0000</pubDate>
		<dc:creator>Nisei Kimura</dc:creator>
				<category><![CDATA[プログラミング言語]]></category>
		<category><![CDATA[検証・考察]]></category>
		<category><![CDATA[C言語]]></category>
		<category><![CDATA[再帰]]></category>
		<category><![CDATA[構文解析]]></category>

		<guid isPermaLink="false">http://kinokoru.jp/?p=275</guid>
		<description><![CDATA[<p>構文解析をしていてちょっと詰まったのでメモ。 上記の構文規則に基づくとすると、 10 + 20 * 5 + 10 * (1 + 1) の再帰ルーチンは以下のようになる。 (なお、 expression(), term() [...]</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/275">[Cコンパイラことはじめ] 再帰的下向き構文解析の再帰ルーチンがいまいちイメージできない人に送る記事</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>構文解析をしていてちょっと詰まったのでメモ。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2014/03/rule.png"><img class="aligncenter size-medium wp-image-276" alt="rule" src="http://kinokoru.jp/wp-content/uploads/2014/03/rule-300x202.png" width="300" height="202" /></a></p>
<p>上記の構文規則に基づくとすると、<br />
10 + 20 * 5 + 10 * (1 + 1)<br />
の再帰ルーチンは以下のようになる。<br />
(なお、 expression(), term(), factor() はそれぞれ上記の構文規則を実装した関数 )</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2014/03/kaiseki2.png"><img class="aligncenter size-large wp-image-300" alt="kaiseki" src="http://kinokoru.jp/wp-content/uploads/2014/03/kaiseki2-321x1024.png" width="321" height="1024" /></a></p>
<p><span id="more-275"></span></p>
<h2>簡単な解説</h2>
<p>再帰的下向き構文解析って？</p>
<p>コンパイラとかで構文を解析する時に使う方法の一つ。</p>
<p>例えば以下の図は再帰的下向き構文解析を行うための簡単な規則の例です。</p>
<p>ここで使用しているそれぞれのワードについては以下の式を考えると分かりやすいかもしれないです。</p>
<p>10y + 3/5(10 + 10)</p>
<p>数学では 10y とか 3/5 とかのことを「<strong>項(term)</strong>」と呼ぶけど、<br />
10y, 3/5 というのは<br />
複数の変数・数値を割って成り立っているものなので、</p>
<p>10y = 10 * y<br />
3/5 = 3 / 5 * (10 + 10)</p>
<p>というように、<br />
項は 複数個の 割り算 または かけ算 によって成り立つ一つの単位として考えられるので、上記のような構文規則になります。</p>
<p>この項を足したり引いたりしたものをここでは「<strong>式(expression)</strong>」と呼びます。</p>
<p>10y + 3/5(10 + 10) は式です。</p>
<p>「あれ？そうすると ( 10 + 10 ) は式じゃないの？」<br />
となりますが、こちらの 10 + 10 も立派な式です。<br />
ですが、最初の expression() の段階では計算しません。<br />
項を更に分割した単位である「<strong>因子(factor)</strong>」まで分解して 因子にたどり着いた段階ではじめて 式に変換して計算を開始します。</p>
<p>因子については、上の式で言うと</p>
<p>10, y, 3, 5, (10 + 10) にあたります。</p>
<p>10, y, 3, 5 はそれ以上分解できない「定数」「識別子」としてそのまま処理され、<br />
括弧がついている場合は「その中に式がある」と判断して計算を開始します。</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/275">[Cコンパイラことはじめ] 再帰的下向き構文解析の再帰ルーチンがいまいちイメージできない人に送る記事</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kinokoru.jp/archives/275/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>はじめてのC# (3) &#8211; LINQを使用してXMLファイルの保存/読み込みを試してみた</title>
		<link>http://kinokoru.jp/archives/259</link>
		<comments>http://kinokoru.jp/archives/259#comments</comments>
		<pubDate>Tue, 25 Feb 2014 09:35:29 +0000</pubDate>
		<dc:creator>Nisei Kimura</dc:creator>
				<category><![CDATA[プログラミング言語]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://kinokoru.jp/?p=259</guid>
		<description><![CDATA[<p>ご無沙汰しております。 週末でC言語のポインタ本読了してました。 Web系にいるものの、最近こういう低級言語に触れ合っているとなんとも言えない楽しさを感じるので 会社が終わるとそっちの方ばっかりいじってます。 ところで、 [...]</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/259">はじめてのC# (3) &#8211; LINQを使用してXMLファイルの保存/読み込みを試してみた</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>ご無沙汰しております。</p>
<p>週末でC言語のポインタ本読了してました。<br />
Web系にいるものの、最近こういう低級言語に触れ合っているとなんとも言えない楽しさを感じるので 会社が終わるとそっちの方ばっかりいじってます。</p>
<p>ところで、ここ数日は色々と細かいタスクが増えてきたので 自分用に簡単なGTDのツールをつくろうとLINQまわりをいじっていました。<br />
今回はXMLの保存・読み込みということで記事投稿。</p>
<h2>準備</h2>
<pre class="brush: csharp; title: ; notranslate">

using System.Xml.Linq;　// XDocument オブジェクトを使用する。
using System.IO; // ファイルの保存・読み出し時に必要。

</pre>
<p>とりあえずアセンブリ参照の追加。</p>
<h2>XMLをつくってみる。</h2>
<pre class="brush: csharp; title: ; notranslate">

XDocument F = new XDocument();
F.Add(new XElement(&quot;RootNode&quot;)); // ノードの追加
F.Save(FileName);

</pre>
<p>これで FileName に指定したパス・ファイル名でxmlデータが保存される。<br />
今回はこんな感じ。</p>
<pre class="brush: xml; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;todolist /&gt;

</pre>
<p>※ XMLにルート要素の追加をせずに保存すると読み出しの際にランタイムエラー吐くので注意。</p>
<p>ちょっといじってみた感じ、よくあるXML操作関連のAPIのような操作性で直感的に操作できて良い感じ。</p>
<p><span id="more-259"></span></p>
<h2>つくったXMLを読み出してみる。</h2>
<p>せっかく保存しても読み込みができないとさびしいので、読み込んでみる。</p>
<pre class="brush: csharp; title: ; notranslate">

XDocument F = new XDocument();
if(File.Exists(FileName)){
    F.Load(FileName);
}

</pre>
<p>てな感じで 保存したXMLドキュメントの読み込みができる。</p>
<p>でも一つのXMLファイルに大量のノードファイル詰め込んだらパフォーマンス落ちるんじゃないの？<br />
と思って50,000ノードほど単純な文章を連ねたXMLファイル(約24MB)を追加してデバッグしてみたけど、<br />
読み込みが描画処理含めて 250ミリ秒 とかなので、日頃使う簡単なツールの実用には困らないレベル。</p>
<p>( 因みに その時は</p>
<pre class="brush: xml; title: ; notranslate">

&lt;Root&gt;
  &lt;createdDateTime&gt;~~~~~~~&lt;/createdDateTime&gt;
  &lt;description&gt;はじめてのしーしゃーぷでりんくをためしてみるよ&lt;/description&gt;
&lt;/Root&gt;
 ：
 ：
</pre>
<p>という感じの、深さが全く無いノード構成だったからスピードが出ていた可能性も。<br />
ノードが深くなった場合とか複雑化してきた場合は未計測 )</p>
<p>とはいえ、たった一つのXMLファイルに全てのデータを入れて 万が一データ破損でもしたら一発でおしまいだろうから、<br />
ちゃんと作りこむなら定期的にバックアップファイル生成するとか 分散管理とか 別の施策が必要なにおいはする。</p>
<h2>(ちょっと寄り道)Configurationを使ってみる</h2>
<pre class="brush: csharp; title: ; notranslate">

using Configuration; // AppSettingsReader オブジェクトを使用する。

</pre>
<p>App.configへの追記。<br />
&lt;Configuration&gt; ~ &lt;/Configuration&gt; の間に以下のコードを追加。</p>
<pre class="brush: xml; title: ; notranslate">
&lt;appSettings&gt;
&lt;add key=&quot;DataFile&quot; value=&quot;C:\Users\hoge\Desktop\data.xml&quot; /&gt;
&lt;/appSettings&gt;

</pre>
<p>こんな感じで登録しておけば、</p>
<pre class="brush: csharp; title: ; notranslate">
string FileName = (string)(AppSettingsReaderインスタンス.GetValue(&quot;DataFile&quot;, typeof(string)));
</pre>
<p>こんな感じで参照可能。</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/259">はじめてのC# (3) &#8211; LINQを使用してXMLファイルの保存/読み込みを試してみた</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kinokoru.jp/archives/259/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>はじめてのC# (2) &#8211; 通常のC#クラスをエントリポイントにしてWPFを使用する</title>
		<link>http://kinokoru.jp/archives/247</link>
		<comments>http://kinokoru.jp/archives/247#comments</comments>
		<pubDate>Thu, 13 Feb 2014 03:47:13 +0000</pubDate>
		<dc:creator>Nisei Kimura</dc:creator>
				<category><![CDATA[プログラミング言語]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://kinokoru.jp/?p=247</guid>
		<description><![CDATA[<p>お久しぶりです。 ブログを更新していないしばらくの間、WPFをいじくり倒してました。おかげさまで、超簡単なデスクトップアプリケーションならなんとかつくれるようになりました。 というわけで週末は勉強がてらWPFでクッキーク [...]</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/247">はじめてのC# (2) &#8211; 通常のC#クラスをエントリポイントにしてWPFを使用する</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>お久しぶりです。</p>
<p>ブログを更新していないしばらくの間、WPFをいじくり倒してました。おかげさまで、超簡単なデスクトップアプリケーションならなんとかつくれるようになりました。<br />
というわけで週末は勉強がてらWPFでクッキークリッカーっぽいものをつくって遊んでました。</p>
<p>そこで感じたのが、<br />
<strong>複数ウィンドウでデリゲートとかイベントとか書いてるうちにクラス間の関係が密結合になってしまう</strong>ということ。<br />
こういう場合、一つのクラスの規模が大きくなってきて ある属性をクラス化して分離したくなった時とかになかなか面倒くさいので、<br />
一つメディエータみたいな感じのクラスが欲しい。</p>
<p>でもエントリポイントがWPFの一クラスだとあまり綺麗な構造になりそうもないので、<br />
いっそのこと<strong>エントリポイントをWPFのクラスじゃなくて通常のC#クラスにしてしまって、WPFを分離してはどうか</strong>。<br />
さらに<strong>各描画用インスタンスを保持するクラスを用意して、複数ウィンドウ間でのイベント処理を楽にしてはどうか</strong>という発想に至った。<br />
(API化すれば良い気もするが)</p>
<p>＊なお、<span style="text-decoration: underline;"><strong>この記事はC#/WPF超初心者が執筆しているので、参考にする場合は十分に注意してください</strong></span>。また、「いやそもそもこうした方が楽じゃね」っていうところに関してはどんどんご指摘いただければ幸いです。</p>
<p><span id="more-247"></span></p>
<h2>プロセス</h2>
<p>1. 「空のプロジェクト」を選択。<br />
2. エントリポイントになるクラスの追加。<br />
3. とりあえずコンストラクタを書いておく。</p>
<p>* ここまでは通常のC#プログラムの作成と同じ。</p>
<p>4. Lib/Display ディレクトリの作成<br />
5. Directory 内に　WPFクラス FrontWindow.xaml / FrontWindow.xaml.cs の作成<br />
6. .NET環境とかだと デフォ値で UserControl になっているので、xaml, xaml.cs ともに 基底クラス云々を Window に差し替え。<br />
7. さらに WPFクラス App.xaml の作成。<br />
8. UserControl → xaml, xaml.cs ともに 基底クラス云々を Application に差し替え。<br />
9. System.xamlのアセンブリ参照が追加されていない場合は追加。<br />
10. Display 内に メディエータとなる DisplayBaseクラス の作成。</p>
<p>11. DisplayBaseクラスに ShowFront() メソッドの追加。</p>
<pre class="brush: csharp; title: ; notranslate">
public FrontWindow FW;
public Application App = new Application();

public void ShowFront(){
FW = new FrontWindow();
FW.Show();
App.Run(FW);
}

</pre>
<p>App.Run(FW) という形にする理由として、<br />
<strong>Showメソッド自体そもそもnon-blocking callで、普通に呼び出してもウィンドウがパッと開いて閉じてしまう</strong>から。</p>
<p>12. エントリポイントのクラスのコンストラクタの書き換え。</p>
<pre class="brush: csharp; title: ; notranslate">
[STAThread]
public static void Main(){
DisplayBase Display = new DisplayBase();
DisplayBase.ShowFront();
}

</pre>
<p>STAThreadをつける理由として、<br />
<strong>WPF自体 STAThread というスレッド以外で動作させられないようになっているので、</strong><br />
<strong>通常のエントリポイントからWPFオブジェクトを呼び出してしまうと例外が飛んでしまうから</strong>。</p>
<p>13. 毎回立ち上がるコマンドプロンプトを消す。</p>
<p>プロジェクト　&gt; ●●(プロジェクト名)のプロパティで出力の種類「コマンドプロンプト」になっている部分を「Windowsアプリケーション」に選択しなおす。</p>
<p>だん。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2014/02/done.jpg"><img class="aligncenter size-medium wp-image-250" alt="done" src="http://kinokoru.jp/wp-content/uploads/2014/02/done-300x151.jpg" width="300" height="151" /></a></p>
<p>アドバイスなどございましたらどしどしご指摘いただければ幸いです！</p>
<p>それではまたm(_ _)m</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/247">はじめてのC# (2) &#8211; 通常のC#クラスをエントリポイントにしてWPFを使用する</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kinokoru.jp/archives/247/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
