Hack Rails的事务机制
October 19th, 2008
- ActiveRecord不支持嵌套事务。
- 为了简单我们在ApplicationController里做了个filter,于是所有POST/PUT/DELETE的action都被包裹在一个事务里,事务边界是整个请求。
- 偏偏有时候你希望让某个操作中的某个部分不被包含在事务里。原因是当某些操作同时进行,你想看到的不是原子的结果,而是所有同时进行的操作汇总的最终结果
- 比如说,“审核改进措施”这个操作中包含了“重新算分”。
- 某企业有两项改进措施R1和R2,分别对应考核类别C1和C2。C1的原始分数是98,C2的原始分数是89。
- R1能给C1加回1分,R2能给C2加回11分。也就是说审核R1之后C1变成99分,审核R2后C2变成100分。
- 但,“重新算分”是在整个“审核”的事务之中的,于是如果R1和R2同时审核,你一定会看到下列两种原子结果之一:
- C1 99分,C2 89分;或者
- C1 98分,C2 100分。
- 其实这个时候我们不想让“重新算分”跟“审核”成为原子操作,我们希望把“算分”从“审核”的事务里拿出来,这样最后一次算分一定能体现最终的分数状态。
- 可以开一个 线程 或者进程(比如 Kernel.system )把算分的逻辑分出来。
- 因为可以确定“算分”不会跟“审核”发生死锁,所以把这个线程join起来。
- 一定要小心,要是算分跟审核修改到同一条数据那么就会死锁…因为审核等待算分线程结束,而算分线程等待审核交出数据锁。
- 多个算分线程之间是不会死锁滴…为了确保时序可以一上来就锁自己最后要更新的分数记录。
首选键盘而非鼠标
October 14th, 2008
(摘自 The Productive Programmer )
开发人员实质上是特殊的数据录入职员。我们输入计算机的数据不是来自外界资源,而是来自于我们的大脑。但是数据录入操作员的教训仍能使我们产生共鸣。根据他们所能输入的信息量来收费的数据录入工人知道,使用鼠标会以数量级程度降低他们的速度。开发人员可以从中学到重要的一课。
VI和Emacs都支持一个非常重要的加速器:永远不要将你的双手从字符按键上移开。即使是下移到键盘上的箭头按键都会使你慢下来,因为你必须再次回到主排键来输入字符。真正有用的编辑器会使你的手保持在最佳位置,同时进行输入和导航。
开始豆瓣,读书,蹭饭
October 5th, 2008
叶卡 粉八卦…自己开了豆瓣以后就要窥探我读什么书…貌似要监督我的样子…昨天驾车经过几年前一起吃火锅的位于熊妍妍家隔壁的地方,突然的觉得不应该辜负她的期望…于是也把 读书情况 记下来…去年这个时候在西安是能坚持每天读5万字的,最近有点手忙脚乱都顾不上几日不读书口臭了,不应该。
(某位大人说,书读得越多越扼杀想象力。然则,真善美之中大概我最喜欢的还是真实…知道什么比创造什么更要紧…关于第三次世界大战之后情景的科幻小说恐怕我是写不出咯,该位大人应该体谅我这脑子里已然装满了各种关于此题材的小说,毕竟太阳下没有新雪…)
还有 一位大人 已然到了北京好几个月我还没去蹭顿饭…这个也很不应该…那么,就行动起来吧。




