IchigoJam に必要な物と起動方法、LPC1114 DIP28 データシート入手方法、USB-シリアルモジュールの入手方法と Mac でのキーボード入力、Xcode で IchigoJamSerialConsole をビルドする方法、IchigoJamSerialConsole と ORSSerialPort のソースを少し解析。

前回予告した IchigoJam について書きたいと思います。

まず最初に、IchigoJam を入手する必要があります。

こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)
http://ichigojam.net/

本家サイト上記URLを開き、少しスクロールすると ‘IchigoJam 入手方法’ というタイトル項目が見つかります。
プリント基板キット版、プリント基板完成版、Get Started Set の取り扱い店が表示されています。私はプリント基板完成版 IchigoJam が欲しかったので、共立エレショップのリンクをクリックして購入しました。

【共立エレショップ】>> こどもパソコンIchigoJam 組み立て済完成品: 【開発・計測・ツール】 << 電子部品,半導体,キットの通販
http://eleshop.jp/shop/g/gF3K313/

上記 URL ページ左上の検索フィールドを ichigojam で検索すれば、多数の IchigoJam キットが表示されます。その中でも、

【共立エレショップ】>> IchigoJam電子工作パーツセット 32個のプログラムを保存!EEPROMカセット: 【開発・計測・ツール】 << 電子部品,半導体,キットの通販
http://eleshop.jp/shop/g/gF5U411/

は、お勧めです。私は上のキットが販売されているのを知らず、秋月電子通商でそれぞれ必要な部品を注文しました。

IchigoJam - ショップのふうせん
http://shopfusen.jimdo.com/ichigojam/

でも、購入できます。こちらは値段が高いですが、モジュールになっているので便利です。

【共立エレショップ】eleshop.jp:電子部品,半導体,キットの通販
http://eleshop.jp/shop/default.aspx

私が、共立エレショップで購入したものは

共立電子の店
エレショップ
こどもパソコンIchigoJam 組み立て済完成品
IchigoJam-G _
¥2,000
microUSBケーブル 1m■ジャンク■
IG-13004-DJK _
¥150
ビデオケーブル 1.5m[R指]
VD-015 _
¥282
商品金額合計
¥2,432
送料
¥480
注文金額合計
¥2,912

です。

IchigoJam について、下記 URL の本家サイト、ブログ、IchigoJam 情報サイト

こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)
http://ichigojam.net/
#IchigoJam / 福野泰介の一日一創
http://fukuno.jig.jp/IchigoJam
こどもパソコン IchigoJam 情報サイト - イチゴジャム レシピ
http://15jamrecipe.jimdo.com/

のリンクを辿れば、必要な情報は入手できると思います。私が公開している RSS リーダー iYKRSS、iYKRSSHD も

 #IchigoJam / 福野泰介の一日一創
http://fukuno.jig.jp/IchigoJam
iYKRSS
カテゴリ/ニュース
無料
http://appstore.com/yoshiakikoyama/iykrss
iYKRSSHD
カテゴリ/ニュース
¥120
http://appstore.com/yoshiakikoyama/iykrsshd

福野泰介さんのブログ RSS を読めるように対応しました。

こどもパソコンIchigoJam「たいけんセット」 5ステップでプログラミングスタート! #opendata #shizuoka / 福野泰介の一日一創
http://fukuno.jig.jp/998

上記URLに最初にすべきことが記載されています。

IchigoJam を起動した手順を紹介したいと思います。

必要な物 - イチゴジャム レシピ
http://15jamrecipe.jimdo.com/%E5%BF%85%E8%A6%81%E3%81%AA%E7%89%A9/

必要な物は上記 URL が参考になります。簡単に紹介すると

IchigoJam
microUSBケーブル
USB 電源アダプタ
ビデオケーブル
PS/2キーボード
テレビ

です。

USB 電源アダプタは、iPhoneiPadiPod touch 用の USB 電源アダプタで問題ないようです。ビデオケーブルは、赤、黄、白に色分けされたケーブルです。使用するのは、映像の黄色だけです。共立電子で私が買ったビデオケーブル のように、黄色だけのものもあります。

サンワサプライ PS/2キーボード SKB-L1BK

サンワサプライ PS/2キーボード SKB-L1BK

サンワサプライ PS/2キーボード SKB-L1BK
¥ 684

PS/2 キーボードは、Amazon などで売られています。また、USB キーボードを所有していれば PS/2-USB変換ケーブルを利用することもできます。

テレビですが、アナログ端子(RCA端子、赤、白、黄色の3つの端子) に対応しているものだと問題なく利用できます。私は、SHARP AQUOS 液晶テレビ 19型 ブラック LC-19K90-B を使用しました。

こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)
http://ichigojam.net/

小さい画面が好みの人は、上記本家サイトの

オススメ周辺機器
テレビ

で紹介されている

Amazon.co.jp: 【ノーブランド品】2系統の映像入力 12V車用 ミニオンダッシュ液晶モニター 4.3インチ バック切替可能: 家電・カメラ
http://www.amazon.co.jp/dp/B0079RJ4AE/

車載モニタがお勧めです。


図 1) IchigoJam

上図が接続して電源を切った状態です。

プラスチックナット+連結(6角ジョイント)スペーサー(10mm)セット: 電子工作便利商品 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gP-01864/

ただし、IchigoJam にスペーサーを取り付けてあります。

上図 1) のようにスイッチが2つあります。赤枠のスイッチ(SW1)が電源スイッチです。青枠のスイッチ(SW2、タクトスイッチ[ボタン]) は、BASIC 命令で押したかどうかを判定できます。

赤枠の電源スイッチSW1を入れても、基板の赤色ダイオードが点灯するわけではありません。赤色ダイオードBASIC の命令で操作できます。テレビに

IchigoJam BASIC 1.0.1 by jig.jp
OK

と表示されれば起動に成功です。IchigoJam のバージョンによって表示される文字列は違います。

IchigoJam で使用されているマイコン

IchigoJam組み立てキットで自分だけのパソコンづくり(上級編) #IchigoJam #maker / 福野泰介の一日一創
http://fukuno.jig.jp/671
マイコンLPC1114の外部クリスタルの自動判別方法 #lpc1114 #IchigoJam #maker / 福野泰介の一日一創
http://fukuno.jig.jp/1097

上記回路図より LPC1114 DIP28 です。

データシートは

LPCZone:NXP LPCマイコン情報・・LPCマイコン・ラインナップ
http://www.nxp-lpc.com/lpc_micon/

上記 URL よりダウンロードできます。回路図 Vdd = 3.3V より、LPC1100LV シリーズではなく LPC1100(X)L シリーズです。ハードウェアに関しては詳しくないので、間違っている可能性もあります。

LPCマイコン情報:LPC1100 (X)L Cortex-M0搭載-低消費電力,CSP,DIP,LPC1125,LPC1124,LPC1102,LPC1104,LPC1111,LPC1112,LPC1113,LPC1114,LPC1115, LPC1114FN28
http://www.nxp-lpc.com/lpc_micon/cortex-m0/lpc1100xl/
特徴
詳細はデータシート [ http://jp.nxp.com/documents/data_sheet/LPC111X.pdf ] でご確認ください。

の文字 ‘データシート’ のリンク、または

ドキュメント/技術情報
LPC111x(X)Lデータシート(PDF) [LPC1100] [ http://jp.nxp.com/documents/data_sheet/LPC111X.pdf ]
LPC1115, LPC1114, LPC1113, LPC1112, LPC1111, LPC1110。 LPC1114FN28/102も。

‘LPC111x(X)Lデータシート(PDF) ‘ のリンク

データシート
http://jp.nxp.com/documents/data_sheet/LPC111X.pdf

をクリックすると PDF ファイルがダウンロードできます。目的のLPCマイコン[ LPC1114FN28/102 ] データシートは

11ページ
6. Pinning information
Table 3.	Pin description overview
Part                            Pin description table       Pinning diagram
LPC1114FN28/102    Table 7                             Figure 13
26ページ
Table 7. LPC1100L series: LPC1112/14 pin description table (TSSOP28 and DIP28 packages)
18ページ
Fig 13. LPC1100L series pin configuration DIP28 package

上記ページが参考になります。OS X のアプリ ‘プレビュー’ で必要なページだけ抜き出して PDF 化すると便利です。メモリーマップは

46ページ
Fig 14. LPC1100 and LPC1100L series memory map

と IchigoJam 独自のメモリマップは

IchigoJamのメモリマップと演算子優先順位 #IchigoJam / 福野泰介の一日一創
http://fukuno.jig.jp/984

で確認できます。

また、統合開発環境(IDE) LPCXpresso のフリー版は

Welcome NXP LPCXpresso Users! | www.LPCware.com
https://www.lpcware.com/lpcxpresso
Download LPCXpresso installers and the getting started guide
LPCXpresso IDE Downloads | www.LPCware.com
https://www.lpcware.com/lpcxpresso/download

からダウンロードできます。

次に OS X Yosemite 10.10.5 上で Mac のキーボードを IchigoJam のキーボードとして使用する方法を紹介したいと思います。

Mac のキーボードを IchigoJam のキーボードとして利用するには、USB-シリアルモジュールを用意する必要があります。また、USB-シリアルモジュールは Mac で IchigoJam のファームウェアを更新するのにも利用できます。

私が試したのは、


図 2) AE-FT234X

超小型USBシリアル変換モジュール AE-FT234X: 半導体 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-08461/
AE-FT234X
1パック ¥600(税込)
4pin
デバイス名: /dev/cu.usbserial-DJ002536


図 3) AE-FT231X

FT231X USBシリアル変換モジュール: 半導体 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gK-06894/
AE-FT231X
1パック ¥750(税込)
18pin
デバイス名: /dev/cu.usbserial-DJ004U12

の2つです。どちらも、細ピンヘッダは付属しています。ただし、細ピンヘッダは自分でハンダ付けする必要があります。ハンダ付けで失敗した場合は、はんだ吸取り線を利用してください。 率直に言うと値段も安いし、必要なのは 3 pin だけなので断然 AE-FT234X がお勧めです。

Ichigojam と AE-FT234X を接続するには、ジャンパーワイヤ(オス-メス) が必要です。秋月電子通商でいろいろな種類が売っています。
秋月電子通商の検索フィールドにキーワードを入力して検索するより、Google で直接

ジャンパーワイヤ site:akizukidenshi.com

上の語句で検索する方が、見つけやすいかもしれません。

Mac と接続するには

USBケーブル Aオス-マイクロBオス 1.5m A-microB: パーツ一般 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gC-07607/
1本 ¥120(税込)

が必要です。


図 4) IchigoJam を USB-シリアルモジュールで Mac と接続した状態

上図は、AE-FT234X と IchigoJam を ジャンパーワイヤ(オス-メス) 3本で

AE-FT234X -	IchigoJam
TXD            -   RXD (15)
RXD            -  TXD (16)
GND           -  GND (8・22)

上記のように接続し、Mac とは USBケーブル で繋いだ状態です。AE-FT234X 側 VCC(3.3V)は接続する必要はありません。

MacOS X Yosemite 10.10.5 上では、最初からUSB-シリアルモジュール AE-FT234X、AE-FT231Xの FTDI 社用アップル純正ドライバがインストールされています。

IchigoJam の電源を入れ、

titoi2/IchigoJamSerialConsole · GitHub
https://github.com/titoi2/IchigoJamSerialConsole


図 5) IchigoJamSerialConsole でオープンするデバイス名を選択

IchigoJamSerialConsole (Xcode Version 6.4 (6E35b) による IchigoJamSerialConsole アプリケーションの作成の仕方は、後半に説明してあります。) を起動し、上図のようにデバイス名を選択し、Open ボタンをクリックすると下図のようにデバイスが開きます。


図 6) シリアルポートをオープンした状態

後は、キーボードで入力すると IchigoJam と接続したテレビに文字が表示されるはずです。(注意、IchigoJamSerialConsole アプリケーションが前面にないとキーボードの入力を受け取ることができません。) BASIC でプログラムができる状態になりました。IchigoJamSerialConsole を終了する前に、忘れず Close ボタンをクリックして、シリアルポートを閉じてください。(実際はウインドウを閉じればシリアルポートも閉じられます。)

LOAD ボタンをクリックすると文字コード: Shift JIS、改行コード: CR/LFのテキストファイルに保存した BASC プログラムを IchigoJam に転送できます。RUN + Return キーを入力すると実行できます。

注意) IchigoJamSerialConsole は、改行コード CR (0x0d) を送信しません。CoolTerm などで

Roger Meier's Freeware
CoolTerm
http://freeware.the-meiers.org/

生の BASIC プログラムを送信する場合、BASIC プログラムの改行コードを LF に変換してください。拙作、DUMP.bas.txt

DUMP.bas.txt  ; メモリダンププログラム version 1.0.0
http://kyoshiaki.sakura.ne.jp/osx/Sample/IchigoJam.zip

で IchigoJam のプログラムエリア #C00 をダンプすると改行コードが LF (0x0A) になっていることが確認できます。

BASIC プログラムは

こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)
http://ichigojam.net/
説明書・組み立て方
IchigoJam はじめのいっぽ&ミニゲームhttp://ichigojam.net/book/IchigoJam-firstgame.pdf
keynote
http://ichigojam.net/book/IchigoJam-firstgame.key
English-PDF
http://ichigojam.net/book/IchigoJam-firstgame-en.pdf
English-keynote
http://ichigojam.net/book/IchigoJam-firstgame-en.key
PROGRAM - イチゴジャム レシピ
http://15jamrecipe.jimdo.com/program/

に、色々紹介されています。BASIC のバージョンには十分気をつけてください。

BASICリファレンスは、

こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)
http://ichigojam.net/

上記URLページの右側

説明書・組み立て方
BASICリファレンス 1.0.1 / BASICリファレンス 0.9.7 / english version

BASICリファレンス 1.0.1、0.9.7 リンク

IchigoJam BASIC リファレンス 1.0.1
http://ichigojam.net/IchigoJam.html
IchigoJam BASIC リファレンス 0.9.7
http://ichigojam.net/IchigoJam-0.9.7.html

で読むことができます。

私が作ったメモリダンププログラムも下記URL で公開します。

IchigoJam BASIC バージョン 1.0.1 対応 BASIC 自作プログラム
DUMP.bas.txt  ; メモリダンププログラム version 1.0.0
SW2.bas.txt   ; SW2 タクトスイッチ判定プログラム version 1.0.0
http://kyoshiaki.sakura.ne.jp/osx/Sample/IchigoJam.zip

MacOS X Yosemite 10.10.5 上でのフォームウェア更新、外部記憶装置 EEPROM Coolterm の使い方、Coolterm の使用例と Parallels Desktop 10 の Windows 8 上での BUFFALO モニターモード搭載 USB用ビデオキャプチャー PC-SDVD/U2G の使用例などは次回に紹介したいと思います。

PC-G850V、PC-G850VS と Mac の間でシリアル通信ができるアプリケーション

PCG-LinkMac
http://kyoshiaki.sakura.ne.jp/osx/pcg850v.html#pcglink

を公開している身としては、一番興味があったのは IchigoJamSerialConsole

titoi2/IchigoJamSerialConsole · GitHub
https://github.com/titoi2/IchigoJamSerialConsole

です。

最初に、IchigoJamSerialConsole のソースをダウンロードし、Xcode でビルドして IchigoJamSerialConsole アプリケーションを作成する方法を紹介したいと思います。

まず、MacApp Store から Xcode (私の環境は、Xcode Version 6.4 (6E35b) です。) をインストールしてください。インストールが終了したら、’/アプリケーション’ フォルダにある Xcode アイコンをダブルクリックして起動してください。

Xcodeの利用許諾(ライセンス同意契約)に Agree ボタンで同意し,パスワードを尋ねられるので入力してください。必要なコンポーネントがインストールされます。

Xcode をインストールするとコマンドラインツールはインストールされます。OS X Yosemite ではコマンドラインツールをインストールするために、ターミナル上でコマンド xcode-select –install を実行する必要はありません。

また、IchigoJamSerialConsole をビルドするには CocoaPods

CocoaPods.org
https://cocoapods.org/

が必要です。’/アプリケーション/ユーティリティ’ フォルダの ‘ターミナル’ を起動し

~ $ sudo gem install cocoapods

と入力し、 Return キーを押して CocoaPods をインストールしてください。パスワードの入力を求められるので、ログイン時のパスワードを入力します。しばらく時間がかかりますが、(反応がない状態が数分続きますが、そのまましばらくお待ちください。)

~ $ sudo gem install cocoapods
Password:
Fetching: cocoapods-core-0.38.1.gem (100%)
.
.
Parsing documentation for cocoapods-0.38.1
Installing ri documentation for cocoapods-0.38.1
3 gems installed
~ $ 

とプロンプト $ 文字が表示されれば終了です。CocoaPods のアップデートも、インストールと同じく再度 sudo gem install cocoapods を実行してください。

CocoaPods は最新の状態にしないと IchigoJamSerialConsole のソースを修正する必要が生じます。私が使用している CocoaPods のバージョンは、ターミナルのコマンド pod で確認すると


図 7) ターミナルで CocoaPods のバージョン確認

~ $ pod --version
0.38.2
~ $

0.38.2 です。

それでは、IchigoJamSerialConsole のソースをダウンロードします。2つの方法があります。厳密には GitHubGitHub on Mac アプリケーションを使う方法もあります。(私は GitHub on Mac を使ったことがないので詳しくは知らないのですが、Chrome で ‘Clone in Desktop’ ボタンをクリックすると GitHub on Mac が起動し、保存先を尋ねてくるそうです。)

一つ目は GitHub サイト

titoi2/IchigoJamSerialConsole · GitHub
https://github.com/titoi2/IchigoJamSerialConsole

の右中央の Downloaded Zip ボタンをクリックしてダウンロードする方法です。IchigoJamSerialConsole-master.zip という名前のファイルがダウンロードされ、ダブルクリックすると IchigoJamSerialConsole-master という名前のソースが含まれたフォルダが作成されます。好きな場所に IchigoJamSerialConsole-master フォルダを移動してください。

2つ目は、git コマンドを使う方法です。上記サイトの右中央


図 8) GitHubクリップボードアイコン

クリップボードアイコン をクリックします。クリップボードhttps://github.com/titoi2/IchigoJamSerialConsole.git という文字列がコピーされます。後は、ターミナルでインストールしたいフォルダに移動して (例としてデスクトップを指定しています。)、git コマンドを ‘git clone ‘ と入力し、続けて Command+v でクリップボードからターミナルに文字列をペーストしてください。最後に Return キーを押して実行します。


図 9) git コマンドでソースをダウンロード

~ $ cd Desktop
~/Desktop $ git clone https://github.com/titoi2/IchigoJamSerialConsole.git
Cloning into 'IchigoJamSerialConsole'...
remote: Counting objects: 145, done.
remote: Total 145 (delta 0), reused 0 (delta 0), pack-reused 145
Receiving objects: 100% (145/145), 94.62 KiB | 0 bytes/s, done.
Resolving deltas: 100% (67/67), done.
Checking connectivity... done.
~/Desktop $ 

これでデスクトップに IchigoJamSerialConsole という名前のフォルダが作成され、ソースがダウンロードされました。ターミナルで IchigoJamSerialConsole フォルダに移動します。

~/Desktop $ cd IchigoJamSerialConsole/

折角 git を使ったので、簡単な使い方を説明します。

現在ダウンロードしたリモートサーバーのアドレスを表示するには、git remote -v

~/Desktop/IchigoJamSerialConsole $ git remote -v
origin	https://github.com/titoi2/IchigoJamSerialConsole.git (fetch)
origin	https://github.com/titoi2/IchigoJamSerialConsole.git (push)

を使います。この場合、origin というリモートリポジトリの名前でリモートサーバーのアドレスを設定しています。

ブランチの表示には、 git branch -va です。

~/Desktop/IchigoJamSerialConsole $ git branch -va
* master                57820b4 ログクリアボタン追加
remotes/origin/HEAD   -> origin/master
remotes/origin/master 57820b4 ログクリアボタン追加
~/Desktop/IchigoJamSerialConsole $ 

上記より、現在のブランチは master です。

リモートリポジトリ origin の履歴を取得するには、 git fetch origin

~/Desktop/IchigoJamSerialConsole $ git fetch origin
~/Desktop/IchigoJamSerialConsole $ 

です。最新の履歴を表示するには、git branch -va

~/Desktop/IchigoJamSerialConsole $ git branch -va
* master                57820b4 ログクリアボタン追加
remotes/origin/HEAD   -> origin/master
remotes/origin/master 57820b4 ログクリアボタン追加
~/Desktop/IchigoJamSerialConsole $

で確認できます。

ステータスを確認するには、git status を使います。

~/Desktop/IchigoJamSerialConsole $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
~/Desktop/IchigoJamSerialConsole $ 

git log を使うとコミットを確認できます。

~/Desktop/IchigoJamSerialConsole $ git log
commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Author: xxxxxxxxxxx
Date:   xxx xxx x xx:xx:xx xxx +xxxx
:q

スペースキーを押すと次のページを開きます。終了は q キーを押してください。

git pull で自分のローカルリポジトリをリモートリポジトリの内容で更新します。

~/Desktop/IchigoJamSerialConsole $ git pull
Already up-to-date.
~/Desktop/IchigoJamSerialConsole $

git についてはあまり詳しくはありません。ソースを最新の状態にしたい場合は git pull を実行すれば良いようです。差分だけがダウンロードされ、最新状態になります。

次に CocoaPods を使って必要なライブラリをダウンロードする必要があります。

IchigoJamSerialConsole-master.zip ファイルをダウンロードし展開したフォルダ IchigoJamSerialConsole-master に ‘ターミナル’ 上で移動します。git コマンドでダウンロードした場合は、IchigoJamSerialConsole フォルダに移動してください。(今回の例では ‘デスクトップ/IchigoJamSerialConsole’ フォルダに移動しています。)

IchigoJamSerialConsole フォルダで説明します。(IchigoJamSerialConsole-master フォルダでも同じです。)

pod install コマンドを実行します。

~/Desktop/IchigoJamSerialConsole $ pod install
Updating local specs repositories
Analyzing dependencies
Downloading dependencies
Installing ORSSerialPort (1.8.1)
Generating Pods project
Integrating client project
Sending stats
~/Desktop/IchigoJamSerialConsole $

シリアルポートライブラリ ORSSerialPort がインストールされます。

open . コマンドで IchigoJamSerialConsole フォルダを Finder で開きます。

~/Desktop/IchigoJamSerialConsole $ open .

IchigoJamSerialConsole フォルダの IchigoJamSerialConsole.xcworkspace ファイルをダブルクリックして Xcode で開きます。(IchigoJamSerialConsole.xcodeproj ファイルではないので注意してください。)


図 10) IchigoJamSerialConsole.xcworkspace を Xcode で開いた状態


図 11) メニュー表示

図 10) のようにツールバーの IchigoJamSerialConsole 文字をクリックしてポップアップメニューを開き、図 11) ‘Edit Scheme …’ を選択します。


図 12) Edit Scheme

上図のように、左ペインから Run をクリックし、Info タブを選択します。


図 13) Build Configurarion 選択

Build Configurarion: release

Build Configurarion のメニューから release を選択します。リリースを選択するとビルドしたアプリケーションに余計な情報が含まれていません。

右下の Close ボタンをクリックしてウインドウを閉じます。


図 14) Project Navigator

上図のように Project Navigator (一番左のペイン) の IchigoJamSerialConsole 文字列をクリック、その横のエリア


図 15) PROJECT と Deployment Target 選択

PROJECT
IchigoJamSerialConsole

図 15) ‘PROJECT’ 下の文字 IchigoJamSerialConsole をクリック、さらに横の Info タブを選択

▼ Deployment Target
OS X Development Target 10.10

図 15) の OS X Development Target のメニューから、対応する最下位の OS を選択します。この場合だと OS X Yosemite 10.10 以上に対応しています。好きなバージョンを選択してください。あくまでも宣言しているだけであって、ソースが対応している必要があります。


図 16) TARGETS 選択

TARGETS
IchigoJamSerialConsole

図 16) 左から2番めのペイン ‘TARGETS’ 下の文字 IchigoJamSerialConsole をクリック、その横の General タブをクリック


図 17) Deployment

▼ Deployment Info
Development Target 10.10

図 17) のように先ほど選択した Deployment Target と同じか確認して下さい。違う場合は設定してください。

▼ Identity
Bundle Identifier: jp.aboutsoft.IchigoJamSerialConsole
Signing ◯ Mac App Store
◯ Developer ID
● None
Team: None

図 17) Identity の項目で今回は必要ありませんが、アプリケーションの識別子 jp.aboutsoft.IchigoJamSerialConsole を設定できたり、Mac App Store 以外で公開する場合の署名 Developer ID などを選択できます。Developer ID をクリックすると Team: None メニューから有効なメンバーを選択できます。

Apple Developer
https://developer.apple.com/

詳しくは、上記URLの Apple Developer Center/Member Center/Certificates, Identifiers & Profiles/Mac Apps/App Distrubution Guide を参照してください。

これで設定は終了です。


図 18) ビルド


図 19) 停止

図 18) 左上ツールバーの ▶ ボタンをクリックしてビルドすると IchigoJamSerialConsole アプリケーションの作成に成功しますが、警告が表示されます。図 19) のように ▶ ボタンの横の■ ボタンをクリックしてアプリケーショを終了してください。


図 20) Issue Navigator

図 20) ツールバーの下にある Navigator (一番左のペイン) 上部の 8 つのアイコンが並んでいる中から、左から4番目の警告アイコン (Issue Navigator) が選択されているか確認して下さい。

図 20) のように一番左側ペイン Issue Navigator に IJCSerialManager.swift ファイルの5つの警告が表示されます。警告をクリックすると


図 21) Fix-it ダイアログ

Issue: ********************
Fix-it Replace "! ******************

図 21) のようなダイアログが開きます。青色で反転した Fix-it と書かれたエリアをダブルクリックするとソースが自動で修正されます。! マークを削除しているだけです。すべての警告をクリックして上のように修正してください。すべての警告がなくなります。

念のため、

メニュー/Product/Clean

を選択し、ビルドされているアプリケーションを削除します。


図 22) ビルド


図 23) 停止

再度、図 22) 左上ツールバーの ▶ ボタンをクリックしてビルドします。IchigoJamSerialConsole アプリケーションが起動しますが、図 23) のように ▶ ボタンの横の■ ボタンをクリックしてアプリケーショを終了してください。


図 24) Project Navigator

図 24) のようにツールバーの下にある Navigator (一番左のペイン) 上部の 8 つのアイコンが並んでいる中から、一番左のフォルダアイコンをクリックしてください。プロジェクト・ナビゲーターが開きます。一番トップの IchigoJamSerialConsole から ▶ をクリックして階層を下って行くと


図 25) IchigoJamSerialConsole アプリケーション

▼IchigoJamSerialConsole
▼Products
IchigoJamSerialConsole.app

図 25) のように Products の下にアプリケーションアイコンと IchigoJamSerialConsole.app 文字列が見つかるはずです。これが目的の IchigoJamSerialConsole アプリケーションです。赤い文字列の場合、ビルドに失敗しています。


図 26) Finder に IchigoJamSerialConsole アプリケーションを表示

図 26) のように IchigoJamSerialConsole.app 文字列をマウスで右クリック (CTRL + 左クリック) し、’メニュー/Show in Finder’ を選択してください。

IchigoJamSerialConsole アプリケーションが Finder に表示されます。好きな場所にコピーしてください。

これで IchigoJamSerialConsole アプリケーションのビルドに成功しました。

ここからは個人的に関心があった簡単なソース解析です。

自作の PC-G850V、PC-G850VS と Mac の間でシリアル通信ができるアプリケーション

PCG-LinkMac
http://kyoshiaki.sakura.ne.jp/osx/pcg850v.html#pcglink

の場合、シリアルポートを読み書きするプログラムは自作していたのですが、IchigoJamSerialConsole では便利なシリアルポートライブラリ ORSSerialPort を使用していました。こんな便利なライブラリがあったのですね。

ORSSerialPort ライブラリ、IchigoJamSerialConsole のソースを全て理解するのは無理なので、関心があるところだけ読み解きたいと思います。

キー入力は NSResponder クラスを継承した NSView のサブクラス MainView の func keyDown(theEvent: NSEvent)、func keyUp(theEvent: NSEvent) から

// MainView.swift
override func keyDown(theEvent: NSEvent) {
delegate.onKeyDown(theEvent)
override func keyUp(theEvent: NSEvent) {
delegate.onKeyUp(theEvent)

上のソース (ソースは省略してあるので、先頭に表示してあるファイル名とメソッド名を頼りに Xcode で確認して下さい。) のように delegate の onKeyDown(theEvent)、onKeyUp(theEvent) を呼び出しています。

// ViewController.swift
override func viewDidLoad() {
mainView.delegate = self

MainView の delegate は ViewController です。

// ViewController.swift
func onKeyDown(theEvent: NSEvent) {
keyDownProc(theEvent)

ViewController の onKeyDown(theEvent: NSEvent) から keyDownProc(theEvent) を呼び出しています。

// ViewController.swift
func keyDownProc(theEvent: NSEvent) {
serialManager.sendByte(c8)

ViewController の keyDownProc(theEvent: NSEvent) で PS/2 のキーコードに変換し、serialManager.sendByte(c8) を呼び出し、シリアルポートに1バイト出力しています。

serialManager は IJCSerialManager.swift の IJCSerialManager クラスをインスタンス化したものです。

// IJCSerialManager.swift
func sendByte(param:UInt8) {
sp.sendData(data)

sp は ORSSerialPort クラスです。sendData(data) で実際にシリアルポートに書き込んでいます;

// FileLoadViewController.swift
func loadData2Ichigojam(data:NSData) {
serialManager.sendByte(d)
NSThread.sleepForTimeInterval(0.02)

また、テキストをシリアルポートに書き込むメソッド loadData2Ichigojam(data:NSData)の場合、1バイト送るごとに NSThread.sleepForTimeInterval(0.02) で遅延しています。

IJCSerialManager.swift
func open(path:String) {

func open(path:String) メソッドを見るとシリアルポートを通信速度 115200 で開いていることが判ります。

ORSSerialPort ライブラリから呼び出されるプロコトル、シリアルポードを開く処理などは、すべて IJCSerialManager.swift でおこなっています。ORSSerialPort ライブラリのプロコトルから呼び出されるメソッドを IJCSerialManager.swift に実装し、そのメソッドから IJCSerialManager.swift 宣言したプロコトル IJCSerialManagerDelegate を使って ViewController.swift に流しています。

私にとって ORSSerialPort ライブラリはあまりにも複雑すぎて完全には理解できないのですが、シリアルポードは基本的に BSD ライブラリの

#include <fcntl.h>
int open(const char *path, int oflag, ...);
ssize_t write(int fildes, const void *buf, size_t nbyte);

上記システムコール関数 open() でデバイスを開き、write() 関数で書き込むだけです。詳しくは、ターミナルで

~ $ man 2 open
~ $ man 2 write
~ $ 

上記 man コマンドで確認して下さい。次ページを表示するにはスペースキーを押し、終了は q キーを押してください。
man の内容をテキストファイルに出力するには、以下のコマンド

~ $ man 2 open | col -bfx > open.txt
~ $ open open.txt
~ $ 

を実行してください。

デバイスの通信速度などの設定は

#include <unistd.h>
#include <termios.h>
#include <fcntl.h>
#include <sys/ioctl.h>
struct termios termios_p;
int tcgetattr(int fildes, struct termios *termios_p);
int tcsetattr(int fildes, int optional_actions, const struct termios *termios_p);
speed_t cfgetispeed(const struct termios *termios_p);
speed_t cfgetospeed(const struct termios *termios_p);
int cfsetospeed(struct termios *termios_p, speed_t speed);
int cfsetspeed(struct termios *termios_p, speed_t speed);

上記関数で設定できます。ターミナルで

~ $ man 3 tcgetattr

で確認してください。拙作 PCG-LinkMac や ORSSerialPort ライブラリでも基本は同じです。

ただし、ソースを解析していて驚いたのは入手できるシリアルポートを調べるのに IOKit を使っているところです。私は安直に /dev を開いて調べていました。

ちょと抜き出してみました。(ソースは省略してあるので、詳細は必ず IchigoJamSerialConsole.xcworkspace ファイルを Xcode で開き、ツールバー下にあるフォルダアイコンをクリックし、一番左側ペイン Project Navigator で

PodsPods
ORSSerialPort.m
ORSSerialPortManager.m

ORSSerialPort.m、ORSSerialPortManager.m を確認して下さい。)

// ORSSerialPort.m
#import <IOKit/serial/IOSerialKeys.h>
#import <IOKit/serial/ioss.h>
@property (readonly) io_object_t IOKitDevice;
+ (NSString *)stringPropertyOf:(io_object_t)aDevice forIOSerialKey:(NSString *)key;
{
CFStringRef string = (CFStringRef)IORegistryEntryCreateCFProperty(aDevice, (__bridge CFStringRef)key, kCFAllocatorDefault, 0);
return (__bridge_transfer NSString *)string;
}
+ (NSString *)bsdCalloutPathFromDevice:(io_object_t)aDevice;
{
return [self stringPropertyOf:aDevice forIOSerialKey:(NSString*)CFSTR(kIOCalloutDeviceKey)];
}
//  ORSSerialPortManager.m
// 220行目
 - (void)retrieveAvailablePortsAndRegisterForChangeNotifications;
{
self.portPublishedNotificationIterator = portIterator;
IOObjectRelease(portIterator);
NSMutableArray *ports = [NSMutableArray array];
io_object_t eachPort;
while ((eachPort = IOIteratorNext(self.portPublishedNotificationIterator)))
{
ORSSerialPort *port = [ORSSerialPort serialPortWithDevice:eachPort];
// シリアルポートの場合、配列 ports に追加
if (port) [ports addObject:port];
IOObjectRelease(eachPort);
}
// 入手できるシリアルポートに代入
self.availablePorts = ports;
#define kIOCalloutDeviceKey		"IOCalloutDevice"  // /dev/cu.usbserial-FTG6R5XK
#define kIODialinDeviceKey		"IODialinDevice"    // /dev/tty.usbserial-FTG6R5XK

上のソースがその箇所です。個人的に動作を調べるために作成したサンプルを

シリアルポートデバイスのパス名を Xcode 下のデバッガコンソールに表示するプログラム
http://kyoshiaki.sakura.ne.jp/osx/Sample/SerialPort.zip

上記URLで公開します。

USB シリアル変換ケーブルを接続して上記URLで公開しているプロジェクトをビルドすると、シリアルポートを Xcode 左下のデバッガコンソールに表示します。ソースは以下のとおりです。

/*
 IOKit からデバイス名を取り出す
 */
-(void)bsdPathFromDevice {
CFMutableDictionaryRef matchingDict = NULL;
// kIOSerialBSDServiceValue にマッチした IOService の CFMutableDictionaryRef を作成
matchingDict = IOServiceMatching(kIOSerialBSDServiceValue);
CFRetain(matchingDict); // Need to use it twice
// matchingDict に キー:CFSTR(kIOSerialBSDTypeKey) 値:CFSTR(kIOSerialBSDAllTypes) を追加
CFDictionaryAddValue(matchingDict, CFSTR(kIOSerialBSDTypeKey), CFSTR(kIOSerialBSDAllTypes));
// portIterator に matchingDict で指定した IOService object をセット
io_iterator_t portIterator = 0;
kern_return_t err = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, &portIterator);
CFRelease(matchingDict);
if (err) return;
// portIterator からシリアルポート eachPort を取り出す
io_object_t eachPort = 0;
while ((eachPort = IOIteratorNext(portIterator)))
{
// デバイス名を取得
NSString *calloutPath = [ViewController bsdCalloutPathFromDevice:eachPort];  // /dev/cu.xxxxx
NSString *dialinPath = [ViewController bsdDialinPathFromDevice:eachPort];    // /dev/tty.xxxx
NSLog(@"%@\n", calloutPath);
NSLog(@"%@\n", dialinPath);
IOObjectRelease(eachPort);
}
IOObjectRelease(portIterator);
}
/*
 シリアルポートのデバイス名を取り出す関数
 */
+ (NSString *)stringPropertyOf:(io_object_t)aDevice forIOSerialKey:(NSString *)key
{
// ここが IOKit からシリアルポートのデバイス名を取り出している箇所
CFStringRef string = (CFStringRef)IORegistryEntryCreateCFProperty(aDevice,
(__bridge CFStringRef)key,
kCFAllocatorDefault,
0);
return (__bridge_transfer NSString *)string;
}
/*
 kIOCalloutDeviceKey: @"/dev/cu.xxxxx" を返す
 */
+ (NSString *)bsdCalloutPathFromDevice:(io_object_t)aDevice
{
return [self stringPropertyOf:aDevice forIOSerialKey:(NSString*)CFSTR(kIOCalloutDeviceKey)];
}
/*
 kIODialinDeviceKey: @"dev/tty.xxxxx" を返す
 */
+ (NSString *)bsdDialinPathFromDevice:(io_object_t)aDevice
{
return [self stringPropertyOf:aDevice forIOSerialKey:(NSString*)CFSTR(kIODialinDeviceKey)];
}

後、ORSSerialPort ライブラリでシリアルポートからの読み込みの部分をどう実装しているかと思ったのですが

//  ORSSerialPort.m
// 236行目
- (void)open;
{
// 288行目
// ここで非同期のシリアルポートを読むスレッド作成
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
int localPortFD = self.fileDescriptor;
struct timeval timeout;
int result=0;
while (self.isOpen)
{
fd_set localReadFDSet;
FD_ZERO(&localReadFDSet);
FD_SET(localPortFD, &localReadFDSet);
timeout.tv_sec = 0;
timeout.tv_usec = 100000; // Check to see if port closed every 100ms
dispatch_semaphore_wait(self.selectSemaphore, DISPATCH_TIME_FOREVER);
// デバイスに変化があったか
result = select(localPortFD+1, &localReadFDSet, NULL, NULL, &timeout);
dispatch_semaphore_signal(self.selectSemaphore);
if (!self.isOpen) break; // Port closed while select call was waiting
if (result < 0)
{
[self notifyDelegateOfPosixError];
continue;
}
// データの読み込みがあったデバイスが目的のデバイスでない
if (result == 0 || !FD_ISSET(localPortFD, &localReadFDSet)) continue;
// Data is available
char buf[1024];
// デバイスからデータの読み込み
long lengthRead = read(localPortFD, buf, sizeof(buf));
if (lengthRead>0)
{
NSData *readData = [NSData dataWithBytes:buf length:lengthRead];
// 読み込んだデータを receiveData: メソッドで呼び出す
if (readData != nil) [self receiveData:readData];
}
}
});

open メソッドを呼び出すと、データを読み込む別スレッドが dispatch_async 関数で作成されます。self.isOpen が NO になるとスレッドは終了します。[self receiveData:readData]; で読み込んだデータを下記のように

// 539行目
 - (void)receiveData:(NSData *)data;
{
// serialPort:didReceiveData: メソッドは、プロコトル ORSSerialPortDelegate  に準拠
// デリゲートに serialPort:didReceiveData: が実装されているか確認
if ([self.delegate respondsToSelector:@selector(serialPort:didReceiveData:)])
{
//
dispatch_async(dispatch_get_main_queue(), ^{
[self.delegate serialPort:self didReceiveData:data];
});
}
dispatch_async(self.requestHandlingQueue, ^{
[self.receiveBuffer appendData:data];
// データを受け取っていない場合、もう一度送る
// よく理解できなかった
[self checkResponseToPendingRequestAndContinueIfValid];
});
}

プロコトル ORSSerialPortDelegate に準拠したデリゲートに送信しています。

私も IOKit を使用したシリアルポートの入手方法を探していましたが、以前は見つけることができませんでした。今回、ORSSerialPort ライブラリのソースで理解できたので再度調べたら、私が所有していた

OS X and iOS Kernel Programming

OS X and iOS Kernel Programming

OS X and iOS Kernel Programming
Chapter 11
Serial Port Drivers
Location 6089
Accessing a Serial Port from User Space

Mac OS X and iOS Internals: To the Apple's Core

Mac OS X and iOS Internals: To the Apple’s Core

Mac OS X Internals:A System Approach
Chapter 10
Extending the Kernel
10.2 The I/O Kit
10.5 Communicating with the Kernel

で見つけることが出来ました。ここでは説明しませんでしたが ORSSerialPort.m の – (void)open 関数では、シリアルポートが存在するか、シリアルポートの CTS、DSR の状態チェックをする別のスレッドを作成しています。本当に ORSSerialPort ライブラリは綺麗にまとまっていますね。

プチコン3号用マインスイーパ YOS_MINE と YOS_NEKO 公開キーの公開。縦長の画像を指定したサイズで分割し、それぞれの画像を PNG 形式 (72 dpi) のファイルに書き出すアプリケーション SliceImage 公開。Safari、プレビュー、拙作 SliceImage を使った Web ページの PDF 化。

以前、ブログを書いてから随分立ちますがいろいろ取り組んでいました。その中でもニンテンドー 3DS ダウンロードソフト ‘プチコン3号’ 用のプログラムを2つ作成しました。2つともプチコン大喜利に投稿してみました。すでに TwitterMiiverse で公開しましたが、公開キーと実行画面をブログにも載せておきます。

YOS_MINE
マインスイーパ
開いたセルに書かれた数字の数だけ、周りのセルに旗を立てて、数字の書かれた
セルをAボタンで押すと旗を立てていないセルを開くことができます。
公開キー E3AN3XZF
YOS_NEKO
猫や犬が画面の中を駆け回るプログラムです
女の子は、十字ボタン、スライドパッドで操作できます。女の子が移動すると
猫達が集まってきます。しばらくすると離れていきます。
公開キー 23N432QE

YOS_MINE 実行画面


図 1) 初級画面


図 2) 中級画面


図 3) ゲームクリア時の下画面


図 4) ゲーム選択画面

YOS_NEKO 実行画面


図 5) YOS_NEKO

プチコン3号 - 命令表
http://smileboom.com/special/ptcm3/reference/

上記ウェブページを PDF 化するのに作成した Mac 用プログラム SliceImage を下記 URL で公開します。(実際には、PDF のダウンロードリンクが上記ページにあるので PDF 化する必要はありません。)

SliceImage version 1.0
【概要】
縦長の画像を指定したサイズで分割し、それぞれの画像を PNG 形式 (72 dpi) の
ファイルに書き出すアプリケーション。
【動作環境】
Mac OS X 10.9 Mavericks 以上で動作します。
http://kyoshiaki.sakura.ne.jp/osx/Download/SliceImage.zip

恥ずかしい話ですが、上部に PDF ファイルのリンクがあるのを見落としていました。実際には無駄になってしまいましたが、Web ページを PDF 化するのに役立つかもしれないと思い公開します。

【使用例】
Safari, ‘プレビュー’、拙作 ‘SliceImage’ を使ったウェブページの PDF 化

プチコン3号 - 命令表
http://smileboom.com/special/ptcm3/reference/

上記ウェブページを PDF 化する過程で説明したいと思います。

Safari のメニュー/ファイル/プリント… で PDF 化できるのですが、色がついた画面をそのまま再現してくれません。

それで Safari の機能拡張 Awesome Screenshot 1.4.5 を利用します。

注意) Google などで検索すると Awesome Screenshot 機能拡張が訪問したサイトのURLを外部に送信している記述も見つかるので十分注意してください。使用後は、アンインストールしたほうが良いかもしれません。

まず、Safari のメニュー/Safari/Safari 機能拡張… を選択してください。表示されたウインドウをスクロールすると

図 6) Safari 機能拡張

上図のように Awesome Screenshot 機能拡張が見つかるはずです。アイコンをクリックしてください。

図 7) Safari 機能拡張

上図赤枠の部分 Install Now をクリックして Awesome Screenshot 機能拡張をインストールしてください。

図 8) Awesome Screenshot 機能拡張

インストールが成功すると Install Now という文字が Installed に変わり、上図のようにツールバーの URL テキストフィールド左横に Awesome Screenshot 機能拡張アイコンが追加されます。

図 9) 機能拡張

後、余計な機能が追加されるので Safari のメニュー/Safari/環境設定… を選び、’機能拡張’ タブから Awesome Screenshot を選び、

Enable similar product search powered by Superfish
Enable price comparation

のチェックマークを外してください。通常、ページを開くと有効にするか尋ねてくるので NO を選んでください。

 プチコン3号 - 命令表
http://smileboom.com/special/ptcm3/reference/

ここで、例として上の URL ページ全体 (実際に表示されて部分ではなく、スクロールして表示されるページ全体) を画像に保存したいと思います。

まず最初に、上の URL を Safari で開きます。

図 10) プチコン 3 号 – 命令表

上図 Awesome Screenshot 機能拡張アイコンをクリックし、メニュー

Capture Visible Part of Page 		: 表示されているエリアだけキャプチャ
Capture Selected Area			: マウスで選択したエリアだけキャプチャ
Capture Entire Page				: ページ全体をキャプチャ

から、Capture Entire Page を選択してページ全体をキャプチャします。自動的にスクロールして下図のページが開きます。



図 11) 編集

ここで文字を追加したり、線を描画できますが、何もせず上図のように Done ボタンをクリックして終了します。



図 12) スクリーンショット

上図のようにスクリーンショットが画像として表示されます。

図 13) スクリーンショット保存

上図のように画像を右クリック(CTRL + 左クリック)してメニューから ‘イメージを別名で保存…’ を選択します。



図 14) ダイアログ

上図のように保存するファイル名を尋ねられるので、reference.png と入力します。保存する画像形式は PNG イメージなので拡張子 png を忘れずに追加してください。

図 15) スクリーンキャプチャ終了

図 14) より、保存先がデスクトップなので、デスクトップに reference.png という名の画像ファイルが保存されているはずです。スクリーンキャプチャは終了したので、上図の赤枠の x ボタンをクリックしてタブを閉じてください。

デスクトップに PDF という名前のフォルダを作り、そこに先ほど保存したファイル reference.png を移動します。

図 16) デスクトップ/PDF

図 17) SliceImage 実行画面

SliceImage version 1.0
【概要】
縦長の画像を指定したサイズで分割し、それぞれの画像を PNG 形式 (72 dpi) の
ファイルに書き出すアプリケーション。
【動作環境】
Mac OS X 10.9 Mavericks 以上で動作します。
http://kyoshiaki.sakura.ne.jp/osx/Download/SliceImage.zip

Finder 上で SliceImage をダブルクリックして起動し、ラジオボタン ‘A4: 自動計算’ を選択します。refernece.png ファイルを Finder 上からドラッグして、SliceImage ウインドウの茶色いエリアにドラッグ・ドロップしてください。

=================================================
ファイル名: reference.png
サイズ: 2416.0 x 89278.0
分割サイズ: 3417.47096774194
合計(ファイル数): 27

reference.png 画像ファイルの分割が終わると ‘情報’ テキストエリアに上の文字列が表示されます。(注意、画像が大きいと処理が終わるまでに随分時間がかかります。しばらくお待ちください。)

この場合、横: 2416 ピクセル、縦: 89728 ピクセルの画像 reference.png を縦方向に約 3417 ピクセルで分割しています。画像ファイルは 27 個に分割されました。(Retina ディスプレイではない MacSafari の画面をキャプチャーすると reference.png の縦横サイズは小さくなります。)

図 18) SliceImage 実行後

図 19) 1_reference.png から 27_reference.png を選択

Finder 上で 1_reference.png から 27_reference.png を上図のように選択します。
(reference.png アイコンの左上の何もないエリアを左クリックし、右下の方向にドラッグします。その後、そのまま下へドラッグするとスクロールするので 27_reference.png などの全てのアイコンが含まれるようにドラックして離します。すると全てのファイルが選択されている状態になります。シフトキーを押して、refrence.png アイコンを左クリックしてください。 reference.png アイコンが選択状態から外れます。)

図 20) プレビュー

Finder 上で 1_reference.png ファイルをダブルクリックします。すると上図のように ‘プレビュー’ が起動します。上図のように赤枠の部分のアイコンをクリックして、サムネールを選択します。下図のようにサムネールが表示されます。

図 21) サムネール表示

上図のようにサムネールに 1_reference.png から 27_reference.png まで順番に並んでいるか確認して下さい。順番が違う場合は、サムネールに表示されている画像をドラッグして挿入したい場所に移動してください。(例えば、上図の 3_reference.png を 1_reference.png と 2_reference.png の間にドラッグ・ドロップすると 1_reference.png、3_reference.png、2_reference.png の順になります。)

また、27_reference.png だけ別ウインドウで開いてしまった場合は、そのウインドウを閉じ、Finder 上の 27_reference.png ファイルを ‘プレビュー’ 上のサムネールの 26_reference.png の上にドラッグして + の画像が現れたらドロップしてください。



図 22) プリント

上図のように ‘プレビュー’ からメニュー/ファイル/プリント… を選択します。

図 23) PDF 化

SliceImage で今回 A4 サイズで収まるように画像を分割したので、用紙サイズは A4 に設定してください。
左下の PDF ポップアップメニューから ‘PDF として保存…’ を選択してください。



図 24) PDF 化

保存ファイル名を入力してください。pdf 以外の拡張子が付いていると保存できないので、上図のように reference.png.pdf と入力してください。reference だけだと自動的に拡張子 pdf が付きます。’保存’ ボタンをクリックしてください。

図 25) PDF

保存した refrence.png.pdf ファイルを Finder 上でダブルクリックすると上図のようにプレビューで表示されます。

refrence.png.pdf ファイルに新規のページを追加したい場合は、テキストエディットで A4 サイズのページを1枚 PDF 化し、そのファイルを Finder 上から ‘プレビュー’ のサムネールの挿入したい位置の前のサムネイルにドラッグし、+ の画像が現れたらドロップします。’プレビュー’ のメニュー/ファイル/保存 を選択すると追加できます。

テキストエディットで refrence.png.pdf の目次を作成し、上記例のように refrence.png.pdf の最初のページに追加すると iPad の GoodReader などで閲覧するのに便利です。

OS X 10.9 Mavericks 上での Go インストール方法。CotEditor 用 Go 言語シンタックスカラーリング定義ファイル Go.plist と Go で作った初めてのプログラム zlist.go 公開。

iPhone 6、iPhone 6 Plus が発売され、10月16日10時 (現地時間) のスペシャルイベントでは、新型iPadMacOS X Yosemite も発表されました。特に、27 インチ iMac Retina 5K ディスプレイモデルは、15インチMacBook Pro Retina ディスプレイモデルを所有していなかったら、すぐにでも手に入れたいですね!

OS X 10.10 Yosemite も、早速 MacBook Pro Retina にインストールしました。ただし、残り1分の表示から1時間かかりました。Homebrew などで /usr/local にデータをインストールしていると残り1分の表示から1、2時間かかるようです。

もうすぐ iOS 8.1 も公開されます。拙作 iYKRSS は、iPhone 6、 iPhone 6 Plus に対応する予定です。しばらくお待ちください。

Docker - Build, Ship, and Run Any App, Anywhere
https://www.docker.com/

Linux コンテナ管理ソフトウェア Docker の開発に使用されているプログラミング言語 Go に以前から興味を持っていました。

Amazon で洋書を探してみると

Programming in Go: Creating Applications for the 21st Century (Developer's Library)

Programming in Go: Creating Applications for the 21st Century (Developer’s Library)

  • 作者: Mark Summerfield
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2012/05/04
  • メディア: ペーパーバック
  • クリック: 1回
  • この商品を含むブログを見る
Programming in Go: Creating Applications for the 21st Century (Developer's Library) [Kindle Edition]
Mark Summerfield (Author)

上記本が良さそうなので購入してみました。読み終えた感想は、struct フィールドの tags 利用方法、defer の解説など説明不足のところもあります。結局、

Documentation - The Go Programming Language
http://golang.org/doc/
References

を参照したり、Go のパッケージソースを参考にしました。

Mac に Go をインストール方法は、2通りあります。(残念ながら OS X 10.9 Mavericks 上での説明になります。)

最初は、

Homebrew — The missing package manager for OS X
http://brew.sh/

Homebrew を使って、

$ brew install go	

上記コマンドを実行してインストールする方法です。

.bash_profile ファイル

export GOPATH=$HOME/go
export GOROOT=/usr/local/opt/go/libexec
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin

に上記内容を追加してください。

$GOPATH は、

~ $ go get -u github.com/jessevdk/go-flags

上記コマンド go get を使って、github にあるパッケージをインストールするフォルダを指定するのに使います。この場合 go-flags パッケージを $GOPATH にインストールしています。go-flags を利用するには、ソースに

import (
"github.com/jessevdk/go-flags"
)

上記のように import 宣言する必要があります。

後、コマンド godoc をインストールするには mercurial が必要なので

~ $ brew install hg

上記コマンドで hg をインストールしてください。

~ $ go get code.google.com/p/go.tools/cmd/godoc

上のコマンドを実行すると $GOROOT/bin に godoc コマンドがインストールされます。godoc の使い方は

~ $ godoc fmt

この場合は fmt パッケージのドキュメントが表示されます。Safari などでドキュメントを見たい場合は、

~ $ godoc -http=:8080

上記コマンドを実行し、Safarihttp://localhost:8080 にアクセスしてください。

コマンド vet は

~ $ go get code.google.com/p/go.tools/cmd/vet

上記のようにインストールしてください。

$ go vet zlist.go

vet 単独コマンドではなく、上記のように利用してください。

基本的に Go では import するパッケージは $GOPATH/src に置くことになります。

export GOPATH=$HOME/go:$HOME/Desktop/Book\ Sample/goeg

のように : で分けて複数のパスを宣言することもできます。

export GOPATH=path

なら

path/ + src/ + shaper1/   + shape1.go
|            |
|            + shapes/        + shapes.go
|
+ safemap/   + safemap.go 

main プログラム shape1.go から shapes/shapes.go、safemap/safemap.go パッケージを利用するには

import (
"shaper1/shapes"
"safemap"
)

と宣言する必要があります。もちろん、main プログラムが $GOPATH 以外にあるときもパッケージを利用するには、上記のように宣言します。

もう一つの Go のインストール方法は、

Getting Started - The Go Programming Language
http://golang.org/doc/install

を参考に

Downloads - The Go Programming Language
https://golang.org/dl/

から、

go1.3.3.darwin-amd64-osx10.8.tar.gz	Archive	OS X 10.8+	64-bit
go1.3.3.darwin-amd64-osx10.8.pkg	Installer	OS X 10.8+	64-bit

上記バイナリパッケージ、どちらかをダウンロードし、

go1.3.3.darwinamd64-osx10.8.tar.gz の場合、ターミナルで

~ $ tar -C /usr/local -xzf ~/Downloads/go1.3.1.darwin-amd64-osx10.8.tar.gz 

上記コマンドを実行してインストールしてください。

go1.3.3.darwin-amd64-osx10.8.pkg	Installer	OS X 10.8+	64-bit

go1.3.3.darwinamd64-osx10.8.pkg の場合は、Finder 上でダブルクリックしてインストールしてください。

.bash_profile に

export GOPATH=$HOME/go
export GOROOT=/usr/local/go
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin

を設定してください。バイナリパッケージは /usr/local/go にインストールされます。

Go についての感想は、すべてのオブジェクトを interface{} で表したり、クラスや継承がサポートされなかったり、また、ソースや Reference の読み方に慣れるまで苦労しました。

struct フィールドの tags の理解するのにパッケージソースを参考にしました。パッケージのソースは $GOROOT/src/pkg にあります。

tags の理解には、$GOROOT/src/pkg/reflect/type.go の

763行目
func (tag StructTag) Get(key string) string {

が参考になります。

peco/peco · GitHub
https://github.com/peco/peco
Bash - pecoの基礎の基礎 - Qiita
http://qiita.com/xtetsuji/items/05f6f4c1b17854cdd75b

上記サイトも Go プログラミングがどんなものか理解するのに役立ちました。

Go のパッケージソースにメモを付けたいので、必要なソースを PDF 化する時に CotEditor

CotEditor -Text Editor for OS X
http://coteditor.github.io/

を利用しました。PDF 書類にメモを書き込むには、Apple 純正の ‘プレビュー’ を使っています。Go の文法をハイライトするために、Go のシンタックスを色分けするシンタックスカラーリング定義ファイル Go.plist を作成しました。Go で初めて作ったプログラム zlist.go と一緒に下記 URL

CotEditor 用の Go 言語シンタックスカラーリング定義ファイル Go.plist と
Go で作った初めてのプログラム zlist.go 公開。
http://kyoshiaki.sakura.ne.jp/osx/Sample/go_example.zip

で公開します。メニュー/CotEditor/環境設定の ‘フォーマット’ タブで

上図のようにウインドウ一番下、中央のギアアイコンから、’読み込み…’ を選択し、上記 URL に含まれる Go.plist を選んでください。

シンタックスカラーを Xcode に近づけるため

上図のようにシンタックスカラーリングを変更すると見やすくなります。

いろいろなテキストエディタシンタックスカラーリングファイルは

$GOROOT/misc

にあります。

以前は、ソースの PDF 化には、mi

mi - テキストエディタ
http://www.mimikaki.net/

を使っていたのですが、デフォルトのシンタックスカラーリング対応言語が少ないのであきらめました。また、Mac App Store から Jedit X Plus を購入して使用しているのですが、’メニュー/ファイル/ページ設定…’ で拡大縮小を設定し、’メニュー/ファイル/プリントで PDF 化する’ を選択すると、ページごとに縮小してしまい、思ったように縮小してくれません。その点、CotEditor は、全体を問題なく縮小してくれます。

シンタックスカラーリング作成には Kate の go.xml が参考にしやすいです。XcodeVim、Kate などいろいろ試しましたが、PDF 化には CotEditor が一番使いやすいです。

Xcode の場合、

$GOROOT/misc/xcode/4/go4xcode.sh

を実行すれば良いのですが、Mac App Store から Xcode をダウンロードした場合、Xcode の所有権が root になっています。Homebrew を使って Go をインストールした場合は、go4xcode.sh ファイルの先頭、 set -e の後に

GOROOT=/usr/local/opt/go/libexec

を追加し、また、バイナリパッケージを使ってインストールした場合は、

GOROOT=/usr/local/go

を追加してください。その後、下記のように sudo ./go4xcode.sh を実行してください。

~ $ cd $GOROOT/misc/xcode/4
/usr/local/opt/go/libexec/misc/xcode/4 $ sudo ./go4xcode.sh
Password:
Backing up plugindata file (copied to DVTFoundation.xcplugindata.bak).
Adding Go language specification entry.
Installing Go language specification file for Xcode.
Run 'sudo rm -rf /var/folders/*' and restart Xcode to update change immediately.
Syntax coloring must be manually selected from the Editor - Syntax Coloring menu in Xcode.
/usr/local/opt/go/libexec/misc/xcode/4 $ 

上記説明にあるように、

/usr/local/opt/go/libexec/misc/xcode/4 $ sudo rm -rf /var/folders/*

を実行し、Xcode を起動します。
Xcode で Go のソースファイルを開いた後、メニュー/Editor/Syntax Color/Go を選ぶとシンタックスがカラーリングされます。Go ファイルを開いても自動でカラーリングされないので注意してください。

Vim の場合、

macvim - Vim for the Mac - Google Project Hosting
https://code.google.com/p/macvim/

ターミナル上で vim を使用するのも良いのですが、折角なので、上記 URL から MacVim をダウンロードしました。設定は共通のようです。

インストールされた Go の

$GOROOT/misc/vim/syntax/go.vim 

にある go.vim

~/.vim/ftdetect/go.vim:

にコピーするとシンタクスカラーリングされます。

しかし、Vim には、プラグイン管理ツール neobundle.vim があるので、こちらを利用する方がお勧めです。

Shougo/neobundle.vim · GitHub
https://github.com/Shougo/neobundle.vim

インストールするには

~ $ curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh | sh

を実行し、スクリプトを実行すると下記内容

Please write NeoBundle initial setting to your vimrc path ...
"NeoBundle Scripts-----------------------------
if has('vim_starting')
set nocompatible               " Be iMproved
" Required:
set runtimepath+=/Users/yoshiaki/.vim/bundle/neobundle.vim/
endif
" Required:
call neobundle#begin(expand('/Users/yoshiaki/.vim/bundle'))
" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'
" My Bundles here:
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'tpope/vim-fugitive'
NeoBundle 'kien/ctrlp.vim'
NeoBundle 'flazz/vim-colorschemes'
" You can specify revision/branch/tag.
NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' }
" Required:
call neobundle#end()
" Required:
filetype plugin indent on
" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck
"End NeoBundle Scripts-------------------------

が表示されます。

"NeoBundle Scripts-----------------------------

の次の行から

"End NeoBundle Scripts-------------------------

の上の行まで、ファイル .vimrc としてホームディレクトリに保存します。

次に、下記のようにターミナルで vim を実行するとパッケージをインストールするか聞いてくるので y を選択してください。

~ $ vim
Not installed bundles:  ['vimshell', 'ctrlp.vim', 'vim-colorschemes', 'vim-fugitive', 'neosnippet.vim', 'neosnippet-snippets']
Install bundles now?
(y)es, [N]o: y

Go の Vim プラグイン、ファイラーなど

Shougo/unite.vim · GitHub
https://github.com/Shougo/unite.vim
vimfiler.vim をインストールするのに unite.vim が必要。
Shougo/vimfiler.vim · GitHub
https://github.com/Shougo/vimfiler.vim
fatih/vim-go · GitHub
https://github.com/fatih/vim-go

をインストールします。

~/.vimrc ファイルの

" My Bundles here:
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'tpope/vim-fugitive'
NeoBundle 'kien/ctrlp.vim'
NeoBundle 'flazz/vim-colorschemes'

の次に

NeoBundle 'Shougo/unite.vim’
NeoBundle 'Shougo/vimfiler.vim’
NeoBundle 'fatih/vim-go'

github.com の ’名前/パッケージ名’ を追加し、Vim を起動すると

~ $ vim
Not installed bundles:  ['unite.vim', 'vimfiler', 'vim-go']
Install bundles now?
(y)es, [N]o: y

と聞いてくるので y を選択してください。これで終了です。Finder 上で MacVim をダブルクリックし、:VimFiler (:Vim と入力した後、Tab キーを押してください。補完されます。) と入力して Return キーを押します。ファイラーが起動します。カーソルキーと Return キーで移動し、編集したい Go ソースファイル名で e キーを押してください。シンタクスカラーリングされているはずです。:q で終了です。

Kate の場合、

Kate は、KDE が必要なので、Paralells Desktop 10 上に

Main Page - Linux Mint
http://www.linuxmint.com/

から

Download - Linux Mint
http://www.linuxmint.com/download.php
KDE	32-bit	64-bit	An edition featuring the KDE desktop	 Yes

KDE 64-bit 版をダウンロードしインストールしました。

Mac

$GOROOT/misc/kate/go.xml

ファイル go.xml を Mint 側のデスクトップにコピーし、

Linux Mint 側の

~/.kde/share/apps/kate

フォルダに syntax フォルダ作成し、デスクトップの go.xml ファイルを ~/.kde/share/apps/kate/syntax にコピーします。

~/.kde/share/apps/kate $ mkdir syntax
~/.kde/share/apps/kate $ cp ~/Desktop/go.xml syntax/

これで、Kate で Go ソースファイルを開くと Go のシンタックスがハイライトされます。