自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

littlewhite1989的专栏

我的个人博客http://littlewhite.us

  • 博客(37)
  • 收藏
  • 关注

原创 Linux程序编译链接动态库版本的问题

在实际生产环境中,程序的编译和运行往往是分开的,但只要搞清楚这一系列过程中的原理,就不怕被动态库的版本搞晕。简单来说,按如下方式来做编译动态库时指定-Wl,-soname,libxxx.so.a,设置soname为libxxx.so.a,生成实际的动态库文件libxxx.so.a.b.c,编译可执行程序时保证libxx.so存在,如果是软链,必须指向实际的动态库文件libxxx.so.a.b.c运行可执行文件

2015-08-17 15:40:01 10426 4

原创 深入理解vim编码设置

vim的使用环境比较复杂,可以通过terminal在本地使用(比如Mac或Linux主机),也可以ssh连接到远程服务器使用,还可以使用gvim。这里主要讨论terminal下的使用,搞清楚了vim在terminal下的编码设置,gvim相对更简单,自然也就了解了首先我们要理解字符和字节的区别,字符是用来显示的,而字节是存储和传输时使用,网络传输的是字节流,文件存储的也是字节流,而编辑器要显示文件内

2017-02-22 11:00:27 1752 1

原创 C++数据库操作之SOCI

SOCI是一个数据库操作的库,并不是ORM库,它仍旧需要用户编写sql语句来操作数据库,只是使用起来会更加方便,主要有以下几个特点以stream方式输入sql语句通过into和use语法传递和解析参数支持连接池,线程安全由此可见它只是一个轻量级的封装,因此也有更大的灵活性,后端支持oracle,mysql等,后续示例均基于mysql安装git项目地址https://github.com/SO

2017-01-23 09:28:13 10376 2

原创 详解Linux shell命令帮助格式

linux shell命令通常可以通过-h或--help来打印帮助说明,或者通过man命令来查看帮助,有时候我们也会给自己的程序写简单的帮助说明,其实帮助说明格式是有规律可循的帮助示例下面是git reset命令的帮助说明,通过man git-reset可以查看git reset [-q] [<tree-ish>] [--] <paths>...git reset (--patch | -p) [

2017-01-14 09:29:24 5339 1

原创 gtest

安装项目地址: https://github.com/google/googletestgit clone https://github.com/google/googletestcd googletest/googletestmkdir buildcd buildcmake .. -DCMAKE_INSTALL_PREFIX=/usr/localmakesudo make instal

2017-01-13 11:52:27 564

原创 linux shell发送邮件

一封最简单的邮件echo -e "To: handy1989@qq.com\nCC: handy1989@qq.com\nFrom: handy<handy@test.com>\nSubject: test\n\nhello world" | sendmail -t看上去有点复杂,其实就是sendmail程序从标准输入读取邮件源码,-t参数表示从邮件源码提取收件人信息,然后发送到收件人的邮件服务器

2016-11-23 11:01:21 1308

原创 Mac Alfred快速复制剪贴板和指定文本

这里主要考虑如下两种需求快速唤出剪贴板历史,并复制某一项快速复制某一段固定内容的文本第一项在Mac上有很多小工具实现,第二项在输入密码时经常会碰到,比如我在终端sudo执行命令或者连接redis数据库时需要输入密码,这些密码我又不想人肉记住,希望每次要输入时一个快捷键就能搞定,这个有点类似windows上xshell的快速命令集,点一个按钮就可以自动在终端上输入指定的文本,非常方便这两个需求A

2016-10-12 10:50:11 8616

原创 Linux文件读写机制及优化方式

本文只讨论Linux下文件的读写机制,不涉及不同读取方式如read,fread,cin等的对比,这些读取方式本质上都是调用系统api read,只是做了不同封装。以下所有测试均使用open, read, write这一套系统api缓存缓存是用来减少高速设备访问低速设备所需平均时间的组件,文件读写涉及到计算机内存和磁盘,内存操作速度远远大于磁盘,如果每次调用read,write都去直接操作磁盘,一方面

2016-09-19 11:00:39 3196

原创 libevent evhttp学习——http服务端

http服务端相对客户端要简单很多,我们仍旧使用libevent-2.1.5版本,服务端接口和2.0版本没有区别基本流程http服务端使用到的借口函数及流程如下创建event_base和evhttpstruct event_base *event_base_new(void);struct evhttp *evhttp_new(struct event_base *base);绑定地址和端口i

2016-08-06 00:47:03 6799 1

原创 libevent evhttp学习——http客户端

基本环境使用版本为libevent-2.1.5,目前为beta版,其中evhttp和旧版区别在于新增了如下接口// 设置回调函数,在包头读取完成后回调void evhttp_request_set_header_cb (struct evhttp_request *, int(*cb)(struct evhttp_request *, void *))// 设置回调函数,在body有数据返回后回调

2016-08-05 17:04:27 16730 2

原创 C++ & Python 多线程笔记

C++ & Python 多线程笔记

2016-08-01 17:41:47 542

原创 gdb调试技巧备忘

准备工作为了能让程序更直观的被调试,在编译时应该添加一些选项-g: 添加调试选项-ggdb3: 调试宏定义启动方式不带参数gdb ./a.out带参数gdb ./a.outset args -a -b -c any_argument_you_need b main run 调试core文件gdb bin_name core_name调试正在运行的程序大致按如下步骤ps ax

2015-09-11 17:26:57 5455 1

原创 Python调用C++程序备忘笔记

Python调用C++程序备忘笔记Python的优点是开发效率高,使用方便,C++则是运行效率高,这两者可以相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目中用Python实现外围功能,都可能遇到Python调用C++模块的需求,下面列举出集中c++代码导出成Python接口的几种基本方法原生态导出Python解释器就是用C实现,因此只要我们的C++的数据结构能让Python认识

2015-09-02 17:30:04 2031 1

原创 一行Python代码——单词逆转

QuestionGiven an input string, reverse the string word by word. For example, Given s = “the sky is blue“, return “blue is sky the“.Answerdef reverseWords(s): return ' '.join(filter(lambda x:x !=

2015-06-05 18:25:26 867 1

原创 vim比较目录diff

虽然现在有很多图形界面的diff工具,但对于有命令行情节的人来说,当飞快的在terminal下敲击键盘时,总不希望再拿鼠标去点击其它地方,况且有时候图形界面占用资源多,我的MBA就经常启动diffmerge时卡住,但vimdiff又只能在一个标签里比较一组文件的diff,如果想比较两个目录下文件的diff,它就显得无能为力了假设我们要实现一个工具叫diffdir,先让我们脑洞打开设想一下它应该是怎样

2015-04-27 16:17:31 7150

原创 Mac如何自动发邮件给kindle推送文档

买过kindle的人一定对于它推送的服务印象深刻,只要你的kindle联网在,即便它被放在家里,你也可以在办公室给它发送书籍,等你回家就会发现,书籍已经自动下载好了,在不同平台下(Mac,windows等)都有相应的Send to kindle应用程序,有些程序是不支持中国亚马逊账户的,但我们可以采用通用的方式,通过邮件推送,可能有些人觉得发邮件很麻烦,但如果能实现自动发送邮件,你是否还这样觉得呢首

2015-04-10 17:28:42 1934

原创 vim自动更新tag

用vim浏览C/C++代码时可以用ctags生成tag文件,这样可以很方便跳转到函数定义的地方,这个功能几乎所有的图形界面编辑器都有,比如VS,source insight等等,但是vim的tags文件是静态的,也就是说如果我们在源代码里新增了一些函数,原来的tags是不会自动更新的,我们也无法跳转到新增的函数定义处,这个问题怎么怎么办呢我在网上搜索了很多地方,普遍给的方案就是将ctags命令映射到

2015-04-10 17:22:49 5172 2

原创 Mac OS X下快速复制文件路径

Mac下通过Automator在鼠标右键菜单选项里添加复制文件路径功能

2015-04-10 17:15:38 979

原创 shell命令技巧——文本去重并保持原有顺序

简单来说,这个技巧对应的是如下一种场景假设有文本如下ccccaaaabbbbddddbbbbccccaaaa现在需要对它进行去重处理,这个很简单,sort -u就可以搞定,但是如果我希望保持文本原有的顺序,比如这里有两个aaaa,我只是希望去掉第二个aaaa,而第一个aaaa在bbbb的前面,去重后仍旧要在它前面,所以我期望的输出结果是ccccaaaabbbbdddd当然,这个

2015-03-16 09:45:31 4786

原创 Mac OS X下快速复制文件路径

文件路径表示的是文件在文件系统里的位置,不管是用命令行操作的Linux程序员还是使用windows的广大用户,都难免会有这样的需求在windows上复制当前目录的路径有一个特别方便的方式,只需要用鼠标点击路径栏,它就会自动变成像”D:\Downloads\tmp”这样的路径,如果要复制文件路径,只需要将目录路径和文件名拼接起来即可,Linux上也很方便,readlink -f yourfile就会打

2015-03-16 09:35:21 28105 7

原创 Mac如何自动发邮件给kindle推送文档

买过kindle的人一定对于它推送的服务印象深刻,只要你的kindle联网在,即便它被放在家里,你也可以在办公室给它发送书籍,等你回家就会发现,书籍已经自动下载好了,在不同平台下(Mac,windows等)都有相应的Send to kindle应用程序,有些程序是不支持中国亚马逊账户的,但我们可以采用通用的方式,通过邮件推送,可能有些人觉得发邮件很麻烦,但如果能实现自动发送邮件,你是否还这样觉得呢首

2015-03-06 10:27:34 4075 1

原创 Linux技巧——用dd生成指定大小的文件

我们在测试或调试的时候,有时候会需要生成某个size的文件,比如在测试存储系统时,需要将磁盘剩余空间减少5G,最简单的办法就是拷贝一个5G的文件过来,但是从哪儿去弄这样大小的文件呢,或许你想到随便找一个文件,不停的拷贝,最后合并,这也不失为一种办法,但是有了dd,你会更容易且更灵活的实现我们来case by case的介绍dd的用法。先看第一个生成一个大小为5G的文件,内容不做要求

2014-12-08 10:12:13 3347

原创 如何让Magic Mouse真正拥有Magic

Magic Mouse是苹果电脑的专属配件,它的庐山真面目就如题图一样,乍一看觉得除了外形像个鼠标,其它地方貌似都和普通的鼠标格格不入,起码连个最基本的滚轮都没有,但是既然敢叫Magic Mouse,必然有它的magical之处它是为苹果电脑专门设计,如果你拿着它在windows上打游戏,或者在装了windows系统的Mac上打游戏,然后吐槽它不好用,那我只能送上一句呵呵,这种事貌似只有土

2014-12-03 13:55:43 11768

原创 linux脚本实现自动输入密码

shell命令强大且易学,shell脚本可以很容易实现自动化工作,但是如果遇到输入密码等阻塞命令,就需要用到expect这个强大的工具

2014-11-12 12:25:48 13607

原创 网站二三事

周五利用晚上的时间将博客换了个主机,今天就来谈谈与网站相关的一些事。先提前声明,今天的文章不涉及任何代码,如果是想知道网站怎么搭建,可以查看http://macshuo.com/?p=547,我的博客就是按照这篇教程搭建的,讲的很详细。今天主要科普一下网站相关的知识我们每个人每天都会访问各种网站,比如百度、新浪微博、QQ空间等,不管是这些大型网站,还是一些小的个人站点,比如我的http://l

2014-10-20 08:50:52 742

原创 没有main函数的helloworld

几乎所有程序员的第一堂课都是学习helloworld程序,下面我们先来重温一下经典的C语言helloworl/* hello.c */#include int main(){ printf("hello world!\n"); return 0;}这是一个简单得不能再单的程序,但它包含有一个程序最重要的部分,那就是我们在几乎所有代码中都能看到的main函数,我们编

2014-10-15 09:44:13 1072

原创 C语言强符号和弱符号

阅读原文http://littlewhite.us/archives/250之前在extern “C” 用法详解中已经提到过符号的概念,它是编译器对变量和函数的一种标记,编译器对C和C++代码在生产符号时规则也是不一样的,符号除了本身名字的区别外,还有强符号和弱符号之分我们先看一段简单的代码/* test.c */void hello();int main(){

2014-10-13 22:10:25 1492

原创 Mac必备软件推荐

阅读原文http://littlewhite.us/archives/245随着IOS的流行,Mac电脑也越来越多的进入人们的视野,和iPhone系列一样,苹果的Mac产品线也是软硬件完美结合,有着非同凡响的使用体验,而这主要的功劳,当属其操作系统Mac OS X,今天就来推荐一些Mac必备软件首先要声明一点,OS X系统的很多软件和IOS一样,都是收费的,国人惯用了微软的盗版系统和大

2014-10-11 09:44:25 2133

原创 python网页解析利器——BeautifulSoup

python解析网页,无出BeautifulSoup左右,此是序言安装BeautifulSoup4以后的安装需要用eazy_install,如果不需要最新的功能,安装版本3就够了,千万别以为老版本就怎么怎么不好,想当初也是千万人在用的啊。安装很简单wget "http://www.crummy.com/software/BeautifulSoup/download/3.x/Be

2014-10-10 15:12:44 824

原创 如何乱序输出文本

休息了七天,大家都表示很累,于是今天大部分人又在公司休息了一天,是这个节奏吧。今天就推个简单的Linux技巧,问题描述如下一个文本文件,如何按行乱序输出这是我在工作中真实遇到的一个小问题,当时的场景是这样的,我们做了一个从网页里提取图片的策略,为了提升策略的效果我们需要找一些badcase,再针对这些badcase做优化,找专人评估既有沟通成本还要等排期,于是经理鼓动组内同事每人评估1

2014-10-08 21:26:37 3322

原创 Mac OS X重装系统

一个月关一次机,两年都不重装系统,这在Mac上是很正常的事情。但是这只适合于普通的用户,对于爱折腾的人来说,不重装几次系统就好像自己对它爱得不够深一样。我这次也是为了尝鲜,从10.9升级到10.10的测试版,可能是测试版不够稳定,或者因为我是air低配版的原因,系统运行起来比较卡顿,而且借鉴IOS7扁平化的设计图标在电脑上看来实在是太刺眼,10.10的新特性也主要体现在和IOS系统的协同工作上,对

2014-10-01 14:29:32 6198

原创 vim C++开发环境插件安装详解

阅读原文http://littlewhite.us/archives/212C/C++是使用比例最高的程序语言,而vim是专为程序员开发的编辑器,当这两者结合起来,会给我们带来怎样的效果呢。对于windows上做C++开发的用户来说,vs为他们做了大量的工作,语法高亮、自动缩进、智能提示等等,当你happy的使用vs时,请记住一点,这是一个收费软件,虽然在我大中华普遍都在使

2014-10-01 14:04:33 4205

原创 如何打造舒适的Linux使用环境

首先要说明的是今天讲的不是安装教程,而是讲使用方式。写这篇文章的初衷是考虑到很多在校大学生对Linux接触较少,即便接触也只是装装系统,没有实际用过Linux开发环境,而互联网公司普遍都是Linux开发环境,可以说整个互联网就是建立在Linux服务器之上,因此越早使用Linux,工作之后就能越快上手。但如果你的方向是windows客户端开发,那后面的内容都没必要看了。请允许我先吐槽一下wind

2014-10-01 13:55:43 879

原创 让你的程序更优雅的sleep

sleep的作用无需多说,几乎每种语言都提供了类似的函数,调用起来也很简单。sleep的作用无非是让程序等待若干时间,而为了达到这样的目的,其实有很多种方式,最简单的往往也是最粗暴的,我们就以下面这段代码来举例说明(注:本文提及的程序编译运行环境为Linux)

2014-10-01 13:46:34 718

原创 C++ const知多少

const修饰变量关于const最常见的一个面试题是这样的:char *const和const char*有什么区别,大家都知道const修饰符代表的是常量,即const修饰的变量一旦被初始化是不能被更改的,这两个类型一个代表的是指针不可变,一个代表指针指向内容不可变,但具体哪个对应哪个,很多人一直搞不清楚。有这样一个规律,const修饰的是它前面所有的数据类型,如果const在最前面,那

2014-10-01 13:20:26 478

原创 extern “C”用法详解

简单来说,extern “C”是C++声明或定义C语言符号的方法,是为了与C兼容。说来容易,要理解起来还是得费些周折,首先我们要从C++和C的区别说起。符号大家都知道,从代码到可执行程序需要经过编译和链接两个过程,其中编译阶段会做语法检测,代码展开,另外它还会做一件事,就是将变量转成符号,链接的时候其实是通过符号来定位的。编译器在编译C和C++代码时,将变量转成符号的过程是不同的。本文所使

2014-09-30 16:56:19 912

原创 extern声明变量详解

昨天写完文章快零点,为了不浪费每天一次的群发资格,得赶在零点之前发送,刚给自己的个人微信号发了预览,Mac竟然死机了,看来一个月不关机还是会出点小问题。写的文章还没保存,这下只能是从手机复制粘贴发送到电脑上重新编辑了,于是狠了心按了强制关机。重新开机后发现,所有软件竟然全部恢复了死机前的状态,包括我那正在编辑还没保存的文稿,这里要为Mac系统点个赞!以上是题外话,今天的内容是编程相关的,非计算

2014-09-30 14:13:43 12270

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除