言不由衷的要感叹一下google的收录功能

最近自己在博客上写文章时候,无意用刚刚发布的文章的标题去google搜索,发现第一条记录就是自己刚发布的那条,很是惊讶,心想google的收录有这么快吗,我甚至将标题打乱再去搜索,都能在第一页看到我的文章、

我分析了一下,按常理对网络爬虫的理解应该是定时过来抓取的,不会一直监控我的博客,但google怎么做到的呢?

原来我发现google最近推出了一个新功能,网络历史记录,如果你的浏览器一直处于google帐户登录状态,你在右上方就能看到那个功能。

因为我发布文章后,都会去博客主页点击一下这篇文章,google就搜集到了我的网络访问历史,同时将这个访问记录提交到他的计算平台上,然后网络爬虫就过来了。

google的计算平台肯定很快,所以我能马上看到被抓取的结果。

感叹啊,这算不算google伟大的功能呢?

svn怎样目录合并

最近开发小组采用了分支开发,分支发开避免不了要合并的问题,合并的时候有这样的情况:

如果一个分支开发的时候只是在主干的某一个目录下做了修改,添加,删除文件的操作,而且这样操作到的文件比较多,合并人员这时候肯定是希望只在这个目录上来选择合并。

然而由于我们的svn服务端使用的是1.4.x的版本,svn客户端(eclipse下的subclipse)是1.6.x的,选择目录合并的时候服务端会提示:svn: Retrieval of mergeinfo unsupported by ‘xx.xx.xx.xx’

也就是说1.4.x的服务端是不支持目录合并。

这时候要升级svn服务端(升级到1.6.x),但是升级到1.6.x的后,发现还是不能目录合并。

经过分析,在升级之前,我的一个项目(project-a)源代码路径为:/abc/a/project-a,因为svn对所有目录都有版本号控制,所以升级服务端后还要对svn代码库也升级

#> svnadmin upgrade  代码库路径

升级后,终于可以合并目录了。

谁掠夺了我的Dropbox.com

我是最近才关注Dropbox.com,准确的说是昨天才在ipod上装了Dropbox客户端,满以为这下可以方便存储了,结果今天打开Dropbox客户端的时候,始终链接不上,我第一反映就是用浏览器访问Dropbox.com,结果无法链接,启动翻墙策略,能正常访问。

这他妈的还有什么好说的,借用月光博客的文字:

现在都必须面对这个现实:我们生活在一个与互联网为敌的国家,一切优秀的互联网服务在这个国家都无法正常运行,这个国家已经病入膏肓了。

我们生活在一个病态的国家。

对于mysql中出现大量SHOW FULL COLUMNS FROM问题的跟踪

最近同事反映 mysql 的slow-query.log日志中发现很多查询语句后面带有

SHOW FULL COLUMNS FROM ….

而且是一个查询语句对应很多条这样的语句。
同事让我查明原因,同时提供了一个线索,我们之前用的mysql-connector-java是3.0版本没有出现这样的情况,升级到5.0.8后才出现的。
我当时分析应该是mysql-connector-java包的问题,后来用mysql-connector-java-5.0.8单独测试查询发现不会出现SHOW FULL COLUMNS FROM …,这个线索就变得没用了。
后来查找公司自己封装的一个公共数据库链接池包中,发现查询方法返回的是CachedRowSet,同时这是调用的com.cun.rowset.CachedRowSetImpl实现类。
翻看CachedRowSetImpl实现类源码,他中间有个方法initMetaData()

...
    md.setColumnCount(numCols);
             for (int col=1; col <= numCols; col++) {
                 md.setAutoIncrement(col, rsmd.isAutoIncrement(col));
                 if(rsmd.isAutoIncrement(col))
                     updateOnInsert = true;
                 md.setCaseSensitive(col, rsmd.isCaseSensitive(col));
                 md.setCurrency(col, rsmd.isCurrency(col));
...

这个isCaseSensitive(col)就是判断字段名是否大小写敏感,这个方法就会去调用mysql-connector-java的方法执行SHOW FULL COLUMNS FROM,而且从代码中看出这个sql的执行次数与数据库表的字段数相关。
如果字段很多,这样每select一次就会查执行很多SHOW FULL COLUMNS FROM,对于大量查询的系统肯定会导致mysql性能问题。

个人有些疑问:为什么每个字段都要去查询呢?不能一次查出来吗?

临时解决办法:将md.setCaseSensitive(col, rsmd.isCaseSensitive(col)); 改为md.setCaseSensitive(col,true);

总结:尽量不要使用sun公司的内部包,本来这就是不推荐的,发现bug都不好解决。
在mysql官方社区中找到了相关问题
===============================
经过上线测试,发现mysql性能明显提升,网络传输也大大减少.

ubuntu安装的初级建议

ubuntu是一个让人又爱又恨的桌面linux系统,爱的原因是它优秀的桌面,强大的可用性,稳定的周期性开发,大众华的社区支持,等等,那些热爱ubuntu的人可以说出一大堆好处。
那可恨的是什么呢?不同的硬件环境,始终不能做到平滑升级,尽管ubuntu的团队一直在努力,但是效果都不够理想,我尝试过几个版本的升级安装,多少都出了点状况,也许那些从来没有升级失败的人要站出来反驳,我接受,世界本来就有很多我不了解的,所以我每次的结果都是从光盘安装才取得成功,试想我每次都从光盘安装,最后那张光盘到底是ubuntu爱好者的历史纪念品还是废品呢,虽然微软也是光盘发布windows,可是一张盗版的xp可以用很多年,我甚至还有大学第一次安装xp的光盘,我们是不是该低碳呢?

好了,既然每次都光盘安装,那是不是我每次都要反复安装我习惯的软件,调整适合我自己的设置呢,答案是一定的,但是可以总结经验的。

下面的建议针对个人pc

1.安排合理的分区结构

/boot       1G (系统内核和grub存放位置,实际上256M都够了,硬盘空间都那么大了何必那么吝啬)

/             这个分区20G吧,这个分区主要存放系统,和一些你自己要安装的软件

/home     剩余的空间都分到这个分区,这是你经常使用到的分区。

还有就是swap分区,2G足够了,也有推荐说是物理内存的两倍,个人pc没必要那么大,除非你经常开很多软件,经常待机,linux真正使用到swap分区的时候,它已经变得很慢了。

当然还有人喜欢把/var  , /usr , /usr/local都单独分出来,那样做也可以,我没有这样做。

有了上面的分区,把一些个性配置都放到 /home个人目录下的 .XXX文件里面(比如: .vimrc),个人使用的开发工具都安装到个人目录,这样下次光盘全新安装的时候,就不会被删除,比如我经常使用的java jdk,eclipse,xmind都是自己指定安装路径,没有通过apt来安装。

2.做一些文件备份

一个朋友将修改过的一些系统配置文件(例如/etc/profile)都备份到个人目录,下次光盘安装后,再覆盖一下就可以了,其实ubuntu在升级安装的时候会去检测这些关键的配置文件是否被改动过,它会提示你是不是要覆盖你的修改,默认是不覆盖,但个人还是建议最好让它覆盖,你自己再来覆盖它。

说ubuntu很强大是因为你没必要太多的修改他的一些桌面环境,它已经做得很好了,如果你非要看起来不一样,就hack它吧。

我们到底需要多大的存储空间

我身边很多人,说到硬盘,都会更多地关注它的容量,说到CPU都会关注他的性能,然而作为一个将计算机作为工具使用的人来说,过甚地关注这些,反而忽略了自己真正的需求。

由于这种偏离主题的认识,导致了人们消费观的盲目性,很多人换电脑仅仅是因为市场上新电脑的性能提高了很多,存储空间大了很多倍,而没去考虑,目前的电脑是否已经适合我目前的工作了,至少在一定时间内,它能满足我。

在深圳,电子市场上的推销人员最拿手的推销语言也是:酷睿XXX,串口硬盘XXX,。。。。

记得大学的时候,有个同学很喜欢大硬盘,全用来放电子书,几十个G全是资料,我相信,他几M的电子书都没认真看完过(至于那些A片要例外)。

在电子产品中,苹果无疑做得很人性,不仅仅是他的产品做得很艺术,苹果更多地关注了人真正的需求,比如他的Ipod,容量最大的才32G,其实对于普通用户,1G,2G这样的数字对他来说是很专业的,他不能和自己的需求直接联系,如果你告诉他1G至少能装200首歌曲,她才明白,苹果就是这样来推广他的产品的。

人的贪欲不能和电子产品的发展速度一样增长。

走得越快,离起点就越远。

Apache基金会被攻击,密码遭窃

首先见到这个消息是来自于朋友的网站开源中国社区,然后顺着消息的来源,找到了apache官方发言,这是一起典型的XSS跨站攻击(不清楚的同学可以google一下什么是XSS跨站攻击),整个过程apache官方描述得很清楚,最有趣的是,apache描述那家叫做http://www.slicehost.com虚拟主机的公司,

Unfortunately, SliceHost did nothing and 2 days later, the very same virtual host (slice) attacked Atlassian directly.

难道这是虚拟主机商的通病?个人在这里只是总结一下前辈们的经验。

  • 1.input is a devil (一位资深的安全专家感言)。
    特别是互联网上,对于所有来自于用户的输入,都应该先把用户想象成黑客,而不是你认为的忠实用户。
  • 2.密码的复杂度,和密码修改的策略。
    没有破解不了的密码,只是时间问题。
  • 3.计算机服务应该尽量保证独立。
    这就是虚拟机,虚拟服务等虚拟概念大行其道的原因。
  • 4.如果家里放了贵重的东西,那么出门前请锁好门,花点钱买一条好警犬,这样还不够,在家里装上监视器。
  • 5.计算机真正最大的安全问题,来自于内部(一位资深的安全专家感言)。
    这条规则虽然和本文关系不大,但是个人深有体会,黑客要花1小时,1天甚至1年才能破解的密码,内部人员却只需要几秒钟就能将它泄漏。

小贴士:推荐一款安全监控软件fail2ban

svn关键词BASE, HEAD, COMMITTED, PREV的深入理解

(@转载请注明出处:http://blog.csdn.net/cmatch)
svn关键词BASE, HEAD, COMMITTED, PREV可以很方便用于日常操作中,但是很多人对他们的工作原理和方式不是太了解。

在这里我将使用用例,诠释他们的作用和意图。

先给出svn手册中对他的解释:

“HEAD” latest in repository
“BASE” base rev of item’s working copy
“COMMITTED” last commit at or before BASE
“PREV” revision just before COMMITTED

HEAD表示在版本库中最新的版本,记住一定是版本库,而不是某个working-copy, 另外需要注意的是,这里提到版本库是指对应working-copy的那个分支或主干。

COMMITTED表示在working-copy中最近的一次提交版本。

PREV表示在working-copy中最近的倒数第二次提交版本,也就是COMMITTED – 1。

前面3个概念都是比较好理解的。

最后一个BASE有点不好理解,先给出例子,最后结论BASE的含义

1. -bash-2.05b$ svn co http://svn.corp/…/proxyio/
2. A proxylog/proxyio.procinfo
3. A proxylog/pi.cpp
4. A proxylog/Makefile
5. A proxylog/run.sh
6. Checked out revision 134057.
7.
8. -bash-2.05b$ svn st -v
9. 134057 134034 deyi.long .
10. 134057 102502 deyi.long proxyio.procinfo
11. 134057 134034 deyi.long pi.cpp
12. 134057 102674 deyi.long Makefile
13. 134057 114428 deyi.long run.sh
14. 备注:第一列表示BASE, 第二列表示COMMITTED

可以看出checkout一个working-copy后,svn会给这个working-copy分一个新的、统一的BASE版本号(如 134057)。

接下来可以修改pi.cpp代码,然后checkin,你就会发现这个文件的BASE和COMMITTED会同时增加,并且相等。如下

1. -bash-2.05b$ svn st -v
2. 134057 134034 deyi.long .
3. 134057 102502 deyi.long proxyio.procinfo
4. 134058 134058 deyi.long pi.cpp
5. 134057 102674 deyi.long Makefile
6. 134057 114428 deyi.long run.sh
7.

接下来在此目录下执行update动作,你就会发现所有文件的BASE都进行了升级,但是COMMITTED没有改变,如下

1. -bash-2.05b$ svn up
2. At revision 134058.
3.
4. -bash-2.05b$ svn st -v
5. 134058 134034 deyi.long .
6. 134058 102502 deyi.long proxyio.procinfo
7. 134058 134058 deyi.long pi.cpp
8. 134058 102674 deyi.long Makefile
9. 134058 114428 deyi.long run.sh
10.

通过上述用例,可以看出BASE表示在working-copy中每个文件基准版本,会经常变动,并且有统一working-copy的版本的意图。另外,也说明对每个文件来说,BASE就是COMMITTED的别名,但是它可以和其他文件BASE保持一致,用于统一,批量处理.

升级到ubuntu 10.04

升级过程比较简单
命令行输入:update-manager -d (不清楚update-manager的看看help)

然后升级到10.04
升级过程中会有些提示,比如提示是否替换一些配置文件,如果你之前修改过一些系统配置文件,他都会提示你是否要替换成新的。建议系统的文件都替换成新的,如果有要修改的,升级后再修改,以免升级后出现问题。
升级后没什么大问题
但是工具栏中firefox找不到图片,这个倒是好处理,重新添加一个。

然后就是修改一下语言环境,默认是中文,我喜欢英文
ubuntu的语言环境和一般的linux系统有点不一样

$ sodu vi /etc/default/locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

Centos是

$ vi /etc/sysconfig/i18n
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

当然了,所有linux系统都可以在/etc/profile中修改
===============================================
经过今天的使用,升级10.04的最新包,结果不能启动了,后来恢复到9.10,建议大家不要在工作系统中使用最新版本的ubuntu。

长跑结束了,他们终于把婚结了。

本来在打算回复到QQ空间的,结果发现QQ出问题了,不能发评论。

我看完你们所有的结婚照,最终选择这一张照片来发评论,因为这一张岳江有点“无间道”的感觉。

岳江:男,四川蓬溪人,身高,体瘦,大有孔先生(孔乙己)遗风,无不良嗜好,爱祖国,爱人民,但始终没有爱上这个病态的社会,年少无志,但活得有血有肉。
张琴:女,四川南充人,天真善良,聪明贤惠。

尽管高中那一年很短暂,但是我觉得那是我人生中最幸福的时光,因为在那里我认识了你们,认识了很多对我影响很深的人,我想你们的感受应该和我一样,因为在那里至少还收获了爱情。

虽然你们结婚的时候,我甚至都不知道,我想这是我很希望参加的一个婚礼,去祝福你们,去祝福那段我们在一起的日子。
你们会永远幸福,我们大家都会幸福!

Page 2 of 3«123»