JavaScriptの行末セミコロン
一種のポエムです。自分は行末セミコロンを書かない派です。
仕様
英語版はここです。
和訳
- パース中に文法上許可されないようなトークン(offending token)に出会って、かつ以下の条件のどれか1つ以上を満たしていればセミコロンを挿入する
- offending tokenとその前のトークンの間に1つ以上のLineTerminatorがある
- offending tokenが}である
- 1つ前のトークンが ) であり、セミコロンを挿入時にそのセミコロンが do-while 文の最後となるセミコロンとして扱える
- EOF
- パース中文法としては正しいが、文法の定義で "[no LineTerminator here]" が入っている場所に LineTerminator が出現した場合、パースしているトークンの直前にセミコロンを挿入する
ただし、セミコロン挿入後に空文となるか、for文のヘッダーのセミコロンになる場合は挿入しない
3番目が引っかかりやすいポイントですね。
return true;
とかの奴です。ひとまず ReturnStatement, ThrowStatement, ArrowFunction, YieldExpression に注意すれば問題ありません。
逆に挿入されなくて困るパターンとしては
a = b + c (d + e).print() if (a > b) else c = d
が挙げられています。「行頭にカッコを置かない」ことを守ればよさそうです。最近はあまりIIFEも書かないので困ることも少なそうです。
dotfiles 管理手法の妄想
例によってdotfilesをgithub上で管理していますが、どうもしっくりこないので現在考えている妄想を備忘録的に書いておきます。
現在の不満点
dotfilesの編集が面倒
できるだけホームディレクトリにファイルを展開したくないけど、いちいち vim dotfiles/vim/rc/encoding.vim
みたいに書くのが面倒。
これは vim プラグインを書いて解決するべき問題かもしれないです。
そもそもの話として、設定ファイルを分割すると編集は面倒なので、分割をやめるかもっと厳格に分割方法を決める必要がありそうに思えます。
branch を用いた変更がお辛い
例えば最近 vim が true color 対応しましたが、1週間試してみようと vim/true-color
みたいなブランチを切って vimrc を書き換えたとします。その間、tmux のアップデートにより何らかの機能が追加され、そちらも試してみようと tmux/new-feat
ブランチを切ろうとします。
このブランチはどこから生やすべきでしょうか。あとでやっぱり true color はやめようとなった場合、tmux の新規機能ブランチはどう扱うのか……みたいな話になって面倒そうです。
vim/true-color
から生やした場合、masterへのmerge前にrevertするとか、cherry-pickするとか、歴史を改変するとかはどれも辛い手法に見えます。
master
から生やすとそもそも2つの変更が共存できません。
誰か同一リポジトリでできるいい感じの手法を知っていたら教えてください。
妄想している解決方法
後者の解決にしかならないですが、手法としては homebrew とか vim-plug 系みたいなのと似た手法を考えています。
例えばpopkirby-github/vim
のようなリポジトリを作って、それをclone、所定のインストールスクリプトの実行、みたいなことをするツールを作成することを考えています。
変更時はそれぞれのリポジトリでブランチを切ればいいという考えです。
前者は考え中ですが、vim 上で :dote
的なコマンドを作ることを考えています。
#RECRUIT_CODE とかいうのを解いてみた
1時間58分10秒で全ての暗号解読に成功! | #RECRUIT_CODE | リクルートHD夏インターン2014 http://t.co/VfoE77uoMg
— 胃腸が弱い (@popkirby) 2014, 6月 5
大体Q3に1時間30分ぐらい使った。そこまでは真面目にやってました。
感想
英単語を使う方が悪い。
latexmkを使ってみた
理系ならTeXを使いなさいという圧力を感じたのでlatexmkを使ってみた話です。
TeXのつらいところ
数年前に何度かTeXを使ってレポートを書いたんですが、
ので発狂してWordを使ってレポートを書くようになってました。でもやっぱりTeXは見た目が良いし理系として使えた方がいいんじゃないかということで再度環境を整えました。使用エディタはMacVimです。
latexmkって何
Latexmk - TeX Wiki
latexのすごいmake
latexmkの設定
~/.latexmkrc を作って、以下の内容で保存。
#!/usr/bin/env perl $latex = 'uplatex -synctex=1'; $latex_silent = 'uplatex -synctex=1 -interaction=batchmode'; $bibtex = 'upbibtex'; $dvipdf = 'dvipdfmx %O -o %D %S'; $makeindex = 'mendex %O -U -o %D %S'; $max_repeat = 5; $pdf_mode = 3; $pvc_view_file_via_temporary = 0; $pdf_previewer = 'open -ga /Applications/Skim.app';
LaTeXのことはよくわからないのであちこちからコピペして作ったので内容の説明はできません。ただsynctexというものが使えるpdfビューワとして Skim | Home というものがあるらしく、それを導入してます。
vimの設定
.vimrcで、
autocmd FileType plaintex setlocal filetype=tex if neobundle#is_installed("vim-quickrun") autocmd MyAutoCmd BufWritePost *.tex call quickrun#run() endif let g:quickrun_config = { \ 'tex' : { \ "command" : "latexmk", \ "outputter" : "error", \ "outputter/error/error" : "quickfix", \ "exec" : "%c %o %s", \ }, \ }
で、保存するとpdf出力されてワイワイ。Skim.appに更新を監視して読み込んでくれる機能があるのでプレビューもはかどります。
微妙なところ
latexmkにpvcという「texファイルの更新を監視してタイプセット、それで出来上がったpdfファイルを開く」というオプションが合ってすごいな〜^と思ってquickrunに登録したら、インサートモードが一定間隔でドゥンドゥン鳴るモードになってしまいました。理由はよくわからないです。
WordPressのテーマ開発の環境を整えたお話
タイトルの通り、WordPressのテーマ開発をする機会が発生してるので、どんな環境にしたのかを備忘録的にまとめておきます。
どんな環境?
自動化にgrunt、テスト環境にVagrant
テーマ自体は_sを元に作っていくことに
gruntについて
http://gruntjs.com
いろいろと自動化してくれる凄いもの
今回は grunt-init のテンプレートとして megumiteam/iemoto を使いました。
元からいろいろと入っていて便利なので気が楽で良かったです。
grunt-contrib-watchの追加
ただファイル監視が元には無く、毎回gruntを叩くのも面倒なので別に grunt-contrib-watch を追加しました。
Gruntfile.js中のgrunt.initConfigに渡すオブジェクトに
watch: { options: { livereload: true }, scss: { files: ['sass/*.scss'], tasks: ['compass', 'cssmin'] }, js: { files: ['js/foobar_theme.js'], tasks: ['jshint', 'uglify'] } }
を追加、あとは書いてある通りにloadNpmTasksを呼ぶように。
あとは LiveReloadのページからSafari拡張を入れておく。
vagrantについて
http://www.vagrantup.com
vagrant up で環境が出来る凄いやつ
環境構築スクリプトをまとめたようなものがあちこちで配布されているので、今回はそれを利用しました。
miya0001/vagrant-chef-centos-wordpress · GitHub、通称VCCWを git clone して Vagrantfile ほぼサンプルコピペして終わり。
これだけでかなり凄い感じの環境ができて凄いなと思いました(語彙力不足)
CocoaPodsでMKNetworkKitを入れようとしたら詰まった話
MKNetWorkKitという便利なライブラリがあるらしいけど、CocoaPodsでいざインストールしてCommand-Rすると
どうやら、
#if NEEDS_DISPATCH_RETAIN_RELEASE @property (nonatomic, assign) dispatch_queue_t reachabilitySerialQueue; #else @property (nonatomic, strong) dispatch_queue_t reachabilitySerialQueue; #endif
の部分でエラーが起きているらしい。ただiOS 6.0以降だと dispatch_queue_t に対してもARCが有効なはずなのになんでだろうと思っていたら、
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 // iOS 6.0 or later #define NEEDS_DISPATCH_RETAIN_RELEASE 0 #else // iOS 5.X or earlier #define NEEDS_DISPATCH_RETAIN_RELEASE 1 #endif
という感じでARCが有効かどうかしらべてるけど、dispatch_queue_t 自体は OS_OBJECT_USE_OBJC が1であるかどうかで ARC に対応させるか決めてるらしい(<os/object.h> あたり)。
ということは OS_OBJECT_USE_OBJC が 0 になってるということだけど、どうしてだろうと思ったら CocoaPods が気配りを効かせていたせいだった。
GCDを利用しているライブラリで、GCDのオブジェクトに対してARCが適用されることに対する修正をまだしていないライブラリもそれなりに多い(と思う)から、-DOS_OBJECT_USE_OBJC を標準で付加してるんだと思う。
podspecの方で変えられるようなのでPull Requestを投げるならそっちのほうだろうなあ。
というわけで -DOS_OBJECT_USE_OBJC=1にしたら解決。
診断メーカーするの
発端
@popkirby_st 毎日一定時刻に診断メーカーで任意の名前(複数)の診断を行い、診断結果をツイートするっていうプログラムとかない?
2012-12-06 22:05:51 via ツイタマ to @popkirby_st
つかいかた
- consumer Key, consumer Secretを取得して書き換える
- Perlをインストールする
- cpanとかでNet::Twitter, Config::Simple, LWP::UserAgent, HTTP::Request::Common, Web::Scraperを突っ込む
- 実行して言われた通りに登録する
- たのしい診断
一回登録すると次回以降は勝手にツイートします。もう一度再設定したいなどのときは config.ini をゴミ箱へシュートして下さい。
繰り返しについては頑張ってcronすればいいんじゃないでしょうか。よくわからない。
大変だったとこ
form-dataをform_dataにtypoしてたのを直すとこ
感想
Web::Scraperになにかすごいものを感じた。
Perlを勉強してみるのもいいかなあと思いましたまる。
補足
そのうち再登録とかに対応したい
WindowsならStrawberry Perlとかいうの使えばいいんじゃないでしょうか。よくわからない。