Nicksxs's Blog

What hurts more, the pain of hard work or the pain of regret?

允许我小小地标题党一下,后半句是真实情况,最近重启电脑就自动升级了chrome,发现很多必须的扩展程序都不能用了,之前是可以通过设置开启,这次升级到 138.0.7204.158 版本就直接不允许开启了
这个很久之前chrome也做了提示,主要是扩展程序的manifest版本要从v2升级成v3,但是这个升级分两方面说,一方面是升级难度,可以参考这个核对文档, 需要

  • 迁移到 Service Worker
  • 更新 API 调用
  • 替换屏蔽 Web 请求监听器
  • 提高扩展程序的安全性
    这些项的修改,修改升级难度不小,如果使用了很多api的话是比较麻烦的
    另一方面是很多扩展都不是自己做的开发,开发者都不一定在维护,但是很多都是非常深度使用的
    这边有个例子就是Proxy SwitchyOmega 2 平时会用来做代理切换,原本的仓库已经没人维护了,并且chrome扩展商店也没有更新,
    这里介绍两种方法,
    第一种是找到这个应用所在目录

    首先找到应用的id,然后需要到chrome的扩展目录
    mac是在这里 ~/Library/Application Support/Google/Chrome/Default/Extensions
    windows是在 C:\Users\<用户名>\AppData\Local\Google\Chrome\User Data\Default\Extensions
    找到以后就找上面扩展的id就是扩展的文件目录,把它拷出来以后,然后找到扩展目录里的 manifest.json 文件,把版本改成3
    然后再通过扩展路径直接打开,比如这个扩展就是 chrome-extension://padekgcemlokbadohgkifijomclgjgif/options.html
    这个选项页,为啥要这么打开是因为这个扩展的配置比较麻烦,就是现在可以搜到替代应用,但是要重配一遍也是挺头疼的
    第二种是有点釜底抽薪的
    可以在chrome的flag配置中修改
    网上说的可能已经就删掉了,我这个版本的目前还可以用这个配置项来修改
    chrome://flags/#allow-legacy-mv2-extensions
    可以通过开启这个来让manifest版本是2的扩展能够被启用,但是这个肯定也是个临时方案,大家该把配置导出备份的尽早备份,同时也尽早寻找替代的升级了manifest 3的扩展程序

herd是在使用过了valet之后,又一款laravel出品的好用的工具,之前使用valet可以把laravel应用的本地域名解析和https加密等都处理好,是个非常不错的工具。
但是在我的使用场景里还有一个比较头疼的问题就是多版本php的切换,虽然php在大型网站,非常复杂的业务系统使用会有一些不足,弱类型会导致复杂逻辑的后续维护重构变得比较困难
只是对于个人使用来说,仍然是个非常不错的工具语言
同时laravel也是个很不错(除了有些过度封装)的框架,但是因为之前我自己写的工具大部分是基于php7.4的,laravel是比较古老的laravel 5.6版本,目前很多新的包都要求php版本是8.x,laravel也要10+了,一方面是我原先依赖的工具包没有对应的更新,另一方面是php7.4切换其他版本会有icu4c依赖版本的问题,挺麻烦
这次研究了下herd,它是可以做php版本切换的,

像这边我装了7.4和8.2版本,并且最难的是它吧依赖也一并打包了,所以就不用管icu4c这种依赖版本的问题,省心省力
还可以针对site来设置不同的php版本,这个是非常方便的
只是它也不是完全没有问题的,在使用的时候发现一个比较奇葩的问题,就是默认运行时会有这个报错
preg_match(): Allocation of JIT memory failed
而它需要的解决方式在herd环境中变得无效,因为这里给出的错误提示是要把php的配置中的 pcre.jit 设置成 0
我们可以通过在版本号上右键,看到对应版本php的ini配置文件所在位置

但是打开后发现这个设置已经存在
后来搜了一圈才发现了一个很奇葩的环境变量
比如是php7.4就需要设置这个
HERD_PHP_74_INI_SCAN_DIR="/Users/dasun/Library/Application Support/Herd/config/php/74/"
来源是在这个issue里,还是个挺麻烦的问题
另外就是herd其实是卖收费版本的,相对来说存在一些限制,比如php的extension是不支持便捷的自定义安装的,如果有需要可能需要一些奇技淫巧,参考这里,但是至少还是帮我解决了问题了

er图在我们学习数据库的时候是有比较着重的介绍和学习过的,在实际工作中,如果有想对规范的研发流程,那么在技术方案分析设计阶段也需要对系统中涉及到的数据模型用ER图来表示以方便大家理解数据模型的设计和它们之间的关系
从维基百科上摘的一个说明和介绍

ER模型,全称为实体联系模型、实体关系模型或实体联系模式图(ERM)(英语:Entity-relationship model)由美籍华人计算机科学家陈品山发明,是概念数据模型的高层描述所使用的数据模型或模式图。
常规上的理解ER图分为三个部分,
第一个是实体,也就是ER图的E,表示Entity
第二个是属性,表示Entity中带有的属性,比如以学生表为例,它有姓名,性别,年龄,年纪等等属性
第三个核心的是关系,也就是ER图例的R,表示Relationship,比如学生表跟班级表是怎么样的关系,一般情况下一个学生一定属于一个班级,那么学生和班级的关系就是多对一的关系
对于画ER图,比较推荐使用Draw.io来画,开源免费且功能强大
它左边菜单栏就自带了ER图的组件

我们就可以直接拖动组件来画出ER图

这样就能画出简单的ER图了,并且连1对1,1对多这种关系都有现成的连线组件了,真的是治愈强迫症,如果自己画这个N对N的线,老是会觉得画得不一致而感觉画的不好看
而且还有一个很强大的功能,比如我们在画ER图的时候已经把表结构设计好了,那么就能直接从表结构生成ER图

可以在这里导入表结构sql,就能生成对应的实体图了,如果有外键关联还会生成对应的连接,当然手动加一下也很方便了

谷歌新出了个对标claude code的命令行工具,叫gemini-cli,还是开源的,所以赶紧来体验下,就是前提是有科学上网,要去google的ai studio申请gemini的api key
然后在有科学网络的情况下用node 18及以上的版本安装

1
npm install -g @google/gemini-cli

然后在环境变量里设置gemini key

1
export GEMINI_API_KEY="xxxxxxxx"

接着运行gemini就可以啦
这里我是刚好有个需求,因为娃最近有点不太爱喝奶,经常剩下,想要记录统计下,看看每天的总的奶量
那我就建了个空的目录,并在这个目录下运行了 gemini ,然后输入了我的需求,
原始的诉求是这样
我想要写个网页版小程序,可以按时间记录宝宝每次的奶量,包括泡了多少,剩了多少,能按天统计每天的奶量,以及查看趋势
然后gemini就开始运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
✦ 好的,这个需求很明确,我们可以创建一个名为“奶量备忘” (Milk Memo) 的网页应用来实现它。


这是一个很好的项目,完全可以通过前端技术实现,将数据存储在浏览器中,无需复杂的后端。

这是我的计划:


应用名称:奶量备忘 (Milk Memo)


核心功能:
1. 记录喂奶量:一个简洁的表单,用于输入“冲泡量”和“剩余量”。提交后,应用会自动计算“实际饮用量”并记录当前时间。
2. 每日记录列表:清晰地展示当天的所有喂奶记录,包括时间、冲泡量、剩余量和实际饮用量。
3. 今日统计:在页面顶部或底部显眼地展示当天累计的总饮用量。
4. 历史趋势:一个图表页面,用柱状图或折线图展示最近7天或30天的每日总饮用量,帮助您直观地了解宝宝的饮奶趋势。


技术选型:
* 前端框架: React - 用于构建用户界面,组件化的思想很适合这个应用。
* 样式与布局: Bootstrap - 一个流行的CSS框架,可以快速构建出简洁、美观且移动端优先的响应式布局。
* 图表: Chart.js - 一个强大的图表库,用于实现“历史趋势”功能。
* 数据存储: 浏览器本地存储 (Local Storage) - 无需后端和数据库,所有数据将安全地存储在您自己的浏览器里,简单快捷。


用户体验与设计:
我将采用现代化、简洁的设计风格,确保在手机浏览器上也能获得良好的操作体验。界面会以卡片的形式展示数据,按钮和输入框都会清晰易用。


这个计划听起来如何?如果同意,我将开始着手创建这个应用。

然后我输入了同意他就开始帮我实现了
它会请求我的同意来运行比如npm命令,安装依赖等等
然后就自己运行了npm start 来演示运行这个应用

不算非常有设计感,但是基本的功能是已经实现了
接着我又让它帮我增加了时间选项,以及趋势图查看功能,
接着它就又生成了一版

1
2
3
4
5
6
7
8
9
✦ 功能已经更新完毕。

现在应用具备了以下功能:


* 自定义时间:您可以在添加记录时,精确选择到分钟。
* 视图切换:通过顶部的按钮,可以在“记录列表”和“历史趋势”图表之间自由切换。
* 趋势图表:在“历史趋势”视图中,您可以看到一个折线图,展示了每天的总饮奶量。
* 数据排序:所有记录现在会按时间从近到远排序,方便查看最近的条目。


感觉完成了所需的95%的功能,除了在设计上还能再美观些,以及增加一些服务端存储数据的功能,基本是个比较完善的,我自己都完全没介入,的确ai的发展真的一日千里,另外我还是比较看好谷歌的,没有什么大新闻,就一直努力追赶,现在基本已经是第一梯队了,很好很强大

之前介绍过wsl2的ssh连接问题,但是最近又碰到无法连接的情况,通过一顿查资料
发现了个比较特别的方法
首先可以通过powershell命令查看目前的端口开放情况

1
Get-NetFirewallRule | Where-Object {$_.LocalPort -eq 22 -or $_.DisplayName -like "*SSH*"} | Select-Object DisplayName, Enabled, Action, Direction

这个是查看的22端口或者名称带有SSH的
还可以直接看22端口的入站规则

1
Get-NetFirewallRule -Direction Inbound | Where-Object {$_.LocalPort -eq 22} | Select-Object DisplayName, Enabled, Action

确认下是否已有对应规则,没有的话可以通过下面的命令来添加
方法1:允许所有网络的ssh访问

1
New-NetFirewallRule -DisplayName "WSL2 SSH Inbound" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow

当然这样不太安全
所以我们最好是指定下来源ip
方法二:只允许局域网ip来访问

1
New-NetFirewallRule -DisplayName "WSL2 SSH LAN" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow -RemoteAddress 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12

后面的网段可以根据所需限定
然后可以在所需机器进行访问验证

1
ssh -v user@192.168.xxx.xxx

可以访问了的话说明我们这个就已经放行了,通过这个我们也能发现其实wsl2的这种方式一方面是让linux更加完整,但是对于所处的windows宿主机,想进行一些连通访问就会变得更加麻烦,也算是种取舍

0%