作者简介:刘未鹏,南京大学计算机系硕士毕业,现就职于微软亚洲研究院创新工程中心,有自己的Blog Mind Hacks。域名 MindHacks.cn 的含义:
Mind Hacks 是一本书*
Mind Hacks 是一系列思维工具*
Mind Hacks 有一个漫长的前生——一个有着近6年历史的技术博客,在CSDN上有超过一百二十万的访问量,详见《前世档案|C++的罗浮宫》
* Mind Hacks 的博客作者创建了TopLanguage*:https://groups.google.com/group/pongba
善于利用思维时间的人,可以无形中比别人多出很多时间,从而实际意义上能比别人多活很多年。善于利用思维时间的
继续阅读 »
TBOX的内存分配在调试模式下,可以检测支持内存泄露和越界,而且还能精确定位到出问题的那块内存具体分配位置,和函数调用堆栈。
内存泄露检测
内存泄露的检测必须在程序退出的前一刻,调用tb_exit()的时候,才会执行,如果有泄露,会有详细输出到终端上。
c
tb_void_t tb_demo_leak()
{
tb_pointer_t data = tb_malloc0(10);
}
输出:
[tbox]: [error]: leak: 0x7f9d5b058908 at tb_static_fixed_pool_dump(): 735, memory/impl/stat
继续阅读 »
Nginx是一个俄罗斯开发的高性能HTTP服务器和反向代理服务器,功能丰富、性能强悍、运行稳定、应用广泛,完全使用C语言编写,可运行于各种Unix Like OS,并有Windows移植版本(不推荐用于生产环境)。
安装
在Ubuntu中,可以直接使用sudo apt-get install nginx 命令安装nginx,安装之后,默认的配置文件保存在 /etc/nginx 文件夹内,默认提供http服务的目录位置在 /usr/local/nginx/html。
配置
nginx的主配置文件是:nginx.conf
```
user www-data; #用户与用户组
worker_processes 4; #对外提
继续阅读 »
更新日志
2016.09.09 UIImageView加载WebP格式的图片
2016.09.19 更新UI系列
2016.10.18 更新隐藏GroupedTableView上边多余的间隔
工具类
提取assets.car中的图片
iPhone 6 屏幕揭秘
iOS 通过获取iTunes上的APP信息,判断是否提醒升级APP
POST https://itunes.apple.com/CN/lookup?id=978591579
使用POST方法,id 是iTunes connect里APP信息的Apple ID:为APP自动生成的id
Charles 请求 HTTPS 出现 “You may need to c
继续阅读 »
这里为了使代码更加简洁,直接用了transfer来挂接两路流的传输操作。
```c
// 初始化文件输入流
tb_stream_ref_t istream = tb_stream_init_from_url("/home/file.txt");
// 初始化文件输出流
tb_stream_ref_t ostream = tb_stream_init_from_file("/home/file.gz", TB_FILE_MODE_RW | TB_FILE_MODE_CREAT | TB_FILE_MODE_BINARY | TB_FILE_MODE_TRUNC);
// 初始化解压缩流,以istream作为输入
继续阅读 »
tbox provides a lightweight implementation of stackless coroutines
and it's interfaces are very simple too, for example:
c
tb_lo_coroutine_enter(coroutine)
{
while (1)
{
tb_lo_coroutine_yield();
}
}
The switch performance of this stackless coroutines is faster than the implementation of tbox's
继续阅读 »
go只提供了一种循环方式,即for循环,在使用时可以像c那样使用,也可以通过for range方式遍历容器类型如数组、切片和映射。但是在使用for range时,如果使用不当,就会出现一些问题,导致程序运行行为不如预期。比如,下面的示例程序将遍历一个切片,并将切片的值当成映射的键和值存入,切片类型是一个int型,映射的类型是键为int型,值为*int,即值是一个地址。
继续阅读 »
tbox中提供了常用的一些stream模块,例如:data、file、http、sock等,可以通过指定不同的url,使用相同的接口
进行数据流的读写,非常的方便。
例如:
```c
// init stream
tb_stream_ref_t stream = tb_stream_init_from_url("http://www.xxx.com/file.txt");
if (stream)
{
// open stream
if (tb_stream_open(stream))
{
// read line
继续阅读 »
主要说明不断更新的软件技术指引未来发展方向,此文持续更新。对于技术的共性给出必要的原理解释。
linux的基本技能,主要说明linux环境下c编程,shell;着重于基础概念,并不是作为进阶的工具,主要起到一个抛砖抛砖引玉的作用,能够通过对这些基本的技能的学习初步掌握解决问题的基本技能。此文章并不深入讨论各个技术点的细节,只是总结出技能之间的依赖关系,归纳出一般的学习步骤,希望对自己的思路有一个清晰的认识。
继续阅读 »
tbox里面针对三个正则库(pcre/pcre2/posix)进行了封装,实现接口统一和跨平台处理,只要xmake在编译配置的时候自动检测到其中一种库,就可以使用了,一般会优先使用pcre2。
如果你不想过多的依赖第三方库,可以切换到posix的正则,调用 xmake f --pcre=false --pcre2=false 把pcre的库禁用了就行了。
首先给个最简单的匹配单个子串的例子:
```c
// 执行简单匹配,第二个参数是匹配模式,默认传0就行了
tb_vector_ref_t results = tb_regex_match_done_simple("(\w+)\s+?(\w+)", 0, "he
继续阅读 »