Tuesday, November 25, 2008

筆記

最近學習的筆記

filename是已經存在的10MB檔案,
sample 1)
fopen(filename, "wb");
sample 2)
fp=fopen(filename, "ab");
rewind(fp);
之間的差異
--------------------------------------------------------------
理論上從上層來看是沒啥差異, 但談到kernel如何配置
新的區塊, 就有不一樣的結果
sample 1, 會先縮減filename的大小, 再重新配置一塊區塊使用
並且將index指到檔案起始位置.
sample 2, 打開filename後, 會將index指到檔案尾,
rewind再重新將index指回檔案頭.
因此, sample2會比較有的效率, 少了重新配置區塊的動作,
以及, 減少fragment的機會.
=========================================================
fprintf(stdout, "hello world\n");
fprintf(stderr, "hello world\n");
Q:之間的差異?
-------------------------------------
stdout會先要列印的字串, 收集到預設的buffer,
待buffer滿時, 再一次輸出
stderr會直接輸出要列印的文字
=========================================================
Q:如何判斷檔案的大小
Sol1,
用 fstat(fd, &statbuf) 取得, statbuf.st_size即為檔案的大小
Sol2,
fseek(fp, 0, SEEK_END);
filesize=ftell(fp);
=========================================================
何時使用multi-process?何時使用multi-thread?
一般建議用multi-thread, 比較節省resource的使用, 但缺點在於當其中某個thread發生問題, 整個processs, 會隨之crash.
sol1, 找出造成問題的點
sol2, 趕時間的話, 保留multi-thread的架構, 但試著將會crash的函式以multi-process方法產生, 這樣會crash的, 只有那個process, 而不是主process.
=========================================================
Kernel不允許User space Application攔j載SIGKILL, 所以最後手段可以透過 kill -9 app, 結束程式.
但何時送SIGKILL, 也沒有辦法結束程式呢?
有可能該程式正卡在底層driver, 或是kernel space某處, 因此送出SIGKILL, 會沒有反應, 這種情況通常可以透過 ps, 看該程式的process status是否為 D ( Uninterruptible sleep (usually IO) )得知.
=========================================================
什麼時候用udp?什麼時候用tcp?
case1,
case2,
傳送資料量小時, 可以考慮用udp,相反的,資料量大的,考慮用tcp吧
=========================================================
同步與非同步的例子?
=========================================================
signal handler內是否要重新註冊signal handler
it depends.
舊時期的系統會將signal導給已註冊的handler後, 回到預設的handler
近期的linux, 則相反, 會一直保留已註冊的handler
為了相容性考量, 建議重新註冊signal handler
總之, 要跑過才能知道真正的行為表現
=========================================================
給測試部時, 要給release版或debug版呢?
如果測試部人手比較多的話, 可以建議2種版本都出
但如果人手不夠的話, 還是只能出release版的
=========================================================
export LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH)
=========================================================

Monday, November 24, 2008

ubuntu programming howto

記錄用ubuntu開發程式時, 需要的設定

>sudo apt-get install build-essential

> sudo apt-get install manpages
> sudo apt-get install manpages-posix
> sudo apt-get install manpages-posix-dev
> sudo apt-get install ssh
> sudo apt-get install subversion
> sudo apt-get install wireshark
> sudo apt-get install vsftpd
> sudo apt-get install bison
> sudo apt-get install autoconf
> sudo apt-get install flex
> sudo apt-get install gperf

libcurl
>sudo apt-get install libcurl4-openssl-dev

gtk
>sudo apt-get install libgtk2.0-dev

GNOME
>sudo apt-get install gnome-core-devel

minicom

>sudo apt-get install minicom

make menuconfig
>sudo apt-get install ncurses-dev

object c
>sudo apt-get install gobjc++
>sudo apt-get install libgnustep-base-dev
>sudo apt-get install gnustep

libboost
>sudo apt-get install libboost-thread-dev

openssl header file
>sudo apt-get install libssl-dev
or
>sudo apt-get install openssl*

zlib.h
>sudo apt-get install zlib1g-dev

bzip2
>sudo apt-get install libbz2-dev

x11
>sudo apt-get install libx11-dev

linux source
>sudo apt-get install linux-source


========

nfs server
>sudo apt-get install nfs-common nfs-kernel-server
Edit /etc/exports
for example,
/tftpboot 192.168.200.0/24(rw,sync,no_subtree_check,no_root_squash)

>sudo /etc/init.d/nfs-kernel-server restart

Self Test 1
>showmount -e localhost


Self Test 2
nfs client
>mount -t nfs 192.168.200.22:/tftpboot /mnt
or try
>mount -t nfs -o nolock 192.168.200.22:/tftpboot /mnt

Troubleshooting

1.
If fail to start NFS kernel daemon, try to
/etc/init.d/portmap start
or
/etc/init.d/rpcbind restart
Then do "apt-get install nfs-kernel-server" again.

2.
If nfs client still cannot connect to nfs server, try
at client side,
>mount -v -t nfs -o nolock NFS_SERVER_IP:/tftpboot /mnt
observe the message

at server side,
>dmesg
>tail -f /var/log/syslog

If mountd complianed illegal port, then try to add insecure to /etc/exports
/tftpboot 192.168.200.0/24(rw,sync,no_subtree_check,no_root_squash,insecure)

========

tftpd

========

remount
>mount -o remount,rw /wanted_path

gawk
>sudo apt-get install gawk

freetype2
>sudo apt-get install libfreetype6-dev

mysql
>sudo apt-get install mysql-server mysql-client
>sudo apt-get install libmysqlclient16-dev

telnetd
>sudo apt-get install telnetd
>sudo /etc/init.d/openbsd-inetd restart

snmp
>sudo apt-get install snmp

ssh: connect to localhost port 22: Connection refused
>sudo service ssh restart

Read from socket failed: Connection reset by peer
>ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
>ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
>service ssh restart

 =====================================


svn: warning: cannot set LC_CTYPE locale
svn: warning: environment variable LC_CTYPE is UTF-8
svn: warning: please check that your locale name is correct

Solution:

Add lines below to ~/.bashrc
export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

 =====================================

Autostart daemons
>sudo update-rc.d ssh defaults
>sudo update-rc.d apache2 defaults

Troubleshooting:
$update-rc.d ssh defaults
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match ssh Default-Stop values (none)

Solution:
$update-rc.d ssh remove
$update-rc.d ssh defaults

=====================================

Static IP
In /etc/network/interfaces,


auto eth0
iface eth0 inet static
address 192.168.1.150
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.1.255
gateway 192.168.2.1
safe

DNS
In /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

Finally,
sudo /etc/init.d/networking restart

=====================================
xxx is not in the sudoers file. This incident will be reported

Solution
append the username to sudo in the file /etc/group

=====================================
how to update java version fom 1.6 to 1.7

Solution 1:
update-java-alternatives --jre -s java-1.7.0-openjdk-i386

Solution 2:
# to install add-apt-repository
apt-get install python-softeware-properties
add-apt-repository ppa:webupd8team/java
apt-get update
apt-get install oracle-java7-install


Friday, November 14, 2008

今年第1部電影

今年第1次進電影院 就是要去看007量子危機

非常地棒
深深地覺得007真是滿足男人破壞的慾望 女人的性幻想對象
還有今年omega廣告打得很兇

Thursday, November 13, 2008

入手mbp 15'' 2.5GHz

終於入手人生最期待好機 15" C2D 2.5GHz mbp + 4G Ram + Nvidia 8600 512MB



PB100022

PB100023

PB100025

PB100027

PB100028

PB100029

PB100030

PB100031

PB100032

PB100033

PB100034

PB100034

PB100035

PB100036

PB100037

PB100038

PB110040

PB110041

PB120043