6月
18
2008
Webブラウザ Mozilla Firefox3 がついにリリースってことで、Firefox3 の広告が山手線や新宿駅等の駅のモニタで放送されていました。存在は知ってたけどいつやるかや詳細は知らなかったのでびっくり。
そして Firefox3 は
「24時間の最多ダウンロードソフトウェアに挑戦」
するそうです。
使ったことない人は、この機会にぜひ使ってみて欲しいなあ。
とりあえず、JSTでは2時から集計開始なので、待機してます。w

[Tag:Firefox]
6月
16
2008
今更なんですがDOS プロンプト(cmd.exe)でのエスケープは「^(サーカムフレックス)」なことを最近知りました。
CMD.EXE TIPs とか読んでます。cmd.exe は難しい…(/bin/sh が簡単とは言わないけれども。比較的慣れているだけで…)。
[Tag:cmd]
6月
12
2008
スクリプトの出力を一行一行 “| tee” につなぐことがあります(”script”しろよという話はここでは置いておきます)。
ですが cd コマンドの行を機械的に “| tee” につないでしまうと、上手くいきません。
$ cd somedir 2>&1 | tee logfile
このコマンドは終了時に(somedirではなく)元のディレクトリに戻ってきます。
なぜかと言うと cd コマンドがサブシェルで実行されるため、サブシェル終了時にカレントディレクトリが戻ってしまうからですね。
パイプを使わなければサブシェルで実行されることもなく、想定どおりの動作をさせることができますが、
これとまったく同じ動作をパイプを使わずに行うのは、少なくとも bash では難しいです。
しかし、zsh でかつ “setopt multios” されているならば(デフォルト動作です)、こんな風にできます。
$ cd somedir >logfile >/dev/stdin 2>&1
2つ以上のファイルにリダイレクトすることができます。
また、あくまで tee を使うことにこだわるならば、
$ cd somedir > >(tee logfile) 2>&1
とすることもできます。受ける側のみをサブシェルにすることができます。
>(cmd....), <(cmd....), =(cmd....) はなかなか便利なので、 zsh を使うなら覚えておいて損はありません。
それぞれプロセスを非同期で実行し、>,<の場合はファイルディスクリプタを指すデバイスに置換されます。( echo <(ls) などとしてみると分かるかも )
=(cmd....) は同様ですが、デバイスではなくテンポラリファイルを指します。
$ cat file1 =(echo ------) file2
などと、ファイルを指定する場所に任意のコマンドを差し込むことができます。
man zshexpn の PROCESS SUBSTITUTION の項を参考に。
zsh やっぱスゲエ 、ということで。
[Tag:zsh]
6月
10
2008
普段は windows で ssh 関係を使うときは、 putty ファミリー(?) のツールを主に使っています。putty 本体もそうですが、コマンドラインから plink, pscp あたりもそれなりによく使うことがあります。
また、putty における ssh-agent 相当の pageant も、そういう時には立ち上げて使います。これを使うと、いちいちパスフレーズを入力する手間を省いてくれます。
ところで cygwin のプロセス(bash シェルとか)から plink を立ち上げると pageant を上手く使ってくれません。
作者のページのwishlistに上がっている “PuTTY semi-bug cygwin-clobbers-pageant”
にあるように、これは既知のバグというか、仕様というか、そういうもののようです。
先のページにもありますが、cygwin から pageant を立ち上げれば cygwin から plink を使っても pageant を使えます。しかしその場合、 cygwin を使わない putty や winscp などから pageant を使えない、という…。
この辺を解決するうまい方法があったら誰か教えてください。
[Tag:cygwin, putty]
6月
06
2008
Ruby の便利標準ライブラリ筆頭(個人的感想)である open-uri ですが、
いまだに「open-uri はBasic認証のあるサイトには使えない」という都市伝説(?)が。
こんな風に :http_basic_authentication オプションを与えることでできるよ。
require 'open-uri'
open('http://www.example.com/authenticated_page/',
:http_basic_authentication => ['username', 'password'])
現在のマニュアルには載っていない ので注意。
新しい方にも特に書いてはいないみたい。
ちなみにプログレスバーのために :content_length_proc と :progress_proc が使えるが、簡単に作るとこんな感じに。
open(downloading-filename, 'w') {|f|
f.write open(url,
:content_length_proc => proc{|len|
@len = len
},
:progress_proc => proc{|now|
per = now * 100 / @len
$stdout.print "%15u bytes (%3u%%) |" % [now, per]
$stdout.print "=" * per
$stdout.print ">" if per < 100
$stdout.print "-" * (99-per) if per < 99
$stdout.print "\r"
$stdout.flush
}
).read
}
[Tag:ruby]
6月
04
2008
カスペルスキーと Firefox のアドオン Download Statusbar でダウンロード時に自動ウイルススキャンする話。
AVG8 の場合は Snowland.net のこのエントリのとおり。 → AVG8で手動スキャンするコマンド
カスペルスキーの場合はどうやるか。
続きを読む »
6月
02
2008
ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール
Webサイトの高速化をするための14のルールを提示した本。
主にWebサーバのレスポンスの方法、レンダリングの概要のあたりに関係した手法が紹介されている。JavaScript の高速化などには触れていないので注意。
基本的には「リクエスト数を減らしましょう」「通信量を減らしましょう」「レンダリング回数を減らしましょう」 という話。Webアプリ作ってる人はやるやらないはともかく存在を把握しておくのがいいのでは。
自分のRailsアプリである程度実行に移してみる。
簡単だったのは 「ルール3 Expires ヘッダを設定する」 および 「ルール13 ETag の設定を変更する」。
すべて mongrel でやっていたところを、静的ファイルは apache で返すようにして、その部分でmod_expires による Expires ヘッダの設定をする。
ETag に関しては “FileETag None” を全体に設定。
「ルール4: コンポーネントをgzipする」。 Apache で返すものに関しては mod_deflate でいいとして、rails で返すものは(用意されてないので?)やや面倒。
Rails 1.2.x で動くものとしては、
[http://blog.craz8.com/articles/2005/12/17/rails-outputcompressionfilter] や
[http://craz8.com/svn/trunk/plugins/output_compression/]
がある。2.x に関しては必要になったら調べる。
また、StyleSheet は先、JavaScript は後、というルールを適用。基本的にはlayoutを変更して終わりだったが整合性を取るのがやや面倒なので最初からそうしておくようにしたい。
最後に JavaScript や CSS のファイル数を減らす、というのをやる。こいつは Rails なら task 作っておくのがよさそう。あるいは production と development で読み込むファイルを変えて、 capistrano の task で後処理をするのでもよい。
Rakeでやるならこんなのを lib/tasks に置いたり。
extjs = %w|
public/javascripts/ext/jquery-1.2.3.min.js
public/javascripts/ext/foo.js
public/javascripts/ext/bar.js
|
task :extjs => "public/javascripts/ext/all.min.js"
file "public/javascripts/ext/all.min.js" => extjs do |t|
sh "cat #{t.prerequisites} | ruby script/jsmin.rb > #{t.name}"
end
この例ではついでに JSMIN で縮小化してる。
そんな感じで軽くしたりしたけど、広告が重いままで最終的にはあまり変わらなかったりして。トホー。
あとは ajax でもってくる/レンダリングする部分をやっぱり軽くするってところの方が、 ajax なアプリでは重要ですねー。
[Tag:読書記録]
6月
01
2008
capistrano で deploy する際、あるホスト、あるいはあるロールだけに適用させたい場合はこうする。
“hoge.example.com” というホストに対し deploy:setup
$ cap deploy:setup HOSTS=hoge.example.com
:role => :web なホストに対し deploy:setup
$ cap deploy:setup ROLES=web
ここで指定するものは「,」 区切りで複数指定できる。
$ cap deploy:setup ROLES=web,db
HOST 指定に関しては、user および port を同時に指定できる。
$ cap deploy:setup HOSTS=username@fuga.example.com:port
後からホスト付け足す時にいちいちハマらないように。
[Tag:capistrano, rails]
5月
18
2008
三国志大戦3Master のデータを作っていて、既存の大量の画像にドロップシャドウを付けたものが必要になったので、RMagick を使ったRubyスクリプトなどを書いてみた。
続きを読む »
[Tag:rmagick, ruby]
4月
03
2008
VMware Server Console では、こんなダイアログが毎回出ます。
たいていは Local host のものを使うのでそちらを選択してスルーしますが、
Remote host という項目があるからには外部の ゲストOS にアクセスできるはず!

でもそのままアクセスしようとしても良くわからない…。
ということで、どのようにすればリモートにある VMware Server にアクセスできるかを書きます。
続きを読む »
[Tag:vmware]