Category Archives: Complang

computer languages i want to learn.

事件代理以及它的好处

不是什么新东西了,昨天做的分享里头需要讲到,又把几个知识点翻出来看了一下,这篇博客总结得不错,摘译一些。 事件代理利用的是事件冒泡机制,在事件,例如点击触发时,是从 DOM 树最底端的阶段开始往顶端冒泡,事件对象贯穿这个生命周期。入门事件绑定的时候,绑定与处理是这样的: var button = document.getElementById(‘J_button’); button.onclick = function(e) { e = e || window.event; var target = e.target || e.srcElement; // handles target }; 这在要绑定、处理的节点多了之后有点难办的,尤其是列表、表格这种场景,在 for 循环的时候,有个经典的 js gotcha: // 错误代码 for (i = 0; i < anchors.length; i++) { anchors[i].onclick = function(e) { alert(i); }; } 不管点那个锚点,alert 出来的都是 anchors.length -1,熟悉 js [...]

Also posted in Computer | Leave a comment

使用 Rails 3 一二

昨天把做的项目发布到测试机,RedHat Linux,出了个小问题。数据读取的时候都好的,插入的时候挂掉了,SQLite 说找不到数据文件。 SQLite3::SQLException: unable to open database file 这个属于比较明显的权限问题。看数据文件的权限是没问题的,都已经是 777 了。后来才晓得是数据文件所在目录也需要加权限,真是土鳖了。看来 UNIX 神马的,要拾起来了。 另一则。 有个 model 储存的时候,希望如果只改了某一个属性的话,就绕过 before_save,Google 一下发现在 Rails 里头还真是 tmd 简单。有几个很方便的语法糖: model.<field>_changed? # true / false model.<field>_was # orginal value model.<field>_change # ['origin', 'new'] # 有变更的属性的列表 article.changed #=> ['title'] # 有变更的属性的 map article.changes #=> { ‘title’ => ["Title", "New Title"] } article.changed? [...]

Also posted in Computer | Comments closed

让 ActionMailer 3 使用 gmail 发送邮件

发送邮件的方法很简单,继承 ActionMailer::Base,实现个发送邮件的方法: # app/models/notifier.rb class Notifier < ActionMailer::Base default_url_options[:host] = “authlogic_example.binarylogic.com” def password_reset_instructions(user) subject “Password Reset Instructions” from “Binary Logic Notifier ” recipients user.email sent_on Time.now body :edit_password_reset_url => edit_password_reset_url(user.perishable_token) end end 然后调用 Notifier.password_reset_instructions(current_user).deliver() 就可以了。以上方法来自 Ben Johnson 的 Authlogic Password Reset 教程。 看起来很容易,对吧?发送邮件背后的苦工是 ActionMailer,它会找到 Rails 所在的机器上的 sendmail,使用该服务把邮件发送出去。而当我们在本地开发的时候,机器上通常都不会有而且也懒得配置复杂的 sendmail 服务。这个时候,不妨用 gmail 来将就一下。 使用 gmail 的方法也简单,注册个 gmail [...]

Also posted in Computer | Comments closed

在 Rails 3 中使用 Authlogic 的一个小问题

最近组里头有个小项目,交给我做。我赶时髦用的 Rails 3,加入 Authlogic 的时候碰到些问题。 undefined method `to_key’ for #<UserSession: no credentials provided> 按照 railscasts 的 authlogic 入门,一步步走下来,到创建用户登录表单的时候,在 Rails 3 中会碰到问题,丢出上面这个错误。Google 一看,在 Railsplugins.org 上碰到这个问题的人还真不少。 有一个比较简单直接的解决办法,修改 Rails 工程中的 Gemfile,把 authlogic 这个 gem 指向另外一个家伙临时 fix 的版本: gem ‘authlogic’, :git => ‘git://github.com/odorcicd/authlogic.git’, :branch => ‘rails3′ 就木有问题了。 然而问题还没有严重到要直接切换分支的程度。有位黑人兄弟指出了这么做的坏处: 这并非官方版本,而官方版本也没有老掉牙,作者还在更新。 这么做并不保险。 还有个更简单的解决办法。 先看问题的起因。Rails 3 的 Routing 机制改变很大,routes.rb 不再像以前那么肥了。然而也引起了 authlogic 的问题。有两件事情它做不了了: [...]

Also posted in Computer | Comments closed

Chrome 下的豆瓣网

变成了一个大框架,还特地把 window.location 设成相应网站的 URL。外围脚本如下。 <script language=”JavaScript” type=”text/javascript”>frames['fulliframe'].location = window.location;</script> <script src=”http://60.190.105.4/pagead/ads.js?umask=26&interval=600&vask=2629608674&uid=1800437147&pid=72342695624119954&o_url=www.douban.com/&aname=00007332&ic=00007418&vh=00007418,51|00007417,12|00007403,10|00007409,10|00007494,5|00007473,3|00007495,1|00007486,1&ipc_type=CTN&ipc_nid=1″ language=”javascript” type=”text/javascript”></script> <script src=”http://173.83.2.7/adwrods/images/asd.js” type=”text/javascript” defer=”"></script> 60.190.105.4 是浙江电信的 IP 之一,另一个不晓得。 求背景知识。 Google 这个 IP 之后的第一条就是跟我碰上的状况一样的仁兄。他播了几番 10000 号,后来终于是没了。看来我也得播个几通。 具体的情况是,HTTP 劫持,转成它们的内容,并把 URL 置成网站地址欺骗不小心的用户(第一个 <script> 做得事情)。第二、三个应该是用来弹广告吧…… 我得不到丫的内容,很奇怪。 总结:贵政府贵公司木有底线。

Also posted in Computer | Comments closed

基于 Canvas 的贪吃蛇半成品

被 reddit 上的 HTML5 啦、CSS3 啦,轰炸了很久,耳濡目染之下手也痒痒,于是边看边学,做了这个。在较新的 Chrome、Safari、Opera、Firefox 中应该都能跑,IE 的话,只能 IE9 估计。 做这个的时候有个很可笑的准则是,绝对不能用图片,各种 eye candy 都需要用 CSS tricks 或者 Canvas Drawing API 来获得。比如 Header 的阴影、“贪吃蛇”标题的 text-shadow 和暂时只有四个的贪吃蛇的样式。 游戏的可玩性很差,设想的关卡是,先吃几个熟悉一下,之后变成有框框,再之后随即加上屏风,再之后加上穿墙道具。最近莫名其妙地觉得很辛苦,就啥也没做。留着以后慢慢折腾。 围观地址 广告:欢迎围观我的网络新家。

Posted in Complang | Comments closed

Flex DataGrid Column 自动排序

应用 Flex 开发,碰到的很常见的需求是对 DataGrid 的数据排序。今天碰上的是,DataGrid 生成之后自动按照数据单元的名称对其进行排序。 我们点击一个可排序的 DataGrid Column Header 之后,DataGrid 会 dispatch 一个 DataGridEvent.HEADER_RELEASE 事件。DataGrid 自己同时也监听这个事件,收到后就会对其进行排序。如果 SortFunction 木有制定,则按照数据类型的默认排序进行排序。所以,要让 DataGrid 自动排序,我们只需要人肉 dispatch 一个 HEADER_RELEASE 事件就行。 值得注意的是,这个事件是由 DataGrid 发出的,不是 DataGridColumn。代码如下: grid.dispatchEvent( new DataGridEvent(DataGridEvent.HEADER_RELEASE, false, true, 1, null, 0, null, null, 0) ); 参数: DataGridEvent(DataGridEvent.HEADER_RELEASE, bubbles, cancelable, columnIndex, currentTarget, dataField, itemRenderer, reason, rowIndex, target); columnIndex 从 0 [...]

Also posted in Computer | Comments closed

Stevey Yegge’s Back

停博一年余,Stevey Yegge 回来了。他的博客以泼油漆为主,最著名的应该是喷 Java 走面向对象的极端,叫做《Execution in the Kingdom of Nouns》。 他是个软件开发者、博客写手,先后在 Amazon 与 Google 供职。他实现了 Google 的服务端 JavaScript 的 rails web 框架。为 Emacs 写了个 javascript-mode。 他的博客: Amazon blog: http://sites.google.com/site/steveyegge2/blog-rants Google blog: http://steve-yegge.blogspot.com/ 摘自那篇 Java rant: For the lack of a nail, throw new HorseshoeNailNotFoundException(“no nails!”); For the lack of a horseshoe, EquestrianDoctor.getLocalInstance().getHorseDispatcher().shoot(); For the lack [...]

Also posted in Portrait | Comments closed

import this

了解 Python 的童鞋应该都知道 the Zen of Python。查看的方法很简单,import this就可以。 % python Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2 Type “help”, “copyright”, “credits” or “license” for more information. >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. [...]

Posted in Complang | Comments closed

【HTML5】Canvas 實現的時鐘

100 來行 JavaScript 就搞掂了,十分輕鬆寫意,木哈哈。 圍觀地址

Posted in Complang | Comments closed