Monday, November 8, 2021

V2EX - 技术

V2EX - 技术


感觉在中小公司,很难不写出屎山代码

Posted: 08 Nov 2021 05:16 AM PST

第一个版本:

中小公司,一般第一个版本,都是赶工上架,以我的感受,基本都是没需求、没计划、没测试(测试没时间,只能随便试试)、领导马上就要,必须上线的状态。
导致第一个版本,无论如何都是屎山。很难不想着"赶紧先交差"。

后期迭代:

基础是屎山,屎山上加盖的建筑,很难不是屎山。

重构:

我的领悟是,小重构可以,绝对不要大重构。
除非领导要求,但领导能用就行,管 bug 、管功能、很少会管代码是不是屎山。

测试也是人,如果是新事物,比较容易认真测,如果是反复测试过的模块,很难用心测。码农也是人,新功能、新模块、思路清晰。大重构很容易大刀阔斧。

重构很容易重构出许多奇妙的、不易发觉的 bug 。写反而不会写出这样的 bug 。

如果是小重构,屎山代码,靠着小重构,根本无法应对下一波来屎(一年总是能遇到几次马上就要)

中小公司:

考虑到大家的水平比较高,我说的中小公司可能等于大家眼中的小公司。
目前呆过的互联网公司规模最大的 300+人,呆过的传统上市公司规模最大的 2000+人。

Elasticsearch On K8S 大家有用到吗,存储怎么解决的

Posted: 08 Nov 2021 05:09 AM PST

RT 。

K8S 「蒙」新一个。

目前正准备基于 ECK 在 k8s 集群上搭建一套 Elasticsearch 集群。

存储这块可能得用 local-pv 解决(公司没有 ceph 或者其他解决方案)。

找到一个local-path-provisioner 基本能满足需求,但不确定是否应该用此上生产...

想了解大家有类似 k8s 有状态应用(存储数据较多)场景的生产经验吗?推荐用什么解决存储。

React Split Components:一种全新的 React 函数组件写法,再不需要 Hooks

Posted: 08 Nov 2021 05:00 AM PST

1. 函数组件与 Hooks 的问题

1. Why 函数组件?

为什么 React 官方推崇函数组件? class 组件 "又不是不能用"。

因为函数组件更符合 React UI = f(state) 的哲学理念。

于是 Hooks 来了,给函数组件带来了 "内部变量" 与 "副作用",使其功能完备。同时也是 "逻辑共享" 解决方案。

2. 函数组件的问题

因为函数每次调用,都会把内部变量全都新建一遍,这在开发直觉上,总觉得有些不妥。

UI = f(state) 看起来像是纯函数,传入 state,返回 UI

就像 饭 = 电饭锅(米),但如果 电饭锅 每次煮饭都把 "电路系统" 全都新建一遍,这是反直觉的。

我们更希望 f 就是单纯的煮饭,其它功能是已经 "携带" 的,而不是每次都 "新建"。

3. Hooks 的问题

为解决变量新建问题,React 提供了 useStateuseCallbackuseMemouseRef 等。

state 得用 useState 包一下。传给子组件的复杂数据类型(函数、数组、对象),得用 useCallbackuseMemo 包一下(大计算量也得用 useMemo 包一下)。若需保留变量,得用 useRef 包一下。

而在 useEffectuseCallbackuseMemo 的实现里,必须有 deps 这个东西。

以上种种,都让 Hooks 写起来非常反直觉。我不就是用个变量、用个函数,怎么还得包一层?

不能像 Svelte 那样写代码吗?

2. 解决问题

1. 最符合直觉的 UI = f(state)

function Demo(state) {   return <div>{state.count}</div>; } 

2. React 是这么工作的:

function Demo(props) {   return <div>{props.count}</div>; } 

3. 若需组件 "携带" state 与函数,而不是每次新建,那就不能写在组件内:

let count = 0; const onClick = () => {   count += 1; };  function Demo() {   return <div onClick={onClick}>{count}</div>; } 

分开写破坏了一体性,不太好。有没有办法让组件既保有外部变量,又写在一个函数内?

4. 自然而然的,我们想到了闭包(注意内部返回的才是 React 组件):

function createDemo() {   let count = 0;    const onClick = () => {     count += 1;   };    return function Demo() {     return <div onClick={onClick}>{count}</div>;   }; }  const Demo = createDemo(); 

简化写法:

function demo() {   return () => <div />; }  const Demo = demo(); 

此时,onClick 函数不需要用 useCallback 包装,因为它永远不会被新建。使用闭包模式,我们成功解除了对 useCallback 的依赖

写到这里,其实已经讲完了 ... 嗯?那这组件怎么用呢?!

3. 让能力完备

1. 解决 useState 与组件更新:

// 公共辅助函数 const useRender = () => {   const [, setState] = useState(false);   return useCallback(() => setState((s) => !s), []); };  function demo() {   let render;   let count = 0;    const onClick = () => {     count += 1;     render();   };    return () => {     render = useRender();      return (       <>         <h1>{count}</h1>         <button onClick={onClick}>Click me</button>       </>     );   }; }  const Demo = demo(); 

将组件内才有的 setState,被 "重新赋值" 给外部变量 render,供组件外使用。若需更新,手动调用 render() 即可(当然,函数命名随意比如 update,这里介绍的是设计模式,具体实现没什么约束)。

于是,我们成功解除了对 useState 的依赖

上面已经是个可用的组件了,在这里试试:codesandbox.io/s/react-split-components-1-ycw80

2. 解决 useMemouseRef,解决 props:

function demo() {   let render;   let props;    const getPower = (x) => x * x;    let count = 0;   let power = getPower(count); // for useMemo   const countRef = { current: null }; // for useRef    const onClick = () => {     // props 解构必须写在函数内,因为外部初始 props 值为 undefined     const { setTheme } = props;     setTheme();      count += 1;     power = getPower(count);     render();   };    return (next) => {     render = useRender();     props = next;     const { theme } = next;      return (       <>         <h1>{theme}</h1>         <h1 ref={countRef}>{count}</h1>         <h1>{power}</h1>         <button onClick={onClick}>Click me</button>       </>     );   }; }  const Demo = demo(); 

propsrender 一样以 "重新赋值" 传递出去。然后我们仔细想一下:通过闭包,useMemouseRef 其实已经不需要了。

useMemouseRef 是因为变量每次都新建,得包一下,而使用闭包,变量不会新建,且组件天然持有变量更新后的值,这一切都是 JS 的运行机制,自然而然。

useMemo 的类似 computed 的运算机制,改成手动触发即可。把 useMemo 的声明式写法改为 "手动调用" 的命令式写法,这更符合直觉(就像 class 组件时代一样)。

于是,我们成功解除了对 useMemouseRef 的依赖

上文代码,在这里试试:codesandbox.io/s/react-split-components-2-wl46b

3. 解决 useEffectuseLayoutEffect

const useRender = () => {   // 省略其它代码...   const [layoutUpdated, setLayoutUpdated] = useState();   const [updated, setUpdated] = useState();    useLayoutEffect(() => layoutUpdated?.(), [layoutUpdated]);   useEffect(() => updated?.(), [updated]);    return useCallback((onUpdated, isLayoutUpdate) => {     // 省略其它代码...     if (typeof onUpdated === 'function') {       (isLayoutUpdate ? setLayoutUpdated : setUpdated)(() => onUpdated);     }   }, []); };  function demo() {   let render;   let count = 0;    const onClick = () => {     count += 1;     render(() => {       console.log(count); // 将在 useEffect 中调用     });   };    return () => {     render = useRender();      return (       <>         <h1>{count}</h1>         <button onClick={onClick}>Click me</button>       </>     );   }; }  const Demo = demo(); 

利用已有的 render 函数来实现 useEffect,这样更简洁(当然也可以另加函数)。

此时,render() 可以直接调用,也可以传入参数,render(onUpdated, isLayoutUpdate)isLayoutUpdate 决定 onUpdated 是在 useEffect 还是 useLayoutEffect 中调用。注意:理论上 render 可以调用多次,但 React 只触发一次更新,所以如果每次都传入 onUpdated,则只有最后一个生效。

于是,我们成功解除了对 useEffectuseLayoutEffect 的依赖

在这里试试:codesandbox.io/s/react-split-components-3-zw6tk

4. 解决 "useMount"

React 组件有个非常基础的需求,在 didMount 中发送接口请求。Hooks 将 didMount 和 didUpdate 统一为 useEffect 后,此需求就多了一个理解步骤,于是无数项目里自行实现了 "useMount"。

上文方案中,外部变量得在组件首次渲染后才赋值,这带来了一个问题:render 在首次 useEffect 之后才可用(所以特意将参数命名为 onUpdated),那 "useMount" 怎么实现呢?我们利用一下 useRender 的参数。

const useRender = (onMounted, isLayoutMount) => {   // 省略其它代码...   const layoutMountedRef = useRef(isLayoutMount && onMounted);   const mountedRef = useRef(!isLayoutMount && onMounted);    useLayoutEffect(() => layoutMountedRef.current?.(), []);   useEffect(() => mountedRef.current?.(), []);    // 省略其它代码... };  function demo() {   let render;   let data;    const onMounted = () => {     request().then((res) => {       data = res.data;       render();     });   };    return () => {     render = useRender(onMounted);      return (       <>         <h1>{JSON.stringify(data)}</h1>       </>     );   }; }  const Demo = demo(); 

这样就行了,在这里试试:codesandbox.io/s/react-split-components-4-y8hn8

5. 其它 Hooks

目前为止,我们已经解决了 useStateuseEffectuseCallbackuseMemouseRefuseLayoutEffect,这些是日常开发中最常用的。官方 Hooks 里还剩下 4 个:useContextuseReduceruseImperativeHandleuseDebugValue,就不一一处理了。

简单来说:如果某个组件内才能拿到的变量,需要在组件外使用,就以重新赋值的方式传出去

在此设计模式下,任何已有需求都是可以被实现的,所谓 "功能完备"。

4. 隆重介绍 React Split Components (RiC)

就像 Higher-Order Components 一样,这种设计模式得有个命名。

考虑到它是把 "变量 + 逻辑" 与 "组件体" 分离的闭包写法,学习 React Server Components 命名格式,我将其命名为 React Split Components,可简称 RiC,小 i 在这里可以很好的表达 "分离" 的特点(主要是搜索后发现,RSC 、RPC 、RLC 、RTC 竟然全被占了,天啊,"split" 一共就 5 个字母)。

React Split Components 的特点:

1. 解除对 Hooks 的依赖,但不是指纯函数组件

通过闭包,天然无需 Hooks 包裹。这能让 React 开发者从 "函数组件的反直觉" 与 "Hooks 的繁琐" 中解放出来,写出类似 Svelte 的纯 JS 直觉代码。

毕竟闭包是 JS 的天然特性。

2. 仅在写法层面,无需 ESLint 支持

其实在设计 useEffect 实现的时候,我想到了一种利用现有代码的写法:将 useEffect(fn, deps) 变为 watch(deps, fn)。但如果这么写,watchdeps 就需要 ESLint 插件支持了(因为 Hooks deps 就需要插件支持,否则很容易出错)。

若无必要,勿增实体。我们要将实现尽可能自然、尽可能简化、尽可能符合直觉。

3. 类似高阶组件,是一种 "设计模式",非 API ,无需库支持

它不是 React 官方 API ,无需构建工具支持(比如 React Server Components 就需要)。

它无需第三方库支持(其实 useRender 可以封装为 npm 包,但考虑到每个人习惯不一、需求不一,所以尽可以自己来实现辅助函数,上文代码可作为参考)。

React Split Components 最终代码示例:codesandbox.io/s/react-split-components-final-9ftjx

5. Hello, RiC

React Split Components (RiC) 示例:

function demo() {   let render;   let count = 0;    const onClick = () => {     count += 1;     render();   };    return () => {     render = useRender();      return (       <>         <h1>{count}</h1>         <button onClick={onClick}>Click me</button>       </>     );   }; }  const Demo = demo(); 

多么 Svelte ,多么直觉,多么性能自动最优化 bye bye Hooks 。

GitHub: github.com/nanxiaobei/react-split-components

为什么 Gin/Echo 框架在 TechEmpower 的框架性能排名这么低?

Posted: 08 Nov 2021 04:46 AM PST

www.techempower.com/benchmarks/

分别是 162/196 名

etcd 一次性插入大量数据导致超时

Posted: 08 Nov 2021 04:45 AM PST

数据量大概在一百万条,一开始是每次插入建立一个新连接,发现 put 操作超时,后面改成了 put 共用一个连接,在跑了两小时后仍然超时,想问下各位有没有比较好的办法做这个操作,还是说我应该想办法了解为什么超时,服务器间网络是没有问题的。

收到一个 Bearer token 或者 config 文件,如何判断是不是 admin 权限

Posted: 08 Nov 2021 04:33 AM PST

RT
想到一个办法就是
kubectl auth can-i * * -A

go 运行环境一般是 windows, 还是 Linux ?

Posted: 08 Nov 2021 04:08 AM PST

感觉一些库在 win 和 linux 下有差异。

估计是老问题了, vue 在组件中 created 里用 ajax 或者 axios 请求数据,但是数据在 mounted 前没返回

Posted: 08 Nov 2021 03:57 AM PST

render 页面控制台上会出错,怎么处理?

改成 async: false ,不太优雅。看别人页面上转圈圈,直到数据返回,这个怎么实现的。

群晖、威联通的照片备份被各类网盘相册吊打

Posted: 08 Nov 2021 03:42 AM PST

群晖,威联通备份 iOS 的 live photo 到 nas 上,再从 nas 保存到系统相册里,就不是 live photo 了。

再说人脸识别,同一个人识别成几十个人是常态,多个人识别成一个人更是家常便饭。相册应用更是 Bug 满天飞,研发水平真的不敢恭维。

而百度云盘、阿里云盘、OneDrive 、谷歌相册都不会这样。

不得不说两大厂商的软件实力真让人失望啊。所谓市场占有率只是因为别的企业没有进入这个市场吧。

请教一个 ssh 问题

Posted: 08 Nov 2021 03:13 AM PST

机器为 M1 Macbook air ,操作系统为 macOs Big Sur 11.6 。 今天机器突然不能被 ssh 登陆了,提示

ssh_exchange_identification: Connection closed by remote host 

机器的 system.log 为

(com.openssh.sshd.86030324-DFE4-4A3F-B3A2-2E56573A7B8A[3627]): Service exited with abnormal code: 255 

重启 ssh 服务报错

(com.apple.xpc.launchd.domain.system): entering bootstrap mode (com.openssh.sshd): Unknown key for string: SHAuthorizationRight (com.apple.xpc.launchd.domain.system): exiting bootstrap mode 

Google 查了半天,没找到解决办法,请教一下各位 v 友有没有碰到类似的情况

通过 windows 任务栏图标启动的程序,如何设定该程序运行时的环境变量

Posted: 08 Nov 2021 03:10 AM PST

1 、不能修改系统的环境变量设置

2 、不能使用 cmd 命令、脚本、或在包装一个 launcher.exe 程序等,因为这样的话,使用原程序的任务栏图标启动后,是没有这个环境变量的

3 、方法要尽可能通用

springboot 的 controller 的方法能用 static 修饰吗?有什么影响没?

Posted: 08 Nov 2021 02:30 AM PST

如题,不太清楚,求教

    @GetMapping("/list")     public static JsonResult<EventListDto> getEventList(@RequestParam int pageIndex,                                                         @RequestParam int pageSize) {         return new JsonResult<>();     } 

有没有支持 TRIM 的 NVMe 硬盘盒?

Posted: 08 Nov 2021 02:21 AM PST

NVMe USB 硬盘盒子,5G ,10G ,20G 速度无所谓。

要求 Linux 下开箱即可支持 TRIM 指令,不用修改 udev 配置文件等。

游戏服务器和中间件

Posted: 08 Nov 2021 02:18 AM PST

一直对中间件感兴趣,想把它应用到自己的项目中。本人是做游戏服务器的。但好像场景有点不符合。我的场景大致如下:

接入服务器 AccessSvr(用户通过 tcp 连接)和游戏服务器 GameSvr 之间通过 proxy 进行消息的通信。且消息都是双向的(request/response)。AccessSvr 和 GameSvr 都可以部署多台。AccessSvr 转发用户请求到 Gamesvr 时 proxy 负责负载均衡到某一个 Gamesvr 。Gamesvr 处理完成后要回发 response 到对应的 Accesssvr(哪个 AccessSvr 发出的就回发到哪个 AccessSvr ,因为要找到对应的用户 tcp 连接)。但这样做有一个问题就是 proxy 存在单点故障。所以我尝试把 proxy 替换成了阿里云的 AMQP 中间件。但是这种中间件基本都是单向的。向后发的时候支持负载均衡。但后面处理完成,回发 response 时就找不到对应的服务器了。请问有什么好的办法既解决局了单点故障的问题,又能实现分布式部署

有人接过摄像头 API 吗?哪家开发方便,直播+录播

Posted: 08 Nov 2021 02:11 AM PST

海康威视和萤石都有自己的接口文档,哪个接起来方便点?或者其他品牌

一方面是要有直播和录播功能

另一方面我需要集成到 App 里面,App 是基于 Uniapp 做的,不是原生代码

高并发服务器 tcp 内核参数优化及对于连接池配置数量请教

Posted: 08 Nov 2021 02:00 AM PST

现在遇到的问题:

现在业务有 15 台服务器做负载均衡,nginx 轮询方案。其中有 3 台服务器,对 kafka 集群、mysql 、redis 的连接数,要大于其他的服务器。造成这 3 台的接口响应时长比较长。

服务器配置相同( 8 核 8G );

跑的项目相同:

php 语言,hyperf2.0 框架,接口整体 qps 目前在 9000 左右,单机负载 qps600 左右。

服务器承载的 qps 相近,都是 600 左右。

新建服务器时,用的同一个镜像,但是都进行过一些 tcp 参数调优:

echo '1200'> /proc/sys/net/ipv4/tcp_keepalive_time echo '8192'> /proc/sys/net/ipv4/tcp_max_syn_backlog echo '10000'> /proc/sys/net/ipv4/tcp_max_tw_buckets echo '1'> /proc/sys/net/ipv4/tcp_tw_reuse echo '30'> /proc/sys/net/ipv4/tcp_fin_timeout echo '1024 65000'> /proc/sys/net/ipv4/ip_local_port_range echo '131072' > /proc/sys/net/ipv4/tcp_max_orphans echo '383652 511537 767304' > /proc/sys/net/ipv4/tcp_mem echo '32768' > /proc/sys/net/ipv4/tcp_max_orphans echo '93723 124966 187446'> /proc/sys/net/ipv4/tcp_mem 

下面是两台服务器连接数的情况:

#正常的服务器 941 10.10.45.199 357 10.10.55.43 356 10.10.28.148 353 10.10.85.51 320 10.10.59.7  #异常的服务器 771 10.10.45.199 652 10.10.55.43 651 10.10.28.148 649 10.10.85.51 442 10.10.58.73  # 45.199 是 nginx 服务器;排在前 2 、3 、4 的是 Kafka 集群;可见异常的服务器连接数比正常的服务器要多 

疑问:

  1. 有没有哪位大佬知道可能存在的原因是什么呢?并且如何解决呢?

求助, chrome 实验室的实验 API 接口地址有谁有吗

Posted: 08 Nov 2021 12:19 AM PST

如题,官网的提供的地址 404 了。公司要求前端可以控制实验室( chrome://flags/)里面的配置选项,最新的 chrome 版本默认配置了一些选项,阻拦了我司插件的一些请求,但是客户又不会手动改,只好叫我们开发人员来通过代码配置,不知道能行不,各位支支招。

求问:关注时间线怎么实现

Posted: 08 Nov 2021 12:07 AM PST

最近在学怎么做关注流,网上的资料都是说根据粉丝数量,混合使用拉模型和推模型,有点细节一直困扰我:

推模型比较容易理解,拉模型则要遍历所有关注的用户取动态,结合成时间线,但是每个用户发动态的时间是不一样的,感觉要从一个时间点开始取,比如每个关注取 1 天内的动态,最后看结果能不能构成一页,不够的话继续向前取,超出的话缓存起来。这样感觉效率很差,每个关注都要查一次,另外如果用户的关注过多,1 天内的缓存会太大,如果关注过少,会一直循环向前取,想问下拉模型的实现方式,或者还有什么更好的方法吗?

如何计算应用/process 消耗的 IOPS

Posted: 07 Nov 2021 11:50 PM PST

我们公司算法团队在跑模型训练,然后我们想计算一下,某个进程 /某个用户下的进程运行一次需要多少 IOPS 。

请问 V2EX 的吴彦祖,彭于晏,廖凡们有什么方法吗?

有用过阿里云的 polarDB 的吗?

Posted: 07 Nov 2021 11:17 PM PST

有用过阿里云的 polarDB 的人吗?看着功能不错,可以剩下不少自搭数据库集群的成本,不过价格也是真的贵,不知道实际使用起来怎么样?想听听过来人的经验或者坑。

请教大家关于阿里 OSS 签名的一些问题,感谢感谢

Posted: 07 Nov 2021 11:12 PM PST

项目中有视频需要做 OSS 的签名,每次签名当前链接有效期 3 天,每一个视频集里面有大约 1000 条视频,前端每次分页去拿,现在是每晚 12 点去做批量签名,数据量上来后,晚上的批量签名就占满了 CPU 的占用(批量 upd 语句),之前考虑过一种方案是,用的时候再去签名,这样感觉接口上会慢。因为会出现冷门数据和热门数据,新上传的视频是热门,过了 1 个月,就可能是冷门数据了。

求个 chrome 自动识别弹窗并点击关闭的插件或者代码

Posted: 07 Nov 2021 10:33 PM PST

主要是想下载购买的网课,但是是 ts 加密的 尝试了很多办法无法下载 决定还是录屏吧。

这个网课会自动进入下一节 但是由于有些课程是看过了,每次自动切换下一节后会弹出一个 是否从上次进度观看的选项。因为这个课程太长了 不可能随时盯着电脑,所以有什么可以自动识别 弹出的窗口 并点击 相应按键的

有一个关于 mathJax 中根号的问题

Posted: 07 Nov 2021 09:24 PM PST

我因为需要使用到 latex 转 html ,于是就下载了 mathJax ,但是目前有一个问题,就是根号的高度是固定的,即使里面是个分数,他依旧是固定的,导致只能包裹住分式的分子,想问一问这个该怎么解决 是在这个添加 style 这块添加吗?

e.prototype.addCharStyles = function (t, e, r, n) {                     var o = n[3], i = void 0 !== o.f ? o.f : e;                     t["mjx-c" + this.charSelector(r) + (i ? ".TEX-" + i : "") + "::before"] = {                         padding: this.padding(n, 0, o.ic || 0),                         content: null != o.c ? '"' + o.c + '"' : this.charContent(r)                     } 

SpringBoot 的 DataJpa 插入数据时,数据库(mysql)中字段默认值不生效怎么解决?

Posted: 07 Nov 2021 09:16 PM PST

如题。

求帮忙设计代码 关于异步线程的开启和暂停

Posted: 07 Nov 2021 08:51 PM PST

需求是存在一个任务,是一个单独的线程,任务执行过程中存在多次暂停(比如调用 wait )

有一个 run 接口启动这个任务,并存在一个 next 接口唤醒这个任务

2 个接口在启动或者唤醒任务后,等待任务再次暂停,并返回任务中的一些数据。

需求场景是实现一个代码的测试功能,一串代码存在一系列的断点,前端页面点击下一步才能往下走,并且页面上可以显示对应的变量信息。类似在线 java 代码调试一样的东西。

新品发布 | Cloudpods 3.8.4 版本上线!

Posted: 07 Nov 2021 07:58 PM PST

Cloudpods 是一个开源的 Golang 实现的云原生的多云和混合云融合平台。Cloudpods 不仅可以管理本地的虚拟机和物理机资源,还可以管理其他公有云和私有云平台的资源。

Cloudpods 由北京云联壹云技术有限公司主导开发,并于 2019 年 9 月于 Github 开源。Cloudpods 采用核心开源模式,其商业版本云联壹云企业版( YunionCloud )自 2017 年开始研发,已经服务了上百家企业客户。**

11 月 4 日,Cloudpods 新版本 v3.8.4 正式发布。这次小版本更新主要增加了一些近期客户需求以及 BUG 修复。主要的更新为:

1 、支持多租户管理。 这个版本我们正式开源认证服务模块,支持多项目和多用户,支持对接 LDAP ,认证模块的开源允许用户可以在企业多人协同的场景使用 Cloudpods

2 、CentOS 7 ARM 支持。宿主机支持在 CentOS 7 arm64 发行版部署。

3 、其他一些小的优化。例如我们在本版本增加了私有云虚拟机对 Q35 机型的支持,同时支持切换远程终端协议等。

另外也对 3.8 初始版本引入的 VMware 主机可能无法创建问题以及由于 9 月 30 日 CentOS 7.6 根证书失效引起的一系列问题进行了修复。

以下是本次版本更新的详细内容:

新功能 (New Features)

[系统] Cloudpods 支持用户及项目管理

[主机] 私有云虚拟机支持设置机器类型( pc 或 q35 ),远程终端协议( vnc 或 spice )等属性

[主机] 私有云虚拟机支持更换磁盘底层存储

[多云] GCP region 级别的负载均衡资源同步

[部署] 宿主机支持在 CentOS 7 arm64 发行版部署

[监控] 新增监控资源列表

优化 (Enhancements)

[主机] webconsole 控制台支持更多快捷键

[费用] 时间过滤控件统一(企业版)

[面板] 支持自动向上排序

[多云] CDN 、MongoDB 支持标签双向同步

[多云] 前端云账号开启自动同步后,无法对云订阅进行手动同步

[裸金属] 提高装机并发率

问题修复 (Fixes)

[主机] 重装系统查找系统分区

[主机] bongding 失败修复

[主机] 打开 VMware 的 H5 控制台失败

[裸金属] 安装 ubuntu 20.04 系统配置 bonding 失败

[主机] Openstack eip 同步不正确

[主机] 前端创建虚拟机网络选择属性错误

开源地址: https://www.cloudpods.org/

GitHub 地址: https://github.com/yunionio/cloudpods

怎么创建一个类,做到不能创建这个类自身的实例,但可以创建这个子类的实例?

Posted: 07 Nov 2021 05:01 PM PST

Windows11 长时间休眠后开机时会黑屏很久

Posted: 07 Nov 2021 04:52 PM PST

现在使用的是 Windows 11 22000.282 ,但这个情况在预览版时就已经出现。

电脑是联想小新 13 Pro 2020 ( AMD 版本 )。

出现的情况是:长时间休眠过后再次开机时,在出现过厂商的 UEFI 图标之后,电脑会处于一段大约三十秒的黑屏状态,之后才能够正常开机。

不知道是啥原因,麻烦各位 V 友帮忙看下。感谢!

下附事件查看器截图: I3ZfPK.png I3Z2Ux.png I3ZR56.png

Waifu2x-ncnn-vulkan 现已被移植到 Android|应用名 waifu2x ncnn

Posted: 07 Nov 2021 04:47 PM PST

Waifu2x ncnn vulkan 就不用说了吧。
目前 App 上可用原版的全部三个 model: cunet/upconv-anime/upconv-photo 。不过 TTA 模式有问题,就屏蔽了(个人觉得 TTA 效果提升有限,就暂时不优先处理了)(三个模型均免费可用)
工作情况上,因为调用 AI 模型本身就很吃性能,所以低端机器就别想了。目前看,835 机型还是能勉强跑的,然后 A73 大核的 SOC 拿 CPU 跑也是还行的。内存目测至少要有 3G 。(软件本身处理时内存占用 1G 以内)
Google Play 上的地址: https://play.google.com/store/apps/details?id=pro.archiemeng.waifu2x

PS: 为什么会想到做这个项目呢?因为中间叛逃 iOS ,然后发现 iOS 有 imxieyi 的 waifu2x-ios 这样的本地实现。后面换回 Android 就发现要么是要上传服务器处理的套壳应用,要么是楓ソフトウェア的老得不能再老的用 CPU 跑的(然而本应用就算是用 cpu 跑也比它快多了)要强行在安卓上用 waifu2x ncnn vulkan 也不是不行,就是要用 termux 。( https://github.com/tanyiok1234/waifu2x_srmd-ncnn-vulkan-termux-binary) 同时还看到知乎有人拿 ios 有 waifu2x-ios ,而安卓没有类似的来秀 iOS 的优越。我就忍不了了真的。(当然,这个应用本身就有向 waifu2x-ios 学习,设计上有参考)
PS2:感谢 nihui 大佬的 waifu2x ncnn vulkan 项目,让一大票非 N 卡机器也能跑 waifu2x ,同时也让本 app 得以问世。
PS3:第一次独立制作发布应用,肯定有不完善的地方,请谅解。

C#是不是都只能看源码,不提供文档

Posted: 07 Nov 2021 04:21 PM PST

先声明我是 C#的新手,保命。

想用 yaml 来做桌面的导入数据和配置文件,有个库叫 yamldotnet,它的官网就给了几个例子。

我的需求是解析 yaml 文件嘛,相关的官网只给了一个 Loading a YAML Stream 的例子.

看了半天才把几个 Class 的定义吃透,这是普遍现象吗?

难道我用一个包都得扒源码才能弄明白这个类是干嘛的吗?....后端都这样吗?太可怕了...

有偿-爬虫模拟登录问题

Posted: 07 Nov 2021 07:42 AM PST

因公司业务需要,需要做一个网站的监控,只要监控到某个型号有上架,就微信通知业务员下单,目前卡在模拟 [登录环节] 上,寻求大神有偿协助

Showcase 可以用 neovim 干啥

Posted: 07 Nov 2021 06:06 AM PST

仅仅是秀一下,具体配置见 这里

UI Demo

For more UI demos, see here.

Start screen with alpha-nvim

fuzzy finding using LeaderF

Autocompletion

Git add, commit and push via fugitive.vim

Tags

Cursor jump via hop.nvim

Go to a string starting with se

GUI-style notification

问下各位 v 友,零基础转行功能测试的, 3 个月了不会写测试用例,这正常吗?

Posted: 07 Nov 2021 04:24 AM PST

零基础转行功能测试的,3 个月了不会写测试用例,这正常吗?正常的应该怎样?

No comments:

Post a Comment