基于Astro与Tailwind CSS构建家庭协作餐食规划系统

news2026/5/4 0:52:10
1. 项目概述一个为家庭协作烹饪而生的智能周度餐食规划系统如果你和我一样家里有5口人每天下班后还要面对“今晚吃什么”的灵魂拷问以及随之而来的混乱采购和厨房分工问题那你一定能理解一个高效、清晰的餐食规划系统有多重要。我尝试过各种App和纸质表格但它们要么太死板要么无法适应我们家独特的“分阶段协作”烹饪流程——通常是有人提前准备有人负责收尾。于是我决定自己动手用现代Web技术栈打造一个完全贴合我们家庭工作流的周度餐食规划系统也就是这个“Food of the Week”项目。这不仅仅是一个简单的食谱列表。它是一个完整的解决方案从每周的头脑风暴、食谱结构化编写到自动生成一个美观、可打印、带有交互式购物清单的网站再到厨房里分阶段执行的烹饪指引。它的核心是将混乱的餐食规划流程化、自动化让家庭烹饪从一项令人头疼的任务变成一项可以高效协作、甚至享受乐趣的日常活动。系统特别为“提前备餐”尤其是真空低温烹饪和“家庭分工”这两个场景做了深度优化通过清晰的“快速预览”和“三阶段指令”让每个家庭成员都知道自己该在什么时候做什么。整个系统基于Astro构建生成静态网站部署在GitHub Pages上完全免费且加载飞快。无论你是热爱烹饪的极客还是只想让家庭晚餐变得更有序的家长这个项目的设计思路和实现细节或许都能给你带来启发。2. 核心设计理念与工作流拆解2.1 为何选择“周度规划”与“分阶段协作”传统的餐食规划工具大多是为单人烹饪设计的它们假设一个人会完成从备菜到上桌的所有步骤。但在多人口家庭尤其是双职工家庭中这往往不现实。我们的核心需求是异步协作一个人通常是“副厨”Sous Chef可以在下午或傍晚早些时候开始准备工作而另一个人“主厨”Chef则在稍晚时候加入完成最后的烹饪和摆盘。基于此我设计了三个明确的阶段Already Prepped (已备好)指那些已经提前完成只需加热或简单组合的食材比如真空低温烹饪好并分装的肉类、预煮的蔬菜。Sous Chef (副厨)这是协作的关键。副厨在主厨回家前需要完成的准备工作清单包括切配、启动真空低温烹饪机、煮饭等。Chef Finishing (主厨收尾)主厨到家后负责需要较高烹饪技巧或即时操作的部分如煎制、调味、酱汁收浓、摆盘等。这种划分明确了责任边界避免了厨房里的指令混乱。系统通过颜色区分这三个阶段让任何人在查看食谱时都能一目了然。2.2 技术选型为何是 Astro Tailwind CSS在技术栈上我追求的是极致的性能、简单的部署和高度的可定制性。Astro这是项目的基石。Astro 的“岛屿架构”让我可以只在真正需要交互的地方比如购物清单的复选框加载JavaScript其余部分都是纯静态HTML这保证了页面的加载速度极快。对于餐食规划这种以内容阅读为主的场景首屏性能至关重要。同时Astro 支持使用.astro、.md、React/Vue 等多种组件灵活性很高我用它来解析 Markdown 食谱并渲染成漂亮的页面结构非常顺手。Tailwind CSS样式系统的核心。餐食规划网站需要清晰的信息层级和愉悦的视觉体验。Tailwind 的效用优先Utility-First理念让我能快速构建响应式界面并且通过一个集中的配置文件tailwind.config.mjs管理所有设计令牌颜色、间距、字体等。这对于实现后面会讲到的灵活的色彩系统至关重要。TypeScript用于编写解析器weekParser.ts和工具函数。食谱的 Markdown 结构需要被精确解析以提取“快速预览”等信息TypeScript 的静态类型检查能极大减少运行时错误让代码更健壮。GitHub Pages Actions实现自动化部署。每次我将规划好的周度食谱 Markdown 文件推送到 GitHub 仓库GitHub Actions 会自动触发构建npm run build并将生成的静态文件部署到 GitHub Pages。整个过程在2-3分钟内完成完全无需手动干预。这个技术组合在开发体验和最终产出之间取得了完美平衡开发时高效灵活产出的网站则快速、稳定且易于维护。2.3 项目结构与数据流内容如何变成网站理解项目结构是自定义它的前提。整个系统的数据流非常清晰用户编辑 Markdown (FOOD-OF-THE-WEEK.md) ↓ Astro 页面 (src/pages/index.astro) 加载该文件 ↓ 调用自定义解析器 (src/utils/weekParser.ts) ↓ 解析出1. 餐食列表 2. 快速预览数据 3. 购物清单 ↓ 将数据传递给 Astro 组件 (MealCard.astro, GroceryList.astro) ↓ 组件结合 Tailwind 样式和色彩配置进行渲染 ↓ 生成最终静态 HTML/CSS/JS ↓ 通过 GitHub Actions 部署到 GitHub Pages关键目录说明FOOD-OF-THE-WEEK.md这是唯一的真相之源。你每周只需编辑这个Markdown文件。所有内容——餐食名称、食材、三阶段指令——都写在这里。src/utils/weekParser.ts这是项目的“大脑”。它采用基于位置的解析策略而非依赖特定关键词。这意味着无论你的Markdown里写的是“### Ingredients”还是“### 材料”只要它出现在预期的标题层级和相对位置解析器就能正确抓取信息。这种设计使得食谱格式非常自由。src/components/MealCard.astro负责渲染单个餐食的所有信息包括解析出的三阶段指令并应用循环的色彩方案。public/print-config.json一个独立的配置文件用于控制打印页面的样式边距、字体等实现样式与功能的解耦。实操心得将内容与配置分离将核心内容食谱放在 Markdown 中将样式配置放在tailwind.config.mjs和print-config.json中这是一个非常关键的设计。它允许完全不懂代码的家人也能通过编辑简单的文本文件来更新每周食谱而我作为开发者可以独立调整网站的外观和打印格式两者互不干扰。3. 核心功能深度解析与实操要点3.1 “快速预览”系统餐食规划的“仪表盘”这是整个系统提升效率的灵魂功能。它的目标是在一秒钟内告诉副厨“这顿饭需要我投入多少精力关键的时间节点是什么”实现机制在FOOD-OF-THE-WEEK.md中每个餐食标题##下方紧接着使用#####(H5) 和######(H6) 来定义快速预览。H5行是“代号”概括工作类型和强度如SousVidePrep。H6行是“时间详情”列出具体行动和关键时间点如prep toast panko 5:30 rice。weekParser.ts会精确识别这种结构提取信息并在网站首页顶部生成一个可点击的“英雄摘要”栏同时也在每个餐食卡片上展示。代号详解与使用策略代号含义从副厨视角适用场景实操建议PrepHeat基础切配简单加热塔可、简单炒菜、组装型菜肴如卷饼副厨工作较轻主要是切菜和操作烤箱/炉灶加热预制品。SousVidePrep真空低温烹饪设置辅助备餐需要启动真空机烹饪蔬菜或肉类同时可能需准备其他配菜副厨需要管理真空低温烹饪的时间和温度这是核心任务。SousChefDish副厨负责完整烹饪流程烤盘菜、一锅煮意面、需要全程照看的炖菜副厨承担主要烹饪责任主厨可能只需最后调味或摆盘。强度修饰符 / 的使用表示额外步骤或多组件。例如SousVidePrep可能意味着除了启动真空机还需要制作面包糠或准备酱汁。表示高度复杂、多步骤的工作。例如SousVidePrep可能涉及自制面包真空烹饪两种食材准备复杂酱料。编写时间详情的黄金法则具体化写“5:30 rice”5:30启动电饭煲而不是“煮饭”。行动化写“toast panko”烤面包糠、“chop mirepoix”切蔬菜基底。精简通常只包含1-2个最关键的时间点或步骤。避免把整个食谱步骤都列上去。避免重复如果代号已是SousVidePrep时间详情里就无需再写“sous vide”直接写“4:00 mire poix”即可。注意事项解析器的容错性这个基于位置的解析器虽然灵活但也要求格式相对规整。确保H5和H6是紧挨着餐食主标题##的下一行。中间如果有空行或其他内容解析可能会失败。在weekParser.ts中我通过严格的标题层级检测和相邻行分析来保证准确性但用户在编辑时仍需保持格式一致。3.2 交互式购物清单状态持久化的实现购物清单是另一个高频交互点。它的核心需求是勾选状态需要在本周内持久保存即使刷新浏览器或改天打开也不能丢失。技术实现数据源清单条目同样从FOOD-OF-THE-WEEK.md中解析出来通常放在一个## Grocery List章节下使用Markdown的无序列表- [ ] 物品名表示。状态管理在GroceryList.astro组件中我为每个复选框绑定了一个change事件监听器。持久化存储当复选框状态变化时使用localStorage.setItem将整个清单的完成状态一个布尔值数组或对象保存到浏览器的本地存储中。存储的键名包含了当前周的标识符例如从日期衍生这样就实现了按周隔离的状态存储不会和上周的清单混淆。水合当页面加载时组件使用Astro.global或Astro.cookies获取周标识符然后用localStorage.getItem读取对应的状态并据此设置复选框的初始checked属性。// 简化示例逻辑 const weekKey grocery-list-${currentWeekId}; // 保存状态 function saveState(items) { const state items.map(item item.checked); localStorage.setItem(weekKey, JSON.stringify(state)); } // 加载状态 function loadState() { const saved localStorage.getItem(weekKey); return saved ? JSON.parse(saved) : null; }避坑技巧处理 localStorage 的同步问题在服务端渲染SSR或静态生成SSG环境下localStorage是不可用的因为它是一个浏览器API。在 Astro 中我通过将交互逻辑封装在客户端脚本script标签内或使用client:load指令来确保这部分代码只在浏览器中运行。同时初始状态的设置要小心避免服务端和客户端渲染不一致导致的水合错误。3.3 智能粘性头部与打印功能智能粘性头部StickyHeader.astro组件实现了两种状态。页面顶部时显示一个简约的厨师帽图标当用户向下滚动时头部扩展为完整的导航栏显示本周所有餐食的“快速预览”代号点击可快速跳转。这通过监听window.scroll事件并添加/移除CSS类来实现同时兼顾了移动端的触摸体验。打印功能打印不是简单的window.print()。我编写了printGenerator.ts它会读取public/print-config.json中的配置动态生成一个用于打印的隐藏iframe或新窗口。在这个打印视图中可以只打印购物清单隐藏食谱细节。打印完整的周度计划并控制是否在每个餐食间分页。应用完全独立的打印样式字体、边距、复选框样式。确保复选框的勾选状态也能被正确打印出来。配置打印你完全可以通过修改print-config.json来定制打印效果无需改动代码。例如将pageBreakBetweenMeals: true改为false餐食就不会分页打印。4. 色彩系统与深度自定义指南4.1 色彩系统架构单一数据源原则为了让颜色管理清晰且易于维护我确立了Tailwind CSS 配置为唯一数据源的原则。架构流程1. 定义 (tailwind.config.mjs) - 基础色板 (theme.extend.colors) - 指令循环色板 (theme.extend.instructionPalette) - 子区域覆盖 (theme.extend.instructionSubsections) 2. 引用与派生 (src/config/colors.ts) - 从Tailwind配置导入颜色 - 编写逻辑根据色板名称自动生成背景色、边框色、文字色变体 - 处理循环逻辑当指令区块多于色板颜色时自动从头开始循环 3. 应用 (组件) - 静态类名直接使用Tailwind工具类如 bg-salmon-100 - 动态样式通过导入的 colors.ts 函数获取计算后的颜色值用于内联样式或CSS变量这种设计的好处一致性全站颜色只在一个地方定义。可维护性改颜色只需修改配置文件全局生效。灵活性colors.ts中的逻辑允许进行动态计算如循环、派生变体而组件无需关心这些逻辑。4.2 实操如何自定义你的主题假设你觉得默认的 salmon鲑鱼粉、yellow黄、orange橙循环色板看腻了想换成一套莫兰迪色系。步骤1修改基础色与循环色板打开tailwind.config.mjs找到theme.extend部分。// tailwind.config.mjs export default { theme: { extend: { colors: { // 1. 你可以先更改一些基础色 primary: #4A5568, // 从深棕改为灰蓝 secondary: #68D391, // 从亮黄改为绿色 accent: #F687B3, // 从橙色改为粉色 bg: #F7FAFC, bg-alt: #EDF2F7, border: #E2E8F0, }, instructionPalette: [ // 2. 完全替换循环色板 { name: sage, color: #9CAF88 }, // 鼠尾草绿 { name: clay, color: #CC978E }, // 黏土粉 { name: stone, color: #A8B2B9 }, // 石灰石灰 { name: mauve, color: #B8A1C9 }, // 淡紫色 (新增第四色) ], instructionSubsections: { info: { bg: bg-alt, border: secondary, heading: primary }, overrides: { // 3. 你可以覆盖特定位置的颜色 // 例如强制让第一个指令区块使用新的 mauve 色系而不是循环开始的 sage 0: { scheme: mauve }, // 或者为第三个区块指定一个固定颜色不来自色板 2: { border: #F6AD55 }, // 使用一个琥珀色边框 }, }, }, }, }步骤2理解colors.ts的派生逻辑你不需要修改colors.ts因为它会自动读取新的instructionPalette。它的工作是根据你定义的color例如#9CAF88自动计算出对应的浅背景色sage-100和深标题色sage-800。这些计算后的颜色名会注册到Tailwind中所以你可以在组件里直接使用bg-sage-100这样的类。步骤3在组件中应用在MealCard.astro或相关组件中系统会调用colors.ts中的getInstructionColor(index)函数。这个函数会根据索引和你的配置返回对应区块应该使用的颜色方案名如sage。然后组件会用这个名称去拼接Tailwind类例如bg-${scheme}-100。重要提醒关于边框样式由于项目配置中设置了applyBaseStyles: falseTailwind 不会自动注入基础样式。这意味着当你使用边框类如border-l-4时必须同时指定边框样式例如border-l-4 border-solid。否则边框可能不会显示。这是一个常见的坑点。4.3 响应式设计与移动端优化餐食规划网站经常在手机上查看尤其是在超市购物时。因此全面的响应式设计是必须的。布局响应利用 Tailwind 的响应式前缀如md:flex-row。在移动端餐食卡片通常是垂直堆叠在平板或桌面端可能会并排显示“快速预览”和详细指令。字体与间距使用相对单位rem和 Tailwind 的尺寸工具类text-sm,p-4,space-y-4来确保在不同屏幕尺寸下的可读性和触摸友好性。交互优化购物清单的复选框和粘性头部的导航按钮都经过了加大触摸区域min-touch-target的处理。打印按钮在移动端可能会改变位置或样式以确保易用性。图片与图标使用srcset或 Astro 的 Image 组件优化图片确保快速加载。图标使用SVG格式保证清晰度。5. 开发、部署与维护实战5.1 本地开发环境搭建克隆仓库git clone https://github.com/sh-ui/food-of-the-week.git安装依赖确保你安装了 Node.js (推荐 LTS 版本)然后在项目根目录运行npm install。启动开发服务器运行npm run dev。Astro 的开发服务器支持热重载你对FOOD-OF-THE-WEEK.md或任何源代码的修改都会实时反映在浏览器中通常是http://localhost:4321。构建与预览运行npm run build进行生产构建然后用npm run preview预览构建结果检查是否有问题。5.2 自动化部署流水线部署完全由 GitHub Actions 自动化。核心文件是.github/workflows/deploy.yml。# 简化的工作流示例 name: Deploy to GitHub Pages on: push: branches: [ main ] # 推送到 main 分支时触发 jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - uses: actions/setup-nodev4 - run: npm ci # 使用干净的依赖安装 - run: npm run build # 执行构建 - uses: peaceiris/actions-gh-pagesv3 # 使用部署 Action with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist # Astro 默认的输出目录工作流程当你编辑完FOOD-OF-THE-WEEK.md并推送到 GitHub 后这个 Action 会自动检出代码。安装依赖。执行npm run build生成静态文件到dist目录。将dist目录的内容推送到仓库的gh-pages分支。GitHub Pages 服务会自动从gh-pages分支拉取内容并发布。整个过程通常只需2-3分钟之后你的家人就可以通过https://你的用户名.github.io/food-of-the-week访问到最新的餐食计划了。5.3 依赖管理与更新策略项目使用Dependabot来自动化管理依赖更新。配置在.github/dependabot.yml中我设置了每周检查 npm 生产依赖的更新每月检查 GitHub Actions 的更新。流程Dependabot 检测到新版本后会自动创建 Pull Request。我会审查这些PR特别是主要版本升级如 Astro 从 4.x 到 5.x在本地测试无误后合并。安全更新对于安全补丁Dependabot 会创建高优先级的 PR应尽快合并。维护心得保持依赖健康对于个人项目我建议将 Dependabot 的频率设置为每月一次而不是每周。这既能及时获得安全更新又不会因为过于频繁的次要版本更新而产生太多“噪音”。在合并主要版本更新前务必仔细阅读官方迁移指南并在本地充分测试。项目中的MIGRATION.md文件就是用来记录这些升级计划和注意事项的。6. 常见问题排查与实战技巧在实际使用和开发过程中你可能会遇到以下问题。这里是我总结的排查清单和解决方案。6.1 内容解析相关问题问题现象可能原因解决方案“快速预览”没有显示在首页英雄栏H5/H6标题没有紧跟在餐食主标题##之后检查FOOD-OF-THE-WEEK.md文件格式确保#####和######行是##标题后的紧接着的两行。中间不要有空行或其他内容。购物清单复选框无法勾选/状态不保存JavaScript 未正确加载或localStorage操作失败1. 检查浏览器控制台是否有 JS 错误。2. 确保GroceryList.astro组件中的客户端脚本 (script) 或client:load指令已正确添加。3. 检查weekKey的生成逻辑确保每周唯一。三阶段指令颜色没有循环或显示错误tailwind.config.mjs中的instructionPalette配置错误或colors.ts逻辑有误1. 检查色板数组格式是否正确颜色值是否为有效十六进制码。2. 运行npm run dev并检查终端是否有Tailwind编译错误。3. 在浏览器开发者工具中检查渲染出的元素看应用的CSS类名是否正确。6.2 样式与构建问题问题现象可能原因解决方案修改了tailwind.config.mjs但样式未更新Tailwind 未重新生成样式1. 停止开发服务器重新运行npm run dev。2. 删除node_modules/.cache目录然后重新启动。生产构建后网站样式丢失Tailwind 的 PurgeCSS或 Astro 的内容集合配置可能过于激进移除了未使用的样式1. 检查tailwind.config.mjs中的content配置确保它包含了所有可能使用Tailwind类名的文件路径如./src/**/*.{astro,html,js,ts,md}。2. 如果使用了动态拼接的类名如bg-${color}-100确保这些颜色名称在safelist配置中列出防止被清除。打印页面布局错乱public/print-config.json配置有误或未被正确加载1. 检查JSON文件格式是否正确没有语法错误。2. 在打印预览的页面中打开开发者工具检查网络标签页确认print-config.json文件是否成功加载状态码200。3. 检查printGenerator.ts中读取和解析配置的代码逻辑。6.3 部署与访问问题问题现象可能原因解决方案推送代码后网站没有更新GitHub Actions 构建失败1. 在 GitHub 仓库的 “Actions” 标签页中查看最新工作流的运行状态和日志。2. 常见原因依赖安装失败网络问题、构建脚本错误如TypeScript编译报错。3. 检查package.json中的build脚本是否正确。网站可以访问但显示404或空白页GitHub Pages 未正确设置源分支或dist目录内容为空1. 进入仓库 Settings - Pages确认 “Source” 设置为 “Deploy from a branch”分支为gh-pages。2. 检查gh-pages分支是否有内容或 Actions 日志是否显示成功推送到了该分支。3. 确保astro.config.mjs中的site和base配置正确对于项目页面base通常是/仓库名/。6.4 高级自定义技巧添加新的餐食分类如果你想在“快速预览”代号中加入新的分类如InstantPot表示需要用到压力锅你需要在weekParser.ts中更新解析逻辑确保能识别这个新代号。在MealCard.astro或相关的展示组件中为这个新代号定义对应的显示样式如特定的图标或背景色。在tailwind.config.mjs中可以考虑为这个分类定义专属的颜色通过instructionSubsections.overrides或者让它使用现有色板循环。支持多语言系统目前是英文导向的。要支持中文或其他语言你需要修改weekParser.ts中的解析逻辑使其能识别不同语言的标题例如同时识别#### Ingredients:和#### 食材:。这可以通过配置一个关键词映射表来实现。将网站上的固定文本如“Grocery List”、“Print”提取为配置变量或使用i18n库。注意这属于较大改动需要仔细测试解析器的兼容性。接入外部食谱API如果你不想手动写Markdown可以改造系统让它从其他食谱网站或API如 Spoonacular拉取数据并自动生成结构化的FOOD-OF-THE-WEEK.md文件。这需要编写一个额外的构建脚本在npm run build之前运行完成数据获取和文件生成。这个“Food of the Week”系统已经稳定运行了相当长一段时间它彻底改变了我家的晚餐规划方式。从最初的简单列表迭代到现在这个功能齐全的协作平台最关键的一点是始终围绕真实的工作流进行设计。技术是为需求服务的找到那个让你和家人感到“痛”的点然后用最合适的技术去解决它这个过程本身带来的满足感不亚于做出一顿美味的大餐。如果你也打算构建类似工具我的建议是先从最简单的文本文件开始明确核心流程然后再用代码去封装和增强它而不是一开始就追求大而全的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2579998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…