2008-05-20

Rubyで「ファイル逆から表示」

Rubyで「ファイル逆から表示」

ファイル出力を逆から表示するプログラムを作成してみました。
ログを整形するときにちょっとやってみようと・・

(例)
1
2
3

3
2
1


reverse_lines.rb
filename = ARGV[0]

file = open(filename)
info = Array.new

while text = file.gets do
info.push(text)
end
file.close

puts "original:"
puts info
puts "reverse:"
puts info.reverse


実行
$ruby reverse_lines.rb hoge.txt


実行結果
original:
1
2
3
reverse:
3
2
1


参考
[Ruby][勉強会]第3章コマンドを作ろう
http://d.hatena.ne.jp/syou6162/20080206/1202258516

Rubyで「ファイル情報出力」

カレントディレクトリのファイル情報を取得するプログラムを書いてみました。

file_info.rb
Dir::glob("**/*.*").each {|f|
puts "#{f},#{File::stat(f).size},
#{File::stat(f).mtime.strftime("%Y/%m/%d %H:%M")} "
}


実行(hogeディレクトリの中のファイルを確認する)
$cd hoge
hoge>$ruby ../file_info.rb


実行結果
ファイル名、サイズ(バイト)、修正日の順に出力されます。
hoge1.txt,36,2008/05/20 10:10
hoge2.txt,203,2008/05/20 10:11
hoge3.txt,97,2008/05/20 10:11

2008-05-12

Rubyで「ファイルの内容消去」

Rubyでファイル内容を消去する方法がありましたので
メモっておきます。

erase_file.rbのソース

f = ARGV[0]
File.open(f,'w'){|file| file = nil}


端末から実行します。

$ruby erase_file.rb test.txt


実行結果
test.txtの内容が消去される。
(当然ですが、test.txtのファイルは残ったままで
 中身だけが削除される。)


[参考]ruby-talk-googleより
http://groups.google.co.jp/group/ruby-talk-google/browse_thread/thread/d3f54880a601b23f

PS:実際にはどのような使われ方するかはよく分からないけど。
  ファイル削除して、もう一度ファイル作成するだけと思ったりもする。

2008-05-09

Rubyで「データ整形」

試験データ作成に使えそうな
データ整形をメモっておきます。

◇zero suppress有り
例)10⇒0000000010

ソース
i = 10
zero_i = i.to_s.rjust(10,"0")
puts zero_i
puts "%010d " % i

※やり方は、2つ。どちらでもOK。

実行結果
0000000010
0000000010


◇固定長(半角空白埋め)
例)
「10」⇒「########10」
「10」⇒「10########」
※「#」は「空白」と読み替えてください。

ソース
i = 10
sol_i1 = i.to_s.rjust(10," ")
sol_i2 = i.to_s.ljust(10," ")
puts sol_i1
puts sol_i2
puts "% 10d" %i


実行結果
        10
10
10


◇半角から全角への変換

han2zen.rbのソース
require 'jcode'
s = ARGV[0]
puts s.tr('0-9A-Za-z-','0-9A-Za-zー')

端末から実行する。

$ruby -Ku han2zen.rb 1234567890abcdEFGH-

※windowsのsjisエンコードの場合は、ruby -Ks とする。


実行結果
1234567890abcdEFGHー

※全角に変換される。

[参考]
http://bbs.ddc.co.jp/mt/indesignbbs/archives/9507_20060709111700.html

Rubyで「ランダム生成」

乱数作成方法をメモ。

(1)1~3までの乱数
rand(3)+1

(2)0~3までの乱数
rand(4)

ソース
10.times{
puts "(1): #{rand(3)+1} (2): #{rand(4)}"
}


実行結果
(1): 3 (2): 1
(1): 2 (2): 1
(1): 1 (2): 1
(1): 1 (2): 0
(1): 3 (2): 0
(1): 2 (2): 3
(1): 3 (2): 3
(1): 1 (2): 1
(1): 2 (2): 1
(1): 2 (2): 0

Rubyで「ランダムに日付取得」

1万件のテストデータを作成するとき、
登録日をランダム作成する必要があり、
こんな感じで作ってみました。

◇期間を指定して、ランダムに日付を生成する。

ソース
require 'date'

def rand_date(d_from,d_to)
from = Date.parse(d_from)
to = Date.parse(d_to)
days = to - from + 1
return from + rand(days)
end

5.times{
puts rand_date("1978-09-30","1980-10-10")
}


実行結果
1979-08-02
1979-08-13
1980-05-03
1979-02-06
1979-01-30

[参考]
http://d.hatena.ne.jp/rubyco/20070704/date

Rubyで「繰り返し処理(times)」

Rubyすごい。こんな簡単に書けるなんて
感激です。
システム試験のデータ作成に色々使えそう。

◇100件のデータを作成

datacreate.rbのソース
100.times{ |i|
puts i
}

実行結果
1
2
3
.
.
100

◇ファイル出力は標準出力をリダイレクトする
$ruby datacreate.rb > testdata.txt

2008-05-06

Firefox3.0に「アルク(英和&和英)」検索用プラグインを追加

最近、英語のサイトをよく見るようになったので、
firefox3.0に「アルク」検索プラグインを追加した。

(1)下記のリンクへアクセス

[アルク(英和&和英辞書)用検索プラグイン for Firefox]
http://chikura.fprog.com/index.php?UID=1181057537

(2)「「アルクで検索」プラグイン for Firefox2.0(引用)」の横にある
  [インストール]をクリックする。

2008-05-05

ubuntu8.04に「zsh」をインストール

zshを一度使ってしまうと、もうbashには戻れないので、
さっそくインストール。

(1)zshのインストールと設定
1. sudo apt-get install zsh
2. /home/username/配下の.zshrcを変更※

 ※変更内容は「漢のzsh」のサイトからそのままコピー
 http://journal.mycom.co.jp/column/zsh/022/index.html

以下、「漢のzsh」より引用しました。


# users generic .zshrc file for zsh(1)

## Environment variable configuration
#
# LANG
#
export LANG=ja_JP.UTF-8


## Default shell configuration
#
# set prompt
#
autoload colors
colors
case ${UID} in
0)
PROMPT="%B%{${fg[red]}%}%/#%{${reset_color}%}%b "
PROMPT2="%B%{${fg[red]}%}%_#%{${reset_color}%}%b "
SPROMPT="%B%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%}%b "
[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"
;;
*)
PROMPT="%{${fg[red]}%}%/%%%{${reset_color}%} "
PROMPT2="%{${fg[red]}%}%_%%%{${reset_color}%} "
SPROMPT="%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%} "
[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"
;;
esac

# auto change directory
#
setopt auto_cd

# auto directory pushd that you can get dirs list by cd -[tab]
#
setopt auto_pushd

# command correct edition before each completion attempt
#
setopt correct

# compacked complete list display
#
setopt list_packed

# no remove postfix slash of command line
#
setopt noautoremoveslash

# no beep sound when complete list displayed
#
setopt nolistbeep


## Keybind configuration
#
# emacs like keybind (e.x. Ctrl-a goes to head of a line and Ctrl-e goes
# to end of it)
#
bindkey -e

# historical backward/forward search with linehead string binded to ^P/^N
#
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^p" history-beginning-search-backward-end
bindkey "^n" history-beginning-search-forward-end
bindkey "\\ep" history-beginning-search-backward-end
bindkey "\\en" history-beginning-search-forward-end


## Command history configuration
#
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt hist_ignore_dups # ignore duplication command history list
setopt share_history # share command history data


## Completion configuration
#
fpath=(~/.zsh/functions/Completion ${fpath})
autoload -U compinit
compinit


## zsh editor
#
autoload zed


## Prediction configuration
#
#autoload predict-on
#predict-off


## Alias configuration
#
# expand aliases before completing
#
setopt complete_aliases # aliased ls needs if file/dir completions work

alias where="command -v"
alias j="jobs -l"

case "${OSTYPE}" in
freebsd*|darwin*)
alias ls="ls -G -w"
;;
linux*)
alias ls="ls --color"
;;
esac

alias la="ls -a"
alias lf="ls -F"
alias ll="ls -l"

alias du="du -h"
alias df="df -h"

alias su="su -l"

case "${OSTYPE}" in
darwin*)
alias updateports="sudo port selfupdate; sudo port outdated"
alias portupgrade="sudo port upgrade installed"
;;
freebsd*)
case ${UID} in
0)
updateports()
{
if [ -f /usr/ports/.portsnap.INDEX ]
then
portsnap fetch update
else
portsnap fetch extract update
fi
(cd /usr/ports/; make index)

portversion -v -l \<
}
alias appsupgrade='pkgdb -F && BATCH=YES NO_CHECKSUM=YES portupgrade -a'
;;
esac
;;
esac


## terminal configuration
#
unset LSCOLORS
case "${TERM}" in
xterm)
export TERM=xterm-color
;;
kterm)
export TERM=kterm-color
# set BackSpace control character
stty erase
;;
cons25)
unset LANG
export LSCOLORS=ExFxCxdxBxegedabagacad
export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
zstyle ':completion:*' list-colors \
'di=;34;1' 'ln=;35;1' 'so=;32;1' 'ex=31;1' 'bd=46;34' 'cd=43;34'
;;
esac

# set terminal title including current directory
#
case "${TERM}" in
kterm*|xterm*)
precmd() {
echo -ne "\033]0;${USER}@${HOST%%.*}:${PWD}\007"
}
export LSCOLORS=exfxcxdxbxegedabagacad
export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
zstyle ':completion:*' list-colors \
'di=34' 'ln=35' 'so=32' 'ex=31' 'bd=46;34' 'cd=43;34'
;;
esac


## load user .zshrc configuration file
#
[ -f ~/.zshrc.mine ] && source ~/.zshrc.mine



(2)bash→zshにシェル変更
1. chsh -s /usr/bin/zsh
2. パスワードを入力
3. 再ログイン

ubuntu8.04に「subversion」をインストール

下記を端末から実行する。
(1)svnのインストール
sudo apt-get install subversion

(2)リポジトリの作成
1. mkdir /home/username/hogehogerepo
2. svnadmin create /home/username/hogehogerepo

(3)初期インポート
1. cd hogeporoject
2. svn import file:///home/username/hogehogerepo -m "初期インポート"
3. importされる。

(4)最初のチェックアウト
1. cd hogepoject
2. rm * (とりあえず消す)
3. svn checkout file:///home/username/hogehogerepo .
4. checkoutされる

※3は、最後にカレントディレクトリ[.]が必要です。

(5)ファイル変更後の確認
svn status

「M」管理対象(リポジトリ)の内容を変更するもの
「!」作業領域から削除したもの(管理対象(リポジトリ)にはあるもの)
「D」管理対象(リポジトリ)から削除するもの
「?」作業領域に追加したファイル(管理対象(リポジトリ)にはないもの)
「A」管理対象(リポジトリ)に追加するもの

(6)「?」を管理対象として追加
svn add path/to/filename

※svn statusにて、「?」→「A」に変更されていることを確認。

(7)「!」を管理対象(リポジトリ)から削除
svn delete path/to/filename

※svn statusにて、「!」→「D」に変更されていることを確認。

(8)コミット
svn commit -m "hogehogeを変更"

「参考図書」
入門 Sebversion Windows/Linux 対応

検索条件に一致するフォルダの一括削除(ex .svnファイル)

検索条件に合うフォルダの一括削除(ex .svnファイル)

.svnファイルは、各フォルダごとに生成されるため
下記のように一括削除をした。メモとして残しておく。

端末で下記を実行する。
※ 「\ 」は「半角円マーク」と読み替えてください。
※ foldername を .svn で実行した

find . -name "foldername" -exec rm -rf {} \;

r: ディレクトリ削除(サブディレクトリ、及びサブディレクトリ配下のファイルも含む)
f: 強制的に削除(確認メッセージを聞いてこなくなる)

Rails1.2.6セットアップ

ruby + rails + ・・・のセットアップを行ったので忘却録。

下記を参考にrails環境を構築。
(ubuntu8.04による、railsのセットアップ方法が記載されている。)

https://help.ubuntu.com/community/RubyOnRails

ここも参考に残しておく。
http://wiki.rubyonrails.com/rails/pages/RailsOnUbuntu


(1)ruby,apache2のインストール
sudo apt-get install ruby-full build-essential apache2 apache2-mpm-prefork apache2-prefork-dev
(2)gemのインストール
wget http://rubyforge.org/frs/download.php/34638/rubygems-1.1.0.tgz
tar xzvf rubygems-1.1.0.tgz
cd rubygems-1.1.0
sudo ruby setup.rb
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
sudo gem update --system

(3)rails,passengerのインストール
sudo gem install rails -y -v 1.2.6
sudo gem install passenger
sudo passenger-install-apache2-module
sudo gem update --system

※railsは1.2系を指定してインストールした

(4)passengerの設定
1. /etc/apache2/apache2.confに下記を追記。
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-1.0.3/ext/apache2/mod_passenger.so
RailsSpawnServer /usr/lib/ruby/gems/1.8/gems/passenger-1.0.3/bin/passenger-spawn-server
RailsRuby /usr/bin/ruby1.8

2. 端末から実行
sudo a2enmod rewrite
sudo a2ensite ror.myhost.com
sudo /etc/init.d/apache2 restart

(5)mysqlのインストール
sudo apt-get install libmysql-ruby mysql-server

※但し、apache2+passengerにてrailsの画面が表示されないため
 webrickを利用中。ま、設定をちょっとかえればいいのかなと
 思いつつ、面倒くさいので放置。





2008-05-03

ubuntu7.10->8.04upgradeではまったこと。

ubuntu7.10→8.04へのアップグレードを試みたところ・・・、
アップグレード中にエラー発生。
source.listを変更し、手動にてアップグレードを試みたところ・・、
起動しなくなり見事に再起不能(起動中に止まる・・)
になりました。

部屋に転がっていた、ubuntu7.10(CD-ROM)にて
再インストールして、その後、ubuntu8.04にアップグレード。
・・・うまくいきました。

しかし、環境構築をまた初めから行わないといけないため、
憂鬱です。
ローカルにあったデータは、バックアップを取るのが重要
ですがオンラインで作成できるものは、下記の教訓のように
移行してみようと思う。

教訓:
・メールはgmailを使う。
・RSSリーダはgoogleのものを使う。
・firefoxのscrapbookは止めて、google notebookを使う。
・環境構築などのログ情報は、ブログにまとめる。

作業ログ:
◇anthy(日本語入力環境できないので改善)
「半角/全角」キーが「CTL」+「Space」に変更される。

対処方法:
xorg.confを変更。
[前]Option "XkbVariant" "latin,"
[後]Option "XkbVariant" "106,"
http://forum.ubuntulinux.jp/viewtopic.php?id=1838

◇ビープ音の消去
システム→設定→サウンド→ビープ音タブ
 「システムのビープ音を有効にする」チェック解除