ページ

2016年3月31日木曜日

Kindle Paperwhite (第3世代) 購入


ちょっと前からAmazonのプライム会員になっていたんですが、
プライム会員になるとKindle Paperwhiteが4000円引きという誘惑に負けて
購入しました(笑)



購入したのは
「WiFiモデルの広告なし」で 16,280円から 4,000円割引きで12,280円でした

早速開封してみます。


左から充電用のケーブル、本体、説明書が入っていました。

本体を起動させてみます。電源ボタンが本体の下にあるので電源投入してみます。
↓画像が分かりにくいですが赤丸の所に電源ボタンがあります。


起動すると言語選択やら色々設定を行います。


設定が終わるとチュートリアルが始まります。


チュートリアルが終了したので、早速何か本を開いてみます。
本は以前オススメして頂いたアルゴリズムが世界を支配するを見てみます。



月並みな感想になってしまいますが、やっぱり本当の本を読んでいるような
見やすさで、目が疲れない感じがします。



ディスプレイの解像度も300ppiで文字が綺麗に表示されています。





全体的に本を読む事に特化した端末だけあって、見やすく大きさや重さも
丁度いいと思いました。ただ画面をタップした時の反応がもたつく時が
あったりもしますが、本を読む分には問題ない感じです。

あとは調子に乗って電子書籍を買いすぎないように気を付けていこうかと思いますw
特に漫画は続きが気になってバンバン買ってしますので ^^;


2016年3月27日日曜日

SwiftでRSpecみたいに書けるQuickを使ってみる 2


前回の続きになりますが、
色々な使い方を見てみたいと思います。
Nimbleassertionにどんなものがあるか確認してみます。

等価


同じ値を持っているか?をテストする
// 等しければテスト成功
expect(実際の値).to(equal(期待値))
expect(実際の値) == 期待値

// 等しくなければテスト成功
expect(実際の値).toNot(equal(期待値))
expect(実際の値) != 期待値

// 浮動小数点の等価テスト
expect(実際の値).to(beCloseTo(期待値, within: マージン値))
比較するオブジェクトはEquatableComparableプロトコルを実装または、
NSObjectのサブクラスでないと正しく比較されない
また、浮動小数点の等価テストの場合マージン値を設定します。
例)
expect(10.01).to(beCloseTo(10, within: 0.1)) // -> テスト成功

同一性


同じアドレスを指しているオブジェクトか?をテストする
// 同じアドレスを指していればテスト成功
expect(実際の値).to(beIdenticalTo(期待値))
expect(実際の値) === 期待値

// 同じアドレスを指していなければテスト成功
expect(実際の値).toNot(beIdenticalTo(期待値))
expect(実際の値) !== 期待値

比較


expect(実際の値).to(beLessThan(期待値))
expect(実際の値) < 期待値

expect(実際の値).to(beLessThanOrEqualTo(期待値))
expect(実際の値) <= 期待値

expect(実際の値).to(beGreaterThan(期待値))
expect(実際の値) > 期待値

expect(実際の値).to(beGreaterThanOrEqualTo(期待値))
expect(実際の値) >= 期待値
こちらもComparableプロトコルを実装しているオブジェクトである必要があります

クラス型


インスタンスのクラスが期待値のクラス又はサブクラスかテストします
// インスタンスがクラスのインスタスである場合テスト成功
expect(インスタンス).to(beAnInstanceOf(クラス))

// インスタンスがクラス又は寒クラスのインスタスである場合テスト成功
expect(インスタンス).to(beAKindOf(クラス))

Error Handling


Swift2.0のError Handlingのテストです。
Error Handlingとは?
Swift2.0から導入されたJava等で言う例外処理のこと
例)
// ErrorTypeプロトコルを実装したenumを作成
enum MyError: ErrorType {
    case InvalidNumber
    case OutOfRange
}
// エラーを投げる可能性があるメソッド
func something(number: Int?) throws {
    if (number == nil) { // 不正な値
        throw MyError.InvalidNumber
    }
    if (number > 50) { // 範囲外
        throw MyError.OutOfRange
    }
}
// エラーハンドリング
do {
    try something(60)
} catch {
    print("catch error") // エラーをキャッチ
}
上のようなMyErrorをthrowするメソッドのテストをQuickで行う場合
throwErrorを使用してテストを行う。
// エラーがthrowされればテスト成功
// (引数に70を指定しているのでMyError.OutOfRangeがthrowされる)
expect{ try something(70) }.to(throwError())
// エラーの型が`MyError`であればテスト成功
// 引数がnilの為`MyError.InvalidNumber`をthrowする
expect{ try something(nil) }.to(throwError(errorType: MyError.self))

2016年3月24日木曜日

道の駅を巡ってみる 11 - もう一度食べたいだご汁定食 たちばな 鹿北 -


今回は福岡の八女に位置する道の駅「たちばな」と
熊本県の北に位置する道の駅「鹿北(かほく)」です。


1. 道の駅「たちばな」






上の写真の様に木造の建物が特徴的な道の駅です。
物産館の中は休日という事もあって沢山の人でした。


道の駅内にある定食屋さんで昼食を頂いたんですが、
だこ汁定食が最高です^^


だご汁にささみチーズカツにポテサラ、このポテサラ!!本当美味しかったです。

ホームページ



2. 道の駅「鹿北」



ここはまあ〜広いです^^;
色々な施設がある複合型の道の駅で、プールや木工体験、石窯ピザ作り体験などなど・・
施設の裏山?には面白い木製トンネルの散歩道なんかもありました。



散歩していると水辺には何故かヤギが^^;


裏山を登った所で施設全体を写してみました。


全体を収めたかったんですが、、広くてちょっと無理でした > <

最後にイチゴ狩りもやっているのでイチゴ美味しそうだなと思い、
イチゴのソフトクリームをいただきました(単純)^^;




ホームページ

2016年3月19日土曜日

SwiftでRSpecみたいに書けるQuickを使ってみる 1



Quickとは?
SwiftやObjective-CでRSpecみたいに書けるテストフレームワーク
公式ページ
また、Quickを使うにはNimbleが必要らしい。

Nimbleって?
ざっくりな説明ですが・・・
以前にXcodeに含まれる標準のXCTestを軽く紹介しましたが、
このXCTestで例えば 1 + 1 = 2のテストを書くと、
XCTAssertEqual(1 + 1, 2, "1足す1は2!!")
とこうなるが、Nimbleでは
expect(1 + 1).to(equal(2))
こう書くことができる。直感的です^^

インストール


早速インストール・・の前に今回テスト用のプロジェクトを作成します。
テンプレートとしてSingle View Applicationを選択。

プロジェクト名をQuickSampleとしました。
※ Testにチェックを忘れずに入れる
そしてインストールはCocoaPodsを使ってインストールしていきます。
※ CocoaPodsに関してはこちらを参照
作成したプロジェクト直下にPodfileを以下の内容で作成。
use_frameworks!

def quick_pods
    pod 'Quick', '~> 0.9.0'
    pod 'Nimble', '3.0.0'
end

target 'QuickSampleTests' do
    quick_pods
end
インストールを実行
$ pod install
インストールが成功するとQuickSample.xcworkspaceが作成されているので、
こちらを開きます。
$ open QuickSample.xcworkspace

これでインストールは完了です。

テストを書いてみる


実際にテストを書いてみたいと思います。
プロジェクト内にQuickSampleTestsが作成されていると思うので、
まず名前をQuickSampleSpecに変更します。
次にQuickSampleSpecを以下に編集します。
import Quick
import Nimble

class QuickSampleSpec: QuickSpec {
    override func spec() {
        describe("sample test") {
            it("1 + 1 = 2!!") {
                expect(1 + 1).to(equal(2))
            }
        }
    }
}
いたってシンプルですが、RSpecのような構文になっているかと思います。
当然テスト結果は成功になります。

また、配列に含まれているかのテストも↓のように書けます。
it("array contain") {
    expect(["luffy", "chopper", "zoro"]).to(contain("zoro"))
}
他にも便利なものがたくさんありますが、今回はここまで。

2016年3月17日木曜日

VagrantでVMの紐付きがおかしくなった場合


現象としては、Vagrantファイルがあるディレクトリで
vagrant upすると違ったVMが立ち上がってしまうというもの・・・
元に戻すのが面倒だったので備忘録を兼ねての投稿です。

確認


おかしいと思ってVirtualBoxを起動すると同じものが2つある!?
そこで現在のVM一覧を見るコマンドVBoxManage list vmsを叩いて確認してみると
$ VBoxManage list vms
・・・
"hogehoge_default_1457750943558_68266" {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
"hogehoge_default_1457837316012_51675" {YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY}
やっぱし同じものが2つある(↑hogehogeが2つ)
※XXXXやYYYY~には実際は英数字が入ります

対策


紐付きがおかしくなっている事は間違いないので、Vagrantファイルがある
場所の直下にある.vagrantディレクトリを調べて見る
  • 階層
.vagrant
└── machines
    └── default
        └── virtualbox
            ├── action_provision
            ├── action_set_name
            ├── id ★
            ├── index_uuid
            ├── private_key
            └── synced_folders
★が付いているidが怪しいので中を見てみると・・
$ cat .vagrant/machines/default/virtualbox/id
YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY
ん〜恐らく、ここがXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXじゃないかと・・
修正してvagrant upしてみると、
望んていたものが起動しました!!
これで一件落着かと思っていると、
起動や停止する度にパスワードを聞かれる羽目に!?

原因


vagrant upvagrant haltするとVMとssh接続を行っており、 認証がうまくいってないのが原因でした。
↑の.vagrantの階層でprivate_keyというのが秘密鍵で、
別のVM(YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY)の秘密鍵が残っちゃっていた模様。

対策


解決策としては、
  • 全く新規に公開鍵、秘密鍵を作成
  • 残ってる秘密鍵を元に公開鍵を作成
の2つがあります。
今回は残ってる秘密鍵を元に公開鍵を作成したいと思います。
秘密鍵から公開鍵を作成
$ ssh-keygen -y -f .vagrant/machines/default/virtualbox/private_key > authorized_keys
VMを起動し、/home/vagrant/.sshauthorized_keysを上書きます
$ mv /vagrant/authorized_keys /home/vagrant/.ssh/.
これで認証が失敗せず、パスワード聞かれることもなくなります。

その他


↑の問題とは関係ないですが、色々試している中で見つけて便利だと思ったのでメモ
Vagrantを起動する際はVagrantファイルがあるディレクトリに移動して
vagrant upをしていましたが、vagrant up {id}とする事で
どの場所からでも起動できます
{id}を確認するには
$ vagrant global-status
{id}  default virtualbox poweroff hoge
{id}  default virtualbox poweroff fuga
で確認できます。
また、vagrant upに限らずその他のコマンドでも使用できます。
vagrant halt {id}vagrant destroy {id}・・・

shellなんかを書く時に使えそうです^^

2016年3月12日土曜日

Elasticsearchを学ぶ 5 - Kibana -


今回はElastic社のKibanaを使ってみたいと思います。

Kibanaとは?
ログデータなどの可視化ツール。フィルタや集計などを高速に便利に行う。
  • 環境
引き続き前回の環境を前提に進めていきたいと思います。
また今回使うデータは以前こちらで使用したデータを使います。

インストール


インストールの方法としては、公式ページからダウンロードしてインストールします。
$ cd
$ wget https://download.elastic.co/kibana/kibana/kibana-4.4.1-linux-x64.tar.gz -O kibana.tar.gz
$ tar -zxf kibana.tar.gz
$ sudo mv kibana-4.4.1-linux-x64 /usr/local/share/kibana
$ sudo chmod -R 755 /usr/local/share/kibana
$ sudo chown -R vagrant:vagrant /usr/local/share/kibana
  • 設定の変更
kibanaの設定ファイルを修正
$ cd /usr/local/share/kibana
$ vi config/kibana.yml
elasticsearch.urlのコメントを外し、以下に設定。
elasticsearch.url: "http://192.168.33.180:9200"
kibana用のポート5601をVagrantファイルに設定し再起動します
# 以下設定をVagrantファイルに追加
config.vm.network "forwarded_port", guest: 5601, host: 5601
  • 再起動
$ vagrant reload
  • ElasticsearchとKibanaを起動
$ /usr/local/share/elasticsearch/bin/elasticsearch -d -p pid
$ /usr/local/share/kibana/bin/kibana
ブラウザからhttp://192.168.33.180:5601/ にアクセス
↑のような画面が出ればOK

デフォルトのIndexマッチパターンを作成しないと次に進めないので、
とりあえず以下に設定しCreate
以下の画面のようにIndexパターンが作成される


可視化


今回はとりあえず何かグラフを表示させてみます
Visualizeタブを開き、Line Chartを選択
From a new searchを選択
左側の設定(グラフの表示に関する設定)を以下のように変更

▶︎ボタンを押すとグラフが表示される


・・と、まあグラフは表示できましたが、
これだけだとよく分からないので^-^;、
次回は大量にデータを登録して使ってみたいと思います。