投稿

[Node.js] Express でのインプットバリデーションについて

最近のお勧めは express-joi です。 express-validator の都合の悪いところ:全入力値が文字列であることが前提になっているので、undefined と空文字列を区別して扱うことができない。具体的には、明示的な空文字列の指定と、指定し忘れを区別して処理したい場合など。 express-joi という別の Express 用バリデーションライブラリは、上記の欠点は無く問題なく使えます。具体的には emptyOk() と required() を駆使すれば良いです。ライブラリのバージョンは低いけれど単なるラッパーのようなので気にしなくて良いと思う。 joi は事前に用意したスキーマに適合するかによって入力値が valid かどうかを検証する仕組み。スキーマ定義がおかしいときその時点でエラーになるので、実際のバリデーションが行われるより早い段階でエラーとなるところも気に入っています。 2013/10/2 追記 現在のバージョン 0.2.4 に入っている URL エンコードのデコード処理は Express で既にデコード済みのものを二重にデコードしようとしているせいで、"% " などの入力文字列でエラーになるようです。joiを直接使うのもそんなに難しくないと思ったので直接使っています。

_.sortBy を使って Date の新しい順にソートする

Underscore.js の _.sortBy を使ってオブジェクトのリストを日付 (Date オブジェクト) の入ったプロパティ updatedAt の降順でソートするには、以下のようにすれば良いです。 var sortedList = _.sortBy(list, function (item) { return -Number(item.updatedAt); });

DELL U3014 で動画を見ると青紫色の長方形が出現する問題

PremierColor テクノロジー搭載デル デジタルハイエンドシリーズ U3014 30インチワイドモニタ で、YouTube の動画を見ていると最初は問題ないものの、再生開始から数秒後画面全体がチラついた後、動画の枠と少しずれた位置に青紫色の透明の長方形が表示されるという、いまいちな挙動が起こりました。 はたしてどのレイヤーで問題が起こっているのか最初良く分からなかったのですが、ディスプレイ自体の設定で Smart Video Enhance 機能を Off にすると解決しました。 参考 製品マニュアル: Dell U3014 Monitor

[sudo] 任意の UID と GID を指定してコマンドを実行する

オプション -u, -g を接頭辞 # を付けて使うと passwd に存在しない任意の UID, GID を設定してコマンドを実行できますが、なぜかデフォルトでは -g が上手く動きません。 $ sudo -u#123 id uid=123 gid=0(root) groups=0(root) $ sudo -u#123 -g#456 id Sorry, user USERNAME is not allowed to execute '/usr/bin/id' as #123:#456 on SOMEHOST. /etc/sudoers の許可エントリを以下のように任意の GID を指定できるように少し直す必要があります。 $ sudo visudo # admin ALL=(ALL) ALL admin ALL=(ALL:ALL) ALL この設定を行うと上手く動きます。 $ sudo -u#123 -g#456 id uid=123 gid=456 groups=456 参考 man sudoers

クロネコヤマト問い合わせ番号が FedEx になる

Google 検索でクロネコヤマトの荷物問い合わせを行う機能では、クロネコヤマトと FedEx をチェックサムの計算方法が違うことからほぼ区別できるようです。しかしたまに衝突し、ヤマトなのに FedEx と認識されたりします。 その場合は「ヤマト 111122223333」と明示すると上手く調べることができるようです。 参考 ヤマト運輸のチェックデジットの算出方法 - Yahoo!知恵袋 java - Fedex checksum algorithm for tracking numbers? - Stack Overflow

NFS サーバーの設定 /etc/exports の優先順について

NFS サーバーは設定ファイル /etc/exports に記述した順ではなく、このファイルが読み込まれた後、内部でソートされた後の順序でリクエストを処理するようです。ソート後の状況は、 $ exportfs -v で確認できます。 このソートの具体的な動作は、対象マシンのスコープの小さい順 (man exports の Machine Name Formats の順: single host, netgroups, wildcards, IP networks)、それで同順ならパスの深い順となっているように見えます。

[platex] 本文を overfull ではなく underfull させる

pLaTex を使って日本語・英語論文を書くときに、紙面を突き破る overfull ではなく、文字間を広げて誤魔化す underfull にして穏便に済ませるには TeX に対して以下のパラメータを設定します。 ハイフネーション (ハイフンで区切って次行に送る) を使わないで undefull を強制するには、 \pretolerance=10000 \emergencystretch=.9\hsize ハイフネーションを許可するなら tolerance を緩和し pretolerance を設定せずデフォルト値を使ってみては? \tolerance=10000 \emergencystretch=.9\hsize もしくは tolerance に加えて hfuzz, vfuzz を緩和することも追加する動作をする sloppy で良いようです。 \sloppy \emergencystretch=.9\hsize 行送り処理は三段階あって、ハイフネーションを許可しない pretolerance、ハイフネーションを許可する tolerance、文字間を広げて誤魔化す emergencystretch です。前二段階は試行錯誤の結果 Badness を設定した閾値以下に収めることができたときは成功とし残りの処理を行いません。 コンパイル時の警告の内、Badness が大きいものは個別に対処したほうがよいかもしれません。 参考 TeX/pretolerance GNU Texinfo 5.1: Overfull hboxes TeX Frequently Asked Questions -- question label "overfull"