2011年11月29日火曜日

gtagsを使う

nginxのソースコードを追うことにしたので、netbeansを使うよりemacsの方が手に馴染んでいるので、
gnu-globalを使って見ることにした。

install

$ sudo apt-get install global
$ cat <<EOF >> ~/.emacs.d/init.el
;; 関数定義に飛ぶ (gtags)
(autoload 'gtags-mode "gtags" "" t)
(setq c-mode-hook
      '(lambda ()
         (gtags-mode 1)
         ))
(when (locate-library "gtags")
  (require 'gtags)
)
(global-set-key "\M-t" 'gtags-find-tag)     ;関数の定義元へ
(global-set-key "\M-r" 'gtags-find-rtag)    ;関数の参照先へ
(global-set-key "\M-s" 'gtags-find-symbol)  ;変数の定義元/参照先へ
(global-set-key "\M-p" 'gtags-find-pattern)
(global-set-key "\M-f" 'gtags-find-file)    ;ファイルにジャンプ
(global-set-key [?\C-,] 'gtags-pop-stack)   ;前のバッファに戻る
EOF
$ cd ~/src/
$ gtags

Jane's Addiction - Stop (Video)

2011年11月28日月曜日

恵比寿


光家


2011年11月25日金曜日

paas mash up

google app engineのquota制限絞りで動かなくなった2ch botの改修するに辺り、幾つかの無料paas環境を繋ぐことにした。
datファイルをgetしてparseしてdbに突っ込んでapiで口を作るところにopenshiftを使用。
未だ手付かずだけど html を生成して保持するところはno.deを使用して、最終型として表示は今まで通りのgoogle app engineに。
db,storage,viewって感じの構成。

それぞれの環境がpython,ruby,javascriptで頭が混乱。
果たして形になるのか微妙だけど楽しい。

2011年11月20日日曜日

node express使う

http://expressjs.com/guide.html

$ npm install -g /tmp/sharks
$ cd /tmp/sharks
$ npm install -d
$ node app.js

no.deにmongodbをinstallする

放置していた no.de も使っていくことにした。
先ずは、mongodbが使えるようにしてみる。
ここを参照に。

$ slogin -l admin sharks.no.de
$ sudo su -
$ curl -O http://wiki.joyent.com/download/attachments/1639170/mongodbnode.sh
$ sh mongodbnode.sh 1.8.1
$ pfexec svcadm enable mongodb

2011年11月19日土曜日

yui compressor

js,cssは圧縮しましょう(余計なお世話ですが)
普段圧縮に使ってるのは yahoo の yui-compressor
debianなら
$ sudo apt-get install yui-compressor
$ yui-compressor --type js -o xxx.pack.js xxx.js
$ yui-compressor --type css -o xxx.pack.css xxx.css

jquery on emacs

js2-modeだとjqueryのコーディングが残念なことに。

解決策を探してたら良さげなのがあった。

espresso-mode

emacs23の場合

$ cd ~/.emacs.d/site-lisp
$ curl -O http://download-mirror.savannah.gnu.org/releases/espresso/espresso.el
$ cat <<eof >> ~/.emacs.d/init.el
(autoload #'espresso-mode "espresso" "Start espresso-mode" t)
(add-to-list 'auto-mode-alist '("\\.js$" . espresso-mode))
(add-to-list 'auto-mode-alist '("\\.json$" . espresso-mode))
EOF

2011年11月15日火曜日

rack on openshift

openshift上でrubyを動かしてみた。
2ちゃんランキングのrssをパースしてjson(風)のものを出力するだけ。
rubyはステップ数が短ければ短いほどカッコイイらしいので頑張ってみた(うそ)。

rackのconfig.ruにこんなのを追加して
map '/get' do
  map '/ranking' do
    run Get2chRanking.new
  end
end

2ch.rbってのにこんなのを書いて
require 'rubygems'
require 'rack'
require 'rss'
require 'json'
require 'parsedate'

$ranking = 'http://2ch-ranking.net/rss/zenban.rdf'
class Get2chRanking
  def call(env)
    rss = open($ranking){ |file| RSS::Parser.parse(file.read) }

    links = []

    rss.items.each do |item|
      url = item.link.gsub(/^\s*http:\/\/.+\?thread=([^\/]+)\/(.+)\s*$/, '\1/test/read.cgi/\2')
      title = item.title.strip.gsub(/\s{2,}/, " ")
      mtime = ParseDate::parsedate(item.dc_date.to_s)
      links.push(Hash["title" => title, "url" => url, "mtime" => mtime])
    end
    links.sort! {|a, b|
      a["mtime"] <=> b["mtime"]
    }
    response = Hash["links" => links]
    [200, {"Content-Type" => "application/json"}, response.to_json]
  end
end

git push
して確認。
一応、それっぽいのが動くようになった。

http://hooligans-psychobilly.rhcloud.com/get/ranking/

と思ったら500エラーが出るようになっている。

debug時にはリモートからtailが出来るのも便利
$ rhc-tail-files --app hooligans

Highliners- Henry the Wasp.avi

king kurt - gather your limbs - live 1984

The Rapids - The Raid (Live 1985)

2011年11月13日日曜日

The Pogues- Fairytale of New York



nice

Mucky Pup, "Batman" Reunion April 2009, NJ




おっさん頑張ってるなー
来日しないかな
次batmanの映画作るならこの曲を使って欲しい、俺ならそうする。

2011年11月11日金曜日

rack

openshiftの問題が解決したのでrackでapplicationを立ち上げて初めてのruby webアプリ作成開始。

最近gaeの制限が厳しくなってデータストア系を別のところに移動させようと考えてたので、そんなapiを作る。

先ずは、rackなるものを勉強。

http://route477.net/w/?RackReferenceJa

ruby reference

openshiftでgit cloneできなかった原因

openshiftはじめる でgit cloneが出来なかった原因が判明。
登録している鍵は dsa で作成してたのだけど、 rsa で作成したものに変更したら、この
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: The remote end hung up unexpectedly
Error in git clone
エラーが解消されて git clone 出来るようになった。

2011年11月8日火曜日

debianでpackageがインストール済みか判定する方法

インストール済みか否かは dpkg -l の戻り値で判定をすればokかと思っていたら違った。 落とし穴があった。 インストールしてたものを削除した場合、configなどが残っていたら 戻り値が 0 になる (--purge付けないでの削除)。 正確に判定するには、dpkg -l 出力結果の 頭に付いているフラグを確認するのが正しそう。 例えば、不要な nano を消してとしても、
$ dpkg -l nano ; echo $?
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                              Version                           Description
+++-=================================-=================================-==================================================================================
un  nano                                                          (no description available)
0
となる。 先頭のフラグの意味は、dpkg -l の出力に書いてあるのも気付かなかった(意識して見てなかった)。 先頭が i ならインストール済みなので判定は、
$ dpkg -l nano | grep -E "^i.+[ \t]+nano"; echo $?
1
とするのが良さそうである。

2011年11月2日水曜日

iptablesでsshdを許可する

既存の状態確認
$ sudo /sbin/service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
sshdのルールをREJECTの上に追加

$ sudo /sbin/iptables -I INPUT 4 -m state --state NEW -p tcp -m tcp --dport 22 -j ACCEPT

確認

$ sudo /sbin/service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
設定保存
$ sudo /sbin/service iptables save
$ sudo /sbin/service iptables restart

2011年11月1日火曜日

最新のnginxを追いかける


#!/usr/bin/env bash

IS_HEALTHCHECK_NGINX_UPSTREAMS=false

SVN_DIR=~/svn/nginx
USR=www-data
GRP=www-data

for dir in $SVN_DIR
do
		test -d $dir || mkdir $dir
done

cd $SVN_DIR
test ! -d trunk && svn checkout svn://svn.nginx.org/nginx/trunk

for i in $(find trunk/ -name "*.orig")
do
		rm -f $i
		rm -f $(echo $i | sed 's/\.orig$//')
done

cd trunk && svn update

REVISION=$(svn info --xml | xmllint - | grep -E "\s*^<commit" | sed -r 's/\s*<commit\s+revision="([0-9]+)">\s*/\1/')

CONFIG_OPTS=

if $($IS_HEALTHCHECK_NGINX_UPSTREAMS)
then
		test -d module || mkdir module
		cd module
		git clone https://github.com/cep21/healthcheck_nginx_upstreams.git
		cd ..
		patch -p1 < module/healthcheck_nginx_upstreams/nginx.patch
		CONFIG_OPTS=${CONFIG_OPTS}" --add-module=module/healthcheck_nginx_upstreams"
fi

test -e Makefile && make clean

CFLAGS="-O3 -mtune=native -m64 -msse -msse2 -msse3 -fstrict-overflow -fopenmp" ./auto/configure \
		--prefix=/usr/local/nginx-${REVISION} \
		--pid-path=/usr/local/var/run/nginx/nginx.pid \
		--lock-path=/usr/local/var/run/nginx/nginx.lock \
		--user=$USR \
		--group=$GRP \
		--with-ipv6 \
		--with-http_ssl_module \
		--with-http_geoip_module \
		--with-http_gzip_static_module \
		--with-google_perftools_module \
		--with-debug \
		$CONFIG_OPTS

make
sudo make install

exit $(true)

Ookiya

Airs rock n roll