menu neoFelhz's Planet
neoFelhz's Planet
Publish: 2018 六月 16日 11:20:52 上午
闲聊·记录-2018年6月

不知不觉又过去的一个月… 看了看上一次记录是在 2017年11月,已经过了半年了啊,所以也就写写这半年都干了些什么吧(x

milkice
Publish: 2018 六月 14日 1:00:20 下午
Osu!Next Signature (Osu 个人签名) API接口
Games Tech API CDN OSU! 
本接口尚处于beta测试阶段,可能会有bug出没,Use at your own risk 前言 对于每个 Osu! 玩家来说,拥有一个自己的签名档应该是最棒的一件事情了吧。官方也曾发布过一个 Osu! 签名档生成器,不过样式已经不符合当下(2018年)的审美了。 目前看来最好的方案应该是 Lemmmy/osusig ,样式符合新一代的 ……
mokeyjay
Publish: 2018 六月 11日 9:04:05 上午
zdfans倒闭啦,王八蛋老板zd423黄治德带着会员费跑了
杂谈 行业新闻 
就是这个网站 → zd423 几年前不知道从哪里得知这个网站,这上面都是些绿色去广告的破解软件,很是喜欢,经常没事就去看看又有哪些软件发布了、哪些更新了。也常常向身边人安利,自己安装软件也是首选zd423 之前他有卖过机场,99元永久。我当然知道这是不可能的,但还是想着能用一年算回本了,结果不到一年就跑路了 前几个月开始卖会员,98永久,有些软件需要会员才能下载。好了伤疤忘了疼的我对此表示理解,并
mokeyjay
Publish: 2018 六月 9日 5:06:15 下午
究竟是哪位大佬每天锲而不舍风雨无阻地往我支付宝二维码里打2笔0.01元呢……
杂谈 
究竟是哪位大佬每天锲而不舍风雨无阻地往我支付宝二维码里打2笔0.01元呢……
蠢黑通行
Publish: 2018 六月 9日 3:27:00 下午
使用 PGP/GPG 进行数字签名加密解密
PGP/GPG/GnuPG/OpenPGP 关系和区别PGP 是 Phil Zimmermann 于1991年开发的商业应用程序,1997年7月,PGP Inc.与齐默尔曼同意 IETF 制定一...
Robert Yang
Publish: 2018 六月 3日 8:34:01 早上
Update: 2018 六月 7日 2:02:07 凌晨
我是如何被小米打败的
吐槽 小米mix2s 小米 售后 

总共是两件事。我3月底购买的红米note5,电源键出现击现象,我两个朋友的此款手机出现同样的问题。我找售后维修,售后给我换了电源键。但是震动器压条在拆机的时候出现损坏,需要等几天配货回来才能换,这我都接受了,但是我回家发现后置主摄像头上面居然有类似脏污,这非常膈应人了,打电

mokeyjay
Publish: 2018 六月 6日 1:06:36 下午
又是一年高考季,各位加油啊(来自一个后悔没有好好高考的社畜
杂谈 
又是一年高考季,各位加油啊(来自一个后悔没有好好高考的社畜
lwl12
Publish: 2018 六月 6日 1:00:13 下午
明日之心,高考加油~
时事 

如果结果不如你所愿,就在尘埃落定前奋力一搏。

 
现在是 2018 年高考前夕啦,去年差不多这个时候,lwl 也发了一篇贺文呢。
 
嘛,今年祝各位用明日之心成就明日之星!
 
本博主今年也有考试啦_(:з」∠)_
 

Robert Yang
Publish: 2018 六月 6日 8:50:05 早上
Update: 2018 六月 6日 8:52:08 早上
谈谈性价比
吐槽 

“性价比”这个词已经在手机上被用烂了,最早是小米玩出的标签,现在许多手机厂商似乎都喜欢告诉用户自己的产品是“性价比”的。但是,似乎性价比这个东西有点奇怪,从某种意义上说,它不存在。

我想先去除带有奢侈品性质的高溢价手机,然后给1000元以上2000元以下的手机

Axton
Publish: 2018 六月 3日 2:50:44 凌晨
村通网之也谈 HTTPS
开发 推荐 HTTPS SSL TLS 密码学 
这是一种能保证你花掉工资/零花钱时的愉悦感的技术 从咕果谈起 就在不久之前,咕果宣布 Chrome 将在不久之后提前移除对于 HTTPS 网站的“安全”标识,同时对于 HTTP 网站强制显示“不安全”。虽然咕果表示目前 HTTPS 的普及已经达到他们认为足够的地步了, ...
Ephen
Publish: 2018 五月 9日 4:00:00 下午
Update: 2018 五月 21日 3:00:04 凌晨
关于云平台用户鉴权管理(IAM)的一些总结和思考
工作笔记 用户鉴权 IAM 资源协作 AWS Azure GCP BlueMix 

AWS 作为云计算行业鼻祖,不论是什么功能,都做得非常完备,且一切可编程。它们能全方位的解决客户的各种问题,甚至想他人之未曾想,真的非常值得业内人士及机构尊敬。

但,完备的背后离不开大量的人力支持,又因为它的完备使得各业务都极其复杂。我最近才开始好好看一看 AWS ,才知道居然都有专门的 AWS 咨询师这样的职业。真是厉害了~

目前主要在看的模块是 IAM 以及周边功能,由于本喵的英文水平不太好,云计算行业术语又了解得太少,看得好费劲。不过通过借助谷歌翻译、上手操作以及咨询兽兽等大咖,也算是了解了个大概。

Ice-Hazymoon
Publish: 2018 五月 17日 2:44:45 下午
表情包在线生成–支持 TNT 模式(语音识别)
代码向 小工具 表情包 语音识别 
5月15日 老罗发布了改变世界的 TNT, 虽然不是锤黑, 但看到价格和 ...
mokeyjay
Publish: 2018 五月 17日 10:03:45 上午
妈个鸡配置在Windows环境变量里的http_proxy可能导致npm install一直报cb() never called
Javascript 技术 杂谈 
妈个鸡 配置在Windows环境变量里的http_proxy可能导致npm install一直报cb() never called。别问我为什么知道,我今天一下午就搭在这上面了
Publish: 2018 五月 2日 5:39:45 下午
在 GNU/Linux 上使用 SSR

前言

最近正好手里有了一些闲钱,于是就想着把现在电脑里装的双系统里的 openSuSE 单独找一台电脑装,于是翻了翻闲鱼收了一台 ThinkPad

mokeyjay
Publish: 2018 四月 28日 8:32:59 早上
Windows下查看全局快捷键被占用情况的方法
技术 
最近 Ctrl+R 刷新快捷键在浏览器里无效了,只能伸手按H5,很不方便 刚开始还忍着用,后来偶然一次火了,就非要找出全局注册这个快捷键的傻逼玩意儿 于是显示一通谷歌,找出来的软件要么太老不能用,要么网页打不开,要么就是这个年久失修的Windows Hotkey Explorer 但是这傻逼玩意儿一双击运行,就会弹出一堆软件窗口。据网友说是Win10某个版本之后,这软件一运行就会自动把快捷键全按一
meto
Publish: 2018 四月 26日 11:29:13 晚上
服务器安装全新 Ubuntu 18.04
LINUX 

Ubuntu 18.04 Bionic Beaver 已经在 2018 年 04 月 27 号发布,而很多云厂商甚至都还没更新系统模板(被打死,作为更新强迫症,决定亲自动手重新安装服务器的系统。

本教程在阿里云、腾讯云实测成功,下面拿阿里云来开刀。

0、环境准备

打开阿里云服务器管理控制台,在云主机实例列表中找到需要重装的主机,为避免出现各种奇怪的问题,建议重置系统为本文实验环境 ubuntu 16.04.4 LTS(或者 Debian 9)

然后点击远程连接

使用 ip route 命令列出当前网卡信息,记录下来(专有网络大概可以忽略)

1、下载系统安装文件

新建文件夹 /boot/netboot 并且下载两个 netboot 文件

mkdir /boot/
Publish: 2018 四月 26日 3:17:18 下午
成人仪式

嗯,已经过去一个月了

Ice-Hazymoon
Publish: 2018 四月 25日 7:58:31 早上
关于兼容 IE8 浏览器的相关备份
代码向 IE 兼容性 前端 
这几天做网站的时候遇到的恶心需求, 特此备份一下@(流血)
mokeyjay
Publish: 2018 四月 24日 9:44:18 上午
聊聊微信小程序开发框架及一些心得
微信小程序 

这阵子因为某些原因又要开始写小程序了。其实写过小程序的人都知道,原生小程序在开发过程中到处都充斥着傻屌的气息 所以这次实在不想继续原生开发。正好时间不是很紧实际上紧得很,怎奈就是手痒 于是试用了3款算是大厂出品的小程序框架。最近比较有空,来简单写下感想 以下内容基于一个前端菜鸡一周多前的记忆整理而成,如有疏漏望友好指出 WePY 说到小程序的框架,第一反应就是这款腾讯出品的、大概是最老牌的框架。它
Ice-Hazymoon
Publish: 2018 四月 22日 9:17:20 上午
(非信仰)网易云x漫步者 W800X 耳机到手
日常 购物 
前几天用耳机听歌时, 不小心用耳机线扯到我的杯子了, 然后....嗯@ ...
Publish: 2018 四月 19日 11:41:14 中午
对博客分类进行了一些整理

之前本博客的分类非常混乱,基本上就当作标签一样来用…. 导致根本无法正常的分类博文,于是最近对博文进行了重新分类。

Publish: 2018 四月 19日 11:16:52 上午
Google 分析 与 Do Not Track

Google Analytics

Robert Yang
Publish: 2018 四月 15日 11:16:52 上午
Update: 2018 四月 15日 12:13:22 中午
熊猫都是树上长的.jpg
世界在这里 熊猫 游记 

这周,小赵童鞋说周末去拍照,然额本人那么宅的怎么知道哪里有好地方可以去。当然是打开高德地图看一眼

neoFelhz
Publish: 2018 四月 12日 2:01:00 下午
Web Font 123 - 再谈 WebFont 优化
实验室 前端优化 Web 字体 WebFont Resource Hint Preload localstorage font-family font-face FOUT FOIT FOFT 
字体是实现良好的设计、品牌推广、可读性和无障碍功能的基础,也是实现用户体验和性能的关键所在。本文主要介绍了浏览器在应对字体加载时的方式、FOIT、FOUT,针对性的介绍了一些常见的 WebFont 优化方案,并总结了使用 WebFont 的最佳实践。同时本文还列举了几种常见的适合生产环境使用的 font-family 的写法。
neoFelhz
Publish: 2017 五月 10日 9:27:00 上午
Update: 2018 四月 12日 1:53:00 下午
Web 性能优化(4)——localstorage 存储静态文件的意义
实验室 前端优化 Web localstorage 

localstorage 并不仅仅只是”狂拽酷炫吊炸天“的黑科技。在一些特殊场景下,甚至可能会有意想不到的收获。

meto
Publish: 2018 四月 12日 1:50:00 下午
LEDE 内网转发 IPv6
OpenWrt 

最近折腾 PT 发现了其他的转发方案,重新更新了文章

  • 2018.04.12 更新 Passthrough 方式
  • 2017.10.19 更新 NAT6 方式

想要让路由器下的设备获得 IPv6 地址通常有三种方式:relay(中继)、NAT(地址转换)、Passthrough(穿透)。下面分三个部分谈谈具体的配置方案。

relay

OpenWrt 早在 15.05 就内置了 relay 协议,具体是通过 odhcpd 来实现的。

这种方案可以让子网设备分到公网 IPv6 的地址,是最为科学的,然而 odhcpd 的实现有很多 bug,在实际使用中会经常掉线,需要手动重启服务才能解决,体验不佳。

具体操作如下

  1. 进入路由器终端:

Ephen
Publish: 2017 六月 12日 4:00:00 下午
Update: 2018 四月 12日 8:30:18 早上
SSL证书颁发机构将对域名强制CAA检查,到底什么是CAA?CAA记录详解
工作笔记 知识探索 DNS https SSL CAA 

强制CAA检查的提议

2017年3月7日,CA|B Forum (一个全球证书颁发机构与浏览器的技术论坛)发起了一项关于对域名强制检查CAA的一项提议的投票,获得187票支持,投票有效,提议通过。

提议通过后,将于2017年9月8日根据Mozilla的Gervase Markham提出的检查CAA记录作为基准要求来实施。

详情参见:Ballot 187 – Make CAA Checking Mandatory

什么是CAA记录?

CAA,全称Certificate Authority Authorization,即证书颁发机构授权。它为了改善PKI(Public Key Infrastructure:公钥基础设施)生态系统强度、减少证书意外错误发布的风险,通过DNS机制创建CAA资源记录,从而限定了特定域名颁发的证书和CA(证书颁发机构)之间的联系。从此,再也不能是任意CA都可以为任意域名颁发证书了。

Ephen
Publish: 2016 十一月 3日 4:00:00 下午
Update: 2018 四月 12日 8:30:07 早上
谈谈上月Dyn遭受的DDoS攻击
当时就被震惊 知识探索 心情驿站 DYN DDoS 域名攻击 

这件事情发森在美国时间的2016年10月21日,到今天大约已经过去了半个多月。

那几天,新闻铺天盖地,季风从墙外刮过长城,吹到中原,拂过我的耳朵。

当时看到这个消息时本想立即写一篇蹭它一波热度,一来是时间问题,二来想想我就一小博客也没必要跟风,也就作罢。

今天我整个回顾了下所有看过的新闻及各类文章分析,还是决定来谈一谈。

Ephen
Publish: 2018 三月 27日 4:00:00 下午
Update: 2018 四月 12日 8:29:58 早上
记生平第一次手术经历
心情驿站 生活 

各位看官请注意:

此文章涉及本姑娘个人信息,文章公开代表逛到这里的人可以看,但并不代表我同意被传播。

Ephen
Publish: 2017 二月 21日 4:00:00 下午
Update: 2018 四月 12日 8:29:31 早上
给网站添加备案号展示
博客折腾 hexo 备案 

折腾原因

由于在公司折腾CloudXNS牛盾,有个备案比较好开展工作。正好上次公司CDN网监来查,要求我把备案展示出来。想想这事情也该办了,搞起……

唔,还是提一嘴,姐无任何前端知识储备,大牛路过请点右上红叉关闭。

目标

  1. 备案号放至左侧边栏下方,链接到工信部网站;
  2. 备案号可进入主题_config.yml中配置修改;
  3. 文章页显示目录时不做展示;
  4. 放弃适配移动端。
Ephen
Publish: 2016 七月 25日 4:00:00 下午
Update: 2018 四月 12日 8:29:08 早上
全新出发,正式启用Hexo!
心情驿站 博客折腾 hexo sitemap 

郑重声明:原网站http://www.chinatesters.com已正式停止更新,内容已全部转移至这里,未来所有的更新也都在这里。新的站点,新的开始,新的旅程!~

Ephen
Publish: 2016 九月 21日 4:00:00 下午
Update: 2018 四月 12日 8:28:48 早上
隔壁粗事了!朝鲜顶级域.kp域名DNS数据配置可被转移
当时就被震惊 知识探索 朝鲜 顶级域 DNS域转移 bind 

9月20日上午10点左右,朝鲜的一台顶级域名服务器ns2.kptc.kp不小心配置允许全球DNS区域转移,任何人都可以向这台域名服务器发出区域转移请求,获取到一份朝鲜的顶级DNS数据拷贝。朝鲜泄漏的DNS数据显示,它的互联网/局域网规模确实非常小,域名寥寥无几。

Ephen
Publish: 2016 七月 27日 4:00:00 下午
Update: 2018 四月 12日 8:28:38 早上
我又领证了!~
心情驿站 生活 

各位看官请注意:

此文章涉及本姑娘个人信息,文章公开代表逛到这里的人可以看,但并不代表我同意被传播。

Ephen
Publish: 2016 十月 20日 4:00:00 下午
Update: 2018 四月 12日 8:28:23 早上
我又换工作~~内容~~了!
心情驿站 产品运营 产品管理 

继在上家公司身兼测试、实施、运维、客服、配置管理、质量管理、培训讲师等多职之后,如今在现任也开启了角色变更模式。

这次改得更彻底,连公司名也变啦。咱以后是『光载无限(北京)科技有限公司』的人了,不再属于『北京快网科技有限公司』了。

尽管我还是『武汉快网云计算有限公司』的。

哈哈,理不清关系吗?其实我也理不太清,不晓得是怎么搞的,反正还是『世纪互联』旗下的。

『光载无限』要成为『世纪互联』旗下重点品牌了,听说公司正在筹备品牌发布会,也不知道啥时候开。

Ephen
Publish: 2017 七月 24日 4:00:00 下午
Update: 2018 四月 12日 8:28:00 早上
成功取得项目管理专业人士资格认证
心情驿站 项目 管理 

各位看官请注意:

此文章涉及本姑娘个人信息,文章公开代表逛到这里的人可以看,但并不代表我同意被传播。

Ephen
Publish: 2017 八月 28日 4:00:00 下午
Update: 2018 四月 12日 8:26:55 早上
告别“牙套妹”称号
心情驿站 生活 

各位看官请注意:

此文章涉及本姑娘个人信息,文章公开代表逛到这里的人可以看,但并不代表我同意被传播。

Ephen
Publish: 2016 十二月 29日 4:00:00 下午
Update: 2018 四月 12日 8:26:18 早上
几乎花了一个下午的时间参观了风河博客
心情驿站 知识探索 DNS 泛域名 

2015 年 CloudXNS “重出江湖”的时候,我们做了个让用户写体验文章的活动,风河博客的一篇《谈谈CloudXNS》吸引了我的眼球。

Ephen
Publish: 2016 十月 12日 4:00:00 下午
Update: 2018 四月 12日 8:23:32 早上
使用网页工具 DNSViz 检查域名 DNSSEC 配置
工具介绍 知识探索 DNSViz DNSSEC DNS劫持 DNS安全 

关于 DNSSEC

DNSSEC 全称 Domain Name System Security Extensions,即 DNS安全扩展,是由Internet工程任务组 (IETF)提供的一系列DNS安全认证的机制(可参考RFC2535)。

它是对DNS提供给DNS客户端(解析器)的DNS数据来源进行认证,并验证不存在性和校验数据完整性验证,但不提供或机密性和可用性。来源:域名系统安全扩展 - 维基百科,自由的百科全书

一些基础的相关介绍可参考我在 CloudXNS 官网发的文章:

  1. 什么是DNSSEC?DNSSEC的概念及作用
  2. 如何验证DNS服务器是否支持DNSSEC?

通俗点讲, DNSSEC 的主要作用就是防止 DNS劫持,从而保证 DNS安全。

但在这个保证安全的过程中,DNSSEC 的 RR 和 RRSIG 的传输过程都是未加密的(即:不提供机密性),我们通过一些嗅探工具可以读取 RRSIG记录 以及由 DS记录 建立的信任链。

今天我们就来聊聊 DNSSEC 信任链的那些事。

Ephen
Publish: 2017 八月 17日 4:00:00 下午
Update: 2018 四月 12日 8:23:17 早上
使用公共 DNS 上网的弊端(二)
知识探索 公共DNS Public DNS 本地DNS 递归DNS edns-client-subnet 

上一篇文章《使用公共 DNS 上网的弊端(一)》我讲到当我们使用公共 DNS 上网时可能会因为该 DNS 的出口与本地实际网络所属区域和运营商不一致而导致调度不准,进而影响连接速度可能变慢。这篇文章同时发到了咱们 CloudXNS 的微信公众号上,不少小伙伴与我们产生了互动。

有的小伙伴就问到:“如果是支持 Edns-Client-Subnet 的公共 DNS,还会存在我说的问题吗?”

不得不佩服小伙伴们的学识!(比灰姑娘可厉害多了……

Ephen
Publish: 2017 八月 3日 4:00:00 下午
Update: 2018 四月 12日 8:23:09 早上
使用公共 DNS 上网的弊端(一)
知识探索 公共DNS Public DNS 本地DNS 递归DNS 

作为资深网民的我们都知道,本地 DNS 是非常重要的,它能决定你到底能不能上网。

由于本地运营商 DNS 常常被大家诟病容易遭到劫持等风险,使得很多人选用公共 DNS 来作为本地上网用的 DNS ,例如 114DNS 、阿里 DNS 等。

但是,喜欢用公共 DNS 的你,知道公共 DNS 在上网时会有什么弊端吗?

Ephen
Publish: 2017 七月 16日 4:00:00 下午
Update: 2018 四月 12日 8:22:45 早上
什么情况下DNS会使用TCP传输协议?
知识探索 DNS TCP UDP 协议 

我们知道, DNS 是同时占用 UDP 和 TCP 的 53 端口传输数据的,这种单个应用协议同时使用两种传输协议的情况,在 TCP/IP 栈中也算是个异类。

当我们在使用 tcpdump 、 WireShark 等抓包工具分析时,会发现几乎所有的 DNS 应用都是在使用 UDP 传输。

那么,为什么 DNS 还要占用 TCP 的端口,到底什么情况下才会用到 TCP 呢?

Ephen
Publish: 2015 十一月 5日 4:00:00 下午
Update: 2018 四月 12日 8:22:21 早上
不会 A/B 测试的 Web 设计师不是好程序员
知识探索 测试 程序员 设计师 

英文原文:How A/B Testing Will Make You a Better Web Designer


设计一个网站无论对设计者还是业主都是一个浩大的工程。但是,不管你是创建一个新的网站,还是对已有网站做重新设计,有一个至关重要的点,你的决定要基于数据而不是基于感觉。对客户和设计来说,在设计过程中做出的决定,可以决定创意,可以决定商业的成败。

为了避免你下一个作品中潜在的缺陷,你应该将 A/B 测试做为你设计工具的标准配置。对客户网站做简单的 A/B 测试可以让你交付之前避免设计,导航,功能上的任何缺陷。这样可以让你交出最终产品,不仅视觉效果极佳,还有优化的交互 – 他们会爱上你的。

听起来很有趣?继续阅读,看看 A/B 测试如果让你成为更好的 web 设计师。

Ephen
Publish: 2017 十月 22日 4:00:00 下午
Update: 2018 四月 12日 8:21:57 早上
VSCode 中使用 PlantUML 插件生成 UML
工具介绍 VSCode UML 解析流程 

作为一个伪技术人员,灰姑娘用的 IDE 大概是不那么流行的 VSCode。全称 Visual Studio Code ,微软家近两年才推出来的一个产品。

这个 IDE 的整个软件界面以及使用都和 Atom 非常相像,它本身比较轻量,但又可以安装很多扩展插件以满足使用者的需要。虽然对过去使用老古董 Ultra Edit 的我来说,刚上手着实有些不习惯,但是用久了之后还是觉得不错的。(尽管我用 IDE 的频率不高。。

最近,同事希望我给 DNS 解析流程画个 UML 图,并推荐了一个通过脚本语言生成 UML 图的开源项目: PlantUML

上网搜索后发现,可以不需要下载这个项目的 APP ,很多编辑器都有它的插件。但是我翻了好久,并没有看到基于 VSCode 的实际应用示例。

我在 VSCode 上搜到这个扩展插件之后,环境部署还很折腾了一会儿。遂将一些经验在此分享给大家,希望能对其他路过的人有所帮助。

Ephen
Publish: 2016 一月 5日 4:00:00 下午
Update: 2018 四月 12日 8:21:22 早上
Jmeter以non-gui模式进行分布式测试
工作笔记 测试 Jmeter 

由于Jmeter是一个纯JAVA的应用,用GUI模式运行压力测试时,对客户端的资源消耗是相当惊人的,所以在进行正式的压测时一定要使用non-gui模式运行,如果并发数很高或者客户端的硬件资源比较一般的话,还可以以server模式用多个client进行分布式测试。

下面以武汉快网CMCC项目为例,结合官方文档和自己的实际经验来谈一谈,Jmeter如何以non-gui模式进行分布式测试。

Ephen
Publish: 2016 十月 7日 4:00:00 下午
Update: 2018 四月 12日 8:21:11 早上
DNS资源记录(Resource Record,简称RR)介绍
工作笔记 知识探索 DNS 记录类型 SOA 参考资料 

DNS 资源记录简介

DNS server 内的每一个域名都有自己的域文件(zone file),zone file 是由多个记录组成的,每一个记录就被称为资源记录(Resource Record,简称RR)。

当在设定 DNS 域名解析、反向解析及其他的管理目的时,往往需要使用不同类型的RR,也就是我们常说的记录类型

上述CloudXNS的记录类型列表中,除AX、CNAMEX、LINK、DR301X(301跳转)、DR302X(302跳转)以及DRHIDX(隐式跳转)为CloudXNS自研的扩展解析记录类型之外,其余都是 DNS 体系中常见的标准RR类型。

但除了我们系统中支持的这些类型外,事实上还有一些不太常用的目前CloudXNS暂不支持的其他RR类型,感兴趣的朋友可以和灰姑娘一起学习下。

Robert Yang
Publish: 2017 三月 12日 1:59:34 下午
Update: 2018 四月 11日 1:36:01 凌晨
使用OpenSSL-Dev分支开启TLSv1.3
技术6 nginx openssl TLS1.3 

OpenSSL 将在4月初发布 OpenSSL-1.1.1 版本,届时 OpenSSL 将支持最新的 TLS1.3,关于 TLS1.3 的优点我已经在

Robert Yang
Publish: 2018 三月 29日 7:06:43 早上
Update: 2018 四月 11日 1:35:11 凌晨
红米Note5使用简评
不能无聊 小米 红米 note 5 

系统:

出厂Android

DCC
Publish: 2018 四月 9日 4:00:00 下午
搭建自己的 PT 盒子
前言前些日子,兽兽大佬发了一篇文章介绍了 Debian 9 安装 rTorrent + ruTorrent + Nginx 搭建自己的 PT / BT 盒子,作为国服大刷子(上传量很大很大的人)...
Robert Yang
Publish: 2017 四月 11日 3:23:14 下午
Update: 2018 四月 8日 5:47:10 凌晨
Windows 10 字体渲染优化
技术6 windows 10 mactype 字体优化 Creators Update 

2018-4-8

很遗憾,Windows 10 v1903也就是2018春季更新并未搭载全新字体,但是可以自行下载Noble Scarlet字体安装并使用 Microangelo OnDisplay

neoFelhz
Publish: 2017 十一月 3日 10:17:00 上午
Update: 2018 四月 7日 11:07:00 上午
中国的互联网
自言语 互联网 网络 运营商 封锁 BGP 

外交部发言人华春莹称“中国的互联网是 自由、开放、有序 的”。尽管中国互联网相比世界其他地方的互联网也存在许多相似之处,但还有很大不同。

milkice
Publish: 2018 四月 2日 12:15:16 中午
Floating/Sinking - 漂浮/沉溺
Music Personal 
建议边听边阅读 这是一个夏日的初晨 阳光还未顾及森林的每一片尘土 万籁俱寂 只听得鸟儿在四处啼叫 一切都显得祥和宁静 你拨开灌木丛 漫无目的地走着 能听到你走过潮湿的沼泽地时 泥草发出的窸窣声 能听到你走过干枯的独木桥时 木头发出的叹息声 太阳还未完全升起 即便是再勤劳勇敢的猎人 也不会在此时探索沼泽 为什么 你会在这里呢 你就像只迷路的……
mokeyjay
Publish: 2018 四月 2日 7:10:57 早上
不记得是谁给我推荐了 [更纱黑体](https://github.com/be5invis/Sarasa-Gothic) 在命令行里用了几天,爱不释手,也安利一下
杂谈 资源 
不记得是谁给我推荐了 更纱黑体 在命令行里用了几天,爱不释手,也安利一下
DCC
Publish: 2018 四月 1日 8:01:00 早上
Nginx Unit 与 LEMUR 新架构
从 LAMP、LEMP 到 LEMUR从 20 世纪 90 年代开始,LAMP 架构成为了部署 Web 应用程序最有名和最值得信赖的方法。LAMP 是 Linux,Apache,MySQL和 P...
neoFelhz
Publish: 2017 七月 10日 7:17:00 早上
Update: 2018 三月 31日 12:32:00 下午
常用免费前端公共库 CDN 服务收集
分享镜 免费资源 Web 公共 CDN 
前端公共库 CDN 服务是指一些服务商将我们常用的前端开发用到的库存放到网上,方便开发者直接调用,并且提供 CDN 加速。与将前端库存放在自己的服务器上相比,公共库的 CDN 更加稳定、高速,一来可以方便开发者的开发,二来可以让用户加速访问这些资源。
neoFelhz
Publish: 2017 六月 11日 9:24:00 上午
Update: 2018 三月 31日 12:02:00 中午
收集常见的公共图床
分享镜 博客 图床 公共图床 免费资源 

为了节省带宽和流量、减少自己服务器的负载、加速网站图片的加载,站长一般会使用专门的图床或者 CDN 服务加载图片。本文就汇总介绍一下我所知道的公共图床,以及我对它们的评价。

Zohar
Publish: 2018 三月 29日 3:52:00 下午
在Arch Linux下安装NGINX Amplify
NGINX Amplify是一个很强大的NGINX监控工具。官方提供的安装脚本目前只支持在Ubuntu / Debian / CentOS / RHEL环境下运行,在Arch Linux下运行会...
Ice-Hazymoon
Publish: 2018 三月 29日 10:35:13 上午
关于 xmapp Apache 访问 localhost/icons 下的文件时返回404的解决方案
喵喵喵 
今天在使用 xmapp 时, 遇到个很迷的问题, 就是无论怎么访问 local ...
kookxiang
Publish: 2018 三月 28日 4:30:00 下午
在 Ryzen 平台上安装 macOS High Sierra
首先简单扔下目前电脑配置吧: CPU:AMD Ryzen 5 1600X Processor 主板:ASUS PRIME B350M-A 内存:G.SKILL Ripjaws V ...
DCC
Publish: 2018 三月 26日 5:19:00 凌晨
ModSecurity 3.0 —— 强大的 WAF 工具
关于 ModSecurity 3.0ModSecurity 其实也有很久的历史了,原本是 Apache 上的一款开源 WAF 模块,可以有效的增强 Web 安全性。然后逐渐支持Nginx 和 I...
DCC
Publish: 2018 三月 25日 2:07:00 下午
Amplify —— 深度整合的全方位监控
关于 Amplify首先来一段官方的介绍:Nginx Amplify 是全面的系统监测工具。借助 Nginx Amplify,您可以轻松分析和解决与运行 NGINX 的 Web 应用程序相关的问...
DCC
Publish: 2018 三月 22日 9:18:00 上午
Google 用什么 Nginx?
简单介绍Nginx 是一个异步框架的 Web服务器,也可以用作反向代理,负载平衡器 和 HTTP缓存,由于其开源和高性能高并发的特点,被多种网站广泛使用,其中自然也少不了 Google。显然 G...
mokeyjay
Publish: 2018 三月 22日 1:14:27 凌晨
下一部手机想买华为Mate系旗舰了,不刷机好好用
杂谈 
下一部手机想买华为Mate系旗舰了,不刷机好好用
mokeyjay
Publish: 2018 三月 21日 1:59:08 凌晨
吃我一发人体工程学鼠标的安利啦!
分享 杂谈 
起初刚读信息技术系没多久,就听说鼠标手厉害。于是买了 微软人体工程学键盘 4000 和 多彩人体工程学鼠标 刚开始呢,我觉得人体工程学鼠标是反人类的,用着非常别扭。毕竟我当时也用了快 10 年的普通鼠标了,一下子没习惯过来 后来我把鼠标腕托拆掉了,顿时感觉好了很多。约一星期后就能比较自如地日常使用鼠标了 坚持使用,大概一个月后 FPS 游戏水平基本和普通鼠标一样了 然而还是很菜 回头来看,不知不觉
meto
Publish: 2018 三月 19日 2:07:39 下午
一分钟吃完「谷阿莫凤梨酥」

大家好,今天要说一个快递怎么那么慢但吃起来超好吃的「谷阿莫凤梨酥」的故事。

半个月前,故事中的男主角爱犬男,在网上闲逛的时候突然就发现了这个看起来怎么这么贵的凤梨酥,然后就被视频中的大魔王忽悠掏钱买了这个怎么这么贵但看起来超好吃的「谷阿莫凤梨酥」。

紧接着半个月过去了,正当爱犬男在路上闲逛的时候收到了一条勒索讯息:「你的哄梨酥现在在偶手上,马上带上你的证件到天桥找偶,晚了后果自负……」,爱犬男二话不说马上拿着为什么长得这么帅的证件赎回了凤梨酥。

拆开这么那么黑但包装超结实的黑底烫金之淘金礼盒后,果然露出了十颗亮闪闪超霸气超冷酷的「谷阿莫凤梨酥」

为什么刚好是十颗不用我介绍吧,刚好代表人的十根手指头啊,这就表示着你再不识数也能用你的手指头数得过来,用心良苦啊。

撕开包装后,闻起来超香看起来超诱人的「谷阿莫凤梨酥」就出现在你眼前啦,真是妖娆的小贱人啊。爱犬男拿起来尝了一口这个怎么就这么贵的凤梨酥后被内里超粘牙的菠萝果酱狂甩嘴唇,觉得这个怎么就这么贵的凤梨酥味道真的就怎么这么贵。

和外面那些妖艳贱货不一样,这款「谷阿莫凤梨酥」因为完全没有放任何冬瓜酱和任何防腐剂所以寿命怎么就这么短,用了从环境优良没污染的纽西兰原装进口的奶粉和乳酪粉,吃起来超香,物超所值,绝对好吃啊!还不快买个十几盒尝尝,科科!

Publish: 2018 三月 17日 3:05:45 下午
成年了

时间过的挺快,18年一晃就过去了,终于能干一些原来干不了的事了。。。。
今天生日,过得挺无聊的。。
上午英语听力高考,到现在也不知道那个 tomato 到底要不要加 es 。。。
回家吃饭,因为周一要体检,不敢大鱼大肉。。。
下午不知道该干啥

Viosey
Publish: 2017 十月 12日 2:40:00 凌晨
Update: 2018 三月 16日 8:15:10 晚上
手动编译 Nginx 并安装 VeryNginx
技术向 Nginx VeryNginx Linux 

VeryNginx 是个非常有意思且便捷的 Nginx 扩展程序。最近新开了台 VPS,便想体验一下它带来的快感。

131
Publish: 2018 三月 16日 4:00:00 凌晨
CFPMP - Cloudflare Partner CNAME接入管理面板

当前版本:V0.1.0 (2018-02-16)
Github:https://github.com/Netrvin/CFPMP
可用实例:https://cf.131.re
优点(相比WeiUZ):

  • 界面更加美观
  • 使用Session存储用户信息而非Cookie
  • 可以设置@记录
131
Publish: 2018 三月 16日 4:00:00 凌晨
Cloudflare Partner 申请成功

PoiScript
Publish: 2018 三月 15日 3:21:28 下午
Angular Package Format 简介
angular 

Angular Package Format(APF) 指的是 Angular 框架中的包的结构和规范。该规范的作者是 IgorMinarJason Aden,两者都是 Angular 的 Contributor。

它详细地介绍了 Angular 的核心库,例如 @angular/core@angular/common 的 npm 包的结构和原因,同时还涉及到了在开发自己的库的时候如何优化编译结果,适配各种的优化工具等等。了解这方面的内容不仅有助于我们在写自己的 Angular 库,同时也可以我们了解 Angular 的编译器是如何工作的。

目前知道和了解这个文档的人还不多,而且恰巧今天(2018-3-15)该文档也更新到了 v6 版本(虽然目前看起来和 v5 长得一模一样)。于是我萌生了写一遍简单的关于 APF 的介绍,内容基本沿袭自上述的文档和这个视频

为什么需要 APF?

最大的因为就是需要兼容各种各样的运行环境和工具。

在 Angular 4 中加入了 @angular/platform-server 被并入 Angular 的核心 repo,说明 Angular 的 Sever-side rending 得到越来越多的重视,所以 Angular 的库不仅要兼容浏览器环境,还要能兼容 Nodejs 的服务器环境。

此外,不是所有的 Angular 项目都是基于 Angular CLI 的,Angular 的用户有可能使用各式各样的编译器和优化工具,例如 Webpack,Rollup,Uglify 和 Google Closure 等等,而且每种编译器和优化工具都有不同的需求。

所以仅仅只提供一种编译格式是不可能满足上述所有的需求,所以我们就需要一个包的规范来实现上述需求,这就是 APF。

APF 中规定了什么?

JavaScript 的模块规范

要能过完美的兼容各种运行环境,第一个需要考虑的问题是使用 JavaScript 模块规范。例如,很多打包工具和优化工具基本只针对 ECMAScript Module (ESM) 有效(例如 Angular AoT 就只对 ESM 有效,而不能用于 CommonJS)。而在服务器端 Nodejs 上运行的时候需要对符合 CommonJS 规范的。

在最新的 nodejs 中已经支持了 ESM,但是这个功能目前处在实验阶段,需要单独的 --experimental-modules flag。而且也并非每个人都能用上最新的 nodejs。所以这个让 nodejs 使用 ESM 还不是目前最佳的解决方法。

APF 使用的是更加通用的 UMD 的模块规范,该规范可以同时满足 CommonJS 和 AMD 的规范。这样该模块就既可在 Nodejs 使用,也可以在浏览器中通过 script tag 使用。

此外,APF 还推荐在打包的时候还打包 Flat ES Module (FESM),即将所有的独立的 Module 打包成一个文件。这样可以降低用户使用独立 Module 时的所需体积。

根据上面的描述,似乎只要提供 ESM,FESM 和 UMD 三种格式的编译后的文件就行了吗?其实不止,另外一个重要的要素是编译后的 JavaScript 的版本。

JavaScript 的版本

虽然目前很多打包工具默认都是输出 ECMAScript 5 (ES5)。但是考虑到所有的 evergreen browsers (一般来说,指可以脱离系统独立更新的浏览器)都已经提供原生的 ES2015(ES6) 支持。所以 APF 推荐提供 ES2015 版本的编译结果,这样可以满足部分不需要支持旧浏览器的用户。

另外一个原因就是不同的优化工具对不同语言版本支持情况也不一样。例如 Uglify 目前只支持 ES5。

其他

最后,因为 Angular 官方支持的第一开发语言为 TypeScript,所以提供 TypeScript 需要的 .d.ts (Type Declaration File) 也是有必要的。同时,因为 .d.ts 提供的信息不足以给 Angular 的编译器使用,还需要一个提供额外的包含每个 decorator 中 元数据的 metadata.json

目前,Angular AoT 模式中会将所有的元数据编译成类的静态类型,所以也就不需要像以前那样通过 Metadata Reflection API 获取元数据了。

APF 的具体实现

下面我们以一个具体的遵循 APF 的包 @angular/material 为例子,描述具体的文件结构。

首先是整体的文件结构, 主要分成了 esm2015/esm5/bundles/ 和其他各自的独立的 module 的文件夹。其中 esm2015/esm5/bundles/ 就分别表示了 esm+es2015,esm+es5 和 umd+es5 的编译结果。

.
├── esm2015
├── esm5
├── bundles
├── autocomplete
└── ...others

而在 esm2015esm5bundles 中则包括了该库中所有编译结果:每个独立的 module 的编译结果和整个库的 module 的都在其中。而每一个独立的 module 而编译结果都是一个 Flat Module。

.
├── material-tooltip.umd.js
├── material-tooltip.umd.min.js
├── ...others
├── material.umd.js
└── material.umd.min.js

而在每个独立的 module 中都包含的各自该 module 的 package.jsonmetadata.json.d.ts 文件:

.
├── index.d.ts
├── index.metadata.json
├── package.json
└── typings
    ├── button.d.ts
    ├── button-module.d.ts
    ├── index.d.ts
    ├── index.metadata.json
    └── public-api.d.ts

最后,在每个 package.json 中,无论是根层级的,还是独立的 module 中的,都含有以下几个字段:

"main": "./bundles/material.umd.js",
"module": "./esm5/material.es5.js",
"es2015": "./esm2015/material.js",
"typings": "./material.d.ts",

main 字段指向 UMD+ES5 的编译结果,主要用于 Nodejs 的环境;module 字段指向 ESM+ES5 的编译结果,主要用于 Webpack 等;es2015 字段指向 ESM+ES2015 的编译结果,主要用于配置过的 Webpack 和 Google Closure 等;最后 typings 指向 .d.ts 文件,用于 TypeScript。

最后,在包的根目录里还有根整个 module 和每个独立的 module 的 metadata.json.d.ts 文件。

更多

这篇文章只是对 APF 的一个简单的介绍和一个典型的例子的分析,还有更多的细节没有提及:例如,如何提供多个 entry point 这样可与成让用户只导入需要的模块,降低编译后的体积。如果感兴趣的话可以查看原文档,以及 Juri Strumpflohner 在 ng-be 上的发言视频

Robert Yang
Publish: 2018 三月 11日 1:30:07 下午
Update: 2018 三月 11日 2:32:55 下午
腾龙 SP 90mm F/2.8 Di MACRO 1:1 VC USD
不能无聊 腾龙 90微 

昨天去数码广场买了一只腾龙90微,拿来拍点小东西,比如花花草草之类的,同时还可以兼顾一下人像。这只镜头没有像新款 85mm f1.4 一样配备电磁光圈,我也是拿到镜头之后才发现镜头卡口上有光圈拨杆,最大光圈 f2.8 在微距模式的时候无法全开,1:1倍率的时候是 f5.6

mokeyjay
Publish: 2018 三月 6日 5:11:00 凌晨
腾讯云又出优惠活动了,云服务器3至6年仅需360元!
行业新闻 资源 

腾讯云还是比套路云良心不少,活动幅度都很大,而且实打实。这不,又来一个大活动(据说是在刷KPI) 建议先通读全文再进行操作 所需条件 没有在腾讯云消费过的新账号(可以新注册一个Q号) 实名认证(一个身份证号可实名多个账号,认证秒过) 学生认证(已经毕业的也行,只要信息能在学信网查到,认证秒过) 据说学生信息乱填也可以。但不排除后期会被腾讯云抓出来销毁掉你的机器,尽量填真实的吧 操作步骤 点击参团
kookxiang
Publish: 2018 三月 5日 5:12:00 凌晨
国家队 ED1 发售了吗

没有完整版的《トリカゴ》听,我要死了

发了 magnet:?xt=urn:btih:0E60761122A15F7AECE58E9BF61B653553785110

< 访问完整版以查看此播放器 >

Eana Hufwe
Publish: 2018 二月 28日 1:04:49 凌晨
Update: 2018 二月 27日 10:06:54 晚上
What’s so new in EH Forwarder Bot 2 (and its modules)
Tech EH Forwarder Bot 

EH Forwarder Bot is

Publish: 2018 二月 24日 4:46:01 下午
絮叨 | 2018年2月

最近各种不顺啊…刚放假,就发烧了一个星期…摊在床上边搞事情边被英语老师崔作业…不过最后作业还是写的差不多了[捂脸]


也有点略开心的事
从 XDA 上找到了个 LineageOS UNOFFICIAL 15.1 for Libra/Aqua
我这凑活用了半年4c系统的4s终于能用指纹啦


过完了一个无聊的寒假…又双叒叕开学了……
高三了,也许该听听话好好学习,但本人很反感这种教育制度,于是所以把学习的时间都扔到兴趣上了……
没了某主任的支持……靠自己却玩的更high了…也许天生不适合学习吧…
天朝的制度…不上大学就没有好工作…没有好工作就没钱搞事情…
啊啊啊啊啊


把某人重新加了回来,希望这个不知道咋就蹦出来的想法是对的吧…
然后就是我的社交障碍估计没得治了,唉…圈子小还清净呢,但xxx对我这么冷淡我!很!不!开!心!不想凭直觉判断什么…但我这直觉只要不用在考试上每次都 TMD 挺准啊!


就这样吧… 发个博文证明自己还活着… 我大概没有自杀倾向… 有小伙伴陪着自杀个锤子

neoFelhz
Publish: 2018 二月 23日 4:44:00 凌晨
关于新的 Hexo 主题「Spectre」
实验室 博客 Hexo Spectre 

终于用了快一个寒假的所有空闲时间,写完了「Spectre」主题。

Yet the begin of a new story.

Axton
Publish: 2018 二月 22日 10:37:14 上午
新的个人页以及对 Nginx 启用 Brotli、TLS 1.3和 Server Push
开发 Brotli Nginx SSL TLS 1.3 
趁着春节假期,作业一点没做,倒是抽空写了一个新的个人页。 Axton: About Me 到现在 axton.cc 这个域名的根域总算是启用了,之前一直在用二级域根域扔着没管。 个人页算是个假 shell,支持少数常用命令及历史命令和 Tab 补全。几乎所有操作都在 ...
Robert Yang
Publish: 2018 二月 21日 4:12:01 下午
Update: 2018 二月 22日 3:33:53 凌晨
Nginx 已支持 Server Push
技术6 http2 nginx server push 

2018-02-20 刚刚更新的 nginx-1.13.9 已支持 HTTP/2 的特性 Server Push ,这个特性目的是让服务端将部分资源主动推送给浏览器,节约浏览器需要使用这些资源时再次发送 Get 请求的时间。很长的一段时间内 Nginx

Robert Yang
Publish: 2018 二月 16日 2:37:44 下午
Update: 2018 二月 16日 2:51:12 下午
Happy Chinese New Year 2018
世界在这里 2018 新年 

农历新年到来,祝大家新年快乐,顺便放了几张除夕12点整放烟花鞭炮的照片

KeJun
Publish: 2018 二月 13日 5:26:16 凌晨
再见 YY,你好 Discord
discord game yy 
为什么要使用流氓 YY ?
neoFelhz
Publish: 2018 二月 3日 12:46:00 下午
小米降噪耳机(3.5mm)评测
分享镜 耳机 评测 小米降噪耳机 

之前在同学的安利之下,我剁手了一副小米降噪耳机 Type-C 版(评测可以看 这里)。但是 Type-C 版的音质并不好,而且听歌时手机不能充电。于是,我就手痒,又买了小米降噪耳机 3.5mm 版(完了,没钱了)

KeJun
Publish: 2018 一月 31日 11:26:16 上午
再见 2017, 你好 2018
newyear 
很早就在本地写了这个文件,马上就要到除夕了,才决定是时候总结一波了.
neoFelhz
Publish: 2018 一月 30日 5:10:00 凌晨
测评:海淀、西城区高三期末语文试卷对比
自言语 

2018 年是北京市高考改革前的倒数第二年。在新课标改革前夕,高考的变革在试卷上如何体现成为大家关心的重点。通过高三期末试题的分析,可以看到今年高考的一个走向和趋势。

131
Publish: 2018 一月 28日 4:00:00 凌晨
深圳风图

如下图,基本的功能是已经完成了的,但还有一些细节需要完善

链接:shenzhen.windmap.net

本项目修改自开源项目:github.com/cambecc/air

meto
Publish: 2018 一月 20日 9:34:44 上午
网易云音乐手机壳 - 西西

有一份宅急送的快递给您放在顺丰了(

今天收到 宅急送队长 送的手机壳,不得不说顺丰快递真的良心 一箱快递半箱空气,包装经过一路的颠簸没有收到半点损伤

手机壳的背面中心是网易云音乐的吉祥物西西,除了一对红色鹿角外全身黝黑,透着古灵精怪的味道,治愈感满满 胖胖的想捏,可以说是相当萌系了

相比以前用过的一些深水宝地摊货,网易云音乐的这款手机壳做工相当精致,材质柔软、工艺优良(念广告),切边圆滑过渡没有毛刺,很适合大冬天套着搓手游

不过注意到这款手机壳是 TPU 材质的,这种材料本身就容易黄变,在手汗、紫外线的干扰下,不知道能撑多久,希望厂家有做一些「抗黄」处理

防摔这个问题,emmmmc... 你们赞助我去摔

什么时候出黑色款我再买几个

又水了一篇,捏气泡去了~

Robert Yang
Publish: 2018 一月 17日 12:19:09 中午
Update: 2018 一月 17日 3:28:35 下午
选择一个评论系统
技术6 disqus valine 评论 

不要选择静态博客,直接用 WordPress 或者 Typecho 等动态博客的自带评论系统,完。之前想过,要是有 Hexo 转 Typecho 的轮子,我就换回去了,可惜没有。

实际上之前用 WordPress

milkice
Publish: 2018 一月 15日 2:37:19 下午
Kratos-M 原生Kratos主题优化版
Develop Tech WordPress Kratos 
Kratos 是一款免费开源的两栏结构并且拥有自适应效果的主题,她能够在任何浏览器下进行友好体验的访问。Kratos 秉持了专心写作专心阅读的特点,简单大方的主页构造并采用了2:1的完美比例,使得博客能在臃肿杂乱的环境中脱颖而出。Kratos 主题内置了强大的主题后台控制平台,可以轻松设置关键字及站点描述,自定义的顶部样式(背景图 or ……
Robert Yang
Publish: 2018 一月 8日 6:16:02 早上
Update: 2018 一月 11日 2:05:57 下午
动态范围 宽容度 RAW Log 都是什么
技术6 动态范围 宽容度 RAW Log 

写这个主要是因为昨天B站视频评论,里面有个人在自己也不懂“动态范围”“宽容度”的情况下强行给别人科普。他认为照片能拉回多少高光和暗部信息叫宽容度,而在视频中这个概念叫动态范围,在视频中使用 Log 模式拍摄能提高动态范围。

DCC
Publish: 2018 一月 11日 2:11:00 凌晨
CNAME 接入 Cloudflare 使用免费 Railgun
CNAME 接入 Cloudflare为何选择 CNAME 接入 CloudflareCloudflare 是国外 CDN 厂商,提供免备案无限流量 CDN,免费的 HTTPS 证书和无限量的 ...
Zohar
Publish: 2018 一月 6日 5:20:00 下午
Typecho主题:Cactus
Cactus:一个简约的Typecho响应式主题。下载GitHub:ZoharWang/typecho-theme-Cactus(无耻求Star安装 下载压缩包并解压 修改文件夹名为Cactus...
Publish: 2018 一月 2日 4:34:30 下午
再见 2017, 你好 2018

新年和圣诞都过去了,随着圣诞节过去,这个博客也已经建立了1年,最近手边的事情太多没赶上年底写完总结,于是推迟到了现在,真是怠惰啊….

neoFelhz
Publish: 2018 一月 2日 5:43:00 凌晨
Goodbye 2017
自言语 

不知不觉,一年的时间过去了,又该写几笔来回忆过去这一年了。。

Publish: 2018 一月 1日 3:06:11 下午
再见 2017 ,你好 2018

时光飞逝,转眼间博主快18咯
这一年发生了许多许多
记性不好,这些能记住的都算印象深刻了吧。。。
这是我的第一篇“年终总结”


年初

刚开完一个令我印象深刻的联欢会,

为啥印象深刻呢?校级联欢,老师托我搞了个微信墙。。。Exciting

<-- 这行记录的事情被我隐藏了,知道这些事的人并不多。。 -->

就被主任托给各个会考科目的老师折腾会考去了。。。一个元旦折腾过去,会考过了。

入坑Ingress,成了北绿一个小小的特工。


寒假

参与了北京南站的志愿者活动,在一个小团体过得挺舒服,也看到了一些社会上的不良现象。


三月

上一届的高三成人礼,再次在后台干活。
急脾气该改改了,我坚持自己的方案,差点与某个没理解我思路的老师吵起来。。。
成人礼最后,想用奶油整一下某个学长,最后却被他按在地上抹了一脸[捂脸]

生日那天,明明送了我一组 USB充电的AA电池 ,之前一直念叨让学校买点试试,结果他先买了(似乎现在学校还没买。。。),现在一个在鼠标里,两个在包里备着,还有一个在家里吃灰。。。


四月

游学,去西安,各种折腾,晚上睡觉前要收手机,第一天交了一个,第二天年级组长看我在接近收手机时发了个朋友圈,于是断定我有俩手机,于是晚上交了俩(我带了四个哈哈哈)
<-- 感情问题。。。继续隐藏。。。 -->


接近夏天

和明明一起参加了个 机器人足球比赛 ,非常懵逼的干趴下好几队。。。在最后一轮输给了冠军。。。然后似乎全校老师都认识我和明明了。。。

放假前和明明帮学校弄视频,第一次用 AE 做动画(套模板)


暑假

刚放假就去石家庄“玩”,被老姐按在她屋里学了两周,回京继续被她按着学。。。

老妈收走了我的显示器。。于是我这个熊孩子找了个废笔记本屏幕组装了个显示器。。。


秋季开学

没啥好说的,学吧(我这重度电子依赖症终于能一整天离开手机了)
搬到 分校后基本没得玩了。。。
班里电脑 没有网,于是接了无线网卡,后来觉得无线网卡不好使又换了路由器。。。


年末

新年联欢,主任出差,设备靠自己,照样玩得挺High


其他事件等我想起来再加吧 。。。。


最后

希望自己在高考前少碰点电子设备吧。。。

meto
Publish: 2018 一月 1日 12:57:42 下午
以程序员的角度玩微信跳一跳

前些日子微信推出了一款小游戏「跳一跳」,游戏中玩家需要扮演一个「黑色」小人,在不同颜色、形状的跳板方块间进行跳跃。操作也很容易,按压屏幕越久,小人会跳得越远。

显然这游戏对我这样的手残党非常不友好

若干次徘徊在十位数后,决定好好研究这个游戏,用程序员的思路去解决它。

外挂无非两种:内存修改、物理辅助。这里研究后者,也就是识别出跳跃距离后,换算成时间后模拟真实触碰操作。这种方式最保险,而且不容易被后台察觉 XD

观察棋子,不难发现棋子的颜色始终是没有变化的,因此可以根据颜色识别出棋子中最宽的部分,取中心即可

棋盘部分比较难识别,忽略掉背景色后会有阴影等因素的干扰,还有前后两个棋子紧挨的特殊情况。

考虑从上到下做行扫描,提取出所有连续的颜色块,排除掉中心点与棋子过于靠近的情况,这样就避免识别到棋子头部,取最上面且长度大于棋子宽度的切片,就得到目标点横坐标。

对于纵坐标可以只考虑棋盘右侧,这样就不需要和阴影打交道。棋盘只有圆盘、方块两种类型,边缘的锯齿状如下

容易发现规律,方块的中心线位于边缘峰值处,圆盘的中心线在峰值处偏下。可以设定一个计数器,当边缘连续 4-5 次没有增加时停止,将此处确定为纵坐标。

有时候两个方块相邻会出现识别失败,

131
Publish: 2018 一月 1日 4:00:00 凌晨
再见 2017!你好 2018!
再见 2017!你好 2018!
lwl12
Publish: 2017 十二月 31日 4:00:20 下午
Bye 2017, Hi 2018
记录 

CE2018,LWL 的自由天空,雷达已识别,上升到高度层 1514736000。






- EOF -

Axton
Publish: 2017 十二月 31日 3:59:46 下午
点亮2018:无垠2017年度总结
其他 2017 2018 总结 新年 
随着 Telegram 换上了小红帽,2017也即将要过去。在2017年的最后一段时间,我终于开始写这篇拖了很久的总结。
meto
Publish: 2017 十二月 24日 6:31:40 早上
关于校园网HTTP劫持的分析
OpenWrt 

接上文 https://i-meto.com/shit-scutweb/

最近发现不少应用的联网异常,尤其是网易云音乐的播放时常请求失败,怀疑是垃圾校园网搞的鬼,于是做了一些分析。

通过抓包不难发现有不少类似 http://202.38.196.91/cache/5/05/music.126.net/**.mp3 的请求。通过查询 IP 发现这台服务器位于校内,开放了 80 端口,初步判断是一台缓存服务器。

使用 wireshark 进行抓包,得到更详细的请求过程

  • 18,19,20: TCP 三次握手
  • 21: GET 请求下载 QQ 安装包
  • 22: (抢答)302 跳转,同时关闭连接 [FIN]
kookxiang
Publish: 2017 十二月 23日 6:00:32 晚上
I'm Still Alive

< 访问完整版以查看此播放器 >

Robert Yang
Publish: 2017 十二月 17日 7:55:42 早上
Update: 2017 十二月 17日 9:35:36 上午
延时摄影入门
不能无聊 延时摄影 LRTimelapse 

需要的软件: Premiere Pro、Lightroom Classic、LRTimelapse
需要的设备:

DCC
Publish: 2017 十二月 15日 8:37:00 早上
Bitextor 双语爬虫
配置 Bitextor 环境以下操作均在 Ubuntu 16.04 下完成,运行环境 Azure B2MS 型机器首先配置相关的环境(GCC & Python)apt-get update &a...
PoiScript
Publish: 2017 十二月 7日 7:42:27 早上
2017 HTTPS 调查
https 

这篇文章改写自 poi 的计算机网络课论文。

前言

自 1991 年,第一个带有文档的 HTTP ── HTTP V0.9 问世以来,HTTP 协议得到了广泛的运用。

Cisco 统计,在 2016 年,全球的的网络流量达到了惊人的 1.2 ZB 流量,其中视频的流量就达到了 73%。而目前的视频传输协议中最常用的分别是 Apple 的 HLS(HTTP Live Stream) 和 Google 的 DASH(Dynamic Adaptive Streaming over HTTP),而两者都是基于 HTTP 的协议。

随着互联网的发展,网络通信中的安全性也得到了重视。在 1995 年,TLS 协议的前身 SSL 协议应运而生。而我们今天要讨论的就是在 SSL 诞生的 22 年之后,互联网上的 HTTPS 运用到达了什么程度。

总览

我收集了目前 Alexa 排名前 1,000 的网站,虽然数量不多但是都是无疑占据了互联网上大多数的流量,通过来一窥互联网当前 HTTPS 的普及程度。部分的数据来自于 ssllibs

实际上,我有 Alexa 前 1,000,000 的网站的名单。但是 ssllib 的 API 调用起来极其费时,对一个网站 ssl 配置的查询需要 2~3 分钟的时间,所以只能退而求其次。只考察前 1,000 个网站。

首先,在这 1,000 个网站中,目前有效的网站只有 981 个,其他的网站都无法成功解析其域名,可能是网站己经下线或者迁移到别的域名了,所以其是否支持 HTTPS 就不得而知了。

然后,在这 981 个网站中,支持 HTTPS 的恰好有 800 个,占比约有 81.5%。而在前 100 的网站中,只有 10 个网站不支持 HTTPS。

虽然这 800 个网站都支持 HTTPS 协议,但是他们在协议的实现上的不同也会产生安全性的差异。例如 RC4 加密曾经是 TLS 所采用的加密算法之一,但是在 2015 年遭到了破解,因此已经禁止在 TLS 中使用了。可目前仍然有网站使用 RC4 加密,甚至作为唯一的加密手段,那其 HTTPS 就形同虚设了。

TLS 版本

我统计了这 800 个网站所支持的最高的 TLS 协议的版本:

绝大多数的网站(98 %)的网站支持了 TLS 1.2 标准。比较遗憾的是,没有看到网站使用了最新的 TLS 1.3 标准,不过考虑到 TLS 1.3 还处在草案阶段,不使用也是合情合理的。此外,我也发现了还有 37 个网站仍在使用已经被认为是不安全的 SSL 3.0。

TLS 握手

TLS 中最常见的握手方式两种:一种是基于 RSA 算法的;另外一种是基于 DH(Diffie-Hellman) 算法。RSA 算法历史悠久,兼容性好;DH 算法在加密速度上更有优势,而且拥有前向安全性。 TLS 握手的一个目的就是保证安全性。DH 握手可以使用除了 RSA 以外的证书来提高性能,例如 ECC。ECC 证书内置了 ECDSA 公钥,使用了 ECC(Elliptic curve cryptography)算法,它的密钥更短 ── 256 bit 的 ECC 算法强度和 3072 bit 的 RSA 算法安全性相当 ── 而加密速度更快。在 800 个支持 HTTPS 的网站中,大多数的网站还是选择了传统的 RSA 证书,只有少量的网站(35 个)选择了 ECC 证书:

TLS 握手的另外一个目的就是可以验证网站的身份,即需要数字签名。目前主要的签名方式有两者,分别是 RSA 和 ECDSA(Elliptic Curve Digital Signature Algorithms)。在这 800 个网站中,有 21 个网站使用了 ECDSA 签名:

从 HTTPS 到 HSTS

当一个网站部署了 HTTPS 后,当用户再发起 HTTP 请求时,应该主动将用户引导到更安全的 HTTPS。目前有两种方法引导:一是当用户发起 HTTP 请求时,直接将其重定向到 HTTPS;二是设置 HSTS 响应头。

在这 800 个网站中,当我们直接发起 HTTP 请求时,HTTP 的状态码分布为:

我们知道在 HTTP 的状态码中,20X 的状态码表示资源已经找到;30X 表示重定向;40X 的状态码表示资源不存在;50X 表示服务器发生了错误;因此,我们的粗略的统计为 573 个网站会将用户重定向到安全的 HTTPS 页面。其余的不会。

和直接重定向到 HTTPS 相比,HSTS 的方法要好得多:网站在 HTTP 应答头中加入 HSTS(Strict-Transport-Security)的信息。它指定了一个有效时间,在有效时间内,当浏览器下次访问该域名时将直接使用 HTTPS 协议访问。

上述两种办法都有一个缺陷:都需要先经过一次 HTTP 请求后,才能过渡到 HTTPS 请求。如果第一次的 HTTP 请求就遭到了劫持,那就无能为力了。所以,相比简单的设置 HSTS 应答头,加入 HSTS Preloading List 的意义更大。

HSTS Preloading List 的原理就是在浏览器中内置一张支持 HSTS 网站的列表,当用户访问当中的网站时,如果在有效期内的话,浏览器会直接使用 HTTPS 链接,不会再发起 HTTP 请求。

目前的 HSTS Preloading List 主要由 Chrome 维护,FirefoxIE/Edge 都在使用。截至 2017 年 11 月 30 号,Chrome 的 HSTS Preloading List 中一共有 41312 个域名。而在这 800 个支持 HTTPS 的域名中,有 124 个网站也在其中。

Chrome 的 HSTS Preloading List 支持申请,所以可以见这个列表来的域名将会越来越多,最后覆盖到我们常用的域名。

维护证书安全

HTTPS 链接中,另一个容易受到攻击的地方就是证书。证书是由 CA(证书颁发机构)颁布的,而受信任的 CA 多达上百个。我们先来看看这 800 个网站的证书是由哪些 CA 颁发的:

现有的证书信任链还有一个问题就是任意一个受信任的 CA 都可以给任意一个域名颁发证书。所以如果出现了中间证书甚至是根证书被盗签时,对于浏览器来说是无法分辨的。

一种解决办法就是在应答头中加入 HPKP (HTTP Public Key Pinning)信息:即将自己的证书指纹放在 HTTP 的应答头里,让浏览器记录这些信息。当浏览器下次访问时都会验证该指纹,如果指纹不对的话,即使证书合法,浏览器也会直接断开链接。

显然,HPKP 和 HSTS 一样也有 HTTP 被劫持的危险。所以也有相应的 HPKP Preloading List。但是和 HSTS Preloading List 不同,个人用户无法申请将自己的网站加入其中。所以目前的 HPKP Preloading List 的规模还比较小,而在这 800 个网站中也只有 2 个网站设置了 HPKP 的应答头。

此外, Chrome 提出了另外一种解决办法,那就是 Certificate Transparency:即将整个证书签名的过程透明化,任何证书持有者和 CA 都可以将自己证书的记录提交到相应的 Certificate Logs 服务器中,而这整个记录都是受到审计和监控的;浏览器在访问网站时就会对证书进行校验,进而做出不同的反应。

下面就是一个支持 Certificate Transparency 的页面的例子:

但是,Certificate Transparency 目前只有 Chrome 支持。而 Chrome 知道其利用率还太低,所以即使在 Certificate Logs 服务器中查不到相应的证书也不会有太大影响。

结论

从上面的分析我们可以得出:尽管大多数的网站都已经支持 HTTPS 协议了,但是实现还是参差不齐。而面对一些新型的攻击,例如首次 HTTP 协议遭到劫持,证书被盗签等问题准备得还是不够充分。

P.S.

很可惜,没有收集到所有 1,000,000 个域名的 HTTPS 信息,不过还是可以统计一下其他的信息。例如,域名的长度:

和顶级域名的分布:

lwl12
Publish: 2017 十二月 3日 8:47:57 早上
[LWL的自由天空 年度简报] – 云起
网站 LWL 的自由天空 常务 年度简报 

2017 年,转瞬而过。 知世故而不世故,处江湖而远江湖。人情冷暖已看透,赤子之心永不丢。 这是自由天空的 2017 年年度简报,你好。
Robert Yang
Publish: 2017 十二月 2日 7:02:18 早上
Update: 2017 十二月 2日 3:00:00 下午
转移到 Let's Encrypt
技术6 证书 https Let’s Encrypt 

去年是用非正常手段签的免费 AlphaSSL 野卡,12月27号就过期。正好今天没事就用 Let’s Encrypt 替换原来的证书。我的博客问题在于部分资源是缓存到又拍云上面的,所以自己的服务器上要签一次证书,又拍云上要签一次。好在又拍云自己可以签发续签 Let’s

Robert Yang
Publish: 2017 十二月 1日 3:42:11 下午
Update: 2017 十二月 2日 10:35:44 上午
你好,早晨
世界在这里 摄影 阳光 冬日 

我最近有点懒了,可能是早上太冷的缘故,不太想起床。周四好容易起来一回,发现太阳很给面子啊,索性拿相机出去拍几张。

131
Publish: 2017 十二月 2日 4:00:00 凌晨
中国大陆使用reCAPTCHA
很久以前就想用reCAPTCHA了,怎奈国内不存在这个服务(雾),只好用了Luosimao的人机验证前几天在洛谷上发现它可以正常使用reCAPTCHA,于是这周末就查了一下然后给自己的小站换上了...
Halyul
Publish: 2017 三月 22日 11:39:00 晚上
Update: 2017 十二月 2日 3:16:42 凌晨
失踪人口回归系列之增强站点SSL安全性
技术 教程 

失踪人口回归系列之第二篇

Halyul
Publish: 2017 三月 22日 9:53:00 晚上
Update: 2017 十二月 2日 3:16:42 凌晨
失踪人口回归系列之在VPS上搭建HEXO的GIT部署环境
技术 Hexo 教程 

失踪人口回归系列的第一篇文章

Halyul
Publish: 2017 六月 5日 9:07:00 晚上
Update: 2017 十二月 2日 3:16:42 凌晨
『转』真正的自由?——从杨舒平的演讲来谈中国和言论自由

原文地址: neoFelhz’s Blog

在前天,也就是那个特殊的日子的前一天晚上,我和几个同学彻夜长谈。我们谈了很多东西,我思绪万千,所以我决定写点东西出来。

请点击这里查看

Halyul
Publish: 2017 三月 23日 1:14:00 凌晨
Update: 2017 十二月 2日 3:16:42 凌晨
解决Hexo MODULE NOT FOUND问题
杂 Hexo 

Hexo上最玄学的问题,没有之一

Halyul
Publish: 2017 七月 16日 3:18:00 下午
Update: 2017 十二月 1日 10:23:00 晚上
记Piwik统计中西藏、台湾被视为独立的国家一事
键盘侠 

说实话,我还真的不知道怎么给这篇文章写标签和分类。垃圾Piwik!

DCC
Publish: 2017 十二月 1日 7:22:00 早上
CentOS 7 下 LEMP 的配置
CentOS 是 RHEL (Red Hat Enterprise Linux) 的免费版,由于红帽的大力推广,在国内外很是流行。因为众多企业和开发者使用,首先要求的是保证稳定,所以 CentO...
Zohar
Publish: 2017 十二月 1日 5:00:00 凌晨
通过CNAME方式接入Cloudflare
Cloudflare(以下简称CF)是一家非常优秀的CDN服务商,它所提供的免费服务功能非常丰富,足以应付绝大多数中小型网站的需求,可以说是业界良心。通常来说,免费版CF只能通过NS方式接入,这...
Ice-Hazymoon
Publish: 2017 十一月 29日 4:41:04 下午
记(水)一件趣事
喵喵喵 奇淫技巧 日常 
好久没水写博客了.... 因为英语的词汇量出奇的少,于是自己嘴贱 ...
Publish: 2017 十一月 29日 4:13:02 下午
Android 的优化软件们

昨天晚上跟同学聊天的时候脑洞大开,于是各种编段子,后来整理了下发到了我的 Telegram 频道 上,经过其他人转发之后……… 开启了编段子的夜

Publish: 2017 十一月 28日 5:40:19 凌晨
如何为 ThinkJS 3 网站优化 TTFB 时间

今年早些时候,奇舞团开源的 Node.js 框架 ── ThinkJS 迎来了她的 3.0 版本。尽管今年我很少更新博客,但「每次 ThinkJS 发布大版本,我都要更新博客程序」的老传统还是不能丢。所以,你现在看到的这个博客,已经是基于 ThinkJS 3 全面重构后的新版。

ThinkJS 3 基于 Koa 2.x 开发,内核实现得非常小巧,框架通过 Middleware(兼容 Koa)、Adapter、Extend 等机制来扩展出强大而丰富的功能。按照惯例,ThinkJS 大版本之间无法平滑进行,但这次升级带来的工作量不算太大,本站的升级工作花了一下午全部完成。

基于 ThinkJS 开发的网站普遍都很快,这篇文章我打算聊聊如何为 ThinkJS 3 网站优化 TTFB 时间,使之变得更快。

Time to first byte(简称 TTFB)时间,又称首字节时间,是 WEB 性能优化中非常重要的指标。它代表着从浏览器发起 HTTP 请求到收到 HTTP 响应第一个字节的这段时间,包含了 DNS 解析、建立 TCP 连接、建立 SSL 连接、发送 HTTP 请求、网络传输、服务端处理、30X 重定向等阶段。在影响 TTFB 所有因素中,服务端程序何时输出响应决定了服务端处理时间的长短,也是本文关注的优化目标。

优化 WEB 页面的 TTFB 时间除了要尽可能优化业务逻辑之外,还有两个常用技巧:

  • 多个 HTTP 请求响应(动静拆分);
  • 一个 HTTP 请求多次响应(分块传输);

前者无非就是先尽快输出一个无服务端复杂逻辑的空壳页面,再发起 ajax、jsonp 等异步请求填充内容。这种方案不利于 SEO,比较适用于单页应用。

像本站这种以内容为主的 Web 页面,非常适合采用第二个技巧来优化 TTFB 时间。本文重点介绍它。

分块传输响应需要用到我之前介绍过的 HTTP Transfer-Encoding: chunked 机制。有了这个机制,服务端可以随时将已经完成的部分响应发送给给客户端,而不必等待全部完成后再一次发送。浏览器拿到部分响应,就能解析并执行其中的 HTML、CSS 和 JS 代码,还能加载其中引用的子资源,最终让用户更快看到部分页面内容。分块传输也是 Facebook 在 2009 年实现的 Bigpipe 方案的理论基础,这里不再赘述。

再来说说 ThinkJS。

在 ThinkJS 之前几个版本中,我们可以通过 http.write(content) 发送多个 chunk,再通过 http.end(content) 发送最后一个 chunk,非常方便。

而 ThinkJS 3 使用的 Koa 2.x,只能通过 ctx.body 设置并结束响应,意味着通常情况下响应只能发送一次,还得放在整个 Controller 流程的最后。

通过分析代码,我找到在 ThinkJS 3 中多次发送响应的两种方案:

  • ctx.body 支持传入 Stream,创建 Readable 流 rs 并多次调用 rs.push(content) 可以多次发送 chunk,调用 rs.push(null) 可以结束响应;
  • Koa 代码层面上并没有禁止我们使用 ctx.res,通过 res 对象可以完全控制响应;

方案一比较正统;方案二则危险得多,官方都说要后果自负:

Bypassing Koa's response handling is not supported. Avoid using the following node properties: res.statusCode, res.writeHead(), res.write(), res.end(). via

所以,本站最终采用了方案二。Koa 总共就几个文件,出啥奇怪的问题都不怕。

下面开始贴代码。

1)创建 Controller 的 Extend 文件 src/extend/controller.js

const firstChunkMinLength = 4096;

module.exports = {
    async renderAndFlush(tpl) {
        let content = await this.render(tpl);

        //first chunk
        if(!this.ctx.headerSent) {
            this.ctx.type = 'html';
            this.ctx.flushHeaders();

            let length = content.length;
            if(length < firstChunkMinLength) {
                content += `<s>${' '.repeat(firstChunkLength - length)}</s>`;
            }
        }

        this.ctx.res.write(content);
    }
};

输出第一个 chunk 之前,需要通过 ctx 的 type setter 和 flushHeaders 方法来输出响应起始行和头部。

第一个 chunk 不能太小,否则会被某些浏览器缓存起来,不会马上显示,达不到我们想要的效果。更多细节可以点开这个 stackoverflow 的链接自己看。另外,我在实际测试中发现,只补空格 iOS Safari 依然不会立刻渲染,把空格放在标签里就没问题。也可能是我的幻觉,欢迎大家测试并指正。

2)在 Controller 里将原本渲染模板的逻辑根据实际情况拆分为多步:

async indexAction() {
    let pageName = 'blog-home';
    let title = 'JerryQu 的小站';
    this.assign({ pageName, title});

    //输出头部和边栏 HTML
    await this.renderAndFlush('home/inc/header');

    //查询数据库(耗时操作)
    let pn = this.get('pn');
    let data = await this.model('post').getPostList(pn, 10);
    data.pagerPath = getPagerPath(this.ctx, 'pn');
    this.assign(data);

    //输出剩余 HTML
    return this.display('home/index_post_list');
}

也就是说需要提前发送的模板通过 renderAndFlush 来渲染并发送,剩余模板还是走原有的 display 逻辑。

至此,本文要介绍的优化工作已经完成,赶紧打开浏览器验证一下吧。

但是如果你照着我的代码改造,肯定会遇到不少坑,下面列举几个:

1)原本的异常逻辑重定向到错误页不好用,直接提示 Can't set headers after they are sent. 错误。

这个错误信息已经把原因描述得很明白,HTTP/1 的响应需要严格按照起始行、头部和正文的顺序发送,已经发送了正文,就不能再通过 30X 状态码和 Location 头部来跳转页面。

解决方案:有一些会产生跳转的逻辑例如参数合法性检查,可以挪到发送第一个分块之前来进行。另一些异常跳转逻辑则无法提前,例如查询数据库后发现不存在对应的文章,这种情况可以输出一段 JS 代码在浏览器中跳转,或者直接渲染错误页面。

2)提前输出的模板中部分变量取不到值。

例如本站第一个分块输出了左侧内容,这个分块对应的模板中,有很多字段原本来自数据库查询后的结果,提前渲染必然取不到值。

解决方案:这些需要用到数据库字段的逻辑,有一些可以挪到后续分块中;有一些则不好后移,例如需要动态赋值的页面 <title>,只能放在 <head> 里。一种方案是继续使用万能的 JS,通过后续分块中的 docuemnt.title 来给页面 title 赋值。对于不支持 JS 的 Spider,可以禁用提前输出响应策略。

我使用了另外一套方案:由于文章数量不多,我索性在程序启动时,把全部文章 ID 和标题对应关系从数据库取出来,存在配置中。这样,后续第一个分块获取标题时无需查询数据库。

下面这段代码需要放在 src/bootstrap/worker.js

//HTTP 服务启动前执行
think.beforeStartServer(async () => {
    let postTitle = {};
    (await think.model('post').field(['slug', 'title']).select()).forEach(item => {
        postTitle[item.slug] = item.title;
    });
    think.config('postTitle', postTitle);
});

3)Middleware 中获取到的 ctx.body 不是完整页面。

本方案只有最后一个分块内容才会赋值给 ctx.body,前面分块的输出则完全绕过了 Middleware,出现这种情况是正常的。如果你不能接受,还是老老实实用 Readable Stream 吧。

最后,看完本文,相信你对如何优化 ThinkJS 3 网站的 TTFB 时间有了足够了解,赶紧动手试试吧。遇到任何问题,欢迎留言讨论。

本文链接:https://imququ.com/post/reduce-ttfb-on-thinkjs3-website.html参与讨论

Zohar
Publish: 2017 十一月 20日 4:30:00 下午
对「穷逼VIP」事件的一些个人看法
开门见山:你们啊,不要总想着弄个大新闻!那只是一段注释而已,又不是展现给用户看的。有些人是真的厉害,把这样一段注释,直接给上升到了一个相当高的高度上,甚至还扯到“阿里的优越感”什么的。我觉得,一...
Publish: 2017 十一月 18日 2:33:17 下午
闲聊·记录 | 2017年11月

时间往往过得很快,这个月似乎发生了不少事情,梳理下思路来想想这个到现在都干了什么…..


上月底我受同学邀请去了一家手游公司工作,主要从事手游 SDK 的相关开发(所以我也不知道手游的策划们是怎么干活的),对于我来说,难度属于并不是很难,

Publish: 2017 十一月 18日 2:12:12 下午
bPlayer

说起来很久都没写博客了呢,估计这两天会写一篇博文记录下最近的事情~

2017 年

Zohar
Publish: 2017 十一月 14日 3:55:00 下午
MacBook Pro
在今年的苹果返校活动开始后的第一天,入了一台盼望已久的MacBook Pro,弃掉了陪伴了我好多好多好多年的联想。7号下单,前前后后一共收到了4个EMS的快递,14号的下午终于拿到了电脑,心急的...
neoFelhz
Publish: 2017 十一月 12日 8:47:42 早上
Update: 2017 十一月 12日 8:48:17 早上
Chrome 离线包查询
实验室 Chrome 
DCC
Publish: 2017 十一月 10日 8:11:00 晚上
Nginx 的编译安装
默认安装的 Nginx 在大部分情况下都是足够使用的,但有的时候我们还需要其他一些高级的东西,这个时候就需要编译安装啦。这个部分比较繁琐,纯小白不看也没关系。东西比较多,我们创建一个文件夹单独存...
lwl12
Publish: 2017 十一月 10日 10:05:37 上午
办到了年轻人的第一张 VISA 卡
记录 VISA 借记卡 银行 

办到了年轻人的第一张 VISA 卡🌚

Axton
Publish: 2017 十一月 6日 12:56:58 下午
MDx:轻于形,悦于心
开发 推荐 Material Design MDx 主题 
MDx,一款轻快、优雅且强大的 Material Design 风格 WordPress 主题 欢迎来到 MDx 的世界。 English Version & English Docs are being translated. 目前 MDx 最新版本 v1.7.10。 请从 这里 下载 MDx 的最新版本。 MDx QQ 交流群687577787 ...
Robert Yang
Publish: 2017 九月 17日 8:22:48 早上
Update: 2017 十一月 6日 11:23:57 上午
开一个飞利浦的妖刀
不能无聊 买买买 

由于某些众所周知的原因(qong),我的笔记本显示器是TN屏的,不过大多数的笔记本IPS屏幕也是辣鸡。所以有些时候用Lr、Ps这些处理个照片非常恼火,和在手机上看的色差太大了,手机屏幕毕竟是小而贵,再差也差不到哪里去。所以又迫于穷,买了费力浦的妖刀245C7QJSB,可以说

DCC
Publish: 2017 十一月 2日 8:30:00 早上
震惊!天翼校园客户端被植入病毒
天翼校园客户端被植入病毒!中毒电脑被用来“挖矿”金山毒霸安全实验室监测发现,“天翼校园客户端”被植入后门病毒......​​​今天上午,金山毒霸安全实验室监测发现,中国电信江苏分公司校园门户网站...
Robert Yang
Publish: 2017 十一月 2日 4:38:36 凌晨
Update: 2017 十一月 2日 5:09:12 凌晨
Camera Raw 10.0 更新
技术6 Adobe Camera Raw PS 

Adobe 家的瑞士军刀更新到了2018版本,原来的 Lightroom CC 改名为 Lightroom Classic CC 。而 Lightroom CC 的名字给了一个新工具,可以认为是 Lr 的简化版本,突出的云同步的理念。 Lightroom Classic

meto
Publish: 2017 十一月 1日 4:00:00 下午
一键点亮你的网易云音乐
网易云音乐是很好用,但禁不住一直丢版权音乐。眼看着歌单一片一片地灰掉,用 PHP 写了一个搬运脚本,妈妈再也不用担心我的网易云音乐变灰了。
Zohar
Publish: 2017 十月 30日 6:30:00 早上
Typecho插件:Comment2Telegram
Comment2Telegram:一个通过Telegram推送评论通知的Typecho插件。下载GitHub:Vrzl/typecho-plugin-Comment2Telegram(无耻求St...
Robert Yang
Publish: 2017 十月 19日 5:59:22 凌晨
Update: 2017 十月 20日 12:46:15 下午
为 Windows 颜色管理正名
技术6 色彩管理 srgb macos windows 

通常会听到一种声音,专业设计师使用 macOS 是因为 macOS 的颜色管理比 Windows 强很多,直到 iOS 拍摄的照片默认使用 Display P3 色域保存之后,很多人也惯性的认为 Windows 在显示 P3

lwl12
Publish: 2017 十月 16日 10:27:04 上午
1024 天成就达成!
网站 LWL 的自由天空 纪念日 

LWL 的自由天空

2014.12.28 – 2017.10.16

Made with by lwl12

 

PoiScript
Publish: 2017 十月 16日 6:10:47 早上
NgModule 的作用域
angular 

前言

在开始聊这个话题之前,先提一个我遇到过问题:假设有一个 SpinnerService,这是一个可以在进行发送 HTTP 请求等异步操作的显示一个加载动画的 Service 。

这样看来,它应该是每个 Module 和 Component 中都可能用到的一个 Service,那么我们把放到 SharedModuleproviders 当中。然后在需要这个 SpinnerService 的 Module 中导入这个 SharedModule 即可。代码看起来大概是这样的:

// app/shared/spinner.service.ts
@Injectable()
export class SpinnerService {
  show () { /* code logic */ }
  hide () { /* code logic */ }
}

// app/shared/shared.module.st
@NgModule({
  providers: [SpinnerService],
  //other staffs
})
export class SharedModule {}

// app/some/some.module.ts
@NgModule({
  imports: [SharedModule],
  // other staffs
})
export class SomeModule {}

代码看起来没什么问题,而且也能正常运行。但是如果你在两个不同的 Component 中分别调用 SpinnerService 中的 show()hide() 函数,你会发现加载动画没有如愿的消失;更近一步,如果在 Service 中有共用的数据的,你会发现两个不同的 Component 中对数据的修改也无法同步。 Component 中的 Service 是由 Module 提供的,所以问题就出在 Module 上。

有的读者的可能已经猜到了:虽然两个 Module 中会提供一个 SpinnerService ,但是他们不是同一个实例。

Dependency Injection

在继续解释为什么不是同一个实例的之前,我想先粗略地说一下为什么应该会是同一个实例。这就涉及到一个概念: Dependency Injection ,动态注入。

以 angular.io 上的例子为例:假设有一个 Car 类,其依赖一个 Engine 类。

于是你可以这么写(不使用 Dependency Injection ):

export class Car {
  public engine: Engine;
  constructor() {
    this.engine = new Engine();
  }
}

当然也可以这么写(使用 Dependency Injection ):

export class Car {
  constructor(public engine: Engine) {}
}

两者看起来区别不大,而且当需要调用 engine 的时候,用法也是相同的。但是后者的好处却有不少:

  1. EngineCar 的结构是完全独立的:传入 Car 中的是 Engine 的一个实例而不是在 Car 的新建这个实例。所以如果 Engine 的构造函数发生变化的时候也不需要修改 Car 中的构造函数。

  2. 因为传入 Car 中的是一个实例,所以可以复用这个实例,减少内存占用。

  3. 因为传入的只是一个实例,所以甚至可以传入一个虚假用于单元测试的 Engine

Angular 通过 Hierarchical Dependency Injectors 实现了上述的 Dependency Injection 。 Hierarchical Dependency Injectors 具体的实现,例如 Service 的复用, Component 的 Injectors 等都是很值得一说的,不过和本文相关性不大,这里按下不表。

Providers & Declarations

我们知道一个 Module 中可以有 Components , Directives , 和 Pipes ,还有 Services 。前三者都是与 HTML 模板相关的,需要放在在 Module 的 declarations 中;后者一般用来处理数据,放在 providers 中。

那么 providersdeclarations 的区别是什么呢?其中一个就是两者的作用域不同: providers 中是全局的;而 declarations 则是本地的,只有该 Module 中可以使用。

Services 为什么会是全局的呢?其实很好理解,因为 Services 经过编译之后最后都是生成一个类,在导入或是导出它们的时候都会限定在命名空间内。

所以, Services 应该只在 providers 中出现一次;而其他三者则是在需要的 Module 的 declarations 地方都出现。

当然,在所有出现的地方都需要写一遍也是非常烦杂。这时我们就可以把他们放到一个 SharedModuledeclarationsexports ,最后在需要的 Module 中导入该 SharedModule 即可。

对应到上面的问题,你会发现确实也只有在 SharedModuleproviders 中出现了 SpinnerService 呀,但是问题还是存在啊。

其实不止 SharedModule ,导入了 SharedModuleSomeModule 相当于也提供了 SpinnerService 。所以在两个 Module 中就会有两个由不同的 Module 提供的,两个不同的 SpinnerService

导入拥有提供了 Services 的 Module ,相当与自己提供了相同的 Services 。这样的例子这样的情况你可能早就接触过了:当你在 AppModule 中导入了 HttpModule 之后,你就可以使用 Http 这个全局 Service 来发送 HTTP 请求了。

这里的 AppModule 指 Root Module ,下同。

另一方面,如果一个 Module 既有 Components 也有 Services 时则需要分别对待了:在 AppModule 中导入这个 Module 的时候需要调用 forRoot() ,它返回的是一个 ModuleWithProviders;而在其他的 Module 则是直接导入这个 Module 或者调用 forChild()。例如 RouterModule 就既有 Component <router-outlet> 和 Directive routerLink ,也有 Service ActivatedRoute

Best Practice

至此,要解决文章开头的问题可以很简单:将 SpinnerService 放到 AppModuleproviders 里即可。

但是,这样的简单粗暴地将每一个 Service 都交由 AppModule 提供的解决方法违反了我们一贯的原则:尽可能保持每个 Moudle 的功能和结构简单。

所以,我们确实应该将 SpinnerService 移出 SharedModule ,然而也不应该放进 AppModule 而是可以考虑放进一个新建的 CoreModule 中。而这个 CoreModule 也应该作为一个纯粹的只提供 Services 的 Module ,而只在 AppModule 中导入它。

当然,因为只在 AppModule 中导入,所以如果有一些只需要在 AppComponent 中使用的 Component ,如 NavComponentFooterComponent 等也可以考虑放到其中。

References

  1. 文章中提到了可以使用一个虚假的 Service 用于 Component 的单元测试, 这里 介绍了具体应该怎么做。

  2. Angular 的 Hierarchical Dependency Injectors 系统,这是一个很有趣的系统,每一个 Component 都有一个与之对应的可编辑的 Injector 。具体可以查看的 Angular 的官方文档: Hierarchical Dependency Injectors

  3. 写 Angular 应用的一个原则都是保持每一个 Module 的功能和结构的简单和统一,这一点和 Unix 的哲学不谋而合:Write programs that do one thing and do it well. 那么我们怎么应该这么设计一个好的 Module 呢?Angular 官方的 NgModule FAQs 中其实给出了 答案 。从中我们可以看出,CoreModule 这种只提供 Service 和 SharedModule 这种只提供 Components ,Directives 和 Pipes 的 Module 是目前来说官方认为最好的设计。

neoFelhz
Publish: 2017 十月 16日 5:59:00 凌晨
Update: 2017 十月 16日 3:29:00 凌晨
这是最好的时代 这是最坏的时代
自言语 

于是他只好保持着沉默,默默地与同样面无表情的她擦肩而过,继续向前走去。他的身影逐渐融入同样安静的灰色人群之中,整个城市都显得寂静极了。——《寂静之城》

——谨以此文献礼十九大。

Viosey
Publish: 2017 六月 1日 11:47:20 中午
Update: 2017 十月 13日 1:54:22 下午
从 Material 主题学习开源项目管理
技术向 开源 OpenSource 项目管理 

几分钟之前,1.4.0 版本 material 主题正式发布

Viosey
Publish: 2017 四月 24日 4:27:03 凌晨
Update: 2017 十月 13日 1:54:05 下午
使用 BrowserStack 测试前端兼容性
技术向 BrowserStack Front-end FTS 前端兼容性 

前端开发一直过不去的坎就是浏览器兼容性。

Viosey
Publish: 2017 四月 3日 4:10:11 下午
Update: 2017 十月 13日 1:53:50 下午
Story of Journey
分享境 PS4 风之旅人 Journey 多图杀猫 第九艺术 

多图预警

Chapter 1

两周之

Viosey
Publish: 2017 九月 26日 3:30:00 下午
Update: 2017 十月 13日 1:47:41 下午
全新 Material Theme 官网
创作集 React SCSS Material 

好久不见。

二十天前,新版的 Material Theme 官网有了第一行代码。

neoFelhz
Publish: 2017 十月 8日 7:35:00 早上
云主机和 VPS 的区别
实验室 VPS 云主机 服务器 

很多站长对于云主机、VPS、虚拟主机之间的区别都不知所以,很多解释这些概念的文章也经常出现各种错误,使得这些概念经常被混淆。所以我也写一篇阐述它们区别的文章。

Robert Yang
Publish: 2017 十月 7日 4:12:54 凌晨
Update: 2017 十月 7日 5:58:01 凌晨
开始使用 Service Workers
技术6 服务工作线程 Service Worker 缓存 

Service Workers

Robert Yang
Publish: 2017 十月 3日 8:28:33 早上
Update: 2017 十月 5日 2:58:57 下午
多合一二维码收款码
技术6 二维码支付 qrcode 

我之前看到了一个网站可以将支付宝和微信的收款码合在一起,研究了下,应该是通过UA来判断扫码的客户端,从而返回特定的链接或者代码。我用网上的工具将支付宝,微信,QQ钱包的二维码都解码之后,用PHP写一个判断来返回对应的值。不过很遗憾的是只有支付宝支持这种用外部返回链接的方式直

Publish: 2017 十月 4日 3:51:03 下午
ESP8266 断网神器 基础使用

我们都是熊孩纸~~~ x2

Publish: 2017 十月 3日 5:38:09 下午
ESP8266 断网神器 淘板子与刷入程序

我们都是熊孩纸~~~

Zohar
Publish: 2017 十月 3日 8:41:00 早上
Nginx启用HTTP Basic Auth
我们通常可以使用HTTP基本认证来保护我们网站的一些页面(如:探针),效果如图:当用户输入了错误的用户名或密码时,Nginx会返回401 Authorization Required禁止访问。生...
neoFelhz
Publish: 2017 十月 2日 6:07:00 早上
如何写好一个开源项目的 README
分享镜 GitHub README Coding Markdown 

README 是一个项目的门面。如果你想让更多人使用你的项目或者给你的贡献 PR、丢 star,你就应该写一个吸引人的 README。

Robert Yang
Publish: 2017 十月 2日 2:43:32 凌晨
Update: 2017 十月 2日 5:52:43 凌晨
使用新窗口打开是个坏习惯
技术6 target 新窗口打开 blank 

实际上有点标题党了,应该说成在任何时候在网页上都使用新窗口打开属性是一个坏习惯。很多站长都喜欢问怎么把自己网站的链接搞成新窗口打开的方式,实际上我觉得这是完全多此一举,甚至是一个坏习惯。
实际上会发现很多国外网站和国内网站的不同之处在于,国内网站的链接喜欢新窗口打开,

neoFelhz
Publish: 2016 十月 1日 8:55:00 早上
Update: 2017 十月 1日 2:03:00 下午
Android 切换 F2FS 文件系统
分享镜 Android TWRP F2FS 文件系统 
F2FS 如今也是折腾 Android 的玩家口中的一个常见词汇。本文主要介绍了 F2FS 是什么、F2FS 的优势和将手机切换到 F2FS 文件系统的方式。
Axton
Publish: 2017 十月 1日 6:25:44 早上
自动检查SSL证书到期情况
开发 推荐 Python SSL 检查 证书 
这是什么鬼? 自从我换了ECS,无垠旗下的各种项目也陆陆续续换成了HTTPS协议。然而,随着HTTPS使用越来越广泛,我手头的证书也越来越多。Let's的证书还好说嘛,可以搞自动续期,但各种CDN上的证书就难搞了...何况我在各大CDN服务商都有挂域名。我才懒得 ...
Robert Yang
Publish: 2017 九月 30日 5:17:05 凌晨
Update: 2017 九月 30日 3:45:37 下午
两个自己拍摄的延时摄影视频
不能无聊 延时摄影 318国道 芦山县 

分享两个自己学做延时视频的成果,第一个是在从稻城返程的时候在318国道旁边休息时拍摄的,不过我忘记了具体位置。第二个是在我家拍摄的芦山县新城的样子。做的不是太好,将就看看。


Publish: 2017 九月 29日 9:04:27 晚上
开箱测评 | 阿里月饼

前几天,收到了一份从 Kookxiang 寄来的阿里月饼! ありがとう
那么,来开箱吧!

Robert Yang
Publish: 2017 九月 22日 3:13:30 凌晨
Update: 2017 九月 23日 2:05:45 凌晨
几个提高WordPress速度的技巧
技术6 wordpress nginx php 

虽然有很多介绍WordPress缓存插件的,我也介绍过用Redis来缓存WordPress生成的页面,这也不失为一个较便捷的优化方法。但是很多时候我们会使用动态的元素,比如手机端和桌面端分发不同的图片,如果直接使用前端缓存插件会导致这些元素失去原有的效果。
Apach

Publish: 2017 九月 21日 5:08:00 凌晨
九年计划

简单说明

在北京市第五十四中学的秋季运动会上,武旭主任屡次担当女子实心球裁判。

类别