安全地回滚远程分支

Git Github Git-Workflow

在 Git 中使用 reset 可以让当前分支回滚(reset)到任何一个历史版本, 直接移除那以后的所有提交。但这更改了 Git 的历史,Git 服务通常会禁止这样做。 这便需要一个更安全的方式将代码状态回到历史版本,同时不更改 Git 历史。

如果直接回滚会影响到最近的提交,可以参考 从 Git 历史移除某些 Commit 在回滚的同时保留最近的有效提交。

所谓 保护分支,就是指不允许改写 Git 历史的分支。在 Github 中对应的选项是 Force Pushes,该选项默认处于 Disallow 状态。

为何要避免全局变量

封装 测试 模块化 全局变量

在所有的设计实践中,全局变量是使用起来最简单的,被坑到时也是最沉痛的。 但有没有发现很难解释为啥不用全局变量? 大概是全局变量对设计的副作用并非立竿见影,而是比较远,比较曲折。

Harttle 在一个年味很浓的晚上,试着推演全局变量问题,本文用来在日后说服别人。

适当地引入防卫性编程

JavaScript 封装 接口 重构 弱类型

Anything that can go wrong will go wrong. – Edward Murphy

防卫性编程(Defensive Programming) 是指限制对程序的不可预见的使用,增加软件的安全性。 防卫性编程在程序鲁棒性、可维护性上都有帮助,尤其是在你不幸地选择弱类型语言编写源码时。

在 C++ STL 程序设计中,我们称函数模板和类模板为 隐式接口,这些接口描述了编译期多态。 在 JavaScript 中,接受一个对象时也不需要声明其类型,只有后续对它的使用方式描述了它的接口。 Harttle 把 JavaScript 中的这一现象称为 隐式接口

树莓派搭建 HomeKit 服务

GPIO Node.js UART HomeKit Raspberry

最近总有朋友问我 Apple Home 是怎么搭建的,这篇文章提供给从零开始搭建 Apple Home 的朋友。 可以自选传感器、空气净化器、以及智能开关等设备,通过树莓派接入到苹果内置的 Home 应用中。 大概是这样的效果:

home

AIY Voice Kit 初体验

Raspberry GPIO UART

AIY Voice Kit 是 Google 自然语言识别的一个 Demo 项目,是一个由小纸盒包装的智能设备。 上个月朋友从美帝寄来一套,Harttle 却刚有时间把它组装起来,写这篇文章分享给喜欢折腾的同学。

Voice Kit 自带了麦克风和扬声器,借助 Google Assistant 可以实现类似 Siri 的人机对话,比如问问天气啊交通啊。 此外,由于整个系统基于 Raspberry Pi,而且配备了很棒的扩展板,比原生的 Pi 能做更多的事情。

vim 配置 cpplint

cpplint Syntastic C++ Vim

cpplint 是 Google C++ 代码规范的静态检查工具,是一个简单的 Python 脚本。 借助 Syntastic 工具,可以配置为 C++ 文件的检查工具。 本文只介绍 C++ Linting 的配置,关于代码所进、注释、自动补全、括号匹配等 配置方式请参考 这篇文章。先上图:

vim-cpplint

Deep Linking:从浏览器调起 APP

URI-Scheme Universal-Links Intent iOS Android

Deep Linking 只是一个概念, 是指通过一个链接进入另一个网站/App,并直接浏览其内部的某个页面。 Deep Linking 给用户带来的是非常顺滑的浏览体验,尤其在 Web 世界中 Deep Linking 的实现非常容易。

但如果要进入 App 并定位到对应的页面则较为困难,URI Scheme, Universal Links, Android App Links, 以及 Chrome Intent 都是为了解决从 Web 页面 Deep Linking 到 App 而做的尝试。 本文从 Web 一侧的视角总结调起 App 的各种实现方式,能达到的效果,以及对应的兼容性问题。

导航: 上一页 下一页

加载中...

🔝