Tuesday, June 15, 2021

V2EX - 技术

V2EX - 技术


如何知道一段代码没有内存泄漏?假如一个函数 cache 了返回值,算不算内存泄露呢?? Python 中内存泄漏的标准又是什么??百度了很多文章都没搞懂,求帮助

Posted: 15 Jun 2021 05:19 AM PDT

会不会出现“鸿蒙 os 开发”这个岗位

Posted: 15 Jun 2021 05:11 AM PDT

如果鸿蒙系统不可能永远兼容安卓,那么会不会就像安卓开发 ios 开发 一样,以后有可能出现 鸿蒙 os 开发这个岗位呢?

为什么安卓手机不能看电池健康度?

Posted: 15 Jun 2021 05:02 AM PDT

是苹果设备有什么特殊硬件吗,安卓和 windows 好像都不能看电池最大容量,这个功能用来量化电池损耗还挺实用的。

网站请求在多少量级的时候,会考虑采用上单独的图片服务器。

Posted: 15 Jun 2021 04:50 AM PDT

现在只是搞个小网站玩玩,需要存一些小图片,比如人物的头像图片。
刚开始玩可以不上单独的图片服务器。要是万一网站火了呢,人还是要有梦想的,不然和咸鱼有什么分别呢。

所以,现在需要提前对图片服务器做规划吗,如何规划?比如,图片如何存储,数据库如何做预留?

请教 Jellyfin 识别 Season 与 Episode 的解决方案

Posted: 15 Jun 2021 04:27 AM PDT

目前 PT 站的文件命名大部分都为 Name.Year.[Season]Episode.ExtraInfo

但是对于只有一季的剧集大多不会有 Season 信息,比如 Kidnapping.Game.2020.EP01.2160p.WEB-DL.H265.DDP2.0-LeaugeWEB.mkv

这样会导致 Jellyfin 会将其识别为 S20E20 导致元数据获取失败

因为 PT 站保种所以也不太可能手动修改文件名

目前我是手动一集一集修改元数据之后刷新,但是这样不符合一个程序员的行为方式,也很消耗体力

我尝试看过 Jellyfin 源码但是因为不了解 C#没能找到关键代码,提 Issue 好几个月了也没有得到回应

然后就想退而求其次想找找有没有 HTTP API 来批量修改,但是也只找到插件 API

对于这种情况想请教下 V2 大佬们有什么好的解决方案么

PS.应该是会有 HTTP API 的,因为控制台是可以获取 API 密钥,但是我没有找到,如果有大佬知道希望告知下

上海的 hxd 问下 在上海租房有什么 性价比高的租房选择吗?

Posted: 15 Jun 2021 04:21 AM PDT

鄙人 七月份要离开杭州去上海工作了 听闻上海房租高远近闻名 特来像有经验的老哥讨教 还请诸位教我

有什么笔记软件,可以把笔记项目导出为 html 目录?

Posted: 15 Jun 2021 04:21 AM PDT

要记一些东西,有时候也要写个文档。想把这些写的东西放到服务器上,可通过浏览器访问。

比如把一个笔记项目导出为 html 目录(不是单个 html 文件),把 html 目录放到带有 tomcat,nginx 的服务器上,可通过浏览器浏览。

功能至少如下

一个笔记项目至少得有笔记目录(希望是树形目录), 每个笔记页面,都应该视为一个文件,

基本的富文本编辑功能,图片插入,超链接(可以通过超链接跳转到其他笔记页面)等。

支持导入导出,不仅仅是单个笔记页面的导入导出,还支持笔记项目级别的导出,把笔记项目导出为 html (每个笔记页面就是一个 html 文件) 。

可以把指定格式的 json,xml 文件的内容导入为指定笔记项目里的目录和笔记页面的标题和内容。

美术太难了,想搞独立游戏,像素画不好

Posted: 15 Jun 2021 04:16 AM PDT

没有一点的美术底子,瞎几把画,感觉距离可以设计出角色和场景还是很远的距离 png1 上面的画是照着别人的画的

下面的自己画的 png1 png1 png1 两张城市猎人的像素画...算是吧.. png1 根据剑风传奇主角画的角色

老感觉没有灵感啊,各位彦祖有什么高见吗

PC 和小程序的后台接口要分离吗

Posted: 15 Jun 2021 04:09 AM PDT

在业务场景中,双端的返回值及查询逻辑有差别,有什么比较优雅的方式解决这个问题吗?

目前想到的两种方式

  1. 两端代码合并到一起(小程序逻辑需特殊处理,返回值及接收值会冗余)
  2. 双端分开两个接口(会有重复代码)

Python 小票机

Posted: 15 Jun 2021 03:49 AM PDT

https://github.com/fvdsn/py-xml-escpos
这个项目是不是不更新了
py3.9 已经完全不能用了, 不懂 py
我简单改了一下只能简单运行(去除简单 style), 可以缺少模板说明 无法能正确使用
我想实现 小票 table 不懂 py
有没有用人 开发过这一块

写 mod 时遇到个 lua 的问题,写了一千多字问题描述,把思路理死了。。

Posted: 15 Jun 2021 03:18 AM PDT

试图用小黄鸭法理顺思路,但是最终结果是真的没搞懂。

我在写一个 mc 的服务端插件,它用的是 java 语言。但是为了能够让插件使用者能够自定义一些游戏物品功能逻辑,我加入了 lua 作为脚本语言。

比如可以写一个盾牌物品的脚本 shield.lua

    function shield.onPlayerDamage(e)         e.SetDamage(0)     end 

意思是当玩家受伤时,将伤害设置为 0

这个 onPlayerDamage 是游戏中的事件,可以在 java 中订阅。
在插件初始化的时候,会读取配置目录下所有的物品 lua,并且将每个这样的 lua 函数存入一个管理类中,在插件的相应事件触发时,管理类就会调用 lua 中的同名函数(同时也要在 java 中判断玩家是否具有此盾牌物品,再执行)

到此为止还是没问题的,但是我希望这些物品能存局部变量,比如

    function shield.onPlayerDamage(e)         self.a = self.a - 1         if (self.a <= 0) then             e.SetDamage(0)         end     end 

这样可以实现计数功能,比如只能抵挡 3 次伤害。
但是问题就在于,如果有多个玩家同时拥有此盾牌,这些玩家就会共享变量 a,从而产生冲突。

接下来我试着在一个新盾牌生成时,插件可以以 shield.lua 为原型,New 一个 luaTable,复制 shield.lua 中的所有内容( lua 的 OOP 方式),以此达成每个盾牌实例拥有独立的局部变量,这种情况下,处理每个盾牌的逻辑的并非 shield 这个表,而是一个以 shield 为原型的新表(假定它叫 shield_A )。
但是这样一来,事件管理类在调用 lua 中事件函数时,就无法调用这个 shield_A,而还是调用的是最初加载的 shield.lua 的函数,从而就无法操作到特定的变量 a

接下来我试着每当 new 一个 luaTable,就重新在该 luaTable 中查找事件函数,并加入事件管理类
但是这样一来,事件触发时就必须判断每个 luaTable 对应的是哪个玩家,比如玩家 A 就调用 shield_A,玩家 B 就调用 shield_B 。不然一个玩家受伤,所有盾牌的变量都变了。这就难以做到。
而且在该盾牌消失之后,我又得把对应的函数从事件管理类中移除,这又难以做到。

再者,我又遇到另一个问题。我希望这个 luaAPI 具有一些全局函数可供调用,比如 Game.HealPlayer(hp)
这个 Game 内含一些常用的全局函数。问题比较类似,也是面向对象的。

Game 不能只有一个,该插件有一个"游戏房间"的概念,每个玩家通过创建游戏房间进行游玩,每个房间游戏中只有一个玩家。
那么,我希望 Game 是可以处理房间内逻辑和数据的,比如当前房间的难度、计时器等等,这就要求在创建游戏房间时,也得创建一个对应的 Game 实例。我们假设创建了一个游戏房间 A,并且带有一个 Game_A 的 Game.lua 的复制。

假设我们不仅有 shield.lua ,还有回血药水 potion.lua ,那么 potion.lua 中就要调用 Game.HealPlayer(hp)
该 potion 自然也是 potion.lua 的一个复制(比如叫做 potion_A ),而它调用的 Game_A 也应该是 Game.lua 的一个复制,并且两者同属于一个游戏房间。那么在 potion.lua 中就不能直接写 Game.HealPlayer(hp),那样调用的就是 Game.lua 原型而不是 Game_A 。

然而因为游戏房间都是动态创建的,写 potion.lua 中的 API 调用时就没法写出对应的表名。

所以我卡在这里了,我是看到很多游戏都在用 lua 做 modding 脚本语言我才试着学一下,但是看了几个游戏的 mod 教程,只看到他们就是能做到方便的 lua 逻辑配置,但就是看不出来他们是怎么处理这些问题的。

各位的编辑器公司有统一的设定要求吗?

Posted: 15 Jun 2021 03:17 AM PDT

比如换行自动触发 tab,tab 为 4 个空格,

亦或者是团队统一使用 vs code 统一 eslint 规则等等。

如果没有以上的要求,查看 git 差分或 review 代码的时候怎么解决 tab 长度不一样,eslint 规则不统一的问题?

家中同网段,同路由连接的机器,无法通过 IP:Port 访问,除去防火墙,还有哪些可能?

Posted: 15 Jun 2021 03:11 AM PDT

Server 是一个 Linux 系统的旧电脑。

如图所示,Linux iptable 已经全 accept 了,防火墙也没开。

Web 服务没有问题,在 Linux 本机上 curl IP:port 可以看到 HTML 内容。

Server 上以前做过的改动 :

  • 运行着一个 shadowsocks 的 service
  • 配置过 proxychains (不过基本没怎么用到过)
  • 配置过 DNS:1.1.1.18.8.8.8

请问还有哪些点会导致无法访问的情况?谢谢!

Untitled Diagram.jpg

怎么在请求 [结束] 时能捕捉到__destruct 里抛出的异常

Posted: 15 Jun 2021 02:45 AM PDT

__destruct里抛出异常已经不会产生致命错误了

场景是用户操作日志,laravel 框架,所有模型事件都实现了一个接口类ChangesLoggerInterface,然后当任意一个模型触发任意事件都会进到一个 ChangesLoggerListener的监听器中。

然后想实现:

当 saved\updated\deleted 的时候记录下哪些字段从 xx 改成了 bb 。

然后一次请求中肯定不止一个对象发生变动可能是多个比如电商下单接口可能会是order:saved,user:updated(last_order_dateline)

所以最终是实现在一次请求中记录一行数据(在 logs 表中)。

所以在 ChangesLoggerListener中 想调用一个 Logger的日志记录类,调用Logger::push,这样在当 Logger 触发__destruct的时候获取 $this->data(array) 拼成一行数据入库。

问题是:

__destruct必须是在refcount为 0 的时候才触发。所以如果业务逻辑里有 try...catch.. 的时候,实际上__destruct里的异常是不会被 catch 到的。

造成 refcount 不为 0 的原因是因为用了 Laravel 的 Facade 实现的接管的单例。

还有什么其他方案嘛?

2021 年了, requests 内存泄露的问题解决了吗?如果没解决,怎么解决?

Posted: 15 Jun 2021 02:33 AM PDT

这是在网上看到的一篇博客,
https://morningchen.com/2019/12/12/celery-memory-leak/


用 docker 在最新的 python 版本上实验,还是有泄露的情况。有朋友知道怎么办吗?

k8s 卷持久化

Posted: 15 Jun 2021 02:32 AM PDT

场景:k8s 使用 volumes 的形式挂载 pod 内数据到本地进行数据同步,防止 pod 内日志文件消失。 现象:启动时,访问 web 接口查看日志信息正常,一段时间后日志文件不更新了,再访问 web 接口也不更新了。 请问是什么原因?

我方网站域名经常受 DNS 污染而换域名,有办法解决吗?

Posted: 15 Jun 2021 02:06 AM PDT

我方网站架设环境:
一、域名:有向国内阿里云、name.com 、GodaddyHK 、西部数码、hostingspeed.net 购买,最常在国内阿里云与 name.com
二、域名解析:大部份在国内阿里云使用免费云解析 DNS,有部份是在 Google DNS
三、网站服务器:全部架在香港,是 Shared Host,主机类型是 Nginx
四、其他:
(一)网站没有做 CDN 加速
(二)一台服务器上挂多个域名,约 2-3 个域名有 DNS 污染
(三)使用国内阿里云网站运维检测平台,发现被污染的域名都是递归解析污染
我得到的建议大多数的是直接换域名,但网站需要做 SEO,一直换域名对 SEO 是大伤

自己手写 session redis 还是用 spring-session-data-redis 好?

Posted: 15 Jun 2021 01:01 AM PDT

session 会话想用 redis 来存储,现在考虑这两种方案,哪种方案要好一点呢?

视频防抖算法

Posted: 15 Jun 2021 12:21 AM PDT

公司项目有需要视频防抖,求推荐算法或者第三方 SDK 。

我是负责移动端的,图像数据是硬件一帧帧传输过来的。

新人求助帖,一个关于端口监听的玄学问题

Posted: 14 Jun 2021 11:49 PM PDT

这件事情还得从前几天说起,我向往常一样打开 v2rayNG,启动系统代理,然后发现网页打不开,然后发现 v2rayNG 的日志有报错:

1623725901371.png

差不多意思就是监听 10808 端口失败。

然后我第一时间想到的是这个端口被占用,去 powershell 用 netstat 之类的命令都有发现占用,tcping 这个端口也无响应,然后我一气之下重启了电脑...

还是不行。然后我想改成其他端口试试呢?接着我依次向上尝试了 10809,10810,10820 等端口,结果还是报一样的错误。。而经过确认并没有发现这些端口存在占用情况。

接着我又一气之下将监听端口改成了 20000,得了,这次终于成功了。

然后我开始手动用二分法查找不能监听的端口范围,最终确定: 14762 以下的端口都不能监听,14763 就可以了。然而我还是不能确定原因在哪。。

噩梦并没有结束,我本来是想排除是 v2rayNG 这个软件的问题,结果当我打开 Clash.NET 的时候发现混合端口显示 0 (本来应该是 11223)。

同时,在我运行我本地的一个 Node 项目时,发现 3030 端口也无法监听,另一个项目的 8899 端口也无法监听,都是报权限类似的错误。大概报错信息如下:

err: Error: listen EACCES: permission denied 0.0.0.0:3030       at Server.setupListenHandle [as _listen2] (net.js:1301:21)       at listenInCluster (net.js:1366:12)       at Server.listen (net.js:1452:7)       ... 

看来是我系统的问题了。

不过昨天我偶然把电脑的外置 USB 网卡拔掉之后,发现 v2rayNG 的 10808 端口突然就能监听了。所以昨天还在怀疑罪魁祸首就是那个网卡,然而今天电脑开机之后发现 10808 端口又不行了(没有插那个网卡)。。log 记录也跟上面一模一样。。

不过这次我发现我项目的四位数的端口又都能监听了,而且没有任何报错。

我把 Node 项目的监听端口改成 10000 以上时(比如 10820 ),果然还是会报错。。

真是玄学问题。。被这个问题折磨几天了,上网上搜了一圈也没查到问题出在哪,实在没办法了才来 V2 发帖,球球大佬们帮帮我吧。。。

请问我理解的 DNS 缓存污染定义,指教下是否正确?

Posted: 14 Jun 2021 10:48 PM PDT

最近一直研究 DNS 污染,透过网上各种管道,得知有一个专有名词叫「 DNS 缓存污染」,我理解的意思是运营商解析网站的 DNS 的 A 记录,被运营商本身或怪客篡改 IP,这理解是否正确?

函数调用变量自动回收问题

Posted: 14 Jun 2021 09:08 PM PDT

函数里打开文件没手动关闭,等函数执行完成自动回收会有什么问题?
发现之前写的一个日志类打开文件后没关闭,实际运行中没发现问题。

 func (a *Loger) InfoLog(wireteString string,extfilename string){   	var f    *os.File 	var err   error  	var filename = "info_"+extfilename + getCurDate()+".log"  	if checkFileIsExist(a.path+filename) {  //如果文件存在 		f, err = os.OpenFile(a.path+filename,  os.O_APPEND|os.O_WRONLY, os.ModeAppend)  //打开文件 		//fmt.Println("文件存在"); 	}else { 		f, err = os.Create(a.path+filename)  //创建文件 		//fmt.Println("文件不存在"); 	}   	check(err)  	wireteString = wireteString+"\r\n" 	_,err = io.WriteString(f, wireteString) //写入文件(字符串) 	check(err) 	//格式化用的日期是特定的,123 ( 15 ) 45 -.-lll 	now_time := time.Now().Format("2006-01-02 15:04:05") 	io.WriteString(f, now_time+"\r\n") //写入文件(字符串) 	//fmt.Printf("写入 %d 个字节", n);   	return } 

能不能禁止 ubuntu 的引导添加到主板 UEFI 里?

Posted: 14 Jun 2021 08:58 PM PDT

硬盘有 4 个分区为 EFI, /, /home, swap 。

安装 ubuntu 时,引导选择 EFI 分区的,安装完重启后主板启动项里变成 ubuntu (原来为硬盘名字的)。
如果用 easyuefi 把主板里的 ubuntu 这个引导删除,再启动系统后,主板启动项又出现了 ubuntu 这个引导(而不是硬盘名字)。

我不太清楚现在安装 ubuntu 就是这样,还是可以禁止的?

发现 springboot 在 Linux 启动时,配置文件格式错误的日志打印无解啊

Posted: 14 Jun 2021 08:49 PM PDT

了解到有个 DeferredLog,这玩意在 spring 上下文完全初始化之前会缓存日志,如果此时配置文件格式错误,抛的异常不会打到指定文件。看样子只能用 shell 脚本解决这个日志打印问题了。大佬们有什么高招麽??

[gorm] beforeUpdate hook 方法

Posted: 14 Jun 2021 08:08 PM PDT

gorm 中 BeforeUpdate 方法能取到 update 之后的值吗,或者使用 gorm 如何实现这种 hook ?

func (m *User) BeforeUpdate(tx *gorm.DB) (err error) { 	if tx.Statement.Changed("Mobile") { 		err = tx.Model(&Profile{}).Where("user_id = ?",m.ID).Update("mobile", m.Mobile(这里是更新之前的 mobile)).Error 		if err != nil { 			DB.Error("user before update hook(mobile) error", zap.Any("err", err)) 		} 	}     } 

如上面的代码,只能按照文档里的说明,只能用 changed 来检测 col 是否被更改, 但是拿不到更新后的值。或者是上面的这种实现方法对么,求指点 问:如何实现这种在检测到值更改之后,然后用 更新后的值 再去做操作的 hook ?

表格数据储存,有什么便宜的提供商呢?

Posted: 14 Jun 2021 06:52 PM PDT

做了一个小 APP,目前用 LeanCloud 开发版,但是每天 3 万 API 请求不够用,大概需要七八万请求。但是商业版每天最低消费需要 30,有点小贵。

显示器后面有空间似乎心情会更好

Posted: 14 Jun 2021 01:57 PM PDT

一直以来我一直喜欢把显示器顶墙放,今天收拾了一下房间,将桌子显示器放在了房间的中间,房间并不大,但是整个人舒服了好多.

No comments:

Post a Comment