大数据量系统

这半个月一直在忙,忙着改程序,做实验,原来的系统的处理能力是10^4/10^5,我现在需要处理的数据量是10^6/10^7。原来正常的程序却出现了各种各样的异常,最明显的问题有两个,一个是OutOfMemory,一个是Connection Reset。

前一个问题有很多种不同的解决方法,就是增加机器的物理内存,调优jvm的启动参数,如果这些都解决不了问题,那就是程序本身的问题。我遇到的最多的就是BufferedReader溢出、ArrayList的不正确使用。这些问题都解决了还是会发现莫明其妙的溢出的话,还是增加物理内存吧。jvm虽然有垃圾收集机制,但是如果程序设计的初衷就没有为大数据量的数据考虑过的话,内存消耗真是件杯具而且及其不好解决在问题,特别是在code base有10^5级别的时候。

后一个问题,目前我还没有找到好的解决办法,目前能想到的,就是增加发送和接收缓存,平滑发送的速率,可是16*16的链接还是会莫明其妙的断掉。

郁闷了!还是需要再接再厉,外围的方案解决不了问题的话,只能去动核心的代码了。身边也没有有经验的人可以请教,我自己现在倒是对大数据量、巨数据量系统的可伸缩性和性能有了很强的兴趣。

58 次查看 | 2 条评论
2010年2月5日 | 归档于 Java, 技术

Firefox 3.6使用Firefox 4.0的主题

Firefox 4.0还没有出现,但是出现了一个界面的草图,很不错。你可以利用Firefox 3.6的众插件来达到相同的效果。

strata40

需要安装 Strata40 主题 以及相应的选项插件 StrataBuddy

此外,为了实现标签及地址栏上显示进度条的功能,还需安装 Fission (Firefox 3.7测试版用户需要安装此版本Fission) 以及 Tab Progress Bar 这两个插件。同时作者也建议安装 App TabsOmnibar (整合地址栏与搜索栏)、Download Statusbar (类似 Google Chrome 那样的下载状态栏) 这三个插件,仍在使用 Firefox 3.5 的小盆友建议升到 3.6,否则还要多装一个隐藏菜单栏的插件

再此外,追求完美的小朋友还可以安装这个脚本(需 Stylish 插件):Tweaks for Spewboy’s Strata 40,可以让状态栏也透明显示,并修正了一些小瑕疵。

文章摘自此处

75 次查看 | 没有评论
2010年1月29日 | 归档于 Firefox, Freeware, 软件

Apple iPad

虽然自己一直没有用过Apple的产品,但是对他的新产品发布都有关注,乔大爷北京时间今天凌晨发布了苹果定位在iPhone与MacBook之前的产品,iPad,这个名字并不出人意料之外,之前也有猜测叫做iSlate,我更倾向于这个名字。先上张图:

201012841519

外观上给人的印象真的就是一大号的iPod Touch,而且边框也太厚了吧?难道就是为了配合最下面的那个Home键么?

再说说他的配置:

  • Display: 9.7 inch IPS
  • Weight: 1.5 lbs
  • 0.5 inches thin
  • Battery life: 10 hours
  • Accelerometer and Compass
  • Speaker, Microphone, and 30 pin connector
  • WiFi 802.11n
  • Processor: 1GHz Apple A4 chip
  • Storage: 16-64GB Flash
  • Full capacative multi-touch

作为一个娱乐休闲终端,我想这个配置应该是不错的了。但是就其本身定位而言,没有加入对Flash的支持,虽然他有一个很强的Safari浏览器,可是仍然没有办法使用很多网上由Flash展现的电影、游戏。集成Flash对于苹果来说不能难做,而是不想做,做了无异于就失去了iPad内容独家提供商的地位。

苹果想通过各种各样的终端(iPod,iPhone,iPad)来分发书籍、音乐、电影、游戏和应用程序,并且不准备跟其他人一起合作,这些终端的操作系统都是iPhone OS,这种战略会成功么?也许吧,苹果本身就是一家喜欢创建新规则的公司。

74 次查看 | 没有评论
2010年1月28日 | 归档于 未分类
标签:

CentOS配置vsftpd遇到550错误的解决办法

安装vsftpd很简单:yum install vsftpd

启动vsftpd也很简单:service vsftpd start

默认情况下用root是无法连接的,你可以创建一个非root帐户登录,但是登录是可以登录,却没有办法创建或是上传文件。有人说,可以把SELinux关掉,可是这样未免也有点尺度太大了,其实是SELinux里的设置问题,只要修改相应的配置就可以了。

发现问题的方法:

# getsebool -a | grep ftp
allow_ftpd_anon_write –> off
allow_ftpd_full_access –> off
allow_ftpd_use_cifs –> off
allow_ftpd_use_nfs –> off
ftp_home_dir –> off
httpd_enable_ftp_server –> off
tftp_anon_write –> off

将红色字体部分的值改成on就可以了,设置的方法如下:

# setsebool -P ftp_home_dir 1

然后就可以上传文件,做你想做的事情了。

44 次查看 | 没有评论
2010年1月27日 | 归档于 Linux, 技术, 软件

Refactor

为什么要重构?我不知道教科书是或是别人都会怎么讲,但是重构对我来说,基本上就是把一个糟糕的设计重新写一遍。那么,什么是我定义的两糟糕的设计?又怎么样来重写,并且期望能够达到一个怎么样的目的才算是一个好的重构呢?

糟糕的设计:

  1. 因为时间紧,任务重,没有进行设计,基本上是随心所欲的写出来的代码;
  2. 充斥着“if…else…”,打了无数的补丁,新增功能的时候,就得多增加判断条件;
  3. 代码变得越来越复杂,相同的代码出现在了不同的地方,修改一处,必须时刻记着也要修改别的地方

那怎么样来重写呢?完全抛弃以前的代码么?

  1. 完全抛弃以前的代码:之前的代码写得实在是太糟糕,没有任何可取之处。而且没有办法使用一些重构工具一进行梳理。我自己没有遇到过这种情况。每一小段代码还不至于写得面目全非,这应该算是代价相对较重的一种重构方法,与其说是重构,不如说是重新写。
  2. 使用之前的代码:之前的代码,小的部分还是可以使用的,将它们独立出来,形成单独的模块,并使用一定的模块调用机制(如使用事件机制、插件系统)等,来调合各个不同的模块之间进行谐调工作。

我希望能达到一个几样的效果呢?

  1. 简单的说,我比较追求系统的可扩展性(scalability & extensibility)、可维护性、较高的系统性能。
  2. scalability是期望在一个较大的数据集前,系统也可以有一个比较好的表现;
  3. extensibility是期望系统能够容易的增减功能;
  4. 可维护性是期望系统在需要做出修改的时候,可以更加方便;
  5. 较高的系统性能,这个就不必说了,谁都希望自己的程序跑得更快。

有些时候,做重构并不是一个简单的决定,因为你要做出更多的工作,还不一定能搞出一个可用的系统来,但是,有风险的事情,做成功了会收获很大的好处,大部分时间,我还是咬咬牙会去选择重构代码。

==eof==

这篇文章也发表在AgilePHP上,快去看看,Refactor

62 次查看 | 没有评论
2010年1月24日 | 归档于 技术, 软件

Nokia 5530XM

还是要跟小6说声对不起,把你摔坏了。

现在用的是小5,最近太忙,没时间折腾,原来是打算买个HTC Magic(G2),顺便还能试试在Android平台上做开发。可是时间实在是太仓促,买水货不做够功课我是不敢去买的,于是就买了Nokia 5530 Xpress Music。

到目前为此,我只装了Opera Mini 4.0和Opera Mini 5.2 Beta 2,以及UCWeb 7.0,Fetion for N97,QQ 2008 for Nokia 5800。前面的三款软件可以顺利安装,每一款都让人爱不释手,可以根据你个人的习惯来选择一个做为你的浏览器。同时,系统本身自带的浏览器也是不错的哟。

QQ 2008,去官网下,地址是http://mobile.qq.com/2008,手机型号选Nokia 5800XM
Fetion去官网下,地址是http://www.fetion.com.cn/download/mobileclient/,手机型号选N97

下下来了,OK,机器也连上WiFi了,想上飞信跟QQ,没门!这两个软件必须用GPRS连接,具体的设置方法是:

功能→设置→程序管理→已安装的程序→飞信(QQ)→选项→套件设置→接入点(移动梦网)

同时,我们要去掉那个无用的屏幕键盘,方法是:

功能→设置→程序管理→已安装的程序→飞信(QQ)→选项→套件设→屏幕键盘(关)→其它(默认)

与小五好好相处吧。

另外,连个WiFi的情况,可以正常使用手机自带的升级功能来升级系统,我真是肉牛满面呀!之前用小6从来没成功过。

如果你发现你的手机无法新建情景模式,或是无法自定义情景模式里的选项,那你可以尝试*#7370#这个功能!提醒:该功能会把你的手机彻底重置为出厂状态,所有联系人,以及设置信息都将不在。

126 次查看 | 没有评论
2010年1月17日 | 归档于 Mobile, Nokia

Guge, Bye!

我没觉得Google要远离我的生活,我最常用的邮件客户端是Gmail(包括收其他邮箱的邮件),我的RSS阅读器是Google Reader,我搜索用Google.com,我查文章用Google Scholar,偶尔会在Google Books上查一些书的资料,我用Google Code来管理自己的一些项目,我用Google Analytics来统计我的网站的使用量,我用Google App Engine偶尔做一些小东西,还好我不需要用Google AdWords来做推广,也不用Google AdSense来做广告赚钱,写Blog也不用Google Blogger,Picasa网络相册也不常用,但是我用Picasa个管理我自己电脑上的照片,我用Google Toolbar for Firefox来增强我的浏览器的功能,我不用Google拼音输入法,但是我会装,偶尔有字用五笔一时打不出来了,可以换这个,会用Google Calendar来管理一下自己的形程。盘点完毕。

不过这些东西好像与Google.cn没有一点关系。Google.cn虽然不继续在中国发展了,我想我还能继续我的网上生活,除非哪一天上面说的那些服务都不能用了。

谷歌,这个名字从一开始我就不喜欢,没有科技公司应该有的那种给人的新潮的感觉,现在慢慢接受了,却要走了,Guge,bye!

88 次查看 | 没有评论
2010年1月15日 | 归档于 Google, 生活

换了个新主题

之前的那个主题是我拿iNove改的,也用了很长时间了。mg12设计的主题还是很合我胃口的,现在用的也是他设计的主题,有些细节等到春节放假的时候我要再改一下。
页面基本上没有加载什么图片,所以可以放上更多的小工具。

145 次查看 | 2 条评论
2010年1月9日 | 归档于 博客
标签: , ,

使用mklink或junction后Chrome无法安装扩展的解决办法

Chrome官方的扩展中心已经上线了,现在有相当多的扩展开用。之前一直不愿意放弃Firefox使用Google Chrome,有一大部分原因是因为Firefox上的一些扩展。之前我也尝试过在Chrome上安装扩展,但是每次都在“加载中”便没有反应了。今天下了功夫搜索了一下,发现所有使用过mklink或是junction,把User Profile从默认位置移出来的同学都有这个问题,而且最后把问题归结到TEMP和TMP这两个变量指向的位置上,所以我想了个办法,写了个简单的脚本,

   1: @echo off

   2: set TEMP=C:\Users\Google\Temp

   3: set TMP=C:\Users\Google\Temp

   4: C:\Users\Talent\AppData\Local\Google\Chrome\Application\chrome.exe

   5: exit

按这个思路,只要把TEMP跟TMP设置到非mklink或是junciton后的位置,再启动Chrome就可以了。

另外,确实发现了一大批好用的扩展,与Google功能集成的扩展我基本上都装了,来让他们亮个相:

image

有空我再把每一个扩展都写一下介绍和安装地址。

此法同样适用于解决无法安装主题的问题。

260 次查看 | 4 条评论
2010年1月8日 | 归档于 Google, 软件

Python and RRD

RRD是Round Robin Database的意思,RRDTool是用来管理RRD的一个工具。RRDTool主页在这里,Wikipedia的页面在这里。RRD其实就是一个时序数据库,使用一个固定大小的环型buffer,适用于存储一些统计性的信息,如CPU负载呀,气温变化呀。我为什么要说这个东西呢,因为XenServer里的性能统计是用的RRD,你可以访问诸如http://xenserver-host/rrd_updates?cf=AVERAGE&interval=5&start=123131321形式的网址来获取统计信息。XenServer将返回一个XML文件,这个XML文件其实就是用rrdtool里的export工具导出的。

好,下载完成了这个文件以后,我们假设文件名是data.xml,你可以使用rrdtool restore data.xml data.rrd的方式将数据重新恢复成rrd的格式,然后就可以使用rrdtool进行一系列操作。rrdtool的操作可以写十篇博客,这不是我今天想说的重点。

我今天想说的是,当我把rrdtool跟Python集成的时候,发现Python提供了若干封装的工具,比如Python-PyRRD,Python-rrd,Python-rrdtool,我想没几个人能搞明白这几者之间的关系吧。我来说一下。

Python-rrdtool,这个就是rrdtool的一个Python封装,调用方式与rrdtool里命令的格式是一致的。

Python-rrd,这个据说应该是rrdtool的前身,命名方式不符合Python的命名策略,所以改名成了Python-rrdtool,但是debian和ubuntu的源里还保留了一个过渡性质的傀儡包(transitional dummy package),其实就是Python-rrdtool

Python-PyRRD,这个是OO化的rrdtool封装,个人比较推荐用这个包,方便,代码也更容易让人理解。

另外,Java也提供了两个rrdtool的封装,一个是JRobin,一个是rrd4j,后者是在前者的基础上做的,提供了更好的OO的支持和性能。但是这两个项目似乎更新得很慢,XenServer导出的rrd数据(version 0003)他们现在不支持(只支持到version 0001)。所以想用Java分析XenServer的性能,还是自己去解析那个xml文件吧。