Notes(93) RSS feed
- Updated:
-
22. 网页端判断是什么系统,从而显示不同的组件。
Updated:看到 b 站投稿页的右上角有一个下载投稿工具的按钮。
点了之后发现是.exe 文件,而我的电脑是 macos 的系统。所以这次的下载算是无效操作。
体验要做的更好一点的话,应该根据系统来显示不同的组件。(在这里如果不是 windows,就不要显示 exe 相关的文件夹下载)
function getOperatingSystem() {const userAgent = navigator.userAgent || navigator.vendor || window.opera;if (/windows/i.test(userAgent)) {return "Windows";} else if (/macintosh|mac os x/i.test(userAgent)) {return "macOS";} else if (/linux/i.test(userAgent)) {return "Linux";} else if (/android/i.test(userAgent)) {return "Android";} else if (/iphone|ipad|/i.test(userAgent)) {return "iOS";} else {return "Unknown";}}userAgent 的例子:
‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36’
参考
-
23. 配置nginx以成功代理websocket
Updated:配置 nginx 以成功代理 websocket
在使用 socket.io 的时候遇到这样一个问题:websocket 接收的消息的顺序错位了,然后看了一下浏览器的 console 的报错,提示连接到 ws 失败,然后在浏览器的开发者工具的网络中看了一下 ws 对应的消息里面报错:Error during WebSocket handshake: Unexpected response code: 200
查了一下发现是 nginx 没有配置的问题。
相关的类似的问题:
https://github.com/websockets/ws/issues/979
nginx 官方文档提到的解决方法:
需要注意的是:
location /chat/socket.io {proxy_pass <http://backend>;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}这里的 backend 就是 ip 地址或者域名,不需要加后缀/chat/socket.io。
-
24. 使用google sheet + api定时获取油管播放量
Updated:起因是想要记录一下 milklove 的二搭剧 Whale Store xoxo 在油管上的预告片的播放量的 คุณวาฬร้านชำ (Whale Store xoxo) | GMMTV 2025 - YouTube
于是先搜了一下有没有可以直接使用的开源项目或者接口,然后在 批量统计YouTube视频播放量方法 - 杨哥的出海营销笔记 这篇文章中了解到了可以使用 google sheet 的 apps 脚本 直接获取油管的播放量。
不过这篇文章中的脚本更多的获取当前的播放量,而不是定时获取,因此我在这个脚本的基础上进行了一些修改,来实现定时获取播放量,然后把时间和对应的播放量的信息存到 sheet 中。
最终的效果如图所示。杂货铺播放量记录 - Google 表格
操作教程
第一步,在 sheet 中的原始模板是这样的:
链接 视频 id 时间 播放量 https://www.youtube.com/watch?v=Eia_Sh_ZTyQ =MID(A2, FIND(“v=”, A2) + 2, LEN(A2) - FIND(“v=”, A2) - 1) 在第一列写上要监听的油管的链接,然后视频的 id 通过公式直接计算出来。
第二步,点击 extentions - apps script 这里,跳转到脚本配置界面。
点击左侧的 services 的加号,添加 YouTube Data API v3,标识符、版本直接默认就可以了。
第三步,把代码复制到 Code.gs 中,效果如图:
function onOpenFunc() {PropertiesService.getScriptProperties().setProperty("accessToken", ScriptApp.getOAuthToken())}function getVideoViews(videoid) {var accessToken = PropertiesService.getScriptProperties().getProperty("accessToken")// Check if the access token existsif (!accessToken) {Logger.log("No access token found.")return "Error: No access token"}try {var videoStatsResponse = YouTube.Videos.list("statistics", {id: videoid,access_token: accessToken,})// Check if the response contains the expected dataif (videoStatsResponse.items &&videoStatsResponse.items[0] &&videoStatsResponse.items[0].statistics) {return videoStatsResponse.items[0].statistics.viewCount} else {Logger.log("No statistics found for video ID: " + videoid)return "Error: No statistics"}} catch (error) {Logger.log("Error fetching statistics for video ID " + videoid + ": " + error.toString())return "Error: " + error.toString()}}function recordYouTubeViewCount() {// 获取活动表格var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()// 获取第二行的 IDvar videoId = sheet.getRange(2, 2).getValue()// 获取当前时间var currentTime = new Date()try {// 获取播放量var viewCount = getVideoViews(videoId)// 获取当前表格的最后一行var lastRow = sheet.getLastRow()// 在最后一行之后插入新行,并填写时间和播放量sheet.insertRowAfter(lastRow)sheet.getRange(lastRow + 1, 3).setValue(currentTime) // 设置时间sheet.getRange(lastRow + 1, 4).setValue(viewCount) // 设置播放量} catch (error) {// 错误处理Logger.log("Error processing video " + videoId + ": " + error.toString())// 如果发生错误,记录错误信息var lastRow = sheet.getLastRow()sheet.insertRowAfter(lastRow)sheet.getRange(lastRow + 1, 3).setValue(currentTime) // 设置时间sheet.getRange(lastRow + 1, 4).setValue("Error: " + error.toString()) // 设置错误信息}}然后如果要验证是否正确,选择 recordYouTubeViewCount,然后点击 run 按钮。不出意外的话会在 sheet 中新增一行记录。
第四步,也是最后一步,我们要设置一下 trigger,来实现定时地查询播放量并且写入到 sheet 中。点击左边侧边栏的 trigger 菜单,再点击右下角的 add trigger.
设置如下,配置完成后点击 save 按钮。
点击完之后,可能出现一个验证弹窗,需要你选择自己的 google 账号,然后点击 go to xxx project (unsave), 点击 allow 进行授权。(这里没有保留截图,但或许大概应该能直接看懂?)
然后我们就完成了所有的配置,等待一小时后看是否运行正常即可。
参考和鸣谢
这个脚本是在 批量统计YouTube视频播放量方法 - 杨哥的出海营销笔记 的脚本的基础上改的,感谢作者提供了很详细的教程和代码。
同时也要感谢 google 提供的 api.
-
25. 2024-12-12 星期四
Updated:之前只用过 deepseek 的 api,这几天的 deepseek 的 chat 用的比较多,发现两者都挺好用的
目前 todo 全部都移到滴答清单里面去记录和更改,这里单纯记录一些想法,不要 all in one
碎片化记录
10:55:这次去看演出要用肩带夹录一个第一人称的记录
10:54:把另外一把键盘带去公司了
感受是打字很舒服 但是打久了累12:37:活成了做什么都下意识计算收益的样子
13:05:状态怎么样别人能很明显看出来…
还是对自己好点吧,现在这种状态实在太差了13:18:买了一个新手机壳就能玩很久
13:13:总之先做一个出来
性能差就差,总比没有好13:36:转发微博
- 转发 @爱可可 - 爱生活: 【Diagen:一键生成数据图表的智能工具,通过 AI 技术将复杂数据转化为美观的图表,支持多种图表类型,让数据可视化变得简单快捷】‘diagen - Generate beautiful, reflective diagrams from your data with a single command.’ GitHub: github.com/SouthBridgeAI/diagen #数据可视化# #人工智能# #图表生成#
13:35:这下谁能看出 h 和 p 标签记录的啥
13:33://@KITATAIKOI: 跟去年相比产量确实是直接腰斩了,也跟我在思索一些关于精神层面的议题、把精力更多的花在工作上和尝试去改变自己有关。也很庆幸并没有在“向内批判自己”这件事上花太长的时间,我成功地走出了很大一部分源于过去的阴霾。 总之感谢大家的支持与认可,新的一年,咱会再接再厉,努力创作更能让自己满意,同时也更能深入人心的作品的!这样~
- 转发 @KITATAIKOI: +2024 年终总结 +
又到了一年一度的% かΘΛ……(省略一大堆感言)今年除工作外一共产图 110 张~~~
14:49://@绯音喵: 有病吗//@婉司姬: 干什么//@矮周迅: 这是真不敢//@王太弱: 我连上一秒的都不敢看//@巴斯小板: 我不想回忆。//@美困外卖: 那年今日就可以看到
- 转发 @CharlieDurian2 号: 没见过傻逼的可以看看自己几年前发的朋友圈
16:00:要散了
19:50:我怎么就活成这个样子了
20:05:这辈子都不想做前端了
20:02:于是我又打开 boss 直聘
我不会又要去上海吧20:13:逛商场好解压,身心舒畅
20:12:好想配这种镜框
感觉聪明的人带更聪明
笨的人带更笨20:50:幻想一下就能笑出声 好好养活
20:50:如果买“保健品”可以让自己开心,适当买点又怎么了
21:04:谁教他把 blender 缩写成 bl 的
21:15://@碎片粘合區:………//@2048 种子选手: 我//@摩斯盖斯: 我磕 cp
- 转发 @推拿熊: 在现在的时代来说,你愿意持之以恒做一件事情,从早上醒来在想,做了一天后睡觉前也在琢磨,能沉浸其中,不觉得烦,已经是极大的正反馈了
21:27:今天像吃了一顿空气
虽然有活动 但什么都没吃到22:55:这个号烂的别人给我点赞我都看不到提示😳
23:03:- 转发 @奶制品 -: 人无法同时拥有青春和对青春的感受 18 岁的和 24 岁的 loverrukk 又有了共同的感受
23:03:转发微博
- 转发 @月照废墟: milklove
人如何学会语言。
热带雨
23:44:好喜欢这篇 (「・ω・)「
- 转发 @月照废墟: milklove
人如何学会语言。
热带雨
23:42:浪费时间…
23:56:声生不息的滤镜怎么把人脸搞得蜡黄蜡黄的
23:51:靠一些不切实际的信念感在往下走
但是感觉明年就该清醒了 -
26. 2024-12-11 星期三
Updated:终于没有那么忙了,上周忙成狗了,加班加的 wakatime 时长直接进入全球前 100 了
上周在忙什么?主要是做 vtk.js 的开发花了很多时间,不然后续的需求查漏补缺我不会做的这么着急。
对于 vtk.js 的掌握程度还是太低了,甚至连 polydata 的变化要怎么写都是临时掌握的。不过好在上周耐心理了一下项目里复杂的数据流转,清晰了很多。
然后今天主要再写文档,写得头昏眼花的,好容易走神。
react-scan 让页面的 rerender 一眼便知 React Scan,试了下确实好用(比浏览器的开发者工具里面的 rerender 监视器好用),后面项目优化有事做了。
好看的个人主页 CAICAI - A Product Manager
-
27. 2024-11-30 星期六
Updated:vscode extention 启动时间
按下 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 “Startup Performance” 并选择该选项。 关注:Finish Activate
kill 端口为 x 的进程
lsof -i :<PORT>kill -9 <PID>kill -9 $(lsof -t -i :<PORT>) -
28. 2024-11-29 星期五
Updated:qube 如何集成到 github:
GitHub Integration | Mapping your organization into SonarQube - YouTubeImage HTTP code 409 is in use. Delete the container that’s using it and try again.
先删除 container 再删除 volume沉浸式翻译使用 ollama
如何区分重启和刷新按钮
windows 有没有像 macos 一样的窗口管理工具,loop raycast 之类的
covnert image to svg (需要登录)
Canvas vs. SVG - 最佳实践 - 使用手册 - Apache ECharts
[!note] 选择哪种渲染器,我们可以根据软硬件环境、数据量、功能需求综合考虑。
- 在软硬件环境较好,数据量不大的场景下,两种渲染器都可以适用,并不需要太多纠结。
- 在环境较差,出现性能问题需要优化的场景下,可以通过试验来确定使用哪种渲染器。比如有这些经验:
- 在需要创建很多 ECharts 实例且浏览器易崩溃的情况下(可能是因为 Canvas 数量多导致内存占用超出手机承受能力),可以使用 SVG 渲染器来进行改善。大略的说,如果图表运行在低端安卓机,或者我们在使用一些特定图表如 水球图 等,SVG 渲染器可能效果更好。
- 数据量较大(经验判断 > 1k)、较多交互时,建议选择 Canvas 渲染器。
我什么时候可以做到用 canvas 手搓这种图
最近可以做的事情:
编辑器图片上传重构
编辑器高度修改行间高度调整
用 rn 重写移动端
ml 资源整合
vtk、图形学学习
obsidian 插件 ollama generate slug tags -
29. 2024-11-28 星期四
Updated:打开这个禁止硬件加速的选项可以让 VSCode 快很多倍,Cusror 这种基于 VSCode 的也可以,不知道什么原理,应该是针对低端显卡或者集成显卡的机器比较有效?但是我试了一下确实感觉快了一些,我是 M3 的 macbook,大家可以试试看效果怎样?步骤:1. 打开命令面板 (Cmnd + Shift + P)2. 输入 "Preferences: Configure Runtime Arguments"3. 添加: "disable-hardware-acceleration": trueSonarLint 内存占用高,卡顿
error when starting dev server:ReferenceError: module is not defined in ES module scopeThis file is being treated as an ES module because it has a '.js' file extension and 'C:\Users\turbo\Developer\xxx.worktrees\fix\cannot-export\node_modules\.pnpm\[email protected][email protected][email protected][email protected][email protected]_@types+n_f2jvehahdn5lgzw77tv2nbqmma\node_modules\vite-plugin-checker\package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.Ensure the project either has “type”: “module” set or that the Vite config is renamed to vite.config.mjs / vite.config.mts depending on whether TypeScript is used
确保项目已设置 “type”: “module” 或根据是否使用 TypeScript 将 Vite 配置重命名为 vite.config.mjs / vite.config.mts
Claude MCP can’t connect to SQLite MCP serve
解决方法:install or reinstall uv
brew install uv
ollma 真好玩
我怎么这么久了才开始玩(谢谢酱紫表的安利)
-
30. 2024-11-27 星期三
Updated:windsurf 赠送了试用的天数
个人感觉 cursor 的自动补全速度比 windsurf 快和智能很多
volview 也这么多 store,谁能看懂…
src\components\tools\crop\Crop2D.vue
啥意思
安装 canvas 的时候报错:
error C1083: 无法打开包括文件: “cairo.h”: No such file or directory解决方法:
Installation: Windows · Automattic/node-canvas Wiki · GitHub