「今日の日付」のような動的な値が必要な場合には "javascript{}" を利用する。 同ブロック内部の文字列は実行時に javascript コードとして評価され、 その評価結果が値として利用される。

例:いずれもabcが入力される
コマンド対象
typeval1abc
typeval1javascript{ "abc" }
typeval1javascript{ "ABC".toLowerCase() }

例:今日の日付を入力
コマンド対象
typedatejavascript{ var d=new Date(); d.getFullYear()+"/"+ ... }

posted by Png maiha on Wed 16 Sep 2009 at 19:03
click         ボタンやリンクをクリックする
clickAndWait  クリック後にページ遷移を待つ

例:ログイン(失敗)
コマンド対象
typeusermaiha
typepassxxxxx
clicklogin
verifyTextPresentようこそmaihaさん#ページ遷移が終わってないので失敗する

click を clickAndWait に変更すると成功する

posted by Png maiha on Wed 16 Sep 2009 at 06:46

数字だけのタグだとうまく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

pause を使う

pause(waitTime)
Arguments:
    * waitTime - the amount of time to sleep (in milliseconds)
Wait for the specified amount of time (in milliseconds)

例:3秒待つ
コマンド対象
pause3000

例:DHTMLの書き換えを待つ
コマンド対象
clicklink=詳細設定を開く
pause200
typesearch_number20

posted by Png maiha on Tue 15 Sep 2009 at 20:54

英語がちと不確実な僕はSkype Axes Developer Program Extrasを見て、SkypeAPI終了!?とか一瞬早とちりしてしまった。ここにも書いてあるけどThe future of Skype Extras - Skype Developer Zone Blog。SkypeAPIは続行。認証制度がとりあえずなくなるよと言うのが正しい。

これは不確実な英語ではなくSkypeの岩田さんに日本語で確かめたから確かだ(速攻チャット送るところ相当慌ててた自分が見て取れる orz) 岩田さん曰く「僕にとっては無償で API が使えるようになる、ってことだと思っているんですけどね。」との事。もともと無償ではあるけどより広く野に降り立つ?って事かなぁ。そして、いずれはより良いプログラムだすよーっとのことでした。

あぁ今SkypeAPI使った仕事をしようかと言うところだったのでちょっと安心した。さて安心したところでRuby4SkypeのLinux対応にもどるかな。これThread使った所で難航しているけど。これができればTwitter4Skypeも元に戻せるかもしれない。

今日も野良デベロッパーは行くぜー

posted by Png bopper on Mon 14 Sep 2009 at 03:45

LogicoolのMX-Rを使っていたんだけど左クリックが押すと一発でダブルクリックが発生するようになってしまった。これは機械的な接点(スイッチ)が振動して酷いチャタリングを起こし始めたんだと思う。要するに壊れたんだ。

で、まぁ貧乏NEETとしては何とか安く問題を解決したいわけで(高いマウスだったしね)新しいマウスを買う前に何かと調べるわけです。分解してどうにかならないかーとかさ。

そしたらこんなものを見つけた マウスチャタリングキャンセラ。マウスの入力をいったん奪って、ダブルクリックが人間が押すよりも速い速度で入力されてる場合はシングルクリックとしてOSへ渡すソフトだと思う。

ダメもとで試したけど、これかなりイイ。壊れたハードだなんて微塵も感じられない。まったく正常な状態に戻ってしまった。もちろん遅延だって感じられない(ゲームとか厳しいかもしれないけど)

ソフトウェアでハードの故障を直してしまった!これはソフト屋の端くれとしてはちょっとした感動なんだな。

#下位の問題を上位層で無理やり修正するプログラムは組みたくないんだけどねw

posted by Png bopper on Thu 10 Sep 2009 at 06:01

Skype API関係で仕事したり逃げたりしてる某社社長から、、、

朗報というか私にとっては不幸なお知らせが。私のMacBookが雨の直撃でやられてしまいました。それでしばらく乾かしてダメだったら新しいのを買おうと思ってるんですが,そうなったら壊れたヤツいりますか?
そ、それはラッ、、、いや、御悔みを申し上げます。
つーかください。早くください。壊れててもください

それでやってきた来た訳なんですけど

電源入れたら普通に動いたw

っくぅ。あの社長、オレを嵌めたな!
動かないなんて口実でNEETに慈悲を与えたつもりか!!カッコつけやがってー
そんな事ないですよ、動いて私もビックリです。むしろ何も努力しないで手に入れた事が悔しいくらいです。
、、、

数時間後

TextMate入れれて、gemアップデートして、トラックパッドでジェスチャースゲー。
ん?なんかバッテリー認識してないな。バッテリ側のインジケーターは生きてるし まぁちょっと外してみっか
あ、あれ?電源押しても、、、動かないぞ
え?えぇっ!?マジ!?
、、、
あんなにセットアップしたのに、、、
もういいや、ゲームでもしよー
ホロホロホロホー・・

更に数時間後、、、

じゃ~ん♪
勝手に電源が!
Macは滅びぬ、何度でも蘇るさ!

なーんか振り回されっぱなしw。今は怖くて火入れっぱなしです。まぁともかく、ようやくRuby4SkypeのMac対応が書ける。めでたしめでたしっと。

posted by Png bopper on Thu 10 Sep 2009 at 03: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

Snow LeopardでMySQLの64-bitバイナリのインストールまではメモなしでできてしまうけど、その後のmysql gemのインストールするためのおまじないはなかなか覚えられないからメモ書きする。

   1  sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

なぜARCHFLAGSが必要かというと、gem installする時に32-bitと64-bit両方に対応するgemをビルドしようとするけど、mysqlのバイナリは64-bitのみ(つまりUniversalじゃない)からARCHFLAGSでx86_64を明示的に指定しないとビルドが失敗する。mysql gemは例外的なケースらしいから、tmtmさんに早く直してほしいな。

参考リンク

posted by Face lchin on Tue 8 Sep 2009 at 16:42

GAEなどでファイル数の多いライブラリを使うために、gemのパッケージから不要そうなファイルを消してjarファイルにまとめるために作ったスクリプトです。

   1  #!/usr/bin/env ruby
   2  
   3  def run(command)
   4    puts command
   5    system command
   6  end
   7  
   8  case ARGV[0]
   9  when 'install'
  10    run "jgem install -i ./gems --no-ri --no-rdoc #{ARGV[1]}"
  11  when 'uninstall'
  12    run "jgem uninstall -i ./gems #{ARGV[1]}"
  13  end
  14  
  15  Dir['gems/gems/*'].each do |dir|
  16    %w(
  17      Generaters TODO README.* README
  18      spec/**/* test/**/* examples/**/* tasks/**/*
  19      tutorial/**/* demo/**/* website/**/*
  20      CHANGES CHANGES.txt CHANGELOG
  21      LICENSE MIT-LICENSE Rakefile CONTRIBUTORS
  22      Manifest.txt History.txt install.rb setup.rb
  23    ).each do |pattern|
  24      Dir[File.join(dir, pattern)].each do |path|
  25        run "rm -rf #{path}"
  26      end
  27    end
  28  end
  29  
  30  Dir['gems/cache', 'gems/bin', 'gems/doc'].each do |path|
  31    run "rm -rf #{path}"
  32  end
  33  
  34  run "jar cf lib/merb.jar -C ./gems ."

posted by Png genki on Mon 7 Sep 2009 at 19:16 with 2 comments