yang guang go
Full Stack Developer / Ruby Hacker

What Chain of Responsibility is a design pattern to pass responsibility to other objects in a chain. This simple definition...

What Prototype Pattern is a creational pattern to create new objects by cloning existed objects. Usually we use consutructor of...

I’m always relying Ruby on Rails to build web application, I think it’s not enough for a developer because Rails...

Bloom Filter 用来快速查找某个元素在不在集合中的算法,但不保证100%正确,有一定概率的误判(False Positive), 也就是判断结果是在集合中的话,存在一定几率其实元素不在集合中。但是不会又漏判(False Negative),就是判断结果不在几何中的话,那这个元素肯定不在集合中。 加入元素 用1个长度为 m 的 BitSet,每一位初始化为0,然后选择 k 个 hash 函数,每个 hash 函数的结果在0-(m-1)之间。调用每一个 hash 函数,把 hash...

Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there...

You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of...

OAuth 2 Introduction Authorization system is a very fundamental component for most websites or applications, we must login first before...

Why Ruby can be scripting language? Before I start writing Ruby, my main language is Java. The most verbose thing...

Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence...

在C++11之后终于有了lambda,这个在很多需要传一个函数作为参数的时候方便了很多,比STL里面的for_each和sort。原来是要单独定义一个函数,然后当做参数传进去。比如,我要打印一个vector: void print_elem(const int x) { cout << x << " "; } 或者定义一个函数对象: struct print_elem_class { void operator() (int...

今天下午和Wilbeibi讨论了下Python的Decorator,我觉得挺有趣。有点以前写Rails时候的Controller filter或者Active Record Callbacks的意思。所以晚上回来我把Python的Decorator简单了看了一下,也搜索了下看看Ruby有没有类似的功能,顺便花了点时间用Ruby写了个原型。有段时间没写Ruby了,没那么顺手了。 好了,夜深了,要睡觉了。 module Decorator def log_around(func) class_eval <<-DEC alias_method :old_#{func}, :#{func} def #{func}(*args, &blk) lambda do |*a,...

Nearest-Neighbor Classifier is a simple classifier to assign one test samle to one category, by finding the nearest point in...

Monty Hall Problem is an interesting problem, and is a great example to understand Bayes Rule. What is Monty Hall...

Suppose we have two datasets, have \(n1\), \(n2\) data separately, and we know mean and variance of each, \(\mu_1\) ,\(\sigma_1^2\),...

回顾香港 去香港工作1年零9个月了,虽然工作不辛苦,做的事情也不是很有趣,但是还是见识了很多。香港是个成熟的商业社会,什么都尊重契约精神。香港也是个魅力之都,充满了它独有的味道。然后女儿也去了香港几次,最长一次住了一个半月,她好像也挺习惯那边的生活。原本计划在那边读幼稚园,都已经准备去面试了,现在也搁浅了。我想说香港还是一个很值得住一段时间的地方。最后,说一声,Goodbye,Hong Kong。 留学准备 这件事情从13年6月开始准备,到现在整整一年了。整个过程显得折磨且焦躁。最开始准备英语考试,我这半吊子英语要考TOEFL和GRE在原来是不能想象的事情。但是我还是熬过来了,早上7点起床背单词,8点半去上班,晚上吃完饭7点开始继续做题练听力,11点半洗澡睡觉,这段时间对于我来说简直就是折磨。还好经过4次考试,TOEFL和GRE终于有成绩了,只能说是有成绩,因为这个成绩只是可以去申请了。 12月末的时候开始申请学校,然后就是漫长的等待过程。因为我最初选的学校都是在CA,所以接下来收到的是一封接着一封拒信。结果就是第一批学校全军覆没,不能在硅谷附近读书让我伤心不已。到4月份继续申请了3所学校,这次终于运气好了一点,终于有学校要我了。最后决定去在NJ的Stevens Institute of Technology,对于我这种三低人士(低GPA,低TOEFL,低GRE)能录取这所学校我已经心满意足了。 6月中我辞去了香港的工作回到家,接着去上海面签,去之前还挺紧张,心中练习了很多次可能问的问题。这次运气还不错,面试官问了两个简单的问题之后就通过了。然后就是买机票,做体检。准备工作终于完成的差不多了。接下来就是8月登上东航的MU587开始新的旅程了。 学习计划 工作这么多年来,越来越觉得基础理论很重要。以前做过一个简单的推荐引擎,我只能根据书籍以及文档的教程去实现一个,相当于拿积木堆一个房子,但是不知道为什么要这么做,怎么做更好,因为这些是需要Machine Learning的理论知识支撑的。 本科的时候,由于急于想实现一些东西,忽略了重要的基础。虽然在工作中也补了一些理论知识,但是还是需要静下心来系统的做一个梳理。所以这次去读书,主要是要补充自己的理论知识,以及深入学习自己感兴趣的Machine Learning。 最后 分享一句虽然很俗但是我很喜欢的话:再牛逼的理想也抵不住傻逼似的坚持。

函数 Function square = (x) -> x * x cube = (x) -> square(x) * x var cube, square; square...

JavaScript 如果让我用一句话来形容JavaScript的话,就是,JavaScript是一个极其灵活的脚本语言。开个玩笑,JavaScript是一个动态类型,有命令式,面向对象,函数式多种编程范型的脚本语言。在浏览器中JavaScript是一统天下的脚本语言,随着Chrome的V8引擎的强势来袭,使用JavaScript的Node.js也冲击着服务器端的开发。 在我看来,JavaScript中有很多陷阱。虽然很灵活,一件事情有很多种做法,但是往往某些做法就隐藏着种种问题,存在出现难以发现的bug的隐患。所以才有人要写一本书来讨论JavaScript的最佳写法,来避免踩入这些陷阱。这本书就是《JavaScript: The Good Parts》,书中写的就是哪些部分是JavaScript中容易产生问题的部分,在编写JavaScript的时候就要避免这些部分,而是采用其中的good parts。 CoffeeScript 其实现在来看,还有一种很好的办法可以避免JavaScript的一些陷阱,就是使用CoffeeScript来写原来需要JavaScript来写的代码。 CoffeeScript是一种可以最终编译成JavaScript的语言。CoffeeScript采用一种简单统一的语法来写JavaScript,然后编译成原生的JavaScript,但是编译后的代码都是按照最佳实践来写的。这样我们就能不用考虑JavaScript中哪些是good parts,这部分工作coffeeScript会帮我们完成。 既然CoffeeScript编译出来的javaScript是按照good parts标准得到的,那我们就能通过这些编译出来的目标JavaScript来学习这些good parts。 通过CoffeeScript来学习JavaScript CoffeeScript的官方网站 (http://coffeeScript.org/) 首页上就有coffeeScript的基本语法,以及一些例子。每个例子都有CoffeeScript的版本和编译出来的JavaScript版本,我们只要按照上面的顺序,分析各个例子的目标代码就可以了。 在官网上还有一个可以把CoffeeScript编译成JavaScript的工具,利用这个工具,你就能看看自己写的CoffeeScript编译出来是什么样子。你在学习过程中,如果你要修改一些例子,你就可以使用这个工具来看看编译出来的JavaScript是什么样子。

原文地址: http://ocaml.org/learn/tutorials/null_pointers_asserts_and_warnings.html 空指针,断言和警告 空指针 你的网站上有一个问卷调查,询问读者的名字和年龄。唯一的问题是有一些读者因为某些原因不想给你他们的年龄,他们很顽固,就是拒绝填写那个字段。一个不好的数据库管理员会做什么? 假设年龄用一个int来表示,可能有两种方法来解决这个问题。最普通的一个(也是最错误的一个)是假定某个特殊的值来表示年龄信息没有收集到。比如说 age = -1 就表示没有年龄数据,否则表示有年龄数据(即使数据是无效的)。这种方法可以用,但是当你开始,比如计算网站访问者的平均年龄的时候就有问题了。你忘记把你假定的特殊值考虑进去,你计算出来访问者的平均年龄是7½,你聘来web设计师删掉了所有长单词,并且所有地方使用基本颜色。 另一种方法是正确的方法,就是把年龄存储在一个 “int or null” 类型的字段中。这是一个用来存储年龄的SQL表: create table users ( userid...

原文地址:http://ocaml.org/learn/tutorials/modules.html 模块 基本用法 在OCaml中,每一段代码都被包成一个模块。一个模块可以选择性地作为另外一个模块的子模块,很像文件系统中的目录-但是我们不经常这样做。 当你写一个程序使用两个文件amodule.ml和bmodule.ml,它们中的每一个都自动定义一个模块,名字叫Amodule和Bmodule,模块的内容就是你写到文件中的东西。 这里是文件amodule.ml里面的代码: let hello () = print_endline "Hello" 还有bmodule.ml里面的: Amodule.hello () 通常文件一个一个编译,让我们来编译: ocamlopt -c amodule.ml ocamlopt...

“闭包”这个词看起来很熟悉,在编程书中经常看见,但是我好像从来没真正理解这是个啥意思。今天查了很多资料,决定弄清楚这个词的含义。 记得在大学的离散数学的集合论中就见过“闭包”这个词,这个词也确实是最先出现在数学中的。离散数学中,如果对一个集合的每个成员进行某种运算,生成的结果仍然是这个集合的成员,则称该集合在某个运算下闭包。例如,整数集合在减法运算下构成闭包;但是自然数在减法运算下不构成闭包。因为自然数相减可能得到负数,负数就不再是自然数了。 那“闭包”这个词在编程语言中的含义是什么呢?比如,在Ruby语言中很多人称block, lambda和Proc为闭包,其实就是一个匿名函数,传入了外部环境的参数。这个理解到底是不是正确呢?来看看wiki的详细解释。 In programming languages, a closure (also lexical closure or function closure) is a function or reference...

问题是:当一个房间里的人数必须达到多少,才能使至少有两个人生日相同的机会达到50%?假设一年是365天,而且每个人的生日是平均分布在每一天的。 首先,至少有两个人生日相同,表示有多人生日相同也是符合要求的,那我们就采用补的方法,至少有两个人生日相同的概率等于1减去所有人的生日都互异的概率。\(P_1\) 表示所有人生日互异的概率。 \[ P = 1 - P_1 \] 现在问题就是 \(P_1\) 等于多少? 最简单的方法就是用排列来思考。假设房间内有k个人,在365天里面选出k天进行排列,每个人的生日对应其中一天的概率是\(1/365\),那么 由不等式 \(1+x \le {e^x}\) ,得 所以当房间里人数达到23个时,至少有两个人生日相同的概率达到50%。...

今天看《算法导论》中的随机算法段落的时候,看到了一个公式 。查了一下Wiki知道这是个调和级数,还知道了一个有趣的题目”橡皮筋上的蠕虫”。 “假设一条蠕虫沿着一条1米长的橡皮筋爬行,而橡皮筋每分钟之后均匀伸展1米。如果相对于其所在的橡皮筋,蠕虫的爬行速度是每分钟1厘米,那么它最终会到达橡皮筋的另一头吗?” 这里的橡皮筋伸展1米,不是说橡皮筋在一端延长1米,而是在橡皮筋每个点均匀伸展,所以每次伸展的时候,蠕虫和起点的距离都会等比的增大。 直觉上看,这只蠕虫永远到达不了橡皮筋的另一头,但是仔细算一下就知道这个答案是肯定的。 我们假设 \(g(n)\) 是表示n分钟之后蠕虫已经爬的距离的函数。 ,其中\(g(0)=1\), 那么n分钟之后蠕虫爬行的距离和橡皮筋总长的比例是函数 , 所以 , 当$f(n)=1$的时候,蠕虫爬到了橡皮筋的另一端,这时用上面的求和公式可以知道当

看到一片文章讲的是Javascript的异步回调,然后我想Javascript的callback是不是都是异步的? 找到一篇阮一峰的文章, 里面的一段代码其实有点问题。 在回调函数中的一个例子其实不能反应出回调的异步。 function f1(callback){ setTimeout(function () { // f1的任务代码 callback(); }, 1000); } function f2(){}; f1(f2); 文章中说,“采用这种方式,我们把同步操作变成了异步操作,f1不会堵塞程序运行,相当于先执行程序的主要逻辑,将耗时的操作推迟执行。”, f2作为f1的callback,其实是f2可能阻塞程序运行。我改一下这个例子,可以更清楚地表现异步。...

When I was developing the Presently Android client I ran into an interesting problem. If a user is in the...

We know there is an Application class in the Android api and according to the class name it’s used for...