• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

iPhoneのアプリを作っていると、様々なframeworkを使う場面に出くわします。その際に、色々なインストールの仕方があるようなので、メモしておきます。

via http://code.google.com/p/json-framework/wiki/InstallationInstructions#Option_1:_Copy_the_JSON_source_files_into_your_project

その前にメモ

  • 方法によってステップ3でJSON.hのimport方法が違います。
  • 方法3で、"Copy Files"フェーズができるのですが、DestinationがFrameworks、Products Directoryでどれがいいかよくわかってないです。Buildは通ってもエミュレータで動かないときとかあります。

方法1:ソースをプロジェクトにまるごとコピーする

  1. ソースが含まれているフォルダを追加したいプロジェクトのClassesグループにドロップ
  2. 'Copy items into destination group's folder' オプションをチェック
  3. コード内で #import "JSON.h"などと書いて使う

方法2:iPhoneカスタムSDKを使う

なんかあんまりないかなと思って割愛w

方法3:埋め込みフレームワークを使う

  1. ~/Library/Frameworksディレクトリを作成
  2. JSON.frameworkファイルを上で用意したディレクトリにコピーする
  3. "Add existing file"メニューを選んで、~/Library/Frameworks/JSON.frameworkファイルをアプリケーションに追加する
  4. ターゲットを選択、右クリックして"Add - New Build Phase - New Copy Files Build Phase"メニューを選択
  5. コード内で #import <JSON/JSON.h>などと書いて使う
posted by Png satoko on Mon 28 Sep 2009 at 07:05

[追記] 最後の方、ちょっと不明瞭だったので修正しました。


amend使ったこと無かったのでメモ。

前提

   1  # edit comment.rb    
   2  # edit product.rb  
   3  git commit -am "wrong commit"
(上記のファイルを修正、product.rbを間違ってコミット)

そして、下記の順で変更・修正します:

間違ってコミットしたファイルをコミットから外す

   1  git reset HEAD~1 app/models/product.rb
(変更は維持されたまま、コミットから外されます:unstageという)
(こうすると、# Changed but not updated:のところに出てくる)

コミットメッセージの修正

   1  git commit --amend
(メッセージを修正できる) (+上でcommitから外したファイルを確定する)

amend時にコミットメッセージを再利用する

via http://www.jukie.net/~bart/blog/git-amend

@onoさんにこの記事を教えて頂いたのですが、筆者の方はコミットメッセージを再利用するgit ammendコマンドを作っておくという技を使っておられるようです:

   1  git config --global alias.amend 'commit --amend -C HEAD'
   2  
   3  #今後(メッセージはそのままで)コミットを修正したい時は下記でOK:
   4  git amend

さらに流れ的には、

  1. コミットしてから、
  2. さらにファイルを編集、
  3. それをgit addでファイルを追加、
  4. git commit --amendで3で追加したのを直前のコミットに加える

というワークフローを使って運用。超こまめにコミットして作業したいときに便利そうです!

posted by Png satoko on Fri 25 Sep 2009 at 01:40 with 2 comments

Heroku経由でSinatraを使ってみているのですが、ModelとしてSequelを使ってみることにしました。

Userクラスを作る

DBをオンメモリにしておいて、テーブル作成・クラスの宣言

   1  % irb
   2  require 'rubygems'
   3  require 'sequel'
   4  
   5  DB = Sequel.sqlite
   6  DB << "CREATE TABLE users (id INTEGER PRIMARY KEY, name VARCHAR(255) not NULL)"           
   7   
   8  class  User < Sequel::Model
   9  end

これから、User.なんとかでデータの作成などできます。

   1  User.create(:name => 'satoko')
   2  
   3  User.find(:name => 'satoko')
   4  User.find(:id => 1).update(:name => 'satoko')
   5  User.find(:id => 1).delete
   6  User.first
   7  
   8  User.all
   9  => [#<User @values={:name=>"satoko", :id=>1}>]
  10  
  11  DB[:users].filter(:name => 'satoko').sql
  12  => "SELECT * FROM `users` WHERE (`name` = 'satoko')"

findは1件操作なので、複数件の場合はfilterで行う

   1  User.filter("id > ?", 0).limit(10).each {|u| p[:name]}
   2  => #<Sequel::SQLite::Dataset: "SELECT * FROM `users` WHERE (id > 0)">

また、@orepuriさんに教えてもらったのですが、all、first、eachなどがあって初めてSQLが発行されるそうで、なかなか面白いです

References

Sequel概要(2年前の資料なので、コード的には古いかもしれません)
http://www.slideshare.net/zhesto/ruby-off-rails-japanese

チートシート
http://sequel.rubyforge.org/rdoc/files/doc/cheat_sheet_rdoc.html
http://cheat.errtheblog.com/s/sequel/

Classリファレンス:ModelやDatasetなど
http://sequel.rubyforge.org/documentation.html

posted by Png satoko on Wed 16 Sep 2009 at 21:29

数字だけのタグだとうまくcoが出来なかった覚えがあるので、renameしました。あと、commitハッシュはフルでなくても、最初の5桁くらいで大丈夫だと思います。

タグで使っているcommitハッシュを取得

   1  % git rev-parse 1.1
   2  97f4c33e9a35255b8f8506ffa90ab70605ccf74f

タグのつけ直し

先程入手したcommitハッシュを使って

   1  git tag -a -f v1.1 97f4c33e9a35255b8f8506ffa90ab70605ccf74f

完了と思ったら、つけ直しではなく同じcommitハッシュに別のタグをつけるようになっていまようです。なので、不要なタグを削除します

タグの削除

   1  % git tag -d 1.1
   2  Deleted tag '1.1'

posted by Png satoko on Wed 16 Sep 2009 at 04:30

imagePin.png

前回の続き:

[iPhone] Map Kitで遊ぼう:地図を出して現在位置にピンを立てる
http://blog.s21g.com/articles/1596

参考:

Drawing polyines or routes on a MKMapView (as an MKAnnotationView) – Part 2
http://spitzkoff.com/craig/?p=108

MKAnnotationを実装するクラスを作成

MyAnnotation.h

   1  #import <Foundation/Foundation.h>
   2  #import <MapKit/MapKit.h>
   3  
   4  @interface MyAnnotation : NSObject <MKAnnotation> {
   5  	CLLocationCoordinate2D _coordinate;
   6  }
   7  
   8  @property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
   9  
  10  -(id)initWithCoordinate:(CLLocationCoordinate2D) coordinate;
  11  
  12  @end

MyAnnotation.m

   1  #import "MyAnnotation.h"
   2  
   3  @implementation MyAnnotation
   4  
   5  @synthesize coordinate=_coordinate;
   6  
   7  -(id)initWithCoordinate:(CLLocationCoordinate2D) c{
   8  	_coordinate=c;
   9  	return self;
  10  }
  11  
  12  @end

ViewControllerでMKMapViewDelegateを実装

ポイントとしては

  • .hでMKMapViewDelegateを実装宣言
  • _mapView.delegate = self;
  • -(MKAnnotationView )mapView:(MKMapView )mapView viewForAnnotation:(id )annotationを実装
  • MyAnnotationなら画像を設定する:
    if([annotation isKindOfClass:[MyAnnotation class]]) { annotationView.image = [UIImage imageNamed:@"some.png"];

本当はMKAnnotationViewを派生して、MyAnnotationViewを作るのがベターなんですけど省略しています。

MapTutorialViewController.h

   1  #import <UIKit/UIKit.h>
   2  #import <MapKit/MapKit.h>
   3  
   4  @interface MapTutorialViewController : UIViewController <MKMapViewDelegate> {
   5  	MKMapView *_mapView;
   6  }
   7  @end

MapTutorialViewController.m

   1  #pragma mark MKMapViewDelegate
   2  - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
   3  	MKAnnotationView *annotationView;
   4  	NSString* identifier = @"Pin";
   5  	annotationView = (MKPinAnnotationView*)[_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
   6  	if(nil == annotationView) {
   7  		annotationView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier] autorelease];
   8  	}
   9  	if([annotation isKindOfClass:[MyAnnotation class]]) {
  10  		annotationView.image = [UIImage imageNamed:@"some.png"]; //地図に表示したい画像を設定
  11  	}
  12  	return annotationView;
  13  }
  14  
  15  - (void)addSomeAnnotations {
  16  	//a location
  17  	double latitude = 37.331688999999997;
  18  	double longitude = -122.030731;
  19  	CLLocationCoordinate2D _location;
  20  	_location.latitude = latitude;
  21  	_location.longitude = longitude;
  22  	
  23  	CLLocationCoordinate2D location1;
  24  	MyAnnotation *annotation;
  25  		
  26  	location1.latitude = _location.latitude+0.1;
  27  	location1.longitude  = _location.longitude+0.1;
  28  	annotation =[[MyAnnotation alloc] initWithCoordinate:location1];
  29  	[_mapView addAnnotation:annotation];
  30  		
  31  	location1.latitude = _location.latitude+0.5;
  32  	location1.longitude  = _location.longitude+0.5;
  33  	annotation =[[MyAnnotation alloc] initWithCoordinate:location1];
  34  	[_mapView addAnnotation:annotation];
  35  }
  36  
  37  - (void)viewDidLoad {
  38      [super viewDidLoad];
  39  	
  40  	_mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
  41  	_mapView.showsUserLocation=TRUE;
  42  	_mapView.delegate = self;
  43  	[self.view addSubview:_mapView];
  44  		
  45  	[self addSomeAnnotations];
  46  
  47  }
  48  

posted by Png satoko on Wed 9 Sep 2009 at 02:12

まずは地図を表示して、現在位置にピンを立てるところまで。
MKMap-1.png

via

http://blog.objectgraph.com/index.php/2009/04/02/iphone-sdk-30-playing-with-map-kit/

MapKit.frameworkを追加する

MapKit.png

Controller.hでMapKit/MapKit.hをImport

MapKit/MapKit.hをImportして、MKMapViewをプロパティに持つ:

   1  #import <UIKit/UIKit.h>
   2  #import <MapKit/MapKit.h>
   3  
   4  @interface MapTutorialViewController : UIViewController {
   5  	MKMapView *_mapView;
   6  }
   7  
   8  @end

Controller.mでMKMapViewを初期化

showsUserLocationをTRUEにすることで、現在の居場所にピンを立ててくれる。

   1  - (void)viewDidLoad {
   2      [super viewDidLoad];
   3  
   4  	_mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
   5  	_mapView.showsUserLocation=TRUE;
   6  	[self.view addSubview:_mapView];

実機でやると、地図は出るが現在位置に近い地図でないので??ですが、それはまた次で。

posted by Png satoko on Thu 3 Sep 2009 at 16:37

このtutorialから派生しました。かっこいいし、参考になるので是非!:

http://pinkzap.com/?p=390

パターンを作ってコピー

320の幅で作ろうとしたので、割り切れる20x20とか40x40で作った。そしてクリップボードにコピー。
dot_pattern.png

Bucket FillでPattern fill

Bucket FillのFill TypeでPattern fillを選択。パターンの中からClipboardを選ぶ(先に作成したパターンが選ばれていることを確認)。塗る、終わり。
blue_dots.png

posted by Png satoko on Tue 1 Sep 2009 at 22:25
posted by Png satoko on Tue 1 Sep 2009 at 01:26
Contents
[iPhone] frameworkのインストールの仕方
[git] 直前のコミットを修正する(ファイルやメッセージを変更):git commit --amend
[ruby] Sequelについてメモ
[git] タグのrename: git rev-parse, git tag -a -f
[iPhone] MapKitで遊ぼう:地図にピンではなく画像を配置する
[iPhone] Map Kitで遊ぼう:地図を出して現在位置にピンを立てる
GIMPとかで超簡単に水玉パターンを作る
Google Spreadsheetでの通貨設定:文書全体 or セル
Comments
KingofSmack: Here also good reads for this mobile applicatio... '14-5
satoko: stackoverflowでも同じエラーを挙げている人がいたので、1.3でアップロードしたよっ... '10-12
ujihisa: :%s/blog/glob/g '10-7
satoko: しゅが〜様 返事が遅くなって申し訳ありません。また、投稿百景ご購入ありがとうございます。 ... '09-10
しゅが~: こんにちは。投稿百景を発売日翌日から利用しています。本当にいいAppを作っていただきました。罫... '09-10
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ