Mar 22
看了一个帖子,讨论这个问题的
URL: http://bbs.chinaunix.net/archiver/?tid-1399973.html

第一页4L的说法是正确的,那些的确是滥用管道,不过这个问题放到后面讨论。

感觉第一页末尾beginner-bj的测试方法不很对头,于是自己写了个小程序测试一下:
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char * argv[]){
    char cmd[1024];
    if(argc < 3) {
        printf("Not Enough Parameters.\n");
        return 1;
    }
    int a, b;
    sscanf(argv[1], "%d", &a);
    sscanf(argv[2], "%d", &b);
    sprintf(cmd, "sleep %d | sleep %d", a, b);
    system(cmd);
    return 0;
}


测试结果如下:
引用
felix021@felix021-laptop:~/code$ g++ a.cpp
felix021@felix021-laptop:~/code$ ./a.out 1 2
felix021@felix021-laptop:~/code$ time ./a.out 2 2

real  0m2.035s
user  0m0.000s
sys  0m0.020s
felix021@felix021-laptop:~/code$ time ./a.out 2 3

real  0m3.039s
user  0m0.012s
sys  0m0.016s
felix021@felix021-laptop:~/code$ time ./a.out 4 3

real  0m4.020s
user  0m0.016s
sys  0m0.004s
felix021@felix021-laptop:~/code$ time ./a.out 6 3

real  0m6.034s
user  0m0.004s
sys  0m0.020s


看来管道两头确实是协同工作的(从管道的原理也可以推知)
一头写,一头读,同时处理,这样可以提高CPU的利用率,特别是在多CPU的时候
不过总体来说,我想应该是会多占用一些CPU(进程之间的切换什么的?)。


然后关注一下滥用管道的问题,这个直接引用第二页某楼的vbs100童鞋的大作,应该可以说明问题了:
引用
正确的是
$ grep 'some word' urfile
但是更方便的是
$ <urfile grep 'some word'
这样可方便改 grep 的参数

还有经常用的
$ cat urfile | grep 'some word' | wc -l
其实直接可以用
$ <urfile grep -c 'some word'
Mar 22
之前下载的最新版本不行,用了这个帖子10L给的链接下载的就OK了,然后自己写了KeyCode.ini(贴在11L),噢也!

http://www.dayhand.com/bbs/viewthread.php?tid=13906&extra=page%3D2

--

捐了2块钱,支持国产。
Mar 21

WL-520GU 不指定

felix021 @ 2009-3-21 23:39 [IT » 硬件] 评论(4) , 引用(0) , 阅读(8005) | Via 本站原创
4.兼容内存颗粒编码
32MB
K4S561632,三星 Samsung
HY57V561620,现代 Hynix
MT48LC32M16,镁光 Micron
64MB
K4S511632,三星 Samsung
HY57V121620,现代 Hynix
HYB39S512160,英飞凌 Infineon

网上查了一下K4S511632在武汉哪里能买到,找到两条信息,记录一下

启浩国际有限公司武汉代表处 ~ 邢建斌
Q1026052092 ~ 13429832768 ~ 027-87741225 ~ widekey2008ic@hotmail.com
武昌区珞瑜路阜华大厦D栋2203室

武汉德创微电子商行 ~ 彭先生
027-51854612/4613 ~ 13476858615 ~ Q344568920 ~ haitao0208@163.com
洪山区珞瑜路158号华中电子市场3288室 ~ http://whdc.ic37.com

--

@ 23:55
Google了一下 "HY57V121620 027",发现只有一篇,就是我的Blog,收录时间:14分前。。。
Mar 17

lrcdis: 外挂式显歌词 不指定

felix021 @ 2009-3-17 23:44 [IT » 软件] 评论(0) , 引用(0) , 阅读(4166) | Via 本站原创
我自己试了下,蛮好的,Ubuntu下面终于有lyrics了。

-- zz from http://linuxtoy.org/archives/lrcdis.html --

lrcdis 是由 xiooli、solcomo、bones7456、oldherl 等同学编写的一个 Bash 脚本,该脚本允许你以外挂方式来显示歌词。目前,lrcdis 支持 Linux 下的大多数音乐播放器,包括 Rhythmbox、Amarok、Quod Libet、Exaile、Audacious、MPD、MPlayer、MOC 等等。

...

首次运行 lrcdis,它将在 $HOME/.config 目录下建立配置文件 lrcdis.conf。通过此文件,你可以决定歌词以何种模式显示(有 CLI、OSD、notify、fifo 等选择)、下载歌词的保存位置、使用哪一个音乐播放器等。

当你使用上述音乐播放器中的一款播放歌曲时,lrcdis 将根据该歌曲的 ID3 标签或文件名来自动下载歌词,并以你指定的模式显示,整个过程由脚本自动完成,无需你额外操心。

lrcdis 可从 Google Code 下载。

http://code.google.com/p/lrcdis/
Mar 16

vim - 批量注释快捷键 不指定

felix021 @ 2009-3-16 11:41 [IT » 软件] 评论(1) , 引用(0) , 阅读(8839) | Via 本站原创
其实得自己做个map

$ vim ~/.vimrc
"F5 for comment
vmap <F5> :s=^\(//\)*=//=g<cr>:noh<cr>
nmap <F5> :s=^\(//\)*=//=g<cr>:noh<cr>
imap <F5> <ESC>:s=^\(//\)*=//=g<cr>:noh<cr>
"F6 for uncomment
vmap <F6> :s=^\(//\)*==g<cr>:noh<cr>
nmap <F6> :s=^\(//\)*==g<cr>:noh<cr>
imap <F6> <ESC>:s=^\(//\)*==g<cr>:noh<cr>
Mar 15
BFS @ 2009-03-14
A,搜索,没做。
B,搜索,没做。
C,计算几何,没做。
D,加密算法,Boluor没做完。
E,模拟,Sandy写的,trick是需要先判断下一个走的人是谁(B/W)。
F,表达式的计算,我之前没有看题目,但是扫了一下,觉得应该很简单,回头写一下,应该不难吧。
G,计算几何,超简单的一个等比方程解一下;trick在于两个int加起来以后会OverFlow。
H,字符串处理,数据量很小,不要Trie,用map+set搞定。
I,没看。
J,DP,Sandy推出一个方程,和他讨论了一下,就被拖到机房去,然后他写了AC了。

oak真是相当的不堪阿,sigh。

--

党员活动室确实很适合看电影,音效非常好。

--

贴上我写的代码:
Mar 13
花了n久的时间终于搞清楚了,丫丫的,真麻烦

编译:
引用
g++ -Imysql/include -Lmysql/lib -o a.out a.cpp -lmysqlclient -lz

这个mysql目录是某个mysql的源码目录,如果有安装mysql-devel可能是在/usr/ooxx/mysql,没有的话自己去down源码

#include<iostream>
#include<string>
#include<fstream>
#include"mysql.h"
using namespace std;

MYSQL * conn = NULL; //MySQL连接句柄

//读取配置
bool read_conf(string &dbhost,
               string &dbuser,
               string &dbpass,
               string &dbname){
    ifstream is("judge.conf");
    is >> dbhost >> dbuser >> dbpass >> dbname;
    return true;
}

bool query(){
    int status, state, state2;
    MYSQL_RES * res;
    MYSQL_ROW   row;
    string cmd;
    MYSQL *conn, mysql;
    string dbhost, dbuser, dbpass, dbname;
    if(read_conf(dbhost,dbuser, dbpass, dbname)){ //读取数据库
        if (mysql_init(&mysql) == NULL){
            fprintf(stderr, "初始化错误\n");
            return false;
        }
        conn = mysql_real_connect(&mysql, dbhost.c_str(), dbuser.c_str(),
                              dbpass.c_str(), dbname.c_str(), NULL,
                              "/var/run/mysqld/mysqld.sock", 0);
        if(conn == NULL){ //连接失败
            fprintf(stderr, "连接失败!\n");
            return false;
        }
    }else{ //读取配置失败
        fprintf(stderr, "读取配置失败!\n");
        return false;
    }
    cmd = "SELECT OOXX FROM OOXX";
    cout << "Command: " << cmd << endl;
    state = mysql_query(conn, cmd.c_str());
    cout << "state: " << state << endl;
    if(state != 0){//查询出错
        fprintf(stderr, "%s\n", mysql_error(conn));
        return false;
    }
    res = mysql_store_result(conn);
    cout << "affected_rows:" << conn->affected_rows << endl;
    while(row = mysql_fetch_row(res), row != NULL){
        printf("%s\n", row[0]);
    }
    return true;
}

int main(){
    query();
    return 0;
}
Mar 12
简单写一下吧:
1. 自定义一个struct t,是set里要放的东西。
2. 定义一个仿函数cmper (仿函数functor,其实就是一个重载了operator()用于比较前述struct的类)。
3. 使用这样的语句: set<struct t, cmper> a; 来定义一个包含struct t的set容器。
4. 使用则样的语句: set<struct t, cmper>::iterator ap; 来定义一个对应的迭代器。

@ 2009-03-16补充:其实重载 bool operator < 也可以,就不需要仿函数了。

具体代码如下:
#include<iostream>
#include<set>
using namespace std;

struct t{  //set里的东西
    int i;  //可以再增加其他内容,为了简单只写了一个
    t(){i = 0;}          //构造函数
    t(int _i):i(_i){}    //构造函数
    friend inline ostream & operator <<(ostream &os, const t & a){  //重定向operator <<,纯粹是为了方便输出
        return (os << a.i);
    }
};

class cmper{  //仿函数
public:
    bool operator()(const t &a, const t &b)const{ //重载operator ()
        return a.i < b.i;
    }
};

set<t, cmper> a;  //定义一个set

int main(){
    a.insert(t(3));
    a.insert(t(1));
    a.insert(t(2));
    set<t, cmper>::iterator ap; //定义一个迭代器
    for (ap = a.begin(); ap != a.end(); ap++){ //遍历
        cout << (*ap) << endl;
    }
    return 0;
}

//重载example
struct t{
    int i;
    bool operator < (const t & a)const{
        return i < a.i;
    };
};
分页: 51/103 第一页 上页 46 47 48 49 50 51 52 53 54 55 下页 最后页 [ 显示模式: 摘要 | 列表 ]