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

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

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

    Skynet

    ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

    #



    環境 :
      個人 pc  xp 一臺 ;

    使用 : 
         官方下載: mysql-noinstall-5.1.36-win32.zip
          

    1. 解壓 成2個 (文件夾)
         mysql-5.1.36-win32_1  (主)
         mysql-5.1.36-win32_2   (從) 

    2. 配置文件修改
        主服務器配置修改
             >mysql-5.1.36-win32_1/my-small.ini  修改名稱為   my.ini  
             >修改剛才 my.ini 文件的 
       [client]
       port  = 3307

    [mysqld]
    server-id    
    = 1
    port        
    = 3307
    binlog-do-db    
    =test 
       binlog-ignore-db=backup
       log-bin=mysql-bin
            >啟動 mysql-5.1.36-win32_1/bin/mysqld.exe  --defaults-file=..youpath .my-small.ini 
            >使用 主 mysql  -u root  創建同步角色
    GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* 
    TO backup@'127.0.0.1'
    IDENTIFIED 
    BY '1234';
            >并且運行 
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin
    .000001 |      106 | test         | backup           |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)


       從服務器配置:
            >mysql-5.1.36-win32_2/my-small.ini  修改名稱為   my.ini  
            >修改剛才 my.ini 文件的 
           
    [client]
    #password    
    = your_password
    port        
    = 3308
    socket        
    = /tmp/mysql.sock

    # Here follows entries for some specific programs

    # The MySQL server
    [mysqld]
    server-id    
    = 2
    master-host    
    = 127.0.0.1
    master-user    
    = backup
    master-password    
    = 1234
    master-port    
    = 3307

    port        
    = 3308

    >啟動 mysql-5.1.36-win32_2/bin/mysqld.exe ( 我這會有個警告,沒事 )
    >參考 主服務器運行的  show master status; 數據
    slave stop; 
    CHANGE MASTER 
    TO MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=106
    slave start; 


    然后 :
    在主mysql服務器
    use test
    create table tt (ii int); 


    然后在從mysql服務器
    use test
    show tables;
    mysql> show tables ;
    +----------------+
    | Tables_in_test |
    +----------------+
    | tt             |
    +----------------+
    1 row in set (0.00 sec)










     
    posted @ 2009-07-18 19:03 劉凱毅 閱讀(1369) | 評論 (2)編輯 收藏



    ftplib模塊定義了FTP類和一些方法,用以進行客戶端的ftp編程。可以用python編寫一個自已的ftp客戶端程序,用于下載文件或鏡像站點。如果想了解ftp協議的詳細內容,請參考RFC959。

    該模塊是python的通用模塊,所以默認應該已安裝。ftplib模塊使用很簡單,暫時只有一個FTP類和十幾個函數。

    下面用一個交互方式演示一下ftplib的主要功能。

    >>> from ftplib import FTP
    >>> ftp = FTP('ftp.cwi.nl')   # connect to host, default port
    >>> ftp.login()               # user anonymous, passwd anonymous@
    >>> ftp.retrlines('LIST')     # list directory contents
    total 24418
    drwxrwsr-x   5 ftp-usr  pdmaint     1536 Mar 20 09:48 .
    dr-xr-srwt 105 ftp-usr  pdmaint     1536 Mar 21 14:32 ..
    -rw-r--r--   1 ftp-usr  pdmaint     5305 Mar 20 09:48 INDEX
     .
     .
     .
    >>> ftp.retrbinary('RETR README', open('README', 'wb').write)
    '226 Transfer complete.'
    >>> ftp.quit()



    下面一個下載文件的示例

    #!/usr/bin/env python

    #author:Jims of 
    http://www.ringkee.com/
    #create date: 2005/02/05
    #description: Using ftplib module download a file from a ftp server.

    from ftplib import FTP

    ftp=FTP()

    ftp.set_debuglevel(2) #打開調試級別2,顯示詳細信息
    ftp.connect('ftp_server','port') #連接
    ftp.login('username','password') #登錄,如果匿名登錄則用空串代替即可

    print ftp.getwelcome() #顯示ftp服務器歡迎信息
    ftp.cwd('xxx/xxx/') #選擇操作目錄
    bufsize = 1024 #設置緩沖塊大小
    filename='dog.jpg' 
    file_handler = open(filename,'wb').write #以寫模式在本地打開文件
    ftp.retrbinary('RETR dog.jpg',file_handler,bufsize) #接收服務器上文件并寫入本地文件
    ftp.set_debuglevel(0) #關閉調試

    ftp.quit() #退出ftp服務器

    下面一個上傳文件的示例,要成功運行該腳本,需在ftp服務器上有上傳文件的權限。

    #!/usr/bin/env python

    #author:Jims of 
    http://www.ringkee.com/
    #create date: 2005/02/05
    #description: Using ftplib module upload a file to a ftp server.

    from ftplib import FTP

    ftp=FTP()

    ftp.set_debuglevel(2)
    ftp.connect('ftp_server','port')
    ftp.login('username','password')

    print ftp.getwelcome()
    ftp.cwd('xxx/xxx/')
    bufsize = 1024
    filename='dog.jpg'
    file_handler = open(filename,'rb')
    ftp.storbinary('STOR dog.jpg',file_handler,bufsize) #上傳文件
    ftp.set_debuglevel(0)

    file_handler.close() #關閉文件
    ftp.quit()
    posted @ 2009-07-10 12:14 劉凱毅 閱讀(1737) | 評論 (0)編輯 收藏


    hadoop 原理參考:用 Hadoop 進行分布式并行編程
    官方中文文檔:http://hadoop.apache.org/core/docs/r0.18.2/cn/index.html

    1. 首先安裝 cygwin ssh  參考 windows ssh 搭建
    2. 搭建hadoop  參考 Cygwin下的Hadoop快速入門-偽分布式模式的查缺補漏
       
    這里還有 cygwin putty 控制臺方法設置
    3. 開發環境和 demo 參考

    通過參考應該環境的搭建沒問題,我這搭建成功了,說下我這一些注意到地方吧
    1. 我這使用的最新版本的 hadoop-0.20.0 在參考文檔中,修改 hadoop-site.xml 。
       在這個版本已經在conf下找不到了,我這嘗試修改的 hdfs-site.xml 。測試的時候竟然通過了。
     

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

    <configuration>
      
    <property>
        
    <name>fs.default.name</name>
        
    <value>hdfs://localhost:9000</value>
      
    </property>

      
    <property>
        
    <name>mapred.job.tracker</name>
        
    <value>localhost:9001</value>
      
    </property>

      
    <property>
        
    <name>dfs.data.dir</name>
        
    <!--linux -->
        
    <!--<value>/home/lky/tools/java/hadoop-0.18.3/dfs</value>-->
        
    <value>C:\\cygwin\\home\\lky\\tools\\java\\hadoop-0.18.3\\dfs\\</value>
      
    </property>


      
    <property>
        
    <name>hadoop.tmp.dir</name>
        
    <value>/tmp</value>
      
    </property>



      
    <property>
        
    <name>dfs.replication</name>
        
    <value>1</value>
      
    </property>


    <property>
      
    <name>fs.trash.interval</name>
      
    <value>60</value>
      
    <description>Number of minutes between trash checkpoints.
      If zero, the trash feature is disabled.
      
    </description>
    </property>
      
    </configuration>

    posted @ 2009-07-08 11:07 劉凱毅 閱讀(1241) | 評論 (0)編輯 收藏


    在實際中也可以 由文件導入 db 庫中 
        awk -F: '{print $1; print $0}' < /etc/passwd 顯示為:
    root
    root:x:0:0:root:/root:/bin/bash
    bin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    ............

    awk -F: '{print $1; print $0}' < /etc/passwd |sed 's/\\/\\\\/g'  | db_load -T -t hash passwd.db

    hash 入庫為  key 為奇數行,value 為 偶數行


    下面轉,收集

       bsddb模塊是用來操作bdb的模塊,bdb是著名的Berkeley DB,它的性能非常好,mysql的存儲后端引擎都支持bdb的方式。這里簡單介紹一些關于bsddb的使用方法。

        bdb不同于一般的關系數據庫,它存儲的數據只能是以key和value組成的一對數據,使用就像python的字典一樣,它不能直接表示多個字段,當要存儲多個字段的數據時,只能把數據作為一個整體存放到value中。
    使用bsddb面臨的第一問題是使用什么數據訪問方法,bdb支持四種:btree, hash, queue, recno。這里先說說它們有什么區別,btree是用的樹結構來才存儲的數據,查詢速度很快,可以存儲任意復雜的key和value。hash是用的hash算法,速度其實和btree比差不多的,但是當數據量特別巨大時,應該使用hash。queue是隊列操作,它有一個限制,它只能存儲定長的數據,也就是說value的長度是固定的!但是queue可以保持數據的先進先出,并且對數據的插入做了特殊的優化,并且提供行級鎖。queue的key必須是數字。recno和queue類似,但是它可以支持變長的value,它的key同樣也是數字。

        這里先對這四種數據訪問方法分別做打開數據庫,簡單插入一條數據的演示。
    對于python的bsddb模塊來說,打開數據庫的操作有兩種方式,一是使用原始的接口,就是先打開一個環境,然后從這個環境中打開一個數據庫,就像下面:

    import bsddb

    dbenv 
    = bsddb.db.DBEnv()
    dbenv.open(home, bsddb.db.DB_CREATE 
    | bsddb.db.DB_INIT_MPOOL)
    = bsddb.db.DB(dbenv)
    d.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_CREATE, 
    0666)


    還有一種方式是python特有的,這個是bsddb模塊本身對上面的過程做了包裝,比如打開btree的:

    import bsddb

    db 
    = bsddb.btopen('test.db''c')


    看起來比上面的簡單多了吧。但這種方式提供的接口很有限,也只有很簡單的功能,沒有第一種的靈活,但是它在python2.5的版本里是線程安全的。這里都介紹一下。
    看看一個例子:
     
    #-*- encoding: gb2312 -*-
    import os, sys, string
    import bsddb, time

    home 
    = "db_home"
    filename 
    = "test.db"
    try:
        
    # 創建home目錄
        os.mkdir(home)
    except:
        
    pass

    # 創建數據庫環境
    dbenv = bsddb.db.DBEnv()
    # 打開數據庫環境
    dbenv.open(home, bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL)
    # 創建數據庫對象
    = bsddb.db.DB(dbenv)
    # 打開數據庫, 這里的第二個參數就是指定使用什么數據訪問方法
    #
     btree是 bsddb.db.DB_BTREE, hash是bsddb.db.DB_HASH
    #
     queu 是 bsddb.db.DB_QUEUE,  recno 是bsddb.db.DB_RECNO
    d.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_CREATE, 0666)
    # 插入一條數據,注意queue和recno的key不能是字符串的,應該是數字
    d.put('test1''zhaowei')    
    print d.items()
    # 關閉,這時會把數據寫回文件
    d.close()
    dbenv.close()

    下面來個使用queue的,注意看有什么區別:

    #-*- encoding: gb2312 -*-
    import os, sys, string
    import bsddb, time

    home 
    = "db_home"
    filename 
    = "testqueue.db"
    try:
        os.mkdir(home)
    except:
        
    pass

    dbenv 
    = bsddb.db.DBEnv()
    dbenv.open(home, bsddb.db.DB_CREATE 
    | bsddb.db.DB_INIT_MPOOL)
    = bsddb.db.DB(dbenv)
    # queue必須要設置一個value的長度,它的value是定長的
    d.set_re_len(40)
    d.open(filename, bsddb.db.DB_QUEUE, bsddb.db.DB_CREATE, 
    0666)
    # 它的key必須是數字
    d.put(1'zhaowei')
    print d.items()

    d.close()
    dbenv.close()

    那簡單的第二種方式使用如下, 要簡潔很多了:

    import bsddb

    = bsddb.hashopen("aaa.db""c")
    d[
    'test1'= "zhaowei"
    print d.items()
    d.close()

    posted @ 2009-06-16 23:22 劉凱毅 閱讀(1388) | 評論 (0)編輯 收藏



    代碼上
    # -*- coding: gbk -*-
    #
        對應參考excel(obj)
    #
            提供訪問excel 參考 sql 訪問接口
    #
    excelAction.py   "G:\Documents and Settings\ch\桌面\非四大總計.xls" "A,C,B" "|"
    from pyExcelerator import *
    import sys

    txls 
    = parse_xls(sys.argv[1])
    findcols
    =sys.argv[2].split(',')
    tsplit
    ="%s"%(sys.argv[3])


    bmug
    =lambda str : unicode(str).encode("utf8")

    def cfsize(cha):
        
    if len(cha)==1
            
    return ord(cha)-ord('A'
        
    else : 
            fsize
    =0
            fnum
    =cfsize('Z')+1
            cc
    =list(cha)
            
    for tnum in range(len(cc)):
                fsize
    +=fnum*tnum+cfsize(cc[tnum])
            
    return fsize


    for tnum in range(len(txls)) :
        
    try:
            sheetname
    =txls[tnum][0]
            sheetdata
    =txls[tnum][1]
            
    for tnum in range(max([tmp[0] for tmp in sheetdata])):
                
    try :
                    stmp
    =str(tnum+1)+tsplit
                    
    for tmp in findcols :
                        stmp
    +=sheetdata[(tnum,cfsize(tmp))]+tsplit
                    
    print stmp
                
    except:
                    
    print sys.exc_info()[0]
                    
    pass
        
    except:
            
    print sys.exc_info()[0]
            
    pass

    print 'close' 
    posted @ 2009-06-11 13:18 劉凱毅 閱讀(1224) | 評論 (0)編輯 收藏


    svn log svn://127.0.0.1/zxProject/ --username xxxxxx --password xxxxxx |grep  "2009-05-29 16:38*"
    [xx@wap01 xx]$ svn log -v -r134 svn://127.0.0.1/zxProject/ --username xxxxxx --password xxxxxx
    [xx@wap01 xx]$ svn log -v -r134:135 svn://127.0.0.1/zxProject/ --username xxxxxx --password xxxxxx


    轉http://favor.javaeye.com/blog/320522
    svn 命令

    1、將文件checkout到本地目錄
    svn checkout path(path是服務器上的目錄)
    例如:svn checkout svn://192.168.1.1/pro/domain
    簡寫:svn co

    2、往版本庫中添加新的文件
    svn add file
    例如:svn add test.php(添加test.php)
    svn add *.php(添加當前目錄下所有的php文件)

    3、將改動的文件提交到版本庫
    svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果選擇了保持鎖,就使用–no-unlock開關)
    例如:svn commit -m “add test file for my test“ test.php
    簡寫:svn ci

    4、加鎖/解鎖
    svn lock -m “LockMessage“ [--force] PATH
    例如:svn lock -m “lock test file“ test.php
    svn unlock PATH

    5、更新到某個版本
    svn update -r m path
    例如:
    svn update如果后面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本。
    svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
    svn update test.php(更新,于版本庫同步。如果在提交的時候提示過期的話,是因為沖突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
    簡寫:svn up

    6、查看文件或者目錄狀態
    1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示)
    【?:不在svn的控制中;M:內容被修改;C:發生沖突;A:預定加入到版本庫;K:被鎖定】
    2)svn status -v path(顯示文件和子目錄狀態)
    第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最后一次修改的版本號和修改人。
    注:svn status、svn diff和 svn revert這三條命令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
    簡寫:svn st

    7、刪除文件
    svn delete path -m “delete test fle“
    例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
    或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推薦使用這種
    簡寫:svn (del, remove, rm)

    8、查看日志
    svn log path
    例如:svn log test.php 顯示這個文件的所有修改記錄,及其版本號的變化

    9、查看文件詳細信息
    svn info path
    例如:svn info test.php

    10、比較差異
    svn diff path(將修改的文件與基礎版本比較)
    例如:svn diff test.php
    svn diff -r m:n path(對版本m和版本n比較差異)
    例如:svn diff -r 200:201 test.php
    簡寫:svn di

    11、將兩個版本之間的差異合并到當前文件
    svn merge -r m:n path
    例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合并到當前文件,但是一般都會產生沖突,需要處理一下)

    12、SVN 幫助
    svn help
    svn help ci


    13、版本庫下的文件和目錄列表
    svn list path
    顯示path目錄下的所有屬于版本庫的文件和目錄
    簡寫:svn ls

    14、創建納入版本控制下的新目錄
    svn mkdir: 創建納入版本控制下的新目錄。
    用法: 1、mkdir PATH…
    2、mkdir URL…
    創建版本控制的目錄。
    1、每一個以工作副本 PATH 指定的目錄,都會創建在本地端,并且加入新增
    調度,以待下一次的提交。
    2、每個以URL指定的目錄,都會透過立即提交于倉庫中創建。
    在這兩個情況下,所有的中間目錄都必須事先存在。

    15、恢復本地修改
    svn revert: 恢復原始未改變的工作副本文件 (恢復大部份的本地修改)。revert:
    用法: revert PATH…
    注意: 本子命令不會存取網絡,并且會解除沖突的狀況。但是它不會恢復
    被刪除的目錄

    16、代碼庫URL變更
    svn switch (sw): 更新工作副本至不同的URL。
    用法: 1、switch URL [PATH]
    2、switch –relocate FROM TO [PATH...]
    1、更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會將
    服務器上文件與本地文件合并。這是將工作副本對應到同一倉庫中某個分支或者標記的
    方法。
    2、改寫工作副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變動
    (比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用
    這個命令更新工作副本與倉庫的對應關系。

    17、解決沖突
    svn resolved: 移除工作副本的目錄或文件的“沖突”狀態。
    用法: resolved PATH…
    注意: 本子命令不會依語法來解決沖突或是移除沖突標記;它只是移除沖突的
    相關文件,然后讓 PATH 可以再次提交。

    18、輸出指定文件或URL的內容。
    svn cat 目標[@版本]…如果指定了版本,將從指定的版本開始查找。
    svn cat -r PREV filename > filename (PREV 是上一版本,也可以寫具體版本號,這樣輸出結果是可以提交的)


    posted @ 2009-05-31 00:13 劉凱毅 閱讀(1373) | 評論 (0)編輯 收藏

    參考:
    顯示   【sheet數】【sheet Name】【(第一行,第一列)】  
    print sheets[0][1][(0,0)]


    from pyExcelerator import *
    sheets = parse_xls('src/天娛版權明確的歌曲清單.xls')
    sdata=sheets[0][1]

    #按行數 迭代
    for tnum in range(max([tmp[0] for tmp in sdata])):
     print sdata[(tnum,0)],'-',sdata[(tnum,1)]

     





    from pyExcelerator import *
    import os
    sheets 
    = parse_xls('xls/版權確認清單表20090601.3.xls')
    cpcc
    = parse_xls('xls/CP對應表.xls')

    g2u
    =lambda str : str.decode('gbk')
    bmug
    =lambda str : unicode(str).encode("gbk")
    def cfsize(cha):
        
    if len(cha)==1
            
    return ord(cha)-ord('A'
        
    else : 
            fsize
    =0
            fnum
    =cfsize('Z')+1
            cc
    =list(cha)
            
    for tnum in range(len(cc)):
                fsize
    +=fnum*tnum+cfsize(cc[tnum])
            
    return fsize



    cpccmap
    ={}
    tsdata
    =cpcc[0][1]
    for tnum in range(max([tmp[0] for tmp in tsdata]))[:]:
        cpname
    =tsdata[(tnum,cfsize('A'))]
        cpid
    =("%s" % (tsdata[(tnum,cfsize('B'))])).split(".")[0]
        cpccmap[cpname]
    =cpid


    def insertData(cpid,cpname, music,actor,copyrightname,ytime,txls,rows):
        
    #print music,actor,cpname,ytime,txls,rows
        txls.write(rows,cfsize('A'),music)
        txls.write(rows,cfsize(
    'B'),actor)
        txls.write(rows,cfsize(
    'C'),cpname)
        txls.write(rows,cfsize(
    'D'),u'中國大陸')
        txls.write(rows,cfsize(
    'E'),u'')
        txls.write(rows,cfsize(
    'F'),u'')
        txls.write(rows,cfsize(
    'G'),u'')
        txls.write(rows,cfsize(
    'H'),u'')
        txls.write(rows,cfsize(
    'I'),ytime.split(' ')[0])
        txls.write(rows,cfsize(
    'J'),u'')
        txls.write(rows,cfsize(
    'K'),'0')
        txls.write(rows,cfsize(
    'L'),u'許可')
        txls.write(rows,cfsize(
    'M'),'200')
        txls.write(rows,cfsize(
    'N'),u'許可')
        txls.write(rows,cfsize(
    'O'),'0')
        txls.write(rows,cfsize(
    'P'),u'許可')
        txls.write(rows,cfsize(
    'Q'),'0')
        txls.write(rows,cfsize(
    'U'),copyrightname)
        
        txls.write(rows,cfsize(
    'V'),'100%')
        txls.write(rows,cfsize(
    'W'),cpname)
        txls.write(rows,cfsize(
    'X'),'100%')


    cpmap
    ={}
    for tsdata in sheets :
        
    try:
            sdata
    =tsdata[1]
            
    #按行數 迭代 
            for tnum in range(max([tmp[0] for tmp in sdata]))[1:]:
                cpid
    =sdata[(tnum,cfsize('C'))]
                cpname
    =sdata[(tnum,cfsize('D'))] #.upper()
                music=sdata[(tnum,cfsize('E'))]
                actor
    =sdata[(tnum,cfsize('F'))]
                copyrightname
    =sdata[(tnum,cfsize('H'))]
                ytime
    =sdata[(tnum,cfsize('K'))]
                
    if not cpmap.has_key(cpname) :
                    tmpf
    =bmug("cp -r 0000_20090602/ data3/"+cpid+"_20090602/ " )
                    os.system(tmpf)
                    txls
    =Workbook()
                    tsheet
    =txls.add_sheet(u'版權列表')
                    cpmap[cpname]
    =[txls,1,'data3/'+cpid+u'_20090602/產品信息/'+cpid+'_20090602_01_copyright.xls',tsheet]
                    titles
    ='歌曲名稱    演唱者    提供者    授權區域    電子化版權信息(有/無)    需要DRM處理(是/否)    支持二次開發(是/否)    相關版權合同記錄(有/無)    授權期限    全曲授權    全曲價格    彩鈴授權    彩鈴價格    IVR授權    IVR價格    振鈴授權    振鈴價格    ISRC    UPC    ICPN    詞曲著作權權利人一    詞曲比例一    錄音權權利人一    錄音比例一    詞曲著作權權利人二    詞曲比例二    錄音權權利人二    錄音比例二    詞曲著作權權利人三    詞曲比例三    錄音權權利人三    錄音比例三    其它'.split('\t')
                    
    for ttnum in range(len(titles)):
                        tsheet.write(0,ttnum,g2u(titles[ttnum]))
                    insertData(cpid,cpname, music,actor,copyrightname,ytime,tsheet,
    1)
                
    else :
                    tsheet
    =cpmap[cpname][3]
                    cpmap[cpname][
    1]=cpmap[cpname][1]+1
                    insertData(cpid,cpname, music,actor,copyrightname,ytime,tsheet,cpmap[cpname][
    1])
        
    except :
            
    print "[error]: ", music,actor,cpname,ytime,txls
            
    pass


    for tkey in cpmap.keys() :
        ct
    =cpmap[tkey]
        
    print ct[2]
        ct[0].save(ct[
    2])





     

    posted @ 2009-05-29 22:23 劉凱毅 閱讀(558) | 評論 (0)編輯 收藏



    sudo apt-get install openvpn


    mkdir /etc/openvpn/config
    cp config-cc /etc/openvpn/config
    #config-cc里有
      ca.crt
    client-zz.ovpn
    liukaiyi.crt
    liukaiyi.csr
    liukaiyi.key




    cd /etc/openvpn/config
    sudo openvpn --config  client-zz.ovpn


    這里 我就成功了



    ping 10.1.2.22  
    ok








    posted @ 2009-05-23 12:05 劉凱毅 閱讀(207) | 評論 (0)編輯 收藏



    svn 幫助文檔,大體上瀏覽了下 一些比較好的特性 有:
    http://www.subversion.org.cn/svnbook/


    分支與合并
    鎖定
    svnsync
    版本庫鉤子
    一個SVN  Python狀態爬蟲


    注意 使用用戶 (sysmen)  :
    #指定新版本
    vim ~.bashrc #添加了
    alias svn="/usr/local/subversion/
    bin/svn"
    alias svnadmin="/usr/local/subversion/bin/svnadmin"
    alias svnserve="/usr/local/subversion/bin/svnserve"

    #最簡單 svn 服務器搭建
    cd /home/sysman/src/svn/
    svnadmin create test
    svnserve -d -r /home/sysman/src/svn/test/

    #最簡單配置
    #vim svnserve.conf
    [general]
    password-db = passwd
    realm = test

    anon-access = read
    auth-access = write



    #查看
    cd /home/sysman/src/svn/testsrc
    svn list  svn://127.0.0.1/test


    #遷出
    cd /home/sysman/src/svn/testsrc
    svn checkout  svn://127.0.0.1/test


    #遷入
    cd test
    echo "google - baidu " > baidu
    svn add baidu svn://127.0.0.1/test
    svn commit -m 'add ok'
    svn list  svn://127.0.0.1/test
    # baidu
    # tt


    #詳細參考 :
    http://www.subversion.org.cn/svnbook/
    在文檔中有關有意思的介紹 (svnsync):
    http://www.subversion.org.cn/svnbook/1.4/svn.ref.svnsync.html


    其他說明 :

    1.幫助
    svn help

    svn help add

    2.一般操作
    更新你的工作拷貝
        svn update

    做出修改
        svn add
        svn delete
        svn copy
        svn move

    檢驗修改
        svn status
        svn diff

    可能會取消一些修改
        svn revert

    解決沖突(合并別人的修改)
        svn update
        svn resolved

    提交你的修改
        svn commit




    posted @ 2009-05-19 17:37 劉凱毅 閱讀(8723) | 評論 (0)編輯 收藏



    Perl/Php Translation

    arrays

    hashes

    data structures

    array split/join

    case conversion

    string comparisons

    functions

    string matching operations

    basename/dirname

    environment variables

    POST/GET parameters

    HTML elements

    URL encode

    MySQL database access


    — Perl arrays — Php arrays
    @a = ();

    @a = ( 'xx', 11, 33.5, );

    @a = 12..33;

    $a[2] = 'something';

    $len = scalar(@a);
    # or
    $len = @a;

    @a3 = ('xx', @a1, @a2);

    ($x, $y) = @a;

    $a[@a] = 'new'; # push

    push
    pop
    shift
    unshift
    splice

    foreach $i (@a) { .. }
    $a = array();

    $a = array( 'xx', 11, 33.5, );

    $a = range(12,33);

    $a[2] = 'something';

    $len = count($a);



    $a3 = array_merge('xx', $a1, $a2);

    list($x, $y) = $a;

    $a[] = 'new'; # push

    array_push
    array_pop
    array_shift
    array_unshift
    array_splice

    foreach ($a as $i) { .. }
    — Perl hashes — Php hashes
    %h = ();

    %h = ( 'x' => 'y',
    'z' => 'w',
    );

    $h{'x'} = 7;

    while (($key,$value) = each(%h))
    { .. }

    $a = keys(%h);
    $b = values(%h);

    delete $h{'x'};
    $h = array();

    $h = array( 'x' => 'y',
    'z' => 'w',
    );

    $h['x'] = 7;

    foreach ($h as $key => $value)
    { .. }

    $a = array_keys($h);
    $b = array_values($h);

    unset( $h['x'] );

    — Perl data structures — Php data structures
    %h = ('a'=>13, 'b'=>25);
    @x = ('hi', 'there', 'all',);

    @mix = ( %h, @x,
    [33..39],
    { x=>15, yy=>23, },
    );

    $mix[0]->{'b'} # == 25
    $mix[0]{'b'} # == 25
    $mix[2]->[2] # == 35
    $mix[2][2] # == 35

    $h = array('a'=>13, 'b'=>25);
    $x = array('hi', 'there', 'all',);

    $mix = array($h, $x,
    range(33,39),
    array('x'=>15, 'yy'=>23),
    );

    $mix[0]['b'] # == 25

    $mix[2][2] # == 35

    — Perl array split/join — Php array split/join
    @a = split( '|', $s );

    @a = split( 's+', $s );


    $s = join( '|', @a );
    $a = preg_split( '/|/', $s,
    -1, PREG_SPLIT_NO_EMPTY );
    $a = preg_split( '/s+/', $s,
    -1, PREG_SPLIT_NO_EMPTY );

    $s = join( '|', $a );
    — Perl case conversion — Php case conversion
    $s = lc($s);
    $s = uc($s);

    $s =~ tr/a-z/A-Z/;
    $s = strtolower($s);
    $s = strtoupper($s);


    — Perl string comparisons — Php string comparisons
    $s1 eq $s2



    $s1 lt $s2
    strcmp($s1,$s2) == 0
    # or
    $s1 === $s2

    strcmp($s1,$s2) < 0
    — Perl functions — Php functions
    sub foo {
    my @args = @_;
    }

    sub foo {
    $x = 5;
    }





    foo2( @a, %h );
    function foo() {
    $args = func_get_args();
    }

    function foo() {
    global $x;
    $x = 5;
    }

    function foo2($x, $y) {
    }

    foo2( $a, $h );
    — Perl string matching operations — Php string matching operations
    $s =~ m/(w+)/;
    $substr = $1;

    @all = ($s =~ m/(w+)/g);


    $s =~ s/s+/X/;
    $s =~ s/s+/X/g;

    $s =~ s/^s+|s+$//g;
    preg_match( "/(w+)/", $s, $match );
    $substr = $match[1];

    preg_match_all( "/(w+)/", $s, $match );
    $all = $match[0];

    $s = preg_replace( "/s+/", 'X', $s, 1 );
    $s = preg_replace( "/s+/", 'X', $s );

    $s = trim($s);
    — Perl basename/dirname — Php basename/dirname
    use File::Basename;

    $b = basename($path);
    $d = dirname($path);
     

    $b = basename($path);
    $d = dirname($path);
    — Perl environment variables — Php environment variables
    %ENV

    $ENV{REQUEST_METHOD}

    $ARGV[$i]

    $0
    $_SERVER

    $_SERVER[REQUEST_METHOD]

    $argv[$i+1]

    $argv[0] # Php/CGI only
    — Perl POST/GET parameters — Php POST/GET parameters
    #form/hyperlink parameters:
    # s : single-valued
    # m : multi-valued

    use CGI (:standard);




    $s = param('s');
    @m = param('m');

    @param_names = param();
    $num_params = param();
    #form/hyperlink parameters:
    # s : single-valued
    # m[] : multi-valued
    # (such as multi-selections
    # and checkbox groups)

    $PARAM
    = array_merge($_GET, $_POST);

    $s = $PARAM['s']; # a scalar
    $m = $PARAM['m']; # an array

    $param_names = array_keys($PARAM);
    $num_params = count($PARAM);
    — Perl HTML elements — Php HTML elements
    use CGI (:standard);







    $ref = "x.cgi";
    a({href=>$ref}, "yy")

    textfield({name=>"yy", size=>5})

    password({name=>"yy", size=>5})

    textarea({name=>"yy",
    cols=>5, rows=>2})

    submit({value=>"yy"})

    button( {name=>"xx",
    value=>"yy",
    onclick=>"submit()",
    }
    )

    %labels = (0=>'a',1=>'q',2=>'x');
    popup_menu( { name=>"xx",
    values=>[0..2],
    labels=>%labels,
    size=>4,
    }
    )


    @a = ('xx','yy','zz');
    radio_group( { name=>'nn',
    values=> @a,
    default=>'_',
    linebreak=>1,
    }
    )

    %labels = ('xx'=>'L1','yy'=>'L2');
    @a = keys( %labels );
    checkbox_group( { name=>'nn',
    values=> @a,
    labels=> %labels,
    }
    )

    table(
    Tr(
    [
    td(['a','b']),
    td(['x','y']),
    ]
    )
    )

    # The Perl/CGI functions have the
    # additional property of "stability"
    # when used in reentrant forms.
    # The values of the HTML elements are
    # set according to the incoming
    # parameter values for those elements.
    # The versions below are not stable.

    $ref = "x.php";
    <a href="<?php echo $ref?>">yy</a>

    <input type=text name=yy size=5>

    <input type=password name=yy size=5>

    <textarea name=yy cols=5 rows=2>

    </textarea>

    <input type="submit" value=yy>

    <input type="button"
    name="xx" value="yy"
    onclick="submit()">



    <select name="xx" size="4">
    <?php
    $labels = array(0=>'a',1=>'q',2=>'x');
    foreach (range(0,2) as $_)
    echo "<option value='$_'>",
    $labels[$_];
    ?>

    </select>

    $a = array('xx','yy','zz');
    foreach ($a as $_)
    echo "<input type=radio
    name=nn value='$_'>$_<br>";




    $labels = array('xx'=>'L1','yy'=>'L2');
    foreach (array_keys($labels) as $_)
    echo "<input type=checkbox
    name=nn value='$_'>",
    $labels[$_];



    <table>
    <tr>
    <td>a</td><td>b</td>

    </tr>
    <tr>
    <td>x</td><td>y</td>
    </tr>
    </table>
    — Perl URL encode — Php URL encode
    use URI::Escape;

    uri_escape($val)
    uri_unescape($val)
     


    urlencode($val)
    urldecode($val)
    — Perl MySQL database access — Php MySQL database access
    use DBI;
    $dbh = DBI->connect(
    'DBI:mysql:test:localhost',
    $usr,$pwd
    );

    $dbh->do( $sql_op )

    $query = $dbh->prepare( $sql_op );
    $query->execute();

    while(
    @record = $query->fetchrow() )
    { .. }


    $dbh->quote($val)



     
    $dbh = mysql_connect(
    'localhost', $usr, $pwd
    );
    mysql_query('USE test')

    mysql_query( $sql_op );

    $results = mysql_query( $sql_op );


    while($record =
    mysql_fetch_row($results))
    { .. }


    "'" . addslashes($val) . "'"

    posted @ 2009-05-15 23:09 劉凱毅 閱讀(1367) | 評論 (0)編輯 收藏

    僅列出標題
    共12頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 Last 
    主站蜘蛛池模板: 草久免费在线观看网站| 国内精品99亚洲免费高清| 中文在线观看免费网站| 男人天堂2018亚洲男人天堂| 亚洲av无码乱码国产精品| 毛片免费视频播放| 亚洲成熟丰满熟妇高潮XXXXX| 国产免费人成视频在线观看| 日本在线高清免费爱做网站| a级毛片免费全部播放无码| 羞羞视频免费观看| 亚洲人成未满十八禁网站| 亚洲精品白色在线发布| 亚洲成色在线综合网站| 亚洲情侣偷拍精品| 免费国产a国产片高清网站| 成年女人男人免费视频播放| 一个人免费观看www视频在线| 57pao一国产成视频永久免费| 日本卡1卡2卡三卡免费| 三年片在线观看免费| 久久九九免费高清视频| 一级毛片高清免费播放| 七次郎成人免费线路视频| 香蕉视频免费在线| 精品久久久久久亚洲中文字幕| 亚洲妇女无套内射精| 日韩国产欧美亚洲v片| 精品久久久久久久久亚洲偷窥女厕| 亚洲一区二区三区国产精华液| 激情综合亚洲色婷婷五月| 亚洲mv国产精品mv日本mv| 亚洲娇小性xxxx色| 一本色道久久88—综合亚洲精品 | 亚洲首页在线观看| 亚洲爱情岛论坛永久| 亚洲男人天堂av| 亚洲一区在线观看视频| 亚洲熟女乱色一区二区三区 | 日韩免费在线观看| 国产免费看插插插视频|