莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

              讀《Perl語言入門》(第四版,我買的書,網(wǎng)上有個翻譯質(zhì)量很高的電子版)的第10章的習題,人見人愛的猜數(shù)游戲,用perl寫出來大概這樣:
          $num=int (1 + rand 100);
          print "I have a number,guess it?:\n";
          while(<>)
          {
              
          chomp;
              
          next unless /\d+/;
              
          $_>$num? print "Too high\n" :
                  
          $_==$num? last :print "Too low\n"
          }
             題外話:玩Perl的高人們別鄙視我,我是perl新手啊,如果寫的不夠“perl”,多多指點。
            
             這段代碼轉(zhuǎn)成ruby,可以這樣寫:

          $num=1+(rand 100)
          puts 
          "I have a number guess it?"
          while(true)
             gets.chomp
             next unless 
          ~/\d+/
               $_.to_i
          >$num?begin print "Too high\n" end:
                 $_.to_i
          ==$num? begin break end:begin print "Too low\n" end
              
          end

              看出來了吧,兩者何其相似啊,包括perl里面人見人愛的$_,ruby也是支持的,唯一那么一點不同的地方就是last換成了break,然后是正則表達式左邊多了個~,你完全可以將這個符號去掉,不過會有警告,最后就是Ruby中的要執(zhí)行的表達式得放在begin...end里面,這一點讓我琢磨了一段時間,還以為Ruby不支持呢。讀《Perl語言入門》最大的樂趣除了妙趣橫生的語言、古靈精怪的符號之外,就是尋找Ruby中的Perl痕跡,哦哦,那個味道相當重——駱駝的味道。不過現(xiàn)在Ruby不鼓勵這樣的寫法,畢竟,程序是給人讀的,因此可以改寫一下:
          $num=1+(rand 100)
          puts "I have a number guess it?"
          while(true)
             guess
          =STDIN.gets
             next unless guess
          =~/\d+/
             
          if(guess.to_i>$num)
                puts 
          "Too high"
             elsif(guess.to_i
          ==$num)
                
          break
             
          else
                puts 
          "Too low"
             end
          end

          posted @ 2007-12-07 16:30 dennis 閱讀(2212) | 評論 (1)編輯 收藏

              先是讀《Programming in Lua》第9章講coroutine,然后去google coroutine,找到Simon Tatham寫的一篇coroutine in c,講怎么在C語言中實現(xiàn)coroutine,文中先ugly地基于棧實現(xiàn)了一個:
          int function(void) {
              
          static int i, state = 0;
              
          switch (state) {
                  
          case 0goto LABEL0;
                  
          case 1goto LABEL1;
              }
              LABEL0: 
          /* start of function */
              
          for (i = 0; i < 10; i++) {
                  state 
          = 1/* so we will come back to LABEL1 */
                  
          return i;
                  LABEL1:; 
          /* resume control straight after the return */
              }
          }

          這個方法簡單,但是相當丑陋,你必須手工維護這些標簽。然后提到了Duff's Device技巧:
          switch (count % 8) {
                  
          case 0:        do {  *to = *from++;
                  
          case 7:              *to = *from++;
                  
          case 6:              *to = *from++;
                  
          case 5:              *to = *from++;
                  
          case 4:              *to = *from++;
                  
          case 3:              *to = *from++;
                  
          case 2:              *to = *from++;
                  
          case 1:              *to = *from++;
                                 } 
          while ((count -= 8> 0);
              }

          這段代碼能編譯通過嗎?能的,不信你試試,這是一段用于拷貝數(shù)組的代碼,我們一般拷貝數(shù)組是這樣做的:
          send(to, from, count)
                  register 
          short *to, *from;
                  register count;
                  {
                          
          do
                                  
          *to = *from++;
                          
          while(--count>0);
                  }
          如果循環(huán)的中的操作足夠快,那么其實大部分時間都是浪費在判斷循環(huán)條件上面的,而通過Duff's Device通過switch語句將要進行的連續(xù)循環(huán)操作的次數(shù)進行了預判(根據(jù)擦case語句的位置)然后依次執(zhí)行,而不必每次都去進 行測試條件,從而加速循環(huán)。這個技巧怎么應用于實現(xiàn)更優(yōu)雅的coroutine呢?看代碼

          int function(void) {
              
          static int i, state = 0;
              
          switch (state) {
                  
          case 0/* start of function */
                  
          for (i = 0; i < 10; i++) {
                      state 
          = 1/* so we will come back to "case 1" */
                      
          return i;
                      
          case 1:; /* resume control straight after the return */
                  }
              }
          }
          更好的方式是使用宏:
          #define crBegin static int state=0; switch(state) { case 0:
          #define crReturn(i,x) do { state=i; return x; case i:; } while (0)
          #define crFinish }
          int function(void) {
              
          static int i;
              crBegin;
              
          for (i = 0; i < 10; i++)
                  crReturn(
          1, i);
              crFinish;
          }



          posted @ 2007-11-29 18:17 dennis 閱讀(1185) | 評論 (0)編輯 收藏

          1.起點,經(jīng)典hello world:

          print("Hello World")

          這與大多數(shù)腳本語言沒什么兩樣,總體來說如果你對JavaScript、Ruby、Python之類有所學習的話,LUA還是相當簡單的

          2.函數(shù)定義,類似JS,用begin end代替大括號:

          function fact (n)

              if n == 0 then

                 return 1

              else

                 return n * fact(n-1)

              end

          end


          function其實就是lambda算子.

          3.  8種基本類型:
          nilbooleannumberstringuserdatafunctionthreadtable

          boolean類型除了false和nil是false之外,其他都是true
          lua支持函數(shù)式編程,因此函數(shù)是一等公民,userdata用于存儲C語言的數(shù)據(jù),待深入。thread與多線程編程有關。table是lua的基本數(shù)據(jù)結(jié)構(gòu),是array和hash的綜合體,比較奇怪的是默認索引從1開始,而不是通常的0。看例子:

          days = {"Sunday", "Monday", "Tuesday", "Wednesday",

                        "Thursday", "Friday", "Saturday"}

          w = {x=0, y=0, label="console"}


          4. lua與ruby一樣支持多重賦值和函數(shù)可以返回多個值,常見控制結(jié)構(gòu)沒有什么好說的。

          5.可變參數(shù),lua有很濃重的C味道,可變參數(shù)也與C一樣,用...表示:
          function g (a, b, ...) ... end

          也可以通過表來傳遞命名參數(shù):

          rename{old="temp.lua", new="temp1.lua"}


          6.局部變量的聲明 local i=0,僅在聲明的代碼塊內(nèi)有效。如果沒有聲明為local,將自動成為全局變量,一個變量在賦值前是nil,通過將變量聲明為nil可以刪除該變量

          7.LUA是有尾遞歸優(yōu)化的,也提供了各種高階函數(shù)以及閉包等等特性。

          8.loadstring函數(shù),一般其他解釋語言中的eval函數(shù)相似,不過他是返回一個chunk(每個chunk都是匿名函數(shù))讓你執(zhí)行,比如

          f = loadstring("local a = 10; return a + 20")

          print(f())        --> 30

          也可以通過loadfile將整個文件載入作為chunk。

          9.require,用于加載文件,會搜索環(huán)境變量LUA_PATH設定的路徑,同時能判斷文件是否已經(jīng)加載來避免重復加載。比較奇特的是路徑的設置,與一般的路徑完全不同,其實就是用?當占位符,然后require filename的時候,用filename代替這些文號,比如:

          ?;?.lua;c:\windows\?;/usr/local/lua/?/?.lua

          當你require 'lili'的時候,就會尋找下列路徑的文件:

          lili

          lili.lua

          c:\windows\lili

          /usr/local/lua/lili/lili.lua


          10.lua通過loadlib函數(shù)可以加載動態(tài)鏈接庫

          11.pcall在保護模式(protected mode)下執(zhí)行函數(shù)內(nèi)容,同時捕獲所有的異常和錯誤。若一切正常,pcall返回true以及“被執(zhí)行函數(shù)”的返回值;否則返回nil和錯誤信息。

          12.

          posted @ 2007-11-29 16:05 dennis 閱讀(2566) | 評論 (0)編輯 收藏

              客戶要求從Internet上的網(wǎng)頁上抽取一定的數(shù)據(jù),用來顯示或者其他用戶,這個需求很常見。這兩天我們也遇到了這個需求,本來我一開始想是試用正則表達式去匹配需要的文本數(shù)據(jù),后來經(jīng)驗豐富的經(jīng)理給出了一個更好的思路,就是使用jtidy將不符合xhtml的HTML文件轉(zhuǎn)化成標準的xhtml文件——本質(zhì)上就是XML文件,然后利用xsl抽取并轉(zhuǎn)換成我們所需要的數(shù)據(jù)的一定格式的xml文件。這樣做其實就是將XSL模板當正則表達式來用,不過更清晰,當網(wǎng)頁改變時也不需要重新編譯代碼,僅僅修改XSL模板就夠了。過程如下:
               html->xhtml--xsl-->數(shù)據(jù)xml

              做的過程中,初次使用了xsl,xpath等技術(shù),網(wǎng)上找了不少好資料,共享下:
          jtidy: 

          思路來源
          http://www.ibm.com/developerworks/cn/xml/x-wbdm/

          項目地址
          http://jtidy.sourceforge.net/

          參考,解決中文問題使用
          http://www.aygfsteel.com/jhengfei/archive/2006/03/25/37312.html

          xsl,非常系統(tǒng)教程和實踐:

          http://www.cnblogs.com/goody9807/category/36016.html

          xpath:

          http://www.yesky.com/201/171201.shtml


          posted @ 2007-11-22 12:35 dennis 閱讀(1158) | 評論 (1)編輯 收藏

              《人工智能的未來》的作者是Jeff Hawkins,也就是著名的PalmPilot掌上電腦和Treo智能電話的發(fā)明人,這牛人從小就對人工智能充滿興趣并孜孜追求,哪怕從事軟件業(yè)也是為了自己的理想。就書的內(nèi)容來說,很有意思。作者先批判了傳統(tǒng)的人工智能的發(fā)展方向,并且斷定傳統(tǒng)的人工智能永遠沒辦法造出能夠與人腦相媲美的智能機器。因為想要真正地了解智能是什么,只有去研究人腦的智能,而不能單純地依靠程序和數(shù)學。
              接下來,Jeff Hawkins系統(tǒng)地探討了自己對于新大腦皮層的理論,也就是他所宣稱的智能理論。所謂智能,其實就是新大腦皮層基于記憶-預測系統(tǒng)的系統(tǒng)體系。新大腦皮層由層次性的神經(jīng)元組成,由人類在成長生活過程中不斷記憶強化的各種“恒定表征”,以及由此對輸入產(chǎn)生從上而下的預測。這樣說太抽象,舉個例子,你看著某個人的眼睛,這些信息通過你的眼睛感官上傳到大腦皮層,由下而上,細節(jié)構(gòu)成整體,過去的記憶形成的關于|“眼睛”的模式讓你知道你看到的是眼睛。這個過程不是單向的,同時,你的大腦皮層作出預測,“哦,往下看我應該可以看到這個人的鼻子,往上看應該是額頭”這樣的預測從上往下傳遞,并且配合你的感官器官得以驗證。所謂智能就是這樣一個不斷驗證記憶中的“模式”(或者稱為“恒定表征|”)不斷作出預測的過程。
              那么,什么是意識呢?意識包括兩種:自我意識和可感知的意識。我們通常所說的意識其實都是指自我意識,這種“意識”本質(zhì)上也是基于記憶-預測模型的陳述性記憶。例如,昨天你去郊外參加野營,假設我有這么一種方法可以抹去你某一段時間的記憶,那么當你今天早上醒來之前,我運用這個方法抹去你昨天去野營的記憶。今天,昨天與你去野營的人說,“HI,昨天我們一起去野營了”,可是你已經(jīng)沒有這段記憶,你會很驚訝并且辯解說自己根本沒有去,別人后來拿出了一起去野營的錄象,你看了之后也許就說“啊,那時候我是沒有意識的,我像個僵尸,我真的去了嗎?”,可見,所謂自我意識就是陳述性的記憶。可感知的意識,比如我們通常認為藍色代表憂郁,紅色表示憤怒,這樣的意識與古腦有關(古腦控制了人類的基本情緒和感受,性欲、饑餓、高興等等),作者沒有給出確切的解釋,不過顯然也與記憶-預測模型相關,我猜測這與人類長期進化形成的“記憶”有關。
              那么,什么是創(chuàng)造力?創(chuàng)造力在某些人眼里是那么的神奇,其實所謂創(chuàng)造力,仍然是構(gòu)建在記憶-預測的模型基礎上。我們俗語說“一通百通”,其實就是創(chuàng)造力的一種體現(xiàn),精通一樣技藝之后,在你的新大腦皮層已經(jīng)穩(wěn)定地形成了關于這項技藝的方方面面的“模式”,當遇到另一樣需要學習的技藝時,專家們總可以找到兩者間的共同點。比如在編程領域,設計模式就是關于軟件的高級抽象模式,這樣的模式可以應用于各式各樣的語言。天才們的共同特點就是比一般人更能去發(fā)現(xiàn)抽象之抽象、模式之模式。因此,創(chuàng)造力完全是可以培養(yǎng)的,盡管由于個體上的差異(大腦的構(gòu)造和大腦皮層的面積以及環(huán)境、信仰等等),但是每個人其實都可以去培養(yǎng)自己的創(chuàng)造力。遇到難題,首先不能放棄,很多人其實沒有開始就放棄了,其次,應該從不同角度去考慮問題,應用不同感官和視角,這樣可以激發(fā)起你對相似場景的模式記憶,類比而去解決問題。在科學史上通過類比而創(chuàng)新的例子舉不勝舉。
              最后,什么是想象?新大腦皮層對輸入的信息與長期訓練形成的“恒定表征”相驗證,同時不斷地去預測,預測從皮層較高層次往下傳遞。如果將預測的傳輸方向倒轉(zhuǎn),也就是將預測作為輸入,顯然,這就是想象。想象其實就是策劃,不斷對行為產(chǎn)生的后果進行預測。心理暗示的作用也從這個意義上得到了驗證。
              說說所謂“恒定表征”,這個概念其實類似于柏拉圖哲學中的“理型”。我們怎么知道一只動物是馬,而不是別的什么東西。按照柏拉圖的說法,這就是我們將感官中看到的馬,與心靈中“理型”的馬進行類比而得出這是一只馬的結(jié)論,“完美理型的馬”擁有馬的一切特征,是具體馬的“形式”。而且柏拉圖認為,“理型”是與生俱來的,來源于一個稱為“理型的世界”。Jeff Hawkins所說的“恒定表征”與此類似,不過“恒定表征”并不是生來就有的,而是人在成長過程中不斷記憶學習形成的穩(wěn)定“模式”。還是以馬為例,第一次看見這種動物,你并不知道這就是所謂馬,然后有人告訴你這就是馬,你記下了馬的特征和場景,在以后的生活里這個記憶被不斷地重復和強化,進而形成了關于馬的“恒定表征”:馬是四條腿的動物,如果不是的話,你也可以通過其他特征斷定這可能是受傷了只剩三條腿的馬;并且一般王子和大俠們也都喜歡騎白馬......

              基于這套新的智能框架,Jeff Hawkins認為我們可以制造出真正的智能機器,而且這個領域也將成為下一個技術(shù)革命。制造出的智能機器不一定有人的表面特征,也就是機器人管家這樣的幻想中的東西并不是智能機器的方向,智能機器將充分利用速度和記憶容量上的優(yōu)勢,在特定領域發(fā)揮驚人的作用,比如思考數(shù)學上的多維空間、天氣預報等等。這本書可以讓你一口氣讀完,翻譯得也相當棒,相當?shù)赝扑]。

          posted @ 2007-11-18 22:22 dennis 閱讀(656) | 評論 (0)編輯 收藏

              搬家到了福州,電視沒搬上來,住的又是郊區(qū),晚上空余的時間大增,讀書時間由過去的一兩個小時增長到整個晚上。請還在讀研的兄弟幫忙在學校借了7本書,除了本《人工智能的未來》(這本挺有趣的),其他都是技術(shù)類,也知道自己的讀書面現(xiàn)在太窄了,不是不想看閑書,可確實有很多東西計劃著要去學,如果還停留在計劃,我懷疑自己到底還會不會去讀,比如龍書和unix shell編程。談一下最近讀的很有感覺的兩本書。
              首先是〈網(wǎng)站重構(gòu)〉,這真的是我第一次認真地去看一本web設計類的書。盡管一直是做WEB方面的開發(fā),但是對于網(wǎng)頁的設計和布局我從來沒有系統(tǒng)地學習過,當然更不清楚為什么這樣做以及這樣做到底好不好。因為做的所謂企業(yè)應用(可以指定用戶使用的瀏覽器版本),對于web標準我從來就沒有認真關注過,也就在讀js高級程序設計時了解了js在各種瀏覽器上的基本差異。如果你跟我一樣,我強烈建議你看看〈網(wǎng)站重構(gòu)〉,從書中我才知道自己寫的網(wǎng)頁代碼是如此惡心,充斥著占用帶寬的垃圾代碼,沒有考慮可用性和維護,更不用說麻煩的瀏覽器兼容問題。這還不是關鍵的,更關鍵的是這本書讓你回到了HTML和XHTML被設計出來的本意:他們是用來表示網(wǎng)站結(jié)構(gòu)的,而應該將元素的展現(xiàn)交給CSS。將結(jié)構(gòu)和展現(xiàn)分離帶來了代碼量減少,帶來了維護的便利,也帶來了優(yōu)秀的瀏覽器兼容效果。
              另外一本讓我熬夜讀的就是鼎鼎大名的龍書 ,跟國產(chǎn)的一本正經(jīng)的教科書不同,這本書沒有一大堆羅列的公式和術(shù)語,在第一章簡單地對編譯器介紹后,第二章立馬用C語言實現(xiàn)了一個簡單而又完整的編譯器前端(將中綴算術(shù)表達式轉(zhuǎn)化成后綴表達式),又介紹了抽象的基于棧的機器實現(xiàn)算術(shù)運算和條件循環(huán)表達式的基本原理。一口氣讀完前兩章,你得承認,計算機類的書還是國外的好。讀的時候我想起我過去用JAVA寫的一個簡單的邏輯表達式解析器,雖然簡陋,但是也暗合書中這個前端的原理,沒有系統(tǒng)學習過,寫出來的也是野路子,有需要的話再改寫一下。
             最后是工作,不是很順利,沒有我想像中的那么好,畢竟理想和現(xiàn)實是差距是永恒存在滴。開始一段時間挺不開心的,畢竟陌生的人和事總會讓你有點找不著北。我想我會適應的,穩(wěn)定下情緒,慢慢進入角色,做好本分就是了。   

          posted @ 2007-11-17 21:19 dennis 閱讀(565) | 評論 (2)編輯 收藏

              這兩天看了一本老書《bitter java》,第一次系統(tǒng)地了解了所謂“反模式”。就書的內(nèi)容來說已經(jīng)過于陳舊,書中提到的magic servlet、復合jsp等等反模式已經(jīng)是早就熟知的編程禁忌,而如web頁面不能有太多元素這樣的反模式也因為ajax的出現(xiàn)(異步加載)變的不是那么“反模式”了,其中又講述了很多ejb的反模式,這些在輕量級框架流行的今天也早已經(jīng)過時。不過書中有一個章節(jié)倒是挺有價值,講述的是java的內(nèi)存泄露問題,我認為是我目前讀的關于這方面問題比較有價值的介紹。
              網(wǎng)上關于java內(nèi)存泄露的資料都過于玄乎,其實java導致內(nèi)存泄露的原因很明確:長生命周期的對象持有短生命周期對象的引用就很可能發(fā)生內(nèi)存泄露,盡管短生命周期對象已經(jīng)不再需要,但是因為長生命周期對象持有它的引用而導致不能被回收,這就是java中內(nèi)存泄露的發(fā)生場景。作者在書中提到了3個場景:
          1。流失監(jiān)聽器問題,在awt、swing編程中,給組件添加了事件監(jiān)聽器,這些組件的生命周期如果很長的話,監(jiān)聽器對象將不能被正確回收。關于GUI編程我不是很熟悉,這一點存有疑問,因為顯然你觸發(fā)一個按鈕的事件,當然是一直期待同樣的行為發(fā)生,如果刪除了監(jiān)聽器或者使用弱引用讓JVM回收不符合業(yè)務邏輯和用戶體驗。

          2。集合類,集合類僅僅有添加元素的方法,而沒有相應的刪除機制,導致內(nèi)存被占用。這一點其實也不明確,這個集合類如果僅僅是局部變量,根本不會造成內(nèi)存泄露,在方法棧退出后就沒有引用了會被jvm正常回收。而如果這個集合類是全局性的變量(比如類中的靜態(tài)屬性,全局性的map等),那么沒有相應的刪除機制,很可能導致集合所占用的內(nèi)存只增不減,因此提供這樣的刪除機制或者定期清除策略非常必要。

          3。單例模式。不正確使用單例模式是引起內(nèi)存泄露的一個常見問題,單例對象在被初始化后將在JVM的整個生命周期中存在(以靜態(tài)變量的方式),如果單例對象持有外部對象的引用,那么這個外部對象將不能被jvm正常回收,導致內(nèi)存泄露,考慮下面的例子:
          class A{
              public A(){
                     B.getInstance().setA(this);
             }
             ....
          }
          //B類采用單例模式
          class B{
               private A a;
               private static B instance=new B();
               public B(){}
               public static B getInstance(){
                   return instance;
              }
              public void setA(A a){
                    this.a=a;
              }
             //getter...
          }

          顯然B采用singleton模式,他持有一個A對象的引用,而這個A類的對象將不能被回收。想象下如果A是個比較大的對象或者集合類型會發(fā)生什么情況。

              上面所講的這些也啟發(fā)我們?nèi)绾稳ゲ檎覂?nèi)存泄露問題,第一選擇當然是利用工具,比如jprofiler,第二就是在代碼復審的時候關注長生命周期對象:全局性的集合、單例模式的使用、類的static變量等等。

          posted @ 2007-11-11 20:18 dennis 閱讀(2899) | 評論 (4)編輯 收藏

              在Ruby中,無論類或者對象,都有一個singlton類(或者稱為metaclass),有興趣的話讀讀過去寫的這篇《Ruby的對象模型》。當我們獲取某個類或者對象的class屬性時,其實會忽略c ruby層次上的singleton類,那么我們?nèi)绾蔚玫絪ingleton類呢?比較有趣的做法:
          singletonclass=class<<Test;self;end

          對于對象,也是如此:
          test=Test.new
          metaclass=class<<test;self;end


          posted @ 2007-10-31 11:33 dennis 閱讀(342) | 評論 (0)編輯 收藏

              9月20號提的離職,按公司的要求,我也呆到了10月底,本來以為可以順利離職,可中途公司又提出想調(diào)我去武漢的新項目組。按我的想法,還是想在省內(nèi)再找家好點的公司鍛煉兩年,經(jīng)過更多的項目錘煉,然后去北京、上海或者廣州等地追尋新的夢想,因此拒絕了公司的提議。前天公司又額外生枝,要求我呆在11月5號,可我的離職明明寫的是31號,公司有什么道理要求我呆到5號呢?自認為對工作也是盡職盡責了,為了交接工作的順利進行,我還特意加班讓接手工作的同事多點時間熟悉,我認為自己盡到了責任,因此向公司領導說明了我會在明天就離開公司。最后終于還是成了,明天先回家,然后去福州,新的工作已經(jīng)找好,托了同學幫忙找房子,事情向好的一面發(fā)展,心情也好了不少。因為換工作帶來的煩惱慢慢消逝,對未來還是充滿信心。

          posted @ 2007-10-31 10:46 dennis 閱讀(666) | 評論 (5)編輯 收藏

               摘要: 在未來,我們可能需要的是一個個高效精干的小型團隊,團隊成員技藝高超,富于激情,易于溝通。  閱讀全文

          posted @ 2007-10-25 10:11 dennis 閱讀(1175) | 評論 (4)編輯 收藏

          僅列出標題
          共56頁: First 上一頁 31 32 33 34 35 36 37 38 39 下一頁 Last 
          主站蜘蛛池模板: 仁化县| 当雄县| 安图县| 岳普湖县| 申扎县| 普兰县| 金寨县| 凌源市| 金沙县| 凤冈县| 玛纳斯县| 曲周县| 安吉县| 徐闻县| 石渠县| 昌宁县| 申扎县| 元谋县| 奇台县| 汪清县| 普兰店市| 房产| 民丰县| 合作市| 大英县| 霞浦县| 青铜峡市| 雷州市| 铁岭市| 西贡区| 易门县| 乐平市| 黎平县| 土默特左旗| 平湖市| 台湾省| 武义县| 锦屏县| 疏勒县| 尚义县| 岳西县|