看完 vgod的為什麼我用Mac之後
05/26/2010, 09:22 - 生活
看完 vgod的為什麼我用Mac之後:

我是從AppleII開始進入腦世界的,經過AppleSoft,Apple DOS 3.2,CP/M 至 DOS,Windows 之後 UNIX 才開始出現 SCO XENIX,SCO UNIX,Solaris, BSD, Linux 一直到OS X,現在也大都是用OS X做我的工作, 因為正如你說的,OS X有Windows和UNIX之長, 又可以用 X-Window, 不用太煩惱driver的問題, 不過一樣我有一半的時間是掛在Linux上,用的是Slackware. 用過了各種Linux Distribution 如Gentoo,RedHat之後,我回到了最開始使用的Slackware,因為簡單,沒有太高的要求, 而我都是自compile我要的程式,從kernel到gcc到x-window等. 而我還是大部份都在 Command Line 工作,用vi程式.有時用各種UNIX的小工具grep,awk,sed再不然用perl就可以做完很多事了,在windows下是用GNUWin32加上MinGW就可以將UNIX的使用經驗有限度的搬到Windows下了,因為我有時要改改別人的VB程式....Qrz. 現在叫我去用Windows真有一種想要砸掉的衝動.

使用電腦,而開始想了解,並學習如何自己寫程式,是很多人共同的腳步. 從 AppleSoft 的 Integer BASIC到6502和Z80的Assembly而到用Turbo C/Turbo Pascal寫DOS的常駐程式及Device Driver,到Windows的GUI的VB和C++,一直到Apple Cocoa Objective-C,其他的Perl/awk/grep/sed等就不說了,這整個過程只能說,學習過程非常有趣,但若是要靠寫程式過日子就非常恐怖了,根本是退一步即無死所啊(用SQL的好像是例外).
發表回應 發表回應 ( 709預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 2.9 / 485 )

作學問的方法
05/20/2010, 12:13 - 想到的
我想到一件事,畢業論文是否可以通過,是由你的老師所認定的。也就是說他說可以,就大都可以通過而畢業。所以要畢業,先要讓老師認定你有達到畢業學位要求的資格。方法是多問、多看,多出現,多參與討論。讓老師經由這些討論的過程,認定你有資格可以畢業。最簡單的方法就是經常出現在老師的面前,不要放棄每次和老師討論的機會。討論的過程中,發問、回答及自我歸訥出結論很重要。

論文的內容反而是次之的問題,因為真正要學的是“作學問的方法“,而一般認為的創新,並不是主要的要求。畢竟要在一門學問中提出創新,並不是一年、兩年可以作到的。而且也不可能要求人人一定要有創新才可以達到畢業的資格。一位老師如何了解你作學問的方法是否正確、並符合畢業學位的要求呢?多參與討論、多看別人的論文、提出自已的看法,並想想如何解決別人已發現及未發現的問題。所以學位的真正目的不在要求創新,而是發現問題,解決問題的方法及態度。

發表回應 發表回應 ( 603預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 341 )

Twitter Backup Script 4
05/19/2010, 13:50 - Open Source
說不改,結果還是動手了啊...Qrz,加了將 URL 連結 tag 出來,比較方便直接點閱。


#!/bin/sh
#
USER=Tasuka
DATE=`date +%m%d%y-%H%M`
TIMEZONE=CST
TIMESHIFT=8
#
export all_proxy="http://proxy.ncu.edu.tw:3128"
#
FILENAME=twitter_backup
SUFFIX=html
#
FILE=$FILENAME.$SUFFIX
BACKUP_FILE=$FILENAME.1.$SUFFIX
#
if [ -f $FILE ];then
LAST=`cat $FILE | \
grep "META NAME" | \
grep "TWITTES" | \
awk -F" " '{print $3}' | \
awk -F"=" '{print $2}' | \
awk -F"\"" '{print $2}' \
`

LASTID=`cat $FILE | \
grep "META NAME" | \
grep "ID" | \
awk -F" " '{print $3}' | \
awk -F"=" '{print $2}' | \
awk -F"\"" '{print $2}' \
`

mv $FILE $BACKUP_FILE
else
LAST=0
LASTID=0
fi

MAX=`curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=1&count=20" | \
grep "<statuses_count>" | \
awk -F">" '{print $2}' | \
awk -F"<" '{print $1}' | \
sort -u| \
awk 'BEGIN{ \
i=0; \
j=0 \
} \
{ \
j=$1; \
if (j>i) \
i=j \
} \
END { \
print i \
} \
' \
`

MAX_ID=`curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=1&count=20" | \
grep "<id>" | \
awk -F">" '{print $2}' | \
awk -F"<" '{print $1}' | \
sort -u | \
awk 'BEGIN { \
i=0; \
j=0 \
} \
{ \
j=$1; \
if (j>i) \
i=j \
} \
END { \
print i \
} \
' \
`

if [ $LAST == 0 ];then
if [ $MAX -ge 3200 ];then
COUNTER=3200
else
COUNTER=$MAX
fi

PAGE=$((COUNTER%200))
if [ $PAGE != 0 ];then
PAGE=$((COUNTER/200))
PAGE=$((PAGE+1))
else
PAGE=$((COUNTER/200))
fi

echo "<HTML LANG=UTF8>" > $FILE
echo "<META NAME=\"TWITTES\" CONTENT=\"$MAX\">" >> $FILE
echo "<META NAME=\"ID\" CONTENT=\"$MAX_ID\">" >> $FILE
echo "<HEAD><TITLE>$USER@Twitter Backup Since $DATE</TITLE></HEAD><BODY>" >> $FILE
echo "<H1><A HREF=http://twitter.com/$USER>@$USER</A>'s Twitter Backup Since $DATE</H1>
<H4>$MAX Tweets</H4><BR>" >> $FILE
echo "<H4>" >> $FILE

i=1
while [ $i -le $PAGE ]; do
curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=$i&count=200" | \
sed -e "/<text>/N;/<\/text>$/s/\n/ /g" -e "/>/s/>/</g" | \
awk -F"<" 'BEGIN{ flag=0;T=8; } \
{ \
if($2=="status" && flag==1){ \
flag=0 \
} \
if($2=="created_at" && flag==0){ \
split($3,datetime," "); \
year=datetime[6]; \
day=datetime[3]; \
if(datetime[2]=="Jan"){ \
month=1; \
md=31; \
}else \
if(datetime[2]=="Feb"){ \
month=2; \
if(year%4==0 && year%100!=0 || year%400==0){ \
md=29; \
}else{ \
md=28; \
} \
}else \
if(datetime[2]=="Mar"){ \
month=3; \
md=31; \
}else \
if(datetime[2]=="Apr"){ \
month=4; \
md=30; \
}else \
if(datetime[2]=="May"){ \
month=5; \
md=31; \
}else \
if(datetime[2]=="Jun"){ \
month=6; \
md=30; \
}else \
if(datetime[2]=="Jul"){ \
month=7; \
md=31; \
}else \
if(datetime[2]=="Aug"){ \
month=8; \
md=31; \
}else \
if(datetime[2]=="Sep"){ \
month=9; \
md=30; \
}else \
if(datetime[2]=="Oct"){ \
month=10; \
md=31; \
}else \
if(datetime[2]=="Nov"){ \
month=11; \
md=30; \
}else \
if(datetime[2]=="Dec"){ \
month=12; \
md=31; \
} \
split(datetime[4],time,":"); \
hour=((time[1]+T)%24); \
mins=time[2]; \
secs=time[3]; \
if((time[1]+T)%24==1){ \
day++; \
if(day/md==1){ \
day=day%md; \
month++; \
if(month/12==1){ \
month=month%12; \
year++; \
} \
} \
} \
printf "<P>\n %s-%s-%s %2s:%2s:%2s <BR>\n", \
year,month,day,hour,mins,secs \
} \
if($2=="text"){ \
printf "%s </P>\n",$3 \
} \
if($2=="user"){ \
flag=1 \
} \
}' | \
sed -e "/[hH][tT][tT][pP]:/s//http:/g" \
-e "/[hH][tT][tT][pP][sS]:/s//https:/g" \
-e "/[fF][tT][pT]:/s//ftp:/g" \
-e "s/http:\/\/[[:graph:]\.\/]*/<A HREF='&'>&<\/A> /g" \
-e "s/https:\/\/[[:graph:]\.\/]*/<A HREF='&'>&<\/A> /g" \
-e "s/ftp:\/\/[[:graph:]\.\/]*/<A HREF='&'>&<\/A> /g" >> $FILE
i=$((i+1))
done

echo "<CENTER><H6>Power with " >> $FILE
echo "<A HREF=http://www.gnu.org/software/gawk/>awk</A>," >> $FILE
echo "<A HREF=http://www.gnu.org/software/sed/>sed</A>," >> $FILE
echo "<A HREF=http://curl.haxx.se/>curl</A>," >> $FILE
echo "<A HREF=http://www.gnu.org/software/bash/>bash</A>" >> $FILE
echo "</H6></CENTER>" >> $FILE
echo "</BODY></HTML>" >> $FILE

else
COUNTER=$((MAX-LAST))

if [ $COUNTER != 0 ]; then
PAGE=$((COUNTER%200))

if [ $PAGE != 0 ];then
PAGE=$((COUNTER/200))
PAGE=$((PAGE+1))
else
PAGE=$((COUNTER/200))
fi

echo "<HTML LANG=UTF8>" > $FILE
echo "<META NAME=\"TWITTES\" CONTENT=\"$MAX\">" >> $FILE
echo "<META NAME=\"ID\" CONTENT=\"$MAX_ID\">" >> $FILE
echo "<HEAD><TITLE>$USER@Twitter Backup Since $DATE</TITLE></HEAD><BODY>" >> $FILE
echo "<H1><A HREF=http://twitter.com/$USER>@$USER</A>'s Twitter Backup Since $DATE</H1>
<H4>$MAX Tweets</H4><BR>" >> $FILE
echo "<H4>" >> $FILE

i=1
while [ $i -le $PAGE ]; do
curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml? \
since_id=$LASTID&page=$i&count=200" | \
sed -e "/<text>/N;/<\/text>$/s/\n/ /g" -e "/>/s/>/</g" | \
awk -F"<" 'BEGIN{ flag=0;T=8; } \
{ \
if($2=="status" && flag==1){ \
flag=0 \
} \
if($2=="created_at" && flag==0){ \
split($3,datetime," "); \
year=datetime[6]; \
day=datetime[3]; \
if(datetime[2]=="Jan"){ \
month=1; \
md=31; \
}else \
if(datetime[2]=="Feb"){ \
month=2; \
if(year%4==0 && year%100!=0 || year%400==0){ \
md=29; \
}else{ \
md=28; \
} \
}else \
if(datetime[2]=="Mar"){ \
month=3; \
md=31; \
}else \
if(datetime[2]=="Apr"){ \
month=4; \
md=30; \
}else \
if(datetime[2]=="May"){ \
month=5; \
md=31; \
}else \
if(datetime[2]=="Jun"){ \
month=6; \
md=30; \
}else \
if(datetime[2]=="Jul"){ \
month=7; \
md=31; \
}else \
if(datetime[2]=="Aug"){ \
month=8; \
md=31; \
}else \
if(datetime[2]=="Sep"){ \
month=9; \
md=30; \
}else \
if(datetime[2]=="Oct"){ \
month=10; \
md=31; \
}else \
if(datetime[2]=="Nov"){ \
month=11; \
md=30; \
}else \
if(datetime[2]=="Dec"){ \
month=12; \
md=31; \
} \
split(datetime[4],time,":"); \
hour=((time[1]+T)%24); \
mins=time[2]; \
secs=time[3]; \
if((time[1]+T)%24==1){ \
day++; \
if(day/md==1){ \
day=day%md; \
month++; \
if(month/12==1){ \
month=month%12; \
year++; \
} \
} \
} \
printf "<P>\n %s-%s-%s %2s:%2s:%2s <BR>\n", \
year,month,day,hour,mins,secs \
} \
if($2=="text"){ \
printf "%s </P>\n",$3 \
} \
if($2=="user"){ \
flag=1 \
} \
}' | \
sed -e "/[hH][tT][tT][pP]:/s//http:/g" \
-e "/[hH][tT][tT][pP][sS]:/s//https:/g" \
-e "/[fF][tT][pT]:/s//ftp:/g" \
-e "s/http:\/\/[[:graph:]\.\/]*/<A HREF='&'>&<\/A> /g" \
-e "s/https:\/\/[[:graph:]\.\/]*/<A HREF='&'>&<\/A> /g" \
-e "s/ftp:\/\/[[:graph:]\.\/]*/<A HREF='&'>&<\/A> /g" >> $FILE
i=$((i+1))
done

cat $BACKUP_FILE | \
sed -e "/^<HTML/d" \
-e "/^<META/d" \
-e "/^<HEAD>/d" \
-e "/^<H1>/d" \
-e "/^<H4>/d" >> $FILE
fi
fi

if [ $COUNTER == 0 ];then
mv $BACKUP_FILE $FILE
fi

發表回應 發表回應 ( 802預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 378 )

Twitter Backup Script 3
05/18/2010, 14:35 - Open Source
這個版本,可以自動判斷新的 Twittes 而不會全部再 download 一次了。將這次的推數資料和ID放在HTML 的 META tag 中,以方便下次使用。要用的話,要將 USER= 換成自已的 Twitter Screen Name
這個 Script 就可以放到 Cron 中每個月自已備份一次了。


#!/bin/sh
#
USER=Tasuka
DATE=`date +%m%d%y-%H%M`
#FILENAME=/tmp/twitter_backup.$DATE.html
FILENAME=twitter_backup
SUFFIX=html
#
FILE=$FILENAME.$SUFFIX
BACKUP_FILE=$FILENAME.1.$SUFFIX
#
if [ -f $FILE ];then
LAST=`cat $FILE | \
grep "TWITTES" | \
awk -F" " '{print $3}' | \
awk -F"=" '{print $2}' | \
awk -F"\"" '{print $2}' \
`

LASTID=`cat $FILE | \
grep "ID" | \
awk -F" " '{print $3}' | \
awk -F"=" '{print $2}' | \
awk -F"\"" '{print $2}' \
`

mv $FILE $BACKUP_FILE
else
LAST=0
LASTID=0
fi

MAX=`curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=1&count=20" | \
grep "<statuses_count>" | \
awk -F">" '{print $2}' | \
awk -F"<" '{print $1}' | \
sort -u| \
awk 'BEGIN{ \
i=0; \
j=0 \
} \
{ \
j=$1; \
if (j>i) \
i=j \
}
END { \
print i \
} \
' \
`

MAX_ID=`curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=1&count=20" | \
grep "<id>" | \
awk -F">" '{print $2}' | \
awk -F"<" '{print $1}' | \
sort -u | \
awk 'BEGIN { \
i=0; \
j=0 \
} \
{ \
j=$1; \
if (j>i) \
i=j \
} \
END { \
print i \
} \
' \
`

if [ $LAST == 0 ];then
if [ $MAX -ge 3200 ];then
COUNTER=3200
else
COUNTER=$MAX
fi

PAGE=$((COUNTER%200))
if [ $PAGE != 0 ];then
PAGE=$((COUNTER/200))
PAGE=$((PAGE+1))
else
PAGE=$((COUNTER/200))
fi

echo "<HTML LANG=UTF8>" > $FILE
echo "<META NAME=\"TWITTES\" CONTENT=\"$MAX\">" >> $FILE
echo "<META NAME=\"ID\" CONTENT=\"$MAX_ID\">" >> $FILE
echo "<HEAD><TITLE>$USER@Twitter Backup Since $DATE</TITLE></HEAD><BODY><H3>" >> $FILE

i=1
while [ $i -le $PAGE ]; do
curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=$i&count=200" | \
sed -e "/<text>/N;/<\/text>$/s/\n/ /g" -e "/>/s/>/</g" | \
awk -F"<" 'BEGIN{ flag=0 } \
{ \
if($2=="status" && flag==1){ \
flag=0 \
} \
if($2=="created_at" && flag==0){ \
printf "<BR>%s<BR>",$3 \
} \
if($2=="text"){ \
printf "%s<BR>",$3 \
} \
if($2=="user"){ \
flag=1 \
} \
}' | \
sed -e "/+0000/s/+0000//g" >> $FILE
i=$((i+1))
done
echo "</BODY></HTML>" >> $FILE

else
COUNTER=$((MAX-LAST))

if [ $COUNTER != 0 ]; then
PAGE=$((COUNTER%200))

if [ $PAGE != 0 ];then
PAGE=$((COUNTER/200))
PAGE=$((PAGE+1))
else
PAGE=$((COUNTER/200))
fi

echo "<HTML LANG=UTF8>" > $FILE
echo "<META NAME=\"TWITTES\" CONTENT=\"$MAX\">" >> $FILE
echo "<META NAME=\"ID\" CONTENT=\"$MAX_ID\">" >> $FILE
echo "<HEAD><TITLE>$USER@Twitter Backup Since $DATE</TITLE></HEAD><BODY><H3>" >> $FILE

i=1
while [ $i -le $PAGE ]; do
curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?
since_id=$LASTID&page=$i&count=200" | \
sed -e "/<text>/N;/<\/text>$/s/\n/ /g" -e "/>/s/>/</g" | \
awk -F"<" 'BEGIN{ flag=0 } \
{ \
if($2=="status" && flag==1){ \
flag=0 \
} \
if($2=="created_at" && flag==0){ \
printf "<BR>%s<BR>",$3 \
} \
if($2=="text"){ \
printf "%s<BR>",$3 \
} \
if($2=="user"){ \
flag=1 \
} \
}' | \
sed -e "/+0000/s/+0000//g" >> $FILE
i=$((i+1))
done

cat $BACKUP_FILE | \
sed -e "/<HTML/d" -e "/META/d" -e "/<HEAD>/d" >> $FILE

fi
fi

if [ $COUNTER == 0 ];then
mv $BACKUP_FILE $FILE
fi


發表回應 發表回應 ( 588預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 375 )

Twitter Backup Script 2
05/15/2010, 14:45 - Open Source
修改加上日期及在 META 中放上 Twitts 數量,以備後用。

我的 Twitter 備份


#!/bin/sh
#
USER=Tasuka
DATE=`date +%m%d%y`
FILENAME=/tmp/twitter_backup.$DATE.html
#
MAX=`curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=1&count=20" | \
grep "<statuses_count>" | \
awk -F">" '{print $2}' | \
awk -F"<" '{print $1}' | \
sort | \
awk '{if ($1>NF) NF=$1} END {print NF}'`

if [ $MAX -ge 3200 ];then
MAX=3200
fi

PAGE=$((MAX%200))

if [ $PAGE != 0 ];then
PAGE=$((MAX/200))
PAGE=$((PAGE+1))
else
PAGE=$((MAX/200))
fi

echo "<HTML LANG=UTF8><META NAME=\"TWITTES\" CONTENT=\"$MAX\"> \
<HEAD><TITLE>$USER@Twitter Backup</TITLE></HEAD><BODY><H3>" > \
$FILENAME

i=1
while [ $i -le $PAGE ]; do
curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=$i&count=200" | \
sed -e "/>/s/>/</g" | \
awk -F"<" 'BEGIN{ flag=0 } \
{ \
if($2=="status" && flag==1){ \
flag=0 \
} \
if($2=="created_at" && flag==0){ \
printf "<BR>%s<BR>",$3 \
} \
if($2=="text"){ \
printf "%s<BR>",$3 \
} \
if($2=="user"){ \
flag=1 \
} \
}' | \
sed -e "/+0000/s/+0000//g" >> $FILENAME
i=$((i+1))
MAX=$((MAX-1))
done

echo "</BODY></HTML>" >> $FILENAME


發表回應 發表回應 ( 818預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 2.8 / 399 )

Twitter Backup Script
05/13/2010, 22:48 - Open Source
上次看了 hao520 在 Twitter 和他的 blog 中談到 Twitter 有可視最後3200推的數量問題,連帶而來的備份的問題。看了還真的有人在作 backup,hao520自已也做了一個 script,不過他是直接從 twitter 的網頁拿資料。一時技癢就也自已作了一個 bash script,是經由 twitter API 而來的。目前顯示出來的資料,沒有編號、也沒有日期,所以還有改善的空間。

以下是備份下來的HTML內容:




再來是程式碼

#!/bin/sh
#
USER=Tasuka
#
MAX=`curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=1&count=20" \
|grep "<statuses_count>"|awk -F">" '{print $2}' \
|awk -F"<" '{print $1}'|sort| \
awk '{if ($1>NF) NF=$1} END {print NF}'`

if [ $MAX -ge 3200 ];then
MAX=3200
fi

PAGE=$((MAX%200))

if [ $PAGE != 0 ];then
PAGE=$((MAX/200))
PAGE=$((PAGE+1))
else
PAGE=$((MAX/200))
fi

i=1
DATE=`date +%m%d%y-%H%M`

echo "<HTML LANG=UTF8><HEAD><TITLE>$USER Twitter Backup</TITLE> \
</HEAD><BODY><H3>" > /tmp/twitter_backup.$DATE.html
while [ $i -le $PAGE ]; do
curl "http://api.twitter.com/1/statuses/user_timeline/$USER.xml?page=$i&count=200" \
|grep '<text>' | awk -F"<text>" '{print $2}' | \
awk -F"</text>" '{printf "%s<BR>",$1}' >>/tmp/twitter_backup.$DATE.html
i=$((i+1))
MAX=$((MAX-1))
done
echo "</BODY></HTML>" >>/tmp/twitter_backup.$DATE.html

發表回應 發表回應 ( 473預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 293 )

數字會說話,但你懂了數字要告訴你什麼?
05/10/2010, 16:53 - 生活
很多人都經常會說:數字會說話。但是經常流於只看表象,而看不到數字真正代表的意義。數字就是數字,數字本身簡單說來只有數字。要看出不同,至少要有兩個或兩個以上的數字作比較,才看得出不同。比較方法不外乎加、減、乘、除等運算方式。比如說:考試60分,這件事,一般人直覺會認為考得不好,因為他是拿常用的標準100來和60相比,只得到3/5的分數。但若是再說明有100人參加考試,而得最高分的就是60,這時好像60又是非常棒的數字了,因為是最高分數啊。但如果說100人中有99個都是60的話呢?那60馬上又變得沒什麼了不起了,有99/100的人都一樣拿到這個分數。由上例可知,單單一個數字,沒什麼意義,數字的意義需要附屬的數字,放在一起之後,數字才變得有意思。

不過大多數的人看數字,只是很簡單的和自已心中的數字相比,而得到好、或不好的結論。但這個好或不好經常和事實有一定的距離。比如說警方的效率指標中,有一項破案率。數字高代表比較好,一般人就會根據這個數字的高低而自已得到破案率高,代表治安比較好這個印象。但事實上並不盡然喔!假設台北市某區的單月破案率是99%,而蘭嶼島的單月破案率是0%。光從數字看是台北市優於蘭嶼,而得到蘭嶼治安不好,因為破案率是零。不過大家一定忘了,破案率高,代表犯罪件數可能也高,所以破案率高不代表治安好吧。如台北市一天的犯罪件數是1000件,而破案率99%,就是990件,還有10件沒破;而蘭嶼可能100天發生不到一件案件,而且沒有偵破,所以破案率是0%。若是真的要比起來的話,台北市一百天應會有(1000*100)*(100-99)%=1000件沒破案,比上蘭嶼一百天發生一件案件,同樣沒有破案,哪𥚃的治安好呢?當然人口數不同,若台北市某區的人口數是蘭嶼的十倍、每日進出人數是百倍的話,也還是遠遠高過蘭嶼,這樣的數字相比還是失真,只是利用來說明,不可以單只看數字本身,要連同數字背後的意義一起分析才有意思。

現在很流行民調,經常會看到發表民調如何、如何,所以得到的是某一類的答案。單只因數字而簡單得到答案,又是一種失真。因為調查的樣本數遠低於實際的人口數、調查的範圍是否合理、調查的方式是否合理、調查時的問卷題目是否有暗中誤導、調查的時間,調查當時的態度,都會影響結果。經常發生的是有多方,同時對某問題,作出來的民調,兩方得到的結論,根本南轅北轍,而互相質疑。事實上兩方的數字,可能根本因上面的理由,而有非常大的誤差,和事實相比,都是嚴重失真下得到的結論。

同樣的,一家公司中,經常會對員工個人、或是整個單位作效能評比,甚至於對客戶的反應,也是一樣經常流於失真。例如對員工個人的評比,經常簡化到以工作時間長短,作為基準,時間長的就是比較好。但事實上一個一天工作八小時,但可以準時交出需求的工程師,應該要比一天工作十四小時,一樣準時交出所需求的工程師要好太多了。8:14,當然低的好不是嗎?但是因為只工作八小時的工程師,沒有配合加班,所以直接而簡單的印象就是不好。而在作單位評比時也是一樣,一個單位經常可以準時交付客戶需求的東西,而且沒有發生重大問題,硬是比同樣交付客戶需求的東西,但是到處充滿了問題的要不好,理由很簡單,因為作好是正常的,沒有發生問題,所以單位的能見度低,而經常發生問題而且解決的單位,因為經常出現問題、並快速反應,所以直覺的得到“很努力、並且很有效率,但這些人都忽略了"No news is good news"的真正意思。又例如代工單位因為幫客戶解決問題,而使得客戶可以將付出減少支出。但在高層看來,直覺的看到的數字是,客戶的需求變少,而認為該單位不努力,使得客戶減少支付代工費,這也是只看表面而直接得到的結論。事實上以代工業而言,客戶之所以要用代工,就是要減低支出,而幫客戶達到這個要求,應該是高效率才對。而且經常因為簡單的看數字作決策,而作出錯誤而且不利於客戶的決策,接到客戶的抱怨時,直覺認定是該負責單位有問題,事實上客戶在報怨的,可能是因高層的特意忽視客戶需求而作出的決策,而非關實際工作的單位。不過通常這種高層都不會認為是自已不會看數字、不了解客戶反應、以及自已決策時的故意錯判的錯。而在面對客戶時說的都不是人話而是鬼話了。這樣子生意還做得下去,還真的是見鬼了。

現代人是生活在充滿數字的時代,各種數字除了表面的意義,經常還有其背面潛在的意義,要經過嚴格的分析才有可能得到比較接近真象的結論,若只是經由數字的表象,就得到結論,那何必花錢請這些人位居高層、握有決策?要這麼簡單的看數字的高低或打印象分數,請個小學二年級的已經學過四則運算的小學生來,就可以簡單無誤的指出那個數字高、那個數字低了,不然也可以直接用Excel就可以作出決策了不是嗎?所以說:“數字會說話,但說出來的是人話還是鬼話,是和看的人會不會分析,並看到數字背後的意義有關“。不是簡單到用一句鬼話就可以帶過的。
3 回應 3 回應 ( 1436預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 455 )

使用BGP連接兩個不直接相連的網路
04/28/2010, 11:53 - Network
使用BGP連接兩個不直接相連的網路
發表回應 發表回應 ( 2120預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 432 )

換光世代10M/2M
04/23/2010, 22:33 - 今天
今天施工完成,使用的是ZyXel的VDSL2的Modem,有四個Ethernet Port。不過電話線要先經過Modem再至電話機,可以能是為了減少干擾吧。
換了之後由原來的ADSL 2M/256Kbps bridge mode固定一個IP換成PPPoE 8個浮動IP,但這個工作站是在家裡,需再用固定IP,所以再至So-net網頁換成PPPoE 1個固定IP加7個浮動IP。申請都可以在網頁上簡單完成,不過在要作IP反解Domain Name設定時,發現還是被鎖定在原來的ADSL的IP,造成無法自已作IP反解,這時只有求助服務人員了。撥過電話之後,因為是星期五晚上,所以需要到下星期才會解除原先IP的設定。所以現在是DNS正解是由自已的DNS Server和Seednet的Domain Name Server已經設定完成。而反解就只有等到下週一或二了。

設再來就是測速了,若是用So-net提供的測試,就不太準了,而且So-net才用10/20/30/40MB的檔安經由HTTP download,檔案太小了。正好Apple昨天開放了支援iPad的新XCode 3.2.2,所以就由 http://developer.apple.com 拿新的 XCode 3.2.2 for Mac OS with iPad 2.31GB的檔案來試,檔案夠大,應該會準一點吧!

測試如下
開始

中間

看來一直在1.1MB,所以傳輸速度就大約是 1.1MBx8bit=8.8Mbps的下載速度。上傳的話,目前沒有相近速度的Server可以測試,所以不知道,應該也不會太差吧。
每秒8.8Mbps已經和10BaseT的速度一樣了,不過當然和Firewire 400Mbps相比還是差很多啦!
最後將檔案經由Fireware copy至備份硬碟上。

2.31GB的檔案用Firewire傳2分鐘
2.31GBx8x1000)/120=154Mbps
USB2.0的話,我沒有這種設備,反正也不可能快到哪裡去,就算了吧!因為USB的兩個device一定要經由Host才可以交換資料,所以要視Host的處理速度而定。而Firewire Device是可以自已溝通的,不需要Host幫助,速度當然大大的不同了。

PS:在外面,收家中的電子郵件,Server傳輸可達700KB=5.6Mbps,有沒有這麼好啊!
發表回應 發表回應 ( 543預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 484 )

還我複決權
04/22/2010, 22:55 - 想到的
聽說憲法中有規定,人民有選舉、罷免、創制、複決四項權利,但是好像到目前唯一還要經由民意代表行使的只有複決權。這幾天,立法院又開始大打出手,各說各話,難道我們就只能交給那一百多個立法委員決定一切事情?聽憑政黨協商,內線交易?只可以看著政府將手介到大家的口袋、衣袋、外褲、內褲的掏錢,但卻因為是立法院通過的法案,或政府不交給民意機關監督,而完全沒有辦法,只可以在下一次選舉到來之前,懊悔選錯人?

我要說的是請政府“還我複決權“,政府機關及民意機關通過的法案,需經過公民投票複決之後才可以算是正式通過,反正台灣現在每年選舉場子也不少,不差多一點。如此正好可以完全解決假民意、真黨意,假民主、真金主。 參考一下2008加州公投 http://tinyurl.com/2dv8vlm
發表回應 發表回應 ( 500預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 433 )


<<開始 <前一頁 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 下一頁> 最後>>