• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Onway

            我是一只菜菜菜菜鳥...
            posts - 61, comments - 56, trackbacks - 0, articles - 34

                 摘要: 這個月里諸多不順,但還是一點一點翻完了這本書。自己做的筆記極少會看,算做個紀念咯。  閱讀全文

            posted @ 2012-05-28 11:46 Onway 閱讀(664) | 評論 (0)編輯 收藏

            (僅限個人理解,強烈歡迎指正!)
            一,理解
            1,限制常量是對某個常量進行數值上的大小規定。其值必定是一個數值,編譯時限制通常定義在<limits.h>頭文件中。
            2,選項常量是用來決定對某項功能是否支持。其值也是一個數值,但通常是0,-1,1或者一個表示年月的數值又或者未定義其值。編譯時選項通常定義在<unistd.h>頭文件中。
            3,功能測試宏用來在編譯時控制一些頭文件的版本。通常定義在<features.h>頭文件中。

            二,編譯時常量的命名
            1,POSIX的編譯時限制以_POSIX_前綴開頭,XSI編譯時限制以NL_或者_XOPEN_前綴開頭。特定系統實現的編譯時限制不帶前綴,對應于POSIX限制去掉前綴(其值應該比POSIX要大)。
            2,選項用以表明是否對某個標準的某項功能的支持。其編譯時常量通常是以_POSIX_或者_XOPEN_做前綴。沒有特定系統實現的編譯時選項。
            3,功能測試宏常量只是以下劃線_開頭,然后就沒什么規則了。功能測試宏只在編譯時使用。詳見man feature_test_macros。

            三,運行時確定限制或選項的三個函數
            1,如果某個限制或選項無法從編譯時確定,那就需要調用以下三個函數之一:sysconf,pathconf,fpathconf。后兩個函數是跟路徑相關的。
            2,三個函數都需要一個整型常量參數,該參數命名規則為編譯時的常量名去掉前綴,加上_SC_或者_PC_(調用跟路徑相關的兩個函數)前綴。
            3,注意其返回值,詳見函數的man手冊。

            四,confstr函數和getconf命令
            1,confstr用于獲取依賴于配置的字符串變量。其參數只有幾個,詳見man手冊。
            2,getconf命令是用于查詢系統配置變量,即編譯時的限制和選項常量的值。該命令都可以查詢到confstr函數的字符串變量。

            http://www.shnenglu.com/Onway/archive/2015/12/08/212438.html

            posted @ 2012-03-26 22:37 Onway 閱讀(975) | 評論 (0)編輯 收藏

            7,附1.0到1.1的更新說明:
            a,單詞本使用了sqlite3數據庫
            b,添加單詞會提示選擇單詞分類,可從~/.eyoudao/classify.txt進行修改,分類不能出現空格。
            c,1.0的單詞本~/.eyoudao/wordsbook被廢棄,在該目錄下多了兩個文件classify.txt和wordbook.db
            d,除了新添加的兩個文件之外,修改的只有eyoudao腳本,另添加了一個單詞本復習腳本review,并被連接到/usr/bin目錄下
            8,單詞本復習腳本使用說明
            a,復習分為三個模式,聽寫模式:只有發音,沒有單詞和釋義顯示;默寫模式:只有釋義顯示,可自行使用發音;問答模式:給出單詞,選擇是否記得釋義。
            b,選定模式之后,是選擇復習的單詞,可按分類,加入時間,錯誤率三種或它們的組合進行選擇。
            c,復習過程中,非問答模式下,錯誤之后,會重新復習該單詞,不會寫入數據庫,除非自行選擇跳過該單詞。
            d,問答模式下,選擇忘記,會跳過該單詞,并寫入數據庫。

            posted @ 2012-03-20 22:13 Onway 閱讀(738) | 評論 (4)編輯 收藏

            其實在瀏覽器看到是正常的,但是通過goldendict訪問就不行了,主要表現是導航條工作不正常,不能隱藏,和頁面底下出現的一大片空白。如圖:
             




            /Files/Onway/eyoudao-web.tar.gz.rar


            gyd-server.c
            #include <sys/types.h>
            #include 
            <sys/socket.h>
            #include 
            <sys/stat.h>
            #include 
            <unistd.h>
            #include 
            <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <string.h>
            #include 
            <arpa/inet.h>
            #include 
            <fcntl.h>
            #include 
            <pthread.h>

            #define PROT 10000
            #define ADDRESS "127.0.0.1"
            #define BACKLOG 20
            #define BUFSIZE 4096

            /*    互斥量,用于各個線程的標準輸出    */
            pthread_mutex_t 
            lock = PTHREAD_MUTEX_INITIALIZER;
            struct clientinfo
            {
                
            int sockfd;    /*    客戶端套接字    */
                
            int sockno;    /*    客戶端請求順序號    */
            };

            int create_server_socket();
            void* handle_request(void*);
            int send_dynamic(struct clientinfo*,char*);    /*    通過dynamic.bash返回的結果    */
            int send_static(struct clientinfo*,char*);    /*    直接讀文件發送    */
            void print_msg(int,const char*);            /*    標準輸出    */


            int
            main(
            int argc,char *argv[])
            {
                
            int serverfd;
                
            int count = 0;
                pthread_t ptid;
                
            struct clientinfo *cinfo;

                
            /*    創建監聽套接字    */
                serverfd 
            = create_server_socket();
                
            if (serverfd == -1) {
                    printf(
            "main(): terminate\n");
                    
            return -1;
                }

                
            while (1) {
                    cinfo 
            = (struct clientinfo*) malloc (sizeof(struct clientinfo));
                    cinfo
            ->sockfd = accept(serverfd,NULL,NULL);
                    cinfo
            ->sockno = ++count;
                    pthread_create(
            &ptid,NULL,handle_request,(void*)cinfo);
                }

                
            return 0;
            }

            int 
            create_server_socket()
            {
                
            int tmpfd = socket(AF_INET,SOCK_STREAM,0);
                
            if (tmpfd == -1) {
                    printf(
            "create_server_socket(): socket error\n");
                    
            return -1;
                }

                
            struct sockaddr_in svraddr;
                bzero(
            &svraddr,sizeof(svraddr));
                svraddr.sin_family 
            = AF_INET;
                svraddr.sin_port 
            = htons(PROT);
                svraddr.sin_addr.s_addr 
            = inet_addr(ADDRESS);

                
            if (bind(tmpfd,(struct sockaddr*)&svraddr,sizeof(svraddr)) == -1) {
                    printf(
            "create_server_socket(): bind error\n");
                    
            return -1;
                }

                
            if (listen(tmpfd,BACKLOG) == -1) {
                    printf(
            "create_server_socket(): listen error\n");
                    
            return -1;
                }
                
                
            return tmpfd;
            }

            void*
            handle_request(
            void *info)
            {
                
            struct clientinfo *cinfo = (struct clientinfo*) info;
                
            char receive[BUFSIZE << 1= "";
                
            char method[BUFSIZE] = "",request[BUFSIZE] = "";
                
            char header[] = "HTTP/1.1 200 OK\r\nconnection:close\r\n\r\n";
                
            int i;

                
            if (recv(cinfo->sockfd,receive,BUFSIZE << 1,0< 0) {
                    print_msg(cinfo
            ->sockno,"handle_request(): recv error");
                    
            return ( (void*0);
                }
                
            /*    回應報頭    */
                write(cinfo
            ->sockfd,header,strlen(header));

                
            /*    請求方法和參數的簡單檢測    */
                sscanf(receive,
            "%s%s",method,request);
                
            if (strcmp(method,"GET")) {
                    print_msg(cinfo
            ->sockno,"handle_request(): method is not GET");
                    
            return ( (void*0);
                }

                
            if (strlen(request) < 8) {
                    print_msg(cinfo
            ->sockno,"handle_request(): unknow request");
                    
            goto end;
                }
                print_msg(cinfo
            ->sockno,receive);

                
            /*    請求dynamic.bash    */
                
            if (strncmp(request,"/action?",8== 0) {
                    send_dynamic(cinfo,request);
                    
            goto end;
                }
                send_static(cinfo,request);

            end:
                close(cinfo
            ->sockfd);
                free(cinfo);
                
            return ( (void*0);
            }

            int
            send_static(
            struct clientinfo *cinfo,char *request)
            {
                
            int len = strlen(request);
                
            char path[1024],buf[BUFSIZE];
                
            int fd,bytes;
                
            /*    忽略開頭的'/'符號    */
                sscanf(request,
            "%*c%s",path);
                
                
            /*    文件讀取    */
                fd 
            = open(path,O_RDONLY);
                
            if (fd == -1) {
                    print_msg(cinfo
            ->sockno,"send_static(): open error");
                    
            return 1;
                }
                
            while ((bytes = read(fd,buf,4096)) > 0) {
                    write(cinfo
            ->sockfd,buf,bytes);
                }
                close(fd);
                
            return 0;
            }

            int
            send_dynamic(
            struct clientinfo *cinfo,char *request)
            {
                
            char cmd[BUFSIZE],arg[1024],line[BUFSIZE];
                FILE 
            *fpin;
                
            /*    忽略action?    */
                sscanf(request,
            "%*[^?]%*c%s",arg);
                sprintf(cmd,
            "./dynamic.bash \"%s\"",arg);

                
            /*    從popen返回的FILE指針讀取內容發送    */
                
            int cnt = 0;
                
            if ((fpin = popen(cmd,"r")) == NULL) {
                    print_msg(cinfo
            ->sockno,"send_dynamic(): popen error");
                    
            return 1;
                }
                
            while (fgets(line,BUFSIZE,fpin) != NULL) {
                    write(cinfo
            ->sockfd,line,strlen(line));
                }
                pclose(fpin);
                
            return 0;
            }

            void
            print_msg(
            int no,const char *msg)
            {
                pthread_mutex_lock(
            &lock);
                printf(
            "request: %d\n%s\n\n",no,msg);
                pthread_mutex_unlock(
            &lock);
            }

            dynamic.bash
            #!/bin/bash

            xmldetail
            ="http://dict.youdao.com/search?keyfrom=deskdict.main&xmlDetail=true&doctype=xml&xmlVersion=7.1&dogVersion=1.0&client=deskdict&appVer=5.0.32.4695&xslVer=3.0&q="
            xsldetail
            ="detail/result.xsl"
            xmlsimple
            =""
            xslsimple
            =""

            check_in_book() {
                # 截斷開頭結尾的空格,將中間的連續空格換成一個空格
                word
            ="`echo $1 | sed 's/^\(%20\)\+//g' | sed 's/\(%20\)\+$//g' | sed 's/\(%20\)\+/ /g'`"
                cut 
            -';' -1 wordsbook | grep -"^$word$"
                [ $
            ? == 0 ] && echo 1 || echo 0
            }

            add_to_book() {
                word
            ="`echo $1 | sed 's/^\(%20\)\+//g' | sed 's/\(%20\)\+$//g' | sed 's/\(%20\)\+/ /g'`"
                t
            ="`date +'%y-%m-%d %H:%M'`"
                echo 
            "$word;$t;" >> wordsbook
                echo 
            1
            }

            send_response() {
                # $1為:inbook
            =queryword或者detail=queryword等形式
            action
            =${1%=*}
            target
            =${1#*=}

            case $action in
                
            "inbook")
                    check_in_book 
            "$target"
                    ;;
                
            "tobook")
                    add_to_book 
            "$target"
                    ;;
                
            "detail")
                    .
            /xslt "-xmlapi" "$xmldetail" "-xslapi" "$xsldetail" "-keyword" "$target" | sed '$d' 
                    ;;
                
            "simple")
                    ;;
                
            *)
                    exit 
            1
                    ;;
            esac
            }

            send_response 
            "$1"
            exit 
            0

            posted @ 2012-03-17 17:38 Onway 閱讀(1226) | 評論 (0)編輯 收藏

            下載:/Files/Onway/eyoudao-1.0.tar.gz.rar(不是rar文件,要刪了rar后綴)
            依然期待各路神牛的更改。




            linux環境goldendict詞典的有道擴展程序eyoudao 1.0使用說明
            (從第一版的youdaodict重新命名為eyoudao,版本為1.0,基于windows有道詞典的5.0.32.4695版本)


            一,安裝:
            1,安裝goldendict和兩個函數庫(goldendict版本可能要求1.0.1以上才能使用擴展程序):
            sudo apt-get install goldendict libxml2-dev libxslt1-dev

            2,然后eyoudao目錄下:
            make
            sudo make install

            3,最后打開goldendict詞典,菜單欄的編輯選項 -> Dictionaries -> 詞典來源 -> Programs
            添加一欄:
            -    Html    eyoudao-detail    eyoudao -detail "%GDWORD%"


            二,卸載:
            1,在/opt/eyoudao目錄下執行:
            sudo make uninstall
            即可。
            2,注意,在$HOME目錄下的.eyoudao隱藏文件夾不會被刪除,內含單詞本wordsbook和一個臨時查詢文件query.tmp。


            三,關于很多的bugs:
            1,保存單詞的時候,會導致goldendict在該單詞前加上~后重新查詢。這會影響其他詞典的使用。
            2,eyoudao-simple沒有做了。個人2M的聯通寬帶,感覺速度還能接受。
            3,查詢單詞出現's結尾的時候,看到返回的單詞是錯誤的,無法添加到單詞本。
            其實這個錯誤在dict.youdao.com都是一樣的,但what's和it's這些就沒錯。
            4,如果還遇到各種的bugs,莫要驚慌,自己動手修改。



            四,版權聲明:
            xml數據和各種xsl,js,css,png文件都是修改或源自windows的有道詞典安裝文件,使用時注意版權問題。
            xslt是仿照官網的一個demo改寫的。
            本擴展程序僅供學習交流之用。


            五,關于本程序:
            eyoudao 1.0 By Onway 2012-03-16
            debug yourself or report to
            aluohuai@126.com
            www.shnenglu.com/onway


            六,有道詞典安裝文件的大致修改過程:
            1,在windows有道詞典的安裝目錄resultui下,拷貝出來三個文件夾:css,js,images,兩個文件result.xsl和commonfile.xsl
            2,js目錄將all-min.js解壓為default.js,刪除wordBook.js
            3,commonfile.xsl的修改:
                a,將聲音播放相關的函數調用改掉參數為this.getAttribute('ref')
                b,刪掉報錯顯示(不太厚道啊!)和flash檢測
                c,將所有的關于css/和images/目錄文件的引用改為本地文件協議的絕對路徑
                d,去掉所有app:.*:
            4,result.xsl的修改:
                a,以本地文件協議的絕對路徑加入default.css和default.js的引用
                b,加入<audio>標簽用作發音
                c,將所有的app:.*:去掉
                d,結尾加入一段javascript,調用三個函數
            5,default.js的修改
                a,加入全局變量INBOOK
                b,ctlog函數直接返回false
                c,修改所有window.external.loadString和window.external.saveString
                d,將deskdict_main修改為results
                e,注釋掉window.selection.empty
                f,playVoice函數更改內容
                g,isFlashReady函數直接返回true
                h,注釋掉GetAdsByTimer函數的調用
                i,注釋掉dict.ugc.init的調用
                j,在toggleFav函數加入一段關于本地單詞本的代碼
            6,更詳細的修改參見detail/diff-patch目錄下的patch文件。


            7,附:
            其實為了保存單詞,我還寫了一個100行多點的多線程網絡程序,以利用ajax跟本地程序通信。
            但很郁悶的是,goldendict以訪問網站得來的結果顯示的時候有些bug。導航條不能用了,頁面低下出現一大片空白。
            從goldendict保存出來的html文件跟在瀏覽器看到明顯不一樣。
            我之所以確定是goldendict的問題,是因為我試過將改好的網頁文件從apache服務器發回goldendict都是出現同樣的問題。
            而從瀏覽器訪問apache服務器則是正常的。

            posted @ 2012-03-17 01:04 Onway 閱讀(4238) | 評論 (3)編輯 收藏

            /Files/Onway/free-rooms.bash.txt

            #!/bin/bash

            # 查詢學校空閑的教室
            # 原理:空閑的教室 
            = 整個學期開課的課室 - 查詢時間開課的課室
            # 如果服務器查詢參數不變,一個學期只需更新一次
            # good good study , day day up 
            !
            # Onway 
            2012-03-09    aluohuai@126.com

            roomline
            =10
            rooms
            ="黃浩川教學樓101 黃浩川教學樓102 黃浩川教學樓103 黃浩川教學樓104 黃浩川教學樓201 黃浩川教學樓202 黃浩川教學樓203 黃浩川教學樓204 黃浩川教學樓301 黃浩川教學樓302 黃浩川教學樓303 黃浩川教學樓304 黃浩川教學樓401 黃浩川教學樓402 黃浩川教學樓403 黃浩川教學樓404 黃浩川教學樓501 黃浩川教學樓502 黃浩川教學樓503 黃浩川教學樓504 黃浩川樓101 黃浩川樓102 黃浩川樓104 黃浩川樓105 黃浩川樓209 黃浩川樓303 黃浩川樓304 黃浩川樓305 黃浩川樓402 黃浩川樓403 黃浩川樓404 黃浩川樓405 繼續教育學院101 繼續教育學院103 繼續教育學院201 繼續教育學院203 繼續教育學院205 繼續教育學院206 繼續教育學院301 繼續教育學院303 繼續教育學院306 繼續教育學院403 繼續教育學院405 繼續教育學院407 繼續教育學院505 黎耀華樓108 黎耀華樓212 黎耀華樓306 黎耀華樓313 黎耀華樓402 黎耀球樓301 陸佑圖書館301 陸佑圖書館302 馬蘭芳教學樓101 馬蘭芳教學樓102 馬蘭芳教學樓103 馬蘭芳教學樓104 馬蘭芳教學樓201 馬蘭芳教學樓202 馬蘭芳教學樓203 馬蘭芳教學樓204 馬蘭芳教學樓301 馬蘭芳教學樓302 馬蘭芳教學樓303 馬蘭芳教學樓304 馬蘭芳教學樓401 馬蘭芳教學樓402 馬蘭芳教學樓403 馬蘭芳教學樓404 馬蘭芳教學樓501 馬蘭芳教學樓502 馬蘭芳教學樓503 馬蘭芳教學樓504 體育館101 體育館102 體育館103 體育館104 體育館105 體育館106 體育館107 體育館108 體育館109 體育館110 體育館111 體育館131 體育館132 體育館133 體育館135 體育館136 體育館137 體育館138 體育館139 體育館140 新會樓404 主樓101 主樓201 主樓202 主樓212 主樓213 主樓239 主樓240 主樓249 主樓250 主樓356 主樓401 主樓402 主樓405 主樓406 主樓417 主樓418 主樓421 主樓422 主樓423 主樓427 主樓429 主樓439 主樓441 主樓445 主樓457 主樓458 主樓470 主樓473 主樓501 主樓505 主樓524 主樓525 主樓533 主樓539 主樓541 主樓543 主樓545 主樓549 主樓552 主樓554 主樓556 主樓559 主樓560 主樓562 主樓575 綜合實驗大樓103 綜合實驗大樓201 綜合實驗大樓202 綜合實驗大樓203 綜合實驗大樓204 綜合實驗大樓205 綜合實驗大樓206 綜合實驗大樓212 綜合實驗大樓213 綜合實驗大樓214 綜合實驗大樓302 綜合實驗大樓303 綜合實驗大樓305 綜合實驗大樓306 綜合實驗大樓307 綜合實驗大樓310 綜合實驗大樓402 綜合實驗大樓403 綜合實驗大樓404 綜合實驗大樓405 綜合實驗大樓406 綜合實驗大樓407 綜合實驗大樓416 綜合實驗大樓503 綜合實驗大樓605 綜合實驗樓605"
            update() {
                wget 
            -/tmp/query.asp http://jwc.wyu.cn/everyday/query/indeft/query.asp --post-data "cnt=1&wk=1&wk=2&wk=3&wk=4&wk=5&wk=0&cnt=2&pt=1&pt=2&pt=3&pt=4&pt=5&cc5=&cc6=&cc7=&cc8=&cc9=&Submit=+%CC%E1%BD%BB+"
                iconv -f gb18030 -t utf8 /tmp/query-gb18030.tmp > /tmp/query-utf8.tmp
                
            new="rooms=\"$(grep '.*<td align=\"left\">.*' /tmp/query-utf8.tmp | sed -'0~4p' | grep -'>.*<' | tr -'><' | sort -ub | grep -'^$')\"" 
                
            new=$(echo $new)
                rm 
            /tmp/query-gb18030.tmp /tmp/query-utf8.tmp
                sed 
            "${roomline}c $new" $0 > "/tmp/$0"
                chmod u
            +"/tmp/$0"
                mv 
            "/tmp/$0" $0
            }

            query() {
                arg
            =""
                read 
            -"星期(0-5,0為周末,空格分開):" day 
                
            if [ -"$day" ] ; then
                    arg
            ="cnt=1&"
                    
            for i in $day
                    
            do
                        arg
            =$arg"wk=$i&"
                    done
                fi

                read 
            -"節次(大節,0-5,空格分開):" class
                
            if [ -"$class" ] ; then
                    arg
            =$arg"cnt=2&"
                    
            for i in $class
                    
            do
                        arg
            =$arg"pt=$i&"
                    done
                fi

                read 
            -"周次(1-19,空格分開):" week
                
            if [ -"$week" ] ; then
                    arg
            =$arg"cnt=3&"
                    
            for i in $class
                    
            do
                        arg
            =$arg"ew=$i&"
                    done
                fi

                
            if [ -"$arg" ] ; then
                    echo 
            "what are you doing!"
                    exit 
            0
                fi

                arg
            =$arg"cc5=&cc6=&cc7=&cc8=&cc9=&Submit=+%CC%E1%BD%BB+"

                wget 
            -/tmp/query-gb18030.tmp http://jwc.wyu.cn/everyday/query/indeft/query.asp --post-data "$arg"
                iconv -f gb18030 -t utf8 /tmp/query-gb18030.tmp > /tmp/query-utf8.tmp
                used
            ="$(grep '.*<td align=\"left\">.*' /tmp/query-utf8.tmp | sed -n '0~4p' | grep -o '>.*<' | tr -d '><' | sort -ub | grep -v '^$')" 
                used
            =$(echo $used)
                rm 
            /tmp/query-gb18030.tmp /tmp/query-utf8.tmp

                
            for i in $rooms
                
            do
                    sign
            =0
                    
            for j in $used
                    
            do
                        
            if [ "$i" == "$j" ] ; then
                            sign
            =1
                            
            break
                        fi
                    done
                    
            if [ "$sign" == "0" ] ; then
                        echo $i
                    fi
                done
            }

            if [ $# == 0 ] ; then
                query
            elif [ 
            "$1" == "--update" ] ; then
                update
            else
                echo 
            -"Usage:\n\t$0 [--update]"
            fi
            exit 
            0

            posted @ 2012-03-09 18:52 Onway 閱讀(494) | 評論 (1)編輯 收藏

            上圖好像沒什么意思吧?zenity的界面。
                  

            /Files/Onway/oalarm.bash.txt

            oalarm文檔

            概要:
                oalarm是一個基于gnome,mplayer,at,date,zenity等命令的,使用bash script寫成的簡陋桌面鬧鐘。

            功能:
                定時任務的新建,查看,延遲,刪除,提醒。

            安裝要求:
                存在gnome-session進程,/usr/bin下存在at,zenity,mplayer程序,$HOME目錄下存在.config/autostart和.local/share/applications兩個目錄。

            安裝:
                下載oalarm.bash之后,添加運行權限,在桌面圖形環境下運行腳本(不需要root權限)。這時會檢查zenity命令和gnome-session進程的存在。gnome-session的檢查是為了保證能使用zenity命令創建界面。如果缺乏任何一個,則在標準輸出后直接退出。

                首次運行腳本會出現安裝選項。
                安裝過程會先在/usr/bin目錄下檢查at,mplayer,zenity三個命令,如果缺少任何一個,標準輸出錯誤后退出。
                安裝過程還會檢查兩個目錄:$HOME/.config/autostart和$HOME/.local/share/applications,如果缺乏任何一個,安裝失敗。在這兩個目錄會各寫入一個.desktop文件,分別用于登錄圖形界面后運行一次腳本檢查過期任務和在應用附件欄目添加運行圖標。分別執行的命令是:
                $HOME/.oalarm/oalarm.bash --check
                $HOME/.oalarm/oalarm.bash --start

                其后會在$HOME目錄下創建隱藏目錄.oalarm和兩個在子目錄past,wait,分別用于存放過期任何和等待任務。oalarm.bash會復制自身到該目錄下。

                如果存在/usr/share/sounds/gnome/default/alerts/bark.ogg該聲音文件,則會被復制到.oalarm目錄下并命名為voice,用于提示任務時使用mplayer進行播放。可以將voice文件替換為喜歡的提示聲音。

            卸載:
                安裝后啟動oalarm,會出現卸載選項。
                卸載行為是:
                刪掉.oalarm目錄和兩個.desktop文件。記得為聲音文件作備份。

            任務文件格式:
                使用年月日時分命名。文件內第一行為任務標題,新建任務時必須填入,第二行至文件尾為任務內容,可選。

            原理:
                下載的oalarm.bash,不帶參數運行,是安裝前使用,安裝后之后可以刪掉。
                從應用程序-附件欄目的圖標啟動是帶--start參數運行$HOME/.oalarm/oalarm.bash。用于新建,查看,延遲和刪除任務。
                登錄圖形界面后,帶參數--check自動啟動$HOME/.oalarm/oalarm.bash,用于檢查關機或者登出圖形界面期間到期的任務。延遲10秒之后開始檢查。
                圖形界面登錄期間,如果任務到期,則由atd守護進程帶--check和任務文件名兩個參數啟動$HOME/.oalarm/oalarm.bash。然后oalarm.bash從wait目錄下的文件提取信息進行提示。(如果voice文件不存在,則提示沒有聲音)

                兩個重要的假定:
                1,使用如下命令判斷使用已經登錄圖形界面:
                    ps -eo ruid,comm | grep $UID.*gnome-session
                2,$HOEM/.config/autostart下的.desktop文件指定的程序會在登錄圖形界面后自動運行。

            行為:
                在任務提醒之后選擇延遲和在等待任務中選擇延遲是有區別的。如果選擇延遲時間的時候取消了,則提醒之后的延遲會被放棄,任務被移到過期任務。

            bugs:
                1,由于命名任務文件的時候沒考慮到,同一個時間只能有一個任務,否則會被覆蓋。
                2,選擇時間的方式有點別扭,但我也不知道怎么辦。
                3,延遲功能必須重新選擇日期時間,有點不厚道

            關于:
                oalarm 0.1.0
                By Onway 2012-03-06

                debug yourself or report to:
                blog: www.shnenglu.com/onway
                mail: aluohuai@126.com

                如果本程序讓你錯過了和女友的約會,或者把水燒干了,或者出現其他問題,本人概不負責

            posted @ 2012-03-09 18:39 Onway 閱讀(691) | 評論 (2)編輯 收藏

            如題

            posted @ 2012-02-15 20:16 Onway 閱讀(449) | 評論 (0)編輯 收藏











            由于有道詞典的windows客戶端是使用xsl將xml文件轉換成html再顯示的,而恰好goldendict內嵌了webkit,還可以添加擴展程序。
            于是寫了個小程序獲取xml數據,再借用了一下有道的安裝文件,打包發上來以此拋磚引玉,希望有興趣的各路神牛可以修改得更好。
            /Files/Onway/youdaodict.tar.gz.rar

            其實文件不是rar壓縮的,只是上傳不了tar.gz的文件,rar只是加上去的。

            (之前上傳那個,很不好意思的還有一個文件的路徑沒改過來,還有順便說說,我的系統是ubuntu 11.10,gnome3桌面,godendict是1.0.1的版本,朋友說0.9那個版本沒有擴展程序功能的)

            posted @ 2012-02-12 20:33 Onway 閱讀(4537) | 評論 (6)編輯 收藏

            ubuntu 11.04安裝ftp服務器
            sudo apt-get install vsftpd

            默認登錄需要帳號密碼,其根目錄是用戶根目錄
            客戶端命令:
            登錄:
            ftp [-46pinegvd] [host[port]]
            文件下載:
            get remote-file [local-file]
            ftp命令行不支持目錄下載
            通過wget得到解決
            #wget ftp://IP:PORT/* --ftp-user=xxx --ftp-password=xxx -r
            詳見:man ftp


            或者直接瀏覽器下載

            posted @ 2012-01-26 17:20 Onway 閱讀(631) | 評論 (0)編輯 收藏

            僅列出標題
            共6頁: 1 2 3 4 5 6 
            AV狠狠色丁香婷婷综合久久| 91精品国产91久久久久久青草| 国产香蕉97碰碰久久人人| 久久精品国产精品亚洲人人| 亚洲国产成人精品无码久久久久久综合 | 精品多毛少妇人妻AV免费久久| 久久艹国产| 亚洲精品乱码久久久久久久久久久久 | 亚洲国产精品无码久久| 97久久精品国产精品青草| 蜜臀久久99精品久久久久久| 久久婷婷国产综合精品| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久久人妻精品无码一区| 亚洲AV无码久久精品狠狠爱浪潮| 欧美久久精品一级c片片| 无码国内精品久久综合88| 久久国产成人精品麻豆| 777午夜精品久久av蜜臀| 国产亚洲精久久久久久无码AV| 久久国产高潮流白浆免费观看| 久久久综合香蕉尹人综合网| 国产亚洲欧美成人久久片| 伊人久久精品无码二区麻豆| 久久久久久国产a免费观看黄色大片| 久久九九亚洲精品| 波多野结衣中文字幕久久| 久久夜色精品国产噜噜亚洲AV| 狠狠色丁香婷婷久久综合| 久久久久黑人强伦姧人妻| 精品国产一区二区三区久久蜜臀| 成人久久综合网| 国产欧美久久久精品| 久久久噜噜噜久久中文福利| 亚洲αv久久久噜噜噜噜噜| 久久精品国产99国产精品导航| 中文字幕亚洲综合久久菠萝蜜| 久久久久人妻一区精品| 久久婷婷色综合一区二区| 久久人人超碰精品CAOPOREN| 久久久久亚洲AV无码专区桃色|