Rails 感想と再入門しないと
久しぶりに新しいサービスを作ろうかという事になり、最新のRailsでやろうとしたのですが・・・
今のRailsの最新は 2.3.4 ですか。えらい変わってますね。
家のLinuxマシンでgem listすると、以下のように古いRailsがたくさんって感じです。
rails (2.1.0, 2.0.2, 1.2.3, 1.2.1, 1.1.6, 1.1.4, 0.14.3, 0.14.2, 0.13.1, 0.12.1)
0.12.1なんて、リリースは2005年4月ですか。確かにいろいろ調べたのは、2005-2006年頃だな。某Rails本の著者が知り合いのところに居候していて、いろいろ教えてもらったりとか。前のサービスは1.2.3で作ってリリースしたはず。それから2年以上経ってるんだし、そんなもんかな。Railsも完全にメジャーになったしなぁ。
しかし、2.0で大きく変わって、最新の2.2->2.3でもいろいろ変わってるようで、これは再度勉強し直さないといけない。
アクセスログをAWKで処理
アクセスログの、特定のアクセスパターンを調べたいときにAWKで処理しているのですが、時々、携帯キャリア毎に調べたい時があります。User-Agentを見て振り分けてもいいのですが、どうも偽装されてるものとかがあります。そこで、携帯キャリアの公開しているIPレンジからマッチングをしたいと思うと、rubyとかperlでちょろっと書く方が早いはず。でも、さっと調べるならawkが楽。それに、困って調べるサーバは、大抵rubyが入ってない事もあるし、他人のサーバでむやみにrubyとかperlのモジュールを入れられない。でもGoogleさんに聞いてもawkでIPの処理を書いてるのはみかけない。
そこで、何処にでも入っている awk (gawk) のみで処理させたい。
で、書いてみた。条件は、
#!/bin/awk -f # function ip2bin(address){ split(address,ip,".") return lshift(ip[1],24) + lshift(ip[2],16) + lshift(ip[3],8) + ip[4] } function ip2mask(address,mask) { return sprintf("H%x",lshift(rshift(address,(32 - mask)),(32 - mask))) } function is_match(ipaddr, iparray) { result = 0 for (var in iparray) { split(iparray[var],a,":") ip_s = ip2mask(ip2bin(ipaddr),a[2]) if (ip_s == a[1] ) {result = 1; break} } return result } function is_mobile(ipaddr) { career = "PC" if (is_match(ipaddr, ip_docomo)) {career = "DoCoMo"} if (is_match(ipaddr, ip_kddiau)) {career = "KDDIAU"} if (is_match(ipaddr, ip_softbank)) {career = "SoftBank"} if (is_match(ipaddr, ip_emobile)) {career = "Emobile"} return career } function get_asso_time(time) { split(time, time_a, ":") min = time_a[3] - time_a[3] % 5 return sprintf("T%s%02d",time_a[2],min) } function get_method(method) { split(method, m_a, " ") return m_a[1] } BEGIN { FS = "/" while (getline < "mobile_docomo.lst" > 0) ip_docomo[++n] = ip2mask(ip2bin($1),$2)":"$2 while (getline < "mobile_kddiau.lst" > 0) ip_kddiau[++n] = ip2mask(ip2bin($1),$2)":"$2 while (getline < "mobile_softbank.lst" > 0) ip_softbank[++n] = ip2mask(ip2bin($1),$2)":"$2 while (getline < "mobile_emnet.lst" > 0) ip_emobile[++n] = ip2mask(ip2bin($1),$2)":"$2 FS = " " car[1] = "PC" car[2] = "DoCoMo" car[3] = "KDDIAU" car[4] = "SoftBank" car[5] = "Emobile" met[1] = "GET" met[2] = "POST" met[3] = "HEAD" printf("T[Time]\tAll") for (c = 1; c <= 5; c++) { for (m =1; m <= 2; m++) { printf("\t%s %s",car[c],met[m]) } } printf("\n") } { gsub(/"/,"",$6) time = get_asso_time($4) mobile = is_mobile($1) method = get_method($6) count[time] += 1 if (count[time] == 1) { for (c in car){ for (m in met) { carmet_count[time,car[c],met[m]] = 0 } car_count[time,car[c]] = 0 } } car_count[time,mobile] += 1 carmet_count[time,mobile,method] += 1 } END { n = asorti(count,dest) for (i = 1; i <= n; i++){ printf("%s\t%d", dest[i],count[dest[i]]) for (c = 1; c <= 5; c++) { for (m =1; m <= 2; m++) { #printf("\t%s %s : %d\n",car[c],met[m], carmet_count[dest[i],car[c],met[m]]) printf("\t%d",carmet_count[dest[i],car[c],met[m]]) } } printf("\n") } }
携帯キャリアのIPレンジのファイルは、以下のような感じで用意。これは DoCoMoさん
210.153.84.0/24 210.136.161.0/24 210.153.86.0/24 124.146.174.0/24 124.146.175.0/24 202.229.176.0/24 202.229.177.0/24 202.229.178.0/24
メモ
チェーンのとんかつ と 専門店のとんかつ
昨日、遅い昼食で、新しい経団連ビル地下の某とんかつ屋チェーンに入った。
最悪!
衣は雑、油切れてなくべったり。出てきたものをパッと見てウエーと思ったぐらい。案の定、味もダメで、なぜか味噌汁とかも微妙に甘くて?チェーンなのに味が違う気がした。同じチェーンで渋谷の店とかだとこんな事はなく、こんな思いをしたのは始めてでした。
あと、店の奥で、マネージャーかわからんけど、怒鳴ってて雰囲気最悪。フロアの店員さんは、普通に接客してて感じは良いのだけど、たぶん一番偉い人と思われる人が全部ブチ壊してる感じです。
で、今日は、別のちゃんとした専門のとんかつ屋でリベンジです。
http://doumon.jp/
何時もながら、とっても美味しい。店も落ち着いている。さらに、こちらの方が安いというのは何故?
ESXi 4.0 と Windows 7
ESXi 4.0を評価しようと入れてみたところ、Windows7で管理クライアントのVMWare vShere clientが動きませんでした。xmlのエラーとか出ます。
対応は、こちら http://communities.vmware.com/thread/211440
Windows 7 は未だRCなんだからとか書かれてますが、結局製品版も同じだったという事ですね。
1. 他のXPとかのマシンから.NET関連のライブラリをコピーする
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\System.dll
を
%ProgramFiles%\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\Lib
にコピーしました。 Lib ディレクトリは作ってます。
2. VpxClient.exe.config に追記する
...
3. DEVPATH という環境変数で、1.のライブラリのPATHを指定
これは、ユーザ環境変数の所に設定しておけばOK
Windows 7 Japanese リリース版
TechNetに出ていたので落としてみているが・・・重いねぇ。プチプチ切れる。