摘要: 在SICP的第二章的2.06有一个church计数的题目,非常有意思。 题目是这样的:定义0为:(define zero (lambda (f) (lambda (x) x)))定义加一操作为:(define (add1 n) (lambda (f) (lambda (x) (f ((n f) x)))))给出1和2的定义。one就是(add-1 zero),为:(lambda (f) (lambda (x) (f x)))one跟zero的差别就是对x多了一次f处理,可以猜一下,two应该是:(lambda (f) (lambda (x) (f (f x))))tow就是对x做了2次f处理. 阅读全文
posted @ 2013-08-27 11:54 yametech 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 最近将ubuntu升级了,大部分软件都能正常使用,唯独emacs挂了。打开emacs的时候,提示:emacs: symbol lookup error: emacs: undefined symbol: gtk_window_set_has_resize_grip看来是库找不到了,上google搜了一下,没有解决方法,没关系,重新装一个就是。1、安装emacs。先尝试用原来下好的源码安装,./configure提示找不到libtiff库,apt-get居然找不到这个库,还得添加其他的source。尝试了一下:./configure --with-out-libtiff,但是make的时候又出错 阅读全文
posted @ 2013-08-26 17:24 yametech 阅读(2267) 评论(0) 推荐(0) 编辑
摘要: 最近用了python的sqlite库做数据库存取,在这里总结一下。晚上还有一篇很好的介绍:http://zetcode.com/db/sqlitepythontutorial/。也可以作为参考。sqlite的连接sqlite连接分为两部,首先创建sqlite的连接,用于提交数据,然后创建一个游标,用于执行各类操作。典型的代码如下: try: con = sqlite3.connect(dbpath) cur = con.cursor() cur.execute("blabla") con.commit() except Exc... 阅读全文
posted @ 2013-08-24 22:07 yametech 阅读(442) 评论(0) 推荐(0) 编辑
摘要: 最近看到stackoverflow上对python闭包的讨论,很有意思,在此记录一下。原文可以去http://stackoverflow.com/questions/233673/lexical-closures-in-python看问题起源是有个程序员提了这么个问题;flist =[]for i in xrange(3): def func(x): return x * i flist.append(func)for f in flist: print f(2)本来预期的结果是生成三个函数,每个函数闭合了变量i,i分别为0 1 2,所以最后打印的结果应该是0 2 4我试了一下这段... 阅读全文
posted @ 2013-08-23 12:30 yametech 阅读(363) 评论(0) 推荐(0) 编辑
摘要: django采用了MTV模型,M代表Model,用于代码和数据库的映射。因为开发的时候,models其实很不好定下来,经常变来变去,这时候就会碰到代码和数据库不一致的坑爹问题了,即便执行了:>>python manage.py syncdb但是django也不会如你预期去按照代码更新数据库中的表结构。让我们来看看django的官方文档对syncdb是怎么描述的:Syncdb will not alter existing tablessyncdb will only create tables for models which have not yet been installed 阅读全文
posted @ 2013-08-20 16:14 yametech 阅读(904) 评论(0) 推荐(0) 编辑
摘要: 在“BLE的软件开发--怎么在OSAL框架中写程序1”描述了怎么在OSAL中加入一个task。但是第一步task怎么写没有描述。这里举一个简单的例子阐述task的大致开发方法。假定现在要实现这样一个目标:按键控制LED灯暗灭。要实现这样一个task。可以分为4个部分:task初始化函数event处理函数OSAL message处理函数按键处理函数task初始化函数task初始化函数,主要是把task需要用到的功能初始化。写好task初始化函数后,要将其放入osalInitTasks()中,这样OSAL在初始化的时候能将其一并运行。在在这个例子中,需要初始化的只有按键。整个过程也比较简单。代码如 阅读全文
posted @ 2013-08-16 09:36 yametech 阅读(1007) 评论(0) 推荐(0) 编辑
摘要: 长按短按一般是用来扩展按键功能,让人机界面更好用。其实现在做的最好的人机界面还是触摸屏上,iOS中对一个图标长按就激活了应用删除。除了长按,触摸屏还有短按、滑动,更牛逼的是手势操作,我现在累死累活做了个按键的长按短按处理,才发现触摸屏的使用有多牛逼,在用触摸屏的时候根本不用学,自然而然就会用触摸屏,这尼玛才是科技和人的结合啊!!!当然,这一篇还是描述怎么做按键长按短按的,擦!长短按的定义长按是指按下按键超过一定时间,这里以2s为时间阈值。短按是指从按下按键到弹起按键,不到0.5s。实现根据上面对长按短按的定义,可以这样设计:按键按下的瞬间触发中断,然后每隔100ms轮询,如果超过2000ms, 阅读全文
posted @ 2013-08-15 11:44 yametech 阅读(1203) 评论(1) 推荐(0) 编辑
摘要: cc2540的OSAL的按键做的很复杂,真心没搞懂为什么做成这样。为了理解OSAL的按键设计,特此分析一下。我们以按键的状态变化为线索,看看各个模块的作用,以及变量是怎么变化的。按键设计总体上可以分为2部分,按键初始化和按键运行,按键初始化主要负责跟按键相关的IO端口设置、中断设置。按键运行就是OSAL检测按键的过程。按键初始化1、初始化按键在main函数调用函数void HalDriverInit (void);HalDriverInit对HAL层(硬件抽象层)做初始化,并在其内部调用void HalKeyInit( void );完成按键的初步初始化,按键初始化主要是把按键对应到IO口,并 阅读全文
posted @ 2013-08-15 11:19 yametech 阅读(1757) 评论(2) 推荐(0) 编辑
摘要: OSAL是什么?OSAL是BLE的一个简化的“操作系统”,可以完成“进程"调度,以及"进程"间通信。在OSAL中,"进程"也被简化了,其实就是一个函数+通信,被称为一个task。task的函数可以是蓝牙LL层协议,也可以是硬件的中断、输入输出。OSAL会给每一个task分配一个buffer,用于task之间通信。总之,OSAL是个特别简单的操作系统,能完成函数的调用和各个函数(模块)之间的通信。OSAL的使用OSAL的使用也非常简单,我们只要把想要调用的函数填写到task列表中就行。具体来说,分为2步。1、把函数写好,这里其实也有很多要注意的, 阅读全文
posted @ 2013-07-29 12:03 yametech 阅读(716) 评论(0) 推荐(0) 编辑