<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(390) | 評論 (0)編輯 收藏

    使用InputVerifier設計Swing校驗包

    盡管有許多針對Swing的校驗框架,并且Swing中也有API InputVerifier用于數據校驗,InputVerifier易于使用并且容易定制。本文將在InputVerifier的基礎上構建一個可用的校驗包,可以在其它的Swing應用之中。

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

    JTextField text = new JTextField();

    Text.setInputVerifier(new MyVerifier());

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

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

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

    3. 我們需要通知Form窗體每個組件的校驗結果,這樣的話Form窗體可以執行相應的動作。(例如啟動”OK”按鈕)

    4. 如果用戶改正了組件的錯誤數據,則錯誤提示信息應消失。

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

    WantsValidationStatus接口

    下面的接口可以提供一種方式用于出發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.

    }

    實現這個接口可以通知Form窗體校驗狀態,但是實現該接口不是必須的。我們也可以不是實現這個接口,如果校驗失敗不做任何事情。但是,我認為這樣的設計是比較優美的。接下來看看我們的抽象類。

    AbstractValidator類

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

    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()方法

    當需要校驗是調用方法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;

    }

    }

    調用方法如下:

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

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

    下圖是使用該校驗包的示例。

    image

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

    向導在今天的桌面應用中非常常用。向導應該是個什么樣子呢?相信你應該很清楚,因為你使用過很多的向導。也許你使用過一些安裝程序向導或是一些程序的配置向導。這篇文章,我們會創建一個簡單的向導框架。

    一個向導包括很多Panel,每個Panel里面包含用戶的配置組件或是文本域或是選擇框等。用戶點擊”Next”或是”Back”按鈕,在各個Panel之間切換,輸入需要的信息。注意的是,當最后一個Panel是”Next”按鈕要變成”Finish”按鈕,并且再次按下的時候向導關閉。在向導關閉的時,發起向導的類要得到向導Panel中所有的數據。在任何情況下,用戶可以點擊”Cancel”按鈕關閉向導并丟棄前面所填的所有數據。

    看上去很簡單是嗎?對的,但是有些設計細節我們需要考慮。

    第一,向導中的每個Panel不是都需要訪問的,換句話說,如果向導包含1到5個Panel,點擊”Next”按鈕可以從第一個Panel依次到第五個Panel,但是有時候可能由于用戶的選項直接從第一個Panel跳到第五個Panel. 而且還有的情況是,假設向導中需要連接到遠程服務器或是遠程數據庫,如果連接不上的,那么就不能到達下一個Panel。這樣向導中的Panel就像是樹形,你從樹的根開始,通過不同的分支到達葉子節點,這時”Next”按鈕變成”Finish”按鈕。

    第二,有些時候Next按鈕和Back按鈕需要禁用。比如,第一個Panel出現的時候,back按鈕應該禁用,因為沒有上一個Panel。另外,當有些值必須輸入的時候,沒有輸入的情況下Panel中的Next按鈕應該為禁用。

    第三,輸入的數據需要一直保持到用戶完成向導或是取消。因為當用戶點擊Back按鈕會到上一個Panel時,上一個Panel填寫的數據應該能夠保持,并且再次使用Next按鈕時,本Panel中的數據也應該保持。

    有了這些設計細節,我們可以考慮設計自己的向導了。我們先規劃下我們將要完成的一些類。

    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-這第三個類用于關聯wizard和panel。這個需要類用戶繼承,并用于標識Panel.這個類指定了訪問下一個和前一個Panel的規則,并且在Panel的顯示前,現實中,和顯示后執行相應的動作。

    Wizard

    首先我們需要創建一個用于顯示向導對話框本身,它包含有三個按鈕Back,Next,Cancel.一般這些按鈕是按照從左到右的順序分布的,另外Cancel按鈕要離其他的兩個按鈕遠一點,這樣防止用戶不小心點擊到Cancel按鈕。接下來,就用需要一個布局,可以在同一個區域顯示各個Panel,在AWT中有CardLayout布局。

    在這個設計中,我們使用一個簡單的方法來檢測我們的數據。下面我們看看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()方法,這個方法是用于布置界面中的組件和按鈕的,并且把按鈕事件關聯到控制器中。

    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,然而我們需要的是樹形結構,而不是線性的結構,因此我們需要使用標識符來標識各個Panel對象。

    public void registerWizardPanel(Object id, WizardPanelDescriptor panel) {

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

    wizardMdel.registerPanel(id, panel);

    }

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

    WizardPanelDescriptor

    注冊到Wizard的每個方法都需要繼承WizardPanelDescriptor類,這個類包含一些方法可以把組件集成到Wizard向導中。以下的四個方法:是訪問組件和組件對象標識符的方法。

    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初始化的時候都會執行Next這個方法,當Next和Back方法中返回的是null之的時候Next和Back按鈕被禁用。因此,Next方法不能用于數據的校驗,需要有另外的方法,在這里使用了一個Validator方法,當然如果數據需要校驗,也需要在WizardPanelDescriptor子類中進行覆蓋。具體如下:

    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

    最后,用上圖來表示Wizard類和其他幾個類之間的關系圖,并展示了兩個實例。

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

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

    簡單的一個例子如下:

    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 閱讀(3373) | 評論 (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 閱讀(1197) | 評論 (0)編輯 收藏

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

    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有關性的基本常識
    • 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像牛般強壯
    • 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?舌頭打結
    • bell the cat做危險的事
    • cats and dogs形同水火
    • Curiousity killed the cat.勿多管閑事
    • Let the cat out of the bag.泄漏機密
    • live a cat-and-dog life爭吵度日
    • It rains cats and dogs.傾盆大雨
    • There is not even enough room for swing a cat.無轉身之處
    • 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極有限的一點希望
    • 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.亡羊補牢

     

    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.亡羊補牢 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小鎮
    • You can lead a horse to water,but you can't make him drink.師傅領進門,修行在個人
    • 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.那位軟件設計師人人握有大部分的市場
    • Put one's head into the lion's mouth自愿冒險

    Monkey猴子

    • monkey/horse/idle/fool around鬼混
    • monkey business惡作劇 monkey
    • monkey on the back某事已成了負擔
    • Monkey see,monkey de.有樣學樣
    • 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養護為患
    • 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連鎖反應 others
    • to have or get butterfly in one's stomach非常緊張
    • The last straw breaks camel's back.忍無可忍
    • crocodile tears不真誠的同情
    • eat crow不得已認錯
    • 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奸細
    • One swallow does not make a summer
    • swan song最后作品
    • white elephant 昂貴而無用的東西。

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

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

    作者認為這種方法的好處有如下幾點:

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

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

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

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

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

    當然,作者也比較實事求是,也不會夸大這種方法的作用,作者將尋找新的方法來評估Wikipedia文章質量。

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

    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

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

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

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

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

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

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

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

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

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

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

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

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

    Tip 10: 做行標記

        移到需要標記的行按下Ctrl+F2,標記好了;走到文件的任意其他行,按F2,回到標記處??梢宰龆鄠€標記,這時F2在各個標記中循環走動。F2:Next Bookmark,Alt+F2:Previous Bookmark。

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

    Tip 12: 注釋

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

    Tip 13:編輯

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

    Tip 14:別讓它老問你是否把unix文件轉換尾dos文件

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

    Tip 15:

    打開文件內容中的文件 如果文件的內容里面有 "c:\test.txt" 或者"http://www.test.com/js/test.js"
    這樣的內容你可以把鼠標定位到上面,點右鍵。彈出的菜單最上邊會多個選項 "c:\test.txt" 或者"http://www.test.com/.../test.js"
    點擊它,打開相應文件。

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

    F3
    默認情況下,當你按F3的時候UE可以查找現在選中的內容,F3是下一個符合的內容,ctrl+f3是上一個符合的內容.(請查 看advanced/configuration/Find標簽)

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

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

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

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

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

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

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

    加入當前時間
    有時候寫代碼要注釋,比如那天改的,按一下F7試試。

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

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

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

    UE的project功能

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

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

    大塊代碼縮進的調整
    選中要調整的代碼塊 按tab,進行縮進,你再按一下shift+tab。效果咋樣?

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

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

    調整,添加語法高亮顯示
    advanced/configuration/syntax Highlighting 點擊下邊的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
    用的時候,下載相應的word file,復制出來,粘貼到d:Program Files\UltraEdit\WORDFILE.TXT,注意修改剛開始的/L1和你現有系統匹配。好像對xml.xsl的顯示不是很好,不夠準確

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

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

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

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

    數據挖掘中的任務大致包括以下幾個方面:

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

    數據挖掘中的步驟為:

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

    posted @ 2008-03-25 15:46 qiyadeng 閱讀(1115) | 評論 (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
    }
    如果導入的時候沒有異常的話,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>,對應的key是colors.text。
    3.訪問元素屬性的方法類似XPath的方法。
    4.返回的是list的元素,可以用getList()方法。就像上面例子中的buttons.name的內容是"OK,Cancel,Help",用getList()
    方法返回的是3個元素組成的List。這里的分隔符是“,”,可以通過setDefaultDelimiter()方法進行指定。
    5.可以操作propertiesConfiguration,就像是例子中的<default>元素。
    上面是個最簡單的XML格式,但是還有些相對復雜的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去取得表格的名字,返回的是什么類型呢?因為tables.table.name中的table和name
    有兩個地方都出現了。其實返回的是個Collection,
    Object prop = config.getProperty("tables.table.name");
    if(prop instanceof Collection)
    {
    	System.out.println("Number of tables: " + ((Collection) prop).size());
    }
    其實也可以用getList()方法來操作,這里如果你只想得到第一個tables.table.name,需要使用getString()方法就可以了。
    還有另外一個問題我們可以用getList()方法取到tables.table.fields.field.name,但是其實這些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的方法是為了,省略在下面子元素前全路徑。在實際應用中可能不一定會直接指定table(0),這可以結合上面的Object prop = config.getProperty("tables.table.name")進行迭代。

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

    僅列出標題
    共9頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 
    主站蜘蛛池模板: 中文字幕一精品亚洲无线一区| 女人18毛片a级毛片免费视频| 亚洲一区二区三区偷拍女厕| 西西人体大胆免费视频| 国产又黄又爽又刺激的免费网址 | 亚洲男人第一av网站| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲国产精品一区二区成人片国内 | 亚洲欧洲一区二区| 久久国产免费一区二区三区| 岛国片在线免费观看| 中文无码亚洲精品字幕| 女人18毛片免费观看| 国产精品亚洲一区二区三区在线观看 | 成人精品综合免费视频| 免费观看黄网站在线播放| 亚洲精品WWW久久久久久| 成年大片免费高清在线看黄| 中文字幕日韩亚洲| 99热精品在线免费观看| 不卡一卡二卡三亚洲| 你是我的城池营垒免费看| 亚洲天天做日日做天天欢毛片| 免费无码VA一区二区三区 | 国产免费资源高清小视频在线观看| 国产精品国产亚洲区艳妇糸列短篇| 国产免费69成人精品视频| 日韩精品无码免费专区午夜 | 亚洲Av无码精品色午夜| 日韩免费精品视频| 亚洲av色香蕉一区二区三区蜜桃| 免费午夜爽爽爽WWW视频十八禁| 两个人看的www免费视频| 中文字幕亚洲综合久久| 国产精品免费一级在线观看| 国产精品免费大片一区二区| 亚洲首页在线观看| 免费午夜爽爽爽WWW视频十八禁| 99久久久国产精品免费蜜臀| 337P日本欧洲亚洲大胆艺术图| 情人伊人久久综合亚洲|