2015/11/30

[JavaScript]navigator.onLineでオフラインでもtrueを返してしまう件

最近、処理の中に、オフラインかオンラインか判断する機会が増えてきたわけですが、そのときに、google chromeでなぜか、下のようにプログラムを組んでも、trueを返してしまうケースがある。

navigator.onLine
で、これ、

HTML5でネットワーク状態をうまく扱うためのAPIたち

で確認すると、ローカルネットワークや仮想のネットワークにつながっているときですらtrueになるので、注意が必要ですね。

2015/11/29

[jQuery]画像にblur効果をつけるbackgroundBlurプラグイン

JavaScriptで画像にblur効果をつけることってできないのかなーっとぐぐっていたら、

background-blurプラグイン

を発見したので、その使い方を勉強しました。

<script src="jquery.min.js"></script>
<script src="background-blur.min.js"></script>
でJavaScriptの準備を行う。

次にhtmlエレメントを用意する。
<div class='_hoge'></div>

最後にinitを行う。
$('._hoge').backgroundBlur({
    imageURL : 'http://URL-of-the-image',
    blurAmount : 50,
});

で、実行した結果、class="_hoge"に対して、cssでwidthとheightの設定が必要でしたがそれ以外は、上の手順でblur効果をつけることができましたー。

2015/11/28

[JavaScript]ClientX ClientYの単位について

イベントオブジェクトで取得できるClientX ClientYって改めて単位ってなんだろうと検索していると

HtmlEventArgs.ClientX プロパティ

ってのを発見して、そこには、「px(ピクセル)」とありました。

2015/11/27

[iOS][Objective-C][Realm]作成したDBの中身がViewerアプリで閲覧できない

DLしたRealm Browserでアプリ内で作ったDBのデータを閲覧しようかなーっと思ったら見れないんだけど。。。

どうやら、セキュリティーの都合で見れないんだけど。

これ、セキュリティーのありなしにかかわらず見れるようにしてほしんですけど。。。

2015/11/26

[Realm][iOS][Objective-C]updateトランザクション

昨日、insertトランザクションについて書いたので、今度は、updateトランザクションについて。

RLMResults *rLMResults;
Hoge *hoge = [RLMResults objectAtIndex:0];
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
hoge.foo = @"update realm data";
[realm commitWriteTransaction];
これでupdateできたんですが、以前、try-catchの悩みが解消されず。

2015/11/25

[Realm][iOS][Objective-C]insertトランザクション

writesセクションを読みながらinsertトランザクションを書いてみた。

Hoge *hoge = [[Hoge alloc] init];
hoge.foo = @"hello realm";
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm addObject:hoge];
[realm commitWriteTransaction];
これ、確かに、デバッグしたら、データが入っていたんだけど、トランザクションがこけた時の処理って、どうすればいいんだろー。

try-catchみたいにしたんだけど。

2015/11/24

[css]imgタグに余白ができてしまう件

imgタグで

div {
  margin:0;
  padding:0;
}
と設定しても余白ができてしまう現象があり、この古典的な悩みを解決するために調べたところ、
div {
  margin:0;
  padding:0;
  line-height:0;
}
line-height:0を追加すればいけることが判明し、確かに、これ追加したら、余白がなくなった。

ちなみに元になるコーディングデータは
<div>
  <img src=""><img src="">
</div>

参考
imgとimgの間の余白を消す。

2015/11/23

33に

なっちゃったwww

2015/11/22

[CoffeeScript]継承について

最近、CoffeeScriptの継承について使う機会があったので、試しに使ったみた。

まずは、下のように組んでみた。

  class Hoge
    constructor: (@opts) ->
      console.log "hoge Parent"

  class Foo extends Hoge
    constructor: (@opts) ->
      console.log "hoge Child"
結果的に、
hoge Parentは呼ばれずに
hoge Childだけが表示された。

次に、下のようにした。
  class Hoge
    constructor: (@opts) ->
      console.log "hoge Parent"

  class Foo extends Hoge
    constructor: (@opts) ->
      console.log "hoge Child"
この場合、両方コールされた。

ってことは、明示的にsuperを呼ばないと親が呼ばれないようになっているようだ。
その辺は、objective-cと同じだね。

欲をいうと、delegateみたいなものも欲しくなったんだけど、どうするんだろー。

2015/11/20

[realm][iOS][Objective-C]Realmはautoincrementが

ない。

ずばり、現行バージョンのRealmでは、autoincrementがない。

2015/11/19

[realm][objective-c][iOS]Realmをインストール

realmをインストールするためにcocoapodsで下記のコードを入れた。

platform :ios, "7.0"
pod 'Realm'
これでインストールできました。

2015/11/18

[git][mac]gitignoreファイルを開く

一般的に先頭に「.」がつくファイルは、finderでは隠れてしまうので、.gitignoreをfinderから開くことはできない。

そこで、ターミナルから開こうとしたのだが、lsコマンドを叩いても、.gitignoreファイルが表示されないので、調べたところ、下記コマンドで開くことができました。

ls -a
opne .gitignore
これ、開くことはできたんだけど、できれば、sublimeで開くことはできないのだろうか?

引き続き調査が続く。

参考URL
Trying to open .gitignore to edit it in text editor but cannot find location of file on OS X Mountain Lion

2015/11/16

[iOS][Objective-C]admobのiOS9対応

iOS9環境下でadmobを表示する場合には、
iOS 9 Considerations
で確認すると、Info.plistの

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
を設定し、projectの
Build Settings→Build Options→Enable Bitcode
をNOに設定する必要があるみたいです。

確かにこれで表示できた。

2015/11/15

[jQuery]OWL Carousel 2プラグインでinit完了コールバック関数について

新しいバージョンのOWL Carousel 2でinit完了後のコールバックを受け取るには、どうすればいいのだろうか?

$owlCarousel = $ ".owl-carousel"
$owlCarousel.owlCarousel {
  onInitialized:(event)->

}
onInitializedメソッドで確かにいけましたー。

2015/11/14

[iOS][Objective-C]CLLocationCoordinate2Dを作成

CLLocationCoordinate2D型の変数を作るには、どうすればいいのだろうか?

How to convert latitude longitude into CLLocationCoordinate2D
を確認すると、

CLLocationCoordinate2DMake(CLLocationDegrees latitude, CLLocationDegrees longitude)
を使えばいいみたい。

確かに、これ使ったらできたわ。

LLocationCoordinate2DMake

2015/11/13

[iOS][Objective-C]UITableViewCellのdetailTextLabelの背景色を変更

デバッグ目的でUITableViewCellのdetailTextLabelの背景色を変更したくて、下記のようにしても変わらなかったwww

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  UITableViewCell *cell;
  cell.detailTextLabel.backgroundColor = [UIColor redColor];
  return cell;
}
Changing UITableViewCell textLabel background color to clear
によると、
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
     [[cell textLabel] setBackgroundColor:[UIColor clearColor]];
     [[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];
}
でいけるとあったので、上のメソッドを使ったら確かに変更された。

2015/11/12

[jQuery]OWL Carouselプラグインが無限ループできない件

OWL Carouselを使って無限ループできないのかなーっと調査していたら、ちょーど同じことを考えている人が、stackoverflowにいました。

Is it possible to implement a circular/infinite carousel using owl carousel?

で、上の質問によると、どうやら、最新バージョンの
Owl Carousel 2
を使ってくれということらしく、実際に、下のように組んだら確かに、無限ループしました。

$owlCarousel = $ ".owl-carousel"
$owlCarousel.owlCarousel {
  loop:true
}

2015/11/11

[iOS][Objective-C]MKAnnotationViewのタップ時のハイライトを元に戻す

昨日のエントリーでMKAnnotationViewのタップ判定をする方法を書きました。

そこで、実際にタップできたのですが、今度は、タップした際にハイライトを元に戻す方法が見つからず調査しました。

- (void)deselectAnnotation:(id)annotation animated:(BOOL)animated
上のメソッドをコールしたらハイライトを消すことができました。

2015/11/10

[iOS][Objective-C]MKAnnotationViewのタップ判定

MKMapViewのaddAnnotationメソッドで追加したMKPointAnnotationをタップしたときの判定はどうすればいいのだろうか?

MKMapView MKPointAnnotation tap event
によると、MKMapViewDelegateの

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
で取得することができそうだ。

確かに、タップを確認することができて、
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation
で追加しなかったMKPointAnnotationでも取得することができた。

2015/11/09

[Google App Engine][Python]メール送信のfromについて

メール転送処理を書いていたところ、動作確認している際になかなか転送されないなーっと思ってログをみていたら、下のようなエラーが発生。

InvalidSenderError: Unauthorized sender

で、これなんでかなーっと思っていたら、

GoogleAppEngineでメールを送信しようとしたら、InvalidSenderError: Unauthorized sender

というエントリーを発見して、どうやら、承認を得た送信者からしかメールを送信することができないようだ。

確かによくよく考えてみるとそりゃーそうだと。

もし、任意の送信者が設定できてしまうとスパムメール送れてしまうからね。

納得する仕様でした。

2015/11/08

[jQuery]スクラッチカードのような処理をするplugin

スクラッチカードのようなエフェクト効果を入れられるpluginを調査しました。
wScratchPad.js
を使えばできるみたいです。

<script type="text/javascript" src="./wScratchPad.min.js"></script>
<div class="hoge"></div>
<script>
$('.hoge').wScratchPad({
  bg : '#000000', //画像の指定もできる
  fg : '#ffffff', //画像の指定もできる
  realtime : true, //スクラッチした割合をリアルタイムで算出したい場合はtrue
  scratchDown: function(e, percent){ console.log(percent); },
  scratchMove: function(e, percent){ console.log(percent); },
  scratchUp: function(e, percent){ console.log(percent); }
});
</script>
いい感じでスクラッチできるので便利ですね。

2015/11/07

[Android][JavaScript]タブレット判定

JavaScriptでandroidのタブレットかどうか判定する方法はあるのだろうか?

Androidでモバイルとタブレット(+iPhone/iPad)を振り分ける方法
で確認すると、userAgentにmobileという文字列が入っている場合androidのモバイルで、入っていない場合はタブレットになるようなので、

var u = navigator.userAgent.toLowerCase();
if(userAgent.indexOf('android') > 0 && userAgent.indexOf('mobile') == -1){

}
でいける。

2015/11/06

[jQuery][jqplot]y軸の向きを逆にする

jqplotを使ってy軸の向きを逆にするにはどうすればいいのだろうか?
(incrementではなく、decrement)

<script>
jQuery(function($){
  $.jqplot('chartdiv',[...],{
    yaxis:{
      max:1
      min:10
    }
  }
});
</script>
<div id="chartdiv" style="height:500px;width:1000px; "></div>
ずばりminに大きい値を設定しておいて、maxにminよりも小さい値を設定したら、軸の向きが逆転したー。

参考
jqplot reversing y axis points and other problems

2015/11/05

[jQuery][jqplot]アニメーションしながらグラフを描画

jqplotを使ってアニメーションしながらグラフを描画するにはどうすればいいのだろうか?

Animated Charts
によると、下のようにanimate: trueプロパティーを設定すればおkみたい。

<script>
jQuery(function($){
  $.jqplot('chartdiv',[...],{
    animate: true
  }
});
</script>
<div id="chartdiv" style="height:500px;width:1000px; "></div>

2015/11/04

[css][html][javascript]chromeを使った便利なデバッグ集

postdに
Chrome開発者ツールの小技集
という便利なデバッグ集があったので、備忘録まで

2015/11/03

[Python][Google App Engine]htmlメールを送信する

htmlメールを送信するには、どうすればいいのだろうか?

ずばり下のようにすればおけみたい。

mail.send_mail(
  sender_address,
  user_address,
  subject,
  plaintext_body,
  html=html_body
)
これ、少し気になったのは、プレーンテキストが必須ということ。
html文章が空じゃーないんだから、別に必須じゃなくてもいいと思うのだが。

参考URL
Google App Engine: how to send html using send_mail

2015/11/02

[Python][Google App Engine]メール受信 その4

メール受信 その1では、メール受信を行うまでの過程を
メール受信 その2では、受信したメールの情報を取得する方法を書きました。
メール受信 その3では、受信したメールのcontent typeの情報を取得する方法を書きました。
で、そこで何回かメール受信を試してみて、メールのタイトルがない場合

subject = mail_message.subject
このスニペットがある場合、エラーになってしまうので、エラーハンドリングについて書く。
import webapp2
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
 
class HogeHandler(InboundMailHandler):
  def receive(self, mail_message):
    original = mail_message.original
    content_type = original.get_content_type()
    sender = mail_message.sender
    try:
      subject = mail_message.subject
    except AttributeError:
      subject = ""
    plaintext_bodies = mail_message.bodies('text/plain')
    html_bodies = mail_message.bodies('text/html')
    for content_type, body in html_bodies:
       decoded_html = body.decode()

       
エラーの内容がAttributeErrorなので上のようなtry~exceptにしました。

2015/11/01

[Python][Google App Engine]メール受信 その3

メール受信 その1では、メール受信を行うまでの過程を
メール受信 その2では、受信したメールの情報を取得する方法を書きました。
今日は、メールのcontent typeの取得方法について書きたいと思います。

import webapp2
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
 
class HogeHandler(InboundMailHandler):
  def receive(self, mail_message):
    original = mail_message.original
    content_type = original.get_content_type()
    sender = mail_message.sender
    subject = mail_message.subject
    plaintext_bodies = mail_message.bodies('text/plain')
    html_bodies = mail_message.bodies('text/html')
    for content_type, body in html_bodies:
       decoded_html = body.decode()

       
という形で、
original = mail_message.original
content_type = original.get_content_type()
で取得することができる。