全局变量初始化顺序小坑一则

公司的项目中使用了相当一部分C++11的特性,让我感觉跟上了时代。可是在开发过程中,放着好好的VS不用,竟然使用Qt creator作为IDE,让人觉得也实在太没追求了。本人是个相当有追求的人~有道是,“工欲善其事必先利其器”,不能使用VS,心里的不爽就会使得效率下降,于是便在每次rebuild的时候,搞起了vs工程。我也很快就意识大家都不用vs的原因,这个工程使用Qt addin插件转化后竟然是不能直接使用的,而且大部分问题都是来自插件本身。经过不断的尝试,终于使得程序可以通过编译并运行起来了,但完成转化工程后,还要另外做七步手动的修改,相当麻烦。本以为就此可以安心使用VS了,但程序一运行就直接崩溃,通过调试定位到了崩溃的地方,是一个全局的QStringList的初始化,使用了C++11的list initialization方式,并且每一个初始化元素也都是全局变量。我在最初并没有意识到这里面的猫腻,只是试着快点让程序正常运行,于是只是简单的注释了这个初始化过程。果然程序可以正常运行了。
继续阅读 »

TCP/IP

1. 链路层协议:以太网,IEEE802.2/802.3,SLIP/PPP
MTU位于链路层,以太网(1500),802.3(1492)。
路径MTU是指两台通信主机路径中(经过的网络)的最小MTU。
SLIP链路上传输每个字节都需要增加1b的起始位和1b的结束位。
继续阅读 »

windows下adb对中文参数的支持

项目前期一直在mac os进行开发和测试,adb的使用一直没有出过什么问题。其后需求调整,将工程移植到了windows底下,结果就遇到了路径中含有中文字符的文件无法正确完成pull操作,经过调查,确定通过修改adb原码,将运行参数从其它字符集转至utf8是一种可行的方法,其原因会在后文给出一知半解的解释。

参照网上几篇使用VC进行编译的教程,进行了一番尝试,由于需要修改大量代码,不得以放弃转而使用已经上手的Qt-MinGW进行编译,最后证明这样真的省事多了。
继续阅读 »

seize the day

Gather ye rosebuds while ye may,

Old time is still a-flying,

And this same flower that smiles to-day,

To-morrow will be dying.

QComboBox使用中遇到的一个小坑

Qt使用已经一月有余,对它提供的signal/slot机制和蕴含在一些控件中的设计思想有了一些领悟,其线程框架也挺新颖,而且QtCore里面封装的大量实用模块再次让我有种相见恨晚的感觉,得尽快把两年前半途而废的那本<C++ GUI Programming with Qt>解决掉.

虽说是瑕不掩瑜,但有些问题也做不到视而不见,特别是在接二连三的发生令人震惊的坑人事件之后..现在要说的就是坑了我两下的QComboBox了.它的主要元素有三个:用于展示的text,索引index,以及可以存放自定义数据的itemData,当然还有同样用于展示的icon,这个我不是很关心.这三个元素中最吸引人的当然是itemData, 这是一个QVariant变量, 也就是说用它不光可以存放QString,QStringList这样Qt本身提供的数据类型,还可以存放一个UserRole的自定义类型的数据,这样也就意味着我们无须花费额外的精力维护一个类似于映射的数据集(最后证明这是我的一厢情愿),而我们仅仅需要做的就是把这个自定义数据类型注册到QMetaType系统中去,并实现一定的协议,就能享受Qt为你带来的免费管理了.

继续阅读 »

从adb的dumpsys中萃取信息(持续更新)

摆弄豌豆荚的时候,发现它居然可以根据设备的旋转情况调整截屏的尺寸,仔细观察发现截屏处的设备外框图片上的Home键也能与实际一致,我知道这个通过android sdk一定很容易获取,但是能否依靠adb来达到同样效果呢?自然少不了一番google,还险些与正确答案擦肩而过,那是因为横/竖屏 的 文艺/专业 命名是Landscape/Portrait, 生活常识算是起了点作用.

接着就介绍下找到的这个牛B哄哄的命令:dumpsys, 估计一般想要找的配置信息和运行时信息都可以通过这个命令获取,尝试了一下不加过滤的情况(adb shell dumpsys)足足产生了5MB的内容.这些日志内容会因为设备类型及系统版本有所差异,对里面的细节只有慢慢了解了.

继续阅读 »

脑洞大开系列索引

“作为码农,如果还没有千疮百孔般多的脑洞,那,一定是不合格的.”

                                                                       — XX

 Protocol Buffer 更短,更快,更好上手
 Base64编码 用64个可打印字符表示二进制数据的编码方式(三字节转四字节)
 OSGi 动态加载模块
HTTP Digest authentication 报文摘要认证
 😕

code guy的自我修养

1.互斥量(mutex)与信号量(semaphore)的区别在于,前者是谁获取谁释放,而后者是任意线程释放。

  临界区(critical section)比互斥量的访问更为严格,使用范围只能是本进程

 

2.volatile可以用来阻止过度优化:A.阻止编译器为了提高速度将一个变量缓存到寄存器而不写回。B.阻止编译器调整操作volatile变量的指令顺序

继续阅读 »

python笔记

1. print重定向, print >> fd, “content”
在print语句的最后加入’,’,可以使得输出不换行,并以一个空格符代替

2. help(built-in cmd)

3. doc strings

4. Operator: // 为floor操作, ** 为幂操作

继续阅读 »

Advanced Bash-scripting 笔记

Based On <Abs-Guide>(author: Mendel Cooper)

1. man magic

2. 注释可以穿插在一句命令中,但命令的剩下的部分必须换行
‘”中的和\#后的都不是注释

3. 逗号,可以用来将一系列算术操作连接起来,也可以进行字符串连接,注意不能有空格,如 echo /{,/usr/}bin 的结果是 /bin /usr/bin

4. 冒号:相当于null command, 永远返回true, 另外冒号可以成为一个函数的名称(兼容性差)

5. **在算术运算中表示幂

6. () 中的命令会在一个子shell中进行,所以其中所有变量都是局部变量,回到父shell中便无作用了. 例 a=123;(a=321);echo $a 的结果是123
继续阅读 »