<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/silphy1001/">
    <title>底辺プログラマの戯言@Wiki</title>
    <link>http://w.atwiki.jp/silphy1001/</link>
    <atom:link href="https://w.atwiki.jp/silphy1001/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>底辺プログラマの戯言@Wiki</description>

    <dc:language>ja</dc:language>
    <dc:date>2016-04-30T01:18:28+09:00</dc:date>
    <utime>1461946708</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/26.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/25.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/24.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/23.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/22.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/21.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/20.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/19.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/26.html">
    <title>【DeepLearning】Vol.02 CUDA環境の確認</title>
    <link>https://w.atwiki.jp/silphy1001/pages/26.html</link>
    <description>
      &amp;tags()

----

* セットアップの確認

Vol.01でセットアップを行ったので、セットアップできていることを確認する。
Windows環境だとVisual Studioコマンドプロンプトを使うらしい。

自分の環境ではテキストどおり確認できた。
#image(00_VSコマンドプロンプトでnvccバージョン確認.jpg)

テキストはこちら
#amazon(4061538209,image,text)

* サンプルプログラムの実行

サンプルプログラムを実行する。
さきほど実行していたVSコマンドプロンプトでサンプルプログラムがあるファイルパスに移動して、deviceQuery.exeを実行する。

自分の環境ではNVIDIA GeForce GTX 750 Tiが認識されてた。
#image(01_VSコマンドプロンプトでdeviceQuery.exeを実行.jpg)

サンプルプログラムの実行は、Linuxではコンパイルも手順に含まれていたが、Windowsは実行のみだった。
何か違うのかなぁ。とりあえず、手順どおり進めてみよう。

#comment()    </description>
    <dc:date>2016-04-30T01:18:28+09:00</dc:date>
    <utime>1461946708</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/silphy1001/pages/2.html</link>
    <description>
      #javascript(){{

(function(d) {
  var sc=d.createElement(&quot;script&quot;),
      ins=d.getElementsByTagName(&quot;script&quot;)[0];
  sc.type=&quot;text/javascript&quot;;
  sc.src=(&quot;https:&quot;==d.location.protocol?&quot;https://&quot;:&quot;http://&quot;) + &quot;code.analysis.shinobi.jp&quot; + &quot;/ninja_ar/NewScript?id=00110985&amp;hash=79e94fb9&amp;zone=36&quot;;
  sc.async=true;
  ins.parentNode.insertBefore(sc, ins);
})(document);

}}

**訪問者数
合計：&amp;counter()
今日：&amp;counter(today)
昨日：&amp;counter(yesterday)
トップページの合計：&amp;counter(total, page=トップページ)

----

**タグ
#tag_cloud(sort=num)

----

**直近の更新
#recent(5)

----

**メニュー
-[[トップページ&gt;底辺プログラマが駄文を蓄積してゆく技術データベース、もとい備忘録。]]
-[[プラグイン紹介&gt;プラグイン]]
-[[まとめサイト作成支援ツール]]

----

**リンク
-[[@wiki&gt;&gt;http://atwiki.jp]]
-[[@wikiご利用ガイド&gt;&gt;http://atwiki.jp/guide/]]

**他のサービス
-[[無料ホームページ作成&gt;&gt;http://atpages.jp]]
-[[無料ブログ作成&gt;&gt;http://atword.jp]]
-[[2ch型掲示板レンタル&gt;&gt;http://atchs.jp]]
-[[無料掲示板レンタル&gt;&gt;http://atbbs.jp]]
-[[お絵かきレンタル&gt;&gt;http://atpaint.jp/]]
-[[無料ソーシャルプロフ&gt;&gt;http://sns.atfb.jp/]]

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります


//**更新履歴
//#recent(20)

&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2016-04-29T21:33:13+09:00</dc:date>
    <utime>1461933193</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/25.html">
    <title>【DeepLearning】Vol.01 CUDA環境のセットアップ</title>
    <link>https://w.atwiki.jp/silphy1001/pages/25.html</link>
    <description>
      * 背景

仕事で画像を入力して何か処理するようなプログラムを書いた。
で、この画像がハードウェアの制約やなんやでサイズが小さすぎたり大きすぎたりして結構障害になってる。
ハードは限界があるし、コスト的にもそんなにポンポン作りかえられない。
ハードに因らずソフト的に解決するには、画像処理をするしかない！ &lt;= イマココ
（前提として、GPUは使える見込みだからというのがあるけど）

* 参考資料

GPUプログラミング入門-CUDA5による実装／伊藤智義編（講談社刊）
他、公式Webサイトなど。

* ホスト環境

自分のマシンはオンラインゲームをするために(笑)グラボを購入したので、Windowsだけど環境は整ってた。
|OS|Windows 7 Professional 64bit|
|RAM|8GB|
|Graphics|NVIDIA GeForce GTX 750 Ti|
|CUDA capability|5.0|
GPU/CUDAなど ... https://developer.nvidia.com/cuda-gpus

* インストーラの入手

参考資料の「第2章 CUDAのインストールと実行」を見ながら進めてみる。
ダウンロードは[[こことか&gt;https://developer.nvidia.com/cuda-downloads]]から。

ただ、CUDA5は記事を書いた時点で結構古くなってる。
7.5が最新だったかな。なので、本の通りにやる場合はLegacy Toolkitのリンクから必要なものを探してくる必要があることに注意。
ここでは本のとおりにやってみようと思う。

ダウンロードは.msiファイルで1GB弱ほどあったので、コーヒーでも飲みながら待とう。

* インストール

今回はこのファイルをダウンロード＆インストール
 cuda_5.0.35_winvista_win7_win8_general_64-3.msi

インストールの手順は本の通りだけど、ディスプレイドライバのインストールステップで失敗した。
今は気にせず進めてみよう。
（既にインストール済みだからかなぁ）


#comment()    </description>
    <dc:date>2016-03-02T01:26:53+09:00</dc:date>
    <utime>1456849613</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/1.html">
    <title>底辺プログラマが駄文を蓄積してゆく技術データベース、もとい備忘録。</title>
    <link>https://w.atwiki.jp/silphy1001/pages/1.html</link>
    <description>
      **底辺プログラマの戯言@wikiへようこそ
このブログは、底辺プログラマの筆者が日常や業務上気になったことやわからなかったこと、困ったこと、楽しかったことなどを書き連ねた駄文を蓄積していくものです。筆者にとっての技術データベース、備忘録ですね。

ですので、決して情報発信とか大層なことは考えていませんが、役に立つのであれば、世の中の方と情報共有できればいいなぁと思っています。
また、表現や内容に不適切なものがあるかもしれませんが、その時は温かい目で見ていただくか、ご指摘いただければ幸いです。

**最近の更新情報
&amp;html( &lt;script type=&quot;text/javascript&quot;  charset=&quot;UTF-8&quot; src=&quot;http://www51.atwiki.jp/silphy1001/js/recent/10&quot;&gt; &lt;/script&gt; )

以下、tmpl。

----

**@wikiへようこそ
-ウィキはみんなで気軽にホームページ編集できるツールです。
-このページは自由に編集することができます。
-メールで送られてきたパスワードを用いてログインすることで、各種変更（サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等）することができます

**まずはこちらをご覧ください。
-[[@wikiの基本操作&gt;http://atwiki.jp/guide/category2.html]]
-[[用途別のオススメ機能紹介&gt;http://atwiki.jp/guide/category22.html]]
-[[@wikiの設定/管理&gt;http://atwiki.jp/guide/category6.html]]

**分からないことは？
-[[@wiki ご利用ガイド&gt;http://atwiki.jp/guide/]]
-[[よくある質問&gt;http://atwiki.jp/guide/category1.html]]
-[[無料で会員登録できるSNS内の@wiki助け合いコミュニティ&gt;http://sns.atfb.jp/view_community2.php?no=112]]
-[[@wiki更新情報&gt;http://www1.atwiki.jp/guide/pages/264.html]]
-[[@wikiへのお問合せフォーム&gt;http://atwiki.jp/helpdesk]]
等をご活用ください

**その他お勧めサービスについて
-[[大容量１Ｇ、PHP/CGI、MySQL、FTPが使える無料ホームページは@PAGES&gt;&gt;http://atpages.jp/]]
-[[無料ブログ作成は@WORDをご利用ください&gt;&gt;http://atword.jp/]]
-[[2ch型の無料掲示板は@chsをご利用ください&gt;&gt;http://atchs.jp/]]
-[[フォーラム型の無料掲示板は@bbをご利用ください&gt;&gt;http://atbb.jp/]]
-[[お絵かき掲示板は@paintをご利用ください&gt;&gt;http://atpaint.jp/]]
-[[その他の無料掲示板は@bbsをご利用ください&gt;&gt;http://atbbs.jp/]]
-[[無料ソーシャルプロフィールサービス @flabo(アットフラボ)&gt;&gt;http://sns.atfb.jp]]

**おすすめ機能
-[[気になるニュースをチェック&gt;http://atwiki.jp/guide/17_174_ja.html]]
-[[関連するブログ一覧を表示&gt;http://atwiki.jp/guide/17_161_ja.html]]

**その他にもいろいろな機能満載！！
-[[@wikiプラグイン&gt;http://atwiki.jp/guide/category17.html]]
-[[@wiki便利ツール&gt;http://atwiki.jp/guide/category32.html]]
-[[@wiki構文&gt;http://atwiki.jp/guide/category16.html]]
-[[@wikiプラグイン一覧&gt;http://www1.atwiki.jp/guide/pages/264.html]]
-[[まとめサイト作成支援ツール&gt;http://atwiki.jp/matome/]]

**バグ・不具合を見つけたら？ 要望がある場合は？
お手数ですが、メールでお問い合わせください。    </description>
    <dc:date>2015-12-30T22:50:39+09:00</dc:date>
    <utime>1451483439</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/24.html">
    <title>【LFS】 ホストシステム準備</title>
    <link>https://w.atwiki.jp/silphy1001/pages/24.html</link>
    <description>
      * LFSのためのホストシステムの準備

以前、「VMwareかなぁ」とか思ってましたが、最近は何でもクラウドなのでクラウドベースの環境を使ってみる事に。
-&gt; CodeAnywhere.com
ここで、C/C++ StackからCentOSを選んで、Deployされるのを待つこと数十秒。

超お手軽Linuxホスト環境のできあがり♪

...
ただし、CodeAnywhereでは使えるストレージサイズが小さいなど問題があるので、結局VMware Playerで仮想マシンを構築する事になりましたとさorz
 -&gt; CentOS 7 を使用

* LFSのためのホストシステム要件の確認

まず、本家のドキュメントを参照します。
今回は、Linux From Scratch Version 7.2 ということなので、
こちらを参照
http://linuxjf.sourceforge.jp/JFdocs/LFS-BOOK/index.html

で、この序文 vii.ホストシステム要件
http://linuxjf.sourceforge.jp/JFdocs/LFS-BOOK/prologue/hostreqs.html
に、ホストシステムに必要なツールなどが書かれているので、準備します。
ここでは、version_check.shが公開されているので、これを使ってインストール済みかどうか検証。

ただし、バージョンは今はチェックせず、何かしら入っていればいいとします。
(要件のバージョンより古いものについてはアップデートしますが)。。。

で、bison / bzip2 / yacc / patch / makeinfo(Textinfo) / xz で怒られたので、 sudo yum -y install hogehoge でインストールして準備完了。

さー、今度は実作業かなー。

#comment()    </description>
    <dc:date>2015-01-29T10:11:44+09:00</dc:date>
    <utime>1422493904</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/23.html">
    <title>【組込みTDD】 2.7 練習問題</title>
    <link>https://w.atwiki.jp/silphy1001/pages/23.html</link>
    <description>
      *テスト駆動開発による組み込みプログラミングをやってみる Vol.2

『テスト駆動開発による組み込みプログラミング　C言語とオブジェクト指向で学ぶアジャイルな設計』
James W.Grenning 著
蛸島 昭之 監訳
笹井 崇司 訳
#html2(){{{{{{
&lt;iframe src=&quot;http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=404040&amp;IS2=1&amp;bg1=404040&amp;fc1=FFFDFD&amp;lc1=D100FF&amp;t=silphy0b-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;ref=tf_til&amp;asins=4873116147&quot; style=&quot;width:120px;height:240px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
}}}}}}

**2章　テスト駆動ツールと約束事 - 2.7 練習問題(環境構築)

さて、2章の練習問題(環境構築)です。

CppUTestを使うつもりで作っていきます。
で、環境としては、流行のクラウドを使って、Linuxの環境を作ります。
この狙いは
「&amp;bold(){&amp;color(red){いつでもどこでも同じ環境にアクセスできること}}」
これに尽きます。このアクセスの良さは何物にも代えがたいですね。

どうも職場の環境だと古きよきビルドシステムとか、職人スキルとかに頼った開発体制・環境になりがちで、新参者がすぐに作業できる環境ってなかなか構築されないのです。
アンテナを張って、一見無関係な知識も得ていかないと。。。とは思いつつも、Web系の人とか、TDDバリバリやってますの人とか、その他諸々方面でご活躍のエンジニアの方の足元にも及ばないので、自分が興味を持ったことくらいはやってみようというスタンスでおります(汗)

----

では、環境構築に着手！

まず、クラウド環境として &amp;color(purple){Codeanywhere} を選択しました。
これはAndroid端末でGoogle Playをフラフラしてたら偶然見つけて、「お！？」っと思ったのがきっかけです。
無料で少し使ってみてそれなりの使い心地だったので選択しました。

有料プランにすれば$7/Monthくらいで仮想マシン(Devbox)が10個だったかな？使えます。

Codeanywhere.com
https://codeanywhere.com/

**Step.1 &amp;color(purple){Codeanywhere}のトップページを開く
#image(00_codeanywhere_top.png,width=620,height=480,title=Codeanywhereエントランス)
アカウントを持ってない方は「SingUp」、持ってる方は「Login」しましょう。

**Step.2 &amp;color(purple){Codeanywhere}にログインする
こんな感じのメインページが表示されます。
#image(01_codeanywhere_main_page.png,width=620,height=480,title=Codeanywhereトップページ)

**Step.3 &amp;color(orange){Devbox}を追加する
左ペインのメニューから「Add DevBox」をクリックして、&amp;color(orange){DevBox}のコンフィギュレーション画面を表示させます。
#image(02_codeanywhere_add_devbox.png,width=620,height=480,title=DevBox追加)
#image(03_codeanywhere_add_devbox_config.png,width=620,height=480,title=DevBoxコンフィギュレーション画面)
すると、コンフィギュレーション画面が開くので、今回は下図のように設定します(C++,Ubuntu、名前は自由です)。
#image(04_codeanywhere_add_devbox_configured.png,width=620,height=480,title=DevBox設定内容)
「&amp;color(green){Create}」ボタンをクリックすると、デプロイが開始されるのでしばし待ちます。
#image(05_codeanywhere_deploy_devbox.png,width=620,height=480,title=DevBoxデプロイ)
デプロイが完了すると、下図のようにDevboxが追加され、環境が使用可能になります。
図中右上はログインに使用しているアカウント情報が、中央上部ペインに表示されているテキストファイルには、DNSやサービス公開時に使用するURLなどが記載されています。
#image(06_codeanywhere_deployed_devbox.png,width=620,height=480,title=DevBoxデプロイ完了)

**Step.4 コードをダウンロードして展開する
テキストに書かれているとおり、コードをダウンロードします。
GUIはないので、wgetで取ってくればいいと思います。
#image(07_codeanywhere_get_and_expand_code.png,width=620,height=480,title=コードの取得と展開)

**Step.5 ダウンロードしたコードでmakeする
ダウンロードしたコードの中のトップ階層でmakeします。
 cabox@box-codeanywhere:~$ make
#image(08_codeanywhere_make_all.png,width=620,height=480,title=コードのmake)
ここで、makeが失敗します。makeに失敗する理由は環境変数CPPUTEST_HOMEが設定されていないからです。
#image(09_codeanywhere_make_fail_need_env_setup.png,width=620,height=480,title=コードのmakeに失敗)
README.txt
#image(10_codeanywhere_show_README.png,width=620,height=480,title=README.txt)
そもそもCppUTestをインストールしていないので、当たり前ですね。
README.txtに従って、CppUTestをソースからインストールします。

**Step.6 CppUTestのインストール
まず、何はともあれCppUTestの公式サイトへ行き、ソースコードを入手します。

CppUTest
http://cpputest.github.io/
#image(11_CppUTest-org_top.png,width=620,height=480,title=CppUTestのトップページ)

GUIはないので、リンクを調べてwgetとかでいいんじゃないでしょうか。
#image(12_codeanywhere_cpputest_downloaded.png,width=620,height=480,title=CppUTestダウンロード完了wget)

例のごとく、configure,make,make installでGOです。
ただ、途中でCppUTest自体のユニットテストが実行されるので、結果が&amp;color(green){GREEN}であることは確認しましょう。
 cabox@box-codeanywhere:~$ cd
 cabox@box-codeanywhere:~$ tar zxf cpputest-3.6.tar.gz
 cabox@box-codeanywhere:~$ cd ~/cpputest-3.6
 cabox@box-codeanywhere:~$ ./configure
 cabox@box-codeanywhere:~$ make
 cabox@box-codeanywhere:~$ make check
 cabox@box-codeanywhere:~$ make tdd
 cabox@box-codeanywhere:~$ sudo make install

**Step.7 環境変数の設定
私の構築した環境には.bash_profileがなかったので、作りましたが、ログイン時に読み込まれるファイルでexportしておけば問題ないかと。
 cabox@box-codeanywhere:~$ echo &quot;export CPPUTEST_HOME=/home/cabox/cpputest-3.6&quot; &gt; ~/.bash_profile
 cabox@box-codeanywhere:~$ source ~/.bash_profile
 cabox@box-codeanywhere:~$ env | grep CPPUTEST_HOME
 CPPUTEST_HOME=/home/cabox/cpputest-3.6

**Step.8 コードのmake再び
Step.5で実施したとおりもう一度、ダウンロードしたコードの中のトップ階層でmakeします。
 cabox@box-codeanywhere:~$ make

これが成功して、ユニットテストが&amp;color(green){GREEN}であれば、環境構築完了です。
少しつまづきましたが、簡単に構築できました。

----

そんなこんなで、まずは2章(環境構築)完了。
次は練習問題の本体にチャレンジ！
練習問題は次の課題があります。
+ &amp;s(){環境を作ることと}
+ テストを追加すること
+ テストを変更すること

#comment()    </description>
    <dc:date>2014-12-17T00:27:46+09:00</dc:date>
    <utime>1418743666</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/22.html">
    <title>【組込みTDD】 ツールとお約束</title>
    <link>https://w.atwiki.jp/silphy1001/pages/22.html</link>
    <description>
      *テスト駆動開発による組み込みプログラミングをやってみる Vol.1

『テスト駆動開発による組み込みプログラミング　C言語とオブジェクト指向で学ぶアジャイルな設計』
James W.Grenning 著
蛸島 昭之 監訳
笹井 崇司 訳
#html2(){{{{{{
&lt;iframe src=&quot;http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=404040&amp;IS2=1&amp;bg1=404040&amp;fc1=FFFDFD&amp;lc1=D100FF&amp;t=silphy0b-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;ref=tf_til&amp;asins=4873116147&quot; style=&quot;width:120px;height:240px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
}}}}}}

**2章　テスト駆動ツールと約束事

さて、2章です。

練習問題以外は解説とか定義とかなので、さくっと読みます。

こんなことが書いてあります。
・&amp;bold(){&amp;color(green){ユニットテストハーネス}}は、プロダクトコードがどのように振舞うべきかを「プログラマが表現できるようにする」ためのソフトウェアパッケージ
・ユニットテストハーネスとしては「&amp;bold(){&amp;color(red){Unity}}」「&amp;bold(){&amp;color(red){CppUTest}}」を使うよ！
・&amp;bold(){&amp;color(green){テストフィクスチャ}}が作られた理由は「重複をなくすこと」
・Unity vs CppUTest、要請に合わせて選んでね
・&amp;bold(){&amp;color(green){4フェーズテストパターン}}を守ると、可読性の高い(=ドキュメントとしての価値のある)テストコードが書けるよ！

本書内では、これらを悪名高い「sprintf」関数のテストを題材にUnity、CppUTestのそれぞれについて解説してくれています。
個人的にはCppUTestが使い勝手がいいなと感じました。
理由は、「テストケースを登録しなくてよい」、これに尽きます。

Unityの方は、テストケースをインストールするスクリプトが用意されているようですが、CppUTestの方は言語仕様を利用して自動的にテストケースをインストールするためにユーザが登録する必要がなくなっています。
この二つの意味合いは全然違っているので、CppUTestの方がいいなと思います。

ただ、CppUTestはC++なので、C++全く知らない場合はどう書いていいものやら躊躇するかもしれませんね(^^;
あと、「extern &quot;C&quot;」などのピュアなC言語では必要のないプログラミングスキルや知識が求められるので、純粋にC言語でやりたい人はUnityを選択するとよいかもしれませんね。
後は、ユニットテストハーネスはどれでも大体似たようなつくりと思想になっているはずなので、必要に応じて選ぶべきですね。それこそ、&amp;color(purple){&amp;italic(){CUnit}}とか&amp;color(purple){&amp;italic(){EmbUnit}}とかたくさんのユニットテストハーネスがありますので。。。

初めて触るっていう人は、CppUTestかUnityを選択して、使ってみて足りないところが出てきたら別のツールを探すなり、自分で追加機能を入れ込むなりするとハッピーになれるかもしれませんね。

----

そんなこんなで、まずは2章(P.11-P.26)読了。
この辺は、大丈夫かな。
次は練習問題にチャレンジ！なので、環境の構築をやります。
練習問題は次の課題があります。
+ 環境を作ることと
+ テストを追加すること
+ テストを変更すること

てことで、実際にコードを触る必要があるので、次は&amp;italic(){&amp;color(purple){Codeanywhere} + &amp;color(orange){Devbox}}で&amp;italic(){&amp;color(red){Linux(Ubuntu)}} 環境を作ります。

#comment()    </description>
    <dc:date>2014-12-11T01:57:26+09:00</dc:date>
    <utime>1418230646</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/21.html">
    <title>【組込みTDD】 テストファーストを体感</title>
    <link>https://w.atwiki.jp/silphy1001/pages/21.html</link>
    <description>
      *テスト駆動開発による組み込みプログラミングをやってみる Vol.0

オライリージャパンから出版されている本。ずっとやってみたかったんだけど、ただ読んでるだけになってた本。
ようやくやれそうなので、少しずつやってみる。
あと、書かないとやらないので、ここでやってることを残しておこうｗ

『テスト駆動開発による組み込みプログラミング　C言語とオブジェクト指向で学ぶアジャイルな設計』
James W.Grenning 著
蛸島 昭之 監訳
笹井 崇司 訳
#html2(){{{{{{
&lt;iframe src=&quot;http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=404040&amp;IS2=1&amp;bg1=404040&amp;fc1=FFFDFD&amp;lc1=D100FF&amp;t=silphy0b-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;ref=tf_til&amp;asins=4873116147&quot; style=&quot;width:120px;height:240px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
}}}}}}

これによると、組込み環境をかなり意識した本になっています。
私も自分でユニットテストフレームワークもどきを作ってやってみたことはありますが、横展開するにはちょっとちゃち過ぎましたので、これを機に正式にフレームワークとしてリリースされている成果物を利用させていただこうと考えています。
(商用品は高いし、会社は買ってくれないしねｗ)

**1章　テスト駆動開発


さて、1章からやっていきます。

1章では、「テスト駆動開発とはなんぞや」ってところを、洋書にありがちな非常に気さくな感じの文書体、ジョークなども交えながら教えてくれます。

ここでは「なぜTDDが必要か？」が説かれています。
※テスト駆動開発を英語で書くと Test Driven Development=TDD ですね。

基本的には次のようなことが言われていると理解しました。
本の内容を丸々コピーみたいになるからこれ以上細かく書けないけれど、大体こんな感じですｗ
+ テストしないとバグが入り込む隙を与える
+ レビューでは気付かないかもしれないが、実際にコードを動かして(=テストを実行して)みれば気付ける
+ バグの混入が疑われる箇所には全てテストを書く必要がある
+ テストを書こう！
+ TDDは「レッド～グリーン～リファクタリング」という小さなサイクルを高速で回す

うん、そうですよね。ずっとうなずいてました、読みながら。

会社でもよくあるんですが「単体テストは書いてない」「単体テスト仕様書はあるけど、それを実施するのは一度だけ」とかっていう状況に出くわします。非常によく。
一度きりの仕事なら確かにそれもいいかもしれません。
でも、その仕事が本当に一度きりかどうかなんて「その時」が来ないとわからない訳です。
それに、エンジニアの端くれとして、「動くかどうかわからんもの」を堂々とリリースする気にはなれません。
「じゃあやっぱりちゃんとしないとまずくない？」と思うのですよね、自然に。

それに、この考え方を知って私はこう感じたのです。
「自動化された実行可能なユニットテストはコードを保護するツールだ！」と。

これって、受託開発とかでも使える考え方なんじゃないかと思っているので、是非会得して実践したいですね＾＾

そして、その後この考え方が既に体系的に纏められていることを知り、勘ではなく確信に変わったのですが、それはまた別のお話。
『レガシーコード改善ガイド　保守開発のためのリファクタリング』
マイケル・C・フェザーズ 著
ウルシステムズ株式会社 監訳
平澤章／越智典子／稲葉信之／田村友彦／小堀真義 訳
#html2(){{{{{{
&lt;iframe src=&quot;http://rcm-fe.amazon-adsystem.com/e/cm?t=silphy0b-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4798116831&amp;ref=qf_sp_asin_til&amp;fc1=FFFDFD&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=D100FF&amp;bc1=404040&amp;bg1=404040&amp;f=ifr&quot; style=&quot;width:120px;height:240px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
}}}}}}

----

そんなこんなで、まずは1章(P.1-P.10)読破！
2章から実際にやってみることになるので、その前に環境構築からやっていきますかねー。

恐らく、環境は Codeanywhere + DevboxでLinux(UbuntuかCentOS)になりますんで、その辺りのことも触れながら書いていきます。

#comment()    </description>
    <dc:date>2014-12-09T23:38:32+09:00</dc:date>
    <utime>1418135912</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/20.html">
    <title>【LFS】 LFSはじめました</title>
    <link>https://w.atwiki.jp/silphy1001/pages/20.html</link>
    <description>
      組込みLinux環境でアプリケーション開発を行なっているソフトウェアエンジニアです。
ようやくそれなりにエンジニアらしくなってきたかな？というレベルに達したと思っています。
ただし、今はPMの立ち位置にいるのでガッツリ開発、というわけではないんですけど。。。

さて、そんなフラストレーションからか、湿度が高くて蒸し暑いからか、LFSをやってみることにしました。
開発現場でLinuxについて知らなさ過ぎるなと痛感したためです。
以前はGentoo Linux触ってみたりしてましたが、ちょっと違うと感じました。
また組込みOS入門という本も(まだ読みかけですけど)やってみたりしてます。

が、そもそもLinux自体について知らなさ過ぎて対処できないことが多いのでここらでちょっとやってみないとまずいなということで、探していたらLFSが見つかりました。
LFS=Linux for Scratch
私にはピッタリですねｗ

ということで、これから情報を集めてぼちぼちとやっていこうと思います。
まずはVMwareでLinux環境を作って置かないといけないっぽいので、その辺からかなぁ。

#comment()    </description>
    <dc:date>2014-06-29T01:55:51+09:00</dc:date>
    <utime>1403974551</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/19.html">
    <title>【正規表現】 こぼれ話 URLのフォーマットチェック</title>
    <link>https://w.atwiki.jp/silphy1001/pages/19.html</link>
    <description>
      久々の更新ですが、今日は正規表現についてのこぼれ話です。

ネットワークプログラミングってちゃんとやったことがなかったので、やってみようと思い立ち、
以下のサイトを参照してお勉強してみることにしました。
http://x68000.q-e-d.net/~68user/net/c-http-1.html

※作者様、ありがとうございます！勉強させていただきますm(_ _)m

この時、Test Firstライクに、自分でテストコードとそれをmake時に自動実行して結果を出力するようにmakefileを書いてます。あ、C言語です。

話が逸れました。

で、元のコードではURLを起動時引数にもらって実行してますが、作ってるコートではhttpClientクラス(のようなもの)の初期化関数にURLを渡します。
この時、テストコードを書くと必然的にURLをチェックするコートが必要なことがわかるので、実装しようとしたのですが、意外にURLかどうかをチェックするのって面倒だった。。。


そこで正規表現を使うことにしたのですが、正規表現でURLってどうやって検索すればいいんだ？？？？


単純にhttp://www.google.co.jpとかなら、例えばこんな表現でいけますよね。

 ^http://.+

でもこれだと、ポートが指定された時にそのポート番号が適切かどうかが判断できない。
確かに、ポート番号を一度抽出してから数値として比較すれば一発ですが、そのためだけに、一度抽出するのはちょっと･･･と思ってしまいました。

そこで、美しくないですが、ポート番号は1-5桁の数字で5桁の時は65535が最大値なので、以下のようにすればこの条件にマッチする数字が検索できると思いました。

 ([1-6][0-5]{2}[0-3][0-5]|[1-9][0-9]{3}|[1-9]{2}|[0-9])


で、これと組み合わせて、ポート番号が指定されない場合もあるので、選択で両方のパターンを記述するとこうなります。

 ^http://([^:]+|[^:]+:([1-6][0-5]{2}[0-3][0-5]|[1-9][0-9]{3}|[1-9]{2}|[0-9])(/[^:0-9]*|[^:0-9]*))


これを使って検索すると、なんと、部分一致してしまうので、http://www.hogehoge.com:65536 とかでも一致したことになってしまいます。

完全一致にするにはどうすればいいかと言うと、行末まで一気に指定してしまえばいいです。

 ^http://([^:]+|[^:]+:([1-6][0-5]{2}[0-3][0-5]|[1-9][0-9]{3}|[1-9]{2}|[0-9])(/[^:0-9]*|[^:0-9]*))$


これで、ひとまず希望する検索結果が得られました。今のところ(^^;


今後テストを追加していけば不備が見つかるかもしれないので、その時に修正して実装していこうと思います。
こういうのをぱっと思い付かないあたりが、経験値の低さを物語っているというか、底辺らしいですねｗ


&amp;u(){参考資料}
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/regex.3.html

#comment()    </description>
    <dc:date>2014-03-11T23:06:08+09:00</dc:date>
    <utime>1394546768</utime>
  </item>
  </rdf:RDF>
