買ってよかったもの2014

今年は結構お金を使った覚えがあるので自分用にメモを残しておく。
とは言っても買ってから後悔したものはなかったのでよかった。
毎日使うものにはお金をかけたほうが良いかなと思っているので、来年もよさそうと感じたものは積極的に試していきたい。

Bose QuietComfort 20i

通勤中にPodcastを聞くために買った。
音楽だと音量をすこし上げればノイズも気にならないけれど、会話が中心のPodcastだとノイズが気になっていた。
ノイズキャンセリングのおかげで快適なPodcastリスニング環境が手に入った。
ノイズキャンセリング++。
コンビニとかで会話が必要な時はコードに付いているスイッチでノイズキャンセリングをオフにできるのも便利。
羽根つきイヤーチップは違和感があるかなーと思っていたけれど、実際つけてみるとそんなこともなく、むしろ走ったりしてもズレなくてよかった。
ちょっと高いけど間違いなくおすすめ。

Kindle Voyage

Kindle Papaerwhiteから買い替え。
キャンペーン情報なし&Wi-Fiモデルを購入した。
全体的にさくさく動くようになって、ページ送りのストレスがほぼなくなった。
表示がキレイになったおかげか、文字が潰れていた漫画も普通に読めるようになった。
Kindleだと紙よりすこし経ってから販売されてすぐに読めない場合があるのが不安要素だけど、本棚がいっぱいになりつつあるのでKindleで買えるものはKindleで読むようにしていきたい。

Kindle Voyage Wi-Fi、キャンペーン情報つきモデル

Kindle Voyage Wi-Fi、キャンペーン情報つきモデル

iPhone6

手が小さいので片手で扱いにくくなるのは嫌だなーと思いつつも、iPhone5から買い替え。
iPhone6 32GB Silverを購入した。
片手操作がしづらくなるのは予想通りだったけれど、自分の使い方だとバッテリーが1日持つようになったのでよかった。
予想外だったのはTouch IDで、よく面倒臭がらずに4桁入力していたなーと思うくらい便利だった。
ラウンドフォルムになって落としやすそうだったので、Power SupportAir Jacketケースのマットタイプをつけて使っている。
本体が薄くなったせいかあまり厚みを感じることもなく、滑りどめの安心感があって良い。
iPhone5だと本体の角をぶつけないように気をつけて使っていたけれど、ケースをつけるとあまりそういうことを考えなくてもよいのが思いの外快適だった。

motion-kitを使ってRubyMotionでAutoLayoutを利用する。

RubyMotionでAutoLayoutが使えないか調べたところ、motion-kitが良さ気だったので使ってみました。

AutoLayoutについて勉強したい人は「UIKit徹底解説 iOSユーザーインターフェイスの開発」がおすすめです。

UIKit徹底解説 iOSユーザーインターフェイスの開発

UIKit徹底解説 iOSユーザーインターフェイスの開発

motion-kitのページを見るとわかりますが、DSLでAutoLayoutを設定したLayoutクラスを定義します。

class HogeLayout < MotionKit::Layout
  def layout
    add UIButton, :button
  end

  def button_style
    title 'Press it!'
    size_to_fit

    constraints do
      left.equals(:superview).plus(10)
      right..equals(:superview).minus(10)
      top.equals(:superview).plus(10)
      height 100
    end
  end
end

あとはLayoutクラスのインスタンスをコントローラのビューに設定するだけでOK。

Layoutに追加したボタンなんかも簡単に参照できます。

class HogeController < UIViewController
  def loadView
    @layout = HogeLayout.new
    self.view = @layout.view

    @button = @layout.get(:button)
  end
end

で、いい感じだなと思いながら触っていたのですが、UITableViewやUINavigationControllerなどのよく使うやつのサンプルがないというか、GitHubのIssueやStackOverflowに分散していたので、やりたいことを実装するのにけっこう苦労しました。

自分用のメモとして作ったサンプルをGitHubに上げてみたので、同じような境遇の人は使ってみてください。

AutoLayoutというと面倒くさくて嫌だという人が多いイメージがあるんですが、あまり自分はそう思うことは少なくて、なぜかなーと思っていました。

もともと自分がフリーハンドで図を書くのが苦手で、座標・幅・高さを数値指定して図を書きたいからじゃないかなと最近は思っています。 (ピッタリ数値が揃っているのがいい感じ)

なんとなく自分に合っているツールな気がするので、もう少し使ってみようかなと思います。

YAPC::Asia 2014 に初参加してきた。

ブログを書くまでがYAPC!」とのことなので、若干遅れ気味ですがエントリを書いてみます。

普段Perlを触ることはあまりないんですけど、応募されていたトークを見るとインフラやモバイルに関する話題が多くておもしろそうだったので初参加してきました。

3日間通しで参加してPerlコミュニティを体感することができてよかったです。

人が多すぎて立ち見でも聴講できないトークがあったのがちょっと残念でした。

まじめにトークを聞く戦略で予定を立てていましたが、想像以上に疲れました。

これだけは聞きたい!!というトークを決めておいて聞くのがよかったかなーという気もします。

個人的ベストトークは、Day1は@kentaroさんの「いろんな言語を適材適所で使おう」です。

トークリストベストトーク賞を見てのとおり、Perl一途な人でなくても楽しめるイベントでした。

スピーカのみなさん、運営のみなさん、楽しい時間をありがとうございました。

聴講リスト

Day0

Day1

Day2

RubyMotionでPixate Freestyleを使う時はmotion-pixatefreestyleを使おう。

motion-pixatefreestyle

数日前にRubyMotionでPixate Freestyleを試した記事をアップロードしたけど、motion-pixatefreestyleが公開されたのでより簡単に試すことができるようになりました。

watsonさんありがとう!!

公式のGithubに書いてあるとおり設定してうまく動作するところまで確認できました。

Pixate/RubyMotion-PixateFreestyle · GitHub

CocoaPodsでPixateFreestyleを管理させたい場合

vendor/PixateFreestyle.frameworkにフレームワークコードをダウンロードする必要があるみたいだけど、そこら辺の管理はCocoaPodsにやらせたかったので、シンボリックリンクを作成して動作させました。

公式のGithubにも

Download the Pixate Freestyle Framework and copy the PixateFreestyle.framework folder into vendor directory (or alternatively just create a symbolic link).

って書いてあるので大丈夫だと思う。

CocoaPodsを使うとvendor/Pods/PixateFreestyle/PixateFreestyle.frameworkにコードがダウンロードされるので、vendor/PixateFreestyle.frameworkからこいつにシンボリックリンクを張ればOK。

% cd $PROJECT_DIR
% ln -s vendor/Pods/PixateFreestyle/PixateFreestyle.framework vendor/PixateFreestyle.framework

Enjoy, Pixate Freestyle!!

RubyMotionでPixate Freestyleを試してみた。

[2014/02/27追記]

motion-pixatefreestyleが公開されたので、より簡単に試すことができるようになりました。

最新の記事はこちら

大分ブログを書いていませんでしたが、ひっそりとRubyMotionで遊んでいたりします。

先週、Pixateが名前をPixate Freestyleに変えてオープンソース化されたというニュースが公式ブログに投稿されていたので、さっそくRubyMotionから試してみたました。

これまでも個人利用であれば無料で利用することができましたが、オープンソース化されたことで利用しやすくなった&利用者が増えそうでいい感じ。

Pixateが何者なのかはid:naoyaさんのエントリが詳しいです。

Pixate Freestyleのインストール

GithubのREADMEを読むと、CocoaPodsが使えるようなのでmotion-cocoapodsをGemfileに追加してbundle installしておく。

% vi Gemfile

source 'https://rubygems.org'

gem 'rake'
gem 'motion-cocoapods'

% bundle install

次にRakefileにPixate Freestyleの設定を追加して、bundle exec rake pod:installする。

pod:installしただけではPixate Freestyleのヘッダファイルが見つからず実行時エラーになったので、app.vendor_projectメソッドでヘッダファイルのパスを指定しています。

motion-pixateを使ってPixateをインストールしたときはあまり意識していなかったのでハマりました。

% vi Rakefile

# -*- coding: utf-8 -*-
$:.unshift("/Library/RubyMotion/lib")
require 'motion/project/template/ios'
require 'rubygems'
require 'motion-cocoapods'

begin
  require 'bundler'
  Bundler.require
rescue LoadError
end

Motion::Project::App.setup do |app|
  # Use `rake config' to see complete project settings.
  app.name = 'PixateFreestyleTest'

  # CocoaPodsでPixateFreestyleをインストール
  app.pods do
    pod 'PixateFreestyle'
  end

  # PixateFreestyleのヘッダファイルを指定
  app.vendor_project('vendor/Pods/PixateFreestyle/PixateFreestyle.framework',
                     :static,
                     :products => ['PixateFreestyle'],
                     :headers_dir => 'Headers')
end

% bundle exec rake pod:install

あとはapp_delegate.rbにPixateFreestyleを初期化するコードを追加すればPixateと同じ感じで使えます。

cssセレクタに指定できるUIコンポーネントなどの情報は公式ドキュメントに詳しく載っています。

% vi app/app_delegate.rb

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    # PixateFreestyleを初期化する
    autorelease_pool {
      PixateFreestyle.initializePixateFreestyle
    }
    
    @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
    @window.makeKeyAndVisible

    @view = UIView.alloc.initWithFrame(UIScreen.mainScreen.bounds)

    # idやclassを指定する場合
    # @view.styleId = 'hoge'
    # @view.styleClass = 'fuga'

    @window.addSubview(@view)
    
    true
  end
end

% vi resource/default.css

view {
  background-color: linear-gradient(to right, rgba(0,153,255,0.5), #009);
}

/*
#hoge { }
#fuga { }
*/

これでbundle exec rakeするとcssが適用されたアプリが実行されるはず。

cssで見た目を変更できるのはやっぱり便利です。

UITableViewでセルの高さを動的に計算しなければいけないところとかcssでできない部分とできる部分を考えて適用しないといけないとは思いますが、しばらく使ってみてノウハウを貯めていきたいと思います。