• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Zachary.XiaoZhen - 夢(mèng)想的天空

            Linq to xml 這個(gè)東西出來好多年了,但一直沒有機(jī)會(huì)在項(xiàng)目中用到,前段時(shí)間,終于項(xiàng)目中一些地方需要用到xml作為數(shù)據(jù)源,于是就體驗(yàn)了一把這個(gè),感覺還挺不錯(cuò)的,今天在此小結(jié)一下.

                   首先我們來模擬一下一個(gè)真實(shí)的業(yè)務(wù)場景:在這里我們需要展示一個(gè)火車站上各個(gè)站臺(tái)上面燈光開關(guān)狀態(tài).假設(shè)每個(gè)站臺(tái)一共6個(gè)開關(guān),站臺(tái)我們用Station節(jié)點(diǎn)表示,站臺(tái)開關(guān)我們用SwitchNo來表示,在初始化(即默認(rèn)狀態(tài))的時(shí)候,我們需要表示成第一個(gè)站臺(tái)2個(gè)開關(guān)開著,第二個(gè)站臺(tái)3個(gè)開關(guān)開著,第三個(gè)站臺(tái)4個(gè)開關(guān)開著….

                那么我們可能需要的一個(gè)xml文件格式可能就是如下這個(gè)樣子: 

            <?xml version="1.0" encoding="utf-8"?>
            <Stations>
              <Station Id="1">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">0</SwitchNo>
                <SwitchNo Id="4">0</SwitchNo>
                <SwitchNo Id="5">0</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="2">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">0</SwitchNo>
                <SwitchNo Id="5">0</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="3">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">0</SwitchNo>
                <SwitchNo Id="5">0</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="4">
                <SwitchNo Id="1">0</SwitchNo>
                <SwitchNo Id="2">0</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">1</SwitchNo>
                <SwitchNo Id="5">0</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="5">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">1</SwitchNo>
                <SwitchNo Id="5">1</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="6">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">1</SwitchNo>
                <SwitchNo Id="5">1</SwitchNo>
                <SwitchNo Id="6">1</SwitchNo>
              </Station>
            </Stations>

             

            下面我們就從xml數(shù)據(jù)的創(chuàng)建/查詢/修改這三個(gè)方面簡單談一下吧.關(guān)于概念啥的就不啰嗦了,直接上代買吧.

            1. 創(chuàng)建這個(gè)文件

            /// <summary>
                    /// 創(chuàng)建xml文件
                    /// </summary>
                    private void writeStationXmlData()
                    {            
                        string fileName = Path.Combine(dataPath, "StationWitch.xml");
            
                        if (!Directory.Exists(dataPath))
                            Directory.CreateDirectory(dataPath);
            
                        if (File.Exists(fileName))
                            return;
            
                        var stationEleList = new List<XElement>();  //臨時(shí)緩存每個(gè)站臺(tái)節(jié)點(diǎn)
            
                        //一共6個(gè)站臺(tái),循環(huán)創(chuàng)建           
                        for (int i = 1; i < 7; i++)
                        {
                            var xAttr = new XAttribute("Id", i);
            
                            //臨時(shí)緩存每個(gè)每個(gè)站臺(tái)下的開關(guān)狀態(tài)
                            var childList = new List<XElement>();       
                            for (int j = 1; j < 7; j++)
                            {
                                childList.Add(new XElement("SwitchNo", new XAttribute("Id", j), i >= j ? 1 : 0));
                            }
            
                            //構(gòu)建一個(gè)站臺(tái)節(jié)點(diǎn)
                            var stationEle = new XElement("Station", xAttr, childList.ToArray());
                            stationEleList.Add(stationEle);
                        }
            
                        //構(gòu)建Stations節(jié)點(diǎn)
                        XElement xBody = new XElement("Stations", stationEleList.ToArray());
            
                        //構(gòu)建整個(gè)文檔
                        XDocument doc = new XDocument(
                                new XDeclaration("1.0", "utf-8", "yes"), xBody);
                        doc.Save(fileName);
                    }

            2. 讀取當(dāng)前xml 文件并轉(zhuǎn)化為友好的類型

            /// <summary>
                    /// 查詢讀取每個(gè)站臺(tái)的開關(guān)狀態(tài)并轉(zhuǎn)化為keyValue鍵值對(duì)
                    /// </summary>
                    /// <returns></returns>
                    public IList<KeyValue<int, int>> GetStationLightData()
                    {
                        writeStationXmlData();
                        if (stationLightData == null)
                        {
                            stationLightData = new List<KeyValue<int, int>>();
                            stationSwitchStatus = new List<KeyValue<int, bool>>();                
            
                            //加載xml
                            string fileName = Path.Combine(dataPath, "StationWitch.xml");
                            XElement doc = XElement.Load(fileName);
            
                            //讀取站臺(tái)列表
                            var station = from s in doc.Descendants("Station")
                                          select s;
                            //遍歷站臺(tái)
                            foreach (var st in station)
                            {
                                //獲取每個(gè)站臺(tái)的開關(guān)集合 即SwitchNo節(jié)點(diǎn)
                                var st_switchs = st.Elements("SwitchNo");
                                var stationId = int.Parse(st.Attribute("Id").Value);
                                int light = 0;
                                foreach (var sw in st_switchs)
                                {
                                    var swithNo = int.Parse(sw.Attribute("Id").Value);
                                    bool isOn = sw.Value == "1";
                                    if (isOn)
                                        light += 20;
                                    stationSwitchStatus.Add(new KeyValue<int, bool>(stationId, isOn, swithNo));
                                }
                                stationLightData.Add(new KeyValue<int, int>(stationId, light));
                            }
                        }
                        return stationLightData;
                    }

            3.更新節(jié)點(diǎn)值(先查詢找到指定的節(jié)點(diǎn) 在更新后保存)

             /// <summary>
                    /// 更新制定站臺(tái)中的指定開關(guān)的狀態(tài),即更新制定Station->SwitchNo節(jié)點(diǎn)下值
                    /// </summary>
                    /// <param name="station"></param>
                    /// <param name="switchNo"></param>
                    /// <param name="isOn"></param>
                    public void UpdateStationSwitchStatus(int station, int switchNo, bool isOn)
                    {
                        string fileName = Path.Combine(dataPath, "StationWitch.xml");
                        //讀取數(shù)據(jù)
                        XElement doc = XElement.Load(fileName);
                        var up_station = doc.Descendants("Station")
                            .Where(o => o.Attribute("Id").Value == station.ToString()).FirstOrDefault();
            
                        //找出指定的節(jié)點(diǎn)
                        var upSwitch = up_station.Elements("SwitchNo").FirstOrDefault(o => o.Attribute("Id").Value == switchNo.ToString());
            
                        //更新
                        if (upSwitch != null)
                        {
                            upSwitch.Value = isOn ? "1" : "0";
                        }
            
                        //保存為文件
                        lock (sync)
                        {
                            doc.Save(fileName);
                        }
                    }

            至此,xml的常規(guī)操作就介紹完了,希望能對(duì)有需要的同學(xué)有所幫助.

            posted @ 2012-07-14 10:15 BoyXiao 閱讀(104) | 評(píng)論 (0)編輯 收藏

            美社會(huì)學(xué)家建議 Twitter 向中國微博學(xué)習(xí)

              社會(huì)學(xué)家特蕾西婭·王

              北京時(shí)間 7 月 13 日消息,據(jù)國外媒體報(bào)道,32歲的特蕾西婭·王(Tricia Wang)是在中國工作的社會(huì)學(xué)家和顧問,據(jù)她表示自己現(xiàn)在的日常工作已經(jīng)離不開 Instagram 了。另外,她還在工作中記錄了微博和人人網(wǎng)等全新社交媒體在中國蓬勃發(fā)展的情況,并建議 Twitter 向中國的微博學(xué)習(xí)。

              以下為文章摘要:

              特蕾西婭·王很有可能是在中國火車上用 Instagram 拍攝照片最多的。王有多種身份,她是一名社會(huì)學(xué)家、民族志學(xué)者(ethnographer),以及研究全球科技在移民、低收入群體、年輕人和社會(huì)邊緣階層中使用情況的企業(yè)咨詢顧問。王過去幾年都生活在中國。從 2005 年開始,她跑遍了中國的大江南北,經(jīng)常乘坐的交通工具是火車。她的工作是觀察數(shù)字技術(shù)對(duì)進(jìn)城農(nóng)民工的深遠(yuǎn)影響,并對(duì)新型社交媒體(如微博和人人)的迅速普及進(jìn)行記錄。一年前,王回到了自己位于紐約布魯克林的家中。在接受國外網(wǎng)站的采訪時(shí),王談到了以下幾點(diǎn)內(nèi)容:她使用了數(shù)字技術(shù)來進(jìn)行民族志的工作、不在大公司工作的好處,以及美國高科技公司可以從中國同行那里獲得靈感。

              問:你是怎樣獲得這份不錯(cuò)的工作的?

              答:特蕾西婭·王:我之前從沒想過要去找一份工作。我就讀于加州大學(xué)圣地亞哥分校,主修的是傳播學(xué),畢業(yè)之后我在紐約市的低收入社區(qū)從事過幾年社區(qū)干事的工作,另外還從事過宣傳和普及教育的工作。我并沒有打算進(jìn)入學(xué)術(shù)界,我一直以來都沒有這方面的興趣,尤其是大多數(shù)學(xué)術(shù)界那種封閉的氛圍不太吸引我。丹娜·博伊德(Danah Boyd)是第一位吸引了我的學(xué)者,因?yàn)樗墓ぷ骺瓷先ズ屯饨缦⑾⑾嚓P(guān)。另外,她的個(gè)性也啟發(fā)了我,讓我意識(shí)到我需要具備一些額外的研究技巧,才能對(duì)我感興趣的領(lǐng)域具有一定影響力。所以,我又回到了加州大學(xué)圣地亞哥分校,繼續(xù)攻讀我的社會(huì)學(xué)博士學(xué)位。

              現(xiàn)在,我已經(jīng)是一名獨(dú)立的研究員。去年,我獲得了富布萊特訪問學(xué)者(Fulbright Fellow)的資助,我還從事著咨詢的工作,負(fù)責(zé)幾個(gè)項(xiàng)目,有時(shí)還會(huì)對(duì)外界做報(bào)告。上一次做報(bào)告是在里昂證券公司,它是中國最大的股票交易和金融服務(wù)公司之一。我曾經(jīng)在諾基亞做過研究工作,并擁有微軟的訪問學(xué)者資格。我尤其喜歡關(guān)注公司戰(zhàn)略層面的內(nèi)容。另外,我時(shí)常通過分析科技用戶的文化特性,使得投資者能夠更好的理解市場,或者從不同的角度去理解用戶。比如說,我曾經(jīng)就“為什么谷歌會(huì)在中國失敗”寫過一些文章,并做過報(bào)告。我之所以會(huì)做這些工作,只是希望自己能有機(jī)會(huì)去分享我的研究成果,而不至于將來眼看著這些科技公司陷入困境。

              問:當(dāng)你“在現(xiàn)場”的時(shí)候,你實(shí)際上在做什么?

              答:我接受過社會(huì)學(xué)調(diào)研的培訓(xùn),我記錄時(shí)使用的是民族志的方法。這種方法要求我全身心的投入進(jìn)去,所以我去到中國,同那里的人生活在一起,花大量的時(shí)間同他們一起吃飯、逛街等,從而理解他們的生活方式到底是怎么樣的。另外,還有一個(gè)目的就是了解他們是如何使用科技的。我尤其喜歡和低收入者、年輕人和外地務(wù)工人員打交道,因?yàn)槲艺J(rèn)為社會(huì)邊緣階層所形成“亞文化”是理解社會(huì)變遷和未來趨勢(shì)的關(guān)鍵。我在美國和墨西哥從事過社會(huì)研究工作,但是從 2005 年以后我就一直聚焦中國的發(fā)展。近幾年,中國人在科技使用上的變化是令人吃驚的,尤其是在互聯(lián)網(wǎng)和手機(jī)的使用方面。和美國不同的是,中國一些低收入甚至更邊緣化的人群在手機(jī)購買方面增長得特別快,這得歸功于政府積極建設(shè)無線通信基礎(chǔ)設(shè)施,以及國有電信運(yùn)營商之間競爭激烈,導(dǎo)致資費(fèi)顯著下降。

              問:你在中國的研究開始之后,所關(guān)注的重點(diǎn)有沒有過變化?

              答:剛開始的時(shí)候,我專注的是外來務(wù)工人員,并花了很多時(shí)間泡在網(wǎng)吧里面,里面有很多人在上網(wǎng)、打游戲和看電影,但是不少人在網(wǎng)上找工作的時(shí)候卻吃住都在網(wǎng)吧。我對(duì)中國中產(chǎn)階級(jí)和上層階級(jí)使用科技的情況從來沒有感興趣過,因?yàn)槲铱床怀鰜硭麄兺绹那闆r有什么區(qū)別。當(dāng)我去年再次回到中國時(shí),發(fā)現(xiàn)那里又發(fā)生了很多變化——現(xiàn)在年輕人都在頻繁使用社交媒體。人們開始使用類似于 Twitter 和 Facebook 這樣的手機(jī)應(yīng)用,不過功能會(huì)有些不同。作為一個(gè)民族志學(xué)者,你很多時(shí)候沒有辦法選擇你所研究的對(duì)象,而且必須緊跟當(dāng)下發(fā)生的事情。我對(duì)社交媒體的關(guān)注并不是刻意的,但現(xiàn)在卻成了我研究的焦點(diǎn)。

              問:為什么和中國的社交媒體如此不同?

              答:在中國,最重要的兩個(gè)社交媒體是人人網(wǎng)(基本上是抄襲 Facebook)和微博(與 Twitter 有點(diǎn)像)。一般來講,我們認(rèn)為沒有必要向美國以外的科技公司學(xué)習(xí),但對(duì) Twitter 而言,無疑應(yīng)該好好研究微博,并從中汲取一些靈感。微博看上去像是輕博客 Tumblr、游戲平臺(tái) Zynga、Facebook 和 Twitter 的混合體。它上面的消息帶有很多圖片,而 Twitter 往往是文字更多一些。在微博中,圖片直接就放在每條消息的下面,所以你不需要再次點(diǎn)擊就可以查看圖片。有些圖片往往同消息中的文字內(nèi)容非常不同,有時(shí)圖片中的內(nèi)容還可以是文字。

              問:用戶的使用情況怎么樣?

              答:微博歷史上的一個(gè)轉(zhuǎn)折點(diǎn)就是去年的動(dòng)車事件。網(wǎng)民拍攝了很多現(xiàn)場的照片,并發(fā)布到了微博上面,甚至有關(guān)于追尾瞬間發(fā)生的內(nèi)容。由于瘋狂轉(zhuǎn)發(fā),現(xiàn)場的信息也大量傳播了出去。目前,微博上出現(xiàn)了一種“長微博”,這種工具允許你將發(fā)布的整篇文章轉(zhuǎn)化成 JPEG 圖片。點(diǎn)擊該圖片,里面的文字得以放大,這樣用戶就可以查看完整的內(nèi)容。雖然這看上去是一件微不足道的事情,但是從中你可以了解中國社交媒體的現(xiàn)況。同樣,如果是在美國,我一般關(guān)注的是用戶如何黑掉社交媒體,因?yàn)楦鱾€(gè)國家的文化是不一樣的。

              問:你在工作中是如何使用社交媒體的?

              答:雖然一些研究人員對(duì)自己的工作相當(dāng)保密,但是我做的事情確是透明的。我告訴人們我在哪里,我常使用 Foursquare 和 Instagram,這樣我可以將我的文章轉(zhuǎn)發(fā)到 Tumblr、Facebook 和 Twitter 上。我盡可能在網(wǎng)絡(luò)上留下我的蹤跡,這可以提醒自己在網(wǎng)絡(luò)上從事的任何工作都是公開的,不管是在美國還是在中國。如果發(fā)生了任何事情,朋友都可以在網(wǎng)上找到我的位置。Instagram 是我在中國工作的主要工具,我可以在第一時(shí)間將實(shí)地研究報(bào)告發(fā)布到上面,既有圖片又有文字。做實(shí)地調(diào)查很枯燥、孤單,所以朋友們的實(shí)時(shí)回復(fù)可以讓我減少孤獨(dú)感。

            posted @ 2012-07-14 10:15 BoyXiao 閱讀(119) | 評(píng)論 (0)編輯 收藏
                博客光寫GacUI(http://www.gaclib.net/)的Demo更新也好無聊啊。所以今天先換換口味,胡扯點(diǎn)別的。

                一年一度的高中畢業(yè)生填簡歷的日子即將就要到了,又有很多人問計(jì)算機(jī)專業(yè)的事情。其實(shí)我從心底里覺得,高考后才來問這個(gè),已經(jīng)完了一大半了。當(dāng)然另一小半十分有前途的人可以在大學(xué)四年趕上來,不過估計(jì)他們還是要讀個(gè)研究生,才能把自己訓(xùn)練成能用的碼農(nóng)。

                編程是一件很難的事情。當(dāng)然我的意思跟那篇著名的《編程是一件很難的事情》不一樣。想把代碼寫好,本來就是一件非常困難的事情。我大三的時(shí)候訓(xùn)練一個(gè)大一的老鄉(xiāng),就光是C++,長達(dá)四年后她還搞不清楚模板元編程究竟是什么。而且還有C語言學(xué)會(huì)了轉(zhuǎn)C++會(huì)把壞習(xí)慣帶進(jìn)來啦,C++的人轉(zhuǎn)做C#之后發(fā)現(xiàn)很多C++的好技巧到了C#都只會(huì)讓程序變得更慢啦,很多寫動(dòng)態(tài)語言的人不理解類型的好處還在那里胡扯啦,還有C#和javascript明明放著大好的函數(shù)式風(fēng)格不用,非要把代碼寫的超長(本來光是這樣沒什么問題的,只是有某些人不肯學(xué)習(xí)新知識(shí))。可見,就算把自己訓(xùn)練了好多年,最終進(jìn)入了工作崗位,想把代碼寫好,也是一件非常困難的事情。

                當(dāng)然有些人說,如今只有產(chǎn)品做得好才能賺錢,代碼寫的好有個(gè)屁用。這只能是人各有志,有些人就不喜歡鉆研代碼,這本來也沒什么。但是這些人老是跳出來忽悠別人,也只會(huì)讓編程變得更難。只是幸好,我的單位并不會(huì)跟某些單位一樣說一些“把代碼寫得那么好有什么用,搞到我們還非得學(xué)東西才能看你的代碼,趕緊做點(diǎn)新feature啦”的這種話,我已經(jīng)覺得很好了。

                寫得好這個(gè)東西還是比較抽象。我認(rèn)為其中一條就是代碼要好維護(hù)。我一直以為,只有代碼寫得好維護(hù),好改,清晰易懂,這樣加新的功能才會(huì)容易,不出事情,順利發(fā)布軟件。后來我發(fā)現(xiàn)我錯(cuò)了,騰訊不也是QQ一版一版的發(fā)嗎,原來加班也是一種方法,啊哈哈哈。如果在一個(gè)單位里面,不加班別人就會(huì)找你麻煩的話,我相信你也不會(huì)花心思把代碼寫好的,反正都要加班。

                不過對(duì)于志向就是寫代碼的那一些人,最好還是不要受到這些外來信息的干擾。最近跟我們組里的一個(gè)test manager聊天,他是一個(gè)菲律賓人,說是從紙帶時(shí)代開始就寫代碼了(不過看起來好年輕……),工作的時(shí)候還覺得C語言是一個(gè)嶄新的語言。后來他跟我說,如果一個(gè)人有志向與,代碼一條路走到黑,最好就去學(xué)習(xí)一下怎么當(dāng)architect。他說道,Architect的知識(shí)架構(gòu)是由各種pattern組成的,然后就說了自己年輕的時(shí)候的很多故事來作證這個(gè)道理。然后還講了微軟的其中一個(gè)創(chuàng)始人到現(xiàn)在還堅(jiān)持一線寫代碼的事情,不過沒告訴我是誰。

                在這之前,剛好MSR的Daan Leijen因?yàn)閬肀本﹨⒓觩rogramming language相關(guān)的conference,就來我們這里參觀了一下。后來我看他做過GUI,做過parser combinator,發(fā)明實(shí)現(xiàn)過語言,就前去搭訕,結(jié)果發(fā)現(xiàn)他讀書的時(shí)候的導(dǎo)師竟然是Erik Meijer。按照他的話說,“then we are connected”,如果說成中文,就是有緣分吧。接著就跟他討論了一些parser combinator和類型系統(tǒng)之類的東西。我說我之前也搞過這些東西,最后還貢獻(xiàn)了一部分給公司,換了個(gè)組之后還開了講座什么的。他講到他讀書的時(shí)候,也是學(xué)校沒教自己自學(xué)的這些東西,后來周圍也沒什么人做,但是并沒有讓他喪失動(dòng)力。然后就說了一句話讓我印象很深刻:“原來你也做這些東西啊,我應(yīng)該可以看到為什么你要從產(chǎn)品組跳到MSRA來了。”他直到今天,頭發(fā)都基本上掉光了,還在那里繼續(xù)研究programming language的東西,還給了我?guī)灼撐摹N矣X得很好,人就該像他那樣。

                有些時(shí)候,人就得有那個(gè)信念,才能把可行但是難度大的東西,也最終搞出來。我自己寫了11年的程序,其實(shí)并沒有接觸過十分廣泛的東西,因?yàn)楹芏鄷r(shí)間都花在重寫我的一些idea上面了。譬如說編譯器就寫了五六個(gè),GUI庫就寫了八遍,還有些雜七雜八的。不過從這個(gè)過程之中,可以明顯感覺到自己什么時(shí)候比以前更進(jìn)一步。這種signal有很多,譬如說當(dāng)你決定要添加一個(gè)比較復(fù)雜的功能,也可以迅速知道怎么做而不用動(dòng)到架構(gòu)啦;譬如說你覺得你的代碼越來越順眼啦;譬如說你因?yàn)榧軜?gòu)不行決定重寫的時(shí)候,你發(fā)現(xiàn)前一個(gè)版本的代碼可以撿起來繼續(xù)用的部分越來越多啦。

                寫到這里,我想起很多人都問過我,程序要怎么寫才能寫得好,或者說設(shè)計(jì)模式要怎么寫,之類的問題。如果把學(xué)習(xí)編程花費(fèi)的精神代價(jià)做標(biāo)準(zhǔn)的話,捷徑是沒有的。但是如果僅僅把時(shí)間作為標(biāo)準(zhǔn)的話,捷徑顯然是有的。怎樣才能加速你學(xué)習(xí)的過程呢?答案就是,先寫再看書。對(duì)于像編譯原理這種略微高深的知識(shí),總要自己寫過幾遍,吃了一些苦頭,才能知道為什么書里非要把算法那么設(shè)計(jì)結(jié)構(gòu)那么安排。對(duì)于像設(shè)計(jì)模式這種需要大量經(jīng)驗(yàn)才可以領(lǐng)悟到的知識(shí),如果你從來沒獨(dú)立寫過一個(gè)上萬行的程序,你覺得你能理解設(shè)計(jì)模式在講什么嗎?我覺得這種時(shí)候能做的也就是背下來,理解什么的都是扯淡。諸如此類,學(xué)習(xí)程序,如果要加速那個(gè)過程,肯定要花大量的時(shí)間寫代碼。當(dāng)你把項(xiàng)目做得越大、越復(fù)雜、算法越扭曲、界面越華麗、尺寸已經(jīng)大到你覺得不學(xué)習(xí)新的方法論就肯定會(huì)讓代碼失控的時(shí)候,這個(gè)時(shí)候你來看設(shè)計(jì)模式的書,保證是每看到一個(gè)模式都覺得人家說到你心坎里去了。那你不僅可以迅速理解,而且以后還可以不由自主的想起來使用它。

                當(dāng)然,如果你不是一個(gè)喜歡寫代碼的人,那這個(gè)方法肯定沒有用,因?yàn)橹型痉艞壥裁吹奶嗔恕_@種時(shí)候,只能怪你沒緣分,設(shè)計(jì)模式不渡你了。如果你最后撐下來了,雖然你自己覺得你也花費(fèi)了相當(dāng)?shù)呐Γ莿e人反正是看不到你的努力的,就會(huì)開始覺得你有捷徑了。為什么呢?因?yàn)樾矢甙。瑫r(shí)間花得短啊。

                光寫代碼也是沒用的。同人于野一篇講成年人還能不能進(jìn)步的博客說得很好,知識(shí)分為舒適區(qū),學(xué)習(xí)區(qū)和恐慌區(qū)。舒適區(qū)的意思就是,你很容易就可以做完。學(xué)習(xí)區(qū)的意思就是,你需要花費(fèi)大量的智力才可以做完。恐慌區(qū)的意思就是,你根本不知道如何下手。當(dāng)你在為了練習(xí)編寫大量的代碼的時(shí)候,你要盡量把題目都安排在學(xué)習(xí)區(qū)這里,這樣才能讓你進(jìn)步快的同時(shí),還不會(huì)被問題打倒,可以繼續(xù)積累成就感了。

                學(xué)生做這個(gè)最方便了,工作之后,如果剛好遇上個(gè)黑心公司要你天天加班,你反而沒時(shí)間做學(xué)習(xí)區(qū)的內(nèi)容了,公司給你的肯定是舒適區(qū)的苦力活。

                說到這里,如果你還有時(shí)間練習(xí)的話,千萬不要去想:“我每一個(gè)程序都要跨平臺(tái)”,“我只做這個(gè)語言”等等。反正將來,語言你都要會(huì),平臺(tái)的差異你都要知道,為什么要斷送自己了解這些東西的機(jī)會(huì)呢?你真的以為不知道垃圾收集的原理,和一些底層的可以通過C++的練習(xí)而得到的的操作,你真的可以在某些關(guān)鍵時(shí)刻操縱好C#嗎?當(dāng)然有些人會(huì)覺得,我估計(jì)一輩子不會(huì)遇到這些問題的,所以我還是不管他了。人各有志嘛,C#不渡你,也是你自己的事情。如果你真的可以一輩子都在一個(gè)平臺(tái)上用一種語言做同一種程序做到退休,那真是幸福的生活啊。

                胡扯到這里也差不多了,這就是月經(jīng)貼,時(shí)不時(shí),總是要發(fā)一下的。
            posted @ 2012-07-14 10:15 BoyXiao 閱讀(111) | 評(píng)論 (0)編輯 收藏
                 MUILIB界面庫的界面設(shè)計(jì)編輯器近日已經(jīng)初步完成,并進(jìn)行了內(nèi)部測試,
            關(guān)于該界面設(shè)計(jì)編輯器的更詳細(xì)的功能介紹已經(jīng)更新到官方網(wǎng)站,對(duì)該編輯器
            感興趣的可以前往欣賞!
                本次網(wǎng)站的對(duì)相關(guān)內(nèi)容的更新相較前段時(shí)間貼出來的圖片更加詳細(xì),已經(jīng)
            細(xì)致的介紹了該軟件的主要功能模塊的截圖!
            posted @ 2012-07-14 10:15 BoyXiao 閱讀(109) | 評(píng)論 (0)編輯 收藏

            多年來一直占據(jù)主導(dǎo)地位的集中式IT功能,如今正承受著來自云計(jì)算、企業(yè)消費(fèi)級(jí)移動(dòng)設(shè)備以及大數(shù)據(jù)分析業(yè)務(wù)等多種全新技術(shù)趨勢(shì)的強(qiáng)力沖擊。根據(jù)《經(jīng)濟(jì)學(xué)家》雜志的報(bào)道,隨著這些新趨勢(shì)對(duì)固有IT結(jié)構(gòu)造成的不斷削弱,CIO與他們的團(tuán)隊(duì)必須更好地迎合企業(yè)業(yè)務(wù)需求,否則將很難在瞬息萬變的市場中安然立足——正所謂不在進(jìn)取中爆發(fā),就在沉默中滅亡。

            幾十年來,企業(yè)一直對(duì)集中式IT功能信任有加,希望其能在控制技術(shù)基礎(chǔ)設(shè)施的同時(shí),為企業(yè)各部門及員工提供服務(wù)。如今,以云計(jì)算、企業(yè)消費(fèi)級(jí)移動(dòng)設(shè)備以及大數(shù)據(jù)分析為代表的新型技術(shù)已經(jīng)粉墨登場,并大有顛覆現(xiàn)有游戲規(guī)則的趨勢(shì)。CIO及其手中掌握的IT服務(wù)機(jī)制必須適時(shí)做出轉(zhuǎn)型,否則必將被吞沒在歷史的洪流當(dāng)中。

            根據(jù)一份名為《高管層向IT發(fā)起挑戰(zhàn):來自商業(yè)價(jià)值的新預(yù)期》的最新報(bào)告稱(由戴爾服務(wù)部門贊助,經(jīng)濟(jì)學(xué)家信息部撰寫),企業(yè)高管層紛紛表示IT部門應(yīng)該為即將到來的重大轉(zhuǎn)型做好準(zhǔn)備:在536位受訪高管中,57%的管理者認(rèn)為在未來三年內(nèi)IT部門的核心職能將發(fā)生顯著改變;12%的受訪者則認(rèn)為IT職能會(huì)發(fā)生“徹底改變”。另外,43%的受訪者指出企業(yè)會(huì)根據(jù)自身需求購買額外的IT服務(wù)。
             

             

            經(jīng)濟(jì)學(xué)家信息部在報(bào)告中指出,受訪高管們所討論的這種變化趨勢(shì)不僅會(huì)給IT部門的職能帶來革命,更會(huì)顛覆性地影響整套業(yè)務(wù),并最終在開發(fā)創(chuàng)新型產(chǎn)品及服務(wù)、打造新的客戶交流通道以及反思傳統(tǒng)業(yè)務(wù)流程等方面給企業(yè)帶來前所未有的機(jī)遇。在山雨欲來的壓力之下,CIO及其技術(shù)團(tuán)隊(duì)所面臨的既是不成功便成仁的挑戰(zhàn)、也是涅槃重生的良機(jī)。

            “當(dāng)一切準(zhǔn)備就緒時(shí),傳統(tǒng)CIO所代表的‘純技術(shù)職位’將不復(fù)存在,”Hord Tipton告訴我們。他在2002年到2007年間曾擔(dān)任美國內(nèi)政部CIO,目前則在安全教育及認(rèn)證機(jī)構(gòu)(簡稱ISC)負(fù)責(zé)管理工作。“現(xiàn)在,IT已經(jīng)成為業(yè)務(wù)中的重要組成部分,可以說沒人能在缺乏IT支持的情況下讓業(yè)務(wù)流程正常運(yùn)轉(zhuǎn)。”

            CIO必須懂得使用商務(wù)語言

            雖然IT可能會(huì)逐漸轉(zhuǎn)型為業(yè)務(wù)的核心組成部分,但如果不能找到合適的辦法迎合企業(yè)高管層在交流方式及投資價(jià)值方面的需求,CIO及其團(tuán)隊(duì)仍然很可能慘遭淘汰。報(bào)告發(fā)現(xiàn),CIO與企業(yè)高管在技術(shù)與業(yè)務(wù)的結(jié)合效果方面看法并不一致:三分之二的受訪CIO認(rèn)為他們的技術(shù)職能已經(jīng)與業(yè)務(wù)流程融合妥當(dāng),但只有不到一半的企業(yè)高管認(rèn)同這一結(jié)論。值得注意的是,僅僅46%的企業(yè)高管表示他們的CIO能夠理解業(yè)務(wù)部門的實(shí)際需求,44%的受訪者指出他們的CIO能夠發(fā)現(xiàn)IT發(fā)展新趨勢(shì)中所蘊(yùn)含的技術(shù)風(fēng)險(xiǎn)。

            “在理想狀況下,企業(yè)高管應(yīng)該充分依賴CIO在工作匯報(bào)中對(duì)于現(xiàn)階段情況的總結(jié),并支持技術(shù)部門以新的方式利用IT,以解決技術(shù)與業(yè)務(wù)協(xié)作中可能存在的風(fēng)險(xiǎn),”報(bào)告指出。“然而只有不到一半的受訪管理者認(rèn)為他們的CIO充分理解了這一任務(wù);而將近四分之一的受訪者干脆表示CIO們的表現(xiàn)很令人失望。我們可以基本認(rèn)定,在如何將IT投資最大程度轉(zhuǎn)化為經(jīng)濟(jì)利益方面,CIO與企業(yè)高管層之間仍然存在較大的觀念分歧。”

            與此同時(shí),CIO們突然發(fā)現(xiàn)自己已經(jīng)在某種情況下不知不覺受到排擠。在調(diào)查中研究人員發(fā)現(xiàn),大約六分之一的受訪CIO僅僅擁有“咨詢”的權(quán)利,他們根本無法參與到企業(yè)IT戰(zhàn)略的制定工作當(dāng)中,也就是說他們?cè)谧约好刻焖裱陌l(fā)展戰(zhàn)略中竟然毫無發(fā)言權(quán)。該報(bào)告還發(fā)現(xiàn),即使CIO能夠加入到戰(zhàn)略決策的討論中來,往往也只能扮演“技術(shù)后臺(tái)”的角色,跟創(chuàng)收等核心內(nèi)容完全無關(guān)。只有約三分之一的受訪者認(rèn)為CIO應(yīng)該在發(fā)掘潛在客戶或者開發(fā)產(chǎn)品及服務(wù)等方面發(fā)揮關(guān)鍵性甚至主導(dǎo)性作用。

            CIO在IT戰(zhàn)略中表現(xiàn)越積極,企業(yè)整體業(yè)績就越出色

            雖然整體形勢(shì)不容樂觀,但最后一項(xiàng)統(tǒng)計(jì)數(shù)據(jù)給了決心扭轉(zhuǎn)被動(dòng)局面的CIO們一線希望。相對(duì)于將CIO們直接打入冷宮的做法,讓技術(shù)領(lǐng)導(dǎo)者加入戰(zhàn)略制定的企業(yè)的確在財(cái)務(wù)業(yè)績方面交出了超過前者的優(yōu)異答卷。在樂于讓CIO在業(yè)務(wù)戰(zhàn)略中發(fā)揮作用的37%受訪高管中,有47%的企業(yè)表現(xiàn)出傲視同儕的業(yè)績水準(zhǔn)。而另一方面,在20%禁止CIO參與經(jīng)營戰(zhàn)略制定的受訪者中,只有28%的企業(yè)能夠讓自己的運(yùn)營狀況超過平均水平。

            對(duì)于CIO們而言,熟練掌握商務(wù)語言是前瞻性思維的一種具體表現(xiàn)。只有不到一半的受訪者表示,他們將IT視為改善企業(yè)競爭優(yōu)勢(shì)的有效途徑。盡管仍然有許多企業(yè)僅僅把IT作為削減運(yùn)營成本(38%)或者提高業(yè)務(wù)執(zhí)行效率(42%)的輔助角色,但勇于將IT與拓展商務(wù)業(yè)績、增加運(yùn)營收入的企業(yè)往往發(fā)現(xiàn),IT職能所帶來的助益其實(shí)能夠在其它多個(gè)領(lǐng)域發(fā)揮重要作用。

            降低成本與增加營收之間并不存在矛盾

            “正所謂無利不起早,企業(yè)在從IT職能中發(fā)掘新的盈利途徑時(shí),表現(xiàn)得往往比利用IT開發(fā)新產(chǎn)品或培養(yǎng)新客戶群體時(shí)更積極,”報(bào)告總結(jié)道。“另外,企業(yè)也更樂于提升IT基礎(chǔ)設(shè)施的可靠性以及IT與業(yè)務(wù)之間的協(xié)作能力。令人驚訝的是,以營利為優(yōu)先考量的企業(yè)受訪者們?cè)趯?shí)際工作中會(huì)比那些以削減成本為主要目的的企業(yè)管理者更積極也更開明,可以說開源比節(jié)流更能調(diào)動(dòng)企業(yè)的整體活力。”

            舉例來說,Lowes公司前任CIO Steve Stone就曾指出,CIO應(yīng)該有能力把像Lowes公司這樣規(guī)模的零售業(yè)巨頭從技術(shù)挑戰(zhàn)中解救出來,并將此轉(zhuǎn)化為發(fā)展的機(jī)遇。2002年還在擔(dān)任CIO一職時(shí),他就制定了一系列基礎(chǔ)設(shè)施改進(jìn)戰(zhàn)略,希望能夠在任何情況下——包括通信系統(tǒng)被切斷時(shí)——保證設(shè)施運(yùn)轉(zhuǎn)的正常與順暢。但這一戰(zhàn)略的制定也帶來無數(shù)后續(xù)挑戰(zhàn),其中影響最大的就是每家店鋪的冗余基礎(chǔ)設(shè)施會(huì)給企業(yè)帶來沉重的更新與維護(hù)成本。面對(duì)這一局勢(shì),Stone果斷轉(zhuǎn)換思路,嘗試通過集中式數(shù)據(jù)中心代替分散各處的設(shè)施資源,如此一來不僅保證了數(shù)據(jù)的高度可用性,同時(shí)也令業(yè)務(wù)以更具時(shí)效性的方式運(yùn)轉(zhuǎn)。從另一方面來看,數(shù)據(jù)的集中管理使商務(wù)部門得以掌握大量第一手資源,并以此為基礎(chǔ)開發(fā)出能夠降低交付成本同時(shí)加速客戶獲得產(chǎn)品過程的新服務(wù)。

            “對(duì)于當(dāng)今的實(shí)體型零售產(chǎn)業(yè)而言,我們真正需要的是充分利用廣域網(wǎng)優(yōu)勢(shì)并精簡每家店鋪中所使用的生產(chǎn)技術(shù),頻繁折騰現(xiàn)場設(shè)施既不明智、也不劃算,”他總結(jié)道。

            與業(yè)務(wù)融合也要講策略

            報(bào)告中給出了三種實(shí)用性策略,CIO們可以以此為基礎(chǔ),創(chuàng)造出更多適合自己的業(yè)務(wù)融合方案。策略的具體內(nèi)容如下:

            • 將一部分預(yù)算與商務(wù)部門共同分享,這樣一來那些規(guī)劃IT預(yù)算的管理者們將能使自己的部門也在方案中受益。這不僅有助于降低純IT類運(yùn)營成本,更可以使IT與業(yè)務(wù)高效配合起來,畢竟沒人愿意為自己不需要的服務(wù)投入太多預(yù)算份額。除此之外,這種二者融為一體的策略也會(huì)讓IT投資帶來更多業(yè)務(wù)管理者想要的服務(wù)項(xiàng)目。

            • 從培養(yǎng)正確的企業(yè)文化出發(fā),讓IT團(tuán)隊(duì)能夠在業(yè)務(wù)發(fā)展中起到更重要的促進(jìn)作用,這也將從不同的角度激勵(lì)其他員工的工作干勁。

            • 如果大家認(rèn)為某些IT項(xiàng)目能夠建立起理想的知識(shí)或技能儲(chǔ)備,那么在大規(guī)模投入資金之前,先做些局部實(shí)驗(yàn)性工作。盡管從短期來看試點(diǎn)會(huì)增加一部分技術(shù)投入,但過程中培養(yǎng)出的骨干人才會(huì)為企業(yè)在今后的發(fā)展道路上立下更多顯赫的功勞。

            除了上述策略外,報(bào)告還提供了一些值得企業(yè)管理者認(rèn)真考量的建議:

            • 解放思想。技術(shù)創(chuàng)新所改變的絕不僅僅是企業(yè)的IT職能,它所帶來的很可能是商務(wù)運(yùn)作方式的根本性轉(zhuǎn)變。我們應(yīng)該以更寬泛的角度看待創(chuàng)新中蘊(yùn)藏的潛在影響,發(fā)現(xiàn)IT職能之外那些更深遠(yuǎn)的業(yè)務(wù)走勢(shì)。

            • 勇于讓CIO掌權(quán)。將IT基礎(chǔ)設(shè)施視為一種商品的做法,確實(shí)能夠減少企業(yè)IT部門的規(guī)模及影響范疇,但絕不應(yīng)該因此而限制CIO角色的作用。對(duì)于大多數(shù)高層管理者而言,應(yīng)該將CIO從純技術(shù)領(lǐng)域解放出來,使其實(shí)現(xiàn)更多商務(wù)價(jià)值。

            • 不要將IT職能與其它部門完全隔離。多數(shù)在云計(jì)算、移動(dòng)設(shè)備擴(kuò)展以及大數(shù)據(jù)分析等新型技術(shù)的沖擊下仍能從容應(yīng)對(duì)甚至借勢(shì)為己用的優(yōu)秀企業(yè),其成功的法門主要在于適應(yīng)變化的高超能力。這種能力除了幫助部門緊跟時(shí)代發(fā)展的腳步,更能讓技術(shù)與業(yè)務(wù)需求完美契合起來。

            • 重新審視企業(yè)制定的投資分配方案。不要以為IT投資就一定意味著在降低成本與增加收入之間做出權(quán)衡。隨著時(shí)代的發(fā)展,越來越多的企業(yè)發(fā)現(xiàn)二者其實(shí)并不矛盾。

            • 風(fēng)險(xiǎn)只是種潛在的可能性,不要因噎廢食。隨著云計(jì)算、移動(dòng)設(shè)備擴(kuò)展以及大數(shù)據(jù)分析等技術(shù)的普及,很多企業(yè)對(duì)這些領(lǐng)域的相關(guān)風(fēng)險(xiǎn)逐漸重視起來。不過請(qǐng)記住,風(fēng)險(xiǎn)只是種潛在的可能性,不要因噎廢食。我們完全可以通過成熟的機(jī)制識(shí)別、評(píng)估、管理并最終避免新技術(shù)所帶來的風(fēng)險(xiǎn),這與其它經(jīng)營項(xiàng)目中的風(fēng)險(xiǎn)并無不同,沒必要太過緊張。

            原文名:CIOs Need to Evolve or Be Left in the Dust
             

            【責(zé)任編輯:王勇 TEL:(010)68479336】

               
            posted @ 2012-07-14 10:15 BoyXiao 閱讀(120) | 評(píng)論 (0)編輯 收藏

            攸關(guān)政府資安設(shè)備採購的臺(tái)銀共同供應(yīng)契約網(wǎng)路及資訊安全設(shè)備類(LP5-990074),自從去年新制訂出「加值服務(wù)選項(xiàng)」規(guī)格,要求必須通過資訊安全產(chǎn)品評(píng)估之共同準(zhǔn)則(Common Criteria, CC)ISO/IEC 15408定義之評(píng)估保證等級(jí)(EAL)檢測認(rèn)證之產(chǎn)品可被採購勾選。公告一出,對(duì)臺(tái)灣資安設(shè)備市場造成不小衝擊。而NCC經(jīng)過一年努力推動(dòng)臺(tái)灣版資通設(shè)備安全檢測認(rèn)證,並期望在今年7月臺(tái)銀換約時(shí)也被納入加值服務(wù)選項(xiàng)認(rèn)可中,但目前看來仍有變數(shù)。

             

            去年臺(tái)銀祭出這項(xiàng)公告,首波是在入侵偵測防禦系統(tǒng)、防火牆與防毒閘道器等三類產(chǎn)品的採購案中。據(jù)臺(tái)銀統(tǒng)計(jì),自去年公告至今年4月為止,在這三類的產(chǎn)品採購案中,有近半數(shù)的採購案均勾選需要此加值服務(wù)選項(xiàng)功能。

             

            而有無加值服務(wù)功能最大的差別就是反映在售價(jià)上。以1Gbps吞吐量的防火牆來說,含加值服務(wù)功能的產(chǎn)品售價(jià)約比不含此功能的產(chǎn)品高出5倍,而以500Mbps的入侵偵測防禦系統(tǒng)來說,也有2倍的價(jià)差。

             

            由於目前取得CC認(rèn)證以外商品牌居多,因此市場上呈現(xiàn)幾家歡樂幾家愁現(xiàn)象。在國外政府標(biāo)案市場中,常見資安設(shè)備以國土安全為由,被設(shè)定採購門檻,外商需要配合該國各種規(guī)定才有機(jī)會(huì)得標(biāo)。本土廠商認(rèn)為此次臺(tái)灣政府不扶植本土業(yè)者就罷了,臺(tái)銀此舉將本土品牌屏除在這些加值選項(xiàng)之外,將不利國內(nèi)資安產(chǎn)業(yè)的發(fā)展。

             

            通傳會(huì)NCC所推動(dòng)的臺(tái)灣版CC認(rèn)證,其包含書面審查與實(shí)機(jī)檢測兩部分,目前已制定出8類資通設(shè)備安全檢測技術(shù)規(guī)範(fàn)(網(wǎng)路型防火牆等8類IS0008~IS0015),而國外CC認(rèn)證只包含書面審查。然而自去年NCC開始舉辦檢測說明會(huì),迄今本土廠商投入準(zhǔn)備此認(rèn)證的廠商卻不多,有業(yè)者認(rèn)為此認(rèn)證目前尚未被臺(tái)銀共同供應(yīng)契約認(rèn)可,耗費(fèi)金錢、人力資源投入也未必看得到結(jié)果,目前先觀望。

             

            臺(tái)銀委託二科表示,此認(rèn)證能否暨CC之後,也被納入加值服務(wù)選項(xiàng),目前仍在研議中,將視取得認(rèn)證通過的家數(shù)來衡量。NCC技術(shù)管理處羅金賢副處長指出,近期將與臺(tái)銀協(xié)調(diào),請(qǐng)臺(tái)銀支持政府政策,將技術(shù)規(guī)範(fàn)納入加值服務(wù)選項(xiàng)當(dāng)中。

            posted @ 2012-07-14 10:13 BoyXiao 閱讀(142) | 評(píng)論 (0)編輯 收藏

            Linq to xml 這個(gè)東西出來好多年了,但一直沒有機(jī)會(huì)在項(xiàng)目中用到,前段時(shí)間,終于項(xiàng)目中一些地方需要用到xml作為數(shù)據(jù)源,于是就體驗(yàn)了一把這個(gè),感覺還挺不錯(cuò)的,今天在此小結(jié)一下.

                   首先我們來模擬一下一個(gè)真實(shí)的業(yè)務(wù)場景:在這里我們需要展示一個(gè)火車站上各個(gè)站臺(tái)上面燈光開關(guān)狀態(tài).假設(shè)每個(gè)站臺(tái)一共6個(gè)開關(guān),站臺(tái)我們用Station節(jié)點(diǎn)表示,站臺(tái)開關(guān)我們用SwitchNo來表示,在初始化(即默認(rèn)狀態(tài))的時(shí)候,我們需要表示成第一個(gè)站臺(tái)2個(gè)開關(guān)開著,第二個(gè)站臺(tái)3個(gè)開關(guān)開著,第三個(gè)站臺(tái)4個(gè)開關(guān)開著….

                那么我們可能需要的一個(gè)xml文件格式可能就是如下這個(gè)樣子: 

            <?xml version="1.0" encoding="utf-8"?>
            <Stations>
              <Station Id="1">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">0</SwitchNo>
                <SwitchNo Id="4">0</SwitchNo>
                <SwitchNo Id="5">0</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="2">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">0</SwitchNo>
                <SwitchNo Id="5">0</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="3">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">0</SwitchNo>
                <SwitchNo Id="5">0</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="4">
                <SwitchNo Id="1">0</SwitchNo>
                <SwitchNo Id="2">0</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">1</SwitchNo>
                <SwitchNo Id="5">0</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="5">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">1</SwitchNo>
                <SwitchNo Id="5">1</SwitchNo>
                <SwitchNo Id="6">0</SwitchNo>
              </Station>
              <Station Id="6">
                <SwitchNo Id="1">1</SwitchNo>
                <SwitchNo Id="2">1</SwitchNo>
                <SwitchNo Id="3">1</SwitchNo>
                <SwitchNo Id="4">1</SwitchNo>
                <SwitchNo Id="5">1</SwitchNo>
                <SwitchNo Id="6">1</SwitchNo>
              </Station>
            </Stations>

             

            下面我們就從xml數(shù)據(jù)的創(chuàng)建/查詢/修改這三個(gè)方面簡單談一下吧.關(guān)于概念啥的就不啰嗦了,直接上代買吧.

            1. 創(chuàng)建這個(gè)文件

            /// <summary>
                    /// 創(chuàng)建xml文件
                    /// </summary>
                    private void writeStationXmlData()
                    {            
                        string fileName = Path.Combine(dataPath, "StationWitch.xml");
            
                        if (!Directory.Exists(dataPath))
                            Directory.CreateDirectory(dataPath);
            
                        if (File.Exists(fileName))
                            return;
            
                        var stationEleList = new List<XElement>();  //臨時(shí)緩存每個(gè)站臺(tái)節(jié)點(diǎn)
            
                        //一共6個(gè)站臺(tái),循環(huán)創(chuàng)建           
                        for (int i = 1; i < 7; i++)
                        {
                            var xAttr = new XAttribute("Id", i);
            
                            //臨時(shí)緩存每個(gè)每個(gè)站臺(tái)下的開關(guān)狀態(tài)
                            var childList = new List<XElement>();       
                            for (int j = 1; j < 7; j++)
                            {
                                childList.Add(new XElement("SwitchNo", new XAttribute("Id", j), i >= j ? 1 : 0));
                            }
            
                            //構(gòu)建一個(gè)站臺(tái)節(jié)點(diǎn)
                            var stationEle = new XElement("Station", xAttr, childList.ToArray());
                            stationEleList.Add(stationEle);
                        }
            
                        //構(gòu)建Stations節(jié)點(diǎn)
                        XElement xBody = new XElement("Stations", stationEleList.ToArray());
            
                        //構(gòu)建整個(gè)文檔
                        XDocument doc = new XDocument(
                                new XDeclaration("1.0", "utf-8", "yes"), xBody);
                        doc.Save(fileName);
                    }

            2. 讀取當(dāng)前xml 文件并轉(zhuǎn)化為友好的類型

            /// <summary>
                    /// 查詢讀取每個(gè)站臺(tái)的開關(guān)狀態(tài)并轉(zhuǎn)化為keyValue鍵值對(duì)
                    /// </summary>
                    /// <returns></returns>
                    public IList<KeyValue<int, int>> GetStationLightData()
                    {
                        writeStationXmlData();
                        if (stationLightData == null)
                        {
                            stationLightData = new List<KeyValue<int, int>>();
                            stationSwitchStatus = new List<KeyValue<int, bool>>();                
            
                            //加載xml
                            string fileName = Path.Combine(dataPath, "StationWitch.xml");
                            XElement doc = XElement.Load(fileName);
            
                            //讀取站臺(tái)列表
                            var station = from s in doc.Descendants("Station")
                                          select s;
                            //遍歷站臺(tái)
                            foreach (var st in station)
                            {
                                //獲取每個(gè)站臺(tái)的開關(guān)集合 即SwitchNo節(jié)點(diǎn)
                                var st_switchs = st.Elements("SwitchNo");
                                var stationId = int.Parse(st.Attribute("Id").Value);
                                int light = 0;
                                foreach (var sw in st_switchs)
                                {
                                    var swithNo = int.Parse(sw.Attribute("Id").Value);
                                    bool isOn = sw.Value == "1";
                                    if (isOn)
                                        light += 20;
                                    stationSwitchStatus.Add(new KeyValue<int, bool>(stationId, isOn, swithNo));
                                }
                                stationLightData.Add(new KeyValue<int, int>(stationId, light));
                            }
                        }
                        return stationLightData;
                    }

            3.更新節(jié)點(diǎn)值(先查詢找到指定的節(jié)點(diǎn) 在更新后保存)

             /// <summary>
                    /// 更新制定站臺(tái)中的指定開關(guān)的狀態(tài),即更新制定Station->SwitchNo節(jié)點(diǎn)下值
                    /// </summary>
                    /// <param name="station"></param>
                    /// <param name="switchNo"></param>
                    /// <param name="isOn"></param>
                    public void UpdateStationSwitchStatus(int station, int switchNo, bool isOn)
                    {
                        string fileName = Path.Combine(dataPath, "StationWitch.xml");
                        //讀取數(shù)據(jù)
                        XElement doc = XElement.Load(fileName);
                        var up_station = doc.Descendants("Station")
                            .Where(o => o.Attribute("Id").Value == station.ToString()).FirstOrDefault();
            
                        //找出指定的節(jié)點(diǎn)
                        var upSwitch = up_station.Elements("SwitchNo").FirstOrDefault(o => o.Attribute("Id").Value == switchNo.ToString());
            
                        //更新
                        if (upSwitch != null)
                        {
                            upSwitch.Value = isOn ? "1" : "0";
                        }
            
                        //保存為文件
                        lock (sync)
                        {
                            doc.Save(fileName);
                        }
                    }

            至此,xml的常規(guī)操作就介紹完了,希望能對(duì)有需要的同學(xué)有所幫助.

            posted @ 2012-07-14 10:10 BoyXiao 閱讀(132) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題
            共2頁: 1 2 

            導(dǎo)航

            留言簿(43)

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久久亚洲精品蜜桃臀| 中文字幕久久亚洲一区| 久久久久久久波多野结衣高潮 | 超级碰碰碰碰97久久久久| 浪潮AV色综合久久天堂| 国产精品熟女福利久久AV| 波多野结衣久久| 久久精品国产亚洲av瑜伽| 人人狠狠综合久久88成人| 久久精品国产精品亚洲人人| 中文字幕日本人妻久久久免费| 99久久夜色精品国产网站| 嫩草伊人久久精品少妇AV| 久久亚洲精品无码播放| 亚洲AV乱码久久精品蜜桃| 亚洲成av人片不卡无码久久| 97精品国产97久久久久久免费| 国产69精品久久久久9999APGF| 久久九色综合九色99伊人| 色综合久久天天综合| 久久亚洲中文字幕精品有坂深雪 | 色婷婷综合久久久中文字幕| 国产精品永久久久久久久久久| 丰满少妇人妻久久久久久| 亚洲国产精品无码久久一区二区| 久久国产香蕉视频| 国内精品久久久久久中文字幕 | 免费一级做a爰片久久毛片潮 | 成人a毛片久久免费播放| 久久综合亚洲欧美成人| 久久综合久久自在自线精品自 | 欧美国产精品久久高清| 国产免费久久精品丫丫| 久久99精品国产麻豆婷婷| 色综合久久精品中文字幕首页| 成人妇女免费播放久久久| 成人久久久观看免费毛片| 国内精品久久久久久野外| 四虎国产永久免费久久| 日本一区精品久久久久影院|