跳到主要内容

豆豆又发烧了

· 阅读需 2 分钟

早上起来,豆豆体温有点高,中午时候就已经烧到39.3度(腋下),还把上午吃的东西都吐了出来。我于是提早回家来陪豆豆。摸着豆豆滚烫的脑瓜,我多希望发烧的是自己。

中午量过体温就给豆豆吃了退烧药,泰诺林,对豆豆还是挺灵验的。豆豆深得我的遗传:体温一降到39度之下就立刻恢复淘气本性。他不喜欢奶瓶,为了给他喝水,我们只好把水放在一个大碗里吸引他喝。他喝了没几口就开始玩起来了,用手拼命拍水。看见水溅了我一身,他高兴的咯咯直笑。

由于不晓得豆豆发烧的原因,下午,我还是带豆豆去了医院。医院里的孩子们一个个都蔫了吧唧的,只有豆豆活力不减,在我怀里跟我嬉闹,一会拍拍我的脸,一会又抢我的眼镜。轮到豆豆看病时,他又一把抢过医生的听诊器不肯撒手,搞得医生哭笑不得。

验血的结果和上次发烧时一样,是病毒感染。等我们从医院回来,豆豆又饿又困,豆豆妈喂了他一会,他就睡着了。我一直坐在床头看护着豆豆,看见这张甜美的小脸,心里就会洋溢起幸福。

查看或添加留言

豆豆十一个月

· 阅读需 1 分钟

豆豆现在很喜欢模仿大人做事情。我看见我梳头,就也拿起木梳往我头上比划;看见我拧开一个瓶子盖,就也把盖子和瓶子往一起塞。

最近秋高气爽,每个周末都抱着豆豆去绿地上玩。

DSC02703

DSC02767

DSC02823

DSC02847

DSC02889

查看或添加留言

一个翻墙浏览器的想法

· 阅读需 4 分钟

最近,由于某些限制,所有基于 WordPress 的二级域名在国内被封锁,导致我的博客无法正常访问。这种情况让人颇为无奈。郁闷之余,我产生了一个想法:如果能够开发一个自带翻墙功能的浏览器,那将是一个非常实用的工具,尤其是对于需要访问自由网络的用户。

想法初探

技术上,实现一个支持翻墙功能的浏览器并非天方夜谭。我的初步思路是利用 P2P(点对点)技术 实现分布式网络代理。以下是大致的运行机制:

  1. 检测访问受阻的资源:
    当用户在国内的设备(比如设备 A)使用浏览器访问某个网站(例如 WordPress)时,如果发现连接受阻,浏览器会自动识别这种情况。

  2. 查找可用的外部节点:
    浏览器维护一个分布式网络,由全球各地的浏览器实例组成。此时,设备 A 会通过内置的 P2P 协议,向网络中的其他设备(例如设备 B)发起请求,询问是否能够访问目标网站。

  3. 中转与加密传输:
    如果设备 B(例如位于美国)能够访问目标网站,设备 A 会将请求内容加密后转发给 B。B 解密后访问目标网站,将获取的内容重新加密,并返回给设备 A。

  4. 用户隐私与安全保障:
    整个通信过程采用端到端加密,保证传输的数据安全,同时避免因流量分析而暴露用户的访问行为。

技术可行性与挑战

虽然这个想法在技术上可行,但其实现过程和推广应用中会面临以下几个主要问题:

1. 带宽与流量开销

让每个用户的设备充当中转节点会产生额外的流量负担,这对普通用户并不友好。特别是在带宽有限或流量计费昂贵的情况下,用户可能不愿意共享自己的网络资源。

解决方案:

  • 引入可选的贡献机制:允许用户手动启用或禁用中转功能,并对贡献更多带宽的用户提供激励,比如优先访问权或更高的连接质量。
  • 优化流量分配:通过智能路由算法,减少每个节点需要承担的中转负载。

2. 安全性与隐私保护

这种浏览器在中转数据时涉及多个用户设备,可能会带来数据泄露或滥用的风险。例如,某些节点可能窃取、篡改或记录用户数据。

解决方案:

  • 数据加密:确保所有传输内容使用强加密算法(如 AES 和 TLS),并在节点之间保持端到端加密。
  • 节点认证:使用公钥基础设施(PKI)对每个节点进行身份验证,防止恶意节点加入网络。

3. 技术限制与性能问题

P2P 技术虽然灵活,但会受到网络质量、NAT 穿透等因素的影响。如果中转节点不可用或性能较差,可能导致访问速度慢或连接失败。

解决方案:

  • 多节点选择:允许用户同时连接多个节点,从中挑选延迟最低、性能最佳的中转路径。
  • 混合模式:结合传统代理服务器(如 VPN、SOCKS5)作为备用方案,保障网络访问的稳定性。

4. 法律与合规性

开发和使用这种浏览器可能涉及复杂的法律问题,例如流量中转是否违反某些国家的规定,用户是否需要承担法律责任等。

解决方案:

  • 区域限制:根据不同国家的法律环境,提供特定版本的浏览器,或明确告知用户可能的法律风险。
  • 使用者自主性:将流量中转功能设计为用户可选功能,并提供透明的使用说明和安全协议。

总结

自带翻墙功能的浏览器在技术上是可行的,并且对于需要访问被限制内容的用户具有实际价值。然而,流量开销、隐私安全、性能优化和法律风险都是需要仔细权衡的问题。一个理想的解决方案需要在技术实现、用户体验和法律合规之间找到平衡点。

如果能够解决上述问题,这样的浏览器将不仅仅是一个工具,而是一个连接全球信息自由的桥梁。对于开发者来说,这既是一个技术挑战,也是一种社会责任。

欢迎大家对这个想法提出意见或补充,如果你对 P2P 技术或网络安全有研究,非常欢迎交流!

查看或添加留言

递归调用的层次限制

· 阅读需 4 分钟

今天调试一个大程序时遇到了一个崩溃的 Bug。这个程序并不是我写的,而崩溃时 Visual Studio 也没有直接给出调用链的信息,我只能自行分析问题所在。最后确定,程序是在一个递归调用的函数中崩溃的。

一看到递归函数,我就感到棘手。递归的调用深度可能非常大,成百上千层,根本没法逐层跟踪来确定崩溃点在哪里。不过后来,在同事的提醒下,我才意识到关键问题:程序崩溃时 Visual Studio 的错误信息是 “Stack Overflow”。这意味着问题很可能是递归调用层次过深,最终导致栈溢出。

关于递归的反思

递归是一种强大的编程工具,用起来非常简洁优雅。尤其是在解决一些像树遍历、分治算法、回溯问题等场景时,递归可以大幅简化代码的逻辑。

然而,经过这次调试,我深刻体会到递归的缺点:

  1. 不易调试:
    调试递归函数时,尤其是调用层次较深时,很难快速定位问题的发生位置。与此相比,循环的调试相对简单,因为可以轻松确定错误发生在某一特定的迭代中。

  2. 调用深度限制:
    每次递归调用会占用栈内存,调用层次过深时可能导致 栈溢出(Stack Overflow)。现代编程语言(如 C++、Java、Python)都对栈的大小有默认限制,具体取决于运行环境。

调试过程与解决方案

仔细分析后,我发现这个递归函数中存在一个逻辑错误,导致在某些特定情况下,递归无法到达预期的终止条件。这就是问题的根源——无限递归直接导致栈溢出。解决方法相对简单:

  1. 修正逻辑错误,确保递归函数能够在所有情况下正确达到终止条件。
  2. 在递归函数中添加一层保护机制,例如在函数入口检测当前调用深度,如果超过预期阈值,则强制退出,避免继续调用。

以下是一个改进的例子:

int safeRecursiveFunction(int n, int depth = 0, int maxDepth = 1000) {
if (depth > maxDepth) {
throw std::runtime_error("Recursion depth limit exceeded");
}
if (n == 0) {
return 1; // Base case
}
return safeRecursiveFunction(n - 1, depth + 1, maxDepth) * n;
}

通过引入 depthmaxDepth 参数,我们可以限制递归的层数,防止意外的栈溢出。

递归深度的实际限制

在大多数实际应用中,递归深度通常不会太大,因为合理设计的程序会在较浅的调用层次上满足终止条件。但如果需要处理非常深的递归调用(例如处理大规模数据结构或复杂递归算法),可以采取以下优化方法:

  1. 尾递归优化:
    一些编译器和语言(如 Python 不支持,但 Scheme、某些 C++ 编译器支持)可以对尾递归进行优化,将递归转化为迭代,从而避免栈溢出问题。

  2. 改用循环:
    如果递归逻辑过于复杂,且递归深度不易控制,可以尝试用循环代替递归。

  3. 手动管理栈:
    使用显式的数据结构(如栈)模拟递归调用。以下是一个简单的例子:

    void iterativeTraversal(TreeNode* root) {
    std::stack<TreeNode*> stack;
    stack.push(root);
    while (!stack.empty()) {
    TreeNode* node = stack.top();
    stack.pop();
    // 处理当前节点
    if (node->right) stack.push(node->right);
    if (node->left) stack.push(node->left);
    }
    }

这次调试经历让我更加认识到递归在带来代码简洁性的同时,也伴随着潜在的复杂性和风险。我们应该根据具体问题场景权衡递归与其他实现方式的优劣,确保程序在高效运行的同时具备良好的可维护性和可靠性。

查看或添加留言

豆豆十个月

· 阅读需 3 分钟

豆豆十个月的时候是在无锡爷爷奶奶家度过的。

豆豆早就对徐家汇租的小房子厌烦了,来到无锡别提多开心了。无锡家里大多了,地板上可以随便爬。

DSC02563

豆豆特别喜欢开关和插座,每次爬到那里必然要抓起来玩弄一下。

DSC02559

奶奶的大衣柜也是好地方,豆豆坐进去就不要出来了。

DSC02535

和大衣柜一比,豆豆像个小不点。

DSC02636

豆豆还给爷爷奶奶的房间搞了装修。先是在墙上抹了两个黑手印。然后干脆用手指甲抠了一个小洞。最后用玩具在桌子上砸了一排小坑。

DSC02577

小区的环境也很不错,有很多花花草草。豆豆眼睛都不够使了。在上海的时候,想哄他睡觉,就抱他出去转一圈。在无锡可不行了,外面这么新鲜,豆豆挺着个脑袋就是不肯睡。这个国庆,豆豆都极力抗拒睡觉,不过一旦睡着了,就睡的特别香。

DSC02649

我们领着豆豆去无锡城里逛了一圈,豆豆对所有商品的喜爱程度都差不多,只要是新鲜的,以前没玩过的,他就会上去又摸又抱。

豆豆到无锡走一趟,收获了不少玩具,包括爸爸DIY的“美女猪”

DSC02515

还有姑姑送的积木

DSC02675

豆豆会用声音表达意思了。以前他想要什么东西的时候会身子靠过去,或者抓我的手伸过去。现在方便了,盯着那样东西,“嗯,嗯,嗯……”叫几声就行了。

DSC02628

豆豆似乎有点懂“爸爸”这个词的含义了。有几次他吃奶的时候,他不想吃了,回头一看,我在旁边,于是就叫两声“爸爸”,然后朝我爬过来。

豆豆也终于开始学叫妈妈了:一次他饿的非常难过,哼哼唧唧的叫了一声“姆啊”的音。

豆豆最可爱的是学会了“啊啼”。豆豆在家有个专用的洗澡盆,没有带回无锡来,于是我们俩光溜溜的,我抱着他冲淋浴。豆豆突然打了两个喷嚏,他大概觉得打喷嚏很好玩,打完了还朝我笑笑。我于是很夸张的装作打了喷嚏,朝他“阿嚏”一声。豆豆开心的咯咯直笑,看他这么高兴,我又“阿嚏”了几声。等豆豆妈开门来接他的时候,豆豆朝妈妈“啊啼”了一声,然后就哈哈笑起来。

豆豆的模仿能力还不仅表现在说话上。有一天,我把去把车从停车场开到家门口。很短一段路,于是奶奶就抱着豆豆坐在副驾驶位置上。豆豆一动不动看着我开车。等我我一下车,他就“嗯,嗯,嗯……”表示要做到驾驶位置上去。一坐到驾驶位置上,他就马上学我的样,扳几下排挡再扭一扭方向盘。

查看或添加留言

《我和LabVIEW》售出九千多册了

· 阅读需 1 分钟

我常常会去售书的网站看看读者对自己这本书的评论,最近发现京东,卓越两个网站长期缺货,也不知道为啥。于是想起来去跟编辑打听一下这本书的销售情况。胡主任告诉我,书已经卖出了九千多册了,前两次印刷的一万册很快就会售罄。今天正好是这本书发行两周年的纪念日。

我最初还真没想到一本LabVIEW书会有这么多读者。开始写这本书的时候,我以为中国LabVIEW用户数量不多,这本书能卖出去三四千本我就满足了。现在看来,中国LabVIEW用户还真不少,LabVIEW影响力蛮大呢。

查看或添加留言

豆豆九个月

· 阅读需 3 分钟

豆豆上星期满九个月,当时我正在出差,所以现在才写博客记录。

豆豆是老太太杀手。豆豆出去晒太阳的时候常常会引来老头老太逗他玩,尤其是那些还没孙子的老人们。豆豆比较穿得比较有特点,一般只穿一个小背心,是小宝里穿得最少的。尤其是他不穿袜子,似乎上海人认定小宝是必须穿袜子的,所以他光着脚丫特别显眼。现在,小区周围几个街区的老太太没有不认识豆豆的。

周末我抱着豆豆去菜场,后面一位大婶凑过来逗他玩,然后说小家伙看起来坏坏的。豆豆的坏小子本性早就暴露无疑了。他大约一两个月前学会了借助大人的手去够东西,比如说他想要桌子上的玩具,但够不到,就会抓起我的手,往玩具那里伸。再后来他就学会有别人的手来鉴别危险啦。比如去超市,他看见货架上的商品,他想去抓,又不确定那些东西是否会伤害到他。这时候他就会抓起我的手去碰那些商品,如果我碰一下就缩回来,那他也不会去碰。否则,看我可以安全的触摸某样东西,他就放心了,上去一把就把东西抓过来。

昨晚,我抱着他在屋里溜达,走到电风扇前面。他已经知道电风扇是很危险,不能碰的。但是他盯着电风扇看了一会突然就嘿嘿嘿坏笑起来了,然后就抓起我的手去够电风扇。我知道他在打什么鬼主意,于是轻轻碰了一下电风扇,然后假装被打到了,迅速缩回手,哎呦哎呦叫了几声。豆豆自以为得计,哈哈哈得笑的前仰后合。

豆豆已经学会真正的爬行了,现在在床上够东西再也不用匍匐前进了,而是直接就会用膝盖双手交错爬行前进了,行进效率提高了不少。

豆豆是个火气比较旺的小宝,最近居然有点大便干燥。前几天拉屎的时候大概很疼,还哇哇的哭了一通。这两天改善了豆豆的伙食,吃的全是火龙果,鸭梨这些去火通便的食物,他才终于恢复正常了:)

查看或添加留言

豆豆八个月

· 阅读需 5 分钟

时间过得真快,一转眼,豆豆8个月了。

和同龄小宝比起来,豆豆人高马大,力气也大,但还没有学会控制自己的蛮力。他抓人的时候会死死的抓,咬人的时候拼命咬,搞得家里人人带伤。豆豆爸的胳膊上有好几道伤口,以至于豆豆的暴行都已经传播到爸爸的公司里了。不过,受伤最重的还是爷爷,爷爷的后背都被豆豆给抓烂了。

为了防止他长大以后赖账,我们还特地把豆豆的罪行给拍下来了:
DSC02279

豆豆几个星期前又长了一颗牙,到现在还是总共5颗牙。豆豆总是有一颗牙领先于同伴先出来。

周末,又给豆豆剃了一个光头,然后领着他去逛商场。
DSC02301

豆豆是个“野孩子”,就喜欢往外跑。他现在可以听懂一些简单对话,看明白一些动作了。一旦发现有出去玩的迹象,就兴奋的小腿直蹬。最近天热,我在家喜欢光膀子,出门才穿衣服,这个习惯被豆豆发现了。平时早上都是爷爷抱豆豆出去散步,所以一大早豆豆就抱着爷爷不放。我叫他,他不理。于是我就拿来T恤当着他的面穿上,他立刻就对我改变了态度,伸出小手往我身上扑。等我一抱上他,他就死死抓住我的衣服,说什么都不肯松手了。

豆豆现在太沉了,抱他出远门可吃不消,于是我翻出了豆豆的座驾。这是豆豆的豪华敞篷跑车:
DSC02315

第一次坐上小车的豆豆既紧张又兴奋,在车里东张西望,看得可带劲了。但是到了没风景的地方,他还是不喜欢自己呆在车里的,一定要让人抱。

我们一家人推着豆豆来到了港汇广场,豆豆都看傻眼了。
DSC02319

到了吃饭时间,我们打算在港汇5楼找一家饭店吃一顿。没想到这里生意极好,除了两家店,其它饭馆都需要排队。这里最清闲的饭馆是肯德基,门可罗雀。我还从来没见过肯德基在用餐时间可以不排队的。看来这种快餐店就适合开在商场底楼,我估计人们选快餐店的一个重要原因是顺路,开在楼顶肯定影响客源。我们不想浪费时间,于是选了另一家不需排队的餐馆,一个叫什么蕉叶的东南亚风味餐馆。吃上之后,发现这里不用排队是有他的道理的,真难吃,我是再也不会来了。

豆豆的表现真乖,一家人吃饭的时候,他不哭也不闹,自己在那啃勺子玩。
DSC02343

吃完了饭,下楼来到儿童专区。这里有一小块供儿童娱乐的区域。里面的小朋友不算很多,于是我把豆豆也抱了进去。这里地面宽阔,比家里适合练习爬行。豆豆已经可以比较自如的往前爬了,但他的腿脚还是不听使唤。他只能依靠胳膊的力量,慢慢匍匐前进。
DSC02345

旁边一个十个多月的小宝也在练爬行,他已经非常熟练了,腿脚十分协调,嗞溜嗞溜爬的飞快。尽管他比豆豆大了两个多月,但外形还比豆豆小了一大圈,所以爬起来比较轻便。

豆豆追着一个红色的皮球爬了十多米,这是豆豆爬的最开心的一回了。晚上回到家里,兴奋劲都还没过,吃饭都不好好吃,一个劲在床上爬。

大概豆豆这一天玩的太累了,第二天居然病倒了。早上妈妈给豆豆喂奶的时候,发现豆豆头很热,于是给豆豆量了一下体温,37.9℃,不算太高。豆豆吃完奶后,体温又稍有下降,我猜想可能是昨天太累了,或是水喝少了引起的,也许过一会就好了。哪想到过了才一个小时,豆豆的体温就升到39.1℃了。一家人这时候都急坏了。

从查到的资料来看,豆豆有可能是得了幼儿急疹,或者叫玫瑰疹:一种没有太大危险的传染病,不需要治疗,三天后自然就会退烧痊愈。但是,联想到豆豆前一天跟一大堆小朋友疯了半天,我就怕他染上某种儿童间传染的炎症一类的病,于是还是决定送豆豆到医院检查一下。验血的结果是白血球偏低,排除炎症的可能,基本上可以确定就是玫瑰疹一类的病了。大家总算放了心。

到晚上的时候,豆豆仍然还有点发烧,但温度已经降下来了。大家本来担心豆豆晚上会闹的,结果他睡的还挺香,一点都没哭闹。早上醒来,我一摸他脑袋,原来已经退烧了,病好啦Open-mouthed smile。没想到豆豆这么强壮,一下子就战胜了病毒。

豆豆第一次发烧,但是表现的非常勇敢。除了体温超过39℃那段时间,他有点发蔫,其它时候,吃喝玩乐都不影响。尽管非常难受,但是豆豆还是会被逗的呵呵乐。只不过乐的时候还带着点哼哼唧唧的腔调,看着非常招人怜惜。

查看或添加留言

豆豆逛街

· 阅读需 1 分钟

最近每个周末都领豆豆去商店逛。

俺们坐的是地铁
DSC02236

从肇嘉浜路出发,一站就到徐家汇了。
DSC02229

玩具店里好东西真多啊。豆豆看上了一个“歌唱小精灵”,可惜这个玩具不适合小小宝。后来豆豆又看上人家的小钢琴了:
DSC02244

商店逛累了,豆豆跑去下馆子。饭馆名叫麦当劳,可惜里面没有豆豆能吃的东西。豆豆休淘气了一会儿就走了。
DSC02261

豆豆玩了一天,浑身是汗。回家赶快洗澡
DSC02190

洗完澡睡一觉,豆豆最近喜欢趴着睡
DSC02276

最近天热,豆豆在家里穿上肚兜了。
DSC02096

查看或添加留言

豆豆叫爸爸

· 阅读需 1 分钟

虽然豆豆早就能发出“爸”这个音了,但他一直不太爱说这个字。直到最近一个星期,他突然就喜欢上叫“爸爸”了,时不时就叫几声。难道是因为我最近哄他玩的很开心?豆豆也能发“妈”的音了,但也几乎不怎么说。周末我又心血来潮,让豆豆叫“Daddy”,他居然就daddy, daddy的叫起来了。豆豆妈在一旁嫉妒的不得了。

查看或添加留言