詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

日付を簡単に特定フォーマットで出力できるスクリプト

まあこういうこともあるわけで……date +%Y%m%d_%H%M%S とかすればいいんだけどそんなん打ってられないのでスクリプト化しました。

#!/bin/sh

date +$(basename $0 | sed 's/\([A-Za-z]\)/%\1/g')

https://github.com/motemen/datetime.sh/blob/master/datetime.sh

このファイルを Ymd_HMS という名前でパスの通った場所に保存する。ファイル名を date のフォーマット指定に使ってます。すると

% Ymd_HMS
20140514_194556

となってシェルの補完も効くので、便利です。その他よく使うフォーマットにあわせて ymd とか作っておくと便利なんじゃないでしょうか。他に思いつかないけど。

gulp, TypeScript, Browserify で Chrome 拡張を書く

先日紹介した chrome-Flavoured-Favicon ですが、以下のような技術によって支えられています。

最後の AngularJS は TypeScript との相性を試してみたかっただけのおまけです。結果は最高に気持ちよくなれました。

ディレクトリ構成

  • app/
    • 最終的に配布する拡張本体です。ほとんどのファイルはバージョン管理されておらず、gulp によって生成されます。
  • src/
    • TypeScript のソースなどが置いてあります。基本的にこの中だけを弄る。
  • DefinitelyTyped/
    • DefinitelyTyped(TypeScript の型定義ファイル)。Git の submodule で管理。

その他必要なライブラリは npm(package.json) と bower(bower.json) で管理します。

コードの生成

gulpfile で、以下のタスクを定義してます。

gulp typescript

src/ 以下の TypeScript のソースを JavaScript にコンパイルして、src/js/ に出力します。

gulp-typescript というプラグインもあったけれど、gulp-tsc のほうがなんか便利だった。{ emitError: false } としておくと、watch 時にコンパイルエラーが生じても watch が止まらない。

gulp browserify

src/js/ 以下の JS の require() を解決して、依存しているライブラリと結合させた最終的な JS を app/ に書き出します。

gulp-browserify ってプラグインがあるけど、これは gulp プラグインのブラックリストに入っていて、browserify を直接使うのが推奨されている(プラグインもちゃんとメンテされてるんだなー)。browserify の API が返すストリームだと続く処理を与えられないので、vinyl-source-stream で明示的にソースファイルを与えています(L27)。また、複数のストリームをひとつのタスクにまとめるのに、event-stream を利用します(L22)。

gulp copy

依存しているライブラリを app/ にコピーします。

バージョニング

バージョン番号の多重管理を避けるため、拡張のバージョン番号も Git のタグを使って gulp で生成しています。

以下のようにして git-describe を使うと、タグをもとに現在のワークツリーの状態に名前をつけることができます。

% git describe --tags --dirty --always
0.0.2-6-g3466baf-dirty

この場合

  • "0.0.2" が直近のタグを、
  • "6" が現在の HEAD がタグ "0.0.2" から 6 コミット離れていて、
  • "g3466baf" が HEAD は 3466baf というコミットであること、
  • "dirty" がワークツリーに未コミットの変更があること

を示してます。ちょうどタグ上にいる場合は "0.1" とかシンプルな名前になる。Chrome の拡張のバージョン番号は 4 つまでの数字をドットでつないだものなので、最初の 3 つまでを Git のタグで、最後の 1 つをそのタグからのコミット数にしてみてます。この場合 "0.0.2.6" になる。

gulp manifest

src/manifest.json に上のルールで決めたバージョン番号を埋めて、app/manifest.json に書き出します。gulp-json-editor というので JSON を編集することができて、まさにこういう用途にうってつけです。こんなのがあると思ってなかったので便利だった。

gulp zip

Chrome Web Store にアップロードする zip ファイルを作る。app/ 以下を zip にするだけです。

TypeScript を書く

TypeScript を使う利点はもちろん型がついていることですが、それに加え、型定義ファイルを利用して Chrome の API や AngularJS の補完ができるのも便利。そんなに調べてないけれど Vim からは clausreinke/typescript-tools というのが便利だった。ほとんど JS と変わりないので、書いたり読んだりすることが辛いということもないでしょう。

まとめ

gulp と TypeScript で気持ちよくなろう。

TypeScriptリファレンス Ver.1.0対応

TypeScriptリファレンス Ver.1.0対応

スプラッターは絶対観ないけれど: 百壁ネロ『ごあけん アンレイテッド・エディション』面白かった

ごあけん アンレイテッド・エディション (講談社BOX)

知り合いの @KINGakiko さん(キングはともかくアキコだし、アイコンがかわいいんで 2 対 1 で女性だと思います)が作家デビューされる(めでたい!)とのことで、さっそく購入しました。

あらすじ: 主人公の散町千々乃は血を見ると鼻血を出してしまう特異体質の持ち主。大学に入学してすぐにその体質から醜態をさらすものの、サークル「残酷映画研究会」の含有うるてに才能(?)を見込まれ、通称「ゴア研」に勧誘される。千々乃はスプラッター大好きなメンバーたちに囲まれて、時にはスプラッターの意外な一面に気づかされ、時にはドン引きさせられながら、大学での半年間を過ごしていく——

ごあってゴアかよ! 言われてみると確かに「ご」の濁点がちょっと血しぶきっぽい。過去、突然吹き出してしまうので電車の中で読めない本というのは何冊かあったけれど(『カマタリさん』とか)、これもそんな一冊でした。「うはあー」とか「えー?」とか独白する千々乃がかわいい。

ぼく自身は尊敬する人間 仏陀(残酷表現はNO)が信条なくらいで、スプラッター映画は絶対に観ない。ゲームのゴア表現ならギリギリいけるので絶命異次元が最高のゴア体験って男です。なのでスプラッターに関する知識はゼロ、興味はマイナスなのだけれど、それでも千々乃と一緒になって、スプラッター好きの人が楽しそうに語る様子を聞いているのは楽しく、ぼく自身が観ることはなくても、残酷映画の祝祭的な性質を知ることができる。それがとても面白かった。

「スプラッターの正しい見方はね、まず、眠くなったら必ず停めて、無理せず顔を洗いに行くこと。あと、血とか内臓が飛び散る激しいゴアシーンは、拍手したり笑ったりして、できるだけかるーい気持ちで見ることかなー……って、これは散町にはまだ早いよね」

p. 136

物語としては当然、体質的に血を直視できない千々乃がどのようにスプラッターを観られるようになるか、というのがひとつのテーマになるわけだけれど、鼻血を気にするばかりで、スプラッターを観るにあたっての障害に「怖い」「グロい」という軸がないあたり、もともと才能があったとしか思えない。

なので、『ごあけん』を読んで、スプラッターが観られるようになりました! といった、いい話は期待できません。グロはグロなので、ぼくはこの先もスプラッターからは距離を置きつつ、ただその愛好家たちの心情をいくらかは理解したつもりになりながら、暮らしていきたいと思います。物語に登場する映画はそれぞれ元ネタがありそうで、『恐々! キノコヒューマン』とか『天使のゾンビ地獄』とか、調べてみたい気が起きるのですが、下手にググったらこわい画像に行きあたりそうで手を動かせないのが、悲しいところ。

ごあけん アンレイテッド・エディション (講談社BOX)

ごあけん アンレイテッド・エディション (講談社BOX)

はてなで一緒に働きませんか?