Archive for September, 2007

Ruby on Rails Security Cheatsheet

Tuesday, September 25th, 2007

Ruby on Rails Security Cheatsheet
没有什么新内容,但是都是些重要的内容。
不考虑安全的开发过程就是不完整的过程。

GTD工具 VS 纸质笔记本

Sunday, September 23rd, 2007

在相当长的一段时间里面(2年多了),我都使用一个Rails开发的GTD工具Tracks开管理自己的计划、系统功能等等。。但是时间长了以后看着经常变红变黄条目再也没有紧迫感反而非常影响工作心情。。
最近几天用笔记本来列工作任务、系统功能,效果出奇的好。
1.可以快速的记录下所要做的工作,不会因为软件的操作,网络速度影响思考。
2.做完后可以用笔划去已经完成的项目。
3.可以在这张纸的不同区域写下不同重要等级和紧急程度的条目。
4.看着一张写的满满的任务会有一种强烈的紧迫感和冲动去努力工作而能够尽快的划去上面的条目。
5.看着满满一张纸上的条目一项一项的被划去感觉是非常好的。
可能对于我来说唯一的问题就是有时候写的字太潦草了,后来自己需要花时间去辨认和回忆这个条目到底写的是什么。呵呵。
对于那些可以快速完成,不需要太多分解,需要立即执行的事情来说用笔和纸张应该是比计算机工具更好的选择。。
晚上拍照效果不好,明天帖张图。

这样开发WEB应用真的没问题吗?

Sunday, September 23rd, 2007

在之前的几年我所写的C/java程序在逻辑上基本不数据库打交道,所有参数加载到共享内存,所有的数据通过输入模块从数据库或文件中读取到内存(链表或二叉树)操作完后通过输出模块写回到数据库或是文件。因为数据库是非常慢的(比起内存或是写文件操作-指和insert相比),而且数据库是不可控的,在应用中应该把不可控的东西尽量限制在有限的地方(比如仅仅是输入输出),当然这样的系统比较多的是批处理系统,当然不全是,比如鉴权或是重单检查。
这几天在写代码和检查代码的时候发现所有程序几乎都是这样的

def some_method
@result = XXX.find(:all)
end

甚至连去一个数据的几个类别都是用几个find,比如不同类型的用户,当然了这可能只是我的个人问题。
User.find_by_user_type(type_a)
User.find_by_user_type(type_b)
猛然间发现,为什么我不一次性从数据库将这些用户取出来在对结果集进行过滤呢?反正这些数据都有用到至少一遍?
我这些年的学习和工作中得来的东西竟然在WEB开发上一点都用不上,甚至根本都没意识到这个问题?
想来想去可能是因为我对web开发的理解还停留在99年用php是形成的习惯和思想上吧。
这是个问题?
其实对于web这种要求快速反应的应用真的适合这种方式吗?
对于那种每次取10条数据取3次,和一次取30条数据循环3次(也可能是1次或是4次),应该使用哪种方式去操作其实是很明显的。
那么memcache吗?在遇到真正的性能问题前,使用memcache并不一定是什么很好的事情,那不是万金油,从程序逻辑抓起可能比什么都重要。
相关阅读(以前自己写的,现在看起来怎么感觉有点…):
节约内存是一种罪恶?
呵呵。记得这个当时还上了CSDN的首页,跟一个人在回复中大干了一天,也是我接触网络这么多年,唯一一次在网上和人家进行长时间的辨论。
数据库很慢?程序很快.

918……..

Tuesday, September 18th, 2007

9.18
为了忘却的纪念

    1931年9月18日,盘踞在中国东北的日本关东军炸毁南满铁路,嫁祸于中国军队,并向驻守在沈阳北大营的中国军队发动进攻,震惊中外的“九一八”事变就此爆发,从此中国人民进入了全民抗战,抵御倭寇的水深火热的生活中。

Rails Cache + SSI 续。

Friday, September 14th, 2007

上次只是说理论,实际上按照上次的做法做完后,第一次访问的时候http server是不会解析.shtml里面的指令的,所以第一次访问生成cache文件的时候访问者看到的inc是没include进来的。(因为是在404的时候才到dispatch.fcgi的–我是lighttpd+fastcgi跑的,其他应该一样)。
在application.rb最前面(类定义上面)加上如下处理就可以了。

module ActionController
module Caching
module Pages
def cache_page(content = nil, options = {})
return unless perform_caching && caching_allowed
path = url_for(options.merge(:only_path => true, :skip_relative_url_root => true, :format => params[:format]))
[…]

linux tip: ubuntu下快速复制,粘帖。。

Thursday, September 13th, 2007

只试验过ubuntu下可用。其他系统发行版应该也可以用。(update: Sparkle Says x默认就是这样的了。。。)
在ubuntu下我最怀念的windows程序就是putty了,因为复制粘帖太方便了,选中,右键。
而putty在ubuntu下就不能这样了。自带终端也只能右键-c 右键-p (可能是我没发现更好的方法),一直以来极度郁闷。。。
今天终于发现了,非常高兴。。。
选中,鼠标中键,就是复制粘帖了。(thinkpad的那个中键也可以,,其他laptop的没有吧。呵呵)
而且这个方法可以在不同的应用中复制粘帖,比如在firefox中选中一行字,在其他应用中中键(比如vi),也是可>
以的。
这点小小的技巧对于工作效率和心情来说真是极其大的改善。

地震喽,1:54分 福州

Friday, September 7th, 2007

好强烈的震感啊。。。整个楼都在摇晃。。。门窗在山响。。不过我却不担心(感觉比以前的严重很多,担心还是有一点的)。。。
说起地震,想起初中二年级的时候,正在上英语听力课程,突然看见英语老师从坐位上跳起来,跑到门口,又突然跑回来,拔下磁带播放机的电源,提着机子往外跑。。这过程就那么几秒钟,老师一句话都没有说。。我们都呆了。。。然后有个同学叫地震啦。。。wkao,这是我有记忆以来的第一次地震。。。hehe..
后来我怎么也想不通,如果真的大地震了。拿那个收音机有什么用呢?
当然了我这并不是说老师什么什么。。其实那位老师对我非常不错。。。中考前英语单词很差,被训了一顿(呵呵。主要是对我期望比较高),后来发愤图强了。中考的时候150分的英语考了136分,记忆深刻啊。
update:现在弃用五笔改拼音了,打的是很快。不过比起五笔来错别字多了很多。。。不过拼音毕竟符合思维习惯,虽然打五笔的时候很多字已经成为条件反射了。

别让REST暴露了你的数据结构。

Tuesday, September 4th, 2007

REST在我的项目中还没用上,因为我不知道用在哪里–有什么好处(可能是理解不够),但是这并不阻止我的学习、思考。刚刚看了看rails generate scaffold_resource生成的一段代码:

def index
@medias = Media.find(:all)
respond_to do |format|
format.html # index.rhtml
format.xml { render ml => @medias.to_xml }
end
end

访问:http://localhost:3000/medias.xml的结果是XML文档,表数据和字段名(默认全部字段)。。。
这有什么问题呢?
1.系统安全,暴露表结构是很严重的问题。。。如果程序的默个地方还有sql注入之类的问题,有能看到表结构的话就更严重了。其实在new form中直接用字段名作为input的名称这也是很不好的(input名称这一点好像在一个rails的安全指南中提到过)。
2.数据安全,最简单的说如果有人想抓取网站数据的话,处理xml,yml比起解析html来说是方便太多了。
可以通过 to_xml的:only,:except 限制输出字段,详见api文档。
以前写的:浅谈B/S系统安全
ps:今天把自己写的一些常用的东西写到一个plugin里面去了,感觉相当爽,用起来方便多了。呵呵。