Factory Method

UML
+-----------------+  +-----------------+
| Product         |  | Creator         |
+-----------------+  +-----------------+
| eat()           |  | factoryMethod() |
+-----------------+  +-----------------+
        A                     A
        |                     |
        |                     |
+-----------------+  +-----------------+
| Food            |  | FoodCreator     |
+-----------------+  +-----------------+
| eat()           |  | factoryMethod() |
+-----------------+  +-----------------+
        ^                     |
        |                     |
        +---------------------+
Python
class Product:
	def eat(self):
		pass

class Creator(object):
	def factoryMethod(self, owner):
		pass

class Food(Product):
	def __init__(self, owner):
		self.owner = owner
		print "cook %s" %(self.owner)
	def eat(self):
		print "eat %s" %(self.owner)

class FoodCreator(Creator):
	def factoryMethod(self, owner):
		return Food(owner)

creator = FoodCreator()
food1 = creator.factoryMethod("Kappa Maki")
food2 = creator.factoryMethod("Chocolate Cake")
food1.eat()
food2.eat()
C#
using System;

namespace FactoryMethod
{
    public abstract class Product
    {
        public abstract void Eat();
    }

    public abstract class Creator
    {
        public abstract Food FactoryMethod(string foodName);
    }

    public class Food : Product
    {
        private string foodName;

        public Food(string foodName)
        {
            this.foodName = foodName;
            Console.WriteLine(string.Format("cook {0}", foodName));
        }

        public override void Eat()
        {
            Console.WriteLine(string.Format("eat {0}", foodName));
        }
    }

    public class FoodCreator : Creator
    {
        public override Food FactoryMethod(string foodName)
        {
            return new Food(foodName);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Creator creator = new FoodCreator();
            Food food1 = creator.FactoryMethod("Kappa Maki");
            Food food2 = creator.FactoryMethod("Chocolate Cake");
            food1.Eat();
            food2.Eat();
            Console.ReadLine();
        }
    }
}
Console
$ python FactoryMethod.py
cook Kappa Maki
cook Chocholate Cake
eat Kappa Maki
eat Chocolate Cake

CGI on Ubuntu

http://d.hatena.ne.jp/yanma_4/20080321/1206027678
http://tobysoft.net/wiki/index.php?Ubuntu/apache2
http://www.gesource.jp/programming/python/cgi/0101.html

$ sudo apt-get install apache2
$ ps ax|grep apache
5362 ? Ss 0:00 /usr/sbin/apache2 -k start
5363 ? S 0:00 /usr/sbin/apache2 -k start
5366 ? Sl 0:00 /usr/sbin/apache2 -k start
5371 ? Sl 0:00 /usr/sbin/apache2 -k start
$ cd /usr/lib/cgi-bin
$ sudo vi test01.cgi
#!/usr/bin/python
print "Content-Type: text/plain"
print
print "hello world."
$ sudo chmod 755 test01.cgi
Ubuntu.Chrome> CGI の実行確認
http://localhost/cgi-bin/test01.cgi
Win.Chrome> CGI の実行確認
http://ADDRESS/cgi-bin/test01.cgi

http://www.itmedia.co.jp/enterprise/articles/0806/07/news003_2.html

$ cd /usr/lib/cgi-bin
$ sudo emacs example2.py
記述内容はリンク先を参照
$ sudo chmod 755 example2.py

$ sudo vi example2.py
[ブラウザ上に Python のエラーメッセージを表示させる設定]
ファイルの先頭部 import cgi という文の直下に以下2行を追加
import cgitb
cgitb.enable()

LFS on Ubuntu(1) 準備作業の仕上げまで

$ df -k
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda1              9614116   3433216   5692528  38% /
varrun                  253176       104    253072   1% /var/run
varlock                 253176         0    253176   0% /var/lock
udev                    253176        56    253120   1% /dev
devshm                  253176       288    252888   1% /dev/shm
lrm                     253176     40000    213176  16% /lib/modules/2.6.24-27-generic/volatile
/dev/sda2              9614148    152688   8973084   2% /mnt/lfs
/dev/scd0              1153706   1153706         0 100% /media/cdrom0

ホストシステムが機能拡張しているかどうかを確認

# debugfs -R feature /dev/sda2
debugfs 1.40.8 (13-Mar-2008)
Filesystem features: has_journal resize_inode dir_index filetype needs_recovery sparse_super large_file

環境変数 LFS を設定

$ export LFS=/mnt/lfs
$ sudo su -
# export LFS=/mnt/lfs

// パッケージやパッチをダウンロードするディレクトリを作成
# mkdir -v $LFS/sources
mkdir: created directory `/mnt/lfs/sources'

// 書き込み権限とスティッキー (*1) を付与
# chmod -v a+wt $LFS/sources
`/mnt/lfs/sources' のモードを 1777 (rwxrwxrwt) に変更しました

$ cd $LFS/sources

$ emacs wget-list
リンクの内容を貼り付けて ^X ^S
http://www.linux.or.jp/JF/JFdocs/LFS-BOOK/wget-list.txt

// バックアップ
$ cp -pv wget-list wget-list.orig
`wget-list' -> `wget-list.orig'

// 国内から入手可能なものは国内から入手するよう置換
$ sed -e 's|http://ftp\.gnu\.org/gnu/|http://ftp.riken.jp/GNU/ftp/gnu/|g' \
-e 's|http://www\.kernel\.org/pub/linux/|http://ftp.riken.jp/Linux/kernel.org/linux/|g' \
wget-list.orig > wget-list

// 必要なパッケージソースやパッチの一括取得
$ wget -N -i wget-list

wget-list内の必須のパッチに加えて LFS コミュニティが提供する任意のパッチが数多くあるので必要に応じて適用する。http://www.linuxfromscratch.org/patches/

$ echo $LFS
/mnt/lfs

# mkdir -v $LFS/tools

// ホストシステム上に /tools のシンボリックリンクを作成
# ln -sv $LFS/tools /
`/tools' -> `/mnt/lfs/tools'

// LFS ユーザーの追加
# groupadd lfs
# useradd -s /bin/bash -g lfs -m -k /dev/null lfs
# passwd lfs

// $LFS/tools ディレクトリの所有者を lfs ユーザーとする
# chown -v lfs $LFS/tools
// 作業ディレクトリの所有者を lfs ユーザーとする
# chown -v lfs $LFS/sources

// lfs でログイン (ログインシェルを起動)
$ su - lfs
$ echo $LFS
$ export LFS=/mnt/lfs
$ cd $LFS

// 動作環境設定
$ cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u\w\$ ' /bin/bash
EOF

// .bashrc ファイルの生成
$ cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF

$ source ~/.bash_profile
|

Bonanza に勝った♪

yoshiring2010-03-23

最強将棋ソフトの誉れの高い Bonanza に勝ちました。
但し設定・条件等が大分甘いかもしれません…orz

Bonanza 戦略として
・少しでもイレギュラーと思われる手順・戦型に持っていく
・終盤ではコンピュータが圧倒的有利の為、序中盤で絶対にミスをせずできるだけリードを広げる
・自陣の玉は詰みが読みやすい穴熊がベストか?(終盤でのミスは即致命傷に繋がる為)

逆に強いソフトを作る為には、上記戦略を取らせない思考ルーチンが有効でしょうか?(う〜ん浅いなぁ;汗)

後程、棋譜をアップします。

Ubuntu インストール&初期設定メモ

1.Ubuntu7.10をCD-ROMからインストール(昔買った本の付録)
http://www.geocities.jp/gm_tatsuyan/ubuntu2.htm
http://www.atmarkit.co.jp/flinux/rensai/lfs01/lfs01b.html

パーティション
/dev/sda
/dev/sda1 ext3 / 10G (Ubuntu)
/dev/sda2 ext3 /mnt/lfs 10G (LFS)
/dev/sda3 swap 1G
free space 60G

2.8.04 LTSへアップグレード(7.10だと $ sudo apt-get install synergy で「パッケージ synergy が見つかりません」となる為→要調査)
http://lets-ubuntu.yui.at/ins_re/ins_7804up.html

3.apt-getの設定
http://ubuntuforums.org/showthread.php?t=257684

$ sudo su -
# vi /etc/apt/sources.list
And uncomment all entries that begin with "deb http" or "deb-src" except for the CD ROM, make sure it's commented out
# apt-get update
Now open your Software Sources in: SYSTEM > ADMINISTRATION > SOFTWARE SOURCES
and make sure all the boxes under "Downloadable from the Internet" are checked. Click "CLOSE" and then "RELOAD"
Go to: SYSTEM > ADMINISTRATION > UPDATE MANAGER and first click "CHECK", then click "INSTALL UPDATES"
After your updates are finished installing, REBOOT NOW
After a reboot, create a working folder for the following install steps. Just a way to keep your system clean. Go into your home folder and create a folder called "install" or something. Now open terminal and go to that directory before you proceed.

[ カスタマイズ済の設定ファイル /etc/scim/config を置き換えますか? ]->[ 置き換える ]
[ 不要なパッケージを削除しますか? ]->[ 削除 ]

4.Synergyのインストール&設定(Synergyクライアント=Ubuntu / Synergyサーバ=Windows
http://retujyou.com/2007/02/14/on-ubuntu-synergy-autostart/

Windows側の設定は終わっているものとする)
$ sudo su -
# apt-get update
# apt-get install synergy
# vi /etc/gdm/Init/Default
“sysmodmap=/etc/X11/Xmodmap”の直前に以下のコードを加える。
SYNERGYC=`gdmwhich synergyc`
if [ x$SYNERGYC != x ] ; then
$SYNERGYC xxx.xxx.xxx.xxx(サーバのアドレス)
fi

Ubuntu> システム->設定->セッション->自動起動するプログラム->追加
名前:synergyc
コマンド:synergyc xxx.xxx.xxx.xxx(サーバのアドレス)

# shutdown -r now

5.Google Chromeのインストール

6.DVD
コーデックのインストール
GStreamer extra plugins(DVDを挿入すると自動的に検出される)

http://penguinclub.net/linux/news/news07b.html

# apt-get install libdvdread3 libxine1-ffmpeg totem-xine vlc
# /usr/share/doc/libdvdread3/install-css.sh
# shutdown -r now (←要調査:マウントし直せばOK?)

7.SSH2接続の設定
http://d.hatena.ne.jp/Fiore/20080228/1204174833
http://www.kuins.kyoto-u.ac.jp/news/47/putty-gen.html

# aptitude install ssh
# vi /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication yes
# /etc/init.d/ssh restart
# lsof -nPi:22

Win.PuTTYgen> 鍵を生成
Win> pscp id_rsa.pub USERNAME@HOSTNAME:id_rsa.pub

$ cd
$ ssh-keygen -i -f id_rsa.pub >> authorized_keys
$ ls -al
$ chmod 700 .ssh
$ cd .ssh
$ mv ../authorized_keys .
$ chmod 600 authorized_keys
$ rm ~/id_rsa.pub

# vi /etc/ssh/sshd_config
PasswordAuthentication no
# /etc/init.d/ssh restart
# lsof -nPi:22

Win.pagent> 秘密鍵を追加
Win.TeraTerm> サーバのアドレスを入力し SSHを選択して OK
Win.TeraTerm> ユーザ名を入力し Pagentを使うを選択して OK
Win.TeraTerm> SSHで接続される!

8.gcc 等のインストール
http://d.hatena.ne.jp/seraphy/20090713

$ sudo apt-get install build-essential libtool manpages-dev manpages-ja-dev libtool-doc

9.エディタのインストール & 設定
emacs
http://74.125.153.132/search?q=cache:NZL08Jq-Q7YJ:emacs-21.ki.nu/how-to-start/ubuntu.html+ubuntu+emacs+apt-get&cd=1&hl=ja&ct=clnk&gl=jp

$ sudo apt-get install emacs

・vi
http://www.linux.or.jp/JF/JFdocs/vi-user-usage.txt

$ sudo vi .exrc
set tabstop=2
set showmode
set autoindent
set nonumber

10.キーボードレイアウトの変更(Ctrl<-->CapsLock)
https://forums.ubuntulinux.jp/viewtopic.php?pid=10710
http://d.hatena.ne.jp/inouetakuya/20090917/1253158013

$ sudo vi /etc/X11/xorg.conf
次の行を削除
Option "XkbVariant" "latin,"

Ubuntu> システム->設定->キーボード->「レイアウト」タブ-> 「レイアウトのオプション」をクリック->Ctrl キーの位置->「Swap Ctrl and CapsLock」を選択

11.Java 環境構築
http://blog.kcg.ne.jp/blog/sato_si/6924

$ sudo apt-get install sun-java6-jdk sun-java6-jre eclipse