あんパン

こしあん派

VimとSyntasticでECMAScript 6の構文チェックをする

Syntasticを使うと良い感じに構文チェックをしてくれる。JavaScriptの構文をチェックするのにいままでjshint使ってたんだけど、いろいろ調べてたらeslintの方が良いのではないかという気持ちになってきたので乗り換えた。(jshintでもES6対応それなりにされてる気がする)

eslintのインストール

$ npm install -g eslint

Syntasticの設定を書き換える

.vimrcを書き換える。

let g:syntastic_javascript_checkers=['eslint']

最初からjshint入ってるとそれが優先されるっぽい?jshintとeslintを一緒に入れた場合優先度とかを指定する必要がありそうだった。

.eslintrcを書く

$HOME/.eslintrcを書く。とりあえず差し迫って欲しいのはテンプレートリテラルの対応だったのでそれだけ書いた。

{
  "ecmaFeatures": {
    "templateStrings": true
  }
}

結構いろいろ設定できるっぽい。

eslint.org

iOSとAndroidのブラウザにおけるタッチイベントの発火タイミング

事前説明

  • iOS 8.4
  • Android 4.4.4

TL;DR

  • iOSは妥当な動きをする
  • Androidはタップ操作のときtouchendの後に何故かselectionchangeが発火する
  • Android標準ブラウザには不具合があって、touchmoveが走るとtouchendが発火しない
  • Androidにはgestureイベントが存在しない
  • どれも文字選択後の発火するselectionchangeの後にはtouchendが発火しない

併せて読みたい

masawada.hatenablog.jp

検証

iOS

通常のタッチ操作

[Log] touchstart (test.js, line 6)
[Log] touchmove (test.js, line 12, x93)
[Log] touchend (test.js, line 21)

タップ

[Log] touchstart (test.js, line 6)
[Log] touchend (test.js, line 21)

文字列を選択

[Log] touchstart (test.js, line 6)
[Log] selectionchange (test.js, line 26)
[Log] touchend (test.js, line 21)

文字列を選択後範囲を変更

[Log] touchstart (test.js, line 6)
[Log] selectionchange (test.js, line 26)
[Log] touchend (test.js, line 21)
[Log] selectionchange (test.js, line 26, x2)

gesture操作

[Log] touchstart (test.js, line 2)
[Log] gesturestart (test.js, line 18)
[Log] touchstart (test.js, line 2)
[Log] touchmove (test.js, line 6)
[Log] gesturechange (test.js, line 22)
[Log] touchmove (test.js, line 6)
[Log] gesturechange (test.js, line 22)
[Log] touchmove (test.js, line 6)
[Log] gesturechange (test.js, line 22, x2)
[Log] touchmove (test.js, line 6)
[Log] gesturechange (test.js, line 22)
[Log] touchmove (test.js, line 6)
[Log] gesturechange (test.js, line 22, x5)
[Log] gestureend (test.js, line 26)
[Log] touchend (test.js, line 10)
[Log] touchmove (test.js, line 6)
[Log] touchend (test.js, line 10)

読み取るの難しいが

  • gesurestartの後に2本目のtouchstartが発火している気がした
  • gesturechangeとtouchmoveは交互に襲ってくる

Android(Chrome)

通常のタッチ操作

test.js:6 touchstart
test.js:12 touchmove
test.js:21 touchend

タップ

test.js:6 touchstart
test.js:21 touchend
test.js:26 selectionchange

文字列を選択

test.js:6 touchstart
test.js:26 selectionchange
test.js:21 touchend

文字列を選択後範囲を変更

test.js:6 touchstart
test.js:26 selectionchange
test.js:21 touchend
test.js:26 selectionchange

Android(標準ブラウザ)

通常のタッチ操作

touchstart test.js:6
touchmove test.js:12

タップ

touchstart test.js:6
touchend test.js:21
selectionchange test.js:26

文字列を選択

touchstart test.js:6
selectionchange test.js:26
touchend test.js:21

文字列を選択後範囲を変更

touchstart test.js:6
selectionchange test.js:26
touchend test.js:21
selectionchange test.js:26

父親のブログをWordPressからはてなブログに移行した

staff.hatenablog.com

↑いいの出たので画像を移行したくてこのページをご覧になった方はこの機能をご利用ください!!!!


結構前から父親のブログをWordPressでやっていて、最近ずっとメンテがだるいと思っていた。

staff.hatenablog.com

この前はてなブログがWordPressインポートに対応したので、WordPressからはてなブログに移行してみた。手順は以下の通り。

まず、ツール>エクスポートを選択して、全てのコンテンツをWXR形式でエクスポートした。

f:id:masawada:20150718231125p:plain:w300

f:id:masawada:20150718231126p:plain

次に、画像をはてなフォトライフに上げ直した。といっても、もちろん手動で上げ直すのは生産的でないので、アップロードするためのスクリプトを書いた。はてなフォトライフにはAtomAPIがあるので、これを活用した。

masawada.hatenablog.jp

基本的にはこの記事に書いた通りでアップロードすることができる。僕の場合はこれを元にして

  1. 画像URLを正規表現で抽出
  2. 抽出したURLから画像をダウンロード
  3. ダウンロードした写真をアップロード
  4. レスポンスに載っている写真のid(f:id:masawada:20150718231126p:imageみたいなのが返ってくる)をmarkdownぽく整形して元の写真と置換

みたいな流れで写真を上げ直した。

WordPressは標準の機能で写真をアップロードしていれば以下の正規表現で写真を抜き取ることができる。

<a.*?href="(.+?)"><img.*?src="(.+?)".*?width="(.+?)".*?><\/a>

1番目のマッチは画像本体、2番目のマッチは画像のサムネイル、3番目のマッチは画像の幅。

今回は1番目のマッチに画像が入らないことがあったため、拡張子を調べて画像でなかったら2番目のマッチした画像をダウンロードするようにした。また、3番目のマッチを使って画像の幅を調整した。

画像の幅は[f:id:masawada:20150718231126p:image:w500]のように最後にw[画像幅]をつけると指定することができる。これははてな記法なので、以下のリンクを見ると良い気がする。

リンクを簡単に記述する(http記法、mailto記法) - はてなダイアリーのヘルプ

これで画像アップロードしなおしができた。

最後に、画像部分を置換したWXRのファイルをはてなブログに食わせてインポート。少し時間がかかる。終わったらちゃんと記事全部きれいに表示できて、コメントとかカテゴリも移行できてた。もともと下書きだった記事は下書きに入ってたりしてよかった。

というわけで、移行した先がこちらです。

blog.sprg.jp

はてなフォトライフにAtomAPIから画像をアップロードする

はてなフォトライフははてなの画像アップローダ。はてなブログの画像もフォトライフに溜まっていく。先日無料版ユーザの月間アップロード制限がいい感じに緩くなって最高。

staff.hatenablog.com

フォトライフにはAPIがあって、画像を投げつけることができる。ドキュメントはこれ。

はてなフォトライフAtomAPI - Hatena Developer Center

昔はWSSE(はてなIDとパスワード)で認証できたんだけどこのドキュメントちょっと古くて、いまはOAuthしか使えない。まぁOAuthの方がセキュアだし仕方ない。ということで、OAuthのConsumer Key、Consumer Secret、Access Token、Access Token Secretを用意してやる必要がある。まずはそのやり方から。

ここから「新しいアプリケーションの追加」を押してアプリケーションを登録する。「OAuth Consumer Key」と「OAuth Consumer Secret」をメモしておく。ついでにフォトライフにアップロードするにはwrite_privateの権限が必要なので、チェックを入れて「変更する」を押す。

Consumer key を取得して OAuth 開発をはじめよう - Hatena Developer Center

このページの下の方にAccess TokenとAccess Token Secretを取得するためのサーバを立ち上げるスクリプトがあるのでこれを使って2つを取得する。Ruby版はこれ。さっきメモしたConsumer KeyとConsumer Secretを書く必要がある。

取得したら以下のスクリプトではてなフォトライフに写真をアップロードできる。bundle exec ./fotolife.rb FILE_PATHみたいな感じで叩けば良い。

gist68a50860f8aa143e4600

OAuth.gem使うときに気をつける必要があって、POSTでリクエストを送るときにヘッダに{'Accept'=>'application/xml', 'Content-Type' => 'application/xml'}みたいなのを含めないとsignatureがおかしいと怒られる。

このAPIで送った画像ははてなフォトライフのトップフォルダに入るので、はてなブログに貼りたいときに注意。

f:id:masawada:20150715210008p:plain:w300

ここから選択できる。

f:id:masawada:20150715204030j:plain

というわけで無事角煮画像をアップロードすることができました。

pecoでいい感じにgit addするやつ作った

git addするときに階層深いといろいろだるい。peco使うとインタラクティブにaddできる。

gist19c360bf83a2b66a39a0

このシェルスクリプトを実行権限つけて適当なところにgit-paddみたいな名前で放り込むとgit paddで使えるようになる。もちろんpecoがインストールされてる必要はある。僕はpadd長いのでpadにしてる。複数選択したい場合はctrl+space押すと良い。

petitviolet.hatenablog.com

これ参考にしてて、主な違いはどのディレクトリにいてもaddできること、既にaddされたやつはリストに出さないこと、addを終えたらそのファイルリストを出力することの3点。あとはshellの関数じゃなくてgitサブコマンドにしたあたりか。まぁそこは大した違いじゃない。

普段vim-fugitive使っちゃうけど複数ファイル選択するときとかに便利になった。