Python 的 WSGI 简单了解 我们都知道通用的部分可以抽取出来,做成一个组件供其它应用使用。所以 WebServer 就是这样一个组件,它负责接收用户的请求,然后交给用户的Web应用,等到它处理完成之后,再把响应数据返回给调用者。所以,WebServer 要和 WebApplication 进行交互,那就需要定义一个协议或者更专业一点叫做接口,因此这就是 WSGI。而实现 WSGI 接口的,我们则成为 WebServer 或者 WSGI Server。
基于字典树可视化 COCA20000 词汇 COCA20000 是美国当代语料库中最常见的 20000 个词汇,不过实际上有一些重复,去重之后大概是 17600+ 个,这些单词是很有用,如果能掌握这些单词,相信会对英语的能力有一个较大的提升。我很早就下载了这些单词,并且自己编写了一个背单词的简易工具,如果有需要的同学,可以去看我的博客中搜索。今天这篇博客是利用字典树来堆单词的一个可视化。
5分钟在 VSCode 中使用 PlantUML 绘图 去年,写过一篇在 VSCode 中使用 PlantUML 的博客,那时候我嫌弃本地安装麻烦,所以采用的是在本地运行 docker 容器的方法部署的 PlantUML 服务端。不过,现在来看这样还必须依赖在本地手动启动 docker 容器(如果有一个不停机的服务器,那 docker 容器确实是一个好办法),这样确实是太麻烦了,依赖外部网络的方式又不太稳定了。所以,还是老老实实在本地安装 JAVA 环境和 jar 包这样的方式吧,而且遵循我的这篇博客,我保证你只需要 5 分钟就可以做到了(下载软件的时间不算哈。
Python装饰器带括号和不带括号的理解 装饰器本质上是一个可调用对象(通常是函数),它接受一个函数作为输入,并返回一个新的函数作为输出。这个新函数通常会在执行原始函数前后添加额外的操作,从而扩展或改变原始函数的行为。Python 提供了简洁的语法糖来应用装饰器,即在函数定义之前使用的格式。pass这里的实际上是一个语法糖,会将传递给函数,并将返回的结果重新绑定到上。pass这里需要强调一下,是将传递给 @ 后面的整个部分,可以在看完文章之后再返回来理解一下这句话。
使用 mitmproxy 抓包 grpc 昨天在本地执行 grpc 的 quick start(python版本的),我了解 grpc 内部使用的是 HTTP2,所以我就想着抓包来试试,下面就来记录一下这个过程中的探索。注意:我的电脑上面安装了 Fiddler Classic,不过它并不支持 HTTP2,最新的 Fiddler Everything 支持,不过这个是收费版本的,我就去下载了 mitmproxy 这个开源的软件。
Docker Desktop 不支持 host 网络模式 先把这个结论的放在前面,直接访问链接就能看到官方文档中已经明确说了不支持。以前对于 docker 的网络模式,一直只是了解,没有亲自尝试过。结果今天在尝试 docker 的 host 网络模式时,发现无论如何都无法通过localhost和127.0.0.1访问宿主机的服务,只有通过本机的 IP 访问。我尝试询问 AI 来解决,但是它说的我也知道,不过我的问题是无法访问。
基于 Docker 的 go grpc quickstart 工作之后一直使用的 RPC 框架是 Apache 的 thrift,现在发现 grpc 更流行,所以也要学习一下,先来简单的跑一下 demo。在本地安装运行也很方便,不过因为有了 docker,所以在 docker 里面安装运行隔离性更好,顺便也提升 docker 命令行的熟练度。
基于 Docker 的 python grpc quickstart 工作之后一直使用的 RPC 框架是 Apache 的 thrift,现在发现 grpc 更流行,所以也要学习一下,先来简单的跑一下 demo。在本地安装运行也很方便,不过因为有了 docker,所以在 docker 里面安装运行隔离性更好,顺便也提升 docker 命令行的熟练度。
如何通过内网穿透+代理共享网络 好了,整个流程已经全部走通了。这里面可能说得不是十分详细,因为有些话还是点到为止比较好。对于需要了解的人,大概率是可以看懂的,如果本身不了解这些东西的话,还是不要去了解为好。总得来说,多了解一些东西,在需要的时候还是可以用起来的。我对网络这一块还是蛮感兴趣的,但是一直了解的都是一些比较浅显的知识,更多的是网络的应用了,哈哈!
DragonEnglish:COCA20000+单词+释义 因为我当时接触的版本只有单词或者单词+释义的版本,所以我直接通过各种方式给它搭配了音标+例句+发音,然后每100个切割成1份,分成了 202 个文件来学习,因为是纯静态的文件我还把它使用 Nginx 镜像打包,给挂到了我的阿里云服务器上面了。前段时间,又把之前的代码翻出来了,果然再看自己之前的代码感觉一团糟,所以我就给删改了很多,然后传到 github 上面了,希望也可以帮助有同样需求的朋友。然后正好到年底了,再水一篇博客来作为今年的结尾的,2023年诸事不顺,希望新的一年可以有新的改变。
基于 Gin 的 HTTP 代理上网行为记录 demo 前端时间写了好几篇使用 Gin 框架来做 HTTP 代理 demo 的文章,然后就想着做一个记录上网行为的小工具,就是简单记录看看平时访问了什么网站(基于隧道代理的,不是中间人代理,所以只能记录去了哪里,不能记录干了什么)。不过因为编译问题一直没有解决,我又不想重新在 Windows 上安装 Golang 的开发环境,所以就把它搁置了。最近正好把那个交叉编译的问题解决了,所以就把这个博客也发出来吧。
Golang在 Docker 中交叉编译 Windows 所谓编译就是把代码变成二进制可执行文件的过程。代码就是一段 Unicode 字符,它是肯定可以跨平台的,但是最终运行的并不是它(最终运行的是代码的编译产物)。我们平时写完一个小程序,直接就点击运行了。但是这里的代码其实是不能直接运行的(编译型语言),它内部还是要进行一个编译的过程,把代码转成目标平台的二进制可执行文件。这个二进制可执行文件是和操作系统和目标架构绑定的,所以你换一个操作系统或者架构它就不能运行了。
基于 Gin 的 HTTP 中间人代理 Demo 这篇博客和上一篇博客之间已经隔了好久了。因为理解这个中间人代理的过程遇到了困难,再加上时间不是很充足,也就没有继续写这个主题的内容。最近刚好又有了时间了,所以就集中时间看了很多内容,测试代码(因为 TSL 发生了错误基本上看不懂什么意思,感觉自己掌握的知识和工具还是太少了,很多错误只能束手无策了),也算是对这个东西有了一个新的理解。我其实还是更喜欢盲转发的代理,因为那样实现起来更简单,可以做一些上网行为统计的小工具玩一玩。
基于 Gin 的 HTTP 代理 Demo(2) 上次写了之后,对这方面还是蛮感兴趣的,所以就接着继续走下去。为了这个主题的内容,我斥巨资购入了一本二手的 《HTTP 权威指南》,因为我知道这本书里面有我想要的知识。在我还在大学的时候,我就看过这本书的前面关于 HTTP 协议的基本知识,当时正好也接触了 Fiddler,所以就利用 Fiddler 进行学习。抓取协议,了解各个字段的含义,尝试用JAVA的 TCP 来模拟,因此对于 HTTP 协议有了一个基本的认识。
如何通过代理共享网络 昨天在探索用 Gin 实现 HTTPS 代理,学习到了很多新的知识点,感觉可以把以前的内容串联起来了。然后在睡觉的时候,想到了怎么通过代理共享网络的问题。这个问题已经思考过了好几次,但是还是有一点模糊,昨天不知道怎么的,感觉有点想通了,事不宜迟得赶紧记录下来。我在电脑上面安装了 Fiddler,一个抓包软件,它算是一个 HTTP 代理软件。我使用它主要是用来学习 HTTP 协议,很多问题,要是可以亲眼看上一眼,其实就能解决了。
基于 Gin 的 HTTP 代理 demo 上次用 TCP 模拟了一个 HTTP 代理之后,感觉那样还是太简陋了,想着是不是可以用框架来做一个有点实际用处的东西。所以,就思索如何用 golang 的 Gin 框架来实现一个?嗯,对的你没有听错,是 gin 框架。你可能会疑惑,它不是 Web 框架吗,怎么可以用来做代理软件呢?哈哈,其实仔细想一想就明白了。我已经说过了,HTTP 代理的本质其实就是一个 HTTP 服务器!所以,我只要想办法让它来处理所有的路由就行了!
卸载本地开发环境,拥抱容器化开发 以前在公司的时候,使用同事准备的容器化环境,直接在 Docker 内进行开发,爽歪歪呀。也是在那时了解了容器化开发的知识,可惜了,现在用不到那种环境了。所以打算自己在本地也整一个个人的开发环境,不过因为我本地已经按照好了开发环境(我现在主要使用Go,平时会写一些Python脚本,所以我本地安装了它们两个),也就没有动力推动自己去学习了。因为这个想法已经拖了很久了,再拖下去就不可能再去弄了。所以,今天就激进一点,直接把本地的开发环境卸载,强迫自己去开始容器化开发环境。
利用二维码在命令行查看图片 最开始的时候,我的想法是把图片完全展示,不过受限制于这中间传输的限制,还是挺困难的。所以,我就退而求其次,只把图片的部分信息拿出来,这里面的关键点是没有通过网络进行传输信息(获取图片信息的时候),不过若要是想完全传输一整个图片或者小文件,那也需要很多张二维码才行了,总之还是很麻烦的。