菜菜博士

博士在网络的家

C++ 闭包 探秘

我经常说协程, 说协程的时候又经常会提到闭包. 还有我常说, boost::bind 是神器 归根结底, 神的是 “闭包” 没有闭包, 就无法实现 asio 协程 (注意, 我说的是 ASIO的协程, 并不是通常意义上 setjmp/longjmp 或者 CreateFiber 又或者 boost.context 创建的协程) 每次使用 bind , 你就创建了一个闭包. 简单的来...

我为什么喜欢用协程

查看过 avbot 代码的人都知道, avbot 到处都是协程. 用句 ACG 的话来说, 博士是协程控 那么, 为啥我会那么喜欢使用协程呢? 答案是协程大大简化了编程, 尤其是内存管理. 协程简化了内存管理 写过异步程序的人都知道, 编写异步代码最容易犯的错就是内存泄露了. asio的无栈协程通过 闭包 的形式, 将异步过程所要操作的资源绑定到 闭包 上, 并使用 shared_...

avbot 的一些技术决定

avbot 早已实现最初的目标 : 提供一个机器把 IRC/XMPP和 QQ群联合起来. 让不使用QQ的人和只使用QQ的人都恩嗯畅快的交流. 现在该歇息片刻, 回顾一下这一段历程, 以及编写avbot的时候所做的一些技术决定了. Boost.Asio 为什么 avbot 会使用 Boost 进行开发呢? Boost 有什么 好处? Asio 是干嘛的? 我觉得对于 Asio, Jac...

avbot 7.0-rc1 发布

对于不知道 avbot 是神码的同学,猛击这里 就像博士说的, 不开发验证码解决方案不升级版本号, 这次主版本好不到一个月就被提升了, 咋回事呢? avbot 7.0 系列发布预览版发布 了,同时发布的还有 rpm 包 和 windows 包 avbot 7.0 添加了很多功能, 最重要的莫过于支持了验证码识别! avbot 的验证码识别功能详情请参考项目 wiki 下面是 C...

avplayer 维基站点建立

avplayer 社区的维基站点建立了, 欢迎大家访问 http://wiki.avplayer.org 目前 avplayer 的维基站点开发免注册编辑权限. 大家可以把 avplayer 社区项目的一些心得分享进行编辑. 比如在 windows 上如何编译 avbot, 希望辛苦解决的人能给后来人以提示.

avbot 6.1 发布

对于不知道 avbot 是神码的同学,猛击这里 avbot 前不久悄悄迎来了半周岁的生日. 因此 avbot 也进入了 6.X 开发周期. avbot 6.0 系列第2个版本 6.1 发布了,同时发布的还有 rpm 包 和 windows 包 avbot 6.1 发布, 添加了股票报价功能, 另外也对 WebQQ 协议进行了更新. 下面是 Changelog — 6.1 * ...

avbot 5.1 发布

对于不知道 avbot 是神码的同学,猛击这里 avbot 5.0 系列开始了. avbot 5.0 系列第3个版本 5.1 发布了,同时发布的还有 rpm 包 和 windows 包 avbot 的版本规则是, 每月提升一个大版本号, 因为是开发 avbot 的第 6 个月了, 所以大版本号提升到 5 了. avbot 5.1 发布, 修复了一个非常严重,困扰了我们很久的一个 1...

avbot 4.7 更新

对于不知道 avbot 是神码的同学,猛击这里 avbot 4.0 系列第九个版本 4.7 发布了,同时发布的还有 rpm 包 和 windows 包 rpm 包有 x86_32(用于64位系统) 的和 i686 (用于32位系统) 两个版本。其实 rpm 包解压一下也可以用在 Deb 系的系统上。 PS: sourceforge 上的 avbot 项目我开通了匿名上传权限,欢迎大家...

avbot 4.6.1 更新

对于不知道 avbot 是神码的同学,猛击这里 avbot 4.0 系列第八个版本 4.6.1 发布了,同时发布的还有 rpm 包 和 windows 包 rpm 包有 x86_32(用于64位系统) 的和 i686 (用于32位系统) 两个版本。其实 rpm 包解压一下也可以用在 Deb 系的系统上。 PS: sourceforge 上的 avbot 项目我开通了匿名上传权限,欢迎...

avbot 4.5 紧急更新

avbot 4.5 是一个紧急更新版本, 所有用户都应该升级。 因为TX的WebQQ协议有变动, 会导致无法获取群列表。* 对于不知道 avbot 是神码的同学,猛击这里 avbot 4.0 系列第六个版本 4.5 发布了,同时发布的还有 rpm 包 和 windows 包 rpm 包有 x86_32(用于64位系统) 的和 i686 (用于32位系统) 两个版本。其实 rp...

avbot 4.2 新功能解释和实现

新功能 - 讲笑话 这是一个早就被呼吁的功能,今天抽空实现了。笑话这个功能实现起来有2个要点: 第一,这个笑话虽然是隔十分钟讲一次,可是不能打断大家的讨论,所以是出现十分钟的空闲后才发 第二,这个笑话需要从网页上抓取 第一个要点, 使用办法就是 Asio 提供的 deadline_timer. 设定定时器超时 10min , 但是如果有人发言, 就重设时间. 通过链接...

avbot 结构解释

avbot 由 4 大部分构成 libavbot libavlog botctl avbotrpc +----------+ +----------+ +----------+ | libavlog | | libavbot | ---+---| libwebqq | +----------+\ /...

用概念编程

C++ 爸爸对 c++11 提出了一个 “模板概念” 提案,可是又亲自否决了它。因为他觉得还不够好,还要继续研究一番才行。C++是一个严谨的语言,新特性的加入要小心谨慎。 虽然提案没有通过,但是,C++爸爸俨然已经将那个 C with Class 的语言进化了,C++不再是一个 C with Class 的语言,而是迈出了“概念”编程的一步。 概念编程在C++中由来已久,C++爸爸的提案...

ASIO 与协程

前段时间看了 ASIO 爸爸关于ASIO的一个演讲. ASIO 爸爸说, ASIO 的设计理念就是作为一个 toolkit 而不是一个框架. ASIO并不强迫你使用某种编程模型. 它只是提供一系列的函数和类帮你更容易的编程. ASIO 的设计思想其实和 GLIB 的 g_main_loop 非常像. 但是 C++ 因为有模板, 所以能更好的实现. 使用 g_main_loop 的时候, 我...

NVIDIA 官方驱动支持 Optimus

各位,鄙人去年手贱,买了台 Optimus 的笔记本。最开始的时候用的 Bumblebee,但是觉得每 次用 optirun 非常的 egg pain。我想全局启用 NVIDIA 显卡(GT650M显卡买来不用浪费 啊!),而不是手动使用 optirun。 于是我折腾了 DRM/PRIME , 跑起了开源驱动,找到了PRIME的各种补丁,然后编译+折腾。终于 搞定。 虽然性能差了点(...

ASIO协程的思维转变

avbot 是一个纯粹的单线程程序。在设计 avbot 最初的时候,我就给自己下了一个明确的目标:必须单线程。 但是,它的逻辑可不简单。它需要处理 XMPP 协议,处理 IRC 协议,处理 WebQQ 协议,处理pop3协议,处理 SMTP 协议。 所有的处理都必须异步。绝对不能因为 IO 阻塞。 可能很多人会不以为然,这有什么, select() 一下就好了。但是你知道这意味着多少代码...

fcitx 违反了 GPL2 ? (更新, 已解决)

fcitx 是 yuking 的作品。 一直以来都是以 GPL2 协议发布。 yuking 后来将维护权交给了 csslayer. csslayer 开始了 fcitx 4.X 系列的维护工作。 最近我查看了fcitx 4 的协议, 发现 fcitx4 将自己的协议降级了。而且降级并没有说明获得过 yuking 和其他贡献者的同意。 按照 GPL2 的协议, 升级(就是变得比GPL2 ...

模板多态

需求 jack 正在实现一个 avhttp , 并且也已经相当的可用了。 他在实现http协议的时候,就对 HTTPS 和 HTTP 的实现做了一个相当重要的决定 —– HTTPS和HTTP必须是统一的代码。 那么,要优雅的做到这一点,显然只有一个办法:多态。 但是很不幸的是,SSL 需要 asio::ssl::ssl_stream , 而 TCP 则用的是 asio::ip::tcp...

深入理解C++

说一下我为何回归 C++ 了吧 : 简单: 生命有限。 用 C , 固然是只有一个范式, 学起来容易, 上手简单, 可是需要操心的问题太多了: 内存泄露, 野指针, 各种断错误。 可能你会说, 内存管理,小心点就可以了。 但我觉得,如果你总是用 200% 的精力去避免内存泄露,你就没有精力开发正常的软件了。你会对软件的逻辑进行折中,因为你实在没有精力开发需要你花很多时间写逻辑的代码了。 于...

随机编程

这个想法由来已久, 是从和 Jack 的多次交谈中逐渐悟出来的天朝程序员惯用编程模式. 所谓随机编程, 就是 _随机的_ 改动一些代码, 以求程序运行通过. 但是并不知道为啥这样修改程序就能工作了. 随机编程严重的依赖于单元测试. 给测试人员带来极大的负担. 随机编程的程序员, 对问题不求甚解. 以通过测试为编程目标. 出现问题就一头扎进 改代码 的 重复性 随机性 工作中 为啥一...