IT技术博客大学习 共学习 共进步

发现

共 287 篇文章

IT 2021-05-27 07:41:33 / 累计浏览 1,609

迁移到 Octopress

作者将用了三年的 WordPress 博客迁移到了 Octopress。主要动机是 WordPress 太过臃肿,仅几个 PHP-FPM 进程和 MySQL 就占用了约 400MB 内存,对于访问量不高的博客来说资源消耗很不划算。Octopress 作为一个静态发布系统,以其配置简单、原生支持 Markdown 语法、模板美观等优点,迅速吸引了作者。 迁移过程主要参考了 Octopress 官方文档和几篇社区文章,几个小时内便完成了数据导出、导入和部分文章的润色,一个全新的静态博客就基本可用。不过作者也指出了 Octopress 不够完美的地方,例如插件生态较少,甚至缺少标签云这类基础功能。在迁移中还遇到了一个具体坑:更换正式域名后,生成的静态页面和 RSS 中的 URL 会新旧随机变化,导致 IFTTT 误认为文章全部更新而向 Twitter 发送了大量重复信息。清除缓存目录后问题得以解决。 总的来说,Octopress 虽不完美,但已能很好地满足作者对轻量、高效博客系统的需求。

IT 2019-08-10 22:41:13 / 累计浏览 2,076

风投是如何进行投资判断的

从腾讯投资部转身投入一线创业公司,资深投资人 Annie 的职业选择背后,藏着一个被无数创业者追问的问题:风投机构究竟如何判断一个项目?这篇文章借由她的亲身观察,为我们拆解了投资决策中那些“看不见的标尺”。 Annie 在普林斯顿大学的学术背景与在腾讯投资部的实战经验,让她练就了一套犀利的评估框架。当她深入猿辅导这家数据表现堪称优异的公司后,她发现投资判断远非数据报表那么简单。文章的核心观点在于,顶尖风投的决策往往是理性计算与感性洞察的结合体——既会严谨分析公司的增长曲线、单位经济模型与市场天花板,也会深度拷问创始团队的愿景、韧性与进化能力。 这对读者最大的启发在于,无论是创业者准备融资,还是从业者想理解资本逻辑,都不能只停留在“把故事讲好”或“把数据做漂亮”的层面。真正打动投资人的,往往是团队对业务本质的深刻理解,以及在不确定性中持续找到正确方向的证明。投资判断的本质,是在当下数据与未来可能性之间做出一道高风险的权衡题。

IT 2019-08-10 22:33:13 / 累计浏览 5,254

OKR 工作法简介

这篇讲的是 OKR(目标与关键结果)工作法。作者从阅读《OKR 工作法》一书出发,结合实践经验,拆解了这个在硅谷流行、后引入国内的目标管理方法。 文章的核心在于阐明 OKR 的独特性:它设定有挑战性的目标(关键结果初始信心指数仅为 5/10),且**明确不与绩效挂钩**,旨在激发团队内驱力。作者详细介绍了其实践工具——一个包含目标、关键结果、本周重点及状态指标的四象限画布,以及每周讨论、更新的流程。 一个重点是 OKR 与 Scrum 的融合。作者认为,OKR(宏观战略)与 Scrum(微观战术)可以互补:在 Scrum 计划和回顾会议中,同步更新 OKR 画布,让日常迭代与长期目标对齐。文章也犀利地对比了 OKR 与 KPI:KPI 易导致数据造假等短视行为,而 OKR 通过断开与薪酬的关联、强调自组织讨论,来避免这一点。它真正替代的,是原本模糊的团队目标透明化机制。 最后,文章也指出了落地挑战,比如组织架构(需要业务型团队)和团队积极性。总的来说,OKR 不仅是团队管理工具,也适用于个人目标梳理,其价值在于将“要我做”转化为“我要做”的清晰路径。

IT 2019-04-09 00:33:19 / 累计浏览 2,672

USB 4:目前所知道的一切

这篇讲的是即将到来的下一代USB传输标准——USB 4。它并非简单迭代,而是带来三项核心变革:最高40Gbps的双通道速度、对Thunderbolt 3设备的广泛兼容,以及智能动态的带宽分配能力。 文章明确指出了其关键升级点:USB 4将彻底拥抱Type-C物理接口,并有望终结“速度与视频带宽互相挤占”的时代。例如,在同时输出4K视频与传输数据时,它能按需精准分配资源,避免性能浪费。作者也剖析了与Thunderbolt 3融合的现实前景,虽然并非所有厂商都必须实现,但行业预计将大规模支持,这将极大地降低高性能外接设备(如eGPU)的使用门槛。 此外,文章厘清了USB 4实际会存在10Gbps、20Gbps和40Gbps三档速度,并强制统一了USB供电标准。对于关心新标准具体落地影响的读者,这篇梳理了技术细节、兼容性现状与潜在限制的指南,提供了清晰的技术地图。

IT 2019-04-09 00:25:32 / 累计浏览 1,974

代码不规范,同事两行泪,撸码七宗罪!

代码千万行,注释第一行;编程不规范,同事两行泪。这篇有趣的文章从技术圈广为流传的吐槽段子出发,直指协作中最令人头疼的痛点。 作者梳理了编程世界里的“七宗罪”,将那些看似不起眼、却会累积成“技术债”或团队矛盾的坏习惯一一列出。比如协作时拒绝使用版本控制,让代码合并变成一场噩梦;用 a、b、c 给变量命名,在大型项目中让人抓狂;盲目增加依赖库,甚至不经测试就升级核心组件(比如 React),可能直接引发连锁反应。文章还点名批评了不一致的代码格式、逃避错误处理(尤其要当心空指针),以及在复杂场景下选用不当的数据类型等常见问题。 这些“罪”之所以普遍,正因为它们常常被忽视。文章用生动的比喻和具体例子,提醒我们:代码的可读性与健壮性,往往就藏在这些细节里。遵守规范不仅是为了他人,更是为了一年后的自己不被自己写的代码“气哭”。

IT 2019-01-01 21:00:47 / 累计浏览 3,038

10个最“牛叉”的代码注释

这篇文章汇总了StackOverflow上“你见过的最棒的代码注释”投票前10名,展示了程序员们在严谨逻辑之外,极具人文色彩与黑色幽默的另一面。 这些注释远非简单的功能说明。有的像“警告牌”,如耗时39小时优化失败的前人,留下计数器警示后继者;有的则像“骑士宣言”,用史诗般的语言鼓励接手棘手代码的勇士,告诉他“永远不要放弃”。双关与冷幽默也随处可见,比如 `throw up;` 这样的异常抛出,既是代码动作,也是情绪吐槽。还有用 `#define TRUE FALSE` 来捉弄调试者的恶作剧,或是“写的时候只有上帝和我知道,现在只剩上帝知道”的无奈自白。 这些看似不正经的注释,其实深刻揭示了软件开发中的真实场景:面对遗留代码的无力感、与同事跨时空的隔空对话,以及程序员特有的、用代码表达的情感宣泄。它们提醒我们,代码库不仅是功能的集合,也承载着开发者的故事、挫败与坚韧,是理解技术文化一个鲜活而有趣的窗口。

IT 2019-01-01 19:45:43 / 累计浏览 3,477

救命!我的电子邮件发不到 500 英里以外!

这篇讲的是一个听起来像都市传说,却又真实得令人哭笑不得的邮件故障。作者接到统计系主任求助,对方煞有介事地表示:“我们的邮件发不出520英里。”经过一番测试,问题居然是可复现的,近的纽约能到,远的波士顿就失败。 排查最终指向了一个看似“打补丁”的维护操作。服务顾问在升级服务器OS时,不慎将系统自带的Sendmail 8降级回了老版本的Sendmail 5。新的sendmail.cf配置文件中许多高级选项被旧版程序当作“垃圾”跳过,其中就包括SMTP连接超时——它被默认设成了0。作者通过计算发现,在0毫秒超时下,数据包依靠光速所能传播的极限距离,恰好就是这500多英里。一个系统配置的乌龙,竟意外地与物理定律产生了美妙的巧合。这个故事不仅是个绝佳的故障排查案例,也提醒着每一次“例行维护”都可能埋下意想不到的彩蛋。

IT 2017-10-15 09:36:42 / 累计浏览 3,459

如何将树莓派变成电子书服务器

这篇文章讲的是如何用一台树莓派3和开源软件Calibre,在本地网络中搭建一个私有的电子书服务器,特别适合网络条件不佳的环境共享阅读资源。 作者的起点很实际:学校或图书馆需要共享电子书,但可靠带宽并非总能获得。他选择的方案是利用Calibre 3.0(支持浏览器在线阅读)的强大功能,将其部署在低功耗的树莓派上。整个过程并不复杂,核心是在Raspbian系统上安装Calibre,然后配置其内置的内容服务器。 文中展示了从下载系统镜像、通过终端命令安装Calibre,到搜索并添加免费电子书(如从古腾堡计划下载马克·吐温的作品)的具体步骤。关键操作包括启动服务器、用`ifconfig`获取树莓派的IP地址,最后通过同一局域网内任何设备的浏览器访问`IP:8080`端口即可连接。 作者最终在iPhone、Linux和Mac电脑上都测试成功,验证了这个方案的可行性。它把一台廉价的微型电脑变成了一个随时可用的数字图书馆枢纽,对于教育和小团队知识共享场景是个不错的思路。

IT 2017-03-01 23:14:25 / 累计浏览 2,197

MAMP Pro 里面自带的 PHP 命令行执行特别慢的问题

这篇讲的是作者在 Mac 上使用 MAMP Pro 开发环境时遇到的一个颇为古怪的问题:升级系统后,命令行执行 PHP 命令会异常缓慢。作者尝试用 dtruss(Mac 下的系统调用追踪工具)进行调试,但未能定位到具体卡顿点。 经过查阅资料,发现问题根源在于某些 PHP 调用会触发不必要的 DNS 查询,导致执行延迟。最终的解决方案出人意料地简单:在 Mac 的 hosts 文件中,为自己的计算机名添加了本地解析条目。具体操作是,在 `127.0.0.1` 和 `::1`(IPv6)后添加形如 `YourComputer.local` 的主机名(主机名需在系统偏好设置的“共享”面板中查看)。设置完成后,PHP 命令行的执行速度恢复正常,可谓“药到病除”。 文章通过作者亲身实践的调试过程与最终验证的解决方案,为遇到类似 MAMP Pro 环境下命令行迟钝问题的开发者,提供了一个清晰且可直接操作的排查思路和修复方法。

IT 2017-02-19 23:53:55 / 累计浏览 3,021

为什么 Windows 的文件系统会有盘符,使用反斜杠分割路径

这篇技术博客从一个轻松的讨论切入——Windows系统在挂载大量盘符后会出现双字母命名的“诡异”现象,进而探讨其背后的设计逻辑。作者指出,虽然从现代视角看,盘符和反斜杠似乎是冗余的历史包袱,但其根源深植于MS-DOS的早期发展。 文章追溯到MS-DOS 1.0时代,当时主流软盘没有层级目录。盘符(A:、B:)的设计直接借鉴了更早的CP/M系统,方便用户在两个软盘驱动器间操作。随着IBM PC/XT引入10MB硬盘,盘符扩展到了C:。而路径分隔符选用反斜杠“\”而非Unix的“/”,是因为MS-DOS的开发者继承了DEC系统使用“/”作为命令行参数分隔符的惯例,为避免混淆,只能选择其他符号作为目录分隔符。 作者通过这段历史对比了Windows与Unix系系统的设计哲学:Unix将物理存储通过挂载点透明地整合进统一文件树,而Windows保留了显式的盘符概念。这些早期设计决策,最终形成了我们今天看到的、让不少程序员感到“深恶痛绝”的Windows路径风格。

IT 2017-02-06 23:09:48 / 累计浏览 2,976

真假百度蜘蛛的甄别

这篇讲的是如何从海量访问日志中,揪出伪装成百度蜘蛛的非法爬虫。 问题在于,仅凭请求头里的User-Agent字段判断并不可靠。真正的解决方法,其实百度官方早就给出了:对所有自称Baiduspider的访问IP进行反向DNS查询,只有其域名以 *.baidu.com 或 *.baidu.jp 结尾的,才是正品。作者通过一段精巧的shell脚本,在历史日志中批量执行这个验证,最终成功提取出了数百个真实百度蜘蛛的IP地址。 为了让这份数据更实用,作者进一步将这些零散IP聚合成了几个24位的CIDR网段,比如 119.63.195.0/24 和 123.125.71.0/24。这样,日后只需一条简单的IP归属网段判断规则,就能实现精准放行或封禁,而不再需要逐个IP核查。文章不仅提供了可直接复用的验证脚本,也给出了最终可供运维配置的实用数据,对于网站安全与流量分析都有参考价值。

IT 2017-02-06 23:07:35 / 累计浏览 5,123

Chrome开发者工具的小技巧

这篇文章收录了多个实用但鲜为人知的 Chrome 开发者工具技巧,适合前端开发者和测试人员提升调试效率。比如,面对被压缩的 CSS/JS 代码,点击左下角的“{ }”图标即可一键格式化,让阅读调试更轻松;想观察元素在 hover 或 focus 状态下的样式?使用 CSS 面板上的“:hov”按钮就能强制切换 DOM 状态,无需手动悬停。 文章还介绍了动画调试的“慢动作”模式、通过一行命令将整个网页变为可编辑状态、模拟低速网络环境等实用功能。其中,“复制为 cURL”功能尤其值得一提,它在 Network 面板中能将 Ajax 请求直接导出为命令行 curl 命令,便于复现和自动化测试(但需注意隐私信息泄露风险)。此外,从给 DOM/XHR/事件监听器设置断点,到在 Console 中使用 jQuery 风格语法选择元素并监控事件,这些技巧覆盖了日常调试的多个常见痛点。整体而言,这是一篇聚焦细节、实操性强的工具指南。

IT 2017-02-06 22:55:51 / 累计浏览 6,972

使用Mitmproxy分析接口

这篇讲的是如何使用开源的Mitmproxy来抓包分析移动端接口,作者从Charles收费、Fiddler Mac版不稳定的现状出发,引出了这款免费且稳定的替代工具。 文章不仅讲了安装,更重点演示了如何配置证书以拦截HTTPS请求。作者以汽车之家APP为例,完整展示了从配置代理、捕获流量到分析接口的实战过程。过程中有个有趣的发现:APP并非直接调用域名,而是通过HttpDNS获取IP,并在请求头中携带Host信息。直接访问截获的IP地址会无效,必须补充Host才行。 更精巧的是,在尝试获取品牌数据时,作者发现即使地址正确,返回结果也是空的。通过仔细比对请求与响应中的时间戳,他推测APP实现了一套自定义的缓存机制。主动调低请求中的ts参数后,成功拿到了完整的品牌列表数据。照此方法,他最终顺利获取了车系和车型的全部接口。 虽然演示基于特定版本的APP,但文章提供的这套从工具配置到逆向分析接口参数的方法论,具有很强的通用性,为服务端开发者打开了一扇观察移动端数据流向的窗口。

IT 2016-12-22 23:32:37 / 累计浏览 3,672

你必须收藏的Github技巧

这篇讲的是几个能立即提升GitHub使用效率的“隐藏”小技巧。作者没有长篇大论,而是直接分享了五个具体的、可操作的方法。 其中比较亮眼的有:直接将master分支设置为GitHub Pages网站源,免去了在gh-pages分支间手动同步的繁琐;通过在URL后添加#L行号,可以精准分享单行或多行高亮代码,对方打开链接就能定位到指定位置;在提交信息中使用fix、close等关键字关联issue,可自动关闭问题,保持项目管理清爽。 此外,文章还介绍了如何用HTML代码在网站中嵌入GitHub的Star按钮,以及通过.gitattributes文件自定义项目被识别的语言类型。整篇文章没有空泛的理论,每个技巧都配有示例或效果说明,对于日常使用GitHub的开发者来说,这些都是能立刻用上、节省时间的实用干货。

IT 2016-07-17 23:55:04 / 累计浏览 3,365

在公众号中优雅地呈现代码

这篇文章解答了一个技术公众号运营者常遇到的困惑:如何让 Markdown 生成的代码块在公众号页面中保持整齐的格式,而不是因为微信的过滤机制而错乱。 作者首先点出了问题的根源:Markdown 解释器在处理代码时直接输出了换行符 `n`,而微信的编辑和保存脚本会过滤掉这些符号,导致代码“挤成一团”。常见的应对方式是直接截图,但这对维护者来说既繁琐,又会影响读者的加载和阅读体验。一个更自动化的思路是开发组件,利用 highlight.js 高亮后绘制到 canvas 并导出图片。 不过,作者随后分享了一个更简便的实践路径:借助 Chrome 插件 Markdown Here。这款插件能将 Markdown 直接转换为 HTML,但微信编辑器同样是 contenteditable 区域,其二次解析会再次破坏样式。文章的核心在于针对这一新问题给出的最终处理办法——通过几行正则表达式对转换后的代码进行处理,从而在保存和预览时“骗过”微信的脚本,稳定地呈现出美观的代码格式。这个小技巧,或许能为不少技术号主省去折腾的时间。

IT 2016-07-13 23:27:43 / 累计浏览 4,405

从LinkedIn,Apache Kafka到Unix哲学

这篇讲的是,如何从上世纪70年代的Unix哲学中,为现代分布式系统设计寻找灵感。作者从一个经典场景切入:用awk、sort等Unix工具链处理Web服务器日志,只需几条简单的管道命令,就能高效分析出热门URL。这背后的精髓在于Unix哲学的两条核心准则:每个程序只做好一件事,并通过标准化的输入输出流(stdin/stdout)进行组合。 随后,文章将这一思想与传统关系型数据库的设计模式进行了对比。数据库普遍采用不对称的客户端-服务器模型,客户端发送查询,服务器处理并返回响应,数据流的组合性远不如Unix管道那样灵活。作者意在指出,尽管时代变迁,但“关注点分离”和“松耦合”的古老智慧依然适用。这种视角,为我们理解Apache Kafka为何被设计成一个分布式的、基于日志的流处理系统提供了关键线索——它在架构上更接近Unix管道,而非传统数据库。

IT 2016-04-02 22:59:49 / 累计浏览 1,849

使用 Elasticsearch 实现博客站内搜索

作者从使用 Bing 的 `site:` 搜索作为博客站内搜索方案所遇到的索引更新延迟问题出发,转而决定自建搜索服务。这篇实操记录详细介绍了如何使用 Elasticsearch 这一分布式搜索引擎来实现这一目标。 文章首先指导读者在 Ubuntu 环境下手动安装 Elasticsearch,随后重点讲解了配置的关键步骤:安装并编译 IK Analysis 插件以支持智能的中文分词(提供了 `ik_max_word` 与 `ik_smart` 两种粒度选项),以及通过修改配置文件添加同义词过滤器,让搜索能识别“js”和“javascript”这类等价术语。 在基础服务搭建完毕后,作者进一步展示了如何通过 Node.js 客户端将 Elasticsearch 无缝集成到现有的博客系统中。最终实现的搜索不仅支持中文分词与同义词,还通过定制查询策略达成了“标题匹配优先”和“近期文章优先”的优化效果,为读者提供了一个从部署到应用的全链路参考。

IT 2016-04-02 12:53:14 / 累计浏览 3,662

聊聊 Apache 开源协议

作者从一次开源项目疏于声明版权的小插曲谈起,引出了对 Apache 开源协议的讨论。文章首先用几句话精准概括了 Apache License 的核心:你可以自由使用、修改代码,但若进行开源分发,必须保留原始版权声明并清晰标注改动部分;你甚至可以附加新条款,但前提是与原协议不冲突。 接着,文章将 Apache 协议与社区常见的 MIT、GPL 协议进行了对比。一个关键区别在于,Apache 协议允许衍生作品在特定条件下保持闭源,这与 GPL 的“传染性”(即使用了 GPL 代码的衍生作品也必须开源)形成鲜明对比。作者指出,这正是 Android 系统选择 Apache 协议的主要原因——它允许硬件厂商提供闭源的驱动程序,从而在商业与开源之间找到了一个平衡点。 文中还提到了作者亲自翻译 Apache 协议原文的工作,为读者提供了直接阅读理解的便利。整个讲解结合了具体案例和协议条款,把枯燥的法律文本讲得清晰易懂。

IT 2016-03-23 15:26:20 / 累计浏览 5,483

给树莓派安装ArchLinux

这篇文章解决了一个实际问题:当树莓派官网不再提供ArchLinux镜像下载后,如何手动将这个轻量高效的系统安装到SD卡上。作者从ArchLinux的设计理念——简单、轻量、高性能——出发,解释了它为何特别适合树莓派这类嵌入式环境。 核心方案是一套清晰的命令行安装流程。文章从下载对应型号的ARM版系统包开始,逐步讲解了如何使用fdisk为SD卡创建boot和root两个分区,分别格式化为FAT32和ext4文件系统,然后将解压的系统文件移动到正确位置。其中特别强调了将设备名“sdX”替换为实际编号的操作细节,并提供了root和alarm用户的默认登录信息。 整个过程虽然比直接写入镜像稍显繁琐,但能更合理地利用SD卡空间,为后续在树莓派上发挥ArchLinux的扩展性和性能优势打下干净的基础。

IT 2016-03-23 13:47:39 / 累计浏览 4,520

在Mac上删除Google的流氓软件

这篇讲的是Mac用户可能从未留意过的一个隐蔽问题——谷歌的自动更新代理(GoogleSoftwareUpdateAgent)会在后台静默运行,即便你的电脑上没有安装任何谷歌软件。作者从Mac的Console系统日志入手,展示了该进程如何定期执行更新检查,并通过一行Terminal命令教会读者如何自查是否已被“感染”。 问题的核心在于,谷歌的这个组件会随某些应用静默安装,并常驻系统后台。对于注重隐私和系统洁净度的用户而言,这种不请自来的常驻服务无疑是一种困扰。文章不仅揭示了现象,更给出了直接、有效的终端卸载命令,帮助用户彻底移除这个“不速之客”。 通过这个具体案例,文章提醒我们:一些主流软件的附属组件可能会在用户不知情下获得系统权限并持续运行。定期审视系统后台进程,是维护电脑健康的一个好习惯。