windows CE开发笔记

    前段时间硬着头皮接了夏老师介绍的一个项目,项目要求在手持设备的winCE平台下做个UHF卡的读写演示程序。说硬着头皮,是因为这个项目时间紧迫,而且我除了C#语言比较熟悉之外,这之前从未接触过winCE平台的开发。其次,那个人是夏老师的同学,而且夏老师都出面找我了,人情不好推却。

    刚开始先花了点时间研究了一下winCE平台的开发,然后确定了开发路线,以VS2008为开发工具,以sqlCE作为存储UHF卡中相关信息的数据库。将手持设备所读取到卡中的信息存储到sqlCE数据库中。但是,这又面临另一个问题,怎么将手持机所存储的数据与PC主机的数据进行交换共享呢?由于这个项目主要是为了给客户做个演示用的,因此要求也不会很高。所以,这个问题就等有时间再慢慢研究咯

php编程——查找数组中是否存在某个元素

查找一个元素是否在数组中,一共有如下三种方法:
in_array  ‘in_array()函数在数组中搜索给定的值。in_array(value,array,type)type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
array_key_exists ‘array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。array_key_exists(key,array)
array_search ‘array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。

当数据量不大的时候,比如小于1000,以上三种方法无论用哪一种没问题;
当数据量比较大的时候,用array_key_exists比较合适
当然这里array_key_exists占用的内存比较大,经测算
数组结构是: array(1, 2, 3, ..)和 array(1 => true, 2 => false, ..)
他们内存使用比值为1:2;
这个和内部实现有关系,实际上在php中第一种和第二种的数据结构类似,都是关联数组。

宁静致远

晚饭后,他们又吆喝着打麻将,刚好他们够四个人,于是我主动让出来,同一个厅中,他们热火朝天地打麻将,我自个儿在另一张桌边写毛笔字。这么嘈杂的环境,我能视之无物。我觉得主要是心境的问题,心能静下来,自然就会屏蔽掉外物的干扰。所谓宁静致远,大概就是这样一种感觉吧。

不经意间,父母老了

      昨天跟家里打电话,妈妈告诉我说我爸的那个工厂要倒闭了。这也意味着我爸准备下岗了,屈指一算,我爸待在那儿也有十多年了。可叹的是我现在才刚刚毕业,基业未立,也未能为老爸安排什么清闲的事情,因此年近半百了他还在考虑下一步去做什么工作,唉,真是揪心。

      之前曾不经意间,发现了爸妈都有白发了。有时候周末比较晚打电话回家,爸妈就回先打给我,语气中感觉到他们很想我,周末跟我聊聊电话他们都会感觉心里比较高兴。

打麻将的感悟

      公司煮饭的阿姨给我们带来了一幅麻将,周末,几个同事三缺一,于是我被拉上了,现学现用。他们给我讲了一下规则,我就开始上手跟他们玩了。很多东西就是这样,看起来很复杂,着手去做就发现其实也不难,打麻将也是这样。

      虽然我成年后第一次玩麻将(初三毕业聚会玩过一次,都完全忘了怎么打了),但一晚上竟然也被我和了好几盘,其中还有一次清一色的牌。当然里面也有运气的成分,毕竟像打牌输赢这样的事情是不能强求的。有些时候,眼看就要和了,但又出错牌了,因为你永远不知道你拿到的下一个牌是什么,也有时,你苦苦摸牌,就差一个牌就和了,当你觉得很艰难的时候,往往不知不觉就摸到这个牌了。这就像人生道路,你永远不知道下一个出口是哪里,也不知道在道路上会遇到怎样的风景,但只要一直坚定往前走,就总有豁然开朗的时候。有些时候,本来做好的牌,突然你发现你手头上的一些牌已经没用了,只好重新换牌。生活中也是这样,很多格局会变化,面对不断变化的格局,我们也只好学会灵活应变。

 

亲爱的,我们并肩作战

      学校的这个小项目算是告一段落了,想想这么多天来,你一直在充当我的助手,先是图片美化,然后,在广州又陪我一起熬夜加班,最后完成了制作,你又充当我的客服,帮我搞定了那个可怕的男人婆。最后,网站终于上线了。真的很开心,有你的得力相助。

      亲爱的,我心里感觉好踏实,因为我们一直在并肩作战。战场上,有并肩作战的伙伴就是好。

php中的钩子

        钩子,英文为hooks。在程序中应用相当广泛,但是究竟什么是钩子呢?本人介绍一下目前本人对钩子的理解和相关心得。

        假如有这么一段程序流:

function fun(){
      funA();
      funB();
 }

        fun函数正常的执行顺序,肯定是执行完funA,然后执行funB,然后fun函数就结束了。但是,假如我们想对函数做一些变化。比如说,fun是一个解析函数,我们希望后期可以提供丰富的解析函数,而究竟用哪个函数解析,我们希望在配置文件中配置。这个时候就可以发挥钩子的力量了。

       我们可以在function fun(){}中加入一个挂钩点H,然后再执行H这个函数之前,将钩子函数配置好,我么就可以根据需要来解析了。

$h=config_item("parser_fun") ;                           //从配置文件中获得相应的配置信息
 function fun($data){
     global $h;
    return  $h();
 }

      当然前提,我们得有自己的解析函数。
        除此意外,PHP还可以根据字符串提供自己的类,然后调用类的一个方法,传递某些参数,这些就为PHP程序的编写,以及后期的维护扩展奠定了,相当坚实的基础。
类的实现方法,大致如下:

$c=get_class_name(); //获得类的名字
$m=get_method_name(); //获得方法的名字
$k=$c->$m(); //执行类的某一个方法

        钩子在PHP中应用还是相当广泛的,就目前笔者所知的Codeigniter和Drupal中钩子的应用做出如下介绍:
        CodeIgniter中钩子的应用,主要是将所有钩子应用给了一个类Hook类,他向开发者对CI进行扩展,CI提供了几个挂钩点,在CodeIgniter的整个执行过程中,加入一些开发者自己的函数,而在Hook类的内部,根据外部config.php和hooks.php中的相应配置,获得相应的类或者单独的函数,然后执行之。当然这些类或者方法都是开发者自己写的。这样就可以让开发者用的更加舒心,感觉比较舒服,毕竟每个开发者应该都想在一个框架中加入更多的自己的东西。详细情况可以参看CodeIgniter官方文档,关于钩子的那一节:CodeIgniter钩子应用.
        而在Drupal中钩子的应用更是无处不在,他本身就是靠钩子维护了一个体系,Module,Block,Node各个部分的实现,都是经过根本的hook函数,然后将函数名经过相应的改变,然后调用该函数得到了整个的hook结构,甚至于到显示层theme的实现,都覆盖了theme主题的api,更加令人佩服的一件事是,他居然还可以用可视化的角度,来实现相应的theme钩子,这样就将主题的开发分为了开发者和设计者两大类,设计者对可视化更敏感,而开发者对函数更为敏感。两者都可以从各自的角度,对drupal进行相应的改变。岂不快哉!

http://istrone.com/?p=57