一大早又起来弄刚安装好的Ubuntu9.04,其实本来是想一直用Fedora的,可是无奈10对ATI显卡的支持真的是没得说。更新后老是无法进入xwindow,把显卡驱动卸后就没事了,可是总感觉到少了些什么。哈,好像有点扯远了,本来就是要说关于linux fetion的问题。
我在安装ubuntu时home目录是保存原来的(单独挂载到一个盘),这样似乎会导致一个问题,安装好的fetion无法启动,在命令行里启动时出现这样的错误信息:linux-fetion: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory。OH,原来是少了文件呐,就马上去新立德里搜索libcurl.so.4装上,心想现在应该没问题吧,再次双击fetion,还是无法启动,出现:Failed to execute child process "linux-fetion"(Permission denied)。这到底是什么破问题啊,以前在fedora时也没有这么多问题啊,后来试下在命令行里用超级用户权限启动,咦,发现行了,原来问题出在文件权限这里。
跑到/usr/bin目录里,把linux-fetion这个可执行文件的所属用户改变我登陆时的用户,然后再次启动,这次行了,可是什么图标都没有,看来那些配置文件也得全部改了。接着把/usr/share/libfetion这个目录的所属用户也全部改了,现在再次启动就OK了!
Linux下歌词新星
发帖者
coolzgx
时间:
5/08/2009
今天无意中在别人的博客上看到一个基于pyQt、dbus等技术的一个歌词显示工具,比起那些插件,lrcShow-X的启动方法略显麻烦,要先启动播放器,然后再在命令行里运行./lrcShow-X.py。目前其支持的播放器为:Amarok2、Audacious、Qmmp、 Exaile、Vlc和Quodlibet。其中audacious支持得最为完美。
不可否认其功能还是很强大,歌词编辑、调整和在视觉上的调整上都提供了支持。不过觉得歌词自动下载略显不足,经常得自己手动去搜,但总体来说lrcShow-X还是很不错的,值得试用。
PS:
链接:http://www.sanfanling.cn/read.php?267
下载:http://www.kde-apps.org/content/show.php?content=103055
不可否认其功能还是很强大,歌词编辑、调整和在视觉上的调整上都提供了支持。不过觉得歌词自动下载略显不足,经常得自己手动去搜,但总体来说lrcShow-X还是很不错的,值得试用。PS:
链接:http://www.sanfanling.cn/read.php?267
下载:http://www.kde-apps.org/content/show.php?content=103055
“Hello World!”的N种写法(转载)
发帖者
coolzgx
时间:
5/08/2009
在初学一门编程语言的时候,写一个“Hello world!”程序是最常见的入门方法。通过写一个成功的“Hello world!”,可以实践这门语言最基本的语法特性,还可以带给自己成就感,真是一举两得。C/C++语言本身有很多特性,如果能够将这些技术分解出来变 成一个个的“Hello world!”,并且将这些技术点到为止,貌似也算是一件善事。这里,列举了10个“Hello world!”程序,大家雅俗共赏一下。
1. 最经典的“Hello world!”
“Hello world!”最经典的写法当然是直接用 printf 输出“Hello world!”这几个字符了。无论用C还是 C++,写起来都非常的简洁明了。这里把最常见的几个全部列在下面。
#include
#include
int main()
{
printf("Hello world!"); // 教科书的写法
puts("Hello world!"); // 我最喜欢的
puts("Hello" " " "world!"); // 拼接字符串
std::cout << "Hello world!" << std::endl; // C++风格的教科书写法
return 0;
}
特别需要注意的是,在C/C++里,如果两个字符串之间除空白符以外没有任何东西,编译器会自动认为这两个字符串是连在一起的字符串。这样,如果一个字符串过长,可以用这种方法换行来写,既不浪费性能,又美观。
2. 用宏写的“Hello world!”
在C/C++里,宏是一个神奇的东西。特别是在C语言中,宏可以帮我们做一些“又脏又累”的活,包括拼接代码片断、隐藏繁琐的实现细节等等。其中特别有趣的是“#”的用法,它可以“提取”参数的名字,把它变成字符串。
#include
#define Say(sth) puts(#sth)
int main()
{
return Say(Hello world!);
}
请注意,这个Hello world可是完全没有出现引号哦!
3. 断章取义的“Hello world!”
字符串是一种常量这当然毫无疑问,但是它的类型是什么,这就需要考虑一下了。使用C++的typeid就可以这个问题的答案,而且只要是符合C或C++标 准的编译器就应该是一样的结果。比如字符串“Hello world!”,它的类型就是 char const [13]。
知道了这个,就可以写出以下的“Hello world!”:
#include
int main()
{
return puts(&"Do not say: Hello world!"[12]);
}
4. 退出时运行的“Hello world!”
大家都知道 main 函数退出意味着程序结束,可是这并不完全正确,我们完全可以在 main 函数退出以后做很多事呢——比如说,输出“Hello world!”。这个功能依赖于C标准库中提供的函数 atexit(),调用这个函数并注册自己的回调函数就行。需要注意,这个函数可以调用多次,最后注册的函数最先执行。
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=999&d=v433i2
#include
#include
void say()
{
printf("world!");
}
void sth()
{
printf("Hello ");
}
int main()
{
return atexit(say), atexit(sth);
}
5. 读取自己的“Hello world!”
C/C++的编译器提供了一些有用的内置宏,最常用的就是 __FILE__ 和 __LINE__ 了。其中,__FILE__ 代表当前的源文件的文件名,嗯,对了,如果我们让这个程序读取自己的源文件,不就可以做一个很有意思的“Hello world!”了么?
// Hello world!
#include
#include
#include
int main()
{
std::ifstream ifs(__FILE__);
std::string say, some, word;
ifs >> say >> some >> word;
std::cout << some << " " << word;
return 0;
}
6. 话分两头的“Hello world!”
有了C++的类,我们就可以光明正大的在 main 函数执行之前和之后做感兴趣的事情了。我们可以声明一个全局的类的实例,这样,在 main 函数执行之前会调用这个类的构造函数,结束之后则会调用析构函数。
#include
class say
{
public:
say()
{
std::cout << "Hell";
}
~say()
{
std::cout << "world!";
}
}hello;
int main()
{
std::cout << "o ";
return 0;
}
7. 传入模板的“Hello world!”
C++的模板功能极为强大,可以说是C++里面最艰深、最经典、最时尚的部分。一个“Hello world!”当然无法使用很多很高级的模板技巧,我也不想只使用模板特化这样无阻挂齿的小技巧,嗯,那就来演示一个比较罕见的用法吧。
#include
template
class say
{
public:
void operator () ()
{
std::cout << words;
}
};
extern char hello[] = "Hello world!";
int main()
{
return say()(), 0;
}
请注意,这个 extern 是十分必要的,只有加上了 extern,这个指针才是一个编译器间可以确定的值,也才可以参与模板运算。还有,hello 必须为数组类型,而不能为 char*,这个道理和加 extern 是一样的。
此外,这里还演示了 functor 的用法,嗯,关于它的优点就不在这里多说了,反正是与原生指针相比有很多好处就是了。
8. 调用私有函数的“Hello world!”
我们知道,C++类的私有函数是不能被外界访问的,比如说 main 函数里面,它绝对不能访问类的私有函数,除非把它设为类的友元函数。不过我们还是可以用一些比较奇怪的方法访问类的私有函数——当然,这个私有函数必须满足一个条件:它是虚函数。
这里就涉及到一个问题,指向虚函数的虚表放在哪里?对于 VS.Net 2003 而言,虚表是类的第一个成员,虚函数指针按照函数声明的顺序放在虚表里面。当然,这个说法并不严谨,更细节的东西还是去看看那本“成人高钙奶粉”吧,它会给出最权威的解答。
这里是一个很有意思的例子:
#include
#include
class secret
{
private:
virtual void say()
{
std::cout << "Hello world!";
}
};
int main()
{
secret word;
(reinterpret_cast(**(intptr_t**)(&word)))();
return 0;
}
9. 最暴力的“Hello world!”
最暴力的调用函数的方法是:直接修改函数的返回地址,让这个地址指向我们想要调用的函数。这也就是缓冲区溢出漏洞的应用方法了,不过里面还涉及到很多问 题,在这里就不一一列举,想要了解的话,还是去 Google 吧。这里只演示一个可以在 VS.Net 2003 下可以用的“Hello world!”。
#include
#include
#include
void say()
{
puts("Hello world!");
exit(0);
}
int main()
{
volatile intptr_t a = 0;
volatile intptr_t * p = &a;
*(p + 2) = (intptr_t)say;
*(p + 3) = (intptr_t)say;
return 0;
}
10. 外星人说的“Hello world!”
好了,这个“Hello world!”是最匪夷所思的一个了!不过它并没有涉及任何复杂的C/C++语言特性,只是看起来有点酷。你能看懂外星人在说什么不?
#include
void alien_say(char * p)
{
while (putchar(*(p += *(p + 1) - *p)));
}
int main()
{
return alien_say("BETHO! Altec oh liryom(a loadjudas!) dowd."), 0;
}
1. 最经典的“Hello world!”
“Hello world!”最经典的写法当然是直接用 printf 输出“Hello world!”这几个字符了。无论用C还是 C++,写起来都非常的简洁明了。这里把最常见的几个全部列在下面。
#include
#include
int main()
{
printf("Hello world!"); // 教科书的写法
puts("Hello world!"); // 我最喜欢的
puts("Hello" " " "world!"); // 拼接字符串
std::cout << "Hello world!" << std::endl; // C++风格的教科书写法
return 0;
}
特别需要注意的是,在C/C++里,如果两个字符串之间除空白符以外没有任何东西,编译器会自动认为这两个字符串是连在一起的字符串。这样,如果一个字符串过长,可以用这种方法换行来写,既不浪费性能,又美观。
2. 用宏写的“Hello world!”
在C/C++里,宏是一个神奇的东西。特别是在C语言中,宏可以帮我们做一些“又脏又累”的活,包括拼接代码片断、隐藏繁琐的实现细节等等。其中特别有趣的是“#”的用法,它可以“提取”参数的名字,把它变成字符串。
#include
#define Say(sth) puts(#sth)
int main()
{
return Say(Hello world!);
}
请注意,这个Hello world可是完全没有出现引号哦!
3. 断章取义的“Hello world!”
字符串是一种常量这当然毫无疑问,但是它的类型是什么,这就需要考虑一下了。使用C++的typeid就可以这个问题的答案,而且只要是符合C或C++标 准的编译器就应该是一样的结果。比如字符串“Hello world!”,它的类型就是 char const [13]。
知道了这个,就可以写出以下的“Hello world!”:
#include
int main()
{
return puts(&"Do not say: Hello world!"[12]);
}
4. 退出时运行的“Hello world!”
大家都知道 main 函数退出意味着程序结束,可是这并不完全正确,我们完全可以在 main 函数退出以后做很多事呢——比如说,输出“Hello world!”。这个功能依赖于C标准库中提供的函数 atexit(),调用这个函数并注册自己的回调函数就行。需要注意,这个函数可以调用多次,最后注册的函数最先执行。
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=999&d=v433i2
#include
#include
void say()
{
printf("world!");
}
void sth()
{
printf("Hello ");
}
int main()
{
return atexit(say), atexit(sth);
}
5. 读取自己的“Hello world!”
C/C++的编译器提供了一些有用的内置宏,最常用的就是 __FILE__ 和 __LINE__ 了。其中,__FILE__ 代表当前的源文件的文件名,嗯,对了,如果我们让这个程序读取自己的源文件,不就可以做一个很有意思的“Hello world!”了么?
// Hello world!
#include
#include
#include
int main()
{
std::ifstream ifs(__FILE__);
std::string say, some, word;
ifs >> say >> some >> word;
std::cout << some << " " << word;
return 0;
}
6. 话分两头的“Hello world!”
有了C++的类,我们就可以光明正大的在 main 函数执行之前和之后做感兴趣的事情了。我们可以声明一个全局的类的实例,这样,在 main 函数执行之前会调用这个类的构造函数,结束之后则会调用析构函数。
#include
class say
{
public:
say()
{
std::cout << "Hell";
}
~say()
{
std::cout << "world!";
}
}hello;
int main()
{
std::cout << "o ";
return 0;
}
7. 传入模板的“Hello world!”
C++的模板功能极为强大,可以说是C++里面最艰深、最经典、最时尚的部分。一个“Hello world!”当然无法使用很多很高级的模板技巧,我也不想只使用模板特化这样无阻挂齿的小技巧,嗯,那就来演示一个比较罕见的用法吧。
#include
template
class say
{
public:
void operator () ()
{
std::cout << words;
}
};
extern char hello[] = "Hello world!";
int main()
{
return say
}
请注意,这个 extern 是十分必要的,只有加上了 extern,这个指针才是一个编译器间可以确定的值,也才可以参与模板运算。还有,hello 必须为数组类型,而不能为 char*,这个道理和加 extern 是一样的。
此外,这里还演示了 functor 的用法,嗯,关于它的优点就不在这里多说了,反正是与原生指针相比有很多好处就是了。
8. 调用私有函数的“Hello world!”
我们知道,C++类的私有函数是不能被外界访问的,比如说 main 函数里面,它绝对不能访问类的私有函数,除非把它设为类的友元函数。不过我们还是可以用一些比较奇怪的方法访问类的私有函数——当然,这个私有函数必须满足一个条件:它是虚函数。
这里就涉及到一个问题,指向虚函数的虚表放在哪里?对于 VS.Net 2003 而言,虚表是类的第一个成员,虚函数指针按照函数声明的顺序放在虚表里面。当然,这个说法并不严谨,更细节的东西还是去看看那本“成人高钙奶粉”吧,它会给出最权威的解答。
这里是一个很有意思的例子:
#include
#include
class secret
{
private:
virtual void say()
{
std::cout << "Hello world!";
}
};
int main()
{
secret word;
(reinterpret_cast
return 0;
}
9. 最暴力的“Hello world!”
最暴力的调用函数的方法是:直接修改函数的返回地址,让这个地址指向我们想要调用的函数。这也就是缓冲区溢出漏洞的应用方法了,不过里面还涉及到很多问 题,在这里就不一一列举,想要了解的话,还是去 Google 吧。这里只演示一个可以在 VS.Net 2003 下可以用的“Hello world!”。
#include
#include
#include
void say()
{
puts("Hello world!");
exit(0);
}
int main()
{
volatile intptr_t a = 0;
volatile intptr_t * p = &a;
*(p + 2) = (intptr_t)say;
*(p + 3) = (intptr_t)say;
return 0;
}
10. 外星人说的“Hello world!”
好了,这个“Hello world!”是最匪夷所思的一个了!不过它并没有涉及任何复杂的C/C++语言特性,只是看起来有点酷。你能看懂外星人在说什么不?
#include
void alien_say(char * p)
{
while (putchar(*(p += *(p + 1) - *p)));
}
int main()
{
return alien_say("BETHO! Altec oh liryom(a loadjudas!) dowd."), 0;
}
用一句话概括四大名著
发帖者
coolzgx
时间:
5/06/2009
最点题的答案:
西游:疯狂的猴子
红楼:疯狂的石头
水浒:疯狂的好汉
三国:疯狂的战争
最时尚的答案:
西游:三藏团队的艺术化管理
红楼:败家子是怎样炼成的
水浒:兄弟连
三国:是金子总会发光的--记农村优秀青年孔明
最社会的答案:
西游:俺们天上有人
红楼:俺们朝廷有人
水浒:俺们江湖有人
三国:俺们有的是人
最批判的答案:
西游:公款旅游
红楼:公款追MM
水浒:公款吃喝
三国:为了公款旅游、公款追MM、公款吃喝而奋斗
最畅销的答案:
西游:《论旅游开发--唐朝学者记录沿途奇遇》
红楼:《论大观园开发--美女公关口述公司内幕》
水浒:《论梁山开发--108人旅游团的悲惨遭遇》
三国:《论中原开发--三大公司争夺开发权内幕》
最直接的答案:
西游:一个人和三个怪物的故事
红楼:一个男人和一群女人的故事
水浒:一群男人和三个女人的故事
三国:三个男人和战争的故事
最本质的答案:
西游:猴子被人驯服
红楼:男人被女人驯服
水浒:好汉被官府驯服
三国:和平被战争驯服
最“有戏”的答案:
西游:呔,妖怪!
红楼:嗨,妹妹!
水浒:嘿,老大!
三国:是,将军!
最实用的答案:
西游:真经的取法
红楼:爱情的谈法
水浒:牛肉的吃法
三国:战争的打法
最“影迷”的答案:
西游:动物王国历险记
红楼:趟过女人河的男人
水浒:我在黑社会的日子
三国:古惑仔之胜者为王
最“歌迷”的答案:
西游:人在旅途
红楼:你究竟有几个好妹妹
水浒:其实不想走
三国:英雄泪
最无奈的答案:
西游:神仙靠不住
红楼:亲戚靠不住
水浒:老大靠不住
三国:盟友靠不住
西游:疯狂的猴子
红楼:疯狂的石头
水浒:疯狂的好汉
三国:疯狂的战争
最时尚的答案:
西游:三藏团队的艺术化管理
红楼:败家子是怎样炼成的
水浒:兄弟连
三国:是金子总会发光的--记农村优秀青年孔明
最社会的答案:
西游:俺们天上有人
红楼:俺们朝廷有人
水浒:俺们江湖有人
三国:俺们有的是人
最批判的答案:
西游:公款旅游
红楼:公款追MM
水浒:公款吃喝
三国:为了公款旅游、公款追MM、公款吃喝而奋斗
最畅销的答案:
西游:《论旅游开发--唐朝学者记录沿途奇遇》
红楼:《论大观园开发--美女公关口述公司内幕》
水浒:《论梁山开发--108人旅游团的悲惨遭遇》
三国:《论中原开发--三大公司争夺开发权内幕》
最直接的答案:
西游:一个人和三个怪物的故事
红楼:一个男人和一群女人的故事
水浒:一群男人和三个女人的故事
三国:三个男人和战争的故事
最本质的答案:
西游:猴子被人驯服
红楼:男人被女人驯服
水浒:好汉被官府驯服
三国:和平被战争驯服
最“有戏”的答案:
西游:呔,妖怪!
红楼:嗨,妹妹!
水浒:嘿,老大!
三国:是,将军!
最实用的答案:
西游:真经的取法
红楼:爱情的谈法
水浒:牛肉的吃法
三国:战争的打法
最“影迷”的答案:
西游:动物王国历险记
红楼:趟过女人河的男人
水浒:我在黑社会的日子
三国:古惑仔之胜者为王
最“歌迷”的答案:
西游:人在旅途
红楼:你究竟有几个好妹妹
水浒:其实不想走
三国:英雄泪
最无奈的答案:
西游:神仙靠不住
红楼:亲戚靠不住
水浒:老大靠不住
三国:盟友靠不住
百度与Google
发帖者
coolzgx
时间:
4/28/2009
今天在Cnbeta上得知百度MP3搜索流量收入比例双双下降,并不意外吧,谷歌终于说服总部在中国使用了音乐搜索,很多人肯定会转向的。与百度不同,谷歌自己掏钱向巨鲸网购买了版权。
自从08年开始,百度被爆出了许多负面新闻,百度的企业形象似乎一下子跌到了谷底。也许笑的人很多,但是作为百度支持者的话,可能会一下子愣了,这真的是自己崇拜的公司的所作所为吗?
说实话,我并不排斥百度,在进入大学以前,我常用的搜索引擎是百度,基本上不碰谷歌,因为在那时候百度基本上满足了我的需求,让我找到要找的资料,让我能听想要听的歌曲。但是现在正好倒过来,搜索资料用谷歌,找歌用百度,因为慢慢地发现,用百度找比较专业性的资料,根本就没有谷歌找到的那么多,那么准确。
一直以来,我都认为百度是家很不错的公司,认为李彦宏是一个很优秀的中国人。虽说搜索方面没有谷歌那么强大,但百度基本上满足了中国很大一部分网民,百度在中文的理解上,我认为还是比谷歌好的,百度能做到今天这个地步,没有一定的能力是不可能的。
这些天开始关注网上的人对百度的看法,似乎仇视百度的比撑它的多得多,很多关于百度的帖子,基本上都是在谩骂它吧,呵呵,素质。
首先要提的是竞价排名。其实本身来说竞价排名并不是说不好,照李的看法来说,确实能提高用户体验。但这有一个前提:要保证推广信息的正确性。很多人认为竞价排名就意味着百度的搜索信息不公正,有很大一部分是人工干预。人工干预在一定程度上其实能提高用户体验,假如说竞价的企业都是些合法企业,而且推广信息刚好是搜索者要找的,这时候三方得益了。要是进行竞价的企业有一部分是虚假广告,搜索者不好运正好找到这个并信以为真,那想想被欺骗后的心情如何?肯定会把百度臭骂一顿。所以呢,百度要进行竞价排名,首先就要保证百分之九十九以上的推广信息都是合法的。可是百度在推广信息的把关上没有想像得那么好,虚假信息还是太多,而且竞价排名被百度发挥出了最大的商业利益,这不是什么好事,百度赚的钱多了,可是在网民中的形象却会大打折扣了,也许什么时候百度能像谷歌一样做到左边的搜索信息不会掺合广告,那百度才是真正意义上的中国的“谷歌”吧。
貌似民间有一种说法,百度曾经搜集过很多对Google不利的信息向政府反应,在一定程度上打击到Google,并导致它在中国在一段时期内被封,现在Google在中国提供的服务也是时断时续的,有相当一部分功能是不能够使用的。这究竟是不是真的,也许无从考证。Google在中国被封,很多人第一个想到的就是百度,毕竟它被封百度是最大的获益者。但是我不认同这种说法,因为百度没必要。假如百度真的是靠这样来起家的,我想它撑不了多久,很快就会垮台的。但是说法众多,谁也说服不了谁,事实是怎么样的,也许真的成为了历史。
网上很多站长都说自己曾经接过百度要其竞价排名的电话,拒绝后自己的网站来自百度的流量就越来越少,甚至被百度K站。至于被K站的是不是都是因为拒绝竞价排名就不知道了。但可以肯定的是有很大一部分是因为SEO过度或是被认定为垃圾信息。现在很多人搞网站,随便在别人的网站上复制一部分就成为自己网站的内容了,不相信的话你现在用Google随便搜索一些东西,看看重复率是不是很高?Google搜到的东西确实多,可是有很大一部分都是重复的,你点开很多个网页,发现竟然都是同一篇文章,呵呵,个个都说是原创的。这并不是Google的错,搜英文就不会这样,中国的互联网垃圾信息还是太多了,很多人都是Copy来复制去的。这样的话肯定被K啦,百度在这方面还是处理得还严的。还有一个,百度对一些政治敏感性的东西还是封得比较厉害的,Google相对来说比较自由,我相信那时候被封很大部分是因为这个吧,现在它也学乖了。这时候也许有人说百度就是政府的什么什么了,这很难听,你活在这片土地上,有些事还是得乖乖认了的。
很多人都说百度没创新,就会跟着谷歌跑,谷歌出什么,百度就跟着出什么。但我要说的是百度并不像他们说的那样,觉得这样说本身就不公平,百度很多东西都是谷歌没有的,就像帖吧、国学搜索等。百度很多东西做得还是很不错的,很多人说百度没创新是因为他们只挑一些片面的来说,对于它的优点却完全无视。最近百度推出的老年搜索,个人认为是很不错的,字体加大,搜索更加准确,更好的是去除了广告,保持了一片净土。但很多人对此确是冷嘲热讽,也许很多人都认定百度做的就是垃圾吧,更有人扬言说百度的这个东东他只要用DW十分钟就搞定了,百度的工程师都太逊了。我想他只是看了那个页面就放出了这话吧,很多人根本就不屑去了解这个东西。貌似很多老年人都说不错的,这时候年轻人却跑出来踩了,这不关他们事吧,呵呵。
其实无论百度,还是谷歌,都是很不错的。但是百度的一些做法,着实伤害了很多人的心。百度这几年在商业利益上的追逐,让它丢失了一部分的企业责任。李自己也承认公司管理高层的流失,让百度的管理陷入了一定的混乱当中。百度想要重新获得网民的认可,就一定要负起自己的责任,百度做到今天,社会责任是很大的。也许公司成长到一定程度,都会出现这样那样的问题吧。像华为,当年也是饱受非议的。希望百度能像华为一样,认识到自己的缺点在那里并加以改正,不怕有错,就怕知道后仍死撑着不去改,那也许就真的会在网民的视线中淡出吧。
自从08年开始,百度被爆出了许多负面新闻,百度的企业形象似乎一下子跌到了谷底。也许笑的人很多,但是作为百度支持者的话,可能会一下子愣了,这真的是自己崇拜的公司的所作所为吗?
说实话,我并不排斥百度,在进入大学以前,我常用的搜索引擎是百度,基本上不碰谷歌,因为在那时候百度基本上满足了我的需求,让我找到要找的资料,让我能听想要听的歌曲。但是现在正好倒过来,搜索资料用谷歌,找歌用百度,因为慢慢地发现,用百度找比较专业性的资料,根本就没有谷歌找到的那么多,那么准确。
一直以来,我都认为百度是家很不错的公司,认为李彦宏是一个很优秀的中国人。虽说搜索方面没有谷歌那么强大,但百度基本上满足了中国很大一部分网民,百度在中文的理解上,我认为还是比谷歌好的,百度能做到今天这个地步,没有一定的能力是不可能的。
这些天开始关注网上的人对百度的看法,似乎仇视百度的比撑它的多得多,很多关于百度的帖子,基本上都是在谩骂它吧,呵呵,素质。
首先要提的是竞价排名。其实本身来说竞价排名并不是说不好,照李的看法来说,确实能提高用户体验。但这有一个前提:要保证推广信息的正确性。很多人认为竞价排名就意味着百度的搜索信息不公正,有很大一部分是人工干预。人工干预在一定程度上其实能提高用户体验,假如说竞价的企业都是些合法企业,而且推广信息刚好是搜索者要找的,这时候三方得益了。要是进行竞价的企业有一部分是虚假广告,搜索者不好运正好找到这个并信以为真,那想想被欺骗后的心情如何?肯定会把百度臭骂一顿。所以呢,百度要进行竞价排名,首先就要保证百分之九十九以上的推广信息都是合法的。可是百度在推广信息的把关上没有想像得那么好,虚假信息还是太多,而且竞价排名被百度发挥出了最大的商业利益,这不是什么好事,百度赚的钱多了,可是在网民中的形象却会大打折扣了,也许什么时候百度能像谷歌一样做到左边的搜索信息不会掺合广告,那百度才是真正意义上的中国的“谷歌”吧。
貌似民间有一种说法,百度曾经搜集过很多对Google不利的信息向政府反应,在一定程度上打击到Google,并导致它在中国在一段时期内被封,现在Google在中国提供的服务也是时断时续的,有相当一部分功能是不能够使用的。这究竟是不是真的,也许无从考证。Google在中国被封,很多人第一个想到的就是百度,毕竟它被封百度是最大的获益者。但是我不认同这种说法,因为百度没必要。假如百度真的是靠这样来起家的,我想它撑不了多久,很快就会垮台的。但是说法众多,谁也说服不了谁,事实是怎么样的,也许真的成为了历史。
网上很多站长都说自己曾经接过百度要其竞价排名的电话,拒绝后自己的网站来自百度的流量就越来越少,甚至被百度K站。至于被K站的是不是都是因为拒绝竞价排名就不知道了。但可以肯定的是有很大一部分是因为SEO过度或是被认定为垃圾信息。现在很多人搞网站,随便在别人的网站上复制一部分就成为自己网站的内容了,不相信的话你现在用Google随便搜索一些东西,看看重复率是不是很高?Google搜到的东西确实多,可是有很大一部分都是重复的,你点开很多个网页,发现竟然都是同一篇文章,呵呵,个个都说是原创的。这并不是Google的错,搜英文就不会这样,中国的互联网垃圾信息还是太多了,很多人都是Copy来复制去的。这样的话肯定被K啦,百度在这方面还是处理得还严的。还有一个,百度对一些政治敏感性的东西还是封得比较厉害的,Google相对来说比较自由,我相信那时候被封很大部分是因为这个吧,现在它也学乖了。这时候也许有人说百度就是政府的什么什么了,这很难听,你活在这片土地上,有些事还是得乖乖认了的。
很多人都说百度没创新,就会跟着谷歌跑,谷歌出什么,百度就跟着出什么。但我要说的是百度并不像他们说的那样,觉得这样说本身就不公平,百度很多东西都是谷歌没有的,就像帖吧、国学搜索等。百度很多东西做得还是很不错的,很多人说百度没创新是因为他们只挑一些片面的来说,对于它的优点却完全无视。最近百度推出的老年搜索,个人认为是很不错的,字体加大,搜索更加准确,更好的是去除了广告,保持了一片净土。但很多人对此确是冷嘲热讽,也许很多人都认定百度做的就是垃圾吧,更有人扬言说百度的这个东东他只要用DW十分钟就搞定了,百度的工程师都太逊了。我想他只是看了那个页面就放出了这话吧,很多人根本就不屑去了解这个东西。貌似很多老年人都说不错的,这时候年轻人却跑出来踩了,这不关他们事吧,呵呵。
其实无论百度,还是谷歌,都是很不错的。但是百度的一些做法,着实伤害了很多人的心。百度这几年在商业利益上的追逐,让它丢失了一部分的企业责任。李自己也承认公司管理高层的流失,让百度的管理陷入了一定的混乱当中。百度想要重新获得网民的认可,就一定要负起自己的责任,百度做到今天,社会责任是很大的。也许公司成长到一定程度,都会出现这样那样的问题吧。像华为,当年也是饱受非议的。希望百度能像华为一样,认识到自己的缺点在那里并加以改正,不怕有错,就怕知道后仍死撑着不去改,那也许就真的会在网民的视线中淡出吧。
在VC中使用Flash来做界面
发帖者
coolzgx
时间:
4/11/2009
在VC中想搞了一个漂亮的界面比较难,但如果利用Flash的话,问题就简单得多啦,Flash可以跟VC程序实现通信,这样就可以在VC程序中截取消息并引发相应的动作了。
首先当然就是要利用MFC AppWizard建一个对话框窗口,然后在主菜单里选择“工程->添加工程->components and controls”菜单选项,这时会弹出一个components and controls gallery文件选择对话框,里面有两个文件夹,一个是registered activex controls,一个是visual c++ components。选择第一文件夹后会出现一系列系统上已注册过的activex控件。这时候要检查里面是否有shockwave flash object这个控件,没有的话就得自己去下载一个了,点击insert将它插入工程。因为在vc中插入工程的控件要通过一个类来操作,所以这时vc会提示你为这个控件指定一个类名,可以使用默认的类名就行了。插入后vc会自动把这个类加入工程里面。这时候就可以利用这个生成的类定义一个对象。插入shockwave flash object控件后,你会发现在对话框编辑器那里多出了一个图标,和使用BUTTON、EDIT等其它windows控件一样,把它拉到对话框上,让它跟刚刚定义的那个对象(是插入控件后生成的类类型)关联,不知道怎么利用VC关联的话就在AppWizard生成的对话框类中的DoDataExchange函数插入DDX_Control(pDX, ID号, 定义的对象名)。
这时候就可以使用成员函数LoadMovie和Play来导入并播放动画了,这里我们假设定义的对象名为Flash。Flashr.LoadMovie(0, strMovieUrl);该函数用来将动画导入程序中,strMovieUrl为要播放的flash路径,要用绝对路径。 Flash.Play();调用该函数开始播放动画。在初始化对话框的函数(OnInitDialog)里面加入这两个函数调用即可。这时候要记得在继承于WinApp的类的InitInstanse函数中调用AfxEnableControlContainer()这个函数,这个函数的作用是你的应用程序成为ActiveX控件包容器。假如你不加进去的话,程序就会运行不了。
假如现在你一切都搞定了,运行一下程序,你会发现Flash已经嵌入到你的程序当中了,但由于是在对话框中,现在没有办法改变它的大小,更糟糕的是,右击后竟然有Flash那个弹出菜单。
我觉得把程序设定为全屏运行是最好的,因为Flash外面有个窗框严重影响了美观,所以可以在对话框初化函数中加入以下代码:
int cx, cy;
HDC dc = ::GetDC(NULL);
cx = GetDeviceCaps(dc,HORZRES) +
GetSystemMetrics(SM_CXBORDER);
cy = GetDeviceCaps(dc,VERTRES) +
GetSystemMetrics(SM_CYBORDER);
::ReleaseDC(0,dc);
//去除标题和边框
SetWindowLong(m_hWnd, GWL_STYLE,
GetWindowLong(m_hWnd, GWL_STYLE) &
(~(WS_CAPTION | WS_BORDER)));
// 置对话框为最顶端并扩充到整个屏幕
::SetWindowPos(m_hWnd, HWND_TOPMOST,
-(GetSystemMetrics(SM_CXBORDER)+1),
-(GetSystemMetrics(SM_CYBORDER)+1),
cx+1,cy+1, SWP_NOZORDER);
再运行一下,你是不是发现已经可以全屏了,那个讨厌的窗框也不见了。问题可能又有了,你有没发现Flash并没有相应放大,天呐,怎么办,这样的话全屏有毛用啊?呵呵,不用怕,这时候就要利用ClassWizard在对话框类中重定义OnSize这个虚函数了,在里面加入 :
if(m_FlashPlayer.GetSafeHwnd())
{
m_FlashPlayer.MoveWindow(0, 0, cx, cy);
}
现在问题完美解决了,Oh No,还有一个右键问题。其实问题也不大,也就是在刚刚插入控件时生成的那个类当中截取右键消息,然后处理函数什么都不做就行了。这时要做的就是捕获WM_RBUTTONDOWN消息,再让OnRButtonDown(UINT nFlags, CPoint point)的函数体置空就行了。
至此在界面上应该没有什么问题了(漂不漂亮就要看你设计的Flash),下面介绍在flash动画和自己的程序中传递消息进行交互。
把flash嵌入自己的程序后,用户在flash动画上面操作,想知道用户进行了什么操作,就得让flash动画来告诉我们了。做过flash的人应该知 道flash的动作脚本语言:Action Script。里面有个命令叫FSCommand(command,args);我们就是要通过这个命令向外部发送消息的。这个命令有两个参数,都是字符 串,你可以在flash脚本中指定任意的字符串。比如用户按下flash动画的一个按钮就发送FSCommand("bt","bt1")这样一个消息, 按下另一个按钮发送FSCommand("bt","bt2"),而我们的程序收到FSCommand消息后就对通过两个参数的不同字符串来判断用户按下 的是哪个按钮。
原理就是这样子的,要实现的话就得在flash动画中使用FSCommand发送消息,在我们的程序接收和处理FSCommand消息了。 flash部分的就不讲了。那我们的程序如何才能接收这个消息呢?前面我们讲到,shockwave flash object插入我们的程序后就可以象一个普通的windows控件那样使用它了。要让它接收并处理这个消息当然是使用MFC的类向导进行消息映射了。做 法如下:
首先当然就是要利用MFC AppWizard建一个对话框窗口,然后在主菜单里选择“工程->添加工程->components and controls”菜单选项,这时会弹出一个components and controls gallery文件选择对话框,里面有两个文件夹,一个是registered activex controls,一个是visual c++ components。选择第一文件夹后会出现一系列系统上已注册过的activex控件。这时候要检查里面是否有shockwave flash object这个控件,没有的话就得自己去下载一个了,点击insert将它插入工程。因为在vc中插入工程的控件要通过一个类来操作,所以这时vc会提示你为这个控件指定一个类名,可以使用默认的类名就行了。插入后vc会自动把这个类加入工程里面。这时候就可以利用这个生成的类定义一个对象。插入shockwave flash object控件后,你会发现在对话框编辑器那里多出了一个图标,和使用BUTTON、EDIT等其它windows控件一样,把它拉到对话框上,让它跟刚刚定义的那个对象(是插入控件后生成的类类型)关联,不知道怎么利用VC关联的话就在AppWizard生成的对话框类中的DoDataExchange函数插入DDX_Control(pDX, ID号, 定义的对象名)。
这时候就可以使用成员函数LoadMovie和Play来导入并播放动画了,这里我们假设定义的对象名为Flash。Flashr.LoadMovie(0, strMovieUrl);该函数用来将动画导入程序中,strMovieUrl为要播放的flash路径,要用绝对路径。 Flash.Play();调用该函数开始播放动画。在初始化对话框的函数(OnInitDialog)里面加入这两个函数调用即可。这时候要记得在继承于WinApp的类的InitInstanse函数中调用AfxEnableControlContainer()这个函数,这个函数的作用是你的应用程序成为ActiveX控件包容器。假如你不加进去的话,程序就会运行不了。
假如现在你一切都搞定了,运行一下程序,你会发现Flash已经嵌入到你的程序当中了,但由于是在对话框中,现在没有办法改变它的大小,更糟糕的是,右击后竟然有Flash那个弹出菜单。
我觉得把程序设定为全屏运行是最好的,因为Flash外面有个窗框严重影响了美观,所以可以在对话框初化函数中加入以下代码:
int cx, cy;
HDC dc = ::GetDC(NULL);
cx = GetDeviceCaps(dc,HORZRES) +
GetSystemMetrics(SM_CXBORDER);
cy = GetDeviceCaps(dc,VERTRES) +
GetSystemMetrics(SM_CYBORDER);
::ReleaseDC(0,dc);
//去除标题和边框
SetWindowLong(m_hWnd, GWL_STYLE,
GetWindowLong(m_hWnd, GWL_STYLE) &
(~(WS_CAPTION | WS_BORDER)));
// 置对话框为最顶端并扩充到整个屏幕
::SetWindowPos(m_hWnd, HWND_TOPMOST,
-(GetSystemMetrics(SM_CXBORDER)+1),
-(GetSystemMetrics(SM_CYBORDER)+1),
cx+1,cy+1, SWP_NOZORDER);
再运行一下,你是不是发现已经可以全屏了,那个讨厌的窗框也不见了。问题可能又有了,你有没发现Flash并没有相应放大,天呐,怎么办,这样的话全屏有毛用啊?呵呵,不用怕,这时候就要利用ClassWizard在对话框类中重定义OnSize这个虚函数了,在里面加入 :
if(m_FlashPlayer.GetSafeHwnd())
{
m_FlashPlayer.MoveWindow(0, 0, cx, cy);
}
现在问题完美解决了,Oh No,还有一个右键问题。其实问题也不大,也就是在刚刚插入控件时生成的那个类当中截取右键消息,然后处理函数什么都不做就行了。这时要做的就是捕获WM_RBUTTONDOWN消息,再让OnRButtonDown(UINT nFlags, CPoint point)的函数体置空就行了。
至此在界面上应该没有什么问题了(漂不漂亮就要看你设计的Flash),下面介绍在flash动画和自己的程序中传递消息进行交互。
把flash嵌入自己的程序后,用户在flash动画上面操作,想知道用户进行了什么操作,就得让flash动画来告诉我们了。做过flash的人应该知 道flash的动作脚本语言:Action Script。里面有个命令叫FSCommand(command,args);我们就是要通过这个命令向外部发送消息的。这个命令有两个参数,都是字符 串,你可以在flash脚本中指定任意的字符串。比如用户按下flash动画的一个按钮就发送FSCommand("bt","bt1")这样一个消息, 按下另一个按钮发送FSCommand("bt","bt2"),而我们的程序收到FSCommand消息后就对通过两个参数的不同字符串来判断用户按下 的是哪个按钮。
原理就是这样子的,要实现的话就得在flash动画中使用FSCommand发送消息,在我们的程序接收和处理FSCommand消息了。 flash部分的就不讲了。那我们的程序如何才能接收这个消息呢?前面我们讲到,shockwave flash object插入我们的程序后就可以象一个普通的windows控件那样使用它了。要让它接收并处理这个消息当然是使用MFC的类向导进行消息映射了。做 法如下:
1、添加消息处理函数。 在主菜单中选择“查看->类向导”,在弹出的对话框中选择消息映射,在左边的列表框中选择我们刚插入程序的shockwave flash object控件id,右边选择FSCommand, 点击AddFunction,这样就添加了一个FSCommand消息处理函数了。它的形式大概是这样子的:
void CPlayFlashDlg::OnFSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args) ;函数有两个参数,就是flash的Action SCript中FSCommand语句中的两个参数。其实并不一定两个参数都用到,flash脚本中可以就使用一个参数,这样这边的函数就只要对第一个参 数进行处理就行了。
广商之“想”
发帖者
coolzgx
时间:
4/06/2009
刚刚冲完凉,似乎还在回味逝去的三天。又一次去到广商,总有那么一种淡淡的感觉,有时候看到她们一群女生在大声耍闹,我会情不自禁地无语。呵呵,但是也许这是我最看重的几个女性朋友了,因为从来没有人能给我那种感觉。
说实话,广商那里真的是比较无聊的,一整天就是在那逛校园,那天我还对友鹏说:“我们现在应该先回去冲凉吃饭,然后晚上再逛校园,不然晚上的节目就没有了!”佩如宿舍一个女的更是对佩如说:“他老是往这里跑,肯定是对你们三个其中一个有意思。”今天在回广州的车上把这句话对嘉英说了,嘉英说得更对:“其实她说错了,她应该说你老是去我们这边肯定对我们三个都有意思,哈哈。”呵呵,也许是真的。
其实最开心的是见到了很久没见面的朋友。第一次我们一起去逛图书馆,这也许是我大学以来做的最有聊的事了;第一次我们一起看电影;第一次我们一起打篮球,可我就是老是进不了球,让美玲和嘉英狂鄙视。
有点遗憾就是友鹏有事住了一晚就匆匆回南海了;嘉英忙事没跟我们一起太久;霏霏更绝了,丢下我们她们三个自己去逛衣服,还把钱当垃圾扔,你说丢下我们就算了嘛,竟然不把钱给我们反而当垃圾扔掉,像话吗?
最不好意思的就是又让之炎大出血了,明明是要坑佩如,怎么每次就都坑成之炎了,真是郁闷!
最不爽的就是美玲跟嘉英竟然没来送我,真是不给我面子,下次要乖点。
最最最要表扬的就是如姐了,又无怨无悔陪了我三天,鼓掌三十秒!
有时候在想,我们还有多少日子能够像现在一样,大家凑在一起,什么都不用想,只是简简单单在一起聊天、玩。也许不久后我们会长大,会走出这个时光,然后大家都忙着做自己的事,什么都无瑕去想,只能偶尔怀念一下大学的这个时候。觉得那次友鹏说得很对,“虽说大学朋友也很多,可是永远没有我们这些人在一起时的那种感觉”。真的,没有,那种感觉,很微妙。
这也许就是人生一段很美丽的记忆,会像对嘉英说的“我会永远记住我们一起打球”一样,也会永远记住这一段时光。
他们都说来本部后再一起过来找我,算不算约定呢,呵呵?要过来哦,大家!
说实话,广商那里真的是比较无聊的,一整天就是在那逛校园,那天我还对友鹏说:“我们现在应该先回去冲凉吃饭,然后晚上再逛校园,不然晚上的节目就没有了!”佩如宿舍一个女的更是对佩如说:“他老是往这里跑,肯定是对你们三个其中一个有意思。”今天在回广州的车上把这句话对嘉英说了,嘉英说得更对:“其实她说错了,她应该说你老是去我们这边肯定对我们三个都有意思,哈哈。”呵呵,也许是真的。
其实最开心的是见到了很久没见面的朋友。第一次我们一起去逛图书馆,这也许是我大学以来做的最有聊的事了;第一次我们一起看电影;第一次我们一起打篮球,可我就是老是进不了球,让美玲和嘉英狂鄙视。
有点遗憾就是友鹏有事住了一晚就匆匆回南海了;嘉英忙事没跟我们一起太久;霏霏更绝了,丢下我们她们三个自己去逛衣服,还把钱当垃圾扔,你说丢下我们就算了嘛,竟然不把钱给我们反而当垃圾扔掉,像话吗?
最不好意思的就是又让之炎大出血了,明明是要坑佩如,怎么每次就都坑成之炎了,真是郁闷!
最不爽的就是美玲跟嘉英竟然没来送我,真是不给我面子,下次要乖点。
最最最要表扬的就是如姐了,又无怨无悔陪了我三天,鼓掌三十秒!
有时候在想,我们还有多少日子能够像现在一样,大家凑在一起,什么都不用想,只是简简单单在一起聊天、玩。也许不久后我们会长大,会走出这个时光,然后大家都忙着做自己的事,什么都无瑕去想,只能偶尔怀念一下大学的这个时候。觉得那次友鹏说得很对,“虽说大学朋友也很多,可是永远没有我们这些人在一起时的那种感觉”。真的,没有,那种感觉,很微妙。
这也许就是人生一段很美丽的记忆,会像对嘉英说的“我会永远记住我们一起打球”一样,也会永远记住这一段时光。
他们都说来本部后再一起过来找我,算不算约定呢,呵呵?要过来哦,大家!
可视化搜索引擎Searchme
发帖者
coolzgx
时间:
4/03/2009
今天发现了一个与Google、百度之类的文字搜索引擎不同的可视化搜索引擎,叫Searchme。Searchme看起来确实相当酷,它似乎是Google和苹果iTunes服务三维滚动界面的一个混合体,更大的不同是搜索界面的不同,它不是简单地将搜索到的链接地址和简介呈现在页面上。而是将搜索结果全部以整个页面的视图形式呈现出来,在一个界面中滚动翻转,让用户直观选择。只要在搜索框内输入一个关键词,就会得到一大堆相关的页面。不过搜索视频的时候来自YouTube的视频似乎总看不了,我试了几个都没有办法播放,可能是被墙了的关系吧,最近YouTube似乎比较那个!而且由于是外国的服务器,也很慢,但最大的优点是不止酷,而且可以搜索出一些平时搜不到的东西。下面是Searchme的页面截图,有兴趣的可以点击进去看看。
订阅:
博文 (Atom)









