難得看到 wretch 在改 code,抓下來紀念一下好了:
Category Archives: Programming
Programming
TWNIC 的 BoF
一些題外話 XD
到會場的時候剛好看到 wretch,就一起上 14F 去會場。然後在會場看到 ijliao 與小陰 (sfchiou),於是就跑過去跟他聊天,然後聊到一半我聽到後面好像在講 pLog (似乎是跟 YAM 的大頭講 plogworld.org 拿不回來的事情),回頭一看發現是 MarkWu,不知道要不要打招呼 XD
前面有看到 Jedi 與 Schee 以及 zonble,然後吃東西的時候遇到 jwbai…
布丁沒來真是太可惜了 XD
中間休息的時候被 MarkWu 認出來,聊了一下 pLog 的 SQL 與 PHP 架構問題,我是認為 pLog 跟 WordPress 的定位不一樣,所以以現在的 SQL 用法,已經無藥可救了 XD (對不起,我是嘴炮,只負責出張嘴 :p)
剛剛看到 Joi Ito 的 blog 上有一些資訊,大家可以連過去看看:Off to Taiwan (Comments 的部分)、Heewon, Jedi & me in Taiwan。
以及 Jedi 的 Gallery 有一些相片可以看:台灣部落格輕鬆聚 2005。
Python 與 Flickr
在 Boing Boing 看到的:Python script for uploading to Flickr,其實主要是拿來看 Python 的 urllib2 要怎麼用 :p
WWW::Mechanize 是蠻好用的,不過 Perl 在 Windows 發展的瓶頸還是很大,反倒是 Python 已經很穩定,而且已經有不少有名的程式在上面「發展過」(Bittorrent,現在官版的 client 用的人愈來愈少了 :p)
Anyay,這隻 Python script 在這裡:uploadr.py。
Mac Virus
Slashdot 上的消息:Large Prize Offered For Writing Mac Virus,誰最先寫出 Mac 上的 Internet-connected worm (透過 Internet 感染,通常是透過軟體的 security issue 做到的),就可以拿走 USD$25K (換算成台幣大約有七百五十萬!),如果是 Symantec 的員工先幹出來的話可以拿雙倍,也就是 USD$50K :p
不過這個 project 被 cancelled 了 :p (唉呀呀)
WordPress 1.5 Themes
okay,alexking 說 已經有 139 個 Themes 了,聽他的意思似乎是截止收件了,現在看起來 也的確是 139 個。
果然大家都是在 deadline 前才交 :p
NDA
在 The Problem with NDAs 提到拒簽 NDA 的原因:
Ideas are cheap, implementation is hard, and the value in a system is not in imagining it
讓人會心一笑 :p
原始的 Post:NDA: d’oh, but not for Stallman’s reasons (use.perl.org)。
用 Regular Expression 表示 valid email address
用 Regular Expression 表示合法 e-mail 位置似乎是每隔一陣子就會被拿出來大家笑的東西?
Photo Matt 提到的 Validate Emails:
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?: \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:( ?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\0 31]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+ (?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z |(?=[\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n) ?[ \t])*)*\<(?:(?:\r\n)?[
\t])*(?:@(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\ r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n) ?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t] )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])* )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*))*) *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r \n)?[ \t])*)(?:\.(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?: \r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[ \t
]))*”(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031 ]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(? :(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(? :(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)? [
\t]))*”(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[
\t])*(?:(?:(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]| \.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|” (?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[“()<>@,;:\
“.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[
\t])*(? :[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[
\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*))*|(?:[^()<>@,;:”.\[\] \000- \031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\.|( ?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([
^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:” .\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\
]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:”.\ [\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\
r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]
|\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[
\t])*)?(?:[^()<>@,;:”.\[\] \0 00-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\ .|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|”(? :[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])* (?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[“()<>@,;:”.
\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[
\t])*(?:[ ^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\]
]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[
\t])*)(?:,\s*( ?:(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:\ “.\[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t])*)(?:\.(?:( ?:\r\n)?[
\t])*(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\[“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*)(? :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*))*|(?: [^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”.\[\ ]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n) ?[
\t])*(?:@(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[”
()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n) ?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[“()<>
@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[“()<>@,
;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[“()<>@,;:\
“.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[
\t])*)? (?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\[“()<>@,;:”. \[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t])*)(?:\.(?:(?: \r\n)?[
\t])*(?:[^()<>@,;:”.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
“()<>@,;:”.\[\]]))|”(?:[^”\r\]|\.|(?:(?:\r\n)?[
\t]))*”(?:(?:\r\n)?[ \t]) *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*)(?:\ .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:”.\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\[“()<>@,;:”.\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[
\t])*))*\>(?:( ?:\r\n)?[ \t])*))*)?;\s*)
18th IOCCC
Slashdot 的消息,第十八屆 IOCCC (The International Obfuscated C Code Contest) 要開始了 (18th International Obfuscated C Code Contest Opens),有很多有名的 C code 都是從這邊出來的 :p
奇數
在「耐人尋味找奇數」裡面提到的方法其實還算好,O(1) :p
我記得之前有看到類似的文章,也是判斷奇數的,下面是其中一種方法 :p
int isOdd(int n) { if (n < 2) return (n != 0); else return (!idOdd(n-1)); }