跳到主要内容

满七个月的豆豆

· 阅读需 2 分钟

再过几天豆豆就满七个月了,他的第四颗牙也终于长出来了。

DSC02008

豆豆淘的要命,不睡觉的时候,浑身乱动,没有一刻停歇的。不过睡着的时候,还是蛮安静的:)

DSC02049

今天,我试着把豆豆快速举起来再放下再举起来,玩了几次。哪知道他一下子就喜欢上这个新玩法:一听见“高高”两个字就兴奋,整天搂着我的脖子,不停的撅起他的小屁股表示还要玩。但是据说小宝不适合剧烈晃动,我也不敢跟他玩的太疯。

豆豆现在的主要辅食是米粉和蒸熟了的香蕉。香蕉蒸熟以后闻起来酸溜溜的,我看着就没食欲,豆豆却视若珍馐。所以家里总少不了摆着几串香蕉。

DSC01986

查看或添加留言

豆豆又长出两颗牙

· 阅读需 2 分钟

昨晚我抱着豆豆散步,豆豆突然就很委屈的大哭起来。豆豆从来不会无缘无故的哭闹,我们哄了他半天也不见好。我确定当时没有碰到或弄疼他,所以很担心他是不是生病了。豆豆哼唧了半个小时,心情才开始转好,可一家人整晚都在担心他。

早上,爷爷抱着豆豆出去散步,回来兴冲冲的说找到原因了。爷爷给豆豆擦口水的时候,一眼看到豆豆上牙床露出了两个白色的小尖尖,原来昨晚是冒头的小牙弄疼了豆豆。

一般小宝长牙都是一对一对的长,可是豆豆第一波只长出了左下方一颗门牙。一个月时间过去了,那颗小牙已经高高耸立于牙床之上,但它旁边的伙伴还是一点动静都没有。最后还是两颗上门牙占了先。豆豆现在有三颗牙啦!

查看或添加留言

普陀山游记

· 阅读需 3 分钟

周末公司组织去普陀山旅游。周五晚上从吴淞码头出发,第二天一早驶达普陀山。我们很不幸,因为周六正赶上台风袭击,整天都在下雨,而我们只能穿着雨衣打着伞游玩了。

DSC01759

不过台风也带来了意外的好处:由于短途的渡船都已停航,来参观的游客比较稀少,不会因为太过拥挤而影响旅游的心情。

DSC01784

普陀山这里自然风光很有限,所谓旅游就是看庙。我对烧香拜佛不感兴趣,所以我很少进入室内,每到一处就在庙外面练练摄影。

DSC01816

有些庙宇藏在深山里,安闲宁静。

DSC01814

有些寺庙临海而建,惊涛拍岸,颇有气势。

DSC01832

岛上最显眼的还是这尊铜制观音像,还没去参观她的时候,远远的就看到了。

DSC01843

台风只持续了一天就过去了,天气突然就从狂风暴雨转为风和日丽。

第二天的行程还是以看庙为主,首先去的是岛上规格最高的那座寺庙(庙太多,名字都没记住)。果然富丽堂皇,远远看去,和宫殿也可媲美。

image

除去寺庙,我们玩的唯一一处景点是千步沙,景色不错,唯一缺憾是海不够蓝。

DSC01906

我借用大家看庙的时间,脱离队伍去周围走了走,岛上颇有点幽静的田园气息,要是能生活在这里就爽了。

image

行程的最后一站是岛上最高的那座寺庙。寺庙都是大同小异的,然而登山途中的风光还是值得一看的。

DSC01943

DSC01950

查看或添加留言

关于相对论没搞明白的问题

· 阅读需 5 分钟

最近我在准备公司每周的技术讲座,主题是相对论。狭义相对论相对直观,大学物理课上就学得差不多了。但一提到广义相对论,我就有些犯难,毕竟我不是物理专业出身,面对那些弯曲的高维时空,总感觉像是在雾里看花。

广义相对论告诉我们,所谓的万有引力其实并不存在,它只是时空弯曲的一种表象。质量使时空弯曲,而物体在这种弯曲的高维时空中沿着“直线”运动 - 只不过,这种“直线”在四维时空中看起来是弯曲的,于是我们误以为有某种力在作用。乍一听,这是一个很有趣的解释,但越琢磨,越觉得其中的细节让人困惑。

广义相对论的核心是,物体在弯曲的时空中沿“最短路径”运动。然而,这并没有很好地解释原本“相对静止”的两个物体如何会开始运动起来。比如,树上的苹果和地球在我们看来是相对静止的,那么苹果为何会掉落到地面上呢?

我能想到两种可能的解释:

其一是,还有一种隐形的“力”依然存在。即便万有引力本身被否定,但质量可能引发了某种类似于力的效果,导致物体间的相对加速度。尽管广义相对论否认了这类“力”的存在。

另一种可能是高维空间中的绝对运动。假设苹果和地球在更高维的空间中本身就处于运动状态,而它们在四维时空中的投影呈现出相互趋近的结果。这意味着四维时空里的“静止”只是一种表象,而在更高维度中,运动是绝对的。按照这种解释,四维时空中的相对运动与高维空间中的绝对静止存在某种对偶关系。这种解释违背了我们的直觉,因为它强行引入了一个难以验证的高维世界。

广义相对论强调质量会扭曲周围的时空,但没有进一步解释为何会扭曲。这似乎跳过了一个重要问题:既然质量能够弯曲时空,为何不能将这种现象看作某种力的作用?换句话说,是否可以重新定义“力”,将其视为质量对时空的某种直接影响?

根据广义相对论,运动中的质量会导致时空弯曲的变化,这种变化以光速传播,称为引力波。引力波携带能量,因此物质在运动过程中,即使未受外力,也会因辐射引力波而损失能量。这种现象让我想到一个有趣的推论:

如果物质的能量可以通过引力波传递给时空,那么时空本身是否也具有能量,甚至“质量”?如果时空具备能量,那么它是否依然只是一个“背景”?或者说,时空本身就是物质的一种表现形式,物质与时空的界限是否从根本上就不存在?

如果时空是无限的,所有运动的物体都会因引力波辐射逐渐损耗能量,动能趋于零,最终达到一种“绝对静止”的状态。这样的结局听起来颇具宿命感:运动本身终究会熄灭,万物归于静寂。如果宇宙是有限的,引力波在某种意义上可能达到一种平衡,类似于黑体辐射的状态。

查看或添加留言

Silverlight程序中显示帧数的方法

· 阅读需 5 分钟

接到一个需求:要在 Silverlight 程序的界面上放置一些控制选项,可以开关 Silverlight 的 EnableFrameRateCounterEnableRedrawRegions 等和显示效率相关的一些设置项。我开始在网上查了一下,发现这几个与显示性能相关的设置主要用于承载 Silverlight 控件的 HTML 页面中,作为初始化参数进行设置。

这些属性(EnableFrameRateCounterEnableRedrawRegionsEnableGPUAcceleration)在 Silverlight 程序启动后仍然可以通过 JavaScript 代码在浏览器端进行修改,但并非所有修改都能立即生效。正如你所说,EnableGPUAcceleration 属性必须在 HTML 文件中设置为 trueEnableCacheVisualizationEnableFrameRateCounter 才能正常工作。这是因为这两个属性依赖于硬件加速,如果硬件加速没有启用,它们也就失去了意义。微软提供这几个属性的主要目的是为了帮助开发者调试和优化使用显卡加速的动画和图形效果。

EnableFrameRateCounter 被设置为 true 时,Silverlight 界面左上角会显示一些与 GPU 相关的数据,其中包括动画的刷新帧数 (FPS)。这个内置的帧数计数器对于快速查看性能很有用。然而,Silverlight 并没有直接提供 API 可以在程序代码中读取这个帧数数值。

为了在程序中获取帧数,通常需要使用 CompositionTarget.Rendering 事件。Silverlight 在每一帧渲染完成后都会触发这个事件。通过对该事件进行计数,并计算单位时间内事件发生的次数,就可以近似地得到每秒帧数。

但正如你发现的,通过 CompositionTarget.Rendering 事件计算出来的帧数,与 EnableFrameRateCounter 显示的帧数通常是不同的。这是因为两者统计帧数的机制有所差异:

  • EnableFrameRateCounter 显示的是 Silverlight 实际 渲染 的帧数,它反映了 GPU 的实际工作情况。如果 Silverlight 认为界面没有变化,不需要重绘,就不会触发渲染,显示的帧数就会较低,甚至为 0。例如,如果界面上只有一个静态图像,没有动画或用户交互,帧数就会很低。
  • CompositionTarget.Rendering 事件的触发次数与用户设置的 MaxFrameRate 和系统的繁忙程度密切相关。即使界面没有变化,只要时间到达了 MaxFrameRate 设定的间隔,CompositionTarget.Rendering 事件仍然会被触发。因此,通过该事件计算出的帧数,更接近于 Silverlight 尝试 渲染 的最大帧数,而不是实际 完成 的渲染帧数。

此外,还有一些细节需要补充:

  • MaxFrameRate 属性用于限制 Silverlight 应用程序的最大帧速率。默认情况下,Silverlight 的最大帧速率是 60fps。可以通过设置 MaxFrameRate 来降低帧速率,以节省 CPU 和 GPU 资源。
  • 使用 CompositionTarget.Rendering 计算帧数时,需要注意性能问题。频繁的事件处理可能会对程序性能产生一定的影响。因此,通常需要使用一个定时器来周期性地计算和更新帧数,而不是在每次事件触发时都进行计算。
  • 除了 EnableFrameRateCounterCompositionTarget.Rendering,还可以使用一些性能分析工具来更全面地了解 Silverlight 应用程序的性能,例如 Visual Studio 的性能分析器。

总而言之,EnableFrameRateCounter 提供了一个方便的快速查看帧数的方法,而 CompositionTarget.Rendering 则提供了一种在程序中计算帧数的途径。但需要理解它们之间的差异,并根据实际需求选择合适的方法。

查看或添加留言

Scrum

· 阅读需 8 分钟

我居然没能在网上找到这个词的中文翻译(也许可以称为迭代开发?)。Scrum 是一种敏捷开发框架,并非简单的“迭代开发”就能完全概括。虽然迭代是 Scrum 的核心组成部分,但 Scrum 还包含许多其他重要的概念和实践。直接使用英文“Scrum”是比较常见的做法。

Scrum 的核心思想是将大型、复杂的项目分解成小的、可管理的迭代周期,称为“Sprint”。每个 Sprint 的长度通常为 1 到 4 周(最常见的是 2 周)。在每个 Sprint 中,团队完成一部分可交付的产品增量。你用 LabVIEW 举例,如果采用 Scrum,并非一定要每月发布一个版本,而是每个 Sprint 结束时交付一个可用的增量。这个增量可能是一个新功能、一个 bug 修复,或者对现有功能的改进。重要的是,每个 Sprint 结束时,产品都应该有所进步,并可以进行演示和评估。因此,一年 12 个 Sprint,并不意味着一定有 12 个对外发布的大版本,而是 12 次内部的迭代交付和评审。

Scrum 的流行,一定程度上受到了 Google 等公司的影响,但并非完全是“示范效应”。更重要的是,Scrum 能够更好地应对快速变化的需求和市场环境,提高软件开发的效率和质量。Google 的“永远的 Beta 版”策略,更接近于持续交付和精益创业的理念,与 Scrum 有相似之处,但并非完全等同。持续交付强调更频繁的发布,甚至每天多次发布,而 Scrum 则更侧重于 Sprint 内的迭代和增量交付。

你提到“软件的很多新功能都是程序员或者经理拍脑袋想出来的,它们或许并不符合用户的需求”,这正是 Scrum 想要解决的问题之一。Scrum 强调以用户为中心,通过频繁的沟通和反馈,确保开发团队始终在构建用户真正需要的产品。尽早将产品展示给用户,并根据用户反馈进行调整,是 Scrum 的核心原则之一,这有助于减少浪费和提高用户满意度。

Scrum 流程并非适用于所有领域,你的盖楼例子很好地说明了这一点。盖楼的工序之间有严格的依赖关系,无法像软件开发那样进行灵活的迭代。将挖坑、地基、墙体等工序强行拆分成按月交付的“增量”,显然是不切实际的。Scrum 更适合于需求变化频繁、复杂性高、需要快速反馈和调整的项目,例如软件开发、网站开发、市场营销等。而对于一些流程固定、工序依赖性强的项目,例如建筑工程、大规模生产制造等,传统的瀑布式开发方法可能更为合适。

实际上,并非所有采用了 Scrum 的公司都获得了成功,例如,引入 Scrum 之后的诺基亚。Google 的成功和诺基亚的失败或许表明,开发流程并非决定企业成败的唯一因素,甚至不是主要因素。企业的成功与否受到市场、战略、产品、管理等多种因素的综合影响。也有可能,Scrum 并非万能药,它只在某些领域才能发挥出最佳效果。任何方法论都有其适用范围和局限性。

回到我熟悉的 LabVIEW。LabVIEW 的主要应用领域仍然是工业测控。这个领域的用户与互联网用户的一个明显差别在于,工业领域的客户通常更加谨慎,对稳定性的要求远高于对新功能和快速迭代的追求。他们更倾向于经过充分验证和测试的成熟技术。LabVIEW 每年升级一次,居然还有很多用户抱怨说升级太快了。与之对比,某个拼音输入法的用户们天天在论坛上抱怨:“都几个星期了,怎么还不更新?”如果让 LabVIEW 的用户每个月更新一次,他们恐怕难以接受。我估计 LabVIEW 在这一点上是无法完全照搬 Google 的模式的。工业领域的用户需要的是长期稳定可靠的解决方案,频繁更新反而可能带来不必要的风险和兼容性问题。

对于不能频繁从外部客户那里收集反馈的软件来说,如果一定要采用 Scrum 流程,那就只能更多地依赖内部反馈,例如从产品经理、测试人员、甚至是高层管理那里获取反馈。每个 Sprint 交付一个内部版本,然后给他们评审,再基于反馈进行下一个 Sprint 的开发。但我个人认为,敏捷开发的核心精髓在于最终用户的快速反馈,这使得软件可以紧跟用户需求的变化。内部人员,无论是谁,他们的需求都必然与最终用户有所偏差,都无法完全代表最终用户。因此,仅仅依靠内部反馈的“敏捷”,效果会大打折扣。至于 Scrum 流程中的其他实践,例如每日站立会议、用户故事、燃尽图等,都只是辅助手段,形式大于内容。没有最终用户的深度参与,新的开发流程可能只是换汤不换药,并不能真正发挥敏捷的优势。这种情况下,可能需要对 Scrum 进行一定的调整和裁剪,使其更适应内部驱动的开发模式。例如,可以更侧重于内部的迭代评审和测试,以确保产品质量和内部需求的满足。

查看或添加留言

豆豆的爬行姿势

· 阅读需 1 分钟

周末突然发现豆豆可以肚皮离地,仅靠手和膝盖把身体支撑起来。不过豆豆的爷爷奶奶说,他两星期前就可以支起来了,只不过我白天都不在家,没有看到而已。

尽管豆豆力气是够了,但神经系统还没发育好呢,所以还不能进行真正的爬行。他现在每次先把手放在胸前,撑起身体来,接下来向后使劲,把屁股撅得老高,然后再伸直腿,身体就嗞溜一下滑到后面去了。

DSC01575

查看或添加留言

最清闲的爸爸

· 阅读需 2 分钟

刚刚当上爸爸的同事们,一个个看起来憔悴不堪,不时还有人向我诉苦,说做爸爸实在太辛苦了。我有点太轻松了。

豆豆出生后最初的两个半月,一直待在山东外婆家。我只去陪了他大概三个星期,最辛苦的阶段就这样被我错过了。等豆豆回到上海,已经是个乖宝宝了,特别省心。他爱笑,很少哭闹,要是不开心,无非是饿了或者困了。只要掌握好他吃喝拉撒、睡觉玩耍的规律,他基本上不会无缘无故地哭。现在豆豆晚上跟爷爷奶奶一起睡,夜里那顿奶也不需要我操心了。我常常一觉睡到天亮,简直就是全天下最幸福的爸爸。

不过,豆豆现在渐渐长大,脾气也见长,估计以后让我操心的事会多起来。昨晚,我逗他玩,故意把他的奶瓶拿走,他居然冲我大声嚷嚷,一副怒气冲冲的模样。这火爆脾气,倒是挺像他妈妈的。

中午还在上班,老婆就迫不及待地打来电话,说她摸到了豆豆的小牙。我晚上回家一摸,果然,豆豆下牙床上冒出一个硬硬的小尖尖。因为他不太配合,露出来的牙齿又特别小,我们一家人费了好一番工夫,才终于看清楚,那是左下方的小门牙。

查看或添加留言

五个半月大的豆豆

· 阅读需 5 分钟

豆豆已经学会倒着爬啦!自从学会翻身以后,他就一直努力地想往前爬,无奈年纪太小,四肢不太听使唤。小家伙满身力气,却不知道该怎么使。常常是两只小手死命往床上一撑,小胸脯挺得高高的,自己跟自己较劲,不一会儿小脸就憋得通红。

后来,豆豆似乎明白了,光靠蛮力是没用的。他有时候会突然松手,整个人扑在床上,然后再撑起来看看自己有没有移动位置。大约两个星期前,他掌握了“原地打转”的本领:以肚皮为支点,两只手交替向左或右划拉,几下子就能来个 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

查看或添加留言

豆豆要长牙了

· 阅读需 1 分钟

今天是豆豆出生满5个月的日子。

最近这几天,豆豆睡眠不太好,每次醒来都哼哼唧唧的;见什么咬什么;口水哗啦哗啦流;上牙床鼓起硬邦邦的两个白块。种种迹象都表明豆豆快要长牙了。

豆豆拉屎图:

豆豆睡觉图:

豆豆骑在爷爷的肚皮上,玩疯了:http://v.youku.com/v_playlist/f5520621o1p9.html

查看或添加留言