Arduino簡介
OS X 10.6.4 內的程式還有PowerPC的...
07/02/2010, 09:15 - Apple
MacBook Pro跑的程式,現在大都是Intel 64bit的格式了,不過還是有些是32bit的,更好玩的是還有PowerPC的。Apple在對舊程式的相容能力,在這部份就沒有話說的了。
Apple Remote Desktop 棒
06/19/2010, 21:56 - Apple
Apple Remote Desktop 不是一般的 remote control,今天遠端昇級一部Mac,download好之後會要求重開機。重開機之後,Apple Remote Desktop 還是看得到安裝過程,要等到真正的重開才會Disconnect/Reconnect。我想,在安裝階段時系統並還沒進入重開,而是安裝完成之後才是真正的重開機。不過這樣還是比別的remote control程式好多了啊!

OS X 10.6.4
06/17/2010, 12:29 - Apple
很大啊!

Safari5 reader
06/08/2010, 10:20 - Apple
換了Safari5之後,發現有些網站會在位址列出現"reader"字樣,按下去之後出現了沒有廣告的網頁內容耶,還可以直接印出,很方便。不過不是每個網站都會出現reader選項。而且Safari反應變快了。

Safari Reader
Safari Reader removes annoying ads and other visual distractions from online articles. So you get the whole story and nothing but the story. It works like this: As you browse the web, Safari detects if you’re on a web page with an article. Click the Reader icon in the Smart Address Field, and the article appears instantly in one continuous, clutter-free view. You see every page of the article — whether two or twenty. Onscreen controls let you email, print, and zoom. Change the size of the text, and Safari remembers it the next time you view an article in Safari Reader.
From Apple Safari Reader
是Safari自已決定選擇比較長的內文顯示在Safari reader內,太短的就不會出現了。

Safari5 reader 很直接,好用啊,可以過濾廣告,也可以用比較大的字體,方便閱讀。
這個功能,現在除了Safari5之外,Google Chrome 可以外加Readability Redux而Firefox可以用Readability。IE的話...就說不要再用IE了啦!
Reference:
Apple Safari 5 Reader feature is fantastic
Get Safari's new "Reader" feature in Chrome and firefox
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
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
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
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
使用BGP連接兩個不直接相連的網路















