有时需要把js的算法翻译成其它语言, escap函数虽然已废弃, 但函数常常出现, 根据MDN的描述,尝试用PHP实现它:
今天无事,带小孩去河边玩耍,一只蜻蜓被水面的张力束缚住,不断挣扎,见死不救绝非我中年本色,用木棍挑它上岸,它挣扎着,迎着阳光与风,我想用不了多久它就可以再次振翅启航了。
儿子要跑远了,要逮住才行。起身奔跑,深藏功与名。待逮着了孩子,我们一起回岸边去看那蜻蜓。
蜻蜓还在,只是碎了,印在泥地里的脚印中。转头见另一对父子的背影,迎着风与阳光,深藏功与名。
谷歌的博客平台blogger,在国内不能访问已经很多年,在很久以前,通过静态部署,还能相对容易的在国内使用。后来谷歌却去掉了这个功能,导致大部分国内用户都放弃了这个服务,但依然有一部分人还在坚持使用,并探索出一些使用方法。技术上并没有什么难度,通过烂大街的反向代理就可以实现,我们可以自己搭建服务,比如nginx。也可以使用cloudflareCDN做这部分工作。

首先看一下我们需要解决的问题:

  1. 主页面被阻断的问题
  2. 页面依赖的资源的阻断问题

主页面被阻断,这个很容易解决,只需要通过cfblogger绑定自己的域名,这里需要注意,blogger在验证域名时要在cf关掉代理功能,即保证解析状态为“only dns”。验证通过后,点击对应dns记录后的小云彩,让它变为橘色,表明启用代理。

若要使用自己的服务器(意义不大),那么不用绑定域名到blogger,配置nginx如下:

server {
  resolver 8.8.8.8;
  listen 80;
  # 域名
  server_name example.com;
  access_log off;
  location / {
    #避免远方启用压缩导致无法替换纯文本
    proxy_set_header Accept-Encoding "";
    proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36";
    # 博客地址
    # 替换
    sub_filter http://blog1.blogspot.com /;
    #替换全文所有文本
    sub_filter_once off;
  }
}

做好这些后,您应该可以请求到自己的主页面了。但显然,页面中的一些资源引用(jscss等)依然会加载失败。

加载的资源可能有以下几种:

  1. 模板引用的jscss,图片等
  2. blogger系统统一插入的
  3. 博客文章内的图片
  4. 评论系统依赖

我们来逐个击破:

模板引用的资源,我们只能从模板下手,如果直接去看系统带的模板,可能会让人头大,所以最好的办法是自制模板,blogger的模板系统可能是世界上最简单的了,这里暂时不深入这些,有意的自行参考官方文档以及视频教程(123),留下我从typeche转换来的一个模板作为参考: https://gist.github.com/kran/a6f683bd8e34edbf04723c04fbaa5043 ,也就是目前使用的这一套。功能不多,简单易懂。

系统插入的一些代码可通过一种古老的hack方式解决掉(如果您用了上面提到的模板,那这一项是已经做过了的),这项技术现如今确实很少有人提及了,在2000年后的几年,免费空间提供商大行其道,但他们会给使用者的每个页面都插入广告代码,当年的孩子们为了使用这免费的午餐,发展了这个当年人手皆备的技巧。美好的日子 :),对您使用的模板做如下操作,原理很简单,即注释掉系统插入的代码罢了:

  1. <head>替换为:&lt;!--<head>--&gt;&lt;head&gt;
  2. </head>替换为:&lt;/head&gt;&lt;!--</head>--&gt;
  3. </body>替换为:&lt;!--</body>--&gt;&lt;/body&gt;

剩下的就只是博客内引用图片的问题,微博图床,七牛云都是你的选择。或者像我这样,尽量不使用图片吧。评论系统的话首先需要在模板内完全去掉,然后寻找一个自己喜欢的云评论系统就可以了。这样就有一个接近完整的博客供我们使用了。

最后,都9012年了,为什么还要写这样一个几乎确定不会有人关注的文章呢?
博客这一载体和论坛一样,已经在新兴的互联网载体中泯然众人,越来越少的人通过博客记录文字。即便要写,各种语言开发的静态博客系统也比blogger这种连代码插入都没有的系统好用的多。而且blogger说不定哪天就会被谷歌关掉了。

为什么呢?不是情怀,只是要锻炼下用文字描述清楚一件事的能力,很显然还差得远。

新版的 docker for win/mac 已经可以使用host.docker.internal来访问host的服务, 然而linux却没有提供, 显然作为亲爹的linux不该被如此对待啦. 自己来搞一发吧, 另外简单说下openresty下怎么访问host:

第一步: 获取host ip
DOCKER_HOST=$(netstat -nr | grep '^0.0.0.0' | awk '{print $2}')
嗯, 简单来说, 获取host的ip就是获取路由表里的默认网关, docker的bridge网络模型和vbox的nat蛮像的哈, 只是少了一层. 不知道理解的对不对.

第二步: 加入/etc/hosts
echo $DOCKER_HOST "host.docker.internal" >> /etc/hosts
本想到此nginx就可以使用它了, 但显然没那么顺利, nginx不去读取hosts, lua里无论如何是不能使用.

使用WSL一段时间, 各方面还都不错, 日常开发很便利(省电 :D), 但最近转向docker, 尝试了docker for windows后, 觉得既然都开了hyper-v, 那何不直接开个vbox来的方便:

  • 首先关闭hyper-v, 并在bios里开启虚拟化, 不然vbox就只能虚拟32bit的系统
  • 硬盘配置, 如果你是ssd, 那么一定要勾选固态硬盘这个选项, 不然真的慢死了
  • 不知是否我的高分屏问题, 图形安装界面卡到炸, 如果你也遇到, 就进入text mode安装, 方法是在镜像的第一个启动项install fedora 29高亮下按tab, 在屏幕最下面会出现引导参数, 在最后面加 inst.text.
  • NAT(不是NAT网络)访问的问题, 这种网络不能直接从host->guest发起访问, 需要做端口映射.
  • 设置方法: 虚拟机设置 -> 网络 -> 高级 -> 端口映射, 把需要开放给host的端口映射好就可以了. 可能会觉得做端口转发比较麻烦, 但对于开发者还是建议使用这个模式, 因为它不需要主机连接外网有自己的子网. 保证host ssh到guest不会因为外网断掉而断开. 桥接模式一般情况下比较方便, 但你切换网络IP就重新分配, 断网后连不上客户机会带来很大困扰.
  • docker安装, 这个没想到, 官网还没准备好docker仓库给fedora 29, 所以安装docker官网的安装教程是不行的. dnf仓库里有1.13版本的, 可以暂时用着. 当然, rpm包的本地安装方式应该是可以的, 没有测试.
  • 普通用户无权访问/var/run/docker.sock, 所有的docker都需要使用root权限发起, 这样不太方便, 官网提示如下:
    • 建立docker用户组
    • 把当前用户加入docker组
    • 重启docker daemon
    • logout当前用户, 重新登入(刷新group权限