最清闲的爸爸

刚有了孩子的同事们,看上去一个比一个憔悴,甚至还有人直接就跟我抱怨当爹的艰辛。相比之下,我这个爸爸当得还真是轻松啊。

豆豆出生的头两个半月,呆在山东外婆家里,期间我只去陪过他三个星期左右吧,最辛苦的阶段被我逃了。等豆豆回上海的时候,已经变成小乖乖了,十分好带。豆豆爱笑不爱哭,如果不高兴,不是就是饿了,就是困了。只要掌握好他的吃喝拉撒、睡觉、玩耍的时间规律,豆豆就几乎从不哭闹。现在,豆豆晚上跟爷爷奶奶一起睡,半夜里吃那一次奶也不需要我管了。我常常可以一觉睡到天亮,真是天底下最幸福的老爸啊。

不过豆豆现在大了,脾气见长,也许以后要烦心的事会变多吧。昨晚,豆豆喝水的时候,我故意把他奶瓶抢走,他居然恶狠狠得朝我大吼大叫,这脾气像他妈。

中午我还在上班,老婆就迫不及待的打来一个电话,说她摸到豆豆的小牙了。晚上我回家一摸,豆豆下牙床上果然有个硬邦邦的小尖。由于豆豆极不配合,露出来的牙齿又极小,我们一家人费了好半天,才看清楚它的位置,是左下方的门牙。

Advertisements

五个半月大的豆豆

学会倒着爬了。豆豆自从学会了翻身,就一直努力往前爬,无奈年纪太小,腿脚根本不听使唤。可怜豆豆一把子力气,不知道往那里用才好。豆豆常常把手拼命往床上撑,胸脯挺得老高,自己跟自己较劲,一会脸就憋的通红了。后来豆豆就不用蛮力了,反正不好使。他有时候会突然一松手,身子扑到在床上,然后再撑起来看看挪了地方没。两个星期前,豆豆学会了原地打转:把肚子作为支点,两只手交错向左或右倒腾,几下子就能来个180度大转弯。最近,豆豆又学会了后退了:两只手先缩到胸前,然后他身体的前上方用力一推,他的肚皮就会朝脚的方向一划。他这一招效率还挺高,我们全家不得不对他提高了安全警戒级别,生怕他自己促溜一下掉到床下去。

这是豆豆在床上爬呢:
DSC01389

豆豆给家里每人个都分了工:爷爷是抱他散步的;奶奶是陪着睡觉的;妈妈是用来吃饭的;爸爸是陪玩的。想干某件事了,就去找特定的人。比如说饿了,就会对着妈妈来一个十分谄媚的笑容;不饿的时候,看见妈妈,立刻把头一扭,就好像挡了他的视线一样。周末,豆豆睡午觉醒来,发现奶奶居然不在家陪睡,立刻就不高兴了。我和豆豆妈只好抱着他出门去玩,分散一下注意力,顺便给豆豆拍了几张外景照。

豆豆和爸爸:
DSC01412

豆豆和妈妈的大头贴:
DSC01430

豆豆喜欢别人逗他玩,一玩起来就嘎嘎嘎嘎笑得像个小疯子。他对游戏的要求还挺高呢,一定要换着花样才行。头一次玩骑大马、藏猫猫、举高高等的时候,他都乐的哈哈的;可是第二次再来就兴趣不大了;第三次还玩,就面无表情表示不满了。我们一家人早已使出浑身解数,现在都黔驴技穷了。

爸爸使出各种招数逗豆豆:http://v.youku.com/v_playlist/f5520621o1p11.html

豆豆晚上还是要吃着奶睡觉,白天倒是可以抱着他哄哄就睡了。哄他睡之前,他是一定要哼哼唧唧的才行。有时候能哼哼四五分钟才睡着,也不知道他这是表示高兴?表示不满?还是自己哄自己睡呢?

豆豆哼哼唧唧的睡觉:http://v.youku.com/v_playlist/f5520621o1p13.html

豆豆满五个月的时候开始添辅食。现在他主要吃的辅食只有配方米粉和苹果,他可爱吃这两样东西了。开始吃苹果的时候,我只给他刮一些汁,看他爱吃,就又刮了些末给他。现在我每天还会给他削一个苹果块,放在他嘴里咬。别看豆豆没牙,吃奶的劲可不是白练的。苹果块被他咬的嘎吱嘎吱响,一会就嗑出两个大坑来。

豆豆在啃爸爸吃剩的苹果核:
DSC01398

豆豆吃米糊:http://v.youku.com/v_playlist/f5520621o1p14.html

反馈节点

反馈节点和移位寄存器相比,他们的功能与本质是完全相同的。反馈节点的优点在于它不需要从循环的边框上去连数据线,因此可以把程序写的更简洁美观,尤其是控制或电子行业的工程师,他们本身很熟悉反馈的概念,可以直观理解这一节点的用途。但是由于反馈节点实际依赖于循环结构,而他们之间又没有数据线相连,使用反馈节点可能一不小心就把逻辑写错。

下图是一个简单的使用了反馈节点的程序代码,它的运行结果是什么?

image

但从这个程序我们是无法判断运行结果的,因为我们既不知道反馈节点的初始状态,也不知道它运行了几次。给定了这两个条件我们才能推算程序的运行结果,比如下图中的程序,运行结果是5。

image

那么下面这个程序运行结果是几呢?

image

如果出现循环嵌套的情况,反馈节点是针对于包含它的每一层循环结构的。它相当于在每一层循环结构上都建立一对移位寄存器,然后把它们串联起来。因此,上图程序运行的结果是25。

特别值得注意的是,反馈节点与循环结构不一定要放在同一个VI里。比如上上图里那个简单程序,当它作为子VI的时候,运行整个程序,result输出的值可能不是5,初始化的值就是不起作用。这个很可能是因为这个子VI的某个上层VI中还有循环结构,而这个循环结构能够影响它里面非常深层的子VI中的反馈节点。

运用下面的技巧可以让反馈节点变得更难以捉摸,如果你诚心想让人看不懂你的程序,不妨试试。

反馈节点有个使能输入端,右键点击反馈节点,选“Show Enable Terminal”可以显示出这个输入。它的输入为真时,反馈节点正常工作;输入为假时,反馈节点并不拿新的数据,而是把上一次得数据返回回来。大家猜下面这个程序运行结果是啥?

image

反馈节点只有在i为偶数时才工作,因此程序是在统计0~4中有几个偶数,结果为3。

移位寄存器出了可以可以返回上一次迭代的数据,还可以返回上n次迭代数据。反馈节点也有类似功能。右键点击反馈节点,打开它的属性配置对话框,在Configuration中可以选择Delay的次数,比如咱们设置延迟3次,那么反馈节点每3次迭代才把数据反馈一次。比如下面这个程序,result控件在程序的5次迭代中分别返回值1、1、1、2、2……,其运行结果是2。

image

那么多层循环会对延迟有什么样的影响呢?

image

在上图的程序中,result总共经历25次迭代。在这个多层嵌套的循环中,带延迟的反馈节点依然是每隔3次迭代(最里层循环的迭代)返回一次反馈数据。每次迭代返回的数据分别是:1、1、1、2、2、2、3、3、3、4、4、4、5、5、5、6、6、6、7、7、7、8、8、8、9。也就是最终结果为9。

最后大家猜一下下面这个程序的运行结果是几?

image

reference 死锁问题

LabVIEW中的引用经常需要和“In Place Element Structure”配合使用。In Place Element Structure 对一个引用的数据进行处理时,为了保证多线程安全,它会锁住引用指向的数据;其它线程若需对同一数据做操作,必须能这个In Place Element Structure中所有代码执行完毕才可,这样就避免了多线程读写同一内存数据所产生的竞争问题。

举例来说,下面这段程序的执行时间是1秒:

image

而下面这段程序的执行时间则是2秒:

image

因为第二段程序中的两个In Place Element Structure必须顺序执行。

有了“锁住”这个操作,就有不小心造成死锁的可能。比如对于同一数据的引用,千万不能嵌套使用In Place Element Structure,否则就会死锁:

image

在上面这个示例中,程序运行至内层的In Place Element Structure,就会停在这里等外层In Place Element Structure运行结束,释放它锁住的数据;而对于外层In Place Element Structure来说,它内部的全部代码要运行结束,它才结束。因而它们相互等待,造成了死锁。

豆豆回无锡转了一圈

给豆豆上户口的时候,派出所的人说,豆豆籍贯必须跟爸爸籍贯相同,于是豆豆就成了无锡人了,尽管豆豆爸自己都不会讲无锡话。五一的时候,趁着放假,带豆豆回了一趟无锡,去拜见一下老家的叔叔阿姨们。豆豆表现可乖了:在众多亲戚面前不哭也不闹;谁都给抱;见了生人先给个笑脸,然后依依呀呀聊上几句;还为大家兴致勃勃的表演了翻身等高难动作,搞得人见人爱。最高兴的是豆豆的爷爷奶奶,直夸豆豆是完美大孙儿。

最近豆豆又学会了一些新本领。

上个星期,我抱他坐着的时候,他突然发现了自己的脚丫:咦,这怎么有两个肉呼呼的东西呢,还一动一动的,真好玩啊。于是就抱着脚丫,努力把嘴往上凑。不过豆豆显然还没到吃脚丫的年纪呢,憋足了浑身的劲,也只勉强舔了几下脚趾头。

从无锡回来后,豆豆又学会了玩水了。最初给他洗澡的时候,胆小的豆豆可紧张了,两只手紧抓着我的胳膊或是澡盆。后来习惯了,就渐渐喜欢上洗澡了。这次更是主动发现了洗澡的新乐趣:就是可以玩水。今天豆豆洗澡的时候,他两腿绷直了,交错着上下猛拍,眼看着澡盆里的水全都溅了出去,别提多开心啦。
豆豆玩水视频:http://v.youku.com/v_playlist/f5520621o1p10.html