0%

前段时间想要给krproject增加数据库支持,主要是指mysql和sqlite,并考虑用sqlite3作为krproject的默认数据库引擎,一方面想方便试玩,另一方面会觉得这两个的适用场景可能更广泛些~

可是之前的数据库操作层是对嵌入式SQL(Embedded SQL)的一层包装:写数据库操作语句sql,gensql工具程序自动生成对应数据库操作的ESQL代码,再通过数据库提供的预编译工具将ESQL代码转化为c代码。一些主流的商业数据库管理系统像oracle、db2都有提供对应的预编译工具,而mysql和sqlite则不提供ESQL的支持。关于ESQL和ODBC的区别和对比,在上面的wiki链接里有更详细些的描述。

于是很自然的联想到更底层、更宽泛一点的标准:odbc,以前在学校的时候倒是被老师教过如何在windows里配置odbc数据源,那unix下也有对应的driver manger:unixODBC 和 iodbc,有很多的linux发行版都带了unixODBC包,或者有提供对应安装rpm或deb包,所以我就很快选择unixODBC了,也没有详细对比这两个区别了,想要深度了解的同学可以顺着链接进去看下,这里就不展开了~另外不得不说,msdn上的odbc文档还是相当不错的!

然后便花了点时间写了个小工具:rapodbc(rap其实是取wrapper的谐音啦,你非要理解成rap也可以啦,哈哈~)

它的主要功能是对odbc操作做个封装,开发人员只要写sql,它就能将sql转化成对应的odbc操作C函数,然后依靠odbc的标准化和对应dbms的odbc driver便可以实现操作的数据库无关性~

阅读全文 »

很久没有写博客了,国庆结束后将代码简单整理了一下,放到github上了,其实犹豫了很久,一方面我还是知道自己coding水平的,写的鸟代码可能会被人鄙视;另一方面,对于一个追求完美的人来说,这个版本确实还是太粗糙了。whatever……,我还是觉得有必要厚着脸皮将这第一步迈出去~

目前为止这个项目还是纯代码,并没有多少的文字介绍,花了一些时间整理了一个项目介绍的ppt:krproject-introduction

从上一篇krproject开发进展(三) 到现在已经有四个多月的时间了,其实这中间真正用来折腾krproject的时间并不是很多,不过还是做了些事情的:

回顾一下:

  • 增加历史统计量LRU缓存功能,krproject的大部分统计运算是基于内存存储krdb的,而对于行为习惯等时间跨度较长的统计量、特征值则需要从数据库中获取,为了减少数据库的操作次数,会对这些数据做缓存,缓存的大小可配置;
  • 为了提供接口,将引擎封装到krengine中,对外部仅暴露三个主要接口函数:kr_engine_startup(),kr_engine_run(),kr_engine_shutdown();
  • 编写了Python的接口,结合pika库实现了和rabbitmq通信的功能;
  • 增加了动态库加载功能(kr_module,只是简单包装了posix的dl功能),将krdb的接口转换纳入模块加载中,用户可自己编写接口数据到krdb内存的转换模块了。
阅读全文 »

问题引入

这是前段时间在微博上闹的还蛮火热的这样一道幼儿园问题:

很多ML大牛都发表了他们对这一题的看法,基本认为这是一个线性回归(linear regression)的问题,有些大牛还写了些小程序用以证明,结果很漂亮也很让人兴奋~参考博客

有粗略看了下@TreapDB大牛用python写的BP神经网络求解程序,结果也很给力!也了解到一些关于支持向量机与神经网络的对比,在样本需求和训练时间上SVM似乎还是要占优的, 于是我也忍不住想尝试下用SVM来求解,当然是借助工具了,具体用的是SVM-light,写这篇博文的目的也就是为了记录下我艰辛的求解过程,O(∩_∩)O哈哈~:

阅读全文 »