作为一个图形图像方向的研究生,我经常都在和 OpenGL 、OpenCV 等多种 C++ 库打交道。这些库遵循着不同的规则和用法;另外,为了让自己的程序具有更多的交互能力,编写界面也是一个家常便饭的工作。
然而,随着工程复杂性的增加,库的管理和界面的维护也变得越来越困难:一方面,库的增加和删除不仅会增加学习成本,也会对系统的逻辑层带来影响。而另一方面,如果要让自己的项目易于维护,就要尽可能地应用设计模式,让逻辑和界面分离。但对于科研,一味陷入设计模式的桎梏又会带来过早优化的问题,影响科研进度。
直到后来,我接触到了 openFrameworks ,简直有种相逢恨晚的感觉。openFrameworks 封装了常用的 C++ 库,在此基础上提供了一个直观统一的接口,也大幅简化了编写界面的流程,使得开发图形程序变得很轻松。
本文将为大家介绍这个让人着迷的开发框架 —— openFrameworks。
Read More
去年 8 月份,我尝试自己写代码解析 Linux Man-Pages 的页面。
Man-Pages 使用的是 groff 文本标记语言,其最大的特色就是格式标记宏置于行首,例如 man(7) 第 35~48 的内容为:
1 2 3 4 5 6 7 8 9 10 11 12 .SH NAME man \- macros to format man pages .SH SYNOPSIS .B groff \-Tascii \-man .I file \&... .LP .B groff \-Tps \-man .I file \&... .LP .B man
Read More
最近在读《OpenCV 2 Computer Vision Application Programming Cookbook 》,书中的第三章介绍了如何了在进行 OpenCV 开发时常用的几种设计模式,包括策略模式、单例模式,以及如何搭建 MVC(模型-视图-控制器)架构。内容精彩,让人受益良多。
是否应该在程序中应用设计模式,这一直以来都是一个饱受争议的话题。但这并非本文的讨论重点。笔者的观点是,如果你需要在程序开发中使用面向对象的思想,那就不得不应用设计模式进行设计和重构,以期让自己的程序更加合理。
应该说,OpenCV 和设计模式并没有什么必然的联系,在 OpenCV 程序中实现 MVC 也没有什么特别的魔法。但在这之前,我已经读完了被称为 Gang of Four 的《设计模式:可复用面向对象软件的基础 》,感觉内容有点偏学术,不太好读。而通过 OpenCV 的实际案例来掌握几种设计模式,比起直接去阅读各种设计模式的定义要容易让人接受得多。
Read More
静态博客比起 Wordpress 这类博客的一个不足是需要先配置好整个博客环境才能编写和预览博客。
比如,我使用 Hexo 作为我的博客引擎,为了写一篇博客,我需要在自己的电脑配置好 node.js 、hexo、pandoc、emacs 、git 等一大堆东西。现在假如我需要在另外一台电脑编写博客,或者晚上躺在床上在手机上看到自己刚发的文章有一个让自己相当纠结的标点错误,静态博客的弊端就出来了:除非给每台机器都配好这些环境,否则我只能盼着赶紧用回自己的电脑。相比之下,像 Wordpress 这类博客就清爽很多,多数时候只需要开一个浏览器就可以完成文章的编辑与发布了。
Read More
之前我在 Ruhoh 上使用 guard-livereload 来实现自动更新预览。这样,一旦我修改了网站中的内容,livereload 会立马检测到并且通知浏览器刷新页面,不需要自己手动按 F5
刷新了。完全符合本人热衷偷懒的口味。
迁移到 Hexo 后,我也希望能够用上这个功能。经过一番搜索,我发现在 node.js 平台要使用 Livereload 也非常容易。
方法一:使用 LiveReload
安装和使用
首先是先安装 LiveReload 的 node.js 版本:
1 $ npm install -g node-livereload
Read More