2011/8/31

寫程式,第一步想的不是資料結構也不是演算法。

寫程式,第一步想的不是資料結構也不是演算法。

首先,需求者會丟出想法,需求者可能是老闆,可能是End-User或自己。

接下來第二步,我會用直覺,真的就用直覺,應該說資訊科學的學養,想看看這種想法
能不能實作出來,試著跟需求者溝通後調整。

第三步,大致上在紙上畫出幾個系統架構,衡量自己熟悉與不熟悉的部分,當不熟悉的
份額太大時,往往是失敗的開始。

第四步,幫不熟悉的技術部分找到資源,大部分來自書籍與網路資料,並就瓶頸技術部
分先寫一些小程式熟悉並突破。

第五步,當所有不懂的部分都有些眉目之後試著把這些技術,組合起來,就變成了系
統。所謂有眉目,就是有自信在系統開發時完整時做出來。

接下來回歸主題,每個功能怎麼安排。以物件導向程式設計的觀點來看:

第一步,要切割class,以及繼承關係。

第二步,盡可能地列出member function的名稱,包含Constructors,Destructors,
operator overloading,對呀,只有名稱。

第三步,盡可能地列出data member。

第四步,開始設計member function,由被呼叫的class著手(比較複雜的function,需
額外寫一些簡單的驗證程式),一邊寫一邊調整data member、member function與class
的切割,包含member function的修飾子(public or private等等)。

第五步,除錯。

Google+要挖社群網站一哥臉書(Facebook)的牆角大不易。「憤怒鳥」Angry bird

根據網路統計公司ExperianHitwise,美國網友近幾週花在Google最新社群網站Google+
的時間成長停滯,顯示Google+要挖社群網站一哥臉書(Facebook)的牆角大不易。

根據Experian Hitwise,27日止當週,用戶平均造訪時間5分47秒,較前週增加約4%。7
月16日止當週,用戶造訪Google+平均時間為5時50分,登上巔峰。

Google+是Google和臉書一決高下的社群網站利器。

Altimeter Group分析師查琳.李(Charlene Li)表示,雖然Google+提供一些和社交
圈朋友分享內容的不錯功能,但臉書擁有超過7.5億的用戶,不容易被取代。

李指出:「你想要加入的朋友,很多人已在臉書玩得很開心,他們不想再加入另一個社
群網站。」

根據Experian Hitwise,27日止當週,美國造訪Google+的人次減少5.5%,至116萬人
次,較前週攀升2.6%。在7月16日止當週,Google造訪人次成長幅度為283%。

顧能(Gartner Inc.)分析師加騰柏格(MichaelGartenberg)指出,由於Google尚未
對大眾開放這項服務,因此要判斷會員數目還言之過早。

「使用這項服務的用戶初步反應似乎相當正向,但我們討論的是尚未廣泛開放的系統,
多數消費者不得其門而入的服務。」

Google+旨在讓使用者和自己社交圈內的朋友分享資訊,今年6月28日開始測試,只有獲
得邀請函才能加入。從那時開始,Google即不停致力增加新功能。

本月初,Google+和Zynga Inc.與人氣遊戲「憤怒鳥」業者Rovio Entertainment Oy等
遊戲開發商合作推出遊戲服務。

Experian Hitwise的研究方法仰仗網站的造訪,不納入行動裝置用戶,或利用
Google.com網站上方黑色通知欄登錄進入的次數。

Google昨天收盤上漲1.62美元,或540.70美元。該股年來計跌9%。
出現了!Google+ 的遊戲服務終究還是來了,首波陣容找來《憤怒鳥》、《寶石方塊》
等 16 款人氣作品站台。功能乍看之下與現有 Facebook Google 強調遊戲服務可提供
使用者與親朋好友分享、同樂,還要有線上遊戲般的使用體驗。

Google+ 甫推出時,許多人看重他少了 Facebook 遊戲的設計,訴求更純粹的社群系
統;但發表後幾天卻有跡象顯示 Google 是有打算為 Google 添加遊戲功能,企圖增加
互動、凝聚人氣等。首發的 16 款遊戲,包括《憤怒鳥》、《寶石方塊》、Zynga 的
《德州撲克》以及《Dragon Age Legends》等。

▲最上方就是未來會新增的 Google+ 遊戲圖示;左方是主要功能列,包括遊戲清單、
設定、最近玩過的遊戲等。選擇遊戲時,系統會告知你近期哪位朋友也在玩這個作品。
(圖╱轉載自 Google 官方部落格) (接下一頁)
Google真是厲害,居然一開始就強打推出最夯的遊戲:憤怒鳥(Angry Birds)
右側有「精選遊戲」、「所有遊戲」和「遊戲通知」三個選項,
下方還有個「最近玩過」的記錄選項,設計上滿簡單方便的。
除了Angry Birds外,在裡頭還有撲克、寶石方塊和射擊遊戲Crime City可玩,
目前總共推出16款不同類型的遊戲,但多以美式風格遊戲為主。
Google+ 遊戲網址:https://plus.google.com/games
玩遊戲時,要先點選遊戲然後提供授權;結束後,可用社交訊息選擇你的小圈圈,
去分享比較分數戰果。若不想給遊戲存取權限,那就要在右上的『Google+設定』,
在「帳戶總覽」裡選擇「授權應用程式和網站」內的「編輯」選項,
然後選擇取消應用程式的權限;這相對於臉書不斷干擾的模式,真是好上許多。

自我修練 – ASP.net專題實務

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DBAccessLib;
using System.Data.Odbc;
using System.Text.RegularExpressions;

public partial class WebPart_wkh_TopsTicket_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {       
        const int offset = -3;
        Label1.Text = "";

        if (!Page.IsPostBack)
        {

//抓入當日日期的方法, 但注意要放在if (!Page.IsPostBack)中,以免新設定的值被洗掉。
            tbFromYear.Text = DateTime.Today.AddDays(offset).Year.ToString();
            tbFromMonth.Text = DateTime.Today.AddDays(offset).Month.ToString();
            tbFromDay.Text = DateTime.Today.AddDays(offset).Day.ToString();
            tbToYear.Text = DateTime.Today.Year.ToString();
            tbToMonth.Text = DateTime.Today.Month.ToString();
            tbToDay.Text = DateTime.Today.Day.ToString();
        }
    }

    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {

//以button呼叫日曆控制項的方法, 看起來真的很笨, 只是把非隱藏設成隱藏

        tbFromYear.Text = Calendar1.SelectedDate.Year.ToString();
        tbFromMonth.Text = Calendar1.SelectedDate.Month.ToString();
        tbFromDay.Text = Calendar1.SelectedDate.Day.ToString();
        Calendar1.Visible = false;
        Button2.Enabled = true;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {

//以button呼叫日曆控制項的方法, 看起來真的很笨, 只是把隱藏設成非隱藏
        Calendar1.Visible = true;
        Button2.Enabled = false;
        Calendar1.Focus();
    }

    protected void Calendar2_SelectionChanged(object sender, EventArgs e)
    {
        tbToYear.Text = Calendar2.SelectedDate.Year.ToString();
        tbToMonth.Text = Calendar2.SelectedDate.Month.ToString();
        tbToDay.Text = Calendar2.SelectedDate.Day.ToString();
        Calendar2.Visible = false;
        Button1.Enabled = true;
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        Calendar2.Visible = true;
        Button1.Enabled = false;
        Calendar2.Focus();
    }
    protected void btSubmit_Click(object sender, EventArgs e)
    {
        string DSN_RCA = Common.ToGetDsnByNCSR("R");
        String SQLStr = "";

        if(tbValue.Text.Length == 0) {           
        }

        if (rblFeature.SelectedValue == "dispatch")
        {
            SQLStr = "select orderid as 聯單號碼, exgname as 交換機, dispatchuserid as 操作員代碼,";
            SQLStr += " dispatchtime as 時間 from tkdispatch where dispatchtime >= \'";
            SQLStr += tbFromYear.Text + "-" + tbFromMonth.Text + "-" + tbFromDay.Text + " 00:00:00\' ";
            SQLStr += " and dispatchtime <= \'" + tbToYear.Text + "-" + tbToMonth.Text + "-" + tbToDay.Text;
            SQLStr += " 23:59:59.99999\'";
            if (rblCondition.SelectedValue == "tel")
            {
                SQLStr += "";
            }
            if (rblCondition.SelectedValue == "number")
            {
                if (Regex.IsMatch(tbValue.Text, @"^[1-9][0-9]*"))
                {
                    SQLStr += " and orderid =" + tbValue.Text;
                }
                else
                {
                    Label1.Text = "聯單號碼格非數字,改為搜尋全部條件。";
                }
            }
            if (rblCondition.SelectedValue == "op")
            {
                SQLStr += " and dispatchuserid like \'%" + tbValue.Text + "%\'";
            }
        }

        if (rblFeature.SelectedValue == "reply")
        {
            SQLStr = "select orderid as 聯單號碼, replyvalue as 回報代碼, replyuserid as 操作員代碼,";
            SQLStr += " replytime as 時間 from tkreply where replytime >= \'";
            SQLStr += tbFromYear.Text + "-" + tbFromMonth.Text + "-" + tbFromDay.Text + " 00:00:00\' ";
            SQLStr += " and replytime <= \'" + tbToYear.Text + "-" + tbToMonth.Text + "-" + tbToDay.Text;
            SQLStr += " 23:59:59.99999\'";
            if (rblCondition.SelectedValue == "tel")
            {
                SQLStr += "";
            }
            if (rblCondition.SelectedValue == "number")
            {
                if (Regex.IsMatch(tbValue.Text, @"^[1-9][0-9]*"))
                {
                    SQLStr += " and orderid =" + tbValue.Text;
                }
                else
                {
                    Label1.Text = "聯單號碼格非數字,改為搜尋全部條件。";
                }
            }
            if (rblCondition.SelectedValue == "op")
            {
                SQLStr += " and replyuserid like \'%" + tbValue.Text + "%\'";
            }
        }

        //Label1.Text = SQLStr;

 

//好用的GridView設定方法, 要把DataReader餵過去就ok了
        DBAccess db1 = new DBAccess();
        OdbcDataReader dr = db1.DataReader(….);
        GridView1.DataSource = dr;
        GridView1.DataBind();
        GridView1.Visible=true;

        dr.Close();
    }
}

2011/8/29

中華電信光世代50M

當晚跟中華電信的公關,工程師聊了不少網路環境的變速,除了Windows系統,軟體等環境,使用者最常遇到的應該是網路分享器硬體設備的問題,若使用者透過wifi分享器分享網路出來,建議該wifi分享器要有802.11n的水準才有辦法達到下載50M的速度,本來我以為802.11g就夠了(54Mbps),但是因為54Mbps是訊號滿格的標準,而且還要下載上傳共用,所以802.11n才是最理想的,而且筆電的無線網卡也要支援802.11n才行,若是真的很講究速度,我會建議還是接LAN最穩。還有一個令人頭痛的問題是,目前有多少網站的伺服器能夠像中華電信一樣的提供50M/秒的速度,Yahoo? YouTube? 線上遊戲? 目前網站似乎沒有公開自己的頻寬傳輸的習慣,所以我個人認為若你是個人戶,申請50M,想要在任何網站都能享用50M的速度,可能會不是很實際,若是像蛋蛋家裡的環境,同時可能有4~5人在共享網路,我才比較推薦使用光世代50M,因為在大家都在共享網路訊號的同時,每個個體戶都還是有機會分到5~8M以上的速度,面對各式各樣的網站,應該都是把對方伺服器榨到極限了。Anyway,透過這次的體驗,我也申請了光世代50M的方案,因為我家使用網路的人很多,還蠻適用的。這一兩天中華電信就要來我家裝了,大家未來使用上有什麼問題也歡迎留言討論~
雖然我不是網管相關的專業人員,但看完蛋大的這篇測試文不禁有幾點疑問:

1. 測試的地點是在中華電信的機房附近(或辦公室內)而非一般民眾的自宅,得出的結果也無法100%的達到50M,更何況由機房到民眾家中的距離之間會有更多的問題。
2. 用蛋大的TT92筆電跑SpeedTest.net時,伺服器也是顯示Taipei而非其他國家,得到的結果不足50M,中華電信的工程師怎麼沒有任何回應,而是蛋大用"落漆"兩字帶過。
3. 目前台灣網路最被人詬病的問題就在於中華電信國營時在全島鋪設的電路是用所有納稅人的錢,但轉為民營之後卻沒有將電路歸還於全民,導致其他家業者也須向中華電信承租,而這樣的結果中華電信怎會盡心維護這最後也最昂貴的一哩路。(這點問題有些偏離測試文的內容,但也是問題1的延伸問題)


1. 我的申請單已經過了,明天會有工作人員會來我家安裝,我家住在文山區的深山內,深到垃圾車不會經過我家我要跑下山去倒的那種,我日後也會貼上我家的數據給大家參考,別緊張啦

2. 坦白說,speedtest.net雖然寫台北,但是到底speedtest是用什麼樣的方式在測,好像也沒人知道,我用TT下載檔案的時候實際有45M的效果,這才是我覺得最重要的,啊不然speedtest.net測出50M,然後我下載檔案時只有10M,那有屁用

3. 挖,這個就有的討論嘍,我個人立場當然希望迴路費可以大幅降,多一點競爭,大家都有便宜又快的網路可以用,不過這就有點小離題了



若大家對我家裝好跑的數據比較有興趣, 不管有沒有到50M我都會貼出來啦, 我家1樓到4樓共有8台筆電, 我家用的幾乎全都是Win 7, 但我哥有一台XP, 我也都會一併測試.

啊若看完貼圖還是疑神疑鬼的, 歡迎組團來我家親自體驗, 老比價王的板主應該還記得我家在哪, 曾經有一屆的板主聚會是在我家辦的.

外包的裝機人員說
我們鎮上還沒有人申請50M/3M
說我是第一個申請的
因為整個瑞芳區都是他在跑的
我心想這裡有這麼落後嗎
下午才去幫我朋友臨櫃申請50/3M
我猜他可能是第二個吧

晚上才有空做10M升50M的測試
先接原本就有的Vigor2104IP分享器
這是好幾年前在PCDVD跟小峰大團購買的
很少熱當或斷線
用起來還滿穩定的

連上HiNet連線速率測試網頁
下行10.26Mbps 上行2.58Mbps

還記得自己以前從28.8K電話撥接時代開始上網,
然後到唸書使用學網,享用飛快的高速頻寬,一晃眼也十多個年頭。

隨著網路世代的演進,對於上網速度的需求也越來越多了!
像Wisely自己寫稿查資料,以及許多視聽娛樂,
全都離不太開網路環境,而速度的要求其實也變的越來越高。



或許有人會問,這麼快的超高速光纖網路速度能做什麼?

UX21 惠普、戴爾、宏碁表現不如預期,但是華碩、聯想表現仍然出色

全球前五大電腦品牌廠商財報已全部出爐,惠普、戴爾、宏碁表現不如預期,但是華碩、聯想表現仍然出色,呈現出「兩好三壞」的局面,其中聯想上季營收更達到歷史新高。

華碩與宏碁獲利更是兩樣情,宏碁上半年每股盈餘為負2.12元,反觀華碩有高達每股9.3元的成績。同樣是PC大廠,為什麼出現完全不同調的境遇?經過資料比對後發現,表現不如預期的廠商,營收重心皆放在成熟市場,而華碩、聯想則搭上新興國家的需求順風車。

根據研究機構指出,今年第二季,亞太、南美等地區的新興市場,PC市場規模已超越歐美為首的成熟市場,其中又以中國PC銷售量超越美國最具代表性。華碩就在新興市場取得好成績,大陸PC市占率約在第二、三名附近徘徊,僅次於聯想;另一方面,華碩在東歐第二季市占率成為第一,也是拜新興市場需求所賜。


華碩(Asus)推出輕薄筆電並沒啥了不起,重點是這款在 Computex 2011 前夕推出的 UX21 ,最厚處只有17mm(最薄則是3mm),重量只有約1.1公斤,重點是有 Sandybridge Intel Core i7 的處理器加持(詳細規格不明,應該是雙核心的低電壓版)。

另外,還配備了 SATA IIISSDUSB 3.0 ,續航力號稱可以持續「休眠」達一週(這說法很有趣),睡眠到醒來只要兩秒(拜SSD所賜),從鍵盤到機身都是使用金屬材質,而且是 Unibody !不過外殼的顏色相當地誘人,特別是燈光照明下的光暈(請看跳轉後的影片),「稍微」對華碩又有了點信心了。

在先前展前曝光內容當中,我們已經預期華碩將會在展前記者會上發表新款Eee PC,於是我們在現場所看到的就是一台相當輕薄,同時機身採尖銳切角設計的新款Eee PC,同時其售價僅只要美金199元,目前作業系統搭載MeeGo,但未來將推出Windows版本 (當然售價就會提高)。


華碩在展前記者會上正式發表新款小筆電系列「Eee PC X101,主要一改先前Eee PC有點圓潤的感覺,而改用較為細薄尖銳的外觀設計,使得最厚地方也僅有17.6mm,而重量也只有945公克。筆電表面採用紋路質感設計,一共推出紅、白、棕、黑4種顏色,鍵盤採用巧克力鍵盤設計,同時觸控板尺寸也十分足夠讓男生手指方便操作,其他則內建USB介面與micro SD記憶卡插槽。