存档

‘学海无涯’ 分类的存档

自己写日志太慢了,刚好有人把我想说的都说了,而且说得比我好。。

2010年3月25日 mousefire 没有评论

发信人: frankwen (贡格尔), 信区: XJTUenp
标  题: [转载]不得不转的一篇:谷歌走了,Google还在
发信站: 兵马俑BBS (Wed Mar 24 20:00:49 2010), 本站(bbs.xjtu.edu.cn)

[转载]不得不转的一篇:谷歌走了,Google还在
喜欢的人请自己备份或者转载,随时都有被和谐的可能。杯具!
不得不转的一篇:谷歌走了,Google还在。

向作者李同学致敬!

原文链接:http://blog.renren.com/blog/222986084/453953174#nogo

如 果你认真看了留言,你会深深惊叹于,二十年的愚民教育,信息封锁,缔造出的是怎样
的一代奇葩。中国,你的未来在哪里呢?

公元2006年4月12日,google用谷歌这一充满争议的名字,接受政府的要 求进行自我审核,
正式以.cn域名进入中国,公元2010年3月23日,谷歌退出中国。短短4年,便寿终正寝。

有人说,没有google,地球也照转,我过的也好好的;事实上,google没有中国,活的也很
好,自绝于世界,被抛弃的不是google而是中国。对于不知墙外世界为何物的人,即使是大
中华局域网,也足够圈养他们一辈子了;其实,对于他们之中大部 分人,一个腾讯公司就
能满足他们的全部需要:qq影音、qq输入法、qq游戏、qq视频、qq拍拍、qq浏览器、
qq…..。难怪有人戏称,中国要是 全民投票选总统,最后当选的一定是马化腾,因为只要
在qq弹出窗口中提示投一票送10枚q币、或者点亮一盏灯就行了。

列举腾讯公司这些copy得很成功的软件,想说的是腾讯不仅仅有QQ,同 样,google也远不
止一个搜索引擎,google还有数量上足以匹敌的腾讯公司的优秀服务,而两者更主要的区别
是,一个”从来只模仿,从未被抓住“, 一个“不断的创新,引领人类的科技“(此话一
点也不过分);至于那个搞竞价排名、没事给CCAV送送钱的百度,从来都没法和Google相提
并论。

Picasa——腾讯相册模仿的原版,被和谐。

Gmail——在Gmail出现之前的互联网络,只存在2M大小的免费邮箱。

google文档——云服务的典范,我的资料和摘 抄都存在google文档里,随时可以编辑处理
,被和谐。

google reader—— 一出现便成为全世界最受欢迎的博客在线阅读器。看了一个啼笑皆非人
人网转载的“如何用google reader下载科学文献“的帖子,其实那只是杀鸡用牛刀的小试
,竟能让那么多人惊呼。

gtalk——美国的同志可以用它免费打电话。

google earth——我已经很难形容当年谷歌地球出现时众人的惊呼以及坐在电脑桌前拼命的
探寻地球每一个角落的情形了,难以忘记当从电脑上看到自己家屋顶时的兴 奋,其衍生带
来的很多东西已经彻底融入和改变了人们的生活,比如我可以在家足不出户透过街景漫步巴
黎的每一个角落,这是google一个改变世界的贡献。

google图书馆—又是一个受益全人类的项目,当然,除了天朝的”作协 “。很多大学课本
,你都能从中找到摘录甚至全文。

Android— 开源的手机操作系统,正在迅速占领智能机的市场,山寨机的福音。

还有Chrome浏览器以及Chrome OS、google wave、AdWords、googleApp、Buzz、google翻译
,实时搜索…此外世界最大的Blog和视频网站Youtube也属于 google公司。这还仅仅进是
用户级别的免费应用,在企业应用、搜索、翻译算法,甚至是气候变迁、全球公共卫生、环
保等议题google也有巨大的贡 献,所以,请不要单单用一个搜索引擎来理解google,没有
google不知疲倦创新,互联网的世界不会是现在这个样子。百度,真的给google提鞋 都不
配。

对于谷歌退出最关键的原因,关键词审查我 并不想多谈。只想问那些支持政府审查的同志
:关键词审查依据的是我国哪一条法律?为什么地震死难儿童的list、奥运时的三鹿奶粉事
件、06年就报道过的 山西的疫苗事件、地方上的污染、有毒食品原料…它们也属于关键词
?某某人的一句话,就可以剥夺几亿人的接受信息的权力,当官员为了个人利益将这些直接
危害你个人和下一代的真相隐瞒时,我实在想不出还有去支持这种让自己被屏蔽的理由,太
多人在用屁股而不是脑袋思考。至于刚刚抵制完绿坝却又欢送谷歌离开的 人—–我只能称
其为人格分裂。

有人说 google和美国在下很大的一盘棋,嗯,是的,他眼里到处是一盘棋,全世界都在下
棋,他的国家天天在下棋,他的领导天天在下棋,他全家都在下棋,只有他 自己才是那个
棋子儿。一个从小就认为世界到处是阴谋的 人,也必然没对自己的话负过责任,他可以把
任何现象都简简单单的归结为阴谋而不需要拿出任何凭证,他可以用阴谋来解释他不了解的
一切、并继而自以为已经了 解,他通过阴谋了解别人、了解世界。

”Don’t be evil“的google.com其实从来都在那儿,待在本来就该畅通无阻和我们零距离
的地方;而谷歌不过是一个自我阉割后的丑陋产物,所以对于谷歌的退 出也不必多么悲哀
。google.com.hk还在、google.com.tw还在——如果你不能正常的访 问,难道也是
google公司的问题吗?一个 google、wikipedia、Youtube、twitter、Facebook都不存在的
国度,会成为一个世界的大国?

※ 来源:.兵马俑BBS http://bbs.xjtu.edu.cn [FROM: 202.117.52.60]

分类: 漫谈 标签:

Qt学习笔记_Chapter1_4使用参考文档

2010年1月8日 mousefire 没有评论

  Qt的文档确实做得非常不错,虽然是英文的,不过很有条理,还有不少例子,很容易上手。再像学MFC一下,看一下到目前为止接触到类的继承树。

image

分类: Qt学习笔记 标签:

Qt学习笔记_Chapter1_3窗口部件的布局

2010年1月8日 mousefire 没有评论

  Windows7下的程序运行效果图:

image   这一节主要讲了两点:(1)如何用布局(Layout)来管理窗口中窗口部件的几何形状;(2)如何利用信号和槽来同步窗口部件。

  这个应用程序用了三个窗口部件:一个QSpinBox(微调框)、一个QSlider(滑块)和一个QWidget。其中QWidget是这个应用程序的主窗口,也是QSpinBox和QSlider的父对象,QWidget自己没有父对象。QWidget的构造函数以及它的所有子类都会带一个参数QWidget*,以用来说明谁是它们的父窗口部件。

  1. #include <QApplication>
  2. #include <QHBoxLayout>
  3. #include <QSlider>
  4. #include <QSpinBox>
  5. int main(int argc,char *argv[])
  6. {
  7.     QApplication app(argc,argv);
  8.     QWidget *windows=new QWidget;
  9.     windows->setWindowTitle("Enter Your Age");
  10.     QSpinBox *spinBox=new QSpinBox;
  11.     QSlider *slider=new QSlider(Qt::Horizontal);
  12.     spinBox->setRange(0,130);
  13.     slider->setRange(0,130);
  14.     QObject::connect(spinBox,SIGNAL(valueChanged(int)),
  15.         slider,SLOT(setValue(int)));
  16.     QObject::connect(slider,SIGNAL(valueChanged(int)),
  17.         spinBox,SLOT(setValue(int)));
  18.     spinBox->setValue(35);
  19.     QHBoxLayout *layout=new QHBoxLayout;
  20.     layout->addWidget(spinBox);
  21.     layout->addWidget(slider);
  22.     windows->setLayout(layout);
  23.     windows->show();
  24.     return app.exec();
  25. }

Line8,9:创建了Widget对象,使用setWindowTitle()函数来设置显示在窗口标题栏上的文字。

Line10,11:创建了一个QSpinBox和一个QSlider,并分别在第12行和第13行设置了它们的有效范围。本应将这个窗口传递给QSpinBox和QSlider的构造函数,以说明这两个窗口部件的父对象都是这个窗口,但在这里没有这个必要,因为布局系统将会自行得出这一结果并自动把该窗口设置为微调框和滑块的父对象。

Line14-17:调用了两次QObject::connect(),来确保能够让微调框和滑块同步,一旦有一个窗口部件的值发生了改变那么就会发射它的valueChanged(int)信号,而另一个窗口部件就会用这个新值调用它的setValue(int)值。

Line18:将微调框的值设置为35,此时QSpinBox会发射valueChanged(int)信号,其中,int参数的值为35,触发QSlider的setValue(int)槽,避免无限循环的发生,流程如下图所示:

image

Line19-22:使用了一个布局管理器对微调框和滑块进行布局处理。布局管理器(layout manager)是一个能够对其所负责窗口部件的尺寸大小的位置进行设置的对象。Qt有三个主要的布局管理器类:(1)QHBoxLayout:在水平方向上排列窗口部件,从左到右;(2)QVBoxLayout:在竖起方向上排列窗口部件,由上到下;(3)QGridLayout,把各个窗口部件排列在一个网格中。第22行的QWidget::setLayout()函数调用会在窗口上安装该布局管理器。QSpinBox和QSlider会自动“重定义父对象”,成为这个安装了布局的窗口部件的子对象。因此当创建一个需要放进某个布局中的窗口部件时,就没有必要为其显式的指定父对象了。

image

分类: Qt学习笔记 标签: ,

Qt学习笔记_Chapter1_2建立连接

2010年1月8日 mousefire 没有评论

  Windows7下程序运行效果图:

image   

  还记得MFC中,消息循环系统是每一个初学者都要费不少心思学习的东西,Qt中采用了一种完全不同的方式:信号和槽。还是从代码开始:

  1. #include <QApplication>
  2. #include <QPushButton>
  3. int main(int argc,char *argv[])
  4. {
  5.     QApplication app(argc,argv);
  6.     QPushButton *button=new QPushButton("Quit");
  7.     QObject::connect(button,SIGNAL(clicked()),
  8.         &app,SLOT(quit()));
  9.     button->show();
  10.     return app.exec();
  11. }

  这里使用了QPushButton作为应用程序的主窗口部件。

Line7,8:Qt的窗口部件通过发射信号(signal)来表明一个用户动作已经发生了或者是一个状态已经改变了。例如,当用户单击QPushButton时,该按钮就会发射一个clicked()信号。信号可以与函数(在这里称为槽,slot)相连接,以便在发射信号时,槽可以得到自动执行。这里把按钮的clicked信号和QApplication对象的quit()槽连接起来。宏SIGNAL()和SLOT()是Qt语法中的一部分。

BTW:QObject这个类是QT对象模型的核心,绝大部分的QT类都是从这个类继承而来,这个模型的中心特征就是一个叫做信号和槽的机制来实现对象间的通讯。所有的widget都是QT object,因为它们继承自QWidget,而Qwidget正是继承自QObject

分类: Qt学习笔记 标签: ,

Qt学习笔记_Chapter1_1HelloQt

2010年1月6日 mousefire 没有评论

  Windows7下程序运行效果图:

image 

  学习的每一步总是HelloWorld,Qt4.6直接推出了VS2008的Binary包,大大方便了我的学习,现在可以像写一般的MFC程序一样在VS集成环境中编写Qt程序了,Qt中的HelloWorld程序如下:

  1. #include <QApplication>
  2. #include <QLabel>
  3. int main(int argc,char *argv[])
  4. {
  5.     QApplication app(argc,argv);
  6.     QLabel *label=new QLabel("<h2><i>Hello</i> "
  7.         "<font color=red>Qt!</font></h2>");
  8.     label->show();
  9.     return app.exec();
  10. }

Line1,2:对于每个Qt类,都有一个与该类同名(且大写)的头文件,在这个头文件中包括了对该类的定义。

Line5:创建了一个Qapplication对象,用来管理整个应用程序所用到的资源。Qt支持它自己的一些命令行参数,所以这里同样有argc,argv作为参数。

Line6:创建了一个QLabel Widget,这里的Widget相当于VC中的控件,Qt十分灵活,任意窗口部件(Widget)都可以作为窗口,这里就使用了一个Qlabel作为窗口。另外可以看到,通过使用一些简单的HTML样式格式,可以轻松地把Qt应用程序的用户接口变得更为丰富多彩。

Line8:使QLabel可见,默认隐藏是为了便于我们先进行设置然后再显示它们,从而避免了窗口部件的闪烁现象。

Line9:将应用程序的控制权传递给Qt。此时,程序会进入事件循环状态,这是一种等待模式,程序会等候用户的动作,例如鼠标单击和按键等操作。

BTW:在这个程序中没有过多关注在main()函数末尾处对QLabel对象的delete操作调用。在如此短小的程序内,这样一点内存泄漏(memory leak)问题无关大局,因为在程序结束时,这部分内存是可以由操作系统重新回收的。

分类: Qt学习笔记 标签: ,

C++Primer学习笔记2_构造函数初始化式

2009年12月25日 mousefire 没有评论

  正如Lippman所说,构造函数初始化列表是许多相当有经验的C++程序员都没有掌握的一个特性。虽然在学习MFC的时候,经常看到这种形式的初始化,但是总觉得格式不漂亮,也没有深究为什么Microsoft的程序员们喜欢这样做,直到今天。且看下面这两段代码:

  1. Sales_item(const std::string &book=""):isbn(book),units_sold(0),revenue(0.0){}
  2. Sales_item(const std::string &book="")
  3. {
  4.     isbn=book;
  5.     units_sold=0;
  6.     revenue=0.0;
  7. }

  第一段代码使用了初始化式,执行构造函数时,直接执行初始化,而第二段代码中,虽然没有显式的初始化式,但是在执行构造函数之前,要初始化isbn成员,由默认的string构造函数执行,在执行构造函数的函数体时,isbn成员已经有值了。这两个构造函数虽然执行结果相同,但是不使用初始化式等于在程序执行时多了一步。这种效率上的损失还不是最糟糕的,在以下情况下,甚至必须要使用初始化列表进行初始化:

1.成员是没有默认构造函数的类

2.成员是const对象

3.成员是引用类型的对象

  要注意的另外一点是:成员初始化的次序并不是它们出现在初始化列表中的次序,而是定义成员的次序.

C++Primer学习笔记1_类作用域

2009年12月24日 mousefire 没有评论

  这一章东西很杂,也很容易混淆。

一、类作用域包括以下内容

1、类定义体

2、在类外定义的成员函数的定义(不包括返回类型)

二、类作用域中的名字查找

1.类成员的声明中用到的名字

(1)检查出现在名字使用之前的类成员的声明。

(2)如果第1步查找不成功,则检查包含类定义的作用域中出现在类定义前的声明。

2.类定义体中的成员函数的函数体中用到的名字

(1)检查成员函数局部作用域中的声明。

(2)检查对所有类成员的声明。

(3)检查在此成员函数定义之前的作用域中出现的声明。

3.定义在外部的成员函数的函数体中用到的名字

  在2的基础上,还会寻找在成员函数定义之前出现的全局作用域声明

分类: C++Primer学习笔记 标签:

VS2008环境下编译使用SGI STL(using stlport 5.2.1)

2009年12月24日 mousefire 没有评论

  stlport据说是一位俄罗斯高人之作,目的就是为了让我们在多平台下可以使用高效的SGI STL,废话少说,先介绍下它的主页:

http://sourceforge.net/projects/stlport/

  下面是下载地址,最新版本是5.2.1:

http://sourceforge.net/projects/stlport/

  下载后解压,假设目录为:D:\STLport,接下来就该编译它了:

1.在开始菜单中找到VC 命令行工具,这样可以省去很多事(网上很多教程要做很多热身运动,为啥不让M$代行呢?接下来切换到D:\STLport目录。

2.可以运行configure –help看看编译选项,用MSVC编译器编译的话,输入以下命令:

configure msvc9

3.输入

cd build/lib

4.输入

nmake clean install

稍等几分钟就可以编译好

5.在VS2008 IDE中做收尾工作:

  依次选择“工具”->“选项”,在“项目和解决方案”下选择“VC++ 目录”,把D:\STLport\bin目录添加到“可执行文件”,把D:\STLport\include目录添加到“包含文件”(注意要放在最前,这样就可以取代默认的MSVC自己的STL库了),再把D:\STLport\lib目录添加到库目录和引用文件就ok了。

分类: 学海无涯, 漫谈 标签: , ,

Windows 下C++ 学习平台的选择

2009年12月24日 mousefire 没有评论

  对于大多数人来说,计算机只是一个工具,作为一个工科大学生,我不是程序员,但也有很多用得着程序的地方,一个良好的平台,对学习无疑能起到极大的促进作用。

一、为什么选择C++

  之所以选择C++,是因为在科研方面,C++有许多已经很成熟的库,也有许多前人的工作可以借鉴,尽管其本身的学习要难些,但资料很多,遇到问题也不难在google上得到答案,而且C++程序的效率比较高。写程序的效率方面,不拘泥于C风格,适应起STL风格的编程,也还是比较高的。

二、IDE

  选定了语言,就要选具体的开发平台了,不像国外,国内还是windows当道,机子配置低的可以选择eclipse,还可以的可以选择vs2008(普通双核就很ok了,没有传说中的那么夸张),但是msvc编译器这玩意还是有很大的优化余地的,在这里选择了用SGI STL库取代其自带的库,同时试用了Intel C++编译器11.1版本。原因很简单,SGI STL的效率比自带库高得多了,Intel编译器才颇有独到之处,请看下文。

三、STL库的选择

  我借用 C++ Primer测试string和C风格字符串的一段程序作了测试,源代码如下:

#include <ctime>

#include <string>

#include <iostream>

#include <cmath>

using namespace std;

int main(int argc,char *argv[])

{

clock_t StartClock,EndClock;

const int LoopTimes=5000000;

for (int i=0;i<1000;i++)

{

    sin(5.0);

}

StartClock=clock();

//C-style code

const char *pc=”a very long literal string”;

const size_t len=strlen(pc);

for (size_t ix=0;ix!=LoopTimes;ix++)

{

    char *pc2=new char[len+1];

    strcpy(pc2,pc);

    if (strcmp(pc2,pc))

    {

        cout<<”error”<<endl;

    }

    delete [] pc2;

}

EndClock=clock();

double DurationTime1=static_cast<double>(EndClock-StartClock)/CLOCKS_PER_SEC;

StartClock=clock();

//string-style code

string str(“a very long literal string”);

for (string::size_type ix=0;ix!=LoopTimes;++ix)

{

    string str2=str;

    if (str2!=str)

    {

        cout<<”error”<<endl;

    }

}

EndClock=clock();

double DurationTime2=static_cast<double>(EndClock-StartClock)/CLOCKS_PER_SEC;

cout<<”C-style: “<<DurationTime1<<” s.”<<endl;

cout<<”String-style: “<<DurationTime2<<” s.”<<endl;

return 0;

}

测试平台:

CPU:Intel Q9550

内存:4G

系统:Windows 7 ultimate x64

测试的结果如下:

编译平台

C风格

string

Intel 11.1 x86(VS STL)

0.579

0.888

Intel 11.1 x86(SGI STL)

0.579

0.340

Intel 11.1 x64(VS STL)

0.399

0.530

Intel 11.1 x64(SGI STL)

0.422

0.073

MSVC9 x86(VS STL)

0.578

0.967

MSVC9 x86(SGI STL)

0.585

0.345

MSVC9 x64(VS STL)

0.559

0.559

MSVC9 x64(SGI STL)

0.567

0.102

MinGW with GCC4.4 x86

1.573

0.208

MSVC10 x86(VS STL)

0.521

0.554

MSVC10 x64(VS STL)

0.550

0.430

  很明显,VS STL没有达到Lipman描述的超过C风格的效率,而SGI STL则可以,测试中32位平台效率最高的是GCC4.4,这也是一个优秀的编译器,不过还是在Linux下用起来比较顺当。另外64位平台明显比32位快,对速度比较敏感的项目可以考虑迁移平台了。

四、boost库

  boost库又被称为未来的标准库,其中包括已经纳入tr1甚至即将发布的c++ 0x标准中的库,lambda表达式等新鲜东西不光适合尝鲜,也很有益于开发效率,也是我下一步将要学习的大头之一。

五、Qt

  选择它的原因很简单,相比较于MFC,它实在是好学得多了,我不是程序员,我只是想要用一个简单的界面表达我想要达到的功能,也许C#+Windows Form会更简单,但是我真的懒得再多学一门语言,也不擅长混合编程。

六、后记

  补遗一下,Visual Studio 2008下有个很好用的工具,就是大名鼎鼎的Visual Assist了,番茄很好吃,也是我偏爱这个IDE的很大原因之一,对我来说,傻瓜又好用才是王道。

  下一次该要记录的,就是这个平台的搭建了。

分类: 学海无涯, 漫谈 标签: , ,