Leon's blog

关注: 开源&互联网, GTD with open source and Web

正在浏览由 leon 发布的文章

coffeescript 的 splats …

抢沙发
  • splats比较特别, 我在php里没有遇到过类似的语法. 主要有两方面
    1. 定义函数时, 在最后一个参数上使用splats, 表示把函数调用时这个参数及后续参数作为一个数组赋给该参数
    2. 在使用一个数组作为参数传给调用的函数时, 在数组后面加上splats, 则会把数组拆开传给调用的函数

    例如这段coffeescript代码:

    splatter = (one, two, three...) ->
      console.log "1: #{one}"
      console.log "2: #{two}"
      console.log "3: #{three.join(',')}"
    
    splatter 1, 2, 3, 4, 5
    splatter [1..5]...
    

    生成的javascript代码如下:

    var splatter,
      __slice = [].slice;
    
    splatter = function() {
      var one, three, two;
      one = arguments[0], two = arguments[1], three = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
      console.log("1: " + one);
      console.log("2: " + two);
      return console.log("3: " + (three.join(',')));
    };
    
    splatter(1, 2, 3, 4, 5);
    
    splatter.apply(null, [1, 2, 3, 4, 5]);
    

专注!专注!专注在过程中!

抢沙发

“嗨,你,你..”Hugo喊道.

那个高高的女孩转过身来.

“对,就是你!”他重申道.

女孩不认识他, 她感到有些困惑. 但是女孩还是大步的朝他走了过来. 她一头卷卷的红发, 眼睛闪闪的, 反射着周围的颜色, 她的手很柔美, 腿修长而白皙.
“听着,听我说.注意停,我没有时间了.” Hugo气喘嘘嘘的说.

“我认识你吗?” 女孩问到.

“奥,对不起,我叫Hugo.” 他回答道. “你叫什么名字?”

女孩向后退了一步, 有点犹豫是不是应该回答他, 还是一走了之算了. 她嘴唇微微颤抖道, “Charlotte.”

“很高兴遇到你,亲爱的女士. 可以占用你一点时间吗?”

“嗯…, 当然” Charlotte一边检查自己那小巧的腕表一边回答道.

那天有点微风,阳光灿烂. 他们面对面站在布鲁塞尔火车站前. 两个陌生人 – 一个人遇到了点难处, 另一个人也许能帮他.

“我错过了火车.” Hugo解释道. “你知道我在哪儿能查到下一班去巴黎的火车是什么时候吗?”

“我知道, 跟我来.” 她回答道.

他们穿过一间高高天花板的大房间, 里面的人们像是蚁丘里的小小的蚂蚁. 像Hugo一样, 每个人都显得匆忙而紧张. 只有Charlotte不一样, 她看起来很平静.

“火车时刻表就在那儿.” 她微笑的说道, 并用食指在空中一指. “就在你前面.”

Hugo匆匆的查看, 眼光扫过一行行正在离站的火车. 忽然眼光一闪, 巴黎, 第五站台, 14:41开车.

“不好意思, Charlotte, 现在几点了?” Hugo问道.

Hugo转过身来, 才发现她已经走了. 喔, 他甚至都没来及谢谢她呢. 他像刚才查看火车时刻表那样在大房间里查找, 还真找到Charlotte了, 就像刚才在火车时刻表上找到巴黎一样.

是的,她就在那儿. 他看到一头微卷红发的拓,正朝沿着一个长走廊往前走. 他紧走几步跟上她.

“Charlotte, 嗨, Charlotte..” Hugo从后面追上来.

Charlotte转过身, 她的微笑还挂在她尖尖的鼻子下面.

“嗨” Hugo试着喘口气. “不好意思, 还没来得及谢谢你呢, 多谢了.” 他今天第一次露出了笑脸.

“不用谢.” 她回答.

“我能.. 请你喝杯咖啡吗?” Hugo提议道, 他急切的等待着Charlotte的回答.

“当然可以, 不过我们必须往北走.” 她说. “我只往方走.”

Hugo觉得她的回答很奇怪, 但是他很快就回过神来, 说道. “往北, 可以. 我的火车开之前我还有大约42分钟. 我想时间足够了.”

他们一起走着 – Charlotte朝北走, Hugo在旁边跟着. 不一会他们找到一个舒适的地方. Hugo点了一杯浓缩咖啡, 在他们过来的路上他就跟Charlotte说他现在特想喝浓缩咖啡. 她点了一杯水.

“你要到北方什么地方去?” Hugo边问边滋溜了一口他的咖啡.

Charlotte笑了笑, 她知道他会这么问的. “没什么特定的地点, 只是朝北走.” 她稍微顿了顿, 看到Hugo的眼神显得有些疑惑, 她接着说. “我没有最终的目的地, 我只是朝北走.”

“嗯, 你计划去哪儿呢? 荷兰? 丹麦? 挪威?” 他还是不理解.

“我没有计划. 我每天醒来只是往北走. 我慢慢走. 我也不着急, 反正也没有具体目标. 我只有一个方向.” 她说.

“那工作怎么办? 你有工作的吧? 难道你没有什么职责吗?” Hugo觉得挺好奇.

Charlotte把头发理到身后,笑了笑. Hugo看着她. 她的笑容很美. “我曾经有个工作,” 她说“但是2个月前我辞掉了. 因为我要往北走.”

“但是为什么往北呢?” Hugo想知道.

“因为我掷了两次硬币, 两次都是人头. 如果是字, 我就往南走了.” 她从口袋里拿出一枚硬币, 放在他俩之间的桌子上. “在路上我学到了很多东西 – 有关于我自己的,也有关于生命的. 我认识到专注有多重要. 我曾经有一个计划,一个目标, 每天忙碌着去完成我的计划任务(to-dos). 任务一件接着一件从我的脑袋里冒出来. 我失去了自己的自由. 我变成了自己计划的奴隶. Hugo, 你知道Charlotte这个名字的意义吗?” 她问道.

“不知道, 什么意义?” 他回答道.

“自由的人. 我不再自由了, Hugo. 我就是一个囚犯. 我的存在不是因为我的思想, 而是因为我的计划任务(to-dos). 我需要改变. 然后我就发现了专注.” 她笑得很开心. “专注意味着你做事情时, 不是赶时间(rush), 而是享受(enjoy), 从你每天遇到的事情上去学习和互动, 不要囫囵吞枣.” 她的声音充满了热情和激情. “我们的祖先曾经是思考者(thinkers),但是今天的社会把我们变成了工兵(doers). 我们崇尚质量和解决之道, 但是我们完全忘记了过程.”

“过程?”雨果问道.

“是的. 开始和结束之间的距离, A和B之间的距离. 很多人只看到了B, 和到达B要花费什么代价, 另一些人则甚至从来没有从A出发. 这两类人很不同, 但是从理解专注和过程的角度说, 他们是一样的. 当人专注在过程上时, 他就会在过程中发现很多宝藏. 对你我来说, 那些宝藏就在哪儿.”

Charlotte把硬币推到Hugo面前. “掷一个.” 她建议道. 他拿起硬币,往空中一掷, 硬币翻滚着落回到桌面上. 这时Charlotte已经起身走了, 他回头看了看硬币.

“Hugo, 你知道你的名字的意义吗? 它的含义是思考者. 也许巴黎不是你最终的目的地.” 他微笑着走出了咖啡店.

Hugo静静的站在那儿, 低头看着硬币. 硬币是字朝上.

  1. 翻译自: http://1p1e1.tumblr.com/post/16164435870/focus-focus-focus-on-the-process

Sublime Text 2有一个很好用的小功能,在选中文字时,如果按下[,{,(,',"等符号,会使用按下的符号把选中的文字括起来. 这个功能我在编辑markdown文件是经常使用.

可惜的是这个功能并不支持<符合,不知道这是出于什么考虑.不过给<加上这个功能也很简单.只需要打开Default (OSX).sublime-keymap文件.在里面添加下列配置即可.

{ "keys": ["<"], "command": "insert_snippet", "args": {"contents": "<${0:$SELECTION}>"}, "context":
  [
    { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
    { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
  ]
},

WebKit Inspector

抢沙发

Chrome Canary是Chrome最新的开发版本,几乎天天更新.可以和Chrome稳定版本共存.

打开inspector窗口

  • CMD+J or Ctrl+Shift+J in Windows, CMD+Alt+J in OSX

tips

单击右下角的设置按钮,进入设置界面,可以把inspector窗口调成Dock to Right,在宽屏下比较舒服

通过URL直接创建页面内容

data:text/html,<b>ZOMG I AM BOLD!?!!?</b>

快捷键帮助

在Elements Panel按?会显示快捷键

console

  • 使用shift + enter可以输入多行代码
  • 内置全局对象
    • $(), 通过ID查找DOM节点, 同document.getElementById()
    • $$(), 通过CSS selector查找DOM节点,同document.querySelectorAll()
    • $0, 当前页上的正在被查看(inspect)的元素
    • keys(), 返回某个对象的所有key,不包括从prototype继承来的.同object.keys
    • values(), 返回某个对象的所有value,不包括从prototype继承来的.同object.values
    • clear(), 清空console
    • inspect(), 查看(inspect)某个对象

Elements Panel

  • Break on Subtree Modifications/Break on attributes Modifications/Break on node removal 子节点内容、属性被修改试、被移除时触发断点。调试代码.应该很有用.

Network Panel

  • 蓝线是DOMContent ready事件触发时间. 页面设计时,这个时间应该越短越好.
  • 橙线是window load事件触发时间

Scripts Panel

  • {} 按钮能够Pretty print方式显示javascript, 这对那些做了压缩的javascript特别有用
  • Pause 按钮有三种状态:
    1. Don’t pause on exceptions
    2. Pause on all exceptions
    3. Pause on uncaught exceptions
  • 文件浏览
    1. CMD+O, open up a TextMate-style “Go-to-File” popover that lets you quickly jump to a file
    2. CMD + Shift+ O, open up a “Go-to-Symbol” popover that lets you quickly jump to a symbol in the current file
    3. CMD + L, will let you jump to a specific line

  • 设置断点
    • 支持Call Stack
    • Edit Breakpoint支持设置条件断点

    • XHR Breakpoints可以根据URL设置断点

    • Scope Variablessection里, 可以右键,选择Jump to Definition跳转到函数定义的位置

Timeline Panel

  • 点击Record按钮以后,会记录浏览器的各种内部操作消耗的时间和内存, 对于调试页面性能非常有效.

  • 可以Save Timeline data,保持格式是JSON.但是点击Load Timeline data时什么反应都没有,我哪里搞错了?

Profiles Panel

  • JavaScript CPU Profiler 可以定位那些js最耗时
  • CSS Selector Profiler 可以定位那些css选择器的性能有问题
  • Heap Snapshot 可以定位数组/对象/字符串等使用内存的情况

Audits Panel

  • 这个有点类似YSlow, 分析当前页面, 并给出修改建议. 例如合并js/优化cache/删除用不到的css选择器等.
  • 产品上线前应该用这个工具检测一下.

参考

  1. http://jtaby.com/2012/04/23/modern-web-development-part-1.html
  2. https://developer.mozilla.org/en/Using_the_Web_Console

一个缓和疗护护士打电话给Bronnie Ware,她列出自己死前的一些最大的遗憾。她的遗憾列表看起来挺有道理的。从中我也看到自己犯下的至少4到5个错误。

如果你必须把这个列表压缩成一句话,那也许是:不要做一个不知停顿的齿轮。这个5个错误,刻画出一个后工业时代人的形象。他把自己压缩成一个适应形状,以适应他的环境,然后直到他停下来,才变得忠实(dutifully)。

值得警惕的是,这些错误都是由于疏忽(omission)引起的。你忘掉了自己的梦想,忽略了自己的家人,压制了自己的感受,忽略了自己朋友,忘记了要快乐的活着。疏忽是一种特别危险的错误,因为你会默认犯这种错误。

我希望能避免这些错误。但是你要怎样做才能防止犯这些默认就会犯的错误呢?理想情况就是转变自己的生活方式,用别的默认行为代替这些默认行为。不过要彻底改变很难。只要这些错误还会默认犯,你也许就应该不停提醒自己。所以我把这个五个错误编成了5个命令,然后把他们列在我的任务列表文件的最头上。他们是:

  • 不要忘掉自己的梦想
  • 不要只顾着工作
  • 说出你的想法
  • 积累朋友
  • 快乐的活着

翻译自: Paul GrahamThe Top Of My Todo List