• <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 - 夢想的天空

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

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

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

             

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

            “當一切準備就緒時,傳統CIO所代表的‘純技術職位’將不復存在,”Hord Tipton告訴我們。他在2002年到2007年間曾擔任美國內政部CIO,目前則在安全教育及認證機構(簡稱ISC)負責管理工作。“現在,IT已經成為業務中的重要組成部分,可以說沒人能在缺乏IT支持的情況下讓業務流程正常運轉。”

            CIO必須懂得使用商務語言

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

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

            與此同時,CIO們突然發現自己已經在某種情況下不知不覺受到排擠。在調查中研究人員發現,大約六分之一的受訪CIO僅僅擁有“咨詢”的權利,他們根本無法參與到企業IT戰略的制定工作當中,也就是說他們在自己每天所要遵循的發展戰略中竟然毫無發言權。該報告還發現,即使CIO能夠加入到戰略決策的討論中來,往往也只能扮演“技術后臺”的角色,跟創收等核心內容完全無關。只有約三分之一的受訪者認為CIO應該在發掘潛在客戶或者開發產品及服務等方面發揮關鍵性甚至主導性作用。

            CIO在IT戰略中表現越積極,企業整體業績就越出色

            雖然整體形勢不容樂觀,但最后一項統計數據給了決心扭轉被動局面的CIO們一線希望。相對于將CIO們直接打入冷宮的做法,讓技術領導者加入戰略制定的企業的確在財務業績方面交出了超過前者的優異答卷。在樂于讓CIO在業務戰略中發揮作用的37%受訪高管中,有47%的企業表現出傲視同儕的業績水準。而另一方面,在20%禁止CIO參與經營戰略制定的受訪者中,只有28%的企業能夠讓自己的運營狀況超過平均水平。

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

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

            “正所謂無利不起早,企業在從IT職能中發掘新的盈利途徑時,表現得往往比利用IT開發新產品或培養新客戶群體時更積極,”報告總結道。“另外,企業也更樂于提升IT基礎設施的可靠性以及IT與業務之間的協作能力。令人驚訝的是,以營利為優先考量的企業受訪者們在實際工作中會比那些以削減成本為主要目的的企業管理者更積極也更開明,可以說開源比節流更能調動企業的整體活力。”

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

            “對于當今的實體型零售產業而言,我們真正需要的是充分利用廣域網優勢并精簡每家店鋪中所使用的生產技術,頻繁折騰現場設施既不明智、也不劃算,”他總結道。

            與業務融合也要講策略

            報告中給出了三種實用性策略,CIO們可以以此為基礎,創造出更多適合自己的業務融合方案。策略的具體內容如下:

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

            • 從培養正確的企業文化出發,讓IT團隊能夠在業務發展中起到更重要的促進作用,這也將從不同的角度激勵其他員工的工作干勁。

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

            除了上述策略外,報告還提供了一些值得企業管理者認真考量的建議:

            • 解放思想。技術創新所改變的絕不僅僅是企業的IT職能,它所帶來的很可能是商務運作方式的根本性轉變。我們應該以更寬泛的角度看待創新中蘊藏的潛在影響,發現IT職能之外那些更深遠的業務走勢。

            • 勇于讓CIO掌權。將IT基礎設施視為一種商品的做法,確實能夠減少企業IT部門的規模及影響范疇,但絕不應該因此而限制CIO角色的作用。對于大多數高層管理者而言,應該將CIO從純技術領域解放出來,使其實現更多商務價值。

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

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

            • 風險只是種潛在的可能性,不要因噎廢食。隨著云計算、移動設備擴展以及大數據分析等技術的普及,很多企業對這些領域的相關風險逐漸重視起來。不過請記住,風險只是種潛在的可能性,不要因噎廢食。我們完全可以通過成熟的機制識別、評估、管理并最終避免新技術所帶來的風險,這與其它經營項目中的風險并無不同,沒必要太過緊張。

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

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

               
            posted @ 2012-07-14 10:15 BoyXiao 閱讀(119) | 評論 (0)編輯 收藏
                 MUILIB界面庫的界面設計編輯器近日已經初步完成,并進行了內部測試,
            關于該界面設計編輯器的更詳細的功能介紹已經更新到官方網站,對該編輯器
            感興趣的可以前往欣賞!
                本次網站的對相關內容的更新相較前段時間貼出來的圖片更加詳細,已經
            細致的介紹了該軟件的主要功能模塊的截圖!
            posted @ 2012-07-14 10:15 BoyXiao 閱讀(109) | 評論 (0)編輯 收藏
                博客光寫GacUI(http://www.gaclib.net/)的Demo更新也好無聊啊。所以今天先換換口味,胡扯點別的。

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

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

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

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

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

                在這之前,剛好MSR的Daan Leijen因為來北京參加programming language相關的conference,就來我們這里參觀了一下。后來我看他做過GUI,做過parser combinator,發明實現過語言,就前去搭訕,結果發現他讀書的時候的導師竟然是Erik Meijer。按照他的話說,“then we are connected”,如果說成中文,就是有緣分吧。接著就跟他討論了一些parser combinator和類型系統之類的東西。我說我之前也搞過這些東西,最后還貢獻了一部分給公司,換了個組之后還開了講座什么的。他講到他讀書的時候,也是學校沒教自己自學的這些東西,后來周圍也沒什么人做,但是并沒有讓他喪失動力。然后就說了一句話讓我印象很深刻:“原來你也做這些東西啊,我應該可以看到為什么你要從產品組跳到MSRA來了。”他直到今天,頭發都基本上掉光了,還在那里繼續研究programming language的東西,還給了我幾篇論文。我覺得很好,人就該像他那樣。

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

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

                當然,如果你不是一個喜歡寫代碼的人,那這個方法肯定沒有用,因為中途放棄什么的太多了。這種時候,只能怪你沒緣分,設計模式不渡你了。如果你最后撐下來了,雖然你自己覺得你也花費了相當的努力,但是別人反正是看不到你的努力的,就會開始覺得你有捷徑了。為什么呢?因為效率高啊,時間花得短啊。

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

                學生做這個最方便了,工作之后,如果剛好遇上個黑心公司要你天天加班,你反而沒時間做學習區的內容了,公司給你的肯定是舒適區的苦力活。

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

                胡扯到這里也差不多了,這就是月經貼,時不時,總是要發一下的。
            posted @ 2012-07-14 10:15 BoyXiao 閱讀(108) | 評論 (0)編輯 收藏

            美社會學家建議 Twitter 向中國微博學習

              社會學家特蕾西婭·王

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

              以下為文章摘要:

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

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

              答:特蕾西婭·王:我之前從沒想過要去找一份工作。我就讀于加州大學圣地亞哥分校,主修的是傳播學,畢業之后我在紐約市的低收入社區從事過幾年社區干事的工作,另外還從事過宣傳和普及教育的工作。我并沒有打算進入學術界,我一直以來都沒有這方面的興趣,尤其是大多數學術界那種封閉的氛圍不太吸引我。丹娜·博伊德(Danah Boyd)是第一位吸引了我的學者,因為她的工作看上去和外界息息相關。另外,她的個性也啟發了我,讓我意識到我需要具備一些額外的研究技巧,才能對我感興趣的領域具有一定影響力。所以,我又回到了加州大學圣地亞哥分校,繼續攻讀我的社會學博士學位。

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

              問:當你“在現場”的時候,你實際上在做什么?

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

              問:你在中國的研究開始之后,所關注的重點有沒有過變化?

              答:剛開始的時候,我專注的是外來務工人員,并花了很多時間泡在網吧里面,里面有很多人在上網、打游戲和看電影,但是不少人在網上找工作的時候卻吃住都在網吧。我對中國中產階級和上層階級使用科技的情況從來沒有感興趣過,因為我看不出來他們同美國的情況有什么區別。當我去年再次回到中國時,發現那里又發生了很多變化——現在年輕人都在頻繁使用社交媒體。人們開始使用類似于 Twitter 和 Facebook 這樣的手機應用,不過功能會有些不同。作為一個民族志學者,你很多時候沒有辦法選擇你所研究的對象,而且必須緊跟當下發生的事情。我對社交媒體的關注并不是刻意的,但現在卻成了我研究的焦點。

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

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

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

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

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

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

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

            Linq to xml 這個東西出來好多年了,但一直沒有機會在項目中用到,前段時間,終于項目中一些地方需要用到xml作為數據源,于是就體驗了一把這個,感覺還挺不錯的,今天在此小結一下.

                   首先我們來模擬一下一個真實的業務場景:在這里我們需要展示一個火車站上各個站臺上面燈光開關狀態.假設每個站臺一共6個開關,站臺我們用Station節點表示,站臺開關我們用SwitchNo來表示,在初始化(即默認狀態)的時候,我們需要表示成第一個站臺2個開關開著,第二個站臺3個開關開著,第三個站臺4個開關開著….

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

            <?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數據的創建/查詢/修改這三個方面簡單談一下吧.關于概念啥的就不啰嗦了,直接上代買吧.

            1. 創建這個文件

            /// <summary>
                    /// 創建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>();  //臨時緩存每個站臺節點
            
                        //一共6個站臺,循環創建           
                        for (int i = 1; i < 7; i++)
                        {
                            var xAttr = new XAttribute("Id", 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));
                            }
            
                            //構建一個站臺節點
                            var stationEle = new XElement("Station", xAttr, childList.ToArray());
                            stationEleList.Add(stationEle);
                        }
            
                        //構建Stations節點
                        XElement xBody = new XElement("Stations", stationEleList.ToArray());
            
                        //構建整個文檔
                        XDocument doc = new XDocument(
                                new XDeclaration("1.0", "utf-8", "yes"), xBody);
                        doc.Save(fileName);
                    }

            2. 讀取當前xml 文件并轉化為友好的類型

            /// <summary>
                    /// 查詢讀取每個站臺的開關狀態并轉化為keyValue鍵值對
                    /// </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);
            
                            //讀取站臺列表
                            var station = from s in doc.Descendants("Station")
                                          select s;
                            //遍歷站臺
                            foreach (var st in station)
                            {
                                //獲取每個站臺的開關集合 即SwitchNo節點
                                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.更新節點值(先查詢找到指定的節點 在更新后保存)

             /// <summary>
                    /// 更新制定站臺中的指定開關的狀態,即更新制定Station->SwitchNo節點下值
                    /// </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");
                        //讀取數據
                        XElement doc = XElement.Load(fileName);
                        var up_station = doc.Descendants("Station")
                            .Where(o => o.Attribute("Id").Value == station.ToString()).FirstOrDefault();
            
                        //找出指定的節點
                        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的常規操作就介紹完了,希望能對有需要的同學有所幫助.

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

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

             

            去年臺銀祭出這項公告,首波是在入侵偵測防禦系統、防火牆與防毒閘道器等三類產品的採購案中。據臺銀統計,自去年公告至今年4月為止,在這三類的產品採購案中,有近半數的採購案均勾選需要此加值服務選項功能。

             

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

             

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

             

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

             

            臺銀委託二科表示,此認證能否暨CC之後,也被納入加值服務選項,目前仍在研議中,將視取得認證通過的家數來衡量。NCC技術管理處羅金賢副處長指出,近期將與臺銀協調,請臺銀支持政府政策,將技術規範納入加值服務選項當中。

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

            Linq to xml 這個東西出來好多年了,但一直沒有機會在項目中用到,前段時間,終于項目中一些地方需要用到xml作為數據源,于是就體驗了一把這個,感覺還挺不錯的,今天在此小結一下.

                   首先我們來模擬一下一個真實的業務場景:在這里我們需要展示一個火車站上各個站臺上面燈光開關狀態.假設每個站臺一共6個開關,站臺我們用Station節點表示,站臺開關我們用SwitchNo來表示,在初始化(即默認狀態)的時候,我們需要表示成第一個站臺2個開關開著,第二個站臺3個開關開著,第三個站臺4個開關開著….

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

            <?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數據的創建/查詢/修改這三個方面簡單談一下吧.關于概念啥的就不啰嗦了,直接上代買吧.

            1. 創建這個文件

            /// <summary>
                    /// 創建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>();  //臨時緩存每個站臺節點
            
                        //一共6個站臺,循環創建           
                        for (int i = 1; i < 7; i++)
                        {
                            var xAttr = new XAttribute("Id", 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));
                            }
            
                            //構建一個站臺節點
                            var stationEle = new XElement("Station", xAttr, childList.ToArray());
                            stationEleList.Add(stationEle);
                        }
            
                        //構建Stations節點
                        XElement xBody = new XElement("Stations", stationEleList.ToArray());
            
                        //構建整個文檔
                        XDocument doc = new XDocument(
                                new XDeclaration("1.0", "utf-8", "yes"), xBody);
                        doc.Save(fileName);
                    }

            2. 讀取當前xml 文件并轉化為友好的類型

            /// <summary>
                    /// 查詢讀取每個站臺的開關狀態并轉化為keyValue鍵值對
                    /// </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);
            
                            //讀取站臺列表
                            var station = from s in doc.Descendants("Station")
                                          select s;
                            //遍歷站臺
                            foreach (var st in station)
                            {
                                //獲取每個站臺的開關集合 即SwitchNo節點
                                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.更新節點值(先查詢找到指定的節點 在更新后保存)

             /// <summary>
                    /// 更新制定站臺中的指定開關的狀態,即更新制定Station->SwitchNo節點下值
                    /// </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");
                        //讀取數據
                        XElement doc = XElement.Load(fileName);
                        var up_station = doc.Descendants("Station")
                            .Where(o => o.Attribute("Id").Value == station.ToString()).FirstOrDefault();
            
                        //找出指定的節點
                        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的常規操作就介紹完了,希望能對有需要的同學有所幫助.

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

            導航

            留言簿(43)

            最新評論

            閱讀排行榜

            評論排行榜

            国内精品伊人久久久久网站| 国产精品久久久久AV福利动漫 | av无码久久久久久不卡网站| 久久久婷婷五月亚洲97号色| 99久久精品费精品国产| 久久精品国产亚洲av麻豆图片| 久久国产一区二区| 国内高清久久久久久| 久久精品国产精品亚洲下载| 国产精品美女久久久久网| 日本人妻丰满熟妇久久久久久 | 色天使久久综合网天天| 精品久久综合1区2区3区激情| 亚洲欧美一级久久精品| 亚洲精品美女久久久久99小说 | 精品久久久久久国产牛牛app| 国产成人精品三上悠亚久久| 亚洲国产精品人久久| 亚洲中文字幕久久精品无码喷水| 国产精品午夜久久| 久久天天躁狠狠躁夜夜2020老熟妇 | 久久午夜电影网| 亚洲国产成人久久精品动漫| 一本一道久久a久久精品综合 | 久久综合九色综合97_久久久| 伊人久久大香线蕉av不变影院| 久久综合色之久久综合| 狠狠色丁香婷婷综合久久来来去 | 色偷偷88欧美精品久久久| 久久国产精品免费| 精品国产91久久久久久久| 无码人妻精品一区二区三区久久久| 伊人久久大香线蕉综合影院首页| 久久国产V一级毛多内射| 亚洲精品高清国产一久久| 国产高潮国产高潮久久久| 亚洲精品无码久久久影院相关影片| 国产精品久久久久免费a∨| 亚洲精品国产第一综合99久久| 日本久久久久亚洲中字幕| 精品伊人久久大线蕉色首页|