posts - 167,  comments - 30,  trackbacks - 0
          假設(shè)您今天要開發(fā)一個動畫編輯程式,動畫由影格(Frame)組成,數(shù)個影格組合為動畫清單,動畫清單也可以由其它已完成的動畫清單組成,也可以在動畫清單與清單之間加入個別影格。無論是影格或動畫清單都可以播放,而動畫清單負(fù)責(zé)的就是組合影格或動畫清單,所以可以這么設(shè)計:




          對于Frame而言,Playlist是一個容器,然而Playlist也實作Playable,所以它也可以播放,您可以進一步地將Playlist組合至另一個Playlist中,以形成更長的播放清單。以Java實現(xiàn)的話。
          以Java實現(xiàn)的話。
          import java.util.*;

          interface Playable {
          void play();
          }

          class Frame implements Playable {
          private String image;
          Frame(String image) {
          this.image = image;
          }
          public void play() {
          System.out.println("播放 " + image);
          }
          }

          class Playlist implements Playable {
          private List<Playable> list = new ArrayList<Playable>();
          public void add(Playable playable) {
          list.add(playable);
          }
          public void play() {
          for(Playable playable : list) {
          playable.play();
          }
          }
          }

          public class Main {
          public static void main(String[] args) {
          Frame logo = new Frame("片頭 LOGO");

          Playlist playlist1 = new Playlist();
          playlist1.add(new Frame("Duke 左揮手"));
          playlist1.add(new Frame("Duke 右揮手"));

          Playlist playlist2 = new Playlist();
          playlist2.add(new Frame("Duke 走左腳"));
          playlist2.add(new Frame("Duke 走右腳"));

          Playlist all = new Playlist();
          all.add(logo);
          all.add(playlist1);
          all.add(playlist2);

          all.play();
          }
          }

          以Python實現(xiàn)的話:
          class Frame:
          def __init__(self, image):
          self.image = image
          def play(self):
          print("播放 " + self.image)

          class Playlist:
          def __init__(self):
          self.list = []
          def add(self, playable):
          self.list.append(playable);
          def play(self):
          for playable in self.list:
          playable.play()

          logo = Frame("片頭 LOGO")

          playlist1 = Playlist()
          playlist1.add(Frame("Duke 左揮手"))
          playlist1.add(Frame("Duke 右揮手"))

          playlist2 = Playlist()
          playlist2.add(Frame("Duke 走左腳"))
          playlist2.add(Frame("Duke 走右腳"))

          all = Playlist()
          all.add(logo)
          all.add(playlist1)
          all.add(playlist2)

          all.play();以UML來表示Composite模式的結(jié)構(gòu):



          具有層次性或組合性的物件可以使用Composite模式,像是電路元件、視窗元件等,使用Composite模式可以大大減低這些元件設(shè)計的復(fù)雜度,以Java標(biāo)準(zhǔn)API中AWT視窗元件為例,
          Component上有個paint()方法,可以進行元件的繪制,Container可以容納Component(如Button、Label等),而Container繼承Component,所以Container也可以容納Container,這也是Composite模式的實際例子:
           

          from : http://caterpillar.onlyfun.net/Gossip/index.html 



          posted @ 2012-10-12 16:20 David1228 閱讀(337) | 評論 (0)編輯 收藏

          云計算用一個朋友的話來說:”做云計算最苦逼的就是得時時刻刻為一些可能一輩子都碰不到的事做好準(zhǔn)備。更苦逼的就是剛以為一個問題不會遇到,立刻就發(fā)生了。。。“。這個還真的沒有辦法,誰讓哥我是搞云計算的呢,簡單一個虛擬化就搞的你蛋疼,你還能想其它的嗎?一直糾結(jié)在做虛擬化使用什么鏡像格式,剛剛開始用了raw的file,后來發(fā)現(xiàn)LVM的很多特性對于虛擬化還是有比較理想的能力,而且性能也很不錯就用了LVM。后來被VMware騙了跑去搞Esxi接觸了VMDK,最近研究openstack發(fā)現(xiàn)了qcow2格式,貌似現(xiàn)在很流行呀。也說不上分析這些鏡像格式的能力,就簡單說說自己的一些使用心得。

          目前主要有那些格式來作為虛擬機的鏡像:
          raw
          (default) the raw format is a plain binary image of the disc image, and is very portable. On filesystems that support sparse files, images in this format only use the space actually used by the data recorded in them.
          老牌的格式了,用一個字來說就是裸,也就是赤裸裸,你隨便dd一個file就模擬了一個raw格式的鏡像。由于裸的徹底,性能上來說的話還是不錯的。目前來看,KVM和XEN默認(rèn)的格式好像還是這個格式。因為其原始,有很多原生的特性,例如直接掛載也是一件簡單的事情。
          裸的好處還有就是簡單,支持轉(zhuǎn)換成其它格式的虛擬機鏡像對裸露的它來說還是很簡單的(如果其它格式需要轉(zhuǎn)換,有時候還是需要它做為中間格式),空間使用來看,這個很像磁盤,使用多少就是多少(du -h看到的大小就是使用大小),但如果你要把整塊磁盤都拿走的話得全盤拿了(copy鏡像的時候),會比較消耗網(wǎng)絡(luò)帶寬和I/O。接下來還有個有趣的問題,如果那天你的硬盤用著用著不夠用了,你咋辦,在買一塊盤。但raw格式的就比較犀利了,可以在原來的盤上追加空間:
          dd if=/dev/zero of=zeros.raw bs=1024k count=4096(先創(chuàng)建4G的空間)
          cat foresight.img zeros.raw > new-foresight.img(追加到原有的鏡像之后)
          當(dāng)然,好東西是吹出來的,誰用誰知道,還是有挺多問題的。由于原生的裸格式,不支持snapshot也是很正常的。傳說有朋友用版本管理軟件對raw格式的文件做版本管理從而達(dá)到snapshot的能力,估計可行,但沒試過,這里也不妄加評論。但如果你使用LVM的裸設(shè)備,那就另當(dāng)別論。說到LVM還是十分的犀利的,當(dāng)年用LVM做虛擬機的鏡像,那性能杠杠的。而且現(xiàn)在好多兄弟用虛擬化都采用LVM來做的。在LVM上做了很多的優(yōu)化,國外聽說也有朋友在LVM增量備份方面做了很多的工作。目前來LVM的snapshot、性能、可擴展性方面都還是有相當(dāng)?shù)男Ч摹D壳皝砜吹脑挘瑐浞莸脑捯矄栴}不大。就是在虛擬機遷移方面還是有很大的限制。但目前虛擬化的現(xiàn)狀來看,真正需要熱遷移的情況目前需求還不是是否的強烈。雖然使用LVM做虛擬機鏡像的相關(guān)公開資料比較少,但目前來看犧牲一點靈活性,換取性能和便于管理還是不錯的選擇。

          對于LVM相關(guān)的特性及使用可以參考如下鏈接:

          http://www.ibm.com/developerworks/linux/library/l-lvm2/index.html

          cow
          copy-on-write format, supported for historical reasons only and not available to QEMU on Windows
          曾經(jīng)qemu的寫時拷貝的鏡像格式,目前由于歷史遺留原因不支持窗口模式。從某種意義上來說是個棄嬰,還沒得它成熟就死在腹中,后來被qcow格式所取代。

          qcow
          the old QEMU copy-on-write format, supported for historical reasons and superseded by qcow2

          一代的qemu的cow格式,剛剛出現(xiàn)的時候有比較好的特性,但其性能和raw格式對比還是有很大的差距,目前已經(jīng)被新版本的qcow2取代。其性能可以查看如下鏈接:
          http://www.linux-kvm.org/page/Qcow2

          qcow2
          QEMU copy-on-write format with a range of special features, including the ability to take multiple snapshots, smaller images on filesystems that don’t support sparse files, optional AES encryption, and optional zlib compression
          現(xiàn)在比較主流的一種虛擬化鏡像格式,經(jīng)過一代的優(yōu)化,目前qcow2的性能上接近raw裸格式的性能,這個也算是redhat的官方渠道了,哈哈,希望有朋友能拍他們磚:

          https://fedoraproject.org/wiki/Features/KVM_qcow2_Performance

          對于qcow2的格式,幾點還是比較突出的,qcow2的snapshot,可以在鏡像上做N多個快照:

          • 更小的存儲空間,即使是不支持holes的文件系統(tǒng)也可以(這下du -h和ls -lh看到的就一樣了)
          • Copy-on-write support, where the image only represents changes made to an underlying disk image(這個特性SUN ZFS表現(xiàn)的淋漓盡致)
          • 支持多個snapshot,對歷史snapshot進行管理
          • 支持zlib的磁盤壓縮
          • 支持AES的加密

          vmdk 
          VMware 3 & 4, or 6 image format, for exchanging images with that product
          VMware的格式,這個格式說的蛋疼一點就有點牛X,原本VMware就是做虛擬化起家,自己做了一個集群的VMDK的pool,做了自己的虛擬機鏡像格式。又拉著一些公司搞了一個OVF的統(tǒng)一封包。從性能和功能上來說,vmdk應(yīng)該算最出色的,由于vmdk結(jié)合了VMware的很多能力,目前來看,KVM和XEN使用這種格式的情況不是太多。但就VMware的Esxi來看,它的穩(wěn)定性和各方面的能力還是可圈可點。

          vdi
          VirtualBox 1.1 compatible image format, for exchanging images with VirtualBox.
          SUN收購了VirtualBox,Oracle又收購了SUN,這么說呢,vdi也算虛擬化這方面的一朵奇葩,可惜的是入主的兩家公司。SUN太專注于技術(shù)(可以說是IT技術(shù)最前端也不為過),Oracle又是開源殺手(mysql的沒落)。單純從能力上來說vdi在VirtualBox上的表現(xiàn)還是不錯的。也是不錯的workstation級別的產(chǎn)品。

          說了這么多虛擬機鏡像格式,這么多虛擬化,做云計算的傷不起呀,得為長期發(fā)展考慮,也有朋友對鏡像的轉(zhuǎn)換做了很多事情,簡單看看幾種鏡像的轉(zhuǎn)化:

          VMDK–>qcow2:

          kevin@kevin:~# qemu-img convert -f vmdk -O qcow2 SLES11SP1-single.vmdk SLES11SP1-single.img

          http://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm3/index.html

          qcow2–>raw:

          kevin@kevin:~$ qemu-img convert -O qcow2 image-raw.raw image-raw-converted.qcow

          轉(zhuǎn)載自:http://www.prajnagarden.com/?p=248 
          posted @ 2012-10-11 15:43 David1228 閱讀(639) | 評論 (0)編輯 收藏
          通過源碼包安裝、配置Mysql詳細(xì)步驟:

          1、上傳mysql-5.5.8-linux2.6-x86_64.tar.gzWeb服務(wù)器的/usr/local/目錄下

          2、解壓并重命名

          # cd /usr/local

          # tar –xvzf mysql-5.5.8-linux2.6-x86_64.tar.gz

          # mv mysql-5.5.8-linux2.6-x86_64 mysql

          3、配置/etc/my.cnf

          1)安裝操作系統(tǒng)時如果安裝了MySql就會生成/etc/my.cnf,而系統(tǒng)自帶的MySql版本較低,所以替換已有的/etc/my.cnf,替換之前可以備份my.cnf

          #mv /etc/my.cnf  /etc/my.cnf_bak

          # cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

          2)編輯/etc/my.cnf,配置IP連接,在mysqld中加入下邊的紅色字體

          #vi /etc/my.cnf

          [mysqld]

          port            = 3306

          socket          = /tmp/mysql.sock

          skip-name-resolve

          skip-external-locking

          3)保存,退出。

          4、添加mysql用戶和用戶組

          如果系統(tǒng)已經(jīng)安裝了mysql,則在添加mysql用戶和用戶組的時候會提示mysql用戶(或用戶組)已經(jīng)存在,這種提示是正常的。

          # groupadd mysql

          # useradd -g mysql mysql

          5、修改mysql目錄權(quán)限

          1)設(shè)定root用戶可以訪問

          # chown -R root /usr/local/mysql

          2)設(shè)定mysql組和mysql用戶能訪問/usr/local/mysql/usr/local/mysql/data

          # chgrp -R mysql /usr/local/mysql

          #chown -R mysql /usr/local/mysql/data

          6、創(chuàng)建mysql系統(tǒng)數(shù)據(jù)庫

          # cd /usr/local/mysql

          #./scripts/mysql_install_db --user=mysql&

          7、使用mysql用戶啟動mysqld

          #/usr/local/mysql/bin/mysqld_safe  -user=mysql&

          8、設(shè)定MySqlroot用戶的密碼

          假設(shè)root用戶的密碼為123456,根據(jù)實際環(huán)境自行設(shè)定

          #/usr/local/mysql/bin/mysqladmin -u root password 123456

          9、使用root用戶登錄MySql

          根據(jù)步驟8設(shè)定的用戶密碼登錄mysql

          # cd /usr/local/mysql/bin

          #./mysql -u root -p     

          Enter password:

          10、開啟mysql遠(yuǎn)程訪問

          1)賦予root用戶遠(yuǎn)程訪問權(quán)限

          # grant all privileges on *.* to root @"%" identified by "123456";

          #flush privileges;

          2)參數(shù)說明

          a)   grant all privileges:賦予所有權(quán)限,all可以替換為相關(guān)操作;

          b)   *.*:說明數(shù)據(jù)庫和表名,*代表所有;

          c)   root:說明是給root用戶設(shè)定權(quán)限,可以替換為其他用戶;

          d)   %:這里是Host名稱,允許所有的就用%;

          e)   123456:是root用戶的密碼;

          f)   flush privileges:是把新賦權(quán)限表刷新加載到內(nèi)存,可以理解為即時生效。

          11、配置MySql自動啟動

          編輯/etc/rc.d/rc.local文件,在文件最底端加入啟動語句

          # vi /etc/rc.d/rc.local

          ……

          /usr/local/mysql/bin/mysqld_safe -user=mysql&

          通過rpm包安裝、配置及卸載mysql的詳細(xì)過程.

            以MySQL-server-4.0.14-0.i386.rpm為例,放在/data目錄下

            cd /data

            rpm -ivh MySQL-server-4.0.14-0.i386.rpm

            安裝完成后在/usr/share/mysql目錄中會有一個mysql的啟動腳本mysql.server及示例配置文件等(如my-huge.cnf、my-large.cnf、my-medium.cnf)

            拷貝一個示例配置文件作為mysql的配置文件:

            cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

            rpm包安裝完后自動將mysql安裝成系統(tǒng)服務(wù),所以可以使用下面命令啟動、停止mysql

            啟動mysql

            /etc/init.d/mysql start 或 service mysql start

            停止mysql

            /etc/init.d/mysql stop 或 service mysql stop

            到此,mysql服務(wù)就安裝配置完成。

            安裝mysql客戶端

            rpm -ivh MySQL-client-4.0.14-0.i386.rpm

            mysql安裝好后目錄結(jié)構(gòu)如下:

            工具程序在/usr/bin目錄中---ls /usr/bin/mysql*

            服務(wù)器程序/usr/sbin/mysqld

            數(shù)據(jù)目錄/var/lib/mysql

            默認(rèn)情況下mysql將錯誤日志文件、二進制日志文件及進程文件寫在/var/lib/mysql目錄中,如localhost.err、localhost.pid、localhost-bin.001等

            要改變這些情況可以修改/etc/my.cnf文件

            如將日志文件寫在/var/log目錄中,可以在my.cnf文件中加入下面兩行:

            [mysqld_safe]

            err-log = /var/log/mysqld.log

            有個實用程序/usr/bin/mysql_install_db,該程序可以用來初始化 mysql數(shù)據(jù)庫,即創(chuàng)建/var/log/mysql目錄,及創(chuàng)建mysql數(shù)據(jù)庫(mysql授權(quán)表等信息)及test數(shù)據(jù)庫(空庫),如果不小心刪 除了/var/log/mysql目錄可以通過該程序來初始化.

            卸載mysql

            rpm -qa|grep -i mysql

            rpm -ev MySQL-server-4.0.14-0 MySQL-client-4.0.14-0

            卸載后/var/lib/mysql中的數(shù)據(jù)及/etc/my.cnf不會刪除,如果確定沒用后就手工刪除

            rm -f /etc/my.cnf

            rm -rf /var/lib/mysql

          posted @ 2012-10-11 15:21 David1228 閱讀(342) | 評論 (0)編輯 收藏

          一、命令行方式

          關(guān)閉要調(diào)整的虛擬機,編輯虛擬機配置文件

          #virsh edit 'your vm name'

          找到配置文件中的以下字段:

          <graphics type='vnc' port='-1'/>

          加入鍵盤的語言布局后如下:

          <graphics type='vnc' port='-1' keymap='en-us'/>

          保存退出后,重新載入虛擬機配置文件

          #virsh create /etc/libvirt/qemu/'your vm name'.xml

          如果要避免這種情況,在使用virt-install安裝的時候,就加入鍵盤布局的字段

          --keymap=en-us 

          二、virt-manager方式

          在虛擬關(guān)閉的狀態(tài)下,通過virt-manager界面選中相應(yīng)的虛擬機:

          open-->Details-->Display VNC-->keymap-->en-us

          保存后再啟動虛擬機就可以了
          轉(zhuǎn)載自:http://cncto.blog.51cto.com/blog/235831/886946

          posted @ 2012-08-06 12:10 David1228 閱讀(3124) | 評論 (0)編輯 收藏

          【簡介】

          Python(蟒蛇)是一種動態(tài)解釋型的編程語言。Python可以在Windows、UNIX、MAC等多種操作系統(tǒng)上使用,也可以在Java、.NET開發(fā)平臺上使用。

          python logo

          python logo

           

          【特點】

          1 Python使用C語言開發(fā),但是Python不再有C語言中的指針等復(fù)雜的數(shù)據(jù)類型。

          2 Python具有很強的面向?qū)ο筇匦裕液喕嗣嫦驅(qū)ο蟮膶崿F(xiàn)。它消除了保護類型、抽象類、接口等面向?qū)ο蟮脑亍?/p>

          3 Python代碼塊使用空格或制表符縮進的方式分隔代碼。

          4 Python僅有31個保留字,而且沒有分號、begin、end等標(biāo)記。

          5 Python是強類型語言,變量創(chuàng)建后會對應(yīng)一種數(shù)據(jù)類型,出現(xiàn)在統(tǒng)一表達(dá)式中的不同類型的變量需要做類型轉(zhuǎn)換。

          python_book

          python book

          【搭建開發(fā)環(huán)境】

          1 可以到www.python.org下載安裝包,然后通過configure、make、make install進行安裝。

          2 也可以到www.activestate.com去下載ActivePython組件包。(ActivePython是對Python核心和常用模塊的二進制包裝,它是ActiveState公司發(fā)布的Python開發(fā)環(huán)境。ActivePython使得Python的安裝更加容易,并且可以應(yīng)用在各種操作系統(tǒng)上。ActivePython包含了一些常用的Python擴展,以及Windows環(huán)境的編程接口)。對ActivePython來說,如果你是windows用戶,下載msi包安裝即可;如果你是Unix用戶,下載tar.gz包直接解壓即可。

          3 Python的IDE,包括PythonWin、Eclipse+PyDev插件、Komodo、EditPlus

          【版本】

          python2與python3是目前主要的兩個版本。

          如下兩種情況下,建議使用python2:

          1 你無法完全控制你即將部署的環(huán)境時;

          2 你需要使用一些特定的第三方包或擴展時;

          python3是官方推薦的且是未來全力支持的版本,目前很多功能提升僅在python3版本上進行。

          【hello world】

          1 創(chuàng)建hello.py

          2 編寫程序:

          1. if __name__ == '__main__':  
          2. print "hello word" 

          3 運行程序:

          1. python ./hello.py 

          【注釋】

          1 無論是行注釋還是段注釋,均以#加一個空格來注釋。

          2 如果需要在代碼中使用中文注釋,必須在python文件的最前面加上如下注釋說明:

          1. # -* - coding: UTF-8 -* - 

          3 如下注釋用于指定解釋器

          1. #! /usr/bin/python 

          【文件類型】

          1 Python的文件類型分為3種,即源代碼、字節(jié)代碼和優(yōu)化代碼。這些都可以直接運行,不需要進行編譯或連接。

          2 源代碼以.py為擴展名,由python來負(fù)責(zé)解釋;

          3 源文件經(jīng)過編譯后生成擴展名為.pyc的文件,即編譯過的字節(jié)文件。這種文件不能使用文本編輯器修改。pyc文件是和平臺無關(guān)的,可以在大部分操作系統(tǒng)上運行。如下語句可以用來產(chǎn)生pyc文件:

          1. import py_compile  
          2. py_compile.compile(‘hello.py’) 

          4 經(jīng)過優(yōu)化的源文件會以.pyo為后綴,即優(yōu)化代碼。它也不能直接用文本編輯器修改,如下命令可用來生成pyo文件:

          1. python -O -m py_complie hello.py 

          【變量】

          1 python中的變量不需要聲明,變量的賦值操作即使變量聲明和定義的過程。

          2 python中一次新的賦值,將創(chuàng)建一個新的變量。即使變量的名稱相同,變量的標(biāo)識并不相同。用id()函數(shù)可以獲取變量標(biāo)識:

          1. x = 1 
          2. print id(x)  
          3. x = 2 
          4. print id(x) 

          3 如果變量沒有賦值,則python認(rèn)為該變量不存在

          4 在函數(shù)之外定義的變量都可以稱為全局變量。全局變量可以被文件內(nèi)部的任何函數(shù)和外部文件訪問。

          5 全局變量建議在文件的開頭定義。

          6 也可以把全局變量放到一個專門的文件中,然后通過import來引用:

          gl.py文件中內(nèi)容如下:

          1. _a = 1 
          2. _b = 2 

          use_global.py中引用全局變量:

          1. import gl  
          2. def fun():  
          3. print gl._a  
          4. print gl._b  
          5. fun() 

          【常量】

          python中沒有提供定義常量的保留字。可以自己定義一個常量類來實現(xiàn)常量的功能。

          1. class _const:  
          2. class ConstError(TypeError): pass 
          3. def __setattr__(self,name,vlaue):  
          4. if self.__dict__.has_key(name):  
          5. raise self.ConstError, “Can’t rebind const(%s)”%name  
          6. self.__dict__[name]=value  
          7. import sys  
          8. sys.modules[__name__]=_const() 

          【數(shù)據(jù)類型】

          1 python的數(shù)字類型分為整型、長整型、浮點型、布爾型、復(fù)數(shù)類型。

          2 python沒有字符類型

          3 python內(nèi)部沒有普通類型,任何類型都是對象。

          4 如果需要查看變量的類型,可以使用type類,該類可以返回變量的類型或創(chuàng)建一個新的類型。

          5 python有3種表示字符串類型的方式,即單引號、雙引號、三引號。單引號和雙引號的作用是相同的。python程序員更喜歡用單引號,C/Java程序員則習(xí)慣使用雙引號表示字符串。三引號中可以輸入單引號、雙引號或換行等字符。

          【運算符和表達(dá)式】

          1 python不支持自增運算符和自減運算符。例如i++/i–是錯誤的,但i+=1是可以的。

          2 1/2在python2.5之前會等于0.5,在python2.5之后會等于0。

          3 不等于為!=或<>

          4 等于用==表示

          5 邏輯表達(dá)式中and表示邏輯與,or表示邏輯或,not表示邏輯非

          【控制語句】

          1 條件語句:

          1. if (表達(dá)式) :  
          2. 語句1  
          3. else :  
          4. 語句2 

          2 條件語句:
           

          1. if (表達(dá)式) :  
          2. 語句1  
          3. elif (表達(dá)式) :  
          4. 語句2  
          5. …  
          6. elif (表達(dá)式) :  
          7. 語句n  
          8. else :  
          9. 語句m 

          3 條件嵌套:

          1. if (表達(dá)式1) :  
          2. if (表達(dá)式2) :  
          3. 語句1  
          4. elif (表達(dá)式3) :  
          5. 語句2  
          6. …  
          7. else:  
          8. 語句3  
          9. elif (表達(dá)式n) :  
          10. …  
          11. else :  
          12. … 

          4 python本身沒有switch語句。

          5 循環(huán)語句:

          1. while(表達(dá)式) :  
          2. …  
          3. else :  
          4. … 

          6 循環(huán)語句:

          1. for 變量 in 集合 :  
          2. …  
          3. else :  
          4. … 

          7 python不支持類似c的for(i=0;i<5;i++)這樣的循環(huán)語句,但可以借助range模擬:

          1. for x in range(0,5,2):  
          2. print x 

          【數(shù)組相關(guān)】

          1 元組(tuple):python中一種內(nèi)置的數(shù)據(jù)結(jié)構(gòu)。元組由不同的元素組成,每個元素可以存儲不同類型的數(shù)據(jù),如字符串、數(shù)字甚至元素。元組是寫保護的,即元組創(chuàng)建之后不能再修改。元組往往代表一行數(shù)據(jù),而元組中的元素代表不同的數(shù)據(jù)項。可以把元組看做不可修改的數(shù)組。創(chuàng)建元組示例如下:

          1. tuple_name=(“apple”,”banana”,”grape”,”orange”) 

          2 列表(list):列表和元組相似,也由一組元素組成,列表可以實現(xiàn)添加、刪除和查找操作,元素的值可以被修改。列表是傳統(tǒng)意義上的數(shù)組。列表創(chuàng)建示例如下:

          1. list=[“apple”,”banana”,”grage”,”orange”] 

          可以使用append方法來在尾部追加元素,使用remove來刪除元素。

          3 字典(dictionary):由鍵-值對組成的集合,字典中的值通過鍵來引用。鍵和值之間用冒號隔開,鍵-值對之間用逗號隔開,并且被包含在一對花括號中。創(chuàng)建示例如下:

          1. dict={“a”:”apple”, “b”:”banana”, “g”:”grage”, “o”:”orange”} 

          4 序列:序列是具有索引和切片能力的集合。元組、列表和字符串都屬于序列。

          【函數(shù)相關(guān)】

          1 python程序由包(package)、模塊(module)和函數(shù)組成。包是由一系列模塊組成的集合。模塊是處理某一類問題的函數(shù)和類的集合。

          2 包就是一個完成特定任務(wù)的工具箱。

          3 包必須含有一個__init__.py文件,它用于標(biāo)識當(dāng)前文件夾是一個包。

          4 python的程序是由一個個模塊組成的。模塊把一組相關(guān)的函數(shù)或代碼組織到一個文件中,一個文件即是一個模塊。模塊由代碼、函數(shù)和類組成。導(dǎo)入模塊使用import語句。

          5 包的作用是實現(xiàn)程序的重用。

          6 函數(shù)是一段可以重復(fù)多次調(diào)用的代碼,函數(shù)定義示例如下:

          1. def arithmetic(x,y,operator):  
          2. result={  
          3. “+”:x+y,  
          4. “-“:x-y,  
          5. “*”:x*y,  
          6. “/”:x/y  

          7 函數(shù)返回值可以用return來控制。

          【字符串相關(guān)】

          1 格式化輸出:

          1. format=”%s%d” % (str1,num)  
          2. print format 

          2 用+進行字符串的合并:

          1. str1=”hello”  
          2. str2=”world”  
          3. result=str1+str2 

          3 字符串截取可以通過索引/切片,也可以通過split函數(shù)。

          4 通過切片截取字符串:

          1. word=”world”  
          2. print word[0:3] 

          5 python使用==和!=來進行字符串比較。如果比較的兩個變量的類型不相同,那么結(jié)果必然為不同。

          【文件處理】

          1 簡單處理文件:

          1. context=”hello,world”  
          2. f=file(“hello.txt”,’w’)  
          3. f.write(context);  
          4. f.close() 

          2 讀取文件可以使用readline()函數(shù)、readlines()函數(shù)和read函數(shù)。

          3 寫入文件可以使用write()、writelines()函數(shù)

          【對象和類】

          1 python用class保留字來定義一個類,類名的首字符要大寫。當(dāng)程序員需要創(chuàng)建的類型不能用簡單類型來表示時,就需要定義類,然后利用定義的類創(chuàng)建對象。定義類示例:

          1. class Fruit:  
          2. def grow(self):  
          3. print “Fruit grow” 

          2 當(dāng)一個對象被創(chuàng)建后,包含了三方面的特性,即對象的句柄、屬性和方法。創(chuàng)建對象的方法:

          1. fruit = Fruit()  
          2. fruit.grow() 

          3 python沒有保護類型的修飾符

          4 類的方法也分為公有方法和私有方法。私有函數(shù)不能被該類之外的函數(shù)調(diào)用,私有的方法也不能被外部的類或函數(shù)調(diào)用。

          5 python使用函數(shù)”staticmethod()“或”@ staticmethod“指令的方法把普通的函數(shù)轉(zhuǎn)換為靜態(tài)方法。靜態(tài)方法相當(dāng)于全局函數(shù)。

          6 python的構(gòu)造函數(shù)名為__init__,析構(gòu)函數(shù)名為__del__

          7 繼承的使用方法:

          1. class Apple(Fruit):  
          2. def … 

          【連接mysql】

          1 用MySQLdb模塊操作MySQL數(shù)據(jù)庫非常方便。示例代碼如下:

          1. import os, sys  
          2. import MySQLdb  
          3. try:  
          4. conn MySQLdb.connect(host=’localhost’,user=’root’,passwd=’’,db=’address’  
          5. except Exception,e:  
          6. print e  
          7. sys.exit()  
          8. cursor=conn.cursor()  
          9. sql=’insert into address(name, address) values(%s, %s)’  
          10. value=((“zhangsan”,”haidian”),(“lisi”,”haidian”))  
          11. try 
          12. cursor.executemany(sql,values)  
          13. except Exception, e:  
          14. print e  
          15. sql=”select * from address”  
          16. cursor.execute(sql)  
          17. data=cursor.fetchall()  
          18. if data  
          19. for x in data:  
          20. print x[0],x[1]  
          21. cursor.close()  
          22. conn.close() 

          謝謝!

          原文鏈接: http://roclinux.cn/?p=2338


           

          posted @ 2012-07-10 09:35 David1228 閱讀(314) | 評論 (0)編輯 收藏
          一、問題描述
              根據(jù)CentOS-6.0-x86_64-bin-DVD1.iso制作虛擬機鏡像后,使用該鏡像創(chuàng)建的虛

          擬機都是網(wǎng)卡eth1,雖然能設(shè)置上ip但是虛擬網(wǎng)關(guān)并不能設(shè)置成功。
              并且隨著鏡像->虛擬機->鏡像->虛擬機類似流程迭代,網(wǎng)卡ethx會遞增。總結(jié)一

          句話:就是eth0不起作用。
              
          二、解決問題如下:

              1、在grub里增加biosdevname=0的啟動參數(shù),形如

              kernel /vmlinuz-2.6.32-131.21.1.el6.i686 ro root=/dev/mapper/vg_test-

          lv_root rd_LVM_LV=vg_test/lv_root rd_LVM_LV=vg_test/lv_swap rd_NO_LUKS rd_NO_MD 

          rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latar
              cyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet 

          biosdevname=0

              2、刪除udev的配置文件rm -f /etc/udev/rules.d/70-persistent-net.rules。

          (我的做法比較彪悍,直接把rules.d干掉了。)

              第3、4、5步是針對單個主機或者虛擬機而言的,我們保證鏡像中的eth0網(wǎng)卡配置

          文件存在,名字為ifcfg-eth0文件中DEVICE=eth0。
              
              3、把網(wǎng)卡配置文件改名

                  mv ifcfg-em1 ifcfg-eth0

              4、把網(wǎng)卡配置文件內(nèi)容修正,把em1的全部改成eth0

                  perl -p -i -e ‘s/em1/eth0/g’ ifcfg-eth0 

              5、重啟系統(tǒng)即可

              6、配置ssh
                  6.1:/etc/ssh/sshd_config   配置文件中修改或加入UseDNS=no,將

          #UseDNS=yes 改成:UseDNS=no
                  6.2:/etc/ssh/sshd_config   配置文件中將#GSSAPIAuthentication 

          no 的#號去掉,更改成GSSAPIAuthentication no
                  6.3:/etc/ssh/sshd_config   配置文件中將PermitRootLogin no修改

          為yes 
                  6.4:   
                  6.5:/etc/ssh/sshd_config   配置文件中將PasswordAuthentication 

          no修改為yes就可以了
                  6.6:/etc/nsswitch.conf     配置文件中,將hosts:files dns  改

          成:hosts:files
                  6.7:/etc/init.d/sshd restart         重啟sshd進程使配置生效
                  
                  其中6.1、6.2、6.6都是處于性能方面考慮
              
              7、鏡像中存在bcec提供的setIp、rc.local等腳本。
              
              經(jīng)過在39.4環(huán)境測試,操作過程從原始鏡像 -> 新虛擬機 -> 制作鏡像鏡像 -> 

          新鏡像虛擬機,網(wǎng)卡都沒有問題,都是eth0。

           Centos6.0制作鏡像網(wǎng)卡問題總結(jié)-zhgp 
          posted @ 2012-06-15 11:07 David1228 閱讀(1004) | 評論 (0)編輯 收藏

          禁用 SSH 遠(yuǎn)程主機的公鑰檢查

          SSH 公鑰檢查是一個重要的安全機制,可以防范中間人劫持等黑客攻擊。但是在特定情況下,嚴(yán)格的 SSH 公鑰檢查會破壞一些依賴 SSH 協(xié)議的自動化任務(wù),就需要一種手段能夠繞過 SSH 的公鑰檢查。

          首先看看什么是 SSH 公鑰檢查

          SSH 連接遠(yuǎn)程主機時,會檢查主機的公鑰。如果是第一次該主機,會顯示該主機的公鑰摘要,提示用戶是否信任該主機:
          The authenticity of host '192.168.0.110 (192.168.0.110)' can't be established. RSA key fingerprint is a3:ca:ad:95:a1:45:d2:57:3a:e9:e7:75:a8:4c:1f:9f. Are you sure you want to continue connecting (yes/no)? 
          當(dāng)選擇接受,就會將該主機的公鑰追加到文件 ~/.ssh/known_hosts 中。當(dāng)再次連接該主機時,就不會再提示該問題了。 如果因為某種原因(服務(wù)器系統(tǒng)重裝,服務(wù)器間IP地址交換,DHCP,虛擬機重建,中間人劫持),該IP地址的公鑰改變了,當(dāng)使用 SSH 連接的時候,會報錯:
          @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05. Please contact your system administrator. Add correct host key in /home/jiangxin/.ssh/known_hosts to get rid of this message. Offending key in /home/jiangxin/.ssh/known_hosts:81 RSA host key for 192.168.0.110 has changed and you have requested strict checking. Host key verification failed. 
          上面的警告信息說的是:
          • 服務(wù)器公鑰已經(jīng)改變,新的公鑰的摘要是:e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05.
          • 該服務(wù)器原來的公鑰記錄在文件 ~/.ssh/known_hosts 中第 81 行。
          如果確認(rèn)不是中間人劫持,需要連接到該服務(wù)器,怎么辦呢?最簡單的就是用 vi 打開 ~/.ssh/known_hosts 文件,定位到 81 行,將該行刪除。之后就可以使用 ssh 連接了。

          如何讓連接新主機時,不進行公鑰確認(rèn)?

          在首次連接服務(wù)器時,會彈出公鑰確認(rèn)的提示。這會導(dǎo)致某些自動化任務(wù),由于初次連接服務(wù)器而導(dǎo)致自動化任務(wù)中斷。或者由于  ~/.ssh/known_hosts 文件內(nèi)容清空,導(dǎo)致自動化任務(wù)中斷。 SSH 客戶端的 StrictHostKeyChecking 配置指令,可以實現(xiàn)當(dāng)?shù)谝淮芜B接服務(wù)器時,自動接受新的公鑰。只需要修改 /etc/ssh/ssh_config 文件,包含下列語句:
          Host *  StrictHostKeyChecking no 
          或者在 ssh 命令行中用 -o 參數(shù)
          $ ssh  -o StrictHostKeyChecking=no  192.168.0.110

          如何防止遠(yuǎn)程主機公鑰改變導(dǎo)致 SSH 連接失敗

          當(dāng)確認(rèn)中間人劫持攻擊風(fēng)險比較小的情況下,才可以使用下面的方法,禁用 SSH 遠(yuǎn)程主機的公鑰檢查。 SSH 客戶端提供一個 UserKnownHostsFile 配置,允許指定不同的 known_hosts 文件。那么將 known_hosts 指向不同的文件,不就不會造成公鑰沖突導(dǎo)致的中斷了么?
          $ ssh -o UserKnownHostsFile=/dev/null 192.168.0.110 The authenticity of host '192.168.0.110 (192.168.0.110)' can't be established. RSA key fingerprint is e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05. Are you sure you want to continue connecting (yes/no)? 
          看,提示信息由公鑰改變中斷警告,變成了首次連接的提示。 和之前提到的 StrictHostKeyChecking 配置配合使用,則不再有任何警告出現(xiàn)了:
          $ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 192.168.0.110 Warning: Permanently added '192.168.0.110' (RSA) to the list of known hosts. jiangxin@192.168.0.110's password: 
          如果設(shè)置了無口令 SSH 登錄(即通過客戶端公鑰認(rèn)證),就可以直接連接到遠(yuǎn)程主機。這是基于 SSH 協(xié)議的自動化任務(wù)常用的手段。

          轉(zhuǎn)自: http://www.worldhello.net/2010/04/08/1026.html 
          可參考資料:http://www.symantec.com/connect/articles/ssh-host-key-protection
          posted @ 2012-06-15 09:30 David1228 閱讀(426) | 評論 (0)編輯 收藏

          在Set中有一個排序的集合SortedSet,用來保存按照自然順序排列的對象。Queue中同樣引入了一個支持排序的FIFO模型。

          并發(fā)隊列與Queue簡介 中介紹了,PriorityQueue和PriorityBlockingQueue就是支持排序的Queue。顯然一個支持阻塞的排序Queue要比一 個非線程安全的Queue實現(xiàn)起來要復(fù)雜的多,因此下面只介紹PriorityBlockingQueue,至于PriorityQueue只需要去掉 Blocking功能就基本相同了。

           轉(zhuǎn)自: http://www.aygfsteel.com/xylz/archive/2010/07/30/327582.htm

          排序的BlockingQueue — PriorityBlockingQueue

          先簡單介紹下PriorityQueue,因為PriorityBlockingQueue內(nèi)部就是通過PriorityQueue適配實現(xiàn)的,只不過通過鎖進行同步和阻塞而已。

          PriorityQueue是一個數(shù)組實現(xiàn)的,是一個二叉樹的實現(xiàn),這個二叉樹的任意一個節(jié)點都比其子節(jié)點要小,這樣頂點就是最小的節(jié)點。每一個元 素或者節(jié)點要么本身是可比較的(Comparable),或者隊列本身帶有一個比較器(Comparator<? super E>),所有元素就是靠比較自身的大小來確定順序的。而數(shù)組中頂點就是數(shù)組的第0個元素,因此出隊列的話總是取第0個元素。對于第0個元素,其子節(jié) 點是第1個元素和第2個元素,對于第1個元素,其子元素又是第3/4個元素,以此類推,第i個元素的父節(jié)點就是(i-1)/2。這樣任意一個元素加入隊列 就從其父節(jié)點(i-1)/2開始比較,一旦新節(jié)點比父節(jié)點小就交換兩個節(jié)點,然后繼續(xù)比較新節(jié)點與其新的父節(jié)點。知道所有節(jié)點都是按照父節(jié)點一定比子節(jié)點 小的順序排列。這是一個有點復(fù)雜的算法,此處不再討論更多的細(xì)節(jié)。不管是刪除還是查找,我們只需要了解的頂點(索引為0的元素)總是最小的。

          特別需要說明的是PriorityQueue是一個無界的隊列,也就是說一旦元素的個數(shù)達(dá)到了數(shù)組的大小,那么就將數(shù)組擴大50%,這樣這個數(shù)組就是無窮大的。當(dāng)然了如果達(dá)到了整數(shù)的最大值就會得到一個OutOfMemoryError,這個是由邏輯保證的。

           

          對于PriorityBlockingQueue而言,由于是無界的,因此就只有非空的信號,也就是說只有take()才能阻塞,put是永遠(yuǎn)不會阻塞(除非達(dá)到Integer.MAX_VALUE直到拋出一個OutOfMemoryError異常)。

          只有take()操作的時候才可能因為隊列為空而掛起。同時其它需要操作隊列變化和大小的只需要使用獨占鎖ReentrantLock就可以了,非常方便。需要說明的是PriorityBlockingQueue采用了一個公平的鎖。

           

          總的來說PriorityBlockingQueue 不是一個FIFO的隊列,而是一個有序的隊列,這個隊列總是取“自然順序”最小的對象,同時又是一個只能出隊列阻塞的BlockingQueue,對于入隊列卻不是阻塞的。所有操作都是線程安全的。

           

          直接交換的BlockingQueue — SynchronousQueue

           

          這是一個很有意思的阻塞隊列,其中每個插入操作必須等待另一個線程的移除操作,同樣任何一個移除操作都等待另一個線程的插入操作。因此此隊列內(nèi)部其 實沒有任何一個元素,或者說容量是0,嚴(yán)格說并不是一種容器。由于隊列沒有容量,因此不能調(diào)用peek操作,因為只有移除元素時才有元素。

          一個沒有容量的并發(fā)隊列有什么用了?或者說存在的意義是什么?

          SynchronousQueue 的實現(xiàn)非常復(fù)雜,當(dāng)然了如果真要去分析還是能夠得到一些經(jīng)驗的,但是前面分析了過多的結(jié)構(gòu)后,發(fā)現(xiàn)越來越陷于數(shù)據(jù)結(jié)構(gòu)與算法里面了。我的初衷是通過研究并 發(fā)實現(xiàn)的原理來更好的利用并發(fā)來最大限度的利用可用資源。所以在后面的章節(jié)中盡可能的少研究數(shù)據(jù)結(jié)構(gòu)和算法,但是為了弄清楚里面的原理,必不可免的會涉及 到一些這方面的知識,希望后面能夠適可而止。

          再回到話題。SynchronousQueue 內(nèi)部沒有容量,但是由于一個插入操作總是對應(yīng)一個移除操作,反過來同樣需要滿足。那么一個元素就不會再SynchronousQueue 里面長時間停留,一旦有了插入線程和移除線程,元素很快就從插入線程移交給移除線程。也就是說這更像是一種信道(管道),資源從一個方向快速傳遞到另一方 向。

          需要特別說明的是,盡管元素在SynchronousQueue 內(nèi)部不會“停留”,但是并不意味之SynchronousQueue 內(nèi)部沒有隊列。實際上SynchronousQueue 維護者線程隊列,也就是插入線程或者移除線程在不同時存在的時候就會有線程隊列。既然有隊列,同樣就有公平性和非公平性特性,公平性保證正在等待的插入線 程或者移除線程以FIFO的順序傳遞資源。

          顯然這是一種快速傳遞元素的方式,也就是說在這種情況下元素總是以最快的方式從插入著(生產(chǎn)者)傳遞給移除著(消費者),這在多任務(wù)隊列中是最快處理任務(wù)的方式。在線程池的相關(guān)章節(jié)中還會更多的提到此特性。

           

          事實上在《并發(fā)隊列與Queue簡介》 中介紹了還有一種BlockingQueue的實現(xiàn)DelayQueue,它描述的是一種延時隊列。這個隊列的特性是,隊列中的元素都要延遲時間(超時時 間),只有一個元素達(dá)到了延時時間才能出隊列,也就是說每次從隊列中獲取的元素總是最先到達(dá)延時的元素。這種隊列的場景就是計劃任務(wù)。比如以前要完成計劃 任務(wù),很有可能是使用Timer/TimerTask,這是一種循環(huán)檢測的方式,也就是在循環(huán)里面遍歷所有元素總是檢測元素是否滿足條件,一旦滿足條件就 執(zhí)行相關(guān)任務(wù)。顯然這中方式浪費了很多的檢測工作,因為大多數(shù)時間總是在進行無謂的檢測。而DelayQueue 卻能避免這種無謂的檢測。在線程池的計劃任務(wù)部分還有更加詳細(xì)的討論此隊列實現(xiàn)。

           

          下面就對常見的BlockingQueue進行小節(jié)下,這里不包括雙向的隊列,盡管ConcurrentLinkedQueue不是可阻塞的Queue,但是這里還是將其放在一起進行對比。

           

          并發(fā)隊列比較

          如果不需要阻塞隊列,優(yōu)先選擇ConcurrentLinkedQueue;如果需要阻塞隊列,隊列大小固定優(yōu)先選擇 ArrayBlockingQueue,隊列大小不固定優(yōu)先選擇LinkedBlockingQueue;如果需要對隊列進行排序,選擇 PriorityBlockingQueue;如果需要一個快速交換的隊列,選擇SynchronousQueue;如果需要對隊列中的元素進行延時操 作,則選擇DelayQueue。

          posted @ 2012-03-19 14:45 David1228 閱讀(415) | 評論 (0)編輯 收藏

          2012-01-08 18:14:40     我來說兩句 
          收藏
          以前從來沒有使用過ruby,這兩天剛好要使用GitHub上的離線wiki系統(tǒng)gollum,所以要在偶的ubuntu下安裝ruby和ruby-gems。其中遇到一些問題:
           
           
           
          如果使用apt-get install ruby 和apt-get install rubygems1.8
           
          當(dāng)使用gem install 命令時報以下錯誤:
           
           
           
          ERROR: While executing gem ... (TypeError) instance of Date needs to have method `marshal_load
           
           
           
          可能是Ubuntu環(huán)境的原因,那么就改用rvm安裝,參考了http://beginrescueend.com/rvm/install/
           
          若以非root模式安裝:
           
           
           
          bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )
           
           
           
           
           添加rvm scripts路徑變量到bash:
           
           
           
               echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile
           
            
           
           讓新的bash生效:
           
           
           
               source ~/.bash_profile
           
           
           
          安裝ruby1.9.2:
           
              rvm install 1.9.2
           
           
           
          讓系統(tǒng)默認(rèn)使用1.92:
           
              rvm use 1.9.2 --default
           
           
           
           
           
           
          檢查安裝是否OK:
           
              ruby  -v
           
          --------------------------------------------
           
          接下來安裝rubygems
           
          先到官網(wǎng)下載安裝包http://rubygems.org/pages/download
           
           
           
           
          然后安裝
           
          ruby setup.rb
           
           
           
           
          默認(rèn)采用淘寶的Gem鏡像站點
           
           
           
           
          gem source http://ruby.taobao.org/
           
           
           
           
          接下來就可以使用gem install xxx命令了,just enjoy it!
           
           
           
           
          PS:如過使用gem install報錯,可能是Ubuntu本身少一些依賴,比如我安裝gollum時缺少依賴libxml2,libxslt,
           
          缺少啥就install 啥:
           
           
           
          apt-get install libxml2
           
          apt-get install libxslt
           
          轉(zhuǎn)自:
          http://www.2cto.com/os/201201/116337.html
          posted @ 2012-03-14 10:08 David1228 閱讀(993) | 評論 (0)編輯 收藏
           rpm --erase --allmatches --nodeps xmlrpc-c-devel-1.16.24-1206.1840.el5_7.4
          posted @ 2012-02-14 17:31 David1228 閱讀(448) | 評論 (0)編輯 收藏
          僅列出標(biāo)題
          共16頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 Last 

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章檔案

          新聞分類

          新聞檔案

          相冊

          收藏夾

          Java

          Linux知識相關(guān)

          Spring相關(guān)

          云計算/Linux/虛擬化技術(shù)/

          友情博客

          多線程并發(fā)編程

          開源技術(shù)

          持久層技術(shù)相關(guān)

          搜索

          •  

          積分與排名

          • 積分 - 359318
          • 排名 - 154

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 吐鲁番市| 抚宁县| 砚山县| 阿城市| 湖口县| 东阳市| 江都市| 麦盖提县| 昭觉县| 延吉市| 上饶市| 泸州市| 榆林市| 五寨县| 射阳县| 淮阳县| 隆德县| 海兴县| 进贤县| 东乡县| 黑山县| 玉田县| 高阳县| 达拉特旗| 香河县| 广宗县| 岫岩| 揭西县| 绥滨县| 噶尔县| 孟州市| 镇沅| 汝阳县| 河北省| 普宁市| 邯郸县| 深圳市| 萨嘎县| 乐都县| 江西省| 黄石市|