Browsed by
Category: 杂文

随便记点什么

科学与技术

科学与技术

我在科技园上班,平时都是坐公交车,一般只注意车上电视播报的新闻和搞笑节目。今天下车的时候,注意到车上放的语音提示是:…scientific and technology park….。这让我产生了一些关于“科学与技术”的发散性联想。

平时我们说科学技术时,往往是把它们联系在一起的,没有具体的区分,似乎科学就是技术,技术也是科学,甚至直接简称为科技。前两天看到一个新闻,大意是苹果公司一高管辞职了,理由是以前太专注技术,现在要开始研究科学了。很显然,在这位高人的眼中,科学和技术是不等价的。

那么科学和技术的区别在哪里呢?以我的理解,可以简单地概括为:科学是用来回答“what”,而技术是用来实现“how”。

科学和技术确实不等价,科学的境界要高于技术(不是否认技术的重要)。境界不同,会导致视角的不同,最终的产品和成果也会高下立判。例如,Nokia 站在工程技术的角度制造手机,因此虽然它是多年手机领域的大佬,它仍然集中在回答和实现“how”上,例如如何才能不摔坏手机,如何才能保证信号清晰等工程技术问题。而Apple 呢?显然出发点不一样,它首先回答的是“人和手机的关系是什么”? “移动宽带会带来什么影响”?等等问题,这些问题如果深入研究的话,搞不好要进入社会学研究等完全不搭界的领域。

当然,Apple 也关注技术问题,例如如何制作漂亮的金属外壳等等,但是好无疑问,Apple 的手机绝对不会比Nokia 的手机更抗摔。so what?!

境界决定了最终的成果,决定了最终的方向。作产品也好,作教育也好,我们应该多关注一些科学,给与科学更多的尊重。

 

为windows环境下的mongoose作一点小修改

为windows环境下的mongoose作一点小修改

最近在产品中嵌入mongoose作web服务器,对外提供Ajax接口以及提供一个简单的web管理界面。从我们的开发和使用情况看,mongoose确实是个很不错的产品。将SSL的功能删除后,整个功能模块非常小巧,非常适合作产品的配置管理服务器。

由于我们的产品主要面向windows平台,因此我们需要花点时间对mongoose进行改动。这两天遇到一个非常奇怪的问题,mongoose发出的json流是空的,而我们调试发现送给mongoose的数据是正确的、情绪很稳定的json流。这让人很纠结。

当然这个问题最终解决了。mongoose代码中使用了BUFSIZ的宏定义,这个定义在windows中是标准库中有定义,缺省值是512。当需要发送的数据超出这个限制时,mongoose会丢弃整个包。去修改windows的标准定义显然是不合适的,因此在mongoose.c文件头,重定义后再编译即可。考虑到我们发送的数据量比较大,我们直接将它重定义为4096:

#ifdef BUFSIZ
#undef BUFSIZ
#endif
#define BUFSIZ 4096

为什么我们比日本人还恐慌?

为什么我们比日本人还恐慌?

日本发生了地震和海啸,情况确实比较惨,让人很同情。在同情之余,我同样认为这是老天对他们的报应,虽然残酷,我也不想假惺惺地装高尚。从电视介绍的情况看,日本人的国民素质让人肃然起敬,不得不说这是个强悍的民族。在这样的天灾面前,居然保持极高的镇定:没有人闯红灯、没有人哄抢、没有商店乘机疯长商品价格、大家都在排队买(或者接受)商品,甚至在广场聚会后没有留下一片垃圾!这是发生重大自然灾害后的场景吗? 没有影帝和农民艺术家飚戏,没有催人泪下地感谢XXX,有的只是紧张有序的自我救援和相互关爱。这真是个奇怪的民族!

而今天我彻底汗了!

今天老妈跑遍了各超市、菜场,居然没有买到盐!请注意,是盐!不是什么贵重稀罕的东西。传言日本福岛的辐射有影响,大家疯了似地开始囤盐了!有货的超市也乘机开始涨价,平时卖一块钱一包的盐,现在卖五块了!你还别嫌贵,爱买不买!

这让我十分恍惚,感觉就像被穿越了,到底是哪里发生地震、海啸?!这实在是耻辱!当整个国民素质开始堕落后,我们也会有自己的报应!(电视上在报道“健身猪”的事情,这真是黑色幽默,吃了瘦肉精的猪居然叫“健身猪”)

顺带鄙视一下嬉戏TV,这几天就像打了鸡血,整系列整系列地报道日本的灾情,精神很亢奋,仿佛地震海啸是发生在中国,主持人的表情都很沉痛,就像自己的亲人被灾了。而对同期发生在云南盈江的地震却少有提及,仿佛这事不曾发生过,或者不曾发生在中国。这同样让人感觉很穿越,实在是无语。

QT SDK与C4100编译告警

QT SDK与C4100编译告警

“warning C4100: … unreferenced formal parameter.”

QT SDK (VC2008)在使用qmake生成makefile文件时,缺省会打开C4100的编译告警开关。就我们的开发实践来说,C4100实在是个多余的告警,尤其是在C++程序中,我们经常定义一些虚函数等作为接口类,这些虚函数本身基本是空函数,由派生类重载出具体的实现。一旦放开C4100告警,VC编译器就看这些函数中没有引用的形参非常不爽,频频给出告警,实在是烦人。

我们可以在头文件中要求编译器忽略C4100告警:

#pragma warning( push )

#pragma warning( disable : 4100 )

void fun1(…){}

#pragma warning( pop )

这样做也有不好的一面,我们不得不修改.h文件,包括一些第三方库的头文件。另外,这似乎也破坏了跨平台的特性,和VC编译器绑定过紧(?不清楚其他编译器,例如gcc,是否也支持这种预处理指令)。

我们决定直接关掉C4100告警,修改以下文件(qt安装在d:\qt\4.6.2目录):

D:\Qt\4.6.2\mkspecs\win32-msvc2008\qmake.conf

在这个文件中,找到QMAKE_CXXFLAGS_WARN_ON,将它后面的-w34100删除掉。

然后回到自己的工程,重新用qmake生成makefile,此时再编译,就不会有C4100告警了。

中国软件开发人员的杯具

中国软件开发人员的杯具

在cnbeta上看到一篇报道,心里非常感慨。大学生只需要花149元就可以购买到正版的win7专业版和office2010专业版,居然只有不足20%的人愿意购买(可能大家觉得5块钱的盗版碟更便宜啊)。

149元应该算相当便宜了吧?149元在北京、深圳等地,估计还不够周末请客一顿饭钱。

大学生应该算未来的精英吧?如果这样一个精英团体都持这样的观念,那平常的群众也就可想而知了。

谁还愿意为这个市场开发软件?谁还能说这是个很大的市场?

原文链接:

http://www.cnbeta.com/articles/136238.htm

Amazon EC2/Ubuntu系统下搭建VPN环境

Amazon EC2/Ubuntu系统下搭建VPN环境

以下是基于Amazon EC2/Ubuntu搭建PPTPD服务提供VPN连接的过程记录。至于为什么要搞VPN,大家都懂的。。。而我主要是要访问Python的一些网站以及使用我非常喜欢的Google docs。

PPTP采用TCP 1723端口,因此在Amazon EC2的防火墙配置中,必须打开这个端口,否则client端无法接入。(网上有文章说也需要打开47端口(GRE端口),我在Amazon EC2上试验的结论是不需要特别设置。)

step1: 安装pptpd

很简单的命令:sudo apt-get install pptpd

step2: 修改pptpd的配置

有三个文件需要修改:

(1)修改/etc/pptpd.conf,添加以下内容(原文件中可能已经有这些内容,确认即可)

localip 192.168.0.1

remoteip 192.168.0.100-110

localip是指VPN建立后,client可以用这个地址访问VPN server。

remoteip就是指分配给client的地址。

(2)修改/etc/ppp/pptpd-options文件,增加以下内容:

ms-dns 8.8.8.8

ms-dns 8.8.4.4

这个配置是使用Google的DNS解析。至于原因,你也懂的。。。

(3)修改/etc/ppp/chap-secrets文件,设置客户机登录的帐号和密码:

# client server secret IP addresses

yxh * 1234 *

“client”是用户名,“server”是服务器地址,”secret”是登录密码,”IP addresses”是分配的地址,如果指定*,则由系统自动分配。

step3: 重起PPTPD服务:sudo service pptpd restart

step4:配置IP转发

修改/etc/sysctl.conf文件,打开以下的注释:

net.ipv4.ip_forward=1

step5: 重新加载IP转发配置

sudo sysctl -p

step6: 修改Iptables,设置网络地址翻译

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

上述设置在重起后悔丢失,因此需要修改 /etc/rc.local文件, 在exit 0之前添加以下语句:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

step7: 配置DDNS

Amazon EC2每次重起都会变换地址,因此我们需要配置DDNS来获取动态域名解析。在这一步之前,需要在DynDNS上申请一个免费的域名。国内类似的服务商是“花生壳”,我没有进行过测试,不知道“花生壳”是否也适合以下配置。

申请到DynDNS帐号后,下载并安装ddclient:

sudo apt-get install ddclient

安装过程中, 会有简单的界面进行配置, 设置dyndns的相关帐户即可。设置完成后, 配置信息会自动写入/etc/ddclient.conf文件。

完成上述步骤后,就可以在windows客户端拨号建立VPN连接了。

以上资料主要参考一篇国外有人的blog:http://www.dikant.de/2010/10/08/setting-up-a-vpn-server-on-amazon-ec2/

最后说一下Amazon EC2。国内有几篇很不错的翻译可以参考,不过最好的资料还是Amazon本身提供的GettingStarted文档,虽然是英文的,不过非常简单明了:http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide

Kubuntu环境下设置VPN连接

Kubuntu环境下设置VPN连接

昨天在Amazon EC2上搭建了一套PPTP-VPN环境,通过Windows建立VPN连接非常成功,但是在Kubuntu环境中,采用“网络设置”中的VPN连接,始终无法与VPN服务器建立连接。

后来发现原来有些小机关要设置,参考资料是一片英文文档:

http://vpnblog.info/ubuntu-pptp-strongvpn.html

实际上有两个地方要注意,在VPN的“高级”配置中,(1)要去掉MSCHAP认证方式;(2)同时要选择“使用MPPE加密”。

Nokia转向WindowPhone之后

Nokia转向WindowPhone之后

MeeGo的发展固然堪忧,QT的发展也固然受到影响,不过受影响最大的应该就是Intel。如果生产出手机芯片,却没有任何一个厂家支持,确实让人烦恼;不能在手机芯片市场站稳脚根,其他移动设备市场即使占有较大份额,估计对Intel也没有太大的意义。

Intel想去寻找另外一个手机大厂来支持它的芯片和MeeGo系统,估计会比较困难。与其这样,为什么不向联发科学习?提供完整解决方案给中国的山寨厂家。中国手机山寨厂家的能力还是很强的,很有可能会对Nokia/Samsong/Moto造成极大的冲击,是手机世界里另一股不可忽视的力量。

远程重起Ubuntu

远程重起Ubuntu

通过SSH2在远程登陆Ubuntu,可以使用下面的命令关闭或者重起Ubuntu:

sudo shutdown -h now 现在关机

sudo shutdown -r now 现在重起

另外,需要在路由器上放开22端口,才能通过远程访问Ubuntu。

Apache2打开SSL连接功能

Apache2打开SSL连接功能

以下操作基于Ubuntu10.10,参考随机附带的文档:/usr/share/doc/apache2/README.Debian.gz

Ubuntu确实不错,只需要简单的几个命令就可以了。

sudo a2ensite default-ssl
sudo a2enmod ssl
sudo make-ssl-cert generate-default-snakeoil --force-overwrite

执行上述操作后,apache2的配置文件变更为:/etc/apache2/sites-enabled/default-ssl

使用命令 sudo service apache2 restart 后,就可以以https方式访问apache服务器了。