2011年12月5日 星期一

C# Sys.WebForms.PageRequestManagerServerErrorException(status code 500 OR 12031)問題

訊息: Sys.WebForms.PageRequestManagerServerErrorException: 處理伺服器上的要求時發生未知的錯誤。從伺服器傳回的狀態碼為: 12031
行: 4723
字元: 21
程式碼: 0
URI: http://emp.dhf.org.tw/ScriptResource.axd?d=4RQWgxT_AgXvyMs4acwyKSgCLJ6f9g019rfzWrKv9ltcx1RMW1Nv0ddpPltqc3UgqLqtkURdBv1V23tl4VW9SxCB_WLRaG-k68fmnBjWf4Uxu6UIeVk6FHwZ_hRrwmedi6pCD4iumBfCitXUm5mm8UDwJO_yKFKL-batYzrgScZg9fEA0&t=ffffffffd3a39141

在 </form> 標籤底下加入

2011年11月26日 星期六

網路遊戲之世界大戰塔防(World War Tower Defense)

遊戲說明:世界大戰塔防禦遊戲,建立許多不同類型的炮塔和升級,以殺死農民,野蠻人和更多。

遊戲心得,這是我玩中級時所採取的分流攻擊策略,且是我目前測試後效果最好的陣法
陣法一

陣法二

2011年11月1日 星期二

創意始終來自於人性

“Burst UP” 哲學:Burst 無限上綱法

B: Big ~ 想像範圍要大,天馬行空,沒有什麼是不可能的!
U: You ~ 不以自己為想像範圍,永遠以別人想法思考。
R: Rotate ~ 換個順序想,換個角度想。
S: Surround ~ 包圍法,腦力激盪包圍主題。
T: “踢”進去 ~ Kick Off,沒有開始沒有成果,現在就做!

2011年10月6日 星期四

我討厭笨蛋,但我做的產品連笨蛋都會用

蘋果創辦人賈伯斯辭世,令各地粉絲無限唏噓,他清癯而帥氣的身形之後,留下不少人生經驗談,許多評論者認為那是發人深省的箴言,即使賈伯斯如今已不在世間,依然能夠膾炙人口,流傳久遠。

賈伯斯金句不勝枚舉,被網友與媒體津津樂道者不少,他對人生的看法與他人大異其趣,他說:
「幫我做出重大決定的最好工具,就是知道自己快死了。」
「活著就是為了改變世界,難道還有其他原因嗎?」
「不要活在別人的觀念中,要勇敢跟著心意和直覺走。」
「你必須要找到你所愛的東西。」
「我願意拿我所有的科技,換取和蘇格拉底相處的一個下午。」

對於生活態度,賈伯斯也有獨到的見解,他說:
「看電視時,大腦停止工作,打電腦時,才開始運轉。」
「所謂創造力,就是把許多東西連結在一起而已。」
「我每天早晨對著鏡子問我自己:如果今天是我人生的最後一天,我會想要做什麼?如果很多天的答案都是「沒有」時,我就知道我必須改變些什麼。」

對於他的工作夥伴與競爭者,賈伯斯語錄更令人帶淚噴飯,他說:
「微軟唯一的問題,是沒有品味。」
「2011年是抄襲年,看到你們抄襲iPad 2,實在很悲哀。」
「蘋果的人才曾被說是輸家,但他們只是缺乏好主管和好計畫。」
「如果比爾蓋茲年輕時混過嬉皮,會更有寬度。」
「我討厭笨蛋,但我做的產品連笨蛋都會用。」

賈伯斯不是神 生涯7大突槌品

蘋果公司共同創辦人賈伯斯(Steve Jobs)在產品設計上常想推展到極致,但結果不總是那麼美好。美聯社總結7種在他指揮下研發的產品,但上市之後銷售成績不佳或功能不受歡迎。

1.蘋果III(Apple III,1981)。它是接替超夯蘋果II的新產品,目標放在商務用戶並以此定價。不幸的是這個硬體不可靠。蘋果在商務電腦用戶市場上輸給同年推出的IBM個人電腦,與其他快速增加的模仿產品。

2.Lisa電腦(1983)。第一部商業量產的電腦,擁有繪圖使用者介面,推出時售價9995美元。比較便宜的麥金塔電腦(Macintosh)1年後推出,就掩蓋掉它的光芒。

3.NeXT電腦(1989)。賈伯斯被趕出蘋果之後,他成立的公司所設計的1款電腦,當時在許多方面都領先群倫,但它與蘋果III及Lisa電腦一脈相傳,售價太貴無法被主流使用者接受。

4.Puck Mouse(1998)。新型iMac是賈伯斯1996年重返蘋果之後推出的第1項重要產品,廣獲成功,但搭配的這個圓形滑鼠很小。使用者無法靠觸覺感知它指向哪個方向,即使握在手中,也常會找不到,難以使用。

5.The Cube(2000)。這款小型桌上型電腦裝在透明塑膠方形容器中很漂亮,曾獲設計獎,但因為價高,在店頭不受歡迎。它的功能也沒超過其他蘋果電腦。蘋果的設計具有指標性,但消費者通常不願單單為了設計,付出額外高價。The Cube的概念繼續用在Mac Mini,後者比較小、比較成功,但比較不吸睛。

6.iTunes電話(2005)。很容易忘記iPhone不是蘋果涉入行動電話業務的第1個產品。蘋果2005年底曾與摩托羅拉合夥推出ROKR。它當做電話,雖然不算超棒,但還過得去,但如果當作音樂播放器,則差iPod一大截。它僅能儲存100首歌,而且從電腦灌到ROKR的過程很慢。還有人批評它不讓使用者從行動電話網路下載音樂,第一代iPhone也有這種限制。有人甚至稱ROKR是「the iPhone」。

7.蘋果電視(2007)。蘋果進軍客廳的行動三心二意,很不符合蘋果的風格。賈伯斯之後說,蘋果電視只是個「嗜好」。蘋果電視是個小盒子,連結住家的電視與Mac電腦。使用者可以利用小型遙控器將電腦裡面的音樂及電影在電視上播放。蘋果電視很昂貴,售價249美元,裝配與使用都很複雜。從iTunes購買的電影解析度很低,在HDTV高畫質電視機播放起來很模糊。蘋果2010年推出更先進、更便宜的蘋果電視,可以直接連接到網路。

賈伯斯成功之道:想你想不到的

「想你想不到的觀念,做你做不出的產品」,應該是賈伯斯能夠成為科技界風雲人物的重要原因之一。他使科技從龐然大物變成能放進口袋,把娛樂從唱盤轉為數位。他推出的東西不僅僅是「新產品」,更重要的是能夠把人類的生活帶入一個「新領域」。

Apple I,開創了電腦「個人化」的新理念;Apple II,把電腦由少數玩家的禁臠,推廣成大眾化的產品,也讓他在廿五歲時成了億萬富翁。「麗莎」雖讓他初嘗敗績,但他將繪圖界面、視窗與滑鼠納入個人電腦,不僅為後續的「麥金塔」奠定成功基礎,也為個人電腦建立標準規格,至今未被取代。

接下來的iMac,促成網路全球化的風潮。進入廿一世紀,賈伯斯更是連戰皆捷,iPod把隨身聽帶入了數位化的時代,iPhone掀起了觸控風潮,iPad則讓平板電腦得以實現。

高科技業者的競爭,通常在於「數字」,例如產品處理速度多快,記憶體容量多大;然而技術性「數字」很容易被競爭者超越,因此,產品雖然不斷推陳出新,但「生命周期」愈來愈短。

其次,高科技業固然必須重視技術的創新,但更重要的是必須將新技術與消費者的需求緊密結合。蘋果本世紀以來多項新產品頻創佳績,在於能推出讓消費者「喜出望外」、帶動市場風潮的新產品,其他競爭廠商只能緊跟在後,靠著「提升功能」苦苦追趕。即使「後來居上」,但蘋果卻早已在另一項新產品的跑道上遙遙領先了。

賈伯斯的成功關鍵,當然在於不斷「創新」。然而「創新」的重點並不在於技術層次,而是在於產品概念,所以賈伯斯締造了蘋果的奇蹟,也改變了世界。

賈伯斯談設計:連按鈕都漂亮美到讓你想舔

1「設計這個詞本身很有趣。有些人認為設計是指看起來怎麼樣。但如果更深入觀察,設計實際上和東西怎麼運作有關。Mac的設計不是在它的外觀,雖然那是一部份的內容。Mac的設計主要是在考慮它怎麼運作。要把某件東西真正設計好,你必須徹底了解它,掌握它真正的本質。你必須熱心投入,才能徹底了解某樣東西,消化它,而不是囫圇吞棗。大部分人並未花時間這樣做。」

2「團隊進行產品設計真的很難。很多情況下,在向他們展示產品設計以前,人們根本不清楚自己究竟需要什麼樣的產品。」

3「我們把螢幕的按鈕做得很漂亮,美到你想要舔舔看。」

4「領袖和跟隨者的區別就在於創新。」

5「成為墳墓中最有錢的人,對我來說毫無意義,晚上睡覺的時候能說,我們做了一件很棒的事情,這對我來說才重要。」

2011年8月31日 星期三

好老闆&壞老闆

老闆的好壞,直接影響員工的心情和公司的營運。台灣大學管理學院副院長李吉仁表示,職場上充斥著很多不太理想的老闆,而老闆是多數人焦慮的來源,因為部屬會超乎正常注意有權力者的行為,因此,每個當老闆的都應該瞭解,混蛋老闆的成因,才可自我改進避免成為壞老闆。

遇上壞老闆 員工氣攻心

李吉仁以羅伯.蘇頓(Robert I. Sutton)所著的《好老闆壞老闆》為例指出,老闆的好壞,會影響員工心情與得心臟病的機會,對新產品開發的效能也有關鍵性影響,職場上的工作和諧、工作意願、員工離職率,也都和老闆息息相關。此外,老闆的行為還會影響未來老闆的行為,畢竟人都是有樣學樣。

李吉仁表示,廣義來說,有辦法用權利施加在你身上的那個人,就叫做老闆。不管是經理、主任、科長都是老闆。而屬下會「超乎正常」注意有權利者的行為

根據動物學的研究,在一群狒狒之中,狒狒大約20到30秒,就會看狒狒王一眼,這就是超乎正常的關注。而要知道哪一隻是狒狒王,也很簡單,一群狒狒中,最不注意別人的那隻,大概就是狒狒王。
李吉仁指出,人一旦掌權,會比較注意自己的需求和慾望,比較不注意他人的需求、慾望與行動。接下來就是,別人該遵守的規定,彷彿都不適用在自己身上

李吉仁說,這就是權利的毒害,而這種毒害比安非他命還毒。據心理學家Dacher Keltnor的研究,人握有權利之後,行為比較類似大腦額葉底部受損的病人,腦部這區受損會讓人過於衝動,行為麻木不仁。所以獲得權利就像有人打開你的頭顱,取走那塊攸關同情心與適切行為的大腦區塊一樣。
因此當老闆的自我感覺過於良好時,壞老闆就誕生了。

要成為一個好老闆,李吉仁認應該要有不扼殺員工發展、咬緊牙關堅持到底、小處著手累積致勝、避免有害串連和保護屬下等五個信念和目標。

大家都知道組織要健全發展,首先就是不扼殺員工的發展。李吉仁說,這事很困難,因為老闆常在不由自主或是無意識中,扼殺了部屬的發展。畢竟當部屬都超越了自己,那自己要去哪裡?因此很多老闆會不經意地認為,部屬還不到那個時候,而這樣的想法,就是在扼殺部屬的發展。

咬緊牙關堅持到底,也考驗著老闆的智慧和擔當。李吉仁表示,在公司搭順風車的時候,這不是問題;但在逆風的時候,公司要裁員,面對無辜受裁的部屬,當老闆的要怎麼向員工交代?或是在新產品開發遇到瓶頸,是要撐下去還是大刀一揮?這時大家都在看,也是考驗老闆的智慧和員工未來向心力的關鍵。

管理七訣竅 老闆應遵守
要成為一個好老闆,李吉仁表示,有七個管理訣竅,那就是掌控、智慧、明辨、言行一致、擔當、善後和自省
對於掌控,李吉仁說,掌控和控制之間的差別,在於放手但不讓情況失控。畢竟人是「一抓就死,一放就亂」,控制得太嚴,屬下會變笨,完全不管的話,一旦出錯,當老闆怪罪又該如何回應?因此要抓多緊,主管真得好好拿捏

明辨人才,就是做到能識人、遠小人,這樣才能凝聚組織向心力。李吉仁說:「組織裡最難管的就是明星級的戰將和善於自我保護的爛蘋果。」

當組織裡有像籃球大帝麥可喬登那樣人物時,教練要怎麼當?而爛蘋果一定不會露出破綻,好讓主管抓到把柄。這兩種人都讓主管難為,但如何對待這兩種人,同樣也是所有的人都在看,要能讓好的人上天堂,壞的人住套房,才能凝聚向心力,否則組織士氣一定低落。

李吉仁表示,要做個好主管,雖然不容易,但也沒那麼難,把握「吾日三省吾身,將心比心」,當一個決策要推動時,一句話要罵出口時,把自己當成被管的人,看看自己會怎麼想,就對了。

潘俊琳【2011/08/02 經濟日報】

2011年8月19日 星期五

javascript 去除(移除)文本中的 html Tag 元素標籤

利用 javascript 移除html標籤
function RemoveHTML( strText ) {

var regEx = /<[^>]*>/g;
return strText.replace(regEx, "");
}

利用 javascript 移除a標籤
function RemoveA ( strText )

{
var regEx = /]*>[^>]*<[^>]a>/g;
return strText.replace(regEx, "");
}

利用 javascript 移除A標籤及A標籤內容
function RemoveAH ( strText ){

var regEx = /(]*>)|(<[^>]a>)/g;
return strText.replace(regEx, "");
}

測試 javascript 移除 HTML

<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>標記刪除測試</title></head><body>
<script>
alert(RemoveHTML("fad<a>af</a><b>fdf</b><table><tr><td>fd<td></tr></table>"));
alert(RemoveAH("fad<a href=#>af</a><b>f</b><table><tr><td>fd<td></tr></table><a href=#>bbb</a>"));
alert(RemoveA("fad<a href=#>af</a><b>fdf</b><table><tr><td>fd<td></tr></table><a href=#>bbb</a>"));
function RemoveHTML( strText )
{
var regEx = /<[^>]*>/g;
return strText.replace(regEx, "");
}

function RemoveA ( strText )
{
var regEx = /<a[^>]*>[^>]*<[^>]a>/g;
return strText.replace(regEx, "");
}

function RemoveAH ( strText )
{
var regEx = /(<a[^>]*>)|(<[^>]a>)/g;
return strText.replace(regEx, "");
}

</script></body></html>

想要留下哪種標籤,自己再加
function RemoveHTMLwithoutIMG_P_BR( strText ) {

var regEx = <(?!img|br|p).*?>/ig;
return strText.replace(regEx, "");
}

或是
function RemoveHTMLwithoutIMG_P_BR( strText ) {

return strText.replace(<(?!img|br|p).*?>/ig,"");
}

簡單的說,就是用『|』這個「or」符號,看你哪些想要留下的標籤,就給她加進去就好啦!

jQuery 語法範例

jQuery 取得所有 input type="text" 的ID

//抓取ID
$("input[type^='text']").each( //取得所有 input type=text 的 id
function (indexs) {
alert($(this).attr("id"));
});

$("textarea").each( //取得所有 textarea 的 id
function (indexs) {
alert($(this).attr("id"));
});

jQuery 取得所有 input type="text" 及 textarea 並填入資料

//填入值
$("input[type^='text']").each(
function (indexs) {
$(this).val('aaaa');
});
$("textarea").each(
function (indexs) {
$(this).val('112212121212');
});

jQuery 取得所有 input type="text" 並置換符號
    function RPmark() {

$("input[type^='text']").each(
function (indexs) {
var Text = $(this).attr("value").replace(/\</g, '&lt;').replace(/\>/g, '&gt;');
$(this).val(Text);
});
$("textarea").each(
function (indexs) {
var TAText = $(this).attr("value").replace(/\</g, '&lt;').replace(/\>/g, '&gt;');
$(this).val(TAText);
});
}

jQuery 語法範例

解決JavaScript中replace只置換第一個符合的字串問題

//只有置換的符合的第一個
var s=s.replace('aa','AA');

//把所有符合的字串置換
var s=s.replace(/\你要置換的字串/g,'AA');


針對整個 Form Selectors 的方式寫了一個 function 來掃全部欄位

$("#news_form :input").each(
function(){
switch($(this).attr('type')){
case 'radio':
/* 取消所有選取 */
$(this).attr("checked", false);
case 'checkbox':
/* 取消所有選取 */
$(this).attr("checked", false);
break;
case 'select-one':
/* 把 select 元件都歸到選第一項 */
$(this)[0].selectedIndex = 0;
break;
case 'text':
/* 清空 text 來欄位 */
$(this).attr("value", "");
break;
case 'password':
/* 清空 password 來欄位 */
$(this).attr("value", "");
case 'hidden':
/*
* 不清空 hidden,通常保純此欄位
*/
case 'textarea':
/* 清空 textarea 來欄位 */
$(this).attr("value", "");
break;
}
});

使用Html.TextBox可以透過maxlength屬性來限制字元數

//限制TextArea字元數
<script Type="text/javascript">
function checklength(ctlid, maxlength) {
if ($("#" + ctlid).text().length > maxlength) {
$("#" + ctlid).text($("#" + ctlid).text().substring(0, maxlength));
alert("已超過最大長度!"); return false;
}
}

$(function () {
$("#mycomments").keyup(function ()
{ checklength("mycomments", 100); });
});
</script>

防止頁面重複送出使用 jQuery:Validation,前端驗證的極品 jQuery:Validation,利用它來處理防止重複送出的按鈕

<script type="text/javascript" >
$('form').validate({
rules: {
name: { required: true },
email: { required: true, email: true },
pw: { required: true }
},
submitHandler: function (form)
{
$('form input:submit').attr('disabled', 'disabled');

form.submit();
}
});
</script>

2011年8月18日 星期四

NOD32 防毒更新序號

Username: TRIAL-50654081
Password: s6denrueve

Username: TRIAL-50654083
Password: hhtsmcutca

Username: TRIAL-50654086
Password: vutja3f8ex

Username: TRIAL-50654087
Password: a33pasfe6d

Username: TRIAL-50654101
Password: n5vtc63r7b

Username: TRIAL-50654099
Password: xrfhdk3crf
Username: TRIAL-50607065
Password: xf2m53p5xa

Username: TRIAL-50607070
Password: p28krhbppc

Username: TRIAL-50607071
Password: 46errbbves

Username: TRIAL-50607075
Password: fhehd2xbhf

Username: TRIAL-50607086
Password: ukbnhbhmjd

Username: TRIAL-50607092
Password: 2ars6k5e4x

Username: TRIAL-50607100
Password: 56xhfpcdxr
Username: TRIAL-50576737
Password: th64frr75f

Username: TRIAL-50576741
Password: rjkba74ak7

Username: TRIAL-50576752
Password: se88drmcvn

Username: TRIAL-50576753
Password: mx228sxu85

Username: TRIAL-50576755
Password: 7s833ear2c

Username: TRIAL-50576763
Password: ntnvcchxjk

Username: TRIAL-50576774
Password: 8erbkmrrb5

轉自 http://trynod32.blogspot.com/

2011年8月15日 星期一

社群網站行銷 犯八錯誤…非死不可

社群網站蓬勃發展,加速資訊傳遞的速度,為小企業帶來新商機;但利用社群網站行銷並非無往不利,專家建議小企業利用社群網站行銷時留心八個常犯的錯誤。

錯誤1:未事先計畫

儘管許多社群網站提供免費應用程式,但花下去的時間就是金錢,所以須先確立目標、設定達成計畫、決定投入的時間和資源,以求開花結果。

錯誤2:太快一頭栽入

並非每個社群網站都適合所有商家和企業主,如果一次嘗試所有平台,反而容易顧此失彼。先研究哪個平台最適合業務目標,以及競爭對手和客戶常用哪些平台?

錯誤3:忽略投資報酬率

小企業的時間和資源均有限,所以要勤於追蹤網路行銷效果,以衡量是否值得投資。確保你有既定目標及檢視成果的方法。大部分社群媒體應用程式提供分析工具,並有求助欄解釋使用方法。

錯誤4:未充分利用平台建立品牌

每個社群網站平台都提供眾多資訊欄,供企業填寫品牌訊息並插入圖像,但許多小企業讓這些欄位留白,不僅未掌握吸引消費者的機會、降低自己出現在搜尋結果的機率,還破壞公司形象。

錯誤5:沒有互動的老王賣瓜

在宴會上遇到只會自我吹噓的人最掃興。如果無法傾聽或讓消費者參與意見,網路行銷也徒勞無功。別害怕加入討論或發問,如果有人問你問題或發表評論,務必予以回應。

錯誤6:不能面對負面評價

難免會碰到滿腹牢騷的客戶張貼負面評價,但千萬別刪他們的貼文,以免被誤會成對自己的品牌不具信心。正面溝通並全力解決對方疑慮才能贏得客戶忠誠度。

錯誤7:捨不得花時間經營

在網路上經營品牌非一蹴可及,須有投入時間的心理準備。社群網站行銷見效的關鍵,在於持之以恆的上網互動,即使一天僅10分鐘也行。如果無法投入時間,最好別貿然開始。

錯誤8:欠缺熱情

社群網站行銷沒有熱情不會成功。如果企業主對網上互動不具熱情,但握有資源,不妨另找員工負責。

2011年8月13日 星期六

JavaScript 的 replace() 不太一樣,如何去除字串空白

JavaScript 的 replace() 函數只會取代一個字元
'google'.replace('o', '0')

取代所有的字元需要用到正規表達式
'google'.replace(/[o]/g, '0'); 

取代字串為空白字串
'google'.replace(/[o]/g, "");

2011年8月11日 星期四

如何用 Javascript 取得和設定修改 Fckeditor (CKEditor) 的值

假設 CKEditor 欄位名稱叫做 body,那麼當阿舍想用 Javascript 來取得 CKEditor 裡的 HTML 碼時,就可以用下面方式來取得,傳回值會是一個字串:
var ckeditorString = CKEDITOR.instances.body.getData();

相反的,如果要用 Javascript 來塞值到 CKEditor 裡去,那就用 setData() 的方式來做,做法如下:
CKEDITOR.instances.body.setData( '<b>Hello World !</b>' );

取得編輯器中HTML内容
function getEditorHTMLContents(EditorName) {   

var oEditor = FCKeditorAPI.GetInstance(EditorName);
return(oEditor.GetXHTML(true));
}

取得編輯器中文字内容
function getEditorTextContents(EditorName) {   

var oEditor = FCKeditorAPI.GetInstance(EditorName);
return(oEditor.EditorDocument.body.innerText);
}

修改編輯器中内容
function SetEditorContents(EditorName, ContentStr) {   

var oEditor = FCKeditorAPI.GetInstance(EditorName) ;
oEditor.SetHTML(ContentStr) ;
}


//在當前頁面獲得 FCK編輯器
var Editor = FCKeditorAPI.GetInstance('InstanceName');

//从 FCK 編輯器的彈出窗口中獲得FCK編輯器
var Editor = window.parent.InnerDialogLoaded().FCK;

//以框架夜面的子框架中取得其他框架中FCK編輯器
var Editor = window.FrameName.FCKeditorAPI.GetInstance('InstanceName');

//以頁面彈出視窗中獲得父窗口FCK編輯器
var Editor = opener.FCKeditorAPI.GetInstance('InstanceName');

//抓取 FCK 編輯器的內容
oEditor.GetXHTML(formatted); // formatted 为:true|false,表示是否按HTML格式取出
也可用:
oEditor.GetXHTML();

//設定 FCK 編輯器的內容
// 第二個參數為:true|false,是否以所得即所得的方式設定內容。此方法通常用在設定初始值或表單重設oEditor.SetHTML("content", false);

//將內容插入 FCK 編輯器:
oEditor.InsertHtml("html"); // "html"為HTML文本

//檢查 FCK 編輯器內容是否有改變
oEditor.IsDirty();

2011年8月8日 星期一

jQuery - javascript 呼叫 Button click

頁面上A.ASPX
<div style=" display:none"><asp:Button ID="B_AddData" runat="server" Text="觸發" onclick="B_AddData_Click" /></div>


<script type="text/javascript">
function clickPageButton(buttonID) {
var pageButton = $get(buttonID);
pageButton.click();
}
</script>

程式 A.ASPX.CS
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Confi", "if(confirm('請確定資料是否正確')  == true){ clickPageButton('" + B_AddData.ClientID + "');}", true);


2011年8月6日 星期六

各位老傢伙們,該學 HTML5 了

IE9 正式版即將在 3/14 正式推出 , 支援 HTML5 是新版最大的突破 , 目前有支援 HTML5 的瀏覽器有 Chrome , Safari 4, FireFox 4

我的感覺是 , HTML5 已經非純 Web Art 或程式基礎不夠深的 Front Engineer 所能掌控的東西 , HTML5 帶來的不只新增加的標籤 , 也伴隨著一堆新的 API , 就如同 XHTML 伴隨著 DOM API 一樣 , 不要被 HTML5 中的 HTML 字眼所誤導了 , 真的 HTML5 是一個架構很大的新標準 , 杯中的水該倒掉了 , 要用新手的心態去看待 HTML5

想看看 HTML5 的一些範例 , 去 http://www.html5rocks.com/ 看看吧 , 用 chrome 就可以看了 , 這個網站不只有範例 , 還將 HTML5 的功能做了個分類並且有 code 可以看 http://playground.html5rocks.com/ , 如果有細看 , 絕對想不到 , 連 SQL 語法都有了 , 我開玩笑的叫我們一個資深的視覺設計師說 , 你可能要去巨將學一下資料庫概念才看的懂 ….. 這是真的 , 現在 HTML5 可以開一個資料庫在 Client 端 , 而且可以下 SQL 語法 , 而且還有 WebGL(IE9 目前不支援) , 看來想把網站 3D 化要去學甚麼叫向量矩陣了

相關的技術還有 WebWoker(類似多執行緒,IE9 目前也 不支援 ~) , WebSocket(可以進行Client/Server雙向通訊) , WebStorage 等等 , 很多新的概念是我們要去碰的 , 現在 iphone , android , ipad 等等因為其內建瀏覽器有支援 HTML5 , 所以都已經有一堆 HTML5 網站出現 , PC 端受限於瀏覽器仍被微軟 OS 市占率影響而尚未普及 , 但我相信 IE9 的出現 , 及 Win8 也流出消息將內建 IE9 , HTML5 在 PC 端開始普及應該時間就會落在明年

而早在之前 , Google 很賤的推出了一個叫 Google Chrome Frame 的東西 , 安裝這個東西 , 可以讓 IE6~IE8 支援 HTML5 , 其實這套軟體就是安裝了 Google 的瀏覽器引擎 , 讓 IE6~IE8 在網頁 Render 階段是以 Chrome 的引擎去生成 HTML5 網頁 , 當然啦 , 一般人不太可能去安裝 Google Chrome Frame

不過最近我又重新去看了一下 , Google Chrome Frame 網站 , 他有一頁 http://www.chromium.org/developers/how-tos/chrome-frame-getting-started , 這一頁是教網頁設計師 , 塞入一些 code , 就可以讓 IE6~IE8 的瀏覽器瀏覽 HTML5 網站時 , 會提醒使用者安裝 Chrome Frame , 並且整個步驟都是在網頁中完成 , 有點類似 ADOBE Flash plugin 那樣的做法 , 這的確很賤 …. 如果觀念比較前衛的人可以試試看該做法

IE9 RC 版日前早已開放下載 , 預料正式版和 RC 版不會差很大 , 而目前所知 , Web3D , WebSQL , WebWorker 沒有支援 , 網路上也很多比較表 , IE9 應該是目前對 HTML5 支援度最差的瀏覽器 , 但即便如此 , 也不會影響到 HTML5 開始流行 , 回想過去 IE3 和 Netscape3 大戰 , IE 明明很爛 , 支援度很差 , 但因為普及率關係 , 所以一窩瘋的人仍然把 IE 當作網頁設計相容的第一優先 , 也就是說 , 未來的網頁設計師仍然會考量到各種瀏覽器的支援程度 , 設計出各種瀏覽器可以看的網站 , 所以和現在的模式沒甚麼不一樣 , 唯一不同的就是 , 這次帶來的改變會比以前大 , 技術躍進比 HTML4 ~ XHTML 還要大 , 幹這行的真辛苦 ~~

轉載自 壞蛋的部落格 http://www.pigo.idv.tw/archives/952

2011年8月5日 星期五

捷運上的洗臉哥-誇張「洗臉哥」!提水上捷運 車廂當浴室其他乘客傻眼

不知是怎麼了,光怪陸離的事在台北捷運車廂中層出不窮,最近的一件就是出現一名不畏寒冬,穿著薄襯衫,還在車上洗臉擦頭的「洗臉哥」,當下讓同一車廂的乘客全都傻眼。看過網路影片的網友忍不住說,這不是在大陸才會出現的情況嗎?

11日那天早上9時,這位年輕「洗臉哥」提了一個裝滿水的塑膠袋,從台北車站上了捷運,一坐下來,他就戴好髮箍,展開他的「洗臉」大工程,一邊將毛巾放入塑膠袋沾濕,再往臉上、頭上擦;雖然他怕瀏海弄濕,但卻不顧襯衫濕成一片。

雖然他只坐了2站,到中正紀念堂就下車,但他怪異的行徑,已引起其他乘客的側目,不過,他根本不以為意,繼續洗臉動作。坐在他旁邊的一位先生,驚訝到彷彿連眼鏡都要掉下來了。


告發偷喝飲料!捷運「擋門哥」也挨罰

一名乘客為了檢舉違規在捷運車廂內喝飲料的另兩名乘客,擋住車門影響關閉,並對著車門外高喊,要求站務人員處理,造成這班列車延誤5分鐘。這段過程被拍成影片上傳至YouTube,據了解,台北捷運公司對擋門者和兩名喝飲料的乘客都各處1500元罰鍰。

網友hairworm在上周四(23日)上傳一則「捷運妨礙車門關閉」影片,內容顯示一班擠滿乘客的板南線車廂,因一名男乘客擋在車門口,使整班列車因而停擺,男子向車外保全嚷著,有人在車上喝飲料,要求站長處理。他的行為造成車廂內外部分乘客不滿,要求這名男子離開車內,不要耽誤其他乘客行的權利,最後由站務員和保全上車處理。

這名男子因而被網友稱為「擋門哥」,從該則影片的回應來看,支持和反對他的行為皆有,反對者留言如「喝飲料的人沒妨礙到人,這胖子妨礙了多少人?知不知道捷運一台延遲後面都要跟著走走停停?」、「今天並沒有人說飲食沒錯,但是糾正這些人的方法很多,為何要挑一個會傷害到其他無辜的人的方式呢?就因為他們沒見義勇為?那其他節車廂的人呢?下一班在等這班捷運卻誤­點的呢?」

支持者則表示,「擋門哥是對的,喝飲料才是社會垃圾,還有,我認為人員處理事件太慢」、「今天如果人民都規矩,都遵守捷運規定不能飲食,現在還會有這事情­嗎? 請問在捷運吃東西的人,他是誰? 有什麼權力? 國家給他的? 還是納稅人給的?」、「叫吃東西的出來,正義擋門哥 佩服!!」

其實,台北捷運公司已對此事有後續的處理,「擋門哥」因違反《大眾捷運法》妨礙車門、月台門關閉,挨罰1500元,被檢舉喝飲料的兩人也各罰1500元。捷運公司表示,如果發現有乘客在車內飲食,可透過車廂裡的通報鈴告知司機員,不需要妨礙車門關閉。


蘋果日報 - 2011-05-26 - 「輸贏哥」台鐵動粗

輸贏哥流氓式勸導在演哪一齣

搭乘大眾交通工具時輕聲細語是基本禮儀,但若以暴力手段恐嚇使用手機的乘客,那就失去了宣導的用意。台鐵列車上出現一位「輸贏哥」,他因為不滿其他旅客聊天太大聲,輸贏哥流氓式勸導動手揪住別人的衣領;後來看到對方打電話報警時,也不甘示弱拿出手機烙人,卻完全忘記自己的初衷為何。

拍攝者表示,23日晚間搭乘台鐵北上,在中壢至桃園間有一位理平頭的乘客,突然叫其他在聊天的旅客們「閉嘴」,但由於無人搭理,他惱羞成怒下便抓住一位高中生猛嗆,接著還扯住前來勸架的眼鏡男,將對方的衣領扯開。這名流氓男子不但大罵髒話,還恐嚇說「待會出去你就知道」、「我憲兵中士退伍的」。

不過「輸贏哥流氓式勸導」接下來的舉動更令人傻眼,原先他是打算制止別人聊天、講手機,結果自己卻拿出手機來「烙人」,不斷大聲地向電話中的大哥求助,指有人要在火車上跟他「輸贏」,還一邊講手機一邊嗆聲說「讓你哭不出來」等流氓話語,卻惹得在場乘客哈哈大笑。

網友指出,「輸贏哥流氓式勸導」從頭到尾叼著菸卻不敢點火,擺明就是怕事的「假黑道」;也有人嗆說,拿著電話烙人「是在演哪一齣」,一副裝腔作勢的樣子究竟想嚇唬誰還有網友開玩笑說,其實「輸贏哥」長得有點像陳漢典,搞不好是在拍《艋舺》的續集。


輸贏哥完整版

是否哥 傲視Google搜尋榜 仆街少女 分手妹 頭香哥 暴紅入列

是否哥 傲視Google搜尋榜 仆街少女 分手妹 頭香哥 暴紅入列

網路搜尋引擎龍頭Google昨公布上半年度10大熱門網路話題人物搜尋排行榜,在速食店大罵暴紅的「是否哥」居冠、「仆街少女」第2,《蘋果》曾報導在除夕夜半路殺出搶得彰化市南瑤宮頭香的「頭香哥」林添壽也入榜、排第9。學者認為,網路時代素人也有機會一夕暴紅,但民眾在公眾場合若有離經叛道行徑,則要小心被拍下po上網,成全民撻伐對象。

搜尋引擎Google昨天公布10大熱門網路話題人物搜尋排行,台灣Google表示,靠著創意照片、影片走紅的網路話題人物不斷竄起,人氣甚至超越許多名人。

挺直仆街搞怪吸睛

像「是否哥」因點不到辣味炸雞而大罵速食店員工的網路影片暴紅,雖引發網友批是「奧客」,最後還買花向店員道歉,但搜尋量也瞬間暴增,成上半年最熱門的網路話題人物。

熱門搜尋排第2的「仆街少女」則是在臉書放上高難度面朝下挺直仆街動作的搞怪照片暴紅,以台北、台中不少景點當背景,從樓梯到郵筒都曾作為舞台。

頭香哥直呼「歹勢」

第3至第10名依序為搞笑對嘴演唱美國歌星黑眼豆豆《Boom Boom Pow》暴紅的「蹦蹦哥」、因和男友吵架鬧分手,自拍邊化妝、邊掉淚影片的「分手妹」、在電玩展上跟著舞台正妹激烈熱舞的「戰鬥哥」、「蛋蛋妹」、「蕩生哥」、「奶茶妹」、「頭香哥」和「收碗哥」。

「是否哥」陳廷光昨受訪說,他不會上網,不知什麼是Google,對「網路話題人物搜尋排行第一」沒看法,他還反問記者說:「這種事情第一,你覺得值得拿出來講嗎?」仆街少女之一的「禁慾」則說,獲第2名很驚喜,但不會因此改變生活與目標,仆街也會繼續;另一成員Karren說:「謝謝大家支持,有此鼓勵,二人將更努力繼續下去。」

「頭香哥」林添壽表示,搶頭香被《蘋果》報導後讓他一夕暴紅,覺得「金歹勢(台語,指很不好意思)」,現在街坊都稱他頭香哥,也聽得很習慣,有入榜覺得開心,但會繼續維持一貫低調風格。

敢秀po網可望成名
民眾Lucas說:「網路時代,敢秀就會紅,透過網路上五花八門影片,可讓平日無聊的生活添趣。」

文化大學廣告系副教授鈕則勳表示,素人只要敢秀,錄影上傳影音平台,只要影片夠好、夠搞怪,都可能有走紅機會,但素人若想用搞怪方式搶知名度,往往也只有一天壽命;但也拜新科技之賜,民眾若在公開場合舉止離經叛道,也可能被人拍下po上網,成全民撻伐對象,不得不慎。

網路話題人物搜尋排行
1.是否哥
台中一名男子(左圖)到麥當勞點辣味炸雞,店家已賣完,還要等1小時,該男不斷用言語羞辱店經理(右圖),不斷提到「是否」


2.仆街少女
2名少女用臉朝下趴著、全身打直的「倒頭栽」姿勢拍kuso照片,介紹景點


3.蹦蹦哥
一名大學生在大賣場唱黑眼豆豆名曲《Boom Boom Pow》,只唱「蹦蹦蹦」


4.分手妹
一名正妹跟男友鬧分手,自拍「分手妝」,邊流淚邊化妝令人憐愛


5.戰鬥哥
在電玩展上跟著舞台正妹激烈熱舞


6.蛋蛋妹
五月天主唱阿信交往多年的女朋友
http://ppt.cc/KnhT

7.蕩生哥
一名部落客撰文,稱姊姊的男友、一個吝嗇男「蕩生哥」的故事 http://ppt.cc/pQ79


8.奶茶妹
本名章澤天,南京外國語學校校花,網路的求愛信讓她暴紅 http://ppt.cc/dNhM

9.頭香哥
彰化市一名阿伯在搶頭香中突然竄出,高舉香炷插得-「頭香」


10.收碗哥
中國福建一名在學校餐廳打工的大學生,1分鐘可回收128個碗盤

山寨蘋果店 連員工都騙





Apple 設計及創造 iPod 和 iTunes、 Mac 手提電腦和桌面電腦、OS X 作業系統還有革命性的 iPhone 和 iPad

中國山寨產品發展到令人匪夷所思的地步,連蘋果專賣店都出現山寨版!雲南昆明出現三家山寨版蘋果專賣店,店內裝潢、擺設均與正版如出一轍,連店內員工都以為自己是賈伯斯(Steve Jobs)請的夥計!

以為替賈伯斯賣命

現年27歲的美國部落客潔西卡(Jessica,筆名BirdAbroad),在昆明發現一家蘋果專賣店,工作人員身穿和正牌蘋果員工一樣的藍色T恤,上面印有蘋果商標,但未標示員工姓名。店內陳設iPad、iPod及Mac筆電等蘋果熱銷商品,連蘋果專賣店的旋轉扶梯、兒童遊戲區,這裡也一應俱全。
眼尖的潔西卡隨即發現不對勁,因為正牌的蘋果專賣店只有「白蘋果」標誌,不會大剌剌放上「Apple Store」字樣。仔細一看,店裡裝潢粗糙,「樓梯簡陋,牆壁油漆也怪怪的。」因此,她確認這是冒牌貨。潔西卡在部落格寫道,「我從沒看過這麼高明的山寨手法,連員工都篤定表示自己在蘋果公司上班,是賈伯斯請的夥計!」


昆明大剌剌開三家
潔西卡不確定店裡賣的蘋果產品是否為正牌貨,而且,在附近還發現另兩家冒牌店家,其中一家還掛著拼錯字母的「Apple Stoer」招牌。對此,蘋果發言人證實潔西卡的懷疑屬實,目前中國只有北京和上海共四家專賣店,昆明這三家店全是冒牌貨!
編譯鄭淑芬

蘋果至今在中國有四家 Apple Store,分別位於北京與上海。當香港人還在期望傳說中的 IFC 新店完工的同時,中國十大二線城市雲南省省會昆明卻搶先一步,擁有一家蘋果店。噢,大誤,原來是山寨店。

上圖這家是看來很真實的 Apple Store 還是有破綻,例如在裝修上有一些缺陷、通往二樓的樓梯手工有點馬虎,加上職員證欠缺員工名字,還有燈箱印有「Apple Store」字眼 (官方的燈箱只會印有蘋果的圖標)。你不相信嗎?根據 Apple 官網的資訊,中國在昆明的兩家優質經銷商外貎與上圖的完全不同,而且它們也有清楚地顯示它們的名字。

有趣的是,來自 New York 的博客離開這家假的 Apple Store 後,不到十分鐘的路程,她再遇到兩家假的 Apple Store 呢!

2011年7月25日 星期一

DNS IP 國內各大ISP DNS 伺服器 IP 列表

國內各大ISP DNS伺服器位址
Hinet dns – 中華電信dns
168.95.1.1
168.95.192.1
168.95.192.2

SeedNet dns - 數位聯合電信 dns
北區: 台北, 桃園, 新竹, 宜蘭, 花蓮, 苗栗
139.175.55.244
139.175.252.16
中區: 台中, 彰化, 南投, 雲林
139.175.150.20
139.175.55.244
南區: 高雄, 台南, 嘉義, 屏東, 台東
139.175.10.20
139.175.55.244

So-Net dns
61.64.127.1
61.64.127.2

GIGA dns
203.133.1.8
203.133.1.6

APOL dns - 亞太線上 dns
203.79.224.10
203.79.224.30

Sparq dns - 速博 dns
211.78.130.10
211.78.130.11

TFN dns – 台灣固網dns
211.78.215.137
211.78.215.200

TTN dns – 台灣電訊dns
202.145.136.4
202.145.138.1
202.145.138.136
202.145.138.200
210.17.1.1

APOL dns - 亞太線上 dns dns ip GIGA dns Hinet dns - 中華電信dns isp dns ip SeedNet dns - 數位聯合電信 dns So-Net dns Sparq dns - 速博 dns TFN dns - 台灣固網dns TTN dns - 台灣電訊dns 國內各大ISP DNS伺服器位址

2011年7月19日 星期二

Google QR Code - ASP.net傳QueryString生成QR Code行動條碼

Google charts提供非常方便的API,可以產生QR Code圖片。

http://code.google.com/apis/chart/docs/gallery/qr_codes.html(API說明)

以下面URL為例,紅色部份為關鍵參數

https://chart.googleapis.com/chart?chs=120x120&cht=qr&chl=http://www.google.com.tw&choe=UTF-8&chld=M|2

其中:

chs: QR code 圖片大小
cht: 圖片類型,google charts用這個參數產生各種圖片,這裡當然就填qr
chl: 要藏在QR code裡的文字,必須編成punycode(urlencode)。
choe: 編碼。請注意只支援iso-8859-1, sjis, utf8。詳見API說明網頁。
chld: 其他參數。M是錯誤修正層次,有L, M, Q, H等四級;後面的數字是QR code周圍白邊的寬度。

範例圖片:

<img alt="範例圖" src="https://chart.googleapis.com/chart?chs=120x120&cht=qr&chl=http://www.google.com.tw&choe=UTF-8&chld=M|2" />

範例圖

2011年7月12日 星期二

C# 抓取資料夾檔案資訊存放在DataTable,並將檔案複製到其他位置

抓取資料夾檔案資訊存放在DataTable
        DataTable DT = new DataTable();
DT.Columns.Add("FullName");

foreach (string fname in System.IO.Directory.GetFileSystemEntries("D:\\WWW"))
{
if (fname.IndexOf(".doc") > 0 || fname.IndexOf(".docx") > 0)
{
DT.Rows.Add(fname);
}
}

GridView1.DataSource = DT;
GridView1.DataBind();

抓取資料夾完整檔案資訊存放在DataTable
        DataTable DT = new DataTable();
DT.Columns.Add("Sno");
DT.Columns.Add("Name");
DT.Columns.Add("FullName");
DT.Columns.Add("Extension");
DT.Columns.Add("Length");
DT.Columns.Add("Attributes");
DT.Columns.Add("CreationTime");
DT.Columns.Add("LastAccessTime");
DT.Columns.Add("LastWriteTime");
DT.Columns.Add("Directory");

int Sno = 1;
foreach (string FilePathName in System.IO.Directory.GetFileSystemEntries("D:\\WWW", "*.doc"))
{
//FileInfo 請 using System.IO;
FileInfo theFile;
theFile = new FileInfo(FilePathName);

if (theFile.Exists)
{
DT.Rows.Add(Sno, theFile.Name, theFile.FullName, theFile.Extension, theFile.Length, theFile.Attributes.ToString(), theFile.CreationTime, theFile.LastAccessTime, theFile.LastWriteTime, theFile.Directory);
Sno = Sno + 1;
}
}

GridView2.DataSource = DT;
GridView2.DataBind();

抓取資料夾MP3檔案資訊,並透過WindowsMediaPlayer抓取檔案資訊,存放在DataTable
        if (FileUpload1.PostedFile.ContentLength > 0)
{
DataTable DT = new DataTable();
DT.Columns.Add("Sno");
DT.Columns.Add("Name");
DT.Columns.Add("FullName");
DT.Columns.Add("Extension");
DT.Columns.Add("Directory");
DT.Columns.Add("Length");
DT.Columns.Add("出版商");
DT.Columns.Add("演唱者");
DT.Columns.Add("歌曲名稱");


foreach (string FilePathName in System.IO.Directory.GetFileSystemEntries(FileUpload1.PostedFile.FileName.Replace(FileUpload1.FileName, "")))
{
if (FilePathName.IndexOf(".mp3") > 0 || FilePathName.IndexOf(".wma") > 0)
{
//FileInfo 請 using System.IO;
FileInfo theFile;
theFile = new FileInfo(FilePathName);

if (theFile.Exists)
{
WMPLib.WindowsMediaPlayer wmp = new WMPLib.WindowsMediaPlayer();
wmp.settings.mute = true;
wmp.URL = theFile.FullName;
wmp.controls.play();
System.Threading.Thread.Sleep(100);

DT.Rows.Add(theFile.Name.Substring(0, 2), theFile.Name, theFile.FullName, theFile.Extension, theFile.Directory, theFile.Length, wmp.currentMedia.getItemInfo("Author"), wmp.currentMedia.getItemInfo("Artist"), wmp.currentMedia.getItemInfo("Title"));

wmp.close();
}
}
}

GridView2.DataSource = DT;
GridView2.DataBind();
}

將抓取到的資料檔案,複製檔案到其他位置(路徑)
        for (int i = 0; i < GridView2.Rows.Count; i++)
{
//原始檔案資料夾
String SourcePath = GridView2.Rows[i].Cells[9].Text + "\\" + GridView2.Rows[i].Cells[1].Text;
//要移至的檔案資料夾
String MoveToPath = "D:\\WWW\\" + GridView2.Rows[i].Cells[1].Text;

if (File.Exists(SourcePath))
{
File.Copy(SourcePath, MoveToPath, true);
}
}

        for (int i = 0; i < GridView2.Rows.Count; i++)
{
//原始檔案資料夾
String SourcePath = GridView2.Rows[i].Cells[9].Text + "\\" + GridView2.Rows[i].Cells[1].Text;
//要移至的檔案資料夾
String MoveToPath = "/RaWMroot/" + GridView2.Rows[i].Cells[1].Text;

if (File.Exists(SourcePath))
{
File.Copy(SourcePath, Server.MapPath(MoveToPath), true);
}
}

抓取上傳檔案完整路徑及名稱
Label1.Text = FileUpload1.PostedFile.FileName;

抓取上傳檔案路徑
Label1.Text = FileUpload1.PostedFile.FileName.Replace(FileUpload1.FileName, "");

參考網址 http://program.maomo.info/article.aspx?uid=64

2011年6月21日 星期二

免費軟體一舉三得

手機程式不收錢卻能吸金,第一招就是在螢幕跳出小廣告,有的固定式、有的跑馬,只要不小心按到,業者就賺到錢。科技公司總經理陳康正:「手機上面這種廣告點擊率,會比網路上點擊得好,原因就是他螢幕特別小,所以很容易就點到。」記者:「收多少?」陳康正:「看情況,大概7元。」

不知道歌名歌詞,只要用這個軟體聽幾秒,就全部查得到,說是免費,但每個月限定5首,再查就要收費,這就是吸金術第二招,放長線釣大魚。陳康正:「我們目的就是希望讓玩家覺得這遊戲非常好玩,然後不知不覺地消費,可能會超過以前單買一款遊戲的價格。」

還有第三招,心理測驗底下小小一行字,放大再放大,劈頭跟你說使用免費,但要看結果要收台幣90元,真不懂這是哪門子的免費。

不只手機,網路上免費服務也有龐大商機,像是這個免費信箱,信件內容寫到青輔會,旁邊小廣告就會出現「就業」相關廣告,如果換成提到工程,旁邊小廣告就會變成跟工程有關的廣告,也就是說免費信箱會主動讀完你的信,找關鍵字配對廣告,這樣當然又有進帳。

臉書也有不少網址,一點開就是看不完的廣告,更別說點擊過程全被記錄下來,成了商業廣告配對資料,用「免費」當招牌經營出的商機,比收費還驚人。

2011年6月18日 星期六

[CSS]圖文對齊排列

當圖文並列時,若要讓圖片能夠對齊排列,而不是呈現出梯狀的分佈。
可以使用下列語法:

文字段落一


文字段落二

重點在於第二個 img 內的 "clear:left"
這個屬性的意思是如果左邊有浮動元件的話,此元件便移到該浮動元件下方。

2011年6月16日 星期四

蘋果零售店 不肯說的秘訣

Approach(接觸) Probe(探詢)Present(介紹)Listen(傾聽)End(結尾)

華爾街日報根據被列為機密的蘋果員工訓練手冊、零售店會議紀錄並訪問蘋果前任和現任員工,歸納蘋果零售店的銷售秘訣:嚴格控管員工與顧客的互動、訓練員工現場提供顧客技術支援、考慮每個細節,細到示範用的照片和音樂都預先挑選。

據訓練手冊,蘋果銷售人員奉行的銷售原則:不要推銷,而是協助顧客解決問題。「你們的工作是了解顧客的所有需求,有些需求連顧客自己都不知道。」員工拿不到佣金,也沒業績配額。

根據前員工提供的訓練手冊,蘋果的服務步驟藏在APPLE這五個字母中,A代表Approach(接觸),用個人化的親切態度接觸顧客;P代表Probe(探詢),禮貌地探詢顧客的需求;另一個P代表Present(介紹),介紹一個解決辦法讓顧客今天帶回家;L代表Listen(傾聽),傾聽顧客的問題並解決;E代表End(結尾),結尾時親切道別並歡迎再光臨。

年輕人不讓座 雄女挺身護孕婦 跟 (人肉搜壓力大 蹺腿姐認錯自稱躁鬱)台北捷運博愛座與老翁爆發言語衝突的「蹺腳姊」




北捷蹺腿姊昨日道歉
〔自由時報記者葛祐豪、劉榮/綜合報導〕北捷蹺腿姊霸博愛座事件引起公憤,昨天這名引發眾怒的短髮女,發表書面聲明,表示自己有躁症傾向,向社會道歉;PTT高雄板則有網友PO上一名年輕人霸佔高捷博愛座,不禮讓孕婦,穿著高雄女中制服的學生仗義執言,網友稱讚。

雄女校秘陳雲占表示,會查詢網路PO文者,找出這名女學生,公開表揚;她強調學校經常宣導在大眾交通工具上要讓座,很高興學生能實踐。

網友bogy2在PTT發文,標題是「謝謝雄女這位學生」。文中強調懷孕八個月的姊姊,日前和姊夫搭捷運出遊,經過中央公園站時,因不耐久站,發現博愛座坐著一位年輕人,姊夫希望年輕人讓座,但對方不為所動。

高捷雄女學生 仗義嗆霸位
此時一位穿制服的雄女學生,對年輕人說︰「這是博愛座耶,你沒看到有孕婦嗎?」年輕人瞪了雄女學生一眼,想不到雄女學生很有膽識,還補一句︰「瞪什麼,還不趕快起來」。

適逢北捷蹺腿姊狂罵老翁無人聞問,這篇PO文形成強烈對比。

而因占用台北捷運博愛座與老翁爆發言語衝突的「蹺腳姊」,影片被PO上網後,這名引發眾怒的謝姓短髮女,昨天透過民進黨台北市議員童仲彥發表書面道歉聲明。

謝小姐住新北市淡水區紅樹林站附近,每天都搭捷運上班,曾由精神科醫師診斷有躁症傾向,當影片在網路曝光引發軒然大波後,她相當難過,已經請假兩週。

署名「Nicole謝」的女子聲明指出:「當天我的腳受傷,站務人員也說,可以坐博愛座,但是阿伯上車後,一直用言語侮辱我,甚至越罵越大聲,我剛開始說『阿伯我讓你坐。』但是他又說不要坐,卻一直站著罵我,所以我也被激怒跟他對罵了。我要跟當天的乘客和阿伯說對不起,也很誠懇的向大家道歉。」

〔自由時報記者蔡偉祺/台北報導〕前天有網友在網路上公布一段名為「太惡劣了!」影片,敘述捷運上一名年輕女子坐在博愛座上和老年人互嗆,言語嗆辣,有超過三十萬名網友點閱,相關留言討論也有近萬則。多數網友批評這名年輕女子不讓位給老人,還態度不佳,甚至在臉書上發起「人肉搜索」,要她「踹共」,目前已有超過萬人加入。

影片中這名短髮年輕女子就坐在深藍色的博愛座上,蹺著腳和另一名老先生發生爭執。這名年輕女子似乎不滿被老先生指責坐姿不佳,腳蹺太高,因此心生不滿,怒嗆對方「死老頭」、「神經病」、「滾下車」,連「沒大沒小」也罵出口。還說自己「腳痠坐在這,而且位子就是要讓人坐的,你是想怎樣?」,甚至還質問對方是否要「叫警察」或「上新聞」。

老先生則是氣得教訓這名年輕女子「一點教養都沒學到」,還說「中華民國的教育不會教出每個人都像妳這樣子的啊!」,但仍被年輕女子反譏,「要講去大街上講,去跟中華民國總統講,去跟馬英九講,會不會?我教你」。

上傳影片的網友指出,該段影片是前天在捷運淡水線所拍攝。這名女乘客可能是因為腳蹺太高,碰到站在座位前的老先生,對方請她調整姿勢,引起女乘客不快,雙方才爆發言語衝突。

這段影片上傳到youtube網站,立刻引起網友全面痛批。多數看過影片的網友就質疑,這名年輕女子不讓座就算了,也不懂得敬老尊賢,且對老年人出言不遜,還涉及公然侮辱。

但也有人認為,這名年輕女子可能是身障人士,坐博愛座沒問題,但言語態度不佳,還是應該檢討。

疑似女乘客:來一個罵一個

不過,也有疑似這名年輕女乘客的網友上網反擊,認為是這名老先生先出惡言諷刺,她才會動怒回嗆,也坦承口出惡言是自己不對。但她不滿網友不明就裡就任意批評,還要對她人肉搜索,揚言「來一個我罵一個」,態度毫不退讓。

老翁亂嗆「坐沒坐相」翹腳女暴怒 老闆娘找議員幫忙
「你想上新聞是不是啊?」台北捷運日前一名戴著眼鏡的中性女子,翹腳坐在博愛座上,大聲嗆聲站在她對面的老翁,先說「他媽的這是殘障坐的你是搞不懂是不是啊」,再稱自己「腳痠不行嗎」,並用「媽的叫什麼B」、「死老頭」、「吵屁阿」、「神經病」等不雅字眼,還跟老翁說想講道理去找中華民國的總統講,整段過程都po上影音網站,引來網友撻伐,誓言要把這名「翹腳女」給人肉搜索出來。

翹腳女領有身障手冊 壓力大、老闆娘找童仲彥幫忙

原本「翹腳女」要與台北市議員童仲彥陪同下,向大眾道歉,不過連日來她的壓力極大,到最後還是沒出現。童仲彥說,謝姓女子在台北市東區髮廊當小妹,患有輕度精神障礙,領有身心障礙手冊,從小父母離異,也有持續做躁鬱症治療,平常都從淡水線的唭哩岸搭至板南線的忠孝復興站上班,他替謝小姐還原當天現場,坐上博愛座的原因是因為她腳不舒服,向站方反應後,表示可以坐在博愛座。

翹腳女有讓位 老翁不肯坐繼續罵

童仲彥表示老翁一上車後,看到她翹腳,就說她「坐沒坐相」,並要她讓座,謝姓女子基於晚輩、敬老尊賢的立場,一開始很客氣向阿伯說讓他坐,但阿伯不願意坐,還繼續批評「中華民國法律有教女孩子這麼沒水準,還翹腳坐嗎」,現場乘客眾多,後來也無法起身讓座,一時之間不知該反應,當下就跟老翁嗆聲,事後得知影片已經流傳,網友也連番砲轟並要人肉搜索,讓她相當害怕,髮廊老闆娘也看不下去,才會找童仲彥幫忙,她對於自己的情緒失控感到抱歉,也非常後悔。

不過暴怒前後說的話真的會「傷人又傷己」影片當中謝姓女子稱自己腳痠,事後反省自己當下是腳不舒服。但先前的「中指蕭」也是立委議員幫忙,這次也找政治人物來,難道這些人有這麼好找?精選更新網友們的意見。

Bishkek:每個出問題的都是精障

Avril1975:以後罵人完要被人肉就說自己有病就好了

Jaicabai:道歉還要找別人講、誠意在哪

k123123:不要污名化精障,少來這套

Dia149:遇到討人厭的老人+暴民,有理也說不清

Riyuberg:好吧 這次原諒你 以後要乖喔

TauchK:影片只拍到他發狂後 發狂前發生什麼事你知道喔

afternight:挖鄉民又換風向了 噓的義正嚴詞好像當天有在場一樣

我只能說 真真假假,假假真真,早知如此,何必當初,對於經常在搭捷運的人應該都是見怪不怪

2011年6月15日 星期三

C# 如何去除或有條件保留 HTML 標籤

/// 
/// 去除 HTML 標籤,可自訂合法標籤加以保留
///

/// 來源字串
/// 合法標籤集
///
public static string StripTags(string src, string[] reservedTagPool)
{
return Regex.Replace(
src,
String.Format("<(?!{0}).*?>", string.Join("|", reservedTagPool)),
String.Empty);
}


using System;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string html = "<div><p>OOXXOOXXOOXXOOXXOOXXOOXX!" + "<img src=\"http://www.OX.com.tw/Images/LoGO.gif\" alt=\"Logo\" /></p></div>";
string[] reservedTagPool = { "img", "br" };

TextBox1.Text = html;
TextBox2.Text = HtmlRemoval.StripTags(html, reservedTagPool);
Literal1.Text = HtmlRemoval.StripTags(html, reservedTagPool);
}
}
轉自 http://www.dotblogs.com.tw/hunterpo/archive/2010/11/26/19732.aspx

2011年6月11日 星期六

JavaScrip 取消所有enter 鍵

<body onkeydown="if(event.keyCode==13) return false;">

javascript 關閉網頁並跳出訊息視窗

<input type="button" value="關閉窗口" onClick="window.opener=null;window.close();">
<a href=javascript:window.opener=null;window.close();>關閉窗口</a>

JavaScript C# 將網頁中的TextBox資料複製到剪貼簿中

在網頁中有 TextBox 與 Button 控制項,假如使用者在 TextBox 輸入完成後,按下Button,並不是把值帶到任何別的網頁或資料庫,只是把 TextBox 的值複製到 系統剪貼簿clipboard中,之後可以在任何網址列或文字文件把值在度貼上。

可以使用 JavaScript 的 window.clipboardData.setData 達成

C# 語法
this.Button1.Attributes.Add("onclick", @"javascript:window.clipboardData.setData('Text',document.getElementById('" + this.TextBox1.UniqueID + @"').value);");
VB.NET 語法
Me.Button1.Attributes.Add("onclick", "javascript:window.clipboardData.setData('Text',document.getElementById('" & Me.TextBox1.UniqueID & "').value);")

C# TextBox的文字排序和亂數排序

想要把C#裡的TextBox排序 其實原理來說並不難,除了TextBox.Text可以設定文字的屬性外 還有一個TextBox.Lines,代表的是TextBox中文字的行數(以"行"為分組的陣列) 型態為string[],所以也可以用這個Lines屬性設定文字的內容,然後針對string[]陣列 就可以直接用Array.Sort()這個方法來進行排序,看似很簡單 但是不知道是.net的bug還是怎樣 如果程式直接寫成這樣,Array.Sort(textBox1.Lines);textBox1是不會有反應的 還是呈現未排序前的狀態

所以要另外先把textBox1的內容存到一個暫存的陣列中 排序完再assign回去,為了簡化程式碼 因此把這功能寫成一個函式,此函式會把所接收到的textbox內容進行排序 (照字母順序排序)
private void sortTextBoxText(TextBox targetTextBox)
{
string[] temp = targetTextBox.Lines;
Array.Sort(temp);
targetTextBox.Lines = temp;
}

另外 如果要亂數排序的話也是一樣道理 可以透過Array.Sort(keys,items)這個方法,先亂數產生一個random index的陣列當keys 那Array.Sort()就會用這亂數keys排序後面的items,那我們的textbox就會變成亂數排序囉!
private void randomSortTextBoxText(TextBox targetTextBox)
{
string[] temp = targetTextBox.Lines;
double[] randomIndex = new double[temp.Length];
Random r = new Random();
for (int i = 0; i < temp.Length; i++)
{
randomIndex[i] = r.NextDouble();
}
Array.Sort(randomIndex,temp);
targetTextBox.Lines = temp;
}

2011年5月30日 星期一

檢查瀏覽器是否支援WMP(Windows Media Player)

最近群裡有朋友提到用WMP外掛程式做網頁mp3播放機,在使用時需要檢查流覽器是否支援WMP;WMP的支援,IE下是用ActiveX,其它流覽器一般是用外掛程式。閒暇查了一下相關資料,寫了下面的檢測代碼,支持所有主流流覽器:

數位媒體串流-Windows Media Services - 使用JavaScrip操作撥放器及抓取clientData 元件(用戶端資料)資訊

<object classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="application/x-oleobject" 
id="wmp" width="0" height="0" style="width:0px;height:0px;"></object>

//基本屬性  
wmp.URL:String; //指定媒體位置,本機或網路位址
wmp.uiMode:String; //播放機介面模式,可為Full, Mini, None, Invisible
wmp.playState:integer; //播放狀態,1=停止,2=暫停,3=播放,6=正在緩衝,9=正在連接,10=準備就緒
wmp.enableContextMenu:Boolean; //啟用/禁用右鍵菜單
wmp.fullScreen:boolean; //是否全屏顯示
//播放機常用控制
wmp.controls.play; //播放
wmp.controls.pause; //暫停
wmp.controls.stop; //停止
wmp.controls.currentPosition:double; //當前進度
wmp.controls.currentPositionString:string; //當前進度,字串格式。如“00:23”
wmp.controls.fastForward; //快進
wmp.controls.fastReverse; //快退
wmp.controls.next; //下一曲
wmp.controls.previous; //上一曲
//播放機常用設置
wmp.settings.volume:integer; //音量,0-100
wmp.settings.autoStart:Boolean; //是否自動播放
wmp.settings.mute:Boolean; //是否靜音
wmp.settings.playCount:integer; //播放次數
wmp.settings.balance = -100; //(左聲)
wmp.settings.balance=100; //(右聲)
wmp.settings.balance=0; //(全聲)
//常用當前媒體屬性
wmp.currentMedia.duration:double; //媒體總長度
wmp.currentMedia.durationString:string; //媒體總長度,字串格式。如“03:24”
wmp.currentMedia.getItemInfo(const string); //獲取當前媒體資訊
wmp.currentMedia.setItemInfo(const string); //通過屬性名設置媒體資訊
wmp.currentMedia.name:string; //同currentMedia.getItemInfo("Title")
wmp.network.bufferingProgress; //緩衝百分比
wmp.network.downloadProgress; //下載百分比

2011年5月29日 星期日

數位媒體串流-Windows Media Services - clientData 元件(用戶端資料)

您可以使用 clientData 元件將描述文字、橫幅影像及記錄資訊與播放清單元件相關聯。描述文字 (如演出者名稱與曲目標題) 顯示於 Windows Media Player 9 系列、更新的版本或使用 Windows Media Player 9 系列 ActiveX 控制項的播放程式您也可以使用 clientData 元件來顯示橫幅影像、相關的超連結及工具提示文字。

您可以將 clientData 元件插入到播放清單中任何地方。它可以是除了另一個 clientData 元件之外任何元件的子元件。當 clientData 元件正在使用時,它所包含的資訊會傳送至用戶端。

excl、seq、priorityClass 或 switch 元件可以具有一個以上的 clientData 元件,而且每一個 clientData 元件可以包含多個屬性。根據新增的 clientData 元件所在的位置,資訊會套用至個別 media 元件或 media 元件的集合。clientData 元件會被更高層級的 clientData 元件所覆寫。例如,為 media 元件群組指定的標題資訊優先於為個別 media 元件指定的標題資訊。同樣,在檔案標題中編碼的文字屬性 (如標題、作者及著作權) 也會被播放清單中相對應的 clientData 元件所覆寫。

在下列範例中,seq 元件嵌套於另一個 seq 元件中。clientData 元件會為個別 media 元件及一連串嵌套的元件指定標題。首先播放 media 元件 Open.wmv,同時顯示個別 title屬性值 Welcome。然後從 Video1.wmv開始,播放嵌套順序中的項目。因為 clientData 元件是 seq 元件的子元件,所以 title 屬性值 Segment 1 將作為順序中所有 media 元件的標題顯示。與media 元件Video1.wmv 相關的 title 屬性值會被順序中的標題覆寫。















下列範例合併了多個 clientData 屬性。



copyright="(c) Company name" genre="Rock" title="Music" />


屬性 - 屬性可修改播放清單元件的內容。您可以使用 clientData 元件的下列選擇性屬性。

album
指定專輯名稱。相關資訊,請參閱 album 屬性。

artist
指定演出者名稱。相關資訊,請參閱 artist 屬性。

author
指定作者的名稱。相關資訊,請參閱 author 屬性。

bannerAbstract
指定作為橫幅影像 (顯示在 Windows Media Player 中) 工具提示顯示的文字。相關資訊,請參閱 bannerAbstract 屬性。

bannerInfoURL
指定使用者可藉由按一下 Windows Media Player 中的橫幅影像來進行存取的 URL。相關資訊,請參閱 bannerInfoURL 屬性。

bannerURL
指定出現在 Windows Media Player 的顯示面板中的影像檔案之URL。相關資訊,請參閱 bannerURL 屬性。

copyright
指定著作權資訊。相關資訊,請參閱 copyright 屬性。

genre
指定類別。相關資訊,請參閱 genre 屬性。

logURL
指定用來公佈記錄統計資料到原始伺服器或任何網頁伺服器的 URL。相關資訊,請參閱 logURL 屬性。

title
指定標題。相關資訊,請參閱 title 屬性。

數位媒體串流-Windows Media Services - media 元件

播放清單中的 media 元件提供了數位媒體來源的位置,並可指定數位媒體內容播放或呈現至用戶端的方式。media 元件可以參照任何數位媒體來源,這個來源可供資料來源外掛程式存取,並可由媒體或「播放清單分析」外掛程式分析。預設會啟用適當的外掛程式。

數位媒體來源範例包括本機電腦上的檔案、來自執行 Windows Media 編碼器或 Windows Media Services 的遠端電腦之串流、其他播放清單檔案、網頁伺服器上的 Active Server Page (ASP 網頁),或者協力廠商儲存系統上的數位媒體檔案。

下列範例顯示了一個由三種數位媒體類型組成的簡單播放清單:一個影像檔案、一個視訊檔,以及一個音訊檔:







以第一個列出的 media 元件開始,依序播放三個檔案。因為影像檔案沒有隱含期間,所以第一個 media 元件有 dur 屬性的指定值。

屬性-屬性可修改播放清單元件的內容。您可使用下列具有 media 元件的屬性。僅 src 屬性是必須的屬性。

src
指定數位媒體內容來源的名稱及位置。相關資訊,請參閱 src 屬性。

begin
指定 media 元件何時變為使用中。相關資訊,請參閱 begin 屬性。

clipBegin
指定數位媒體來源中播放開始的端點。相關資訊,請參閱 clipBegin 屬性。

clipEnd
指定數位媒體來源中播放結束的端點。相關資訊,請參閱 clipEnd 屬性。

dur
指定數位媒體來源播放的時間長度。相關資訊,請參閱 dur 屬性。

end
指定 media 元件何時變為不可用。相關資訊,請參閱 end 屬性。

syncEvent
指定用來觸發以開始,或是結束包裝函式播放清單中的元件。相關資訊,請參閱 syncEvent 屬性。

id
指定可供其他元件參照的 media 元件之名稱。相關資訊,請參閱 id 屬性。

mediaName
指定 media 元件的名稱以取代用戶端記錄及用戶端內容說明清單中的 src 屬性值。相關資訊,請參閱 mediaName 屬性。

noSkip
指定是否啟用 media 元件的向前快轉、倒帶、搜尋或略過。相關資訊,請參閱 noSkip 屬性。

repeatCount
指定 media 元件在停止之前重播的次數。如果未指定任何值,則該元件只會播放一次。相關資訊,請參閱repeatCount 屬性。

repeatDur
指定 media 元件在停止之前重播的時間長度。相關資訊,請參閱 repeatDur 屬性。

role
指定 media 元件的角色。相關資訊,請參閱 role 屬性。

下列播放清單範例顯示了具有 id、src 及 dur 屬性值的 media 元件:




2011年4月8日 星期五

在iframe中,如何讓 ASP.NET 使用 Session 資料時不要再自動消失

我們在 ASP.NET 網站使用 Session 時,常常因為 web.config 修改或更新 Bin\ 目錄下的 dll 而導致 Session 消失,Session 常常消失也挺惱人的,不是導致突然被自動登出,就是發生非預期的 Exception ... 等。 ( 有時候因為主機安裝防毒軟體也會造成 Session 資料無故消失,因為這些防毒軟體可能會誤判某檔案、某記憶體含有病毒資訊 )

這個時候我們可以將 Session 預設的模式 ( InProc ) 改成 StateServer 模式,但此時必須確認本機的 ASP.NET 狀態服務 是啟動的狀態!

請到 控制台 > 系統管理工具 > "服務"
找到 "ASP.NET 狀態服務" 或 "ASP.NET State Service"
此服務預設是屬於「停用」的狀態,請先切換到「自動」再按下「套用」再直接按「啟動」按鈕即可。

接者你可以到你的 ASP.NET 網站設定 web.config 組態檔,設定如下:
<configuration>
<system.web>
<sessionState mode="StateServer"
stateConnectionString="tcpip=localhost:42424"
cookieless="false"
timeout="20"/>
</system.web>
</configuration>
在web.config裡的cookieless="false"改為:cookieless="true"
這樣就可以將 Session 的資料存到本機的 ASP.NET 狀態服務去了,也不會無故 Session 自動消失了。

2011年3月31日 星期四

SEO Check List 與原理解釋

千萬要做的事
1. 網站使用 valid html 撰寫,最好過 w3c validator
原理:這是一定要的,原因如 part3。

2. 使用正確的 html 標記描述內容與網站的元素。該用 h1,h2, strong, p 的請不要客氣
原理:這是一定要的,原因如 part3。

3. 網頁敘述要含關鍵內容。關鍵字越前面越好。(但並非 abuse)
原理:可觀察 Google 的 SERP (Search Engine Result Page)

4. 網頁 title 要含關鍵字。關鍵字越前面越好。(但並非 abuse)
原理:可觀察 Google 的 SERP (Search Engine Result Page)

5. 網址要含關鍵字。WordPress 在這方面設計的相當好,只要你把選項打開就行了。至於其他的內容網站,你可以考慮在背景使用 Google Translate 將網址標題轉成英文然後 append 在網址上。
原理:可觀察 Google 的 SERP (Search Engine Result Page)

其中權重 5 > 4 > 3 。

6. 因為 3,4,5 的關係,生產內容時必須遵守 SEO 原則,程式設計上也必須做出搭配。請看 part3。

7. 圖片內容,請加 alt 描述這張圖片。但 alt 字數也別太誇張,否則會视為 cheating。如果這是選單或 banner,請用 ul, li 和 h1,h2 寫,再用 CSS 技巧換掉。別來個 img + a 做 banner 的設計,img 權重遠低於 h1。
原理: part3。

8. 把內容放在 Search Engine highly friendly 的平台,如果是你想在 Yahoo 取得高排名,請放 Wretch,如果你想在 Google 取得高排名,請放 Blogger.com。如果你是自己 hosting,請檢視你的平台是否有做到 checklist 上的要求。
原理: 搜尋引擎偏好自家產品,結果會出現在比較前面

9. 為網站生成符合標準的 sitemap.xml。並主動將結果送至 Google、Yahoo、Bing 等等。
原理:搜尋引擎仰賴自己設計的爬蟲去抓取內容,他們的 index 路徑是遵循著網站上的內部連結以及外部連結,至於沒有被連結到網頁,自然就不會被收錄。他們沒有通靈能力,自然不知道你有產出這樣的內容。你必須主動告知他們。另外,sitemap 可以標記內容在該站的權重以及內容更新時間。有效提供 Search Engine 運算依據。這一點非常重要,根據我曾經做過的實驗,某搜尋引擎有送 sitemap 跟沒送,排名結果差非常非常多。

10. 在高 PR 的網站為自己的網站帶來 inbound link。
原理:眾所諸知,Google 的演算法是 Page Rank 演算法。PR 演算法簡單的想法是:如果一個網站,越多網站甚至是超級大站都連結這個網站,那麼它必定是重要的。但切記千萬別 abuse。

11. 提昇網站效能,開啟速度要快。
原理:網站速度,也是搜尋引擎排名的考慮因素之一。

12. 使用 Google Webmaster Tool 檢視你的網站 SEO 成效。
原理:它真的很好用….

千萬不要做的事
1. 千萬不要濫用以上原則,搜尋引擎不是笨蛋,不會不知道你想作弊。適度的標記關鍵內容就能使你的排名大幅提昇。但是濫用會造成你被下架。
原理:常識。

2. 不要把主要內容放在 image/ js / flash/ iframe 內。
原理: bot 只吃該頁的 html,image / js/flash/iframe 對他們來說只是一行外部網址。它們不會知道這是內容

3. 不要在 a 裡面加 onclick / onmouseover 類似的屬性。
原理:這多半指稱這是 js link,搜尋引擎會跳過這個 a 內的內容。如果你要上計算人氣等功能,請用 Unobtrusive Javascript 技巧實作。如果你只是想要做 css hover 效果,那就更欠人罵了,可以用 CSS 寫的東西為何要放上 a 去破壞 SEO 效果。

4. 連結不要濫用 302 redirect。
原理:http response 的 301, 302 是有意義的。301 指的是永久性重導向,302 指的是暫時性重導向,但 RD 寫 code 往往沒有深究其意義。我曾經見過人氣系統用 302 設計先轉去人氣系統再跳回來。Epic Fail。302 對搜尋引擎來說是「完全不值得收錄」的內容,因為他是「暫時性網址」。如果網站全站都掛 302 連結,那……沒有搜尋引擎想要收錄超正常。

5. 標籤不要亂包。我曾經看過一行 html 是這樣寫的 <h1><a href="xxx"> abc </a><img src="def"/></h1> 。搜尋引擎不知道重要的是 abc 還是沒有 alt 的 def。最後是連 abc 都被視為不重要內容。
原理:你讓搜尋引擎精神錯亂。

6. 每一頁的 title 與 meta description 不要重複
原理:搜尋引擎很大的權重採用 title 與 meta description。如果一個網站 50 頁 + 的 title 和 meta description 都一樣。搜尋引擎不會知道哪一頁是真正的入口點,真正重要的內容。下場就是全部都不收錄!!!

7. meta keywords 不重要
原理:Google 不採用。Yahoo 採用。但權重不大。因為 meta keywords 曾經被大家濫用 …但如果你拿 meta keywords 來做 correct 字義的功能,是不錯的。

8. 不要用 Word 生內容和做網頁
原理: part3 Word 只會生一堆垃圾 html code 出來而已。

9. 不要用 PSD 自動轉 html 做版面
原理:拜託不要惡搞啊……這種 html 根本不能用

10. 檢查你的 robots.txt ,不要上線以後上面還是放了 disallow * ,再疑惑為什麼搜尋引擎沒有收錄
原理:廢話,你就叫搜尋引擎不要抓啊。最好這樣上面還會收錄你的內容。

11. 不要故意亂塞關鍵字,再用 css 技巧做 display :none
原理:搜尋引擎不是白痴。你這樣做的話會被視為作弊,列入黑名單。

2011年1月4日 星期二

軟體開發工程

一般軟體開發程序分為

需求整理==>系統分析==>系統設計==>程式開發==>系統測試==>系統維護

整個流程的控管稱為專案管理,所使用的標準稱為軟體標準,因為有了標準,我們才能將軟體各階段的程序與以量化,進而評估其價值與品質。以下針對各階段作一簡要描述:

1.需求整理:通常由了解市場需求或客戶為主要人員,其目的為整理未來軟體應具備之功能說明與要求(RFP)。此為所有軟體產品或專案成立時的第一要務,如果沒有完整的需求項目與功能說明及要求,之後各階段的開發也會因需求的變動而導致大量時間與成本的浪費。

2.系統分析:通常由具備專業知識(Domain Know How)之軟體人員擔任,其主要目的在於與提出需求者溝通協調,並將提出之需求,透過流程合理性加以整理成特定規格與表示方式來呈現,並與提出需求者確認,此階段常見之方式有UML 提出之Use Case、Use Case Diagram、Activity Diagram 等等,並且需提出系統所以功能及模組測試個案相關文件。

3.系統設計:通常由資深程式開發人員擔任,其具備資料庫/程式開發之專業知識與技術,此階段主要目的在於架構系統,將使用者分析資料轉述為程式流程,供程式開發人員參考並開發符合需求之系統功能。此階段為軟體開發最重要步驟,其介於使用者導向與系統導向之溝通橋樑,此階段常見之方式有UML 提出之Activity Diagram、Sequence Diagram、Table Definition 等等。

4.程式開發:由一般程式設計師擔任,此工作內容主要以系統設計定義的規範來實作,此人員完成之產物主要為程式原始碼,並且應自行完成所撰寫程式之基本測試,主要包括所有API之輸出輸入測試及確定所有程式碼均有執行到且無錯誤。

5.系統測試:通常由一般人員偕同系統分析師根據[功能及模組測試個案相關文件]進行測試,主要為驗證模組及流程之輸出入功能是否符合客戶需求,分為阿法測試及貝塔測試兩類,前者為開發人員進行之測試驗證,後者為確認無誤後交由User之驗證程序,此階段需使用錯誤處理機制詳加紀錄,主要用於確認測試之問題所屬之類型(ex. 程式bug 或 規格異動 或 畫面調整等)。

6.系統交付與上線:通常由系統分析與專案管理人員擔任,此階段通常為軟體或專案開發最難處理的階段,其原因在於使用者對系統的認知與時間誤差,導致無法明確掌握系統結案時程,此階段最需要的是溝通與協調以及問題處理的效率,因此具備善於溝通協調的系統分析人員與問題處理的程式設計師是能夠縮短此階段的時程,但現實環境卻是最難實行的,也因此成為所有軟體開發一大阻礙。

專案人生─(6)專案團隊的組成類型

以下將「專案經理」的強弱和「專案成員」的強弱做為兩個維度,列出四種專案團隊的組合
(那些只出意見不做事的Sponsor或是高層主管,在此先略過不提)

A型團隊(經理弱,成員弱)
這是一般人最怕待到的專案團隊,也是老板的夢魘。如果不是搞不清楚狀況的話,通常是有特別原因才會推出這種組合去打仗。事情做不好,又做不完,大家累得要死又沒人鼓勵,專案經理報喜不報憂,這種團隊能完成專案的機率很低,大概低於50%。就算能結案,公司和專案成員大概也得遍體麟傷。

B型團隊(經理弱,成員強)
以西遊記團隊為例,相對於三位徒弟,除了佛法和緊箍咒之外,唐僧算是比較弱的一位成員;再以三國中的劉備團隊為例,論計謀用兵,劉備比不過孔明,要扁人開打,劉備又比不過關羽和張飛,但是劉備能夠讓團隊成員服從命令,共同為理想和目標而打拚,也是一種領導模式。這種團隊成功機率大於A型團隊,大概50%-75%之間。

C型團隊(經理強,成員弱)
以前面提過的江戶川柯南為例,每次解決案子,都是靠柯南一個人就搞定了,阿笠博士、小蘭、灰原哀、毛利小五郎….等人,不過是角色或輕或重的配角罷了。在這種團隊做事,好處是:專案經理無所不能,對外可搞定客戶及老板,對內可協助專案成員解決問題;壞處是:整個專案的credit很容易變成專案經理個人的credit,在他手底下要出頭天可能要等很久,因為沒有露臉的機會。這種團隊成功機率也大於A型團隊,大概50%-75%之間。

D型團隊(經理強,成員強)
這應該像是夢幻組合型的團隊了,在現實的職場生涯中,實在是可遇不可求。為什麼呢?如果真的有這麼強的團隊,一定會被老板拆成好幾個B型和C型團隊,這樣才有辦法應付較多的專案。再則,以中國人一山不容二虎的個性,要不了一兩年,成員就會有異動的心,想要自立門戶或更上一層樓(就像熱門樂團一個個單飛的主唱)。這種團隊成功機率最大,大概80%-90%之間。

說起來我很幸運,有看過D型團隊,專案經理的口頭禪是「我要成為海賊王!」,我還記得專案經理的名字,他叫「蒙其D魯夫」。

D型團隊另外一個代表是 "沉默的艦隊"

C型團隊假以時日是可以訓練成D型團隊的, 這種故事電影裡面很多的.

B型團隊如果頭兒管不住底下的成員, 就會向A型團隊靠攏.

A型團隊也有可能是實驗性質的團隊, 把一羣不知道該怎麼擺的人全部集中成一個Team, 做的好是公司賺到, 做不好的話是整個Team裁掉, 一羣人統統回家吃自己.