菜菜博士

博士在网络的家

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

使用 boost 执行 base64 解码

base64 编码最初是为了电子邮件开发的。因为电子邮件是个文本协议,不能传输二进制数据,甚至中文也无法进行传输。只能传输ascii编码的文本。这样一来就诞生了多种将二进制数据编码到ascii里的编码方案,base64是其中之一。 base64是一种非常简单的编码,只要进行一次迭代即可完成解码。 什么?一次迭代??? 这就让我们有机会借助 Boost 提供的迭代器非常简洁的写出base...

在高处编程

C++之父在一个讲座上说过,C++是一门轻量级的抽象语言。轻量级,意味着C++尽量减小因为多加的抽象带来的负担。抽象语言,意味着C++有着很强的抽象能力,C++的抽象能力,有了BOOST这样的库之后被极大的提升了,配合着BOOST, 我将 C++称呼为 编译型脚本。 C++是一门抽象语言,使用C++的时候,千万不要去思考编译器到底是如何安排内存的。认真你就输了。使用C++的时候,千万不要去...

无栈协程

在开始之前,先来看一段代码  void pop3::operator() ( const boost::system::error_code& ec, std::size_t length ) { using namespace boost::asio; ip::tcp::endpoint endpoint; std::string status; std::stri...

Why ubuntu sucks and everyone should not use it

这篇文章早就应该发了,但是我太自私,只管自己躲在Gentoo的树阴下乘凉,不为那些在ubuntu的刀山祸害里挣扎的人提供援助。 所以,我觉得为他们提供无偿的援助——告诉他们,ubuntu很烂很烂。 ubuntu的烂要分两个部分,其一是debian的烂,其二是ubuntu的烂。 # debian之烂 debian的烂,体现在包管理器上,特别是debian特色的拆包习俗。 debian的...

博客迁移到 github pages

越来越觉得花钱买一个 VPS 是个太浪费钱的事情了,而且也没那么多精力去维护服务器,于是将博客迁移到 github 就成了上上选择。 现在终于完成迁移了,并且也开启了评论功能,真的是非常不错。可以使用 vim 编写博客了,这真的是太爽的事情了。 目前的 url 是 http://microcai.org, 支持 RSS Feed, url是 RSS Feed 每篇文章都可以使用评论功能...

2012 年总结

过去一年里,啥事情没干。 2012年来的时候,唔说,世界末日到来前不拼命工作。于是就每天宅家里啥也不做了。 要说啥都没做也不对。 乘宅在家里不用工作的机会,把很久以前丢下的C++重新学习了。 重新学习C++是一个机缘巧合的事情,jack 一直是一个C++程序员,重度Boost粉丝。一直向我灌输boost。不过,我一直和云风一样,总是黑C++,说只用C开发。 不过C++11的发布让我...

avplayer 开源软件组织成立,域名 avplayer.org

avplayer.org 项目组成立了。 avplayer 的宗旨是开发易于使用的跨平台 AV播放器框架。avplayer自带一个用 AV播放器框架写的AVPLAYER播放器。 依托于 AVPLAYER本组织还开发了用于成员沟通的 AVBOT (原 QQBOT)。 AVBOT 实现了 QQ/IRC/XMPP的互通。 为了更科学的上网,本群再次发力,开发了 AVSOCKS 科学操长城软件。...

python是个渣语言

一直以来我都表达 python 是个糟糕语言的观点,但是没有深入的解释。 计算机一直都是“工具”,意味着我们是拿它干活的,也就是所谓的提高生产力。 指挥计算机干活的重要工具就是编程语言。计算机并不是训练来干活的,是编程来干活的。编程语言的效率有2个指标:编写干活指南的效率和机器人执行的效率。 在人力成本低于硬件的时候,人追捧的是执行效率。 人力成本越来越高的时候,人开始追求编程的效率...

内存管理随笔

思考一: 任何一个程序,只要不是 helloworld 那样的简单程序,必然会用到内存管理。内存管理是写程序不可避免的过程。C程序员最大的恶魔就是野指针和内存泄漏。这是每个C程序员的噩梦。C++继承了C的缺陷,基本上半斤八两。而且C++还可以自由重载new操作符,给内存管理更加重了复杂性。 我常常在想,写BASH脚本的时候,我们有管理过内存么?即便是java那样的语言,内存管理也是后台进...

C++ 王者归来

曾几何时,学会了C语言。安装了VC6这个神叉IDE。 然后被迫开始CPP路程。由于C++兼容C,所以一直在以C的方式写C++。然后慢慢的开始学写C++代码。写C++代码是从MFC开始的。慢慢的,我学会了用class,感觉是个比struct好用的多的结构体。再慢慢的,我学会了继承,还有… 多重继承。 MFC 就是我的导师。开始不停的向MFC学习。既然用了c++的继承,就认识到了继承的陷阱。...

善待笔记本,启用intel集显的节能模式

在 XP 下用的时候,用计量插座,空闲功耗大概在 13W ~ 14W 之间。 在 Gentoo 下用的时候,空闲功耗也在 20W 之上。 很头痛。 CPU 的节能已经打开,一直在 800M 最低频率运行呢! 恩,应该是 GPU 费电啊~~~ 有什么办法能让 intel 的 GPU 工作在节能模式呢? 答案是添加隐含的内核引导参数 i915.lvds_downclock=1 i91...

i7 拯救了 Gentoo

好多年以前,我开始了 Linux 之旅。 我频繁的切换发行版,从 RedFlag 5 到 RedFlag 6 再到 ubuntu 8.10 马上又切到 Fedora 8 然后是 9 10 , 期间又重回 RedFlag 7 过,间或也使用过 debian 和 puppy。 如此频繁的切换发行版,只不过是我觉得它们都没有满足我的要求。我不停的切换,企图寻找到一个可以一劳永逸的满足我的需求的...

别了 AMD . 来了 Intel.

刚开始接触到电脑的时候,正是 K8 无限风光, P4 高频低能的时候。那个时候起心里就有了 amd 的 U 便宜又好,低频高能的种子了。 到自己 DIY 的时候,就买了 AMD 的 U . NVIDIA 的芯片组。 那个时候扣肉还没有出, AMD 的 K8 余光依旧,K10 风头正好。AMD 率先推出双核,intel 还是伪双核, etc . 当时买的是入门双核 4200+ . 配合 M...