每天学一点

每天学一点

AI、Web技术、读书笔记

我的第一个MCP,以及开发过程中的经验感悟

起心动念 上周开发完 sheetex 后,发了条朋友圈。有小伙伴建议搞个 MCP 玩,正好我本来也想学,于是这周就花了一天完成了 sheetex-mcp-server,一个将对话中生成的表格保存成 Excel 的 MCP 服务。 做之前快速调查了一下 smithery 和 modelscope ,发现已经有好几个 Excel 相关的:实现上既有调用本机上的 Office 软件进行操作的,也有用库读写文件的;功能就更加眼花缭乱,从简单读写数据,到插入图表,甚至可以截图保存。 看来是打不过了,好在只是做个练习,开搞。 一天下来,学到不少东西,也填了好几个坑,本文以坑为主。 那么下面就按顺序来了。 新手上路 Build an MCP Server 是官方的教程,新手入门刚刚好,它通过调用天气相关的接口演示了 MCP Server 的开发过程。
9 min read

12KB的Excel导出库sheetex是怎么来的

这是一个关于前端 Excel 导出库 sheetex 的故事:我为什么要做这个库,它为什么会这么小,以及你是否值得一试。 如过你问我“为什么非要在前端导出”,那将是另一个故事。 我的数据导出史 不知道你是否还记得自己是从什么时候开始接触数据导出的? 我对自己的“数据导出史”还算有些印象:在还没有正式工作的时候,如果有人问我要数据,我会在数据库管理工具里写个查询语句,然后视对方的用途,导出成SQL 语句、CSV 文件或者Excel 等;待到工作了,需要开发面向最终用户的系统,就不能再这么手工处理,导出功能成为系统标配,用户点击一个按钮,就要下载到相应的文件。 最早是 CSV 格式,因为其生成相对容易,而且也可以通过 Excel 软件进行查看,加上主要是内部用户,偶有无法打开也只要简单培训就能解决。 但随着用户类型变得广泛起来,这种“偶尔”也逐渐变成无法忍受,那么干脆直接导出 Excel 文件吧,反正开源库也已经成熟,于是使用 SheetJS
9 min read
用 Aria2 & AriaNg 搭建离线下载平台
家庭网络

用 Aria2 & AriaNg 搭建离线下载平台

环境 硬件:Mac Mini 2014 4C4G 操作系统:Debian 12 IP地址:192.168.2.2 流程 1. 切换到管理员权限 su root 2. 安装 aria2 apt install aria2 3. 以服务的形式运行 aria2 aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all --enable-rpc 启动 rpc 服务 --rpc-listen-all=true 允许从任意 IP 访问 --rpc-allow-origin-all 允许浏览器跨域访问 4. 配置 nginx 增加站点用于放置前端界面
1 min read
前端

Quasar中的前端代码转译

使用 Quasar 时,如何完成浏览器兼容性的配置。 制定兼容范围 在进行实际配置前,首先必须确定要支持浏览器的版本,而确定浏览器版本则需要先明确业务对象的情况。 为什么不干脆把标准定的越高越好呢?比如支持100%的用户。这是因为支持率越高,可用的新语法越少,意味着更多的转译代码和 polyfill,这会带来额外的代码量,从而导致下载数据量增加,以及运行速度变慢的问题,为了0.01%影响99.99%用户的体验并增加他们的流量开销,是否合适呢?这就需要根据实际业务进行取舍和平衡。 比如我们的业务对象既有企业用户,也有公众用户,企业用户主要使用钉钉,并可对其PC浏览器进行要求,而公众用户主要使用微信。 确定常用浏览器版本 PC浏览器可以指定,那么对浏览器版本就不需要过多考虑,但是部分客户还有XP系统,那么也就确定了 Chrome 浏览内核的版本不可以超过 49; 微信用户可能在手机登录,也可能在PC登录,而PC中的微信内置是QQ浏览器9,其内核版本是 Chrome 53; 电脑端的钉钉内置浏览器已经是 Chrome 91; 手机端的话考虑到安卓手机使
4 min read
PostGraphile

PostGraphile实战-序

两年前(2018年),在使用 PostGrahphile 一段时间后,打算总结自己在实践中的经验,于是陆续用数周闲暇时间,写了 《PostGrahphile入门》 一文。止于2019年4月18日,完成了预计的7个章节中的前5部分,今年想要继续时,发现其中多处已跟不上最新的发展,而自己的认识也已更进一步。遂计划重来一版,先将原有部分翻新,再补上缺失的后两章。用每周更新的博客形式呈现,初步估计需要3个月左右。如果顺利,再花2-3周做成完整的电子书,最后定期迭代,使其紧跟技术更迭和个人认识的发展。 大框架暂与之前相同,不排除按需扩展。 1. 概述 2. 技术背景 3. 项目准备 4. 联机版——PostGrahphile的基本使用 5. 多用户——注册与登录 6. 多用户——访问控制、权限与隐藏 7.
1 min read
Docker

服务器部署的决策与实践(4) 环境部署实践

一套环境通常不会只部署一遍,你会遇到各种需要重复部署环境的情况:也许是一个项目需要多台服务器来运行;也许是同时需要管理多个项目;也许是需要生产环境和开发、测试环境的一致性。总之,掌握高效的方法和工具是非常必要的。 这周我来讲讲自己在服务器环境部署上经历的四个阶段,以及选择背后的原因。 本文是 服务器部署的决策与实践 系列的一部分。 第一阶段 在最初的阶段,我还完全是个新手,对服务器管理的技巧和相关软件配置的方法都还在逐步深入了解的过程中,需要许多摸索和尝试,说是跌跌撞撞才部署完一台服务器也不为过。等到一段时间后,又要一台相同环境的服务器时,早忘了上次是怎么做的。先勉强凭着记忆把关键的步骤给走下来,却总是难免遗漏几处配置,有时甚至应用运行到一半报错了,才能发现少了必要的组件,通过一系列修补才终于把新服务器搞定。最痛苦的是明明记得要做某个步骤,却想不起细节,隐约记得是在一个什么网站上看到过,又无论如何翻找不到。 第二阶段 经过上个阶段的磨炼,对常用软件的安装和配置已有心得,无谓的尝试也逐渐减少。而且也学聪明了,安装的过程会写个简单的文档记录下来,下次照做错漏自然
10 min read
CentOS 6

服务器部署的决策与实践(1)服务器操作系统的选择

CentOS 8 生命周期的突然缩短,让我再次面对服务器操作系统的选择。 如果你使用一个公司的产品,但不向他付钱,那么你就只是用户,而非客户。网游行业的从业经验又告诉我,不付钱的用户是产品的一部分。 Red Hat 决定将 CentOS 8 的支持周期将从原来预计的 2029 年缩短到 2021 年年底,并劝大家都去用 CentOS Stream,或者买他们家的商业服务,就是一个很好的例证。原来的 CentOS 用户,现在要么选择成为 Red Hat 的编外测试人员,为他们的商业客户提供价值,要么选择成为“氪金玩家”。 商业行为毕竟不是慈善事业,我们没啥好说的,只是又到了做选择的时间。 本文是 服务器部署的决策与实践 系列的一部分。 首先,最容易的就是交钱,当然,在技术上也没啥好讨论。 你也可以选择 CentOS Stream ,但它是个滚动更新的发行版,官方也不推荐用于生产服务器。
5 min read
阅读

读《程序员修炼之道》

久仰其大名,今年第二版面市,终于买来一本,五百页,断断续续三个月读完。 本书推崇的核心理念被简称“ETC” —— Easier to change ——即软件从设计到编码,首先要考虑“容易变更”,作者云全书其他方法皆是此原则的特例。在我看来其观点与《简约之美》异曲同工,后者写成一本书,只为教给读者一个“常识”,就是软件项目想持续成功,唯一重要的就是“降低维护成本”,至于如何实现,草草带过了,毕竟全书正文不足百页。现在看来,答案自然就是“容易变更”。 这一对比,更凸显《程序员修炼之道》的特点——“务实”。全书给出整整 100 个“提示”,供读者参考。若与读者日常工作方法直接对比,确实能揭示不足,指明提高的方向。其中部分是我日常已有感受,却无法言明的,一旦点破有豁然开朗之感;另有部分是针对一个问题,已经想过几条路可试,却没来得及逐一实践去验证各自优劣的,作者直接给你摊开了一一剖析,读后亦有收获。
2 min read
CentOS 7

PostgreSQL 安装及相关配置

记录一下最近安装和配置 PostgreSQL 的过程, 使用了 CentOS 7 和 PostgreSQL 10,包括以下内容 * 安装 * 初始化 * 开放密码登录 * Oracle FDW 安装 下方链接可以找到最新的安装方法 Linux downloads (Red Hat family) 最近一次成功安装的步骤 CentOS 7 + PostgreSQL 10 1. 选择版本 yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 1. Install the client packages: yum
2 min read
Node.JS

解决网络不佳导致的无法通过 Nvm 安装 Node 安装包

方法一: 在晚上 12 点之后再试,祈求网络不那么糟糕 方法二: 使用代理 方法三: 1. 正常运行安装命令 nvm install v12 1. 网络异常导致下载失败 2. 再次运行安装命令 nvm install v12 输出: Downloading and installing node v12.15.0... Local cache found: ${NVM_DIR}/.cache/bin/node-v12.15.0-linux-x64/node-v12.15.0-linux-x64.tar.xz Computing checksum with sha256sum Checksums do not
1 min read

NetGear 4300 与 OpenWrt

年前搬了家,过完年就想把资料整一下。结果手痒把路由器玩坏了,只好重头刷了一遍。四五年没玩这些,好多东西都忘个精光,做完才想起以前就是这么搞定的,这次得记上一笔,免得下次尴尬。 刷机 进入恢复模式 1. 关电源 2. 戳复位孔,长按 3. 开电源 4. 等待电源黄灯长亮-黄灯闪烁-绿灯长亮-绿灯闪烁 5. 松开复位孔 刷入系统 1. Windows 系统的电脑通过网线连接路由器 LAN 口 2. 设置 ip 地址与 192.168.1.1 在同一网段 3. 打开CMD,输入 ping 192.168.1.1 /t 持续 ping 路由器 4.
3 min read
几种浏览器播放RTSP视频流的方案
FFmpeg Featured

几种浏览器播放RTSP视频流的方案

上周又做了一次在浏览器中播放视频流的项目,不过以前做的是手机,这次做的是桌面。停车场出入口的摄像头作为源头提供RTSP协议的视频流,而浏览器不能直接播放,只有通过插件或者转码来实现这个需求。 要实现这个目的,可以采用的方案非常得多,有商业的也有开源的,这里主要列举一些开源的方案。 方案 这里的方案都是我尝试过了的,有些成功,有些没成功。但是因为每个项目情况不同,这次没成的方法,换个项目也许就能成,所以方案全部列在这里,失败的我也会说明原因。读者若走投无路,不妨也试试我失败了的方案。 由于项目原因,这里的浏览器主要考虑 Windows 平台。 顺序 由于方案很多,我们先归归类、排排序,从简单的到复杂的来。 1.通过浏览器插件直接播放RTSP 首先我们介绍没有中介的方案,也就是不预先进行转码,而在浏览器中直接解码RTSP流。 1.1 VLC插件 优点: * 可以直接播放RTSP,无需任何中介服务器的帮助 缺点: * 需要手动安装插件; * 基于NPAPI,不被最新的 Chrome 和 Firefox 支持 方法:
13 min read
Nginx

通过 Nginx 实现类似RAID0的效果

这几天做了一个停车场的项目,出入口的相机会拍照并保存在前端的机器里,也就是收费岗亭里的那台电脑。当一个收费站有两个出入口时,照片分布在AB两台机器中。当你需要调取照片时,有可能在A机器中,也可能在B机器中。 为了能够统一的调取照片,利用 nginx 的反向代理把两台电脑的目录整合成了一个整体,对外使用一个入口。如果把电脑看成硬盘,那就是实现类似 RAID 0 的读取效果。 基本配置 两台电脑分别安装 nginx ,并配置目录,主要是修改 nginx 的配置文件,将 location / { root html; index index.htm index.html; } 改成 location / { root ../BackupPhoto; } 这个是出入口照片保存的目录,因为收费机的系统是 windows ,不太清楚绝对路径怎么写,就用了对应 nginx.exe 文件的相对路径。 D: BackupPhoto nginx-1.15.
2 min read
Org-Mode

Org-Mode导出html模版设置

用 Org-mode 写了一篇接口说明,要发给合作单位,所以得先导出成一个通用的文档格式。内置的几种格式看下来,只有 html 的模版最好看,但是内容上与设想的有所出入,主要在于以下几点: * 没有标题 * 目录的标题是英文 * 底部的签名是个人的 解法 没有标题 在文档头部添加 #+TITLE: 文章标题,文章标题会出现在 Table Of Contents 之前,居中显示。 目录的标题是英文 在文档头部设置语言 #+LANGUAGE: zh-CN,“Table of Contents”会变成中文的“目录”。 底部的签名 默认情况下,底部会有文档创建时间、作者和w3c校验链接,通过设置 #+OPTIONS: html-postamble:nil 加以隐藏 其他 Org-mode 默认没有导出 PDF 的选项,需要配合 Latex
1 min read
Node.JS

集成 Express、Parcel 和 Vue

最近终于动手整理项目的框架,总体思路和去年基本一致,“无状态”和“按功能模块分目录而不是按前后端”仍然是核心的思想,不过具体的工具发生了变化。 * 数据存取这边用 GraphQL 取代 PouchDB ,在灵活性和可预测间做一个平衡; * 前端用 Vue 替换 Riot ,主要还是出于生态方面的考虑,虽然复杂度提升了一点,但是可用的第三方库丰富很多; * 最后用 Parcel 替换 Webpack 和 dev.js,Webpack4 据说简洁了不少,但还是有阴影,Vue 如果自己写 dev.js 也要比 Riot 的难一点,先用 Parcel 偷个懒把。 当然首要目标还是简化日常开发,于是花了两个小时把 Express、Parcel 和 Vue 集成到一起。做到每次启动后端进程的时候,Parcel 也会同时开始工作,不需要执行另外的命令,
5 min read
阅读

读《Modern Vim》

上半年技术书看得比较少,也比较慢,这本百来页的书断断续续看了一个月。 毫不夸张的说,Vim 是我用的时间最多的软件,工作以来至少90%的代码是用 Vim 写的,不过相关的技能差不多一直停留在两三年前的水平,毕竟是一个快三十岁的编辑器,本身已趋于成熟稳定,很难再有大惊喜,插件也尝试过很多,留下的也都是精挑细选过,能最大程度地提高我的效率。 不过看到有 Vim 的新书出来,还是要看看,毕竟天天在用,可能还要再用三四十年,一个个小技巧节约下来的时间,累计起来也是非常可观的。 先说个总体评价:有用。 虽然部分章节的知识目前用不上,但也带给我很多新思路。 再说个附加评价:我遇到的第二本附录对我超级有帮助的书,花一本书的钱,只买两页附录也值得。另一本是《jQuery in Action》,用一页附录让我弄懂了闭包的概念。 Morden Vim 下面按章节顺序概述一些本书内容,章节标题就用原文了。 1. Get Morden Vim 一句话概括:为了更好的用户体验,请选择使用最新的 Vim
7 min read
浙ICP备15043004号-1