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

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

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

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

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

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

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

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

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

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




            /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*);    /*    直接讀文件發(fā)送    */
            void print_msg(int,const char*);            /*    標準輸出    */


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

                
            /*    創(chuàng)建監(jiān)聽套接字    */
                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));

                
            /*    請求方法和參數(shù)的簡單檢測    */
                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指針讀取內(nèi)容發(fā)送    */
                
            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() {
                # 截斷開頭結尾的空格,將中間的連續(xù)空格換成一個空格
                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 閱讀(1245) | 評論 (0)編輯 收藏

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




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


            一,安裝:
            1,安裝goldendict和兩個函數(shù)庫(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目錄下執(zhí)行:
            sudo make uninstall
            即可。
            2,注意,在$HOME目錄下的.eyoudao隱藏文件夾不會被刪除,內(nèi)含單詞本wordsbook和一個臨時查詢文件query.tmp。


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



            四,版權聲明:
            xml數(shù)據(jù)和各種xsl,js,css,png文件都是修改或源自windows的有道詞典安裝文件,使用時注意版權問題。
            xslt是仿照官網(wǎng)的一個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,將聲音播放相關的函數(shù)調(diào)用改掉參數(shù)為this.getAttribute('ref')
                b,刪掉報錯顯示(不太厚道啊!)和flash檢測
                c,將所有的關于css/和images/目錄文件的引用改為本地文件協(xié)議的絕對路徑
                d,去掉所有app:.*:
            4,result.xsl的修改:
                a,以本地文件協(xié)議的絕對路徑加入default.css和default.js的引用
                b,加入<audio>標簽用作發(fā)音
                c,將所有的app:.*:去掉
                d,結尾加入一段javascript,調(diào)用三個函數(shù)
            5,default.js的修改
                a,加入全局變量INBOOK
                b,ctlog函數(shù)直接返回false
                c,修改所有window.external.loadString和window.external.saveString
                d,將deskdict_main修改為results
                e,注釋掉window.selection.empty
                f,playVoice函數(shù)更改內(nèi)容
                g,isFlashReady函數(shù)直接返回true
                h,注釋掉GetAdsByTimer函數(shù)的調(diào)用
                i,注釋掉dict.ugc.init的調(diào)用
                j,在toggleFav函數(shù)加入一段關于本地單詞本的代碼
            6,更詳細的修改參見detail/diff-patch目錄下的patch文件。


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

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

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

            #!/bin/bash

            # 查詢學校空閑的教室
            # 原理:空閑的教室 
            = 整個學期開課的課室 - 查詢時間開課的課室
            # 如果服務器查詢參數(shù)不變,一個學期只需更新一次
            # 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 繼續(xù)教育學院101 繼續(xù)教育學院103 繼續(xù)教育學院201 繼續(xù)教育學院203 繼續(xù)教育學院205 繼續(xù)教育學院206 繼續(xù)教育學院301 繼續(xù)教育學院303 繼續(xù)教育學院306 繼續(xù)教育學院403 繼續(xù)教育學院405 繼續(xù)教育學院407 繼續(xù)教育學院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 
            -"節(jié)次(大節(jié),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 閱讀(509) | 評論 (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之后,添加運行權限,在桌面圖形環(huán)境下運行腳本(不需要root權限)。這時會檢查zenity命令和gnome-session進程的存在。gnome-session的檢查是為了保證能使用zenity命令創(chuàng)建界面。如果缺乏任何一個,則在標準輸出后直接退出。

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

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

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

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

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

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

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

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

            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

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

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

            如題

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











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

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

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

            posted @ 2012-02-12 20:33 Onway 閱讀(4571) | 評論 (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 閱讀(647) | 評論 (0)編輯 收藏

            僅列出標題
            共6頁: 1 2 3 4 5 6 
            亚洲国产另类久久久精品 | 99久久国产综合精品女同图片| 久久久久亚洲精品天堂久久久久久| 国产成人无码精品久久久久免费 | 欧美亚洲另类久久综合| 久久精品国产99久久丝袜| 日本五月天婷久久网站| 亚洲日本va午夜中文字幕久久 | 久久WWW免费人成一看片| 精品国产一区二区三区久久| 曰曰摸天天摸人人看久久久| A级毛片无码久久精品免费| 伊人久久综在合线亚洲2019| yy6080久久| 国内精品伊人久久久久影院对白| 99久久99久久| 欧洲成人午夜精品无码区久久 | jizzjizz国产精品久久| 色综合久久久久综合99| 久久久精品国产sm调教网站| 漂亮人妻被黑人久久精品| 亚洲国产精品人久久| 精品无码久久久久久午夜| 一本综合久久国产二区| 国产韩国精品一区二区三区久久| 久久亚洲国产精品成人AV秋霞| 国产精品一区二区久久精品无码| 狠狠久久综合| 精品久久久久久国产三级 | MM131亚洲国产美女久久| 久久国产精品久久| 色天使久久综合网天天| 国产亚洲精品久久久久秋霞| 国内精品伊人久久久久影院对白 | 人人狠狠综合88综合久久| 久久精品国产99国产精品导航 | 中文字幕一区二区三区久久网站| 久久久久97国产精华液好用吗| 久久久久久伊人高潮影院| 99久久er这里只有精品18| 婷婷久久综合|