月盾的博客

jenkins代替品

jenkins代替品

月盾
如果你打算搭建一套发布系统,你可能会考虑jenkins,或者其他。 我要介绍的则是一些现成的,使用更简单的工具。没用特殊环境要求的情况下则完全可以代替jenkins。 GitHub Actions gitlab ci 阿里云流水线 coding持续部署 上面只是列举了四类,实际上你会发现市面上的云服务商和代码仓库都提供了类似的工具,虽然有些是收费的,但是也有不少免费的,对于个人来说其实大多数都是够用了。

Centos Appstream Error

月盾
[root@hecs-221218 network-scripts]# yum install rsync CentOS-8 - AppStream 3.4 kB/s | 394 B 00:00 Errors during downloading metadata for repository 'AppStream': - Status code: 404 for https://repo.huaweicloud.com/centos/8/AppStream/x86_64/os/repodata/repomd.xml (IP: 61.172.228.200) Error: Failed to download metadata for repo 'AppStream': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried 解决办法: 修改/etc/yum.repos.d/CentOS-AppStream.repo中的baseurl为 baseurl=https://mirrors.aliyun.com/centos/8-stream/AppStream/x86_64/os/

2010年的笔记本升级硬件,再战10年

月盾
上个月把thinkpad升级了固态硬盘后,彷佛打开了新世界的大门。想起了我2010年买的宏基4741g还在压箱底,何不也来次大换血? 这都2023年了,高性能的笔记本一抓一大把,14年前的电脑早该化成灰了,还有必要使用吗? 我想要升级老电脑的原因主要有两点: 就是玩,本人就是一个电子爱好者,平时就是喜欢把家电修修补补。 对于只是日常办公够用就行,不太追求极致的性能体验。 宏基4741g属于2010年的产品,当时买来是用于学习计算机使用的,一直用到2016年,期间也有过多次维修经历。因为散热差,经常因为工作开太多程序导致意外关机,所以购买了Thinkpad T450,从此让我有了最差的电脑使用体验。好在后来大多数时间都是使用公司提供的电脑,Thinkpad就放家里看看电影,写代码根本不想打开它,开机6分钟,命令行提示卡十几秒。而用了6年的acer 4741g都没让我受过这气。 所以,基本可以确定,10年买的宏基4741g在性能上比16年Thinkpad T450好不少,如果升级一下硬盘和内存,使用体验肯定不会差。 然后就是35元买了120G固态硬盘,35元的4G内存,10元买了硬盘盒。原来是32位win7系统,现在重装了64位win7,这样一升级性能至少翻倍,再用10年没毛病吧。
Thinkpad T450加装固态硬盘记录

Thinkpad T450加装固态硬盘记录

月盾
2016年初花大价钱买的thinkpad t450准备用来工作,结果发现性能太差,根本满不了需求。于是就放家里日常使用,即使这样还是无法忍受它的慢,慢到什么程度呢?开机到桌面3分钟,再到打开程序3分钟。这还不如我2010年买的2G内存i3电脑性能好。后来把内存从4G加到8G没有明显提升,那就剩下CPU和机械硬盘的问题了,CPU是低压版i5 4300U,和主板焊在一起,没法升级。前几年就想升级硬盘,但是那时候固态硬盘价格不便宜,也没有着急升级。直到最近才忍受不了,下定决心升级一下。 升级过程并不顺利…… 首先是确定支持的接口,thinkpad t450已经装了一块16G固态硬盘,接口是M.2(即NGFF,现在已经改名为M.2了) 真实尺寸很小,22*40mm大小,就是2240型号。2280型号意思就是宽22长80,自然就是更大尺寸的。选择的时候要注意不要选错。 安装好以后使用傲梅分区助手进行系统迁移(之后遇到很多问题),然后在bios里修改启动顺序,结果左上角的光标一直闪,无法进入系统,修改为原HDD硬盘后还是可以启动的。网上有说法是磁盘盘符冲突,按照方法在注册表中调换盘符后还是进入不了系统,甚至原来的磁盘系统也进入不了。 无奈,只能重装系统。但是不能在原来的盘里装,需要直接装套SSD固态硬盘上。准备了8G U盘,4G肯定是不够的,win10系统就有4.5G以上了。下载winpe,直接安装到U盘里,然后将下载好的win10系统拷贝到winpe工具箱里。 再修改启动顺序重启系统,这时候也出现问题,识别不到U盘,我是在系统启动后再插上U盘,如果直接插上再启动就会识别不出来。进入到pe系统后首先通过系统安装器安装系统,又出现找不到iso系统文件的情况,重插U盘解决。但是选择目标盘后MBR始终是黄色,无法变成绿色,最后通过CGI工具还原的方式成功安装。 安装成功重启又出现boot menu界面,死活进入不了系统,这个是由于在bios中修改过启动方式引起的。有uefi和legacy两种模式,设置为both兼容模式启动。至此算是安装成功。 由于加了SSD固态硬盘,原来的盘符也有变化,SSD成了C盘,原来的C盘变成了D盘,以此类推。手动把原盘中的快捷方式拷贝过新盘,都用不了,可以通过属性-修改路径的方式修正。个别软件缺少dll动态链接库也可以从原盘找到,有两个目录可以查找windows-System32,windows-Syswow64。 总结:系统启动时间由3分钟提升到了30秒,到桌面也可以直接操作,不需要再等3分钟才能做操作。

Ld Warning Object File Was Built for Newer MacOS Version Than Being Linked

月盾
go run和go build会报出一连串下面这样的警告信息,虽然不影响程序运行,但是看着难看。 # command-line-arguments ld: warning: object file (/var/folders/9p/2x3ls9kn7qb59hf9l9mtfs8s6rbmfg/T/go-link-3994413096/000000.o) was built for newer macOS version (12.0) than being linked (11.0) 解决方法:CGO_CFLAGS=-mmacosx-version-min=10.12 go run main.go,运行前加CGO_CFLAGS=-mmacosx-version-min=10.12参数可以解决。 vscode中可以通过配置launch.json文件实现: { "version": "0.2.0", "configurations": [ { "name": "Launch Package", "type": "go", "request": "launch", "env": { "CGO_CFLAGS":"-mmacosx-version-min=10.12" }, "program": "${fileDirname}", "args": [], "cwd": "${fileDirname}" } ] } 或者从文件中读取环境变量: { "version": "0.2.0", "configurations": [ { "name": "Launch Package", "type": "go", "request": "launch", "envFile": "${workspaceFolder}/.env", "program": "${fileDirname}", "args": [], "cwd": "${fileDirname}" } ] } 如果是在vscode中执行测试代码,则需要设置settings.

Sveltekit1.0后的使用感受

月盾
之前提到过关于svelte框架——sapper和sveltekit的发展,已经是1年前的事了,其中提到过svelte的框架sapper和sveltekit,sapper已经明确不再更新了,官方推荐的是sveltekit。然后经过两年的迭代更新,于2022年12月终于推出了1.0版本。可以看看官方博客对1.0的介绍Announcing SvelteKit 1.0。 然后谈谈个人感受。 优点: sveltekit集成的还不错,开发体验可以,使用官方提供的脚手架创建的项目就可以直接使用,不需要做任何配置。热更新,响应速度快,支持typescript等等,该有的都有了。 缺点: 又是一个全新轮子,这也是整个前端的通病,除了js是通用的,其他的都能给你整出花来,sveltekit在1.0版本之内已经有破坏性的更新,一年前创建的新项目,一年后基本不能用了。 至于要不要使用,那就看个人情况了,如果你厌烦了其他框架,倒是可以尝尝鲜,如果你想以此来做长期项目的话,个人就不推荐了,毕竟太新,而且向下兼容又做的不好,隔三差五一个破坏性更新,这种折腾劲恐怕没几个人受得了。而且对自己的技术也不能积累,长此以往并没有好处。 sveltekit官方文档

Elasticsearch批量insert和批量upsert

月盾
golang版本的elasticsearch批量插入和批量更新方法如下: package main import ( "github.com/elastic/go-elasticsearch/v8" "github.com/elastic/go-elasticsearch/v8/esutil" ) func main() { list:=make(User, 0) bulkES(list) } func bulkES(list []User) error { indexer, err := esutil.NewBulkIndexer(esutil.BulkIndexerConfig{ Index: "search-user", Client: ES, }) if err != nil { return err } for _, v := range list { data, err := json.Marshal(v) if err != nil { return err } err = indexer.Add( context.Background(), esutil.BulkIndexerItem{ Action: "index", Body: bytes.NewReader(data), }, ) if err != nil { return err } } indexer.

go http响应乱码

月盾
golang请求接口返回的数据乱码,原因之一是请求头设置了"Accept-Encoding": "gzip, deflate, br",那么如果服务器支持的话响应的数据就会经过gzip,deflate,br等方式的压缩,解决方式是对数据解压,或者可以不设置接收方式,即"Accept-Encoding": "" import "github.com/andybalholm/brotli" import "compress/flate" import "compress/gzip" // 检测返回的body是否经过压缩,并返回解压的内容 func contentDecoding(res *http.Response) (bodyReader io.Reader, err error) { switch res.Header.Get("Content-Encoding") { case "gzip": bodyReader, err = gzip.NewReader(res.Body) case "deflate": bodyReader = flate.NewReader(res.Body) case "br": bodyReader = brotli.NewReader(res.Body) default: bodyReader = res.Body } return }

chrome开发者工具显示接口完整路径

月盾
chrome浏览器的开发者工具是前端开发必不可少的工具,其中接口查看是最常用的功能之一。默认情况下显示如下: 主要是红框内的接口显示只有很短的名称,并没有完整的显示出整个接口,这对于一些最后名称一样的接口就不能知晓是哪个接口了,只能点击查看详情。我们希望的当然是能够显示完整的接口,实际上也是能做到的。 在名称栏上右击: 可以显示很多选项,其中路径和网址就是我们先要的,点击以后就可以显示完整的接口路径了。

postman header中自动添加cookie

月盾
使用postman进行接口测试时,经常需要使用到cookie参数。我们会先调用登陆接口,得到sessionid,然后使用sessionID来调用其他需要登陆的接口。 但是有些情况下,cookie不会自动添加到header中,总是需要手动添加cookie。或许又发现有的接口却能自动添加上cookie,为什么会区别对待呢? 其实这是postman根据登陆接口返回的cookie来操作的,如果cookie的path指定来某个路径,那么所有在这个路径下的接口都会自动加上cookie。