diff --git a/chapters/05-tdd-with-autotest.md b/chapters/05-tdd-with-autotest.md index 0252739..6063c5e 100644 --- a/chapters/05-tdd-with-autotest.md +++ b/chapters/05-tdd-with-autotest.md @@ -6,7 +6,7 @@ 偶然间在开发一个物联网相关的开源项目——[Lan](https://github.com/phodal/lan)的时候,重拾了这个过程。不得不说提到的一点是,在我们的开发流程中**测试是由相关功能开发人员写的**,有时候测试是一种很具挑战性的工作。久而久之,为自己的开源项目写测试变成一种自然而然的事。有时没有测试,反而变得**没有安全感**。 -###一次测试驱动开发 +### 一次测试驱动开发 之前正在重写一个[物联网](http://www.phodal.com/iot)的服务端,主要便是结合CoAP、MQTT、HTTP等协议构成一个物联网的云服务。现在,主要的任务是集中于协议与授权。由于,不同协议间的授权是不一样的,最开始的时候我先写了一个http put授权的功能,而在起先的时候是如何测试的呢? diff --git a/chapters/07-github-marketing.md b/chapters/07-github-marketing.md index 893c646..dfe5969 100644 --- a/chapters/07-github-marketing.md +++ b/chapters/07-github-marketing.md @@ -33,7 +33,7 @@ Vue 不是因为好用,而一下子火了。这一点我印象特别深,当 除此,还有一种可能是,你的 ID 不够 fancy,即你在社区的影响上比较少。此时,就需要**一点点慢慢积累人气**了。当你积累了一些人气,你就能和松本行弘一样,在创建 mRuby 的时候就有 1000+ 的 star。并且,在社区上还有一些相关的文章介绍,各个头条也由他的粉丝发了上去。如,一年多以前,我创建了 [mole](https://github.com/phodal/mole) 项目。 -![Mole](mole.png) +![Mole](./img/mole.png) 当时,是为了给自己做一个基于 GitHub 云笔记的工具,在完成度到一定程度的时候。我在我的微信公从号上发了相关的介绍,第二天就有 100+ 的 star 了,还接收至最一些鼓舞的话语。对应于国内则有: @@ -46,7 +46,7 @@ Vue 不是因为好用,而一下子火了。这一点我印象特别深,当 所以,你觉得呢? -编写 README +编写一个好的 README --- 在一个开源项目里,README 是最重要的内容。它快速地介绍了这个项目,并决定了它能不能吸引用户: @@ -101,35 +101,80 @@ numbers, objects, strings, etc. Lodash’s modular methods are great for: 你会怎么写? -### hello, world 示例 +### 安装及hello, world 示例 -在我们看完了上面的介绍之后,紧接着就是一个 hello, world 的示例。如 React 的示例: +在我们看完了上面的介绍之后,紧接着接一个 hello, world 的示例。在运行 hello, world 之前,我们可能需要一些额外的安装工作,如: ``` -class HelloMessage extends React.Component { - render() { - return
Hello {this.props.name}
; - } -} - -ReactDOM.render( - , - document.getElementById('container') -); +npm install koa ``` -这个 +如 Koa 的示例: -技术文档——手把手教会别人 ---- - - -示例程序 ---- - - - -吸引贡献者 +``` +const Koa = require('koa'); +const app = new Koa(); + +// response +app.use(ctx => { + ctx.body = 'Hello Koa'; +}); + +app.listen(3000); +``` + +作为一个程序员,你应该懂得它的重要性。 + +好在这里的安装工作只有两步,而不是: + +![Lan 安装过程](./img/lan-example.png) + +对于那些需要复杂的安装过程的软件,应该简化安装过程,如提供 Docker 镜像,或者直接提供一个可运行的 Demo 环境。以免用户在看完 README 之后,直接放弃了使用该库。 + +技术文档 +--- + +好了,依一个开发人员的角度,如果上面的步骤一切顺利的话,接下来,便是使用这个开源项目来完成我们的功能。这个时候,我们开始转移注意力到文档上了。 + +由于,之前在某一个项目,经历过一个第三方 API 文档的大坑——文档中只罗列了 API 的用法。如下 Intellij Idea 生成的结构图: + +![API 示例](./img/api-examples.png) + +文档中上,罗列了每个函数,以及每个函数需要的参数。我使用 Intellij Idea 直接反编译 jar 包,看到的信息都比文档多多了。文档上,没有任务示例,甚至连怎么初始化这个库的代码都没有。 + +WTF! + +### 技术文档 + +对于一个复杂的开源项目来说,文档上要写明安装、编译、配置等等的过程。如下图所示: + +![Python Social Auth 文档](./img/python-social-auth-example.png) + +并且在我们发布包的时候,就要不断地去重复这个过程——如果你使用了自动化测试,那么这个过程便自动完成了。 + +如果我们的项目使用起来相当的简单,那么我们就可以只写一些示例代码即可。 + +并且,我们可以将文档直接入到代码里。它可以有效地减少文档不同步,带来的一些问题。 + +![Lodash 示例](./img/lodash-code-example.png) + +上图是使用了 jsdoc 的 Lodash 示例。 + +### 更多的示例程序 + +示例代码本身也是文档的一部分,不要问我为什么~~。 + +反正,除了一个 hello, world,你还要有各种场景下的示例: + +![Redux](./img/redux-examples.png) + +没有这么多示例,敢说自己是好用的开源项目? + +### 编写技术文章 + + + +鼓励、吸引贡献者 --- diff --git a/github-roam.md b/github-roam.md index 577c173..9021845 100644 --- a/github-roam.md +++ b/github-roam.md @@ -940,7 +940,7 @@ SQLiteHelper.prototype.getData = function (url, callback) { 偶然间在开发一个物联网相关的开源项目——[Lan](https://github.com/phodal/lan)的时候,重拾了这个过程。不得不说提到的一点是,在我们的开发流程中**测试是由相关功能开发人员写的**,有时候测试是一种很具挑战性的工作。久而久之,为自己的开源项目写测试变成一种自然而然的事。有时没有测试,反而变得**没有安全感**。 -###一次测试驱动开发 +### 一次测试驱动开发 之前正在重写一个[物联网](http://www.phodal.com/iot)的服务端,主要便是结合CoAP、MQTT、HTTP等协议构成一个物联网的云服务。现在,主要的任务是集中于协议与授权。由于,不同协议间的授权是不一样的,最开始的时候我先写了一个http put授权的功能,而在起先的时候是如何测试的呢? @@ -1619,7 +1619,7 @@ Vue 不是因为好用,而一下子火了。这一点我印象特别深,当 除此,还有一种可能是,你的 ID 不够 fancy,即你在社区的影响上比较少。此时,就需要**一点点慢慢积累人气**了。当你积累了一些人气,你就能和松本行弘一样,在创建 mRuby 的时候就有 1000+ 的 star。并且,在社区上还有一些相关的文章介绍,各个头条也由他的粉丝发了上去。如,一年多以前,我创建了 [mole](https://github.com/phodal/mole) 项目。 -![Mole](mole.png) +![Mole](./img/mole.png) 当时,是为了给自己做一个基于 GitHub 云笔记的工具,在完成度到一定程度的时候。我在我的微信公从号上发了相关的介绍,第二天就有 100+ 的 star 了,还接收至最一些鼓舞的话语。对应于国内则有: @@ -1632,7 +1632,7 @@ Vue 不是因为好用,而一下子火了。这一点我印象特别深,当 所以,你觉得呢? -编写 README +编写一个好的 README --- 在一个开源项目里,README 是最重要的内容。它快速地介绍了这个项目,并决定了它能不能吸引用户: @@ -1687,35 +1687,80 @@ numbers, objects, strings, etc. Lodash’s modular methods are great for: 你会怎么写? -### hello, world 示例 +### 安装及hello, world 示例 -在我们看完了上面的介绍之后,紧接着就是一个 hello, world 的示例。如 React 的示例: +在我们看完了上面的介绍之后,紧接着接一个 hello, world 的示例。在运行 hello, world 之前,我们可能需要一些额外的安装工作,如: ``` -class HelloMessage extends React.Component { - render() { - return
Hello {this.props.name}
; - } -} - -ReactDOM.render( - , - document.getElementById('container') -); +npm install koa ``` -这个 +如 Koa 的示例: -技术文档——手把手教会别人 +``` +const Koa = require('koa'); +const app = new Koa(); + +// response +app.use(ctx => { + ctx.body = 'Hello Koa'; +}); + +app.listen(3000); +``` + +作为一个程序员,你应该懂得它的重要性。 + +好在这里的安装工作只有两步,而不是: + +![Lan 安装过程](./img/lan-example.png) + +对于那些需要复杂的安装过程的软件,应该简化安装过程,如提供 Docker 镜像,或者直接提供一个可运行的 Demo 环境。以免用户在看完 README 之后,直接放弃了使用该库。 + +技术文档 --- +好了,依一个开发人员的角度,如果上面的步骤一切顺利的话,接下来,便是使用这个开源项目来完成我们的功能。这个时候,我们开始转移注意力到文档上了。 -示例程序 ---- +由于,之前在某一个项目,经历过一个第三方 API 文档的大坑——文档中只罗列了 API 的用法。如下 Intellij Idea 生成的结构图: + +![API 示例](./img/api-examples.png) + +文档中上,罗列了每个函数,以及每个函数需要的参数。我使用 Intellij Idea 直接反编译 jar 包,看到的信息都比文档多多了。文档上,没有任务示例,甚至连怎么初始化这个库的代码都没有。 + +WTF! + +### 技术文档 + +对于一个复杂的开源项目来说,文档上要写明安装、编译、配置等等的过程。如下图所示: + +![Python Social Auth 文档](./img/python-social-auth-example.png) + +并且在我们发布包的时候,就要不断地去重复这个过程——如果你使用了自动化测试,那么这个过程便自动完成了。 + +如果我们的项目使用起来相当的简单,那么我们就可以只写一些示例代码即可。 + +并且,我们可以将文档直接入到代码里。它可以有效地减少文档不同步,带来的一些问题。 + +![Lodash 示例](./img/lodash-code-example.png) + +上图是使用了 jsdoc 的 Lodash 示例。 + +### 更多的示例程序 + +示例代码本身也是文档的一部分,不要问我为什么~~。 + +反正,除了一个 hello, world,你还要有各种场景下的示例: + +![Redux](./img/redux-examples.png) + +没有这么多示例,敢说自己是好用的开源项目? + +### 编写技术文章 -吸引贡献者 +鼓励、吸引贡献者 --- diff --git a/img/api-examples.png b/img/api-examples.png new file mode 100644 index 0000000..f10ba45 Binary files /dev/null and b/img/api-examples.png differ diff --git a/img/lan-example.png b/img/lan-example.png new file mode 100644 index 0000000..9a8a396 Binary files /dev/null and b/img/lan-example.png differ diff --git a/img/lodash-code-example.png b/img/lodash-code-example.png new file mode 100644 index 0000000..70521a3 Binary files /dev/null and b/img/lodash-code-example.png differ diff --git a/img/python-social-auth-example.png b/img/python-social-auth-example.png new file mode 100644 index 0000000..39c98db Binary files /dev/null and b/img/python-social-auth-example.png differ diff --git a/img/redux-examples.png b/img/redux-examples.png new file mode 100644 index 0000000..be6d7e5 Binary files /dev/null and b/img/redux-examples.png differ diff --git a/index.html b/index.html index 33950e8..666640d 100644 --- a/index.html +++ b/index.html @@ -148,15 +148,18 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
  • 如何推广
    • Marketing First
    • -
    • 编写 README
    • 开源项目维护
    • 如何以“正确的姿势”阅读开源软件代码
        @@ -1601,7 +1604,7 @@ public class replaceTemp {

        这一点相当的有意思,如果你的想法好的话,那么大家都会肯定,点下链接,为你来个 star。那么,你就获得更好的动力去做这件事。项目也在开头的时候,获得了相当多的关注。而如果大家觉得你的项目没有新意的话,那么你懂的~。

        除此,还有一种可能是,你的 ID 不够 fancy,即你在社区的影响上比较少。此时,就需要一点点慢慢积累人气了。当你积累了一些人气,你就能和松本行弘一样,在创建 mRuby 的时候就有 1000+ 的 star。并且,在社区上还有一些相关的文章介绍,各个头条也由他的粉丝发了上去。如,一年多以前,我创建了 mole 项目。

        -Mole
        Mole
        +Mole
        Mole

        当时,是为了给自己做一个基于 GitHub 云笔记的工具,在完成度到一定程度的时候。我在我的微信公从号上发了相关的介绍,第二天就有 100+ 的 star 了,还接收至最一些鼓舞的话语。对应于国内则有:

          @@ -1613,7 +1616,7 @@ public class replaceTemp {
        • 不成器的微博

        所以,你觉得呢?

        -

        编写 README

        +

        编写一个好的 README

        在一个开源项目里,README 是最重要的内容。它快速地介绍了这个项目,并决定了它能不能吸引用户:

        • 这个项目做什么?
        • @@ -1655,22 +1658,54 @@ public class replaceTemp {
        • Creating composite functions

        你会怎么写?

        -

        hello, world 示例

        -

        在我们看完了上面的介绍之后,紧接着就是一个 hello, world 的示例。如 React 的示例:

        -
        class HelloMessage extends React.Component {
        -  render() {
        -    return <div>Hello {this.props.name}</div>;
        -  }
        -}
        +

        安装及hello, world 示例

        +

        在我们看完了上面的介绍之后,紧接着接一个 hello, world 的示例。在运行 hello, world 之前,我们可能需要一些额外的安装工作,如:

        +
        npm install koa
        +

        如 Koa 的示例:

        +
        const Koa = require('koa');
        +const app = new Koa();
         
        -ReactDOM.render(
        -  <HelloMessage name="John" />,
        -  document.getElementById('container')
        -);
        -

        这个

        -

        技术文档——手把手教会别人

        -

        示例程序

        -

        吸引贡献者

        +// response +app.use(ctx => { + ctx.body = 'Hello Koa'; +}); + +app.listen(3000);
        +

        作为一个程序员,你应该懂得它的重要性。

        +

        好在这里的安装工作只有两步,而不是:

        +
        +Lan 安装过程
        Lan 安装过程
        +
        +

        对于那些需要复杂的安装过程的软件,应该简化安装过程,如提供 Docker 镜像,或者直接提供一个可运行的 Demo 环境。以免用户在看完 README 之后,直接放弃了使用该库。

        +

        技术文档

        +

        好了,依一个开发人员的角度,如果上面的步骤一切顺利的话,接下来,便是使用这个开源项目来完成我们的功能。这个时候,我们开始转移注意力到文档上了。

        +

        由于,之前在某一个项目,经历过一个第三方 API 文档的大坑——文档中只罗列了 API 的用法。如下 Intellij Idea 生成的结构图:

        +
        +API 示例
        API 示例
        +
        +

        文档中上,罗列了每个函数,以及每个函数需要的参数。我使用 Intellij Idea 直接反编译 jar 包,看到的信息都比文档多多了。文档上,没有任务示例,甚至连怎么初始化这个库的代码都没有。

        +

        WTF!

        +

        技术文档

        +

        对于一个复杂的开源项目来说,文档上要写明安装、编译、配置等等的过程。如下图所示:

        +
        +Python Social Auth 文档
        Python Social Auth 文档
        +
        +

        并且在我们发布包的时候,就要不断地去重复这个过程——如果你使用了自动化测试,那么这个过程便自动完成了。

        +

        如果我们的项目使用起来相当的简单,那么我们就可以只写一些示例代码即可。

        +

        并且,我们可以将文档直接入到代码里。它可以有效地减少文档不同步,带来的一些问题。

        +
        +Lodash 示例
        Lodash 示例
        +
        +

        上图是使用了 jsdoc 的 Lodash 示例。

        +

        更多的示例程序

        +

        示例代码本身也是文档的一部分,不要问我为什么~~。

        +

        反正,除了一个 hello, world,你还要有各种场景下的示例:

        +
        +Redux
        Redux
        +
        +

        没有这么多示例,敢说自己是好用的开源项目?

        +

        编写技术文章

        +

        鼓励、吸引贡献者

        开源项目维护

        如何以“正确的姿势”阅读开源软件代码