Sunday, August 8, 2021

V2EX - 技术

V2EX - 技术


关于 mysql change buffer 的 update/delete 操作如何获取到 affected rows 的问题

Posted: 08 Aug 2021 03:46 AM PDT

我仔仔细细把官网 ChangeBuffer 部分的章节看完了,仍然得不到这个问题的答案;请教知道的大佬解答一下,十分感谢!

将 Go 程序跑在裸机上之 LibOS

Posted: 08 Aug 2021 03:37 AM PDT

前言

之前我写过一篇探索在裸机上运行 Go 程序的文章,里面介绍了在裸机上运行 Go 代码需要的技术,顺便介绍了 eggos,一个运行于裸机的 unikernel 。

在编写eggos的过程中,我发现刨去内核代码,主程序代码其实就是一个普通的 Go 程序,跟其他 Go 程序一样从 main 函数进去,只不过从来不返回。

那能不能让其他普通程序也运行于裸机呢?因此我把 eggos 的 kernel 抽离出来,作为一个单独的库,其他应用程序只要写下 import _ "github.com/icexin/eggos",即可像 eggos 一样运行在裸机上。

即使是一个普通的 Go 程序,要在裸机上运行,编译过程还是有很多复杂的参数,因此我把这些编译过程封装了一下,编写了一个叫 egg 的程序,用这个程序来编译,打包,运行你自己编写的 Go 语言编写内核。

使用 Go 语言编写自己的 unikernel

eggos 的主仓库里面带了几个示范的例子,在 examples 目录下,下面一一介绍这些例子。

其中需要注意的是,机器的环境准备如下:

  • Go1.16.x
  • Qemu 模拟器

egg程序可以从 eggos 的 Release 页面下载,或者运行 go install github.com/icexin/eggos/cmd/egg@latest 得到。

我们的例子都是在 qemu 模拟器里面运行,如果想在真实的机器上运行这些例子,可以参考动画那个例子,使用 iso 镜像在真机上运行。

Hello Eggos

代码在 hello world

第一个例子比较简单,就是简单输出 hello eggos,用来检查你的环境是否准备完毕

$ cd helloworld $ egg run 

Concurrent prime sieve

代码在 prime sieve

第二个例子是 Go 官网经典的并发筛选素数的算法,这个例子展示了 eggos 使用 goroutine 的能力。

$ cd prime-sieve $ egg run 

HTTP 服务器

代码在 http server

第三个例子展示的是 eggos 的网络栈,可以运行 Go 标准库里面的 http

$ cd httpd $ egg run -p 8000:8000 

打开浏览器,输入 http://127.0.0.1:8000/hello 即可访问。

因为我们是在 qemu 里面运行,因此做了端口映射,如果是裸机上运行,把 127.0.0.1替换成机器 IP 即可。

交互式程序

代码在 repl

第四个例子展示了 eggos 的使用输入输出编写交互程序的例子,这个例子通过获取用户输入的字符串,计算其 sha1值,并输出到屏幕。

$ cd repl $ egg run 

通过关闭 qemu 的窗口即可关闭程序。

图形与动画

代码在 graphic

第五个例子展示了 eggos 操作图像的能力。Go 的标准库里面的 image 有基础的图形处理能力,eggos 借助 frame buffer,具备基础的处理图像的能力。

这个例子的代码是从 《 Go 程序设计语言》里面借鉴来的,本来的例子是生成一个 利萨茹曲线 (Lissajous curve) 的 GIF 动图,这里进行少稍微的改造,形成屏幕上的动画。

这个例子的命令比其他的多一些,之前的例子不牵扯到在屏幕上画图,我们使用 qemu 的 -kernel 参数加载内核即可,在这种模式下,qemu 是不会帮我们找到 frame buffer的。但在这个例子里面我们需要借助 grub 帮我们找到 frame buffer,因此生成了包含 grub 引导程序的 iso 镜像。

$ cd graphic $ egg pack -o graphic.iso $ egg run graphic.iso 

Hack 系统调用

代码在 syscall

eggos 本身只包含了一些基础 Linux 系统调用,来让 Go 的 runtime 能正常运行,但是一些第三方库如果使用了 eggos 没有提供的系统调用可能不可以正常运行,因此 eggos 提供了自助注册系统调用的能力。 这个例子展示了如何自助注册系统调用。

$ cd syscall $ egg run 

将内核运行在真机上

图形与动画 这个例子里面我们展示了如何将内核打包成一个 iso 文件,这个 iso 文件包含了引导程序,因此可以被真机识别并加载运行。

我们让裸机运行 iso 文件的通常的做法是把 iso 文件烧录到 U 盘或者移动硬盘里面,之后使用 U 盘或者移动硬盘插到电脑上,选择启动项运行。但在这里我推荐使用 ventoy来做启动盘,ventoy 只会格式化 U 盘一次,之后只用拷贝 iso 文件即可,非常方便。这是我在真机上的截图。

bare-metal

结语

借助于 Go 语言的包管理功能,我们成功提供了一个 libos 的 Go 语言实现,让普通 Go 程序也可以跑在裸机上,这是一个非常有趣的尝试,我后面希望硬件驱动之类的也可以模块化,大家在 eggos 这个 unikernel 框架下定制自己的内核像 import 普通 Go package 一样简单!感谢阅读!

原文地址: https://icexin.com/post/write-your-own-unikernel/

Python 不同程序 time 时间差异问题

Posted: 08 Aug 2021 03:37 AM PDT

场景:现在有两个程序,一个程序的运行需要依靠另一个程序的运算结果方可正常运行,如果集成到一个程序中,将造成代码臃肿、维护麻烦等一系列问题。两个程序均与时间有紧密的关系,精确度需要到毫秒级别(排除 time 本身的误差),现在第一个程序运算后得出一个时间,此时间作为第二个程序的输入。两个程序均设置 windll.winmm.timeBeginPeriod(1)。两个程序均使用 pyinstaller 打包。

疑问:其实这个问题从某个角度来说就是看 time 模块每次调用的时候是不是调用的 windows 系统时间。个人拙见!

问题:这种情况下,在同一台电脑上两个程序的时间能够达到毫秒级别精度同步,有哪位技术大牛能否给予技术解答,万分感谢。

[地图问题]请问生鲜外卖平台展示的地图一般使用的是哪个地图的信息?

Posted: 08 Aug 2021 03:35 AM PDT

昨天面试了一个卖菜的软件,直接问我会地图吗,回答不会就没有后续了

所以想问一下,如果不是自研的地图软件,那么一般使用的是哪家的地图。

看的是入口流量吗,例如微信小程序的地图用的是腾讯地图?

支付宝上面的是高德地图?

突然想到 py 一个简单的函数字符串缩写语法糖,不知道有没有现成的?

Posted: 08 Aug 2021 03:09 AM PDT

import magic  # 1 lambda 匿名函数表达式识别:没有分号`;`或者无括号参数声明 `args:` magic | "_: _.attr+1" magic | "*a,**k: a[0].attr+1"  # 2 def 多行函数识别:检测分号`;`或者括号参数声明`(args):`或者函数声明`def (args):`  magic | "_.attr+= 1; yield _.attr" magic | "(*a,**k): b=a[0].attr+1; yield b" magic | "def(*a,**k): b=a[0].attr+1; yield b" magic | "def *a,**k: b=a[0].attr+1; yield b"  # 3 传递位置参数引用:等价于 partial(func, *args),参数从左侧开始绑定。 magic | ["a,b: a+b", a, b]  # 4 传递关键字参数引用:等价于 partial(func, **kwrds) magic("a,b,c=None: c or a+b", c=c)  # 5 同时传递位置参数和关键字参数引用:等价于 partial(func, *args, **kwrds) magic("a,b,c=None: c or a+b", a, b, c=c)  # 6 隐式参数:`_` magic | "_.attr+1" magic | "def: b=_.attr+1; yield b" 

突然想到这么一个简单的语法糖格式,不知道是否已经被人提出实现过了?还是说这种魔法语法糖没有实用价值?那么有没有类似的纯字符串 DSL 语法糖库?或者大家有什么其他看法?

原理是将多行函数或函数表达式的缩写写在字符串里,然后构造出函数。

实现思路是简单地检测字符串,也可以用正则,甚至手写解释器。 转换回完整 python 函数也简单,补充完整函数声明然后 eval/exec 。

缺点是传值、闭包引用会比较麻烦,虽然应该可以通过 inspect 实现,但这么复杂和不纯函数不建议用字符串缩写。如果是完整的函数代码字符串,那根本就不需要缩写了。

优点是导入即可使用。而且可以进一步拓展支持自定义的函数语法糖格式。比方说想要更好可读性的语法糖,只要实现了对应 DSL 字符串转化为 python 函数的解释器就可以了。

国内腾讯云上部署的 AdGuardHome,接收到来自德国某研究机构的 DNS 探测

Posted: 08 Aug 2021 02:54 AM PDT

来自 IP 131.159.24.242 ,应该没有恶意,查看日志时发现的,之前经常清日志,没发现,至少从 7.10 开始,每隔 6 个小时请求 test.com 的 A 记录,大概是扫全网的 53,443,853,784 端口找到的 尝试直接访问 IP 的 80 端口,http://131.159.24.242 ,发现居然有说明,好像还挺有意思的

彦祖们,这个响应头的 location 怎么获取啊?

Posted: 08 Aug 2021 02:37 AM PDT

RT,怎么获取 location 呀?求指教

login

[root@centos ~]# cat t.py import requests headers = {     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62" } s = requests.session() r = s.get('http://jd.com/', headers=headers, allow_redirects=False) print (r.status_code) r_url = r.headers["Location"] print (r_url) 

执行报错了

[root@centos ~]# python3 t.py Traceback (most recent call last):   File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 706, in urlopen     chunked=chunked,   File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 445, in _make_request     six.raise_from(e, None)   File "<string>", line 3, in raise_from   File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 440, in _make_request     httplib_response = conn.getresponse()   File "/usr/lib64/python3.6/http/client.py", line 1346, in getresponse     response.begin()   File "/usr/lib64/python3.6/http/client.py", line 307, in begin     version, status, reason = self._read_status()   File "/usr/lib64/python3.6/http/client.py", line 268, in _read_status     line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")   File "/usr/lib64/python3.6/socket.py", line 586, in readinto     return self._sock.recv_into(b) ConnectionResetError: [Errno 104] Connection reset by peer  During handling of the above exception, another exception occurred:  Traceback (most recent call last):   File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 449, in send     timeout=timeout   File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 756, in urlopen     method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]   File "/usr/local/lib/python3.6/site-packages/urllib3/util/retry.py", line 532, in increment     raise six.reraise(type(error), error, _stacktrace)   File "/usr/local/lib/python3.6/site-packages/urllib3/packages/six.py", line 769, in reraise     raise value.with_traceback(tb)   File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 706, in urlopen     chunked=chunked,   File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 445, in _make_request     six.raise_from(e, None)   File "<string>", line 3, in raise_from   File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 440, in _make_request     httplib_response = conn.getresponse()   File "/usr/lib64/python3.6/http/client.py", line 1346, in getresponse     response.begin()   File "/usr/lib64/python3.6/http/client.py", line 307, in begin     version, status, reason = self._read_status()   File "/usr/lib64/python3.6/http/client.py", line 268, in _read_status     line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")   File "/usr/lib64/python3.6/socket.py", line 586, in readinto     return self._sock.recv_into(b) urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))  During handling of the above exception, another exception occurred:  Traceback (most recent call last):   File "t.py", line 8, in <module>     allow_redirects=False)   File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 555, in get     return self.request('GET', url, **kwargs)   File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 542, in request     resp = self.send(prep, **send_kwargs)   File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 655, in send     r = adapter.send(request, **kwargs)   File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 498, in send     raise ConnectionError(err, request=request) requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) [root@centos ~]# 

刚毕业小萌新,拒了去外包,收集一些看法

Posted: 08 Aug 2021 02:26 AM PDT

对于外包网上也是褒贬不一,但贬义好像偏多一些,没有赶上 21 届招聘,偶然得到个阿里 MMC21 届补录的机会,但最后一面(还有个 hr 面)凉了,直接和我说了结果,工作经验不足,表达能力不是很好(也就是 v 站说的情商低) 然后面试官开始劝我挂外包,最低开 16, 但还能谈,大概可以谈到 17 18 的样子,劝了很长时间( 2333 。。以上操作也是第一次听说),最后还是婉拒了。下周就要回实习的小公司干活了,工资相对少,但时间充裕一点,当时考虑到的一点就是去干了外包,就没有多少时间研究自己的项目了。等过一段时间再找机会尝试吧。最后祝所有 21 届的朋友,早点找到工作吧

goland 编辑器没有渲染出错误,运行时报错 undefined

Posted: 08 Aug 2021 01:25 AM PDT

windows 64 位

就是编辑器内没有报错(变红),但是运行时报错 undefined

手动调用过 go build 一样的错误,就算把这里的代码移走,别的地方一样报 undefined

goland 编译为目录编译,感觉不是这个问题,以前都没问题,goland 重启过了,还是报错

感觉是包管理的问题

我都没怎么动代码,过了一会儿再来运行一下就这样了

网上搜遍了,好像没有这种情况..

1 2

大家用的都是什么远程开发方案?

Posted: 08 Aug 2021 01:02 AM PDT

迫于不想折腾 M1 兼容性了,所以想还是远程到一台 x86 机器上开发好了(内网环境),目前用了一下 vscode 和 jet brains,各有各的优点。

vs code 远程连接功能做的确实很好,ssh 配置好就直接连到开发机了,直接打开项目文件夹就可以,项目文件也都在开发机上不需要下载到本地。但是在调试和面对 CMake 工程时,都需要写配置文件,这一点比较麻烦。可以说 vs code 就是个远程文本编辑器;

jetbrains 家的远程功能感觉就不那么"远程",需要把远端的代码都下载到本地来,而且在开启了自动上传的情况下,有时候会出现文件不同步的情况(也有可能是同步慢),文件到底同步没有还需要进到开发机里打开文件夹确认一下才行。而且如果我要换一个文件夹还需要重新在 deployment 里重新配置一下?但是 jetbrains 家的远程编译调试功能就很好用。

所以有没有一种方案既可以同时做到 vs code 远程连接和 jetbrains 远程调试?或者在实际工作中用的都是什么样的远程开发方案?个人还是比较偏向于 jetbrains 这种方案。

iOS 超级签名,使用最新的 zsign 实现,支持 Docker 一行命令启动 IPA 签名分发服务。

Posted: 08 Aug 2021 12:29 AM PDT

查看使用帮助:docker run --rm togettoyou/super-signature:latest -h

源码地址: https://github.com/togettoyou/super-signature

觉得可以给个 Star

请问各位大佬如何优化统计活动参与用户数据?

Posted: 07 Aug 2021 10:45 PM PDT

有一场抽奖活动,每个用户可以重复参与抽奖,前端需要展示参与的用户数,数据量大用 GroupBy Uid 查询很慢 T_T

请问各位大佬应该如何优化这个部分的查询呢?

vue + npm 前端开发

Posted: 07 Aug 2021 10:19 PM PDT

纯 Java 后端最近学了 vue,但是不知道如何完整的开发一个前端项目,看 vue 官方视频是用 npm,但是自己试着开发又容易出现问题不知道是哪的问题
求教 v 友们有好的实战视频推荐吗?

如何记录并统计 API 的调用,异常,有没有免费的网关组件,求教

Posted: 07 Aug 2021 09:12 PM PDT

最近我们竟让对接一些第三方的 API,但是这些 API 经常会出现问题,比如网络访问不可用,500 异常,请教下是否有开源免费的网关组件,可以记录,统计 API 的调用情况,最好能有个查看界面

求教如何为 seafile wiki 绑定域名

Posted: 07 Aug 2021 08:53 PM PDT

使用 seafile wiki 作为自己的博客,但是有一点不满意:seafile wiki 的首页类似:

https://cloud.seafile.com/published/seafile-user-manual/

我希望的是直接用 blog.seafile.com 这样的形式访问首页。

目前使用 www 子域做了一个引导页,但是感觉多了一个步骤,也不满意。

不考虑 301,请问还有其他办法吗?

请教大家一个 docker 镜像制作相关问题

Posted: 07 Aug 2021 07:45 PM PDT

工作中最近用到 docker,今天看了一天网上的教程看网上的教程 https://www.runoob.com/docker/docker-dockerfile.html

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

FROM centos RUN yum install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz 以上执行会创建 3 层镜像。可简化为以下格式: FROM centos RUN yum install wget \     && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \     && tar -xvf redis.tar.gz 

这里我试了这两种写法,docker 镜像的大小一样,这里制作 docker 镜像这两种写法有没有区别? centos:v3 是 3 个 run 生成的,v4 是第二种写法生成的。

[root Dockerfile]#docker image ls REPOSITORY        TAG       IMAGE ID       CREATED         SIZE centos            v4        ede9b36dd800   8 seconds ago   260MB centos            v3        6df19efb1980   3 minutes ago   260MB nginx             v3        3ca44131eb70   6 hours ago     133MB 

[求助] 请教一个关于 node.js 运行时崩溃 的问题

Posted: 07 Aug 2021 03:32 PM PDT

服务器迁移,重新部署生产环境,结果运行不了...

运行环境 Centos7

已经确认的

  1. 不是端口占用问题
  2. 不是 node.js 版本问题,和本地版本保持一致,也重装过一次
  3. 重新 npm install 也不行,尝试过的命令如下(顺序执行):
rm -rf node_modules rm package-lock.json npm cache clear --force npm install 

搜索引擎查了一晚上无果,只能来请教 V2EX 的各位了,谢谢各位。

error↓

[root@akebono mapshare_server]# npm start  > koa-quickstart@1.0.0 start /mapshare_server > nodemon --watch src -e ts,tsx --exec ts-node src/server.ts  [nodemon] 2.0.12 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): src/**/* [nodemon] watching extensions: ts,tsx [nodemon] starting `ts-node src/server.ts` Error: Cannot find module 'sha1' Require stack: - /mapshare_server/src/controllers/share.ts - /mapshare_server/src/routes.ts - /mapshare_server/src/server.ts     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)     at Function.Module._load (internal/modules/cjs/loader.js:725:27)     at Module.require (internal/modules/cjs/loader.js:952:19)     at require (internal/modules/cjs/helpers.js:88:18)     at Object.<anonymous> (/mapshare_server/src/controllers/share.ts:4:14)     at Module._compile (internal/modules/cjs/loader.js:1063:30)     at Module.m._compile (/mapshare_server/node_modules/ts-node/src/index.ts:858:23)     at Module._extensions..js (internal/modules/cjs/loader.js:1092:10)     at Object.require.extensions.<computed> [as .ts] (/mapshare_server/node_modules/ts-node/src/index.ts:861:12)     at Module.load (internal/modules/cjs/loader.js:928:32) [nodemon] app crashed - waiting for file changes before starting... 

Android 怎么屏蔽 youtube 广告?

Posted: 06 Aug 2021 03:02 PM PDT

下了个 adblock plus,没效果。

No comments:

Post a Comment