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

最新文章

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

IT 开发者/ 2014-05-11 21:29:20 / 累计浏览 2,858

工作与价值观

这篇文章探讨了一个看似简单实则深刻的问题:我们工作究竟是为了什么。作者以观察到的三种典型选择为起点——有人为了薪水支持自己的生活方式,有人为了证明和提升个人能力,有人则是为了实践自己信奉的价值观。文章明确指出,这三者并非递进关系,而是相互排斥,你只能选择一个作为核心驱动力。 作者着重阐述了第三种选择:在日常工作中,通过选择“做”与“不做”来体现并践行个人价值观。文中引用了Sam Altman的观点以及对代码质量、技术实践的容忍度等具体细节,说明当个人对事业的认同感足够强烈时,许多技术琐事都显得微不足道。 延伸到创业层面,文章对比了“选对人”、“选对方向”与“选对事(共同认可)”三种不同理念。作者明确倾向于后者,认为基于对事业本身的共同认可而组建的团队,其根基更为稳固。他以土豆网为例,说明推动公司前进的可能不是某个创始人,而是一个被广泛认可的价值主张。 读完此文,你或许也会开始重新审视,支撑自己日复一日工作的,究竟是什么。

本机暂存
IT 安全/ 2014-05-11 21:28:23 / 累计浏览 8,457

2014年1月21日中国互联网DNS瘫痪事件原因分析

这篇文章讲的是2014年1月21日中国互联网大规模DNS瘫痪事件的技术剖析。作者从一个普通用户的视角出发,描述了当时所有网站都打不开的异常现象,并以通俗的“电话本”比喻,解释了DNS作为互联网基础设施的核心作用。 作者详细梳理了从用户输入网址到获得IP地址的正常DNS解析流程,并与当天故障时的实际流程进行对比:所有查询都直接返回了同一个错误IP(65.49.2.178),跳过了正常的层层解析步骤。通过分析,作者排除了全球根域名服务器自身出错的可能,将原因锁定在“DNS劫持”上——即有人伪造了根服务器的响应。 文章进一步通过追踪那个错误IP的历史关联信息,发现其与特定组织及“无界浏览器”等翻墙工具存在关联,并指出这种大规模、快速的劫持手法与GFW(防火长城)的运作机制高度一致,从而提出了事件可能由某墙导致的观点。整个分析过程层层递进,从现象描述到技术原理拆解,再到幕后推断,为读者提供了一次生动的网络故障排查案例。

本机暂存
IT 前端/ 2014-05-11 21:26:53 / 累计浏览 2,287

chrome对代理服务器的支持情况

这篇深入探讨了Chrome浏览器对代理服务器的支持情况,清晰梳理了它支持的两大类协议:SOCKS和HTTP。作者指出,SOCKS下实际涵盖了SOCKS4、SOCKS4a和SOCKS5,但Chrome并未明确支持SOCKS4a的远程域名解析,且所有SOCKS协议都不支持身份验证。 在对比关键差异时,文章分析得非常细致。例如,在连接建立的开销上,HTTP、SOCKS4、SOCKS5三者并不相同:SOCKS4需要1次往返,SOCKS5需要2次,而HTTP代理虽然也需要1次往返,但Chrome处理带认证的HTTP代理时机制比较特别(先收到407再补发头信息),且新版本浏览器会尝试记忆认证信息,不过底层部分请求如更新程序依然不支持。 文章还揭示了两个值得开发者注意的实用细节:一是Chrome的DNS预取功能在配置代理后仍可能尝试本地解析,存在隐私泄露风险;二是用户社区长期呼吁为Chrome的SOCKS5代理增加身份验证功能,但官方尚未有实质性进展。这些内容不仅对比了协议特性,也点出了实际使用中可能遇到的坑。

本机暂存
IT DevOps/ 2014-05-10 21:24:14 / 累计浏览 2,767

服务器批量执行工具 PSSH

运维或开发同学经常需要面对这样的场景:当服务器数量达到几十甚至上百台时,如何高效地执行统一操作?这篇文章介绍了一个实用的命令行工具——PSSH(Parallel-SSH)。作者从管理一个拥有60多台Ubuntu执行节点的Oracle Gird Engine集群的实际经验出发,展示了如何利用PSSH来简化批量管理工作。 文章详细演示了PSSH的几个核心命令:用pssh批量执行命令查看所有服务器状态;用pscp将文件同时上传到多台服务器;用pslurp从服务器集群批量下载文件到本地不同目录;以及用prsync保持开发机与生产服务器间的数据同步。每个命令都配有清晰的输入输出示例,比如展示五台服务器(grid01至grid05)的同步操作结果,非常直观。 除了展示功能,文章也提到了PSSH的一个替代方案:对于不排斥Python的开发者,也可以使用Fabric来编写脚本实现类似的批量任务管理。这为不同技术背景的读者提供了选择参考。对于管理大量服务器的运维工作来说,这个工具是个不错的选择。

本机暂存
IT DevOps/ 2014-05-10 21:23:40 / 累计浏览 1,733

跟我学Rsyslog

这篇讲的是日志管理工具Rsyslog的上手指南。作者从日志管理的重要性切入,提到业界热门的ELK三件套虽强,但自己更偏好快速上手的方案,由此引出Linux传统日志工具Syslog及其配置逻辑——通过Facility和Severity来分类和路由日志。面对Syslog在功能和性能上的不足,作者选择了当前多数发行版默认的Rsyslog。 文章重点在于快速实践。作者以CentOS为例,演示了通过RPM安装Rsyslog、关闭旧Syslog服务、启用调试模式等基础步骤。核心部分结合一个具体场景——“将多台Web服务器的access日志集中到一台App服务器”,详细拆解了Rsyslog的工作流程(输入、过滤、输出)。通过配置示例,讲解了如何在Web服务器端用`imfile`模块读取本地日志,并通过TCP发送;在App服务器端则开启TCP接收、使用`omfile`模块和模板来汇总存储。文中还提及了`StateFile`的持久化策略,以及利用`omprog`模块进行更高级处理的可能性。 作者最后也指出,Rsyslog的主要缺点在于版本间的兼容性差异较大,使用时需留意文档。整体而言,这是一篇注重实操、逻辑清晰的入门教程,适合希望快速部署集中式日志管理又不想陷入复杂生态的运维或开发人员。

本机暂存
IT 移动开发/ 2014-05-10 21:21:33 / 累计浏览 1,875

移动应用开发工具:PhoneGap与Titanium的比较

这篇讲的是跨平台移动开发工具 PhoneGap 和 Titanium 的“道”与“术”之别。 PhoneGap 的核心是“包装”,它把 HTML/CSS/JS 写就的 Web 应用,用原生代码包裹起来,再通过一个“桥接”层让 Web 页面能调用摄像头、联系人等设备功能。它的优点是门槛极低,任何前端开发者都能快速上手,但缺点也明显:界面完全依赖移动设备的浏览器视图渲染,性能和体验参差不齐,且很难与真正的原生 UI 组件深度集成。 Titanium 的思路则截然不同,它是“生成”。开发者用 JavaScript 编写的代码,会通过其 SDK 在编译时转换成真正的原生应用指令和 UI 控件。运行时,JavaScript 与原生代码通过“代理对象”并行交互。这带来了接近原生的性能和体验,但代价是开发者需要理解原生应用的构建逻辑,且添加新平台支持的难度较大。 因此,二者的选择归根结底是场景和理念的选择:PhoneGap 更像一个快速的“Web 应用转生器”,适合已有 Web 项目或对原生体验要求不高的场景;而 Titanium 则是一个能用 JS 驱动原生开发的“利器”,更适合追求性能和原生交互体验的移动应用开发。

本机暂存
IT 后端/ 2014-04-29 22:54:43 / 累计浏览 1,762

小股东怎样保护自己的利益

这篇讲的是创业公司里小股东如何自保的实战心法。作者从小股东的尴尬处境切入——身份介于股东和打工者之间,话语权低,但完全放弃权益又极易被“复杂股权架构变更”掏空股份。文章的核心观点是:小股东必须主动行动,通过几个关键策略来对冲信息与权力的不对等。 具体策略包括:一是强化契约意识,任何涉及利益的条款都需法律保障,绝不能因“不好意思”而妥协;二是利用在公司任职的便利,通过非正式渠道(如与财务、人事同事交流)主动拼凑信息,预判风险;三是保持自身的“存在感”,确保个人价值不低于持股比例,避免被边缘化;四是及时评估大股东人品,发现问题尽早友好协商退出;五是永远保留独立创业的能力,作为谈判的底气。 文章也罕见地从大股东视角给出了避免冲突的建议,比如要求小股东现金购股、采用分期授予(vesting)机制、以及及时回购不称职者的股份。这使得讨论更为平衡,对创业双方都有参考意义。最后作者提醒,选择合伙人时需警惕纯粹重利、缺乏理想的商人,因为这决定了公司的底线。

本机暂存
IT 安全/ 2014-04-29 22:49:39 / 累计浏览 5,463

使用 OpenVPN Access Server 轻松搭建 VPN 服务器

这篇讲的是如何快速搭建一个可用的VPN服务器。作者指出,虽然传统方式如 ssh -D 或 sshuttle 能满足临时需求,但对新手而言,从头配置开源OpenVPN过程繁琐。因此,文章推荐了OpenVPN的商业版Access Server,其免费许可证支持2个并发用户,非常适合个人或小型使用场景。 文章的核心优势在于“开箱即用”。作者详细演示了在CentOS 6.x和Ubuntu 14.04上的安装流程,只需几条命令完成下载和安装。安装后会提供明确的管理后台和客户端访问地址,用户使用默认的“openvpn”账户登录后,几乎无需额外配置即可连接使用。 对于客户端选择,文章介绍了官方客户端和流行的开源客户端Tunnelblick的使用方法,并特别说明了在Mac上通过导入特定配置文件连接Tunnelblick的稍显特殊的步骤。整体来看,这是一篇面向实用主义者的快速入门指南,省去了复杂的配置过程,让需要临时或简单VPN服务的用户能迅速上手。

本机暂存
IT 后端/ 2014-04-29 22:47:52 / 累计浏览 2,019

Erlang公平调度的误解

这篇讲的是Erlang引以为傲的“公平调度”哲学,在实际工程中可能并不像想象中那么完美。作者从Erlang虚拟机(BEAM)的时间片分配、抢占式调度说起,点明了它在云计算等场景下保障用户体验的初衷。 但文章的重点在于“祛魅”。作者指出,尽管Erlang的BIF、NIF等模块都在努力维护公平,但一些基础设计环节却可能无意中打破这种平衡。例如,消息队列的无保护单向队列结构,在极端负载下可能导致队列暴增和内存激增;而内存分配器在向系统申请内存时使用的锁,以及SMP架构下难以避免的锁竞争,都可能成为公平性的破坏者。文章最终总结,这些实现细节上的“坑”影响了Erlang在某些情况下的公平性表现,也解释了为何近期Erlang引入dirty scheduler等新机制来应对。 作者最后将视角拉高,提醒架构师需从上到下,在业务层面也进行“公平”设计,才能与系统哲学和谐统一。世界没有绝对公平,但理解其边界至关重要。

本机暂存
IT AI/ 2014-04-29 22:35:15 / 累计浏览 4,778

朋友,不要再打听彼此薪水

这篇文章谈的是职场中一个微妙却普遍的现象:朋友间打听薪水。作者从财年季引发的讨论热潮切入,指出这种做法往往带来沮丧情绪,且弊大于利。 文章的核心观点很明确:了解行业薪资的大致趋势是必要的,这有助于判断个人价值与市场需求的匹配度。但打听具体个人的薪水,尤其是朋友间的薪水,则很容易引发心态失衡。作者生动地描绘了得知薪水差异后的两种典型负面情绪——“凭什么比我高”的郁闷,或“对方也就值这些”的轻视。这种情绪若演变为消极怠工,便可能形成一个从“郁闷”到“工作效率下降”,最终影响个人收入的恶性循环。 作者进一步分析,在满足短暂好奇心之外,打听薪水几乎毫无收益,反而可能给朋友关系贴上不必要的标签,徒增隔阂。因此,他提出了一个简单而有力的个人解决方案:为自己定下规矩,不再打听朋友的薪水,也不再回答此类问题。真正的友谊,其基础在于共同的兴趣与灵魂,而非工资条上的数字。文章最后那句“可以谈谈别的,比如其他人的薪水”,以一种幽默的方式,巧妙地重申了这一观点。

本机暂存
IT DevOps/ 2014-04-29 22:34:12 / 累计浏览 2,720

Ctrl+S导致Putty或Xterm命令行无响应问题

这篇讲的是一个让很多用命令行的人都会心头一紧的瞬间:在PuTTY或Xterm里习惯性地按下Ctrl+S想保存什么,结果终端突然毫无反应,好像死机了。作者一针见血地指出了问题的根因——Ctrl+S在终端环境下默认触发了XOFF流控制,这会暂停终端的一切输出,但其实按键和命令都在后台默默执行。 文章给出了解决这个“假死”问题的三个层次方案。最直接的是立刻按下Ctrl+Q,重新打开流控制,就能“唤醒”终端。想从根源上杜绝,可以在.bashrc配置文件中通过stty命令禁用这个快捷键的XOFF功能。而最巧妙的是“一箭双雕”的方案:不仅禁用了Ctrl+S的终端控制功能,还能通过额外的配置,让它在VIM编辑器里重新变回保存文件的快捷键,完美契合了用户的手指肌肉记忆。 对于经常在命令行和编辑器之间切换的工程师来说,这篇文章提供了从急救到根治,再到功能自定义的全套思路,能有效解决这个烦人的操作习惯冲突。

本机暂存
IT 移动开发/ 2014-04-29 22:31:25 / 累计浏览 3,729

Android Wear设计指南

这篇讲的是Android Wear如何为智能手表这种“新形式”构建专属UI设计语言。作者开篇点明,可穿戴设备的交互核心围绕“建议”与“询问”两个方面展开。前者通过“上下文流”实现,用户垂直滑动查看一张张信息卡片,应用可将最相关的内容主动插入其中;后者则依赖“提示卡片”,用户通过语音“好的,Google”或上滑唤出一系列可点击的操作提示。 文章进一步阐释了贯穿设计的核心原则:设备应具备情境感知能力,做到信息呈现及时、简短且交互极简(如手势与语音),像一位懂你的私人助理,只在必要时打扰。这些原则具体落实在通知UI模式中:通知卡片需为“一瞥”而非阅读设计,优先级对应其紧迫性,允许最多三个操作按钮,并强调了图像在提供上下文信息时的作用与尺寸规范。 整篇指南清晰地描绘了如何将Android体验从手机屏幕延伸至手腕,强调通过智能、克制且直觉化的交互,让技术自然融入日常生活。

本机暂存
IT 算法/ 2014-04-21 12:45:28 / 累计浏览 3,341

lock free的理解

这篇文章帮读者厘清了一个常见误解:很多人以为“无锁”(lock free)就是指程序不使用互斥锁,但实际上这个概念与“用不用锁”并无直接关系。作者指出,lock free的正确定义是:程序能够保证在所有线程中,至少有一个线程可以持续推进,而不会互相阻塞。这意味着即使某个线程挂掉,整个程序的执行流依然能够向前。 文章用一个典型的无锁循环代码举例——两个线程不断交替修改同一个变量,结果却可能互相卡死,这恰恰说明“不用锁”未必就是 lock free。相反,使用锁也可能实现 lock free 的特性,关键在于设计是否保证了系统整体的进展性。 最后,作者提到在实际编码中,lock free 的实现通常依赖 CAS(Compare and Swap)这类硬件支持的原子操作,从而在避免传统锁开销的同时,保障并发安全与性能。

本机暂存
IT 安全/ 2014-04-21 12:44:29 / 累计浏览 5,248

公钥私钥加密解密数字证书数字签名详解

这篇讲的是密码学里那些让人头晕的基础概念——公钥私钥、数字证书、数字签名。作者从自己最初的困惑出发,通过阅读和整理,最终把它们之间的关系和流程梳理得非常清晰。 核心在于理解两个相反的过程:加密解密与数字签名。公钥加密的数据只有私钥能解,保证了机密性;而用私钥对摘要进行“签名”,对方用公钥验证,则能确保数据的完整性和来源真实性。 但新的问题来了:接收方如何安全地获取并信任发送方的公钥?这引出了CA(证书颁发机构)的角色。CA用自己的私钥为用户的公钥签名,制作成数字证书,相当于为公钥提供了可信的“身份证”。接收方只需预先安装一次CA根证书,就能验证所有签发过的证书,从而安全地拿到对方公钥完成验证。 文章将抽象的流程与HTTPS的实际应用结合,最后提示,理解了密钥交换的全过程,也就明白了HTTPS安全通信的基石。它把一个复杂的知识网络拆解得层次分明,很适合用来建立清晰的第一印象。

本机暂存
IT 设计/ 2014-04-21 12:40:42 / 累计浏览 2,110

谷歌眼镜应用的用户体验

作者在圣马特奥的一家酒吧初次试戴谷歌眼镜时,感受是失望的——设备像半成品,屏幕粗糙,实用性存疑。但这篇博文的核心观点在于,尽管早期产品不尽如人意,作者坚信可穿戴设备革命必将到来,谷歌眼镜作为一个开创性平台,值得开发者现在就为其投入设计。 文章并没有停留在观点的表达上,而是深入拆解了为可穿戴计算机、特别是谷歌眼镜设计应用的底层逻辑。作者强调,这类设备的设计高度依赖“情景”,必须让用户在需要时信息自然出现,不干扰时则隐于无形。他归纳了谷歌官方的四条设计原则:为眼镜专门设计、绝不碍事、保持及时响应、避免意外惊吓。作者更进一步指出,这些原则背后最核心的要求是“绝对简单”——应用必须是任务导向的、界面清晰迷人的,任何多余或笨拙的设计,在与用户视线如此贴近的设备上都会被无限放大。 最终,作者从最初的失望,转向了对未来的笃定。他认为当前版本或许不完美,但提前理解并实践这些设计准则,能帮助设计师和开发者避开未来平台的陷阱,占据先机。

本机暂存
IT 开发者/ 2014-04-21 12:38:20 / 累计浏览 1,724

20年的C2C之路

这篇讲的是中国互联网长达20年的“C2C”发展路径,即从美国复制商业模式的历程。作者深入剖析了这一现象背后的深层逻辑,指出其核心驱动力是风险投资(VC)的运作需求——通过对标一个已被验证的美国成功案例(如“中国的Facebook”),来降低投资者的风险感知并为最终的赴美上市铺平道路。 但文章并未止步于“简单抄袭”的论断。作者进一步指出,成功的C2C实践都伴随着深度的“Glocalization”(全球本土化)。从门户网站为适应中国网民习惯而开创的“海量快速”编辑模式,到百度依赖线下代理和网吧预装的地推打法,再到淘宝基于中国零售业现状对eBay模式的颠覆性改造,乃至QQ在虚拟道具盈利上的原创,这些案例无不体现了基于本土环境的微创新甚至彻底重构。 最终,随着互联网从“信息”深化到“人”,中美用户行为的差异愈发显著。作者观察到,纯粹的复制已难以为继,反而是具备强本地化能力或原生创新的模式(如微信生态、互联网金融)开始引领新阶段。这篇文章为我们理解中国互联网的商业基因提供了一个历史视角,也启发我们思考:在今天的出海或本土竞争中,单纯的模式借鉴已远远不够,对用户与市场的深刻理解才是关键。

本机暂存
IT 后端/ 2014-04-15 22:41:31 / 累计浏览 2,711

当cpu飙升时,找出php中可能有问题的代码行

这篇文章分享了一个在PHP进程CPU飙升时快速定位问题代码行的实用技巧。作者从PHP解释执行引擎的源码入手,指出我们可以通过分析进程内存中的关键数据结构来“反向追踪”执行现场。 核心思路是利用PHP的executor_globals全局变量,其中active_op_array保存了当前执行的函数/文件信息,而current_execute_data中的opline则包含了正在执行的具体opcode。通过GDB附加到问题进程,直接打印这些结构体中的filename、function_name和lineno字段,就能精准定位到当前消耗CPU的代码行。文章最后还演示了使用PHP源码自带的.gdbinit脚本与zbacktrace命令,进一步简化了回溯流程。 这种方法跳过了复杂的日志分析,直接从进程运行时状态切入,对于排查难以复现的CPU问题特别有效。作者通过一个简单的死循环sleep示例,清晰地验证了该思路的可行性。

本机暂存
IT 前端/ 2014-04-15 22:40:29 / 累计浏览 2,087

动态创建iframe在IE下的两个问题

这篇技术文章聚焦于动态创建iframe在早期IE浏览器(IE6/7/8)中遇到的两个具体兼容性坑点。作者首先指出,使用`createElement`动态创建iframe后,将其设置为表单提交目标(target)的方式在IE6/7下会失效,导致无法实现无刷新提交。其根因在于IE浏览器对这种方式创建的iframe元素识别存在缺陷,解决方案是改用`innerHTML`的方式将iframe插入DOM。 第二个问题同样常见:通过`onload`属性为动态创建的iframe绑定加载完成回调,在IE6/7/8中均会失效。作者解释,这是因为IE的旧版本不支持该属性的事件绑定,需要改用其特有的`attachEvent`接口来实现。文章为两个问题都提供了简洁有效的代码示例,方便读者直接参考修改。 对于仍在维护老旧系统或需要处理兼容性的前端开发者而言,这篇文章清晰地剖析了问题现象、根源并提供了即用型的解决方案,是一份实用的排错指南。

本机暂存
IT 安全/ 2014-04-15 22:38:13 / 累计浏览 3,205

OpenSSL HeartBleed漏洞原理漫画图解

OpenSSL的“心脏出血”漏洞曾引发全球网络安全界的震动,用户们最直接的担忧就是:我们的重要数据,比如支付宝里的钱,还安全吗? 这篇文章没有停留在事件表面的讨论,而是借助xkcd网站经典的漫画形式,用最生动直观的方式,拆解了这个漏洞的核心原理。它抓住了问题的关键——“心跳检测”机制。用户通过TLS加密链接向服务器发送“心跳”信号来确认其在线状态,服务器则会回应。漏洞就出在,如果用户发送的“心跳”信号中声称的数据长度(pad length)大于实际数据长度,服务器不仅不会报错,反而会返回同样规模的数据。这相当于允许攻击者越过边界,读取服务器内存中本不该被访问的信息。 文章将复杂的技术漏洞转化为一幅易懂的漫画,清晰地展示了这种“请求与响应”的不匹配如何导致内存信息泄露,帮助非安全领域的读者也能理解问题的本质,明白为何一个编程错误能引发如此广泛的危机。

本机暂存
IT 后端/ 2014-04-13 22:47:58 / 累计浏览 3,064

使用Node.js、Twilio实现手机控制门锁

这篇教程解决了一个很实际的场景:忘带钥匙或需要远程为访客开门时,如何用手机控制家里的门锁。作者从自己在Makerland大会的演讲出发,手把手展示了一套不需要破坏原有门锁的DIY方案。 硬件核心是使用Arduino Uno微控制器驱动一个伺服电机,再通过物理结构(比如纸板和胶带)将电机的转动与门锁的旋钮联动起来,实现开锁与闭锁的机械动作。软件层面则构建了一个完整的通信链路:Node.js脚本通过Express框架搭建本地Web服务,利用Twilio API接收特定号码发来的短信指令;随后,脚本再通过串口通信向Arduino发送控制信号,驱动电机完成操作。整个系统通过ngrok实现内网穿透,让外网的Twilio能够访问到你的本地服务。 文章最巧妙的地方在于,它清晰地拆解了从物理组装到软件集成的全流程,让一个听起来有点科幻的想法,变成了一个有具体零件清单、接线图、代码示例的可复现实验。对于喜欢折腾硬件和Node.js的开发者来说,这是一个将软件能力延伸到物理世界的小而完整的范例。

本机暂存