Wednesday, July 29, 2009

[JP Life] 夜登富士山-行前準備

某天在PTT上看到有鄉民在徵人一起登富士山。
看到時好興奮,馬上找他報名。
後來兩個人決定在8月1日一起上山,
我們計畫下午在山頂拍夕陽,晚上在山頂拍星軌。
晚上睡山頂的小木屋,然後隔天再拍日山。
結果~~
我從山頂的小木屋開始問,一直問到六合目的小木屋。
8月1日當晚,通通沒空位。
於是,我們決定夜登富士山。

於是上網訂高速巴士的來回車票
從新宿西口到富士山五合目,來回票要5200日幣。
訂票網址:
https://www.highwaybus.com

預計7月31日晚上9點上山,大約凌晨3點多可以到山頂。
4點半左右可以拍「御來光」。
拍完日出,逛火山口一圈。
預計7點左右下山。
大約中午12點可以回到五合目。
搭8月1日下午2點的巴士回新宿。

準備的東西有:
1. 登山杖:非帶不可啊,上山,下山都非常好用。
2. 鞋罩:可以防止小石頭跑到鞋子裏面去。
3. 頭燈:一定要準備,因為一隻手拿手電桶的話,會無法攀岩。
4. 雨衣:有狗鐵絲的話,就不用準備了。
5. 狗鐵絲大衣:可以防寒防雨,有的話,記得穿。
6. 緊身褲:下山時可以保護膝蓋。
7. 水:富士山上的水,大約是400日幣起跳,越高的地方越貴。
8. 帽子:防寒防曬。
9. 隨身氧氣瓶:超重要,可以防止高山症。新宿賣650日幣,在富士山上,賣1100日幣。
10. FM3A+25mm ZF+快門線
11. 底片:最後我只用了一捲。因為登山時根本就沒有空拍照。
12. 內衣:流汗溼掉時可以換。
13. 巧克力+麵包:隨時補充體力,尤其是巧克力,超有用。
14. 塑膠袋:把垃圾收集好,帶下山。
15. 腳架:越輕越好,因為太重時,很耗體力。
16. 手套:工人手套2付以上。
17. 毛巾:用來擦汗。
18. 藥:有一種氧氣碇,很好用。
19. 備用電池:手電桶,相機,暖暖包的備用電池。
20. 襪子:溼了時候,可以替換。
21. 暖暖包:電子暖暖包。(最後沒用到)
22. 口罩:用來防止冷空氣直接進入鼻腔,防止鼻水一直流。
23. 圍巾:幫脖子取暖。(最後沒用到,用毛巾代替)
24. 長袖內衣:大約在9合目後會變很冷,可以換上長袖衣物。但老實說,沒地方,也沒時間換。
25. 防曬乳液:太陽出來後,很曬。

Wednesday, July 15, 2009

[PERL] 利用vim做多行註解

在vim中,利用以下指令,可以幫perl做多行註解。
:1,10s/^/#/

這指令表示,從第1行到第10行,行首會加上#

Sunday, June 28, 2009

[Y! Life] Photo Story EP:19 員工旅遊@東京

第一次出國
第一次到日本
第一次參加員工旅遊
第一次參加Y!公司的員工旅遊
第一次沒帶DSLR出遊
第一次用RF拍照
很多很多的第一次,在這趟旅行中發生了。

在Y!熬了一年,終於有資格參加該公司的員工旅遊了。
當時一心就只想到日本東京。
但當時RD的workshop又說要在9月中舉行。
一直被逼著要退團。
日本東京團真的很熱門,只要有人一退團,馬上就沒機會了。
當時我跟法先生的決定是,打死都不退團。
我們兩個人決定蹺RD workshop去日本happy。
最後,我們兩個人的選擇是對的。
RD workshop後來延期了。
我想,當初退團的RD一定很幹吧。
最後同團的RD就只有我跟法先生兩個人而已。

第一次出國,心情真的是超HIGH的。
2004年,倒掉的Q公司,為了要讓我可以到日本出差。
早就幫我準備好護照,還有日本觀光簽証了。
到了2006年,日本已經改成落地簽了。
所以,那個日本觀光簽,始終沒用到過。

為了讓行李輕便,當時決定不帶DSLR。
但又想拍底片。
最後跟熊先生借了CANON IXUS 800IS
跟V桑借了CONTAX T3
我後來不會後悔做了這樣子的決定。

這團因為是公司團,不能自由行。
所以一到東京,下了飛機。
竟然是到JASCO這大賣場購物。
我又不買東西,所以就跑去Capcom Plaza打電動。
IMG_1560

晚餐就點了廣島燒來吃。
IMG_1588
我只能說,鹹到不行。我已經是吃重口味的了,真的是爆鹹。

結束了購物行程,馬上拉車到HOTEL去CHECK IN。
CHECK IN之後,看看時間還早,才晚上七點多。
馬上跟法先生坐山手線到新宿去逛逛。
一進電車站,馬上會坐,而且沒任何困難。
一到新宿駅,人真是多到爆,車站也是大的很誇張。
生平第一次看到規模這麼大車站。
但到達新宿後,要去哪邊呢?怎麼走?
完全沒有頭緒。
當時的想法就是,往地上走,找比較高的地方。
走上了行人天橋,馬上一覽無遺。
馬上找到此行的目的地,BIC CAMERA。
熊先生有交待,要幫他帶SNOOPY的拚圖回台灣。
BIC CAMERA那麼大,東西又多,找起來有夠累。
此時,語言不通怎麼辦呢?
我最後用寫的,我寫出PUZZLE。
店員馬上告訴我在哪邊了。
很不幸的,沒有找到熊先生指定的拚圖。
逛完BIC CAMERA,我們兩個就到處亂逛。
其實就只在新宿西口附近逛而已,
也不敢走太遠,很怕迷路。
IMG_1601

我們兩個,想吃點東西,原本想要去居酒屋坐坐的。
但看到居酒屋的一些價格後,我們最後決定吃松屋。
IMG_1602
2006年的松屋,豚丼只要290日幣。
現在2009年了,豚丼要380日幣囉。

第一天的行程就逛了JASCO大賣場跟新宿西口。

第二天的行程是東京DISNEY。
當時可以選擇要去LAND還是SEA或是不去。
不去的人退1500台幣吧,有點忘了。
不去的人當天就是自由行。
我選擇去LAND玩。
Image4

老實說,一個人在LAND,真的是悶到爆。
人又超多。6仔也超多。
人多到玩個東西,要排大約2小時的隊。
還好我沒帶DSLR,不然玩起來一定很不方便。
一進LAND,馬上熟讀導覽手冊。
然後進行路線規劃。
最後,所有有FP(Fast Pass)的,全部都玩到。
還有留一個小時到處買東西。
買了一堆POOH桑的東西,送給K小姐跟親朋好友。
最後的遊行跟煙火,真的很讚。
老實說,我會想跟未來的女友,再去一次DISNEY LAND。
DISNEY LAND真的是戀人聖地。
如果有了小孩,我也會帶他們去DISNEY LAND。
DISNEY LAND真的是小朋友的天堂。

第三天,拉車到箱根去。
Image8

箱根的行程真的很鳥。
坐海盜船,到小涌園玩水,再到平和公園。
天氣很很差,一天的行程就這樣子結束了。
晚上吃大閘蟹。
不過當晚的HOTEL,睡起來很舒服。

第四天一早,馬上再拉車回東京。
在新宿的歌舞伎町吃台灣料理。
下午的行程是購物跟淺草觀音寺,台場。
當時,我跟法先生決定脫團。
我們兩個留了導遊的手機,
然後跟導遊意思一下買了包干貝糖(安小姐指定的)。
兩個人就殺到秋葉原去當阿宅了。
Akihabara Station
兩個人漫無目的的亂逛。

Akihabara
這是2006年的女僕。
shot@秋葉原,東京
這是2009年的女僕。
品質有大幅的改善。
但好貨是不會出來發傳單的。
所以想看好貨,請花錢吧。

當天,兩個人,什麼都沒買。
最後怎麼算,都還是台灣賣的比較便宜。
其實是,我們兩個沒有門路,也沒事先做好功課-__-

逛完秋葉原,兩個人再殺到原宿去亂逛。
當天去了SNOOPY TOWN,幫熊先生買拚圖。
然後再逛竹下通。
兩個人,最後什麼東西都沒買。

第五天,上午是自由行。下午準備回台灣。
我跟法先生,決定一早起床,殺去淺草觀音寺。
Image22

拍完照後,馬上衝去原宿。
Meiji Shrine
逛完明治神宮後,就去SNOOPY TOWN帶些小禮物送家人。

東京之旅,就這樣子結束了。
回台之後,就決定要到日本求學了。
日本真的是好地方。

[JP Life] 自己做菜,划算嗎?


高麗菜+豬肉+金針菇炒沙茶
Originally uploaded by chris.jan



高麗菜1/6顆(約30日幣),
金針菇1/3包(約53日幣),
豬肉半盤(約200日幣),
水費+電費+瓦斯費(約100日幣)。
炒一盤菜要大約400日幣,其實並沒有比較省。
外食380日幣就有一碗拉麵了。
松屋,吉野家,最便宜三百多就可以吃飽了。
自己煮,不止花時間,還比較貴-__-

Thursday, June 25, 2009

[Mood] 遇見



孫燕姿的遇見,我最喜歡的一首歌。
我每隻手機都是用這首歌當手機鈴聲。
從NOKIA 6100, 6230, 6233到現在的DoCoMo P906i。
裏面都有這首歌。

每次聽,就會想起村上春樹的"四月のある晴れた朝に100パーセントの女の子に出会うことについて"
中文是"遇見百分百的女孩"
雖然說這文章很短,但我一直很喜歡。

曾經,在我夢中出現了一個女孩。
一直期待著她的出現。
也許在現實生活中,已擦身而過。
結果如何?總有一天,謎底會解開。

Thursday, June 18, 2009

[Linux] 在現有的Hadoop Cluster上安裝與運行NUTCH

This tutorial uses 5 CentOS Linux Servers to build Hadoop cluster.
machine1(192.168.0.1) : namenode, jobtracker
machine2-5(192.168.0.2-5) : datanode

1. Add a user and create working directories for Nutch and Hadoop.
sudo useradd -d /home/nutch nutch
sudo mkdir /home/search
sudo chown -R hadoop:hadoop /home/search
sudo as hadoop and change to the home directory.
Apply this step to machine1-5.

2. Download and upgrade JAVA
download the latest java package from the link blow:
http://www.java.com/en/download/manual.jsp#lin
chmod a+x jdk-6u14-linux-i586-rpm.bin
./jdk-6u14-linux-i586-rpm.bin
Apply this step to machine1-5.

3. Modify /etc/hosts
Add these hosts to /etc/hosts
machine1 192.168.0.1
machine2 192.168.0.2
machine3 192.168.0.3
machine4 192.168.0.4
machine5 192.168.0.5
Apply this step to machine1-5.

4. Download Hadoop-0.19.1
login to machine1.
wget http://www.meisei-u.ac.jp/mirror/apache/dist/hadoop/core/hadoop-0.19.1/hadoop-0.19.1.tar.gz
5. Download Nutch-1.0
wget http://www.meisei-u.ac.jp/mirror/apache/dist/lucene/nutch/nutch-1.0.tar.gz
6. Unpack hadoop-0.19.1.tar.gz and nutch-1.0.tar.gz
tar xvfz hadoop-0.19.1.tar.gz
tar xvfz nutch-1.0.tar.gz
mv ~/hadoop-0.19.1 /home/search/hadoop
mv ~/nutch-1.0 /home/search/nutch
cd /home/search/hadoop
7. Edit hadoop-env.sh in Hadoop Directory.
vi conf/hadoop-env.sh
Attach the following to the hadoop-env.sh.
export JAVA_HOME=/usr/java/jdk1.6.0_14
export HADOOP_HOME=/home/search/hadoop
export HADOOP_CONF_DIR=/home/search/hadoop/conf
export HADOOP_SLAVES=$HADOOP_CONF_DIR/slaves
export HADOOP_LOG_DIR=/tmp/hadoop/logs
export HADOOP_PID_DIR=/tmp/hadoop/pid
export NUTCH_HOME=/home/search/nutch
export NUTCH_CONF_DIR=/home/search/nutch/conf
8. Export the environment variables.
source conf/hadoop-env.sh
9. Edit the hadoop-site.xml
vi conf/hadoop-site.xml
The contents are as follow.
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.0.1:9000/</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>192.168.0.1:9001</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop/hadoop-${user.name}</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>mapred.task.tracker.http.address</name>
<value>0.0.0.0:0</value>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx512m</value>
</property>
<property>
<name>dfs.block.size</name>
<value>5120000</value>
</property>
</configuration>
10. Edit the conf/masters and conf/slave
The contents of conf/masters:
machine1
The contents of conf/slaves
machine2
machine3
machine4
machine5
11. Deploy Hadoop Env to datanode.
scp -r /home/search/hadoop machine2:/home/search
scp -r /home/search/hadoop machine3:/home/search
scp -r /home/search/hadoop machine4:/home/search
scp -r /home/search/hadoop machine5:/home/search
12. Start up Hadoop.
bin/hadoop namenode -format
bin/start-all.sh
13. Edit the nutch-site.xml
cd /home/search/nutch
vi conf/nutch-site.xml
The contents are as follow:
<configuration>
<property>
<name>http.agent.name</name>
<value>nutch</value>
<description>HTTP 'User-Agent' request header. </description>
</property>
<property>
<name>http.agent.description</name>
<value>Nutch_Test</value>
<description>Further description</description>
</property>
<property>
<name>http.agent.url</name>
<value>localhost</value>
<description>A URL to advertise in the User-Agent header. </description>
</property>
<property>
<name>http.agent.email</name>
<value>test@test.org.tw</value>
<description>An email address
</description>
</property>
<property>
<name>http.robots.agents</name>
<value>nutch</value>
<description>The agent strings we'll look for in robots.txt files,
comma-separated, in decreasing order of precedence. You should
put the value of http.agent.name as the first agent name, and keep the
default * at the end of the list. E.g.: BlurflDev,Blurfl,*
</description>
</property>
<property>
<name>plugin.folders</name>
<value>/home/search/nutch/plugins</value>
<description>Directories where nutch plugins are located. </description>
</property>
<property>
<name>plugin.includes</name>
<value>protocol-(http|httpclient)|urlfilter-regex|parse-(text|html|js|ext|msexcel|mspowerpoint|msword|oo|pdf|rss|swf|zip)|index-(more|basic|anchor)|query-(more|basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
<description> Regular expression naming plugin directory names</description>
</property>
<property>
<name>parse.plugin.file</name>
<value>parse-plugins.xml</value>
<description>The name of the file that defines the associations between
content-types and parsers.</description>
</property>
<property>
<name>db.max.outlinks.per.page</name>
<value>-1</value>
<description> </description>
</property>
<property>
<name>http.content.limit</name>
<value>-1</value>
</property>
<property>
<name>indexer.mergeFactor</name>
<value>500</value>
<description>The factor that determines the frequency of Lucene segment
merges. This must not be less than 2, higher values increase indexing
speed but lead to increased RAM usage, and increase the number of
open file handles (which may lead to "Too many open files" errors).
NOTE: the "segments" here have nothing to do with Nutch segments, they
are a low-level data unit used by Lucene.
</description>
</property>
<property>
<name>indexer.minMergeDocs</name>
<value>500</value>
<description>This number determines the minimum number of Lucene
Documents buffered in memory between Lucene segment merges. Larger
values increase indexing speed and increase RAM usage.
</description>
</property>
</configuration>
14. Edit the crawl-urlfilter.txt
vi conf/crawl-urlfilter.txt
The contents are as follow.
# skip ftp:, & mailto: urls
-^(file|ftp|mailto):
# skip image and other suffixes we can't yet parse
-\.(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|sit|eps|wmf|mpg|xls|gz|rpm|tgz|mov|MOV|exe|jpeg|JPEG|bmp|BMP)$
# skip URLs containing certain characters as probable queries, etc.
-[*!@]
# accept anything else
+.*
15. Create a directory with a flat file of root urls.
mkdir urls
echo "http://www.apache.org" >> urls/urls.txt
16. Copy seeds list to hadoop DFS
../hadoop/bin/hadoop fs -put urls urls
17. Copy conf/nutch-site.xml and conf/crawl-urlfilter.txt to hadoop conf folder.
cp conf/nutch-site.xml conf/crawl-urlfilter.txt /home/search/hadoop/conf
18. Deploy nutch configure files to namenode.
scp /home/search/hadoop/conf/nutch-site.xml /home/search/hadoop/conf/crawl-urlfilter.txt machine2:/home/search/hadoop/conf
scp /home/search/hadoop/conf/nutch-site.xml /home/search/hadoop/conf/crawl-urlfilter.txt machine3:/home/search/hadoop/conf
scp /home/search/hadoop/conf/nutch-site.xml /home/search/hadoop/conf/crawl-urlfilter.txt machine4:/home/search/hadoop/conf
scp /home/search/hadoop/conf/nutch-site.xml /home/search/hadoop/conf/crawl-urlfilter.txt machine5:/home/search/hadoop/conf
19. Start crawling.
cd /home/search/nutch
../hadoop/bin/hadoop jar nutch-1.0.job org.apache.nutch.crawl.Crawl urls -dir crawl -depth 5 -topN 10000

Sunday, June 14, 2009

[Y! Life] Photo Story EP:18 日出@北海岸

IMG_2360
2006年8月的某一天,當時社長小明說,衝出日。
當晚,器材收一收,大伙就殺到北海岸去了。
大伙一整晚,都沒睡覺,不是在拍星軌,不然就是打牌。
星軌不會拍,所以拍的亂七八糟。
日出也不會拍,也是拍的亂七八糟。
連白平衡都不會設-__-

IMG_2274
這應該是唯一一張有一點點色溫的照片了。
因為曝光時間加長,所以路燈還有星芒。

這是我第一次拍日出,還需要加強磨練才行。

[Y! Life] Photo Story EP:17 Summer Party@2006

IMG_1716
第一次參加Y公司的大型活動Summer Party。
當天天氣不太好,沒太陽,又悶又熱。
活動又多又High。
下午就一些野地活動。
晚上就唱歌表演,吃到飽,喝到飽。
攝影社,就是到處亂拍。


當時全部門的合照,少了馬可跟顯鑑。
後排(左到右):喬治,詹姆士,志裕,賴噗,安吉,ME,克萊兒,傑夫,宗豪,信昌,法蘭克,勉志,酷馬
前排(左到右):弗萊德,士強,明彥,葛羅莉亞,櫻桃(勉志老婆,別部門的)
謝謝R大幫忙拍攝。

[Y! Life] Photo Story EP:16 初登烘爐地

烘爐地

2006年7月,搬到台北已經一年多了,而且在永和也住了好一陣子。
但從來沒去過烘爐地。
這天小明說要去拍夕陽夜景,於是就跟著去了。

從停車場到土地公廟的樓梯還真的是很多。
好久沒運動的我,爬的好喘。
當天的夕陽,方位不對,拍不到。
所以只好拍拍夜景。

烘爐地
從烘爐地,可以拍到台北101,美麗華摩天輪,新光三越等台北市大地標。

Taipei101
當天帶了小白IS,台北101拍的相當清楚。

烘爐地
當天好像是颱風天的前夕,還是颱風剛過,有點忘了。
雲飛的很快。
可惜的是太陽下山的方位不對,不然應該可以拍到很棒的色溫。

Friday, June 12, 2009

[Linux] 無法compile pftp shit edition的問題

在Linux下,compile pftp shit edition時,會出現

In function ‘int open(const char*, int, ...)’, inlined from ‘bool CTCP::ReadFile(char*, long int)’ at tcp.cc:1180:
/usr/include/bits/fcntl2.h:51: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments make[1]: *** [tcp.o] Error 1

解決方法:

編輯src/tcp.cc
跳到1180行
找到
open(name, O_CREAT | O_TRUNC | O_RDWR | O_BINARY)) == -1) {
改成
open(name, O_CREAT | O_TRUNC,0664 | O_RDWR | O_BINARY)) == -1) {
然後make dynamic

Reference:
pftp-shit wont compile