代码改变世界

随笔分类 - Learning by doing 系列

C++11 并发指南四(<future> 详解一 std::promise 介绍)

2013-08-24 12:20 by Haippy, 54371 阅读, 收藏, 编辑
摘要:前面两讲《C++11 并发指南二(std::thread 详解)》,《C++11 并发指南三(std::mutex 详解)》分别介绍了 std::thread 和 std::mutex,相信读者对 C++11 中的多线程编程有了一个最基本的认识,本文将介绍 C++11 标准中 头文件里面的类和相关函数。 阅读全文

C++11 并发指南一(C++11 多线程初探)

2013-08-03 22:27 by Haippy, 127861 阅读, 收藏, 编辑
摘要:C++11 自2011年已经发布以来快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧,和大家共勉。 相信 Linux 程序员都用过 Pthread, 但有了 C++11 的 std:thread 以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名 C++ 程序员,熟悉 C++11 的多线程编程方式还是很有益处的。 阅读全文

CEF3 笔记三(常用类的介绍)

2013-06-10 23:17 by Haippy, 19470 阅读, 收藏, 编辑
摘要:接上文《CEF3 笔记二(常用的类介绍)》 阅读全文

CEF3 笔记二(常用类的介绍)

2013-06-10 23:16 by Haippy, 20790 阅读, 收藏, 编辑
摘要:CEF3 作为一个基于 Chromium 的嵌入式浏览器框架为开发者提供了几个基本的接口类来完成一些基本功能。 阅读全文

CEF3 笔记一(介绍)

2013-06-10 23:15 by Haippy, 22280 阅读, 收藏, 编辑
摘要:CEF 作为嵌入式浏览器框架最适合的应用场景应该是 HTML 页面渲染,所以很多程序都基于 CEF 来来应用程序提供 HTML 页面渲染的功能,如有道笔记,Evernote,GitHub Window Client,Q+,Adobe Brackets 等 阅读全文

如何实现简单的位数组(bit array)

2013-05-27 22:02 by Haippy, 10429 阅读, 收藏, 编辑
摘要:在 comp.lang.c 上面看到一则不错的 FAQ,《How can I implement sets or arrays of bits?》感觉很实用,仅仅使用了几个简单的宏就实现了一个基本的位数组(bitset)。 阅读全文

libuv 中文编程指南(三)文件系统

2013-03-17 21:57 by Haippy, 15005 阅读, 收藏, 编辑
摘要:简单的文件读写是通过 uv_fs_* 函数族和与之相关的 uv_fs_t 结构体完成的. libuv 提供的文件操作和 socket operations 并不相同. 套接字操作使用了操作系统本身提供了非阻塞操作, 而文件操作内部使用了阻塞函数, 但是 libuv 是在线程池中调用这些函数, 并在应用程序需要交互时通知在事件循环中注册的监视器. 所有的文件操作函数都有两种形式 - 同步 synchronous 和 asynchronous. 阅读全文

在自己的博客中添加 404 公益,帮助妈妈找回走失的孩子

2013-01-15 09:46 by Haippy, 1325 阅读, 收藏, 编辑
摘要:最近看到腾讯 404 页面出现: "一起寻早失踪宝贝"很有创意很感人,就想能不能再自己的博客显眼的位置也添加一个这样的连接来帮助妈妈找回走失的孩子。后来看到陈皓的 酷壳 也添加了这样一个连接,于是就把他页面里面的代码拿过来了,可能只是很微小的一份力量,但是只要越多的人愿意贡献自己的力量,就会有越多的孩子早日回到父母身边,也愿你在看博客时顺手点击右边的 404 公益 阅读全文

如何实现 C 语言的继承和多态

2012-12-31 13:18 by Haippy, 10338 阅读, 收藏, 编辑
摘要:上面一篇博客中写了《如何实现 C 的函数重载》,本文将进一步讲讲如何实现 C 语言的继承和多态,其实大致的思想已经在前面的一篇博客《200 行 C 代码实现插件式 NOSQL 存储服务器(一)》中体现过了,主要就是如何灵活运用C的函数指针这一特性! 阅读全文

如何实现 C 的函数重载

2012-12-27 11:18 by Haippy, 20528 阅读, 收藏, 编辑
摘要:大家都知道 C++ 等面向对象的语言支持函数重载,C++ 实现函数重载很大程度上依赖与编译器对函数名的 Mangling(损坏,破坏),即 C++ 的源代码被编译后同名的重载函数名字会被破坏,一般是在原函数名前后加上特定的字符串,以区分不同重载函数,然后在调用的时候根据参数的不同选择合适的函数,如下代码说明了编译器是如何处理普通函数重载的: 阅读全文

深入浅出 Barriers 实现(一)

2012-12-26 19:29 by Haippy, 8836 阅读, 收藏, 编辑
摘要:Barriers,字面意思为“壁垒,屏障,栅栏”,在计算机领域中 Barriers 也有它独特的含义,具体来讲,在并行程序中,Barriers 是一种同步的手段,可被视为一种线程同步原语,如一组线程/进程的 Barrier 可以用来同步该线程/进程组,只有当该线程/进程组中所有线程到达屏障点(可称之为同步点)时,整个程序才得以继续执行。 阅读全文

200 行 C 代码实现插件式 NOSQL 存储服务器(一)

2012-11-24 22:30 by Haippy, 3572 阅读, 收藏, 编辑
摘要:初一看,你肯定会觉得作者在忽悠人吧,200 行 C 代码居然可以实现插件式 NOSQL 存储服务器?是的,200 行 C 代码确实可以做到,但只能是一个极其简单的代码框架而已,不过感兴趣的同鞋可以在此基础上进行扩展。 阅读全文

Latex Beamer 模板

2012-10-31 18:09 by Haippy, 7108 阅读, 收藏, 编辑
摘要:我的 Latex Beamer 中文模板,基于 The Aalborg Beamer Theme 模板(http://kom.aau.dk/~jkn/latex/latex.php), 经过改造后,风格与计算所主题颜色一致,非常适合计算所的同学使用。 阅读全文

如何在Linux下实现你的线程池(Step By Step,Pthread)

2012-09-28 20:39 by Haippy, 3381 阅读, 收藏, 编辑
摘要:200行C代码就可以实现线程池?开玩笑吧?不,告诉你,我是认真的,200行C代码真的可以实现一个简单可用的线程池!!! 阅读全文

如何使用 indent 美化你的代码

2012-08-29 21:45 by Haippy, 5254 阅读, 收藏, 编辑
摘要:代码也需要风格(各种 C 代码风格),经常纠结自己的代码排版不美观,作为一名十分“固执”的程序员,自己在写 C 代码的时候甚至连 #include 头文件顺序都要按拼音序排列,有时候花了很多时间手工检查自己的代码排版风格,虽然是件费力讨好的事,但是宝贵的时间浪费掉了。 阅读全文

GIT 子模块温习

2012-08-13 22:17 by Haippy, 8190 阅读, 收藏, 编辑
摘要:GIT 支持子模块,所谓 GIT 子模块,即某个项目需要管理的模块数目太多,而各个模块需要不同的人或团队维护,此时就需要在GIT中引入子模块。GIT 引入子模块后,其本身的上游代码提交历史依然可以保存下来,并且避免了在上游代码发生变更时本地的定制代码归并(Merge)困难。 阅读全文

布隆过滤器(Bloom Filter)的C语言实现

2012-07-14 22:47 by Haippy, 5114 阅读, 收藏, 编辑
摘要:前文《布隆过滤器(Bloom Filter)详解》主要讲了布隆过滤器(Bloom Filter)的基本原理和相关应用,本文将使用C语言实现一个简单的布隆过滤器(Bloom Filter)。 阅读全文

7天学会Maven(第二天——Maven 标准目录结构)

2012-07-05 09:29 by Haippy, 89812 阅读, 收藏, 编辑
摘要:好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。 阅读全文

7天学会Maven(第一天——了解 Maven)

2012-07-04 16:42 by Haippy, 15604 阅读, 收藏, 编辑
摘要:Maven是Apache的一个顶级的项目:http://maven.apache.org/。Maven这个单词来自于意第绪语,意为知识的积累,最早在Jakata Turbine项目中它被用来简化项目的构建过程。当时有很多项目,它们的Ant build文件仅有细微的差别,而JAR文件都由CVS来维护。于是Maven创始者开始了Maven这个项目,该项目的清晰定义包括,一种很方便的发布项目信息的方式,以及一种在多个项目中共享JAR的方式。 阅读全文

Learning by doing 系列文章(之一)如何在 Python 中使用 epoll ?

2012-01-11 17:27 by Haippy, 1885 阅读, 收藏, 编辑
摘要:Python 在 2.6 版中引入了用于处理Linux epoll系统调用的API,本文简单地介绍 python 中与 epoll 有关的 API,欢迎大家提出问题。 阅读全文

Python简单的多客户端聊天室程序

2012-01-06 10:28 by Haippy, 3742 阅读, 收藏, 编辑
摘要:本文所示代码将教你如何使用Python标准库中的select.select模块实现多路复用的命令行下CS模式的聊天室程序。 阅读全文

自己动手实现自旋锁(spinlock)

2011-12-17 10:17 by Haippy, 5090 阅读, 收藏, 编辑
摘要:大多数的并行程序都需要在底层使用锁机制进行同步,简单来讲,锁无非是一套简单的原语,它们保证程序(或进程)对某一资源的互斥访问来维持数据的一致性,如果没有锁机制作为保证,多个线程可能同时访问某一资源,假设没有精心设计的(很复杂)无锁算法保证程序正确执行,那么后果往往非常严重的。无锁算法难于使用,所以一般而言都使用锁来保证程序的一致性。 阅读全文

Lex & Flex 词法分析器实践(未完,持续更新)

2011-10-10 23:38 by Haippy, 9037 阅读, 收藏, 编辑
摘要:Lex是LEXical compiler的缩写,是Unix环境下非常著名的工具, Lex (最早是埃里克·施密特和 Mike Lesk 制作)是许多 UNIX 系统的标准词法分析器(lexical analyzer)产生程式,而且这个工具所作的行为被详列为 POSIX 标准的一部分。 阅读全文

巧用 python 脚本控制你的C程序

2011-09-17 22:02 by Haippy, 2428 阅读, 收藏, 编辑
摘要:python是一门艺术语言,除了开发桌面程序,还能够开发网络应用,数据库应用,还可以代替shell编写一些的实用脚本,本文主要讲述了如何利用 python 程序控制你的 C 程序的行为。 作为例子,本文将用 python 和 C 语言来编写示例代码,同时也会顺便介绍一下 利用 C 语言扩展 python的方法,最后会给出完整的 C 编写 python 模块的源码。 阅读全文