Saturday, June 11, 2022

V2EX - 技术

V2EX - 技术


请问两台电脑之间该如何配置 git

Posted: 11 Jun 2022 11:37 AM PDT

git 好像是使用 name+邮箱来判断用户的
那么是不是如果我想用同一个身份在两个电脑的提交的话
就在第二个电脑也用同一组 name+邮箱来设置身份呢?

一般推荐两个电脑用同一个身份吗?

架构师主要工作是干啥的,和普通开发有啥区别?

Posted: 11 Jun 2022 11:33 AM PDT

国外大厂有月付 10 美元以内,容量和流量都有 3TB 的存储服务吗?

Posted: 11 Jun 2022 10:54 AM PDT

按美区价格计算。OneDrive 家庭版一人开 6 号这种违反 ToS 的方法不算。

吐槽一下使用 Azure Static Web App 的上头经历

Posted: 11 Jun 2022 10:34 AM PDT

最近写了个 React 的小玩具,正好看到 azure 的 static web app 支持 preview environment + GitHub Actions + SSO + API Function 等功能,就用上了。 SWA 预览环境和 GitHub Actions 集成的相当好,提每个 MR 会自动生成预览环境,也可以用固定的几个分支。 用起来还是挺舒服的,不过这是纯静态的情况,在尝试联动上 API Function 时开始上头了……

首先这个 azure-function-core-tools 安装就是个问题,国内没配置 CDN ,拉取时还不认代理。 费劲千辛万苦总算一点点拖回来了,一启动还蓝屏…… 没错,是蓝屏,Win 11 + WSL + Azure ,明明都是微软的,一起用居然会蓝屏。 最后没有办法,重新实现了一套不依赖 Azure Function 框架的 API Server 用于调试,还好内容不复杂。

调试完了发 PE ,用了两下觉得没啥问题,就发到 prod 上了。 没过一会朋友发来反馈说登陆页面打不开,F12 跟踪了一下跳转路径后发现跳转顺序是:

  1. 你的 App 域名 + /.auth/login/github
  2. identity.1.azurestaticapps.net
  3. identity.1.azurestaticapps.net
  4. github.com

然后多地移动朋友拉不下来页面 2 ,但联通电信可以,且 DNS 解析出的是同一个 HK 的 IP 。 真不清楚是不是移动给搞了什么幺蛾子 23333

生活不易,狗狗叹气.png

自荐一个我开发的小工具 typora-upload,专为 markdown 图片上传而生,提升生产力

Posted: 11 Jun 2022 10:31 AM PDT

typora-upload

项目地址: https://github.com/TyrantLucifer/typora-upload

欢迎大家的⭐⭐⭐

基于 typora 图片上传协议开发的笔记图片上传插件

痛点

相信很多程序员都有着使用 markdown 语法记录自己笔记的习惯,对于在笔记中插入图片有利于我们后期维护笔记和回复笔记,图文并茂可以更快的让我们 get 到自己的点。可问题随之而来:

  • 图片保存在本地容易丢失,在更换电脑之后,资料全部清零的感觉很不好受

  • 图片保存在云端会产生费用成本,目前各家图床供应商价格不一,且各家平台对接 api 不一致

  • 市面上的笔记保存服务商有很多,将图片保存到他们服务器下也可以,但百分之 90 服务商会设置防盗链,你的图片只能在笔记服务商的软件环境下才有效,依然有跑路的风险

基于以上几点的需求,我们可以得到这么几个关键词:云端 速度快 图片可复用 无跑路风险

笔记工具的选择

大家或多或少都在使用各家笔记的服务商来作为自己的平台保存经验,比如知名的有:为知笔记 印象笔记 notion等,无一例外,这些笔记提供商都有一个通病,那就是本身笔记自带的编辑器并不好用(个人看法,不代表全部)。

大多数人更喜欢市面上免费许久(严谨一点说现在正式版已经收费,过去的测试 beta 版本不收费)的Typora情有独钟,包括我在内,几乎无人能超越,结合这几点,我总结出了笔记记录的最佳实践:笔记服务商提供数据保存 + Typora 编辑笔记 + 图片保存在云端(oss, github etc...)

萝卜青菜各有所爱,这只是我个人看法,不代表全部,求别杠

使用

目前Typora已经支持自定义脚本上传图片,所以我们需要开发一个小小的上传工具即可,在这里我选择了使用 Python 进行开发,对接不同的云存储平台去上传图片,目前小插件仅支持 github 、oss ,后续如果有新的需求会持续开发。

    usage: typora-upload [-h] [-u file_path] [-s storage] [-i storage] [-v]      The typora image upload plugin based Python.  optional arguments:   -h, --help            show this help message and exit   -u file_path, --upload file_path                         upload image file   -s storage, --storage storage                         storage type   -i storage, --init storage                         init storage config   -v, --version         display version 

安装

  • 源码安装
git clone https://github.com/TyrantLucifer/typora-upload.git cd typora-upload python(python3) setup.py install 
  • pip 安装
pip(pip3) install typora-upload 

配置云存储参数

注!!!:第一次安装之后此步骤必须进行,默认存储云盘会设置为 oss

typora-upload --init 云存储类型 

oss

参数 备注
access_key_id oss access_key_id ,oss 密钥 id
access_key_secret oss access_key_secret ,oss 密钥
bucket_name oss bucket_name ,oss 存储桶名称
endpoint oss endpoint ,oss 存储地区
path_prefix image upload path prefix, do not end with /, for example, if you want to upload image to/image, this parameter should be set to image,上传到的 oss 路径
domain_name oss public domain address ,do not start with http:// or https://,oss 公网访问域名,不带 http://或 https://协议头

github

参数 备注
user github username ,github 用户名
repo github repository name ,github 仓库名称
path_prefix image upload path prefix, do not end with /, for example, if you want to upload image to/image, this parameter should be set to image,上传到 github 仓库的路径
token github api token

配置 typora

打开 typora 的文件 -> 偏好设置 -> 图像,在上传服务设定里选择Custom Command,命令中填入typora-upload -u

image-20220611204431495

效果展示

image-20200811002037476

trzsz 已实现 “拖文件自动上传到远程服务器”,支持多种平台的原生终端。

Posted: 11 Jun 2022 10:23 AM PDT

1 、在本地使用 trzsz -d ssh x.x.x.x 登录服务器。加 -d 是开启拖文件上传功能,默认是不开启的。

2 、将 trztsz 放到服务器某个 PATH 目录下,要有可执行权限。执行命令 trz -v 不会报错即可。

项目地址:https://github.com/trzsz/trzsz-go ,给个 Star 支持下?

Release 中下载的 zip 里就是三个 trzsztrztsz 可执行程序,也可以自己 clone 下来 make 编译。

在 Mac 上的效果如图(也支持 Windows 和 Linux 的):

踩坑指南(特别是 Windows ):

1 、trzsz ssh 时记得加上 -d--dragfile,如 trzsz -d ssh x.x.x.x

2 、记得将 trz 放到远程服务器某个 PATH 目录下,要有可执行权限。

3 、在 Windows 的 cmd 、PowerShell 、Terminal 上,标题不要有"管理员",即不要"以管理员身份运行"它们,要不然可能拖不了文件。在我的电脑上 Terminal 总是以管理员运行,后来设置一下 UAC 重启电脑就好了。

4 、在 Windows 的 cmd 、PowerShell 中,拖多个文件进去,也只有一个文件生效的( 鼠标指向那个 )。

5 、在 Windows 的 Terminal 中,要拖文件到左上角,出现"粘贴文件路径"时再放开鼠标,要不然没用。

有没有能比较准的天气预报

Posted: 11 Jun 2022 09:58 AM PDT

能预测当天什么时候下雨。

想问下用过 Nexus5x 的有多少人🤣🤣🤣🤣🤣

Posted: 11 Jun 2022 09:58 AM PDT

最近 n5x 丢回抽屉了(状态正常,能开机)

怎么优雅的获取 TOML 的动态 map

Posted: 11 Jun 2022 09:52 AM PDT

比如想实现这样一个配置

users []user  type user struct {     username string     password string } 

这个 toml 应该是长啥样呢?

就是什么格式和解析或什么格式的 struct 才能实现像 php 那样的:

$arr = [     'users' => [         ['username'=>'1', 'password' => '1']     ] ];  // foreach ($arr['users'] as $item) if $req['user'] == $item['username'] ..... 

场景是一个特别小的内部使用的用户配置文件。在这个配置里面的才能访问这个服务不值顾搞套数据库。

你是不是也在找一个好用的 Markdown 编辑器?

Posted: 11 Jun 2022 09:45 AM PDT

缘由

楼主从大学期间开始使用 Markdown ,从最开始的为知笔记,到后面马克飞象,到了工作时候用过 Ulysses ,后面找到了 Quiver 用了很久,也用过 MWeb,买过 Bear 的年会员,最终最终还是没有一个好用的让我满意。

Ulysses 主要问题是,没有预览的功能,还贵

Quiver 其实挺好用的,不过已经快 3 年多没有更新了,作者应该放弃了,最近最新的 Mac 系统输入时候还有一定兼容问题

MWeb 不少人说很好用,不过我觉得还是太复杂了

Bear 是真的漂亮,但是很多 Markdown 格式都不兼容,最后还是给放弃了。

3 年前自己学 iOS 开发的时候,慢慢想要不要做一个笔记应用,于是乎前年过年的时候疯狂敲了一段时间代码大概模子可以跑起来了,自己用着,今年来周末不少时间慢慢优化优化着,就当做敲快乐的代码的方式完善了这个工具,感觉使用得还凑合,不能说好用,想着可以开始放出来,给大伙试试了,帮忙提提建议。

重新介绍一下

前几天在 V 站上发布了她的 Readme ,可见 更适合程序员的 Markdown 笔记应用 - 妙言, 此处就不啰嗦太多了。

这个软件叫做 妙言,妙不可言,表示很妙的语句,大概是这个意思,还比较文雅的样子。

用 Swift 写的,相比于纯 Web 套壳的方式体验还是好不少,哈哈,你应该已经受够了套壳的 MacOS 应用了。

刚好周末做了一个官网用纯 HTML 搞的,比较快,同时软件也支持了英文,如下,顿时觉得我是一个野生设计师的感觉了。

https://miaoyan.vercel.app/

png

最后

假如你觉得好用,可以帮忙提提建议,比如说你觉得哪些好用的功能的功能可以加上去,或者去 Product Hunt 点个赞,让老外也来试试效果。

资深 .NET 想转 Java 有啥基于 Spring Boot 的项目推荐?

Posted: 11 Jun 2022 09:41 AM PDT

想转 Java 的背景和原因

.NET 资深开发一枚,由于 .NET 岗位不多而且工资上限也相对较低,自己会一些 Java ,两个语言差异不大,因此觉得转 Java 成本应该不高,打算业余时间学习或使用 Spring Boot 做个项目提升 Java 技能。

以后找工作可以多个选择,技多不压身。 Java 的轮子是最多的,自己用 Java 做东西也能有更多选择。

觉得不应该只把自己只局限和绑死于一个平台上。

打算从学习 Spring Boot 开始

不过 Spring Boot 默认项目里面全是空的,对于我来说直接看一个复杂项目代码学习起来会更快,各位大佬有没有基于 Spring Boot 框架的开源项目推荐?

Electron 开发的应用如何做用户统计呀?

Posted: 11 Jun 2022 08:41 AM PDT

最近开发了一个桌面应用, 已发布有用户了, 想看看用户量, 但是试了 Google Analytics 不能用...

搜了好久貌似都没桌面端用的服务呀, 基本都是网站用的, SO 各位大佬有解决方案吗?

还是说这是个伪需求?

请问怎么实现两台电脑之间同步代码

Posted: 11 Jun 2022 08:38 AM PDT

家里一台,公司一台。有时候下了班回家了还想用家里的电脑继续写代码。用 git 的话问题在于,我不能写一半就提交,必须完成一个功能点再提交一次。而且 git 都是从公司公共的仓库拉的,总不能写个半截提交到公司的 git 上让领导看见吧

面 Java 岗位可以用 C++答题吗

Posted: 11 Jun 2022 08:14 AM PDT

感觉 C++写起来更舒服一些

iOS 腾讯云管理工具, 有没有实现, 有没有需求?

Posted: 11 Jun 2022 07:24 AM PDT

我有一个简单的需求: 腾讯云轻量应用服务器流量查看和提醒.

现在写了个小工具自动记录并通过一些平台 (比如微信, 钉钉) 通知我, 但没有 UI 及交互界面.

如果进一步, 是做 Web 应用还是 iOS 应用?

我是 ServerCat 的用户, 所以倾向 iOS 应用.

(腾讯云当然是有能力做好的, 但出于商业考虑他们应该没有兴趣, 不过有足够 API 提供出来, 用户可以自己做. 可能是用户需求不大, 没发现市面上有相关软件)

https://developpaper.com/ 这个站是什么来头?

Posted: 11 Jun 2022 06:34 AM PDT

Google 搜很多技术问题都导向了这个网站,https://developpaper.com/about-developpaper/ 说这是个教程站,但看首页这更新频率和内容怎么看都像是自动采集+翻译农场。前几个月才清完一波采集站现在又来一波

如何转移 Google Drive 文件夹到另外一个 Google 账户

Posted: 11 Jun 2022 05:35 AM PDT

Google Drive 没有提供简便的方法直接转移、保存文件夹到另外一个非同一组织账户的功能 通过分享功能,只能复制单个文件,不能直接复制整个文件夹,导致多级文件夹分享没法直接复制一份 各位有什么快速简便的方法吗?

有什么简单、廉价、可靠的设备可检测弓片的蓄力程度?

Posted: 11 Jun 2022 05:02 AM PDT

如题,想给弓箭加个瞄准器,瞄准器根据弓箭的蓄力、箭头长度等参数自行预测箭的轨迹

可是卡在检测蓄力这关了,很多弓片的材料性能参数是不同的,需要一个设备检测弓片的蓄力。。。。

C+ 23 将引入标准库模块支持,编译速度提升 10 倍

Posted: 11 Jun 2022 04:06 AM PDT

"模块不仅能提高编译速度,还能统一普通函数和模板的源代码组织方式。.h 文件和 .cpp 文件之间的区别消失了,C++ 源代码从根本上得到了简化。最终模块将使开发者组织代码的方式发生巨大的变化。"

个人感觉这将是最务实的一次更新

更改 DNS 后 ds.v6ns.jp2.test-ipv6.com 无法解析

Posted: 11 Jun 2022 03:59 AM PDT


www.test-ipv6.com 中进行 IPv6 测试,发现在使用 DNSPod Public DNS
或者 AliDNS 后会出现"你的 DNS 服务器(可能由运营商提供)没有接入或没有配置 IPv6 ,将来这可能会妨碍你访问纯 IPv6 网站。"的提示,使用运营商下发的 DNS 地址却不会出现此类情况。
在使用阿里云 DNS 检测工具后发现似乎确实如此。

windows 不支持设置 dns 为 127.0.0.1 了吗

Posted: 11 Jun 2022 03:41 AM PDT

win11 版本号 22621
本地启动了一个 mosdns 服务,监听 tcp udp 53 端口 然后网络配置那边设置为 127.0.0.1 ,域名都不能解析,使用 nslookup 解析是正常的,至少说明 mosdns 服务是正常的。为什么 windows 不能使用自己启动的 dns 服务。

请教一下,群晖系统,文件系统选择 btrfs 还是 ext4,我的要求就是换系统后,硬盘的内容依然能够再读出来

Posted: 11 Jun 2022 03:03 AM PDT

如图,买了一个黑群晖,硬盘插上去,创建存储池选择的是 basic

现在创建存储空间,选择文件系统时,不是很清楚该选哪个? btrfs or ext4 ?

我的要求主要就是,如果将来我换新的群晖机器了(比如白群,等等),把当前的这块硬盘拔下来,插到新机器上,文件依然还在,能够继续用,不会识别不了,或者要再次格式化才能够使用。或者,现在的系统坏了,我要把硬盘挂到其它的,比如 windows 或者 linux 机器上,把内容备份 /拷贝出来。

有没有兄弟知道的,谢谢!

PIC_20220611001.jpg

win10 台式插音响声音非常小

Posted: 11 Jun 2022 02:45 AM PDT

还没插手机上声音大,插耳机上声音也非常小,一定要开到 100%才能勉强用

音响耳机都已在其他设备上证明没问题,只能是主机的问题了

在设置中所有能拉到最大的音频设置都尝试过了

也更新了 Realtek 的驱动,还是没效果

一点后端架构设计的总结

Posted: 11 Jun 2022 02:43 AM PDT

开始最一些工作进行技术总结,注册了个公众号没几天,欢迎关注。

这篇文章有点水,本来在写 《海外运营体系的设计》,思路没了,写个别的.

https://mp.weixin.qq.com/s?__biz=MzkyNTMyODc2Mw==&mid=2247483725&idx=1&sn=a801de8cf73ee4be77a13680a32a6772&chksm=c1c97559f6befc4f15f0ab2bf459555f0aa4527c7fb751058cb9a5914e83bc067e2adc9053dd&token=203687336&lang=zh_CN#rd

thebyte

前端使用 Firestore 有什么建议吗?

Posted: 11 Jun 2022 02:31 AM PDT

第一次使用 Firestore, 数据都是前端直接对 db 进行读写. 用 firestore 之前, 进入新页面调用相关 API, 后台接收到请求进行验证+数据处理. 而使用 firestore 后, 前端需要直接操作 db 字段, 需要后端做的只有监听, 比如有多个字段关联, 监听到某字段更改后, 需要后端对相关字段进行处理.

所以有一部分逻辑(REST API 后端的逻辑)在这种模式下需要前端来做, 前端的代码架构需要调整, 比如 REST API 的架构, componentDidMount 进行页面数据请求, button 点击进行网络请求. 而 firestore 架构下, 进行网络请求需要换成 db 读写操作. 这会让代码发生变化.

所以在想, 前端有必要写一套类似后端 REST API 的接口吗? 当页面 didMount 或者按钮点击时候, 直接调用前端自己的封装方法. 这些方法里面对 firestore 进行读写, 并且有相应的成功回掉以及错误类型等.

其次, firestore 这种模式叫什么(对标 REST API)?

其他大厂或者国内有无 Firebase Firestore 这种东西?

和 gql 对比呢?

firestore 比较适合什么项目?

优缺点有哪些?

欢迎大家提供建议.

Windows 10+添加的就近共享功能在和同事共享文件时非常方便, 但为什么需要蓝牙支持?

Posted: 11 Jun 2022 01:16 AM PDT

Windows 10+之后, 系统添加了就近共享功能, 但这个功能需要蓝牙, 在局域网内, 它传输走到是 WIFI 协议, 速度很快, 但一旦没有蓝牙, 此功能就直接不能开启. 很多同事的电脑是旧的台式机, 没有蓝牙, 就用不了此功能, 让他们买个蓝牙装上有不大情愿(一群老古董), 这就导致传文件变得一点都不方便.

求助一下现在 p2v 转换到 pve 一般都用什么软件?

Posted: 11 Jun 2022 01:02 AM PDT

求助一下现在 p2v 转换到 pve 一般都用什么软件? vm converter 好像不能用了, StarWind V2V Converter 必须转换到 exsi 服务器上,不知道如何成为一个镜像, disk2vhd 是 windows 的 hpyerx 的

想着把实体机转到 pve 里面去,请教大家有什么安全稳定的好办法吗?

新项目再轮 asyncio 实现: kLoop

Posted: 11 Jun 2022 12:49 AM PDT

楼上读完《 Python 工匠》的同学们需要及时实践,欢迎来新项目一起锻炼!

kLoop 是 asyncio 的(又)一个实现,用 io_uring 做主循环,搭配 kTLS 实现高效 SSL 连接。

开发上手介绍: https://juejin.cn/post/7104795466809753607

项目地址: https://gitee.com/fantix/kloop

开这个项目最初是因为老板嫌 uvloop 里的 SSL 实现太慢,让我看看能不能把 Linux 的 kTLS 用起来。拖了小半年了吧,主要不是工作任务。最近忽然上瘾了,看了看好像确实可以实现,如果再加上 io_uring 做主循环,理论上应该能比 uvloop 快不少。但是老板说这样的话,产品上之后可能还是要"用 Rust 重写",那 kLoop 我就自己搞着玩儿吧。

写这篇介绍的文章呢,主要是想换一种挖新坑的思路。之前是自己先咔咔写,然后再补文档做网站什么的,基本上就是一两个人主要开发。这次先把开发指南搞了出来,看看能不能出现大家一起写代码的场面。

项目主要使用 Cython 编写,DNS 解析部分混入了 Rust 。整个基础结构已经都有了,接下来的任务分工也相对比较清楚,几个大块都可以并行开发。开发环境有个 Ubuntu 22.04 就行,详见介绍文章。

欢迎讨论!记得帮我点星星。

antd 全局样式污染问题,慎用

Posted: 11 Jun 2022 12:14 AM PDT

之前做了个网站hackertalk,在 v2 发了帖子很多人关注。

最近把前端代码优化下,剔除了全部 antd 依赖,发现 css 体积减少 24.2%,javascript 体积减少 7.8%

antd 的样式全局污染有点严重,引入少数组件就吃掉大量静态文件体积了。

对接微信二维码支付,发现客户扫码没法用信用卡支付?

Posted: 11 Jun 2022 12:08 AM PDT

前一段对接了一个微信生成二维码支付功能,发现有的客户绑定的是信用卡,但是是置灰状态无法使用信用卡。在后台研究了半天也没找到解决办法。有没有对接过的朋友,怎么解决这个问题。

其实我知道有一个商家付款码是支持的,但是不需要对接暂时不考虑。

压测中吞吐量骤降的诡异问题

Posted: 11 Jun 2022 12:00 AM PDT

最近在给服务做压测,出现了一个诡异问题。服务部署在三台机器上,请求链路是 压测机 -> LB -> nginx -> 后端服务,其中 nginx 与后端服务同机部署,LB 将请求转发到 3 台机器的 nginx, 每台 nginx 再将请求转发到 3 台机器的后端服务,并且开启了 HTTP 长连接。服务是基于 Spring 的,server 用的 jetty 。

  1. 服务启动后,第一波压测,3500 并发,QPS 接近 5W ,RT 70ms ,此时都是正常的
  2. 停止压测机,开启了第二波压测,3000 并发,稳定后 QPS 降到 15000 左右,RT 上升到 200ms
  3. 检查后端服务监控,请求耗时正常,jstack 打印堆栈发现,jetty 中大量工作线程空闲. 检查 nginx 日志,耗时也正常
  4. 重新压测,QPS 仍然在 15000 左右,没有提升. 压测过程中重启 nginx ,稳定后 QPS 无变化,重启后端服务,QPS 无变化。停止压测后,重启后端服务,再次启动压测,QPS 恢复到 5w

想问下各位有没有遇到过类似的问题,或者有没有什么排查的思路,感激不尽

为什么 google ad manager 不显示 adsense 广告

Posted: 10 Jun 2022 11:38 PM PDT

通过 google ad manager 创建了单元,创建了订单项,创建了广告素材,并且显示该广告素材的广告,有个疑问,为什么删除这个广告素材的情况下,不会自动显示 adsense 的广告。 目前 google ad manager 是没有关联项的,据说是自动关联该邮箱的 adsense 账号。 昨天设置都显示 adsense 的广告,瞎搞了下,搞了一上午,没成功显示 adsense 的广告。

有没有什么手势插件,能拖拽文本+直接调用 google translate?

Posted: 10 Jun 2022 10:33 PM PDT

Chrome 浏览器。

求助,谢谢。

5000 以下笔记本电脑求推荐

Posted: 10 Jun 2022 06:37 PM PDT

我表姐想买个笔记本电脑,平时没事了学哈做表格和 ppt ,好久没研究笔记本了,都不太了解了,大佬们有没得啥推荐的啊,性价比高的,最好 5000 以下的,谢谢大家了

k8s 奇怪问题的解决过程

Posted: 10 Jun 2022 03:24 PM PDT

ingress route 中某个域名证书过期了,准备换一下 结果换了 2 个小时 尝试了 n 种方法都没换成功,最后成功很戏剧性

  1. 将 secret 中 证书和私钥更新 无效
  2. 重启 ingress controller 无效
  3. 删除 tls secret 并 新建 同名 tls secret 无效
  4. 重启 ingress controller 无效
  5. 新建 tls secret2 并将某个 ingress route 的 secret name 换成 secret2 无效
  6. 重启 ingress controller 无效 这时候我有点蒙了,开始怀疑证书是用的阿里云负载均衡的,上去看了一下不是. 并将 ingress controller pod 缩减到一个 并抓包那台主机 tls server.hello.cert 消息 发现 nginx 返回的 tls 证书还是旧的.
  7. 添加新 ingress route 域名用新的比如 api-2.xx.com 使用 tls secret2 证书 访问时证书显示是最新的 说明新域名没问题 tls secret2 也没问题 但是旧的 ingress route 访问还是旧证书 无效
  8. 将所有 ingress route secret name 全部换成 secret2 并重启 ingress controller 无效
  9. 删除 secret1 并重启 ingress controller 此时 k8s 中已经没有旧证书的信息了,但是访问还是返回旧证书 无效
  10. 将 ingress controller pod 切换到一台全新的主机 证书还是老的 无效
  11. 更新 ingress controller 为最新版 并重启 无效 此时再次崩溃 去查 ingress github 的 issue,也有跟我遇到一样问题的人 他们说的方法我都试过了 此时我怀疑是 ingress class 的 bug 了.因为我都把证书删光了还给我返回
  12. 新建 ingress class 用另一个版本 并将 ingress route 的 ingress class 更新为新建的 ingress 无效

刚开始我还进 ingress pod 中 查看了 nginx.conf 搜索了 tls 证书加载方式 发现是 lua 从 k8s 集群中给他返的 在 pod 里根本没有 crt 和 key 这 2 个文件 不像其他的直接弄个目录挂载

此时我已经在怀疑我自己了,是不是第 8 步我改名的时候 有漏的没改的 我已经准备再改一遍了 就去喝了水眺望一下 回来时 1 分钟解决!

我们应用层所有的 depo 都在 beta 和 prod2 个 ns 中,default ns 是不用的. 但是 default 中有个 ingress route 用到了 tls secret1. 这个 route 是我搭建 k8s 时测试的.一直没删. 我准备检查第 8 步的时候发现了这个!

最终. 将 default 下 ingress route secret name 更新为 secret2 重启 ingress controller 成功!

这个问题太搞人了,我之前就搜过更新证书方式 基本都说是更新一下 secret 就行了 也有说要将全部 route 更新 secret name 的 我觉得这个不现实,我们成百上千个 route 一个个改 改到什么时候. k8s 没有这种弱智.就不相信. 没想到还就得这么改 我真是服了漏一个都不行. 我个人的最大错误在于思维定式 没想到除了 beta 和 prod 还有其他 ns 有 ingress route 用着旧的证书,以后一定注意.做就要做全部

ocr 时,怎么才能让终端不输出 libpng warning: iCCP: profile 'ICC Profile': 'RGB ': RGB color space not permitted on grayscale PNG

Posted: 10 Jun 2022 03:05 PM PDT

各位 v 友,我所了解到,默认的截图保存格式都是 PNG 为主,为了提高 ocr 的识别精度,又会作灰度处理

但无论是 paddleocr 还是 easyocr ,识别过程中都会在终端输出这句: libpng warning: iCCP: profile 'ICC Profile': 'RGB ': RGB color space not permitted on grayscale PNG

通过搜索,了解到这是 libpng1.6 以后开始的提示,似乎对 grayscale PNG 都有这个提示,实际 ocr 不影响。但一番搜索找不到没有任何参数开关可以 ignore 这部分输出。

暂时查到的解决方案

1.是通过 ImageMagick remove ICCP chunk 。mogrify *.png
2. 放弃 png ,采用 jpg

这两种操作,似乎都会额外增加开销,(比如处理时间,比如额外的空间)实际上我需要的只是希望在 mac 的 terminal 输出我的 ocr 结果同时,不要看到这句提示,保持干净。有正确方法吗?先谢谢大家

开源日志监控平台 0.8-RELEASE 发布, v 友们帮忙提提建议

Posted: 10 Jun 2022 01:32 PM PDT

项目地址

https://github.com/AutohomeCorp/frostmourne

✨ 主要功能

  • 只需要写一条数据查询就可以轻松搞定监控

  • 多种数据源支持:Elasticsearch, HTTP, SkyWalking, Prometheus, InfluxDB, MySQL/TiDb, ClickHouse, PING, IotDB, Telnet

  • 数值计算类型监控:count, min, max, avg, sum, unique count, percentiles, standard deviation; Elasticsearch数据支持分桶

  • 多种报警消息发送方式:钉钉(机器人)、企业微信(机器人)、飞书机器人、Email 、短信、HTTP

  • 多种消息格式:text, markdown

  • 灵活的报警消息Freemarker模板定制,支持变量占位符;消息模板管理

  • 分布式调度实现,每个监控都是独立调度,互不影响

  • 报警消息附带日志查询短链接,直达报警原因

  • 数值同比,环比监控

  • HTTP数据监控, Javascript表达式判断是否报警; PING连通监控, Telnet端口连通监控

  • 前端简单易用:监控管理、测试、另存、执行日志和历史消息

  • Elasticsearch数据查询、分享和下载

  • 报警消息抑制功能,防止消息轰炸;也有报警升级功能,避免故障相关方长时间得不到通知。

  • 自带账号,团队,部门信息管理模块,也可自己实现内部对接

  • 集成LDAP登录认证

  • 权限控制,数据隔离,各团队互不影响

    消息效果截图:

    Elasticsearch数据监控指南

下面以程序日志错误监控为例子,说明创建一个Elasticsearch监控的过程

1. 添加Elasticsearch数据源

打开页面:数据管理->数据源,点击新增按钮,弹出窗口,填写字段并保存。

其中服务地址填写 Elasticsearch 服务的地址,如果有多个用英文逗号分隔。其中服务地址格式为: ${ip}:${port}, 注意 不需要带 scheme ,举个栗子:127.0.0.1:80,127.0.0.2:80

  • 注意服务地址端口不能缺省,就算是 80 端口也需要加上, 而且不能带 scheme( http, https)
  • es 开启 http-ssl 认证时,需要上传.p12扩展名 ssl 证书以及证书密码,如:elastic-certificates.p12

2. 添加Elasticsearch数据名

打开页面:数据管理 -> 数据名,点击新增按钮,弹出窗口,填写字段并保存。

数据名在Elasticsearch场景可以理解为索引模式,之所以不直接用索引,是因为项目计划不只支持Elasticsearch,还会 支持influxdb等其它数据源类型。索引后缀如果不是标准的时间模式或者单位小于天的时间模式,可以用*号。

其中显示字段可以配置数据查询页面列表表头显示的字段和顺序

3. 验证查询

添加完数据名,打开数据查询页面。下拉选择刚才保存的数据名,点击查询。如果查出来数据和你的索引数据对上了,说明数据信息都 填写正确了。

  • 查询语句输入框会有历史查询记忆功能,用起来很方便。
  • 数据表格第一列是一个展开箭头,可以展开数据查看完整的日志内容。
  • 数据可以下载,文件格式为csv,限制在 10w 条以内
  • 点击分享按钮,查询还可以以短链接的形式分享给其他人
  • 如果你想用当前查询语句创建监控,直接点击添加监控按钮,就会直接带到监控创建页面

这些小功能可以说相当贴心了。

4. 添加监控

打开页面:监控管理->监控编辑。填入信息并保存,保存前可以先进行测试。

查询语句如下,表示查询项目dbtree的错误日志

Team: dealer.arch AND Project: dbtree AND Level: ERROR 

报警规则填写

表示最近 5 分钟查出来的日志数量大于 1 就报警

消息模板填写

以我们的日志格式为例,我们定制的消息模板为:

${Project}最近${TIME_WINDOW}分钟内有异常日志${NUMBER}条。最近一条异常信息: 服务器 IP: ${ServerIP} 异常类型: ${ExceptionType} 自定义信息: ${CustomMessage} 异常信息: ${ExceptionMessage} 

注意:使用者需要根据自己的日志格式指定消息模板,不能直接套用我们的,因为大家日志格式都不一样。关于消息模板如何定制,请看文档:消息模板配置

5. 运行试试

保存成功后,就可以运行一下试试看了。打开页面:监控管理->监控列表。

点击运行按钮,就会弹出运行结果,如果产生报警的话,还会根据你配置的发送方式收到报警消息。我们的消息大概是这样子:

监控每次运行都会产生一条执行日志,在页面监控管理->执行日志。能看到所有监控的执行日志。如果产生了报警发送,还会产生 消息发送记录,在页面监控管理->我的消息。可以看到所有发送给你的消息。

对 Java 之泛型通配符 ?extends T 的认知 和 ? super T 一些理解

Posted: 10 Jun 2022 10:21 AM PDT

 import java.util.ArrayList; import java.util.List;  public class App {      class A {      }      class B extends A {      }      class C extends B {      }      class D extends C {      }      public static void main(String[] args) {         List<A> al = new ArrayList<A>();         // 无法修改泛型继承关系         al = new ArrayList<B>(); // 编译错误         al.add(new A());         al.add(new B());         al.add(new C());         A a = al.get(0);          // 声明 List<? extends A> , 实现可能是 继承 A 的任意类型         List<? extends A> al1 = new ArrayList<A>() {             {                 // 放入子类                 add(new B());             }         };         al1 = new ArrayList<B>() {              {                 // 放入子类                 add(new C());             }         };         al1 = new ArrayList<C>() {              {                 // 无法放入 B                 add(new B()); // 编译错误                 // 放入子类                 add(new D());             }         };          // 虽然编译器知道放入数据一定是继承 A         // List<? extends A> al1 实现类一定是 List<A> 或 List<A 的子类>         // 但是用户指定的实现不确定 比如 ArrayList<C> 无法放入 B 类型,会有类型转换错误         al1.add(new A()); // 编译错误         al1.add(new B()); // 编译错误          // 因为声明的 List<? extends A>, 编译器确定类型一定是 A         A x = al1.get(0);          // 声明 List<? super D> , 实现可能是 D 的任意父类, 兼容放入 D 以及子类         List<? super D> bl1 = new ArrayList<Object>() {             {                 // 我放入和 D 类型无关的数据                 add("");                 add(new D());             }         };         bl1 = new ArrayList<A>() {             {                 add(new A());                 add(new D());             }         };          // 编译器知道实现一定是 D 的父类         // 支持放入任意 D 和 所有继承 D 的类         // List<? super D> 声明了编译器只能放入 D 和 D 的实现类型         bl1.add(new A()); // 编译失败         bl1.add(new D());          // 编译器无法获取确定实现类支持的数据类型,         // 因为 List<? super D> bl1 可以是 List<D> 或 List<D 的父类> 的实现装载数据         // 如果获取类型转换为 D 会有类型转换错误         D b = bl1.get(0); // 编译错误         Object o = bl1.get(0); // 所有类型的父类是 Object 所以支持         // 需要人为强制转换, 有类型转换异常风险         D b1 = (D) bl1.get(0);      } }   

No comments:

Post a Comment