chokidar-cliとパイプを使って本当に変更のあったファイルだけ何かしたい

kimmobrunfeldt/chokidar-cli: Fast cross-platform cli utility to watch file system changes

chokidar <files> -c '<command> <files>' 方式は無駄が多いかも

chokidar を使った処理でよく見るのは以下のような方法だと思う。

chokidar '**/*.js' -c '<command> **/*.js'

この方法だと監視対象のいずれかのファイルに何らかのイベントが発生した場合に、対象ファイル群すべてに対してコマンドを実行してしまう。すべてを対象にトランスパイルして bundle ファイルを生成するような処理なら仕方ないが、一つ一つの処理が独立していてお互いに関係せず、かつそこそこ負荷が高い場合には別々に実行したい。

chokidarはコマンド実行だけはなくイベントのstream outputもできる

chokidar は対象ファイル群を watch し始めたら、検知したイベントとファイル名を

イベント:ファイル名

の形で stdout に出力する機能を持っている。

この出力を受け取って何らかの処理をするコマンドを作れば、上のような無駄を防げる。

ただし、注意が必要

愚直にパイプで繋いで

chokidar <files> | <command>

ってやってしまうと、以下のような無駄な出力も受け取ってしまう

  1. yarn run コマンドの出力 ( yarn run <version> )
  2. chokidar コマンドを起動した文字列そのまま
  3. unlink したファイル

1 と 2 は単純に chokidar の出力が始まる前のものなので、そもそも必要な情報が入っていない。unlink イベントは chokidar の反応なのだが、unlink されているファイルに対して何らかの処理をするコマンドを叩いてもエラーにしかならないので、これも除外する必要がある。

本当に欲しかったもの

総合すると必要なものは

chokidar <files> | <filter> | <command>

のような形。

実装例

実際やったのは PlantUML の render で、以下のような感じ。

chokidar "**/*.plantuml" | awk -F : "
  !/unlink|run|\*/ {
    print \$0
    system(\"plantuml -headless -tsvg \" \$2)
  }
"

これで処理対象の PlantUML のファイルが増えても最小のコストで re-render できる。

chokidar なんか名前が好きじゃなくて敬遠してたんだけど、この機能はよい。とてもよいぞ。好きになった(簡単)。

Yapra に Publish::Smtp 追加

最近 github で喜んで fork して作業してます。

Pragger についてこんな記事がありましたが、

Praggerとnetpbmで作る画像→AA変換ツール − @IT

Yapra には

  • Publish::Imap
  • Publish::Smtp

揃ってますよ! すぐにメール送信できますよ!

使い方は

- module: Publish::Imap
  config:
    imap_server: XXXX
    username: YYYY
    password: ZZZZ
    mail:
      subject_prefix:
      from_template:
      to:

- module: Publish::Smtp
  config:
    smtp_server: XXXX
    username: YYYY
    password: ZZZZ
(ry

のように設定を書きます。

Publish::Smtp の方は Net::POP, Net::SMTP で使える認証方法に対応しています。Publish::Imap に倣って設定を行うと SMTP-Auth でメールを送信します。また pop_server を書き足して

- module: Publish::Smtp
  config:
    smtp_server: XXXX
    pop_server: AAAA
    username: YYYY
    password: ZZZZ

と書くと POP before SMTP で認証できますし、ここに

    authtype: apop

を足すと APOP で認証できます。

- module: Publish::Smtp
  config:
    smtp_server: XXXX

のように認証情報を一切省略すれば無認証で SMTP で送信できます。

便利に使ってやってください。

yuanying's yapra at master — GitHub

まだこれを書いてる時点ではリリースには入ってないので git clone してね。

破綻させてないもん

[Geekなぺーじ : Subversionを使ってプロジェクトを破綻させるためのTIPS][1]

  1. レポジトリデータベースを直に編集してしまう。困ったらエディタでレポジトリを直接編集してしまえ!
  2. </blockquote> 直、ではないな。dump ファイルだから。 近いことをやったけど破綻はさせてないお。 [1]: http://www.geekpage.jp/blog/?id=2007/10/24

ES4って文字列に改行を含むことができるようになるんだ

アルファな JavaScript デベロッパの皆さんは当然チェックしてるんでしょうけど、overview(PDF) をつまみ食い(斜め読みですらない)したところ

  • triple-quoted string で改行を直接含むことができる(34ページ)
  • オブジェクト初期化子のおしりカンマは仕様上許可される(35ページ)
    • IE でもおしりカンマ {key: value,} が書ける?
  • CR も CRLF も LF もみんな LF になる(36ページ)
    • WinIE でも安心して LF だけの JavaScript を動かせるようになる?
  • ユーザー定義のプロパティを DontEnum 型にできる!(39ページ)
    • obj.propertyIsEnumerable( 'propname', false ) とするだけで ok. 何が嬉しいって、Array オブジェクトにメソッドをペトっと追加してもそれが for ( in ) で出てこなくなります!

辺りにちょっとビビっときてしまいました。ただなんか全体的に

難しくなる

感じがします。class 構文とかは別にどうでもいいんだけど、: が増えたりすると途端に難しく見えるのは Python とか Haskell とか Xtal とかああいうの目にしてるからかな。小難しい用語がたくさん並んだイカツイやつって感じ。今までの JavaScript にあった、なーんも考えてませーん的なほんわかした雰囲気はなくなってしまった気がする。というか今気がついたけど、

: が多い記法はイヤ

なんだな、きっと。何か特別な意味がそこにはありますよオーラがドパドパ出てるんですよ。オレには見える。

最近 Scheme にハマっている

別に SICP が流行っているとか関数型言語を勉強したいとかそういうわけではなくて。1

なんでかって言うと、単に Emacs Lisp のすごさを感じることが増えてきたから、Lisp に興味が涌いてきたという流れ。じゃあなんで素直に Emacs Lisp じゃなくて Scheme なのかと言うと、この記事が前から気になっていたから。

OOエンジニアの輪! 〜 第 21 回 川合史朗 さんの巻 〜

なんつーか、CLOS すげーっていうか、河合さんすげーっていうか。ということで実際には Scheme に興味が涌いたんじゃなくて、Lisp に興味が涌いたついでに Gauche 触ってみようということなのであった。2Emacs Lisp は副次的に多少でも読み書きできるようになったらラッキー、くらいにしか考えていない。

とりあえず触りだけ勉強している限りは要素が少なくて助かる。ヘタすると本体の動作ぶっ壊しますよという辺りも Ruby や JavaScript の経験があればそんなに違和感はないし、メソッドがクラスに属していないとか、クラスが名前空間を作らないとかそういうのもなんとなく普通に飲み込めるようになってきているので、へー面白いと感じることができる。もう完全にクラスベースの呪縛からは解き放たれた感じ。よしよし。

  1. まぁ「ふつける」は積読してあるんだけど。 

  2. WiLiki とか Kahua も興味あるし。 

「通じない」をできるだけ手軽に調べられるように

ともにスラドなんだけど、「オレオレ証明書」と「スーパーリロード」がそれぞれ意外と通じていない。

そういえばスラドにははてなキーワードのような仕組みがないので、newbie が新たな言葉を知るためには先人と同じかそれ以上1のコストが必要ってことになる。はてなの丸パクリで日記にキーワードリンクが勝手につくようになるとそれはさすがに不評だろうと思うんだけど、slashdot glossary のようなものを用意して、記事からはリンクが張られてもいいかもなぁと思った。

その場合、リンク先は WikiPedia でも悪くないんだけど、なんでもかんでも WikiPedia っつーのもどうだろうという気もする。sourceforge にプロジェクト立てて Wiki を動かすとか、そんな感じか? すらっしゅどっと翻訳部みたいに。

  1. 用語集のない状態でリアルタイムに触れていない言葉を知るのは大変なのよ 

公共性の高い組織の広報

今回の中越地震は阪神大震災ほどではないにしろあちこちに大きな被害が生じている。で、ふと思ったんだけど、公共性の高い組織のサイト上である程度の情報って流せないものだろうか?

例えば学校。生徒個人の安否情報は流せないが、例えば学年、クラスに関してはなんとかなるかもしれない。というのも、まず NHK、NTT 頼みの災害、安否情報はやはり限界があることが大きい。現地ではラジオ中心にならざるを得ないが、離れた場所に居て安否を確認したい人が現地のラジオを聞くのは難しいし、NHK教育の受信も同様だ。伝言ダイヤルは「NTT の固定電話」という縛りがあるし、ドコモのサービスも同じ。Vodafone, au からは利用できない。

ユーザーは動いているが、これを補足できるのは一部の人間に限られる気がする。少なくともラジオ、テレビにこうした情報はなかなか出ない。

from ITmeaid 新潟地震・立ち上がるネットユーザー

今日夕方以降雨の予報。体力的にかなりきつい状況が予想されるので心配だ。

Apache 1.3.32

まだまだいきますねぇ。mod_rewrite はよく使うツールどんぴしゃなので早めの処置を忘れずに、と。

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm