とりあえずリポジトリの準備をば

ひとまず開発環境へのMercurialのインストール

1:開発に使うMacBook

Mac Portsでおき楽インストール

port install mercurial

参考

2:検証用の手元のサーバ(CentOS)

rpmForgeを使えばyumでOK

$wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
$sudo rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
  • yum であっさりインストール完了
$sudo yum install mercurial


う〜ん、とっても楽

3:サクラインターネット

ソースダウンロードしてsetup.pyを叩けばOKなのね

$wget http://www.selenic.com/mercurial/release/mercurial-1.0.2.tar.gz
$tar xvzf mercurial-1.0.2.tar.gz
$cd mercurial-1.0.2
$python setup.py install --home=$HOME/local --force

参考サイト


。。。とインストールまではうまくいったものの、PATHが通ってないらしくhgコマンドがうまく走らないのです。


まあ、ちゃっちゃとシェルの設定を変えてしまえば良いんですが、サクラのデフォルトシェルがcシェルなうえにviがほんまもんのviというとても男らしい仕様なので、軟弱な俺さんはもう少し使いやすい環境に変えたいと思います。

4:[番外編] サクラのサーバ環境を俺好みにする

・ シェルをbashに変更


次のコマンドでユーザ環境を変更します

% chsh -s /usr/local/bin/bash

んで、.bash_profileと.bashrcを作成して、元々あった.cshrcからPATH設定やらを移行して完了

#PATHを移行し忘れてlsコマンドすら効かなくなって涙目になったのは秘密


参考


わーい、やっぱりbashが一番安心ですな


・ viをvimに変更

ソースを落っことしてきてコンパイルしてインストールして。。。。をユーザディレクトリ内でやるだけ

  • ソースを落っことしてきて解凍
 $ wget ftp://ftp.vim.org/pub/vim/unix/vim-7.1.tar.bz2
 $ wget ftp://ftp.vim.org/pub/vim/extra/vim-7.1-extra.tar.gz
 $ wget ftp://ftp.vim.org/pub/vim/extra/vim-7.1-lang.tar.gz

 $ tar jxf vim-7.1.tar.bz2
 $ tar zxfv vim-7.1-extra.tar.gz
 $ tar zxfv vim-7.1-lang.tar.gz
 $ cd vim71
 $ ./configure --enable-multibyte --enable-fontset --enable-python --with-features=big --prefix=$HOME/local
 $ make
 $ make install
  • 後は.bashrcのPATHに$HOME/local/binを追加してviコマンドのaliasを設定
alias vi='vim'


終わったら手持ちの設定ファイル(.vimrc)とプラグイン関連(.vim/)をサーバに送り込んで完了


ちなみによく使うプラグインNERDTreeVCSCommandだったりします


参考


# --enable-pythonオプションが効いてないのが気になるけど、時間が掛かるので後でやるー

5:hgコマンドの設定をして完了

.bashrcにPYTHONPATHを追加して完了

 export PYTHONPATH=$HOME/local/lib/python


とりあえずリポジトリの準備はようやく終わりー、ちょっと休憩

並行作業結果

並行して検証してたVirtual Boxがよい感じ。
Windows XPがかなりさくさく動きます。


Windows版のVMWareと比較してもそんなに遜色ないかも
しばらくはFusion買わなくてすみそうで一安心です


画像加工が手間なのでSSはおちついたら&気が向いたら貼付けるよー

リポジトリの初期設定 その1

まずはメインになるサクラ側

リポジトリ用のディレクトリを作成して初期化コマンドを実行

 $cd repos/jdi
 $hg init

リポジトリ基本設定と公開設定を.hg/hgrcファイルに記述

#Owner設定
 [ui]
  username=owner
#Web設定
 [web]
 #pullの許可
 allowpull=true
 #pushのアクセス権設定[許可ユーザのIDを記述(全許可の場合は*)]
 allow_push = allow_user
 #push時にsslを必須とする 
 push_ssl = true
 #アーカイブのダウンロード許可[許可する形式を記述]
 allow_archive = gz, zip
 #Webページを見れなくするかどうか
 hidden=false
 #リポジトリの名前
 name = Just-Do-It
 #リポジトリの説明
 description = Repository of Just-Do-It
 #サイトのスタイルの指定
 style = gitweb


pushされたくないファイル設定を.hgignoreに記述

  syntax: glob
 *.pyc
 *.pyo
 *.o
 .hgignore
 .project
 .setting
 *.swp

リポジトリ公開用ディレクトリを作成してmercurialパッケージからhgweb.cgiをコピーする。その際にindex.cgiに書き換えておく


ファイルをコピーしたらindex.cgiの次の箇所を環境に合わせてPythonのライブラリへのパスに書き換え

 import sys
 sys.path.insert(0, "/path/to/python/lib")

ついでに次の箇所をコメントアウトしとくとよさそう

 import os
 os.environ["HGENCODING"] = "UTF-8"

最後にリポジトリへのパスを設定して完了

 application = hgweb("/path/to/repository", "app_name")
 wsgicgi.launch(application)


お好みで.htaccessを使ってアクセス制限をしても良いかも

#基本設定
 DirectoryIndex index.cgi
# サクラでは以下の設定は不要
# AddHandler cgi-script .cgi
# Options ExecCGI
 Order allow,deny
 Allow from all

 #アクセス制限設定
 # PUSHのみを制限、PULLも制限する場合はを外す
 
  Require valid-user
  AuthType Basic
  AuthName "Input ID / Password"
  #認証用の.htpasswdファイルを指定
  AuthUserFile /path/to/htpasswd/.htpasswd
 

上記はpushのときだけ認証する設定。
環境によってはntlm認証やらldapやらで統合認証とかも可能でした。

リポジトリの初期設定その2

検証用サーバでのリポジトリ初期設定

サクラ側で公開設定が終わってしまえばhg cloneコマンドで複製できます

 $ hg clone http://plasticscafe.com/repos/jdi/ ./jdi

あとは、作成したリポジトリにユーザ名設定を加えるだけで基本はOK

  • .hg/hgrcファイルに下記を追加
 [ui]
 username = ユーザ名<メールアドレス>

お好みで.hgignoreファイルを作成してたほうが開発は楽そう

  • .hgignoreファイルを下記内容で作成
syntax: glob
*.pyc
*.pyo
*.o
.hgignore
.project
.setting
*.swp

以上で検証環境はだいたいOK

開発環境のリポジトリ初期設定

開発環境は検鏡環境を経由して公開サーバに反映しようかと思っていたりします

経路的にはざっくりとこんな感じ
[ 開発環境 ] → 編集後アップデート → [ 検証環境 ] → 検証後にアップデート → [ 公開サーバ ]

検証環境・公開サーバ間がhttp通信なので、開発環境・検証環境間はssh通信にしようかと思います
# ローカル内の通信だし、cgi設定がめんどうってのもあるけど

基本的にやる事は一緒でclone先をちょっと変えるだけでOK

 $ hg clone ssh://ユーザ名@サーバアドレス//path/to/repository/jdi/ ./jdi

.hg/hgrc、や.hgignoreの設定は上と一緒


ようやく一段落ついたので、お昼食べてから開発始めますー

うちの犬の空気読めるっぷりは異常

ご飯食べてたらうちの犬の尻に黒い物が。。。


。。。うんちつけたまま動き回ってたのね、あなた


やってほしくないとき(さあご飯食べるぞ、とか)に限ってクリティカルなことをやってのける、そんなうちの犬はものすごく空気を読む子なんじゃないかと思うのです。


。。ということで臭くなってた犬を洗い終わったので再開します

個人用設定画面のイメージをつくってみた

Pencilはコピペが使えるともっと便利なんだけどなぁ


とりあえず、なんとなくイメージが固まってきたのでコード書き始めようと思います。もう時間もないしー

ログイン画面とかは勢いで

テンプレート利用に難航中

複数の画面が発生するのでヘッダーとフッターは
テンプレート化して読み込みたいとか思ってたら
以前書いてたスクリプトが動かない。。。という素敵現象に陥ってましたとさ

大して環境も変えてないのにおかしいなぁー


とりあえずほとんど書き直して次のような形でコンテンツを読み込むようにしましたよ
#コメントとかは後で書くっす

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys     
import codecs  
              
sys.stdin  = codecs.getreader('utf-8')(sys.stdin)
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
encoding = "UTF-8"
               
def fileRead(file_path):
    html = ""  
    f = open(file_path, "r")
    for line in f:
        html += line
    return html
               
app_path = "../app/common/view/template" 
html_header = fileRead(app_path + "/" + "header.tpl")
#メインのコンテンツを読み込む用
#html_main = fileRead(app_path + "/" + "main.tpl")
html_footer = fileRead(app_path + "/" + "footer.tpl")
               
#encoding charset
html_header = unicode(html_header, encoding)
#メインのコンテンツを読み込む用
#html_main = unicode(html_main, encoding)
html_footer = unicode(html_footer, encoding)
               
print "Content-Type: text/html"
print          
print html_header
#メインのコンテンツを読み込む用
#print html_main
print html_footer

PHPだと一瞬なのになぁ。。。


う〜ん、とりあえずヘッダーフッターの読み込みはできるようになった物の、煮詰まってきたので今日は寝ます。明日頑張る←駄目人間

最近読んでいる本

ふて寝するのもあれなので、最近読んでる本の紹介〜


会社のお昼休みの後半30分でぼそぼそやってます。
(発売日ぐらいに買ったというのに)ようやく3章が終わったっす

集合知プログラミング

集合知プログラミング

内容的には俺の大学院時代の研究分野といえば、わかるひとにはわかるかな?
3年前にこの本があればもう少しいろんなことができたのになぁと思ってしまう今日この頃

某研究室の人間の必須図書にすれば良いのに。。。と思うのは厳しいですかね。。。


とりあえずニヤニヤしながらやってます ←ただの変な人ですけど


あと最近これが読みたいけどなかなか買うきっかけが無いので。。。だれか貸してください

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)



発売ぐらいに読んだこっちと補完関係っぽいらしいので

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)



そういえば、ここらへんの記事は結構おもしろかったので負荷分散とかに興味ある人にはお勧めかも
http://techtarget.itmedia.co.jp/tt/news/0709/12/news01.html