Onway

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

     摘要: 这个月里诸多不顺,但还是一点一点翻完了这本书。自己做的笔记极少会看,算做个纪念咯。  阅读全文

posted @ 2012-05-28 11:46 Onway 阅读(643) | 评论 (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.cppblog.com/Onway/archive/2015/12/08/212438.html

posted @ 2012-03-26 22:37 Onway 阅读(948) | 评论 (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 阅读(722) | 评论 (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 阅读(1194) | 评论 (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.cppblog.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 阅读(4211) | 评论 (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 阅读(480) | 评论 (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.cppblog.com/onway
    mail: aluohuai@126.com

    如果本程序让你错过了和女友的约会,或者把水烧干了,或者出现其他问题,本人概不负责

posted @ 2012-03-09 18:39 Onway 阅读(673) | 评论 (2)编辑 收藏

如题

posted @ 2012-02-15 20:16 Onway 阅读(441) | 评论 (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 阅读(4509) | 评论 (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 阅读(607) | 评论 (0)编辑 收藏

仅列出标题
共6页: 1 2 3 4 5 6