2014/10/30

[Google App Engine]ターミナルから各モジュール及びdispatch.yamlを起動する

GoogleAppEngineLauncherを使わずにターミナルから手動で複数モジュール及びdispatch.yamlを起動するにはどうすればいいのだろうか?
Run App Engine development server with modules in PyCharm
を読みながら下のようにターミナルで実行したらできた。

dev_appserver.py app.yaml dispatch.yaml module1.yaml module2.yaml
これすっげー、便利ー。

2014/10/29

[Objective-C][iOS]UITableViewCellのcellの再利用について

UITableViewCellを使って以下のようにプログラムを組む時があります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if(cell == nil){
    cell = [UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    
  }

  UIView *view;
  [cell.contentView addSubview:view];
  return cell;
}
これだと、cellごとにUIView *viewが違う場合
ex)
row = 0の時、UISwitch
row = 1の時、UIButton
row = 2の時、UILabel

の時は、再利用すると大変なことになるので、下のように組み直したらうまくいった。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%ld",(long)indexPath.row];
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if(cell == nil){
    cell = [UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    
  }

  UIView *view;
  [cell.contentView addSubview:view];
  return cell;
}
ただ、この方法でも100行とか行がたくさんあると成立しないので、注意が必要です。

2014/10/28

[JavaScript]AndroidだけHTMLがキャッシュしてしまう問題

android.2.X系でjsがキャッシュする問題

iOSでjs、htmlがキャッシュする問題
でも書いたように下記の方法でキャッシュが完全にクリアーできると思ってました。

window.onunload = function() { };
window.onpageshow = function(event) {
  if (event.persisted) {
    location.reload();
  }
};
がしかし、検証してみると、AndroidだけキャッシュされたHTMLが表示されてしまう。

ここでポイントは、JSの処理はキャッシュされていないのである。

どいうことかというと、ページで「進む」、「戻る」を押しても、
window.onpageshow = function(event) {
  if (event.persisted) {
    location.reload();
  }
};
のevent.persistedがfalseを返してしまうのである。

これはどういうことかというと、
bfcache について覚えて帰ってもらいます。(転載)
に書いてあるように、どうやら「bfcache」が働いているらしく、HTMLのmetaタグで回避できないようなのである。

で、同エントリーに記載されているようにheaderのCache-Controlに「no-cache, no-store」を設定したところ、HTMLも最新の状態で表示することができた。

bfcache自体は大分前からある仕様のようです。

2014/10/27

[JavaScript]iOSでjs、htmlがキャッシュする問題

前回、android.2.X系でjsがキャッシュする問題について書きました。

で、

window.onunload = function() { };
だけで、iOSも大丈夫かなーっと思ったらダメだった。

どうするかと調べたました。

参考サイト
Mobile Safari で戻るボタンを使えなくする (iOS 7)
Mobile Safari back button
pageShow event in javascript
WebKit Page Cache II – The unload Event

結果的に、下のプログラムで落ち着きました。
window.onpageshow = function(event) {
  if (event.persisted) {
    location.reload();
  }
};
確かに、ページキャッシュしたページにアクセスしたときにリロードすることができましたー。

2014/10/26

[JavaScript]CSSのプロパティーをpx,%,em抜きで取得する

ちょっとJavaScriptでCSSの値を取得して計算する作業が発生したのだが、タイトルの通り、「px」、「%」、「em」がうざい。

これを省くことはできないのだろうか?

How to get just numeric part of CSS property with jQuery?
で確認すると、parseIntをつかえばおkとのこと。

var width = $('#hoge').css(width);
width = parseInt(width,10);
console.log(width)

2014/10/25

[facebook][objective-c]GraphAPI経由で写真をアップロード

前回、クラスメソッドを使ってobjective-cからfacebookに写真を共有する方法を書きました。

で、この方法では、メッセージを付与することができません。

メッセージをつきで写真を共有するには、以下のように組む必要があります。

UIImage *image;
NSString *message;
FBRequest *fBRequest = [FBRequest alloc] requestWithGraphPath:@"me/photos"
                                         parameters:@{"picture":image,@"message":message}
                                         HTTPMethod:@"POST"];
[fBRequest startWithCompletionHandler:^(FBRequestConnection *connection,id result,NSError *error){
  if(!error){
    NSLog(@"OK");
  }
}];
ポイントは、GraphAPIのphotosにも記載されていないpictureというパラメータに実際のイメージを設定するということ。

試したらうまくいったので、今度からこれを使うぞと。

2014/10/24

[jQuery]flickSimpleプラグインで自動flick式ローテーションバナー

昨日、flickSimpleプラグインの導入方法について書きました。

で、今度は、自動でローテーションするflick式ローテーションバナーの作り方を調査しました。

#flick {
  width: 100%;
  max-width:690px;
  position: relative; /* IE6・7の overflowバグ回避 */
  overflow: hidden; /* JavaScript無効時にスクロール表示させたいから */
}
 
#flick ul {
  display: block;
  width: 1000%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}
 
#flick ul li {
  float: left;
  list-style-type: none;
  width: 100%;
  max-width:690px;
  height:100px
}
<div id="flick">
  <ul>
    <li style="background-color:red;">1</li>
    <li style="background-color:blue;">2</li>
    <li style="background-color:yellow;">3</li>
    <li style="background-color:green;">4</li>
  </ul>
</div>
jQuery(function($){
  var nLen = $('#flick > ul > li').length;
 
  $('#flick > ul').css({
    width:(100*nLen) + '%'
  });
 
  $('#flick').flickSimple({
    snap: 'first',
  });
   
  var flick = $('#flick').flickSimple();
  setInterval(function(){
    if ( flick.startX != null ) { return; }
    (flick.pageLength < flick.page +1 )? flick.goTo(1): flick.nextPage(1);
  },3000);
});
これポイントは、
var flick = $('#flick').flickSimple();
とオブジェクト化しているところ。

2014/10/23

[jQuery]flickSimpleプラグインの導入

スマホでよく見かけるflickバナー。

これを手軽に実装する手立てはないかとぐぐったら、jQuery.flickSimpleという素敵なプラグインを発見したので、使い方を勉強しますた。

jQuery.flickSimple.jsをGithubからダウンロード。

#flick {
  width: 100%;
  max-width:690px;
  position: relative; /* IE6・7の overflowバグ回避 */
  overflow: hidden; /* JavaScript無効時にスクロール表示させたいから */
}

#flick ul {
  display: block;
  width: 1000%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

#flick ul li {
  float: left;
  list-style-type: none;
  width: 100%;
  max-width:690px;
  height:100px
}
<div id="flick">
  <ul>
    <li style="background-color:red;">1</li>
    <li style="background-color:blue;">2</li>
    <li style="background-color:yellow;">3</li>
    <li style="background-color:green;">4</li>
  </ul>
</div>
jQuery(function($){
  var nLen = $('#flick > ul > li').length;

  $('#flick > ul').css({
    width:(100*nLen) + '%'
  });

  $('#flick').flickSimple({
    snap: 'first',
  });
  
});
JavaScriptで動的にwidthの設定をしているのですが、逆にこの処理がないと、#flick > ulが1000%となっているため、適切に処理をしてくれないようです。

それにしても便利だなー、このプラグイン。

2014/10/22

[PHP]ヒアドキュメント内のforループについて

ヒアドキュメントの中でforループを実行することはできるのだろうか?

print <<<EOT
for($i=0;$i<10;$i++){
  $hoge
}
EOT;
上のように実行したら見事にエラーが発生。

同じ悩みを抱えた人がいました。
ヒアドキュメントの中のfor文
でどうやら、上の文章を読むとできないようです。

なーんだ。できないのかよ。

2014/10/21

[jQuery][jqplot]マウスオーバーした時のハイライトをoffにする

jqplotで作成されたグラフはデフォルトでマウスオーバーするとハイライトしてしまいますが、オフにする方法はあるのだろうか?

$.jqplot('linechart', [...] ,{
  seriesDefaults: {
    rendererOptions: {
      highlightMouseDown: true
    }
  }
});
上のようにhighlightMouseDownパラメータをtrueにするとハイライトしないようになります。