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

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

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

    隨筆-109  評論-187  文章-25  trackbacks-0
      2006年12月13日
    利用免費的英語角把英語練好

    北京  也樂英語為了滿足廣大英語愛好者的需要特推出周末免費英語角服務,

    北京英語角的組織形式如下:

        1:由也樂英語派出一名外教和一名助理負責組織英語角的活動。

        2: 英語角每周組織一次活動,也樂英語培訓學校提供一間教室為大家的活動場所。

        3:英語愛好者可以免費參加英語角的活動,不收取任何費用,此活動是公益活動,也樂英

    語不收取任何費用,也不限制參加次數。

        4:也樂英語免費提供給英語愛好者茶水、咖啡、以及活動所采用的書籍報紙。

        5:每周一到2個話題,由外教提前一周告訴大家,大家可以簡單準備,以便在課堂上
            跟外教以及同學交流。
       
        6:外教會糾正大家的發音、語法、詞匯上的錯誤,會形成一些總結,也希望大家能夠暢所

    欲言,大膽的說英語。

         7:所有參加英語角的愛好者,請您在交流期間把手機調為靜音。

         也樂英語地址:北京豐臺區馬家堡西路15號 時代風帆大廈2區1901
         交通狀況:地鐵四號線角門西站A口上樓即可。 51、501、54、529、698、646、707 嘉園

    二里東門下車
         聯系電話:010-58423871  15330275871

          此活動由于報名數量眾多,所以需要大家提前預約。
          也樂英語網站:www.yellenglish.com
          也樂英語 爭做北京最好的英語角.
    posted @ 2011-06-19 09:35 小小程序程序員混口飯吃 閱讀(2137) | 評論 (0)編輯 收藏
    我認為最大的沖擊莫過于 惠普,oracle跟惠普的直接競爭會加大,從合作變為競爭,我認為惠普如果不收購redhat來對抗,未來肯定落下風!
    posted @ 2009-04-22 09:56 小小程序程序員混口飯吃 閱讀(644) | 評論 (0)編輯 收藏
         摘要: 上篇文章講述了jacorb 的配置,本章講敘其應用,隨后的幾篇文章會重點講述corba的開發   JACORB開發以及corba的請求方式:    JacORB的應用開發一般分為以下五步: 1.寫IDL接口定義 2.編譯IDL接口定義生成Java類 3.實現步驟2中生成的接口 4.寫服務器啟動類,并注冊到ORB 5.寫客戶端去獲取服務對象引用 &nb...  閱讀全文
    posted @ 2007-11-22 10:41 小小程序程序員混口飯吃 閱讀(8315) | 評論 (2)編輯 收藏

                       how to setup jacorb dev env
    1:download JacORB_2_2

           http://www.jacorb.org/download.html
      download ant
           http://ant.apache.org/bindownload.cgi

    2:extact JacORB_2_2.jar to d:\JacORB_2_2

    3:setup sys environment

           set ANT_HOME=
           set JAVA_HOME=
           set JACORB_HOME=d:\JacORB_2_2
           set PATH=%PATH%;%ANT_HOME%\bin;%JAVA_HOME%\bin;%JACORB_HOME%\bin;
           set CLASSPAHT=.;%CLASSPAHT%;%ANT_HOME%\lib\ant.jar;%JACORB_HOME%\lib\jarorb.jar;%JACORB_HOME%\lib\idl.jar\;%JACORB_HOME%\lib\logkit-1.2.jar

    4:rename %JACORB_HOME%\etc\jacorb_properties.template to %JACORB_HOME%\etc\jacorb.properties
      and modify the 50th line to 53th line to
     
           #ORBInitRef.NameService=file:/y:/nsiona.ref
          
    ORBInitRef.NameService=file://d://test//NS_Ref
          
    #ORBInitRef.NameService=http://www.x.y.z/~user/NS_Ref
          
    #ORBInitRef.TradingService=http://www.x.y.z/~user/TraderRef
     
      modify 618th line to
           jacorb.naming.ior_filename=d://test//NS_Ref

    5:rename  %JACORB_HOME%\jacotemplate.bat to %JACORB_HOME%\jaco.bat
     
      and modify related env variable
     
      rename   %JACORB_HOME%\idltemplate.bat to %JACORB_HOME%\idl.bat
      
      and modify related env variable

     

    6:  use ant compile and build idl and java


         cd  %JACORB_HOME%\demo\grid  

         run ant
       
         the generate class file in %JACORB_HOME%\classes  and generated java file in %JACORB_HOME%\demo\grid


    7: open a new cmd window:
              cd %JACORB_HOME%   ns
     
       you can see the following result:   
           [ configuration jacorb loaded from file %JAORB_HOME%\etc\jacorb.properties]

       open a new cmd window:
              cd %JACORB_HOME%   jaco demo.grid.Server
      you can see the following result:   
      [ configuration jacorb loaded from file %JAORB_HOME%\etc\jacorb.properties]
      
      open a new cmd window:
              cd %JACORB_HOME%   jaco demo.grid.client
        you can see the following result:   
     
      [ configuration jacorb loaded from file D:\work\nj\JACORB\etc\jacorb.properties]
       Height = 31
       Width = 14
       Old value at (30,13): 0.21
       Setting (30,13) to 470.11
       New value at (30,13): 470.11
       MyException, reason: This is only a test exception, no harm done :-)
       done.

    posted @ 2007-11-21 10:36 小小程序程序員混口飯吃 閱讀(4263) | 評論 (4)編輯 收藏
     
    oracle的分析函數over 及開窗函數
    一:分析函數over
    Oracle從8.1.6開始提供分析函數,分析函數用于計算基于組的某種聚合值,它和聚合函數的不同之處是
    對于每個組返回多行,而聚合函數對于每個組只返回一行。
    下面通過幾個例子來說明其應用。                                       
    1:統計某商店的營業額。        
         date       sale
         1           20
         2           15
         3           14
         4           18
         5           30
        規則:按天統計:每天都統計前面幾天的總額
        得到的結果:
        DATE   SALE       SUM
        ----- -------- ------
        1      20        20           --1天           
        2      15        35           --1天+2天           
        3      14        49           --1天+2天+3天           
        4      18        67            .          
        5      30        97            .
         
    2:統計各班成績第一名的同學信息
        NAME   CLASS S                         
        ----- ----- ----------------------
        fda    1      80                     
        ffd    1      78                     
        dss    1      95                     
        cfe    2      74                     
        gds    2      92                     
        gf     3      99                     
        ddd    3      99                     
        adf    3      45                     
        asdf   3      55                     
        3dd    3      78              
       
        通過:   
        --
        select * from                                                                       
        (                                                                            
        select name,class,s,rank()over(partition by class order by s desc) mm from t2
        )                                                                            
        where mm=1
        --
        得到結果:
        NAME   CLASS S                       MM                                                                                        
        ----- ----- ---------------------- ----------------------
        dss    1      95                      1                      
        gds    2      92                      1                      
        gf     3      99                      1                      
        ddd    3      99                      1          
       
        注意:
        1.在求第一名成績的時候,不能用row_number(),因為如果同班有兩個并列第一,row_number()只返回一個結果          
        2.rank()和dense_rank()的區別是:
          --rank()是跳躍排序,有兩個第二名時接下來就是第四名
          --dense_rank()l是連續排序,有兩個第二名時仍然跟著第三名
         
         
    3.分類統計 (并顯示信息)
        A   B   C                      
        -- -- ----------------------
        m   a   2                      
        n   a   3                      
        m   a   2                      
        n   b   2                      
        n   b   1                      
        x   b   3                      
        x   b   2                      
        x   b   4                      
        h   b   3
       select a,c,sum(c)over(partition by a) from t2                
       得到結果:
       A   B   C        SUM(C)OVER(PARTITIONBYA)      
       -- -- ------- ------------------------
       h   b   3        3                        
       m   a   2        4                        
       m   a   2        4                        
       n   a   3        6                        
       n   b   2        6                        
       n   b   1        6                        
       x   b   3        9                        
       x   b   2        9                        
       x   b   4        9                        
      
       如果用sum,group by 則只能得到
       A   SUM(C)                            
       -- ----------------------
       h   3                      
       m   4                      
       n   6                      
       x   9                      
       無法得到B列值       
      
    =====

    select * from test

    數據:
    A B C
    1 1 1
    1 2 2
    1 3 3
    2 2 5
    3 4 6


    ---將B欄位值相同的對應的C 欄位值加總
    select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sum
    from test

    A B C C_SUM
    1 1 1 1
    1 2 2 7
    2 2 5 7
    1 3 3 3
    3 4 6 6



    ---如果不需要已某個欄位的值分割,那就要用 null

    eg: 就是將C的欄位值summary 放在每行后面

    select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sum
    from test

    A B C C_SUM
    1 1 1 17
    1 2 2 17
    1 3 3 17
    2 2 5 17
    3 4 6 17

     

    求個人工資占部門工資的百分比

    SQL> select * from salary;

    NAME DEPT SAL
    ---------- ---- -----
    a 10 2000
    b 10 3000
    c 10 5000
    d 20 4000

    SQL> select name,dept,sal,sal*100/sum(sal) over(partition by dept) percent from salary;

    NAME DEPT SAL PERCENT
    ---------- ---- ----- ----------
    a 10 2000 20
    b 10 3000 30
    c 10 5000 50
    d 20 4000 100

    二:開窗函數           
          開窗函數指定了分析函數工作的數據窗口大小,這個數據窗口大小可能會隨著行的變化而變化,舉例如下:
    1:     
       over(order by salary) 按照salary排序進行累計,order by是個默認的開窗函數
       over(partition by deptno)按照部門分區
    2:
      over(order by salary range between 5 preceding and 5 following)
       每行對應的數據窗口是之前行幅度值不超過5,之后行幅度值不超過5
       例如:對于以下列
         aa
         1
         2
         2
         2
         3
         4
         5
         6
         7
         9
       
       sum(aa)over(order by aa range between 2 preceding and 2 following)
       得出的結果是
                AA                       SUM
                ---------------------- -------------------------------------------------------
                1                       10                                                      
                2                       14                                                      
                2                       14                                                      
                2                       14                                                      
                3                       18                                                      
                4                       18                                                      
                5                       22                                                      
                6                       18                                                                
                7                       22                                                                
                9                       9                                                                 
                 
       就是說,對于aa=5的一行 ,sum為   5-1<=aa<=5+2 的和
       對于aa=2來說 ,sum=1+2+2+2+3+4=14     ;
       又如 對于aa=9 ,9-1<=aa<=9+2 只有9一個數,所以sum=9    ;
                  
    3:其它:
         over(order by salary rows between 2 preceding and 4 following)
              每行對應的數據窗口是之前2行,之后4行
    4:下面三條語句等效:           
         over(order by salary rows between unbounded preceding and unbounded following)
              每行對應的數據窗口是從第一行到最后一行,等效:
         over(order by salary range between unbounded preceding and unbounded following)
               等效
         over(partition by null)
    posted @ 2007-11-13 13:33 小小程序程序員混口飯吃 閱讀(50040) | 評論 (13)編輯 收藏

    由于一些原因,最近要復習一些東西,所以就把JMS的東西再復習一遍,以下便是例子

    jms 中最重要的幾個概念destination,ACKNOWLEDGE,subscribe,durable subscribe

    destination:topic queque
      queue簡單點說就是1:1 一個消息只能由一個consumer去消費,別的consumer來消費的時候已經沒了,先到先得
    topic簡單點說就是1:N 一個消息可以由多個consumer來消費,誰來消費都有
     subscribe,拿topic來說如果當前訂閱不是持久訂閱,只有再訂閱后生產者生產得消息才能被consumer得到,持久訂閱只要沒有被consumer消費,早晚會消費這個消息
     
     
     
     一下是幾個例子
     
     queuesend:queque消息產生
     queuereceive:queque消息得消費
     topicsend :topic消息得產生
     topicreceive1:topic消息的非訂閱
     topicrecieve2:topic消息的持久訂閱
     
     這個例子實在WEBLOGIC814上測試過的,當然要定義JMSSERVER,FACTORY,DESTINATION。
     
     
     
     QueueSend
     
     import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Hashtable;

    import javax.jms.JMSException;
    import javax.jms.Queue;
    import javax.jms.QueueConnection;
    import javax.jms.QueueConnectionFactory;
    import javax.jms.QueueSender;
    import javax.jms.QueueSession;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;

    public class QueueSend {
     // Defines the JNDI context factory.
     public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

     // Defines the JNDI provider url.
     public final static String PROVIDER_URL = " t3://localhost:7001";

     // Defines the JMS connection factory for the queue.
     public final static String JMS_FACTORY = "SendJMSFactory";

     // Defines the queue.
     public final static String QUEUE = "SendJMSQueue";

     private QueueConnectionFactory qconFactory;

     private QueueConnection qcon;

     private QueueSession qsession;

     private QueueSender qsender;

     private Queue queue;

     private TextMessage msg;

     /**
      * Creates all the necessary objects for sending messages to a JMS queue.
      *
      * @param ctx
      *            JNDI initial context
      * @param queueName
      *            name of queue
      * @exception NamingException
      *                if operation cannot be performed
      * @exception JMSException
      *                if JMS fails to initialize due to internal error
      */
     public void init(Context ctx, String queueName) throws NamingException,
       JMSException {
      qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
      qcon = qconFactory.createQueueConnection();
      qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      queue = (Queue) ctx.lookup(queueName);
      qsender = qsession.createSender(queue);
      msg = qsession.createTextMessage();
      qcon.start();
     }

     /**
      * Sends a message to a JMS queue.
      *
      * @param message
      *            message to be sent
      * @exception JMSException
      *                if JMS fails to send message due to internal error
      */
     public void send(String message) throws JMSException {
      msg.setText(message);
      qsender.send(msg);
     }

     /**
      * Closes JMS objects.
      *
      * @exception JMSException
      *                if JMS fails to close objects due to internal error
      */
     public void close() throws JMSException {
      qsender.close();
      qsession.close();
      qcon.close();
     }

     /**
      * main() method.
      *
      * @param args
      *            WebLogic Server URL
      * @exception Exception
      *                if operation fails
      */
     public static void main(String[] args) throws Exception {
      try {
       InitialContext ic = getInitialContext();
       QueueSend qs = new QueueSend();
       qs.init(ic, QUEUE);
       readAndSend(qs);
       qs.close();
      } catch (Exception e) {
       e.printStackTrace();
      }
     }

     private static void readAndSend(QueueSend qs) throws IOException,
       JMSException {
      BufferedReader msgStream = new BufferedReader(new InputStreamReader(
        System.in));
      String line = null;
      boolean quitNow = false;
      do {
       System.out.print("Enter message (\"quit\" to quit): ");
       line = msgStream.readLine();
       if (line != null && line.trim().length() != 0) {
        qs.send(line);
        System.out.println("JMS Message Sent: " + line + "\n");
        quitNow = line.equalsIgnoreCase("quit");
       }
      } while (!quitNow);

     }

     private static InitialContext getInitialContext() throws NamingException {
      Hashtable env = new Hashtable();
      env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
      env.put(Context.PROVIDER_URL, PROVIDER_URL);
      return new InitialContext(env);
     }

    }


    QueueReceive

    import java.util.Hashtable;

    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.Queue;
    import javax.jms.QueueConnection;
    import javax.jms.QueueConnectionFactory;
    import javax.jms.QueueReceiver;
    import javax.jms.QueueSession;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;

    public class QueueReceive implements MessageListener {
     // Defines the JNDI context factory.
     public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

     // Defines the JNDI provider url.
     public final static String PROVIDER_URL = " t3://localhost:7001";

     // Defines the JMS connection factory for the queue.
     public final static String JMS_FACTORY = "SendJMSFactory";

     // Defines the queue.
     public final static String QUEUE = "SendJMSQueue";

     private QueueConnectionFactory qconFactory;

     private QueueConnection qcon;

     private QueueSession qsession;

     private QueueReceiver qreceiver;

     private Queue queue;

     private boolean quit = false;

     /**
      * Message listener interface.
      *
      * @param msg
      *            message
      */
     public void onMessage(Message msg) {
      try {
       String msgText;
       if (msg instanceof TextMessage) {
        msgText = ((TextMessage) msg).getText();
       } else {
        msgText = msg.toString();
       }

       System.out.println("Message Received: " + msgText);

    //   if (msgText.equalsIgnoreCase("123")) {
    //    synchronized (this) {
    //     quit = true;
    //     this.notifyAll(); // Notify main thread to quit
    //    }
    //   }
      } catch (JMSException jmse) {
       jmse.printStackTrace();
      }
     }

     /**
      * Creates all the necessary objects for receiving messages from a JMS
      * queue.
      *
      * @param ctx
      *            JNDI initial context
      * @param queueName
      *            name of queue
      * @exception NamingException
      *                if operation cannot be performed
      * @exception JMSException
      *                if JMS fails to initialize due to internal error
      */
     public void init(Context ctx, String queueName) throws NamingException,
       JMSException {
      qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
      qcon = qconFactory.createQueueConnection();
      qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      queue = (Queue) ctx.lookup(queueName);
      qreceiver = qsession.createReceiver(queue);
      qreceiver.setMessageListener(this);
      qcon.start();
     }

     /**
      * Closes JMS objects.
      *
      * @exception JMSException
      *                if JMS fails to close objects due to internal error
      */
     public void close() throws JMSException {
      qreceiver.close();
      qsession.close();
      qcon.close();
     }

     /**
      * main() method.
      *
      * @param args
      *            WebLogic Server URL
      * @exception Exception
      *                if execution fails
      */

     public static void main(String[] args) throws Exception {

      InitialContext ic = getInitialContext();
      QueueReceive qr = new QueueReceive();
      qr.init(ic, QUEUE);

      System.out
        .println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");

      // Wait until a "quit" message has been received.
      synchronized (qr) {
       System.out.println("111111111111");
       while (!qr.quit) {
        try {
         System.out.println("2222222222");
         qr.wait();
         System.out.println("333333333");
        } catch (InterruptedException ie) {
        }
       }
      }
      qr.close();
     }

     private static InitialContext getInitialContext() throws NamingException {
      Hashtable env = new Hashtable();
      env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
      env.put(Context.PROVIDER_URL, PROVIDER_URL);
      return new InitialContext(env);
     }

    }

     

    TopicSend

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Hashtable;

    import javax.jms.JMSException;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.jms.Topic;
    import javax.jms.TopicConnection;
    import javax.jms.TopicConnectionFactory;
    import javax.jms.TopicSession;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.jms.TopicPublisher;
    public class TopicSend {
     // Defines the JNDI context factory.
     public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

     // Defines the JNDI provider url.
     public final static String PROVIDER_URL = " t3://localhost:7001";

     // Defines the JMS connection factory for the queue.
     public final static String JMS_FACTORY = "SendJMSFactory";

     // Defines the queue.
     public final static String TOPIC = "SendJMSTopic";

     private TopicConnectionFactory tconFactory;

     private TopicConnection tcon;

     private TopicSession tsession;

     private TopicPublisher tsender;

     private Topic topic;

     private TextMessage msg;
     public static InitialContext ic ;

     /**
      * Creates all the necessary objects for sending messages to a JMS queue.
      *
      * @param ctx
      *            JNDI initial context
      * @param queueName
      *            name of queue
      * @exception NamingException
      *                if operation cannot be performed
      * @exception JMSException
      *                if JMS fails to initialize due to internal error
      */
     public void init(Context ctx, String queueName) throws NamingException,
       JMSException {
      tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
      tcon = tconFactory.createTopicConnection();
      tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
      System.out.println(topic);
      topic = (Topic) ctx.lookup(queueName);
      System.out.println(topic);
      tsender = tsession.createPublisher(topic);
      msg = tsession.createTextMessage();
      tcon.start();
     }

     /**
      * Sends a message to a JMS queue.
      *
      * @param message
      *            message to be sent
      * @exception JMSException
      *                if JMS fails to send message due to internal error
      */
     public void send(String message) throws JMSException ,NamingException{
      System.out.println(topic+"-----------");
      msg.setText(message);
      tsender.publish(msg);
     }

     /**
      * Closes JMS objects.
      *
      * @exception JMSException
      *                if JMS fails to close objects due to internal error
      */
     public void close() throws JMSException {
      tsender.close();
      tsession.close();
      tcon.close();
     }

     /**
      * main() method.
      *
      * @param args
      *            WebLogic Server URL
      * @exception Exception
      *                if operation fails
      */
     public static void main(String[] args) throws Exception {
      try {
       ic= getInitialContext();
       TopicSend ts = new TopicSend();
       ts.init(ic, TOPIC);
       readAndSend(ts);
       ts.close();
      } catch (Exception e) {
       e.printStackTrace();
      }
     }

     private static void readAndSend(TopicSend ts) throws IOException,
       JMSException,NamingException {
      BufferedReader msgStream = new BufferedReader(new InputStreamReader(
        System.in));
      String line = null;
      boolean quitNow = false;
      do {
       System.out.print("Enter message (\"quit\" to quit): ");
       line = msgStream.readLine();
       if (line != null && line.trim().length() != 0) {
        ts.send(line);
       
        System.out.println("JMS Message Sent: " + line + "\n");
        quitNow = line.equalsIgnoreCase("quit");
       }
      } while (!quitNow);

     }

     private static InitialContext getInitialContext() throws NamingException {
      Hashtable env = new Hashtable();
      env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
      env.put(Context.PROVIDER_URL, PROVIDER_URL);
      return new InitialContext(env);
     }

    }

     

    TopicReceive1

    import java.util.Hashtable;

    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.jms.Topic;
    import javax.jms.TopicConnection;
    import javax.jms.TopicConnectionFactory;
    import javax.jms.TopicSession;
    import javax.jms.TopicSubscriber;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;


    public class TopicReceive1 implements MessageListener {
     // Defines the JNDI context factory.
     public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

     // Defines the JNDI provider url.
     public final static String PROVIDER_URL = " t3://localhost:7001";

     // Defines the JMS connection factory for the queue.
     public final static String JMS_FACTORY = "SendJMSFactory";

     // Defines the queue.
     public final static String TOPIC = "SendJMSTopic";

     private TopicConnectionFactory tconFactory;

     private TopicConnection tcon;

     private TopicSession tsession;

     private TopicSubscriber tsubscriber;

     private Topic topic;

     private boolean quit = false;

     /**
      * Message listener interface.
      *
      * @param msg
      *            message
      */
     public void onMessage(Message msg) {
      System.out.println("===================");
      try {
       String msgText;
       if (msg instanceof TextMessage) {
        msgText = ((TextMessage) msg).getText();
       } else {
        msgText = msg.toString();
       }

       System.out.println("Message Received: " + msgText);

    //   if (msgText.equalsIgnoreCase("123")) {
    //    synchronized (this) {
    //     quit = true;
    //     this.notifyAll(); // Notify main thread to quit
    //    }
    //   }
      } catch (JMSException jmse) {
       jmse.printStackTrace();
      }
     }

     /**
      * Creates all the necessary objects for receiving messages from a JMS
      * queue.
      *
      * @param ctx
      *            JNDI initial context
      * @param queueName
      *            name of queue
      * @exception NamingException
      *                if operation cannot be performed
      * @exception JMSException
      *                if JMS fails to initialize due to internal error
      */
     public void init(Context ctx, String queueName) throws NamingException,
       JMSException {
      tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
      tcon = tconFactory.createTopicConnection();
      tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
      topic = (Topic) ctx.lookup(queueName);
      tsubscriber = tsession.createSubscriber(topic);
      //System.out.println("12");
      //Message msg = treceiver.receive();
      //msg.acknowledge();
      //tsubscriber = tsession.createSubscriber(topic);Message msg = tsubscriber.receive();msg.acknowledge();
      //System.out.println(msg);
      tsubscriber.setMessageListener(this);
      tcon.start();
     }

     /**
      * Closes JMS objects.
      *
      * @exception JMSException
      *                if JMS fails to close objects due to internal error
      */
     public void close() throws JMSException {
      tsubscriber.close();
      tsession.close();
      tcon.close();
     }

     /**
      * main() method.
      *
      * @param args
      *            WebLogic Server URL
      * @exception Exception
      *                if execution fails
      */

     public static void main(String[] args) throws Exception {

      InitialContext ic = getInitialContext();
      TopicReceive1 tr1 = new TopicReceive1();
      tr1.init(ic, TOPIC);

      System.out
        .println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");
      
      

      // Wait until a "quit" message has been received.
    //  synchronized (tr1) {
    //   System.out.println("111111111111");
    //   while (!tr1.quit) {
    //    try {
    //     System.out.println("2222222222");
    //     tr1.wait();
    //     System.out.println("333333333");
    //    } catch (InterruptedException ie) {
    //    }
    //   }
    //  }
      tr1.close();
     }

     private static InitialContext getInitialContext() throws NamingException {
      Hashtable env = new Hashtable();
      env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
      env.put(Context.PROVIDER_URL, PROVIDER_URL);
      return new InitialContext(env);
     }

    }


    TopicReceive2


    import java.util.Hashtable;

    import javax.jms.JMSException;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.jms.Topic;
    import javax.jms.TopicConnection;
    import javax.jms.TopicConnectionFactory;
    import javax.jms.TopicSession;
    import javax.jms.TopicSubscriber;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;


    public class TopicReceive2 {
     // Defines the JNDI context factory.
     public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

     // Defines the JNDI provider url.
     public final static String PROVIDER_URL = " t3://localhost:7001";

     // Defines the JMS connection factory for the queue.
     public final static String JMS_FACTORY = "SendJMSFactory";

     // Defines the queue.
     public final static String TOPIC = "SendJMSTopic";

     private TopicConnectionFactory tconFactory;

     private TopicConnection tcon;

     private TopicSession tsession;

     private TopicSubscriber tsubscriber;

     private Topic topic;

     private boolean quit = false;


     /**
      * Creates all the necessary objects for receiving messages from a JMS
      * queue.
      *
      * @param ctx
      *            JNDI initial context
      * @param queueName
      *            name of queue
      * @exception NamingException
      *                if operation cannot be performed
      * @exception JMSException
      *                if JMS fails to initialize due to internal error
      */
     public void init(Context ctx, String queueName) throws NamingException,
       JMSException,InterruptedException {
      tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
      tcon = tconFactory.createTopicConnection();
      tcon.setClientID("IP10.200.7.104");
      tcon.start();
      
      tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
      System.out.println("333333333333");
      topic = (Topic) ctx.lookup(queueName);
      //tsubscriber = tsession.createSubscriber(topic);
      tsubscriber= tsession.createDurableSubscriber(topic,"88888");
       for (int i=0; i<3; i++) {
                 //
                 TextMessage message = (TextMessage) tsubscriber.receive();
                 System.out.println("message["+i+"]: " + message.getText());
             }
              Thread.sleep(10000);
      //System.out.println("12");
      //Message msg = treceiver.receive();
      //msg.acknowledge();
      //tsubscriber = tsession.createSubscriber(topic);Message msg = tsubscriber.receive();msg.acknowledge();
      //System.out.println(msg);

     }

     /**
      * Closes JMS objects.
      *
      * @exception JMSException
      *                if JMS fails to close objects due to internal error
      */
     public void close() throws JMSException {
      tsubscriber.close();
      tsession.close();
      tcon.close();
     }

     /**
      * main() method.
      *
      * @param args
      *            WebLogic Server URL
      * @exception Exception
      *                if execution fails
      */

     public static void main(String[] args) throws Exception {

      InitialContext ic = getInitialContext();
      TopicReceive2 tr2 = new TopicReceive2();
      tr2.init(ic, TOPIC);

      System.out
        .println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");
      
      

      // Wait until a "quit" message has been received.
    //  synchronized (tr1) {
    //   System.out.println("111111111111");
    //   while (!tr1.quit) {
    //    try {
    //     System.out.println("2222222222");
    //     tr1.wait();
    //     System.out.println("333333333");
    //    } catch (InterruptedException ie) {
    //    }
    //   }
    //  }
      tr2.close();
     }

     private static InitialContext getInitialContext() throws NamingException {
      Hashtable env = new Hashtable();
      env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
      env.put(Context.PROVIDER_URL, PROVIDER_URL);
      return new InitialContext(env);
     }

    }

    posted @ 2007-08-15 09:20 小小程序程序員混口飯吃 閱讀(1174) | 評論 (0)編輯 收藏

    一、rpm包安裝方式步驟:
    引用:

    1、找到相應的軟件包,比如soft.version.rpm,下載到本機某個目錄;

    2、打開一個終端,su -成root用戶;

    3、cd soft.version.rpm所在的目錄;

    4、輸入rpm -ivh soft.version.rpm




    二、deb包安裝方式步驟:

    引用:
    1、找到相應的軟件包,比如soft.version.deb,下載到本機某個目錄;

    2、打開一個終端,su -成root用戶;

    3、cd soft.version.deb所在的目錄;

    4、輸入dpkg -i soft.version.deb




    三、tar.gz源代碼包安裝方式:

    引用:
    1、找到相應的軟件包,比如soft.tar.gz,下載到本機某個目錄;

    2、打開一個終端,su -成root用戶;

    3、cd soft.tar.gz所在的目錄;

    4、tar -xzvf soft.tar.gz //一般會生成一個soft目錄

    5、cd soft

    6、./configure

    7、make

    8、make install




    四、tar.bz2源代碼包安裝方式:

    引用:
    1、找到相應的軟件包,比如soft.tar.bz2,下載到本機某個目錄;

    2、打開一個終端,su -成root用戶;

    3、cd soft.tar.bz2所在的目錄;

    4、tar -xjvf soft.tar.bz2 //一般會生成一個soft目錄

    5、cd soft

    6、./configure

    7、make

    8、make install




    五、apt方式安裝:

    引用:
    1、打開一個終端,su -成root用戶;

    2、apt-cache search soft 注:soft是你要找的軟件的名稱或相關信息

    3、如果2中找到了軟件soft.version,則用apt-get install soft.version命令安裝軟件 注:只要你可以上網,只需要用apt-cache search查找軟件,用apt-get install軟件




    六、bin文件安裝:

    如果你下載到的軟件名是soft.bin,一般情況下是個可執行文件,安裝方法如下:

    引用:
    1、打開一個終端,su -成root用戶;

    2、chmod +x soft.bin

    3、./soft.bin //運行這個命令就可以安裝軟件了




    七、不需要安裝的軟件:

    有了些軟件,比如lumaqq,是不需要安裝的,自帶jre解壓縮后可直接運行。假設下載的是lumaqq.tar.gz,使用方法如下:

    引用:
    1、打開一個終端,su -成root用戶;

    2、tar -xzvf lumaqq.tar.gz //這一步會生成一個叫LumaQQ的目錄

    3、cd LumaQQ

    4、chmod +x lumaqq //設置lumaqq這個程序文件為可運行

    5、此時就可以運行lumaqq了,用命令./lumaqq即可,但每次運行要輸入全路徑或切換到剛才生成的LumaQQ目錄里

    6、為了保證不設置路徑就可以用,你可以在/bin目錄下建立一個lumaqq的鏈接,用命令ln -s lumaqq /bin/ 即可,以后任何時候打開一個終端輸入lumaqq就可以啟動QQ聊天軟件了

    7、如果你要想lumaqq有個菜單項,使用菜單編輯工具,比如Alacarte Menu Editor,找到上面生成的LumaQQ目錄里的lumaqq設置一個菜單項就可以了,當然你也可以直接到 /usr/share/applications目錄,按照里面其它*.desktop文件的格式生成一個自己的desktop文件即可。

    posted @ 2007-08-10 09:39 小小程序程序員混口飯吃 閱讀(625) | 評論 (0)編輯 收藏

    計劃任務工具 cron 的配置和說明

    作者:北南南北
    來自:LinuxSir.Org
    摘要:Linux操作系統中,計劃任務通常由cron來承擔,了解或掌握cron,能為我們管理服務器帶來更多的便利,也能省卻更多的時間。本文也舉了一些簡單明了的例子,為了讓新手上路方便;

    目錄


    ++++++++++++++++++++++++++++++++++++++
    正文
    ++++++++++++++++++++++++++++++++++++++


    1、計劃任務概說;

    計劃任務,是任務在約定的時間執行已經計劃好的工作,這是表面的意思。在Linux中,我們經常用到 crond 服務器來完成這項工作。cron服務器可以根據配置文件約定的時間來執行特定的作務。比如我們可以在配置文件中約定每天早上4點,對httpd 服務器重新啟動,這就是一個計劃任務;

    下面我們先來說說cron;


    2、cron;

    在Linux系統中,計劃任務一般是由cron承擔,我們可以把cron設置為開機時自動啟動。cron啟動后,它會讀取它的所有配置文件(全局性配置文件/etc/crontab,以及每個用戶的計劃任務配置文件),然后cron會根據命令和執行時間來按時來調用度工作任務。


    2.1 cron 的安裝和啟動;

    在一般情況下,cron都是系統默認安裝的,我們要學會查看軟件包是否已經安裝;


    2.1.1 在Redhat 或 Fedora等RPM包管理的系統的安裝;

    判斷系統是否已經安裝cron相關的包

    Fedora 5.0 系統的情況;

    其它版本的Fedora及Redhat的系統和這相似;

    [root@localhost ~]# rpm -qa |grep cron
    vixie-cron-4.1-54.FC5
    anacron-2.3-36.1
    crontabs-1.10-7.1

     

    其中vixie-cron軟件包是cron的主程序,您可以通過下面的命令來了解它,其它軟件包同理;

    [root@localhost beinan]# rpm -ql vixie-cron

     

    crontabs 軟件包是用來安裝、卸裝、或列舉用來驅動 cron 守護進程的表格的程序。cron 守護進程檢查 crontab 文件來查看某個指定命令被調度執行的時間。如果命令已經調度,守護進程就會執行它們。了解crontabs軟件包都安裝了些什么,應該用下面的命令;

    [root@localhost beinan]# rpm -ql crontabs

     

    如果沒有安裝,可以從光盤中找出文件名帶有cron字樣的軟件包來安裝。

    [root@localhost ~]# rpm -ivh vixie-cron-4.1-54.FC5*
    [root@localhost ~]# rpm -ivh crontabs*

     

    也可以用yum 來在線安裝;

    [root@localhost ~]# yum install vixie-cron
    [root@localhost ~]# yum install crontabs

     


    2.1.2 在Slackware系統中的安裝;

    在Slackware中cron軟件包是 dcron,您可以在光盤中找出來安裝它;

    查看是否已經安裝了dcron軟件包,您可以這樣查看。在這里能列出軟件包詳細的安裝情況;

    [root@localhost ~]# more /var/adm/packages/dcron*

     

    如果沒有安裝,請用下面的命令來安裝。在第一張安裝盤中找出dcron軟件包;

    [root@localhost ~]# installpkg dcron*.tgz

     


    2.1.3 cron 的開啟、停止、重新啟動方法;

    cron配置文件被修改后,想讓新文件生效,必須重新crond服務器,有兩種方法可供選擇;


    第一種 在Fedora或Redhat 等以RPM包管理的系統中;

    [root@localhost ~]# /etc/init.d/crond start
    [root@localhost ~]# /etc/init.d/crond stop
    [root@localhost ~]# /etc/init.d/crond restart

     

    如果想在Fedora 和 Redhat 或以這些發行版為基礎克隆的發行版,如果想自動開機運行,請用下面的辦法;

    [root@localhost ~]# chkconfig --levels 35 crond on

     

    第二種:通用

    [root@localhost ~]# pgrep crond 注:判斷crond 是否在運行;
    [root@localhost ~]# pkill crond 注:殺掉正在運行中的crond;
    [root@localhost ~]# pgrep crond 注:查看是否被殺掉了;
    [root@localhost ~]# /usr/sbin/crond 注:運行crond;

     


    2.2 cron 配置文件;

    cron 是一個服務器程序,我們都知道Linux的服務器的配置,大多是通過配置文件來完成的,cron自然也不例外,在Redhat/Fedora 等系統中它的全局性配置文件是/etc/crontab;在Slackware系統中,全局性文件是/var/spool/cron/crontabs/root 。每個用戶也有自己的cron配置文件,我們可以通過crontab -e 來編輯它;


    2.2.1 全局性配置文件;

    下面是一個全局性的配置文件例子,以Fedora Core 5為例;

    [root@localhost ~]# more /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    # run-parts
    1 * * * * root run-parts /etc/cron.hourly
    #
    2 4 * * * root run-parts /etc/cron.daily
    #
    22 4 * * 7 root run-parts /etc/cron.weekly
    #
    42 4 1 * * root run-parts /etc/cron.monthly
    #
    0,5,10,15,20,25,30,35,40,45,50,55 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

     

    對于全局性配置文件,我們要用root權限來更改,一般是通過crontab -e 來修改。但有時也并不一定是這樣的,比如Fedora Core 5 如果通過crontab -e 修改的是root用戶的cron 配置文件。所以我們要在Fedora Core 5中修改全局性配置文件可以用vi 編輯器來修改。vi的用法請參考:《文件編輯器 vi》

    在全局性配置文件中,定義了可執行命令的路徑環境變量,所用SHELL類型的定義等,這些大多不用修改;我們經常添加的是計劃任務或修改任務執行的時間等;

    在全局性配置文件中,我們發現有類似這些行;

    1 * * * * root run-parts /etc/cron.hourly 注:表示每個小時的第一分鐘,開始執行/etc/hourly目錄下的可執行程序或腳本;
    2 4 * * * root run-parts /etc/cron.daily 注:表示每天的4點2分,開始執行/etc/cron.daily目錄下的可執行程序或腳本;
    22 4 * * 7 root run-parts /etc/cron.weekly 注:每年第7個周4點我22分,開始執行 /etc/cron.weekly目錄下的可執行程序或腳本;
    42 4 1 * * root run-parts /etc/cron.monthly 注:每月第1天的4點42分,開始執行/etc/cron.monthly目錄下的可執行程序或腳本;

     

    這些行是用來在同一時間批量執行任務的,我們在以后的例子中獨立出來解說,在這里只是讓大家心中有數;


    2.2.2 cron 配置計劃任務的書寫格式

    分鐘 小時 日 月 周 [用戶名] 命令

     

    說明:

    第一段應該定義的是:分鐘,表示每個小時的第幾分鐘來執行。范圍是從0-59
            第二段應該定義的是:小時,表示從第幾個小時來執行,范圍是從0-23
            第三段應該定義的是:日期,表示從每個月的第幾天執行,范圍從1-31
            第四段應該定義的是:月,表示每年的第幾個月來執行,范圍從1-12
            第五段應該定義的是:周,表示每周的第幾天執行,范圍從0-6,其中 0表示星期日。
            每六段應該定義的是:用戶名,也就是執行程序要通過哪個用戶來執行,這個一般可以省略;
            第七段應該定義的是:執行的命令和參數。
            

    注:其中用戶名可是省略,用戶名定義的是程序用哪個用戶來執行,比如mysql服務器,我們可以定義成以mysql用戶來啟動、停止、重新啟動,這時要寫上用戶名;不過對于cron來說意義不是太大,因為每個用戶都有自己的cron配置文件。有些程序的啟動必須用到root用戶,這時我們就可以修改root用戶的cron配置文件就行了。在每個用戶的配置文件中,不必指定用戶名。

    我們可以把計劃任務寫在全局性配置文件中,如果您想把一個計劃放入全局性配置文件中,就得改發行版所對應的cron全局配置文件,比如Fedora 5的全局性配置文件是/etc/crontab文件;

    每個用戶也能定義自己的cron配置文件,用crontab -e 命令來定義;

    舉一例:讓機器在每天8點30分重新啟動;

    關于時間格式中有7個字段。我們可以直接更改或者添加,當然這是系統任務調用。舉個例子,比如我在每天的早上8點30分重新啟動機器,就可以在
    /etc/crontab中加入下面的兩句,第一句就是注釋了。以#號開始,后面寫一個自己能知道這是什么任務的備注;

    # reboot OS
    30 8 * * * root /sbin/reboot

     

    第一段應該定義的是:分鐘,表示每個小時的第幾分鐘來執行。范圍是從0-59
    第二段應該定義的是:小時,表示從第幾個小時來執行,范圍是從0-23
    第三段應該定義的是:日期,表示從每個月的第幾天執行,范圍從1-31
    第四段應該定義的是:月,表示每年的第幾個月來執行,范圍從1-12
    第五段應該定義的是:周,表示每周的第幾天執行,范圍從0-6,其中 0表示星期日。
    每六段應該定義的是:用戶名,也就是執行程序要通過哪個用戶來執行,這個一般可以省略;
    第七段應該定義的是:執行的命令和參數。

    對比上面的例子就知道,30是不是分鐘??8是不是小時?如果有*代表的地方,表示全部,也就是說,每個月,每天,每星期都要執行。root 表示用root用戶執行,命令是/sbin/reboot ,也就是說,系統在每天 8點30分重新啟動;

    我們可以把每天8點30分重新啟動的計劃任務寫入cron全局性配置文件中,也可以定義在root用戶自己的cron配置文件中。如果定義在root自己的配置文件,請用root身份來執行 crontab -e 來修改配置文件;crontab -e 進入修改配置文件的過程,其實和vi的用法一樣,請參看vi 的用法:《文件編輯器 vi》

    讓配置文件生效:如果讓配置文件生效,還得重新啟動cron,切記,既然每個用戶下的cron配置文件修改后。也要重新啟動cron服務器。

    在Fedora 和Redhat中,我們應該用;

    [root@localhost ~]# /etc/init.d/crond restart

     

    如果讓crond 在開機時運行,應該改變其運行級別;

    [root@localhost ~]# chkconfig --levels 35 crond on

     

    在Slackware中,如果開機自動運行;

    查看/etc/rc.d/rc.M文件是否有如的行,如果沒有就加上,大多是有的;

    # Start crond (Dillon's crond):
    if [ -x /usr/sbin/crond ]; then
      /usr/sbin/crond -l10 >>/var/log/cron 2>&1
    </cdoe>
    <b>
    如果想讓立即讓cron重啟生效,也可以用下面的辦法;
    </b>
    <code>
    [root@localhost ~]# pgrep crond 注:查看crond服務器是否運行;
    2022
    [root@localhost ~]# pkill crond 注:殺死crond;
    [root@localhost ~]# pgrep crond 注:查看crond是否退出;
    [root@localhost ~]# /usr/sbin/crond 注:啟動crond;
    [root@localhost ~]# pgrep crond 注:查看crond 是否已經運行得起來了;
    3883

     


    2.2.3 關于同一時間,同時執行多個任務的定義方法;

    我們在前面已經說過,在全局性配置文件中,有類似如下的段落;

    1 * * * * root run-parts /etc/cron.hourly 注:表示每個小時的第一分鐘,開始執行/etc/hourly目錄下的可執行程序或腳本;
    2 4 * * * root run-parts /etc/cron.daily 注:表示每天的4點2分,開始執行/etc/cron.daily目錄下的可執行程序或腳本;
    22 4 * * 7 root run-parts /etc/cron.weekly 注:每年第7個周4點我22分,開始執行 /etc/cron.weekly目錄下的可執行程序或腳本;
    42 4 1 * * root run-parts /etc/cron.monthly 注:每月第1天的4點42分,開始執行/etc/cron.monthly目錄下的可執行程序或腳本;

     

    舉例來說,我想在每天5點10分來重新啟動httpd 服務器,與此同時,我們也可以同時下載一個ISO文件。如果我們按書寫計劃任務的規則一條一條的來書寫,并添加到全局是有點麻煩。不如寫一個腳本放在/etc/crond.daily目錄中。然后把其權限設置為755 (關于權限的設置,請參考:《Linux 文件和目錄的屬性》)。

    當然我們得改一改上面的 帶有/etc/cron.daily那行,改為如下;

    10 5 * * * root run-parts /etc/cron.daily
    </cdoe>
    然后我們到/etc/crond.daily目錄中創建兩個文件,一個是用來重啟httpd服務器的,如下;
    <code>
    [root@localhost cron.daily]# touch httpd.sh
    [root@localhost cron.daily]# chmod 755 httpd.sh
    [root@localhost cron.daily]# echo "/etc/init.d/httpd restart" > httpd.sh
    [root@localhost cron.daily]# more httpd.sh
    /etc/init.d/httpd restart

     

    如果我想在每天5點20分下載FC5的鏡像,可以再創建一個文件fc5down.sh

    [root@localhost cron.daily]# touch fc5down.sh
    [root@localhost cron.daily]# chmod 755 fc5down.sh
    [root@localhost cron.daily]# echo "/usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso" > fc5down.sh
    [root@localhost cron.daily]# more fc5down.sh
    /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso

     

    然后我們重新啟動一下crond就行了;

    [root@localhost cron.daily]# pkill crond
    [root@localhost cron.daily]# prep crond
    [root@localhost cron.daily]# crond&

     

    注意:我只是想說明一下,在同一時間 執行多個計劃任務的簡單用法,并不是有意教給您每天早上都下載FC5的映像。我舉這個例子是為了初學者了解這個功能。如果您有好多的任務在某一時刻執行,那就自己寫腳本文件。放在/etc目錄下的cron.hourly 、cron.daily 、cron.weekly 、cron.monthly 目錄中。凡是放進這些目錄的可執行腳本,都能在約定的時間內準確執行。每個目錄有每個目錄的用途;


    2.2.4 對于用戶自身的cron 配置文件的說明;

    每個用戶都有自己的cron配置文件,通過crontab -e 就可以編輯,一般的情況下,在Fedora和Redhat的發行版,我們編輯好用戶的cron配置文件保存退出后,系統會自動就存放于/var/spool/cron/目錄中,文件以用戶名命名。在Slackware中是位于/var/spool/cron/crontabs/目錄中。其它的發行版都差不多,有點類似。自己找找吧;查看用戶的計劃任務是crontab -l

    crontab -e 注:編輯用戶的cron配置文件;
    crontab -l 注:查看用戶的計劃任務;

     

    比如我用beinan用戶來運行crontab -e ;

    [beinan@localhost ~]$ id 注:判斷所用用戶身份;
    uid=500(beinan) gid=500(beinan) groups=500(beinan)
    [beinan@localhost ~]$ crontab -e 注:編輯用戶beinan的計劃任務;

     

    我們在里面定義一個任務;

    40 20 * * * /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso

     

    保存退出后,我們用下面的命令來查看beinan用戶的計劃任務;

    [beinan@localhost ~]$ crontab -l
    40 20 * * * /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso

     

    配置好后,我們還要重新啟動crond服務器,每個用戶cron配置文件的改動都得重新啟動crond服務器;前面已經說過了,這里省略;值得注意的是重啟crond服務器,需要root權限,您可以用su命令切換到root 用戶,然后再來重啟crond;


    在Fedora或Redhat等以RPM包管理的發行版中;

    [beinan@localhost ~]$ su
    口令:
    [root@localhost beinan]# /etc/init.d/crond restart
    停止 crond: [確定]
    啟動 crond: [確定]

     


    也可以先殺死crond,再運行crond命令的辦法來啟動;

    [root@localhost beinan]# pkill crond
    [root@localhost beinan]# pgrep crond
    [root@localhost beinan]# /usr/sbin/crond
    [root@localhost beinan]# pgrep crond
    6664

     


    3、計劃任務的應用范圍;

    計劃任務主要是讓系統自動完成一些工作。比如我們可以讓系統自動在某一時刻清理或備份httpd服務器的日志,然后重新啟動httpd服務器,這對網絡管理員來說是很重要的。也可以讓系統自動清空位于/tmp目錄的垃圾文件。

    另外值得一提的是,LinuxSir.Org 有很多子站,每個子站都有RSS,能讓這些站點的RSS相互投遞,也是用cron來完成,比如是在早上4點左右開始執行這個任務。這是一個極為耗費資源的過程,如果不是放在在線人少的時候,基本無法完成,所以只能放在早上進行。作為SIR的管理員,不可能每天早上4點起來點鼠標來完成這些事吧。所以最好的辦法就是通過cron來自動運行,以在服務器最清閑的時候來完成這項工作;

    posted @ 2007-07-24 11:14 小小程序程序員混口飯吃 閱讀(946) | 評論 (0)編輯 收藏
    分辨率設置高了X起來后花屏,無法通過X界面恢復回去,只能用普通用戶進來后,su 到root上來找到XORG.CONF   文件

    修改/etc/X11/xorg.conf 

    screen里面的設置最大的那個去掉就好了,重啟就可以了
    posted @ 2007-07-24 09:19 小小程序程序員混口飯吃 閱讀(2605) | 評論 (2)編輯 收藏

    一、注銷,關機,重啟

      注銷系統的logout命令

      1,Logout 注銷是登陸的相對操作,登陸系統后,若要離開系統,用戶只要直接下達logout命令即可:

      [root@localhost root]#logout

      Red Hat Linuxrelease 9(Shike)

      Kernel 2.4.20.8 on an i686

      Login: ← 回到登陸的畫面

      2,關機或重新啟動的shutdown命令

      Shutdown命令可以關閉所有程序,依照用戶的需要,重新啟動或關機。

      參數說明如下:

      ? 立即關機:-h 參數讓系統立即關機。范例如下:

      [root@localhost root]#shutdown –h now ← 要求系統立即關機

      ? 指定關機時間:time參數可指定關機的時間;或設置多久時間后運行shutdown命令,范例如下:

      [root@localhost root]#shutdown now ← 立刻關機

      [root@localhost root]#shutdown +5 ← 5分鐘后關機

      [root@localhost root]#shutdown 10:30 ← 在10:30時關機

      ? 關機后自動重啟:-r 參數設置關機后重新啟動。范例如下:

      [root@localhost root]#shutdown -r now ← 立刻關閉系統并重啟

      [root@localhost root]#shutdown -r 23:59 ← 指定在23:59時重啟動

      3,重新啟動計算機的reboot命令

      顧名思義,reboot命令是用來重新啟動系統的。常用的參數如下:

      ? -f 參數:不依正常的程序運行關機,直接關閉系統并重新啟動計算機。

      ? -I 參數:在在重新啟動之前關閉所有網絡接口。

      雖然reboot命令有個參數可以使用,但是一般只需要單獨運行reboot命令就可以了

    posted @ 2007-07-17 13:27 小小程序程序員混口飯吃 閱讀(16105) | 評論 (0)編輯 收藏
     

    最近測試OMADM1.2的時候,039040兩個case是關于TLS SSL的,搞的很迷惑,最近看了一下原來TLS幾乎就是SSL,基本上一摸一樣而已。

    Sun.com上面看到

    SSL was developed by Netscape in 1994, and with input from the Internet community, has evolved to become a standard. It is now under the control of the international standards organization, the Internet Engineering Task Force (IETF). The IETF has renamed SSL to Transport Layer Security (TLS), and released the first specification, version 1.0, in January 1999. TLS 1.0 is a modest upgrade to the most recent version of SSL, version 3.0. The differences between SSL 3.0 and TLS 1.0 are minor.

     

    所以這2case基本上測試一個就足夠了。

    另外tls本來就是傳輸層上的一個協議,所以要是用HTTPS的話,如果你用應用服務器,比如TOMCAT WBLOGIC,他們都支持SSL,根本不需要程序實現任何東西,只要你會使用keytool生成證書就可以了。

     

    這塊只是牽扯到JSSE,具體可以到http://java.sun.com/j2se/1.4.2/docs/guide/security/jsse/JSSERefGuide.html#Introduction

    Keytool其實再JRE/LIB/SECUTITY下面的包里面,

    C:\j2sdk1.4.2_05\jre\lib\security>keytool

    keytool 用法:

     

    -certreq     [-v] [-alias <alias>] [-sigalg <sigalg>]

                 [-file <csr_file>] [-keypass <keypass>]

                 [-keystore <keystore>] [-storepass <storepass>]

                 [-storetype <storetype>] [-provider <provider_class_name>] ...

     

    -delete      [-v] -alias <alias>

                 [-keystore <keystore>] [-storepass <storepass>]

                 [-storetype <storetype>] [-provider <provider_class_name>] ...

     

    -export      [-v] [-rfc] [-alias <alias>] [-file <cert_file>]

                 [-keystore <keystore>] [-storepass <storepass>]

                 [-storetype <storetype>] [-provider <provider_class_name>] ...

     

    -genkey      [-v] [-alias <alias>] [-keyalg <keyalg>]

                 [-keysize <keysize>] [-sigalg <sigalg>]

                 [-dname <dname>] [-validity <valDays>]

                 [-keypass <keypass>] [-keystore <keystore>]

                 [-storepass <storepass>] [-storetype <storetype>]

                 [-provider <provider_class_name>] ...

     

    -help

     

    -identitydb [-v] [-file <idb_file>] [-keystore <keystore>]

                 [-storepass <storepass>] [-storetype <storetype>]

                 [-provider <provider_class_name>] ...

     

    -import      [-v] [-noprompt] [-trustcacerts] [-alias <alias>]

                 [-file <cert_file>] [-keypass <keypass>]

                 [-keystore <keystore>] [-storepass <storepass>]

                 [-storetype <storetype>] [-provider <provider_class_name>] ...

     

    -keyclone    [-v] [-alias <alias>] -dest <dest_alias>

                 [-keypass <keypass>] [-new <new_keypass>]

                 [-keystore <keystore>] [-storepass <storepass>]

                 [-storetype <storetype>] [-provider <provider_class_name>] ...

     

    -keypasswd   [-v] [-alias <alias>]

                 [-keypass <old_keypass>] [-new <new_keypass>]

                 [-keystore <keystore>] [-storepass <storepass>]

                 [-storetype <storetype>] [-provider <provider_class_name>] ...

     

    -list        [-v | -rfc] [-alias <alias>]

                 [-keystore <keystore>] [-storepass <storepass>]

                 [-storetype <storetype>] [-provider <provider_class_name>] ...

     

    -printcert   [-v] [-file <cert_file>]

     

    -selfcert    [-v] [-alias <alias>] [-sigalg <sigalg>]

                 [-dname <dname>] [-validity <valDays>]

                 [-keypass <keypass>] [-keystore <keystore>]

                 [-storepass <storepass>] [-storetype <storetype>]

                 [-provider <provider_class_name>] ...

     

    -storepasswd [-v] [-new <new_storepass>]

                 [-keystore <keystore>] [-storepass <storepass>]

                 [-storetype <storetype>] [-provider <provider_class_name>] ...

     

     

    1:生成一個

    C:\j2sdk1.4.2_05\jre\lib\security>keytool -genkey -alias duke -keyalg RSA   -val

    idity 10 -storetype jks -keystore trust1.jks

    2:查看你剛才生成的證書

    C:\j2sdk1.4.2_05\jre\lib\security>keytool -list -v -keystore trust1.jks

    當然要輸入密碼了。

    但是我不太明白服務器需要2個證書1個是custom identity keystore 一個是custom trust keystore為什么2 的輸入類型不一樣,一個是KeyEntry另外一個是trustedCertEntry,這個流程到底是怎樣的?申請證書->導入證書 還是不明白,請指教。

    posted @ 2007-07-04 17:43 小小程序程序員混口飯吃 閱讀(1987) | 評論 (1)編輯 收藏
         摘要: 最近復習了一下AXIS,寫了2個小例子1:  bean  1package test.soap.vo; 2 3import java.io.Serializable; 4 5public class User implements Serializable {&nbs...  閱讀全文
    posted @ 2007-06-15 15:48 小小程序程序員混口飯吃| 編輯 收藏

    Java對象序列化學習筆記- -

                                          

    beejoy 原創  來源:java研究組織


    目前網絡上關于對象序列化的文章不少,但是我發現詳細敘述用法和原理的文章太少。本人
    把自己經過經驗總結和實際運用中的體會寫成的學習筆記貢獻給大家。希望能為整個java社
    區的繁榮做一點事情。
     
    序列化的過程就是對象寫入字節流和從字節流中讀取對象。將對象狀態轉換成字節流之后,
    可以用java.io包中的各種字節流類將其保存到文件中,管道到另一線程中或通過網絡連接
    將對象數據發送到另一主機。對象序列化功能非常簡單、強大,在RMI、Socket、JMS、EJB
    都有應用。對象序列化問題在網絡編程中并不是最激動人心的課題,但卻相當重要,具有
    許多實用意義。
    一:對象序列化可以實現分布式對象。主要應用例如:RMI要利用對象序列化運行遠程主機
    上的服務,就像在本地機上運行對象時一樣。
    二:java對象序列化不僅保留一個對象的數據,而且遞歸保存對象引用的每個對象的數據。
    可以將整個對象層次寫入字節流中,可以保存在文件中或在網絡連接上傳遞。利用對象序
    列化可以進行對象的"深復制",即復制對象本身及引用的對象本身。序列化一個對象可能
    得到整個對象序列。
     
    從上面的敘述中,我們知道了對象序列化是java編程中的必備武器,那么讓我們從基礎開始
    ,好好學習一下它的機制和用法。


    java序列化比較簡單,通常不需要編寫保存和恢復對象狀態的定制代碼。實現java.io.Seri
    alizable接口的類對象可以轉換成字節流或從字節流恢復,不需要在類中增加任何代碼。只
    有極少數情況下才需要定制代碼保存或恢復對象狀態。這里要注意:不是每個類都可序列化,
    有些類是不能序列化的,例如涉及線程的類與特定JVM有非常復雜的關系。

    序列化機制:

    序列化分為兩大部分:序列化和反序列化。序列化是這個過程的第一部分,將數據分解成字
    節流,以便存儲在文件中或在網絡上傳輸。反序列化就是打開字節流并重構對象。對象序列
    化不僅要將基本數據類型轉換成字節表示,有時還要恢復數據。恢復數據要求有恢復數據的
    對象實例。ObjectOutputStream中的序列化過程與字節流連接,包括對象類型和版本信息。
    反序列化時,JVM用頭信息生成對象實例,然后將對象字節流中的數據復制到對象數據成員中。
    下面我們分兩大部分來闡述:


    處理對象流:
    (序列化過程和反序列化過程)


    java.io包有兩個序列化對象的類。ObjectOutputStream負責將對象寫入字節流,ObjectInp
    utStream從字節流重構對象。
        我們先了解ObjectOutputStream類吧。ObjectOutputStream類擴展DataOutput接口。
    writeObject()方法是最重要的方法,用于對象序列化。如果對象包含其他對象的引用,則
    writeObject()方法遞歸序列化這些對象。每個ObjectOutputStream維護序列化的對象引用表,
    防止發送同一對象的多個拷貝。(這點很重要)由于writeObject()可以序列化整組交叉引用的
    對象,因此同一ObjectOutputStream實例可能不小心被請求序列化同一對象。這時,進行反引用
    序列化,而不是再次寫入對象字節流。
    下面,讓我們從例子中來了解ObjectOutputStream這個類吧。

    // 序列化 today's date 到一個文件中.
        FileOutputStream f = new FileOutputStream("tmp");
        ObjectOutputStream s = new ObjectOutputStream(f);
        s.writeObject("Today");
        s.writeObject(new Date());
        s.flush();


     
    現在,讓我們來了解ObjectInputStream這個類。它與ObjectOutputStream相似。它擴展Dat
    aInput接口。ObjectInputStream中的方法鏡像DataInputStream中讀取Java基本數據類型的
    公開方法。readObject()方法從字節流中反序列化對象。每次調用readObject()方法都返回
    流中下一個Object。對象字節流并不傳輸類的字節碼,而是包括類名及其簽名。readObject()
    收到對象時,JVM裝入頭中指定的類。如果找不到這個類,則readObject()拋出
    ClassNotFoundException,如果需要傳輸對象數據和字節碼,則可以用RMI框架。
    ObjectInputStream的其余方法用于定制反序列化過程。
    例子如下:

    //從文件中反序列化 string 對象和 date 對象
        FileInputStream in = new FileInputStream("tmp");
        ObjectInputStream s = new ObjectInputStream(in);
        String today = (String)s.readObject();
        Date date = (Date)s.readObject();

     

    定制序列化過程:


    序列化通常可以自動完成,但有時可能要對這個過程進行控制。java可以將類聲明為serial
    izable,但仍可手工控制聲明為static或transient的數據成員。
    例子:一個非常簡單的序列化類。

    public class simpleSerializableClass implements Serializable{
        String sToday="Today:";
        transient Date dtToday=new Date();
    }


    序列化時,類的所有數據成員應可序列化除了聲明為transient或static的成員。將變量聲
    明為transient告訴JVM我們會負責將變元序列化。將數據成員聲明為transient后,序列化
    過程就無法將其加進對象字節流中,沒有從transient數據成員發送的數據。后面數據反序
    列化時,要重建數據成員(因為它是類定義的一部分),但不包含任何數據,因為這個數據
    成員不向流中寫入任何數據。記住,對象流不序列化static或transient。我們的類要用
    writeObject()與readObject()方法以處理這些數據成員。使用writeObject()與readObject()
    方法時,還要注意按寫入的順序讀取這些數據成員。
    關于如何使用定制序列化的部分代碼如下:

    //重寫writeObject()方法以便處理transient的成員。
    public void writeObject(ObjectOutputStream outputStream) throws IOException{
        outputStream.defaultWriteObject();//使定制的writeObject()方法可以
                            利用自動序列化中內置的邏輯。
        outputStream.writeObject(oSocket.getInetAddress());
        outputStream.writeInt(oSocket.getPort());
    }
    //重寫readObject()方法以便接收transient的成員。
    private void readObject(ObjectInputStream inputStream) throws
    IOException,ClassNotFoundException{
        inputStream.defaultReadObject();//defaultReadObject()補充自動序列化
        InetAddress oAddress=(InetAddress)inputStream.readObject();
        int iPort =inputStream.readInt();
        oSocket = new Socket(oAddress,iPort);
        iID=getID();
        dtToday =new Date();
    }

     

    完全定制序列化過程:

    如果一個類要完全負責自己的序列化,則實現Externalizable接口而不是Serializable接口
    。Externalizable接口定義包括兩個方法writeExternal()與readExternal()。利用這些方
    法可以控制對象數據成員如何寫入字節流.類實現Externalizable時,頭寫入對象流中,
    然后類完全負責序列化和恢復數據成員,除了頭以外,根本沒有自動序列化。這里要注意了。
    聲明類實現Externalizable接口會有重大的安全風險。writeExternal()與readExternal()
    方法聲明為public,惡意類可以用這些方法讀取和寫入對象數據。如果對象包含敏感信息,
    則要格外小心。這包括使用安全套接或加密整個字節流。到此為至,我們學習了序列化的
    基礎部分知識。關于序列化的高級教程,以后再述。

    posted @ 2007-06-08 13:39 小小程序程序員混口飯吃 閱讀(972) | 評論 (1)編輯 收藏

    1:redhat 語言設置 這個語言是安裝的時候決定的,并不是每個user決定的

      /etc/sysconfig/i18n

    2:redhat 模式

      /etc/inittab

    id:5 xwindow  mode id:3 test mode

    3:使用光驅

      掛載光驅mount /dev/hdc /mnt/cdrom

      卸載光驅時候出現 umount: /mnt/cdrom device is busy

      是因為當前的目錄已經在光盤目錄,應該先退出這個目錄

    4:安裝rpm 文件

      rpm -ivh xxx.rpm  安裝包

      rpm -qa |grep "tt*"  查詢安裝過的包

      rpm -e xxx


    5:在text mode 上翻頁 shift +pageup pagedown

    6:ls -al
      查找隱藏的文件

    7:set 查看環境變量  .bash_profile

      用戶的語言設置與這個相關,如果沒有設置會默認使用/etc/sysconfig/i18n

    8:查看文件類型以及編碼方式

      file *.file

    9: 編碼轉換

    命令名稱:iconv
    命令格式:iconv -f "文件目前編碼" -t "文件轉換后的編碼" -o "轉換后生成的新文件名" "源文件名"
    ex: iconv -f ISO-8859 -t utf-8 -o mydoc.inc.php mydoc.inc.php.bak

     

     

     


     

    posted @ 2007-05-21 17:31 小小程序程序員混口飯吃| 編輯 收藏
    CMWAP 和 CMNET 只是中國移動人
    為劃分的兩個GPRS接入方式。前者是為手機WAP上網而設立的,后者則主要是為PC、筆記
    本電腦、PDA等利用GPRS上網服務。它們在實現方式上并沒有任何差別,但因為定位不同
    ,所以和CMNET相比,CMWAP便有了部分限制,資費上也存在差別。

    WAP只是一種GPRS應用模式,它與GRPS的接入方式是無關的。WAP應用采用的實現方
    式是“終端+WAP網關+WAP服務器”的模式,不同于一般Internet的“終端+服務器”
    的工作模式。主要的目的是通過WAP網關完成WAP-WEB的協議轉換以達到節省網絡流量和
    兼容現有WEB應用的目的。WAP網關從技術的角度講,只是一個提供代理服務的主機,它
    不一定由網絡運營商提供。但據我所知,中國移動GPRS網絡目前只有唯一的一個WAP網關
    :10.0.0.172,有中國移動提供,用于WAP瀏覽(HTTP)服務。有一點需要注意,WAP網
    關和一般意義上的局域網網關是有差別的,標準的WAP網關僅僅實現了HTTP代理的功能,
    并未完成路由、NAT等局域網網關的功能。這就決定了它在應用上所受到的限制。

    為了從應用中區別兩者的定位,中國移動對CMWAP作了一定的限制,主要表現在CMW
    AP接入時只能訪問GPRS網絡內的IP(10..*),而無法通過路由訪問Internet。我們
    用CMWAP瀏覽Internet上的網頁就是通過WAP網關協議或它提供的HTTP代理服務實現的。
    也就是需要通過中國移動GPRS網絡唯一的一個WAP網關:10.0.0.172。CMNET擁有完全的
    Internet訪問權,這里就不多說了,主要讓我們來看看CMWAP。因為有了上面提到的限制
    ,CMWAP的適用范圍就要看WAP網關所提供的支持了。目前,中國移動的WAP網關對外只提
    供HTTP代理協議(80和8080端口)和WAP網關協議(9201端口)。

    因此,只有滿足以下兩個條件的應用才能在中國移動的CMWAP接入方式下正常工作:
    1. 應用程序的網絡請求基于HTTP協議。2. 應用程序支持HTTP代理協議或WAP網關協議。
    而cmnet則不受任何的限制。

    說白了就是說通過cmwap的方式訪問,需要走中國移動的網關通過http協議去連接,
    這樣的后果就是速度會變慢,相信很多朋友都用過代理服
    務器吧,對,就是那個感覺,而通過cmnet來連接的,就是直接連接到無限乾坤在inter
    net上的服務器,速度會比cmwap的快一些。說完了速度,就該說價格了,如果玩家沒有
    采用套餐的話,那cmwap和cmnet都是一樣的,1kb三分錢,或者訂了一個xx元包xM的套餐
    ,超出部分1k一分錢,這種時候,同等價格都一樣,據我了解,cmwap版本流量會大一些
    ,所以還是用cmnet比較好,又快又省錢。但是對于很多地方的動感地帶用戶而言,情況
    可能有些不同,相當一些地方的動感地帶只能訪問cmwap,不能訪問cmnet,所以沒地選
    擇了,還有一些地方有動感地帶的包月上網卡,有10元、20元、50元的等等,具體的要
    看當地的資費政策了,而這些包月卡通常只包cmwap的流量,這個時候如果用cmnet還要
    另外付費,所以建議這些用戶還是使用cmwap吧。最后總結一下,如果玩家的手機卡只能
    訪問cmwap或者有cmwap包月的套餐,那么您就使用cmwap連接來游戲,否則使用cmnet連
    接是更好的選擇


    所以,一句話,有wap包月的地區就使用wap包月上網,沒有包月業務的就用cmnet,反正都是按流量算錢,為什么不選擇快一點的呢(但還是要提醒大家,按流量計費產生的費用是巨大的,要
    多多注意)
    posted @ 2007-05-17 10:50 小小程序程序員混口飯吃 閱讀(1982) | 評論 (0)編輯 收藏
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;

    public class TestConn {

        
    public TestConn() {
            
    super();
        }


        
    public static void main(String[] args) throws Exception {
            String url 
    = null;
            getHttpText(url);
            System.out.println(
    "abc");
        }


        
    public static String getHttpText(String str) {
            URL url 
    = null;
            
    try {
                url 
    = new URL(str);
            }
     catch (MalformedURLException e) {
                e.printStackTrace();
            }

            HttpURLConnection huc 
    = null;
            
    try {

                huc 
    = (HttpURLConnection) url.openConnection();
                huc.setRequestMethod(
    "GET");
                huc.setRequestProperty(
    "Content-Type",
                        
    "application/vnd.syncml.dm+xml");
                
    // application/x-www-form-urlencoded
                
    // application/vnd.syncml.dm+xml
                huc.setDoOutput(true);
                huc.setRequestProperty(
    "Cache-Control""private");
                huc.setRequestProperty(
    "Accept-Charset""utf-8");
                huc.setRequestProperty(
    "Accept""application/vnd.syncml.dm+xml");
                huc.setRequestProperty(
    "Content-Length""3");
                DataOutputStream printout;
                printout 
    = new DataOutputStream(huc.getOutputStream());
                printout.writeBytes(
    "abc");
            }
     catch (IOException e) {
                e.printStackTrace();
            }

            InputStream is 
    = null;
            
    try {
                is 
    = huc.getInputStream();
            }
     catch (IOException e) {
                e.printStackTrace();
            }

            BufferedReader br 
    = new BufferedReader(new InputStreamReader(is));
            StringBuffer sb 
    = new StringBuffer();
            String line 
    = "";
            
    try {
                
    while ((line = br.readLine()) != null{
                    sb.append(line).append(
    "\n");
                }

            }
     catch (IOException e) {
                e.printStackTrace();
            }

            
    return sb.toString();
        }


    }

    posted @ 2007-05-14 09:16 小小程序程序員混口飯吃 閱讀(4068) | 評論 (0)編輯 收藏
    記事本=notepad
    計算器=calc
    注冊表=regedit
    系統檢測=dxdiag
    畫圖=mspaint
    遠程桌面=mstsc
    posted @ 2007-04-29 17:27 小小程序程序員混口飯吃 閱讀(493) | 評論 (1)編輯 收藏
     其實這個問題不是程序的問題,主要是property中文問題,這個問題可以通過build解決掉

     <native2ascii src="." dest="build" includes="*Props.txt" />
    把配置文件編碼 windows下默認GBK編碼,linux 要加encoding
    代碼一行不用改,放心漢化吧~~
    posted @ 2007-04-24 15:21 小小程序程序員混口飯吃 閱讀(1933) | 評論 (3)編輯 收藏
    如題,有沒有朋友知道開源的在線圖片處理的程序,在頁面上直接處理圖片,有點象iephotoshop,功能即使不如imageJ,也要有一些基本的功能.
    posted @ 2007-04-19 09:20 小小程序程序員混口飯吃 閱讀(2092) | 評論 (2)編輯 收藏
    話說“你不理財,財不理你”

    那么什么是理財呢???

    很多人都很知道“理財”,也都無時無刻不在理財,但把理財說清楚的人卻不多...

    很多人說到理財想到的就是投資,就是開源節流,就是合理分配財產,等等… …

    其實,
    ---------------------------------------------------------
    理財就是對財富的有效管理。

    理財的內涵很廣,包括開源節流,包括合理分配財產,包括投資增值等,但又不止于這些。從理財的基礎理論來講,主要包括:現金管理、資產管理、債務管理、風險管理、投資管理等等。
    ---------------------------------------------------------
    現金管理是理財的基礎。包括各項收入的籌劃和管理,包括各項稅費的管理,包括各項日常支出的管理,包括現金的積累和短期儲蓄等等。具體的管理工具和形式有各式各樣的銀行卡片,各式各樣的儲蓄方式,各種各樣的支出方式,包括各種各樣的節儉手段等等。

    資產管理是理財的重心。資產具體包括固定資產、流動資產等。固定資產比如房產、鋪面等等,流動資產包括儲蓄資產、投資資產、保險資產等。資產管理是家庭理財的重點,合理有效的管理需要。

    債務管理是理財的關鍵。債務并非完全的壞事,合理的管理債務是迅速達到理財目標的捷徑,只要把債務控制在一定的合理的范圍之內,對優化財務結構有很好的作用。比如在財力許可的情況下可以通過按揭提前實現高品質的家庭生活,通過金融信用延遲支付貨款往來等,從而更快實現財務目標。

    風險管理是理財的關鍵。有效的風險管理是現代社會先進的標志,沒有對風險的管理交通工具不能上路運營,貿易貨運不能出門出海流通,商場大廈無法入住營業,流動性和小家化也決定個人進行風險管理是大勢所趨。

    投資管理是理財的要點。現在很多對投資理財非常渴望,一提到投資賺錢眼睛就發亮,主要是因為目前我國金融環境不夠完善,安全穩健的大眾投資品種非常匱乏,很多人的收益局限于2個點以內,相較于去年初高達5個點的通貨膨脹顯然是一個很大的威脅。而國內居民的投資信息和能力先天不足,稍有異動即可能遭遇陷阱的現狀導致國民儲蓄逐年逼高。在理財范疇內投資增值是最需要專業知識的,也是實現家庭理財目標最關鍵的步驟。所以如何實現投資的有效管理就很重要。


    總之,理財就是所有與財富有關的活動的總稱,是現代社會重要的組成要素,是現代人過上幸福快樂生活必備的基本素質。

    而且,五個理財的基本方面也是互相關聯,互為制約,相互促進的。

    posted @ 2007-02-13 11:07 小小程序程序員混口飯吃 閱讀(358) | 評論 (0)編輯 收藏

    ???????????

    做為新一代 3G 及移動終端浪潮的設備管理平臺, OMA DM 技術獲得了眾多設備廠商和運營商的追捧,也為軟件開發商提供新的崛起機會。業內目前也有不少工作在做這方面的軟件。好多公司這方面的產品都是基于Sync4J開發的。

    Sync4J 開源項目為我們提供了完整的 OMA DM 1.1.2 規范的 Java 實現。本文記錄了 Sync4J DM Server 安裝以及使用SCTS模擬器來模擬手機做一個DM業務,本文沒有用PPG來通過短信方式來用真手機來做,只是用模擬器來做的。SCTSOMA官方提供的一個測試工具,主要用來測試DMserver的,這里我們用來測試Sync4JSync4JSCTS的集合是我們學習OMA的一個很好的方式。

    1 :用到以下工具。

    ? Oracle9i

    ? jboss-3.2.3

    ? sync4j-server-dm-1.4.9?? sync4j 官方有下載

    ? SCTS_DeviceManagement_v1.12.zip? OMA 官方網站有下載。

    ?

    ?

    2 :安裝調試

    ? 2.1 解壓文件:

    ?? jboss-3.2.3 解壓到 C:\jboss-3.2.3

    sync4j-server-dm-1.4.9 解壓到 D:\sync4j\all\server-dm .

    直接安裝 SCTS.

    ? 2.2 配置環境變量

    ? JAVA_HOME=

    ? J2EE_HOME= C:\jboss-3.2.3

    ? SYNCSERVER_HOME= D:\sync4j\all\server-dm

    2.3 修改SYNCSERVER_HOME下的幾個配置文件

    ? ?SYNCSERVER_HOME\ default\config\common\properties\ Sync4j.properties

    把第一行改為 server.uri=http://your IP:8080/sync4j-dm/dm

    ? SYNCSERVER_HOME\ install.properties 改為

    (1)server-name=http://10.150.4.7:8080/sync4j-dm/dm

    ?(2) oracle 的數據庫,以下是用來連接數據庫的,所以一定要配置正確。

    jdbc.classpath=C:\\jboss-3.2.3\\server\\all\\lib\\ojdbc14.jar

    jdbc.driver=oracle.jdbc.driver.OracleDriver

    jdbc.url=jdbc:oracle:thin:@11.11.11.11:1521:abc

    jdbc.user=sync4j

    jdbc.password=sync4j

    2 4以上都做完后用Sync4j自己帶的安裝腳本安裝sync4j dm server

    SYNCSERVER_HOME 下運行 bin\install.cmd jboss32

    2 5由于這個版本存在了一個bug,所以在2.4做完后要修改

    SYNCSERVER_HOME\bin\start.cmd

    把倒數第三行 call\run.bat -c sync4j 改為

    call %J2EE_HOME%\bin\run.bat -c sync4j

    2 6 SYNCSERVER_HOME 運行 bin\start.cmd安裝

    所有程序到安裝到了 jboss_home 下了,可以到 JBOSS_HOME\ server\sync4j 就可以看到了,看一下你的 oralce 庫里面也初始化了數據,表也建好了。

    ?

    2 7 添加一個手機(我們其實是個模擬器)上來

    http://your ip:8080/dmdemo/jsp/addDevice.jsp 填寫一個 IMEI:111111111111111,

    ?

    2 8 配置scts

    Add device : IMEI:111111111111111 然后點 apply

    點擊 DM Account

    Name sync4j

    Server:sync4j

    Con : 不用填寫

    Address http://your ip /sync4j-dm/dm

    Port :8080

    Server authentication:

    ? Digest : 找數據庫用 sync4j 的數據庫中, sycn4j_device 表中 :IMEI:111111111111111 server password 為: srvpwd, 把這個 password 填寫到 password 中。

    Client authentication

    ?? DIGEST: USER NAME: sync4j PASSWORD: sync4j

    Add 就可以了

    然后點 connect 連一下 DM SERVER 看看能否連上。 第一次一般會出現認證錯我,接著再聯一次就可以了, SCTS 有日志可以查看。

    ?

    如果連通了那下面就來做一個采集模擬器上的一個節點吧。

    ?

    http://your ip:8080/dmdemo/index.html

    device id IMEI:111111111111111 login

    1.JPG

    ?

    ? 然后點擊 add to operation list

    2.JPG

    然后用 SCTS 主動回聯一下,看看 server 能夠拿到這個節點的值

    3.JPG

    你會看到 6 message !!!

    詳細看一下這 6 message 你會發現,這個節點的采集已經成功了!

    ?

    ?

    ?

    ?

    posted @ 2007-02-05 10:02 小小程序程序員混口飯吃 閱讀(9293) | 評論 (11)編輯 收藏

    ?

    ?1 import ?java.io.BufferedReader;
    ?2 import ?java.io.InputStreamReader;
    ?3 import ?java.security.MessageDigest;
    ?4
    ?5 import ?sun.misc.BASE64Decoder;
    ?6 import ?sun.misc.BASE64Encoder;
    ?7
    ?8 public ? class ?ConvertNounce? {
    ?9
    10 ???? // ?Digest?=?H(B64(H(username:password)):nonce)
    11 ???? // ?b1=B64(H(username:password));
    12 ???? //
    13 ???? //
    14 ???? /**
    15 ?????*? @param ?args
    16 ????? */

    17 ???? public ? static ? void ?main(String[]?args)? throws ?Exception? {
    18 ????????
    19
    20 ????????
    21 ???? // ????if(args.length!=3)?throw?new?Exception("args?is?wrong?,there?is?must?by?three?args?:username?password?nextNounce");
    22
    23 ????????InputStreamReader?reader? = ? new ?InputStreamReader(System.in);
    24 ????????BufferedReader?input? = ? new ?BufferedReader(reader);
    25 ????
    26 ????????
    27 ????????System.out.println( " input?username: " );
    28 ????????String?username? = input.readLine();
    29 ????????System.out.println( " input?password: " );
    30 ????????String?pwd? = ?input.readLine();
    31 ????????System.out.println( " input?nextNounce: " );
    32 ????????
    33 ????????String?serverNounce? = ?input.readLine();
    34 ????????String?clientNounce? = ? null ;
    35
    36 ????????System.out.println( "" );
    37 ????????
    38 ????????System.out.println( " userName= " + username);
    39 ????????System.out.println( " password= " + pwd);
    40 ????????System.out.println( " nextNounce= " + serverNounce);
    41 ???????? byte []?b1? = ?calculateDigestAndEcode64(username,?pwd);
    42 ????????
    43 ???? // ????System.out.println("b1="+new?String(b1));
    44 ????????
    45 ???????? // server?下來的nounce一定要先做B64的解碼,否則算出來的結果對不上
    46 ????????serverNounce? = new ?String( new ?BASE64Decoder().decodeBuffer(serverNounce));
    47 ????????
    48 ???? // ????System.out.println(serverNounce);
    49
    50 ???????? byte []?bserverNounce? = ?serverNounce.getBytes();
    51
    52 ???????? byte []?buf? = ? new ? byte [b1.length? + ? 1 ? + ?bserverNounce.length];
    53
    54 ????????System.arraycopy(b1,? 0 ,?buf,? 0 ,?b1.length);
    55
    56 ????????buf[b1.length]? = ?( byte )? ' : ' ;
    57 ????????System.arraycopy(bserverNounce,? 0 ,?buf,?b1.length + 1 ,
    58 ????????????????????????bserverNounce.length);
    59 ????????MessageDigest?md? = ?MessageDigest.getInstance( " MD5 " );
    60 ????????
    61 ???? // ????System.out.println(new?String(buf));
    62
    63 ???????? byte []?digest? = ?md.digest(buf);
    64 ????????
    65 ???? // ????System.out.println(new?String(digest));
    66
    67 ????????clientNounce? = ? new ?BASE64Encoder().encode(digest);
    68 ????????System.out.println( "" );
    69 ????????System.out.println( " result?Nounce= " + clientNounce);
    70 ????????
    73 ????}

    74
    75 ???? public ? static ? byte []?calculateDigestAndEcode64(String?username,
    76 ????????????String?password)? throws ?Exception? {
    77
    78 ????????MessageDigest?md? = ?MessageDigest.getInstance( " MD5 " );
    79 ????????String?cred? = ? "" ;
    80 ???????? if ?(username? != ? null )? {
    81 ????????????cred? = ?username.trim();
    82 ????????}

    83 ????????cred? += ? " : " ;
    84 ???????? if ?(password? != ? null )? {
    85 ????????????cred? += ?password.trim();
    86 ????????}

    87 ???? // ????System.out.println(cred);
    88 ???????? // ?System.out.println(new?String(md.digest(cred.getBytes())));
    89 ???????? return ? new ?BASE64Encoder().encode(md.digest(cred.getBytes()))
    90 ????????????????.getBytes();
    91 ????}

    92 ????
    93 ????
    94
    95 }

    96
    posted @ 2007-01-11 14:57 小小程序程序員混口飯吃 閱讀(1360) | 評論 (0)編輯 收藏

    范偉先生名言:豬撞樹上了,你撞豬上了吧

    ? 我有4種理解:
    ????? 1:豬撞樹上了,你撞在豬上,豬比較軟,你比豬幸運
    ????? 2:人家豬都撞樹上了,你又往人家身上撞,不想讓豬活了?
    ????? 3:豬往樹上撞,他智商低,你比不過他,去撞豬泄憤啊?
    ????? 4:你撞了豬,豬不跟你一般見識,他去撞樹

    posted @ 2006-12-19 09:31 小小程序程序員混口飯吃 閱讀(1673) | 評論 (6)編輯 收藏

    最近寫一個東西,在網上看到這個計劃書的范本,很不錯,抄下來

    商業計劃書目錄



    報告目錄

    第一部分 摘要(整個計劃的概括) (文字在2-3頁以內)



    一. 項目簡單描述(目的、意義、內容、運作方式)

    二. 市場目標概述

    三. 項目優勢及特點簡介

    四. 利潤來源簡析

    五. 投資和預算

    六. 融資方案(資金籌措及投資方式)

    七. 財務分析(預算及投資報酬)



    第二部分 綜述



    第一章 項目背景

    一. 項目的提出原因

    二. 項目環境背景

    三. 項目優勢分析(資源、技術、人才、管理等方面)

    四. 項目運作的可行性

    五. 項目的獨特與創新分析

    第二章 項目介紹

    一. 網站建設宗旨

    二. 定位與總體目標

    三. 網站規劃與建設進度

    四. 資源整合與系統設計

    五. 網站結構/欄目板塊

    六. 主要欄目介紹

    七. 商業模式

    八. 技術功能

    九. 信息/資源來源

    十. 項目運作方式

    十一.網站優勢(資源/內容/模式/技術/市場等)

    十二.無形資產

    十三.策略聯盟

    十四.網站版權

    十五.收益來源概述

    十六.項目經濟壽命



    第三章. 市場分析

    一. 互聯網市場狀況及成長

    二. 商務模式的市場地位

    三. 目標市場的設定

    四. 傳統行業市場狀況(網站市場資源的基礎)

    五. 市場定位及特點(消費群體、消費方式、消費習慣及影響市場的主要因素分析

    市場規模、市場結構與劃分,特定受眾等

    六. 市場成長(網站PageView與消費者市場)

    七. 本項目產品市場優勢(對于特定人群的市場特點的省事、省時、省力、省錢等)

    八. 市場趨勢預測和市場機會

    九. 行業政策

    第四章 競爭分析

    一. 有無行業壟斷

    二. 從市場細分看競爭者市場份額

    三. 主要競爭對手情況

    第五章 商業實施方案

    一. 商業模式實施方案總體規劃介紹

    二. 營銷策劃

    三. 市場推廣

    四. 銷售方式與環節

    五. 作業流程

    六. 采購、銷售政策的制定

    七. 價格方案

    八. 服務、投訴與退貨

    九. 促銷和市場滲透(方式及安排、預算)

    1. 主要促銷方式

    2. 廣告/公關策略、媒體評估

    3. 會員制等

    十. 獲利分析

    十一. 銷售資料統計和銷售紀錄方式,銷售周期的計算。

    十二. 市場開發規劃,銷售目標(近期、中期),銷售預估(3-5年)銷售額、占有率及

    計算依據



    第六章 技術可行性分析



    一. 平臺開發

    二. 數據庫

    三. 系統開發

    四. 網頁設計

    五. 安全技術

    六. 內容設計

    七. 技術人員

    八. 知識產權

    第七章 項目實施

    1. 項目實施構想(公司的設立、組織結構與股權結構)

    2. 網站開發進度設計與階段目標

    3. 營銷進度設計與階段目標

    4. 行政管理部門的建立、職工的招募和培訓安排

    5. 項目執行的成本預估



    第八章 投資說明



    一. 資金需求說明(用量/期限)

    二. 資金使用計劃(即用途)及分期

    三. 項目投資構成和固定資產投資的分類

    四. 主要流動資金構成

    五. 投資形式(貸款/利率/利率支付條件/轉股-普通股、優先股、任股權/對應

    價格等)

    六. 資本結構

    七. 股權結構

    八. 股權成本

    九. 投資者介入公司管理之程度說明

    十. 報告(定期向投資者提供的報告和資金支出預算)

    十一. 雜費支付(是否支付中介人手續費)

    第九章 投資報酬與退出

    一. 股票上市

    二. 股權轉讓

    三. 股權回購

    四. 股利



    第十章 風險分析與規避

    一. 政策風險

    二. 資源風險

    三. 技術風險

    四. 市場風險

    五. 內部環節脫節風險

    六. 成本控制風險

    七. 競爭風險

    八. 財務風險(應收帳款/壞帳/虧損)

    九. 管理風險(含人事/人員流動/關鍵雇員依賴)

    十. 破產風險

    第十一章 管理



    一. 公司組織結構

    二. 現有人力資源或經營團隊

    三. 管理制度及協調機制

    四. 人事計劃(配備/招聘/培訓/考核)

    五. 薪資、福利方案

    六. 股權分配和認股計劃



    第十二章 經營預測

    一. 網站經營

    1.訪問人數成長預測

    2.會員增長預測

    3.行業聯盟預測

    二. 銷售數量、銷售額、毛利率、成長率、投資報酬率預估及計算依據

    第十三章 財務可行性分析

    一. 財務分析說明

    二. 財務數據預測

    1. 收入明細表

    2. 成本費用明細表

    3. 薪金水平明細表

    4. 固定資產明細表

    5. 資產負債表

    6. 利潤及利潤分配明細表

    7. 現金流量表

    三. 財務分析指標

    反映財務盈利能力的指標

    a.投資回收期(Pt)

    b.投資利潤率

    c.投資利稅率

    d.不確定性分析



    第三部分 附錄

    一. 附件



    1. 主要經營團隊名單及簡歷

    2. 專業術語說明

    3. 企業形象設計/宣傳資料(標識設計、說明書、出版物、包裝說明等)



    二. 附表



    1. 市場受眾分析(人群分布/數量等)表

    2. 互聯網成長狀況表

    3. 主要設備清單

    4. 互聯網市場調查表

    5. 預估分析表

    6. 各種財務報表及財務預估表

    posted @ 2006-12-18 13:48 小小程序程序員混口飯吃 閱讀(10628) | 評論 (2)編輯 收藏

    ?

    1: 下載 cvsnt-2.5.03.2382(http://www.cvsnt.org)

    2: 安裝完全采用默認就可以了,安裝完可以不重啟

    3 :開始菜單 ->CVSNT-> Control Panel . 停止 CVS NT

    ?

    4 :進入 repository configuration 點擊 add 添加一個如圖所示:

    ?? Localtion? 填寫一個 D:/CVSRoot

    ?? Name???? 填寫 /cvs

    ?

    ?

    ?

    ?

    ?

    ??

    cvs_rep.GIF?

    5 :進入 server settting

    ?

    ?

    CVS_server_setting.GIF?

    ? Run as 選擇一個 windows 下已有用戶比如 (administrator) ,其余不用修改,應用就可以了。

    6 :進入 about :CVSNT 啟動 . CVS 已經配置完畢,至于安全什么方面的東西我沒有弄過。

    ?

    7: 打開 eclilpse ,file->new->other ,CVS

    ?

    ?CVS_ECLIPSE1.GIF

    ?

    ?

    CVS_ECLIPSE2.GIF?

    ?

    ?

    輸入 Host repository path 、用戶名、密碼 ,其余默認,然后 next

    CVS_ECLIPSE3.GIF?

    ?

    Next

    ?

    CVS_ECLIPSE4.GIF?

    Next

    ?

    CVS_ECLIPSE5.GIF?

    Next

    ?

    CVS_ECLIPSE6.GIF?

    ?

    一切搞定,你可以建立一個目錄然后 就可以commit .

    posted @ 2006-12-14 16:14 小小程序程序員混口飯吃 閱讀(13077) | 評論 (6)編輯 收藏
    1、長的驚險.....

    2、你小時候被豬親過吧?

    3、你長的很 愛guo 很 敬業 很 有骨氣

    4、長得真有創意,活得真有勇氣!

    5、你長的真t m 后現代

    6、你長的好象車禍現場

    7、你長的外形不準 比例沒打好

    8、你干嘛用屁股擋住臉啊!

    9、我覺得世界上就只有兩種人能吸引人,一種是特漂亮的 一種就是你這樣的

    10、你的長相很提神的說!!

    11、你需要回爐重造

    12、他們怎么能管你叫豬呢??這太不像話了!總不能人家長的像什么就叫人家什么吧!怎么能說你長得像豬呢?那是侮辱了豬。

    13、*,你T.M.D.長得太好認了。

    14、長的很科幻,長的很抽象!

    15、見過丑的,沒見過這么丑的。乍一看挺丑,仔細一看更丑!

    16、長的很無辜,長的對不起人民對不起黨。

    17、你長的拖慢網速,你長的太耗內存

    18、你光著身子追我兩公里 我回一次頭都算我是流氓!

    19、大哥,把你臉上的分辨率調低點好嗎?

    20、你長的違...

    posted @ 2006-12-13 10:49 小小程序程序員混口飯吃 閱讀(474) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 国产精品亚洲lv粉色| 亚洲日本天堂在线| 亚洲AV色吊丝无码| 亚洲熟妇AV一区二区三区浪潮| 亚洲精品无码久久久久牙蜜区| 美女黄网站人色视频免费| 中文字幕乱理片免费完整的| 人人揉揉香蕉大免费不卡| 91嫩草国产在线观看免费| 国产免费黄色大片| 精品国产综合成人亚洲区| 亚洲av无码一区二区三区天堂古代| 亚洲av无码成人精品国产 | 一个人免费观看日本www视频| 在线人成免费视频69国产| 亚欧免费视频一区二区三区| 精品国产免费观看久久久| 国产成人精品曰本亚洲79ren| 亚洲AV日韩AV天堂久久| 亚洲AV日韩综合一区尤物| 国产黄色片免费看| 国产男女爽爽爽爽爽免费视频| 日韩精品亚洲专区在线观看| 亚洲av无码无在线观看红杏| 亚洲中文字幕精品久久| 成年女人A毛片免费视频| 台湾一级毛片永久免费| 中文国产成人精品久久亚洲精品AⅤ无码精品| 久久亚洲成a人片| 亚洲AV香蕉一区区二区三区| 免费观看成人久久网免费观看| 香蕉视频在线观看免费国产婷婷| 亚洲中文字幕无码久久精品1| youjizz亚洲| 在线免费播放一级毛片| 在线免费一区二区| 亚洲一二成人精品区| 免费国产黄网站在线看| 精品免费人成视频app | 免费特级黄毛片在线成人观看| 亚洲精品高清无码视频|