Content-Encoding: deflateなHTTPレスポンスを返させる簡単な方法はないかなと探してみたらRackがサポートしていた。どうやるかというと:
use Rack::Deflater
これだけ。ruファイルに書いておけばよい。発端がちょっとしたテストのためだったので、内容はなんでもよく、とにかくdeflateで返してくれれば十分というわけで、こんなのを書いて目的を達成できた:
module Rack
class Foo
def call(env)
r = Response.new
r.write "abc123"*100
r.finish
end
end
end
use Rack::Deflater
run Rack::Foo.new
実際にアクセスしてみるとこうなる:
$ ruby -r open-uri -e 'open("http://localhost:9292/"){|h| p h.read}'
"abc123abc123 ...(略)..."
$ ruby -r open-uri -e 'open("http://localhost:9292/", "Accept-Encoding"=>"deflate"){|h| p h.read}'
"\355\3011\001\000 ...(略)..."
と言っても二日間だけだけど、嫁さんが体調不良で寝込んでしまい、仕事を休んで家事育児に専念していた。
慣れてないのもあるけど、チビさん二人を連れての買い物や病院通いはなかなかしんどかった;
しかもそんな合間をぬってパッケージを put したりメールを出したりしたもんだから、署名し忘れたり意味不明になったりとダメダメだった。
# 忙しい時ほど落ち着いて作業しなくては、
# と何度目かの反省中……。
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
我が家のVineSeed環境はCentOS5+Xen上で動いているのだが、kernelとuserlandの世代の差が大きくなってきて、そろそろ標準で提供されているkernel-2.6.18では動かないものが出てきた。特にudevが動かない点が非常に面倒なので、更新できないものか探ってみた。
月毎表示 >> 201002 ある意味おすすめのアプリ またちょっと時間に追われていたのですが、以前から書こうと思っていたのが今回のネタ。 ポータブルアプリ.org( http://portableapps.com/ )で変換されている各種のWindows版アプリが「WINE上でのLinux OK!」として紹介されています。 今、メイン環境が x64 なので現在は実際に使っていませんが、昨年の3〜4月、元の環境が残っていたころ、確かに動作する事を体験しました。 ※アプリケーションの大...
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
今週ずっとこればかりやってきたけど、proposed-updates の errata を後少しで出し終われそう。
これが終わらないと他の作業に手がつけられないから結構困る。
# 今週末にはなんとか……。
2010年2月8日 - 2010年2月28日の読書メーター
読んだ本の数:2冊
読んだページ数:576ページ
■
藍坂素敵な症候群 (電撃文庫)[rakuten]
どこかでみたような? と思うところがちょこちょこあったり、予想していなかった残酷描写があっておどろいたり。ある意味それとは対照的にかたいストーリー運びでもあったが、コントラストがきいていて引っぱっていかれるように感じた。ラストはきれいにまとまっていて、さあ次を、と期待したくなった。アポカリプスの著者だったんだ、と後で知ってなるほどなと。
読了日:02月13日 著者:水瀬 葉月
http://book.akahoshitakuya.com/cmt/4939323
■
キケン[rakuten]
読了日:02月26日 著者:有川 浩
http://book.akahoshitakuya.com/b/4103018720
▼読書メーター
http://book.akahoshitakuya.com/
忙しくてホントに本を読めなかった。どちらの本もいったい何日かかるんだかっていうくらいかけて読んだ。
それはさておき、キケンは放課後もので(多分ちょっと違う)、放課後ものというとあ〜る因子がやはり。比較するというわけではないのだけどちらちらとはしてしまう。そうなるとなかなか難しいのだけど、これは理系というか工学系で、表現だけだけどもつっこんでいるところがあって、でもって楽しそうでなかなかよかった。きれいにまとめすぎていないかなとちょっとひっかかりはしたけども、まあ、それはね。
壊れてしまった VirtualBox 上の Vine Linux 5.1 環境を作り直す必要があったので、こっそりと記念にもらっていた OSC 2010 Tokvo 配布用の DVD を使わせてもらった。
もちろん普通にインストールできたんだけど、iso イメージがぽつんと入っている、なんてサプライズをちょっと期待してたので、何か物足りないような……。
# いや、ウソです。
Powered by twtr2src
Railsのdeployに使われることで知られるようになったCapistrano。でもその実態はRailsにとらわれているわけではありません。Capistranoは何かというと、こう言えます。SSHを使って多数のホストに同時並列に接続して、実行させたいコマンドを一斉に送信、実行結果を受け取って問題なければ次のコマンドを、というのを行うためのフレームワークです。
Capistranoを使い始めるのは簡単です。受け側に必要なものがあまりなく、一般的なUNIX系環境であればすでに準備が整っている状態です。Capistranoを実行するホストにはRuby環境が必要ですが、それ以上のものは基本的には必要ありません。コンパイラも不要ですし、ちょっと試してみるだけならインストールしてなくても大丈夫。
とはいえ、何もないところでCapistranoを試せるわけではありませんから、実行環境を作っておかねばなりません。いくつかのやり方があります。
一つめはややバージョンが古くなりがちではありますが、動きを知る、動作を試す、あまり深入りしない範囲で使い始めるといったところであればそれほど問題なかろうと思います。どういったOS環境でCapistranoが用意されているのかというと、知っているなかでは以下の通りです。おそらく他にもあるでしょう。
二つめ。RubyGems(Ruby系ソフトウェアのための簡易パッケージシステム)でインストールするのはごく一般的なやり方です。Capistrano自身と、Capistranoが使っているライブラリ類はすべてRubyだけで書かれていますからコンパイラなどのいわゆる開発環境は必要ありません。すでにRubyGemsが使える状態なら特別な準備は必要ないでしょう。(細いことを言えば、CapistranoのバージョンやRubyのバージョンによって多少異なることもあります。)
gem install capistrano
三つめは、こういったことに慣れていないと手間がかかります。必要なソフトウェアのインストールはどれも難しいわけではありませんが、少々数が多いのです。以下に必要なソフトウェアをあげておきます。インストール方法は各ドキュメントにあたってください。
最後の方法ですが、これは必ずしもおすすめるわけではありませんので後で述べることにします。
Capistranoは他の多数のホストに対して一括してコマンド実行をしかけます。したがって、どのホストを対象とするのかをあらかじめ示しておかねばなりません。そのためにはロールというものを定義します。
ロールはホスト名のリストのようなものです。ロールというくらいなので、ホストの用途に応じて複数のロールを定義できます。たとえばHTTPサーバを動作させているホスト群、RDBMS用のホスト群、などのように。具体的な定義方法は以下の通りです。
role :http_server, "www01", "www02", "www03"
role :db_server, "db1", "db2"
「http_server」「db_server」という二つのロールを定義しています。それぞれにホストwww01〜03とdb01〜02が所属します。定義の上で、ロール名の前に「:」がついているのがちょっとしたポイントです。これはRubyに由来する記法ですが、ここではそんなものだと考えおくくらいで構いません。
これでロール定義は完了です。Capistranoは特に指定しなければ定義されているロールに所属している全ホストを対象にしますので、ロール定義=対象ホスト指定を終えたことにもなります。
次に、Capistranoを通じて行いたいコマンド実行の内容を決めます。具体的なコマンド実行の内容を考えます。ここでは…… Passengerがインストールされているかどうかを確認してみましょう。手作業で実行するならこんなところでしょう。
gem list passenger -i
gemでインストールしていることを前提としています。バージョンを指定してもよいでしょう。
gem list passenger -i -v 2.2.5
これをCapistranoが理解できる書式に書き換えると次のようになります。
task :check_passenger_gem do
run "gem list passenger -i"
end
いかがでしょうか。ちょっとばかり呪文が入ってきましたが、コマンド実行の記述そのものに変わりないことを見てとれます。
Capistranoではコマンド実行の指示をタスクという単位で扱っています。タスクの定義には「task〜do〜end」という記法を使います。「task」の直後にタスクの名前を書きますが、ここでも「:」を付けるのがポイントです。「do」と「end」の間には、そのタスクの内容を記述します。
「do〜end」の中で頻繁に使うことになるのがコマンド実行させるための「run」命令です。
「run」に続くのが具体的なコマンド実行内容で、手作業で実行するときとおおむね同じ要領で記述できます。ワイルドカードやパイプ、リダイレクトも利用できます。もっといえばシェルスクリプトと呼ばれるようになる実行制御のための記述も可能ですから、この部分にはシェルスクリプトを記述すると言ってもよいでしょう。
決めたCapistranoへの指示内容はレシピとしてまとめます。まとめるといっても単にファイルに記述するだけのことです。Capistranoは「Capfile」という名前のファイルを自身への指示書として扱いますので、Capfileというファイルを作成します。makeコマンドに対するMakefileの関係と同じです。今のところ簡単な内容ですが全体を見ておきましょう。
role :http_server, "www01", "www02", "www03"
role :db_server, "db1"
task :check_passenger_gem do
run "gem list passenger -i"
end
これでレシピの完成です。いよいよCapistranoの実行です。
Capistranoでレシピを実行するためにはcapというコマンドを使います。Capfileを置いたディレクトリで「cap check_passenger_gem」のようにタスク名を指定して実行します。ここで指定するタスク名には「:」がないことに注意してください。実際にやってみましょう。
$ cap check_passenger_gem
* executing `check_passenger_gem'
* executing "gem list passenger -i"
servers: ["www01", "www02", "www03", "db1"]
[www01] executing command
[www02] executing command
** [out :: www01] false
[db1] executing command
** [out :: db1] false
(略)
command finished
failed: "sh -c 'gem list passenger -i'" on www01,db1
やあ、実行できました。「servers:」に続く部分がコマンド実行対象となったホストのリストで、これらに一斉にコマンド送信しています。ですがよく見るといくつかのホストについて「failed」と表示されています。
「[out :: ○○]」という部分は、コマンド実行をした各ホストからの出力を表しています。ここでfalseという出力があったことがわかります。これは指定したgemがインストールされていないときの表示です。gemが見付からなかったことでgemコマンドが正常終了せず、それを検知したCapistranoが「failed」と通知してきていたのです。
つまりCapistrano自体の動作に問題があったわけではなく、Capistranoを通じたコマンド実行結果に問題があったということです。
ところで、これらの失敗ホストのうちのいくつかではgemのインストール先を個別に指定して運用しています。そのため実行するコマンドラインを少し変えて、次のようにしてみました。
task :check_passenger_gem do
run "GEM_HOME=/var/www/apps/GEM gem list passenger -i"
end
これを実行すると次のように結果が変わりました。
$ cap check_passenger_gem
* executing `check_passenger_gem'
* executing "GEM_HOME=/var/www/apps/GEM gem list passenger -i"
servers: ["www01", "db1"]
[www01] executing command
[db1] executing command
** [out :: www01] true
** [out :: db1] false
(略)
command finished
failed: "sh -c 'GEM_HOME=/var/www/apps/GEM gem list passenger -i'" on db1
ホストのうちの一つでは依然としてgemを発見できていませんが、それは少なくとも想定している場所にはインストールされていないためです。実際、RDBMS用として運用しているdb1にはPassengerをインストールしていないのです。
このように、一括してコマンド実行するときには、ホストの用途に応じて実行内容が変わるのが普通です。Capistranoはロールすべてにコマンド実行しようとしますが、タスク定義のやり方を少し変えることで、特定のロールにだけ適用されるタスクを作れます。
たとえば先のPassengerの例はHTTPサーバ用のホストでだけ実行できればよいわけですから、ロールwww_serverを対象としたタスク定義を行います。
task :check_passenger_gem, :roles => [:www_server] do
run "GEM_HOME=/var/www/apps/GEM gem list passenger -i"
end
こんなふうに「:roles => [〜]」というタスク定義に記述を加えます。「[〜]」の部分では複数のロールを指定でき、その場合にはカンマで区切ります。ここでの記述には「:」が必要です。
定義を書き換えても実行方法はこれまでと変わりません。
$ cap check_passenger_gem
* executing `check_passenger_gem'
* executing "GEM_HOME=/var/www/apps/GEM gem list passenger -i"
servers: ["www01", "www02", "www03"]
[www01] executing command
(略)
** [out :: www01] true
command finished
結果が変わりました。「servers:」の部分が変わっていますし、ここでは省略していますが「out :: ○○」の数も変わっているのを確認できるはずです。
さて、実際の場面について考えると、ここでの例のようなgemがインストールされているかどうかの確認だけして終わりということはなく、そこからさらにプロセスが動作しているかとか、設定が正しいかといった作業が続きます。このように一連のコマンド実行がセットにしたのが現実世界のタスクですが、Capistranoのタスクでも複数のコマンド実行を記述することが可能です。それには単純に必要なだけのrunを書き連ねればよいのです。
では次の例としてApache HTTPサーバの設定を確認し、問題なければリスタートするというのを考えてみます。手作業で行うと次のようになるでしょうか(Debian GNU/Linuxの場合)。
apache2ctl configtest
sudo apche2ctl graceful
これをタスクに書き起こすとこうなります。
task check_and_restart_apache do
run "apache2ctl configtest"
sudo "apache2ctl graceful", :pty => true
end
レシピの側でも「sudo」が出てきました。Capistranoでは特定の権限でのコマンド実行のためにはsudoコマンドを使用していて、sudoコマンドを利用したコマンド実行には「run」の代わりに「sudo」を使います。もちろん、これを行うためには、コマンド実行の対象となる各ホスト側でsudoコマンドが利用可能でなければなりません。(コマンドライのおしりに「:pty => true」という新たな呪文が付きましたが、これもここでは「そういうものだ」と考えておいてください。)
Capistranoを通じたsudoコマンドの利用では認証のためのパスワード入力の省略が可能です。たくさんのホストへ相手にしなければならないとき、ホストごとにパスワードを入力するのは一苦労です。そのため、Capistranoでは、全ホストのパスワードが同一であることを前提に、一度入力されたパスワードを内部で保持しておいて、必要に応じて代理でパスワード入力を行っています。
ですから、上のタスクの実行に際して、ロール定義されたホストが10個あっても20個あってもパスワード入力を求められるのは一度だけです。
さて、このタスクを実行する前に気になってくるのは、configtestに失敗したらgracefulを実行したくないということです。configtestに失敗するようならその時点で実行を中止してほしいのですが…… 実際のところ、特に気にかける必要はありません。Capistranoは、ちょうとmakeコマンドがそうするように、一連のコマンド実行の途中で失敗するようなことがあればその時点で全体の実行を中止します。
ですから、この例のように特に何の記述もないようであっても、目的はかなえられているのです。少し注意が必要なのは、対象ホストのうちのどれか一つででも引っかかることがあれば、全ホストでその実行を中止するという点です。この例なら、どれか一つのホストで設定が間違っていれば、すべてのホストでgracefulは実行されません。(ただし、これには回避方法も用意されています。)
これでひとまずの説明は終わりです。ですがその前に。
環境作りの中であげた四つの方法の最後に、インストールせずに試すというのを入れていました。この方法は、結局のところ各種のソフトウェアが必要になるのは変わりありません。ただ、これらはインストールするまでもなく利用できますので、たとえばこんなふうにすると試せるようになります。
$ mkdir tmp
$ cat <<E | while read url; do wget -qO- $url | tar zx -C tmp; done
http://github.com/capistrano/capistrano/tarball/76488f18268bfb34a54d7bb82ee8286d65ac4e00
http://github.com/net-ssh/net-ssh/tarball/v2.0.19
http://github.com/net-ssh/net-sftp/tarball/v2.0.4
http://github.com/net-ssh/net-scp/tarball/v1.0.2
http://rubyforge.org/frs/download.php/51134/net-ssh-gateway-1.0.1.tar.gz
http://rubyforge.org/frs/download.php/68882/highline-1.5.2.tgz
E
$ cp -a tmp/*/{bin,lib} .
$ rm -rf tmp
$ RUBYLIB=$(pwd)/lib bin/cap invoke HOSTS=db1 COMMAND='echo Hello, World!'
* executing `invoke'
* executing "echo Hello, World!"
servers: ["db1"]
[db1] executing command
** [out :: db1] Hello, World!
command finished
実行のテストを行っているところではまた新たな呪文が増えていますが、ここでは実行できているということだけ確認できれば十分です。もし続きを書くことがあれば、またそのときに説明できるかもしれません。
なお、このようなやり方は、Capistranoや各ライブラリのバージョン変わってもいつでも使える方法というわけではありません。あくまでお試し、限定的なものと考えてください。
では今日これまで。明日がんばりましょう。
昨日、VirtualBox 上の Vine 5.1 が妙に重たかったので、VBoxAdditions を入れ直したりしてたら、いきなりホストの X ごと落ちてしまった。
なんだ!?と思い、もう一度ログインし直して原因を調べようと top を見たら、parcellite が暴走して CPU をぶん回してくれてるのが分かった。
最初は最新の環境でリビルドすれば直るかと思ったものの、src.rpm をリビルドしてインストールしてもダメで、結局 ~/.local/share/parcellite フォルダをリネームすることで解消できた。
それにしても、これのせいで Vine 5.1 の仮装マシンが壊れちやったのは痛いなぁ……。
Powered by twtr2src
と言うことで、先週の金曜日の午後に OSC 2010 Tokvo に言ってきたので、その感想を思いつくまま書いてみる。
〇会場が遠い
午前中仕事をしてから向かったんだが電車で2時間以上かかった。(まあ途中間違えて一つ前の駅で降りなければ2時間丁度くらい)
〇独特な雰囲気
これ系のイベントは初めてだったけど、なかなか独特な雰囲気だった。
スーツ4:ギーク3:カジュアル2:オタク1、みたいな感じ。
〇レイアウトいまいち
いわゆる企業出展の部屋は机の島の内側に人が居て、入ってくる人と向き会える感じになっていたけど、コミュニティーの出展している部屋は机の島の外側に人が座る(=入ってくる人に背中を向ける)感じになっていて、なかなか見に来た人と話しがしにくかった。
どうしても仲間うちで話し込んでる風になってしまうので、この点は次回是非改善して欲しいと思う。
〇オライリー
すごいたくさん本を売っててびっくりした。
あと出展したテーブルの真向かいに居た Momonga の方達から、コアでコミットしてるのは数名とか人手が足りないとか開発者が高齢化してきてる、なんて(一部共感できる)悩みや、Momonga にはユーザーに位置する人は居ないんです、みたいな話が聞けて、なかなか興味深かった。
# 土曜日の LT が聞けなかったのだけが
# 唯一の心残りかな。
@k3c it's just he has e-mailed me in English - if he wrote in Chinese, Spanish, and many others, I would have no way to respond to :)
posted at 15:27:11
TOP PRIORITY: let her take a nap / 最優先事項: 娘を昼寝させる
posted at 12:42:05
so many things to get done, no time to do - what I gonna do now first?
posted at 12:38:10
今日二回目の「パパー うんちしたー」おなかがゆるいのではなくてしっかり固い奴なので 気にすることはない感じ
posted at 12:32:33
電話がかかってくれば不合格 電話がなければ抽選へ進める まだ電話はない パパはどきどきの月曜午後 本人はご飯食べてはしゃぎまくり
posted at 12:28:10
another "Michael" joinin' in - it's Michael Bublé singin' on stage!
posted at 12:16:40
マイコー!
posted at 12:11:40
Neil Young キター "Long May You Run"
posted at 11:58:19
@vivalamusica_cl いつも なぜ「ポロヴェッツ人の踊り」じゃないのか ふと考えてしまいます / ボロディンの「だったん人の踊り」考 http://bit.ly/dpitTJ
posted at 11:41:35
どんなにチャリをぶっとばしていっても13番 希望の日時はとれずやや残念 帰宅後は「ぱぱー うんちしたー」でトイレに付き添い 長かった
posted at 10:58:58
gotta go hurry to the creche to make reservation for day nursing / 大急ぎで来月の一時保育予約に行かねば
posted at 08:40:06
Powered by twtr2src
http://twitpic.com/15ujwp - Feb. 28, 2010: Is she a heavy drinker of kids' syrup for colds? / 小児用風邪シロップの呑ん兵衛?
posted at 22:53:53
なにをやってもダメ出しされる気分ってこんな感じかな
posted at 11:17:33
PMTUD (Path MTU Discovery)が効かないのか何なのか、特定のホストとの通信でパケットロス・再送が発生していた。該当ホストへの経路にPMTUD blackholeがあるのは判明したのだが、吸い込まれた時のような完全な停止は発生しておらず、イマイチよくわからない。で、ここしばらく悩んでいたのだが、やっと解消した。
黙っていましたが、実は OSC の展示ブースに置いていました私のデモ機 Eee PC 901-16GB は、まだ 5.0 でした(笑)。 早速、5.1 へアップグレードしました。まずは、apt line を 5.1 へ向けます*1。 /etc/apt/sources.list.d/main.list rpm [vine] http://updates.vinelinux.org/apt 5.1/$(ARCH) main updates rpm-src [vine] http://up ...
いつもぶらりと足を運ぶオープンソースカンファレンス(以下、OSC)。今回は、Project Vineとして、展示ブースとセミナーをする側になりました。 さっそく、セミナーの Agenda(PDF)と展示ブースで配っていたビラ(PDF)を置きました。どちらの PDF も一度ブラウザでアクセスしてから、ファイルをダウンロードして下さい。ちなみに、ともに TeX で作りました(w セミナー:http://trac.vinelinux.org/browser/people/munepi/documents ...
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
前日に日帰り出張が入ったりしてバタバタしたものの、なんとか仕事をやり繰りし、良く分からないと怪訝な顔の嫁から OK が貰えたので、OSC 2010 Tokvo のお手伝いに行ける事になった。
と言っても金曜日の午後から半日だけだけど……。
(もちろん夜の懇親会?も参加します)
まあ、一人で準備やアナウンスやらを頑張ってくれている munepi さんのお手伝いがちょっとでも出来たら良いかなと。
くまのPCをWindows 7 professionalにしてみた(従来はWindows XP professional)。しかも64bit。我が家のSMBネットワークはドメイン構成のためprofessionalが必要なのだが、高かったorz。
多少は重くなるかと思っていたが、アプリ起動が高速化されているせいか、なかなか軽く動く。 必要なアプリもだいたい動くようでひと安心。
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
browse-urlには、browse-url-firefoxがあるんだけれども、browse-url-google-chromeが当然のごとくない(笑) でも、browse-url-genericが定義されているので、こいつにchromiumを食わせてみたら、問題なくURLが開けた。 (setq browse-url-browser-function 'browse-url-generic) (setq browse-url-generic-program "chromium&q ...
Powered by twtr2src
昨晩に作成した vbuilder の bash 用補完スクリプトを vbootstrap-0.0.15 に同梱しました。 VineBootstrap ? VineSeed vbuilder-bash-completion.sh - VineSeed Trac/Wiki 設定 ${HOME}/.bashrc などに、以下の行を追加します。 . /etc/bash_completion.d/vbuilder 以後、bash を起動するたびに、この vbuilder の補完が有効になります。 ...
[rpm 作成済み] The Legend of Edgar 2D アクション RPG です。”Wonder Boy 2” のようなゲームです。 残念なことに、ja.po が無い!!!誰かやりませんか?(w Project: Starfighter 宇宙空間を舞台にした 2D シューティングゲーム。上記の ”The Legend of Edgar” と同じところが製作している。 26 ミッションもあるので、なかなか飽きがこないのも魅力的です。 これも日本語化したら、きっと楽しいだろうなー(w [ ...
Powered by twtr2src
ここのコメント欄で munepi さんが提案してくれたビルドログのサイズの丸め方を、直に self-build-rpm.sh 叩きながら試していたところ、引数で渡すログサイズを段々小さくしていくと、ある所から rpm パッケージのビルドに失敗するのに気付いた。
なんじゃこりゃ?と思いつつ sh -x のデバッグ出力を眺めながら試行錯誤した結果、こんな事が起きていることが分かった。
ビルドの進捗を zenity で表示する為にスクリプト中でパイプを使って標準出力を渡している所がある。
rpmbuild(1) | tee(2) | percentage(func)(3) | zenity(4)
rpmbuild の出力を tee に渡してログファイルに書き出しつつ、自前の関数 percentage でログサイズとの比率を計算して一定間隔で出力し zenity でプログレスバーを表示する、という流れ。
ここでスクリプトに意図的に小さいログサイズを渡してやると、
- ビルド開始
- zenity がプログレスバーを表示
- 比率が100を越える
- zenity が自動で閉じる
- でもビルド継続
- percentage が比率を計算して出力
- でもパイプの後ろで受け取るプロセスが無い
- エラーで終了~
となりサブシェル全体が落ちるので、rpm のビルドも強制終了されていた。
という事で対策として比率が100を越えたら出力しないように percentage 関数を修正して無事 OK に。
# シェルのパイプが「詰まる」なんて知らなかったので
# 良い勉強になりました。眠かったけど……。
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
☆お知らせ☆ オープンソースカンファレンス2010 Tokyo/Spring に Project Vine が参加します。 また、同時に、Vine Linux 5.1 リリースパーティを開催します。 お知り合いをお誘いの上、ふるってご参加下さいませ。どうぞ宜しくお願いいたします。 [vine-users:080013] オープンソースカンファレンス2010 Tokyp/SpringおよびVine Linux 5.1 リリースパーティのお知らせ [vine-users ...
input タグを知っている人なら、誰でも考えると思います。 実用上、デフォルトで「録画ファイルも削除する」の方が便利です。 diff -up epgrec/templates_c/%%85^85A^85AE177A%%recordedTable.html.php~ epgrec/templates_c/%%85^85A^85AE177A%%recordedTable.html.php --- epgrec/templates_c/%%85^85A^85AE177A%%recordedTable.h ...
2010年1月18日 - 2010年2月7日の読書メーター
読んだ本の数:3冊
読んだページ数:573ページ
■
ちづかマップ[rakuten]
地図いいねー。古地図に手を出してみたくなった。
読了日:01月30日 著者:衿沢 世衣子
http://book.akahoshitakuya.com/cmt/4740790
■
ファンタズム (WINGS COMICS)[rakuten]
よくかかれていておもしろかった。
読了日:01月25日 著者:雨隠 ギド
http://book.akahoshitakuya.com/cmt/4740817
■
リテイク・シックスティーン[rakuten]
なんだか今がスカスカな感じがした。投げ出したくなる気持ちや状況を、考え込むとか想像するとかでなく、ついふり返ってしまうような。内向きに同情してしまいかねないような。
読了日:02月07日 著者:豊島 ミホ
http://book.akahoshitakuya.com/cmt/4850562
▼読書メーター
http://book.akahoshitakuya.com/
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
GROUP BYでグループ化した列を連結したいな、と思って調べていたら発見。たぶんMySQL限定で。以下のようなテーブルを作って……。 CREATE TABLE TABLE1 ( ID INT PRIMARY KEY AUTO_INCREMENT, GROUP_NUMBER INT, STR VARCHAR(255) );
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src
Powered by twtr2src