Bug in Waspmote API v0.15

I found a bug in Waspmote API v0.15 when I was trying to set XBee link keys. The API failed to set the key as specified in the code. The bug lies in function gen_data()” in lines 4355-4403. Details below. However, it was corrected in v0.18.

The function in v0.18 is as follows:

一步一脚印

咱虽然笨,一步一步慢慢来还不行么。

用正则表达式改进了昨天的计算器,用来限制用户输入。

因为这个匹配模式是字符串,而字符串中”是转义字符,所以’d’放到字符串中就应该写成’\d’。类似的,如果要匹配一个”,则应该写成’\\’。

另外今天还写了个记事本,实现了最基本的打开,修改,保存和修改字体功能。Qt
Designer用的不太熟,于是手工添加控件,那叫一个麻烦。基本控件大致了解了,对文件的操作还不熟。中间由于把保存文件的对话框写成了打开文件的对话框而导致一直不能保存文件,原来这两个还不一样,虽然长得很像,汗。

对Signal-Slot机制的了解基本到了可以用的程度,但是对于中间的参数传递过程还一无所知。明天继续。

=============================心情分割线=============================

最近一直比较抑郁,算来差不多郁闷了将近二十年了。当然中间也会有间歇性的亢奋,但总体来说太微不足道了。以前总是对过去恋恋不舍,对未来不知所措,对当下却不能把握。总是过于重视别人的看法,过多的考虑别人的感受。从来不知道自己需要什么,现在回首看看,自己竟然不认识自己。

于是我打算跟自己一刀两断,我从今天开始就是我而且只是我,不再在乎他人的评价,不去关心我不愿关心的人和事,只做自己想做的事情。锲而不舍,勇往直前,纵然头破血流也在所不惜。不是做回自己,因为以前的我没有自己。

这几天一直听李宗盛,把他的四首歌翻来覆去的听。他那沙哑的声音切割者我的心,想哭却无法从干枯的眼睛中挤出半滴泪水。真爱难寻,我会继续等待,孤傲的常驻于此。直到你出现在我面前,I’ll love as if I’ve never been in love before.

思维之混乱,阅者了然。

千里之行

用Qt写计算器,花了我一个晚上终于写出来一个能用的了,能赶上大二学Java时写计算器的速度了。

用Qt Designer设计界面比较方便,用熟之后效率会更高。把界面设计好之后可以通过继承的方式给自己的类添加逻辑。如果设计的界面保存为mycaculator.ui的话,uic将会自动将这个XML文件转换成ui_mycaculator.h,其中的namespace为Ui。

另外,Qt对字符串的处理简直跟Java一样了:

总算是迈出了第一步,再接再厉。

更新:上面的正则表达式不对,因为’+’, ‘-‘和’*’在正则表达式中有特殊意义。应该为如下:

立志

毕业在即,前途未卜。不是没有动力,是实在不知道自己该干什么好。前几天连续看了几天的Android开发,从昨天开始又开始看Qt,自己已经迷茫的手足无措了。

但是不管做什么,只要能做好,就不会有任何问题。重要的不是做什么,而是我愿意花多少精力来做这件事情。

所以从今天起,给自己一个目标,然后矢志不渝的坚持下去。不再给自己任何借口,不要心存侥幸,不要有一丝恐慌。踏踏实实,一心一意的奋斗,不管前路如何艰险,我只顾走好眼前一步。

从今开始,用所有精力去完成一件事情:学习Qt。具体规划表:

25/10/2010–07/11/2010 参考C++ GUI Programming with Qt 4
学习Qt,顺便复习C++语言。理解Qt各种类的使用方法,每天必须保证至少200行的代码量,中途不准间断。
07/11/2010–21/11/2010 第一个Qt项目的详细规划,包括详细设计,严格按照软件工程方法做好前期工作。
21/11/2010–17/12/2010 第一个Qt项目的编码和测试,以开源方式发布。严格按照计划进行,宁可考试挂科也不能放弃执行自己的项目。
20/12/2010–17/01/2011 对上一个项目进行总结,给自己充电,阅读理解An
Introduction to Design Patterns in C++ with Qt 4。同时启动第二个Qt项目,做好详细规划。
18/01/2011–10/02/2011 第二个Qt项目的编码和测试,以开源方式发布。严格按照计划进行,宁可不做毕业设计也不能放弃执行自己的项目。

铁了心去干一件事情,拿出破釜沉舟的勇气来,就像两年前一样。

Qt学习:简介和信号与槽机制

以前以为Qt比较麻烦,今天看了一下,发现它其实不比Java难。

首先Qt有非常详细的文档。这个对于开发者来说是十分重要的,纵览现在的流行开发平台,不管是Java,还是微软的平台,都有为开发人员提供详实的文档和指南。如果没有文档支持,开发过程会相当痛苦。这一点我深有体会,前段时间用libpcap写点儿小程序,这个库的所有文档就是一页man page,我甚至不知道某个函数的参数到底是什么类型。

其次,Qt的跨平台性能不输Java。Qt现在支持大多数桌面平台,Windows,Linux和Unix,Mac,手机平台上面的应用也已经成熟。开发者不用更改一行代码,就可以使自己的应用程序运行在每一个操作系统中。

还有,Qt被Nokia收购之后推出了配套的IDE,Qt Creator。这个IDE强大且美观,包含方便的图形界面设计工具,图形化调试工具,手机界面模拟器以及多样化的版本控制工具支持。

总体来说,Qt的易用性是不错的,易于上手,易于开发;但是至于性能,包括速度和安全性,我目前还没有一个清晰地认识。但我相信Nokia里面的那帮人会不断想方设法的提升Qt性能的,毕竟Nokia现在手里的王牌也只有这个了。

Qt之中提供了方便的消息传递机制:信号和槽机制(Signals and Slots),这也是Qt的核心机制,用于对象之间的通信。他的格式如下:

当Object1的信号被触发时,Object2的相应槽就会给以相应。当然,上面只是信号与槽的一种连接方式,其他方式还可能是:
一个信号与另外一个信号相连,即一个信号触发另外一个信号:

一个信号与多个槽相连:

同样的,一个槽也可以响应多个信号:

简单的例子:

Technical Details

We define a BPF filter as “icmp and dst host <bouncer_ip>”, which filters out all none-ICMP packets and packets not destined to the bouncer. The we compile this filter and set the filter to the capture device.

When the capture device captures a packet, a process_pkt function is called to process the packet. And that is where we validate the packets and then, if the packet is valid, update
the packet and then send it out, or write the packet to a dump file.

The process of validating the packets are as follows:

  1. Validate checksum of IP header.
  2. Validate TTL of IP.
  3. Validate IP source address
  4. Validate ICMP header checksum. 
  5. Validate ICMP type and code. 

Since we write the packet to a dump file in a separate function, so a pointer to the dump file handler is passed to the processing function when the process_pkt function is called. The same method is used to pass server IP address and test mode flag.

We keep a linked list of all the ICMP echo requests. When a ICMP echo reply is received, we go through the linked list to find out where
the original echo request comes from.

The code is as follows.

bouncer.h:

process_pkt.c:

Collage

Collage is a little game that let users to rearrange pictures according to the given order. The main logic is as follows:

 

C++ STL Notes: String Replacement

Macro

You are asked to do some replacements on a string. Can you work it out?

Input and Output

 

Each test case will begin with a string in a single line, and followed by an integer N which means the number of replacements. The next N lines will give you two strings s1, s2, you should replace all the s1 into s2. For more details, see the
sample below.

Sample Input

 

abc
3
a b
bb a
c d
aaabaaaa
1
aa a

Sample Output

 

ad
aabaa

Note:
For the first sample:
After the first replacement, the string will be bbc.
After the second replacement, the string will be ac.
At last, the string will be ad.

My Code: