Archives for code

all about software code

再谈一下Golang

上次写了一篇使用Go语言一段时间的感受。支持和反对的声音都不少,反对的不外乎都出于这几点:Golang特性少,Golang没有集成编程语言研究这些年的新成果,Golang不exciting。Blah blah blah blah。 今天看Coders at work,Douglas Crockford在谈到标准设计的时候说: ” I think the best way to make Javascript better would be to make it smaller. If we could just get it down to what it does really well and remove the features that add little or no value, it’s actually a better language. And I think [...]

使用Go语言一段时间的感受

有一段时间没更新了。最近在忙一个Server+Client的项目,Client是Android手机,大概也就是几十的规模。Server是纯Golang实现,没有apache或者ngix这种web server,也没有数据库,自己写了个文件管理module,handle这种小规模的服务没问题。算下来接触Golang也有四个多月了,断断续续写了一些东西,这里纪录一下心得吧 先大概说下为什么用Golang。我是一个对语言有洁癖的人,曾经是一个c+Python的坚定呐喊者,最常说的一句话就是,只要熟练这两种,什么情况都能应付,根本不用Java和C++(纯指我所在的领域)。核心代码用c,速度快,需要记的语言细节少;外围用Python glue,灵活,简洁,任何模块都容易上手,绝配。Java的繁琐,C++的无数无用的特性,都让我只在不得不用的时候才去用。Objective-C是另一个我欣赏的语言,问题是不跨平台,过于封闭。

一个新的开源项目Libsvm-androidjni

我创建了一个关于libsvm库+Android的开源项目 Libsvm-androidjni. 这个项目的目的是让当今最流行的SVM支持向量机机器学习库Libsvm被移植到Android平台中。当然官方提供了Java库,但用Java来进行大规模的SVM计算还是太低效了,所以这个项目是要把c/c++版本的库移植到JNI环境下。 目前的code状态是svm的training和prediction功能皆可正常运行。具体的使用方式请参考README。虽然是c++环境,但主体code还是c的风格,这和我个人喜好有关,不影响使用。 目前还有一些高级功能不完善,比如完整的参数传递和误差计算。 项目代码请到https://github.com/cnbuff410/Libsvm-androidjni下载。

Mac OS X上GCC编译的EXC_BAD_ACCESS错误

某次在写compiler作业的时候,需要验证自己生成的汇编代码兼容多平台。结果发现在Linux下没问题,在Mac OS X下会出现 Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: 13 at address: 0×00000000 的错误。查阅Mac OS X ABI Function Call Guide,发现在Mac基于Intel x86的平台上,function call的地址必须是16字节对齐的。解决方法是在gcc命令中加入flag: -mstackrealign。 这里是这个flag对应的解释:

构建View时可能用到的代理函数调用顺序

很多时候,要记住iPhone试图加载的life-cycle对应的代理函数是有点头疼的,特别是用Interface Builder构建界面的情况下。这给如何找到最佳的位置来添加自定义的视图绘画/初始化/配置成为了一个对于新手来说的难题。我把目前用到的可能会override的方法总结在这张图里。注意两点 1. 这是我目前遇到的case的总结。我不100%确定适用于所有情况 2. 不是每个case都会用到这些方法的重载。我只是把它们放在了一张图里面而已

iOS4中Core Motion框架的介绍和使用

作为一个刚学习iPhone编程一周的人来说,其实写这篇文章的目的不是传道授业解惑,而是为了知识的总结。如果能吸引到各位为我传道授业解惑那再好不过了。文章基本的内容,整个流程是参照WWDC 2010上的session 423: Sensing Device Motion in iOS4写的,同时参考了开发文档Event Handling Guide for iPhone OS: Motion Events。当然,我在介绍的时候会添加一些个人的总结和原理的补充。文章可能有错误的叙述,发现后请指出,谢谢。 我之前的文章:移动设备智能化的基石–从iPhone4的传感器谈起曾经写过,iPhone4增加的陀螺仪弥补了很多现有motion sensor的不足,也介绍了很多背景知识。加速度计最大的缺陷,就是无法检测沿着重力加速度轴方面的旋转变化,而且,如果仅仅有加速度计,无法避免重力的干扰。传统的方法是怎么做的呢?先高通滤波,把近似于直流分量的重力加速度隔离出来,再低通滤波,把因为手机颤抖产生的高频噪声去掉。大量的滤波,不仅会影响到原本的加速度信号,还会严重减缓处理速度,并随之影响程序相应速度。电子罗盘在这方面毫无帮助,这玩意本身的读数都需要很长的稳定时间,还特别容易受环境干扰。所以,陀螺仪的引入,解决了这几个大问题,我们可以用它来测量沿重力加速度的旋转,也可以测量快速的旋转,大大增强了motion相关的处理工作,更重要的是,通过陀螺仪可以判断手机当前的摆放位置和姿势,然后通过这个信息能够得到相当准确的重力加速度分量,而不是从加速计采集的包含很多噪声的加速度值中提取。所以说,陀螺仪对于motion sensing方面的工作,是最关键的一个部件。陀螺仪的具体原理,请参考之前那篇文章。

速度和代码体积的角逐—33种程序语言测试

没有标题党,没有标题党,今天要介绍的网站,是一个针对33种程序语言进行了13个交叉测试的牛逼网站,The Computer Language Benchmarks Game(Attention: 目前非常时期,需要翻墙方可访问)。如果你希望了解一些关于程序语言的速度,代码体积等特性比较,并希望以此作为依据来选择要学习的语言的话,这里绝对是你的最佳参考场所之一。 如果你是属于对这种测试已经感到厌倦并声称不再相信任何测试的人,那么不要着急,先看看这篇声明。基本上,The Benchmark Game做了大量的工作来保证其测试的公平公正已经普适性,如果放下偏见,也许你会稍微对其有一些认同。自从回家休假后杂事太多,所以我只是稍微看了一下,没有深入研究。有兴趣的朋友请自行围观。 测试结果可以用下面这个坐标图表示

Python中最快的字典排序方法

python人民都知道, 怎么让字典根据值排序是一个没有built-in, 只能各路神仙各显神通的东西. 而dict又是python里面强大无比的数据结构, 因此大家都在绞尽脑汁想一个个让dict快速排序的方法. 07年的时候, NICK GALBREATH在博客上发过一篇post post on sorting by value at Digital Sanitation Engineering介绍了一种方法, 并声称这个方法是“the fastest way to do this and it uses the least amount of memory. Enjoy.” 一般能这样声称的, 都会遭到别人质疑, 况且在python官网的Python Enhancement Proposals目录下, 还有不同的说法. 在PEP 265页面中,介绍了另外一种方法, 也说是最好的. 到底什么才是最快的字典排序方法?

Algorithms in a Nutshell电子版下载

点此下载 来自Pure algorithm group,帮RomanGol带放在此空间。

Matplot-python用法速查

本文是给自己的Matplot-python用法速查列表,并非任何正式文章,如果看不明白不用奇怪,不感兴趣的朋友直接跳过。 最近上Data Mining课作业老要求画图,反正都是用python做,实在厌倦了Gnuplot,所以决定完全投身Matplot怀抱。但因为使用频率不高,每次要用的时候就感觉忘了,查manual太累,放狗搜又没有什么好的中文教程,所以把一些常用方法记录在这里,主要是几种常画图的典型例子。以后多接触一种,就添加一种,随时更新。 顺便提一句,如果是pythoner,坚决推荐用matplot画图,方便程度仅次于matlab,但与python无缝接合。 典型的Matplot例子:

嵌入式系统上的简易printf

此文针对嵌入式软件的业余初学者,高手请自行路过打酱油。 嵌入式中,调试手段通常有两种,一是远程gdb,一是直接printf。如果是调试自己玩的小板子,用gdb有点大张旗鼓了,大多数情况下printf就可以搞定。不过printf的问题是stdio lib的size太大,稍微有点程序,加上几个常用的库,比如stdio和string,超过16k甚至32k(已经大于一些低端芯片的flash容量了)是很正常的事情,而且通常比较慢,程序越多,越麻烦。道理很简单,标准C语言库的规范中,Printf() 必须处理大量的数据格式,包括字符串、字符、(各种长度的有符号和无符号)数字,以及浮点值。而且格式字符串还要包括用于更改文本对齐、基数、间距、字段宽度和精度的调节器和指示器。符合这个规范的代码必然会是冗长和繁重的。一些嵌入式系统库倒是提供了一些之针对整数的printf,但还是有问题,首先是还是太大,其次是你没有自己的调整权限。 其实printf也就是IO的调用包装而已,我们完全可以自己写一个简易版本的printf满足自己的需要,并随时根据需要裁剪。具体来说,printf在这里要起的作用就是将调试字符串从嵌入式目标空闲的串口压出,并在运行于宿主工作站的终端模拟器上显示结果。下面就简单介绍一下,如何来自己写一个简易printf函数。

Python3的参考书出来了

http://www.qtrac.eu/py3book.html 500多页吧,挺薄,有兴趣的朋友看看。今天圣诞,就不多写了:)

两个有趣的图片

在MSDN Rowe的blog上看到的,放到这里来,估计是比较火星了。 第一个是文本编辑器的学习曲线。说是文本编辑器,其实vim,emacs都不算纯的文本编辑器,更不用说可怜的再次受鄙视的VS了。我是一个vim的坚定支持者,原因就在于vim的学习曲线。当然,你看起来很陡很短的坡,我用熟练也花了至少3个月,也没有那么短的:) Anyway, it’s worthy of efforts. 下一个图片是典型的口水图片。

初学python,感受和C的不同

从开始看Python到现在也有半个多月了,前后看了Python核心编程和Dive into Python两本书。话说半个月看两本,是个人都知道有多囫囵吞枣,这也是因为我暂时没有需求拿这个做大型开发,主要是平时的小程序test用一用。所以我的策略是,整体浏览,用到时候现查。话说这核心编程第一版太古老了,老在讲2.2之前的东西,我看的翻译电子版,翻译得也不好,很晦涩。看完这个后还有点云里雾里,看网上人家说DIP好,啄木鸟还有免费电子文档,就找来看这个。怎么说呢,讲的比核心编程好,但不适合第一次看的初学者。我之所以觉得讲得好,是因为看核心编程,有些概念还有些模糊,看了这本书就明白不少了。要是初学者上来就看这本,保证不好理解。

表示爱情的数学

偶然间在网上看到这篇文章,觉得比较好玩,就照着画了一个,效果图如下 1996-2008,我们认识12年。不知道还会坚持多久,但不管我以后在哪里,你永远在我心中。