最近、処理の中に、オフラインかオンラインか判断する機会が増えてきたわけですが、そのときに、google chromeでなぜか、下のようにプログラムを組んでも、trueを返してしまうケースがある。
navigator.onLineで、これ、
HTML5でネットワーク状態をうまく扱うためのAPIたち
で確認すると、ローカルネットワークや仮想のネットワークにつながっているときですらtrueになるので、注意が必要ですね。
常にテンパってます。
最近、処理の中に、オフラインかオンラインか判断する機会が増えてきたわけですが、そのときに、google chromeでなぜか、下のようにプログラムを組んでも、trueを返してしまうケースがある。
navigator.onLineで、これ、
JavaScriptで画像にblur効果をつけることってできないのかなーっとぐぐっていたら、
background-blurプラグイン
を発見したので、その使い方を勉強しました。
<script src="jquery.min.js"></script> <script src="background-blur.min.js"></script>でJavaScriptの準備を行う。
<div class='_hoge'></div>
$('._hoge').backgroundBlur({
imageURL : 'http://URL-of-the-image',
blurAmount : 50,
});イベントオブジェクトで取得できるClientX ClientYって改めて単位ってなんだろうと検索していると
HtmlEventArgs.ClientX プロパティ
ってのを発見して、そこには、「px(ピクセル)」とありました。
DLしたRealm Browserでアプリ内で作ったDBのデータを閲覧しようかなーっと思ったら見れないんだけど。。。
どうやら、セキュリティーの都合で見れないんだけど。
これ、セキュリティーのありなしにかかわらず見れるようにしてほしんですけど。。。
昨日、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の悩みが解消されず。
writesセクションを読みながらinsertトランザクションを書いてみた。
Hoge *hoge = [[Hoge alloc] init]; hoge.foo = @"hello realm"; RLMRealm *realm = [RLMRealm defaultRealm]; [realm beginWriteTransaction]; [realm addObject:hoge]; [realm commitWriteTransaction];これ、確かに、デバッグしたら、データが入っていたんだけど、トランザクションがこけた時の処理って、どうすればいいんだろー。
imgタグで
div {
margin:0;
padding:0;
}と設定しても余白ができてしまう現象があり、この古典的な悩みを解決するために調べたところ、div {
margin:0;
padding:0;
line-height:0;
}line-height:0を追加すればいけることが判明し、確かに、これ追加したら、余白がなくなった。<div> <img src=""><img src=""> </div>
最近、CoffeeScriptの継承について使う機会があったので、試しに使ったみた。
まずは、下のように組んでみた。
class Hoge
constructor: (@opts) ->
console.log "hoge Parent"
class Foo extends Hoge
constructor: (@opts) ->
console.log "hoge Child"
結果的に、 class Hoge
constructor: (@opts) ->
console.log "hoge Parent"
class Foo extends Hoge
constructor: (@opts) ->
console.log "hoge Child"
この場合、両方コールされた。ない。
ずばり、現行バージョンのRealmでは、autoincrementがない。
一般的に先頭に「.」がつくファイルは、finderでは隠れてしまうので、.gitignoreをfinderから開くことはできない。
そこで、ターミナルから開こうとしたのだが、lsコマンドを叩いても、.gitignoreファイルが表示されないので、調べたところ、下記コマンドで開くことができました。
ls -a
opne .gitignoreこれ、開くことはできたんだけど、できれば、sublimeで開くことはできないのだろうか?
iOS9環境下でadmobを表示する場合には、
iOS 9 Considerations
で確認すると、Info.plistの
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>を設定し、projectの新しいバージョンのOWL Carousel 2でinit完了後のコールバックを受け取るには、どうすればいいのだろうか?
$owlCarousel = $ ".owl-carousel"
$owlCarousel.owlCarousel {
onInitialized:(event)->
}onInitializedメソッドで確かにいけましたー。CLLocationCoordinate2D型の変数を作るには、どうすればいいのだろうか?
How to convert latitude longitude into CLLocationCoordinate2D
を確認すると、
CLLocationCoordinate2DMake(CLLocationDegrees latitude, CLLocationDegrees longitude)を使えばいいみたい。
デバッグ目的で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]];
}
でいけるとあったので、上のメソッドを使ったら確かに変更された。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
}
昨日のエントリーでMKAnnotationViewのタップ判定をする方法を書きました。
そこで、実際にタップできたのですが、今度は、タップした際にハイライトを元に戻す方法が見つからず調査しました。
- (void)deselectAnnotation:(id上のメソッドをコールしたらハイライトを消すことができました。)annotation animated:(BOOL)animated
MKMapViewのaddAnnotationメソッドで追加したMKPointAnnotationをタップしたときの判定はどうすればいいのだろうか?
MKMapView MKPointAnnotation tap event
によると、MKMapViewDelegateの
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)viewで取得することができそうだ。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(idで追加しなかったMKPointAnnotationでも取得することができた。)annotation
メール転送処理を書いていたところ、動作確認している際になかなか転送されないなーっと思ってログをみていたら、下のようなエラーが発生。
InvalidSenderError: Unauthorized sender
で、これなんでかなーっと思っていたら、
GoogleAppEngineでメールを送信しようとしたら、InvalidSenderError: Unauthorized sender
というエントリーを発見して、どうやら、承認を得た送信者からしかメールを送信することができないようだ。
確かによくよく考えてみるとそりゃーそうだと。
もし、任意の送信者が設定できてしまうとスパムメール送れてしまうからね。
納得する仕様でした。
スクラッチカードのようなエフェクト効果を入れられる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>いい感じでスクラッチできるので便利ですね。JavaScriptでandroidのタブレットかどうか判定する方法はあるのだろうか?
Androidでモバイルとタブレット(+iPhone/iPad)を振り分ける方法
で確認すると、userAgentにmobileという文字列が入っている場合androidのモバイルで、入っていない場合はタブレットになるようなので、
var u = navigator.userAgent.toLowerCase();
if(userAgent.indexOf('android') > 0 && userAgent.indexOf('mobile') == -1){
}でいける。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を使ってアニメーションしながらグラフを描画するにはどうすればいいのだろうか?
Animated Charts
によると、下のようにanimate: trueプロパティーを設定すればおkみたい。
<script>
jQuery(function($){
$.jqplot('chartdiv',[...],{
animate: true
}
});
</script>
<div id="chartdiv" style="height:500px;width:1000px; "></div>
postdに
Chrome開発者ツールの小技集
という便利なデバッグ集があったので、備忘録まで
htmlメールを送信するには、どうすればいいのだろうか?
ずばり下のようにすればおけみたい。
mail.send_mail( sender_address, user_address, subject, plaintext_body, html=html_body )これ、少し気になったのは、プレーンテキストが必須ということ。
メール受信 その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にしました。メール受信 その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()で取得することができる。