About Me

我的相片
台北市, Taiwan
我是方選,
方白科技(finebind tech.)共同創辦人,
臺大資管所畢,
希望能幫助更多的人!

FB: http://fb.com/function1122
LINE: http://bit.ly/1foeZft (手機開啟點擊網址自動加入)

最新15則讀者回應

最新文章

FUNction's 上課筆記

Label Cloud

Blog Archive

FeedBurner

追蹤者

到三月我文章都不會更新(應該)

FUNction 於 2008年2月16日 晚上11:10 發表

位敬愛的讀者,謝謝您們長時間(其實也是從12月開始啦)的支持,但是很抱歉,因為家裡遇到一些事,我最近沒有時間更新我的Blog。這件事預計到三月就會結束,希望大家到時候還是要記得來逛逛喔...

恩...這邊也要跟我的好朋友再次說聲抱歉。

  • 小廖,我真的很想跟你打球啦,但是這兩個禮拜真的不行;
  • 家興,我也想跟你逛街阿(還有唱歌),我也想買條褲子,但是這兩個禮拜真的不行;
  • 老弟,我知道你要我維持重訓是為我好,但是這兩個禮拜就讓我放著胖吧;
  • 柯妞,原本說好這幾天要跟你出去的,但是...我也很想阿;
  • 還有,打算約我的朋友,我這陣子都會拒絕你,對不起

希望你們能放寬心胸,你知道人都會有一些避不了的事情。我寫這篇文章,有兩個原因:第一是希望我敬愛的讀者這兩個禮拜可以不用癡癡的等文章更新;第二是真的很抱歉,這些約我的朋友。我知道我很臨時,你一定在生我的氣,但是這件事對我來說也很臨時...

總之還是抱歉了,要記得回來喔!!!
繼續閱讀全文 到三月我文章都不會更新(應該)

預計改版Blog 參考:Blogger Feed, 熱門文章, 標籤雲, 自製樣板

FUNction 於 2008年2月15日 下午4:31 發表

Blog 實在太醜了,一進來就滿滿的XML 教學,連本科系的人都Orz 了,其他人怎麼受的了。
所以我打算將Blog 改版...想了個蠻酷的點子
最近因為有點事,所以我會一點一點的改,希望大家樂見其成喔^^

以下我列出一些對於改版有用的連結,敏覺度高的人也許可以知道我要幹麻 :P
http://yukitowu.blogspot.com/2008/01/feed-blogger-hack.html
http://metamuse.blogspot.com/2008/01/blogger-template-blackcat-250.html
http://jinyaolin.blogspot.com/2006/12/blogger_1374.html
http://skyvee.blogspot.com/2007/05/bloggertag-cloud.html
繼續閱讀全文 預計改版Blog 參考:Blogger Feed, 熱門文章, 標籤雲, 自製樣板

XML Schema 從看不懂到慢慢懂 - part 5

FUNction 於 2008年2月13日 下午5:36 發表
前一篇: XML Schema 從看不懂到慢慢懂 - part 4

Empty Element

Empty Element是一個沒有value,但是有attribute 的原件。長的像這樣:

<product prodid="1345" />


這就是變成Schema之後的樣貌…

<xs:element name="product">

<xs:complexType>

<xs:attribute name="prodid" type="xs:positiveInteger"/>

</xs:complexType>

</xs:element>


若在複雜一點,這邊我們也可以用complexContent包住restriction(限制必須為數字),再包住attribute(設定屬性):

<xs:element name="product">

<xs:complexType>

<xs:complexContent>

<xs:restriction base="xs:integer">

<xs:attribute name="prodid" type="xs:positiveInteger"/>

</xs:restriction>

</xs:complexContent>

</xs:complexType>

</xs:element>


Element Only

介紹完似乎無用的 "Empty Element",再火速介紹Element Only。顧名思義,這個元件只能包含其他Element。像下面例子中的標籤 "preson" 就是一個Empty Elementl:

<person>

<firstname>John</firstname>

<lastname>Smith</lastname>

</person>


所以我們可以把Schema 寫成如下示,sequence 已經在之前介紹過,他代表裡面的元件是「並排」的:

<xs:element name="person">

<xs:complexType>

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>


這篇介紹的兩個方法都可以另外寫好,然後使用上一篇教的 "type" 來套用,這裡就請舉一反三啦。


下一篇:待續...今天累了
繼續閱讀全文 XML Schema 從看不懂到慢慢懂 - part 5

XML Schema 從看不懂到慢慢懂 - part 4

FUNction 下午2:49 發表
前一篇: XML Schema 從看不懂到慢慢懂 - Part 3
Complex Element

Complex Element 包含其他element或attribute。

接下來我們會從簡單到複雜定義一個complex element。 "employee" 就是一個complex element,因為他裡面包著兩個element(firstname, lastname)。

<employee>

<firstname>John</firstname>

<lastname>Smith</lastname>

</employee>


用以下的schema可以為上面的XML定義。值得注意的是我們會用<xs:complexType><xs:sequence>標籤包住裡面的物件(element)。Sequence代表employee下面的物件已經沒有階層,而是平行的。

<xs:element name="employee">

<xs:complexType>

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>


接下來來點複雜的(但我覺得挺重要,所以還是看一下)。當很多個complex element 裡面的element 一樣時,我們可以直接幫這個complex element 給一個 "type",在從type中做定義。接下來就可以把這個type 套用到多個complex element中了。

例如employee, student, member 都包含一樣的子element(firstname, lastname),所以我們另外定義了他的type。

<xs:element name="employee" type="personinfo"/>

<xs:element name="student" type="personinfo"/>

<xs:element name="member" type="personinfo"/>

<xs:complexType name="personinfo">

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>


還可以一層一層的包得像洋蔥,替換的淋漓盡致,看懂以下需要不少的抽象邏輯喔。

<xs:element name="employee" type="fullpersoninfo"/>

<xs:complexType name="personinfo">

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>


<xs:complexType name="fullpersoninfo">

<xs:complexContent>

<xs:extension base="personinfo">

<xs:sequence>

<xs:element name="address" type="xs:string"/>

<xs:element name="city" type="xs:string"/>

<xs:element name="country" type="xs:string"/>

</xs:sequence>

</xs:extension>

</xs:complexContent>

</xs:complexType>


下一篇:XML Schema 從看不懂到慢慢懂 - part 5
繼續閱讀全文 XML Schema 從看不懂到慢慢懂 - part 4

XML Schema 從看不懂到慢慢懂 - Part 3

FUNction 下午2:01 發表
前一篇: XML Schema 從看不懂到慢慢懂 - Part 2
Attribute

這邊用很快的速度介紹屬性(Attribute),屬性的宣告和simple element 是一樣的,所以其他廢話就不多說了。值得注意的是,在XML裡,物件的屬性都是非必要的,如果是必要屬性,則須加上use="required"。

例如以下語法,就代表lang 這個屬性是必要的:

<xs:attribute name="lang" type="xs:string" use="required"/>


Restrictions

接下來是有點無聊的限制(Restrictions),可以告訴XML 某個數值的限制,例如得分最大不能超過100,最小不能小於0。

<score>98</score>


就可以用以下Schema 限制:

<xs:element name="score">

<xs:simpleType>

<xs:restriction base="xs:integer">

<xs:minInclusive value="0"/>

<xs:maxInclusive value="100"/>

</xs:restriction>

</xs:simpleType>

</xs:element>


好…費話不多說(因為再多說對速成也許沒幫助),這邊列出原文中可以用在限制的內容:

Constraint

Description

enumeration

Defines a list of acceptable values

fractionDigits

Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero

length

Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero

maxExclusive

Specifies the upper bounds for numeric values (the value must be less than this value)

maxInclusive

Specifies the upper bounds for numeric values (the value must be less than or equal to this value)

maxLength

Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero

minExclusive

Specifies the lower bounds for numeric values (the value must be greater than this value)

minInclusive

Specifies the lower bounds for numeric values (the value must be greater than or equal to this value)

minLength

Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero

pattern

Defines the exact sequence of characters that are acceptable

totalDigits

Specifies the exact number of digits allowed. Must be greater than zero

whiteSpace

Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled

英文也很好懂…我就不逐字翻譯了。


下一篇:XML Schema 從看不懂到慢慢懂 - part 4
繼續閱讀全文 XML Schema 從看不懂到慢慢懂 - Part 3

XML Schema 從看不懂到慢慢懂 - Part 2

FUNction 下午1:33 發表
前一篇: XML Schema 從看不懂到慢慢懂 - part 1

有一篇介紹schema,包含所謂的xmlns:xs, xmlns, targetNamespace, elementFormDefault ,但因為我覺得和快速入門沒有關係,所以就移掉了,有興趣想成為嘴砲高手的起記得看該篇文章。


Simple Element

我們知道XML Schema 定義了XML 中的物件。在XML 物件中"simple element" 代表這個物件裡面只包含文字,沒有再包裹其他物件(或屬性)。這裡的「文字」也代表數值、日期、布林值等等。

<xs:element name="xxx" type="yyy"/>

這是一個simple element 的範例,裡面包含了name 與type。

以下列出type可以包含的內容:

  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time


假設XML 文件包含以下simple element:

<authname>FUNction</lastname>

<age>22</age>

<dateborn>1985-11-22</dateborn>


相信聰明的你已經可以自己寫出他的schema了:

<xs:element name="authname" type="xs:string"/>

<xs:element name="age" type="xs:integer"/>

<xs:element name="dateborn" type="xs:date"/>



接下來是比較進階的部分,我們可以指定預設(default)與寫死的(fixed)的值:

例如以下的標籤 "color" 我們可以給他預設值紅色(red):

<xs:element name="color" type="xs:string" default="red"/>


寫死的值顧名思義就是不能被更改,且也會自動賦予該值,像這裡 "color" 就被寫死成紅色(red),不能改成其他顏色了。

<xs:element name="color" type="xs:string" fixed="red"/>


下一篇: XML Schema 從看不懂到慢慢懂 - Part 3
繼續閱讀全文 XML Schema 從看不懂到慢慢懂 - Part 2

XML Schema 從看不懂到慢慢懂 - part 1

FUNction 下午1:08 發表
XML 的Schema 定義著這個XML 的內容。對XML 非常生疏的我,因為工作需要也要努力學習看懂他的Schema。獨樂樂不如眾樂樂,我就邊看文章,邊把文章內容用自己的話寫出來,希望能寫出一系列的教學文件,幫助其他看不懂XML Schema的人。

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.w3schools.com"

xmlns="http://www.w3schools.com"

elementFormDefault="qualified">

<xs:element name="note">

<xs:complexType>

<xs:sequence>

<xs:element name="to" type="xs:string"/>

<xs:element name="from" type="xs:string"/>

<xs:element name="heading" type="xs:string"/>

<xs:element name="body" type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>


以上為一個簡單的XML Schema,原文中命名為"note.xsd"

xsd就是XML Schema 的附檔名,從這個定義裡面,我們可以寫出以下的note.xml 文件:

<?xml version="1.0"?>

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>


接下來的文章,都會圍繞在看懂XML 的Schema 上…如果你覺得很無聊,可以直接跳過這個單元。

下一篇:XML Schema 從看不懂到慢慢懂 - Part 2

繼續閱讀全文 XML Schema 從看不懂到慢慢懂 - part 1

年初三放鞭炮事件

FUNction 於 2008年2月12日 晚上10:42 發表

我爸與他三十多年的老友共點煙火,爆竹一聲除舊穢


弟弟的沖天炮連發

家人&我爸好友全家&她女兒的boyfriend及兩個朋友,據說...總共花了17XXX...
繼續閱讀全文 年初三放鞭炮事件

JavaScript Replace() Hacking!!

FUNction 晚上8:12 發表
什麼這篇要用到hacking (奧義)這個詞,那是因為javascript 的replace 實在太神奇了。在很多語言中都有replace()這個方法,可是javascript 的replace 卻可以搭配正規表達式(regexp)對字串做出很多變化。

要點一(難度: 50)
在javascript 中,replace 不像很多程式語言能一次取代多次(預設只會取代一次),需要透過正規表達試才能提供取代掉某篇文章中某個字的效果,假設字串happy我們想轉變為haPPy,有兩種寫法:

  • str.replace(/p/g,"P");
  • str.replace(new RegExp("p", "g"), "P")

這裡使用正規表達是特殊命令"g",代表「所有」。

要點二(難度: 70)
假設你透過搜尋引擎造某個網頁,可是那個網頁很大張,你找不到你要的內容,那你會怎樣?

我都會利用Google 的頁庫存檔,再次檢視那張網頁,因為「頁庫存檔」通常都會好心的將你的關鍵字用別的顏色標注。

其實透過replace 也可以將特殊字改變顏色,我現在來簡單實做這樣一個貼心功能,我把它寫城一個網頁:
[範例網頁]←你可以點選檢視原始碼來看看我js怎麼寫,這範例我邊google 邊寫,寫了一小時...所以我覺得難度有90。

要點三(難度: 80)
除了將正規表達是發揮的淋漓盡致外,我們還可以自定函數,處理字串內容。以下是我在大陸網站找到的一個例子,這邊將他稍微修改一下,程式碼如下:

<script language="javascript">
var str="我今年22歲,我弟今年19歲,我奶奶今年82歲(不過她在天上)"
function yearsOld($1)
{
var gyear=(new Date()).getYear()-parseInt($1)+1;
return $1+"("+gyear+"年出生)";
}
var reg=new RegExp("(d+)歲","g");
var newstr=str.replace(reg, yearsOld);

document.write(str);
// 輸出 "我今年22歲,我弟今年19歲,
// 我奶奶今年82歲(不過她在天上)"
document.write(newstr);
// 輸出 "我今年22歲(1986年出生),我弟今年19歲(1989年出生),
// 我奶奶今年82歲(1926年出生)(不過她在天上)"
</script>

超酷的吧,不過其實我是1985年生的 :-)
參考資料:http://tech.ddvip.com/2007-10/119331548136528_4.html

繼續閱讀全文 JavaScript Replace() Hacking!!

將網頁文章字首大寫

FUNction 中午12:15 發表
頁的排版其實就是模仿報紙而來,很多網頁文章也都會模仿雜誌,將第一個字母大寫(像我),其實在CSS 中就能設定自動大寫(JavaScript 也可以),但到目前為止我都還傻傻得自己將自括起來調整字型。接下來就來介紹這兩種方法:

CSS
使用CSS 的範例我已經做成網頁了,基本上就是使用一個名為"first-letter" 的偽屬性,來指定第一個字的樣式,這個方法在IE 與firefox 中都沒有問題。
[範例網頁]←可以在範例網頁「檢視原始碼」觀看CSS 設定
參考資料:http://whx.tzgt.gov.cn/newOperate/html/2/21/213/2458.html

JavaScript
使用JS 其實主要目的不是在對網頁內容字首做放大,而是在處理字串時的技巧,這裡我使用replace 來完成(replace 其實非常好用,相信在之後的文章會有更多的著墨)

我把他寫成一個function,如下所示:
function upperEverFirst(str){
var upperStr = str.replace(/\s[a-z]/g,function($1){return $1.toLocaleUpperCase()}).replace(/^[a-z]/,function($1){return $1.toLocaleUpperCase()});
return upperStr;
}

這裡是範例:


您剛剛輸入的字,字首轉換成大寫以後:Function's Blog
參考資料: http://www.jb51.net/article/9221.htm
繼續閱讀全文 將網頁文章字首大寫

恭賀大家鼠年行大運!!!!

FUNction 於 2008年2月7日 下午3:15 發表


天半夜我手機裡多了很多簡訊,我也都還沒有回,還有正咩儂用MSN跟我說新年快樂,謝謝大家!!

再次讓我知道我還是有朋友的(感動流淚),所以我用手機錄製了一段賀歲短片,希望大家笑納喔!!

繼續閱讀全文 恭賀大家鼠年行大運!!!!

會員註冊新概念

FUNction 上午11:12 發表
希望創造一個很簡單的會員註冊環境,但是我需要使用者提供
  • 帳號
  • 暱稱
  • 密碼
  • 電子信箱

於是我依照可能的人性,製作出如下的會員註冊網頁雛形,我的企圖是不要讓使用者覺得要輸入很多資料,所以電腦會自動猜測使用者的暱稱與電子信箱(並偷偷建議使用Gmail);也省去"確認密碼"的表單,當使用者將滑鼠移至"確認密碼"文字上,就可以顯示密碼內容,你們覺得好用嗎??(註冊按下去不會怎樣,這裡只是模擬註冊概念而已)
  • 帳號 暱稱
  • 密碼[確認密碼]
  • 信箱


我真的很想聽聽大家的意見(看在我大年初一還在做這個的份上,拜託...盡量毒舌沒關係><)
繼續閱讀全文 會員註冊新概念

Javascript SHA1

FUNction 於 2008年2月6日 中午12:28 發表
前在儲存會員帳號密碼的時候,都會用MD5(Message-Digest algorithm 5) 對資料庫中的密碼編碼,確保資料庫被破解的時候,駭客仍然不知道會員的原始密碼,保障會員。但是從許多資料顯示,MD5 已經不安全了,於是我打算改用SHA1(Secure Hash Algorithm)

先前我都是讓會員傳送原始密碼,送到PHP 之後再用現成的md5(string) 編碼,可是我覺得這樣傳輸過程就是以原始密碼在傳送,是不是仍然不安全,如果要透過SSL 通道似乎又不能支持AJAX(據說...沒try過) ,於是我想到了這招,在傳送密碼前就先經過Javascript 編碼,不知道這樣是否能提高安全性,如果有經驗的人(或資安專家)也想聽聽你的看法。

上網找一下,馬上就有現成寫好的程式碼了^^:
/**
*
* Secure Hash Algorithm (SHA1)
* http://www.webtoolkit.info/
*
**/

function SHA1 (msg) {

function rotate_left(n,s) {
var t4 = ( n<<s ) (n>>>(32-s));
return t4;
};

function lsb_hex(val) {
var str="";
var i;
var vh;
var vl;

for( i=0; i<=6; i+=2 ) {
vh = (val>>>(i*4+4))&0x0f;
vl = (val>>>(i*4))&0x0f;
str += vh.toString(16) + vl.toString(16);
}
return str;
};

function cvt_hex(val) {
var str="";
var i;
var v;

for( i=7; i>=0; i-- ) {
v = (val>>>(i*4))&0x0f;
str += v.toString(16);
}
return str;
};


function Utf8Encode(string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";

for (var n = 0; n < string.length; n++) {

var c = string.charCodeAt(n);

if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) 192);
utftext += String.fromCharCode((c & 63) 128);
}
else {
utftext += String.fromCharCode((c >> 12) 224);
utftext += String.fromCharCode(((c >> 6) & 63) 128);
utftext += String.fromCharCode((c & 63) 128);
}

}

return utftext;
};

var blockstart;
var i, j;
var W = new Array(80);
var H0 = 0x67452301;
var H1 = 0xEFCDAB89;
var H2 = 0x98BADCFE;
var H3 = 0x10325476;
var H4 = 0xC3D2E1F0;
var A, B, C, D, E;
var temp;

msg = Utf8Encode(msg);

var msg_len = msg.length;

var word_array = new Array();
for( i=0; i<msg_len-3; i+=4 ) {
j = msg.charCodeAt(i)<<24 msg.charCodeAt(i+1)<<16
msg.charCodeAt(i+2)<<8 msg.charCodeAt(i+3);
word_array.push( j );
}

switch( msg_len % 4 ) {
case 0:
i = 0x080000000;
break;
case 1:
i = msg.charCodeAt(msg_len-1)<<24 0x0800000;
break;

case 2:
i = msg.charCodeAt(msg_len-2)<<24 msg.charCodeAt(msg_len-1)<<16 0x08000;
break;

case 3:
i = msg.charCodeAt(msg_len-3)<<24 msg.charCodeAt(msg_len-2)<<16 msg.charCodeAt(msg_len-1)<<8 0x80;
break;
}

word_array.push( i );

while( (word_array.length % 16) != 14 ) word_array.push( 0 );

word_array.push( msg_len>>>29 );
word_array.push( (msg_len<<3)&0x0ffffffff );


for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {

for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);

A = H0;
B = H1;
C = H2;
D = H3;
E = H4;

for( i= 0; i<=19; i++ ) {
temp = (rotate_left(A,5) + ((B&C) (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}

for( i=20; i<=39; i++ ) {
temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}

for( i=40; i<=59; i++ ) {
temp = (rotate_left(A,5) + ((B&C) (B&D) (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}

for( i=60; i<=79; i++ ) {
temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}

H0 = (H0 + A) & 0x0ffffffff;
H1 = (H1 + B) & 0x0ffffffff;
H2 = (H2 + C) & 0x0ffffffff;
H3 = (H3 + D) & 0x0ffffffff;
H4 = (H4 + E) & 0x0ffffffff;

}

var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);

return temp.toLowerCase();

}


參考資料http://www.webtoolkit.info/javascript-sha1.html
這網站超酷的,還有提供javascript 的md5, crc32...等等,此外,還有許多有用的PHP, CSS 技巧喔。
繼續閱讀全文 Javascript SHA1

帶妹妹去迪化街辦年貨囉!!

FUNction 於 2008年2月4日 晚上9:13 發表

今年的迪化街口...還是像往年一樣熱鬧(往年?? 我多久沒來了...最好是知道往年多熱鬧)


妹:這是誰阿??
我:財神爺吧!?
妹:這不是財神爺,因為他有兩個鬍子
我:...
這是入口不遠處的充氣人偶,讓妹妹與他合照,特別要他擺一個正一點的姿勢,可是他臉頰的肉整個堆出來...以前不是這樣的Q__Q。真的有點傷心,現在整個人都腫起來了(我也是)


我與妹在門口的合照...阿芳說他是弟弟(囧),這張妹妹照的不正,但是我卻很正@@

天帶妹妹從街頭吃到街尾,而且跟妹妹約法三章,跟她說你吃每一家都要把味道記起來,到最後我們倒回來買五樣東西回家,我覺得這樣還蠻有智慧的,不失為一個良方!
繼續閱讀全文 帶妹妹去迪化街辦年貨囉!!

2007 台灣微軟尾牙

FUNction 於 2008年2月2日 晚上10:35 發表

台灣微軟工作半年多了,這天是我進公司以來最期待的日子。我們在美麗華的華漾舉行


尾牙入場券
我拿到的是橘色的,可是正牌員工拿的是黑色的。唯一的差別在...黑色可以抽獎,橘色不行

影片上傳錯誤 Blog ID:2174931189750419814 視訊 ID:97e6bf2540d08eed ←囧
開頭熱場影片
這個影片因為太長了,所以我錄到一半就把它卡掉...可是沒想到卡完的30 秒影片就結束了 囧
最近我真的常常因為不堅持而差一點會有成果耶,像今天玩軟通識課,上到最後因為一些因素我先走了,沒想到走完40 分鐘課程也結束了,且還點名...據說沒被點到今天就白來了,可花了我一天(9:30-5:15)的時在那兒,真不甘心。

這次尾牙有點悶...我覺得,即使我們的老闆Rick 抽到了兩萬元現金(金牛座運勢還真旺)。不知道是不是自己在公司的存在感太低了(哭泣),我幾乎都在跟我們Team 的Jill 講話,結果後來我們都先走了。不過還是有令人很驚訝的事情,台灣微軟總經理蔡恩全在晚會上宣布:
美國微軟用446 億美金併購雅虎(Yahoo!)公司!

回到家我能做的只有勸我弟趕快灌MSN ,不要在用什麼即時通了(不過他不理我)。這件併購案雖然是網路世界史上的第二個超級併購案,但是也對微軟的MSN 部門造成不小的衝擊,畢竟入口網站還是Yahoo! 做的比較好,有誰會用http://tw.msn.com/當作自己的首頁呢??
繼續閱讀全文 2007 台灣微軟尾牙

MySQL 隨機查詢 & 隨機機率問題

FUNction 於 2008年2月1日 上午10:24 發表
本要用SQL 語法隨機找出幾筆資料,但是後來因為我要的邏輯太複雜了,所以我後來放棄用這招,我以下介紹在網路上找到的一些方法:

隨機選出n筆資料:
SELECT *
FROM table_name AS r1 JOIN
(SELECT ROUND(RAND() * (SELECT MAX(id)FROM table_name)) AS id) AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT n;

據說這樣的效率會比以下語法快四倍

SELECT * FROM table_name WHERE id> RAND()*(SELECT MAX(id) FROM table_name) LIMIT n


接下來這是一個有趣的問題:
table1 有個欄位weight 記錄0~5的整數,要從表中雖機SELECT 出8條記錄,要求weight值越高的,被SELECT 出來的機率越高
我就不貼語法了,直接貼討論串 http://topic.csdn.net/u/20071025/18/a0a72218-5554-4531-b20c-1a82d34eed13.html


參考資料:
http://www.viatop.cn/blog/show-290-1.htm
http://www.pconline.com.cn/pcedu/empolder/db/mysql/0509/697526.html

順帶一提:
我想要的是可以從特定限制內找出隨機幾筆資料,後來我打算用PHP 的rand() 搭配 mysql_data_seek() 來完成我要的需求。
繼續閱讀全文 MySQL 隨機查詢 & 隨機機率問題