[email protected]:~$

  • 从 PM 到 PM

    Tags: 想法

    打开这份四年前开始的博客,回忆起了在不安与浮躁中追求着上进的自己。 几年过去内心已经成长了不少,周末不会因担心未来守在电脑旁疯狂的学习,逐渐的摆脱迷茫认清对自己重要的事,了解了社会组织的运作方式从而知道如何参与其中。 人的成长是螺旋式的,在迷茫和坚定之间来回摇摆。 可能现在看来成熟的思考在明天就会被新的认知打破,而在迷茫中的一点点积累却又是形成坚定意志的原料。 这种成长方式使得我们在迷茫时变得不再恐慌,在坚定时也会不断的审视自己。 之前的一个月因为自认对产品的洞察力而主动请缨 Product Manager 的位置。 一是认为公司的成长过...

  • 通过Razor管理Virtual box虚拟机

    Tags: 云计算

    打算在mac上用虚拟机玩下云。之前工作中用到了Razor,于是萌生了用Razor来管理虚拟机的想法(顺便试验下最近很火的docker)。 为了让开发机尽量保持”干净”,决定用docker来做个razor-server的镜像(docker pull jjy0/razor 可以下载到) 制作镜像还算顺利,没想到在虚拟机的网络配置和IPXE boot上栽了跟头,记录在此引以为戒,同时期望能帮助到他人(没接触过PXE boot或Razor的朋友就此别过!) 用docker启动 razor-server非常简单 docker run -d -p 808...

  • 开发编辑器的过程中遇到的一些浏览器差异

    Tags: javascript

    测试新编辑器时发现在firefox下会有很高几率出现一个神奇的bug。 当光标在block元素(blockquote, pre, etc..)中时,按‘下’或‘右’或‘回车’键后,光标会选中block元素中第一段文本。刚开始怀疑是在FF下rangy设置selection的bug,但在注释所有js中keydown的处理事件后,还是会有此bug。 之后百思不得其解,甚至想到用scribe重写编辑器… 在观察scribe的demo在FF下的表现后,终于找出了这个很愚蠢的bug… 在blockquote中我特地的把p标签转换成text + <...

  • javascript学习笔记(二)

    Tags: javascript

    1, 函数中this的四种情况 //1. 函数绑定到对象上时, this为对象 a = {func: function(){ console.log(this)}} a.func() // this是a //2. 没有绑定到对象时,this为全局对象 (function(){ console.log(this) })() //上面的this在浏览器中是window(全局对象) //3. 用new调用时this绑定到新构造的对象 //4. 函数对象的apply方法 (function(){console.log(this)}).apply("...

  • javascript学习笔记(一)

    Tags: javascript

    以前没怎么用过javascript(仅停留在简单的dom处理与ajax上),身为后端程序员对其印象仅有杂乱 完成简书新richtext编辑器的基本功能后,感到js也没这么不堪,反而基于原型的模型能很轻易的应对反射,动态定义Function/Object等‘元编程任务’ 并且和ruby中的’元编程’不同,在js中这些就是通常编程 “原型”的表达力不弱于OO,并且复杂程度远小于OO。当然在javascript中的实现还是略微杂乱..虽然这门语言很多细节部分的设计让人匪夷所思,但是其核心的原型功能还是兼具了精简与好用这两处优点 遂打算好好学习下j...

  • Yet Another Markdown Parser, 没想到还原度还挺高的

    Tags: Ruby markdown

    最近写了个markdown parser练手, 发现这种有规范的东西非常适合TDD, 照着markdown语法来写spec, 然后一个一个将其通过, 之前从未试过这么彻底的TDD 是写代码写的很爽时顾不上测试 是spec一定要事先定下,如果是创造性的编程, spec没法确定, 在代码和spec间来回改动就失去了TDD的意义 托TDD的福,写好各个语法的parse后跑了下GFM的source页,没想到还原度还挺高的 之后fix了几个小地方,parse的效果已经比较完善了,而且因为TDD 保证了测试的覆盖...

  • ruby中的lambda为什么是Proc类

    Tags: Ruby

    当然写之前我试着在网上搜了下, 果然没有搜到类似的问题。 lambda为什么不是Function, Method 而是Proc ? 这个问题当然没有标准答案,于是我做了一番推(猜)测 lambda和proc都是Proc类,这样已经可以看出一些端倪,proc既然叫proc当然是Proc类的主角,所以lambda只是Proc的一个附属,因为已经实现了proc,所以就顺手实现了lambda。 proc是用来代表block的(双飞燕中的话是proc更接近block), 如果我们在参数中用&block,我们会得到一个代表block的proc对...

  • Celluloid中的任务中断和Condition

    Tags: Ruby

    ######Celluloid有个很神奇的机制(<–示例代码) Celluloid每次任务(方法调用)会用Fiber去包装 当一个FiberTask因为某些代码被中断时,此时Celluloid可以回到线程执行任务的方法 相当于中断的任务已经结束 之后Actor线程继续的从mailbox取任务 ######某些代码! FiberTask会因某些方法被中断,上面的示例代码中中断当前Fiber的是sleep方法,这个方法由Celluloid做了覆盖 sleeper = Sleeper.new(@timers, interval) ...

  • ruby-stdlib-delegate

    Tags: Ruby

    一直对delegate效率抱有疑问(虽然从未做过牛X到需要改进这里效率的项目..) SimpleDelegate使用的果然是method_missing方法 method_missing据说是很慢的。。因为ruby要查询很多层方法 ActiveRecord采用的改进方案是method_missing中去创建方法,这样第二次调用就会命中创建的方法了 不过不到框架的级别应该是不需要在意这些的.. DelegateClass方法会返回一个匿名类,并且作为参数的类的实例方法都会在其中定义一遍 所以没有method_missing,当然用起来不是那么...

  • Celluloid中的Atom Mode与锁

    Tags: Ruby

    Celluloid默认是Atom Mode执行的, 这种模式下可以中断当前执行的任务 先执行下一个 Celluloid提供了一个sleep方法,在Actor内部调用sleep时会中断当前Fiber并且用timer异步来恢复 def before_suspend(task) @timers.after(@interval) { task.resume } end 当中断当前的TaskFiber时,Actor即可处理下一个message,被中断的message等待timer去恢复自身 def task(task_type, method_nam...