Happy Hacking!

May 22 2017
叮当:一个开源的中文智能音箱项目

    叮当:一个开源的中文智能音箱项目

    这个项目其实来源于我生活中的一个需求:我每天晚上都会去厨房做一个面包当明天的早餐,当我把用料按顺序准备好放进面包机时,我需要准确预约到明天早上我吃早餐的时间。然而,几乎每次在这个时候我都没有带手机在身边,而是都放在客厅里充电,这时只能跑去客厅看时间。虽然厨房到客厅只有几步之遥,但自己又是懒癌患者,每天都要这么来回奔波就觉得很不方便。要解决这个问题当然有很多种方法,比如直接买个小时钟放在厨房。不过我更希望“连看都不用看”,直接有人告诉我时间。所以,我需要一个像 Amazon Echo 那样的智能音箱。

    然而,不论是 Amazon Echo 、Google Home 还是微软 Cortana 音箱,在国内的使用都是个问题。虽然国内也有类似的智能音箱产品,但我没有用过这些产品,不知道可定制性如何。比如,如果我需要开发个功能让它告诉我某种面包的配方是什么,这些产品就不一定能做到了。考虑再三,我决定自己动手写一个。整个项目用了差不多三个星期的业余零碎时间。

    先放上项目主页:http://dingdang.hahack.com

    下面分享一下我在开发这个项目过程中的心得。

Read More

Apr 19 2017
化繁为简的企业级 Git 管理实战(五):二进制大文件的版本控制

    毫无疑问,Git 非常适合用于代码文件的版本控制。对于纯代码仓库,由于每次实际提交都是增量内容,即使仓库经历了几十次提交,整个仓库的大小往往都不会大幅增加。

    而对于存在二进制文件的仓库,情况就变了:Git 并不能很好地支持二进制文件的增量提交,每次更新一个二进制文件,就相当于把这份文件的完整内容再往仓库里扔。久而久之,这个仓库就会变得非常大,影响代码拉取速度。

    举一个实际的例子,为了加快应用的构建速度,我们团队的框架先会编译成 SDK ,再交由上层构建应用。框架 SDK 也是一个独立的 Git 仓库,里头包含了大量的二进制包:

    Framework SDK

    由于框架也有多个分支,每个分支的迭代速度比较快,SDK 仓库的体积在三个月的时间内就膨胀到了 1G 。

Read More

Apr 12 2017
化繁为简的企业级 Git 管理实战(四):多 Gitlab 数据同步

    化繁为简的企业级 Git 管理实战(四):多 Gitlab 数据同步

    需求描述

    在继续写数学系列前,我想切回去之前的 Git 系列写点东西。我想写系列文章也可以像操作系统的进程调度一样,一个系列暂时写不动了,先 保存现场 跳去另一个 topic 写点东西,同时也给自己留点 buffer 再酝酿一下这个暂时 中断 的系列。等这个系列酝酿够了,再 恢复现场 ,继续还这个系列的技术债。

    对于一个规模较大的企业,存在多个 Gitlab 站点是很常见的事情。

    比如,我们团队在公司发布统一的 Gitlab 之前早已经搭了一个团队用的 Gitlab ,当公司开始推 Git 时,由于我们已经对自己团队的 Gitlab 做了大量的定制,因此并不打算迁移到公司的 Gitlab 。

    自己搭建 Gitlab 的好处是可以随心所欲的进行定制,像加远程钩子之类的东西想加就加。但缺点就是平台的维护成本也落到了自己身上。相比之下,公司 Gitlab 则没有什么维护成本,服务的稳定性由更专业的运维人员保证,也不用考虑扩容的问题,但灵活定制就别想了。如果能够实现 Gitlab 间的数据自动同步,我们可以没有顾忌的使用自己的 Gitlab 平台,一旦出现问题,再无痛迁移到公司的 Gitlab 。这样一方面避免了单点问题,节省了维护成本;另一方面也能尽可能保证灵活可定制。本文想讨论的就是多个 Gitlab 站点间的数据同步问题。

Read More

Feb 12 2017
机器学习的数学基础:线性代数进阶篇

    机器学习的数学基础:线性代数进阶篇

    前言

    在前面两篇文章中,我简要概括了线性代数中两个最基本的数据表达方式:矩阵向量。有了这两个数学工具作为基础,我们可以再进一步,讨论下面一些内容:

    1. 如何求解线性空间的基?
    2. 向量的子空间、零空间、列空间、行空间、左零空间都是什么东西?怎么求解?
    3. 如何用线性代数的知识来拟合数据?
    4. 机器学习、图像处理中常见的“特征向量”究竟是什么东西?它和变换矩阵有什么联系?

    本篇文章将作为线性代数子系列的最终篇。

Read More

Feb 6 2017
机器学习的数学基础:向量篇

    机器学习的数学基础:向量篇

    前言

    上文 中我简单概括了矩阵的基本运算,并给出了两个应用实例。这篇文章我们继续谈谈向量。

    向量是线性代数中的基本概念,也是机器学习的基础数据表示形式。例如计算机阅读文本的过程首先就会将文本分词,然后用向量表示[1]。这是因为向量很适合在高维空间中表达和处理。在机器学习中会接触到的诸如投影、降维的概念,都是在向量的基础上做的。

Read More

© 2017 Joseph Pan with help from Hexo and .