ブログエディタBlogo

Blogoというブログエディタがあります。

以前試用した時には日本語入力で問題があったのでバグレポートを出したら、ベータテスターに誘われました。それでこの記事はバグ修正ベータ版で書いてます。

日本語入力のバグは修正されたようです。これで実用できそうです。

Raspberry Pi 2で外付けHDDを利用する

Raspberry Pi 2で外付けHDDを利用する。

パーティションの作成

USBポートにHDDを接続する。

pi@raspberry ~ $ sudo fdisk -l

を実行すると接続したHDDは/dev/sdaだと確認できたが、WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.という警告が表示されたのでgdiskをインストールして初期化する。


pi@raspberry ~ $ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.5

Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: present

Found valid MBR and GPT. Which do you want to use?
1 - MBR
2 - GPT
3 - Create blank GPT

Your answer: 2
Using GPT and creating fresh protective MBR.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-976773134, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-976773134, default = 976773134) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D595477B-ABF6-4B84-BF36-2BD97357CE4D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number Start (sector) End (sector) Size Code Name
1 2048 976773134 465.8 GiB 8300 Linux filesystem

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

パーティションのフォーマット

パーティションをext4でフォーマットする。

pi@raspberry ~ $ sudo mkfs.ext4 /dev/sda1

マウント

マウントする。

pi@raspberry ~ $ sudo mkdir /workspace
pi@raspberry ~ $ sudo mount /dev/sda1 /workspace

自動でマウントするように設定する。/etc/fstabに以下を追記する。
/dev/sda1 /workspace ext4 defaults 0 0

Raspberry Pi 2のセットアップ

iOSアプリ開発時にWebサーバのテスト用サーバをRaspberry Pi 2で動作させるためにRaspberry Pi 2をセットアップする。

Raspberry Pi 2のセットアップ

OSのインストール

インストールの作業はMacで行った。

OSはRaspbianを利用する。RaspbianのイメージファイルのダウンロードはRaspbian公式サイトからでは遅いので、北陸先端科学技術大学院大学のミラーサイトからダウンロードする。ミラーサイトのraspbian-[日付]フォルダの最新のフォルダを選択して[日付]-raspbian-wheezy.zipをダウンロードする。

SDカードにダウンロードしたイメージを書き込むには、まずSDカードをMacに接続して、ディスクユーティリティでそれをFAT32(ディスクユーティリティではMS-DOS(FAT)と表示される)でフォーマットする。

メニューバーのAppleメニューから「この Mac について」を選択する。さらに「システムレポート…」を選択し、システムレポートが表示されたら「カードリーダー」を選択する。先ほど初期化したSDカードの「BSD 名」を調べる。disk[数字]の様なである。スクリーンショットではdisk4である。
Voila Capture 2015 08 16 08 16 30 午前

ディスクユーティリティでSDカードのパーティションをアンマウントする。SDカードはアンマウントしない。

ターミナルを開く。ダウンロードしたイメージのフォルダに移動して以下のコマンドを実行して、イメージをSDカードに書き込む。

sudo dd bs=1m if=2015-05-05-raspbian-wheezy.img of=/dev/rdisk4
ifにはダウンロードしたファイル名を指定し、ofのrdisk4は先ほど調べたdisk4の先頭にrをつけた名前にする。実行するとMac OS Xの管理者のパスワードの入力を求められるので入力する。しばらくすると書き込みが終わる。

ディスクユーティリティでSDカードをアンマウントしカードをMacから取り出す。

OSの初期設定

Raspberry Pi 2にSDカードを挿入して、キーボードとディスプレイを接続し、USBケーブルで電源に接続すると起動する。初回の起動ではRaspberry Pi Software Configuration Toolが表示される。

パーティションの拡張

初期設定ではSDカードのすべての領域を利用するようになっていないのでExpand Filesystemを選択してSDカードの全領域を認識するように設定する。

パスワードの変更

Change User Passwordでパスワードを変更しておく。

X Window Systemの起動

サーバ用途なのでX Window Systemを手動起動に変更するためにEnable Boot to Desktop/Scratchを選択して、Console Text console, requiring loginを選択する。(デフォルトでは選択してあった)

ロケール等の設定

Internationalisation Optionsを選択してChange TimezoneでAsia->Tokyoを選択する。日本語フォントがインストールされていないのでLocaleは変更しない。Keyboard Layoutは必要であれば変更する。

その他設定

Advanced Optionsを選択する。

  • Hostnameを選択してホスト名を入力する。初期設定はraspberrypiになっている。
  • SSHを選択してEnableにする。

これでConfiguration Toolでの設定は完了なのでFinishを選択する。

無線LAN子機の設定

BUFFALOのWLI-UC-GNMを利用してWiFiに接続する。

WLI-UC-GNMをRaspberry Pi 2のUSBポートに刺す。

/etc/wpa_supplicant/wpa_supplicant.confを編集して
network={
ssid="機器のSSID値"
psk="SSIDに対応する暗号化キー値"
}

を追記する。
sudo ifdown wlan0を実行して子機を停止させ、sudo ifup wlan0で再度起動する。

ifconfig wlan0でIPアドレスを確認する。

AtomでRustのAuto Completion

RustのAuto completionをAtomで行うにはracerを利用する。

racerをcloneして

cd racer; cargo build --release
cp target/release/racer /usr/local/bin/racer

を実行する。

Rust公式サイトからRustのソースコードをダウンロードして/usr/local/src/rust/srcに置く。そのパスをRUST_SRC_PATH環境変数に設定する。

Atomでlanguage-rustパッケージとracerパッケージを検索してインストールする。

RustをMacにインストールしてHello World

今話題の言語RustをMacにインストールしてみる。

インストール方法のページによるとpkgのインストーラかシェルでコマンドを打ってインストールする方法があるらしい。

その他Homebrewでもインストールできるようなので、Homebrewでインストールしてみる。

$ brew install rust

以下のコードをhello.rsファイルで作成する。

fn main() {
println!("Hello World!");
}

このファイルを以下のコマンドでコンパイルして実行する。

$ rustc hello.rs
$ ./hello
Hello World!

iOS Fluentd Loggerライブラリを公開しました

iOS用Fluentd Loggerライブラリを公開しました。

rizumita/CTFluentLogger

まだアルファ段階なので、開発時のみご利用ください。

Fluentd+elasticsearch+Kibana3が動作するVagrant+Chefも入っているので、簡単に使い始められるようになっています。

詳しい使い方はiOSアプリからFluentdにログを送る (Vagrantで簡単にサーバを利用可能) | CAPH TECH : iOSを御覧ください。

iOSのAuto Layout Visual Formatでセンタリングを行う

iOSのAuto LayoutでVisual Formatを使ってサブビューのセンタリングを行うには以下のように記述する。

1
2
[superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[superview]-(<=0)-[subview(length)]" options:NSLayoutFormatAlignAllCenterY metrics:NSDictionaryOfVariableBindings(length) views:NSDictionaryOfVariableBindings(superview, subview)]];
[superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[superview]-(<=0)-[subview(length)]" options:NSLayoutFormatAlignAllCenterX metrics:NSDictionaryOfVariableBindings(length) views:NSDictionaryOfVariableBindings(superview, subview)]];

上記コードではlengthを指定して正方形にレイアウトしているが、他で長さを指定していればlengthは指定しなくてもいい。

iOSのバージョンチェック用マクロ

iOSでバージョンのチェックをいろいろ行いたかったので、便利なマクロを探してみた。Check iPhone iOS Version – Stack Overflowから。これを.pchファイルに記述すると便利。

/*
 *  System Versioning Preprocessor Macros
 */ 
 
#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
 
/*
 *  Usage
 */ 
 
if (SYSTEM_VERSION_LESS_THAN(@'4.0')) {
    ...
}
 
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@'3.1.1')) {
    ...
}