再游湾区西山岭
今天发表的这篇文章,就是呼应去年的报告的 巨木生西山,合抱垂云间。 盘根结碧海,繁叶掩长天。 飒飒吹秋草,汩汩淌寒泉。 再复登顶望,东方硅谷湾。
今天发表的这篇文章,就是呼应去年的报告的 巨木生西山,合抱垂云间。 盘根结碧海,繁叶掩长天。 飒飒吹秋草,汩汩淌寒泉。 再复登顶望,东方硅谷湾。
如题所言,这个操作看起来很无聊,但实施起来还是挺繁琐的,避免每次去谷歌上搜,摘抄过来留作自己的笔记。 卸载 这个步骤很重要,比如说误装了 Oracle 提供的 jdk ,要是没细看使用条款,分分钟律师函就过来了。我在 StackOverflow 上发现了一个答案,抄录过来。 运行如下命令删除 jdk sudo rm -rf /Library/Java/JavaVirtualMachines/jdk<version>.jdk 如果想删除插件的话,运行下面的一堆命令 sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin sudo rm -rf /Library/LaunchAgent
早在 2015 年, HTTP/2 标准正式制定完成,同年也出现了很多浏览器支持这种新一代的 HTTP 标准。关于 HTTP/2 的详细介绍可以在维基百科中找到,这篇知乎专栏也是一篇不错的讲解。对于用户来说,一个最直接的印象就是启用了 HTTP/2 的网站打开速度快了许多,这是因为 HTTP/2 协议支持在同一个 TCP 连接中同时发起多个请求,这样服务器同时返回多个资源,比如说 JavaScript 代码文件,图片、视频资源等。 这篇记录文字假设 WordPress 站已经启用了 HTTPS ,详细过程可以参考之前写的一篇短文。因为用的是 DigitalOcean 一键安装的 WordPress ,所以代理服务器用的是 Apache 。 Apache 从 2.4.17 版本开始支持 HTTP/2 , Ubuntu 16.04 默认安装的是 2.4.18 ,按说没问题,但一旦执行 sudo
问题 上回书我们说到,当给一个生成器函数加上 @context.contextmanager 时,这个函数就可以用上下文管理器的语法( with )来调用,其中 yield 返回的变量即为我们在 with 区块中使用的值。我们已经知道,要用上下文管理器调用一个函数或者变量,该变量需要是一个实现了 __enter__ 和 __exit__ 方法的类的实例,那么不禁好奇,为什么加上 @context.contextmanager 之后,一个函数就能用作上下文管理器? 还是从 Python 源码入手,不难发现, @context.contextmanager 实际上是一个普通的 Python 高阶函数,它返回的是一个定义在它里面的函数 helper ,而 helper 返回的则是类 _GeneratorContextManager 的实例。通过阅读 _GeneratorContextManage
任何 Python 教程,必然会讲解如何打开一个文件。而任何提到打开文件的地方,都必然会推荐用 with 来操作文件的读写。比如说这里有一篇非常优秀的教程,文中提到 在 Python 中,文件读写是通过 open() 函数打开的文件对象完成的。使用 with 语句操作文件 IO 是个好习惯。 并且给出了详细的代码示例。但为什么 with 关键字能在结束这个 block 的时候自动调用 close() 呢?让我们去一探究竟。 知 首先来看一下 with 是怎么来的。 with 在提案 PEP 343 中首次被提出,其中有段对于 with 操作的详细说明。用下面的一小段代码来说明就是,要求 EXPR 的类实现了 __enter__ 和 __exit__ 方法。 with EXPR as VAR: BLOCK 进入 with 代码块之后,第一件事就是把 __enter__ 的返回值