持续集成教程 1 通识科普
· ☕ 2 分钟 · ✍️ ice1000

本教程系列将以 Travis CI 为主,我也不知道以后会不会讲 AppVeyor ,我也不知道以后会不会讲 Circle CI 和 CodeShip 。
这篇文章你可以把它当成一个索引,我给出了使用 Travis 需要阅读的内容,读者可以根据自己的需求选择阅读文档的特定部分。

CI 能做啥

  • 能帮你在云端自动编译项目
  • 每次你推送代码就会触发编译
  • 可以保留编译生成的目标文件
  • 自动上传 release
  • 编译失败发邮件提醒你
  • 编译失败发 Slack 消息提醒你

等等功能(这些都是最基本的)

混开源社区的 friends 喜欢使用一些现有的 CI 服务,比如 Travis, AppVeyor, Circle CI, CodeShip 等,
公司企业喜欢自己写 CI 自己用,因为这本来就是个高度定制的东西,要是你能提供高度定制的环境(比如装好了依赖的服务器)
当然做 CI 就超级简单了。

但是我们是混开源社区的 friends ,所以没有这种操作,首选当然是 Travis CI 。

理由: Linux + 自动部署


可移植的 Makefile 教程
· ☕ 12 分钟 · ✍️ liuchengxu

在我写 Makefile 的头 10 年里,我养成了一个非常不好的习惯

– 完全严格使用 GNU Make 的扩展名。过去我并不知道, GNU Make 与 POSIX 所保证的可移植特性之间的区别与联系。通常情况,它并不十分重要,但是当在非 Linux 系统上进行构建时,比如在各种 BSD 系统上,就会变成一件麻烦事儿。我不得不指定安装 GNU Make,然后在心里记住不要使用系统自带的 make ,而是使用 gmake 这样的工具来调用它。

我已经对 make 官方规范 十分熟悉,并且在过去的一年,我都在严格要求自己编写可移植的 Makefile。现在,我的构建不仅可以在各种类 unix 的系统之间进行移植,而且 Makefile 看起来更清晰与健壮。许多常见的 make 扩展名 – 尤其是条件判断 – 会导致不够健壮的却又复杂的 Makefile, 因此最好避免这些情况。能够确信你的构建系统能够各司其职,正常工作是非常重要的。

本指南不仅适用于之前从来没有写过 Makefile 的 make 初学者,同样适用于想要学习如何写出可移植 Makefile 的资深开发者。 但不管怎样,为了能够理解文中的示例,你必须首先对命令行(编译器,链接器,目标文件等等)构建程序的常规步骤十分熟悉。我不会建议使用任何花哨的技巧,也不会提供任何标准的初学者模板。当项目不大的时候,Makefile 应该是相当的简单,并且随着项目的成长,以一种可预见,清晰的方式不断丰富。

我不会覆盖 make 的每一个特性。如果想要学习所有完整的内容,你需要自行阅读它的规范。本指南将会详细讨论一些重要特性和约定俗成的规定。遵守已有的约定是非常重要的,这样使用你的 Makefile 的其他人,才能知道它能够完成和如何完成一些基本的任务。

如果你的系统是 Debian, 或是基于 Debian 的系统,比如 Ubuntu,bmakefreebsd-buildutils 包将会分别提供 bmakefmake 程序。这些可供选择的 make 实现,对于测试 Makefile 的可移植性十分有用,尤其是当你不小心使用了 GNU Make 的特性。虽然每个实现都实现了与 GNU Make 完全相同的一些扩展,但是它会捕获一些常见的错误。


使用flv.js做直播
· ☕ 6 分钟 · ✍️ 浩麟

为什么要在这个时候探索flv.js做直播呢?原因在于各大浏览器厂商已经默认禁用Flash,之前常见的Flash直播方案需要用户同意使用Flash后才可以正常使用直播功能,这样的用户体验很致命。

在介绍flv.js之前先介绍下常见的直播协议以及给出我对它们的延迟与性能所做的测试得出的数据。
如果你看的很吃力可以先了解下音视频技术的一些 基础概念


Linux 中 profile,bashrc,bash_profile等的区别
· ☕ 2 分钟 · ✍️ 茶歇驿站
这是一篇有关环境变量加载的入门介绍(不太确定)。

/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 /etc/profile.d 目录的配置文件中收集 shell 的设置。如果你有对 /etc/profile 有修改的话必须得 source 一下 你的修改才会生效,此修改对每个用户都生效。

/etc/bashrc: 为每一个运行 bash shell 的用户执行此文件。当 bash shell 被打开时,该文件被读取。如果你想对所有的使用 bash 的用户修改某个配置并在以后打开的 bash 都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个 bash 即可生效。

~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的 .bashrc 文件。
此文件类似于 /etc/profile,也是需要需要 source 才会生效,/etc/profile 对所有用户生效,~/.bash_profile 只对当前用户生效。

~/.bashrc: 该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该文件被读取。(每个用户都有一个 .bashrc 文件,在用户目录下)
此文件类似于 /etc/bashrc,不需要重启就可以生效,重新打开一个 bash 即可生效,/etc/bashrc 对所有用户新打开的 bash 都生效,但 ~/.bashrc 只对当前用户新打开的 bash 生效。

~/.bash_logout: 当每次退出系统(退出 bash shell)时,执行该文件。


为 Github Pages 自定义域名博客开启 HTTPS
· ☕ 2 分钟 · ✍️ starifly
这是转载文章。

为什么要使用 HTTPS 协议呢?

  • 在浏览器和网站之间提供更安全的通讯
  • HTTPS 比 HTTP 的速度更快
  • 能提高搜索引擎的优化排名

HTTPS 协议的网站在地址栏前会有绿色锁的图标,感觉有点逼格,就冲着这点,果断 HTTPS 走起。

Github Pages 本身支持 HTTPS,但仅支持 github.io 域名。如果绑定了自己的域名,就不支持 HTTPS 了。幸运的是,CloudFlare 提供免费的启用 HTTPS 的解决方案。


使用CMake编译跨平台静态库
· ☕ 5 分钟 · ✍️ 0owen

在开始介绍如何使用CMake编译跨平台的静态库之前,先讲讲我在没有使用CMake之前所趟过的坑。因为很多开源的程序,比如png,都是自带编译脚本的。我们可以使用下列脚本来进行编译:

./configure  --prefix=/xxx/xx --enable-static=YES
make 
make install

相信手动在类Unix系统上面编译过开源程序的同学对上面的命令肯定非常熟悉。但是,如果不配置编译器和一些编译、链接参数,这样的操作,最后编译出来的静态库只能在本系统上面被链接使用。比如你在mac上面运行上面的命令,编译出来的静态库就只能给mac程序链接使用。如果在Linux上面运行上述命令,则也只能给Linux上面的程序所链接使用。如果我们想要在Mac上面编译出ios和android的静态库,就必须要用到交叉编译。


一套交叉编译脚本
· ☕ 4 分钟 · ✍️ 0owen

现在移动平台非常火热,我们在使用C/C++开发一些移动应用的时候,经常可能需要将一些第三方c/c++库编译成对应的iOS/Android/WP/Tizen上面的静态库。
之前我介绍过 如何使用CMake来编译跨平台库
那种方法有一个局限性,它只针对一些提供了CMake支持或者源码本身不需要configure的库来说,使用会非常方便,但是如果库本身没有提供CMake或者
在编译之前需要configure的库,使用起来就会很麻烦了。最好的做法,其实是重用它本身提供的编译系统,然后提供交叉编译所需要的一些参数即可。


使用Webhook和Github实现hugo的自动部署
· ☕ 2 分钟 · ✍️ zhoucaiqi@gmail.com

之前 《通过github和caddy实现hugo的自动部署》,使用的是 caddy 的 http.git 插件。最近发现,那方法不管用了,不知道原因。

所以决定使用传统的 webhook 。原理是:在 vps 运行 webhook 监听程序,github 收到 push 事件后,

就通知该监听程序,由该监听程序执行相应的命令。现在记录一下。



点击屏幕右上角的 ···
在弹出的窗口中选择 在浏览器中打开