重构——在线网站更新手记

趁着十一假期,我更新了一下网站的设计。

重构,为了更好的设计。

我的网站,有三到四个子站组成。最早的设计是通过 VPS 直接提供服务, 在一段时间的迭代中,我选择了 Cloudflare 进行防护和加速,虽然中国大陆地区 使用 Cloudflare 是减速行为。

现在的网站结构:

www.zjyl1994.com 是我的主站,主要负责导航到其他子站点。

blog.zjyl1994.com 是我的博客站,就是这个站点了。

su.zjyl1994.com 是我的后端站点,我的所有活动功能都挂在这里。

Pages

www 和 blog 都是属于静态网站,www 是纯手写的 html 代码, blog 的代码是使用 Hugo 生成的,对于这种静态资源站点,我选择了 Cloudflare Pages 进行托管。静态资源依托全球网络可以抵抗任何形式的攻击, 而且可以稳定的被 CDN 进行缓存,进行就近分发。

Tunnel

Cloudflare 于今年早些时候公布了免费的 Tunnel 计划,原先是收费计划的 Argo Tunnel, 针对回源场景可以免费使用了。使用 Cloudflared 可以直接绕开 caddy、nginx 等反代工具, 让 CF 成为你的 Portal。

Webls - 简单易用的目录列出应用

正好有个工具文件上云的需求,就做了这么个工具。

最近有一个文件扔到服务器上的需求,简简单单用 Golang 糊了一个文件列出工具。

成品是这样的

默认界面

还可以支持 Markdown 展示

Redmi Note 8 刷机笔记

上班实在是忙,没时间折腾技术类的东西。 只能水一篇刷机笔记了,由于这篇实在太水了所以只能放生活分类。(尴尬

前言

之前为了刷机玩,买了一部红米的9A,想着就一个摄像头,什么奇怪没有的手机最适合刷机了,不用担心奇怪硬件造成的BUG,结果我想多了,MTK平台一个刷机包没有。这手机7月发布到现在连个第三方官改都找不到。

后来我就买了这部红米Note8,为了防止之前的教训,我特地去XDA围观了一下这部机的论坛,也看了几大著名的ROM,比如LineageOS、Pixel Experience、Resurrection Remix。他们都官方支持我这部手机,而且Xiaomi.eu也有最终的兜底方案,如果什么都刷不了我还有欧版可以刷,不用担心谷歌服务装不上。

刷机

买到手第一步就是申请解锁,小米解锁需要等待168小时,真是一分钟都少不了,在经历一整个星期的等待后,我解开了红米Note8的BL锁。

然后就是刷机,我当初选择了 Pixel Experience 作为首选,毕竟谷歌自己出的手机就是安卓标杆,照着改的第三方ROM准没有错。

标准的刷机流程就是,长按音量下+电源键开机进fastboot,然后用刷机命令刷最新的 twrp recovery 进去(文后有附地址)。

注意刷完了不要直接重启,关机,按住音量上+电源键开机直接进入 recovery,要不然你的twrp会被自带的官方rec覆盖掉。可能是小米自己的保护机制。

进入 recovery 就是install、wipe 然后reboot system。非常正常的刷机方法。

Youtube直播转IPTV直播源

这篇是升级版!

前言

Youtube直播转IPTV直播源,基于Youtube-dl,我之前写过一个版本,那个版本因为是自己用的所以安装起来比较麻烦。

水完博客断断续续到现在还有人过来找我问我怎么安装,所以我花了两个星期断断续续做了一下优化。

现在这个工具被我命名为 “LiveTV!” 主要应用场景就是在电视或者其他支持M3U8的软件上直接播放Youtube的直播。

考虑到国内的网络问题,我还增加了代理模式,让电视不用搞飞机也能看。

LiveTV

安装教程

首先,你需要安装Docker。安装docker的镜像网上很多,如果你是 Ubuntu 之类较新的发行版可以直接使用apt安装。

如果你在服务器上使用老版本的CentOS7或者Ubuntu14.xx,也可以搜索一下。Docker安装教学应该到处都是。

以下内容假定你已经安装好了Docker。

记一次MySQL巨大表查询优化

今天上班折腾这个搞到晚上9点,记录下来免得后人踩坑

前言

今天项目经理过来说我有一张TAPD单已经挂了一个月了,要我解决免得影响考核。我一看,是首页的数据报表接口速度过慢超时。

这个问题很早就提给我了,那个时候因为其他任务过于着急只能先挂起。现在要过考核所以只能尽快解决。

分析

首先查询代码中的数据表名称,前往正式环境的 MySQL 种查看,不看不知道一看吓一跳,2500万行单表,没有索引。 所以解决方法肯定是先加索引。这里我就被坑了,代码中使用了单独的函数生成 where 子句,我尝试把 where 子句中的值加入索引,结果没有效果。

然后我就尝试打印最后生成的 SQL 语句。结果得到了这样的白痴语句 WHERE a = ? AND b between ? AND ? AND c = ?

回想起来之前看过的面经提到,SQL的联合索引在范围检索的时候会慢很多,所以正确的办法应该把所有准确匹配的先放在最左边,MySQL 的联合索引会根据最左原则匹配使用索引。