module NullableHash
class NullObject
def method_missing(*args)
self
end
def nil?
true
end
end
def [](sym)
super(sym) || NullObject.new
end
end
data.extend(NullableHash)
data[:sfsda][:bsdf][:csdf][:dsdf][:afsdfasdf].nil?
=> true
你太敏感了 技术论坛说代码不说人
是不是这样写 assignment 是个人喜好,但这个代码确实是 bug 的源泉
粗略看下,这样的代码是说在 operation_name 为 nil 的时候就不去做 find_rule_operation_name; 但这个逻辑不应该在 find_rule_by_operation_name 的外面,否则在所有调用 find_by_operation_name 的时候都要这样防守一下。正确的应该在方法里面第一句就判断短路,这样原来代码里的条件就不需要了
def find_rule_by_operation_name(operation_name) return unless operation_name ....... end
在深想下,写这个代码的原因还是不好的 object abstraction.
源代码的逻辑是,通过 deal 找 operation, 如果有 operation 再通过 operation 找 rule
看上下文这个 method 应该是在一个类似 Rule 的 class 上面,也就是说有
Rule.tao_deal_operation_name(tao_deal)
这样写就很明显了,用 deal 来找 operation 跟 Rule 是不想关的,不应该在 Rule 上面。可以重构到 deal 上面
还有,直接在 Rule class 上的方法名不需要重复 rule.. 根据上下文跟方法们重新命名重构后是这样的:
class Rule
def self.find_by_deal(tao_deal)
find_by_operation_name(tao_deal.operation)
end
def self.find_by_operation_name(operation_name)
return unless operation_name
......
end
end
如果想开放给海外的 speaker 或者参加者 可以考虑加到
好吧 我来 troll 一下
一个表达式里面有四个点是很强的 code smell 了。看你的代码,你是说 tag 为 nil 的,开头!的,空字串都不是有效的 tag。因为你用了 Ruby 里面比较基础的类 String(猜的)来表达 tag 所以就只能依赖 String 的操作来实现这个业务逻辑,就只能把多个方法穿起来
更好的方法是对 tag 的更好封装,在一个 class 里面。然后把逻辑定义在 tag.valid? 里面。这样你的 post.tags 可以按 {|tag| tag.valid?} 来选出合理的 tags. 这样的方法很方便被复用,需要增加或改变什么样的 tag 是 valid 也很容易
鼓掌!
实际做的话还有把/blog 后面的传过去的考虑等等。
但是这个只能在 app 内部,如果要去 app 外面就要做 Proxy.. 昨天已经开始写一个了,但觉得 edge case 太多,比如要 forward 用户的 cookie 什么的,不太值。
如果你们自己 host 的 server, 可以考虑直接在前面放一个 Nginx 做 reverse proxy 做两个 upstreams, 一个指向你们的 app 一个指向 posterous blog..
http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html
比如说下面的代码可以让 /blog 去按着 / 的 route 走,但用户在浏览器地址栏上看到的还是 /blog
class UrlRewriter
def initialize(app)
@app = app
end
def call(env)
env["PATH_INFO"] = "/" if env["PATH_INFO"] == '/blog'
@app.call(env)
end
end
module YourApp
class Application < Rails::Application
............
config.middleware.insert_before Rack::Lock, UrlRewriter
end
end
```ruby
http://edgeapi.rubyonrails.org/classes/ActiveModel/Serializers/Xml.html
可以自己选择 xml 里面包括什么
自己买吧,按它给你提供的价值 15 美刀不贵。如果真的有困难建议你直接给 Avdi 发封邮件说下问他可不可以让他赠送你一本,他很好的人应该没问题。不要这样盗版传来传去
#23 楼 @yedingding 不是 302, URL rewrite 要做成 200, 用户看到的 url 不变,通过改 env 来内部换成其他的 path. 但这个要前后的 url 在同一个 server 上。
真要做这个 posterous blog 要在前端放个 proxy。我正好也正在研究这个
We are teaching a current batch.. registration for the next batch is not yet open.
#20 楼 @yedingding 应该可以用 url rewrite 吧。不知道你们用什么 server.. 也可以用 rack middleware 试试
check again :)
看你们用的是 Posterous 做的 blog, 能不能分享下从 SEO 角度上有什么考虑
帮你们投了一票。
同学们都要支持社区的创业者啊,这几位同学平时贡献很多要支持他们。起步时候的 startup 作重要的就是宣传和推广。去 Hacker News http://news.ycombinator.com/ 注册个帐号很容易,而且你如果想成为好的程序员看 Hacker News 要做每日必修课。
感觉没有 data binding 太痛苦了,Ember 感觉太肿大了.. 最近在用 Augular.js。
中文 railscast 有很多不错的 screencast. http://railscasts-china.com/
网上有很多不错的 tutorial, 比如说很多人用来起步的Rails Tutorial, 可以免费的在网上看,也可以付费下载 screencasts 看起来会更舒服些。
想要学更深点的, Jumpstart Labs 有很多资料,但需要慢慢来。
如果不介意多花些钱,我在 Railstutors上面教课,一个月可以带你系统的学习 Rails 到能写小型的应用。如果你舍得砸锅卖铁, Bloc上面有 8 周 1 对 1 的课程,但是要 3500 刀
具体想学什么还有大概的预算在多少左右,我可以帮你推荐几个
#169 楼 @yedingding #179 楼 @poshboytl
恭喜上线!产品做的很好,界面很友好,上手也很快。帮你们看了看,可能有几个地方需要改动下:
https://skitch.com/e-knwang/ect74/pragmatic.ly-fast-and-easy-to-use-project-management-tool-and-real-time-collaboration should be "learn how pramatic.ly can/will help you"
https://skitch.com/e-knwang/ect9h/pragmatic.ly-fast-and-easy-to-use-project-management-tool-and-real-time-collaboration 为什么 closed 的也会在 backlog 里面?
https://skitch.com/e-knwang/ec1br/pragmatic.ly-fast-and-easy-to-use-project-management-tool-and-real-time-collaboration 这个 tip 好像不应该在 search result 里面?
https://skitch.com/e-knwang/ec1b6/pragmatic.ly-fast-and-easy-to-use-project-management-tool-and-real-time-collaboration after confirming your account
https://skitch.com/e-knwang/ec1nw/pragmatic.ly-fast-and-easy-to-use-project-management-tool-and-real-time-collaboration 不是很清楚 0/2 是什么意思
加油!
这是一个让人激动的计划。如果一旦能够成功,会颠覆整个互联网的格局。苹果和 google 提供了移动平台,培育了用户的付费习惯,如果互联网和 social 能有相似的平台和市场是会非常的美妙,而这个平台的成功会让程序员手握前所未有的力量。