JavaScript Advent Calendar 2011 (Node.js/WebSocketsコース) : ATNDの25日目です。メリークリスマス!!
…ということでnpm xmas
です。
npm はNode.jsのv0.6.3あたりから標準添付されてますね。多くのサブコマンドが用意されていて、npm help
で一覧することができます。
$ npm help Usage: npm <command> where <command> is one of: adduser, apihelp, author, bin, bugs, c, cache, completion, config, deprecate, docs, edit, explore, faq, find, get, help, help-search, home, i, info, init, install, la, link, list, ll, ln, ls, outdated, owner, pack, prefix, prune, publish, r, rb, rebuild, remove, restart, rm, root, run-script, s, se, search, set, show, star, start, stop, submodule, tag, test, un, uninstall, unlink, unpublish, unstar, up, update, version, view, whoami npm <cmd> -h quick help on <cmd> npm -l display full usage info npm faq commonly asked questions npm help <term> search for help on <term> npm help npm involved overview Specify configs in the ini-formatted file: /Users/sugyan/.npmrc or on the command line via: npm <command> --key value Config info can be viewed via: npm help config npm@1.1.0-beta-4 /Users/sugyan/.nodebrew/node/v0.6.6/lib/node_modules/npm
が、これらがすべてというわけでもなく、隠しコマンド的にnpm xmas
とかが使えたりします。
はい。クリスマスツリーが現れました。
npmのgithubレポジトリを見る限り、npm/lib/xmas.js
は去年の12/23に追加されていますね。
https://github.com/isaacs/npm/commits/master/lib/xmas.js
というわけで、一年前の古いネタです。すみません。
ところでこのクリスマスツリー、ロジックのメインの部分*1は
;(function T (H) { for (var i = 0; i < H; i ++) w(" ") w(x+"\033[33m"+s+"\n") var M = H * 2 - 1 for (L = 1; L <= H; L ++) { var O = L * 2 - 2 var S = (M - O) / 2 for (var i = 0; i < S; i ++) w(" ") w(x+"\033[32m"+f) for (var i = 0; i < O; i ++) w( "\033["+oc[Math.floor(Math.random()*oc.length)]+"m"+ o[Math.floor(Math.random() * o.length)] ) w(x+"\033[32m"+b+"\n") } w(" ") for (var i = 1; i < H; i ++) w("\033[32m"+l) w("| "+x+" |") for (var i = 1; i < H; i ++) w("\033[32m"+l) if (H > 10) { w("\n ") for (var i = 1; i < H; i ++) w(" ") w("| "+x+" |") for (var i = 1; i < H; i ++) w(" ") } })(20)
となっていて、関数T
は引数H
を受け取って可変のサイズを描画できるように作られているのですが、呼び出しが引数に20
と固定値を渡していて、結局そのサイズのものしか作れません。ちょっと勿体無いですね。
ということで折角なのでコマンド引数でサイズを指定出来るようにしてみました。
https://github.com/sugyan/npm/commit/ab9fb8f69d4cc7e61dac85ff52d9898862fe89eb
これで、
ちっちゃいツリーや
おっきいツリーも
作れちゃいますね!
npm loves you Happy Xmas, Noders!
*1: ちなみにこの部分をPerlで実装したものを半年ほど前に書きました。(http://d.hatena.ne.jp/sugyan/20110608/1307460864) Ruby版も@kwappaさんが作ってくれました。(http://randd.kwappa.net/2011/12/24/404)