assaulter's diary

主にバイクについて

KTM 690DUKEをレンタルした

 

どうもお久しぶりです。

最近は大型免許を取り、さらにマイガレ倶楽部も契約してしまったので、色々大型バイクを借りています。
 
ちなみに普段は200DUKEに乗ってます。250?知らない子ですね...
 
で、本日はスーパーを除いて一番デカイ690DUKEを借りて適当に走ってきました。ザックリ感想を。
 
f:id:assaulter:20150719182251j:image

軽い!

 
半乾燥で150切るのでもはや中型バイクより軽いです。多少シート高高いのですが、乗ったままバックとか簡単です。当方172cmです。
 

法定速度内なら鬼加速

 
車重軽いので60まで一瞬です。以前乗ったv-strorm1000より早いんじゃないかな。
 
ここからイマイチだった点。
 

とにかく熱が凄い!

 
200DUKEも排気量のクセに中々熱いのですが、普通のジーパンだと我慢出来ないレベルで熱いです。いつオーバーヒートするかとヒヤヒヤしてました。
 

3000回転以下は使い物にならない

 
レンタルなので誰か間違えてレギュラー入れたんじゃね?って位ギクシャクしました。エンストはしませんでしたが、ビッグシングルってこんなもんですかね?
ただ、アクセル捻れば元気に回るので、下道よりかは高速、ワインディング向きでしょうか。マッタリトコトコはしんどかったです。
 

というわけで総評

スポーツ走行できる場合はヒラヒラ感もあってすごく楽しいのですが、普段使いの足にはしんどいのでは?
 
あとステップとハンドルも気になったので、多分買うならそこも弄るとして、、、高いなー。
 
CBR650F、GSR750は乗ったのですが、このクラスが一番バランス良いなぁと思います。あとはMT-07, 09でしょうか。
 
と言いつつ次回はディアベルか、はたまた250SSのどれかにしようと思います。まずは忍者かな。
 

Swiftつらいことまとめ

XCode Beta1出た時に勉強のためにMasterDetailなテンプレートからプロジェクトを作成して色々試しているんですが、辛いことが多いのでメモしておきます。

XCodeの補完が辛い

対処法:コメントから日本語を削除。デフォルトで作成されるコメントに年が入ってるのでグレップして削除。辛い。

ブロック内でweak, unownedが使えない

謎。playgroundやと動くwww

なので、

@lazy var hoge = {//初期化のためのクロージャ }()

でいいのにクロージャ内でdelegate = selfする系だとわざわざ初期化関数を作る。辛い。

privateが無い

最初はどうでも良いか〜って思ってたけど、インスタンス変数が外部からセットされることを前提にしているのか、内部で使いまわすために定義されているのかが分からなくなってくる可能性大。

ここらへんはObCのヘッダと実装ファイルにプロパティ宣言を分けるやつ好きだったんですけどね〜。

関数の補完が謎

引数なしの関数を定義して、補完機能を使って書こうとすると

func hoge() -> String { return "hoge" }

みたいな関数を定義してると、hoge(self: クラスの型)でしょ?という謎補完をしてくる。そしてそのままコールすると引数たりんよエラーが出る。どこ見に行ってるんだろう・・・

self.で呼んであげると動くけど、補完が効かないので、一旦hogeで補完して頭にselfを付けるという作業をしています。辛い。 

nilを返すのにimplicityUnwrapするapiがある

Swift - ImplicityUnwrapOptional型な戻り値の関数の扱い方 - Qiita

Qiitaの方には回避方法を書いたんですが、Objective-Cnilも返すapiをそのまま移植したのか知りませんが、戻り値の型定義がImplicityUnwrapOptionalだったりするので、ランタイムエラーになるやつがある。nil返す可能性あるんだったら素直にOption型でいいんじゃないかなぁ。辛い。

(追記)for-inが辛い

Objective-C時代のコレクションは何でもかんでも突っ込めたのですが、Swift先生は型に厳しいのでこういうことをします。

var set = NSMutableSet()
set.addObject("h")
set.addObject("o")
set.addObject("g")
set.addObject("e")

for str: AnyObject in set {
    if let _str = str as? String {
        println(_str)
    }
}

で、コレをCLLocationManagerのmonitoredRegion(戻り値: NSSet!)に対してやろうとしたらXCodeが100%クラッシュしやがるので、完全にやる気なくなりました。

まとめると

今すぐやらなくても良い言語な気がしてきました...(こういうのを書いてあわよくば解答を得ようとするスタイル...つらいなぁ〜

MailCore2についてメモ(iOS)

iOS用メールクライアントを作るにはコレ使えばいいのかな?というライブラリ。

MailCore/mailcore2 · GitHub

とりあえずGmailに対してIDLEセッション貼って、変更があった場合にだけメッセージ取得的なことはできたのでその手順

手順

  1. MCOIMAPSessionオブジェクトに必要な情報をセットしてインスタンス化(このオブジェクトに対して命令をするので、インスタンス変数あたりでキープしておく)

2.先ほどのMCOIMAPSessionに対してidleOperation命令を実行。対象のメールサーバーに更新があったら、引数で渡したブロックに対してコールバックされる

3.ヘッダー情報のみが欲しい場合はセッションに対してfetchMessagesByUIDOperationWithFolder:の方をコール(rangeをセット出来、配列がかえってくるので、TableViewにセットすればメールの一覧リストが作れる)

4.コンテンツが欲しい場合はセッションに対してfetchMessageByUIDOperationWithFolder:をコール。uid(IMAPプロトコルに準拠したやつ)で特定するので、フェッチした際に自分がどこまでフェッチしたかを覚えておく。

未検証だが、uidに関してはログ吐くと、next uidが取得出来るので、それ使えばfetchする必要ないかも。

IMAP IDLE (RFC2177)

RFC 2177 - IMAP4 IDLE command

29minごとに通信して、死ぬのを回避してね!って書いてある...僕クライアントアプリ作るわけじゃないからポーリングでいい気がしてきた...

AppleProgrammingメモ2

今回はCoreDataのチュートリアルがあったので、それについてコメント。

Cocoa Programming L29 - Core Data 1 - YouTube

Cocoa Programming L30 - Core Data 2 - YouTube

メモ

  • プロジェクト作成時にDocumentBaseとCoreDataの両方にチェック
  • 拡張子がxcdatamodeldのファイルが作られるので、そいつにエンティティを定義してやる
  • テーブルViewとそのカラムに対応するDetailViewがある
  • Viewからのイベント及びViewへの値のアサインをArrayControllerの機能とバインディングで完了する(ここ一回時前で実装してみないと便利すぎて詳細がわからない・・・)
  • ファイルへのエクスポート、インポートもできる
  • undo, redoにも対応
  • Objective-Cを一行も書かずに終了

感想

前回紹介した、DocumentBasedApplicationを先にやっておくといいと思います。

前回は、自前でNSCodingを実装して、シリアライズをしてファイルに保存というのが、xcdatamodeldに記述してしまえば書く必要がない(そりゃそうだ)という差があります。便利だなあ。

AppleProgrammingメモ

あえてCocoa Applicationプログラミングを始めたのでメモ。 iOSアプリと比べてなかなかサンプルが少ないのですが、この外人さんの動画はわりとよさ気なので、面白かったやつからメモしていきます。

Cocoa Programming L35 - NSViewController - YouTube

  • オーソドックスにAppDelegateがNSWindowを持つ。
  • windowのxibにAppControllerを定義
  • AppControllerはPop Up Buttonからイベントを受け取り、自身が持つViewControllerを切り替える
  • 実際の描画内容は、抱えるViewControllerに任せる。

Cocoa Programming L20 - NSTableView Bindings - YouTube

  • Document Base Application
  • KVC準拠のエンティティを作成
  • ArrayControllerをモデルコントローラーとして使用する(標準部品)
  • Cocoa Bindingにより、コーディングなしに追加/削除をviewから受け取り、モデルを操作して再度viewに反映することができるサンプル

Cocoa Programming L22 - Saving Documents - YouTube

  • 上記で作成したDocument Base Applicationの状態をファイルに保存/読み込みができる
  • NSCodingプロトコルを実装するとシリアライズ/デシリアライズできる
  • NSDocumentクラスは、NSCoding準拠のオブジェクトをファイルに入出力できるので、状態保存ができる

古い動画は書き方が今と異なっていたりしますが、そこはよしなに補完ということで。

Vagrant+Chef-soloでplay frameworkが動くところまで作ってみた

Amazon.co.jp: 入門Chef Solo - Infrastructure as Code eBook: 伊藤直也: Kindleストア

をひと通り読んだので、習作として、play! frameworkが動作可能な環境をvagrant上のcentOSに構築するchef-soloを書いてみたので公開します。

https://github.com/assaulter/vagrant-play

ポイントとしては、vagrant up一発で起動するのではなく、ちゃんとcookbookを取得してきてknifeで料理するところをコマンド打たせるところかなー()

計6発叩かないといけないのと、Vagrantfileおよびvagrant pluginでコマンドを省略できるのは知ってるので、次回はコマンドを短縮するところをやろうと思います。

RailsでAPIサーバー用プロジェクトを作成する

仕様

タスクをjson形式でやりとりする。

API

タスク一覧:GET /tasks
タスク(個別):GET /tasks/:id
タスク登録:POST /tasks
タスク更新:PATCH /tasks/:id
削除:DELETE /tasks/:id

Rails-API Gemを使ってプロジェクトを作成する

rails-api/rails-api · GitHub

こちらを仕様すると、View周りのassets等が排除されたシンプルなRailsプロジェクトが作成されます。

View周りはMV*なJSのフレームワークに任せるっていうの、最近流行ってるんですかね?

gem を追加する
gem install rails-api

rails-apiを用いてプロジェクトを作成する
rails-api new todo_api

好みに応じて、Gemfileを編集し、bundle installする。

僕はテスト用にfactory_girl_rails, rspec, rspec-railsを追加しました。

テーブル作成
rails g scaffold task name:string
rake db:migrate

これでコントローラも作成されます。というかこの時点で

Chrome Web Store - Advanced REST client

等を使って叩くと動きますw

あとは

# create時にpostされたパラメータに対して適用するメソッド
def task_params
  allow = [:name]
  params.require(:task).permit(allow)
end

# POST /tasks
# POST /tasks.json
# params example
# {"task":
#   {"name": "sample"}
# }
def create
  @task = Task.new(task_params)

  if @task.save
    render json: @task, status: :created, location: @task
  else
    render json: @task.errors, status: :unprocessable_entity
  end
end

一応ガードをかけておきます。

次はFactory girlを使ったRSpecの書き方かな・・・