<?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/25.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:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/18.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/silphy1001/pages/17.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/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/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をフラフラしてたら偶然見つけて、「お！？」っと思ったのが    </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が使い勝手がいいなと感じました。
理由は、「テストケースを登録しなくてよい」、これに尽きま    </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 ですね。

基本的には次のようなことが言われていると理解しました。
本の内容を丸々コピーみたいになるからこれ以上細かく書けないけれど、大体こんな感じですｗ
+ テストしな    </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]*))


    </description>
    <dc:date>2014-03-11T23:06:08+09:00</dc:date>
    <utime>1394546768</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/18.html">
    <title>【テスト駆動】Visual Studio ユニットテストを使ってみた</title>
    <link>https://w.atwiki.jp/silphy1001/pages/18.html</link>
    <description>
      最近はテスト駆動がマイトレンドです。

これは、前回参加したプロジェクトで苦い経験をしたから。

前回のプロジェクトでは、以下のようなコードを変更することになりました。

・明確で、明瞭な仕様書/設計書が存在しない（！）
・非常に多くの大域変数を操作しており、「誰が」「いつ」「どこで」変更しているかを完璧に
　把握することが難しい
・時間的制約から、上記内容を厳密に調査する時間もない
・プロジェクトメンバが流動的
・単体テストをリグレッションできないか、しづらい構造

要約すると、「変更しづらいコード」になっていました。

私がソフトウェアエンジニアとして未熟なのでしょうけど、当時のプロジェクトの作業の中で
担当外の機能にヘルプに入った際、何度かデグレードを発生させてしまいました。
これはリグレッション可能な単体テストがあれば防げたと思っています。

そんなことも手伝って、テスト駆動という考え方にとても共感しているのです。
組込みでも絶対にやるべきだと思うのですが、社内では「テスト駆動」「テストファースト」で
反応してくれる人は今のところいませんでした。
(悲しい・・・)

そのため、まずは自分から、とやってみているところです。

-----------------------------------------------------------------


さてさて、組込みなお話はこの辺にして、今回はそのテスト駆動をVSで機能として
組み込んでいるというので、久々にVS使ってみました。
その感想になります。ですのであまり内容はないですね（＾＾；

今回はMSDNのチュートリアルに従ってやってみました。
http://msdn.microsoft.com/ja-jp/library/dd264975.aspx


日本語だとちょっと文意が伝わりにくいかもしれませんので（少なくとも私は意味がわかりづらかった）、
英語等が読める方は英語の方がいいと思います。

で、感想なのですが、、、

・[BAD]ビルドが遅い
なんと言ってもこれに尽きます。

遅い、遅すぎる。

「じゃあIDEでやんなよバーカ」って言われそうですが、そうではないと思います。

これではテスト駆動の    </description>
    <dc:date>2014-03-09T21:55:31+09:00</dc:date>
    <utime>1394369731</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/silphy1001/pages/17.html">
    <title>【C】マルチバイト文字のソーティング処理について</title>
    <link>https://w.atwiki.jp/silphy1001/pages/17.html</link>
    <description>
      とある業務でUTF-8を文字コードの基本としているプログラム中において、ソーティングを実装することになった。

普通のソーティングなら文字列をstrcmp( str1, str2 ); とやればよい。
しかし、今回は普通と違っていました。

どこが違っていたのかと言うと・・・

(1) マルチバイト文字列で半角カナを含むため1-3byteの文字が混在している
(2) ソーティングルールが文字コード昇順でなく、独自のルールがある

この内、(1)についてはマルチバイト文字列をワイド文字列に変換して一律に扱うことで解決できる。
たとえば、以下のように。

-----------------------------------------------------------------

#highlight(c){{
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;wchar.h&gt;

/* ↓ここの定義はてきとうです */
#define STR_BYTE_MAX  ( 24 )

int main( int argc, char **argv )
{

    char    caRefStr[STR_BYTE_MAX] = &quot;ﾃｽﾄABCabc$%&amp;012&quot;;
    char    *pcaRefStr = &amp;caRefStr;
    wchar_t wcsRefStr[STR_BYTE_MAX];
    size_t  szRet = 0;

    /* ロケールを日本語・UTF-8エンコーディングに指定 */
    setlocal( LC_ALL, &quot;jp_JP.UTF-8&quot; );

    szRet = mbsrtowcs( wcsRefStr, &amp;pcaRefStr, STR_BYTE_MAX, NULL );
    if( szRet == -1 ){
        fprintf( stderr, &quot;mbsrtowcs() failed(%s/%d)&quot;, __func__, __LINE__ );
        return -1;
    }

    printf( &quot;%ls\n&quot;, wcsRefStr    </description>
    <dc:date>2014-03-09T21:50:05+09:00</dc:date>
    <utime>1394369405</utime>
  </item>
  </rdf:RDF>
