qiyadeng

          專注于Java示例及教程
          posts - 84, comments - 152, trackbacks - 0, articles - 34

          Three Rules for Effective Exception Handling

          Best Practices for Exception Handling

          Exceptions in Java

          Designing with exceptions

          Exceptional practices, Part 1

          When catching exceptions, don't cast your net too wide

          Use nested exceptions in a multitiered environment

          Beware the dangers of generic Exceptions

          posted @ 2008-07-29 11:08 qiyadeng 閱讀(391) | 評論 (0)編輯 收藏

          使用InputVerifier設(shè)計Swing校驗(yàn)包

          盡管有許多針對Swing的校驗(yàn)框架,并且Swing中也有API InputVerifier用于數(shù)據(jù)校驗(yàn),InputVerifier易于使用并且容易定制。本文將在InputVerifier的基礎(chǔ)上構(gòu)建一個可用的校驗(yàn)包,可以在其它的Swing應(yīng)用之中。

          InputVerifier類在javax.swing包中。它有一個抽象方法,我們需要實(shí)現(xiàn)一個叫verify()的方法,這個方法接受一個JComponent作為參數(shù),返回值為true或false。一旦我們實(shí)現(xiàn)了verify()方法,我們可以在JTextField中使用如下:

          JTextField text = new JTextField();

          Text.setInputVerifier(new MyVerifier());

          然而,InputVerifier本身并沒有什么意思。它的作用是防止用戶輸入錯誤的信息在組件中,阻止用戶把輸入光標(biāo)移動到其他組件上。這種方式令人感到厭煩并且用戶不知道錯誤所在。InputVerifier并沒有提供一些更好的功能,所以我們需要構(gòu)建一個如下校驗(yàn)包:

          1. 如果數(shù)據(jù)不正確時,可以改變輸入組件的背景顏色。

          2. 如果數(shù)據(jù)不正確時,可以彈出消息提示用戶錯誤出在什么地方,應(yīng)該怎么處理。

          3. 我們需要通知Form窗體每個組件的校驗(yàn)結(jié)果,這樣的話Form窗體可以執(zhí)行相應(yīng)的動作。(例如啟動”O(jiān)K”按鈕)

          4. 如果用戶改正了組件的錯誤數(shù)據(jù),則錯誤提示信息應(yīng)消失。

          我們的包中包含一個抽象類,這個抽象類處理了大部分的工作,我們只需要實(shí)現(xiàn)一個方法,決定使用什么規(guī)則來進(jìn)行數(shù)據(jù)校驗(yàn);同時也提供一個接口,如果需要校驗(yàn)的Form窗體需要校驗(yàn)結(jié)果通知Form窗體,則可以實(shí)現(xiàn)該接口。好了,我們現(xiàn)在可以設(shè)計這個接口。

          WantsValidationStatus接口

          下面的接口可以提供一種方式用于出發(fā)Form窗體的制定事件。

          package ica.swing.validation;

          public interface WantsValidationStatus {

          void validateFailed(); // Called when a component has failed validation.

          void validatePassed(); // Called when a component has passed validation.

          }

          實(shí)現(xiàn)這個接口可以通知Form窗體校驗(yàn)狀態(tài),但是實(shí)現(xiàn)該接口不是必須的。我們也可以不是實(shí)現(xiàn)這個接口,如果校驗(yàn)失敗不做任何事情。但是,我認(rèn)為這樣的設(shè)計是比較優(yōu)美的。接下來看看我們的抽象類。

          AbstractValidator類

          AbstarctValidator處理了顯示出錯提示,改變出錯背景,通知Form窗體等許多工作。只留下一個抽象的方法待實(shí)現(xiàn),protected abstract Boolean validateCriteria(JComponent c),這個方法我們需要提供自己的校驗(yàn)規(guī)則用于校驗(yàn)組件。以下是抽象類:

          protected abstract boolean validationCriteria(JComponent c);

          public boolean verify(JComponent c) {

          if (!validationCriteria(c)) {

          c.setBackground(Color.PINK);

          //messageLabel.setSize(0,0);

          //messageLabel.setBackground(color);

          point = c.getLocation();

          double x =point.getX();

          double y = point.getY();

          Point p = new Point();

          p.setLocation(x,y+c.getHeight());

          tooltip= new HalfOpaqueToolTip(

          message, new Color( 250 , 250 , 200 ), Color.RED, Color.BLACK, 1,dialog,p );

          c.addMouseListener(tooltip);

          return false;

          }

          Verify()方法

          當(dāng)需要校驗(yàn)是調(diào)用方法boolean verify(JComponent c),下面用一例子示之。

          public class ToolTipsEmptyValidator extends ToolTipsAbstractValidator {

          public ToolTipsEmptyValidator(JDialog dialog, JTextField c, String message) {

          super(dialog, c, message);

          }

          public ToolTipsEmptyValidator(JFrame dialog, JTextField c, String message) {

          super(dialog, c, message);

          }

          public ToolTipsEmptyValidator(JDialog dialog, JTextArea c, String message) {

          super(dialog, c, message);

          }

          public ToolTipsEmptyValidator(JFrame dialog, JTextArea c, String message) {

          super(dialog, c, message);

          }

          @Override

          protected boolean validationCriteria(JComponent c) {

          if (c instanceof JTextField){

          if (((JTextField) c).getText().equals(""))

          return false;

          }

          else if (c instanceof JTextArea){

          if (((JTextArea) c).getText().equals(""))

          return false;

          }

          return true;

          }

          }

          調(diào)用方法如下:

          ToolTipsEmptyValidator validator1 = new ToolTipsEmptyValidator(jDialog,localdbPanel.getIpAddressField(),"Error,IP Address can't be empty");

          boolean flag1 = validator1.verify(localdbPanel.getIpAddressField());

          下圖是使用該校驗(yàn)包的示例。

          image

          posted @ 2008-07-27 10:43 qiyadeng 閱讀(2099) | 評論 (1)編輯 收藏

          向?qū)г诮裉斓淖烂鎽?yīng)用中非常常用。向?qū)?yīng)該是個什么樣子呢?相信你應(yīng)該很清楚,因?yàn)槟闶褂眠^很多的向?qū)АR苍S你使用過一些安裝程序向?qū)Щ蚴且恍┏绦虻呐渲孟驅(qū)А_@篇文章,我們會創(chuàng)建一個簡單的向?qū)Э蚣堋?

          一個向?qū)Оê芏郟anel,每個Panel里面包含用戶的配置組件或是文本域或是選擇框等。用戶點(diǎn)擊”Next”或是”Back”按鈕,在各個Panel之間切換,輸入需要的信息。注意的是,當(dāng)最后一個Panel是”Next”按鈕要變成”Finish”按鈕,并且再次按下的時候向?qū)шP(guān)閉。在向?qū)шP(guān)閉的時,發(fā)起向?qū)У念愐玫较驅(qū)anel中所有的數(shù)據(jù)。在任何情況下,用戶可以點(diǎn)擊”Cancel”按鈕關(guān)閉向?qū)РG棄前面所填的所有數(shù)據(jù)。

          看上去很簡單是嗎?對的,但是有些設(shè)計細(xì)節(jié)我們需要考慮。

          第一,向?qū)е械拿總€Panel不是都需要訪問的,換句話說,如果向?qū)О?到5個Panel,點(diǎn)擊”Next”按鈕可以從第一個Panel依次到第五個Panel,但是有時候可能由于用戶的選項(xiàng)直接從第一個Panel跳到第五個Panel. 而且還有的情況是,假設(shè)向?qū)е行枰B接到遠(yuǎn)程服務(wù)器或是遠(yuǎn)程數(shù)據(jù)庫,如果連接不上的,那么就不能到達(dá)下一個Panel。這樣向?qū)е械腜anel就像是樹形,你從樹的根開始,通過不同的分支到達(dá)葉子節(jié)點(diǎn),這時”Next”按鈕變成”Finish”按鈕。

          第二,有些時候Next按鈕和Back按鈕需要禁用。比如,第一個Panel出現(xiàn)的時候,back按鈕應(yīng)該禁用,因?yàn)闆]有上一個Panel。另外,當(dāng)有些值必須輸入的時候,沒有輸入的情況下Panel中的Next按鈕應(yīng)該為禁用。

          第三,輸入的數(shù)據(jù)需要一直保持到用戶完成向?qū)Щ蚴侨∠R驗(yàn)楫?dāng)用戶點(diǎn)擊Back按鈕會到上一個Panel時,上一個Panel填寫的數(shù)據(jù)應(yīng)該能夠保持,并且再次使用Next按鈕時,本Panel中的數(shù)據(jù)也應(yīng)該保持。

          有了這些設(shè)計細(xì)節(jié),我們可以考慮設(shè)計自己的向?qū)Я恕N覀兿纫?guī)劃下我們將要完成的一些類。

          Wizard-這個類包含模型(model)和控制器(controller),其主要是一個對話框(JDialog),并且包含有Next,Back和Cancel按鈕。還有一個使用CardLayout布局管理的大組件,可以把各個Panel顯示在上面。想下圖的樣子:

          clip_image002

          Java.awt.Componet的子類,這個類一般是繼承了java.awt.Componet,通常是一個javax.swing.JPanel.這個類是用于顯示在wizard類中的大組件位置。下圖是其中一個Panel。

          clip_image004

          WizardPanelDescriptor-這第三個類用于關(guān)聯(lián)wizard和panel。這個需要類用戶繼承,并用于標(biāo)識Panel.這個類指定了訪問下一個和前一個Panel的規(guī)則,并且在Panel的顯示前,現(xiàn)實(shí)中,和顯示后執(zhí)行相應(yīng)的動作。

          Wizard

          首先我們需要創(chuàng)建一個用于顯示向?qū)υ捒虮旧恚腥齻€按鈕Back,Next,Cancel.一般這些按鈕是按照從左到右的順序分布的,另外Cancel按鈕要離其他的兩個按鈕遠(yuǎn)一點(diǎn),這樣防止用戶不小心點(diǎn)擊到Cancel按鈕。接下來,就用需要一個布局,可以在同一個區(qū)域顯示各個Panel,在AWT中有CardLayout布局。

          在這個設(shè)計中,我們使用一個簡單的方法來檢測我們的數(shù)據(jù)。下面我們看看Wizard類:

          Public Class Wizard{

          private WizardModel wizardModel;

          private WizardController wizardController;

          private JDialog wizardDialog;

          private JPanel cardPanel;

          private CardLayout cardLayout;

          private JButton backButton;

          private JButton nextButton;

          private JButton cancelButton;

          private MainFrame mainFrame;

          private int returnCode;

          public Wizard(MainFrame owner) {

          this.mainFrame = owner;

          wizardModel = new WizardModel();

          wizardDialog = new JDialog(owner);

          Point np = owner.getLocation();

          wizardDialog.setLocation(np);

          initComponents();

          }

          }

          注意到initComponents()方法,這個方法是用于布置界面中的組件和按鈕的,并且把按鈕事件關(guān)聯(lián)到控制器中。

          private void initComponents() {

          JPanel buttonPanel = new JPanel();

          Box buttonBox = new Box(BoxLayout.X_AXIS);

          cardPanel = new JPanel();

          cardPanel.setBorder(new EmptyBorder(new Insets(5, 10, 5, 10)));

          cardLayout = new CardLayout();

          cardPanel.setLayout(cardLayout);

          backButton = new JButton();

          nextButton = new JButton();

          cancelButton = new JButton();

          backButton.setActionCommand(BACK_BUTTON_ACTION_COMMAND);

          nextButton.setActionCommand(NEXT_BUTTON_ACTION_COMMAND);

          cancelButton.setActionCommand(CANCEL_BUTTON_ACTION_COMMAND);

          buttonPanel.setLayout(new BorderLayout());

          buttonPanel.add(separator, BorderLayout.NORTH);

          buttonBox.setBorder(new EmptyBorder(new Insets(5, 10, 5, 10)));

          buttonBox.add(backButton);

          buttonBox.add(Box.createHorizontalStrut(10));

          buttonBox.add(nextButton);

          buttonBox.add(Box.createHorizontalStrut(30));

          buttonBox.add(cancelButton);

          buttonPanel.add(buttonBox, java.awt.BorderLayout.EAST);

          wizardDialog.getContentPane().add(buttonPanel, java.awt.BorderLayout.SOUTH);

          wizardDialog.getContentPane().add(cardPanel, java.awt.BorderLayout.CENTER);

          }

          接下來,我們要把Componet Panel注冊到Wizard中。Wzard中使用registerWizardPanel()方法。我們知道CardLayout布局中包含有next(),previous()這樣的方法來回翻動Panel,然而我們需要的是樹形結(jié)構(gòu),而不是線性的結(jié)構(gòu),因此我們需要使用標(biāo)識符來標(biāo)識各個Panel對象。

          public void registerWizardPanel(Object id, WizardPanelDescriptor panel) {

          cardPanel.add(panel.getPanelComponent(), id);

          wizardMdel.registerPanel(id, panel);

          }

          最后wizard中是用setCurrentPanel(Object id)來設(shè)置,Wizard初始化時顯示的第一個Panel。剩下的就是一些事件處理,比較簡單。Wizard中大量的使用Wizard來保存數(shù)據(jù),并使用WizardController來處理對話框本身的事件。

          WizardPanelDescriptor

          注冊到Wizard的每個方法都需要繼承WizardPanelDescriptor類,這個類包含一些方法可以把組件集成到Wizard向?qū)е小R韵碌乃膫€方法:是訪問組件和組件對象標(biāo)識符的方法。

          public final void setPanelComponent(Component panel) {

          targetPanel = panel;

          }

          public final Component getPanelComponent() {

          return targetPanel;

          }

          public final Object getPanelDescriptorIdentifier() {

          return panelIdentifier;

          }

          public final void setPanelDescriptorIdentifier(Object id) {

          panelIdentifier = id;

          }

          下面是比較重要的一部分,就是每個繼承類都需要改寫的一些方法。包括控制Next,Back之后顯示的Panel。在每次Panel初始化的時候都會執(zhí)行Next這個方法,當(dāng)Next和Back方法中返回的是null之的時候Next和Back按鈕被禁用。因此,Next方法不能用于數(shù)據(jù)的校驗(yàn),需要有另外的方法,在這里使用了一個Validator方法,當(dāng)然如果數(shù)據(jù)需要校驗(yàn),也需要在WizardPanelDescriptor子類中進(jìn)行覆蓋。具體如下:

          public Object getNextPanelDescriptor() {

          return null;

          }

          public Object getBackPanelDescriptor() {

          return null;

          }

          public boolean validator(){

          return true;

          }

          另外提供三個方法,用于控制Panel顯示前,顯示中和顯示后的事件。

          public void aboutToDisplayPanel() {

          }

          public void displayingPanel() {

          }

          public void aboutToHidePanel() {

          }

          WizardPanelDescriptor

          clip_image007

          最后,用上圖來表示W(wǎng)izard類和其他幾個類之間的關(guān)系圖,并展示了兩個實(shí)例。

          posted @ 2008-07-26 16:46 qiyadeng 閱讀(1907) | 評論 (2)編輯 收藏

          ci-bayes實(shí)現(xiàn)了兩種貝葉斯分類方法:a Navie implementation 和 a Fisher implementation,是Toby segaran's 的書"Programming Collective Intelligence"的一部分的Java實(shí)現(xiàn)版本。

          簡單的一個例子如下:

          FisherClassifier fc=new FisherClassifierImpl();
          fc.train("The quick brown fox jumps over the lazy dog's tail","good");
          fc.train("Make money fast!", "bad"); 
          String classification=fc.getClassification("money"); // should be "bad"

          posted @ 2008-06-25 10:16 qiyadeng 閱讀(3374) | 評論 (2)編輯 收藏

          水星(Mercury)
          金星(Venus)
          地球(Earth)
          火星(Mars)
          木星(Jupiter)
          土星(Saturn)
          天王星(Uranus)
          海王星(Neptune)
          冥王星(Pluto)

          planets_518

          Twelve Years of Animals( 12生肖)
          1.Year of the Rat 鼠年
          2.Year of the Ox 牛年
          3.Year of the Tiger 虎年
          4.Year of the Rabbit 兔年
          5.Year of the Dragon 龍年
          6.Year of the Snake 蛇年
          7.Year of the Horse 馬年
          8.Year of the Goat 羊年
          9.Year of the Monkey 猴年
          10.Year of the Rooster 雞年
          11.Year of the Dog 狗年
          12.Year of the Boar 豬年

          Twelve Constellations (12星座):
          1.Aquarius(the Water Carrier)水瓶座
          2.Pisces(the Fishes)雙魚座
          3.Aries(the Ram)白羊座
          4.Taurus(the Bull)金牛座
          5.Gemini(the Twins)雙子座
          6.Cancer(the Crab)巨蟹座
          7.Leo(the Lion)獅子座
          8.Virgo(the Virgin)處女座
          9.Libra(the Scales)天秤座
          10.Scorpio(the Scorpion)天蝎座
          11.Sagittarius(the Archer)射手座
          12.Capricorn(the Goat)山羊座

          posted @ 2008-05-31 12:12 qiyadeng 閱讀(1199) | 評論 (0)編輯 收藏

          一下是一些收集的關(guān)于動物的習(xí)語。有些沒有翻譯的分兩種情況,一是從字面意思很容易看出來,而寫出來不一定準(zhǔn)確的;另外一類是我還不確定其真正的含義。

          bear  Bear 熊

          • bear market 熊市-空頭市場
          • You can't have your cake and eat it too.魚和熊掌不可兼得

           

           

           Bird 鳥

          • A bird in the hand is worth two in the bush. bird
          • A little bird told me.
          • a bird's-eys view鳥瞰
          • Birds of a feather flock together.物以類聚
          • eat like a bird吃的很少,食量小
          • Fine feathers make fine birds.人要衣裝,佛要金裝。
          • give a person the bird喝倒彩
          • Kill two birds with one stone.一石二鳥
          • the birds and the bees有關(guān)性的基本常識
          • The early birds catches the worm.早起的鳥兒有蟲吃
          • newbie菜鳥

          bull

          Bull,calf,cattle,cow,ox牛

          • bull market 牛市-多頭市場
          • bull session 閑談,男性之間的談話
          • like a bull in china shop笨手笨腳
          • to milk the bull緣木求魚
          • You can't sell the cow and drink the milk.與和熊掌不可兼得
          • why buy the cow when the milk is free.
          • Take the bull by the horns.勇敢的客服困難,挺身而出
          • as dumb as an ox像公牛一般沉默
          • as strong as an ox像牛般強(qiáng)壯
          • dirnk lisk a fish牛飲
          • as stubborn as mule牛脾氣
          • talk horse吹牛
          • to eat like a horse食量大如牛
          • to lead a dog's life 牛馬不如的生活
          • to cast the pearls before swine對牛彈琴

          cat

          Cat, Kitten貓

          • A cat has nine lives.
          • cat-and-mouse玩弄,折磨
          • cat burglar蜘蛛盜
          • cat house妓院
          • cat nap/sleep小睡
          • Cat got you tongue?舌頭打結(jié)
          • bell the cat做危險的事
          • cats and dogs形同水火
          • Curiousity killed the cat.勿多管閑事
          • Let the cat out of the bag.泄漏機(jī)密
          • live a cat-and-dog life爭吵度日
          • It rains cats and dogs.傾盆大雨
          • There is not even enough room for swing a cat.無轉(zhuǎn)身之處
          • She is a scary cat.很容易受到驚嚇
          • While the cat is away, the mice will play.貓去鼠嬉

          chicken

          Chicken ,cock,hen,rooster雞

          • a hen party女性聚會
          • chicken pox水痘
          • chicken out臨陣脫逃
          • cock-eyed斜眼的
          • henpeck對丈夫作威作福
          • Which comes first,the chicken or the eggs?
          • better to be the head of duck than the ass of a horse寧為雞頭不為鳳尾

          dalmatians

          Dog, doggie, puppy狗

          • a dog in the manager 鳩占鵲巢
          • an old dog can't learn new tricks
          • Barking dogs seldom bite.會叫的狗不咬人
          • doggy bag剩菜袋
          • dog's life生活艱難
          • dog-eat-dog world
          • dog tired
          • a dog chance極有限的一點(diǎn)希望
          • dog's day很熱的日子
          • dog-eared書頁的折角
          • dog eat dog無情而野蠻的競爭
          • dog sleep小寐
          • Every dog has its day.狗也有出頭的日子
          • Let sleeping dog lie.少惹麻煩
          • Love me ,love my dog.愛屋及烏
          • put on the dog裝腔作勢
          • red dog beer私家釀酒
          • top dog人上人
          • paparazzi狗仔隊
          • bite the hands the feed one
          • You can't make a silk purse out of sow's ear.夠最終吐不出象牙

          fish

          Fish魚

          • cold fish冷淡的人
          • drink like a fish酗酒
          • There are other fish in the sea天涯何處無芳草

          Goat,lamb,sheep,kid羊

           

          • as gentle as a lamb像綿羊一樣溫和 goat
          • a black sheep害群之馬
          • follow like sheep盲目順從
          • separate the sheep from and goats辨別好人與壞人
          • Lock the stable door after the horse is stolen.亡羊補(bǔ)牢

           

          Goose鵝

          • as silly as goose像鵝般蠢 goose
          • Fair for the goose is fair for gander
          • goose bump雞皮疙瘩
          • goose egg考零分
          • gooseflesh雞皮疙瘩
          • Kill the goose that lays the golden eggs.殺雞取卵

           

          Hog,pig,swine,sow豬

          • road hog擋道的自私駕駛 hog
          • bleed like a stuck pig大量出血
          • eat like a pig吃的多而且吃相不好
          • make a pig of oneself狼吞虎咽
          • Pig may fly.Or to milk the bull.

          Horse,pony馬

          • Don't put the cart before the horse.不要本末倒置
          • Don't ride the high horse.不要妄自尊大
          • Every horse thinks its own pack heaviest.
          • It is useless to flog a dead horse.鞭策死馬,徒勞無功
          • Lock the stable after the horse has gone.亡羊補(bǔ)牢 horse
          • Don't look a gift horse in the mouth.受贈之馬,勿探其齒
          • Zeal without knowledge is runaway horse.
          • Don't change horses in mid-stream.
          • a horse of a different color
          • a dark horse黑馬
          • from the horse's mouth第一手消息
          • horses sense常識
          • I can eat a horse.
          • one-horse town小鎮(zhèn)
          • You can lead a horse to water,but you can't make him drink.師傅領(lǐng)進(jìn)門,修行在個人
          • Cruise chicks泡馬子
          • All lay loads on a willing horse馬善被人騎
          • leapfrog
          • piggyback fight騎馬打仗

          Lion獅子 lion

          • as brave as a lion像獅子般勇敢
          • That software designer still the lion's share of the market.那位軟件設(shè)計師人人握有大部分的市場
          • Put one's head into the lion's mouth自愿冒險

          Monkey猴子

          • monkey/horse/idle/fool around鬼混
          • monkey business惡作劇 monkey
          • monkey on the back某事已成了負(fù)擔(dān)
          • Monkey see,monkey de.有樣學(xué)樣
          • monkey uncle吃驚

           

          Mouse,rat鼠

          • as poor as church mouse
          • rat fink告密者 mouse
          • a rug rat指不會走路的小嬰兒
          • I can smell the rat.我覺得事有蹊蹺。
          • Rats!胡說八道,該死,可惡

          Snake蛇

          • a snake in the grass口蜜腹劍的人
          • Once bitten twice shy.一朝被蛇咬,十年怕井繩。
          • to cherish a snake in one's bosom養(yǎng)護(hù)為患
          • crawl蛇行 snake
          • overdo it畫蛇添足

          Tiger,cub虎

          • ride the tiger騎虎難下
          • the ass in the lions skin狐假虎威
          • How can one get the tiger cubs if one does not enter tiger den?不入虎穴,焉得虎子

           tiger

          Other Animal其他

          • as big as a whale
          • as blind as a bat
          • as busy as a bee
          • as pround as peacock
          • as slow as a turtle
          • as slow as a snail
          • as sly as a fox
          • as stupid as a donkey
          • as stubborn as a mule
          • as wise as an owl
          • butterfly effect連鎖反應(yīng) others
          • to have or get butterfly in one's stomach非常緊張
          • The last straw breaks camel's back.忍無可忍
          • crocodile tears不真誠的同情
          • eat crow不得已認(rèn)錯
          • A deer caught in the headlight.手足無措
          • eagle-eyed眼力好
          • mad as a March hare
          • A leopard can't change his spots.江山易改本性難移。
          • pet peeve不能忍受的事
          • stag party男人的聚會
          • stool pigeon奸細(xì)
          • One swallow does not make a summer
          • swan song最后作品
          • white elephant 昂貴而無用的東西。

          posted @ 2008-05-15 14:05 qiyadeng 閱讀(15068) | 評論 (0)編輯 收藏

            在剛剛結(jié)束的的WWW2008的會議中,有篇超短的paper 《Size Matters: Word Count as a Measure of Quality on Wikipedia》,這篇文章針對Wikipedia的質(zhì)量的評估,提出了一種方法來評估一個Wikipedia文章的質(zhì)量,這種方法很簡單,就是數(shù)文章字?jǐn)?shù)(Word Count)。

          作者認(rèn)為這種方法的好處有如下幾點(diǎn):

          1.文章的長度很容易測量;

          2.許多其他的方法需要一些其他的信息,而這些信息不是很容易得到;

          3.許多其他的方式對用戶來說不容易理解;

          4.文章的長度評估的方法比其他的復(fù)雜的方法更有意義。

          (說的好像是一點(diǎn)簡單^_^)這確實(shí)是一種簡單的方法,但是效率怎么樣?根據(jù)作者的實(shí)驗(yàn),這個方法在二個分類(featured and random)的情況下能得到96.3%的準(zhǔn)確率。

          當(dāng)然,作者也比較實(shí)事求是,也不會夸大這種方法的作用,作者將尋找新的方法來評估Wikipedia文章質(zhì)量。

          除了這篇文章,其實(shí)還有其他幾種方法,可以參看下面這些論文:

          1.Information Quality Discussion in Wikipedia

          2.Assessing Information Quality of a Community-Base Encyclopedia

          3.Measuring Wikipedia

          4.Wikipedia Article Quality Assessment and Ranking Tips for Users and Search Engine Engineers

            這些文章雖然都是關(guān)于wiki質(zhì)量討論的,但是研究的意義很重大。特別是針對目前網(wǎng)絡(luò)的信息泛濫的情況下,需要用一種方式來評估信息的有用性,這樣可以讓我們更輕松找到我們需要的有用信息,同樣搜索引擎如果能判斷提供給我們的文章的質(zhì)量好壞,這也就免去了我們很多時間去挑選了。

          對于推薦系統(tǒng)(如新聞、文章推薦系統(tǒng)),用戶很少評分的情況下,可以采用這種方法自動給項(xiàng)目評分。

          posted @ 2008-05-08 13:07 qiyadeng 閱讀(1170) | 評論 (0)編輯 收藏

          UltraEdit 是每天必用的工具之一.但想想看,實(shí)際使用到的功能只是這個工具強(qiáng)大功能的極小的一部分.靈活使用這個工具有的時候能起到事半功倍的效果.記錄并收集一些小技巧對自己對別人都有幫助.因?yàn)槲以谑褂?列編輯"這樣的編輯方式還令我的一個同事看到之后很驚訝,之前他從來不知道有這個用法.這也是寫這個備忘文檔的目的。

          Tip 1: 如何去掉所編輯文本中包含特定字符串的行? 
          這則技巧是在UltraEdit的幫助文件里提到.CTRL+R 調(diào)出來替換(Replace)窗口,選中"使用正則表達(dá)式";然后用查找 %*你的字符串*^p 替換成空內(nèi)容即可.如,我當(dāng)前有個文本文件,需要去掉所有包含 http://www.dbanotes.net/ 這個字符串的行,查找%*http://www.dbanotes.net/*^p 替換成空即可.注意,^p 是 DOS 文件類型的換行符.如果是 Unix 類型文件,則用 ^n.

          Tip 2: 如何在行末添加特定字符,比如逗號?
          有了上面的經(jīng)驗(yàn)(其實(shí)我第一次是從同事那里學(xué)到的),CTRL+R 調(diào)出來替換(Replace)窗口,選中"使用正則表達(dá)式".然后可以查找 ^p(或者^n,如果是Unix 文件),用 ,^p(或者,^n)進(jìn)行"全部替換"即可.補(bǔ)充一點(diǎn),如果是 MAC(Apple) 類型文件,則換行符號為 ^r .

          Tip 3: 如何刪除空行?
          參考上面兩個例子,查找 ^p$ 然后替換為空即可.

          Tip 4: 編輯文件如何加入時間戳 ?
          F7 快捷鍵即可.你試試看?

          Tip 5: 為何 拷貝(Copy)/粘貼(Paste)功能不能用了?
          不怕大家笑話,我有幾次使用 UltraEdit 的過程中發(fā)現(xiàn)拷貝與粘貼的內(nèi)容是不匹配的.不知所以然,干脆重新啟動了筆記本.今天翻看手冊才恍然大悟:UltraEdit有10個剪切板 (clipboard),分別用Ctrl+0 - Ctrl+9 切換. Ctrl+0 是 Windows 的,其他則為用戶自定義的.我在使用的過程中錯調(diào)用了 CTRL+n, 結(jié)果內(nèi)容就有問題了.你遇到過沒?

          Tip 6: 即使是打開小文件也有遲延?
          這是我遇到過的問題.每次打開文件的時候總有幾秒鐘的耽擱.我的機(jī)器性能可不算差.怎么回事? 網(wǎng)絡(luò)打印機(jī)搞得鬼!
          打開"高級"->"設(shè)置"->"編輯器"->"高級",看看是不是選中了"載入/恢復(fù)打印機(jī)設(shè)置"?如果是的話,去掉(不同的版本/漢化與否可能該位置所在有差別).

          Tip 7:打開*.ec,*.hea文件時代碼自動高亮度顯示。

              菜單路徑:Advanced-Configuration-Syntax Highlighting頁下部,選擇“Open”按鈕打開文件C:\Program Files\UltraEdit\wordfile.txt,修改該文件第一行,在后邊的”File Extensions = C CPP CC CXX H HPP AWK”后加上”EC HEA”保存即可。

          Tip 8: 把常用的菜單功能做成快捷按鈕放在面板上。

              菜單路徑:Advanced-Configuration-Toolbar,選中左邊喜歡的功能菜單,選中右邊的位置,點(diǎn)擊Insert即可。比如”Dos to Unix”用于把dos下的回車鍵去掉,“Compare files”用來比對文件,”Display Ruler”,”Display Line Numbers”,最讓人驚喜的居然還有一個”ASCII table”的功能,不用每次查ASCII碼的時候都去翻箱倒柜了,呵呵。不過可顯示字符的ASCII值可以通過直接查看16進(jìn)制模式看到,不用這么麻煩。

          Tip 9: 列模式(快捷鍵:Alt+C)
          當(dāng)你需要批量修改數(shù)據(jù)或者造數(shù)據(jù)的時候,這個功能顯示了強(qiáng)大威力。試試打開一個文件,按下Alt+C,Ctrl+A,開始寫字,你會發(fā)現(xiàn)文件中所有的行都在執(zhí)行相同的動作,一排相同的數(shù)據(jù)就出現(xiàn)了。動動腦筋你會發(fā)現(xiàn)各種奇妙的用法。

          Tip 10: 做行標(biāo)記

              移到需要標(biāo)記的行按下Ctrl+F2,標(biāo)記好了;走到文件的任意其他行,按F2,回到標(biāo)記處。可以做多個標(biāo)記,這時F2在各個標(biāo)記中循環(huán)走動。F2:Next Bookmark,Alt+F2:Previous Bookmark。

          Tip 11: 列標(biāo)志
          寫后臺程序的時候不希望一行寫的太長,一般要小于80個字節(jié),但即使顯示了標(biāo)尺也看不大清楚屏幕中下部的行是否已經(jīng)到了80字節(jié),除非看下部狀態(tài)條的列號。這時這個東西就起作用了。菜單路徑:View-Set Column Markers,可以設(shè)置兩個列標(biāo)志,我們先設(shè)第一個,在第一個編輯框中填入80,再選擇View-Show Column Marker 1,看到了?第80字節(jié)的地方出現(xiàn)了一條豎線。

          Tip 12: 注釋

          有時調(diào)試程序時需要把連續(xù)的多行用“//”注釋,然后還要放開注釋,一行一行寫太土了吧,有現(xiàn)成的東西用。選定要注釋的行,Edit-Comment
          Add增加注釋,Edit-Comment Remove。

          Tip 13:編輯

              選定整個單詞當(dāng)然可以用鼠標(biāo)雙擊,用鍵盤Ctrl+J。刪除整行Ctrl+E,刪除到行首Ctrl+F11,刪除到行尾Ctrl+F12。

          Tip 14:別讓它老問你是否把unix文件轉(zhuǎn)換尾dos文件

          到了9.0版本打開unix文件的時候它總是會問是否轉(zhuǎn)換為dos文件,實(shí)在很煩。不過可以屏蔽,Advanced-Configuration-General,把右中部的Auto Convert Unix Files點(diǎn)上就好了。

          Tip 15:

          打開文件內(nèi)容中的文件 如果文件的內(nèi)容里面有 "c:\test.txt" 或者"http://www.test.com/js/test.js"
          這樣的內(nèi)容你可以把鼠標(biāo)定位到上面,點(diǎn)右鍵。彈出的菜單最上邊會多個選項(xiàng) "c:\test.txt" 或者"http://www.test.com/.../test.js"
          點(diǎn)擊它,打開相應(yīng)文件。

          ctrl+b 寫程序的時候,括號一般要一一對應(yīng)的,但是如果嵌套太多,看花眼了,怎么辦?你把光標(biāo)放在括號開始的地方,按ctrl+b,UE 會幫你找到相對應(yīng)的括號結(jié)尾的地方。你還可以試試連著多按幾次ctrl+b。 [Stick Out Tongue]

          F3
          默認(rèn)情況下,當(dāng)你按F3的時候UE可以查找現(xiàn)在選中的內(nèi)容,F(xiàn)3是下一個符合的內(nèi)容,ctrl+f3是上一個符合的內(nèi)容.(請查 看advanced/configuration/Find標(biāo)簽)

          ctrl+f2
          程序會有很多行你當(dāng)然可以記得你要到的行數(shù),然后用ctrl+g,然后輸入行號,到所在的行。但是用ctrl+f2我覺得更方便。比如說你要頻繁在多個function中切換。可以在function開始的地方,按一下ctrl+f2,給這一行加一個書簽。然后再另外的function開始的地方,也來一下ctrl+f2,有書簽的地方,字的背景色會不同。當(dāng)你想換到下一個書簽的時候,就按f2,但是想到上一個標(biāo)簽怎么辦?ctrl+f2?不對,嘿嘿,
          再按就是加書簽或者取消當(dāng)前行的書簽了。應(yīng)該是alt +f2.

          簡單的用正則表達(dá)式的查找替換
          有時候會有一些簡單文本處理的工作。比如你手頭有一個文本,需要給所有行后邊添加一個";"。用查找替換來完成ctrl +r,查找 '^p' 替換為'^p;',(記得選中regular Expressions,這樣才能用正則表達(dá)式的功能。)然后你可以選replace all(alt+a),或者點(diǎn)開始,一個一個的查找,替換,這樣的好處是知道都替換了那些,有些時候你可能不想全部替換

          把類似'{$abc}'替換為'var abc=abc;',abc有可能是其他字符ctrl+r,查找 '{^$^(*^)}' 替換為'var ^1=^1;'(記得選中regular Expressions,這樣才能用正則表達(dá)式的功能。)然后你可以選replace all(alt+a),或者點(diǎn)開始,一個一個的查找,替換。

          自定義快捷鍵
          UE很多功能都有快捷鍵,但不是所有的都有。11.00有一個Text2html的功能。我工作中遇到了要對大量代碼進(jìn)行這種操 作的情況。我就想自己定一個快捷鍵。
          advanced/configuration/key mapping
          在commands 里面找到你要用的command.我這里是HTMLConvertSpecialChars,然后點(diǎn)Pres s new key下面的輸入框,設(shè)置一個自己覺得爽,不沖突的快捷鍵。比如ctrl+alt+s.然后點(diǎn)ok.這樣用常用的功能,可以成倍 提高效率。

          計算選中區(qū)域數(shù)字的和
          比如如下文本
          2
          23a1
          4 1.1
          5
          6
          先選中,然后Column/(sum column/Selection),UE會以空格,字母分割數(shù)字,告訴你一個總數(shù)

          UE的列編輯功能
          首先要alt+c,進(jìn)入列編輯模式。進(jìn)入后,你可以用鼠標(biāo)選擇一個方形的區(qū)域。刪除,復(fù)制全看你喜歡了。
          如果你想在每一行第二個字符開始加入一個'test',在列編輯模式下,定位光標(biāo)到第一行,第二列。
          Column/(Insert/Fill column)
          ,你還可以用這個功能插入行數(shù)。在列編輯狀態(tài)下的復(fù)制粘貼都很有意思,某些情況下可以取得意想不到的效果。

          UE的比較
          UE內(nèi)置一個比較功能,可以幫你比較2個文件的不同
          file/compare files...
          如果你打開了2個要比較的文件,UE會把這2個文件自動填入2個要比較的文件位置,不然,你要用browse功能去找到那2個文件,設(shè)置一下text還是bin,是否要ignore一些你不關(guān)心的東西。然后點(diǎn)擊compare就到比較界面。你可以設(shè)置只顯示不同或者相同或者都顯示。日常的應(yīng)用是可以了。(有點(diǎn)像BC,不知道誰抄誰的 )

          加入當(dāng)前時間
          有時候?qū)懘a要注釋,比如那天改的,按一下F7試試。

          打開的文件中切換
          如果打開多個文件,要在多個文件中切換,用鼠標(biāo)點(diǎn),麻煩,試一下ctrl+tab。好多多窗口的軟件都支持這個功能。

          恢復(fù)到上次存盤狀態(tài)
          一個文件改動多了,想undo到最初狀態(tài),file/revert to saved.

          文件備份,重命名
          一個文件要備份,你如果選save as了,那當(dāng)前打開的就是你save as之后的文件了。
          用fle/(make copy/backup),你還可以直接重命名當(dāng)前編輯的文件 file/Rename file

          UE的project功能

          11.00以后有了一個自動打開上次關(guān)閉時打開著的文件這個功能了,以前好像沒有。這就可以用到Project功能。其實(shí)就是定 義一組相關(guān)的文件。project/(new project/workspace)               UE會要求你存一個*.prj的文件。下次你可以打開UE的時候,project/(o pen project/workspace),繼續(xù)上次的那個project的session工作。也可以file/(recent project/workspace)

          UE的function列表功能
          打開一個程序文件,比如*.js,確保view/view as(*)/Javascript。選擇view/(view/lists)/function list.也可以用F8

          大塊代碼縮進(jìn)的調(diào)整
          選中要調(diào)整的代碼塊 按tab,進(jìn)行縮進(jìn),你再按一下shift+tab。效果咋樣?

          UE的右鍵功能
          1)去處行末的空格
          選中要去空格的區(qū)域。點(diǎn)右鍵/format/menu../trim trailing spaces
          2)刪除整行
          定位光標(biāo)要刪除的行。點(diǎn)右鍵/delete/delete line,(也可以用ctrl+e)
          3)給代碼加注釋
          首先要確定選中了正確的語法加亮顯示 view/view as(*)/Javascript   然后選中要注釋的部分
          點(diǎn)右鍵/delete/comment add 或者comment remove
          4)格式化代碼
          首先要確定選中了正確的語法加亮顯示 view/view as(*)/Javascript
          然后選中要格式化的部分,就是讓代碼的縮進(jìn)好看點(diǎn),點(diǎn)右鍵/format menu/reIndent selection
          不過,如果你的代碼是一行,沒有按照句子分號。好像沒啥效果。

          5)復(fù)制當(dāng)前編輯文件的路徑如果你要把當(dāng)前文件作其他處理,需要這個文件的路徑,這個
          功能可以不用再去敲路徑點(diǎn)右鍵 copy file path/name
          6)復(fù)制當(dāng)前編輯文件的路徑::點(diǎn)右鍵copy file path/name
          7)打開文件內(nèi)容中的文件: 如果文件的內(nèi)容里面有"c:test.txt" 或者"http://www.test.com/js/test.js"
          這樣的內(nèi)容。你可以把鼠標(biāo)定位到上面,點(diǎn)右鍵。彈出的菜單最上邊會多個選項(xiàng)
          "c:test.txt" 或者"http://www.test.com/.../test.js",點(diǎn)擊它,打開相應(yīng)文件。

          調(diào)整,添加語法高亮顯示
          advanced/configuration/syntax Highlighting 點(diǎn)擊下邊的full path name for word list后邊的open
          打開的文件如:d:Program FilesUltraEditWORDFILE.TXT,就是UE語法高亮顯示的配置文件
          /L1"C/C++" 就是第一種語言,/L2就是第二種。目前這些word files 可以從下面連接下載到
          http://www.ultraedit.com/index.php?...id=40#wordfiles
          用的時候,下載相應(yīng)的word file,復(fù)制出來,粘貼到d:Program Files\UltraEdit\WORDFILE.TXT,注意修改剛開始的/L1和你現(xiàn)有系統(tǒng)匹配。好像對xml.xsl的顯示不是很好,不夠準(zhǔn)確

          運(yùn)行dos命令,直接得到結(jié)果
          F9,會跳出來一個窗口,讓你輸入命令和工作目錄。比如 dir c: 會列出來c盤的目錄。如果你要給朋友發(fā)目錄列表,除了從dos窗口復(fù)制過來,還可以用這個簡單的方法。加上一下簡單的列編輯。結(jié) 果就更好看了。

          內(nèi)置的ascii table
          view/ascii table
          有時候需要知道某個字母的ascii值,從這里就能查出來
          !是33
          A是65
          。。。

          內(nèi)置的多個剪貼板 你點(diǎn)右鍵可以看到
          clipboards,里面內(nèi)置了10個剪貼板。按說windows的copy只能復(fù)制一個內(nèi)容。如果你要復(fù)制多個內(nèi)容,跟據(jù)不 同的情況進(jìn)行粘貼,這10個剪貼板,應(yīng)該夠你用了。ctrl+0-9的數(shù)字鍵,是在剪貼板之間切換。比如 ctrl+1,然后copy了內(nèi)容"a";ctrl+2,然后copy了內(nèi)容"b" 你如果想paste a,就要先按1下ctrl+1再ctrl+v,要paste
          b,就按一下ctrl+2再 ctrl+v。我有時候不小心更換了剪貼板,就奇怪從別的地方復(fù)制的東西粘貼不過來。這種情況要注意。

          posted @ 2008-05-05 19:08 qiyadeng 閱讀(3308) | 評論 (0)編輯 收藏

          數(shù)據(jù)挖掘中的任務(wù)大致包括以下幾個方面:

          1、分類:通過一個帶有類標(biāo)記的訓(xùn)練數(shù)據(jù)集,建立一個分類模型,通過對一系列屬性的考察,可以對對象的類型進(jìn)行預(yù)測,這是有監(jiān)督的學(xué)習(xí);
          2、估計,例如:分析消費(fèi)模型,估計個人收入和孩子數(shù)目;
          3、預(yù)言,例如:根據(jù)個人教育、當(dāng)前工作、行業(yè)趨勢、預(yù)言2009年的工資;
          4、密切性發(fā)掘,例如:關(guān)聯(lián)規(guī)則發(fā)掘和相關(guān)性分析
          5、聚集:主要針對沒有類標(biāo)記的數(shù)據(jù),建立一個歸類模型,讓同一類的對象有盡量大的相似性,不同類的對象有盡量大的差異,這是無監(jiān)督的學(xué)習(xí);
          6、偏差分析
          7、異常檢測:發(fā)現(xiàn)不同于正常模式的數(shù)據(jù),多用于風(fēng)險規(guī)避、入侵檢測。
          (關(guān)于監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí),請查看Machine Learning, Part I: Supervised and Unsupervised Learning或是譯文)

          數(shù)據(jù)挖掘中的步驟為:

          1、數(shù)據(jù)規(guī)范化(消除錯誤和不一致的數(shù)據(jù))和集成(從不同數(shù)據(jù)源提取數(shù)據(jù));
          2、數(shù)據(jù)選擇和變換(提取任務(wù)相關(guān)數(shù)據(jù),根據(jù)需要轉(zhuǎn)換成統(tǒng)一的、適合挖掘的形式);
          3、數(shù)據(jù)挖掘(使用合適的算法,在有效的時間內(nèi)完成);
          4、模式評估(根據(jù)某種興趣度量,識別表示知識的真正有趣的模式);
          5、數(shù)據(jù)挖掘結(jié)論的表示(使用可視化和知識表示技術(shù),向用戶提供挖掘的知識)

          posted @ 2008-03-25 15:46 qiyadeng 閱讀(1117) | 評論 (0)編輯 收藏

          <?xml version="1.0" encoding="ISO-8859-1" ?>
          <gui-definition>
            <colors>
              <background>#808080</background>
              <text>#000000</text>
              <header>#008000</header>
              <link normal="#000080" visited="#800080"/>
              <default>${colors.header}</default>
            </colors>
            <rowsPerPage>15</rowsPerPage>
            <buttons>
              <name>OK,Cancel,Help</name>
            </buttons>
            <numberFormat pattern="###\,###.##"/>
          </gui-definition>
          以上是個很簡單的XML,首先肯定是把這個文件載入(就把上面這個文件命名為table.xml吧)
          try
          {
              XMLConfiguration config = new XMLConfiguration("tables.xml");
              // do something with config
          }
          catch(ConfigurationException cex)
          {
              // something went wrong, e.g. the file was not found
          }
          如果導(dǎo)入的時候沒有異常的話,config對象就可以使用了,讀取的方法如下:
          String backColor = config.getString("colors.background");
          String textColor = config.getString("colors.text");
          String linkNormal = config.getString("colors.link[@normal]");
          String defColor = config.getString("colors.default");
          int rowsPerPage = config.getInt("rowsPerPage");
          List buttons = config.getList("buttons.name");
          下面說明下需要注意的幾個地方:
          1.首先根元素是被忽略的,在上面的例子中不是寫gui-definition.colors.text,而是寫成colors.text。
          2.使用“.”符號訪問子元素。在上面的例子中訪問<colors>元素中的<text>,對應(yīng)的key是colors.text。
          3.訪問元素屬性的方法類似XPath的方法。
          4.返回的是list的元素,可以用getList()方法。就像上面例子中的buttons.name的內(nèi)容是"OK,Cancel,Help",用getList()
          方法返回的是3個元素組成的List。這里的分隔符是“,”,可以通過setDefaultDelimiter()方法進(jìn)行指定。
          5.可以操作propertiesConfiguration,就像是例子中的<default>元素。
          上面是個最簡單的XML格式,但是還有些相對復(fù)雜的XML,如下:
          <?xml version="1.0" encoding="ISO-8859-1" ?>
          
          <database>
            <tables>
              <table tableType="system">
                <name>users</name>
                <fields>
                  <field>
                    <name>uid</name>
                    <type>long</type>
                  </field>
                  <field>
                    <name>uname</name>
                    <type>java.lang.String</type>
                  </field>
                  <field>
                    <name>firstName</name>
                    <type>java.lang.String</type>
                  </field>
                  <field>
                    <name>lastName</name>
                    <type>java.lang.String</type>
                  </field>
                  <field>
                    <name>email</name>
                    <type>java.lang.String</type>
                  </field>
                </fields>
              </table>
              <table tableType="application">
                <name>documents</name>
                <fields>
                  <field>
                    <name>docid</name>
                    <type>long</type>
                  </field>
                  <field>
                    <name>name</name>
                    <type>java.lang.String</type>
                  </field>
                  <field>
                    <name>creationDate</name>
                    <type>java.util.Date</type>
                  </field>
                  <field>
                    <name>authorID</name>
                    <type>long</type>
                  </field>
                  <field>
                    <name>version</name>
                    <type>int</type>
                  </field>
                </fields>
              </table>
            </tables>
          </database>
          像上面例子中用tables.table.name key去取得表格的名字,返回的是什么類型呢?因?yàn)閠ables.table.name中的table和name
          有兩個地方都出現(xiàn)了。其實(shí)返回的是個Collection,
          Object prop = config.getProperty("tables.table.name");
          if(prop instanceof Collection)
          {
          	System.out.println("Number of tables: " + ((Collection) prop).size());
          }
          其實(shí)也可以用getList()方法來操作,這里如果你只想得到第一個tables.table.name,需要使用getString()方法就可以了。
          還有另外一個問題我們可以用getList()方法取到tables.table.fields.field.name,但是其實(shí)這些filed.name并不是屬于同
          一個table,這樣的話,就需要使用如下的方法:
          List fields = config.configurationsAt("tables.table(0).fields.field");
          for(Iterator it = fields.iterator(); it.hasNext();)
          {
              HierarchicalConfiguration sub = (HierarchicalConfiguration) it.next();
              // sub contains now all data about a single field
              String fieldName = sub.getString("name");
              String fieldType = sub.getString("type");
              ...

          第一行中是使用configurationsAt的方法是為了,省略在下面子元素前全路徑。在實(shí)際應(yīng)用中可能不一定會直接指定table(0),這可以結(jié)合上面的Object prop = config.getProperty("tables.table.name")進(jìn)行迭代。

          posted @ 2008-03-20 12:06 qiyadeng 閱讀(3628) | 評論 (1)編輯 收藏

          僅列出標(biāo)題
          共9頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 
          主站蜘蛛池模板: 青龙| 屯门区| 仪陇县| 同江市| 丹东市| 吴忠市| 大竹县| 花莲县| 安达市| 六盘水市| 达日县| 金华市| 阳山县| 宁陕县| 子洲县| 景泰县| 安泽县| 沈阳市| 丽水市| 积石山| 古蔺县| 上蔡县| 鄂托克旗| 通道| 图木舒克市| 江源县| 洛浦县| 辉县市| 永修县| 都兰县| 铜鼓县| 平昌县| 交城县| 双桥区| 渭源县| 法库县| 正蓝旗| 河津市| 仙居县| 灌云县| 修水县|