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
References
- tachikawa844の日記 http://d.hatena.ne.jp/tachikawa844/20081224/1230095888
- Rarestyle http://www.rarestyle.net/main/patterns/patterns.aspx
- Wikipedia http://ja.wikipedia.org/wiki/デザインパターン_(ソフトウェア)
- Uml Ascii Art http://www.c2.com/cgi/wiki?UmlAsciiArt
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 "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
$ 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/
# 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
|
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(サーバのアドレス)
fiUbuntu> システム->設定->セッション->自動起動するプログラム->追加
名前: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:22Win.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:22Win.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