diff --git a/README.md b/README.md index 5525889..d8daedb 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ * [数据导入](http://github.phodal.com/#数据导入) * [Redis](http://github.phodal.com/#redis) * [邻近算法与相似用户](http://github.phodal.com/#邻近算法与相似用户) -* [如何在GitHub“寻找灵感(fork)”](http://github.phodal.com/#如何在github寻找灵感fork) +* [如何在GitHub“寻找灵感(fork)”](http://github.phodal.com/#如何在github寻找灵感fork) * [Lettuce构建过程](http://github.phodal.com/#lettuce构建过程) * [需求](http://github.phodal.com/#需求) * [计划](http://github.phodal.com/#计划) diff --git a/chapters/00-prelude.md b/chapters/00-prelude.md index 6ac283a..71a002c 100644 --- a/chapters/00-prelude.md +++ b/chapters/00-prelude.md @@ -56,9 +56,9 @@ ## 我与GitHub的故事 -在我大四找工作的时候,试图去寻找一份硬件、物联网相关的工作(ps:专业是电子信息工程)。尽管简历上写得满满的各种经历、经验,然而并没有卵用。跑了几场校园招聘会后,十份简历(ps:事先已经有心里准备)一个也没有投出去——因为学校直接被拒。我对霸面什么的一点兴趣都没有,千里马需要伯乐。后来,我加入了[Martin Flower](https://martinfowler.com/)所在的公司,当然这是后话了。 +在我大四找工作的时候,试图去寻找一份硬件、物联网相关的工作(ps:专业是电子信息工程)。尽管简历上写得满满的各种经历、经验,然而并没有卵用。跑了几场校园招聘会后,十份简历(ps:事先已经有心里准备)一个也没有投出去——因为学校直接被拒。我对霸面什么的一点兴趣都没有,千里马需要伯乐。后来,我加入了[Martin Flower](https://martinfowler.com/)所在的公司,当然这是后话了。 -这是一个残酷的世界,在学生时代,如果你长得不帅不高的话,那么多数的附加技能都是白搭(ps:通常富的是看不到这篇文章的)。在工作时期,如果你上家没有名气,那么将会影响你下一份工作的待遇。而,很多东西却可以改变这些,GitHub就是其中一个。 +这是一个残酷的世界,在学生时代,如果你长得不帅不高的话,那么多数的附加技能都是白搭(ps:通常富的是看不到这篇文章的)。在工作时期,如果你上家没有名气,那么将会影响你下一份工作的待遇。而,很多东西却可以改变这些,GitHub就是其中一个。 注册GitHub的时候大概是大一的时候,我熟悉的时候已经是大四了,现在已经毕业一年了。在过去的近两年里,我试着以几个维度在GitHub上创建项目: @@ -70,15 +70,15 @@ ### GitHub与收获 -先说说**与技能无关的收获**吧,毕业设计做的是一个《[最小物联网系统](https://github.com/phodal/iot)》,考虑到我们专业老师没有这方面知识,答辩时会带来问题,尽量往这方面靠拢。当我毕业后,这个项目已经有过百个star了,这样易上手的东西还是比较受欢迎的(ps:不过这种硬件相关的项目通常受限于GitHub上硬件开发工程师比较少的困扰)。 +先说说**与技能无关的收获**吧,毕业设计做的是一个《[最小物联网系统](https://github.com/phodal/iot)》,考虑到我们专业老师没有这方面知识,答辩时会带来问题,尽量往这方面靠拢。当我毕业后,这个项目已经有过百个star了,这样易上手的东西还是比较受欢迎的(ps:不过这种硬件相关的项目通常受限于GitHub上硬件开发工程师比较少的困扰)。 -毕业后一个月收到PACKT出版社的邮件(ps:他们是在 GitHub 上找到我的),内容是关于Review一本[物联网](iot)书籍,即在《[从Review到翻译IT书籍](http://www.phodal.com/blog/review-it-books-with-translate-book/)》中提到的《Learning Internet of Things》。作为一个四级没过的"物联网专家",去审阅一本英文的物联网书籍。。。 +毕业后一个月收到PACKT出版社的邮件(ps:他们是在 GitHub 上找到我的),内容是关于Review一本[物联网](iot)书籍,即在《[从Review到翻译IT书籍](http://www.phodal.com/blog/review-it-books-with-translate-book/)》中提到的《Learning Internet of Things》。作为一个四级没过的"物联网专家",去审阅一本英文的物联网书籍。。。 当然,后来是审阅完了,书上有我的英文简介。 ![Phodal Huang Introduction](./img/phodal-intro.jpg) -一个月前,收到MANNING出版社的邮件(ps:也是在 GitHub 上),关于Review一本[物联网](iot)书籍的目录,并提出建议。 +一个月前,收到MANNING出版社的邮件(ps:也是在 GitHub 上),关于Review一本[物联网](iot)书籍的目录,并提出建议。 也因此带来了其他更多的东西,当然不是这里的主题。在这里,我们就不讨论各种骚扰邮件,或者中文合作。从没有想象过,我也可以在英语世界有一片小天地。 @@ -111,7 +111,7 @@ 我们可以从中获取到不同的知识、内容、信息。每个人都可以从别人的代码中学习,当我们需要构建一个库的时候,我们可以在上面寻找不同的库和代码来实现我们的功能。如当我在实现一个库的时候,我会在GitHub上找到相应的组件: - Promise 支持 -- Class类(ps:没有一个好的类使用的方式) +- Class类(ps:没有一个好的类使用的方式) - Template 一个简单的模板引擎 - Router 用来控制页面的路由 - Ajax 基本的Ajax Get/Post请求 diff --git a/chapters/02-github-fundamentals.md b/chapters/02-github-fundamentals.md index 4c38f9d..67f866e 100644 --- a/chapters/02-github-fundamentals.md +++ b/chapters/02-github-fundamentals.md @@ -141,7 +141,7 @@ git push -u origin master ## GitHub 流行项目分析 -之前曾经分析过一些GitHub的用户行为,现在我们先来说说GitHub上的Star吧。(截止:2015年3月9日23时。) +之前曾经分析过一些GitHub的用户行为,现在我们先来说说GitHub上的Star吧。(截止:2015年3月9日23时。) 用户 | 项目名 | Language | Star | Url -----|---------- |----------|------|---- diff --git a/chapters/03-build-github-project.md b/chapters/03-build-github-project.md index eabccc7..f954609 100644 --- a/chapters/03-build-github-project.md +++ b/chapters/03-build-github-project.md @@ -8,12 +8,12 @@ 显然我是在扯淡,这和敏捷软件开发没有什么关系。不过我也不知道瀑布流是怎样的。说说我所知道的一个项目的组成吧: - - 看板式管理应用程序(如trello,简单地说就是管理软件功能) - - CI(持续集成) + - 看板式管理应用程序(如trello,简单地说就是管理软件功能) + - CI(持续集成) - 测试覆盖率 - - 代码质量(code smell) + - 代码质量(code smell) -对于一个不是远程的团队(如只有一个人的项目) 来说,Trello、Jenkin、Jira不是必需的: +对于一个不是远程的团队(如只有一个人的项目)来说,Trello、Jenkin、Jira不是必需的: > 你存在,我深深的脑海里 @@ -49,7 +49,7 @@ it("specifying response when you need it", function (done) { 等等,测试是用来干什么的。那么,先说说我为什么会想去写测试吧: - - 我不希望每次做完一个个新功能的时候,再手动地去测试一个个功能。(自动化测试) + - 我不希望每次做完一个个新功能的时候,再手动地去测试一个个功能。(自动化测试) - 我不希望在重构的时候发现破坏了原来的功能,而我还一无所知。 - 我不敢push代码,因为我没有把握。 @@ -165,10 +165,10 @@ Lettuce.send = function (url, method, callback, data) { 以之前造的[Lettuce](https://github.com/phodal/lettuce)为例,里面有: - - 代码质量(Code Climate) - - CI状态(Travis CI) - - 测试覆盖率(96%) - - 自动化测试(npm test) + - 代码质量(Code Climate) + - CI状态(Travis CI) + - 测试覆盖率(96%) + - 自动化测试(npm test) - 文档 按照[Web Developer路线图](https://github.com/phodal/awesome-developer)来说,我们还需要有: @@ -377,7 +377,7 @@ describe('Book,Link', function () { }); ``` -因为我们用``require.js``来管理浏览器端,在后台写测试来测试的时候,我们也需要用他来管理我们的依赖,这也就是为什么这个测试这么长的原因,多数情况下一个测试类似于这样子的。(用Jasmine似乎会是一个更好的主意,但是用习惯Jasmine了) +因为我们用``require.js``来管理浏览器端,在后台写测试来测试的时候,我们也需要用他来管理我们的依赖,这也就是为什么这个测试这么长的原因,多数情况下一个测试类似于这样子的。(用Jasmine似乎会是一个更好的主意,但是用习惯Jasmine了) ```javascript describe('Book Test', function () { diff --git a/chapters/06-refactor-project.md b/chapters/06-refactor-project.md index 6d69748..4b6e9a2 100644 --- a/chapters/06-refactor-project.md +++ b/chapters/06-refactor-project.md @@ -50,7 +50,7 @@ while ((stra = micromarkdown.regexobject.mail.exec(str)) !== null) { 选这个做重构的开始,不仅仅是因为之前在写[EchoesWorks](https://github.com/phodal/echoesworks)的时候进行了很多的重构。而且它更适合于``重构到设计模式``的理论。让我们在重构完之后,给作者进行pull request吧。 -Markdown的解析过程,有点类似于``Pipe and Filters``模式(架构模式)。 +Markdown的解析过程,有点类似于``Pipe and Filters``模式(架构模式)。 Filter即我们在代码中看到的正规表达式集: @@ -64,7 +64,7 @@ regexobject: { 接着,我们就可以对其进行简单的重构。 -(ps:推荐用WebStrom来做重构,自带重构功能) +(ps:推荐用WebStrom来做重构,自带重构功能) 作为一个示例,我们先提出codeHandler方法,即将上面的 @@ -175,7 +175,7 @@ public class Main { } ``` -代码写得还好(自我感觉),先不管Cal和Cal2两个类。大部分都能看懂,除了c,d不知道他们表达的是什么意思,于是。 +代码写得还好(自我感觉),先不管Cal和Cal2两个类。大部分都能看懂,除了c,d不知道他们表达的是什么意思,于是。 ### Rename diff --git a/chapters/07-tdd-with-autotest.md b/chapters/07-tdd-with-autotest.md index 1abd17a..8227ecf 100644 --- a/chapters/07-tdd-with-autotest.md +++ b/chapters/07-tdd-with-autotest.md @@ -61,7 +61,7 @@ req.end(); 1. 先写功能的测试 2. 实现功能代码 -3. 提交代码(commit -> 保证功能正常) +3. 提交代码(commit -> 保证功能正常) 4. 重构功能代码 而对于这样的一个物联网项目来说,我已经有了几个有利的前提: diff --git a/chapters/11-analytics.md b/chapters/11-analytics.md index 87dce40..bdb99b5 100644 --- a/chapters/11-analytics.md +++ b/chapters/11-analytics.md @@ -509,7 +509,7 @@ osrc最有意思的一部分莫过于flann,当然说的也是系统后台的 邻近算法是在这个分析过程中一个很有意思的东西。 ->邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法可以说是整个数据挖掘分类技术中最简单的方法了。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用她最接近的k个邻居来代表。 +>邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法可以说是整个数据挖掘分类技术中最简单的方法了。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用她最接近的k个邻居来代表。 换句话说,我们需要一些样本来当作我们的分析资料,这里东西用到的就是我们之前的。 diff --git a/chapters/12-find-github-project.md b/chapters/12-find-github-project.md index a89b0ea..fe78ea4 100644 --- a/chapters/12-find-github-project.md +++ b/chapters/12-find-github-project.md @@ -1,4 +1,4 @@ -如何在GitHub"寻找灵感(fork)" +如何在GitHub"寻找灵感(fork)" === > 重造轮子是重新创造一个已有的或是已被其他人优化的基本方法。 @@ -31,7 +31,7 @@ 这时候我参考了一本电子书《Build JavaScript FrameWork》,加上一些平时的需求,于是很快的就知道自己需要什么样的功能: - Promise 支持 - - Class类(ps:没有一个好的类使用的方式) + - Class类(ps:没有一个好的类使用的方式) - Template 一个简单的模板引擎 - Router 用来控制页面的路由 - Ajax 基本的Ajax Get/Post请求 diff --git a/chapters/14-streak-your-github.md b/chapters/14-streak-your-github.md index a283f08..a58a5d1 100644 --- a/chapters/14-streak-your-github.md +++ b/chapters/14-streak-your-github.md @@ -9,7 +9,7 @@ GitHub连击 ``在不停地造轮子的过程中,也不停地造车子。`` -在那篇连续冲击365天的文章出现之前,我们公司的大大([https://github.com/dreamhead](https://github.com/dreamhead))也曾经在公司内部说过,天天commit什么的。当然这不是我的动力,在连击140天之前 +在那篇连续冲击365天的文章出现之前,我们公司的大大([https://github.com/dreamhead](https://github.com/dreamhead))也曾经在公司内部说过,天天commit什么的。当然这不是我的动力,在连击140天之前 - 给过google的``ngx_speed``、``node-coap``等项目创建过pull request - 也有``free-programming-books``、``free-programming-books-zh_CN``这样的项目。 @@ -27,7 +27,7 @@ GitHub连击 ### 40天的提升 -当时我需要去印度接受毕业生培训,大概有5周左右,想着总不能空手而归。于是在国庆结束后有了第一次commit,当时旅游归来,想着自己在不同的地方有不同的照片,于是这个repo的名字是 [onmap](https://github.com/phodal/onmap)——将自己的照片显示在地图上的拍摄地点(手机是Lumia 920)。然而,中间因为修改账号的原因,丢失了commit。 +当时我需要去印度接受毕业生培训,大概有5周左右,想着总不能空手而归。于是在国庆结束后有了第一次commit,当时旅游归来,想着自己在不同的地方有不同的照片,于是这个repo的名字是 [onmap](https://github.com/phodal/onmap)——将自己的照片显示在地图上的拍摄地点(手机是Lumia 920)。然而,中间因为修改账号的原因,丢失了commit。 再从印度说起,当时主要维护三个repo: @@ -47,13 +47,13 @@ GitHub连击 做到98%的覆盖率也算蛮拼的,当然还有Code Climate也达到了4.0,也有了112个commits。因此也带来了一些提高: -- 提高了代码的质量(code climate比jslint更注重重复代码等等一些bad smell)。 +- 提高了代码的质量(code climate比jslint更注重重复代码等等一些bad smell)。 - 对于Mock、Stub、FakesServer等用法有更好的掌握 -- 可以持续地交付软件(版本管理、自动测试、CI、部署等等) +- 可以持续地交付软件(版本管理、自动测试、CI、部署等等) ### 100天的挑战 -(ps:从印度回来之后,由于女朋友在泰国实习,有了更多的时间可以看书、写代码) +(ps:从印度回来之后,由于女朋友在泰国实习,有了更多的时间可以看书、写代码) 有意思的是越到中间的一些时间,commits的次数上去了,除了一些简单的pull request,还有一些新的轮子出现了。 @@ -77,7 +77,7 @@ GitHub连击 - 很多人用它的项目。 - 在某些可以用这个项目快速解决问题的地方提到了这个项目 - 提了bug、issue、问题。 -- 提了bug,并解决了。(ps:这是最理想的情况) +- 提了bug,并解决了。(ps:这是最理想的情况) ## 200天的Showcase @@ -232,7 +232,7 @@ GitHub连击 这让我想起了充斥着各种气味的知乎上的一些问题,在一些智商被完虐的话题里,无一不是因为那些人学得比别人早——哪来的天才?所谓的天才,应该是未来的智能生命一般,一出生什么都知道。如果并非如此,那只是说明他练习到位了。 -练习不到位便意味着,即使你练习的时候是一万小时的两倍,那也是无济于事的。如果你学得比别人晚,在**很长的一段时间里**(可能直到进棺材)输给别人是必然的——落后就要挨打。就好像我等毕业于一所二本垫底的学校里,如果在过去我一直保持着和别人(各种重点)一样的学习速度,那么我只能一直是Loser。 +练习不到位便意味着,即使你练习的时候是一万小时的两倍,那也是无济于事的。如果你学得比别人晚,在**很长的一段时间里**(可能直到进棺材)输给别人是必然的——落后就要挨打。就好像我等毕业于一所二本垫底的学校里,如果在过去我一直保持着和别人(各种重点)一样的学习速度,那么我只能一直是Loser。 需要注意的是,对你来说考上二本很难,并不是因为你比别人笨。教育资源分配不均的问题,在某种程度上导致了新的阶级制度的出现。如[我的首页](https://www.phodal.com/)说的那样:**THE ONLY FAIR IS NOT FAIR**——唯一公平的是它是不公平的。我们可以做的还有很多——**CREATE & SHARE**。真正的不幸是,因为营养不良导致的教育问题。 @@ -246,7 +246,7 @@ GitHub连击 #### 重构 -如果你懂得如何写出高可读的代码,那么我想你是不需要这个的,但是这意味着你花了更多的时候在思考上了。当谈论重构的时候,让我想起了TDD(测试驱动开发)。即使不是TDD,那么如果你写着测试,那也是可以重构的。(之前写过一些利用Intellij IDEA重构的文章:[提炼函数](https://www.phodal.com/blog/intellij-idea-refactor-extract-method/)、[以查询取代临时变量](https://www.phodal.com/blog/intellij-idea-refactor-replace-temp-with-query/)、[重构与Intellij Idea初探](https://www.phodal.com/blog/thoughtworks-refactor-and-intellij-idea/)、[内联函数](https://www.phodal.com/blog/intellij-idea-refactor-inline-method/)) +如果你懂得如何写出高可读的代码,那么我想你是不需要这个的,但是这意味着你花了更多的时候在思考上了。当谈论重构的时候,让我想起了TDD(测试驱动开发)。即使不是TDD,那么如果你写着测试,那也是可以重构的。(之前写过一些利用Intellij IDEA重构的文章:[提炼函数](https://www.phodal.com/blog/intellij-idea-refactor-extract-method/)、[以查询取代临时变量](https://www.phodal.com/blog/intellij-idea-refactor-replace-temp-with-query/)、[重构与Intellij Idea初探](https://www.phodal.com/blog/thoughtworks-refactor-and-intellij-idea/)、[内联函数](https://www.phodal.com/blog/intellij-idea-refactor-inline-method/)) 在各种各样的文章里,我们看到过一些相关的内容,最好的参考莫过于《重构》一书。最基础不过的原则便是函数名,取名字很难,取别人能读懂的名字更难。其他的便有诸如长函数、过大的类、重复代码等等。在我有限的面试别人的经历里,这些问题都是最常见的。 @@ -269,8 +269,8 @@ GitHub连击 初到TW时,Pair时候总会有人教我如何开始编码,这应该也是一项基础的能力。结合日常,重新演绎一下这个过程: 1. 有一个可衡量、可实现、过程可测的目标 -2. Tasking (即对要实现的目标过程进行分解) -3. 一步步实现 (如TDD) +2. Tasking(即对要实现的目标过程进行分解) +3. 一步步实现(如TDD) 4. 实现目标 放到当前的场景就是: @@ -285,7 +285,7 @@ GitHub连击 在上上一篇博客中《[After 500:写了第500篇博客,然后呢?](https://www.phodal.com/blog/after-500-blogposts-analytics-after-tech/)》也深刻地讨论了下这个问题,技术向来都是后发者优势。对于技术人员来说,也是如此,后发者占据很大的优势。 -如果我们只是单纯地把我们的关注点仅仅放置于技术上,那么我们就不具有任何的优势。而依赖于我们的编程经验,我们可以在特定的时候创造一些框架。而架构的设计本身就是一件有意思的事,大抵是因为程序员都喜欢创造。(ps:之前曾经写过这样一篇文章,《[对不起,我并不热爱编程,我只喜欢创造](https://www.phodal.com/blog/sorry-i-don't-like-programming/)》) +如果我们只是单纯地把我们的关注点仅仅放置于技术上,那么我们就不具有任何的优势。而依赖于我们的编程经验,我们可以在特定的时候创造一些框架。而架构的设计本身就是一件有意思的事,大抵是因为程序员都喜欢创造。(ps:之前曾经写过这样一篇文章,《[对不起,我并不热爱编程,我只喜欢创造](https://www.phodal.com/blog/sorry-i-don't-like-programming/)》) **创造是一种知识的再掌握过程。** @@ -313,7 +313,7 @@ GitHub连击 ### 其他 -是时候写这个小结了。从不会写代码,到写代码是从0到1的过程,但是要从1到60都不是一件容易的事。无论是刷GitHub也好(不要是自动提交),或者是换工作也好,我们都在不断地练习。 +是时候写这个小结了。从不会写代码,到写代码是从0到1的过程,但是要从1到60都不是一件容易的事。无论是刷GitHub也好(不要是自动提交),或者是换工作也好,我们都在不断地练习。 而练习是要分成不同的几个步骤,不仅仅局限于技术: