Wednesday, April 14, 2021

V2EX - 技术

V2EX - 技术


深圳注册公司也太难了吧

Posted: 14 Apr 2021 04:20 AM PDT

看到可以全流程网上办理,觉得真棒,然后填完一堆信息,结果最后一步电子签名卡住了,银行 U 盾要么不给办理,要么不能用于工商注册,要么办理门槛贼高(我爸就不符合条件办不了)

这还没到对公账户和财税环节呢,哭哭

准备走阿里云或者腾讯云的工商注册渠道了,看需要准备的材料里面,不需要 U 盾,注册地址就用租房地址

从烦人的 WPS "打开方式不对"到翻 Qt 源码

Posted: 14 Apr 2021 04:09 AM PDT

问题背景和表现

如果你使用 KDE + archlinux,那么很有可能会遇到这个烦人的问题:WPS 打开文件的方式不对。

问题表现为,在 KDE 上试图单击打开 .xls 文件的时候,WPS Writer 会被调用,并且很有可能卡死(因为文件内容不匹配)。如果你尝试给 .xls 设置默认程序,会发现可能 .doc, .docx, .ppt, .pptx 也被影响。并且这类文件均被识别成 x-ole-storage 而非独立的 Presentation, Word, Spreedsheet 类型。

aur 源里有一个叫 wps-office-mime 的包,安装这个包不能解决问题。

这件事困扰了我很久了,非常烦人,一不小心单击打开表格文件,就会调用 WPS Writer 然后卡死。之前启用 WPS 的整合模式可以解决这个问题,但是自从某个更新后整合模式会崩溃。

有一天,我再也忍不了了,下定决心要把这件事调查清楚……

调查和解释

首先解释一个名词,mimetype,简单来说就是"判断一个文件是什么类型,应该用什么程序打开"的规则。

前面提到,很多不同的文档文件( doc, ppt, xls) 都被匹配成 x-ole-storage 了,而一个类型的文件只有一个默认打开程序,因此要关联就都关联到 WPS Writer 上从而导致错误结果。

问题:我的 .xlsx 文件是怎么被识别成 x-ole-storage 文件并打开的?

我打开 KDE 的 File Associations,里面确实有 .ppt, .doc, .xls 的 mimetypes 及其关联的打开程序,看起来非常正常。但是为什么这些规则没有匹配到我的文件上呢?为什么文件没有被正确归类成幻灯片,文档,表格,而是那个不知哪里来的 x-ole-storage 类型?

ArchWiki 有关于 mimetypes 的一些介绍。其中提到系统直接读取的 mimetypes 其实是一种数据库,或者说缓存,是根据安装过的软件包的原始 mimetype 配置文件生成的结果。

原始 mimetype 配置文件储存在:

  • /usr/share/mime/packages

  • ~/.local/share/mime/packages

并且我们可以用 update-mime-database 来根据配置刷新缓存。

好吧,可是这些知识对于解决我的问题并没有帮助。

不过,至少经过在这些目录里搜索,我发现 x-ole-storage 的定义来源于 /usr/share/mime/packages/freedesktop.xml,属于 XDG 标准内容,看来我不应该删除掉它的定义。

看来需要调查 KDE 识别并打开文件的过程了。

根据日常使用 KDE 的经验和猜想,在 Dolphin 里单击一个文件,和使用 xdg-open 命令的效果是完全相同的。经过一些搜索,我发现 xdg-open 依赖 kde-cli-tools 包来打开文件,那么想要调查 KDE 打开文件,自然要去看这个包里都有什么工具了。

找到其源码,看一下目录结构初步判断确实和 mimetype 有关。浏览源码的时候发现一个工具 kmimetypefinder5,这部分代码看起来对于追踪 KDE 处理 mimetype 的流程非常有用!我在终端调用 kmimetypefinder5 somefile.xlsx,发现返回结果是 x-ole-stroage,我复现了想要的错误。接下来就是看这个工具的源码,一点一点找在哪里 mimetype 没有正确匹配了。

还好这个工具的源码很简单,我很快发现它是调用 Qt 库中的 QMimeDatabase 来判断 mimetype 的。

所以只能看看 Qt 库在干什么了。首先读了一下对应 Qt 文档,发现只说明了提供的接口,没有介绍判断逻辑。

那么接下来只能读源码了。

Google "QMimeDatabase source" 很快定位到了我想要的东西

Qt Source Code

QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device, int *accuracyPtr) {     // First, glob patterns are evaluated. If there is a match with max weight,     // this one is selected and we are done. Otherwise, the file contents are     // evaluated and the match with the highest value (either a magic priority or     // a glob pattern weight) is selected. Matching starts from max level (most     // specific) in both cases, even when there is already a suffix matching candidate. 

所以说,KDE 经过一系列调用之后,最终调用 Qt 库中这个函数来获取一个文件的 mimetype, 然后用关联的默认程序来打开文件。

简单阅读注释 + 代码,发现 Qt 是根据文件的扩展名和 Magic Number 共同启发式推断文件的类型。也就是说,如果有多个匹配,Qt 会给这些匹配结果分配权重,然后选择权重最高的匹配结果。

没看多远,我就发现了一条我最想要的匹配规则:如果根据文件扩展名的规则匹配,有唯一的匹配结果,那么立刻返回这个匹配。

     // Pass 1) Try to match on the file name     QMimeGlobMatchResult candidatesByName;     if (fileName.endsWith(QLatin1Char('/')))         candidatesByName.addMatch(QLatin1String("inode/directory"), 100, QString());     else         candidatesByName = findByFileName(QFileInfo(fileName).fileName());     if (candidatesByName.m_allMatchingMimeTypes.count() == 1) {         *accuracyPtr = 100;         const QMimeType mime = mimeTypeForName(candidatesByName.m_matchingMimeTypes.at(0));         if (mime.isValid())             return mime;         candidatesByName = {};     } 

看到这里,不需要阅读后面的源码,谜底也已经解开了,解决方案已经有了。让我的系统里对于 .doc 等文件只有一种匹配。

打开 KDE File Associations, 把 WPS 加进来的乱七八糟的 mimetypes 删干净,只留下 XDG 标准定义的文档类型,并且为其设置正确的独立程序,如 *.ppt 默认使用 WPS Presentation 而非 WPS 2019 打开。

测试一下,终于成了!我终于能在 Linux 下不糟心的阅读 Office 文档了!对,我们用 Linux 的就是会糟心这种问题……

TL; DR

一句话解决方案:在系统设置里清理 mimetype,把重复匹配 .doc/.docx/.ppt/.pptx 等等的 mimetype 删的只剩下一个,保证每个后缀名只在一个 mimetype 里出现一次。

如果系统设置里删不掉,就找上文提到的"原始 mimetype 配置文件储存路径"

  • /usr/share/mime/packages
  • ~/.local/share/mime/packages

并用合适的参数调用 update-mime-database

相信被这个问题困扰的 Linux 用户不少,希望能帮到你 :)

感谢阅读

博客原文 https://rapiz.me/2021/fix-wps-mime/

感觉 intellij idea 2021.1 解析 jsx 慢了很多啊

Posted: 14 Apr 2021 04:09 AM PDT

平时开发公司后台,前后都干,所以都在 idea 里写,更新以后一个 2,300 行的 react jsx 解析都得好几秒,4800h 占用也持续处于 70 到 100%

Chrome / Edge 新鲜的漏洞没人关注?

Posted: 14 Apr 2021 04:09 AM PDT

好像是得关闭沙盒,以及在 windows 上才起作用
沙盒还是能保护大家的电脑的啊,平时都没感觉到

代码在这里
https://github.com/r4j0x00/exploits

请问为什么我通过 npm install 安装的新包 在 package-lock 中没有生成呀?

Posted: 14 Apr 2021 03:55 AM PDT

npm 版本是 6.14.4 在网上搜了一下没看到相关的问题

低代码/无代码开发工具有人真的用过开发线上系统吗?

Posted: 14 Apr 2021 03:49 AM PDT

真的能解决问题吗?能帮程序员省事?求真实案例

为什么 nginx 连请求到达时间这个基本信息都不能记录

Posted: 14 Apr 2021 03:47 AM PDT

我这里说的是请求到达 nginx 的时间,而 nginx 的 log 里只能输出请求完成时的时间(或者说是输出日志那个时间点的时间

这个时间真的挺重要的,当请求量大服务器响应缓慢的时候,log 里输出的时间和请求实际到达服务器的时间根本不是一回事。想分析下具体流量怎么冲过来的都麻烦死,要先对 log 做预处理,用请求完成时间减去记录的请求时长,反过来计算出到达时间(而且这算出来到底靠不靠谱心理还没底)

分析生产环境的 nginx 日志到心态烦躁,抱怨下

docker 的某些命令被卡住了,一直没有反应

Posted: 14 Apr 2021 03:05 AM PDT

执行 docker container ls 没有问题,但是执行 docker container stop {containerName}却一直卡住,完全没有任何头绪,想看看大家有没有思路。

go 有好用的 io 库吗

Posted: 14 Apr 2021 03:03 AM PDT

go 的 io.Reader/Writer 用来传输流文件非常方便

但官方的 Reader/Writer 实现都太简单了,不够实用

有没有一些好用的第三方库

我想到几个比较实用的函数

  1. 带 Seeker 的 Reader

就是 Reader 允许 Seeker 操作,可以返回头或者尾

  1. 一读变多读

size 就是缓冲区大小,num 就是返回值返回的 reader 数

e.g NewMultiReader(io.Reader, size, num int) []io.Reader

大数据量模糊匹配有快速响应的优化方案吗?

Posted: 14 Apr 2021 02:49 AM PDT

背景

MySQL,单表数据量超过 2000 万,需求是要求快速模糊查询。

select * from xxx where aaa like '%yyyyy' ;

有快速优化方案吗?

工作六年,依然不能手写 Block,什么水平?

Posted: 14 Apr 2021 02:49 AM PDT

顺便献上超好用的网站,http://fuckingblocksyntax.com/

求教一下,这种格式的 SQL 该怎么优化

Posted: 14 Apr 2021 02:38 AM PDT

SELECT(     SELECT 根据表 A 或者表 B 进行函数计算      FROM 表 A JOIN 表 B   	ON 表 A.id = 表 B.id      WHERE      	表 C.id = 表 A.C_ID         ) AS 字段名  FROM 表 C WHERE ***** 

试过把表 C 放在里面 join,或者把子查询里面的函数取出来,全部放最外面 where;
但是数据都不对,有没有老哥知道怎么优化

一种基于 HTTP 的伪双工通信

Posted: 14 Apr 2021 02:20 AM PDT

一般提到 Web 的双工通信,第一反应都是 WebSocket,但 WebSocket 与其他 HTTP 业务往往不能很好的融合在一起。而直接使用 HTTP 轮询,HTTP 头又太大了,哪怕上了 HTTP2,也是浪费资源。

Server-sent events 就是一种很好的基于 HTTP 的单向长连接通信方式。https://developer.mozilla.org/zh-CN/docs/Web/API/Server-sent_events

比如日志流展示业务,只需要使用 SSE 就行了,完全不需要上 WebSocket 。

所谓双工通信,就是服务端拥有随时推送消息给客户端且客户端拥有随时推送消息给服务端的能力。使用 SSE 就可以让服务端可以随时推送消息给客户端,而客户端推送消息给服务端,直接 HTTP 请求就行。

这种伪双工通信的好处就是完全基于 HTTP,负载均衡、反向代理以及客户端的调用逻辑都可以使用现成的生态,不需要再去基于 WebSocket 搞一套代码。

刷推特看到有人使用 SSE 做日志流推送业务有感而发。所以抛砖出来供大家一观。

大家有没有搞过有状态应用上 K8S

Posted: 14 Apr 2021 02:14 AM PDT

MySQL RabbitMQ Redis 等这种有状态中间件怎上 K8S ?是通过在上层使用开源的或者自己改的 operator,还是在底层二次开发这些中间件?存储用 local pv 还是 ceph 之类的?

在手机上如何对图片批量加滤镜?

Posted: 14 Apr 2021 02:05 AM PDT

我会拍摄一组照片, 对图片进行修图, 大部分图片都是差不多的, 所以进行的滤镜也是类似的, 目前的处理是:

  • 打开 Snapseed 软件
  • 选择一张照片
  • 进行旋转, 调节 Brightness, Contrast 等参数
  • 导出保存

这样一张一张太慢了, 我理解的对图片进行滤镜等操作是对其做了几个函数处理, 能否使用其他的命令批量处理?

比如(举个例子而已应该没有这个参数):

$ imagemagick image1.heic image2.heic ... -filter filter.obj 

如果有的话用什么软件可以导出滤镜文件?

手撸了个微信支付 v3 版的 sdk

Posted: 14 Apr 2021 01:57 AM PDT

wechatpayv3

PyPI version

介绍

https://github.com/minibear2021/wechatpayv3

微信支付 v3 版发布很久,官方只给了 java 和 go 的 sdk,无奈手撸了个 python 版的先顶着。

安装

$ pip install wechatpayv3 

使用方法

准备

参考微信官方文档准备好密钥, 证书文件和配置(证书 /密钥 /签名介绍)

初始化

from wechatpayv3 import WeChatPay, WeChatPayType  MCHID = '1230000109'  MCH_PRIVATE_KEY = 'MIIEvwIBADANBgkqhkiG9w0BAQE...' MCH_KEY_SERIAL_NO = '444F4864EA9B34415...' WECHAT_PUBLIC_KEY = 'MIIEvwIBADANBgkqhkiG9w0BAQE...' APPID = 'wxd678efh567hg6787' NOTIFY_URL = 'https://www.weixin.qq.com/wxpay/pay.php'  wxpay = WeChatPay(wechatpay_type=WeChatPayType.MINIPROG,                   mchid=MCHID,                   mch_parivate_key=MCH_PRIVATE_KEY,                   mch_key_serial_no=MCH_KEY_SERIAL_NO,                   wechat_public_key=WECHAT_PUBLIC_KEY,                   appid=APPID,                   notify_url=NOTIFY_URL) 

接口

参考examples.py

想问问大家在 Django+DRF 的开发框架下,涉及多表的数据库相关操作在哪层做?

Posted: 14 Apr 2021 01:44 AM PDT

当 ModelViewSet 自带的新增、修改、删除方法不能满足继承 ModelViewSet 的视图的需求时,例如新增、更新涉及到多个表时。这样可以选择在视图( views )、序列化器( serializers )或者模型( models )里重写这些方法。现在我们公司的现状是在哪层重写的都有,没有啥规范。想问问这个东西有什么最佳实践吗?

谷歌有办法注册第二个开发者账号吗?

Posted: 14 Apr 2021 01:39 AM PDT

看图里这个感觉就像是一个谷歌账号可以有几个开发者账号似的,
我的谷歌开发者账号因为付款资料问题废掉了,又不想注册个新的谷歌 gmail 账号,
要是能同账号下再注册个开发者账号就好了,

搭一个图片相册展示为主的网站用什么框架比较好

Posted: 14 Apr 2021 01:20 AM PDT

功能分图集展示,进入图集大屏展示图片左右切换图片。最好可以带有评论转发功能。

MSYQL-取两个时间字段中的数据-索引如何建?

Posted: 14 Apr 2021 01:15 AM PDT

如题,一张表中有一个开始时间字段 start_datetime,结束时间字段 end_datetime,
需求是取出当前时间大于开始时间,小于结束时间内的数据

索引应该如何建呢?

AMD 模块之间如何共享数据?

Posted: 14 Apr 2021 12:28 AM PDT

像 vuex 那样,在各个 vue 模块之间可以实现数据共享。除了定义全局变量外。

请教一下 Spring3 如何集成 Artemis?

Posted: 14 Apr 2021 12:06 AM PDT

项目需求要收集网站指定页面的点击数据,于是想加入 ActiveMQ ( Artemis 版)做数据收集。

但是项目采用 Spring 3.0.5,人工搭起来的(没用 Maven,没用 Spring Boot )。

网上没多少教程。想请教一下,如何集成?

吐槽一下新版 chrome 添加书签的功能,比原来麻烦多了

Posted: 13 Apr 2021 11:53 PM PDT

原来只要点星星,然后选文件夹就行,现在多了一层,还要选「添加书签」还是「添加到读取列表」,很烦

请教用 uWSGI 启动 Django 项目遇到的问题

Posted: 13 Apr 2021 11:48 PM PDT

第一次使用 uwsgi,以前一直用的 runserver 启动。。。
如图一是我的项目目录,图二是我的 uwsgi.ini 的配置,
启动之后日志里报错:chdir: no such file or directory [core/uwsgi.c],如图三。
不知道哪里出了问题,网上的方案都试过了也没能解决,求大佬指导🙏
图 1:

图 2:

图 3:

google colab 简直神器有木有

Posted: 13 Apr 2021 11:17 PM PDT

另外
大家有什么好的玩法和项目可以顺便分享一下呀。

如何将以下 keras 的神经网络模型改为 pytorch 的?

Posted: 13 Apr 2021 10:06 PM PDT

这是我想转换为 pytorch 的示例 keras 代码!下图为模型结构 https://file.nuomiphp.com/uploads/20210413/FmdyObK_bDET2ChmVw44z33QaYGO.png

代码如下: model = Sequential() model.add(LSTM(input_dim=1, units=50, return_sequences=True)) #model.add(Dropout(0.2)) model.add(LSTM(input_dim=50, units=100, return_sequences=True)) #model.add(Dropout(0.2)) model.add(LSTM(input_dim=100, units=200, return_sequences=True)) #model.add(Dropout(0.2)) model.add(LSTM(300, return_sequences=False)) model.add(Dropout(0.2)) model.add(Dense(100)) model.add(Dense(units=1)) model.add(Activation('relu')) model.compile(loss='mean_squared_error', optimizer='Adam') model.summary()

希望有人能解答一下,非常感谢!

Flask-SocketIO 多线程遇到的问题

Posted: 13 Apr 2021 09:55 PM PDT

最近在使用 Flask-SocketIO 想实现实时跟踪 celery 的任务日志(每个任务一个日志文件)的功能。 在本地运行,开了两个窗口,第二个窗口会输出自己的日志,第一个窗口会输入自己的加后一个窗口的日志。类似后续每开的一个窗口,前面的窗口都会 append 此窗口的日志。

client

import sys  import socketio   client = socketio.Client(reconnection=False)   @client.on('log', namespace='/cdc') def on_log(args):     print(args['data'])   def send(log_path):     try:         client.connect('http://127.0.0.1:5000', namespaces='/cdc')         client.emit('log', {'log_path': log_path}, namespace='/cdc')     except KeyboardInterrupt:         try:             sys.exit(0)         except SystemExit:             sys.exit(1) 

server

sio = flask_socketio.SocketIO(async_mode=async_mode)   @sio.on('log', namespace='/cdc') def log(data):     thread = sio.start_background_task(scan_log, data['log_path'], None, flask.request.sid)   def scan_log(log_path, app=None, client_id=None):     counter = 0      with open(log_path, 'r') as f:         while True:             line = f.readline()             if not line:                 sio.sleep(0.1)                 continue             counter += 1             sio.emit('log', {'data': line.strip()}, namespace='/cdc', to=client_id) 

各位有没有遇到类似的情况?或者有什么大概的思路?

�� FastAop v1.0.1 正式发布

Posted: 13 Apr 2021 09:37 PM PDT

简介

FastAop 是一款基于 Java Annotation Processing 的轻量级 AOP 框架,其原理和 Lombok 类似,支持环绕切入模式,使用起来非常的方便,基于此项目可以生成任何你想要的模板代码提高日常编码体验和效率,此次更新主要是支持了 Around 切面模式。

特性

  • 📦 开箱即用,适用于任意项目,无依赖负担
  • 🚀 基于 Java Annotation Processing,运行时无性能损耗
  • ⚡️ 兼容 private/protected/static 等各种修饰符的方法

使用

求个 star,欢迎大家提提 issue,一起交流~

有用过淘宝教育的朋友吗

Posted: 13 Apr 2021 08:57 PM PDT

吐槽一件事。
在淘宝上买了录播课,课程是发布在淘宝教育上的。结果淘宝教育这产品目前我只能在手机端访问。不知道是不是 Web 端的兼容性问题,目前在 Chrome89 上访问是如下的情况。屏幕截图 和淘宝客服反映了情况,并没有得到解决。昏了。

服务器接入多个网络, aria2 能用不同的网口(ip)进行下载吗?看下图,机器有 3 个不同的 pppoe 拨号获得的 ip,需要多线程下载 bt 文件,能尽量均分到各个 ip 上

Posted: 13 Apr 2021 08:09 PM PDT

微信截图_20210414000744.png

有用过 minio 的兄弟吗

Posted: 13 Apr 2021 07:44 PM PDT

version:minio8.0.3 请问一下,minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().config().build()); 这个方法我想把 bucket 设置为公有读,私有写这个 policy 怎么写呢?

有什么算法或者工具是检测视频中手机屏幕大小的?

Posted: 13 Apr 2021 12:56 PM PDT

如题

拍了一个手机播放动画的视频

但是下一步计算 需要先检测手机大小

哪个 chromium 浏览器,能同步插件的设置么?

Posted: 13 Apr 2021 11:58 AM PDT

求问:
哪个 chromium 浏览器,能同步插件的设置么?
不是同步插件,是同步插件的设置。
试过 chrome 、edge 、360 极速,都不可以同步插件设置,每次换机器还挺麻烦的。

Python 有啥好用的库可以检测人脸吗?比如区分是不是真实的人脸

Posted: 13 Apr 2021 11:09 AM PDT

[问题已解决|后续] docker 容器能 PING 通 IP 但 PING 不通域名问题的排查经历分享

Posted: 13 Apr 2021 10:59 AM PDT

编辑好了…… v 站不让我发,就分享这个链接了,写在了博文中

前情提要: https://www.v2ex.com/t/769968

[已解决] 记一次 docker 容器内能 ping 通 ip 但 ping 不通域名问题的排查经过 https://hellodk.cn/post/496

No comments:

Post a Comment