当前位置: 首页 > article >正文

Changelogger:实时更新日志聚合器的架构设计与工程实践

1. 项目概述与核心价值在技术迭代日新月异的今天尤其是AI工具和开发者软件领域几乎每天都有新的功能发布、API更新或产品迭代。作为一名长期泡在代码和产品里的从业者我深有体会错过一个关键更新可能意味着浪费数小时去排查一个已被修复的Bug或者错失一个能极大提升效率的新特性。过去我不得不订阅几十个不同产品的博客RSS、关注它们的Twitter账号甚至定期手动去翻看它们的更新日志页面信息碎片化且效率极低。直到我开始动手构建并持续运营Changelogger这个项目才真正找到了一个集中、实时追踪软件更新的优雅解决方案。Changelogger 本质上是一个实时更新日志聚合器。它的目标非常明确为开发者、产品经理以及所有科技爱好者提供一个统一的仪表板用来实时监控上百款主流AI工具、开发软件及SaaS产品的官方更新动态。无论是ChatGPT推出了新的上下文窗口Cursor IDE增加了某项代码重构能力还是Vercel部署流程有了优化你都可以在一个干净、无干扰的界面中第一时间获悉。这个项目不是为了替代官方文档而是作为一个高效的“信息雷达”帮你过滤噪音直达核心的“Whats New”。对于正在寻找类似工具的开发者或者有意自己搭建一套信息监控系统的技术负责人本文将深入拆解Changelogger从设计思路、技术选型到具体实现的全过程。我会分享我们如何解决多源数据抓取的稳定性问题如何设计一个既直观又高效的前端展示层以及在运营过程中积累的关于数据更新、工具筛选的实战经验。无论你是想直接使用这个现成的服务还是希望借鉴其架构来构建自己的垂直领域监控系统相信都能从中获得启发。2. 核心设计思路与架构选型2.1 需求拆解与核心挑战在动手写第一行代码之前我们花了大量时间明确核心需求和潜在的技术挑战。一个理想的更新追踪器必须满足以下几点全面性覆盖的工具要足够多且类别清晰AI助手、开发工具、SaaS等。及时性更新信息必须尽可能接近实时延迟不能超过几小时。准确性信息必须源自官方渠道避免二手转述带来的误差或遗漏。可读性信息呈现要清晰支持按工具、类别、时间筛选快速定位关键内容。可维护性随着追踪工具数量的增长从几十到上百数据抓取和解析的架构必须易于扩展和维护。最大的挑战来自于数据的异构性。不同公司发布更新的方式千差万别有的有结构良好的专属Changelog页面如GitHub、Vercel有的通过博客文章发布有的则混杂在官方文档的更新记录里甚至有些只在Twitter上简单宣布。这就要求我们的数据抓取层必须具备高度的灵活性和容错性。2.2 技术栈选型背后的思考在技术选型上我们遵循了“敏捷开发、快速迭代、稳定运维”的原则。前端框架与部署平台Lovable.dev这是项目初期一个关键且高效的选择。我们使用了Lovable.dev作为全栈开发平台。对于这样一个以信息展示和交互为核心的项目传统的分离式前后端开发会引入额外的联调、部署复杂度。Lovable.dev 允许我们使用类似Next.js的React框架进行开发并直接在其平台上进行无缝部署和托管极大地缩短了从开发到上线的路径。其内置的数据库、认证等功能也为未来添加用户个性化订阅如邮件通知预留了简单的接口。样式方案Tailwind CSS为了快速构建一个干净、响应式的仪表板界面我们选择了Tailwind CSS。它的实用性优先Utility-First理念让我们在开发组件时无需在样式文件和组件文件间反复切换通过组合工具类就能实现复杂的响应式设计。这对于需要频繁调整布局和样式的早期产品来说开发效率提升是巨大的。数据抓取与更新策略这是系统的核心。我们采用了“自动化抓取为主人工审核为辅”的混合策略。自动化层针对有结构化API如GitHub Releases API或固定格式RSS/Atom源的平台我们编写了专用的抓取器Fetcher。这些抓取器以Serverless Function的形式运行按预定频率如每30分钟触发获取原始数据。解析层获取的原始数据可能是JSON、XML或HTML需要被解析成统一的内部格式。我们为每种数据源编写了特定的解析器Parser提取标题、发布时间、更新内容摘要、原文链接等关键字段。这里用了大量的正则表达式和HTML解析库如cheerio。人工审核层对于无法通过自动化可靠获取的源或者自动化解析失败的情况我们建立了简单的人工提交和审核流程。社区可以通过GitHub Issue提交更新经核心维护者验证后入库。这保证了信息的覆盖面和准确性。注意在构建抓取器时务必遵守网站的robots.txt协议并设置合理的请求间隔如每秒1-2次避免对目标服务器造成压力这是基本的网络礼仪和合规要求。3. 系统核心模块实现详解3.1 数据管道抓取、解析与存储数据管道的健壮性直接决定了产品的可靠性。我们设计了一个三层流水线。第一层调度与抓取我们使用了一个基于时间触发的调度器例如使用云平台的定时任务Cron Job。这个调度器负责按不同的频率调用对应的抓取器函数。例如对更新频繁的AI工具如ChatGPT可能每1小时抓取一次而对更新节奏较慢的基础设施软件可能每天抓取一次。每个抓取器都是一个独立的函数其核心职责是向目标URL发起HTTP请求。处理可能的反爬机制如简单的请求头设置User-Agent伪装成普通浏览器。捕获并处理网络异常和状态码错误如404, 429 Too Many Requests。将获取到的原始数据文本、HTML、JSON传递给下一层。// 一个简化的抓取器函数示例Node.js环境 async function fetchGitHubReleases(repoOwner, repoName) { const url https://api.github.com/repos/${repoOwner}/${repoName}/releases; const headers { User-Agent: Changelogger-Bot/1.0, Accept: application/vnd.github.v3json }; try { const response await fetch(url, { headers }); if (!response.ok) { throw new Error(GitHub API responded with status: ${response.status}); } const releases await response.json(); return releases; // 返回原始JSON数据 } catch (error) { console.error(Failed to fetch releases for ${repoOwner}/${repoName}:, error); // 此处应记录错误日志并可能触发告警 return null; } }第二层解析与标准化这是最复杂的一层因为要处理各种不同的数据格式。我们定义了一个统一的数据模型Schema所有解析器的目标都是将原始数据转化为这个模型。// 统一的数据模型 const unifiedUpdateSchema { id: String, // 唯一标识通常由 工具名时间戳 生成 toolName: String, // 工具名称如 “Cursor IDE” toolCategory: String, // 分类如 “Developer Tools” title: String, // 更新标题如 “v0.35: AI Refactor Commands” content: String, // 更新内容摘要纯文本或简单Markdown publishDate: Date, // 官方发布时间 sourceUrl: String, // 原文链接 fetchedAt: Date, // 我们抓取的时间 tags: [String] // 标签如 [‘feature’, ‘bug-fix’, ‘api-change’] };例如对于GitHub Releases的JSON解析器会遍历releases数组将每个release的name、body、published_at等字段映射到上述模型。对于一篇博客文章解析器则需要用cheerio库定位文章标题和正文区域提取文本并做适当的清理去除无关的导航、广告等。第三层存储与去重解析后的标准化数据被送入数据库。我们使用了一个关系型数据库在Lovable.dev平台内表结构基本与上述模型对应。这里的关键是去重逻辑。我们不能因为抓取器多次运行就存入重复的更新记录。我们采用的去重策略是复合唯一键(toolName, sourceUrl)或者(toolName, title, publishDate)。在插入数据前会先查询是否存在满足这些条件的记录。只有全新的记录才会被插入。这有效避免了数据冗余。3.2 前端仪表板构建高效的信息流界面前端的目标是将数据库中的更新记录以清晰、可操作的方式呈现给用户。核心组件设计主信息流一个按publishDate倒序排列的无限滚动列表。每个条目都是一个卡片清晰展示工具图标、名称、更新标题、时间、内容摘要和“阅读原文”链接。过滤与筛选侧边栏按工具筛选提供一个搜索和下拉选择框让用户快速聚焦于特定工具。按类别筛选将工具分为“AI助手”、“开发工具”、“SaaS产品”等大类点击即可只看该类别更新。按时间范围筛选如“今天”、“本周”、“本月”。按标签筛选未来计划如只显示“新功能”或“重大变更”类的更新。搜索框全局搜索可检索更新标题和内容中的关键词。状态管理与数据获取我们使用了React的Context或类似的状态管理库来管理全局的过滤条件。当用户选择了一个过滤器前端会向后台API发送新的查询请求例如GET /api/updates?toolCursorcategoryDevTools。后台API根据查询条件构建数据库查询语句返回匹配的结果。性能优化点分页与虚拟滚动更新数据可能非常多我们实现了后端分页如每次返回20条前端结合虚拟滚动技术确保即使有成千上万条记录页面渲染依然流畅。图片懒加载工具图标等图片资源使用懒加载减少初始页面负载。缓存策略对于不常变化的筛选器数据如工具列表、类别列表在前端进行适当的缓存减少不必要的API调用。4. 实战中的问题排查与优化经验在开发和运营Changelogger的过程中我们遇到了不少典型问题以下是其中一些及其解决方案的实录。4.1 数据抓取失败与稳定性保障问题抓取器经常因为网络波动、目标网站改版、临时封禁IP等原因失败。排查与解决完善的错误处理与日志每个抓取器都必须有try-catch包裹所有错误包括网络错误、解析错误、数据格式错误都需要被捕获并记录到日志系统包含错误上下文如目标URL、时间戳。我们最初忽略了这点导致一些源静默失败了好几天都没被发现。重试机制对于网络请求失败如超时、5xx错误实现简单的指数退避重试策略。例如第一次失败后等待2秒重试第二次失败后等待4秒最多重试3次。监控与告警建立关键抓取任务的监控。如果某个源连续失败超过一定次数如5次或者超过预期时间没有产生新数据系统会自动发送告警通知集成到Slack或邮件给维护者。User-Agent与速率限制始终设置一个友好的、可识别的User-Agent如包含项目联系邮箱。严格遵守目标网站的robots.txt并将请求频率控制在极低的水平。这是长期稳定运行的基础。4.2 解析器因网站改版而“断裂”问题这是内容抓取项目最常见的问题。某个工具的官网改版导致之前写的HTML解析器依赖特定的CSS选择器路径完全失效解析不出任何内容。排查与解决防御性编码解析时不能假设DOM结构永远不变。代码中要增加多处断言Assertion例如在尝试提取标题文本前先检查选择器对应的元素是否存在。如果不存在则记录一个“结构不匹配”的警告并转入降级处理或标记该源为“需人工检查”。降级策略当无法精准解析时尝试更通用的提取方法。例如如果找不到特定的.changelog-entry类可以尝试获取整个文章主体区域的文本虽然噪音会大但至少不会丢失信息。定期巡检建立自动化测试套件定期如每天用一组固定的历史页面快照测试所有解析器。如果某个解析器对已知快照的解析结果发生变化很可能意味着逻辑有问题需要检查。人工备份通道正如项目设计中所说始终保持人工提交通道的畅通。当自动化解析持续失败时可以暂时切换到人工维护模式同时着手修复解析器。4.3 信息过载与用户个性化需求问题随着追踪工具超过100个信息流更新非常快用户可能被不感兴趣的工具更新刷屏。解决方案与未来规划强大的筛选器这是当前已实现的核心解决方案。让用户能快速缩小关注范围。“收藏”或“关注”功能这是路线图中的“自定义工具建议”和“邮件通知”的基础。允许用户关注特定的工具列表在仪表板上可以有一个“我的关注”专属视图。智能摘要AI-Powered Summaries对于很长的更新日志如包含多项修改的Linux内核发布说明未来可以利用大语言模型API生成一段简短的核心摘要帮助用户快速把握重点。这需要谨慎处理因为涉及调用外部API的成本和延迟。标签系统为每项更新打上更细粒度的标签如breaking-change破坏性变更、security安全更新、performance性能改进。用户可以过滤出自己最关心的更新类型。4.4 常见问题速查表问题现象可能原因排查步骤与解决方案仪表板上某个工具长时间无更新1. 抓取器故障2. 解析器失效3. 该工具近期确实无发布1. 检查该抓取任务的错误日志。2. 手动访问该工具的更新源URL确认结构是否变化。3. 查看工具官方社交媒体确认发布状态。页面加载缓慢或卡顿1. 单次返回数据量过大2. 前端渲染大量DOM节点3. 网络问题1. 确认后端API是否实施了分页如limit20。2. 检查前端是否对长列表使用了虚拟滚动。3. 对数据库查询进行性能分析添加必要索引。筛选器点击后无反应或结果错误1. 前端状态未更新2. API接口参数错误3. 后端查询逻辑有误1. 打开浏览器开发者工具查看网络请求是否发出及参数是否正确。2. 查看API请求的响应状态码和返回数据。3. 检查后端处理筛选条件的代码逻辑。移动端视图布局错乱CSS响应式设计存在漏洞使用浏览器开发者工具的移动设备模拟模式针对出错的屏幕尺寸范围调整Tailwind CSS的断点或样式。5. 扩展思路与项目演进Changelogger目前是一个功能聚合型产品但其底层架构可以延伸出更多有价值的应用场景。对内作为团队内部工具许多科技公司内部也有大量自研的工具、平台和微服务。可以基于Changelogger的架构搭建一个内部更新公告板。每个团队在发布新版本时通过一个简单的表单或API提交更新摘要。这样全公司的人都能在一个地方看到所有系统的变更情况对于跨团队协作、故障排查判断是否由近期变更引起非常有价值。这比在群聊里刷屏或者写一封容易被忽略的邮件要高效得多。对外提供专业化API服务目前路线图中已有API计划。一旦开放API开发者就可以将特定工具的更新流集成到自己的仪表盘、监控系统甚至聊天机器人中。例如一个开源项目维护者可以订阅其主要依赖库的更新及时知晓是否有破坏性变更需要应对。数据挖掘与趋势分析积累了大量更新数据后可以进行有趣的宏观分析。例如统计哪个类别的工具更新最频繁哪些月份是发布高峰期“AI”相关的更新在内容中出现的频率增长趋势如何这些分析报告本身对产品战略和市场研究就有参考价值。关于自部署项目目前优先保障SaaS服务changelogger.live的稳定运行。开源自部署版本需要将我们依赖的云平台特定服务如数据库、定时任务、部署流程进行抽象和替换这是一个系统工程。对于急切需要自部署的用户一个折中的建议是可以重点参考我们的数据抓取解析模块这部分相对独立和前端UI组件结合自己熟悉的后端框架如Express.js, Django和数据库重新实现核心流水线这比完全从零开始要省力得多。在运营这个项目的过程中我最大的体会是解决一个看似简单的信息聚合问题背后需要一套严谨的数据管道设计、容错机制和持续的维护投入。技术上的挑战往往不是最难的如何持续地保证数据的质量和时效性如何平衡自动化的效率与人工审核的准确性才是更考验人的地方。如果你也在构建类似的信息处理系统我的建议是从一开始就为“错误”和“变化”做好设计建立完善的日志、监控和告警这将为你节省大量后期排查的时间。最后保持与用户的沟通他们对于新工具的建议和反馈是让这类产品保持活力的关键源泉。

相关文章:

Changelogger:实时更新日志聚合器的架构设计与工程实践

1. 项目概述与核心价值在技术迭代日新月异的今天,尤其是AI工具和开发者软件领域,几乎每天都有新的功能发布、API更新或产品迭代。作为一名长期泡在代码和产品里的从业者,我深有体会:错过一个关键更新,可能意味着浪费数…...

新能源上市公司361个指标数据2000-2021年

01、数据简介新能源汽车是指采用非常规的燃料如石油等作为动力来源,或者采用新型动力装置,采用先进的技术原理,具有新技术新结构的汽车,根据《新能源汽车产业发展规划(2021—2035年)》,我国将深…...

各地级市数字经济政策文本词频统计2002-2022年

01、数据介绍全国各地级市大力发展电子信息制造业,加快数字经济产业基础建设,建设数字经济创新生态,推动数字化转型和商业模式创新,布局数字经济未来产业,加快发展智能制造、数字化营销等数字经济新业态模式&#xff0…...

专利转让数据库1985-2021年

01、数据简介专利所有权转让是指专利获得国家知识产权局授权,获得专利的所有权,专利权人将其拥有的专利权转让给个人以及企业等法律行为。转让行为在国务院专利行政部门进行登记,签订书面合同。通过转让合同取得专利申请权或专利权的合同当事…...

全国排污许可证详细信息数据库2023年

01、数据简介排污许可证是允许排污单位排放一定数量污染物的凭证。它是由环境保护行政主管部门在排污单位提出申请后,经审查合格后发放的。排污许可证制度是环境管理的重要手段,可以强制对企业污染物排放控制和管理,对研究污染控制和环境治理…...

sfsEdgeStore 使用golang 是否有竞争力

sfsEdgeStore 使用 Golang 不仅具有极强的竞争力,而且是其在工业物联网边缘侧生存的“杀手锏”。结合刚才我们讨论的“Java 在国内业务层的统治地位”以及搜索到的资料,sfsEdgeStore 选择 Go 语言是典型的**“在正确的场景使用了正确的工具”**。以下是 …...

自洽性与Agent的结合

让智能体学会“自我验证”,提升决策可靠性。随着大语言模型(LLM)从单纯的“对话接口”演进为“行动中枢”,AI Agent(智能体)正逐步突破“被动响应”的局限,向“自主决策、主动执行”的高阶形态演…...

AI日报:24小时全球科技热点速览

每日AI新闻推送:近24小时全球科技热点深度报告 日期:2026年4月24日 摘要:过去24小时内,AI领域迎来密集爆发。具身智能从“炫技”转向“实干”,数据成为核心瓶颈与竞争高地;特斯拉Optimus V3定档年中亮相&a…...

基于PraisonAI的多智能体编排框架:从YAML配置到生产部署全解析

1. 项目概述:当AI遇上AI,一个能指挥大模型的“指挥官”最近在折腾AI应用开发的朋友,可能都遇到过这样的困境:手头有好几个强大的模型,比如OpenAI的GPT-4、Anthropic的Claude,还有开源的Llama 3,…...

设计Section 12:Related PCB Assembly Services

这个区块只做 Related Services 内链卡片。不做:FAQ Schema FAQ 区 Ninja Tables Fluent Forms Custom HTML Gutenberg Spacer Gutenberg Separator Phase 2 占位内容一、使用组件结构Gutenberg Group └── Gutenberg Group├── Gutenberg Group:橙色…...

定义类的方法和CRC建模

在面向对象分析与设计(OOAD)中,定义类的方法 和 CRC 建模 是衔接“需求分析”与“详细设计”的关键技术。前者关注如何为类分配职责(行为),后者提供了一种轻量、协作式的建模方法来验证类的职责与协作关系。 一、定义类的方法 1.1 什么是类的方法? 类的方法(Method)…...

量子机器学习:原理、算法与工程实践

1. 量子机器学习:当传统算力遇到物理极限 三年前我在处理一个蛋白质折叠预测项目时,第一次真切感受到经典计算机的算力瓶颈。当模型参数超过1亿,即使使用最先进的GPU集群,训练周期仍然长达两周。正是那次经历让我开始关注量子计算…...

【风暴之城】游玩日记 新手攻略(3)

游玩记录 开局 被封印的皇家森林要精准伐木,用shift单选树木 蓝图 木工直接拿下先开一片小地看看封印方向蓝图基石 按照“老头环的小迷妹”的攻略来看,农民的补给是t!,其他两个是T3指令 1吧这个地图应该会比较缺木头而且可以立即完…...

NVSentinel:Kubernetes AI集群的智能健康管理方案

1. 项目概述:NVSentinel 如何为 Kubernetes AI 集群提供智能健康管理在当今AI驱动的生产环境中,Kubernetes已成为GPU工作负载的事实标准平台。然而,管理这些集群中的GPU节点绝非易事——从确保训练任务持续进展到维持服务流量稳定&#xff0c…...

Unity最强捏脸系统来了!Character Customizer:基于BlendShape与骨骼驱动的角色定制系统设计

在当今游戏开发中,“角色个性化”几乎已经成为标配功能。从《GTA》《模拟人生》到各类 MMO、开放世界游戏,玩家都希望打造独一无二的角色形象。而在 Unity 中,如果从零实现一套高扩展性的角色定制系统,成本其实非常高。 今天我们要…...

GITEE通过API下载发新版的附件

首先需要创建私人令牌,然后进行下面的步骤:1. 获取仓库的最后更新的Release->拿到Release ID https://gitee.com/api/v5/repos/{owner}/{repo}/releases/latest2. 获取仓库下的指定 Release 的所有附件 -> 拿到附件ID https://gitee.com/api/v5/re…...

AI率检测工具到底有何不同?10款主流aigc检测工具横评告诉你ai查重的真相!

2026年答辩季临近,AIGC检测已经成为大多数高校论文审核的标配流程。不管你有没有用过A论文,学校都可能会查一遍AI率。很多同学的第一反应就是:ai率查重要多少钱?有没有能免费查AI率的工具? 有免费的aigc检测工具&…...

想免费查AI率?有4个网站可以免费aigc检测,附详细操作步骤!

2026年答辩季临近,AIGC检测已经成为大多数高校论文审核的标配流程。不管你有没有用过A论文,学校都可能会查一遍AI率。很多同学的第一反应就是:ai率查重要多少钱?有没有能免费查AI率的工具? 有免费的aigc检测工具&…...

Arm Neoverse V1 PMU架构与性能监控实战

1. Neoverse V1 PMU架构深度解析1.1 PMUv3p4架构特性Arm Neoverse V1采用的PMUv3p4是Armv8.4-A架构中的性能监控扩展实现。这个版本在基础PMU功能上引入了多项增强特性:扩展事件空间:通过新增的PMMIR_EL1寄存器提供更多微架构事件编码空间,支…...

Obsidian Smart Connections实战指南:高效连接笔记与AI的智能神器

Obsidian Smart Connections实战指南:高效连接笔记与AI的智能神器 【免费下载链接】obsidian-smart-connections Chat with your notes & see links to related content with AI embeddings. Use local models or 100 via APIs like Claude, Gemini, ChatGPT &a…...

基于LangGraph的多智能体AI内容生成系统XunLong实战指南

1. 项目概述:一个基于多智能体协作的AI内容生成系统最近在折腾一个挺有意思的开源项目,叫XunLong。简单来说,这是一个利用大语言模型(LLM)驱动的多模态内容生成系统。你可以把它理解为一个“AI内容工厂”,你…...

为Open WebUI构建安全代码执行沙箱:基于gVisor的本地LLM增强方案

1. 项目概述:为Open WebUI构建安全的代码执行沙箱如果你正在本地部署大语言模型,比如用Ollama跑Llama 3或者Qwen,并且通过Open WebUI这个漂亮的Web界面来交互,那你可能遇到过这样的场景:你问模型“帮我写个Python脚本来…...

LLMStack:低代码平台如何简化大模型应用开发与RAG系统构建

1. 项目概述:当低代码遇上大模型,LLMStack如何重塑应用开发最近在折腾AI应用落地的朋友,估计都听过或者用过LangChain、LlamaIndex这类框架。它们确实强大,但上手门槛不低,你得懂点编程,对AI模型的工作流也…...

R语言机器学习实战:10大内置数据集应用指南

1. R语言机器学习数据集实战指南在数据科学领域,R语言一直保持着不可替代的地位。作为一名长期使用R进行预测建模的数据分析师,我深刻体会到优质数据集对模型效果的决定性影响。很多初学者常陷入"巧妇难为无米之炊"的困境——掌握了各种算法却…...

机器学习分类算法实战:5大核心方法详解

1. 分类算法入门指南:5种核心方法解析刚接触机器学习时,分类算法总是最让人困惑的部分。作为从业十年的数据科学家,我见过太多新手在算法选择上浪费大量时间。今天我们就用最接地气的方式,拆解5种最实用的分类算法,每种…...

移动端UI自动化测试新范式:AUITestAgent白盒代理实战解析

1. 项目概述:一个面向移动端UI自动化的“智能测试代理”最近在梳理团队内部的移动端自动化测试框架时,又想起了之前深度使用过的一个开源项目——AUITestAgent。这个项目在GitHub上由bz-lab组织维护,名字直译过来就是“AUI测试代理”。乍一看…...

海投60份简历,0面试,我是不是真的很差?

凌晨 1 点,又把招聘软件刷了一遍。 看着“已读不回”的 4 个对话框,和“已送达”的另外 30 多个未读消息,突然觉得好无力。 双非本科,没有大厂实习,简历那点校园经历从大一写到现在,改来改去还是那几行字。…...

Save Image as Type终极指南:如何在Chrome中一键转换图片格式

Save Image as Type终极指南:如何在Chrome中一键转换图片格式 【免费下载链接】Save-Image-as-Type Save Image as Type is an chrome extension which add Save as PNG / JPG / WebP to the context menu of image. 项目地址: https://gitcode.com/gh_mirrors/sa…...

「一文搞懂 Material Design:Toolbar 到 CollapsingToolbar 全攻略」

「一文搞懂 Material Design:Toolbar 到 CollapsingToolbar 全攻略」 前言 Material Design 是 Google 推出的设计语言,提供了一套统一的 UI 组件和规范。本教程涵盖 Android 中最常用的 Material Design 组件。 ┌──────────────────…...

NLP文本表示方法对比:词袋、TF-IDF与LLM嵌入

1. 文本表示方法概述:从词袋到语言模型嵌入在自然语言处理(NLP)任务中,将文本转换为机器可理解的数值形式是构建有效模型的第一步。scikit-learn作为Python中最流行的机器学习库之一,支持多种文本表示方法。本文将深入…...