看到指责与批评时

无需内疚,也无需难过。自检,有则改之,无则勉之。

新浪的评论

不知道大家有没有这个习惯,看新浪的新闻的时候,更关注的是评论怎么写的,有的评论内容比文章的内容要精彩的多,而且还有着很多的背后消息透露出来,同时也可以看出人心所向。

但是,最近在看所有的涉及到天朝的文章的时候,会突然发现中国人都好爱国啊,最开始我还觉得是国内民众如此心团结,但是三番五次三番五次的这样,总觉得不太敢相信。这次GOOGLE事件,随便看个新闻评论,通通是支持百度而骂GOOGLE的,竟然在这种典型的恶心枪手文章下还会如此,真的让我无语了。文章我就只扫了一句话,就觉得没有再看下去的必要了,说中国的GOOGLE访问量,99%贡献给的是google.com,只有1%给的是google.cn。这不纯粹是扯淡吗?要知道在中国,如果你强制访问google.com,是不可能打开的,只会跳转到google.cn,简直把所有不懂计算机的人当玩笑来看。

于是我突然发现,估计现在每个大型的门户网站,不仅仅在内容上要极度控制,在评论上,也会专门聘请员工来解决非法评论问题,于是我们可以看到所有的评论都是如此之和谐而统一。LUCKILY, I AM IN AUSTRALIA.

几个GAE/J中的Transaction的概念

Transaction是在计算机很多领域里都需要的,最基础的知识相信大家都懂,那就是一个或一组操作,要么都成功,一旦有任何一个失败则所有的都失败,要回滚到原始位置。这个概念在GAE/J中一样。在datastore中,所有的写操作都被认为是atomic的,任何尝试着创建,更新或者删除实体的操作要么成功,要么就失败。一个操作有可能因为很多原因而失败,比如当许多用户同时尝试去修改这个值,或者该操作超过了其允许的配额值,当然也有可能是datastore的内部错误造成。在任何情况下的出错,都会使得所有操作就像没有发生一样而回滚。

实体组在GAE/J中是一个十分重要的概念。最开始的时候,我也是什么都想着往关系数据库上套,结果发现一来出现很多外键上的问题,二来出现很多包含关系的问题。个人认为,对于datastore而言,实体组是必须十分熟悉的内容。实体组之间的关系是以父子来称呼的,比如一个实体是国家,另一个实体是省份,那么显然一个国家会有很多省份而一个省份属于一个国家,于是我们可以将国家视作一个父实体,则通过每一个子实体都可以得到父实体也就是这个国家。当实体之间有了父子关系的时候,我们可以将他们视为在一个实体组中。对于一个没有父实体的实体而言,它就是一个根实体。一个实体的父实体是在该实体创建时就设定好了而不可以更改的。 处在同一个根实体下的所有实体都可以看作属于同一个实体组,被存在同一个datastore节点上。

那么实体组和Transaction的关系在哪呢?一个单一的Transaction只能对一个实体组进行操作,或者将另一个实体加入到该实体组中去。无论是查询,更新还是删除实体,如果一旦涉及到多个实体组,就会报错。同样的道理,在一个单一的Transaction中,不能涉及到多个实体有多个根节点的,因为一个根节点就等于代表了一个实体组。

如果在任何的tx.begin()和tx.commit()之间,有多个进程同时调用同样的实体组,那么JDO就会抛出JDODataStoreException或者JDOException异常,这是由java.util.ConcurrentModificationException造成的。解决的办法可以通过建立一个循环,多次进行重试来保证每个进程都能够成功。如果在一个进程之间,更新多个实体组,则会报JDOFatalUserException的异常。

Datastore的隔离级别在Transaction之外是最接近于READ_COMMITTED,在Transaction之内是SERIALIZABLE,特别指出是一种Snapshot Isolation。

我们在更新一个实体的部分值时需要使用Transaction,原因是我们在修改的同时可能也会有其他的进程在修改。另外一个需要使用的地方实在更新或者创建Key的时候,道理与上者类似,以避免多进程的同时操作。最后一个需要使用的地方是多个读操作发生的时候,为了保持数据的一致性而使用Transaction。

一个Transaction应该很快的进行,来减少发生冲突的机会从而减少重试的次数。尽可能的在Transaction之外把数据准备好,然后在Transaction内部进行执行需要保持数据一致性的操作。应该在Transaction之内来准备Key,和使用Key来获得实体。将datanucleus.appengine.autoCreateDatastoreTxns设置为false,则所有的Transaction都被禁用了。该文件的位置位于war/WEB-INF/classes/META-INF。

如果你的代码是以前根据关系数据库编写的,里面的Transaction极有可能是基于全局的,于是在GAE/J下必然会报错。一个好的解决办法是,首先禁用掉GAE/J中的所有的Transaction,然后一步步的操作来解决这个Transaction的问题。

PR Fighting 3 - Medical Exam

After a damn hot day and night, Melbourne cools down today with a feeling of autumn has come. As mentioned in PR Fighting 1, my booking of medical exam is due today. 501 Swanston street, people there is more than I expected, but a nice work flow makes the speed much faster and smoother than what I have seen in Wuhan just ten days ago. Every doctor or nurse knows well of its responsibility and the rules there, they follow the same procedure and the connection between each sections is perfect bridged by nurses.

Less than one hour, all exams are finished. The doctor who checked my body is a quite nice guy. He is also Chinese but probably from an south eastern Asia background. Talked to me a lot about his study history in Melbourne University, and the changes there. And kindly reminds me my problem of blood pressure, which will not affect any immigration however health.

Waiting for the whole results in one week, and get back to my work again for the next three and a half week.

CZ3984改用333执飞

从南航的计划来看,1月9日以后,除了10日的之外,连续的中午这班CZ3984武汉到深圳将由333执飞。原本南航的一天三趟飞深圳分别是319,320和738。武汉天河机场虽然09年跨越了千万级大关,但是其大飞机出现的次数非常少。基本上都是737各种型号和320各种型号,宽体的飞机非常少。上一次有幸碰到还是几年前的春节从北京飞回武汉的国航,坐的是757还是767还是330已经没有了印象。这次运气不错,体验下南航的宽体。

这世界上所有的暂别,如果碰到乱世,就是永别

在看龙应台的大江大浪1949,才看到第二章,有一句话印象很深刻:这世界上所有的暂别,如果碰到乱世,就是永别。那些去了台湾的人,有多少是自己觉得主动要去的,还不是看到人潮汹涌,于是觉得差不多应该是更好的选择。而那些在路途上,被遗留到大陆的人们,接下来可能就继续做村民或是难民。历史往往就是被这一丝丝的细节所改变。

于是才有了现在遍布全球的华人。如果当年他们选择的不是新加坡,三藩或是台湾,而是印尼,越南或是缅甸,那么现在生活可能就不是花园城市,经济中心或者国泰民安,而是反华,贫穷和战乱。

当年做决定的时候,谁都无法预见未来,或者说是根本无法了解自己选择的是什么,就像我们在中考的时候选择是上二中,六中还是华师一,或者高考的时候选择的是武大,华工还是北京上海的学校,或者是选择的专业是文是理是工,又或者是大四是选择研究生,出国或者是工作。在当时的状况下,绝大多数人,都看不清自己的选择到底是正确与否,他们所基于的判断的依据大部分都是井底之蛙,即使有的后来误打误撞,那也只是运气使然。于是人生,在你还没看清楚的时候,就已经初具规模了,后面只是你在那个缝里高还是低而已。

而这个世界上成功的人,往往就是那些善于选择路线的人,也许是因为真的在那个时候就明白道理,能够站在更高的角度上分析判断,当然也有凭借直觉的人,相信感觉而走的。这也就是所谓的预判能力,也就是一种区分普通人和牛人的办法。

同样在写代码的时候,不是一样的吗?等你把J2EE了解以后,才发现原来困惑在J2SE中的一些小概念是多么容易理解,当把各种Web Service使用的熟练之后,才发现之前为SOAP,WSDL花费这么多时间纯粹是在浪费。但是正是因为这些浪费,才积累了后来对事务的理解,而浪费的时间多少,就是由人的智商和运气决定的。

明天

本来是想第一次试试网络值机的,于是提前24个小时,到了QANTAS的主页,办理登机手续。没想到,QANTAS竟给我分配了一个紧急出口的位置,心中一阵窃喜。

当然,结果也就是导致了第一次的网络值机以失败告终,因为在紧急出口的位置,必须还要到机场去领登机牌,人家要看看你合适不合适。像我这种身材的看上去,应该个方面都没有问题了。于是墨尔本到悉尼的旅程,看来要成为我第一次坐紧急出口了。

接下来的一班飞香港的,预定的是最后一排的位置,白天的航程,就还是好好看书休息了。

死胡同

当解决完一个问题的时候,回头在看过程,会发现自己是多么的愚蠢。写程序,很简单的问题,如果不能直接解决,稍微绕一个弯就可以了,千万不要陷进死胡同里,小学一年级都可以解决的问题,没有必要为此去想太深太深。

麻烦各位都清醒一点

我管你是中国,是美国,是印度,是发达国家,是发展中国家,还是落后国家,不要再只想着自己的私利了,各个都尽自己的努力减排不行吗?不管是你Kyoto还是你Copenhagen,这些名字协议都是次要的,关键是要落实到行动上去。谁需要帮助,谁可以帮助,大家都主动点,现在不是开玩笑,不是再只想着自己国家的时候了。现在还只是Maldives和Tuvalu,那下面呢?Amsterdam, Shanghai, Bangladesh?或者非要等到哪天到了NY, LA, London大家才能罢手?只怕到了那天罢手也来不及了。

大家都清醒点,不要再搞笑了,OK? 胡同志,奥同志,布同志,还有我们的陆同志。

推荐Amarok

一款看上去很不错的听歌软件,目前稳定版只能在Linux下使用,有非官方的WIN和MAC版本,不过因为后者上面相关播放器太多,所以忽略。

界面很漂亮,播放效果也不错,特别是自动链接的一些东西很不错。

下载为:sudo apt-get install amarok。当然也可以使用Ubuntu的下载工具下载。

问题:如果你在安装之后,无法播放歌曲,尝试安装如下文件;
sudo apt-get install phonon-backend-xine libxine1-ffmpeg。问题应该可以迎刃而解,我使用的是Ubuntu Karmic
,amarok的版本是2.2.0

Older Entries Newer Entries