Rails 3 提供了 match 方法供我们自定义 routes,然而我们要小心使用它以避免“跨站脚本攻击”(XSS Attack)。比如像这样的 routes:
注:(r3 代表 Rails 3,r4 代表 Rails 4)
# routes.rb| // initialize the Shanghai component which keeps track of | |
| // shipping data in and out of the Port of Shanghai. | |
| var shanghai = Elm.worker(Elm.Shanghai, { | |
| coordinates:[0,0], | |
| incomingShip: { name:"", capacity:0 }, | |
| outgoingShip: "" | |
| }); | |
| function logger(x) { console.log(x) } | |
| defmodule Crypto do | |
| def md5(s) do | |
| list_to_binary(Enum.map(bitstring_to_list(:crypto.md5(s)), fn(x) -> integer_to_binary(x, 16) end)) | |
| end | |
| end |
| >>> import dis | |
| >>> def a(): | |
| ... return [ x for x in some_list if x % 2 == 0 ] | |
| ... | |
| >>> dis.dis(a) | |
| 2 0 BUILD_LIST 0 | |
| 3 LOAD_GLOBAL 0 (some_list) | |
| 6 GET_ITER | |
| >> 7 FOR_ITER 28 (to 38) | |
| 10 STORE_FAST 0 (x) |
| # | |
| # At CoverHound, we use conditional validations all over the form. However, there is no proper way to do | |
| # this in Rails. Instead, we can provide an array of attributes (validated_fields attribute) | |
| # and ensure they are the only ones to get validated. | |
| # | |
| module ConditionalValidations | |
| attr_accessor :validated_fields | |
| def field_is_required?(field) |
| data:text/html, <style type="text/css">#e{position:absolute;top:0;right:0;bottom:0;left:0;}</style><div id="e"></div><script src="http://d1n0x3qji82z53.cloudfront.net/src-min-noconflict/ace.js" type="text/javascript" charset="utf-8"></script><script>var e=ace.edit("e");e.setTheme("ace/theme/monokai");e.getSession().setMode("ace/mode/ruby");</script> |
| /** | |
| * 分析豆瓣阅读查看电子书的逻辑 | |
| * | |
| * 主要用到的JavaScript为 | |
| * 1. OzJS(管理模块) | |
| * 2. jQuery(base库) | |
| * 3. Backbone.js(web application框架) | |
| * | |
| * 过程分析 | |
| * -------- |
As configured in my dotfiles.
start new:
tmux
start new with session name:
| // Lack of tail call optimization in JS | |
| var sum = function(x, y) { | |
| return y > 0 ? sum(x + 1, y - 1) : | |
| y < 0 ? sum(x - 1, y + 1) : | |
| x | |
| } | |
| sum(20, 100000) // => RangeError: Maximum call stack size exceeded | |
| // Using workaround |