カテゴリ
全体 UI 開発ツール 人 ソフト開発一般 ETロボコン Vアプリ 仕事 Mac OS X iPhone Webアプリ PC Ubuntu 通貨単位変換サポート iOS ガジェット Arduino 未分類 以前の記事
2018年 03月 2017年 09月 2014年 07月 2014年 04月 2014年 03月 2014年 02月 2013年 08月 2013年 07月 2013年 04月 2012年 08月 2012年 02月 2011年 09月 2011年 08月 2011年 01月 2010年 11月 2009年 12月 2009年 11月 2009年 10月 2009年 09月 2009年 07月 2009年 05月 2009年 04月 2009年 03月 2009年 02月 2009年 01月 2008年 11月 2008年 10月 2008年 08月 2008年 07月 2008年 06月 2008年 05月 2008年 04月 2008年 02月 2007年 12月 2007年 11月 2007年 10月 2007年 07月 2007年 06月 2007年 05月 2007年 04月 2007年 03月 2007年 02月 2006年 11月 2006年 10月 2006年 09月 2006年 08月 2006年 07月 2006年 06月 2006年 05月 2006年 04月 2006年 03月 2006年 02月 お気に入りブログ
検索
最新のトラックバック
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧
|
APIを使ってのサービス横断的なユーザ体験はすでに一般的で、今更という気はするし、実際この本も数年前のもので今からみると古い内容も含まれるのだけど…。
「マイクロサービス」という言葉がキーワードになっているプロジェクトに関わってて、そもそも「マイクロサービス」が指すもの、そしてそのメリットやデメリットが共有されていないのではないか?と思ったのが本書を読んだ理由だった。 先に書いた通り、すでに古い内容も含まれているし、何より本書を読んだからといって世界共通のマイクロサービスという概念が何かがわかるわけではない(そもそもそんなものはないとも思うし)。 それでも改めて体系化された説明を読むことで、色々と理解が深まったところはあった。 #
by ukulele_trip
| 2018-03-19 00:31
| ソフト開発一般
#
by ukulele_trip
| 2017-09-03 13:40
| ソフト開発一般
ようやくWriting a Library for Arduinoの訳を。
本ドキュメントはArduinoライブラリの開発方法を説明するものである。モールス信号を光らせるスケッチを例に、それらの機能をライブラリにする方法を説明する。ライブラリにすることにより他の開発者が簡単にその機能を使うことができ、ライブラリの改善内容を簡単に取り込むことができる。 よいArduinoスタイルのAPIを作るための情報であるAPI Style Guideも参照すること。(訳注:日本語訳はこちら) まずシンプルなモールス信号のためのスケッチから始めよう。 int pin = 13; void setup() { pinMode(pin, OUTPUT); } void loop() { dot(); dot(); dot(); dash(); dash(); dash(); dot(); dot(); dot(); delay(3000); } void dot() { digitalWrite(pin, HIGH); delay(250); digitalWrite(pin, LOW); delay(250); } void dash() { digitalWrite(pin, HIGH); delay(1000); digitalWrite(pin, LOW); delay(250); } このスケッチを実行すると、pin13にSOS信号(救難信号)が出力される。 このスケッチにはライブラリ化するために変更する点がいくつかある。まず最初に、当然であるが、実際に点滅を行うdot()やdash()関数を準備する。次にこれらの関数がどのピンを使うのかを示す変数ledPinが必要となる。最後にそのピンを出力として初期化するpinMode()呼び出しを行う。 ではこのスケッチをライブラリにしてみよう! ライブラリには最低限2つのファイルが必要である;ヘッダファイル(拡張子は.h)とソースファイル(拡張子は.cpp)である。ヘッダファイルはライブラリの定義をする:基本的には内部にあるものの列挙である。一方、ソースファイルには実際のコードが含まれる。このライブラリを"Morse"と名付けるので、ヘッダファイルはMorse.hとなる。実際にどのようなものか以下に示す。一見すると不自然に見えるかもしれないが、ソースファイルも見ればより理解できるだろう。ヘッダファイルのコアはライブラリに含まれる各関数が1行ずつ書かれ、それらは必要な変数とともにクラスに入れられる。 class Morse { public: Morse(int pin); void dot(); void dash(); private: int _pin; }; クラスは1箇所にまとめる関数と変数の単純な集合である。これらの関数や変数はpublicに、つまりライブラリユーザからアクセスできるものにすることができるし、privateに、つまりクラス内部からしかアクセスできないものにすることもできる。各クラスはコンストラクタとなる特別な関数を持ち、それはクラスのインスタンスを生成するのに使われる。コンストラクタはクラスと同じ名前を持ち、戻り値を持たない。 ヘッダファイルには他にもいくつか必要なものがある。一つはArduino言語の標準型や定数にアクセスするための#include文である(これは通常のスケッチでは自動的に追加されるが、ライブラリでは追加されない)。以下のようになる(これは前述のClass定義の前に置かれる)。 #include "Arduino.h" 最後に、ヘッダファイル全体を以下のような奇妙な構造で囲むのが一般的である: #ifndef Morse_h #define Morse_h // the #include statment and code go here... #endif これは基本的には、意図せずライブラリを2回includeしてしまうという問題を防ぐためのものである。 最後に、ライブラリの名前とともに、それが何をするものか、誰が開発したのか、日付やライセンスについての短い説明をコメントとして先頭に置くのが一般的である。 完成したヘッダファイルは以下のとおりである: /* Morse.h - Library for flashing Morse code. Created by David A. Mellis, November 2, 2007. Released into the public domain. */ #ifndef Morse_h #define Morse_h #include "Arduino.h" class Morse { public: Morse(int pin); void dot(); void dash(); private: int _pin; }; #endif ではソースファイルのMorse.cppの各部をみていこう。 最初に何行かの#include文がある。これらはソースコードの以降の部分からArduinoの標準関数や本ライブラリのヘッダファイルにアクセスできるようにするものである: #include "Arduino.h" #include "Morse.h" 次にコンストラクタが来る。繰り返しになるが、コンストラクタには本クラスのインスタンスを生成するときにすべきことを記述する。この例では、ユーザはどのピンを使いたいかを指定する。コンストラクタはそのピンを出力ピンとしてprivate変数に保存し、他の関数から使えるようにする: Morse::Morse(int pin) { pinMode(pin, OUTPUT); _pin = pin; } このコードにはいくつかの奇妙なことがある。まず関数名の前にあるMorse::という部分。これはこの関数がMorseクラスに属していることを示している。このクラスの他の関数でも同様だとわかるだろう。次におかしいのはprivate変数である_pinについているアンダースコアである。この変数には実際には、ヘッダファイルでの定義と同じであれば好きな名前をつけてもよい。アンダースコアを名前の先頭につけるのはその変数がprivateであることを示すための一般的な慣習である。また関数の引数と区別するためのものでもある(この例におけるpinとの区別)。 続いてスケッチからライブラリに持ってくる実際のコードが来る(これが最後!)。関数名の前のMorse::やpinの代わりの_pin以外はほとんど同じに見える: void Morse::dot() { digitalWrite(_pin, HIGH); delay(250); digitalWrite(_pin, LOW); delay(250); } void Morse::dash() { digitalWrite(_pin, HIGH); delay(1000); digitalWrite(_pin, LOW); delay(250); } 最後に、ソースファイルの先頭にコメントヘッダを加えるのがよいだろう。全体は以下のようになる: /* Morse.cpp - Library for flashing Morse code. Created by David A. Mellis, November 2, 2007. Released into the public domain. */ #include "Arduino.h" #include "Morse.h" Morse::Morse(int pin) { pinMode(pin, OUTPUT); _pin = pin; } void Morse::dot() { digitalWrite(_pin, HIGH); delay(250); digitalWrite(_pin, LOW); delay(250); } void Morse::dash() { digitalWrite(_pin, HIGH); delay(1000); digitalWrite(_pin, LOW); delay(250); } 以上が必要なことすべてである(他にもやっておくとよいことがあるが、それについては後述する)。このライブラリをどうやって使うのかをみてみよう。 まず、スケッチブックディレクトリのlibrariesサブディレクトリ中にMorseディレクトリを作る。Morse.hとMorse.cppファイルをこのディレクトリにコピーまたは移動する。ここでArduino IDEを起動する。メニューの「スケッチ」→「ライブラリを使用」を開くと、その中にMorseが表示されているはずである。このライブラリは、それを使うスケッチとともにコンパイルされる。もしライブラリがビルドされないようであれば、ファイルが.cppや.hという拡張子になっているか確認する(例えば.pdeや.txtではないこと)。 それでは最初のSOSスケッチが新たに作ったライブラリを使うようにしてどのようになったかみてみよう: #include <Morse.h> Morse morse(13); void setup() { } void loop() { morse.dot(); morse.dot(); morse.dot(); morse.dash(); morse.dash(); morse.dash(); morse.dot(); morse.dot(); morse.dot(); delay(3000); } 最初のスケッチからいくつかの変更点がある(いくつかのコードをライブラリに移動したこと以外にも)。 まず、#include文をスケッチの先頭に追加した。これによってこのスケッチはMorseライブラリを使うことができ、これがArduinoボードに書き込むコードに含まれるようになる。したがってスケッチでライブラリを使う必要がなくなったら、コードサイズを減らすために#include文を削除すべきである。 次にmorseという名前のMorseクラスのインスタンスを生成している: Morse morse(13); この行が実行されると(これはsetup()関数が呼ばれる前に起こる)、Morseクラスのコンストラクタが呼び出され、それにここで与えた引数が渡される(この例では13)。 (訳注:Arduino IDE 1.0.5 + MacOSXではこの宣言でmorseを使うとエラーとなった;その場合はMorse(13)をmorseに代入すればよい) setup()関数は空になっていることに注意してほしい;これはpinMode()の呼び出しがライブラリ内で行われるようになったからである(インスタンスが生成される時に行われる)。 最後にdot()やdash()関数を呼び出すために、morse.というプレフィックス - 使いたいインスタンスの名前である - が必要となっている。Morseクラスの複数のインスタンスを持つことも可能であり、その場合それぞれのインスタンスはそれぞれのprivate変数の_pinに使用するピンを保存する。特定のインスタンスの関数を呼ぶことによって、関数呼び出しで使われるべきインスタンス変数を特定していることになるのだ。つまり、もし2つのインスタンスを持つとすると以下のようになる: Morse morse(13); Morse morse2(12); morse2.dot()を呼び出すと、内部の_pinは12になっている。 新バージョンのスケッチを試してみると、このライブラリ内の何もArduino IDEにカラーハイライトされないことに気づくだろう。残念ながら、Arduino IDEは自動的にライブラリ内で知恵技したものを認識することができないため(できればよいのだが)、IDEを補助してやる必要がある。そのために、keywords.txtというファイルをMorseディレクトリに作る。以下のようなものである: Morse KEYWORD1 dash KEYWORD2 dot KEYWORD2 各行はキーワードの名前を持ち、それにタブ(スペースではない)で区切ってキーワードの種類が続く。クラスはKEYWORD1にすべきでオレンジになる。関数はKEYWORD2で茶色になる。新しいキーワードを認識させるためにArduino IDEを再起動する必要がある。 また、ライブラリを使用するサンプルスケッチを提供するのもよいことである。これを行うには、examplesディレクトリをMorseディレクトリ中に作る。そして上記のスケッチを含むディレクトリ(SOSとする)をそこにコピーまたは移動する。(「スケッチ」→「スケッチのフォルダを表示」でこのスケッチの場所がわかる)その後、Arduino IDEを再起動すると(これが最後だと約束する)、ライブラリMorseの項目が「ファイル」→「スケッチの例」に表示される。ライブラリの使い方についてよりより説明を追加したいと思うかもしれない。 ライブラリのすべて(keywordsやexampleも含めて)を確認したいなら、ダウンロードできる:Morse.zip 今のところはこれがすべてである。しかしより進んだライブラリのチュートリアルを近々書くつもりである。それまでに問題や提案があれば、Software Development forumに投稿してほしい。 よいArduinoスタイルのAPIを作るための情報であるAPI Style Guideも参照すること。(訳注:日本語訳はこちら) ※本文書はオリジナルと同様、Creative Commons Attribution-ShareAlike 3.0 Licenseに従います。 #
by ukulele_trip
| 2014-07-22 15:35
| Arduino
サンプルとなるライブラリはそこらにあるし、ネットで検索するといろいろと情報は出てくるが、そもそもというところがわからなかった。
本家ページ上で"Writing a Library for Arduino"を見つけたので自分のために要約しようと思ったが、まず"Arduino Style Guide for Writing Libraries"を読むべしとあるので、先にこちらの翻訳から。 これはArduinoスタイルでAPIライブラリを作成するためのスタイルガイドである。ここに書かれているいくつかのことはプロフェッショナルなプログラミング実践とは相反している。多くの初心者がArduinoを簡単に始められるために、あえてそうしてある。これらの原則に留意してライブラリを作成してほしい。ArduinoライブラリをArduinoユーザにとってよりわかりやすいものにするための提案があれば、ディスカッションに加わって欲しい。まだArduinoライブラリは進行中のプロジェクトである。
#
by ukulele_trip
| 2014-07-22 11:32
| Arduino
「入門機械学習」を読んだもののRはあまりさわってなかった。 ただ他の機械学習エンジンなどをいじった結果、やはり前段の解析にはRが一番汎用性があると思い、今度はちゃんとRの実習もやってみることにした。 以下、少しハマったのでメモ。 昨年7月以来だったので、Rもバージョンが2から3になってて、せっかくなので最新版にしようと思った。 もともとbrewでRをインストールしてたので、これでバージョンアップされてるだろうと思ってたが2のまま。 "brew upgrade"してもRはアップデートされなかった。 brewパッケージは2までしかないのかと思い、brewでRをアンインストールして、http://cran.r-project.org/bin/macosx/からpkgをダウンロードしてインストールした。 これをインストールするとRコマンドではなく、GUIもついたアプリがインストールされる。 ターミナルで使いたかったが、補完機能はターミナルで使うものよりよくできてるし、使っているうちに慣れるだろうと、さっそく必要なパッケージのインストールにかかったのだが…。 まずコンパイルのところでgfortran-4.8がない、とエラーになるものがいくつかあった。gfortranは前回Rを入れた時にやはりbrewでインストールしており、/usr/local/bin/gfortranはある。なのでとりあえずシンボリックリンクを作った。 gfortran-4.8の問題は解決されたが、今度はリンク時にライブラリパス(忘れた)がない、結果としてgfortranライブラリがないというエラーが出る。おそらくgfortranをbrewでインストールしたのと矛盾しているのだろう。 ここで古いバージョンでもやはりターミナルで使いたいし、このエラーを解決するのに労力を使いたくなかったので、再度brewでインストールすることにした。 ただ"brew install R"とやるとパッケージがない、と言われる…。ググると"brew tap homebrew/science"とtapを追加しておく必要があるとのこと。これで無事インストール完了で、しかもちゃんと最新版3.1.0になってた! たぶんパッケージの構成か何かが変わっててバージョンアップもされなかったのだろう。 やっとスタートラインに立てた。 #
by ukulele_trip
| 2014-04-20 13:09
| Mac OS X
|
ファン申請 |
||