Skip to content

Commit 152c11f

Browse files
committed
docs: fix remove unsued prelude
1 parent b500e6d commit 152c11f

File tree

3 files changed

+1428
-1005
lines changed

3 files changed

+1428
-1005
lines changed

chapters/00-prelude.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,6 @@
4040

4141
![作者微信公众号:phodal-weixin](./img/wechat.jpg)
4242

43-
支持作者,可以加入作者的小密圈:
44-
45-
![小密圈](./img/xiaomiquan.jpg)
46-
47-
或者转账:
48-
49-
![支付宝](./img/alipay.png) ![微信](./img/wechat-pay.png)
50-
5143
我的 GitHub 主页上写着加入的时间——``Joined on Nov 8, 2010``,那时才大一,在那之后的那么长的日子里我都没有登录过。也许是因为我学的不是计算机,到了今天——``2015.3.9``,我才发现这其实是程序员的社交网站。
5244

5345
过去,曾经有很长的一些时间我试过在 GitHub 上连击,也试着去了解别人是如何用好这个工具的。当然粉丝在 GitHub 上也是很重要的。

github-roam.md

Lines changed: 213 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,6 @@
4141

4242
![作者微信公众号:phodal-weixin](./img/wechat.jpg)
4343

44-
支持作者,可以加入作者的小密圈:
45-
46-
![小密圈](./img/xiaomiquan.jpg)
47-
48-
或者转账:
49-
50-
![支付宝](./img/alipay.png) ![微信](./img/wechat-pay.png)
51-
5244
我的 GitHub 主页上写着加入的时间——``Joined on Nov 8, 2010``,那时才大一,在那之后的那么长的日子里我都没有登录过。也许是因为我学的不是计算机,到了今天——``2015.3.9``,我才发现这其实是程序员的社交网站。
5345

5446
过去,曾经有很长的一些时间我试过在 GitHub 上连击,也试着去了解别人是如何用好这个工具的。当然粉丝在 GitHub 上也是很重要的。
@@ -127,6 +119,213 @@
127119

128120
如果我们想创造出更好、强大地框架时,那么认识更多的人可能会带来更多的帮助。有时候会同上面那一点一样的效果
129121

122+
#介绍
123+
124+
##Github
125+
126+
Wiki百科上是这么说的
127+
128+
> GitHub 是一个共享虚拟主机服务,用于存放使用Git版本控制的软件代码和内容项目。它由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath、PJ Hyett和Tom Preston-Werner
129+
使用Ruby on Rails编写而成。
130+
131+
当然让我们看看官方的介绍:
132+
133+
> GitHub is the best place to share code with friends, co-workers, classmates, and complete strangers. Over eight million people use GitHub to build amazing things together.
134+
135+
136+
它还是什么?
137+
138+
- 网站
139+
- 免费博客
140+
- 管理配置文件
141+
- 收集资料
142+
- 简历
143+
- 管理代码片段
144+
- 托管编程环境
145+
- 写作
146+
147+
等等。看上去像是大餐,但是你还需要了解点什么?
148+
149+
###版本管理与软件部署
150+
151+
jQuery[^jQuery]在发布版本``2.1.3``,一共有152个commit。我们可以看到如下的提交信息:
152+
153+
- Ajax: Always use script injection in globalEval … bbdfbb4
154+
- Effects: Reintroduce use of requestAnimationFrame … 72119e0
155+
- Effects: Improve raf logic … 708764f
156+
- Build: Move test to appropriate module fbdbb6f
157+
- Build: Update commitplease dev dependency
158+
- ...
159+
160+
###Github与Git
161+
162+
> Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。目前,包括Rubinius、Merb和Bitcoin在内的很多知名项目都使用了Git。Git同样可以被诸如Capistrano和Vlad the Deployer这样的部署工具所使用。
163+
164+
> GitHub可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。已经有人将GitHub称为代码玩家的MySpace。
165+
166+
[^jQuery]: jQuery是一套跨浏览器的JavaScript库,简化HTML与JavaScript之间的操作。
167+
168+
##用好Github
169+
170+
如何用好Github,并实践一些敏捷软件开发是一个很有意思的事情.我们可以在上面做很多事情,从测试到CI,再到自动部署.
171+
172+
###敏捷软件开发
173+
174+
显然我是在扯淡,这和敏捷软件开发没有什么关系。不过我也不知道瀑布流是怎样的。说说我所知道的一个项目的组成吧:
175+
176+
- 看板式管理应用程序(如trello,简单地说就是管理软件功能)
177+
- CI(持续集成)
178+
- 测试覆盖率
179+
- 代码质量(code smell)
180+
181+
对于一个不是远程的团队(如只有一个人的项目) 来说,Trello、Jenkin、Jira不是必需的:
182+
183+
> 你存在,我深深的脑海里
184+
185+
当只有一个人的时候,你只需要明确知道自己想要什么就够了。我们还需要的是CI、测试,以来提升代码的质量。
186+
187+
###测试
188+
189+
通常我们都会找Document,如果没有的话,你会找什么?看源代码,还是看测试?
190+
191+
```javascript
192+
it("specifying response when you need it", function (done) {
193+
var doneFn = jasmine.createSpy("success");
194+
195+
lettuce.get('/some/cool/url', function (result) {
196+
expect(result).toEqual("awesome response");
197+
done();
198+
});
199+
200+
expect(jasmine.Ajax.requests.mostRecent().url).toBe('/some/cool/url');
201+
expect(doneFn).not.toHaveBeenCalled();
202+
203+
jasmine.Ajax.requests.mostRecent().respondWith({
204+
"status": 200,
205+
"contentType": 'text/plain',
206+
"responseText": 'awesome response'
207+
});
208+
});
209+
```
210+
211+
代码来源: [https://github.com/phodal/lettuce](https://github.com/phodal/lettuce)
212+
213+
上面的测试用例,清清楚楚地写明了用法,虽然写得有点扯。
214+
215+
等等,测试是用来干什么的。那么,先说说我为什么会想去写测试吧:
216+
217+
- 我不希望每次做完一个个新功能的时候,再手动地去测试一个个功能。(自动化测试)
218+
- 我不希望在重构的时候发现破坏了原来的功能,而我还一无所知。
219+
- 我不敢push代码,因为我没有把握。
220+
221+
虽然,我不是TDD的死忠,测试的目的是保证功能正常,TDD没法让我们写出质量更高的代码。但是有时TDD是不错的,可以让我们写出逻辑更简单地代码。
222+
223+
也许你已经知道了``Selenium````Jasmine````Cucumber``等等的框架,看到过类似于下面的测试
224+
225+
```
226+
Ajax
227+
✓ specifying response when you need it
228+
✓ specifying html when you need it
229+
✓ should be post to some where
230+
Class
231+
✓ respects instanceof
232+
✓ inherits methods (also super)
233+
✓ extend methods
234+
Effect
235+
✓ should be able fadein elements
236+
✓ should be able fadeout elements
237+
```
238+
239+
代码来源: [https://github.com/phodal/lettuce](https://github.com/phodal/lettuce)
240+
241+
看上去似乎每个测试都很小,不过补完每一个测试之后我们就得到了测试覆盖率
242+
243+
File | Statements | Branches | Functions | Lines
244+
-----|------------|----------|-----------|------
245+
lettuce.js | 98.58% (209 / 212)| 82.98%(78 / 94) | 100.00% (54 / 54) | 98.58% (209 / 212)
246+
247+
本地测试都通过了,于是我们添加了``Travis-CI``来跑我们的测试
248+
249+
###CI
250+
251+
虽然node.js不算是一门语言,但是因为我们用的node,下面的是一个简单的``.travis.yml``示例:
252+
253+
```yml
254+
language: node_js
255+
node_js:
256+
- "0.10"
257+
258+
notifications:
259+
email: false
260+
261+
before_install: npm install -g grunt-cli
262+
install: npm install
263+
after_success: CODECLIMATE_REPO_TOKEN=321480822fc37deb0de70a11931b4cb6a2a3cc411680e8f4569936ac8ffbb0ab codeclimate < coverage/lcov.info
264+
```
265+
266+
代码来源: [https://github.com/phodal/lettuce](https://github.com/phodal/lettuce)
267+
268+
我们把这些集成到``README.md``之后,就有了之前那张图。
269+
270+
CI对于一个开发者在不同城市开发同一项目上来说是很重要的,这意味着当你添加的部分功能有测试覆盖的时候,项目代码会更加强壮。
271+
272+
###代码质量
273+
274+
``jslint``这类的工具,只能保证代码在语法上是正确的,但是不能保证你没有写一堆bad smell的代码。
275+
276+
- 重复代码
277+
- 过长的函数
278+
- 等等
279+
280+
``Code Climate``是一个与github集成的工具,我们不仅仅可以看到测试覆盖率,还有代码质量。
281+
282+
先看看上面的ajax类:
283+
284+
```javascript
285+
Lettuce.get = function (url, callback) {
286+
Lettuce.send(url, 'GET', callback);
287+
};
288+
289+
Lettuce.send = function (url, method, callback, data) {
290+
data = data || null;
291+
var request = new XMLHttpRequest();
292+
if (callback instanceof Function) {
293+
request.onreadystatechange = function () {
294+
if (request.readyState === 4 && (request.status === 200 || request.status === 0)) {
295+
callback(request.responseText);
296+
}
297+
};
298+
}
299+
request.open(method, url, true);
300+
if (data instanceof Object) {
301+
data = JSON.stringify(data);
302+
request.setRequestHeader('Content-Type', 'application/json');
303+
}
304+
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
305+
request.send(data);
306+
};
307+
```
308+
309+
代码来源: [https://github.com/phodal/lettuce](https://github.com/phodal/lettuce)
310+
311+
[Code Climate](https://codeclimate.com/github/phodal/lettuce/src/ajax.js)在出现了一堆问题
312+
313+
- Missing "use strict" statement. (Line 2)
314+
- Missing "use strict" statement. (Line 14)
315+
- 'Lettuce' is not defined. (Line 5)
316+
317+
而这些都是小问题啦,有时可能会有
318+
319+
- Similar code found in two :expression_statement nodes (mass = 86)
320+
321+
这就意味着我们可以对上面的代码进行重构,他们是重复的代码。
322+
323+
###重构
324+
325+
不想在这里说太多关于``重构``的东西,可以参考Martin Flower的《重构》一书去多了解一些重构的细节。
326+
327+
这时想说的是,只有代码被测试覆盖住了,那么才能保证重构的过程没有出错。
328+
130329
创建开源项目
131330
===
132331

@@ -745,7 +944,7 @@ branches:
745944

746945
最后的 ``test/spec`` 是指定测试的目录。
747946

748-
### Jshint
947+
### JSLint
749948

750949
> JSLint定义了一组编码约定,这比ECMA定义的语言更为严格。这些编码约定汲取了多年来的丰富编码经验,并以一条年代久远的编程原则 作为宗旨:能做并不意味着应该做。JSLint会对它认为有的编码实践加标志,另外还会指出哪些是明显的错误,从而促使你养成好的 JavaScript编码习惯。
751950
@@ -1031,7 +1230,7 @@ Git 提交信息及几种不同的规范
10311230
开源应用、开源库写法
10321231
---
10331232
1034-
与我们日常工作稍有不同的是:工作中的 Release 计划一般都是事先安排好的,不需要一些 CHANGELOG 什么的。而开源应用、开源库需要有对应的 CHANELOG,则添加了什么功能、修改了什么等等。毕竟有很多东西是由社区来维护的。
1233+
与我们日常工作稍有不同的是:工作中的 Release 计划一般都是事先安排好的,不需要一些 CHANGELOG 什么的。而开源应用、开源库需要有对应的 CHANGELOG,则添加了什么功能、修改了什么等等。毕竟有很多东西是由社区来维护的。
10351234
10361235
因此,这里以做得比较好的开源项目 Angular 为例展示。Angular 团队建议采用以下的形式:
10371236
@@ -1201,6 +1400,7 @@ regexobject: {
12011400
code: /\s\`\`\`\n?([^`]+)\`\`\`/g
12021401
```
12031402
1403+
他会匹配对应的 Markdown 类型,随后进行替换和处理。而``str``,就是管理口的输入和输出。
12041404
他会匹配对应的 Markdown 类型,随后进行替换和处理。而``str``,就是管理口的输入和输出。
12051405
12061406
接着,我们就可以对其进行简单的重构。
@@ -1530,7 +1730,7 @@ public class replaceTemp {
15301730
便会有下面的结果:
15311731
15321732
1533-
```javas
1733+
```java
15341734
import java.lang.String;
15351735

15361736
public class replaceTemp {
@@ -2201,7 +2401,7 @@ minuteswithcount = [(x, dataarray.count(x)) for x in set(dataarray)]
22012401
22022402
### Matplotlib
22032403
2204-
开始之前需要安装``matplotlib
2404+
开始之前需要安装`matplotlib`
22052405
22062406
```bash
22072407
sudo pip install matplotlib
@@ -3559,7 +3759,7 @@ GitHub 里程碑
35593759

35603760
# GitHub 寻宝指南
35613761

3562-
作为一个资深的咨询师、程序员,GitHub 是我用过的最好工具,因为 Google 并非总是那么用。GitHub 是一个宝藏库,可没有藏宝图,GitHub 一1亿的仓库也和你没有关系。这么一些年下来,也算是掌握了一定的技巧,写篇文章记录一下,也就顺其自然了。
3762+
作为一个资深的咨询师、程序员,GitHub 是我用过的最好工具,因为 Google 并非总是那么好用。GitHub 是一个宝藏库,可没有藏宝图,GitHub 一1亿的仓库也和你没有关系。这么一些年下来,也算是掌握了一定的技巧,写篇文章记录一下,也就顺其自然了。
35633763

35643764
总结一句话便是:GitHub 来搜索 Google 搜索不到的。它们可以 work 的原因,都是因为**我们想做的事情,已经有人已经走过**。如果你走的是一条新的路,那么这篇文章对你来说,意义可能没有那么大。
35653765

0 commit comments

Comments
 (0)