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

最新文章

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

IT DevOps/ 2018-07-05 00:00:26 / 累计浏览 2,253

假装很忙的三个命令行工具

这篇文章从一个有趣的观察切入:电影里那些酷炫的黑客屏幕,在现实中往往只是“假装很忙”的道具。作者调侃地介绍了三个开源命令行工具,来满足这种独特的“表演需求”。 第一个是 Genact,它能模拟内核编译、数字货币挖矿或文件下载等场景,让你的终端看起来一直在“努力工作”,甚至还能显示类似《模拟城市》的加载进度条。第二个是 Hollywood,它更简单粗暴,直接在终端里随机分屏,并快速切换显示 htop、目录树等看起来很忙碌的内容。第三个是作者最常用的 Blessed-contrib,它本质是个构建终端仪表盘的 Node.js 库,能轻松生成带图表和地图的数据可视化界面,填充上虚拟数据,科幻感直接拉满。 文章最后也提醒,这类工具更像是极客的玩笑,如果公司文化真的以“忙碌程度”评判员工,那本身就是一个亟待解决的问题。作者还提到了著名网络扫描工具 Nmap 因频繁出现在好莱坞电影中,甚至专门建了个页面来展示这些“出镜”记录。

本机暂存
IT DevOps/ 2018-07-04 23:58:17 / 累计浏览 1,802

每个 Linux 新手都应该知道的 10 个命令

这篇讲的是,看似熟悉的互联网其实运行在 Linux 之上——从 Android 手机到超级计算机,90% 的网络服务器都依赖它。文章从这个事实出发,为那些想从桌面环境踏入命令行世界的用户,梳理了必须掌握的10个基础命令。 作者没有停留在概念层面,而是具体展示了每个命令的用途和细节。例如,`ls` 用来查看文件目录,`cd` 用于目录跳转(并解释了目录名含空格时需用反斜杠),`mv` 负责移动文件。文章还特别整理了一组能大幅提升效率的终端快捷键,比如用 `CTRL+K` 剪切、`ALT+B` 按词回退,并举例说明如何快速修正命令行中的拼写错误。 这些命令构成了与 Linux 系统交互的基础语法。掌握它们,你就能创建 (`mkdir`, `touch`)、查找 (`locate`)、移动 (`mv`) 乃至删除 (`rm`, `rmdir`) 文件与目录,并设置定时任务 (`at`)。作者将它们称为“简单却有用”,正是因为它们是理解更复杂系统操作的第一步。

本机暂存
IT 后端/ 2018-07-04 23:50:30 / 累计浏览 2,240

初探Kafka Streams

这篇文章从流式计算讲起,清晰地区分了它与批量计算及实时计算的核心差异。流式处理的是“无界”数据流,追求增量式计算与实时性,而非等待全量数据。 在此基础上,文章引出了Kafka Streams——一个轻量级的客户端类库,它让Java应用能轻松处理Kafka中的流数据。它的设计亮点非常突出:除了Kafka本身几乎没有外部依赖,却能利用Kafka的分区模型实现水平扩展和顺序保证;它通过可容错的状态存储支持复杂窗口操作,并提供从高层流式DSL到底层Processor API的完整工具链。 文章进一步深入到Kafka Streams的架构内核。它解释了以Stream(无界数据集)为核心抽象,如何通过Source、Sink等Processor节点构建出处理拓扑(Topology)。同时,也剖析了流处理中至关重要的时间模型,如事件时间与处理时间的区别。最终,文章展示了Kafka Streams如何将简洁的客户端编程与强大的服务器端集群能力结合,为构建微服务提供了一条清晰的路径。

本机暂存
IT 算法/ 2018-07-04 23:47:09 / 累计浏览 3,399

常见相似度计算方法回顾

这篇技术博客系统梳理了数据科学和机器学习领域常见的五种相似度度量方法,为相关从业者提供了一个清晰的快速参考。文章从基础的空间距离概念出发,依次回顾了欧几里得距离(直观的直线距离)、曼哈顿距离(各坐标轴绝对差值之和)、闵氏距离(前两者的泛化形式)、余弦相似度(衡量向量方向差异而非长度)以及杰卡德相似度(基于集合的交并比)。 每种方法都配有形象的示意图和简洁的Python实现代码,使得理论概念与实践应用得以紧密结合。作者不仅解释了各自的数学定义,还隐含了它们的应用倾向:例如,欧氏距离适用于空间聚类,余弦相似度常用于文本向量比较,而杰卡德相似度则擅长处理离散的集合数据。 整体而言,这是一篇非常实用的“备忘录式”文章。它没有深入推导公式,而是通过清晰的对比和可运行的代码,帮助读者快速重温或上手这些关键工具,尤其适合需要在不同场景下选择合适度量方法时进行查阅。

本机暂存
IT 算法/ 2018-07-04 23:45:09 / 累计浏览 3,272

相似度计算之马氏距离

这篇讲的是马氏距离(Mahalanobis Distance)。作者首先指出了它和常见的欧氏距离的本质区别:马氏距离通过引入协方差矩阵,巧妙地“吸收”了数据各维度之间的相关性,并且不受量纲(测量单位)影响。 文章的核心在于解释它如何工作。简单说,马氏距离可以看作是将原始数据投影到由协方差矩阵定义的“标准化”空间后的欧氏距离。文中用了一个直观的图示:在椭圆形的等高线分布中,红点到黑点的欧氏距离小于绿点到黑点,但若考虑数据分布的相关性,马氏距离的结论可能正好相反。这清晰地展示了它在处理特征相关时的威力。 文章不仅梳理了方差、协方差等前置概念,给出了严谨的数学定义,还提供了完整的Python计算示例,使用的是跨国数据。最后,作者总结了马氏距离的优点(如排除相关干扰、满足距离公理)和一个潜在缺点(可能夸大微小变化变量的作用)。 从理论概念、直观图解到代码实践,这篇文章为理解这个重要的相似度度量工具提供了一个相当完整的入口。

本机暂存
IT 算法/ 2018-07-04 23:44:26 / 累计浏览 2,301

相似度计算之切比雪夫距离

这篇讲的是相似度计算中的切比雪夫距离,文章从国际象棋中国王的走法这个生动例子切入,解释了这种距离也被称为“棋盘距离”的由来——即两点间坐标差的最大值。 作者从二维平面的定义出发,将其推广到n维向量空间,并点明了它与闵可夫斯基距离的深层联系:切比雪夫距离是p趋向无穷大时的闵可夫斯基距离。文章还提供了清晰的Python实现代码,方便读者直接上手应用。 尤为精彩的是后半部分对切比雪夫距离与曼哈顿距离的对比。两者定义看似不同,但作者通过几何直观展示了它们的相互转化关系:将代表曼哈顿距离的正方形旋转45度并缩放,即可得到代表切比雪夫距离的正方形。这种视角揭示了不同距离度量在本质上的内在关联,有助于读者更灵活地选择和使用合适的距离计算方法。

本机暂存
IT DevOps/ 2018-07-04 23:41:26 / 累计浏览 2,414

10 条加速 Ubuntu Linux 的杀手级技巧

这篇讲的是如何让变慢的Ubuntu系统重新快起来。文章没有空谈理论,而是直接给出了10个实操性强的“杀手级技巧”,针对的是Ubuntu用久了难免出现的卡顿问题。 作者从系统变慢的常见原因切入,然后逐一拆解解决方案。这些技巧覆盖了从开机启动(缩短Grub等待、管理自启动应用)、软件安装(用preload预加载、用apt-fast加速下载),到运行时优化(控制过热、调整LibreOffice内存)等多个层面。比如,通过一个简单的`sleep`命令就能延迟非必需程序的启动,或者通过调整软件源来加速更新,这些都是立竿见影的小改动。 文章特别贴心地指出,这些方法不仅适用于Ubuntu,也适用于Linux Mint等基于Ubuntu的发行版。对于老旧硬件或追求流畅体验的用户,其中关于切换到Xfce或LXDE等轻量级桌面环境的建议,提供了进一步的优化思路。整篇文章就像一份针对系统“新陈代谢”的调理方案,通过一点一滴的设置累积,最终能换回一个更迅捷的工作环境。

本机暂存
IT 数据库/ 2018-07-04 12:06:56 / 累计浏览 2,359

用户模型之三户模型

这篇讲的是电信与互联网系统中常用的“三户模型”。作者从eTOM框架出发,梳理了客户(Customer)、用户(User)和账户(Account)这三个核心实体如何以“以客户为中心”的理念进行构建与区分。 关键在于厘清三者的边界:客户体现社会域信息,是自然人或法人的实体身份,即使不使用业务也客观存在;用户体现业务域信息,是客户登录和使用产品的账号实例;账户则体现资金域信息,负责交易记账。它们之间是归属与映射关系,但各自独立。 文章以电信业务为例具体说明:一个客户(张三)可以开通多个用户(如手机和宽带),这些用户又由一个或多个账户来付费,形成了灵活的映射。在互联网实践中,客户归并(如通过身份证号识别同一人)、用户的生命周期管理(从注册到销户的复杂流程)、以及账户的多样化建模(支付、结算、风控等需求),都围绕这套模型展开,以支撑起以客户为中心的业务管理与数据统计。

本机暂存
IT 算法/ 2018-07-04 10:46:03 / 累计浏览 3,402

密度聚类算法之OPTICS

这篇讲的是密度聚类算法OPTICS。它出发点是为了解决经典DBSCAN算法对邻域半径Eps和最小点数minPts这两个参数过于敏感的痛点。OPTICS作为DBSCAN的扩展,核心优势在于让聚类过程对半径参数Eps不再敏感,只需设定好minPts,轻微的Eps变化就不会干扰最终的聚类结构。 为了达成这一点,文章解释了两个关键新定义:核心距离和可达距离。核心距离是一个点成为核心对象所需的最小半径;可达距离则结合了核心距离,决定了点在排序中的位置。算法并不直接输出簇,而是通过维护“有序队列”和“结果队列”,生成一个基于可达距离的样本点排序。这个排序信息非常丰富,从它可以推导出在不同参数设置下DBSCAN的聚类结果。 最终,我们可以将这个排序可视化:以输出次序为横轴,可达距离为纵轴绘图。图中的“山谷”代表簇,谷越深簇越紧密;平坦区域或凸起则可能对应噪声。通过设定一个距离阈值切割这个图,就能灵活提取出聚类结构。文章最后还提及了OPTICS在异常检测、子空间聚类等方向的扩展算法。

本机暂存
IT 开发者/ 2018-07-04 10:43:05 / 累计浏览 2,499

用这样的 Vi 配置来保存和组织你的笔记

这篇讲的是开发者如何用自己最熟悉的工具链——Vim、Git 和 GitLab,来高效地管理个人笔记和知识库。作者从“用编码的工具来写笔记会更简单”这个直觉出发,对比了多种笔记方案(如纸质本、思维导图)后,发现维基(Wiki)模型在链接、搜索和长期保存上优势明显,但单独部署一个维基系统又过于繁琐。 最终,作者选择了核心组合:在本地使用 Vim 插件 Vimwiki 作为笔记编辑器,它能直接在终端创建和链接页面,体验与编写代码无异;同时,将笔记文件夹作为 Git 仓库,与私有 GitLab 的 Wiki 功能同步。这样一来,笔记就变成了可版本控制的普通 Markdown 文件,既能在 Vim 里快速编辑,也能通过 GitLab 在手机或网页端随时查看修改。 文章还分享了实用的配置细节,比如如何在 Vimrc 中设置两个独立的 Wiki 分别存放工作和私人笔记,以及如何用插件实现文件的自动提交与同步。对于日常沉浸于终端和 Git 工作流的开发者来说,这套方案让记录知识的过程与写代码一样无缝、自然。

本机暂存
IT 安全/ 2018-07-04 10:05:16 / 累计浏览 2,810

密码学及公钥基础设施入门

这篇文章从互联网安全成为标配(如Chrome对HTTP标记“不安全”)但多数人仅止于工具使用的现状切入,旨在为读者厘清密码学与公钥基础设施(PKI)背后的核心概念。它并非一篇操作指南,而是着重讲解构成安全通信的三大支柱:**保密性**(防窥探)、**完整性**(防篡改)与**身份认证**(防伪装),并通过Alice与Eve的经典故事生动阐释了每个特性为何不可或缺。 文章系统梳理了加密体系的脉络。它对比了**对称加密**(如AES、ChaCha20,同一密钥加解密,速度高效)与**非对称加密**(如RSA,公私钥配对,计算开销大但便于密钥分发)的原理、优劣及典型应用场景,例如后者常用于在TLS中安全交换对称密钥。文中还强调了**随机性(信息熵)** 对于生成安全密钥的基础性作用,甚至提到了利用熔岩灯墙收集随机性的趣闻。最后,文章引出了实现完整性与身份认证的关键工具——**密码散列函数**,并解释了其单向性、抗碰撞性等核心要求。 作者的目的是帮助开发者超越“货物崇拜”式的盲目使用,真正理解Let's Encrypt等现代安全方案赖以运作的数学与逻辑根基,从而建立更扎实的安全认知。

本机暂存
IT DevOps/ 2018-07-03 14:24:46 / 累计浏览 1,566

如何在 Linux 中的特定时间运行命令

这篇讲的是,在Linux系统里如何为一条命令设定执行时限,时间一到就自动让它“收工”。文章的出发点很实际:作者用 `rsync` 传输大文件时,既不想干等20分钟,又不想手动中断进程。他发现系统里其实有现成的工具能轻松实现“定时关闭”。 文章核心介绍了两种解决方案。最常用的是 `timeout` 命令,它属于GNU coreutils包,几乎开箱即用。用法很简单,例如 `timeout 10s tail -f /var/log/pacman.log` 就能让 `tail` 命令只运行10秒。它还支持分钟(m)、小时(h)、天(d)等单位,并且可以通过 `-k` 参数设定一个超时的“宽限期”。 另一种是 `timelimit` 程序,功能比 `timeout` 更丰富,可以分别设置警告信号、终止信号及其时间点,为进程提供更优雅的退出过程。它需要在Debian或Arch等发行版中额外安装。 这两个工具对于那些可能长时间运行、甚至可能冻结系统的命令来说非常实用,能有效防止资源被无限占用。文章通过一个日常运维场景,清晰地展示了两种工具的用法和差异。

本机暂存
IT DevOps/ 2018-07-03 14:22:53 / 累计浏览 1,241

Linux 文件系统详解

这篇讲的是Linux文件系统,作者从1996年的亲身经历切入:当时他学会了安装软件,却对/etc、/usr这些“神秘目录”的含义一头雾水。文章的目的就是帮助新手快速搞清楚这套结构。 不同于纯理论讲解,作者推荐了一个非常具体的起点:在终端安装并运行`tree`命令,尤其是`tree -L 1 /`,能立刻直观展示从根目录开始的、清晰的一级目录树。接着,文章对/bin(用户基本工具)、/boot(启动文件,警告别乱动)、/etc(系统配置)、/home(用户个人文件)等核心目录逐一拆解,解释了它们的用途和命名由来。 文中还穿插了不少实用细节,比如现代发行版中/bin和/usr/bin的趋同关系,/tmp是少数无需root权限即可操作的目录,以及/srv等特定服务数据的存放位置。作者的口吻带着老技术人的风趣,比如调侃自己对新工具“不以为然”,但整体非常务实,旨在帮读者快速建立对Linux文件系统的结构化认知,避免当初自己踩过的坑。

本机暂存
IT 设计/ 2018-07-03 14:20:49 / 累计浏览 2,042

用户调研之微软产品反应卡片

这篇讲的是微软在2002年推出的一种专门测量产品“合意性”的用户调研方法,叫做“产品反应卡片”。 它的核心操作非常直观:给用户一套包含118个情感词汇的卡片,比如“有吸引力的”、“令人挫败的”、“创新的”等等,让用户在体验产品或设计后,挑选出他们认为最能描述的词语,并解释选择的理由。这个方法跳出了单纯的功能可用性测试,直接捕捉用户对产品的情绪反应和整体感受。 从文章提供的完整词汇列表来看,这118张卡片覆盖了从积极到消极的广泛情感光谱,能帮助团队快速定位设计在用户心中引发的复杂情绪,而不仅仅是“好用”或“不好用”。它非常适合在产品原型或早期设计阶段使用,用来评估设计的方向是否与期望传递的品牌感或体验目标一致。

本机暂存
IT 算法/ 2018-06-28 12:09:18 / 累计浏览 3,337

聚类算法之ISODATA

聚类算法中的K-Means虽然经典,但需要预先设定簇数K且对初始中心敏感。这篇讲的是ISODATA算法,它作为一种迭代自组织数据分析方法,核心改进在于让聚类过程能够动态调整簇的数量。 文章指出,ISODATA在K-Means基础上引入了“合并”与“分裂”两个关键操作:当两个簇中心过于接近时进行合并,而当一个簇内部样本过于分散或数量过多时则尝试将其分裂。算法需要用户提供几个关键参数,如预期的初始簇数、允许的最小样本数、方差阈值等,这些参数共同划定了簇数量最终可能变化的范围(通常在初始设定值的半倍到两倍之间)。 作者也点明了ISODATA的一个现实困境:虽然原理直观地解决了“K值设定”难题,但由于需要调整的参数较多,且部分阈值难以准确指定,这使得它在实际应用中反而不如更简单的K-Means受欢迎。文章通过对比K-Means,清晰阐述了ISODATA的机制与适用边界。

本机暂存
IT DevOps/ 2018-06-28 12:04:43 / 累计浏览 1,763

Linux 中一种友好的 find 替代工具

这篇讲的是一个叫 `fd` 的 Linux 文件搜索工具,它是传统 `find` 命令的现代化替代。作者从日常使用 `find` 的痛点出发——语法复杂、输出单一——介绍了这个基于 Rust 编写的工具如何用更简洁的语法和智能设计来覆盖 80% 的搜索场景。 文章具体展示了 `fd` 几个关键的提升:默认就支持彩色输出和智能大小写匹配,搜索语法直观很多(比如直接 `fd services` 就能递归搜索)。它通过 `-t` 参数区分文件和目录,用 `-H` 包含隐藏文件,还能轻松指定搜索路径或进行全局搜索。这些对比让 `find` 用户能迅速感受到差异。 文章核心是“对比与上手”,通过大量命令行示例,清晰呈现了 `fd` 如何在保持足够功能的前提下,极大简化了文件查找工作。对于经常在终端操作的开发者,这是一个能直接提升效率的工具。

本机暂存
IT DevOps/ 2018-06-26 12:38:17 / 累计浏览 2,191

我正在运行的 Linux 是什么版本?

“我正在运行的 Linux 是什么版本?”——这个问题看似简单,却常常指向两个不同的答案:你究竟想知道内核的版本,还是整个操作系统的发行版?对于需要排查驱动问题或确定软件包管理方式的用户来说,这两者都至关重要。 这篇文章没有空谈概念,而是直接给出了实操路径。要找出内核版本,作者推荐了最简洁的命令 `uname -srm`,一行输出即可包含内核名称、版本号和硬件架构。对于发行版信息,检查 `/etc/os-release` 文件是最通用的方法。文章以 Fedora 为例,展示了该文件不仅包含名称与版本号(如 "Fedora 28"),还透露了更丰富的上下文,比如变体(Workstation Edition)。 更巧妙的一点是,作者指出了 `os-release` 文件中 `ID_LIKE` 字段的实际价值。比如 CentOS 的这个字段明确写着它像 RHEL,这为用户在寻找解决方案时提供了关键线索——你可以放心地参考 RHEL 的文档来处理 CentOS 上的问题。这对于在庞大 Linux 生态中导航的用户来说,是一个非常实用的技巧。

本机暂存
IT 算法/ 2018-06-26 12:36:07 / 累计浏览 2,823

K-Means算法之K值的选择

这篇讲的是K-Means聚类中一个经典又棘手的问题:当数据维度高、无法肉眼观察时,该如何确定聚类数K? 作者从最简单的“拍脑袋法”开始,比如用样本量估算,快速过渡到更可靠的方法。重点介绍了两种实用技术:一是直观的“肘部法则”,通过绘制K值与误差平方和的关系曲线,寻找拐点来确定最佳K值;但作者也指出,当拐点不明显时,这个方法就失效了。因此,文章引入了斯坦福大学提出的“间隔统计量”方法,它通过蒙特卡洛采样构建参考分布,进行更严谨的统计推断来选择K值。 文章不仅清晰解释了原理和公式,还直接附上了两种方法的Python实现代码。整体来看,它把从经验法则到统计方法的演进路径讲得很清楚,并且提供了实操性强的工具,帮助你在面对不同数据时,做出更合理的选择。

本机暂存
IT DevOps/ 2018-06-26 12:31:48 / 累计浏览 1,763

在 Linux 上复制和重命名文件

这篇讲的是 Linux 命令行里文件操作的进阶玩法。它跳出了大家最熟悉的 cp 和 mv,介绍了几个能显著提升效率的工具。 作者从基础的 cp/mv 命令切入,指出它们在处理批量文件时的局限性。接着展示了更高效的替代方案:用 tar 命令快速创建整个目录或符合模式的文件归档;用 for 循环脚本批量为文件添加备份后缀;以及利用 Shell 的花括号扩展,用一条 cp 命令完成长文件名的备份。 文章的核心亮点在重命名部分,详细演示了 rename 命令的威力。它通过灵活的 Perl 正则表达式,可以一次性完成批量操作,例如将所有大写字母转为小写、统一移除或添加文件扩展名,甚至替换文件名中的特定字符串。通过对比 mv 的单个操作与 rename 的批量处理,突显了后者在特定场景下的不可替代性。 总的来说,这篇文章不是泛泛而谈,而是通过具体、可立即上手的命令示例,展示了几种被低估的文件管理技巧。掌握这些方法,能让你在日常维护中处理大量文件时事半功倍。

本机暂存
IT AI/ 2018-06-26 12:30:23 / 累计浏览 2,900

聚类算法之Mean Shift

这篇讲的是Mean Shift聚类算法。它从大家熟悉的K-Means算法出发,指出了其需要预先设定聚类个数k的局限,从而引出Mean Shift的核心优势:不需要预设类别数量,能自动发现数据的簇结构。 文章梳理了算法的发展脉络,从Fukunage提出概念,到Yizong Cheng引入核函数与权重系数进行关键改进,使得算法能根据样本距离赋予不同权重,更加精确。接着,文章列举了Mean Shift在多个领域的成功应用,包括图像平滑、分割、目标跟踪等计算机视觉任务,以及常规的用户聚类等场景。 其理论部分清晰地解释了Mean Shift向量的含义——即邻域内所有点相对于中心点的偏移均值,并通过迭代移动直至收敛来找到密度峰值。文章进一步阐述了核函数如何度量不同样本的贡献,使得算法原理更加完善。整体上,文章将Mean Shift定位为一种基于密度估计、迭代寻优的实用聚类工具,尤其适用于类别未知的复杂数据分析。

本机暂存