2012年12月29日土曜日

CentOSで複数のJDK切り替え

SunのJDKとOpenJDKを両方切り替えて使いたい場合に,
便利かなと思ったので設定したときのメモです.

SunJDKのインストール

 1.ローカルにSunJDKをダウンロード
   (インストール先の環境でGUIが動いているのであれば,3.から実施)
 2.SftpかWebminのアップロード機能などを使ってJDKをアップロード
 3.インストーラに実行権限を付与,インストールする.
    $ chmod +x jdk-7u7-linux-x64.rpm    $ yum install jdk-7u7-linux-x64.rpm
 4.パスの設定
   /etc/profile
    # JDK
    export JAVA_HOME=/usr/java/default
    export PATH=$PATH:$JAVA_HOME/bin
 5.設定の反映
    $source /etc/profile


切り替えるための設定は,以下のサイトを参考です.
とても見やすくまとまっているので,詳細を知りたい方はネタ元のサイトを見てください.
alternatives コマンドを使用した java バージョンの切り替え




2012年10月21日日曜日

CentOSにTrac 1.0 をインストール

趣味のプロジェクト管理をしたくなったので,Tracをインストールしたときのメモです.
参考にしたサイトは,下記の通りです.
TracとApache連携セットアップ手順 (CentOS6.1)

ほぼ手順は,参考サイト通りで問題なかったのですが,Trac1.0ではGenshiのバージョンがeasy_installで入る物は古かったので自分でダウンロードしてインストールしました.

1.GenshiをWebサイトからダウンロード
  今回はhttp://ftp.edgewall.com/pub/genshi/Genshi-0.6-py2.6.eggを使用しました.
2.実行権限を付与して,インストール. 
 $ chmod +x Genshi-0.6-py2.6.egg
 $ sudo easy_install Genshi-0.6-py2.6.egg
3.easy_installで入るをインストール.
 $ easy_install Babel
 $ easy_install Trac

ここまでで,Tracはインストールされてスタンドアロンであれば,動くようになっています.自分しか使わないのでスタンドアロンでも問題ないのですが,面白くないのでApacheと連携させます.

 今回はこのディレクトリ配下(/var/developTools/Trac)に,複数のプロジェクト置くことにします.

1.ApacheでPythonを動かすためのモジュールをインストール
 $ sudo yum install mod_wsgi
2.Tracのプロジェクトを作るルートディレクトリに以下のwsgiファイルを作成.
 $ nano /var/developTools/Trac/trac.wsgi

import os
import trac.web.main
os.environ['TRAC_ENV_PARENT_DIR'] = '/var/developTools/Trac'
application = trac.web.main.dispatch_request
3.ApacheからTracにリダイレクトされるようにをconfファイルを作成,権限付与します.これでhttp://localhost/tracでアクセスできるようにします.
 $ sudo nano /etc/httpd/conf.d/trac.conf


WSGIScriptAlias /trac /var/developTools/Trac/trac.wsgi
<Location /trac>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Location>
<LocationMatch "/trac/.*/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /var/developTools/Trac/.htpasswd
Require valid-user
</LocationMatch>


 $ sudo chown apache:apache /etc/httpd/conf.d/trac.conf

4.Tracのプロジェクト全体の所有者を変更します.(変更しないとApacheが参照できないので)
 $ sudo chown -R apache:apache  /var/developTools/Trac

5.Apacheを再起動して設定を反映.
 $ sudo service httpd restart

これでhttp://localhost/tracにアクセスすれば,作成したプロジェクト一覧が表示されるはずです.プロジェクトを作成してなければ,trac-adminを使って作成してください.

気が向けば,プロジェクト作成も書こうかなぁ

2012年9月17日月曜日

PyCon JP 2012で@dankogaiさんのスライドで,仕事でJavaの三項演算子で問題になったこと似ていたので書いてみました.

PyCon JP 2012で使われた@dankogaiさんのスライドはこれ

そのスライドでどうなのよって言っているPytohnの内包表記はこれ.
noprimes = [j for i in range(2, sn) for j in range(i*2, n, i)]
(スライドの一部転記)

問題のJavaの三項演算子はこれ.
String line =  i  > 10 ? "i>10" : j < 5 ? "i<=10 かつ j<5" : "j>5";


どちらも2つの処理をまとめて1行にしています.

素直に2つに分けた方が良いのか,それとも1行の方が良いのか....

完全に好みの問題ではあるけれど,私は2行に分けた方がイイと思う.
Pythonは長く触っていないので,どっちが良いかはわからないけど..


Javaはこっちの方が見やすいと私は思う.

String line = null;;
if( i > 10) line = "i>10";
else if (j > 5) line =  "i<=10 かつ j<5";
else line = "j>5";

こっちの方が条件をぱっと見でわかる気がする.(三項演算子をあまり見ないから慣れの問題かもしれないが)

もちろん条件が1つであれば三項演算子を使うのに,賛成.書く量が断然少ないし,見やすいし,短い.

String line =  i  > 10 ? "i>10" :  "i<=10" ;

ふと思いつきで,書いてしまいました.
みなさんはどちらが好みでしょうか???




2012年9月16日日曜日

PyCon JP 2012

PyCon JP 2012に参加させて頂きました.


@dankogai さんの特別講演の様子
オープニングの基調講演は,間に合わなくて聞くことはできませんでした.
 が,私のように聞き逃した方や,参加できなかった方はYoutubeでセッションが公開されています.(LTなどはナイようですが.)

@dankogai さんの特別講演は,会場が満員になるほどの盛況でした.Pythonistaがいっぱい居る中で,Pythonのいまいちな点を発表されるとは...気になる方は,是非Youtubeで見てください.(会場のピリピリ感が伝われば良いですがw)

1日目の終了後のPartyで,お話しさせていただいた方々,アドバイスをいただいた方々,とても楽しく,とても為になりました.
おそらく,このBlogもそのときのアドバイスにより,変化していくのかな...きっと.

2012年3月9日金曜日

CentOS 6.2 に Python 2.7.2をインストールする

CentOS 6.2にyumで入っているPythonのバージョンが2.6.6で少し古いので,2.7.2に更新する.
(2015/3/21追記 Python3.4のインストールはこちら)

1.インストールに必要なものをインストール
$ sudo yum install zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel
  (2012/12/31 openssl-devel追記)

2.Pythonをダウンロードして解凍する
$ wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz
$ tar zxvf Python-2.7.2.tgz

3.インストール
$ ./configure --with-threads --enable-shared
 #CentOSのPythonを残す場合には,--prefixオプションを付けて
 #インストール先を指定してください.(2012/12/31追記)
 # ./configure --with-threads --enable-shared --prefix=/usr/local
$ make
  ここで_SSLのモジュールが無いと言われていたら,3.1を実施後に3.を再実行する.
  それ以外のモジュールは下記参照で,必要であればインストールして3.を再実行.
 http://www.kelvinwong.ca/2010/08/02/python-2-7-on-dreamhost/

 3.1 ./Module/Setupををコメントアウトを外し,編集する.

     SSL=/usr
     _ssl _ssl.c \
     -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
     -L$(SSL)/lib -lssl -lcrypto
    (2012/12/31追記)

$ sudo make install

4.エラー対策(x86_64の場合)
ここで,実行すると
python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
とエラーで動かない.コンパイルはされているので,シンボリックを貼る
$ ln -s /usr/local/lib/libpython2.7.so.1.0 /lib64/

5.確認
$ python
Python 2.7.2と表示されれば成功

参考
http://d.hatena.ne.jp/paraches/20110421
http://d.hatena.ne.jp/takayuki_goto/20110714/p1
http://d.hatena.ne.jp/shrkw/20110124/1295851744
http://masabossa.typepad.jp/microblog/2011/06/python-26%E3%81%A7ssl%E3%82%92%E6%9C%89%E5%8A%B9%E5%8C%96%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEpython%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86.html

2012年3月8日木曜日

Apache 2.4.1をCentOS 6.2にインストールする

Apache 2.4.1をCentOS 6.2にインストールした時の,作業まとめ.

※2012/03/28 Apacheの設定ファイルパスが間違っていたため修正

1.コンパイルに必要なものをインストールする
$ sudo yum install gcc make  pcre pcre-devel openssl openssl-devel

2.ApacheのサイトからApache2.4をダウンロード・解凍する
$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//httpd/httpd-2.4.1.tar.gz
$ tar zxvf httpd-2.4.1.tar.gz

3.Apacheのコンパイルに必要な「apr」と「apr-util」を,解凍したApacheの「srclib」フォルダにダウンロード・解凍する.
$ cd ./httpd-2.4.1/srclib/
$ wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-1.4.6.tar.gz
$ wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-util-1.4.1.tar.gz
$ tar zxvf apr-1.4.6.tar.gz
$ tar zxvf apr-util-1.4.1.tar.gz
$ mv ./apr-1.4.6/ ./apr/
$ mv ./apr-util-1.4.1/ ./apr-util/

4.Apatchのコンパイル・インストール
$ cd ../   (※httpd-2.4.1のルートフォルダに戻る)
$ ./configure --enable-so --enable-ssl --enable-rewrite --with-included-apr
(※前からDSO対応,SLL対応,mod_rwrite対応,Aprは./srclib/を使用)
  基本モジュールをすべて含む場合は下記のとおり.
  $./configure --enable-so --enable-ssl --enable-mods-shared=all --with-included-apr
    (2013/01/02追記)

$ make
$ sudo make install

5.自動起動スクリプトを登録する
$ sudo install -m755 ./build/rpm/httpd.init /etc/init.d/httpd
$ sudo cp ~/httpd-2.4.3/build/rpm/httpd.init /etc/rc.d/init.d/httpd  (2013/01/02修正)
$ sudo nano /etc/init.d/httpd

  • 43行目:prog=httpd
  • 45行目:if [ -f /etc/sysconfig/httpd ]; then
  • 46行目:        . /etc/sysconfig/httpd
  • 60行目:httpd=${HTTPD-/usr/local/apache2/bin/httpd}
  • 61行目:pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}
  • 62行目:lockfile=${LOCKFILE-/var/lock/subsys/httpd}
  • 67行目:CONFFILE=/usr/local/apache2/conf/httpd.conf


6.起動時に自動的に起動するように設定
$ chkconfig --add httpd
$ chkconfig httpd on

7.起動するかの確認をおこなう
$ service httpd start

$ service httpd stop

8.誤>/etc/httpd/conf/httpd.conf
正>/usr/local/apache2/conf/httpd.confを設定する

<service httpd stopが失敗する場合> (2013/01/02追記)
PIDファイルの出力先が/etc/init.d/httpdと異なっていると,失敗する模様.
下記のを修正する.
$ sudo nano /usr/local/apache2/conf/httpd.conf

  • Include conf/extra/httpd-mpm.conf のコメントアウトを外す.


$ /usr/local/apache2/conf/extra/httpd-mpm.conf

  • PidFile "/usr/local/apache2/logs/httpd.pid"  を修正する.


 参考
http://codenote.net/centos/139.html
http://satospo.sakura.ne.jp/blog_archives/tech/apache/centos6_apache241.html
http://rina.jpn.ph/rance/index.php?Apache2.2.4%20インストール
http://www.lovebug.jp/index.php?Apache%2F2.x%2F2.4.1%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
http://www.abetake.com/index.php?Apache%202.2.21

2012年3月7日水曜日

ドメイン名を決めるのに便利なサイト

ドメイン名を決めるのに,参考にしたサイトを紹介します.

ドメイン名のアイディアを考えるのに参考にしたのは


ドメインじゃなくて,Webサービスの名前のアイディアだけど,考え方のヒントになるサイト.有名どころのWebサービスがどんな風に名前を決めたのかも分かって,たのしい.

でも,どうしてもドメイン名が思いつかなかったので,ドメイン名を生成してくれるサイトをつかってみました.ドメイン名を生成してくれるサイトをまとめた
に紹介されているサイトの中で,便利だったのは





Bust A Name自分がドメイン名に使いたい単語をいくつか入力すると,それらを組み合わせたドメインを生成してくれるサービス.使い単語も,入力されたものから連想される単語も表示され,候補に追加することができる.特に便利なのが,生成されるドメインの見やすさで,候補を並べてくれる機能は便利.

Dot-O-Matorも,単語からドメインを生成してくれる.Bust A Nameと違う点は,あらかじめジャンルごとにプリセットされた値があること.

どうしても単語が思いつかないときは,Dot-O-Matorで単語の候補を見つけて,Bust A Nameに登録して,ドメインを決めるのがおすすめ.Bust A Nameの見やすさで読みやすさで,並べてくれるのは便利すぎる.やっぱりドメインも見やすくないといけないしね.

ドメインを決めるときの参考になれば嬉しいです.

2012年1月6日金曜日

Zabbix1.6.9をCentOSに入れる

前に書いて公開してなかったので、ちょっと古い気もするけど(;´Д`)

サーバーが増えてきたので一括で管理したくなったし、面白そうなのでZabbixを入れてみることにした。

参考サイトは以下のとおり。
        Server World:ZABIIX-インストール
        だいたいおっけぇ:CentOS 5にZabbixをインストールする方法

今回はほとんど同じなので、相違点だけ。

・インストールは zabbix-server も一緒に入れること。

・SQLに読み込ませるデータの場所は、「/usr/share/doc/zabbix-server-1.6.9/」の中にある。schemaとdataのディレクトリがそのままあります。(Server Worldさんのとこでは/zabbix-server-x.x.x/dbinit/の中にあるけど。

・SQLの追加はものすごく時間かかかります。気長に待ちましょう(SQL追加の間でこれを書いてるけど、待ってる間に書き終わりましたw)。


・Zabbixの起動で、/etc/rc.d/init.d/zabbix start ではなく /etc/rc.d/init.d/zabbix-server start に変更になってます。


・Zabbixのログインは「admin」パスワード「zabbix」です(公式サイトより)。

2012年1月5日木曜日

C#でもXMLの読み込み

前回に引き続き、XMLの読み込みを。

前回はJava版だったので、今回は必要に迫られて急遽作ったC#版です。

そのうち説明を追加など加筆修正します。

読み込み対象は前回と同じ下のようなXMLファイル。

    <root>
        <fruit>
            <type>りんご</type> 
            <name>ふじ</name>
            <locality>青森</locality >
            <weight>100</weight>
        </ fruit >
        < fruit >
            <type>なし</type> 
            <name>幸水</name>
            <locality>山梨</locality >
            <weight>120</weight>      
        </ fruit >
        < fruit >
            <type>みかん</type> 
            <name>温州みかん</name>
            <locality>愛媛</locality >
            <weight>30</weight>
        </ fruit >
    </root>

コードは下の通り。

XmlReader xmlReader = XmlReader.Create(filePath);

while (xmlReader.Read())
{
    if (xmlReader.NodeType == XmlNodeType.Element)
    {
        switch (xmlReader.LocalName)
        {
            case "type":
                System.Console.WriteLine("type" + xmlReader.ReadString());
                break;
            case "name":
                System.Console.WriteLine("name" + xmlReader.ReadString());
                break;
            case "locality":
                System.Console.WriteLine("locality" + xmlReader.ReadString());
                break;
            case "weight":
                System.Console.WriteLine("weight" + xmlReader.ReadString());
                break;
         }   
    }
}

以上。指摘あればよろしくお願いします。

2012年1月4日水曜日

JAVAでXMLの読み込み

あけましておめでとうございます。

前回のからかなり時間が空いてしまったのは、筆無精っということで。


今回から数回は、自分が書いたライブラリ的なものを公開していこうと思います。
おそらく、絶対、洗練されたものではないので、指摘をお待ちしております。

とりあえず暫定的なもので進めて、気が向いたらしっかりとまとめ直す予定ですm(_ _)m


JavaのXML例では下みたいなものが多い。
    <root>
        < fruit >りんご</ fruit >
        < fruit >なし</ fruit >
        < fruit >みかん</ fruit >
    </root>

こう言うのではなく、ここに置いておくコードは下のようなもの。
fruit要素の中に各項目がある場合のもの。

    <root>
        <fruit>
            <type>りんご</type> 

            <name>ふじ</name>
            <locality>青森</locality >
            <weight>100</weight>

        </ fruit >
        < fruit >
            <type>なし</type> 
            <name>幸水</name>
            <locality>山梨</locality >
            <weight>120</weight>      
        </ fruit >
        < fruit >
            <type>みかん</type> 
            <name>温州みかん</name>
            <locality>愛媛</locality >
            <weight>30</weight>
        </ fruit >
    </root>

        Document document = DocumentBuilderFactory.newInstance().
                newDocumentBuilder().parse(new File(filePath));

        //指定の要素を抜き出す
        NodeList element = document.getElementsByTagName("kamp");

        for (int i = 0; i < element.getLength(); i++)
        {
            //抜き出した要素の中から順番に、子要素を抜く出す
            NodeList list = element.item(i).getChildNodes();
            for (int j = 0, k = 0; j < list.getLength(); j++)
            {
                //抜き出した子要素の中から順番に取りだし、空白であれば登録しない
                String text = list.item(j).getNodeName();
                if (text.equals("#text") == false)
                {
                    String value = list.item(j).getTextContent().trim();
                    if (text.equals("type"))
                    {
                        System.out.println("種類:" + value);
                    } else if (text.equals("name"))
                    {
                        System.out.println("名前:" + value);
                    } else if (text.equals("locality"))
                    {
                        System.out.println("産地:" + value);
                    } else if (text.equals("weight"))
                    {
                        System.out.println("重さ:" + value);
                    }
                    k++;
                }
            }
        }

以上終わり。