<?xml version="1.0" encoding="utf-8" ?>


<?xml-stylesheet href="http://d.hatena.ne.jp/sandai/rssxsl" type="text/xsl" media="screen"?>


<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:lang="ja">
<channel rdf:about="http://d.hatena.ne.jp/sandai/rss">
<title>三等兵</title>
<link>http://d.hatena.ne.jp/sandai/</link>
<description>三等兵</description>

<dc:creator>sandai</dc:creator>
<dc:date>2013-05-11T02:07:08+09:00</dc:date>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://d.hatena.ne.jp/sandai/20120917/p1"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/sandai/20120728/p2"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/sandai/20120728/p1"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/sandai/20120622/p1"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/sandai/20120617/p1"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/sandai/20120616/p1"/>
</rdf:Seq>
</items>
</channel>



<item rdf:about="http://d.hatena.ne.jp/sandai/20120917/p1">
<title>[OS][Book][Mac][C]2回目のC言語で『12ステップで作る組込みOS自作入門 』の通りに組込みOSを作ってみた</title>
<link>http://d.hatena.ne.jp/sandai/20120917/p1</link>
<description> 12ステップで作る組込みOS自作入門 出版社 : カットシステム (2010/05) 発行日 : 2010/05 前回の初めてのC言語で『30日でできる！OS自作入門』の通りに初めてのOSを作ってみた - 三等兵は汎用OSでしたが今度は組込みOSです。参考書は『12ステップで作る組込みOS自作入門 』</description>

<content:encoded><![CDATA[
<div class="section">
<p><a target="_blank" href="http://www.amazon.co.jp/exec/obidos/ASIN/4877832394/ertgfde2342-22/">12ステップで作る組込みOS自作入門 </a><br><a target="_blank" href="http://www.amazon.co.jp/exec/obidos/ASIN/4877832394/ertgfde2342-22/"><img alt="4877832394" src="http://ec2.images-amazon.com/images/I/51bcT-nUFXL._SL160_.jpg" border="0"></a><br></p>
<p><span>出版社 : カットシステム (2010/05) </span><br><span>発行日 : 2010/05 </span></p>
<br>

<p>前回の<a href="http://d.hatena.ne.jp/sandai/20120728/p2" target="_blank">初めてのC言語で『30日でできる！OS自作入門』の通りに初めてのOSを作ってみた - 三等兵</a>は汎用OSでしたが今度は組込みOSです。参考書は『12ステップで作る組込みOS自作入門 』です。こいつぁすげえや。丁寧に仕上げられた良書でした。</p>
<p>「組込み」とタイトルがついているので興味を示す層が狭そうですが、プログラムを書く多くの人にとって役立つ内容だったと思います。</p>
<p>前回は必死にわかんないーわかんないーを連呼しつつ頭を抱えて苦行みたいな感覚でやっちゃいましたけど、今回はそんな苦労もあったからか余裕を持って楽しめました。</p>
<p>本書ではWindowsだけではなくLinuxでも開発できるよう解説されているのでどんな環境でも問題ありません。Linux入れるのがめんどくさかった私は例によってMac OS Xでやりましたが大きな問題はなかったです。よってほぼ誰でも環境を用意することができる、と言いたいところですが。</p>
<p>こういったクロス開発ではシリアルケーブルとか使ってマイコンとイチャイチャする必要があるのです。でも、MacBook air(MBA)だとシリアルコネクタない...あるわけない。しょぼーん。</p>
<p>困ったなーと思ってたら2300円ぐらいのUSBのシリアルアダプタを使えば良いらしく、それ使ってやりました。</p>
<p><a target="_blank" href="http://www.amazon.co.jp/exec/obidos/ASIN/B007SI18YO/">iBUFFALO USBシリアルケーブル(USBtypeA to D-sub9ピン)0.5m ブラックスケルトン BSUSRC0605BS</a><br><a target="_blank" href="http://www.amazon.co.jp/exec/obidos/ASIN/B007SI18YO/"><img alt="B007SI18YO" src="http://ec2.images-amazon.com/images/I/416nzXAVOzL._SL160_.jpg" border="0"></a></p>
<p>この記事では組込みの事前知識ゼロからやってみた者として、Macの開発環境を紹介しつつ書籍の内容について書いてみようと思います。</p>
<br>

<h4>12ステップの内容をまとめたスライド</h4>
<p>OS作りは一応2回目なので余裕もあるだろうと学習した内容を1ステップずつスライドにまとめながらやりました。荒いのと正確かどうかは保証できませんが、Macで詰まる部分はだいたいメモってあります。</p>

<ul>
<li><a href="http://www.slideshare.net/sandai/12step-1-14296356" target="_blank">【学習メモ#1st】12ステップで作る組込みOS自作入門</a></li>
<li><a href="http://www.slideshare.net/sandai/212os" target="_blank">【学習メモ#2nd】12ステップで作る組込みOS自作入門</a></li>
<li><a href="http://www.slideshare.net/sandai/312os" target="_blank">【学習メモ#3rd】12ステップで作る組込みOS自作入門</a></li>
<li><a href="http://www.slideshare.net/sandai/112os" target="_blank">【学習メモ#4th】12ステップで作る組込みOS自作入門</a></li>
<li><a href="http://www.slideshare.net/sandai/512os" target="_blank">【学習メモ#5th】12ステップで作る組込みOS自作入門</a></li>
<li><a href="http://www.slideshare.net/sandai/6th12os" target="_blank">【学習メモ#6th】12ステップで作る組込みOS自作入門 </a></li>
<li><a href="http://www.slideshare.net/sandai/7th12os" target="_blank">【学習メモ#7th】12ステップで作る組込みOS自作入門 </a></li>
<li><a href="http://www.slideshare.net/sandai/8th12os" target="_blank">【学習メモ#8th】12ステップで作る組込みOS自作入門 </a></li>
<li><a href="http://www.slideshare.net/sandai/9th12os" target="_blank">【学習メモ#9th】12ステップで作る組込みOS自作入門 </a></li>
<li><a href="http://www.slideshare.net/sandai/10th12os" target="_blank">【学習メモ#10th】12ステップで作る組込みOS自作入門 </a></li>
<li><a href="http://www.slideshare.net/sandai/11th12os" target="_blank">【学習メモ#11th】12ステップで作る組込みOS自作入門 </a></li>
<li><a href="http://www.slideshare.net/sandai/12th12os" target="_blank">【学習メモ#12th】12ステップで作る組込みOS自作入門 </a></li>
</ul>
<br>

<h4>開発環境を整えよう</h4>
<p>WindowsとLinuxでの開発環境は本書で紹介されています。それらのOSであれば書籍を参考にしてください。この開発環境を作る時点で詰まったときはネットで検索したり<a href="http://groups.google.co.jp/group/kozos_tomonokai" target="_blank">  KOZOS友の会 | Google グループ  </a>で質問しながらがんばりましょう。</p>
<h5>ハードな話</h5>
<p>ソフトな話の前にハードな話。</p>
<p>本書ではマイコンボードとシリアル接続しながらのクロス開発を想定して書かれています。(クロス開発ってのは大雑把に言えばPCでコード書いてPCとは別の機器でそのプログラムを動かすことを目的とした開発のこと)</p>
<p>必要なものと金額は下記のリンク先にまとめられています。</p>

<ul>
<li><a href="http://www.cutt.co.jp/toppage/sub_kumikomiset.html" target="_blank">はじめの一歩シリーズ　タイトル一覧</a></li>
</ul>
<p>実際に私が購入したものは以下の写真の通りです。</p>
<p><a href="http://f.hatena.ne.jp/sandai/20120807145443" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sandai/20120807/20120807145443.jpg" alt="f:id:sandai:20120807145443j:image" title="f:id:sandai:20120807145443j:image" class="hatena-fotolife"></a></p>
<p>面倒であればカットシステムさんからまとめて組込OSセットを買えます。全部で9110円です。</p>
<p>さらにシリアルコネクタがなければそこから2200円ぐらい増えますんで1万超えちゃいます。(左上のケーブルがシリアルケーブル。シリアルコネクタが無ければ必要です。ちなみにMBAにはないです)</p>
<p>合わせて1万2千円になりますざまぁーありませーんというわけで、レッドブル節約すべきかすべきでないか、それが問題だなブラザー。</p>
<br>

<h4>Macの開発環境</h4>
<p>それじゃあMacでの開発環境について紹介していきましょう。</p>
<p>動作確認はLion 10.7.4(64bit)です。</p>
<h5>セルフ・コンパイラ</h5>
<p>まずセルフ・コンパイラを用意します。これは要はgccのことです。</p>
<p>MacだとXcodeとそのうちのCommand Line Toolsを入れていればgcc(llvm-gcc)もあるので何もする必要はありません。Xcodeが無ければXcodeとCommand Line Toolsで検索かけてインストールしてください。</p>
<p>確かXcode4.3あたりからこうなったんで、Xcode4.2なら何もしなくていいはずかな。たぶん。</p>
<h5>クロス・コンパイラ</h5>
<p>次はクロス・コンパイラです。これもまあgccのことです。</p>
<p>gccが2つ出てきちゃいましたね。</p>
<p>えーと、セルフ・コンパイラは大雑把に言えばPC用のgccと考えてください。PC上で動作するプログラムをコンパイルするためのgccです。そしてクロス・コンパイラは組み込み用のgccです。マイコンで動作するプログラムをコンパイルするためのgccってわけです。</p>
<p>さっきのセルフ・コンパイラはクロス・コンパイラをビルドするのに必要なんで用意したのです。</p>
<p>で、クロス・コンパイラは「必要なくなったらまとめてゴミ箱行きできるインストール方法」でいきたいと思います。全部$HOMEにまとめちゃう感じですね。</p>
<p>それじゃあターミナルを開いて以下のように打ってください。</p>
<p>ちなみに書籍中ではターミナル開いてあれこれ操作するばっかりです。ターミナルの操作が全くわからない人はこれから厳しいかもしれません。慣れればなんとかなりますのでがんばっていじってみてください。</p>
<pre class="syntax-highlight">
<span class="synStatement">cd</span> ~
mkdir 12step
<span class="synStatement">cd</span> 12step
mkdir build src tools
</pre>

<p>12stepというディレクトリをホームディレクトリに作成して、その下にbuild、src、toolsというディレクトリも作成しました。(ホームディレクトリはFinderのメニューバーから「移動＞ホーム」で開かれるとこです)</p>

<ul>
<li>build

<ul>
<li>インストールするツールをビルドするとこ</li>
</ul>
</li>
<li>src

<ul>
<li>ここで12stepで開発していくプログラムを置きます</li>
</ul>
</li>
<li>tools

<ul>
<li>クロス・コンパイラとか、その他必要なツールはここに置きます</li>
</ul>
</li>
</ul>
<br>

<p>これからクロス・コンパイラをダウンロードしてインストールします。ダウンロードするパッケージは以下の通り。</p>

<ul>
<li>[binutils-2.19.1.tar.bz2:title=<a href="http://ftp.gnu.org/gnu/binutils/" target="_blank">http://ftp.gnu.org/gnu/binutils/</a></li>
<li>[gmp-5.0.5.tar.bz2:title=<a href="http://ftp.gnu.org/gnu/gmp/" target="_blank">http://ftp.gnu.org/gnu/gmp/</a></li>
<li>[mpc-0.9.tar.gz:title=<a href="http://www.multiprecision.org/?prog=mpc&page=download" target="_blank">http://www.multiprecision.org/?prog=mpc&#38;page=download</a></li>
<li>[mpfr-3.1.1.tar.gz:title=<a href="http://ftp.gnu.org/gnu/mpfr/" target="_blank">http://ftp.gnu.org/gnu/mpfr/</a></li>
<li>[gcc-4.7.1.tar.gz:=<a href="http://ftp.gnu.org/gnu/gcc/gcc-4.7.1/" target="_blank">http://ftp.gnu.org/gnu/gcc/gcc-4.7.1/</a></li>
</ul>
<p>インストールは以下の記事を参考にしています。</p>

<ul>
<li><a href="http://d.hatena.ne.jp/satfy/20101226" target="_blank">http://d.hatena.ne.jp/satfy/20101226</a>

<ul>
<li>Snow Leopardはこっち参考に</li>
</ul>
</li>
<li><a href="http://d.hatena.ne.jp/cococh1/20120219/1329642986" target="_blank">http://d.hatena.ne.jp/cococh1/20120219/1329642986</a>

<ul>
<li>CC=~が必要になる場合もあるみたい</li>
</ul>
</li>
</ul>
<br>

<p>まずは、12stepディレクトリのbuildディレクトリにパッケージをダウンロードします。</p>
<p>     </p>
<pre class="syntax-highlight">
<span class="synStatement">cd</span> ~/12step/build
curl <span class="synStatement">-O</span> http://ftp.gnu.org/gnu/binutils/binutils<span class="synConstant">-2</span>.<span class="synConstant">19</span>.<span class="synConstant">1</span>.tar.bz2
curl <span class="synStatement">-O</span> http://ftp.gnu.org/gnu/gmp/gmp<span class="synConstant">-5</span>.<span class="synConstant">0</span>.<span class="synConstant">5</span>.tar.bz2
curl <span class="synStatement">-O</span> http://www.multiprecision.org/mpc/download/mpc<span class="synConstant">-0</span>.<span class="synConstant">9</span>.tar.gz
curl <span class="synStatement">-O</span> http://ftp.gnu.org/gnu/mpfr/mpfr<span class="synConstant">-3</span>.<span class="synConstant">1</span>.<span class="synConstant">1</span>.tar.gz
curl <span class="synStatement">-O</span> http://ftp.gnu.org/gnu/gcc/gcc<span class="synConstant">-4</span>.<span class="synConstant">7</span>.<span class="synConstant">1</span>/gcc<span class="synConstant">-4</span>.<span class="synConstant">7</span>.<span class="synConstant">1</span>.tar.gz
</pre>

<p>これらはターミナルから実行するコマンドですよ。じゃあ、5つダウンロードできたらそれぞれビルドしていきます。</p>
<h5>binutils</h5>
<pre class="syntax-highlight">
<span class="synStatement">cd</span> ~/12step/build
tar jxvf binutils/binutils<span class="synConstant">-2</span>.<span class="synConstant">19</span>.<span class="synConstant">1</span>.tar.bz2
<span class="synStatement">cd</span> binutils<span class="synConstant">-2</span>.<span class="synConstant">19</span>.<span class="synConstant">1</span>
./configure --target<span class="synStatement">=</span>h8300-elf --<span class="synStatement">disable</span>-nls --<span class="synStatement">disable</span>-werror --prefix<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools
make
make install
</pre>

<h5>gmp</h5>
<pre class="syntax-highlight">
<span class="synStatement">cd</span> ~/12step/build
tar jxvf gmp<span class="synConstant">-5</span>.<span class="synConstant">0</span>.<span class="synConstant">5</span>.tar.bz2
<span class="synStatement">cd</span> gmp<span class="synConstant">-5</span>.<span class="synConstant">0</span>.<span class="synConstant">5</span>
./configure --prefix<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools/gmp
make
make check
make install
</pre>

<h5>mpfr</h5>
<pre class="syntax-highlight">
<span class="synStatement">cd</span> ~/12step/build
tar zxvf mpfr<span class="synConstant">-3</span>.<span class="synConstant">1</span>.<span class="synConstant">1</span>.tar.gz
<span class="synStatement">cd</span> mpfr<span class="synConstant">-3</span>.<span class="synConstant">1</span>.<span class="synConstant">1</span>
./configure --prefix<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools/mpfr --with-gmp<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools/gmp
make
make check
make install
</pre>

<h5>mpc</h5>
<pre class="syntax-highlight">
<span class="synStatement">cd</span> ~/12step/build
tar zxvf mpc<span class="synConstant">-0</span>.<span class="synConstant">9</span>.tar.gz
<span class="synStatement">cd</span> mpc<span class="synConstant">-0</span>.<span class="synConstant">9</span>
./configure --prefix<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools/mpc --with-gmp<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools/gmp --with-mpfr<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools/mpfr
make
make check
make install
</pre>

<h5>gcc</h5>
<pre class="syntax-highlight">
<span class="synStatement">cd</span> ~/12step/build
tar zxvf gcc<span class="synConstant">-4</span>.<span class="synConstant">7</span>.<span class="synConstant">1</span>.tar.gz
<span class="synStatement">cd</span> gcc<span class="synConstant">-4</span>.<span class="synConstant">7</span>.<span class="synConstant">1</span>
./configure --target<span class="synStatement">=</span>h8300-elf -<span class="synStatement">disable</span>-nls --<span class="synStatement">disable</span>-threads --<span class="synStatement">disable</span>-shared --<span class="synStatement">disable</span>-werror --<span class="synStatement">enable</span>-languages<span class="synStatement">=</span>c --prefix<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools --with-gmp<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools/gmp --with-mpfr<span class="synStatement">=</span><span class="synSpecial">$HOME</span>/12step/tools/mpfr --with-mpc<span class="synStatement">=</span>/usr/<span class="synStatement">local</span>/mpc
make     
make install
</pre>

<p>以上です。ビルドしてできたファイルは全て~/12step/toolsのtoolsディレクトリ以下にあります。</p>
<h5>h8write</h5>
<p>h8writeは、PCで書いたプログラムをマイコンのフラッシュROMに書き込むことができます。これもtoolsディレクトリ以下に入れます。</p>
<p>ただし、Lion以降はkz-h8writeでないと動作しないかもしれません。(32bitカーネルなら普通のh8writeで問題ないかと。h8writeを使うなら書籍を参考にビルドしたら、~/12step/tools以下にh8writeというファイルを置いてください)</p>
<p>そういうわけでkz-h8writeを使わせてもらいます。</p>

<ul>
<li>kz-h8write

<ul>
<li><a href="http://shinta-main-jp.blogspot.jp/2011/05/h83069f-writer-for-kozos-kzh8write.html" target="_blank">CuBeatSystems: H8/3069F writer for KOZOS - kz_h8write &#12300;h8writeリベンジ解決編&#12301;</a></li>
</ul>
</li>
</ul>
<p>ダウンロードして解凍したら~/12step/build/以下にkz_h8write-v0.1.0を置いてください。あとは以下のコマンドを実行するだけです。</p>
<pre class="syntax-highlight">
<span class="synStatement">cd</span> ~/12step/build/kz_h8write-v0.<span class="synConstant">1</span>.<span class="synConstant">0</span>/src
make
mv kz_h8write ~/12step/tools/kz_h8write
</pre>

<p>クロス・コンパイラの用意は以上で終わりです。</p>
<br>

<h4>シリアルコネクタが無いPCでの準備</h4>
<p>次はシリアル接続できるようにするための準備です。</p>
<p>PCにシリアルコネクタが無い場合はUSBシリアルケーブルみたいなのが必要です。とりあえずネットで調べてみるとMacであれば下の機器で問題ないと書いてあったので、私もこれを買いました。</p>
<p><a target="_blank" href="http://www.amazon.co.jp/exec/obidos/ASIN/B007SI18YO/ertgfde2342-22/">iBUFFALO USBシリアルケーブル(USBtypeA to D-sub9ピン)0.5m ブラックスケルトン BSUSRC0605BS</a><br><a target="_blank" href="http://www.amazon.co.jp/exec/obidos/ASIN/B007SI18YO/ertgfde2342-22/"><img alt="B007SI18YO" src="http://ec2.images-amazon.com/images/I/416nzXAVOzL._SL160_.jpg" border="0"></a></p>
<p>Windows向けと書かれてますが心配いりません。Macでも利用することができます。そのためにはMac用のドライバが必要でして、それは下記のURL先からダウンロードしてインストールしてください。</p>

<ul>
<li><a href="http://www.ftdichip.com/Drivers/VCP.htm" target="_blank">http://www.ftdichip.com/Drivers/VCP.htm</a></li>
</ul>
<p>Snow Leopardであればx86 (32-bit)のドライバですね。(64bitで動作させていればx64です。<a href="http://news.mynavi.jp/articles/2009/08/21/snowleopard/index.html" target="_blank">こういうこと</a>してなければ32bitで起動してるはずです)</p>
<p>Lion以降はx64のドライバをインストールしてください。</p>
<h5>ドライバ名の確認</h5>
<p>ドライバをインストールできたらUSBシリアルケーブルのドライバ名を確認します。</p>
<p>まずはUSBシリアルケーブルを接続してください。そしてターミナルから以下のようにコマンドを実行します。</p>
<pre class="syntax-highlight">
ls /dev/tty.*
/dev/tty.Bluetooth-Modem     /dev/tty.Bluetooth-PDA-Sync     /dev/tty.usbserial-FTG6PQ4H
</pre>

<p>ls /dev/tty.*の部分がコマンドで、その下の行がコマンドを実行した結果です。結果のうち、「/dev/tty.usbserial-FTG6PQ4H」がこのデバイス名です。同じようにして自分のデバイス名を確認できたら後から使うので覚えておいてください。</p>
<br>

<h4>1stステップだけ学習講座</h4>
<p>以上の設定でどうやって学習していくかを1stステップを例に書いときます。</p>
<h5>ソースコードの置き場所</h5>
<p>1stステップはHello Worldを表示するプログラムを書くんですが、それぞれのファイルの置き場所は~/12step/src以下になります。</p>
<p>ディレクトリの構造は、</p>

<ul>
<li>12step

<ul>
<li>tools</li>
<li>src

<ul>
<li>01

<ul>
<li>bootload

<ul>
<li>main.c</li>
<li>startup.s</li>
<li>…</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>02

<ul>
<li>bootload

<ul>
<li>...</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>こんな形です。srcディレクトリの下に1stステップのコード、2ndのコードと並べていきます。src以下は書籍の通りなんでよくわかんなかったら書籍も参考にしてください。確かstep1にディレクトリ構造の図があったと思います。</p>
<h5>Makefile</h5>
<p>で、書籍の通りにコードを書くときMakefileの部分だけそのままじゃうまくいきません。書籍ではクロス・コンパイラを/usr/local以下に配置した形になってますが、こっちは~/12step/tools以下に置いてますからね。</p>
<p>それで、こっちの環境で動作させるためにはMakefileを以下のように直してください。</p>
<pre class="syntax-highlight">
<span class="synIdentifier">PREFIX </span>= ~/12step/tools
<span class="synIdentifier">ARCH </span>= h8300-elf
<span class="synIdentifier">BINDIR </span>= <span class="synIdentifier">$(PREFIX)</span>/bin
<span class="synIdentifier">ADDNAME </span>= <span class="synIdentifier">$(ARCH)</span>-
.
.
.
<span class="synIdentifier">H8WRITE </span>= ../../../tools/kz_h8write

<span class="synIdentifier">H8WRITE_SERDEV </span>= /dev/tty.usbserial-FTG6PQ4H
</pre>

<p>これらのうち、H8WRITE_SERDEV = /dev/tty.usbserial-FTG6PQ4Hだけ皆さんそれぞれ違う記述になるはずです。ここはさっき確認したUSBシリアルケーブルのデバイス名を書いてください。</p>
<p>あと「H8WRITE = ../../../tools/kz_h8write」も単純なh8writeを使ってるなら、「H8WRITE = ../../../tools/h8write」としておいてください。</p>
<h5>プログラムのビルドとフラッシュROMへの書き込み</h5>
<p>指示された通り全てコードを書いて、Makefileもこっちの設定用にできたらビルドします。cd 12step/src/01/bootloadでmakeすると下記のように出力されれば成功です。</p>
<pre class="syntax-highlight">
<span class="synStatement">cd</span> ~/12step/src/<span class="synConstant">01</span>/bootload
make
~/12step/tools/bin/h8300-elf-gcc <span class="synStatement">-c</span> -Wall -mh -nostdinc -nostdlib -fno-<span class="synStatement">builtin</span> -I. -Os -DKZLOAD vector.c
~/12step/tools/bin/h8300-elf-gcc <span class="synStatement">-c</span> -Wall -mh -nostdinc -nostdlib -fno-<span class="synStatement">builtin</span> -I. -Os -DKZLOAD startup.s
~/12step/tools/bin/h8300-elf-gcc <span class="synStatement">-c</span> -Wall -mh -nostdinc -nostdlib -fno-<span class="synStatement">builtin</span> -I. -Os -DKZLOAD main.c
~/12step/tools/bin/h8300-elf-gcc <span class="synStatement">-c</span> -Wall -mh -nostdinc -nostdlib -fno-<span class="synStatement">builtin</span> -I. -Os -DKZLOAD lib.c
~/12step/tools/bin/h8300-elf-gcc <span class="synStatement">-c</span> -Wall -mh -nostdinc -nostdlib -fno-<span class="synStatement">builtin</span> -I. -Os -DKZLOAD serial.c
~/12step/tools/bin/h8300-elf-gcc vector.o startup.o main.o lib.o serial.o <span class="synStatement">-o</span> kzload -Wall -mh -nostdinc -nostdlib -fno-<span class="synStatement">builtin</span> -I. -Os -DKZLOAD -static -T ld.scr <span class="synStatement">-L</span>.
cp kzload kzload.elf
~/12step/tools/bin/h8300-elf-strip kzload
</pre>

<p>次にmake imageというコマンドを実行してください。下記のように出力されるはずです。</p>
<pre class="syntax-highlight">
make image
~/12step/tools/bin/h8300-elf-objcopy <span class="synStatement">-O</span> srec kzload kzload.mot
</pre>

<p>今度はマイコンのフラッシュROMにプログラムを書き込む作業をします。まずマイコンとMBAを接続します。</p>
<p><a href="http://f.hatena.ne.jp/sandai/20120824122228" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sandai/20120824/20120824122228.jpg" alt="f:id:sandai:20120824122228j:image" title="f:id:sandai:20120824122228j:image" class="hatena-fotolife"></a></p>
<p>次に書籍でも解説されていますがディップスイッチというのを書き込みモードにします。こうすることでフラッシュROMにプログラムを書き込めるようになります。</p>
<p><a href="http://f.hatena.ne.jp/sandai/20120824122317" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sandai/20120824/20120824122317.jpg" alt="f:id:sandai:20120824122317j:image" title="f:id:sandai:20120824122317j:image" class="hatena-fotolife"></a></p>
<p>この青いディップスイッチの右隣にポチっとあるのがリセットボタンです。一応試しにポチっとおしといてください。</p>
<p>それじゃあフラッシュROMに書き込みを行います。ターミナルからmake writeを実行してください。次のようになったら成功です。</p>
<pre class="syntax-highlight">
make write
../../../tools/kz_h8write <span class="synConstant">-3069</span> -f20 kzload.mot /dev/tty.usbserial-FTG6PQ4H
<span class="synStatement">=================================================</span>
 H8/3069F Flash Writer <span class="synStatement">for</span> KOZOS <span class="synStatement">(</span>Version <span class="synConstant">0</span>.<span class="synConstant">1</span>.<span class="synConstant">0</span><span class="synStatement">)</span>
 Copyright<span class="synStatement">(</span>C<span class="synStatement">)</span> <span class="synConstant">2011-2012</span> Shinichiro Nakamura
<span class="synStatement">=================================================</span>
Bitrate sequence: Done.
Inquiry device: Done.
Select device: Done.
Inquiry clock mode: Done.
Select clock mode: Done.
Select bitrate: Done.
Waiting <span class="synStatement">for</span> erase <span class="synStatement">done</span>:...
Programming:.....
Program: Done.
Complete.
</pre>

<h5>フラッシュROMから起動</h5>
<p>じゃあプログラムを実行してみましょう。書籍にもありますがcuコマンドを使って接続します。</p>
<p>まずはマイコンのディップスイッチを下の画像のようにします。</p>
<p><a href="http://f.hatena.ne.jp/sandai/20120824122347" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sandai/20120824/20120824122347.jpg" alt="f:id:sandai:20120824122347j:image" title="f:id:sandai:20120824122347j:image" class="hatena-fotolife"></a></p>
<p>ターミナルから下記のように実行してください。これは書籍でいうところのCUを使ってます。特に問題はないので、CU使っちゃってかまいません。</p>
<pre class="syntax-highlight">
sudo cu <span class="synStatement">-l</span> /dev/tty.usbserial-FTG6PQ4H
Password:
</pre>

<p>「usbserial-ほにゃらら」の部分は自分のデバイス名にしてEnter押します。すると、Passwordを聞かれるのでいつもログインに使ってるパスワードを入力してください。</p>
<p>うまく接続されたらConnectied.と表示されるはずなので、ここでリセット・ボタンをポチっと押してみてください。</p>
<pre class="syntax-highlight">
sudo cu <span class="synStatement">-l</span> /dev/tty.usbserial-FTG6PQ4H
Connected.
Hello World!
</pre>

<p>こんな感じでHello World!と表示されたら成功です。</p>
<h5>学習の流れ</h5>
<p>2ndでは~/12step/src/01を~/12step/src/02にコピーして書籍の通りにコードを修正しながら進めていく形になります。書き込みとプログラムの起動についてはさっきやったような感じですね。</p>
<p>あとは、エラーなどで詰まったところがあったらスライドで確認してみてください。細かい部分はメモってませんが、大きなエラーは内容と解決方法をメモってあります。</p>
<p>それ以外は書籍の通り進めていけば問題はないでしょう。</p>
<br>

<h4>書籍について</h4>
<p>入門と冠された本としては比較的高いレベルが求められます。高いといってもたいていの人は一般教養レベルでしょと言われるぐらいものでして、プログラミング初心者だと誰か指導してくれる人がいないと辛いって感じですね。</p>
<p>組込みの知識ゼロでも問題はありませんでした。ほとんど全て解説してくれるので、前提としてC言語だけ文法とかなんとなく理解できていれば大丈夫です。</p>
<p>コードは一生考えてもわからん！ってほど難しいところは無かったと思います。アルゴリズムやデータ構造はシンプルなものだし、動作に必要なコード以外はほとんど書かれていないので行数が少なく読みやすいはずです。文章は丁寧にまとまっていて構成がよく練られているといった印象を受けました。下手に話が展開していかないよう配慮している部分も好感が持てます。</p>
<p>開発は最初にひと通り動く小さなプログラムを書いて、それを毎ステップごとに少しずつコードを修正、追加していきながらOSを開発していくって流れです。</p>
<p>こういうのいいですよね。次はこういう機能を実装するからコードをこういうふうに書き換えるよ、こういうファイルを追加するよ、ってことが把握できるので理解しやすいですし、自分でOSを作っている感じがして楽しみながら開発することができます。</p>
<p>コードの量は最終的に2700行ぐらいで、毎ステップに書くコード量が200〜300行前後とバランスが良いですね。</p>
<p>だいたいの人は本書のうち第1部まで問題なく理解できるはずで、鬼門は後半の第2部の7thステップと8thステップでしょう。特に8thステップが私みたいになんちゃってでやってると、ここで壁にぶち当たります。</p>
<p>この部分を理解できているかどうかで9thステップに続く内容の理解度に影響してくるはずなので、難しいと感じたならめんどくさがらずにメモをとりつつ細かく流れを整理しておきましょう。</p>
<p>ここは中盤ながらのラスボスですね。中ボスなんだけどラスボス並みに強いじゃねえかっていう中ボスです。そうですね、バルバトスですね。</p>
<p>特技がストーカーで口を開く度にぶるぅぅあああああ！！と叫ぶバルバトス。タンスの角に小指をぶつけてぶるぅぅああああ！と泣き叫ぶバルバトス。人気のラーメン店で並んでいるとおばさんに横入りされてぶるぅああああ！と悔し泣きするバルバトス。バルバトスがぶるあああ！！過ぎて生きているのが辛い…。何の話か分からない人はスルーしてください。</p>
<br>

<p>他の組込みの書籍を知らないのでなんともいえませんがOS本の入門書としてなら良書だと思います。すごくわかりやすかったので。たぶん組込みの入門書としてもこの出来なら評価は高そうですね。</p>
<p>全体的に構成が丁寧で内容が分かりやすくまとまっており、文章に対するコード量の比もバランスがとれていて、自分でコード書きながら理屈も学べる良い本でした。</p>
<p>おそらく「組込み」というタイトルで興味を持つ層が限られているような気がします。しかし、プログラムを書く多くの人にとって役に立つ内容だったと思いますよ。関心の輪を広げてチャレンジしてみてはいかがでしょうか。</p>
<p>個人的には汎用OSより先にこっちやってみる方が良いかなと感じました。なんで、単純にOSに興味があるけどOS作り未経験な人もどうぞ。</p>
<p>本書であれば高度な知識を必要とせず最後までやり遂げられるでしょう。それにブートローダ作って実行ファイルを解析したり、ファイル転送のプロトコルを実装したりといったことを入門レベルで実践できるので楽しいですよ。</p>
<p>というわけで、<a href="http://d.hatena.ne.jp/sandai/20120728/p2" target="_blank">前回</a>でもそうでしたが、フルスクラッチでOS作るってのはどういうことか今回も良く身に染みました。なんだかんだと大変でしたが楽しかったです。</p>
<p>では、もしやってみようと挑戦する方がいらっしゃれば楽しんでやってみてください。</p>
</div>
]]></content:encoded>
<dc:creator>sandai</dc:creator>
<dc:date>2012-09-17</dc:date>
<dc:subject>OS</dc:subject>
<dc:subject>Book</dc:subject>
<dc:subject>Mac</dc:subject>
<dc:subject>C</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/sandai/20120728/p2">
<title>[Book][Assembly][C][OS][Mac]初めてのC言語で『30日でできる！OS自作入門』の通りに初めてのOSを作ってみた</title>
<link>http://d.hatena.ne.jp/sandai/20120728/p2</link>
<description> 30日でできる! OS自作入門 出版社 : 毎日コミュニケーションズ 発行日 : 2006/3/1 良い本です。アカデミックの匂いが良い意味で全くしない。その上での実践的な本は日本語で他に無いと思います。ガチムチアカデミックの批判にあえて真っ向勝負してるような意欲作です。 正し</description>

<content:encoded><![CDATA[
<div class="section">
<p><a target="_blank" href="http://www.amazon.co.jp/exec/obidos/ASIN/4839919844/ertgfde2342-22/">30日でできる! OS自作入門 </a><br><a target="_blank" href="http://www.amazon.co.jp/exec/obidos/ASIN/4839919844/ertgfde2342-22/"><img alt="4839919844" src="http://ec2.images-amazon.com/images/I/41Q4Q20S5PL._SL160_.jpg" border="0"></a><br></p>
<p><span>出版社 : 毎日コミュニケーションズ </span><br><span>発行日 : 2006/3/1 </span></p>
<p>良い本です。アカデミックの匂いが良い意味で全くしない。その上での実践的な本は日本語で他に無いと思います。ガチムチアカデミックの批判にあえて真っ向勝負してるような意欲作です。</p>
<p>正しい知識だの用語だのそんなもんはどうでもいいから手を動かしてやってまえみたいな感じで。こういうのは頭いい人たちから批判されやすいですね。俗物な私にはぴったりでしたが。</p>
<p>本書はWindows用のサンプルしかないんですがMac用に整えたので、それ公開するついでに思ったことつらつらと書いときます。</p>
<br>

<h4>開発環境</h4>

<ul>
<li>Mac

<ul>
<li>サンプルがWindows用なのでいろいろMac仕様にしなきゃいけない(後述)</li>
</ul>
</li>
<li>テキストエディタ

<ul>
<li>EmacsだのVimだのなんでもいいので適当に用意</li>
</ul>
</li>
<li>バイナリエディタ

<ul>
<li>Macだと0xEDが良い</li>
<li><a href="http://www.suavetech.com/0xed/0xed.html" target="_blank">http://www.suavetech.com/0xed/0xed.html</a></li>
</ul>
</li>
</ul>
<br>

<p>とりあえずはこれらだけ用意して他にも必要なものがあるんだけど後述。</p>
<h5>Macでの開発環境を整える</h5>
<p>本書で開発するOSは著者の用意した開発ツールを使って開発します。名前はtolsetといって付属のCD-ROMに入っているんですがWindowsのみ対応しています。が、なんと、ウェブでMac用も配布されているんです(著者とは違う方が配布していらっしゃいます)</p>
<p>今回はそれを利用して開発しました。</p>
<p>また、OSを起動させるにあたってQEMUという仮想マシンも用意します。えーとこれはですね、VMwareとかVirtualBoxみたいなのと同じようなもんです。それらのソフトウェアが知らない人は、大雑把に言えばMacが起動している中でアプリみたいにWindowsが起動できたりするソフトと思ってください。Safari立ち上げている横でWindowsも操作できちゃったりします。</p>
<p>本書ではこの仮想マシンを使って開発したOSを起動させる方法と、フロッピーディスクを使い実機で起動させる方法が紹介されています。実機の方がそれっぽくはありますが、いろいろめんどくさいので仮想マシンを使いましょう。</p>
<p>それで、本書ではこのMacの中で他のOSを起動できるようにする仮想マシンとしてQEMUを使っています。しかし、例によってQEMUはWindows用です。ががーん。</p>
<p>でも大丈夫です。QEMUのMac移植版として公開されているQ.appがありますのでこれを使います。</p>
<p>でまあ、Mac用のtolsetとQ.appをなんやかんやと調節して開発環境を構築する必要があるんですが結構めんどくさい。さらにCD-ROMに入ってるサンプルもそのままだとMacでは動かない…...。</p>
<p>というわけで、そこら辺をうまくカバーできるようにしました。やったのは基本的にMakefileをこの開発環境用に書き換えたのと細かい部分を調節しただけですが。</p>
<p>いろいろ書くのめんどくさいので簡単に用意できるようにしてます。最終的にはターミナルからぽぽぽいとmakeするだけでQ.appからOSを起動できるようになってますんで、詳細は下記のページみてください。</p>

<ul>
<li><a href="https://github.com/sandai/30nichideosjisaku" target="_blank">https://github.com/sandai/30nichideosjisaku</a></li>
</ul>
<br>

<p>とにかくここの準備はちゃんとしておかないとサンプルや作ったOSを試すときにかなりめんどくさいです。間違ってもコンパイルとかビルドを手作業でコマンド叩いてやろうなんて思わない方が良いです。</p>
<br>

<h4>必要な知識とか技術とか</h4>
<p>必要な知識や技術は挙げればたくさんありますが全くなくてもいいです。でもあったほうが良いです。どっちやねん。</p>
<p>というのも、必要な知識は学習しながら身に着けていけや三下どもが！という感じの書籍なのです。合理的ですが、知らないことばっかりだとモチベーションあがらないでしょう。だってOSに関係すること以外の部分も勉強しながらだったら絶対1日で終わらないもん。</p>
<p>C言語、アセンブリ、ターミナル(コマンドライン)、このあたりのことさえなんとなくわかれば大丈夫...かな。その他については本書でいろいろ説明があります。それでもよくわからなかったら調べながらやればなんとかなります。</p>
<p>たとえ分からないことがあってもなんとなしに分かった気になることが大切です。分かった気になればいいんです。いい加減なこと言ってますがそういう適当さがあった方が良いと思います。</p>
<p>あと、中学生でも分かるように書いたと書籍では述べられていますが…...たぶんわかんないと思います。巷で有名なスーパーハカーな人は知らないけど普通かそれ以下を自称する中学生ならきついでしょう。少なくとも私ならあきらめてます。</p>
<p>えーだめじゃんと落ち込むことなかれ。普通かそれ以下を自称する中学生が書籍で学ぶんだったらこれ以上易しいものなんて存在しません。たぶん。</p>
<p>つまり、作ってみたいならこれを参考にやるっきゃないということで。がんばれ青少年。まだフレッシュな感性のうちにやるのだ。無駄に年食ったおっさんやおばさんになったときだとヤル気が全然湧いてこないぞ。気力が全然湧いてこないんだ。昼からビールのみてぇとかしか思えなくなってくるんだ悲しくなってきた……。</p>
<p>そういうわけで今のフレッシュな感覚のうちにやっておいた方が無難でしょう。</p>
<p>もしやってみて途中であきらめてしまったとしてもそれは仕方がないです。誰も責めません。できたらすごいですよ。こんな内容の薄いものもできんのかとすごく頭の良い人たちは言ってくるかもしれませんが、そんな事言われてもわからんものはわからんです。</p>
<p>だから、できなかったらまた時間をおいてやればいい。たぶんきっと、そうやっても理解できない部分がたくさんあるかもしれない。でもそれでいい。がんばってるあなたはすばらしいんだ。ビジネスじゃないんだから結果なんてどうでもいい。</p>
<p>私が言うのもおかしなものだけどちゃんと全部理解できなくてもいい。感覚さえつかめればそれで良い。次があるなら問題ない。</p>
<p>わからないことがいけないんじゃなくてそれを5年後もわかっていないことが問題なんだ。そうやってつなげていければあるいは、たどり着く場所があると思う。</p>
<br>

<p>というクールな逃げ方をするのがハードボイルドな大人になるコツです。人生における逃げとは全てにおいて戦略的撤退なのだ。</p>
<h5>初めてなら完全理解を捨ててOS入門すること</h5>
<p>全てを完璧に覚えて理解してやろうなんて考えない方が良い。それよりも大要をつかむことに集中した方が良いと思う。</p>
<p>私もそうして30日以内で終わらせることはできた。結果的に毎日できたわけじゃないし、いろいろな理解を捨てたけど。わからない部分があるというのは居心地が悪い。だけど、ずっと立ち止まって考えるよりは良いと思う。</p>
<p>全部初めてのことだから全体的になんとなく理解できれば問題ないし、あるいは目的があるならそこの部分だけ理解できるように集中した方がいいでしょう。細かい部分気にしてたら時間が足りないしモチベーションも保てない。</p>
<p>ここでわからなくても次で理解できればいい。いくつかこなせばパターンも見えてくるだろうから、そうなったらあとは確認作業みたいなもので、突き詰めるとどれだけ真っ直ぐ向き合えるかという話になってくる。</p>
<p>というのは頭の中で考えた話でそんなすんなりいくわけじゃない。いくわけじゃないんだがそういうもんじゃないかなと予測している。</p>
<p>とはいえ、私は自分だけのOSを作りたいって目的があるわけじゃなくて、ハードとソフトがどんな関係で成り立っているのかってことが知りたいだけだから、曖昧でもいいからイメージできれば十分だったりする。</p>
<p>そんな線引きをしながら本心ではやっぱりもっと正しく理解したいんだよね。でもこの欲求に見合う頭が私には無いから、そのへんのバランスをとりながら踏み込んでいきたいなと思っている。</p>
<h5>分からなかったら分かった気になれ</h5>
<p>やっているうちに分からない部分がたくさん出てくるでしょう。そういうときは立ち止まって考えるより分かった気になって通り過ぎるのが良いです。</p>
<p>真面目な人はそんなのいけない！と怒るかもしれませんし、私も真面目じゃないけどそういうの嫌だなと思う。だのに、なんでこんなことを言うのかといういえば、分かった気になっちゃえばいいと坂村健さんもおっしゃっていたからです。TRONで有名な坂村さんです。</p>
<p>パソコン周りの用語とか概念て難しいから、とりあえず分かっちゃった気になればいいよみたいなことを『痛快!コンピュータ学』で言ってたのです。</p>
<p>だから分かった気になればいいんです。こんなすごい人がいってるんだから間違い無いです！(根拠は権威です！)</p>
<p>でも、分かっていないことは自覚しときましょう。えーとだから、「私は分かった気になったけれど実は分かっていない」ということを頭においておくんです。</p>
<p>それでどんどん突っ走って、途中で戻ったり、寄り道したり、そんな感じでやっていけばいいんじゃないでしょうか。というかそういうやり方の人の方が成長が早そうな気がします。</p>
<br>

<h4>学習をする上でこうしたらよかったなと思ったこと</h4>

<ul>
<li>自分の手でコード書く。サンプルをつぎはぎして作らない

<ul>
<li>めんどくさくて多くの部分をつぎはぎしちゃった。正直C言語扱えるって言えないレベルで反省</li>
<li>ただ本書では書き直す部分がたくさんでてきてめんどくさい＞＜</li>
<li>でもこれは実際にコード書いて開発するってこんな流れなんだな、みたいなことを伝えたいからだと思う。それを察することなく無駄な文が多いだのまとまっていないだのと批判するのは的外れだと思うよ。そういう体系だった内容の書籍は他にあるんだからそっちにまかせちゃえばいいもの</li>
</ul>
</li>
<li>分からない関数があれば696pにある索引の付録を利用する

<ul>
<li>印刷しておくと便利。改造の流れも忘れたとき把握できる。30日立った後に気づいて泣いた</li>
</ul>
</li>
<li>基本的な部分は16日目ぐらいまで。そこら辺をしっかり理解できればうまく波に乗れるはず</li>
<li>メモ取りながらやる

<ul>
<li>一応取りながらやったけど、取らない日があったりまちまちでうーん。ちゃんととっておくと後々便利な気がする。でもめんどくさいからなくてもいいよ</li>
</ul>
</li>
<li>分からなくても分かった気になれ

<ul>
<li>最強のコツ</li>
</ul>
</li>
</ul>
<br>

<p>これをふまえてもう一度挑めばもっと理解できるかもしれない！と思いつつ、もう一度やろうという気にはなれない。燃え尽きちまった。またいつかやるよ。たぶん。たぶん。</p>
<p>個人的に本書のレベルは調度良いより少し辛口で難しかったです。</p>
<p>でもいろいろ経験できてよかった。時間経つとなんもかんも忘れちゃいそうだけど、一度通ったことがある道ができたというのはいい事だ。きっと。そうだ。いや、そう思わないと、だって得たものが何もないなんて悲しすぎるじゃない。</p>
</div>
]]></content:encoded>
<dc:creator>sandai</dc:creator>
<dc:date>2012-07-28</dc:date>
<dc:subject>Book</dc:subject>
<dc:subject>Assembly</dc:subject>
<dc:subject>C</dc:subject>
<dc:subject>OS</dc:subject>
<dc:subject>Mac</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/sandai/20120728/p1">
<title>[Book][Assembly][C][OS][Mac]初めてのC言語で『30日でできる！OS自作入門』の通りに初めてのOSを作ってみた跡地</title>
<link>http://d.hatena.ne.jp/sandai/20120728/p1</link>
<description> 2つも投稿されてたー。 </description>

<content:encoded><![CDATA[
<div class="section">
<p>2つも投稿されてたー。</p>
</div>
]]></content:encoded>
<dc:creator>sandai</dc:creator>
<dc:date>2012-07-28</dc:date>
<dc:subject>Book</dc:subject>
<dc:subject>Assembly</dc:subject>
<dc:subject>C</dc:subject>
<dc:subject>OS</dc:subject>
<dc:subject>Mac</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/sandai/20120622/p1">
<title>[Software][Mac][AppleScript]決定版！EvernoteにMarkdown記法で構造化されたデザイン文書を作るやつ！</title>
<link>http://d.hatena.ne.jp/sandai/20120622/p1</link>
<description> 今までの流れで一応形になって落ち着きましたー。 madeverというAppleScriptで書いたスクリプトを使って、Evernoteクライアント上でMarkdown記法が使えるようになります。文章を書くときはmarkdown、ちゃんとした形として保存するならリッチテキスト。そういった使い方で利</description>

<content:encoded><![CDATA[
<div class="section">
<p>今までの流れで一応形になって落ち着きましたー。</p>
<p>madeverというAppleScriptで書いたスクリプトを使って、Evernoteクライアント上でMarkdown記法が使えるようになります。文章を書くときはmarkdown、ちゃんとした形として保存するならリッチテキスト。そういった使い方で利用できるようイメージしました。(もちろんリッチテキストでも編集可能)</p>
<p><img width="600" src="https://github.com/sandai/madever/raw/master/sample/img02.png"></p>
<p>インストールや詳しい使い方については下記のURLでどうぞ。</p>

<ul>
<li><a href="https://github.com/sandai/madever" target="_blank">https://github.com/sandai/madever</a></li>
</ul>
<br>

<h4>Evernoteの使い道</h4>
<p>ネットだとEvernoteはよくあるライフハック的な使い方やEvernoteにライフログを残すといった情報ばかりです。というか、私はそういったイメージが強くて使っていなかったのですが、</p>

<ul>
<li>読書メモ</li>
<li>技術的な知識のまとめ</li>
<li>アイデアメモ</li>
<li>領収書</li>
<li>pdf書籍の保管</li>
</ul>
<p>などで利用すると便利でした。</p>
<p>ウェブページ保存とかライフログとかはやらないです。めんどくさいです。</p>
<p>個人的にEvernoteの一番の魅力はドキュメントや画像管理が楽なとこですね。テキストファイルとか邪魔で、そういうの保存する、管理するってめんどくさいし、さらに画像も含まれてくると嫌になるんですが、Evernoteだとそういうことを気にせず扱えます。あとクラウドって部分も大きい。</p>
<h4>だけれど構造的な文書を作るのには向いていない</h4>
<p>Evernoteのクライアントは構造的な文章が書きにくい。書きにくいというか向いていない。Evernoteって普通だとメモ程度にしか使えないので、それ向けに使ってる人も不満に感じないと思います。</p>
<p>ちゃんとした文書を作るとなると自分に馴染んだアプリを使いますね。自分もそうしていたんですがめんどくさくなりました。読書メモで電子書籍のスクショとか取ると画像の扱いとか面倒で。あと文書がかければ私はメモ帳でもなんでも良いです。</p>
<p>で、個人的な文書ならEvernoteだけで終わらせてしまってもいいんじゃないかと。でも文書の見た目はちゃんとさせたい。構造化された文書はパッと見てポイントがつかみやすいのでこれだけはちゃんとしたい。</p>
<p>そういった動機からmadeverみたいなのを作りました。</p>
<p>Evernoteでそんな文書を書きたいなんて人は稀でしょうが同じような人の役に立てたらうれしいです。</p>
</div>
]]></content:encoded>
<dc:creator>sandai</dc:creator>
<dc:date>2012-06-22</dc:date>
<dc:subject>Software</dc:subject>
<dc:subject>Mac</dc:subject>
<dc:subject>AppleScript</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/sandai/20120617/p1">
<title>[雑記]雰囲気日本式ローマ字読みしがちな話の続き</title>
<link>http://d.hatena.ne.jp/sandai/20120617/p1</link>
<description> コメントありがとうございます。見てくれているかわかりませんが疑問に思われたことをお答えします。 catについて Itisango ASUSとか @USAGI_WRP 記事が微妙、例えばcatはconcatenateだから発音がどうとか言うなら猫のcatと一緒ですし。 tmurakam cat はキャットであってる</description>

<content:encoded><![CDATA[
<div class="section">
<p>コメントありがとうございます。見てくれているかわかりませんが疑問に思われたことをお答えします。</p>
<h4>catについて</h4>
<blockquote>
<p>Itisango ASUSとか</p>
<p>  @USAGI_WRP 記事が微妙、例えばcatはconcatenateだから発音がどうとか言うなら猫のcatと一緒ですし。</p>
</blockquote>
<blockquote>
<p>tmurakam cat はキャットであってるんじゃないの？ 個人的には char を入れてほしい</p>
</blockquote>
<blockquote>
<p>doroyamada catはcatanateだからキャットでしょ。あとexecutableはエクシキュータブルだからホントはエグゼではないのよね。executiveの発音との混同かな。</p>
</blockquote>
<p>これはwikipediaですね。</p>
<blockquote title="http://ja.wikipedia.org/wiki/Cat_%28UNIX%29" cite="http://ja.wikipedia.org/wiki/Cat_%28UNIX%29">
<p>cat（カット）はUNIXの標準コマンドであり、ファイルを連結させたり表示したりするのに用いる。catは連結することを意味する「catenate」の略である。</p>
<cite><a href="http://ja.wikipedia.org/wiki/Cat_%28UNIX%29" target="_blank">http://ja.wikipedia.org/wiki/Cat_%28UNIX%29</a></cite></blockquote>
<p>えーカットなのかー！とビックリしたんですがキャットでいいのかな。concatenateとcatenateの違いはなんだろう？あまり深く考えたことがないです。</p>
<h5>char</h5>
<p>検索したらこういうのがあった。</p>
<blockquote title="http://oshiete.goo.ne.jp/qa/529903.html" cite="http://oshiete.goo.ne.jp/qa/529903.html">
<p>データ型のCHARのこと何て言ってますか？</p>
<p>私は「キャラ」と言っています。</p>
<p>でもプロの講師の人が「チャー」と言っていたので</p>
<p>どっちが一般的なんだろう？と思い質問させていただきました。</p>
<p>別にどっちでもいいんでしょうけどね。</p>
<p>キャラクタ型の略だから「キャラ」型だと思っていたんですが。</p>
<p>みなさんどっちですか？</p>
<cite><a href="http://oshiete.goo.ne.jp/qa/529903.html" target="_blank">http://oshiete.goo.ne.jp/qa/529903.html</a></cite></blockquote>
<p>覚えたてのときはチャーでした。それからcharacterのことだったのかーと認識してキャラになったけどたぶん今はチャーです。一周しました。どっちが多いんだろ？</p>
<p>関係ないけどdoubleをダブルって覚えられないからドウブレとか言ってたかな。そもそも型の概念からして意味わからなかったからやけくそだった。booleanとかエイリアンのイメージしかなかった。新しい言葉を取り入れるときにどうしても既存の知識のうち語感の似ているものを連想してしまったりするのかもしれない。あとfloatなんてcssのfloatのイメージしか無い。</p>
<br>

<h5>exe</h5>
<p>これはIT用語のサイトで調べました。</p>
<blockquote title="http://e-words.jp/w/EXEE38395E382A1E382A4E383AB.html" cite="http://e-words.jp/w/EXEE38395E382A1E382A4E383AB.html">
<p>読み ：</p>
<p>エグゼファイル</p>
<p>別名 ：</p>
<p>.EXE file</p>
<p>分野 ：</p>
<p>Windowsプログラミング / Windows / プログラミング</p>
<cite><a href="http://e-words.jp/w/EXEE38395E382A1E382A4E383AB.html" target="_blank">http://e-words.jp/w/EXEE38395E382A1E382A4E383AB.html</a></cite></blockquote>
<p>一応<a href="http://translate.google.co.jp/?sugexp=chrome,mod%3D6&q=exe&um=1&ie=UTF-8&hl=ja&sa=N&tab=wT" target="_blank">Google 翻訳</a>でも確かめました。なんか濁ってる感じはしますが。</p>
<p>execとかどうやって発音すればいいのでしょう？エグゼッ(ク)ッって感じでしょうか。いつもこれ困る。</p>
<br>

<h4>雰囲気読みの発端はchmod</h4>
<p>chmodってチョモドって読んでしまうんですよね。choじゃないのに。一般的にはチィモッドとかチィモドって言うと思うんですが。</p>
<p>そういえばこういう覚え方ばっかりだなー、なんか他にもあるかなーって思って、<a href="http://e-words.jp/" target="_blank">IT用語辞典 e-Words</a>でabcの索引から選んで書いたのが前の記事のやつです。ほとんど悪ふざけなんですが。</p>
<p>なのでGroovyは単純に見つけて選んだだけで。Scalaの方が印象が強いですね。触ったことないからほとんど分かりませんが。Scalaはスカラって読んでます。</p>
<p>Gaucheはゴッチェって読んでましたが正しくはゴーシュらしい。英語っぽくないですね。そういえばSchemeはスチームって読んでた。スキームです。Haskellは読みやすくて好きです。言語は全く知りません。</p>
<p>あとはstdio.hとかスタジオって読んじゃってました。本かネットの文章でstandard I/Oだよーと書かれていてなるほどと思った。スタジオっていったら、写真とか映像とかで使う施設をイメージしちゃうのでよくないですね。</p>
<br>

<p>とまあ、探せばボロボロ勢いで覚えてるというか認識しているのがあるなーと思って、あとは悪ふざけであの通りでございます。結局ネイティブで発音できなければ意味ないと思ってぐだぐだに。</p>
<p>最後に。initはイニチって覚えてました。確か意味を調べてinitializeの綴りでinitiまで覚えることができてたみたいです。たぶん日本式ローマ字読みで読めて区切りがいい、ってことでそうなったんでしょう。今はイニットって読んでますが、まあもう略語だからなんでもいいか。</p>
<p>あとI〜Zの用語はないです。Hで面倒になりました。</p>
</div>
]]></content:encoded>
<dc:creator>sandai</dc:creator>
<dc:date>2012-06-17</dc:date>
<dc:subject>雑記</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/sandai/20120616/p1">
<title>[雑記]間違っていると知りながらも雰囲気ローマ字読みしがちなIT用語(A〜Hまで)</title>
<link>http://d.hatena.ne.jp/sandai/20120616/p1</link>
<description> ここに1つでもあてはまるものがあればりっぱなふんいきITせんしである。 Adobe(アドビ) IT用語というか企業名。Adobe DreamWeaverやAdobe PhotshopなどITせんしとは馴染み深いので入れた。 間違い例 アドベ かるいジャブである。初見でアドベと読んでしまうあたり日本人の性</description>

<content:encoded><![CDATA[
<div class="section">
<p>ここに1つでもあてはまるものがあればりっぱなふんいきITせんしである。</p>
<br>

<h4>Adobe(アドビ)</h4>
<p>IT用語というか企業名。Adobe DreamWeaverやAdobe PhotshopなどITせんしとは馴染み深いので入れた。</p>
<h5>間違い例</h5>

<ul>
<li>アドベ</li>
</ul>
<br>

<p>かるいジャブである。初見でアドベと読んでしまうあたり日本人の性だろう。ローマ字読みは悪魔の読みだ。アルファベットの文字列を目にすれば我々日本人は日本式ローマ字読みから始めようとしてしまう。我々は悪魔に唇とベロを握られているに等しい。よくわからないがガブリエルのせいだろう。そのあたりで裸になって飛んでいる大天使ガブリエルのせいである。</p>
<br>

<h4>Aero(エアロ)</h4>
<p>Windows 7のユーザインタフェース。ガラスっぽい質感のウィンドウとか、フリップ3Dの機能とかがAeroにあたるらしい。そしてWindows 8で廃止になるらしい。</p>
<h5>間違い例</h5>

<ul>
<li>アエロ</li>
</ul>
<br>

<p>ローマ字読みとの決別を決心したくなるような間違い例だ。よくわからないけれどラファエルあたりのせいだ。ラファエルとペドロとシュバインシュタイガーのせいだ。ちなみにシュバインシュタイガーとはドイツのサッカー選手である。</p>
<br>

<h4>AI(エーアイ)</h4>
<p>人工知能。映画「Ａ．Ｉ．」を思い出して目頭が熱くなる。「Ａ．Ｉ．」を見たことは無いが目頭が熱くなる。人は…...切ない。見たことはないが。</p>
<h5>間違い例</h5>

<ul>
<li>アイ</li>
</ul>
<br>

<p>何が愛だばかやろう。この世にあるのは愛じゃねえ、純愛だけだ、である。お金を追求した純愛は白銀のごとく光り輝きなめらかで美しい。世の中は純愛で満ちている。だからこそ、人は、金曜日になれば身を軽くし狩りに出かける。良い獲物はいないか、顔を偽り頭を偽り足の匂いを消して、目を光らせ最高の獲物を捕まえては純愛をするのだ。街に繰り出せば純愛だらけである。</p>
<p>ただしエンジニアを除く。</p>
<br>

<h4>Android au(アンドロイドエーユー)</h4>
<p>日本人にAndroid = Android auという認識を確立させた偉大なフレーズ。auはその業績を自慢したりひけらかすこともなくその後何もなかったかのように姿を隠した。auがクールに去っていった後に残ったのはAndroid = auというわけのわからない認識を持った者たちだけである。</p>
<h5>間違い例</h5>

<ul>
<li>アンドロイドエーユー</li>
</ul>
<br>

<p>何もかもがそもそもの間違いである。こんな言葉が存在していたという歴史をもみ消してやりたい。</p>
<p>ちなみに、iPhoneを説明するときにAndroidを引き合いにだすとOSの話になってiOSが出てきてしまい、じゃあiPhoneは何なの？というクソめんどくさいことになる。このタイミングでOSという言葉を使うのはご法度だ。</p>
<p>iPhoneとAndroidは本来同位概念上で語られるものはないが基本的に多くの人にとってOSなどという概念はない。それはAndroid auからも分かる通りである。WindowsはWindows Vita/7ではなくWindowsというPCなのだ。つまり、WindowsはPCであるからして、Window PhoneはもうそりゃもうなんでPCがスマートフォンになっているのブレインパニック状態になってしまう。</p>
<p>また、iPhoneとAndroidの違いは何？と聞かれればiPhone以外のスマートフォンはだいたいAndroidで、主な違いは作ってる会社が違うんだよ中身はだいたい一緒だよで良いのである。そうして後に残ったのはAndroid = iPhone以外のスマートフォンという微妙な認識を持った人間たちだけだ。</p>
<p>誠実な者はその状況に我慢ならないかもしれないが、普通の人では分からないようなことを事細かく説明したところで得られるのはとりあえずうなずいておこうという相手の優しさだけである。だったら半分は優しさでできているバファリンを2錠飲めばいいのだ。それで優しさを全て得ることができる。今日も生きていける。</p>
<br>

<h4>App(アップ)</h4>
<p>いろいろなシーンで利用されている言葉だがApplication Softwareの略として認識するのが一般的かと思われる。というかそれ以外にない。App StoreやAppBankとかで使われているAppのことである。</p>
<h5>間違い例</h5>

<ul>
<li>アププ</li>
</ul>
<br>

<p>最近治ってしまったが以前はアププと言っていた。そう、たとえばアププストアだ。かなり言いづらいが癖になればそうでもない。癖とは恐ろしいものである。他人にとってなぜわざわざそのようなことをするのか、といったようなことでもやってしまうからだ。</p>
<p>ちなみにAddは未だに「アドド」と言ってしまう。Addonはアドオンと言うのにも関わらずである。恐ろしい癖である。いつかアッドといえるよう夢見ているが今日も私はアドドと言ってしまった。これが運命というやつなのだろう。避けることのできない性(さが)、人はそれを思春期と言う。</p>
<br>

<h4>ATOK(エイトック)</h4>
<p>セレブな奥様にもご好評頂いているのか定かではないがとりあえず評判の良いIME。それっぽい人にATOKっていいですよね、といえばそれっぽく話が広がるが、ATOKを使っていない人には全く話が広がらない。SKK並に広がらない。ちなみに私はATOKを使っことがないしSKKさえも使っていない。使っているのはGoogle日本語入力で何が悪い。</p>
<p>ATOKは「会話に困ったときの話題となるが諸刃の剣にもなりうる用語」の1つ。</p>
<h5>間違い例</h5>

<ul>
<li>アトック</li>
</ul>
<br>

<p>ジャストシステムはAを"ア"としか読めない日本人をあざ笑うためにATOKと名付けている。というのは嘘である。なぜここで嘘だと宣言しなければならないのかというと、本当にそうなのかと思ってしまう純粋なお前がいるからだ。お前は純粋すぎる。しかし、その純粋さが美しい。その美しさに多くの人は惹かれ、導かれるのであろう。ああ、そうだ。ところでどうだろう、その美しさを保つためにもこの「美しさを保つ壺」を1つ30万円で買わないか？</p>
<br>

<h4>AV(エーブイ"キキ")</h4>
<p>音響や映像関連の技術や製品のことである。「AV機器」と表記しなければ誤解を招く。</p>
<h5>間違い例</h5>

<ul>
<li>エーブイ</li>
</ul>
<br>

<p>日本語圏ではエーブイとはチョメチョメな意味としてとらえられることが多いので、一般的な会話で趣味は何ですかと聞かれて「おれはエーブイに興味があります」と言えば、終わる。</p>
<p>あとからエーブイ機器と言い直したところでお前は終わっているし、英語圏では一般的だとしてもお前が住んでいるのはまぎれもなく日本であり、そういった知識をひけらかすと本人はひけらかしているつもりがないのにひけらかしていると受け止められ、また、仮にあとからAV機器だよと言い直すことを前提としたボケであったとしても絶望的なまでに面白くないしそもそもお前はそういうキャラじゃないはずだ。そうして冷静になって気づいた頃には全て終わっている。お前は始まる前に終わったのだ......が、もし仮にそんなヤツが実際にいてトラウマに触れたらすまん。強く生きろ。</p>
<br>

<h4>awk(オーク)</h4>
<p>インタプリタ型言語。詳しくは知らない。そういえばJavaScriptのfunctionはawkのfunctionから名付けたといった話を思い出した。本当であればJSの開発者テヘペロ。</p>
<h5>間違い例</h5>

<ul>
<li>アダブルケー→アダブケー→アダク</li>
<li>アーク</li>
</ul>
<br>

<p>Aから始まる言葉を"オー"と発音する系の罠。ローマ字読み不信に陥る語として認定する。</p>
<br>

<h4>batファイル(バッチファイル)</h4>
<p>Windowsでいくつかの処理をまとめて行うファイル。</p>
<h5>間違い例</h5>

<ul>
<li>バットファイル</li>
</ul>
<p>バットと読んでいたのである。これはバットマンあたりのせいだろう。バットマンといえば新しい映画が公開されるはずだが、正式なタイトルは知らないし、どうでもいいのでそれだけだ。</p>
<br>

<h4>Bonjour(ボンジュール)</h4>
<p>WindowsでiTunesかQuickTime入れた時に一緒に入ってきたよくわからなくて鬱陶しかった懐かしいファッキン野郎である。今でも利用されているかどうか知らないがネットワーク上のコンピュータやデバイスなんかを自動的に検出する技術らしい。</p>
<h5>間違い例</h5>

<ul>
<li>ボンジォゥァー</li>
</ul>
<br>

<p>…...読めない言葉ではなかった。ボンジュールなど誰でも1度は聞いたことがある外国語だ。しかし、それでも読めなかったのは、それが英語の綴りじゃなかったからだろう。英語だったら読めたのだ。終わりがourとかいたらゥァ〜みたいなアクセントだと思ってしまうではないか。yourだってユゥァ〜じゃないか。今回はスペイン語がわからなかったというだけのことである。</p>
<br>

<p>......調べたらフランス語だった。</p>
<p>そういえばいつだったかかなり前に、朝のなんとか戦隊の番組で「つぶらな瞳にボンジュール」とか言うセリフを話す新キャラが出てきて、そいつが悪人かどうかをヒーローたちが話し合っているときに"つぶらな瞳にボンジュール"とセリフをはくヤツが悪人なわけがない、という理屈で悪人じゃない認定されたことを思い出した。このことから、朝の戦隊モノ番組は子供に対して正体不明の者にでも不合理に信じてしまえばボンジュールだということを伝える役割を持った非常に高尚な番組であることが伺える。戦隊モノは、奥が深い。</p>
<br>

<h4>CapsLock(キャプスロック)</h4>
<p>アルファベットの入力で小文字を大文字入力するときに使うキー。</p>
<h5>間違い例</h5>

<ul>
<li>カポスロック</li>
</ul>
<br>

<p>このように間違えたところで誰かが不幸になるわけでもないが、なぜ人は言葉に対して執着するのだろうか。</p>
<p>言葉というよりもここでは日本式ローマ字読みではあるが、そもそも、ローマ字読みなどというのは日本人が英語を習熟する過程の弊害そのものであって、こんなもの無くなってしまえばいいのである。全てはネイティブで発音しなければならない。</p>
<p>なるほど、それは一理あるだろう。しかし考えても見て欲しい。</p>
<br>

<p>誰か「あれ、これ大文字しか打てない例の現象になっちゃったよ。ときどきこういうことってあるんだけどいつも適当に直してるんだよね。ねえ、これってどうやって直すのが正解なの？」</p>
<p>あなた「キャァプスロォックを押せばいいんだよ」</p>
<p>誰か「……え？」</p>
<p>あなた「だから、キャァプスロォックを押すんだよ」</p>
<p>誰か「あ、ああ、うん、こ、このカポス？キャプス？…...ロック？だね…？」</p>
<p>あなた「イェア、そのキャァプスロォックで間違いないよ」</p>
<p>誰か「キモッ」</p>
<br>

<p>日本式のローマ字読みを捨てるときは、「日本人で日本に住んでいるのにもかわらずネイティブ並の発音を心がけているキモイ人」か、「海外留学を経てネイティブ並の発音を日本に持ち込んでうっとうしいほどひけらかしてくるキモイ人」といういずれにしろキモイ人認定を恐れないメンタルが必要になってくる。</p>
<p>何にせよ強靭もとい狂人なメンタルが重要であることは間違いない。空気の読めないネイティブ発音を日々心がけている者の道を否定するわけではないが、一般的な意見を言うなら日本人ぽい特徴を持ち長いこと日本で住んでいるのであれば、日本ではネイティブの発音を抑えて周りに合わせた方が人間関係は円滑になるだろう。</p>
<br>

<h4>cat(カット)</h4>
<p>unixのコマンド。ファイルの連結云々と説明にはあるが、個人的にはほとんど単一のファイルを表示するだけの利用しかしていない。</p>
<h5>間違い例</h5>

<ul>
<li>キャット</li>
</ul>
<br>

<p>こども「だってがっこうのえいごのじゅぎょうでcatはキャットってならったもん！ねこちゃんだもん！せんせいはうそをつかないもん！カットじゃないもん！おとなはみんなうすぎたなくてわるいやつだ！わるいやつだ！せんせいだけがいいやつなんだ！</p>
<p>せんせい「…こどもちゃん、私だって"大人"なのよ、気づかなかったの？</p>
<p>こども「ちぃ、気づかれたか</p>
<p>せんせい「え？</p>
<p>こども「え？</p>
<br>

<h4>CPAN(シーパン)</h4>
<p>Perlのライブラリやモジュールが大量に集まってるアーカイブ。読み方についてはいくつか存在するが、Perl作者がシーパンと言っているらしいのでシーパンにしておく。</p>
<h5>間違い例</h5>

<ul>
<li>コパン</li>
<li>クパン</li>
<li>セパン</li>
</ul>
<br>

<p>ただし、日本人以外でもクパンと読む人もいるらしい。セパンとも読む人もいるらしい。</p>
<p><a href="http://blog.livedoor.jp/nipotan/archives/7961151.html" target="_blank">続々・「しーぱん」なのか「くぱん」なのかハッキリさせよう - にぽたん研究所</a></p>
<br>

<p>もう好きにしたらいい。</p>
<br>

<h4>Cygwin(シグウィン)</h4>
<p>WindowsでUnixっぽい環境が手に入るソフトウェア。Mingwの方がすっきりしているイメージがある。</p>
<h5>間違い例</h5>

<ul>
<li>シ、シー…？シーワイグウィン？</li>
</ul>
<br>

<p>そもそも最初は読めない。Cyanとか知らない人は読めない可能性が高い。ただ、WYSIWYGのようにどうあがいても読めないって最凶レベルじゃない。それが救いである。</p>
<p>いや、それにしても読めないのは誰が悪いか。君ではない。ヘボンさんであり田中舘愛橘さんだ。私達は悪くないのだ。日本式ローマ字読みを作った奴が悪いのだ。そうして思い込むことで人は責任転嫁という心が穏やかになれる行為を学ぶ。ああ、清々しい。</p>
<br>

<h4>Delphi(デルファイ)</h4>
<p>プログラミング言語名だと思っていたが開発環境を指すらしいフォイ。言語にはPascalを拡張してオブジェクト指向開発をできるようにしたDelphi言語を用いるとのことだフォイ。</p>
<h5>間違い例</h5>

<ul>
<li>デルフィ</li>
<li>デルピー</li>
<li>マルフォイ</li>
</ul>
<p>マルフォイはさすがに無理がありすぎるフォイ。でも言いたかったんだフォイ。ちなみに私はデルフィって読んでたフォイ。なんでphiでファイになるんだフォイ。philosophyのphiってフィみたいな発音じゃないかフォイフィー？</p>
<br>

<h4>Eclipse(イクリプス、エクリプス)</h4>
<p>総合開発環境。Java系で使うことが多いと思うが他の言語でも開発環境は整っている。ほとんど使ったことがないので詳しくは知らない。とりあえず、重くて設定することが多い。使わなきゃいけないという状況でなければ避けたいソフトウェアだ。Androidの開発で環境を準備しようものならお金を払ってやってもらいたいぐらいである。</p>
<p>また、Androidのエミュレータの起動の遅さには精神を落ち着かせる良い修行となるが、世俗まみれの者にそんな訓練はそもそも必要ない。欲しいと思えば欲しいと飛びつき、お金がないなら奪って使う。この世の栄華の全てをしゃぶり尽くして欲望と混沌に支配された市井へと駆け出し、そうまでして手に入れたいそれは青と銀に彩られた命の水。世にはびこる市井の虎たちは今日もそれを手に入れ十字軍よろしく行進で戦地に赴く。</p>
<p>この世に正義も悪も存在しない。存在するのは勝者のみだ。甘ったれたそいつらの言うこの世の悪という悪に手を染めて、エミュレータが起動している間にいつものごとくそれを飲む。赤い牛の悪魔と契約した者のみが得られる青と銀に彩られた命の水、レッドブルを2缶飲む。なんと、2缶も飲むとは悪いやつである。</p>
<p>ちなみに、Androidの名誉のために追記しておくと、最近はエミュレータの起動が早くなったらしい。本当かどうかは知らない。あとレッドブルは飲みすぎて亡くなった人もいるらしいから気をつけよう。</p>
<h5>間違い例</h5>

<ul>
<li>エクリプセ、イクリプセ</li>
</ul>
<br>

<p>"エ"なのか"イ"なのかはっきりしてほしい。個人的にはイクリプスと読んでいる。以前はプッセと読んでいた。もはや何を表しているのかわからないがプッセで問題はなかった。プッセの方が夢や希望が詰まっている感じがした。</p>
<p>気のせいだった。</p>
<br>

<h4>Emacs(イーマックス)</h4>
<p>エディタ四天王の1つ。ちなみに四天王のうちVi(Vim)以外に思いつかないので残り2席は欠番となっている。候補としてはWindowsのメモ帳と付箋が筆頭ではあるが異論が一部からありそうなのでやめておこう。</p>
<h5>間違い例</h5>

<ul>
<li>エマックス</li>
</ul>
<br>

<p>私はどうしてもエマックスと読んでしまうのでこれからもエマックスでいく。これだけはエマックスで押し通す。</p>
<br>

<h4>EOF(イーオーエフ)</h4>
<p>ファイルの終端を表す記号。end of fileの略だっただろうか。適当にいったので定かではないが。何にしても誰でもテキストエディタで1度は見かけたことがあるだろう。</p>
<h5>間違い例</h5>

<ul>
<li>エオフ</li>
</ul>
<br>

<p>素直にアルファベットで読めばいいものをわざわざローマ字読みしてしまった罠である。巧妙な罠である。あとから冷静になればエオフなんておかしいと気づくはずなのだが、間違えたとしても最後まで自分の信念を持ってそれを押し通したいのが人間としての性である。人はそれを見栄と言う。</p>
<br>

<h4>EXE(エグゼ)</h4>
<p>Executableの略。Windowsで.exeの拡張子がついたファイルを1度は見たことがあるだろう。そういったファイルを実行ファイルとかバイナリという。</p>
<p>また、世の中にはバイナリアンという人種が存在する。バイナリアンの主な好物は0と1であり、バイナリアンは10進数の数字を目にすると全て8進数や16進数に変換しそこから2進数で考える衝動に駆られる。体がうずうずして仕方がないのだ。</p>
<p>かなりの猛者になれば基数変換を無意識化で行い目にするもの全てを0と1に変換し、習熟すればそもそも基数変換など無くとも普通に2進数として解釈するようになる。そして、達人であれば手に触れた"モノ"全てを0と1に分解することが可能で、神の域に達すればタバコの煙で0と1が作れるようになり、やがて世界は救われる。</p>
<h5>間違い例</h5>

<ul>
<li>イーエックスイー</li>
</ul>
<br>

<p>ロックマンエグゼという名前だけ知っている。エアーマンでいつも死んでそれ以上進めなかったからロックマンは苦手だ。</p>
<br>

<h4>Firefox(ファイアーフォックス)</h4>
<p>リリースされた時点で人類史において偉大なる爪痕を残しさらには昨今のFacebookとの買収騒ぎにより宇宙史に残る金字塔を打ち立てたであろうOperaに比べれば全くもって犬畜生以下でしかないが一般的に普及したけれども最近力を弱めつつあるブラウザ。</p>
<h5>間違い例</h5>

<ul>
<li>フィレフォックス</li>
</ul>
<br>

<p>そんな読み間違いしないだろと疑うかもしれない。が、たぶん中高生でフィレと言っている者は結構いるはずだ。電車の中でフィレオフォックスと聞いたことがあるので間違いない。なぜ"オ"があるのか甚だ疑問だがそれに突っ込んだとして大して面白くもない。そして、フィレオフォックスってフィレオフィッシュと語感が似てるねと、言葉が同じなのだからそのとおりだけど全く面白くもないことを思いついた時点で"誰が"本当に面白くない存在なのか明らかではあるが、それを本人の前で指摘するのはメンタル火あぶりに近いので控えていただきたい。つまり私のメンタルが火あぶりになるので控えるのだ。</p>
<br>

<h4>gif(ジフ)</h4>
<p>画像フォーマット。</p>
<h5>間違い例</h5>

<ul>
<li>ギフ</li>
</ul>
<br>

<p>ジフでもギフでもどうでもいい。</p>
<br>

<h4>Google(グーグル)</h4>
<p>世界征服を淡々と企む悪の地下秘密組織。主に屋外で活動している。</p>
<h4>間違い例</h4>

<ul>
<li>ゴーグル</li>
</ul>
<br>

<p>伝わればなんでもいい。</p>
<br>

<h4>Google Chrome(グーグル・クローム)</h4>
<p>人類の叡智が詰まった最強伝説として伝説がスタートダッシュしたまま帰ってこないOperaにしてみれば雑魚中の雑魚で臆病風に吹かれた劉備玄徳以外何者でもないがなぜか一般的に普及しつつあるブラウザ。</p>
<h5>間違い例</h5>

<ul>
<li>グーグル・チョロメ</li>
</ul>
<br>

<p>OperaはChromeに比べて名前は読みやすいし、機能もデフォルトで豊富だし、スタイリッシュだし、デベロッパーツールも使いやすいし、オペラっぽいしでいろいろな最強伝説もあるが、誰も使っていない。</p>
<br>

<h4>Groovy(グルービー)</h4>
<p>JVMで動作する言語。名前を聞いたことしかないので詳しくは知らない。</p>
<h5>間違い例</h5>

<ul>
<li>グローブィ</li>
</ul>
<br>

<p>Groと出てきたら"グロ"以外思いつかない。とてもじゃないがrooをルーなどと読むとは到底考えられない。……が、後になって考えるとルーと言えなくもない気がしてきたが、ああ、ここにもまたカサエルだかガブリエルだかラファエルだかマルフォイの呪いのせいでこうなっているのだ。</p>
<br>

<h4>HTML5(エイチティーエムエル・ファイブ)</h4>
<p>もはやバズワード。雰囲気ローマ字読み以前に雰囲気乱用用語として定着している。とりあえず目新しいものをHTML5といえばそれっぽく伝わりそれっぽく広まりそれっぽい。適度に利用することでそれっぽいITせんしになれる。「正しい説明を求められたら事前に調べて定義の線引きパターンを確認してないと困る用語」の1つ。</p>
<h5>間違い例</h5>

<ul>
<li>エイチティーエムエル・ゴ</li>
<li>エイチティーエムエル・ファイル(読みというか「エイチティーエムエル・ファイブ」の"ファイブ"が"ファイル"に聞こえてしまうことがある)</li>
<li>エイチティーエムエール！ファイッ！ブー！ファイッ！ブー！ファイッ！ブオオォォー！</li>
</ul>
<br>

<p>最後の間違い例は冷静になって考えてみると、だからどうしたしょうもないにもほどがあると思ったが今更後に引くこともできない。後に引けば私は私というアイデンティティーを多少なりとも崩しかねないからだ。</p>
<p>私のアイデンティティーを崩すということは、おしゃれなカフェのおしゃれなテーブルに置いてあるおしゃれな入れ物に入ったおしゃれな角砂糖の全てを「角砂糖粉砕！」という掛け声と共に粉砕し、角砂糖というレゾン・デートル(存在理由)をそのカフェに突きつけて、まったく理解してもらえずカフェに謝罪とともに土下座して弁償することぐらいに等しい。</p>
<p>ちなみにアイデンティティーは意味を知っていて使っているわけではなく、アイデンティティーと使うとそれっぽいんじゃないかと思ったから使っただけである。アイデンティティーといっておけば識者っぽいし、これの他にプライオリティやインセンティブとか言えばさらにそれっぽい。特にインセンティブは手堅く識者風を漂わせることができる。議論で困ったときはインセンティブと連呼して相手を威圧した後に、やさしい顔でプライオリティと耳元で囁けばうまく事が運ぶだろう。</p>
<p>それらの言葉を使うことに対してハードルが高く感じるのであれば比較的一般な用語であるマージンを使うと良い。マージンはそれっぽい演出をする言葉でありながら幅広い業界で使われている言葉である。</p>
<p>主な利用法は「私とあなたのマージンが気になるの！どうして！？」といったところだろうか。</p>
<p>ちなみに、これはウェブデザイナーであればもっと効果的な利用法が存在する。たとえば、</p>
<br>

<p>おとこ「いったいどうしたっていうんだ！おれときみのmarginは0pxじゃないか！一切の余白もなく真横に座っているっていうのに、何が不安だって言うんだ！？</p>
<p>おんな「たしかに、あなたとわたしのmarginは0pxよ……。ゼロ距離であなたはわたしのよこにいるわ！…...でも、でもわかるでしょ！？</p>
<p>おとこ「わからないよ！おれときみはこうして余白ゼロなのに！どうして……どうして、こんなにぼくはきみのことをあ――</p>
<p>おんな「paddingよ！</p>
<p>おとこ「…パ、パードゥン？</p>
<p>おんな「paddingよ！私のpaddingがあなたとの距離を遠ざけているの！気づいてよ！わたしのpadding:100pxに気づいてよ！</p>
<p>おとこ「はっ！？…...こ、心の目でしかみえない、きみが作った僕との距離、それが…...padding、おれはそれがみえていなかったのか</p>
<p>おんな「そうよ、だから、もうさよならよ、さよなら、さよなら！</p>
<p>タッタッタッタッシュパパッ</p>
<p>おとこ「あっ、まってくれ！まってくれー！ってなッッ！？！？！？き、きえた......？</p>
<p>シュパパーンッ</p>
<p>おんな「やっぱり、positionさえもあなたは…...</p>
<p>おとこ「これは、瞬間移動！？いや、座標の....そしてposition…...まさか、position…...relative……だとっ！？</p>
<p>おんな「ええ、そうよ。その調子じゃ、あなたはまだstaticから開放されていないようね......</p>
<p>おとこ「そんな！座標空間移動能力を得たというのか！？いやしかし、まだ世界レベルでのrelative制御は完全に行われていないはずじゃ……はっ！？</p>
<p>おんな「気づいたようね、そうよ、ヤツがやったのよ…..</p>
<p>おとこ「そうか…..ついにヤツがきたのか…..</p>
<p>ゆっくりと空を見上げる2人</p>
<p>おとこ・おんな「「Opera……」」</p>
<br>

<p>Operaの襲来 完</p>
<br>

<br>

<p>といったかんじで、おしゃれに恋愛SF風味Operaドラマ(略してオペドラ)として使えるだろう。</p>
<p>ちなみにここで使ったmarginは人間との物理的な距離で、paddingは心の距離を意味する。また、positionを座標位置として現実世界に割り当ててみた。よって"おんな"のさよなら移動は座標移動でありstaticな"おとこ"は座標空間移動能力を獲得していないので座標が知覚できずそれが瞬間移動に見えたとでもいうの？</p>
<p>paddingよのとき。</p>
<pre class="syntax-highlight">
<span class="synIdentifier">&#60;</span><span class="synStatement">style</span><span class="synIdentifier">&#62;</span>
  <span class="synSpecial">.</span>opera <span class="synIdentifier">{</span><span class="synType">position</span>:<span class="synType">relative</span>;<span class="synIdentifier">}</span>
<span class="synIdentifier">&#60;/</span><span class="synStatement">style</span><span class="synIdentifier">&#62;</span>
<span class="synIdentifier">&#60;/</span><span class="synStatement">head</span><span class="synIdentifier">&#62;</span>
<span class="synIdentifier">&#60;</span><span class="synStatement">body</span><span class="synIdentifier">&#62;</span>
  <span class="synIdentifier">&#60;</span><span class="synStatement">p</span><span class="synIdentifier"> </span><span class="synType">id</span><span class="synIdentifier">=</span><span class="synConstant">&#34;otoko&#34;</span><span class="synIdentifier"> </span><span class="synType">class</span><span class="synIdentifier">=</span><span class="synConstant">&#34;opera&#34;</span><span class="synIdentifier"> </span><span class="synType">style</span><span class="synIdentifier">=</span><span class="synConstant">&#34;margin:0;position:static;background-color:blue;&#34;</span><span class="synIdentifier">&#62;</span>きみのことをあ――<span class="synIdentifier">&#60;/</span><span class="synStatement">p</span><span class="synIdentifier">&#62;</span>
  <span class="synIdentifier">&#60;</span><span class="synStatement">p</span><span class="synIdentifier"> </span><span class="synType">id</span><span class="synIdentifier">=</span><span class="synConstant">&#34;onna&#34;</span><span class="synIdentifier"> </span><span class="synType">class</span><span class="synIdentifier">=</span><span class="synConstant">&#34;opera&#34;</span><span class="synIdentifier"> </span><span class="synType">style</span><span class="synIdentifier">=</span><span class="synConstant">&#34;margin:0px;background-color:red;padding-top:100px;&#34;</span><span class="synIdentifier">&#62;</span>paddingよ！<span class="synIdentifier">&#60;/</span><span class="synStatement">p</span><span class="synIdentifier">&#62;</span>
<span class="synIdentifier">&#60;/</span><span class="synStatement">body</span><span class="synIdentifier">&#62;</span>
</pre>

<p>さよならのとき。</p>
<pre class="syntax-highlight">
<span class="synIdentifier">&#60;</span><span class="synStatement">style</span><span class="synIdentifier">&#62;</span>
  <span class="synSpecial">.</span>opera <span class="synIdentifier">{</span><span class="synType">position</span>:<span class="synType">relative</span>;<span class="synIdentifier">}</span>
<span class="synIdentifier">&#60;/</span><span class="synStatement">style</span><span class="synIdentifier">&#62;</span>
<span class="synIdentifier">&#60;/</span><span class="synStatement">head</span><span class="synIdentifier">&#62;</span>
<span class="synIdentifier">&#60;</span><span class="synStatement">body</span><span class="synIdentifier">&#62;</span>
  <span class="synIdentifier">&#60;</span><span class="synStatement">p</span><span class="synIdentifier"> </span><span class="synType">id</span><span class="synIdentifier">=</span><span class="synConstant">&#34;otoko&#34;</span><span class="synIdentifier"> </span><span class="synType">class</span><span class="synIdentifier">=</span><span class="synConstant">&#34;opera&#34;</span><span class="synIdentifier"> </span><span class="synType">style</span><span class="synIdentifier">=</span><span class="synConstant">&#34;margin:0;position:static;background-color:blue;&#34;</span><span class="synIdentifier">&#62;</span>まってくれー<span class="synIdentifier">&#60;/</span><span class="synStatement">p</span><span class="synIdentifier">&#62;</span>
  <span class="synIdentifier">&#60;</span><span class="synStatement">p</span><span class="synIdentifier"> </span><span class="synType">id</span><span class="synIdentifier">=</span><span class="synConstant">&#34;onna&#34;</span><span class="synIdentifier"> </span><span class="synType">class</span><span class="synIdentifier">=</span><span class="synConstant">&#34;opera&#34;</span><span class="synIdentifier"> </span><span class="synType">style</span><span class="synIdentifier">=</span><span class="synConstant">&#34;margin:0px;background-color:red;padding-top:100px;top:50px;&#34;</span><span class="synIdentifier">&#62;</span>シュパパーンッ<span class="synIdentifier">&#60;/</span><span class="synStatement">p</span><span class="synIdentifier">&#62;</span>
<span class="synIdentifier">&#60;/</span><span class="synStatement">body</span><span class="synIdentifier">&#62;</span>
</pre>

<p>こんなイメージだった。もちろん、全て適当で後付けだ。座標空間移動ってなんだ。私もわからない。わからないがSFっぽいから入れただけである。とまあこのように、それっぽい識者になるためにはそれっぽい言葉を使う必要がある。HTML5もまた、その1つの選択肢と言えよう。</p>
<br>

<h4>実際のところ正しいローマ字読みをしようが</h4>
<p>日本式ローマ字読みがそもそも間違っているので結局ネイティブに発音するのが正しい。</p>
<p>それから用語が何か偏っている気がするがバランスを取るのもめんどくさいしほとんどやけくそなのでこのままで終わる。</p>
<p>最後に、ここに書いていることは適当である。真実はOperaだけが知っている。真実の探求者は必ずOperaに行き着くのだ。</p>
</div>
]]></content:encoded>
<dc:creator>sandai</dc:creator>
<dc:date>2012-06-16</dc:date>
<dc:subject>雑記</dc:subject>
</item>
</rdf:RDF>
