MEAN を動かしてみる

MEAN は MongoDB、Express、AngularJS、Node.js で構成される Web アプリケーションを構築するための アーキテクチャであり、LAMP (LinuxApatchMySQLPHP) に変わる技術として注目されています。
全て JavaScript で記述でき、データを JSON でやり取りするので、シンプルにアプリケーションを構築することができます。

MEAN の環境を容易に構築するためのツールMEAN.IO から提供されています。
MEAN をインストールし動作の確認までを行っていきます。

MEAN のインストール

最初に、MEAN を動かすのに必要なものをインストールします。
Node.js、MongoDB、Git が必要で、さらに npm で Gulp と Bower がインストールされていなければなりません。
MongoDB 以外はすでにインストールされているので、MongoDB のインストールを行います。

MongoDB のインストール

MongoDBのドキュメントを参考にインストールを行います。

最初に Homebrew をアップデート。

$ brew update

続いて MongoDB をインストール。
SSL を利用するためのオプションをつけて実行しました。

$ brew install mongodb --with-openssl

インストールが完了したら最後に表示される指示通りにコマンドを実行。

$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

MongoDB にアクセスできるかを確認。

$ mongo
MongoDB shell version: 3.0.2
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
Server has startup warnings:
2015-04-15T19:05:12.483+0900 I CONTROL  [initandlisten]
2015-04-15T19:05:12.483+0900 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000

問題なく動作しているようです。

mean-cli のインストール

mean-cli は Node.js の v0.10.x が必要ですとのことなので、nodebrew を使って v0.10.x の最新である v0.10.38 をインストールして切り替え。
そして、npm で mean-cli をインストール。

$ npm install -g mean-cli

完了後、バージョンを確認。

$ mean -v
0.9.29

コマンドでアプリケーションの作成

作業ディレクトリに移動後、以下のコマンドを実行。

$ mean init HelloMEAN

HelloMEANディレクトリに移動し、依存するモジュールをインストール。

$ npm install

完了後、gulp のデフォルトタスクを実行。

$ gulp

localhost の 3000 ポートでサーバ起動。
無事にアクセスすることができました。

$ node server  

server.js からサーバが起動することも確認。

nodebrew を使った node.js のバージョン管理

今まで homebrew で直接 node.js をインストールしていたのですが、nodebrew を使ってバージョン管理できるようにしました。

node.js のアンインストール

最初にすでにインストールされている node.js をアンインストールします。

npm をアンインストール。

$ rm -rf /usr/local/lib/node_modules
$ rm -rf /usr/local/bin/npm

homebrew を利用してインストールした node.js をアンインストール。

$ brew uninstall node

パッケージでインストールした際はここを参考に。

nodebrewのインストール

node.js のバージョン管理を可能にする nodebrew をインストールします。
hodebrew を利用してインストールすることができます。

$ brew install nodebrew

パスの設定

nodebrew へのパスを設定します。
以下を.bash_profileに記載。

export PATH=$HOME/.nodebrew/current/bin:$PATH

.bash_profileの変更を反映します。

$ source .bash_profile

node.jsのインストール

node.js の最新版をインストールします。 バイナリでインストール可能な最も新しいものを指定します。

$ nodebrew install-binary latest

完了後、ローカルにインストールされているバージョンの確認を行います。
v0.12.2 が最新のようです。

$ nodebrew list
v0.12.2

current:none

続いてインストールしたバージョンを利用するように設定します。

$ nodebrew use v0.12.2

別のバージョンで利用していた npm パッケージの移行

nodebrew でインストールした node.js のあるバージョンで利用していた npm パッケージを、他のバージョンに移行する際は、以下のコマンドを実行すればよいようです。

$ nodebrew migrate-package [version]

Raspberry Pi を Bluetooth Low Energy (BLE) の Peripheral として動作させる

Raspberry Pi に Bluetooth ドングルを接続し、BLE の Peripheral として動作させてみました。
Raspberry Pi のモデルは、Model B+ V1.2 、Bluetooth ドングルは Planex の BT-Micro4 を利用しています。

BlueZ のインストール

BlueZ はオープンソースBluetooth プロトコルスタックです。
Linux 等で利用されており Android でも、 4.1 まで BlueZ が利用されていました。

ライブラリのインストール

RPi Bluetooth LE を参考に、必要なライブラリをインストールします。

$ sudo apt-get update
$ sudo apt-get install libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libical-dev libreadline-dev libudev-dev libusb-dev make

BlueZ のダウンロード

BlueZ のソースコードをダウンロードします。

$ mkdir ble
$ cd ble
$ wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.4.tar.xz
$ xz -d bluez-5.4.tar.xz
$ tar xvf bluez-5.4.tar

BlueZ のインストール

ソースコードをビルドします。
ビルドには少し時間がかかります。

$ cd bluez-5.4
$ ./configure --disable-systemd
$ make

ビルドが完了したらインストール。

$ sudo make install

動作の確認

Bluetooth ドングルのチェック

Raspberry Pi に Bluetooth ドングルを接続し、以下のコマンドを実行。

$ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 004: ID 0789:0168 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter

Device 005 が接続した Bluetooth ドングルです。
Bluetooth ドングルの詳細を表示。

$ sudo lsusb -v -d 0a12:

hcitool を使ってみる

Bluetooth の状態を確認。

$ hciconfig
hci0:   Type: BR/EDR  Bus: USB
    BD Address: 00:1B:DC:05:XX:XX  ACL MTU: 310:10  SCO MTU: 64:8
    DOWN
    RX bytes:547 acl:0 sco:0 events:27 errors:0
    TX bytes:384 acl:0 sco:0 commands:27 errors:0

Bluetooth を起動。

$ sudo hciconfig hci0 up
$ hciconfig
hci0:   Type: BR/EDR  Bus: USB
    BD Address: 00:1B:DC:05:XX:XX  ACL MTU: 310:10  SCO MTU: 64:8
    UP RUNNING
    RX bytes:1094 acl:0 sco:0 events:54 errors:0
    TX bytes:768 acl:0 sco:0 commands:54 errors:0

3行目が UP RUNNING に変わり、Bluetooth が起動しました。

Bluetooth デバイスのスキャン

$ sudo hcitool lescan
LE Scan ...

周囲にある Bluetooth デバイスのリストが表示されます。
特に問題なく Bluetooth ドングルは動作しているようです。

node.js で Bluetooth を利用する

node.js の bleno を利用します。

nodebrew で node.jsをインストール

bleno を利用するために、まずは node.js をインストールします。
node のバージョン管理を行う nodebrew を利用してインストールします。

$ curl -L git.io/nodebrew | perl - setup

インストールが完了したら.bashrcに PATH を追加。

export PATH=$HOME/.nodebrew/current/bin:$PATH

設定を読み込みます。

$ source .bashrc

PATH が通ったかどうかを確認。

$ nodebrew help

node をインストール。
Raspbian で動作するバイナリの最新バージョンは v0.10.28 のようなので、そのバージョンを指定してインストール。

$ nodebrew install-binary v0.10.28

インストールできたことを確認。

$ nodebrew list
v0.10.28

current: none

インストールしたバージョンを利用するように設定します。

$ nodebrew use v0.10.28

nodeのバージョンを確認

$ node -v
v0.10.28

bleno のインストール

bleno をインストールするまえに、必要なライブラリをインストール。

sudo apt-get install bluetooth bluez-utils libbluetooth-dev

作業ディレクトリを作成し、ローカルに bleno をインストール。

$ cd workspace
$ mkdir ble
$ cd ble
$ mkdir GATT
$ cd GATT
$ npm install bleno

root/sudo を使わなくても実行できるようにします。

$ sudo apt-get install libcap2-bin

setcap を実行するためのライブラリをインストール後、npm installを実行したディレクトリで以下のコマンドを実行します。

$ find -path '*bleno*Release/hci-ble' -exec sudo setcap cap_net_raw+eip '{}' \;

GATT ディレクトリにindex.jsファイルを作成し、sandeepmistry/bleno を参考に GATT のサービスを構築しました。
実行して、AppleBluetooth Explorer で、動作を確認します。

$ node index

Service UUID がアドバタイズされ、接続して設定した Characteristic の値を読み出すことができました。

Swiftのライブラリ管理ツール『Carthage』

転職してから少しiOSアプリ開発から遠ざかっていたのですが、その間にSwiftに対応した新しいライブラリ管理ツールCarthageが出ていました。
Objective-Cの時から有名なライブラリ管理ツールのCocoaPodsも昨年末にSwiftの対応が行われたようですが、一度Carthageも試してみます。

Carthage

インストール

brewを使ってインストールできます。
インストール用のpkgが用意されているほか、Githubのソースからコンパイルすることも可能なようです。

まずはbrewのアップデート

$ brew update

完了したらインストールコマンドを実行

$ brew install carthage

完了したらバージョンを確認

$ carthage version

インストールした時点のバージョンは0.6.2

ライブラリの追加

JakeLin/SwiftWeatherでライブラリの追加方法を確認します。

まずはSwiftWeatherをクローン。
クローンできたら、プロジェクトファイルと同じディレクトリのCartfileを確認。
Carthageでは利用するライブラリをCartfileで管理します。

github "SwiftyJSON/SwiftyJSON"
github "ishkawa/Alamofire"

SwiftWeatherはSwiftyJSONとAlamofireを利用しています。Carthageを使って、この2つのライブラリをインストールします。
Cartfileがあるディレクトリに移動し、以下のコマンドを実行。

carthage update

としたのですが、

DVTAssertions: Warning in /SourceCache/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-6269/Xcode3Core/LegacyProjects/Frameworks/DevToolsCore/DevToolsCore/SpecificationTypes/BuiltInSpecifications/Compilers/XCGccMakefileDependencies.m:77

からはじまるエラーメッセージが表示されてうまくインストールできませんでした。
プロジェクトを新規で作成してCartfileを作成しても同じエラーが…。
何気なくiOS Simulatorでアプリを起動してみようとすると、「Unable to determine device.」のポップアップが。
どうもTimeMachineで復旧すると、このような状況になるよう。
XcodeのWidnow > Devicesからデバイスを追加。
Simulatorの起動を確認して、再度carthage updateを行うと無事にライブラリのインストールができました。

CarthageはGithubソースコードをCarthage/Checkoutsディレクトリにクローンし、ライブラリの設定に従ってCarthage/Buildにframeworkをビルドするよう。
なお、Carthage 0.4からディレクトリの構成が現在のように変わったようです。
SwiftWeatherはそれ以前の構成を前提にframeworkの場所が指定されているため、修正が必要です。

"General"の"Linked Frameworks and Libraries"に、ビルドされたフレームワークを追加します。 SwiftWeatherの場合は、Swift Weather Instant、SwiftWeatherSerivceにも追加が必要です。

続いて、アプリの"Build Phases"タブの左上の「+」から"New Run Script Phase"を追加。
以下の内容を記載し、

/usr/local/bin/carthage copy-frameworks

Input Filesに以下を追加。

$(SRCROOT)/Carthage/Build/iOS/AlamoFire.framework
$(SRCROOT)/Carthage/Build/iOS/SwiftyJSON.framework

以上で無事、Simulatorと実機でSwiftWeatherを動かすことができました。

iOS Simulatorのデバイスがなくてビルドエラーが発生したところが、情報もなくて戸惑いました。。

CocoaPodsのように設定済みのWorkspaceが生成されないので、自分で依存関係の設定が必要だけれどシンプルだからビルドセッテイングとかではハマることは少なくなりそう。
対応しているライブラリはまだCocoaPodsの方が多いですが、有名なライブラリはだいぶ対応しているようなのでそこまで困らないかも。

CSSフレームワーク『Rigging』を作ってみました。

WebアプリケーションのUI作成のためのCSSフレームワーク『Rigging』を作ってみました。
http://akira-miyake.github.io/Rigging/

フレームワークとはいっても、CSSリセットやタイポグラフィ、ボタン等の基本的なコンポーネントのスタイル定義とシンプルなグリッドシステムくらいの軽めな感じ。
アプリケーションのデザインに合わせて、基本となるスタイルは変数でカスタマイズ可能に、プロジェクト固有のコンポーネントを作るときになるべく邪魔しないように、という思想で作っています。

また、スタイルガイドの検証として、Docsの作成にFrontnoteを利用してみました。
最初はgulp-kssを試してみたのですが、//のコメントと/ /のコメントが混ざるとうまく動かなかったり、章番号をつけなきゃいけないのが煩雑だったりでFrontnoteを使うことに。
gulp-frontnoteを使ってgulpで簡単にスタイルガイドの作成ができました。

スタイルガイドの部分は別プロジェクトに切り出して、もう少し汎用化するかも。
マークアップしながらデザインして、それと一緒にスタイルガイドも出力して、実際にアプリケーションを開発するエンジニアにわたす、みたいなことができればと。

色を扱うJavaScriptライブラリ「ColourJS」

新年明けましておめでとうございます。
転職して3ヶ月がすぎ試用期間が終了しました。
2015年もぼちぼち頑張っていきたいと思います。

年末年始はギリギリまで仕事だったり大阪の実家に帰ったりでけっこうドタバタだったのですが、ColourJSという色を扱うJavaScriptライブラリを作成しました。

ColourJS

hexのカラーコードやRGBHSVなんかの表色系の座標オブジェクトをから、「色」を表すcolourオブジェクトを得ることができます。
colourオブジェクトはRGBからHSV、CIELabなんかの座標を返すメソッドを持っていたり、明度や色相を操作したオブジェクトを生成するメソッドを持っていたりします。
生成したオブジェクトは基本的にイミュータブルで、新しい色オブジェクトを生成して返す仕様になっています。
色の操作は基本的にCIELab表色系をベースに行っているので、見た目の感覚に沿った色の操作ができるようになっています。

ざくっと作った感じなので、変換式まわりに不備があるかもしれませんが…ぼちぼち手を入れていく予定です。

MacへのAndroid Studioのインストール

1月からのプロジェクトで、Androidアプリを開発することになりそうなので開発環境構築のメモ。
12月に入りAndroid Studio 1.0が正式リリースされ、Googleは今後Eclipse向けのサポートを終了する意向のようなので、Android Studioを素直にインストールします。

Macの概要 * OS X Yosemite 10.10.1 * MacBook Air(13-inch, Early 2014) * Oracleのjdk1.8.0_25をインストール済み

ダウンロードとインストール

  1. 公式ページからdmgファイルをダウンロード。
  2. dmgを展開し、appをAplicationsフォルダに移動 以上

Android Studioの起動

appを起動しようとすると、「Java not found」のアラートが表示され起動せず。
どうやらIDEの動作にJava 6を使用しているためのよう。
$STUDIO_JDKで7や8のSDKを使用することもできるけれども、フォントレンダリングがうまく動かないかもねー的なことが書かれていたので、Java 6をインストールすることに。
ここからdmgをダウンロードして、JDK 6をインストール。
Java 6がインストールされていれば、IDEはそれを自動で選択して使うようです。