Uncategorized

Rails的模板语言 haml

Haml is a markup language that’s used to cleanly and simply describe the HTML of any web document without the use of inline code. Haml functions as a replacement for inline page templating systems such as PHP, ASP, and ERB, the templating language used in most Ruby on Rails applications. However, Haml avoids the need [...]


FastCGI是什么?

FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等等。
FastCGI的官方站点在http://www.fastcgi.com
  FastCGI的工作原理是:
  1、Web Server 启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module);
  2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。
  3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。
  4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在WebServer中)的下一个连接。 在正常的CGI模式中,php-cgi.exe在此便退出了。
  在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。


可以让你少奋斗10年的工作经验

可以让你少奋斗10年的工作经验
第一:不要认为停留在心灵的舒适区域内是可以原谅的。
  
  每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰,不愿意被push,不愿意和陌生的面孔交谈,不愿意被人指责,不愿意按照规定的时限做事,不愿意主动的去关心别人,不愿意去思考别人还有什么没有想到。这在学生时代是很容易被理解的,有时候这样的同学还跟“冷酷”“个性”这些字眼沾边,算作是褒义。然而相反,在工作之后,你要极力改变这一现状。否则,你会很快变成鸡尾酒会上唯一没有人理睬的对象,或是很快因为压力而内分泌失调。但是,如果你能很快打破之前学生期所处的舒适区域,比别人更快的处理好业务、人际、舆论之间的关系,那就能很快的脱颖而出。
  
  在会议上,一个停留在心灵舒适区域的人会消极的听取领导的话语,消极的待命,很死的完成上级交给的事情,但从来不关心此事以外的任何事情,更不会想到多做一步,让接下来的别人的工作更加容易上手。而敢于打破这个舒适区域的人,敢于在适当的时候提出自己的看法和不理解,并在得到上级认可和指点之后把手头的工作尽快的完成,并随时接受别人的批评和调整。(注意:永远不要等待别人把你的想法说出来,这是典型的前者)
  在工作上,当前者遇到一名新的同事,他会装作没有看见,继续自己的工作。殊不知新来的同事不久就变成了自己的上司。而后者则大方客气的自我介绍,并了解对方和自己的关系。
  
  在聚会上,前者总是等待别人发言,并喜欢私下里评论对方的言语;如果这个桌子上没有人发言,那直到用餐结束,也没有人认识你。而后者是勇敢的和一同吃饭的开始介绍和闲谈,这看起来很困难,有时候会有失面子,但往往你会发现,对方是多么希望能和你说几句话。
  
  以上只是很小的几个例子,但是要说明的是,大学生在走出校园的同时就要在工作上把校园中的“随意性”从身边赶走,尽早的冲出自己的舒适区域,开始做好和这个社会交流的准备。
  
  
  
  第二:不要把“好像”;“有人会……”;“大概”;“晚些时候”;“或者”;“说不定”之类放在嘴边。尤其是和上级谈论工作的时候。
  
  我十分痛恨听到的一句话是:“我晚些时候会把这个文件发给所有的人”;因为这往往预示着我必须时刻提醒他不要忘记。同样,以下这些言辞也会让人觉得厌恶至极:
  “到时候有人会把那些东西都准备好”
  “大概是明天”
  “明天或者后天客户会过来拜访”
  “好像他说……”
  
  一般是人都会这样说话的,因为这样第一给自己留下了广阔的余地,第二也不会给别人造成很大的压迫感,好像什么事情一定要弄个水落石出似的。说实话大学里面再用功的人都有一半是混的。一个人要么是在课堂上是混的,要么下课之后是混的。两个都没有带有混的色彩的人,要么是超级牛人,要么是神经病。所以,就因为人人都在混的,所以校园是一个浪漫的地方,校园也容易让人单纯。所以学生社团的工作往往是效率很低的,我现在
  
  回想起学校里做的工作,当时还觉得挺卖力的,但工作了之后才开始感觉到什么是效率。
  
  当你进入了用金钱计算时间的地方之后,你要尽可能的避免在学校里养成的这种习惯。如果上级问你什么时候能实施你给他的承诺,而你回答“今晚或者明天早上”这样的答案对于他来说完全等同于你没有回答,并且还给他留下了一个坏印象。(当然,这样的回答往往在学校社团,学生会工作中是常见的)
  
  有一个寓言故事,一只小老鼠刚刚出世不久,老鼠妈妈问小老鼠:你现在能看见了吗? 小老鼠说:能。 老鼠妈妈说:那你能看到那块红薯吗? 小老鼠说:是的。老鼠妈妈说:那是一块石头,这说明你不但还看不见东西,你连嗅觉都还没有。
  
  似是而非的应答往往一样会暴露出你更多的弱点。可能是以下中的一个或几个:
  1.你之前没有想到这个工作,或者一直在拖延。
  2.你没有责任心,认为这些并不重要。
  3.你应付上级。
  4.你不敢说真话。
  5.你喜欢逞能,答应一些做不到的事情。
  6.你不能独立工作。
  当你的上级在以上选项中怀疑的时候,潜意识中你已经同时具备了以上所有的弱点了。
  
  
  
  相反的看来,这样的回答,总是让上司恼火。
  第一,他的问题没有得到回答,只是起到了提醒你的作用。
  第二,他依然需要记住提醒你,因为他不知道你是否真正已经落实了工作。
  第三,他不知道有多少你已经做了的事情中,都是这样没有落实的。(这点非常致命)    
  第四,往往因为没有得到满意的答案,上司自己的计划不得不被耽搁或推迟或不能给出明朗的结束时间。
  
  所以———
  甲问:你什么时候能把要这个漏洞修好?
  乙说:我已经通知他们了,他们大概明天就会来修的。
  一天后
  甲问:维修公司什么时候回来,你找的是哪家维修公司?
  乙说:好像他们说安排不出人来,如果可以的话,今天晚上或者明天下午就能过来。
  一天后
  甲问:漏洞怎么还没有修好?
  乙说:我晚点再问问他们。
  甲说:今天下午之前不解决,明天不用来上班了。
  
  
  第三:不要拖延工作
  
  很多人喜欢在学习和玩耍之间先选择后者,然后在最后时间一次性赶工把考试要复习的东西突击完成。但是在工作中请不要养成这样的习惯,因为工作是永远做不完的,容不得你“突击”。又或者,当你在徘徊和彷徨如何实施的时候,你的领导已经看不下去,自己去做了。—-这是一个危险的信号。
  
  往往我们总是想把事情从头到尾全部想好了,才开始走第一步—–就摔倒了。
  
  举个例子: 我小学的时候第一次给我一个喜欢的女孩子打电话的时候,想象了各种情况——-1,她接电话的时候在做作业。2,她在做作业,她妈妈接的电话。3.她也很无聊,很想找人说话。4.她正在被父母训斥。 5.她正在想另外一个男孩。6.她父亲接电话。 7.她家正好来了什么亲戚,亲戚接了电话。 8.她接了电话,但父母就在身边,说话不方便。。。。。等等等等。我整整想了一个下午,想好了各种情况的心理准备和应对的策略。然后勇敢的拿起电话机,按下了那几个按钮。结果——-她不在家。
  
  所以,当你徘徊不前而手足无措的时候,你要意识到你正在拖延工作。徘徊是因为害怕这个事情可能发生的后果需要自己承担或应付。工作的时候需要一种起码的自信,相信自己有能力,不管下一步是什么状况,我都能把它引导到我需要的那条线上去的。另外,告诉自己,不要想太多时间,如果不知道,就赶快求助,或想办法,苦恼和忧虑会给你更多的压力也会把剩下的时间蚕食殆尽。
  
  另外,警告一下:永远不要想,我知道了,先把上级派的事情放一下,等这集《越狱》看完再说。—-90%的情况下,你会忘记,或者来不及,因为这件事需要比你原先想象要更多的时间。说做就做,一直是很好的习惯。
  
  第四:不要认为理论上可以实施就大功告成了!
  
  这点太重要了,往往当真正实施的人开始做了才会发现计划完全等于鬼话。如果不亲自实践,做计划的人会早晚被实施的鄙视。永远需要提升自己的办实事的能力,而不是空谈。
  
  首先,如果你是做办公室工作的,或者做策划和计划的。请千万不要把你自己都认为不太可能或者很难做到的事情,让别人试试看。比如,用一个下午的时间在人流量很少的地方举办露天歌唱会。这会让执行的人觉得你在玩他,拿他做实验。没错,理论上,在任何地方都能举办歌唱会,但是,在不同的地方,执行的人的心情是不一样的。
  
  其次,和执行的人讨论你的安排。比如,新来的你的下属,你可以安排她坐在任何地方,但是如果那是一个很难和大家接触的角落,这可能比你什么都不安排更差。的确,理论上一个人要坐下来,需要的只是空间。但事实上远远不止那些。
  
  再次,不要奢望一切会随着你的计划进行。理论上这个会议会持续两个小时,但是,这是“不考虑在开场后的30分钟全场都在调试话筒”,或者“场下没有提出如此尖锐的问题”的前提下的状态。 大学生已经习惯了把事情做到 “理论上看上去很美”的程度了。 论文,ppt讲演,考试,辩论赛…… 这些校园智商大比拼,都是教我们如何完美的做好“纸上谈兵”的功夫。 你一定要相信自己能“搞定”事情的能力比想象的弱。
  
  如果你是在学校的学生,测试一下自己,能否能搞定以下这些状况:
  1.学校要制作一套校服,由你去寻找供应商,砍价,至少有三家公司的报价。
  2.学校保安抓住一个学生偷窃,怎么处理?
  3.学校的一个很重要路段的路灯坏了,你能否让它三天内继续亮起来。
  4.食堂需要请一位专门烧清真菜的厨师,一周内到岗位。
  
  当你开始思考以上这样的问题的时候,你会发现,你的思路和“看过去两年这个公司的业绩趋向,做出一个下个季度的市场策划方案”要相差极大。你会发现后者只要你做到“看上去很完美”,没有人知道按照你这样做结果会怎样。而上述的工作你只要一想,就会体会到不少的压力。因为你不处理好,结果就是明显的失败更大的问题就会相继发生。
  对了,这种感觉就是“工作”给你的感觉!这就是“工作”和“纸上谈兵”的差别!
   
  第五:不要让别人等你
  
  在任何情况下都不要让别人放下手头的工作来等你。在大学中可能只是同寝室的人的几句半开玩笑的抱怨,在工作上很可能导致你的潜在合作伙伴的丢失。
  你在做一个工作的同时要知道别人的进度,而永远不要落后。这不像是在考试,你比别人做的慢,别人可以先交卷,你到时间了做不完你自己承受扣分。在工作中的情况是这样的:这是一场没有人能做完的考试,所有的人,都分配做一张试卷的不同部分,有的人分到的是阅读理解,有的人做的是完形填空,有的人做的是语法…… 然后大家做完了相互抄,这样,所有人都做完了。 如果大家都把各自的部分做完了,而你却还在没有做完,那么做得快的别人会开始做你的那部分题目,然后也是相互抄。慢慢地,大家会发现你的工作量完全可以由另外人来代替,整个团队中可以不需要你,这个时候,没有人从你这里得到试卷的答案,也没有人会给你他们的答案——–很不幸,你已经没有利用价值了。
  
  请一定记住这个例子。
   
  
  第六:不要认为细节不重要
  
  在大学里,往往做事粗枝大叶,看看差不多就行了。相反,在企业里管理的精髓就在于将简单的事情做到细节。一个慌忙寻找保险箱钥匙的动作就很有可能丧失你晋升财务主管的机会。
  
  公司的管理,其实需要的并不是把很难的事情做到90%—-比如,优化管理层的核心工作流程、改变公司在当地政府面前的形象,提高产品质量,改善工作环境…… 而管理要做的是把每个简单的事情做到100%—–比如,把公司的每个人的档案都按照一定的规律整齐的存放起来、在门卫设立一个外来人员的签到台、把会议室多余的椅子拿走、和电视台讲好下个礼拜三来公司做采访、把试用装送到客户手里、在生产的咖啡上加一个口子、给下一期的封面人物拍照……等等如此。 如果你能把所有细节的问题都如实做到,那你才有开口升职的本钱。
  很多人在毕业的时候不知道自己将来要做什么,于是就和自己说:我以后做管理吧!做管理?问一下自己,如果,公司资产被偷窃了,所有员工士气低下,办公室杂乱无章,公司电梯又坏了,打印机没墨了,采购计划超支了,产品滞销了,客户迟到了……你愿意解决这样的问题,并从小事开始做起吗?想好了这些再考虑是否把管理看得太空洞了。
  
  第七:不要表现得消极,仅仅因为你所做的事情不是你的兴趣所在。
  
  很显然,在学生时代,当做到自己喜欢的时候,我们会pay200%的精力去创造,但如果是枯燥的事务,我们便懒得理睬,最好能有办法应付过去。但在工作上80%你所做的事情都是繁琐而看似机械的,如果仅仅为此而表现的闷闷不乐,那么你会郁闷更久。要知道你的上司已经为这个项目够烦恼了,你还想让他看到你的表情吗?
  
  学会喜欢自己的工作,并把注意力放在日常工作能学到些什么上去。如果现在你努力的抱怨工作,那么接下来你就是努力的寻找工作。尽量少用“有趣”,“好奇”之类的词语来描述自己想要的工作,而是“充实”,“有成就感”,“乐意”之类。
  想想以下职位,你会发现生活中很多工作不是在等你有很好的状态下让你做的很有趣的事情:
  1.高速公路收费口的收费员:一天都是面对一个小窗口,把一张卡片送出去,这样要持续好几年。
  2.学校食堂厨师:永远在烧大排和鸡腿。烧一年。
  3.作家:交稿期要到了,我还在孕育灵感,两个星期没吃早饭了。
  4.外科医生:刚刚睡着,马上叫我做一个3小时的手术。这样至少一周一次。
  5.门市部销售:产品不好卖,8点上班来就坐在店门口,一个人,坐到晚上6点,今天没有一个人来,和昨天一样。
  6.公交司机:我开车不用你指挥。这条线路我开了三年了。
  7.宠物商店店员:生意不好,还要一早就过来听着20条狗的叫声一整天,听一年。
  8.公司职员:晚上两点下班,第二天还要8点上班。关键是路上还要一小时。这样已经一个月了。
  
  再想想自己是不是只是接触了这个工作一个月或者才碰到没几个困难,这个时候抱怨的声音最大。
  千万不要想着去选择一个有趣的职业,因为没有那样的工作存在。没有哪一“种”行业是开心的,因为如果有,那所有人都去干那个了。最多试着问问自己本身的兴趣吧。self exploration。
  
  第八:绝对不要把改善工作能力仅寄托在公司培训上
  
  人绝对不可能经过一次培训就脱胎换骨。相反,集体培训上学到的东西往往是最用不上的信息。 就像食堂烧大锅菜一样,总没有你最想吃的菜,因为这样做容易,并且不容易得罪人。
  
  很多学生很看重所选的公司有没有培训,这说明,你不但不知道这个公司做什么,你甚至不知道怎样学习这些技能。
  我的感悟是如果你不知道怎么学你想要的知识,也不知道你想要的知识是什么,你只会做出两种行为:1。等待别人来教你,并且等待别人发现你不知道的地方。2.寻找现成的答案并且拷贝。期待公司培训的人,就很大概率上是第一种人(不排除极少真正优秀的公司培训)
  
  许多的同学有这样的习惯思维:
  因为,这个公司的培训能结束达到多少多少的程度
  又因为,这个程度正好是我想达到的
  所以我尽力进这家公司
  因为我进了这家公司
  所以它自然会使我达到了这个期望的程度。
  
  我们把参加培训和达到效果很幼稚的画上了等号。其实往往集体培训上所得到的信息是最没有实际操作价值的。永远不要期望单靠听课,靠老师把同样的东西给所有的人,你会得到比别人更多。把更多的心思放在观察和思考自己的需要上,找到问题的所在再通过观察和实践得到的答案才是真正的知识。
  
  所以,刚刚开始工作,什么都不会,不要认为那样是正常的,因为公司还没有培训过呢!等我接受培训了之后,我就全都会了。如果你一无所知还等待别人会可怜你的无知而施舍你知识,那你会为你的无知而付出更多的智商。
  
  
  第九:不要推卸责任
  
  推卸责任是害怕的条件反射。不要认为别人看不出这点。
  我记得我小学里的一件事情。我一次作业没有带来,老师要训斥我,说:你怎么老是作业不带?
  我当时说:不是。。。。 当我正要支支吾吾时候,老师说:什么不是?你带来了没有?
  我说:没有
  老师说:那不就是没有带!什么不是!就是!
  之后我就发现,我只是害怕承担责任而条件反射似的就说了“不是”,仔细观察一下周围,你会发现,身边有无数的人在用“不是”作为被责问之后的第一反应。
  其实现在很多人面对工作也是这样,当上级责问的时候,很条件反射的就做出了推卸动作,然而这样的动作,接下来往往是无力的辩解,以及一些很粗糙的借口。这样会让上司感到你这个人很难沟通,并且很不真实。
  外一种情况,就是无论什么情况下,我指责一个人,他永远是强调客观。其实这点才是学生最典型的特征。这说明他太容易受到其他事物的影响,并受它们决定。如果你和上司之间会出现以下类型的对话,想想是不是需要改一下你的处事方法。
  
  甲:为什么到现在还没有给副总看你的报告!
  乙:刚才c在打印,我在等他结束,现在他大概好了吧,我去看看
  乙:还有点东西要修改
  乙:b也要把东西给副总,我因为等他
  乙:a他说我报告不用给副总看(a是乙的同级同事)
  乙:不知道副总在不在哦,他的门关着。
  乙:d他叫我帮他打印文件!怪他!(d是乙的同级同事)
  乙:我的杯子突然找不到了,在找杯子。
  
  
  不愿意负责任的人的不利在于他会让上司怀疑他的忠诚程度,因为上司给他的命令往往会因为一个小事情而被搁置或者打折执行,转而被他人的意识所改变。
  
  
  
  第十:不要对自己说“我是大学生”
  
  这点包涵了很多信息。
  1.不要认为自己有多清高
  2.不要仍然以学生的标准要求自己
  3.不要感觉低人一等
  4.不要等待别人的关怀
  5.不要把这个作为犯错误自我安慰的借口
  6.不要忘记搞清楚,公司究竟给自己的待遇是多少,老练些,这不是在做志愿者。
  
  品格是处理好人际关系的基础,也是确保人际关系质量的关键。除此之外,人际交往的技巧也是尤为重要的。有些人做好事会让人感激一辈子,而有些人帮了别人却可能费力不讨好,不但得不到感激和回报,还让人心存嫉恨。将同样的产品以相同的价格推销给同一个客户,有些业务员可能被粗暴地赶出门,有些业务员却可能签到大单,甚至被客户奉为上宾。
  人际交往的技巧是一个非常庞杂的话题,囿于篇幅,在这里只能结合我的切身体会做一些
  
  简单的列举,挂一漏万在所难免了。
  1. 多给别人鼓励和表扬,尽量避免批评、指责和抱怨,不要逼别人认错。
  2. 要学会倾听。不要说得太多,想办法让别人多说。
  3. 如果你要加入别人的交谈,先要弄清楚别人究竟在说什么。
  4. 交谈之前尽量保持中立、客观。表明自己的倾向之前先要弄清楚对方真实的倾向。
  5. 注意对方的社交习惯并适当加以模仿。
  6. 不要轻易打断、纠正、补充别人的谈话。
  7. 别人有困难时,主动帮助,多多鼓励。
  8. 不要因为对方是亲朋好友而不注意礼节。
  9. 尽可能谈论别人想要的,教他怎样去得到他想要的。
  10. 始终以微笑待人。
  11. 做一个有幽默感的人。但是在讲笑话的时候千万不要只顾着自己笑。
  12. 做一个脱离低级趣味的人。
  13. 跟别人说话的时候尽量看着对方的眼睛,不管你是在说还是在听。
  14. 转移话题要尽量不着痕迹。
  15. 要学会聆听对方的弦外之音。也要学会通过弦外之音来委婉地表达自己的意思。
  16. 拜访别人一定要事先通知。
  17. 不要在别人可能忙于工作或者休息的时候打电话过去。除非是非常紧急的事情。
  18. 给别人打电话的时候,先问对方是否方便通话。
  19. 一件事情让两个人知道就不再是秘密。
  20. 你在背后说任何人的坏话都迟早有一天传入这个人的耳朵。
  21. 不要说尖酸刻薄的话。
  22. 牢记他人的名字。养成偶尔翻看名片簿、电话本的习惯。
  23. 尝试着跟你讨厌的人交往。
  24. 一定要尊重对方的隐私,不管是朋友还是夫妻。
  25. 很多人在一起的时候,当你与其中某个人交谈,请不要无视其他人的存在。
  26. 要勇于认错。
  27. 以谦卑的姿态面对身边的每一个人。
  28. 给予他人同情和谅解。
  29. 尽可能用“建议”取代“命令”。
  30. 不要轻易做出承诺。承诺的事情就一定要尽可能做到。
[...]


Flash ActionScript3 殿堂之路笔记1

声明变量:var 变量名:数据类型
值类型 :Boolean int Number String uint
引用类型:值类型除外的数据类型
声明常量:const
int uint和Number区别:
int 支持正负,unit只处理正数,Number支持浮点数。
枚举集合:
for(var k in objects){
trace(K + objects[K]); //K为key
}
for each (var k in objects){
trace(k); // k为value
}


关于Ruby hash的排序

最近写了一个发邮件的Rake任务。
其中用到Hash来保存不同分数的数据。大致如下:data = {’a’=>’data a’, ‘b’ => ‘data b’}
在邮件内容里我用了一个each语句来遍历这个hash。
data.each |key,value| do
puts key + ‘ -> ‘ + value
end
输出如下:
a -> data a
b -> data b
现在我想把输出顺序调过来,先输出b ,再输a;
于是我将b 和 a分别先后符值。
data = {}
data['b'] = ‘data b’
data['a'] = ‘data a’
each遍历后,结果如下:
a -> data a
b -> data b
并没有按hash符值的顺序打印出来。这跟php不一样。Ruby hash符值的时候会进行排序。
利用irb测试一下, 我们可以证实这一点:

结论:
让要hash按指定的顺序输出有两个方法:
1. 转换成数组
1. 创建一个以hash的key值为值的数组,如['b','a'],再通过遍历数据,从而输出对应的hash值。


支持参数的Rake任务

最近想用rake来写一个数据迁移脚本。考虑到重用性,脚本必须支持参数。于是上网试着搜索rake中的任务如何加入参数。发现rake还真的支持参数哦。唉,真是后知后觉。
马上动手作了一个demo。Works!
记录一下
Rake任务代码:
desc “Test params”
task :test_p, [:username,:password] => :environment do |t, args|
require ‘pp’
pp args
end
运行命令:
rake tapd3:test_p['frankychen','1234'] –trace
输出:
{:password=>”1234″, :username=>”frankychen”}


如何利用Ruby来解析XML

前段时候做个小工具,把每天的svn日志抽出来取,再把必要的信息通过邮件方式知会大家。
最后采用的技术是ruby on rails 的rake。实现过程中必须要用ruby解析xml文件。上网查了一些相关的资料,方法有很多,在这里做一个汇总:
1. 使用REXML
doc = REXML::Document.new(File.open(file_path))
doc.elements.each(’log/logentry’) do |ele|
author_ele = ele.get_elements(’author’)
msg_ele = ele.get_elements(’msg’)
end
2. 使用XmlSimple
xml_file = File.open(file_path)
data = XmlSimple.xml_in(xml_file)
data['logentry'].each do |item|
item['msg']
item['author']
end
3. 使用Hpricot
Hpricot是一个HTML解释的库,支持XML。Hpricot允许开发者通过CSS-selectors和X-Path访问html元素,因此你很轻松就可以明确目标标记,还有它是用C语言写的,因此相当快。
安装方法:gem install hpricot
# load the RedHanded home page
doc = Hpricot(open(”http://redhanded.hobix.com/index.html”))
# change the CSS class on links
(doc/”span.entryPermalink”).set(”class”, “newLinks”)
# remove the sidebar (doc/”#sidebar”).remove
# print the altered HTML
puts doc


开源数据库 Sharding 技术 (Share Nothing)

开源数据库 Sharding 技术 (Share Nothing)
 

从 Shard 到 Sharding
“Shard” 这个词英文的意思是”碎片”,而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏(MMORPG)中。”Sharding” 姑且称之为”分片”。
Sharding 不是一门新技术,而是一个相对简朴的软件理念。如您所知,MySQL 5 之后才有了数据表分区功能,那么在此之前,很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题,MySQL 的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢? 答案是:Sharding。
Sharding 不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。
事关数据库扩展性
说起数据库扩展性,这是个非常大的话题。目前的商业数据都有自己的扩展性解决方案,在过去相对来说比较成熟,但是随着互联网的高速发展,不可避免的会带来一些计算模式上的演变,这样很多主流商业系统也难免暴露出一些不足之处。比如 Oracle 的 RAC 是采用共享存储机制,对于 I/O 密集型的应用,瓶颈很容易落在存储上,这样的机制决定后续扩容只能是 Scale Up(向上扩展) 类型,对于硬件成本、开发人员的要求、维护成本都相对比较高。
Sharding 基本上是针对开源数据库的扩展性解决方案,很少有听说商业数据库进行 Sharding 的。目前业界的趋势基本上是拥抱 Scale Out,逐渐从 Scale Up 中解放出来。
Sharding 的应用场景
任何技术都是在合适的场合下能发挥应有的作用。 Sharding 也一样。联机游戏、IM、BSP 都是比较适合 Sharding 的应用场景。其共性是抽象出来的数据对象之间的关联数据很小。比如IM ,每个用户如果抽象成一个数据对象,完全可以独立存储在任何一个地方,数据对象是 Share Nothing 的;再比如 Blog 服务提供商的站点内容,基本为用户生成内容(UGC),完全可以把不同的用户隔离到不同的存储集合,而对用户来说是透明的。
这个 “Share Nothing” 是从数据库集群中借用的概念,举例来说,有些类型的数据粒度之间就不是 [...]


Ubuntu Apache2 配置Allowoverride

前两天下了个最新版本的cakephp作研究时,却被apach allowoverride的设置问题困扰了。无论怎么把Allowoverride写在哪里都不生效。 
原因是ubuntu下apache2的rewrite模块默认是不加载的。
只要运行了一下这个命令:a2enmod rewrite 就可以启用rewrite模块了。
网查了一下资料,Apaceh2 多了一组 a2enmod, a2dismod指令,用于启用和禁用Apache的模块。a2enmod用于在Apache启用指定的模块,它实际上做的是在/etc/apache2/mods-enabled目录下创建模块文件的符号链接。相反a2dismo则是通过删除符号链接而达到禁用指定模块的功能。当然,启用已启用的模块或禁用已禁用的模块是不会报错的。^^
这里有必要说明一下:
/etc/apache2/mods-available  放apache可用的模块文件
/etc/apache2/mods-enabled    放apache已启用的模块文件的链接 
 
 
弄明白了,去查看一下/etc/apache2/mods-enabled目录,果然有新增了一条rewrite.load的链接。


MC Inside