IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

最新文章

采集自各技术站点的近期文章。

IT 移动开发/ 2011-02-14 21:09:47 / 累计浏览 2,335

2011年第一季度移动应用开发者报告

这篇文章汇总了2011年第一季度由IDC与Appcelerator联合发起的移动开发者调查报告,那个智能手机生态刚刚开始爆发的年代。 报告的核心发现聚焦于开发者的关注点转移。当时,一个显著的趋势是开发者对跨平台开发框架的兴趣迅速上升,尤其是Appcelerator的Titanium。这背后反映了市场对“一次开发,多端部署”的强烈需求,以期快速覆盖iOS与Android两大主流平台。同时,关于HTML5与原生应用的争论在当时非常激烈,报告数据显示,尽管对HTML5感兴趣,但多数开发者仍认为其性能不足以取代原生应用,这一判断深刻影响了后续数年的技术选型。 在平台选择上,报告揭示了当时开发者的普遍倾向:iOS在盈利预期和开发优先级上仍占据优势,但Android的庞大用户基数和增长潜力使其成为不可或缺的布局重点。这些数据描绘出当时开发者面临的核心决策:在有限的资源下,是追求单一平台的深度优化,还是借助新工具追求广度覆盖。 回看这份十多年前的报告,它像一个历史快照,记录了移动互联网爆发前夜的开发者心态——对新技术既充满期待又保持审慎,在平台竞争中寻找自己的立足点。这些早期的挣扎与探索,为我们理解当下跨平台框架的繁荣与移动生态的格局奠定了基础。

本机暂存
IT 后端/ 2011-02-13 22:53:25 / 累计浏览 6,695

GDB中应该知道的几个调试方法

这篇讲的是作者从多年前的一篇GDB旧文讲起,因为持续收到大量读者提问,他决定将大家最关心、最实用的GDB调试技巧系统梳理出来。文章没有面面俱到,而是直击痛点,列举了开发者在日常调试中最容易遇到的困惑与最频繁咨询的方法。 作者基于长期的实践经验,重点分享了几个高频使用的调试场景。比如如何在程序崩溃时快速定位问题现场,如何高效地设置条件断点和观察点,以及如何利用GDB的脚本能力实现自动化调试。文中对每种方法的适用情况和操作要点都给出了清晰的说明,甚至包括一些容易被忽视的“高级用法”。 这些技巧并非教科书式的罗列,而是从实际调试需求出发的“武器库”。无论是新手还是有一定经验的开发者,都能从中找到解决具体问题的钥匙。对于想提升Linux环境下C/C++程序调试效率的读者来说,这无疑是一份凝聚了多年实战经验的简洁指南。

本机暂存
IT 设计/ 2011-02-13 22:52:00 / 累计浏览 2,738

那些炒作过度的技术和概念

这篇讲的是技术圈里那些曾被炒得沸沸扬扬、如今看来却未必名副其实的概念。作者从 StackExchange 上一篇热议帖出发,从近20年“最被过度炒作的软件工程技术”榜单里,精心挑选了10个例子进行讨论。 有意思的是,作者特意排除了广受认可的 Java “一次编写,到处运行”理念和 TDD(测试驱动开发)。他认为这两项技术实质上是成功的,炒作并未超出其真实价值。这种筛选本身,就体现了一种清醒的判断:炒作的泡沫之下,有些技术依然坚实,有些则可能被过度包装。 文章并非简单罗列技术名词,而是通过作者的个人评注和社区讨论,勾勒出技术热潮中的集体记忆与反思。它提醒我们,在追逐新技术浪潮时,不妨多一分审视:哪些是真正解决了痛点的核心创新,哪些又只是被舆论放大的光环?对于开发者而言,这种辨识力或许比盲目跟进更重要。

本机暂存
IT 安全/ 2011-02-13 22:51:37 / 累计浏览 4,285

如何“加密”你的email地址

这篇讲的是电子邮件地址如何避免被垃圾邮件爬虫抓取的问题。作者从自己的亲身经历出发,提到早在七八年前,自己的hotmail邮箱每天会收到数千封垃圾邮件,即使到现在,经过过滤每天仍约有40封漏网之鱼。这引出了一个现实矛盾:我们既希望在网页上公开邮箱方便联系,又不想被爬虫肆意收割。 文章指出,核心思路是像“搞乱代码”那样,对邮箱地址进行一定程度的混淆处理,让它对真人可读,但让自动爬虫程序难以识别。作者以自己的CoolShell博客实践为例,说明这种方法能有效减轻垃圾邮件负担。尽管文章没有展开具体技术细节,但它点明了一种简单有效的防护思路,对于需要公开联系方式的个人博客或网站维护者来说,具有直接的参考价值。

本机暂存
IT 算法/ 2011-02-13 22:49:47 / 累计浏览 4,090

C语言函数实现的另类方法

这篇讲的是C语言中一种颠覆常规的函数实现思路。作者从“函数必须通过函数名调用”这一固有认知出发,展示了一个用函数指针和递归技巧“伪造”出多函数效果的代码示例。 核心巧妙之处在于,它利用指针的灵活性,让同一个函数体根据不同的指针地址表现出截然不同的行为,仿佛定义了多个函数。这种实现方式绕过了传统的函数调用栈机制,代码本身像一个精巧的谜题,挑战着我们对C语言基础概念的理解。 文章没有停留在技巧展示,而是将其放在CoolShell一贯的“变态代码”谱系中——从输出1到1000,到各种“变态”Hello World。它更像一次思维体操,让读者在惊叹之余,重新思考语言特性与编程范式的边界。

本机暂存
IT 后端/ 2011-02-13 22:47:31 / 累计浏览 2,870

SOAP的S是Simple

这篇文章探讨的是SOAP协议名字与本质之间的有趣反差。作者从早期的技术争论切入,指出在WS-*系列扩展规范大量出现之前,SOAP的设计初衷确实是遵循其名字中的“S”——Simple(简单),专注于使用XML进行基本的消息交换。 但随后文章话锋一转,剖析了现实的发展:随着WS-Security、WS-ReliableMessaging等一系列旨在增强功能的扩展规范加入,SOAP协议栈的整体复杂度急剧增加,以至于“简单”这一点常常被诟病。作者通过这个演变过程,揭示了技术理想与工程实践之间的张力。 这篇文章的价值在于,它没有停留在简单的褒贬,而是引导读者思考协议设计的边界与适用场景。它提醒我们,一个技术的初始愿景和其最终生态可能大相径庭,选择时需看清其核心与附加部分的本质区别。

本机暂存
IT 前端/ 2011-02-13 22:47:06 / 累计浏览 3,345

JS游戏引擎列表

这份清单汇集了当前主流的JavaScript游戏引擎与开发库。从轻量级的PixiJS、Phaser,到功能完整的Three.js、Babylon.js,再到专注特定领域的Cocos2d-JS、PlayCanvas,几乎涵盖了2D、3D、移动端与Web端各类游戏开发需求。 文章不仅提供了直接的GitHub链接,还将这些引擎按特性与成熟度做了初步归类。对于刚入门的开发者,Phaser因其丰富的文档和庞大的社区成为快速上手首选;追求极致渲染性能和视觉效果的项目,可以考察Three.js或Babylon.js在WebGL上的表现;而需要跨平台发布、特别是面向原生应用的开发者,Cocos2d-JS或PlayCanvas可能更符合要求。 列表最后还附带了HTML5小游戏的展示案例合集,让你能直观看到这些引擎在实际作品中的运用效果。无论是想快速实现一个休闲小游戏,还是计划开发复杂的商业级项目,这份梳理都能帮你快速锁定几个关键选项进行深入评估。

本机暂存
IT 开发者/ 2011-02-13 22:46:37 / 累计浏览 3,155

64位平台C/C++开发注意事项

这篇讲的是进入64位开发时代,C/C++程序员需要跨越的28个关键认知门槛。文章没有空谈理论,而是直接给出了一个清晰的清单,从指针大小的变化、内存模型的调整到特定数据类型的兼容性,逐一剖析了从32位迁移到64位平台时,代码中那些容易被忽视却可能导致严重问题的细节。 这些注意事项主要围绕着64位系统带来的核心差异:寻址空间扩大后,任何假定指针或`size_t`是固定大小的代码都可能崩塌。例如,将指针截断为`int`进行传递,或是用`long`来存储内存地址,这些在32位下“侥幸”无事的做法,在64位下就是定时炸弹。作者引用了Viva64网站上的专业资料,并估计读者大约需要20-30分钟就能精读完一篇,这为忙碌的开发者提供了一个高效的学习路径。 对于正在维护老代码或准备开发新项目的团队来说,这相当于一份快速排查手册。花半小时过一遍这些检查项,能帮你提前发现并修复那些隐藏的平台依赖性问题,确保软件在未来的64位环境中稳定运行。

本机暂存
IT 后端/ 2011-02-13 22:45:51 / 累计浏览 4,553

信XML,得自信

这篇文章从一个略带讽刺的视角,剖析了XML这项曾经被视为“必备神器”的技术如何从一个基础数据格式,演变成一些项目中过度甚至荒诞使用的情况。作者以“信XML,得永生”这类流行梗为引子,直指XML的滥用现象——它仿佛成了一种“不写就不够时髦”的标配,导致许多本不必要的复杂性被引入。 文中列举了若干为了用XML而用XML的极端案例,揭示了这种盲目崇拜背后的“Zhuangbility”心态。文章的核心观点在于:XML本身是强大且有用的工具,但技术选型不应随波逐流或为了形式而形式。它启发开发者需保持清醒,根据实际场景(如数据交换、配置管理)来判断是否真的需要XML,避免陷入“为了技术而技术”的误区,让工具真正服务于解决问题本身。

本机暂存
IT 设计/ 2011-02-13 22:42:55 / 累计浏览 4,133

我们不是牛人,所以还是老老实实跟着兴趣走吧

作者从技术同行周筠老师关于“兴趣决定论”的博文出发,分享了自己对“兴趣重要性”的深度认同与亲身验证。有趣的是,这个例证并非来自他所熟悉的技术领域——相反,他坦言自己对诸多技术都感兴趣,反而很难找出一个对比鲜明的例子。因此,他选择了近几个月“找回”的爱好——弹钢琴,作为阐释这一观点的最佳载体。 这篇文章跳出了典型的技术成长叙事,用一个看似“不务正业”的兴趣案例,探讨了驱动人持续投入与获得内在满足感的根本动力。作者想传递的核心观点是:即使并非天才,普通人沿着自己真正的兴趣路径走,也能收获深刻的体验与成长。这或许能给忙于追赶技术浪潮的从业者一些启发——在代码和架构之外,那些纯粹因为热爱而做的事,可能同样定义着我们是谁,并为我们提供不可或缺的能量与平衡。

本机暂存
IT 安全/ 2011-02-13 22:37:46 / 累计浏览 3,554

对HTML做白名单过滤

这篇讲的是如何构建一个安全高效的HTML白名单过滤系统。作者直指当前许多应用在处理用户富文本输入时,直接采用黑名单方式过滤危险标签或属性的不足——黑名单容易遗漏,面对复杂嵌套结构时更是防不胜防。 文章的核心方案是转向基于DOM解析的白名单机制。它强调在解析后操作节点,逐一检查标签、属性、事件处理器是否在预先定义的“安全名单”中,不在名单内则果断移除。文中还讨论了处理标签嵌套、属性值、以及如何安全地处理 ``、`` 等常用标签的具体实践,比如对 `href`、`src` 属性进行协议校验,阻止 `javascript:` 等伪协议。 相比于简单粗暴的黑名单正则替换,这种方案更精确、可维护,能有效防御包括XSS在内的多种注入攻击。作者通过这个案例展示了一种“默认拒绝”的安全思维:在内容安全领域,明确允许什么,往往比试图禁止所有危险项更可靠。

本机暂存
IT 后端/ 2011-02-13 22:36:26 / 累计浏览 4,579

服务器端执行JavaScript代码

这篇讲的是作者为了在服务器端复用客户端的 JavaScript 验证逻辑,解决代码重复和维护难题,在 .NET 平台上对几款主流 JavaScript 执行引擎进行的一次深度体验和评测。 文章从一个常见痛点出发:客户端验证逻辑无法直接共享到服务器端,导致需要维护两套代码。为了解决这个问题,作者尝试了 IronJS、Jint、Jurassic 等引擎,并用它们执行了同一个简单的验证函数来实际检验。他发现 IronJS 性能虽好但功能不全,Jint 在多线程下有瓶颈,Jurassic 则存在一些兼容性问题,甚至无法正确运行常见的 showdown.js 库。 最让作者感到意外的结论是,在 .NET 平台上目前最靠谱的选择反而是通过 IKVM.NET 桥接的 Java 项目 Rhino JavaScript。尽管它使用起来稍显麻烦,但功能完整、调试支持好,性能也能满足实际需求。作者甚至分享了用它在自己的博客上处理近4000条评论的性能数据。 作者基于此打算将博客的 Markdown 转换逻辑迁移到基于 Rhino 的服务器端实现上。他的评测过程具体而实用,为在 .NET 生态中寻找可靠 JavaScript 执行方案的开发者提供了直接的参考和避坑指南。

本机暂存
IT 前端/ 2011-02-13 22:32:32 / 累计浏览 1,490

使用Narcissus解析JavaScript代码

作者在开发一个JavaScript实验项目时,需要在客户端直接将JavaScript代码解析成语法树——也就是说,用JavaScript实现一个JavaScript解析器。这类工具其实不少,像yacc、lex、bison都有对应的JavaScript版本,用ANTLR生成JavaScript目标代码也是一种选择。不过作者希望快速投入实验核心,不想在解析器构建上耗费太多时间,于是把目光投向了现成的方案。 经过权衡,作者最终选择了Narcissus。这是一款由Mozilla开发者编写的JavaScript解析器,完全用JavaScript实现,可以直接将源码转换为抽象语法树(AST)。它的轻量和现成可用的特点,正好满足了作者“避免重复造轮子”的需求。文章从实际的开发痛点出发,对比了多种解析方案的优劣,并给出了明确的技术选型依据。对于同样需要在浏览器或Node.js环境中处理JavaScript代码结构的开发者来说,Narcissus提供了一个现成且高效的起点。

本机暂存
IT 后端/ 2011-02-13 22:31:30 / 累计浏览 2,553

当类型转换表达式遇上自定义转换操作

作者在使用System.Json类库时遇到了一个棘手的限制:它只为少数特定类型(如Int32、String)定义了隐式转换,既无法直接转为泛型类型,也无法获得object引用来动态处理。这让他想实现一个通用的JsonValue到任意T类型的转换器时犯了难。 问题的根源在于System.Json的类型转换机制不够灵活。为了解决它,作者巧妙地借助了.NET中“运行时构建表达式树并编译成动态代码”的能力。他编写了一个JsonConverter辅助类,在其泛型静态构造函数中,核心思路是:为每种目标类型T动态生成一个转换Lambda表达式。 具体实现上,代码首先创建一个代表输入JsonValue参数的表达式,然后使用Expression.Convert方法构建将这个参数转换为类型T的表达式,最后将整个转换逻辑编译成一个可重复使用的Func委托。这样,.NET的运行时类型系统会为每种T自动选择最合适的转换路径,完美绕开了原有库的限制。 这个技巧的巧妙之处在于,它将编译时固定的类型转换问题,转化为运行时按需生成的转换代码,既优雅又高效。对于任何需要突破静态类型转换限制、实现类似动态分发逻辑的场景,这种基于表达式树的动态编译思路都提供了清晰的解决方案。

本机暂存
IT 数据库/ 2011-02-13 22:30:38 / 累计浏览 2,851

大事务回滚导致系统故障案例一则

这篇讲的是一次典型的生产环境故障排查故事。作者从一个客户系统响应缓慢、IO Wait异常飙高的案例出发,带我们一步步深入问题现场。 系统层面的表现是日志文件同步等待(Log file sync)严重,但有趣的是,磁盘硬件本身却找不到任何错误报告。这种“有苦难言”的表象,很容易让排查方向跑偏。作者没有停留在表面现象,而是通过分析系统日志和数据库状态,最终将矛头指向了“大事务回滚”这一核心根因。 当一个包含海量数据操作的事务因故需要回滚时,会产生持续且密集的IO写操作,从而“淹没”了磁盘的正常吞吐能力,导致所有依赖日志写入的操作都被阻塞,系统自然就慢了下来。文章不仅讲清楚了问题是什么、为什么发生,还探讨了在事后如何正确处理此类问题,避免对业务造成二次冲击。 对于经常与数据库和IO打交道的工程师来说,这个案例就像一面镜子,提醒我们:当系统响应出现异常,而硬件监控又看似风平浪静时,不妨多留一份心,去查查那些正在默默回滚的、看不见的“庞然大物”。

本机暂存
IT 设计/ 2011-02-13 22:30:15 / 累计浏览 2,157

Web交互设计优化的简易check list

这篇讲的是,在快节奏的产品迭代中,我们常把“新增功能”当作头等大事,却容易忽略对“已有功能”的持续优化。作者用养育孩子作比,强调优化现有体验与设计新功能同等重要,不可偏废。 文章围绕这个核心观点,提供了一份简易的交互设计自查清单。它没有空谈理论,而是将优化工作拆解成了具体的行动项,比如关注操作路径的流畅度、反馈的即时性等。这份清单旨在帮助设计师和产品经理在日常工作中,能快速审视和改善现有界面的易用性与体验细节。 对于那些觉得“优化工作无从下手”的团队而言,这份清单提供了一个非常务实的起点。它让“优化体验”这个略显模糊的职责,变成了一个个可以逐项检查、逐步落实的具体动作,能有效推动产品在细节上不断进化。

本机暂存
IT DevOps/ 2011-02-13 22:29:36 / 累计浏览 3,816

Amazon AWS云管理平台技术内幕(1)--节选之《揭秘云存储》

这篇讲的是云架构如何实现“按需分配”的弹性资源管理。作者从按需分配的服务设计理念切入,指出云平台的核心任务是根据用户请求(如并发量、吞吐量)动态分配计算、存储等基础设施,并在任务完成后及时回收资源。由此引出,支撑这一“分配-使用-回收”全生命周期的角色,就是云管理平台。 文章虽然简短,但点明了云管理平台的关键职责:它不仅是资源的分配者,更是整个基础设施的调度与管理者。这对于理解云服务如何高效运行、降低用户成本至关重要。作为系列文章的开篇,它先帮你厘清基础概念,为后续深入揭秘云存储等具体技术打下认知基础。

本机暂存
IT 开发者/ 2011-02-13 22:29:00 / 累计浏览 2,967

TDD并不是看上去的那么美

这篇讲的是作者从早前关于“技术炒作”的讨论延伸开来,具体聚焦于敏捷开发中的一项核心实践——测试驱动开发(TDD),并对其提出了尖锐的质疑。 作者指出,TDD在理论上通过“红-绿-重构”循环和高测试覆盖率来保障质量,但在现实项目中可能异化为“为测试而测试”。这不仅没有提升效率,反而导致测试用例冗长脆弱、开发节奏被拖慢,甚至出现“为了通过测试而妥协设计”的情况,违背了提升代码质量的初衷。 文章进一步剖析了TDD理想化场景与复杂工程现实之间的差距。它依赖开发者的高水平设计能力来编写恰到好处的测试,否则容易陷入过度拆分函数、测试实现细节而非行为的陷阱。对于快速迭代或技术探索型项目,过早和过重的TDD可能成为负担。 作者的结论并非全盘否定TDD,而是提醒我们:技术实践需要因地制宜。脱离团队上下文和项目阶段盲目套用,再好的方法论也可能“变味”。这篇文章促使读者更理性地审视TDD,思考如何在具体环境中灵活、适度地应用它,而非教条式地追随。

本机暂存
IT 安全/ 2011-02-13 21:07:21 / 累计浏览 3,534

Linux安全检查方法

这篇讲的是Linux系统安全巡检中一个非常具体但关键的步骤:检查密码相关文件及其时间属性。 作者从一个实战角度出发,指出系统管理员应当定期查看`/etc/passwd`和`/etc/shadow`这类核心文件的修改时间。文件被修改,可能意味着有新用户被添加、现有用户权限被变更,甚至可能是攻击者留下的痕迹。通过`ls -l`命令观察文件的修改日期,能迅速发现近期是否发生过可疑的账户变更活动。 这个方法虽然基础,却是安全基线检查和入侵取证的重要起点。它不依赖复杂的工具,却能提供最直接的时间线线索,帮助管理员判断系统账户配置的变动是否在预期和可控的范围内。将这类基础检查纳入日常运维流程,相当于为系统安全增加了一道敏锐的感知层。

本机暂存
IT 后端/ 2011-02-13 21:06:46 / 累计浏览 2,799

Quora:思维导向的问答平台

这篇讲的是一个从Quora社区内部发起的“诊断”,作者从“雅虎问答为何衰败”这个经典话题切入,展示了平台用户如何像技术复盘一样,犀利地归纳出六大败因:内容质量低劣、提问缺乏深度、回答者不可信、系统响应迟缓、缺乏有效激励,以及界面粗糙。这些尖锐的总结,表面是在批评对手,实则像一面镜子,映照出Quora试图规避的核心问题。文章通过这场用户自发的“拉踩”对比,清晰勾勒出一个以思维质量为导向的问答平台,与娱乐灌水区之间的关键分野。其核心观点在于,高质量的社区并非偶然,而是从底层设计——包括内容审核、用户信任构建、响应机制到社区文化——都需精心运营的结果。这启发我们,平台的长久生命力,终究取决于它能否为严肃的知识分享与思想碰撞提供一片肥沃的土壤。

本机暂存