_J Blog

学んだ事のまとめやメモなどが中心です

/etc/hosts に設定を書いたときの確認と反映

/etc/hosts は書いて保存したら自動的に反映にされるようですね。
例えばhostsに

127.0.0.1 hogehoge.com

と書いたとき、その確認をnslookupでやったらダメだった。

nslookup hogehoge.com
> ;; connection timed out; no servers could be reached

pingでやったら大丈夫でした。

ping hogehoge.com
> 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.054 ms
> 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.136 ms

当たり前のネタでごめんなさい。

コマンドラインで画像のサイズ変換をする

ImageMagicを使ってみます。
OSはCentOS6.2です。

インストール

cd /usr/local/src
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.8.0-4 #ここのバージョンはそのときの最新に変更してください
./configure
make
make install
ldconfig #これをやらなきゃ読み込まなかった。
convert -version

>Version: ImageMagick 6.8.0-4 2012-11-04 Q16 http://www.imagemagick.org
>Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
>Features: OpenMP 

使い方

convert -geometry 50% orange.jpg 50p.jpg

基本的に縦横比は自動的に維持するらしい

例: test.gif を 320x240 にリサイズして test2.gif という名前で保存

convert test.gif -resize 320x240 test2.gif

The NERD Commenterで独自のコメントアウトを定義する

とあるファイルタイプで対応していないコメントアウトをしたいなと、
思い、拡張できるのかなとNERD Commenterのソース(Github)を読んでいたら、
下記記述があった

if exists("g:NERDCustomDelimiters")
    call extend(s:delimiterMap, g:NERDCustomDelimiters)
endif

どうやら、 g:NERDCustomDelimiters を定義してやれば、
独自のファイルタイプなどでもコメントアウトできそう。

ファイルタイプ hoge のときのコメントアウトを
##- 文字列 -##
というように定義したいときなどは、 .vimrc などに、

let g:NERDCustomDelimiters = {{'hoge': 'left': '##-', 'right': '-##'}}

と書けばできるようになります。

あとで、NERDCommenterのHelp確認してみたら、
ちゃんと「NERDCustomDelimiters」の項があって、そこにしっかり書いてありましたね。
Helpはしっかり見るようにします・・・

git clone 時に origin の名前を指定して clone する

最近使ったので、メモ。ヘルプにも書いてるけど。

$ git clone git@example.com:hogehoge.git -o hoge

そうすれば、originの名前を指定しつつcloneできます
gitconfigはこんな感じ
$ cat hogehoge/.git/config

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "hoge"]
	fetch = +refs/heads/*:refs/remotes/xxxx/*
	url = git@example.com:hogehoge.git

Helpには

--origin        -o  -- use given remote name instead of "origin" 

とある

CentOS-6.3にNginx-1.3.6をインストールする

サーバーを構築する機会があったので、
せっかくだからNginxの現時点での最新バージョンを入れてみた。

Nginxは一旦ビルドすると、モジュールの追加は再コンパイルが必要なので、
使うかもってのは一旦入れてみた。
まあ、開発機だから、いいかなと・・・


・入れたモジュールは下記

モジュール名 説明 参考リンク
Cache Purge Nginxのキャッシュをページ単位で削除したりできる http://labs.frickle.com/nginx_ngx_cache_purge/
Http Headers Morte HTTP レスポンスにヘッダーを付け足せる http://wiki.nginx.org/HttpHeadersMoreModule
Http Redis NginxからRedisを利用できる http://wiki.nginx.org/HttpRedis
Drizzle NginxからDrizzleを利用できる http://wiki.nginx.org/HttpDrizzleModule
Lua NginxからLuaを利用できる http://wiki.nginx.org/HttpLuaModule


インストール手順

rootで行うとします。
※ここは許してください・・・

■Nginxモジュールダウンロード用のディレクトリ作成
mkdir /usr/local/src/nginx_modules && cd /usr/local/src/nginx_modules

■モジュールのダウンロード

●CachePurge
wget http://labs.frickle.com/files/ngx_cache_purge-1.6.tar.gz
tar zxvf ngx_cache_purge-1.6.tar.gz

●HttpHeadersMore
wget -O headers-more-nginx-0.18.tar.gz https://github.com/agentzh/headers-more-nginx-module/tarball/v0.18
tar xzvf headers-more-nginx-0.18.tar.gz

●HTTP Redis
wget http://people.freebsd.org/~osa/ngx_http_redis-0.3.6.tar.gz
tar zxvf ngx_http_redis-0.3.6.tar.gz

●Drizzle
#必要なモジュールインストール
yum install protobuf-devel.x86_64 uuid-devel.x86_64 e2fsprogs-devel.x86_64 libuuid-devel.x86_64 readline-devel.x86_64 boost.x86_64 boost-devel.x86_64 libxml2.x86_64 libxslt.x86_64 libxml2-devel.x86_64 libxslt-devel.x86_64 openssl-devel.x86_64

・gprefインストール(http://www.gnu.org/software/gperf/)
wget http://ftp.gnu.org/pub/gnu/gperf/gperf-3.0.4.tar.gz
tar zxvf gperf-3.0.4.tar.gz && cd gperf-3.0.4 && ./configure && make && make install

・boostインストール(http://www.boost.org/)
wget http://sourceforge.net/projects/boost/files/boost/1.51.0/boost_1_51_0.tar.gz/download
tar zxvf boost_1_51_0.tar.gz && cd boost_1_51_0

・drizzleインストール(https://launchpad.net/drizzle)
wget https://launchpad.net/drizzle/7.2/7.2.4/+download/drizzle-7.2.4-alpha.tar.gz
tar zxvf drizzle-7.2.4-alpha.tar.gz && cd drizzle-7.2.4-alpha

・drizzle-nginx-module
wget -O drizzle-nginx-module.zip https://github.com/chaoslawful/drizzle-nginx-module/zipball/master
unzip drizzle-nginx-module.zip

Lua(モジュール)
wget -O lua-nginx-module.tar.gz https://github.com/chaoslawful/lua-nginx-module/tarball/master
tar zxvf lua-nginx-module.tar.gz

Luaインストール
# Lua5.1xにしか対応していないみたい。
# nginx_lua_moduleのreadmeに書いてあった
#
# もし、皆さんが他の方法でNginxをビルドしてて
# "error: 'LUA_GLOBALSINDEX' undeclared (first use in this function) "
# などとメッセージが出たらLuaのバージョンによる問題の可能性があります。
#
wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
tar xzvf lua-5.1.5.tar.gz && cd lua-5.1.5
make linux && make install

・LuaJIT
# 念のため、2.0
wget http://luajit.org/download/LuaJIT-2.0.0-beta10.tar.gz
tar zxvf LuaJIT-2.0.0-beta10.tar.gz && cd LuaJIT-2.0.0-beta10
make


■Nginxのダウンロード・インストール
wget http://nginx.org/download/nginx-1.3.6.tar.gz
tar zxvf nginx-1.3.6.tar.gz
cd nginx-1.3.6

# Configure
# 念のため --debugつけました。
#
./configure \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_stub_status_module \
--with-http_perl_module \
--with-debug \
--add-module=/usr/local/src/nginx_modules/ngx_cache_purge-1.6 \
--add-module=/usr/local/src/nginx_modules/agentzh-headers-more-nginx-module-6586984 \
--add-module=/usr/local/src/nginx_modules/chaoslawful-drizzle-nginx-module-0f975c6 \
--add-module=/usr/local/src/nginx_modules/chaoslawful-lua-nginx-module-b771a2e \
--add-module=/usr/local/src/nginx_modules/ngx_http_redis-0.3.6

# Make
make && make install

起動

/usr/local/nginx/sbin/nginx
でok

番外編(エラー解決編)

"Can't locate ExtUtils/Embed.pm" のエラー
yum -y install perl-devel perl-ExtUtils-Embed
http://www.netingcn.com/nginx-perl.html

■nginx起動エラー
error while loading shared libraries: libdrizzle.so.4: cannot open shared object file: No such file or directory
ライブラリがロードできていないので

1). LD_LIBRARY_PATH に追加するか,
2). /etc/ld.conf.d/ にロードパスを追加する。

ここでは(2)を選択
下記コマンドを実行する

echo "/usr/local/lib" > /etc/ld.so.conf.d/libdrizzle.conf
ldconfig



以上です。
ご指摘などございましたらどんどんくださるとうれしいです。

クラスインスタンス変数にアクセサを利用しアクセスする

クラスインスタンス変数、モジュール変数に対して、
attr_reader, attr_accessor などのアクセサでアクセスする方法
※利用頻度が低い!って話はおいておいて・・・

class TestClass
  @var = 0 
  class << self
    attr_accessor :var
  end
end

p TestClass.var
#=> 0
p TestClass.var += 1
#=> 1
p TestClass.var += 1
#=> 2


module TestModule
  @var = 0 
  class << self
    attr_accessor :var
  end 
end

p TestModule.var
#=> 0
p TestModule.var += 1
#=> 1
p TestModule.var += 1
#=> 2

Rubyでベンチマークの平均などとれるモジュールをかいてみた

練習がてらに作ってみました。
下記がコードです。

require 'benchmark'
class BBenchmark
  def self.measure(n=1, &b)
    res = []
    Benchmark.benchmark(
      ' ' * 7 +Benchmark::CAPTION, 
      7,
      Benchmark::FORMAT, #1.8.x では Benchmark::FMTSTR
      'total:',
      'avg:'
      ) { |bm|
      n.times do |i|
        res << bm.report((i+1).to_s+':', &b)
      end
      puts '----------------------------------------------------'
      total = res.inject(Benchmark::Tms.new) { |sum, v| sum + v }
      [total, total/n]
    }
    puts '----------------------------------------------------'
    puts
  end
end

利用方法
Ruby標準のベンチマークモジュールとほぼ同じで、
Benchmark.measure の所を少し変更して下記のように書くだけです。

#()内は実施したい回数
BBenchmark.measure(20) {
  a = {hoge: 'moge', foo: 'bar'}.to_json
}

とすれば、以下の結果が出力されます。

             user     system      total        real
1:       0.000000   0.000000   0.000000 (  0.000653)
2:       0.000000   0.000000   0.000000 (  0.000351)
3:       0.000000   0.000000   0.000000 (  0.000311)
4:       0.000000   0.000000   0.000000 (  0.000310)
5:       0.000000   0.000000   0.000000 (  0.000312)
6:       0.000000   0.000000   0.000000 (  0.000325)
7:       0.000000   0.000000   0.000000 (  0.000317)
8:       0.000000   0.000000   0.000000 (  0.000321)
9:       0.010000   0.000000   0.010000 (  0.003624)
10:      0.000000   0.000000   0.000000 (  0.000200)
11:      0.000000   0.000000   0.000000 (  0.000389)
12:      0.000000   0.000000   0.000000 (  0.000206)
13:      0.000000   0.000000   0.000000 (  0.000254)
14:      0.000000   0.000000   0.000000 (  0.000123)
15:      0.000000   0.000000   0.000000 (  0.000152)
16:      0.000000   0.000000   0.000000 (  0.000123)
17:      0.000000   0.000000   0.000000 (  0.000123)
18:      0.000000   0.000000   0.000000 (  0.000117)
19:      0.000000   0.000000   0.000000 (  0.000118)
20:      0.000000   0.000000   0.000000 (  0.000131)
続きを読む