Recent Posts

glzjin's avatar

EventBridge + NodeMCU 组合–控制空调

一、前言

之前用 Wrtnode +  红外发射模块 弄了一个手机遥控空调的东西,另外一个房间里的空调也想这样改造。

但之前也说过了,Wrtnode 之类的东西是之前买了然后吃灰的东西,如果要新买的话也得一百多,价格上就毫无优势了。

那么在网上搜索之后,最终选定了 NodeMCU 来完成这个需求。

二、硬件

NodeMCU Devkit + 红外学习模块 + 几根杜邦线 + 一根 Micro USB 数据线 + 一个壳子 

NodeMCU  十三元左右

三、实现过程

1、将硬件组装好,这里的串口我用了 NodeMCU 的 UART1,用发那一端就足够了。

2、NodeMCU 连上电脑,装好驱动,然后给 NodeMCU  烧写固件,烧这个 https://github.com/glzjin/eventbridge-consumer-client-nodemcu/raw/master/nodemcu-master-12-modules-2018-08-17-13-58-15-integer.bin

3、编写 Lua  脚本,用烧录工具下到板子上。

4、将设备上电,打开浏览器,连接上发射出来的以 EventBridge 开头的热点,然后输入 192.168.4.1 输入连接信息将板子连接到家中的 Wifi。

5、盖上盒子,丢在能遥控到空调的角落里就行了。

6、然后就按照之前那篇东西里面写的操控步骤想咋玩就咋玩吧。

四、源码

https://github.com/glzjin/eventbridge-consumer-client-nodemcu

kookxiang's avatar

安装 homebridge

说实在的,哪个土豪会只在一台机器上跑一个应用…
多个应用共用一台机器不是很正常吗?

node.js 一升级,homebridge 就挂了 23333333

那么,有没有什么办法能延续 homebridge 的寿命呢?

首先我们把锅烧热,新建一个目录(~/homebridge)
然后再在里面运行 npm init 初始化

接下来就是神奇的时刻了,这时候输入 npm install [email protected]
然后你就会惊奇地发现 node_modules 下面有个 node…

这时候再通过 npm i -S homebridge 安装 homebridge 和其他组件
这样再系统无论怎么升级都不会挂啦~

然后再在 package.json 添加一段

  "scripts": {
    "start": "homebridge"
  },

最后通过 npm run start 就能正常使用啦~
最后当然是写个 systemd service 调用 npm 启动啦

附上手游玩家氪金的悲惨故事:
< 访问完整版以查看此播放器 > 视频:

glzjin's avatar

EventBridge 事件中继器 以及两个 Demo — 控制空调和易微联开关

一、背景

卧室里的空调是蛮久以前买的了,想要开关的话还得翻找遥控器,有时候在床上躺着了,觉得有点冷了又懒得去翻找遥控器了。又或者是准备到家的时候想用手机提前开下空调,这样回家就可以吹上空调了。

在网上找来找去,支持手机控制的红外遥控中心一般都得一两百,而且基本都不提供 API,得自己去扒接口。另外一台可以连 Wifi 的空调也是一样,只能在手机上打开阿里智能操作,很不方便。

自己之前买过和得到过很多板子,所以就想着废物利用,用上自己以前有的板子之类的东西来改造一下。

所以在本篇中造了个轮子来实现这些功能。

二、所需硬件

本着废物利用的原则,这些东西基本上都是之前玩的时候买的,新买的只有那个红外收发模块,网上十多块就可以买到了,我买的这个是可以录制四个遥控器按钮的,串口发命令过去就可以录制和重放了(其实买个支持自解码学习的更合适,可以学习更多按键)。

Wrtnode 1+ USB 转 UART + 闪迪 8G U 盘 + 红外收发模块

当然,因为这里我是用遥控空调来做的演示,所以还得有一个空调和她的遥控器。

三、相关概念和角色说明

事件:用于触发消费者执行相关事件,包含所要触发的事件 ID。

生产者:产生事件的客户端,一般为用户的设备如手机或者电脑等,如在 iOS 上可以使用 workflow 产生事件,在 Mac  上可以用 Alfred。

消费者:消费事件的客户端,一般为智能家居设备等,在本例中为上面的 Wrtnode。

中继服务器:用于对所传来的事件在生产者和消费者进行中继。

四、相关项目以及文件

服务器:https://github.com/glzjin/eventbridge-server

Spring Boot  的项目,有 Java 运行环境的话用 jar 包直接运行就可以部署使用了。用于中继事件。

消费者客户端:https://github.com/glzjin/eventbridge-client-for-consumer

在 Openwrt/LEDE 上跑的消费者客户端,在本例中接收事件发串口让红外模块发送指令给空调。

iOS Workflow:https://workflow.is/workflows/794a1014c3a84f8cab110f12cf54f6b5

在开头填好生产者Key和服务器的 URL 就可以直接用了。

Mac Alfred Workflow:153425604424d890e2fb9542799c4845d1ca8d16a7

需要先在这里把相关参数填上。

五、部署方法

1、先按照服务器的 Readme 部署好服务器,记录好生产者 Key 和消费者 Key。然后访问服务器地址,用工具里的 生成 UUID 生成一个消费者 UUID,也记录好,下面要用。

2、然后按照消费者客户端的部署方法在 Wrtnode  上部署好。同时访问服务器地址,在这里发送 event_id 为 5~8 的 事件,来让模块学习遥控器按键。

3、在需要的 设备上 部署 Workflow。

4、Enjoy it~

六、截图及演示视频

Mac:

演示视频:https://v.youku.com/v_show/id_XMzc3OTAwNTQwOA==.html

七、更新记录

2018年08月14日:升级到 v2,支持 设置消费者 UUID 了,可以指定投递给哪个消费者了。

2018年08月15日:修改轮询为 websocket,添加易微联的支持,具体看消费者客户端那儿。

lwl12's avatar

让小爱同学登上云村

前天 LWL 氪了一台垂涎很久了的小米小爱音箱 Mini,现在买还优惠十块只要 ¥159 快去买啊~(Mi Boy 打死),提回家后才发现这音箱居然没和云村合作???

个人喜欢的挺多歌都是同人角色曲一类的,好像除了云村和 5sing 也没什么别的地方能找到了。不支持云村显然忍不了,正巧之前酷安上有人拿了(我的?)一言 API 去接入小爱,让我记下来了这音箱还是有个开放平台的,然后我本来就有一个音乐搜索项目在跑着……(不去写个接入我都感觉亏

万事俱备只欠东风,说干就干!

接入开放平台

小爱开放平台,顾名思义也就是提供给开发者做高级技能的地方啦!(说起来小米这次感觉也是投了血本要扩大小爱的技能范围,这开放平台甚至能建免费云主机用……)

要在开放平台上创建应用的话需要上传手持身份证,给个差评,虽然最终还是传了(真香)。审核通过以后就可以开始建立应用了。

技能信息


除了技能名称和唤醒词,其他的项目如果不需要发布的话可以瞎填,没啥影响。不过这里不得不吐槽一下这糟糕的唤醒词功能,也不知道是不是我用法有误(文档反正是没写清楚),带意图的唤醒词实际用起来完全无效,于是整个语音请求一下子多了一轮对话,效率降低不少。

交互模型

交互模型这块的话,由于并没有什么公开的歌名/作者名数据库,所以词表可以忽略掉,主要是设置意图。

槽位

首先要添加意图,接着就可以开始添加槽位了。由于云村的搜索还挺智能的,所以只需要把用户提到涉及歌曲信息的文字全部选出来一股脑丢给搜索就行,省去了一部分麻烦。

虽然追问和回复似乎并没有什么用,但是在槽位必选的情况下一定要填……这个比较无所谓,开心就好(

语料

说白了就是猜用户会用什么语言来尝试调用这个应用,自用的话想想自己常说的就行

值得一提的是这个页面的底部有一个模糊匹配选项,虽然好像没什么用但是也没有负面影响,可以打开试试

配置信息

前面提到了小米这次免费给开云主机用,其实就是为这里的函数计算功能服务的。整体用下来应该是和 SAE 差不多一个性质的东西。

咱这次的代码也就跑在函数计算上面,所以按引导申请一下计算资源就行。注意在申请的最后一步会要求选择触发器,需要建立一个 SkillTrigger,并在创建完成后拿到他的 ID 填回开放平台。

函数代码放在后文了(

设备调测

全部配置好以后就可以在这里进行测试了,虽然这个测试真的很难用,出错了连个实际错误信息都没有……

函数代码

不废话直接放了:Github,记得给个 Star(
实质上就是一个类似中间件的东西吧,连接小爱的语音识别和我的 Music API (这 API 一直是半公开状态因此并没有文档_(:з」∠)_

填到函数计算后台的函数代码里就好~

使用条款

对于开发者

  • 禁止不合理利用源码内的 Music API,例如作为违法用途,高频率调用等
  • 禁止商业使用

对于音箱用户

虽然感觉应该过不了审但是如果过了的话……

  • 居然过审了,爱怎么用怎么用吧(
  • 我也不知道这些音乐是哪来的啊,完全不懂,好像都是随随便便就读到了,云村好像听着挺耳熟的不过我也不知道是哪家公司呢,总之能用就好吧(

其实呢,本来是不打算写这篇文章的……毕竟感觉这种作大死的东西拿出来摆着不知道什么时候就收到律师函了呢(疯狂毒奶
不过确实想填一下后台的使用条款和隐私政策所以还是写了(是的你现在看到的这条和后面那条才是本文最关键的地方了)

隐私策略

如果小爱的逻辑比较糟糕的话有可能会被 NGINX 记录到设备 IP,其他的信息则完全不会被记录。

最后

感觉大概应该是过不了审,所以发出来也还行吧……如果你碰巧有同样需求的话可以尝试自己搭建一个,然后让小爱音箱进入开发者模式就能自用了。
Enjoy music 🙂

- EOF -

glzjin's avatar

高仿小米商城源码

一、项目背景

这半个月在中公教育实训,进一步学习了 Spring  + Spring MVC + Mybatis,然后就要做一个项目作为结业项目,所以就有了这个项目。

二、项目简介

使用 SSM 框架开发的高仿小米商城项目,接入星空辽阔账户系统实现了支付功能。

三、运行截图

主界面:

主界面截图

主界面截图2

登录界面

注册界面

商品页面

购物车页面

订单结算页面

四、源码地址

https://github.com/glzjin/XiaoMiShop

五、部署方法

0、将数据库的 sql 导入数据库。

1、修改 config 下的配置文件,主要是 db,mail,和 pay。

2、将项目打个 war 包扔服务器上。

3、访问看看吧。

六、特别说明

此项目仅供学习使用,如有侵权等问题请联系我进行删除。

glzjin's avatar

联大小助源代码

一、什么是联大小助?

联大小助是一个运行在微信公众平台上的机器人,以微信订阅号为接口对外提供校园卡,教务系统,图书馆系统查询等相关功能。

 

二、运行环境

先来说一下运行环境。

  • Mysql
  • Redis
  • tesseract 相关文件,用于识别验证码
  • Python3

然后来说说校园内相关系统的概况。

  • VPN 相关,是深信服的 Easyconnect,这个我拿台 Windows  的机器来开 Socks 代理做跳板,这样就可以跳回学校内网了。
  • 以下业务均需要内网访问。
    • 统一门户,似乎是某个开源的 CASLOGIN
    • 校园卡,哈尔滨新中新的系统。
    • 教务系统,正方。
    • 图书馆,北创软件。
  • 地址均写死- -可以自己改- –

然后需要运行的话,还需要 buu_config.py.example 里提到的相关服务也要申请。

三、源代码地址

https://github.com/glzjin/BUUBot

四、部署方法

1、先准备好上面的环境。

2、pip install -i requirements.txt

3、把 buu_config.py.example 改名为 buu_config.py ,把里面的东西配置好。

4、 开个 screen,然后 python3 buu.py 运行吧。

五、演示号

 

glzjin's avatar

第一个Spring MVC 项目–电商网站系统

经过两个星期的实训,我们小组完成了这个电商网站系统,现在将源码和部署方法记录以此,以供参考。

一、源码地址

https://github.com/glzjin/ETradeSystem

忽略源码里的密码- -反正也登不进去- –

SQL文件:1531889717013add8870454c9858dabc33a4e4231c

二、运行环境

1、Nginx

2、Mysql

3、Tomcat

4、Redis(可选)

三、部署步骤

1、确保上面的环境都已经安装好。

2、在 IDEA 里 build 成 war 给 tomcat 部署。

3、设置环境变量,然后重启 Tomcat。

4、在数据库里导入那个 SQL。

5、访问看看吧。

四、演示地址

地址:https://etrade2.zhaoj.in

管理员用户名:admin 密码:123456

卖家用户名:seller 密码:123456

买家用户名:buyer 密码:123456

 

 

没做到最完美,Spring里那么多优秀的组件没完全用上用好。同时可能还有些小问题,理解万岁吧。

glzjin's avatar

#Spring MVC初体验# 六、都是一个套路–来做一个用户管理页面吧

前面我们做了挺多东西了,接下来要做的就是实际业务部分了。 其实管理之类的业务,都是一个套路,能增,能用表格展示出来,然后能删和改就行。 那么.. 阅读更多
glzjin's avatar

#Spring MVC初体验# 五、何去何从–给每个用户角色创建一组页面

在我们预计的系统中,登录后不仅仅是一种角色,可能这个用户是普通用户,其他的某个用户又是管理员了。 那么在接下来,我们就要创建一组页面,来实现.. 阅读更多
glzjin's avatar

#Spring MVC初体验# 四、和数据库更进一步–做一个注册页面

之前做完了登录,那么就该做一个注册页面,让别人来注册了。 1、首先创建一个表单页和一个结果页。 /web/WEB-INF/views/reg.. 阅读更多
glzjin's avatar

#Spring MVC初体验# 三、记住我吧–用 HttpSession 来储存当前用户的登录状态

前面我们做了登录界面,并且也实现了登录功能。 但我们要是再访问一下页面的话,那么我们还是会被要求登录。 在实际的系统里是会想办法来记住你的登.. 阅读更多
glzjin's avatar

#Spring MVC初体验# 二、与数据库交互–让你的登录界面查查数据库吧

上一篇文章里创建了一个登录页面,但里面的用户名和密码都是写死的。 那么我们想让登录页面进数据库查查用户名,密码的话,该怎么做呢? 此处接着上.. 阅读更多
glzjin's avatar

#Spring MVC初体验# 一、创建你的第一个项目–登录页面

为了实训,特别来写下这篇东西,供各位学习。 1.环境准备 IDEA 和 JDK Tomcat MacOS  下参考这一篇东西 https:/.. 阅读更多
lwl12's avatar

明日之心,高考加油~

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

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

glzjin's avatar

记第九届蓝桥杯

文笔不好,写个吐槽玩玩。

今天中午,蓝桥杯国赛的结果出来了,本人的结果不算好也不算坏吧,二等奖。现在也算写点东西,要是能混个奖得点东西啥的那就更开心了(逃レ(゚∀゚;)ヘ=3=3=3

赛前

从去年十一月开始,学校里就开始张罗着报蓝桥杯了,那时候看着能报名了就马上报了。今年是第二年刷蓝桥杯,当然今年没有像去年那样报了 A 组后来又认怂改成 B 组了,直接不折腾就报了 B 组划水。当然要是明年还参加蓝桥杯的话,还是想逼着自己参加 A 组折腾折腾。

然后就是开始准备比赛,说实话并没有怎么准备。在十二月份准备比赛的时候,拉上同一个系里的小伙伴们整了一个群,每周刷刷题,当然一开始还是很不错的,都有参加,后来人就越来越少,到了期末考试那一周就鸽了,也是挺可惜的。当然要是他们和我要是能坚持下来的话可能最终的结果就有所不同了。

然后就到了寒假,寒假的话,其实都懂的,一回家基本上就天天在床上躺着了,真的一点学习的欲望都没有了。每天都只想着什么都不想,躺在床上天天盯着天花板就是最大的满足了。当然因为自己还有活还要干,姑且算是每天都还在写代码,不过没碰过蓝桥杯相关的内容就是了。

丧了一个寒假,就到开学了,开学来就基本上天天都是上专业课了,蓝桥杯的题,也就是在小伙伴提起的时候才想起去看看练习系统的题目。加上自己寒假里完成了一个算是大型一点的项目,心里有些小膨胀,所以就没怎么看了。

省赛前一个星期,记得那时候是和小伙伴去内蒙古旅游,在公交车老师提醒要打印准考证的时候,才感觉到蓝桥杯真的迫在眉睫了。回了北京之后,就想着得赶紧看看题了,结果一上课,课一多又被挤了。

赛中

然后就到了省赛那一天了,其实那一天还是双学位的补考,不过考虑到自己反正双学位也是一点没看,倒不如去参加内容跟自己的主专业更接近的蓝桥杯。

参加比赛的时候,也证明了自己的选择没有错。或许是因为有去年的经验的铺垫吧,今年的初赛题做起来比去年的题做起来顺很多。

初赛的结果还不错,省一,也进了国赛。

不过就算进了国赛,其实也还是像上面那样的循环,想刷题 -> 事儿太多 -> 鸽了 -> 又想刷题 。

然后就到了国赛的日子了,其实对于国赛也没有多兴奋(组委会看了别打我哈),因为赛点就在自己学校,所以在微博和知乎上的小伙伴们特别兴奋地出省来北京的时候就特别羡慕,可以顺带着旅游一波。还心想着蓝桥杯哪时候要是总决赛要能在外地搞就好了,这样我们也可以顺带旅游一波了。

不过决赛的这一周也挺惨,上个周末把肚子给吃坏了,所以就担心自己在比赛的时候状态不好。而且上个星期把身份证给弄丢了,补办的话异地得两个月才能拿到,问过组委会可以让学校开个证明,后来心想就不麻烦学校了,让家里把自己旧的身份证给季来了。(好孩子别学,考试还是得拿上有效证件的)

周六早上,准备完毕,就直接往比赛的机房杀去了,人还挺多的,别人都是带着小伙伴来的,就自己是一个人来的,反倒还有点怪。

然后就是入场了,还好自己这两年又瘦回来了,和旧身份证上照片的差别不大了,顺利入场。

入场坐定之后,把 eclipse 打开,写了个测试环境,测试没问题就等着开考。考前发了支圆珠笔,上面印着蓝桥杯的标志,算是个纪念。

开考之后,发现题目做起来还是挺顺的,前五道题前两小时都解决了,就最后一道题稍微蛋疼些,忘了回溯怎么写了(是用回溯吗。。。。),只能硬干了,后来干了大概 70 %,发现没时间了,就直接佛系,等着结束交卷了。

在考试的时候组委会还给发了一个面包,一瓶水和一瓶牛奶,怎么说呢,感觉像是短途夜班机上的小时吧,希望下次能发点更好吃的东西。边打代码边吃着东西还是蛮惬意蛮爽的。(吃货路过)

最后考完了还有一份小纪念品,一个 袋子,里面有蓝桥的宣传资料,还有一个32G的手机 U 盘,不过不是 Type-C 或者 Lighting 接口的,有点可惜自己用不了了。

所以就这样考完了,自己的状态还不错吧,身体没出问题。接下来就等着第二天出结果了。

赛后

有点可惜的是这届蓝桥杯没搞颁奖典礼了,少了一点乐趣,所以就第二天直接看结果了,国二,也算是对自己裸考的一个交代吧。

复盘起来,还是自己的决心不够足,以后要遇着类似的比赛的话,还是得好好准备,争取多拿些名次吧。自己不要太膨胀了,虽然在外面有活干,该准备的比赛也还是得好好准备的,忙不是理由。

最后,套话,希望蓝桥杯能越办越好,也希望自己能勿忘初心,继续前行吧,加油。

glzjin's avatar

星空辽阔账号系统捐赠部分回调说明

更新日期:2018年08月31日

一、前言

捐赠系统具有回调功能,在捐赠订单被支付之后可以有回调以便于进行后续操作。

分为两种回调,异步和同步。

两种回调地址均能在系统里设置。

同步跳转的链接如下:

http://pay.test.zhaoj.in/redirect.php?amount=1&app_donation_id=849&app_info_id=29&created_at=2018-08-31+00%3A54%3A33&final_money=0.01&id=9685&is_paid=1&money=0.01&pay_method=alipay&pay_method_trade_no=2018083121001004950513231964&price=0.01&rate=0.6&updated_at=2018-08-31+00%3A54%3A43&user_id=0&sign=56baa50601ca25ea59b10b9a311a9697

异步 POST 地址收到的信息如下:

{“id”:9684,”app_info_id”:29,”amount”:1,”price”:0.01,”money”:0.01,”is_paid”:1,”created_at”:”2018-08-31 00:44:27″,”updated_at”:”2018-08-31 00:44:44″,”deleted_at”:null,”user_id”:0,”pay_method”:”alipay”,”pay_method_trade_no”:”2018083121001004950512962373″,”rate”:0.6,”final_money”:0.01,”app_donation_id”:848,”sign”:”56c66c3a6b719c4700c1320475788dc8″}

二、数据说明

  1. amount:  订单项目数,此处一直为1
  2. app_donation_id: 捐赠子系统 ID
  3. app_id:App ID
  4. created_at:订单创建时间
  5. deleted_at:一直为空,无需在意
  6. final_money:最终支付金额
  7. id:订单 ID
  8. is_paid:是否已支付,既然回调就一直为1
  9. money:应付总金额
  10. pay_method:支付方式,和创建时指定的方式对应
  11. pay_method_trade_no:支付方式的订单号
  12. price:单项目金额,既然上面项目数是1那么这里就应该和总金额一样了
  13. rate:支付方式费率,一般为相应渠道的总费率
  14. updated_at:支付完成时间
  15. user_id:用户 ID,一般一直为0
  16. sign:签名

三、注意点

0.sign 计算规则

sign 主要由 order 的相信信息拼接之后与 sign 拼接再 MD5 得到。

例如,订单信息为

amount=1

app_donation_id=76

app_id=10

created_at=2018-04-13%2B10%253A54%253A07

deleted_at=

final_money=0.01

id=3698

is_paid=1

money=0.01

pay_method=alipay

pay_method_trade_no=2018041321001004950520649352

price=0.01

rate=0.6

updated_at=2018-04-13%2B10%253A54%253A25

user_id=0

按照属性键字母升序排列后,确认其属性值都已经被 urlencode,然后拼接成如下字符串

amount=1&app_donation_id=76&app_id=10&created_at=2018-04-13%2B10%253A54%253A07&deleted_at=&final_money=0.01&id=3698&is_paid=1&money=0.01&pay_method=alipay&pay_method_trade_no=2018041321001004950520649352&price=0.01&rate=0.6&updated_at=2018-04-13%2B10%253A54%253A25&user_id=0

最后将这个字符串最后拼接上 App 的 签名 Key sign_key,得到 sign。请自行比对外部传来的 sign,用以保证请求没有被 伪造和篡改。

四、回调处理示例(PHP)

https://github.com/glzjin/extstars_donate_callback_example

glzjin's avatar

简单几步创建一个属于你的捐赠页面

0.到 https://accounts.extstars.com  申请一个应用。 1.打开 WordPress ,创建一个页面 2.文本.. 阅读更多
neoFelhz's avatar

Web Font 123 - 再谈 WebFont 优化

字体是实现良好的设计、品牌推广、可读性和无障碍功能的基础,也是实现用户体验和性能的关键所在。本文主要介绍了浏览器在应对字体加载时的方式、FOIT、FOUT,针对性的介绍了一些常见的 WebFont 优化方案,并总结了使用 WebFont 的最佳实践。同时本文还列举了几种常见的适合生产环境使用的 font-family 的写法。
neoFelhz's avatar

Web 性能优化(4)——localstorage 存储静态文件的意义

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

neoFelhz's avatar

中国的互联网

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

glzjin's avatar

QQ坦白说查看谁给你发的 消息

1.手机抓包, Fiddler  即可,把 https 解析开着。 2.看 ti.qq.com 的请求。 3.fromEncodeUin 解.. 阅读更多
neoFelhz's avatar

常用免费前端公共库 CDN 服务收集

前端公共库 CDN 服务是指一些服务商将我们常用的前端开发用到的库存放到网上,方便开发者直接调用,并且提供 CDN 加速。与将前端库存放在自己的服务器上相比,公共库的 CDN 更加稳定、高速,一来可以方便开发者的开发,二来可以让用户加速访问这些资源。
neoFelhz's avatar

收集常见的公共图床

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

kookxiang's avatar

在 Ryzen 平台上安装 macOS High Sierra

首先简单扔下目前电脑配置吧: CPU:AMD Ryzen 5 1600X Processor 主板:ASUS PRIME B350M-A 内存:G.SKILL Ripjaws V ...
's avatar

重做计算机系统小记录⁽⁽٩(๑˃̶͈̀ ᗨ ˂̶͈́)۶⁾⁾

占地。

's avatar

关于最近重做计算机系统的一些感悟

最近重新制作了自己笔记本上的系统,为了在下次的计算机安装中对自己有所帮助,现将重做系统的过程记录如下。

一、计算机前置操作

本次安装的基准系统是由惠普公司出品的EliteBook系列8570W(15inch移动工作站)。作为一台工作站可以说拥有了非常充分的升级空间。内部配置如下

  • 处理器:Intel® Core™ i7-3720QM CPU @ 2.60GHz
  • 显卡:NVIDIA Corporation GK107GLM [Quadro K1000M] (rev a1)
  • 内存:4x4GB
  • 硬盘:120G SSDx2 320G HDDx1(准备升级1000G HDD)
  • 屏幕:惠普DC2 16亿色 1080P 15.6英寸

I.硬盘

由上边列表可以看出,这台工作站配备了三块硬盘,所以在系统上,我们选择用一块SSD作为视窗操作系统的硬盘,另一颗硬盘则选择elementary OS 0.4.1 Loki操作系统。剩下的HDD作为仓库盘按照视窗操作系统进行配置。

分区情况如下

  • SSD1
    • 视窗操作系统 C:/ 120GB
  • SSD2
    • elementary OS 0.4.1 Loki / 20GB
    • elementary OS 0.4.1 Loki /boot 200MB
    • elementary OS 0.4.1 Loki /tmp 5GB
    • elementary OS 0.4.1 Loki SWAP 2GB
    • 剩余空间分配给 /home 目录
  • HDD1
    • 视窗操作系统 D:/ 100GB
    • 视窗操作系统 E:/ 100GB
    • 视窗操作系统 F:/ 120GB

在使用方面,两个系统中elementary OS 0.4.1 Loki用于日常的笔记,娱乐等用途,而视窗操作系统用于工作,学习等用途。所以留给了视窗系统更大的使用空间。

II.软件下载

本次下载了以下软件

  • 视窗操作系统
    • ADOBE公司 PS
    • ADOBE公司 PR
    • ADOBE公司 AE
    • ADOBE公司 AU
    • UISO
    • EasyBCD
    • Eclipse Neon
    • JDK
    • CodeBlocks+gcc
    • Apple iTunes
    • MicroSoft OFFICE
    • QQ
    • NetEase Music
  • elementary OS 0.4.1 Loki

    • NetEase Music

      dpkg -i netease-cloud-music_1.0.0_i386_ubuntu14.04.deb

    • Chrome

      http://www.ubuntuchrome.com/
      wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
      sudo apt-get update
      sudo apt-get install google-chrome-stable

    • Docky

      sudo apt-get install docky

    • ShadowSock QT5

      sudo add-apt-repository ppa:hzwhuang/ss-qt5
      sudo apt-get update
      sudo apt-get install shadowsocks-qt5

    • Fcitx

      直接配置

    • GIMP

      直接配置

    • Steam

      直接配置

    • Gedit

      直接配置

二、安装后

I.视窗操作系统

他一定是疯了。你需要费很大的力气删除那些默认软件。呕

II.elementary OS 0.4.1 Loki

1.使用docky代替原有的plank

这一步中需要用到config程序来对docky进行修改,同时,config可以让wingpanel显示新的小图标

2.从gonmelook下载主题。

我使用了以下主题

  • macOS iCons
  • Capitaine Cursors
  • OSX-Arc-Collection
  • Arc-OSX-Icons
  • 一些简单的修改,让系统很美貌。

3.修改GRUB2的配置。

  • 修改 os-release 可以让显示中的内容发生变化。
  • 主题中的 computer.png 可以让配置中的内容发生变化
  • 修改 locale/zh_CN/about-plug.mo 可以让显示内容发生变化
  • logo 修改 distributor-logo.png。
  • 后台的ss比较好。

三、一些点

  • 我使用视窗的METRO引导LINUX
  • 视窗的PS比GIMP好用,谁来撕逼谁就是大傻逼。
  • 我就是看脸,爱谁谁。
  • 老子的博客想删谁评论就删谁评论。

注:在现在的使用中,本文提到的计算机已经被替换,系统更改为Solus 3.。(也没准是深度,Liri,pop或者Maui)

本文章最初写作时间 2017/8/4 20:37:00

kookxiang's avatar

国家队 ED1 发售了吗

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

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

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

's avatar

2017这一年,我在Axdeies州的25天

在2018年开始的时候,我决定将我过去一年的旅行记录下来。在2017年,我曾经到一个叫做Axdeies州的地方进行了一次为期25天的旅行。这次旅行,我第一次穿过了世界的界限,暂时切割了我与世界之间的联系,并成功地将自己的痕迹留在了那片大陆上。

在这次旅行中,我看到了很多喜欢的地方,却也留下了很多的遗憾。时间终归是太短了,无法将这些事情一一的探索下去。不过却也很有收获,终归是发现了更多的可能性。

这次旅行最重要的意义,不在于这篇游记,也不在于那些谈资。最重要的,就是终于尝试了一些自己想尝试的东西。

行程规划

D1:Axdeies州首府Xesias市

到达Axdeies州的第一天——天公不作美

我们从鹅??荼经过传送门到达Axdeies州的时候已经是当地时间的夜间八点了注1 ,拖着传送眩晕导致的微妙幻觉走出了集中传送地,第一件事就是注意到当地特有的粉色雾气——据迎接我们的当地向导Gzzz说,这种雾气在当地一年也只出现两个季度,十分罕见。当地人一般会选择在这些季度进行历史性的活动。

由于传送的价格不是一般的贵,所以在出行之前我只准备了一套在地球很实用的外套。在当地,这种服装并不能应对粉色雾气中所包含的盐分腐蚀,所以我和向导就随便的找到了一家传送公司附近的服装店购物。当地的服装不是一般的贵,一套普通的服装和过滤器就要大约1.2克铼的价格。受到惊吓的我又找到第二家商店,最终用3克黄金作为交换条件获得了一套不错的服装和防化服。后来询问向导才知道,当地的服装出于安全目的一般都会混入贵金属或者其他物质,所以也算物有所值。不过即使如此,我也等待了约五个地球时才获得了做好的衣服。不过店里店员态度很温和,也有周到的服务。可能大家都知道要等很久吧。

获得服装后我们在商店门口找到了一个k帜@仐雇佣点,k帜@仐是当地特有的一种交通方式,因为在交通中骑行的大型生物名叫k帜@仐而得名。这种生物非常类似于地球上的陆行鸟,但是更加舒适而且可以遮蔽一定的粉色雾气腐蚀。

到达居住点后他的外观十分令我惊讶,那是一栋大约20m高的银色金属大楼,在大楼周围配备了循环过滤的流水装置避免雾气腐蚀。服务人员并不会说汉语或者英语,不过在向导的帮助下只花费了3克黄金就办理好了五天的入住手续。这里的情况我会再写一篇文章来详细描述。

前往住宿地点的路上向导和我说,虽然这栋大楼从外表上看并不具备大量的居住空间,不过得益于其中的特殊的物理结构,这栋大楼其实可以容纳约200间普通居所。并且大楼内部十分安全,具备两层的抗腐蚀条件。

住宿的地理条件十分优越,在房间里使用自带的管理装置可以查看到附近的美景的远处的山峦。不过粉色雾气很明显遮挡了一些视线。附近的Yaenw神庙基本步行就可以到达,这也是一个方便的点。

收拾完毕后向导说要明天才能外出游览,因为粉红色雾气的腐蚀性在夜晚会明显的加强。不过宾馆提供了免费的晚餐和甜点。晚餐是使用一种当地特有的香料烹调的x.駺xUWj肉排。虽然味道很鲜嫩但是脂肪含量很高。甜点则是使用x.駺xUWj的奶制作的香脆点心,吃起来很有一种薯片的感觉。据说,这是因为我到达时间太短所以餐饮部特意赶制的,如果在白天会有更多的小吃,种类非常多,味道很赞!

注1:当地时间和地球不同,每天大约有74.65个地球时,我到达的时间是当地的60.9时。

's avatar

网站维护20180228A

这是本站迁移后第一次维护。

本次维护实现了以下内容

  1. 迁移了服务器供应商和位置。
  2. 因服务器配置较低,将原有的 Typecho 替换为 Hexo。
  3. 更换了原有的主题。
  4. 对于攻击的人还有原来测试密码的那个人我想说[和谐],而且你的字典老的一匹。
  5. 去掉了原有的引导页。
  6. 优化了用户体验。

祝您使用愉快!

最后,感谢 「ベルチェロ孤児院」 对本站提供的赞助支持。

's avatar

建立之初的一点初心

关于网站的一点介绍

服务器情况

目前本网站使用 locvps RamNode 提供的服务,机房处于西雅图。
速度方面,本人访问速度大约在 300ms 左右。如果有某区域访问速度出现异常欢迎反馈。
服务器暂时不具备防御能力,很尴尬。

网站情况

除特别说明的内容以外,其余内容都遵循

任何本网站用户都视为已经同意本协议。
内部的文章主要看心情来写,所以具体内容我也不知道会有啥。
另外,暂时不打算通过挂广告来做收入一类的,我会尽可能为每一个阅读者的体验着想。

未来发展

发展的话还没想过。

关于站长

本部分可以查询网站顶栏部分的关于页面。

感谢

本网站博客部分使用 typecho HEXO 驱动(对,不是 wordpress ,显示WP只是作者的恶趣味罢了233333)。
使用主题请参考 footer 处内容。制作中引用 幻杀博客必应每日图片获取lwl的自由天空一言 两个API ,并使用了 aneasystone 的二维码插件,在此表示感谢!

最后,祝您在本网站愉快!

neoFelhz's avatar

关于新的 Hexo 主题「Spectre」

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

Yet the begin of a new story.

缘起

我最早接触博客时使用的是 Typecho,因为我看中了这款 PHP 驱动的博客程序的简洁。当时在选主题时就看到了 Vioseytypecho-theme-material,当时着实被惊艳到了。那时候我高一,从用户到开始提 issue,然后自己一点点学习,开始为主题贡献了一些代码。后来 viosey 弃坑以后开始写 hexo-theme-material,我也迁移到了 Hexo,然后很自豪地成为了 hexo-theme-material 的 Contributor。

Material 主题一开始的起源只有一个 Material Design Lite Blog Demo,最后经过几番周折和魔改,从几个 HTML 到 typecho-theme-material 到 hexo-theme-material。

但是随着我开始为 hexo-theme-material 贡献代码,我发现,hexo-theme-material 主题太过于笨重:css 即使压缩和优化过仍然加起来有 146k,js 更是达到了 181k(Spectre 主题的 css 和 js 加起来是 180k,包括 inline 了的 Material Icons);hexo-theme-material 的很多后期添加的功能都是侵入性的改造。加上我不满意 Material 主题的部分 UI 布局,于是我决定重写一个主题。

碰巧最近完成的几个坑中,有一个我使用了 Hexo。这个坑让我熟悉了如何从头写一个 Hexo 主题。

选型

之前我热衷于使用 MDUI 框架,因为 MDUI 框架轻便易上手。然而碰巧 Indexyz 把我拉进了另外一个坑里,那个坑使用的 CSS Framework 是 Spectre.CSS。当我看见了 Spectre CSS 的简洁和轻量,我一下子被这个框架吸引住了。这个框架不仅轻量,还使用了不少 CSS Hack 代替了 JS(比如可收放的侧边栏、弹窗和 dropdown 菜单都不依赖 JS),于是我决定就使用这个框架。
由于 hexo-theme-material 使用的 EJS,我之前的几个关于 Hexo 的项目也是使用的 EJS,所以我决定 Spectre 主题也是使用的 EJS。

UI

UI 方面,我参考了很多博客主题的设计,但是最后首页的 UI 我依然几乎是复刻了一个 Material 主题(但是有做了不少的微调);侧边栏则是修改为模仿 Google Plus 的设计,仅在较小屏幕上收起,在桌面端展开。

文章页面的 Markdown 样式全盘照抄 Material 主题的,不过引来了相同的 PrismJS 代码高亮的 Bug。我的解决方案就是使用自己 patch 过的 prism.css
友链和标签云页面基本也是直接照搬的 Material,只做了一点微调;映像页面则是基本完全照抄的。。以后有空了上 Codepen 上找个新的图库的模板重写一个吧;归档页面则是学了 NexT 主题做了一个时间轴样式。

最后

这玩意还处于 canary 阶段没有 Release;很多东西的实现方法很 dirty,写死了不少东西,很多功能(比如 TOC)都没有动,所以大家还是别想着换这个主题就行了(反正又不好看),以后有机会得从头再写一遍。


本文作者:neoFelhz
本文链接:https://blog.nfz.moe/archives/hexo-theme-spectre-story-begin.html
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可,阅读 相关说明

neoFelhz's avatar

小米降噪耳机(3.5mm)评测

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


这次买降噪耳机时我特地做了比较,初步选择了 Nubia、华为和小米。Nubia 和华为的海报中对于续航只说实验室条件下 6 小时,但小米的海报说的是实验室条件下 12 小时(就算实验室条件下,小米敢比华为和 Nubia 的续航多标一倍嘛),加上 mokeyjay dalao 的 华为主动降噪耳机 2 的简评,我就更加坚定地剁手了小米的 3.5mm 版主动降噪耳机(然而我不是米粉!)。

包装盒里的配件包括:

  • 耳机本身
  • 3 对硅胶套

是的,配件缩水了。

忘了拍开箱了。。。我就放一下这张图吧,右边是一加银耳,左边是 Nubia 律音 Pro(Nubia 圈铁和 Nubia 红魔被我收起来了);而中间的就是今天的主角——小米 3.5mm 版主动降噪耳机。

不同

小米 3.5mm 版主动降噪耳机依然是上部使用塑胶线,下部使用编织线。耳机从高光抛光修改成了暗黑,显得没有 Type-C 版那么高调。由于使用电池盒供电,中央控制盒变得较重和大,小米和其他厂商一样都带了背夹。除此以外,小米的这款 3.5mm 版主动降噪耳机的改动还有:多增加了一个动铁,双动铁 + 动圈组合,耳机明显要略大一圈;降噪设置了三挡(关闭、基本降噪、深度降噪),可以根据环境选择档位以达到省电的目的。

参数

参数描述
声学架构双动圈 + 动铁
连接线长1.35m
接口类型3.5mm 音频接口
频响范围20 - 40000Hz
频响范围55mAh
主动降噪模拟前馈

体验

使用体验

和 Type-C 版不同,由于 3.5mm 线控的兼容性较好,音量加减、切歌和播放暂停等所有功能都可以正常使用。

降噪效果

和 Type-C 版接近,开启线控上的开关之后说话声和其它比较尖锐的声音的降噪效果仍然不明显,但是其它常见噪声削除效果并不坏。
个人认为,小米 3.5mm 版降噪耳机的降噪能力和 Type-C 版相比并没有明显提高。

测试曲目

光说感觉无益,还是老规矩,上几个测试曲目。

人声测试

笨鸟先飞(天朝从众效应)

可以明显听出,小米耳机在这首歌的表现接近 Nubia 律音 Pro,在人声的表现很不赖;一加银耳的声音更加浑厚,后劲明显足。

冷光

在《冷光》当中一加银耳和小米降噪耳机对人声的表现力都很不错,小米在副歌中的高音有明显改善;但是 Nubia 律音 Pro 在间奏的解析度更好。

Freya

在《Freya》上,Nubia 律音 Pro 和一加银耳的还原效果都很清晰,但一加银耳相对厚重一些,Nubia 律音 Pro 相对圆润一些。而小米降噪耳机的相比之下音量明显小一些、因而显得有一丝压抑。

纯音乐测试

冬季

小米降噪耳机对节拍和鼓点的效果依然不如一加银耳,而且显得偏清亮,但是不再飘。Nubia 律音 Pro 的表现并不出彩,但是也在应有的水平,而一加银耳的解析度和音色都表现得很好。

Storm

这首曲目以节奏和鼓点为主,小米降噪耳机的推力不足在这首曲目里暴露的更加明显,明显鼓点轻多了。而一加银耳和 Nubia 的律音 Pro 表现都不错,还原度和解析度都不错。

葬花(Original Mix)

Nubia 律音 Pro 在这首曲目上表现依然不赖,但是对于这首曲目而言音色偏厚重了;而一加银耳把握得就好多了,和之前的曲目有明显的对比,应该是有做了适应性设计。小米降噪耳机的解析力是足够的,音色相对偏轻和清亮又不显得刺耳。

总结

小米 3.5mm 版降噪耳机相对 Type-C 版,无论是解析度和音色上都有改观,声音变得相对圆润不再粗糙,高音失真有明显改善但依然会有些削音,应该是得益于 双动铁 + 动圈 的声学架构。低音表现虽然推力提升而有所改观,但依然可圈可点。音质上,小米降噪耳机依然不如一加银耳,在听觉感受上依然不如 Nubia 圈铁、Nubia 律音 Pro 有优势,但是差距明显缩小了。

个人觉得小米 3.5mm 版降噪耳机,声音表现相对改观,价格还是不变,做工没有缩水。如果需要一款在通勤中降低噪音的耳机,小米 3.5mm 版降噪耳机依然是个可以接受的选择。如果对音质要求不高又需要关心续航和耳机重量,那么也可以选择 Type-C 版。结尾还是那句话,如果你对音质有更高的要求、或者不满意小米降噪耳机的音色,那么你完全可以去选择其它耳机。

以上评测完全基于个人,不保证完全公正、客观。玄学的东西,都应该大喊「索尼大法好!八千以下听个响!」


本文作者:neoFelhz
本文链接:https://blog.nfz.moe/archives/xiaomi-anc-earphone-3-5.html
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可,阅读 相关说明

neoFelhz's avatar

测评:海淀、西城区高三期末语文试卷对比

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

neoFelhz's avatar

Goodbye 2017

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


我的博客自成立以来已经一年有余了。所以先从我的博客开始写起吧。。
还记得一年多前,使用 Hostinger 免费虚拟主机,使用 Typecho 搭建我的博客开始,到现在几次辗转迁移、更换程序。在这个过程中,我认识了许多的小伙伴,了解了许多原来不知道的知识,并且主动去学习了更多有关的知识。在这过去一年中我写了 39 篇博客,得到了 398 条评论,交换了 35 条友链。
我是从今年 7 月 2 日开始启用 Google Analytics 的。之前一年使用 Piwik 统计的数据可以在 博客统计报告(2016.11.26-2017.07.02) 这篇文章看到。
不过还是直接放访问统计数据吧。过去的半年中,累计有 16027 人到访了我的博客,页面访问量为 53666 次(虽然是半年的数据,但是这个数据看起来还是有点可怜啊)
不过还偶然发现自己的域名 nfz.moe 今年七月时被 Alexa 收录了,现在 Alexa 指数已经是 60W 了。


今年认识了不少 dalao 和菊苣(基本都是在 Telegram 上认识的),嗯让我数一数(以下排名不分先后)

LWL12、Ephen、kn007、milkice、DIYgod、ZeroClover、芸枫、KookXiang、NeverBehave、Anankke、Kugelblitz、mokeyjay、静静、jq(x10)、Elepover、Indexyz、DCC、kotomei、TYPCN、METO、Zohar、呆瓜瓜~、iijboom、stneng,以及 91Yun 大佬群、某治疗中心 的各路大佬们 (

不管怎么说,认识一堆 dalao 是很有用的 (


今年过得还算挺充实的,数数过来的话大概可以这么概括一下:

  • 离开了酷安
  • 和 LetITFly 一起重建了 MAT BBS LetITFly BBS
  • 认识了一大堆菊苣和 dalao,也怼了不少人
  • 开始使用 Telegram(@neoFelhz),并创建了一个自己的频道 neoFelhz’s Channel
  • 抛弃了所有的国内社交方式——包括但不限于微博、QQ、微信
  • 赞助了 cdn.geekzu.org 公共库部分 CDN
  • 在 GitHub 上面加了一堆 organization(然而大部分并没有什么卵用)
  • 造了几个轮子、写了一些简单的练手的项目和页面

2017 年是忙碌充实的一年。但是接下来的一年对我来说也许会更为繁忙——又有不少轮子要造,高考也已经临近了,至少未来半年的文章数量应该不会太多了。


说到轮子,我今年造了几个轮子,不过勉强能拿得上台面的应该只有这几个:


突然又变成碎碎念了。。。不过无论怎么说,希望在新的一年学到更多的技术,然后折腾出一些好玩的东西来,和一些小伙伴一起造更多的轮子 (o゚▽゚)o

知其白,守其黑,为天下式——《道德经》

lwl12's avatar

Bye 2017, Hi 2018

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






- EOF -

kookxiang's avatar

I'm Still Alive

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

lwl12's avatar

[LWL的自由天空 年度简报] – 云起

2017 年,转瞬而过。 知世故而不世故,处江湖而远江湖。人情冷暖已看透,赤子之心永不丢。 这是自由天空的 2017 年年度简报,你好。
neoFelhz's avatar

Chrome 离线包查询

DEMO:chrome.nfz.moe

lwl12's avatar

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

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

lwl12's avatar

1024 天成就达成!

LWL 的自由天空

2014.12.28 – 2017.10.16

Made with by lwl12

 

neoFelhz's avatar

这是最好的时代 这是最坏的时代

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

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


  • 杨永信电击治疗网瘾
  • 柴静雾霾调查被封杀
  • 百度魏则西事件
  • 巫山童养媳事件
  • 明经国抗强拆杀人案
  • 北影性侵事件
  • 刘国梁事件
  • 杭州保姆纵火案
  • 豆瓣关于家庭暴力和自杀的讨论小组被迫雪藏
  • 广电总局审查同性恋和性有关的视听媒体
  • 在西安拥有三万粉丝以上的个人微博要备案
  • B 站番剧类视频被文化部要求进行内容审查
  • 某 Hosts 维护人员被刑事拘留
  • 淘宝被禁止出售日文游戏
  • 公安在全国范围内开展 “网站一键关停” 演练
  • 国内各大互联网企业开展党建工作
  • 唐山收费站阿訇率穆斯林打人事件被封锁
  • AcFun 的视听服务被叫停
  • 袁腾飞《铿锵三人行》被封禁
  • Pixiv 遭遇 DNS 污染
  • . . . . . .
  • 山东辱母杀人案
  • 苏享茂自杀事件
  • 豫章书院自杀
  • 暴走大事件因说真话被封
  • 上海携程亲子园虐童事件
  • 北京深圳和广州大清理低端人口
  • 北京红黄蓝幼儿园性侵事件

墙最可怕的,并不是我们不再能够访问被封锁的网站,而是它能让几乎一整代的人不再愿意访问被封锁的网站。

XX 被墙前的日子:还好这次 XX 没有被墙 / XX 怎么可能被墙 / 要是 XX 被墙了我就肉身翻墙了
XX 被墙时的几天:不要慌是 XX 服务器炸了 / 我这里能上一定是 XX 的问题 / 明明是 XX 主动屏蔽大陆 IP
XX 被墙后的一年:没事墙内已经有替代品了现在上起来很方便 / 你不会翻墙吗? / 抱怨个 P 有本事你肉身翻墙啊

本应是我们应有的权利,却变成了某些人幸免于难的“侥幸”。

我的同学告诉我,他在 App Store 购买过 Surge,但是他如今已经不愿意再费心了,因为他觉得“没有必要”。
实体的墙并不可怕,人心的墙才让人生畏。

GitHub 因为程序员的抗议,在 2015 年解封了;V2EX 备案后接受国内的规定,在 2015 年解封了。其它的网站呢?
魏则西因为被迫只能使用百度搜索而被莆田系医院害死。或许,还会有下一个?


不需要政府造墙,网民也会自发造墙。这尼玛连做个翻墙软件都要造墙,真是令人叹为观止。这是一个造了几千年墙的保守的农耕民族,缺乏对别人的基本尊重,不愿意分享,喜欢遮遮掩掩,喜欢小圈子抱团,大概这些传统是改不掉了吧。
—— shadowsocks 作者 clowwindy 发表于 2015 年

“深圳 SS 大规模精准识别” 的消息在算不上很久的之前震动了翻墙圈,虽然没有多久就被证实 不过是 SSR TG 群内的造谣 ;BreakWa11 和 Madeye 互相编写探测工具 sssniff 的风波还没有停息之时,BreakWa11 便已然成为了网络暴力的目标。这场荒唐的闹剧最终以 SSR 删库收场。
造谣传谣、相互攻击、网络暴力。这是一场暴民的盛宴。

你国翻墙圈根本不会死于 GFW。你国翻墙圈会死于内讧。


在国内论坛和博客需要备案的规定、和今年七月《网络安全法》的基础上,网信办颁布的新法令,要求国内的评论、跟帖系统必须备案、实名使用,并加以严格监督。就在法令颁布之前,多说 和 网易云跟帖 先后停止了运营。
毕竟这是一个 JavaScriptRIP 都能触发 “微博反垃圾”、小熊维尼都能影射国家领导人的国度。因实名举报学校而险些被开除、因抱怨食堂饭菜难吃而被行政拘留,言论的口就像绝地求生的毒圈一样越缩越紧。

无理由、无厘头的审查已经理直气壮。人们随时都可能成为破坏社会和谐气氛的罪人。


暴走大事件这一次事件告诉我们,无论是杨永信还是豫章书院,哪怕强大的舆论站在他们的对立面,他们依然能够很滋润的存在着,只是因为他们背后有政府做强大的靠山,强大到能够无视人民的呼声,哪怕国家的政府似乎一直是在“为人民服务”

——neoFelhz Channel, 17.11.11


乌云关闭以后,部分白客开始转黑;更多的黑客也有更多机会入侵更多互联网系统和服务、亦或者是根据发现的 0day 进行勒索。
当然,在国内,就算有乌云,上述一切也不会改善太多。在中国畸形的互联网里,网络安全这一块简直就是在搞笑的。
网络安全并不是靠公安部强制给服务器安装“安骑士”、中国电信在骨干网封端口、国家建一道全国范围的防火墙就能解决的。

——neoFelhz Channel, 17.11.16


损坏的硬盘永远不能被修复,监控永远在需要它的时候坏掉,警察永远不会公布一针两片是什么,法警永远不会发现幼童有什么异常,媒体的报道永远是造谣,警察永远只会把站出来发声的人关起来,而如今连硬盘都会成为社交平台的违禁词。
是的,这盛世如你所愿。
救救孩子!

——neoFelhz Channel, 17.11.29


中华立国数千年,礼义纲纪,云为得失,皆奉孔子之经,若一弃之,则人皆无主,是非不 止所定,进退不知所守,家无以为家,是大乱之道也。
「冒万死以保旧俗,存礼教而护国魂。」

这是最好的时代,这是最坏的时代。
这盛世,如你所愿。

neoFelhz's avatar

云主机和 VPS 的区别

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

VPS

VPS(Virtual Private Server),中文名称是虚拟专用服务器。详细的定义可以去看 维基百科 - VPS。通俗点讲,就是在一台大型的独立服务器上,通过一定的技术(如虚拟化或者容器化)和一定的软件(VMWare、Xen、KVM、OpenVZ),将这台大型独立服务器的运存、处理器、硬盘进行划分成一个一个小的 VPS,每一台 VPS 都可以分配到独立公网 IP 地址、独立资源和独立系统配置,用户可以安装独立操作系统、单独对自己的 VPS 进行重启和关机。

云主机

云主机我见过的常见的两个英文缩写是 CVM(Cloud Virtual Machine 腾讯云使用这个名词) 和 ECS(Elastic Compute Service 阿里云和华为云使用这个名词)。
理解云主机的概念,就必须抛开一台独立的大型服务器的概念,而要明白一个概念——算池。
以阿里云为例。阿里云在国内很多地区都建设了数据中心,在数据中心中所有服务器都是内网互通的。在数据中心里有专门负责存储的机器,配备有大型 HDD 和 SSD 组成 RAID 存储阵列,这些机器组成存储池;有专门负责运算的机器,根据不同的需求有不同的配置(如多核 CPU、强劲的 GPU 和大运存),这些机器组成运算池;有专门进行网络分配和调度的交换机,组成了虚拟网关。

当然,这些算池还会往下细分、以便在不同业务的不同需求中完成调度。

区别

可用性

从可用性来讲,VPS 的可用性是要低于云主机的。VPS 的宿主机一旦出现软硬件故障,就会影响到上面的虚拟出来的 VPS。而在云计算池中,如果算池中的某个部分甚至一个物理单位出现故障而离线,大部分情况下都可以由算池中其它部分接替工作,所以云计算一般不会出现整个服务出现大规模故障的情况。

灵活性

以升级你的主机配置为例。VPS 升级配置需要先关闭你的 VPS,然后分配更多的 CPU、运存和硬盘给你的 VPS;虽然 VPS 的宿主机可能有足够强劲的配置,但是一旦你的需求在你目前的宿主机上无法得到满足,你就有可能需要让主机商将你的数据转移到另一台宿主机上重新分配资源虚拟出一个 VPS。而对于云主机,升级配置只需要从算池中分配给你更多的资源即可,非常灵活。

这些就是阿里云、腾讯云、美团云这类云计算创立的初衷——把平时业务较少时从算池中将闲置的算力拿出来卖钱。所以会有这么一句很有意思的话——“双十一期间,你的阿里云主机隔壁就有可能是淘宝的后端服务。”

性能

通常情况下,云主机的性能会比 VPS 差很多,在 IO 性能表现的尤为明显。整个算池分工明确,所有算力都通过内网传输,内网的传输速度是远远不如单一硬件设备之间传输的。举例说明,阿里云的 IO 性能平均为 120M/s,而较好性能的宿主机上的 VPS 的 IO 性能可以达到 1G/s 。


实际上对于一般情况,云主机和 VPS 的性能的区别是感觉不明显的;VPS 的可用性和 SLA 也不会逊于云主机。在实际的使用体验和操作中也并不能感受到云主机和 VPS 之间的区别;具体如何选择还是要根据自己的业务需要和预算。

neoFelhz's avatar

如何写好一个开源项目的 README

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

Logo

无论如何,项目有一个 logo 是一个加分项。一个生动活泼的 logo 能吸引很多人的注意。如果没有 logo,那么就学习 Material 主题、把一张漂亮的预览图丢在 README 开头吧~

就像这样 ↓↓



logo 当然需要居中放置,所以我们不能使用 markdown 语法来添加图片,而应该使用 html。正确做法就像这样:

<p align="center"><img src="https://i.loli.net/2017/09/07/59b1367f76fdb.png" alt="Material Render Phone"></p>

项目名称

同样的,如果想要突出项目的名称,应该同样让其居中。带上 <a> 标签链接到项目的官网(如果有的话)那也是极好的。

<h1 align="center"><a href="https://material.viosey.com" target="_blank">Material Theme</a></h1>

Slogan

然后是 slogan。slogan 要么耍帅要么优雅。我列举几个项目的 slogan 吧~

  • Nature, Source | 原之质,物之渊 —— hexo-theme-material
  • 🍭Wow, such a powerful music API framework —— Meting
  • A magical documentation site generator. —— docsify

需要注意的是,你的项目 README 中的 Logo 和名称应该要能够完整地出现在手机版 GitHub 页面内。当然,如果 slogan 也在那就更好了。

Badge

README 里面一定不能缺少 Badge。Badge 可以形象的把大部分项目的信息、比如版本号、依赖、构建状态等等展示出来。
比如说,hexo-theme-material 添加了这几个 badge:

  • Version
  • Author
  • Hexo Version
  • NodeJS Version
  • Travis Build Status
  • Download

这里当然要推荐 Shields.io,绝大部分常见的 GitHub Badge 都是用这个网站生成的。

介绍

接下来就应该是对项目的介绍了。README 需要解答下面这些问题:

  • 这个开源项目是做什么的
  • 项目维护、CI、依赖更新状态
  • 项目可用版本及其他版本、并且应该如何下载它们
  • Demo 或官网地址(如果有)
  • License

这就是对项目的简单介绍。当然,除了需要上述信息能对用户对你的项目有一个简单的印象,你还需要在 README 中写一些关于项目的介绍。

  • 如何下载这个项目
  • 项目依赖
  • 安装方式
  • 部署方法(如果项目可以被部署的话)
  • Debug 方法
  • 文档

由于 Material 是 Hexo 的一个主题,所以我们在 README 中只介绍了下载方式,然后我们提供了一个链接通往我们的文档。


基本这就是一个 README 需要包括的内容了。当然,书写项目 README 时候还需要遵守排版规范。这里是 Neko-Dev 的文案风格 GUIDELINE

neoFelhz's avatar

Android 切换 F2FS 文件系统

F2FS 如今也是折腾 Android 的玩家口中的一个常见词汇。虽然 2014 年起就已经有 ROM 对其提供支持,但是一加在 2016 年发布了原生支持 F2FS 的氢 OS 7.0,和华为重金聘用了 F2FS 文件系统开发人员的新闻,又把 F2FS 推上了热点。本文介绍了 F2FS 是什么、F2FS 的优势和将手机切换到 F2FS 文件系统的方式。

警告

切换文件系统为 F2FS 是一项有风险的行为。如果你的 ROM 的内核不能够支持 F2FS 文件系统,那么有可能导致一系列问题!这些问题并不是由 F2FS 文件系统引起!

Why F2FS?

F2FS 是什么

F2FS ,即 “Flash-Friendly File system”,是一种新的文件系统,用于 NAND 闪存一类的储存设备,甚至可以自移动设备广泛应用至服务器。三星应用了日志结构档案系统的概念,使它更适合用于储存设备。

F2FS 的优点

F2FS 相对目前主流的 EXT3/4 格式,

  • 更好的加密特性;
  • 更快的读取速度;
  • 加快针对零碎小文件的读写速度;
  • 对固态存储的寿命保护;
  • 娱乐兔跑分 UX 性能可以增加 3000 多分(不重要)。

F2FS 的缺点

虽然 F2FS 拥有针对零碎小文件有 Buff,但是在面对大文件读写上并没有太大优势(如果部分 ROM 没有调试好有关参数,甚至可能导致出现性能波动)。而且当存储空间快要满的时候,F2FS 的性能也会急剧下降。
除此以外,F2FS 和 FBE 加密之间存在冲突(这也是小米至今不愿意跟进 F2FS 的原因)。

本人的建议是,除非你的存储芯片是 EMMC 或者 UFS2.0,否则不需要使用 F2FS 来增强你的存储 IO 性能。在 UFS2.1 上,F2FS 对存储 IO 性能的提升并不明显,而且损失 FBE 加密对于一些用户来说是得不偿失的。

How to F2FS?

选择合适的 ROM

首先你得选择一个支持 F2FS 的 ROM 。比如说我的 nubia Z9 max 的 NubiaUI 并不支持 F2FS ,但是适配的 Mokee 和 CM 都是支持的。
大部分第三方 ROM 都是支持的,建议直接咨询 ROM 的开发者。

刷入一个第三方 recovery

最好是 TWRP 。因为 TWRP 支持可视化和触摸操作,也支持文件系统转换等很多功能。TWRP 支持 F2FS 的版本是 2.8.6.1+ 。本人使用的是 TWRP3.0.2-2-stalence-nx510j-unofficial TWRP 3.0.1-1_abforce-oneplus3-unofficial。

备份数据

备份你的数据,包括使用钛备份应用数据,用 TWRP 备份存储 system、data 分区。
把你位于内部存储和外部存储的个人文件也全部拷贝到电脑上。

自 Android 5.0 开始已经实现了 data 分区和内置存储合并;这样一旦转换 data 分区的文件系统以后,内置存储也会被清空。

切换分区

  1. 在 TWRP 下,先清除下述分区的内容:cache、data、system。
  2. “高级清除菜单”,勾选 Data ,“修复或转换文件系统”,“转换文件系统”,选择 F2FS 。
  3. 用同样的方法,转换 cache 分区为 F2FS
  4. 对于 system 分区要特别注意,有的 ROM 不支持 system 分区为 F2FS 。所以一旦转换 system 分区以后无法开机,你可以直接退回 TWRP ,把 system 再转换回 ext4 ,重新刷入 ROM 一遍即可。

部分 ROM 会在刷机前检测 system 的分区格式,如果不支持会自动把分区转换回 ext4。这是正常现象。

注意,部分 ROM 也不支持 cache 分区为 F2FS 格式,表现为转换后开机时间变长、多次重启均无法改善。如果出现这种情况,把 cache 分区转换为 ext4 即可(刷机后或者清除 davlik/cache 分区后第一次开机需要执行 dex2oat,所以时间会较长,所以需要之后再多次重启作为对照)。

全部转换以后,再用 TWRP 看一下分区是不是已经转换好了。然后就可以享受 F2FS 给你带来的丝滑的感受了。

还原数据

先把 TWRP 文件夹拷回手机(这个文件夹中有你转换分区格式之前的分区备份文件),然后在 TWRP 的设置中,把 “使用 rm-rf 指令代替格式化” 的选项勾上,以便实现跨文件系统还原分区(如果不勾选,TWRP 会给你还原你之前的文件系统),然后再用 TWRP 还原分区。

当分区还原完以后就可以开机进系统测试一下,如果一切正常,就再把你备份的个人数据拷回手机存储即可。

neoFelhz's avatar

Web 性能优化(6)——WebFont 字体优化

WebFont 的加载是一个令人头疼的事情。除了跨域问题、还有 FOIT、FOUT 等等。为了提供更好的用户体验,我寻找了一些高效加载 WebFont 的简单解决方法,并对它们分别进行测试。

lwl12's avatar

自建邮件服务小记

使用 mailcow-dockerized 项目搭建自己的邮件服务器
neoFelhz's avatar

小米降噪耳机评测

在同学的安利之下,我剁手了一副小米降噪耳机 Type-C 版。

开箱图

包装盒左下角的金标很醒目,实际上也就是玄学加成而已。。
包装盒里的配件包括:

  • 耳机本身
  • 3 对硅胶套
  • 2 对空气耳套
  • 1 个布制随身袋

小米耳机上部使用塑胶线,下部使用编织线。总的来说,小米降噪耳机整体做工可以的。我买的是黑色款,做工还算细致,整体上来讲并不简陋。由于使用 Type-C 供电,也就免去了常见主动降噪耳机中颇影响美观的电池盒。

参数

参数描述
耳机类型入耳式
喇叭阻抗32Ω
产品净重20g
连接线长1.25m
插头类型USB Type - C
额定功率5mW
执行标准Q / WMSX 004 - 2016
频响范围20 - 40000Hz
耳机灵敏度113dB
尺寸77 * 120 * 30mm

体验

使用体验

我主要拿小米降噪耳机搭配我的 一加三 使用。目前系统是 Mokee Unofficial。
开启主动降噪后耗电并没有明显增加,属于正常水平。
线控的音量加减和播放暂停都可以正常使用;使用网易云音乐时不能使用按两次下一曲、按三次上一曲,但是可以用长按音量键切歌。
在一加三上,小米降噪耳机无法在通话中使用。来电话无法用线控接听和挂断、通话中耳机没有声音、对方也听不到任何声音。

降噪效果

开启线控上的开关之后 主动降噪发挥一定作用,加上入耳式耳塞和空气气囊,晚自习时班上的喧闹声基本都被削弱了:能明显感觉到背景声音变小甚至消失,但耳压感觉正常、不是把耳朵捂住的那种感觉,但是说话声和其它比较尖锐的声音的降噪效果不明显。
个人认为,小米降噪耳机的降噪能力还算是过关的,至少声音是相对纯净的、也不需要在公共场合时刻意提高耳机的音量了。

音质音色

音质的话,高 / 中频可以接受;高音偏弱但明显,低频推力不是太够;音色上小米降噪耳机偏清亮、有些粗糙,而一加银耳相对偏浑厚和圆润,可能是我没有煲过小米降噪耳机的缘故。

测试曲目

光说感觉无益,直接上测试曲目。

纯音乐测试

You

在《You》上,小米降噪耳机的解析度并不差,但是节拍和鼓点的效果不如一加银耳。一加银耳对《You》的表现平平常常,小米降噪耳机的清亮的音色发挥得不错。

Relentless-WhiteRose [RWBY doujin remix]

在《Relentless-WhiteRose》中小米降噪耳机的高音段的缺陷变得明显一些,而一加银耳的表现还是一贯地出色,Nubia 的圈铁表现显然更好,声音让人听得舒服。

Leevis

小米降噪耳机在《Leevis》上的表现得偏尖锐、鼓点表现不够有力,但是解析力还是足够的。Nubia 圈铁耳机音色偏厚重,解析度不错,也不会显得刺耳。

人声测试

记忆回收

可以明显听出,小米降噪耳机明显和一加银耳的音色上有明显的区别,一加银耳的声音更真实和圆润,对于阿绫的声音还原较为真实。小米耳机表现偏飘,而 Nubia 圈铁在人声的表现很不赖。几种耳机各有千秋。

残月雪

《残月雪》中阿绫的高音部分中,一加银耳显然相对失真少(但是一加银耳高音性能还是比不上 Nubia 红魔)、声音也偏浑厚一些,但是高音有些失真;小米降噪耳机会颇清亮一些,高音发挥不错。

八重回归·伪

在《八重回归》上,小米降噪耳机和一加银耳的表现效果各有千秋。小米降噪耳机声音显得更通透一些;Nubia 圈铁的还原效果更好、更清晰,相比之下小米降噪耳机显得偏飘。

将死

小米降噪耳机的低频段有些推力不足,在《将死》上显得有些飘,一加银耳的浑厚圆润的音色在低音段发挥优秀。而 Nubia 圈铁耳机表现优秀,解析度和低音表现出色。


总的来说,小米降噪耳机表现平平,在低音表现不足,但在高音段和人声表现还是说得过去的。可能小米对降噪耳机在 流行、人声 这一块做了一定打磨,但是音质上普遍不如一加银耳,在听觉感受上也不如 Nubia 圈铁有优势。但是听耳机也是耳机听你的过程。适应以后,小米降噪耳机也不是不能接受。
个人觉得小米降噪耳机,价格能接受,音质尚可,做工不错。如果只是希望在通勤或者旅行中听听歌舒缓心情、或者主要用于削弱外界的骚扰(比如晚自习时的喧闹),那么小米降噪耳机还是可以成为一种选择。如果你对音质有更高的要求、或者不满意小米降噪耳机的音色,那么你完全可以去选择其它耳机。

以上评测完全基于个人,不保证完全公正、客观。玄学的东西,八千以下都是听个响嘛。。

neoFelhz's avatar

随时随地 Hexo——我是如何使用 Hexo 的

Hexo 是一个使用 Node.js 作为构建引擎的极速、简单且强大的静态博客架构。但 Hexo 只有在安装了 Hexo 的环境上才能运行。于是我设计了一套实现 Hexo 随时随地部署、随时随地发布的方案。

neoFelhz's avatar

Web 性能优化(2)——分析 Prefetch

对于文件的预加载的作用并不是直接加快网站的加载速度。预加载是提前准备好你所需要的资源,然后当需要的时候即可直接调用、直接完成页面的渲染,不造成阻塞。

neoFelhz's avatar

Web 性能优化(1)——浅尝 Service Worker

静态内容非常适合做缓存来加速页面的访问,除了使用 CDN 实现加速之外,通过客户端也可以实现更好的访问体验。本文就利用 Service Worker 来探讨基于静态资源的加速方案。

ServiceWorker 对动态页面依然有效,但是效果不如静态站效果显著。
对于动态页面,Google 推出了 sw-toolbox,借助 Service Worker 的一系列接口实现了更强的缓存 API 和网络加载请求处理,使其能适合动态页面缓存。我也在《本博客对 sw-toolbox 的实践》一文中介绍了 sw-toolbox。我推荐无论是静态站还是动态站,都使用 sw-toolbox。

Service worker 是 PWA 这类 WebApp 的重要支持,因为可以使 web 支持离线体验。除此以外,Service Worker 还支持通知推送和后台同步。当然这里我们用的是它离线加载的特性来优化网站体验。

启用 Service Worker 支持

在首页添加 Service Worker 注册代码

<script>if ('serviceWorker' in navigator) {navigator.serviceWorker.register('/sw.js');}</script>

这段代码向下兼容 Service Worker,检测浏览器是否支持 Service Workers。如果支持就会根据 sw.js 注册 Service Workers 服务。如果浏览器不支持就不会注册。

添加 Service Workers 所需文件

你可以从 这里 下载到所需的文件,将其放在网站根目录下。

  • sw.js
  • offline.svg
  • offline.html 你可以用 Hexo 生成一个独立页面,也可以自己写一个。

由于 Service Worker 的离线加载特性,在浏览者离线以后依然可以访问已经缓存了的页面。但是对于没有缓存的页面和图片,你可以通过 offline.svgoffline.html 加以提示。

修改 sw.js 中的下述内容。

const ignoreFetch = [  /https?:\/\/cdn.bootcss.com\//,  /https?:\/\/www.google-analytics.com\//,  /chrome-extension:\/\//,];

这部分定义了你不需要缓存的资源,用的是正则表达式对资源进行匹配。这里给出了按域名进行排除的例子。如果你无法判断哪些资源不需要缓存,请用 F12 打开 Dev Tools 的 Source 选项卡逐个加以筛选;如果还不会,就把你看到的所有不是源站的域名统统输进去。

加速效果

这是第一次访问的效果。

可以看到,第一次访问不能算太理想,花费 1.39s 才完成了 DOMLoad,所需资源全部加载完实际上花了 1.69s。

可以看到,实际上网络资源花费了 3.11s 才加载完。我特意截图了最后加载的几个有齿轮标识的资源。这些是 ServiceWorker 在 sw.js 里加载的资源——offline.svg 和 offline.html。博客更新以后,离线提示页面被下线,不会再加载 offline.svg 和 offline.html。

这是第二次访问的效果。DOMLoad 只花费了 571ms,全部资源加载只需要 608ms。可以看到,很多资源 from ServiceWorker。说明 ServiceWorker 拦截了请求,直接从 ServiceWorker 获得资源。

看见没有?连 blog.nfz.moe 都被 ServiceWorker 拦截了,现在你知道为什么可以离线加载了吧。

先决条件

HTTPS

你的网站必须 完整使用 HTTPS 进行加密!ServiceWorker 一旦被注册,除非有进行定义、或者访问者手动在 Dev Tools 内 Unregister 了 ServiceWorker,否则你的资源都将被 ServiceWorker 接管,一旦访问者第一次加载资源时被攻击或者被劫持,后果则不堪设想。在开发过程中,可以通过 localhost 予以调试,但是生产环境必须高度可靠。

Can I Use?

http://caniuse.com/#feat=serviceworkers

根据 Google 的文档表明,Chorme、Firefox 和 Opera 都支持;Microsoft Edge 现在表示公开支持。Safari 也暗示未来会进行相关开发。


参考文章:

以及 Google 的 ServiceWorker 有关文档。

neoFelhz's avatar

Web 性能优化(5)——Preload 和 Server Push

相比使用 Prefetch 之类的技术让浏览器提前准备好将来需要的资源,Preload 是让浏览器在加载页面时提前准备好这个页面所需要的资源。

neoFelhz's avatar

本博客对 sw-toolbox 的实践

本文简单介绍了 Google 的 sw-toolbox 和本博客对于 sw-toolbox 的实践,希望对大家使用 sw-toolbox 提供一些参考。
neoFelhz's avatar

全站开启 HSTS

HSTS 是 HTTP Strict Transport Security (HTTP 严格安全传输)的缩写。开启了这项设置以后,大部分浏览器会强制性地使用 HTTPS 来请求资源,能够更加有效地保护网站和用户的数据安全。

一般情况(未启用 HSTS),浏览器会允许用户在了解了安全风险之后继续使用不安全的连接来访问,但如果启用了 HSTS,则不允许忽略,所以如果你要启用 https ,得一定要 很长期使用 HTTPS,或者像我一样,成为一个 https 控。

启用 HSTS

HSTS 是一个响应头,格式如下:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload;
  • max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过 HTTPS 协议来访问。也就是对于这个网站的 HTTP 地址,浏览器需要先在本地替换为 HTTPS 之后再发送请求。
  • includeSubDomains ,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过 HTTPS 协议来访问。
  • preload ,可选参数,预加载到浏览器缓存。

RFC 6797 对 HSTS 进行了详细说明。

配置 HSTS

HSTS 这个响应头只能用于 HTTPS 响应;网站必须使用默认的 443 端口;必须使用域名,不能是 IP。而且启用 HSTS 之后,一旦网站证书错误,用户无法选择忽略。(这意味着你需要及时给证书续命)
添加 HSTS 支持其实很简单,修改一下 Web 服务器的配置,增加一个 HTTP 头就行。

举个例子,这个域名目前使用的是:

Strict-Transport-Security: max-age=15552000; includeSubDomains; preload max-age=15552000

告诉浏览器缓存这条规则 180 天;includeSubDomains 对子域名也使用相同的规则;preload 允许将这条规则内置进浏览器。

WebServer 配置 HSTS

对于 Apache,只需在 .htaccess 加入以下代码即可

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

对于 Nginx,可以在站点配置文件中添加

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

申请 HSTS Preload List

HSTS 必须要在浏览器访问过你的网站一次以后才会生效,如果希望提前生效,需要申请 HSTS Preloading List。
目前这个 Preload List 由 Google Chrome 维护,Chrome、Firefox、Safari、IE 11 和 Microsoft Edge 都在使用和不断更新。
如果要想把自己的域名加进这个列表,首先需要满足以下条件:

  • 拥有合法的证书(如果使用 SHA-1 证书,过期时间必须早于 2016 年)
  • 将所有 HTTP 流量重定向到 HTTPS
  • 确保所有子域名都启用了 HTTPS
  • 输出 HSTS 响应头
  • max-age 不能低于 18 周(10886400 秒)
  • 必须指定 includeSubdomains 参数
  • 必须指定 preload 参数

觉得妥了可以去 HSTS Preload List 这个页面申请。
我的域名已经去申请加入预加载列表了。如果能通过,将会是很吼的!

特别提醒:对于 HSTS 以及 HSTS Preload List ,如果你不能确保永远提供 HTTPS 服务,就不要启用。因为一旦 HSTS 生效,你再想把网站重定向为 HTTP ,之前的老用户会被无限重定向,唯一的办法是换新域名。


本站已经加入了 HSTS Preload List

neoFelhz's avatar

阻止运行、猎鹰网络、黑域 始末

SuperSU 和阻止运行被收购和商业化无疑是一场巨变。因为 Root 和 Xposed 都是对 Android 安全、稳定运行非常重要的一部分,一旦商业化和作恶,后果不可预料。

neoFelhz's avatar

使用 GitLab CI 实现 Hexo 持续部署

自从使用 Hexo 博客以来,我一直在研究如何实现在任何平台上自由编写和发布 Hexo 博客。之前我在 《Hexo 持续自动化部署》《用 Flow.CI 让 Hexo 持续集成》两篇文章中分别讲述了使用 DaoCloud 的 Docker 和 Flow.CI 的 Sass 平台部署持续集成的 Hexo,但是如今 DaoCloud 部署越来越慢,Flow.CI 也已经转向收费;所以我不得不寻找新的替代方案。

很早就听说了 GitLab。

就是那个最近因为不小心使用 rm rf 把自家数据库删光、还在 YouTube 上直播修库、让失误的程序员看了 10 小时的 nyancat 的那个 GitLab。

GitLab 有面向企业的计划、有开发独立的服务端程序,所以和主要面向平民化的码农天堂 Github 一口气亏损 6600 亿美元不同,GitLab 至少并没有亏损。这一点和 Coding 颇为类似——无论是运营方式还是盈利方式,甚至是网站 UI 交互层面。

接下来事情就很简单了。

准备工作

首先,在 GitLab 创建一个新的私有库,用来存储我的博客工程文件;在我的本地的 Hexo 博客工程文件中的 Repository 里添加一个新的 Remote 到 GitLab。然后从原来的 repo 上 git pull,并 git push 到 GitLab。
现在我在 Coding 和 GitLab 上都有了 Hexo 博客的工程文件。接下来就是直接部署 CI 平台了。

编写 workflow

和 Github 的 Travis.CI 类似,你只需要在 Repository 的根目录上新建一个 .gitlab-ci.yml 你就可以实现 GitLab 的 CI 平台执行自动部署。

在 GitLab,CI 和 Repository 是高度集成的。你可以在 pipeline 里看到你的 CI 运行信息。

.gitlab-ci.yml 中填入下述内容:

image: neofelhz/hexo-dockerbuild:  cache:    paths:    - node_modules/  script:  - hexo clean && hexo g  - hexo d  only:  - master

上述脚本会自动在每次 push 后帮你生成 Hexo 静态文件。至于 hexo d,你需要事先部署好 Deploy 方式。
如果需要部署到 GitLab Pages,请把上面 build 节点更名为 pages 并在 pages 节点中添加下述子层级内容:

  artifacts:    paths:    - public

同时需要去掉 hexo d

至于这些脚本的原理,你可以直接参考我之前那两篇关于 CI 部署 Hexo 的博客。

SSH 有关

一些人可能在用 Github Pages 或者 Coding Pages,或者是使用的自己的 VPS(git 部署)。这样一来你就可能需要使用 SSH 连接你的 webserver 仓库。(当然,用 Caddy 做 webserver 和定时 git pull 那个算是异类)。这些你可以在 GitLab CI 的 wiki 上查看到 GitLab CI SSH 配置的相关内容

值得一提的是,和 DaoCloud 和 Flow.CI 不同,GitLab CI 可以通过设置 环境变量 的方式加载你的 SSH 的私钥,这样子就不需要把你的私钥放在你的项目仓库里,有效防止私钥泄露到第三方。这种环境变量的方式不仅安全,而且灵活。
GitLab CI 配置环境变量的位置是 Setting -> Pipelines -> Secret variables,如下图所示:

小结

本文就是由 GitLab CI 生成并发布的。

本文介绍了利用 GitLab CI 进行持续集成 / 部署,今后的使用和之前的方式一样,向仓库提交 push 就可以触发自动部署。
和 Daocloud 和 Flow.CI 的代码构建相比,GitLab CI 为持续集成 / 部署优点如下:

  • 目前私有库完全免费
  • 可以和 GitLab 的 Repository 无缝兼容,无需第三方 CI 平台接入。
  • 支持在 hexo deploy 的同时自动发布到 GitLab Pages
neoFelhz's avatar

使用 Travis CI 持续构建 Hexo

鉴于使用 Hexo 部署网站的繁琐性,我将通过本文介绍如何使用 Travis CI 来完成 Hexo 的持续构建。
neoFelhz's avatar

Android 的网络感叹号

从 Android L 开始,原生和 CM 的 ROM 用户就会发现,状态栏的网络信号莫名多了一个感叹号。而且,有的时候明明连着 WIFI 用得好好的,却突然跳到数据流量。

neoFelhz's avatar

从应用“妮乎”不遵守开源协议谈谈我国开源的现状

身在这个奇怪的地方,被迫做着奇怪的事情,来获取本该轻易获取的东西。然而就算这样,也不能避开一群被害不浅的人,来帮他们洗地。

neoFelhz's avatar

本博客的优化汇总

我一直在关注我的博客的浏览体验,其中,网站的加载速度对于浏览体验来说是非常重要的。

neoFelhz's avatar

妄想 Paranoia 歌词 API 文档

封面:β
取自 妄想症系列专辑预热宣传 视频封面

妄想症 Paranoia API

妄想症 Paranoia API 是一个类似于 Hitokoto 随机返回一句话的 API。

API 内收录所有歌词,版权归 妄想症系列 策划 / 作词 雨狸 所有!

数据获取方式

  • 请求地址:https://api.nfz.moe/paranoia/ (仅支持 HTTPS,HTTP 请求将会 301/307 强制跳转 HTTPS,域名已启用 HSTS 响应头)
  • 请求方式:GET
  • 请求参数:
    • charset:字符集,支持 GBK/UTF-8 现仅支持 UTF-8,该参数已被取消
    • encode:数据可返回函数名为 paranoia 的 JavaScript 脚本用于同步调用

实例

直接请求

  • 请求:https://api.nfz.moe/paranoia/
  • 返回:被抛弃的女孩 深渊中乞愿被爱 无法失去陪伴 被自己的愿望加害——《妄想·Reality》

Javascript + HTML

脚本地址:https://api.nfz.moe/paranoia/?encode=js

在 HTML 内引用 JavaScript,建议放在 </head> 之前:

<script type="text/javascript" src="https://api.nfz.moe/paranoia/?encode=js"></script>

API 响应时间平均为 200ms,可对域名 api.nfz.moepreconnect 提前完成 TCP 连接。

在你需要展示一句话的地方加上:

显示来源

<div id="paranoiaapi"><script>paranoia(true)</script></div>

不显示来源

<div id="paranoiaapi"><script>paranoia(false)</script></div>

支持其它 CSS 样式。

HTML 调用实例

返回的 JavaScript 会返回一个 paranoia 的函数,同步调用。该脚本实质为使用 document.write 的脚本。
是否显示来源取决于 paranoia() 传递的参数:true 为显示,false 为不显示。

更新日志

  • 2017 年 4 月 4 日:正式上线
  • 2017 年 6 月 2 日:第一次重构
  • 2017 年 8 月 3 日:第二次重构、更新数据
lwl12's avatar

黄昏

 

他用一种慈祥的姿态在高处安抚着你

他铺开巨大的过滤网层层信仰奢靡

他大义凌然地宣布要把纯净筛留给你

过滤得只剩下了残骸还要你歌颂感激

 

你终其一生想找到理由去热爱脚下的土地

他为其定义的伟大 对你有什么意义

你所能做的只是在奔跑中保护好你自己

你想要感受到他爱你 愿他别去伤害你

 

他庞大的身躯压垮了多少初生的纯良

他曾有的灵魂矗立在远方冷漠地观望

他费力塑造的繁华成为装扮阴暗面的假象

他毁掉的美好在不久的将来变成了疯狂

 

你终其一生想找到理由去热爱脚下的土地

他为其定义的伟大 对你有什么意义

你所能做的只是在奔跑中保护好你自己

你想要感受到他爱你 愿他别去伤害你

你终其一生找不到理由去热爱脚下的土地

传说中这里的强大是你生命的全部意义

你所能做的只是在奔跑中保护好你自己

你想要感受到他爱你 愿他别去伤害你

 

“这首歌我当初在写的时候为了防止它被和谐,所以就说它是一首关于父权的,家庭暴力的歌,其实并不仅仅关于此,叫做《黄昏》。” ——知乎

-EOF-

neoFelhz's avatar

为博客启用 PWA 支持

对于 native app 和 PWA 的纷争我不想发表太多看法,但是有一件事是确定的——PWA 极大改善了移动端用户的体验。

neoFelhz's avatar

博客统计报告(2016.11.26-2017.07.02)

我的博客到现在快 300 天了,期间我的域名换了两次,博客程序也换了 Hexo。如今我即将使用 Google Analytics 统计访问数据,本文将公布从 2016.11.26 至 2017.07.02 的访问情况。

PV & UV

在这过去的 220 天中,我的博客总共迎来了 21557 名访客,总共访问了 86729 次页面。每位访客平均在我的页面上驻留 346s,跳出率平均为 40%。

上图的几个波峰颇有意思。

  • 2016.12.22 第一次访问高峰,是我在酷安“玩机技巧”话题推广了我的博客。那一次访问高峰跑掉了我七牛 2 个 G 的流量、将近 2 块钱。这一次访问高峰持续了三天,累计带来了 641PV。
  • 2017.1.23 这是第二次访问高峰。之前酷安发生了一起有人打包绿色守护、App Settings 等 Xposed 模块为木马的恶性事件,我写了一篇博客解析这个病毒。这篇博客我分享到了酷安和知乎,后来被多次转载。
  • 2017.1.26 接下来我乘胜追击,写了《阻止运行、猎鹰网络、黑域 始末》,延续了这一次高峰。
  • 2017.1.31 怒怼妮乎,又痛批了中国的开源环境。这几次的访问高峰总共为我带来了 3992PV。
  • 2017.2.11 在怒几次事件中,我看清了酷安,选择离开。有感而发的文章引发了之后的一次访问高峰,累计带来 992PV。
  • 之后的访问量便趋于平稳,图表中一些比较小的波峰一般是当天发表了新的文章。

地理位置与语言

毫无疑问,我的博客绝大部分访问量都来自中国,主要访客以使用简体中文为主。也就是说,并不是国内用户都会选择使用中文系统。

设备类型

我的博客主要流量还是来自于移动端,主要和我之前主要在酷安推广我的博客有关。
我的博客通过桌面浏览器访问能获得最好的体验;移动端的优势是方便,可以随时随地阅读,我的博客的主题的响应式设计也对移动端友好;而随着手机屏幕越来越大,平板已经被逐渐边缘化。

除去 UA 中未知的部分(应该是桌面端的访问),绝大部分访客都使用 Android,小米和一加位居第一和第二。联想到我之前在酷安推广博客,这并不奇怪。排在第三、第四和第五的是三星、苹果和华为。它们也的确是非常热销的品牌。

操作系统

从操作系统来看,使用 Android 的占绝对优势,Windows 紧随其后。但是,使用 Mac 和 Linux 的访客数量加起来只是略多于 iOS 用户。看来我博客的访问依然不是以开发者为主。

浏览器

访问我的博客的浏览者中,使用 Chrome 的占绝大多数。接下来是 QQ 浏览器,我认为应该是使用 QQ 或者微信上的内置 TencentX5 内核的访客。
Chrome 浏览器性能优异,而且有很多 Web 前沿的特性。我的博客在 Chrome 上有最好的性能表现。
对于那微乎其微的 UC 浏览器用户,博客的主题甚至专门为 UC 内置了一整套样式。
由于来自 IE 的份额极低以至于都没有出现在报表中,这意味着我可以尽情尝试各种新的技术。

流量来源

我博客的大部分流量来自于我在社交媒体和社区上的推广,所以以直接访问为主。同时,我也欣喜地发现有多个搜索引擎收录了我的博客,并为我的博客带来了访客。

可以看到,我的博客的引荐流量主要来自我的个人主页、知乎跳转、酷安跳转、Google+ 转发和 Telegram。
还可以看到,我的友链在流量引荐中占了很大一部分。
同时,我也注意到一些特定搜索引擎的关键词来的流量,这意味着我的 SEO 做的不错,有被搜索引擎收录。

同时也需要注意,就是直接访客和引荐访客,网页平均停留时间较长、跳出率明显较低,但是从搜索引擎到来的访客则相反。这符合人们使用搜索引擎的习惯,找到有用的信息便不再继续探索,但同时也说明了我的博客对于这一类访客保活度还不够。

Google 对原创博客非常友好,使用 HTTPS、提高访问速度、对移动端友好、结构化数据等也很有利于提高在 Google 的权重,最终绝大部分搜索引擎流量来自于 Google 搜索。而百度对原创博客就没有这么友好了,但基于其在国内庞大的市场份额,本博客也有部分的流量来自于百度。不过最近我使用 CloudXNS 分线路解析功能,刻意将百度爬虫的线路解析到 127.0.0.1 来阻止百度爬虫的到访,以后应该不会有从百度到访的人了。

后记

我快要高三了,到高考结束以前,更新博客只会越来越少。很多事情在刚开始时,并不能预料到它最终会有什么结果。写博客也是一样。但是只要长期投入,最终一定能从中找到乐趣和成就感。

neoFelhz's avatar

寂静之城 (The Silence City)

马伯庸《寂静之城》未删节版本全文
发表在 2005 年第 5 期《科幻世界》上的本文由于众所周知的原因进行了删节。以下是发在马伯庸个人网站上的原文。


And in the naked l

neoFelhz's avatar

Google Analytics 异步优化方案

一般地,网站配置 Google An­a­lyt­ics 的常见方式是在网站前端引用 Google Analytics 的 trackercode,然后获取 analytics.js 并开始统计用户行为。

neoFelhz's avatar

真正的自由?——从杨舒平的演讲来谈中国和言论自由

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

lwl12's avatar

一战成名,高考加油!

愿你们合上笔盖的那一刻,有武士将刀收回剑鞘般的骄傲。

 

高考加油啦!祝各位一战成名!

学考党和中考党也是一样

本博主今年没有考试,甚至还放了假🐟233333

neoFelhz's avatar

HexoKit——为国内环境优化的 Hexo 一键安装方案

最早萌生这个想法,是因为 Material 主题的群里有人不会安装 Hexo,亦或者是因为卡在安装过程太久。所以,我决定解决 Hexo 安装过慢的问题,向大众“普及” Hexo。

首先让我们重新阅读 Hexo 的官方文档,重新了解如何安装 Hexo,就可以了解是哪一步出了问题。

依赖下载太慢

安装 Hexo 的第一步自然是全套的依赖。Git 和 NodeJS 一个都不能少。在 Linux 上,实在不行直接换包管理器的源就可以解决 Git 的安装问题。不过对于异端的 Windows,就是另一个故事了。

对于 Git for Windows,现在 Hexo 官方文档是这么说的:

由于众所周知的原因,从上面的链接下载 git for windows 最好挂上一个代理,否则下载速度十分缓慢。

不过这个问题好解决。Github 上 这个项目 有 Git for Windows 的国内镜像。

NPM 源半墙

https://registry.npmjs.org/ 是 NPM 的官方源镜像,部署在 Fastly CDN 上。嗯,别看 Fastly CDN 的节点的超时过得去,实际上却时刻处于半墙状态。这也就是是为什么从 NPM 官方源下载并安装依赖非常缓慢了。
当然解决方案就是使用国内的镜像源。淘宝或者 CNPM 的源都挺好;中科大的源次之。我们可以使用 npm config set registry 指令换源。

GitHub 半墙

据说在严重抗议下,Github 也算是解封了。不过,直连并使用 HTTPS 协议 git clone 时的速度依然让人难以忍受。
Hexo 默认主题 landscape 是托管在 Github 上的,clone 的指令是内置在 hexo-cliinstall.js 中的。这个时候就算 npm 换源,这一步也绕不过去。看着 5kb/s 的 clone 速度也足够让我们对着 GFW 爆粗了。

解决方案

所以,知道了是哪里出了问题,解决方案就很简单了。
对于 Git 下载服务器被墙的问题,我们可以用镜像站解决;NPM 源被墙的问题,我们可以通过换源的方法解决;但是从 Github Clone 默认主题倒是一个很难绕过去的坎。

所以,让我们分析下 hexo init 会执行哪些操作。
执行 hexo init 时,hexo-cli 会在指定目录生成 Hexo 工程文件所需要的目录,如 scaffoldsdraftspublic 等目录、.gitignoredb.json_config.yml 等文件,并生成依赖列表 package.json。然后会根据 package.json 安装 Hexo 自身、安装基本插件和其它依赖如 markdown 解析器、主题语言解析器、页面生成器等。然后就是 clone 主题到 theme/landscape 目录下,Hexo 初始化过程结束。

所以,根据之前改造 Hexo 的工程文件实现 CI 持续集成的经验,我们会发现之前生成目录到生成依赖列表 package.json 这些文件都是可以直接从 Repo 中拉下来直接用的。

因为 hexo initinstall.js 过程不能被介入,所以我们只能绕过 hexo init

我在本地执行完 hexo init,在初始化好了的 Hexo 工程文件目录下执行 git init,分别推送到 Github 和 OSChina 的公共 Repo 中。
所以,现在 hexo init 将会被下述指令替代:

git clone https://git.oschina.net/neoFelhz/hexokit.gitnpm install

现在我把所有步骤写进一个 shell 中,用户只需要在 Git Bash 中执行下述指令即可快速完成 Hexo 的全部安装:

curl http://git.oschina.net/neoFelhz/hexokit/raw/master/install.sh | sh

这个脚本中包含了了以下指令:

npm config set registry https://registry.npm.taobao.orgnpm install hexo-cli -ggit clone https://git.oschina.net/neoFelhz/hexokit.gitrm install.shcd hexokitnpm installnpm config set registry https://registry.npmjs.org/hexo version

这一步将完成 hexo-cli 的安装和初始化一个 Hexo 工程文件的操作。用户只需要安装好 NodeJS 和 Git 后即可在需要安装 Hexo 的目录下执行即可。

HexoKit 项目 Repo 地址:

HexoKit 需要我每月定时在本地执行一次 hexo init,以更新 Repo 中的目录结构和 package.json

neoFelhz's avatar

一场向死而生的征程?——我是这么理解 「Green Android」的

绿色守护作者冯老师提出的「绿色应用公约」对于拯救国内 Android 生态无疑是具有很大意义的。「绿色应用公约」很可能能局部改变国内毒瘤横行的现状。
neoFelhz's avatar

CCMT 收购 SuperSU 以后

大概没有比 SuperSU 声誉更好、认可度最高的软件。无论是移动设备、平板电脑,亦或者机顶盒、智能手表,只要是基于 Android 的设备,大家都会想到使用 Chainfire 的 SuperSU 来接管 Android 系统的 Root 权限。

从 2015.09.29 开始谈起

SuperSU 的作者 Chainfire 在近一年前(2015 年 09 月 29 日)的时候,将 SuperSU 项目移交给了一家叫 Coding Code Mobile Technology LLC 的公司(简称 CCMT)。包括 SuperSU 源码、签名以及 Chainfire 自己的 Google play 开发者账号。xda 上发布了一些有关的声明:Chainfire Makes Important Announcement About SuperSU’s Future

Chainfire 也在 Google+ 发表声明称,将此项目移交给 CCMT 以便让自己更好的去处理别的事情。

Chainfire 指出 CCMT 是一个用于接管 SuperSU 的全新公司。Chainfire 还表示 SuperSU 不会立即发生变化,它仍然是可以免费下载并再发布的(只要不经过修改)。将 SuperSU 移交给 CCMT 后,SuperSU 项目将会有更多的资金和更多的开发者参与,以利于 SuperSU 继续完善功能并更好的运行在众多 Android 设备上。

之后,Chainfire 仍然在继续维护 SuperSU 项目,并在其个人网站 chainfire.eu
上发布。

在 2016 年 09 月 02 日(北京时间)的时候,CCMT 通过 Google Play 商店发布了第一个由 CCMT 基于原 SuperSU 源码进行开发的第一个版本 v2.78。

实际上,截止到本博客发布,Google play 上共发布过两个 CCMT 提供的 SuperSU 版本,一个是 2.73,另一个则是 2.78。

在酷安上,曾经有两次应用被收购引起了轩然大波,一次是 xposed 模块“阻止运行”被 liudongmiao 卖给了上海猎鹰网络的工作室,另一次就是这次 SuperSU 被一家来自中国的公司收购。

博主个人的冷眼旁观

Chainfire 自己也没有构建,CCMT 就自行发布了新版本;

严重怀疑是不是 Chainfire 说的来自纽约州的全新公司,而不是中国控制的空壳公司。
更新 logo 动不动就全球、率先、首发、第一…国产软件就这尿性么…

连 SuperSU 主页都把自己公司名字拼错了(目前已经修改)

目前似乎一切正常

  1. 目前为止没有任何证据表明 CCMT 正在利用 SuperSU 做危害 Android 系统安全的事情。
  2. 并不表明使用了由 CCMT 发布的 SuperSU 以后,系统就变的不再安全。
  3. 获取 root 权限只是 Android 的一种使用方式; root 本身即存在风险。

CCMT 公司是由谁控制的并不重要,如果一家美国公司通过 root 级别植入广告和跟踪工具,它仍然是坏公司。某些营销号和网站总想搞个大新闻,报道一些夸大且危言耸听的东西。恶意软件远比 SuperSU 亦或者 Root 权限本身更可怕。


2017.03.08 更新:CCMT 用 Chainfire 的 Play 帐号发布了一个新的手机管理软件 AppMaster,用户体验后说该应用在获取了 root 权限后会自动重启并把自己转成 priv-app 应用。

有网友认为这并不是 Chainfire 的一贯风格,所以在 xda 上询问 Chainfire,答复如下:

SuperSU 被收购以后,也并没有太多兼容性、功能性的改动。我自己已经在用 MagiskSU,以后会发生什么,也只能 Wait and see 罢了。


2017.05.26 再度更新:

嗯,SuperSU 最终还是开始作恶了。还是同样老套的“统计和信息采集”的理由,增加不必要的权限,如定位权限。

在这里我顺便挂一个大言不惭的人。说真的,我还以为他只是跟我过不去呢。要不是在酷安我和他有过过节,我还真的以为他是 CCMT 请来的水军。


对了,至于大家关心的、这个中国公司是否可靠的问题,可以参考前文。是的,这是一个曾经把自己官网页脚公司的英文名字的单词都拼错过的公司。我想,没必要再对这家公司做更多评价了。

neoFelhz's avatar

魅族系统截图被附上全屏二维码水印,其中包含设备信息·转载

特殊注明:本文著作权和解释权由简书作者 Pandaria 所有,原作者保留一切权利 ,本博客仅在接受授权后予以完整转载,并无二次演绎。 本文不受本博客 CC BY-NC-SA 3.0 Unported 协议的限制


本人在使用魅族手机 (原生 Flyme 系统) 的过程中,发现偶尔在一些网站上发布自己的手机截图后,图片会出现奇怪的色块。同时,其他魅族手机发布的截图中,也有类似的情况 ( 为保护隐私,本文所有二维码主体部分使用白色色块遮挡,可从四角的二维码定位点判断出这确实是二维码):

起初我以为这只是图片在上传过程中发生的压缩导致的一些画质损失,但最近在某消息的提醒下发现,实际上图片上的色块并不是画质损失导致的,而是图片实实在在的被打上 全屏二维码水印 ,将以上的图片进行调色处理后,二维码的图像变得明显( 具体的还原步骤在文末):

反色 之后,它就是一个实实在在的二维码了:

识别结果是(为保护隐私,本文字符串中部分字符用「*」号代替):

#192#168#0#115#,460013*****8248#A10ABN****3H#m1metal

稍加分析,可以容易的判断出:

  • 前四串字符是 IP 地址,这里是一个内网 IP
  • 第五串字符是 IMSI 码,类似 IMEI,用于标识 SIM 卡
  • 第六串字符是魅族设备的序列号
  • 最后一串字符是魅族设备的型号
  • 关于 IMSI

我对于 IMSI 也是知之甚少,这里将我通过搜索引擎的来的结果列于下方(不保证准确):

  • IMSI 与 手机号码 没有必然的对应关系
  • IMSI 在到达运营商的交换机才可知道与 手机号码 相应的对应关系
  • 可能 存在通过 IMSI 得到地域位置的算法

另外,在探索过程中,在魅族社区找到了这样一张图:

经过同样的步骤还原之后,得到了这样一张二维码:

识别结果是:

#---#---#---#---#460011*****2453#95AQACQ****M7#MX6#

结果完全类似,只是由于可能是断网截图,IP 信息被留空了。
那么问题就来了,这种现象到底是不是个例呢?

不是,它是完全可以被复现的。

复现的方法非常简单,只要截图的背景颜色较深,就会出现二维码水印。而浅色背景的截图则不会出现二维码。

注:以下测试基于本人自己的手机

  • 机型:魅族 PRO 6
  • 固件版本:Flyme 6.0.2.0A
  • 这是截至本文发布,魅族官网上 PRO 6 的稳定版固件的最新版本:


下面是我在 JuiceSSH 中截图以后得到的图片:

在手机上打开,肉眼几乎看不出上面有二维码(但还是能看见),而在电脑上打开,由于图片解码库不同的缘故,可能导致完全看不到二维码,但是通过在网站上发布,经过服务端的压缩之后,二维码变得明显:

同样的步骤将二维码还原:

识别的结果:

#---#---#---#---#460023*****9130,460009*****0563#80QBC***JFY#PRO6#

由于我的手机是双卡,所以 IMSI 也有两个。经过在 OSBuild 这个应用中查看发现,与手机实际的 IMSI 吻合。
而下面是用 fooView 第三方截图获得的图片,没有任何的二维码水印。

还原步骤

  • 使用魅族手机在 JuiceSSH 等背景颜色较深且为纯色的应用内进行系统截图,也可以对上方展示的没有二维码的图进行截图
  • 此时用手机的图库查看图片,仔细看可以看到轻微的二维码
  • 到酷安等发布图片将遭到压缩的网站上发布图片,获取压缩后的图片,如果直接用 Photo Editor 对原图进行还原,可能根本看不到二维码
  • 使用 Photo Editor 调整
    • 打开图片,选择「色阶」,调整上方三个滑块至靠近波峰处,二维码将变得明显,点击右上角的勾保存操作(保存操作这一步下同)
    • 选择「特效」-「自动对比度」,保存
    • 选择「特效」-「负片」,保存
    • 点击右上角的蓝色保存按钮,保存图片到指定的路径
  • 识别你获得的二维码图片

本文只讲述事实,不作过多评价。
只是希望各位不要再用魅族的系统截图。
推荐使用第三方截图。

以下是目前为止与魅族官方人员对话的截图:




直到 2017 年 /5 月 /16 日 为止此版本依旧是魅族官方最新的稳定版。

neoFelhz's avatar

Web 性能优化(3)——探讨 data URI 的性能

业内常会有 Data URI 的利与弊、用与不用的讨论,即使在最有经验的前端开发者眼中,也会形成对 data URI 截然不同的看法。

neoFelhz's avatar

不仅仅只是锦上添花——谈启用 HTTPS 的重要性

HTTPS 早就不是锦上添花的可有可无项,它已经逐渐成为 WEB 服务的标配。——JerryQu

neoFelhz's avatar

如何选择 AOKP 类 ROM 和厂商定制 UI

最近老是被人问及,在厂商提供的原厂 ROM 、AOKP ,和移植的其它 ROM(比如移植的 flyme 和 MIUI),到底应该怎么选择。于是我决定写一写这篇博客,从功能层面和国内用户的行为习惯来讲讲如何选择这几类 ROM。

厂商定制 UI 的特点

厂商在 Android 的基础上修改了很多功能,还有很多界面上的修改,增加了很多功能。比如 MIUI 增加了手机分身、伪基站识别等功能;nubiaUI 增加了应用分身、边缘触控 FiT、Neovision 相机、录屏和长截屏等功能;乐视的 EUI 甚至可以把视频讯息聚合和桌面结合在一起,而一加的氢氧 OS 是国内难得的还用了点 Material Design 的定制 OS(而且现在国内厂商的 UI,普遍都有什么屏幕分屏、长截屏之类的功能)。这些都是作为手机厂商的卖点。毕竟手机是拿来用的,光靠堆高通骁龙 820 还有 6G 运存什么的,真不一定能把手机卖出去(在国内,买 nexus 或者 pixel 的多半为了体验全套谷歌服务的信仰)。
但是说实在的,其中有的功能的确算得上实际。比如在国内,流量不像国外价格那么便宜;比如在国内的骚扰广告电话和骚扰短信要比国外多很多;云云。所以国内定制 UI 一定会加一套完整的手机管家,具备完整的流量计算和自动断网功能(而且为了应对国内的现状增加了结转和闲时功能);骚扰拦截功能,黑名单功能和关键字拦截;针对国内应用的毒瘤现状,纷纷增加了禁止自启、禁止唤醒、自动休眠的功能;云云。

AOKP 的特点

CyanogenMod

现在回来说说 CM 。CM 是基于 AOSP 开发的、开源的定制 Android 项目;CM 开始保留 Android 原生系统的界面风格,做了一些定制,比如内置了 root 、增加了一些有用的功能(比如说 CM 在今年四月份加入了天气功能,并提供了天气接口)。但是这些简单的修改是有限的,CM 基本保留了原生系统完整的风格,没有像国内厂商一样提供这么多功能,什么视频聚合、什么伪基站识别,什么手机管家。CM 并没有像国内的厂商一样做太多定制。

Mokee Open Source Project

当然谈到 AOKP,就不能避开魔趣,这个全世界排名第二的 AOKP 项目。有的人认为魔趣就是抄袭 CM,关于这一点我不想发表太多意见。所有基于 AOSP 开发的 ROM 都长这个样,不能因此就能说明魔趣抄袭 CM ;AICP 、Sudamod 、Slim 、Blisspop 等等一干 AOKP 项目都长这个样。魔趣可以说用了 CM 项目的部分代码,这是无可厚非的,因为 CM 是一项伟大的开源项目,很多东西是绕不开 CM 的;CM 有很多东西值得借鉴,但并不意味着魔趣就是彻头彻尾基于 CM 、进行抄袭;魔趣在不违反开源协定的前提下合并 CM 的源码无可厚非。
魔趣相比 CM 和其它一些 AOKP ,增加了更多基于中国本土化的修改,比如 chormium 内核的羽·浏览器;可以用来有效对付国内毒瘤的宙斯盾系统(这东西是要写进 framework 和 service.jar 里头的);ViPER4Android 蝰蛇音效;更完整的汉化(虽然你可能感觉不到);来去电归属地显示和基本的骚扰拦截功能;服务类短信归档;网速显示;短信验证码智能识别和复制;T9 拼音拨号;等等很多本土化的东西。


所以说,CM 的 ROM 没有那么臃肿;CM 的确会比官方 ROM 要流畅一些;CM 采用原生的 Material Design 风格;但是厂商定制的 ROM 的确会有更多的功能,有的功能你甚至还离不开。

So…

如果你对国内厂商拿来吹嘘和用来营销的一些作为卖点的功能特别感兴趣甚至离不开,那么请千万不要选择 CM 或者魔趣。所以如果你追求这些功能,你最好还是回去去用原厂 UI,而不是奢求有人愿意把某些功能移植会 CM 或者魔趣上面去、对 CM 或者魔趣的设备维护者说什么“有人曾经在 xxx 的 ROM 上成功过”、什么“CM/MK 加上什么功能就完美了”。
如果你对这些功能不感兴趣、或者说相比这些功能你更追求的是简洁和流畅,那么 CM 就是你的最佳选择;如果你希望本土化一些,可以选择魔趣。
如果你只是对现在的 UI 感到厌烦,或者对其它 UI 的界面碰巧感兴趣或者某项功能感兴趣,你可以选择去用 MIUI 或者 flyme,因为这类 ROM 和原厂的 UI 界面相似(国内定制 UI 和国内毒瘤 App 都有一个共性,就是尽量跪舔 iOS 界面),一样针对国人的使用习惯和国内现状做了特别定制。但是是否能够作为日常使用的 ROM ,取决于这个 ROM 的稳定性和各项功能的完备性。

本文仅供参考,实际如何选择,还需要自己亲自体验一番才知道。毕竟你才是用户;毕竟安卓就是拿来折腾的。


2017.03.29 更新

关于不同基于 AOSP 的 Android 开源的 ROM 项目的横向比较,可以参考 这篇文章

kookxiang's avatar

装了一台游戏 PC

来深圳已经有4个多月了,平时手边只有一台公司发的 Macbook Pro,根本不能愉快的游戏

加上之前用树莓派来做 NAS,百兆的网口和 USB 2.0 的速度根本不能满足需求…

所以一开始准备组一个 NAS,本来准备组个 J1900 啥的,结果因为偶尔还想撸撸 World of Warshits,所以干脆还是加钱上了 i3(i3 默秒全)

配置方面的话,用的最辣鸡的 7 代酷睿 i3 7100,默频高达 3.9G,简直就是 excited 啊!
主板方面自然是选得 B250 芯片组,因为个人对技嘉比较有好感,最后选的是 B250M-D3H 这款。一方面由于准备上 Micro-ATX 的机箱,所以只能挑小板;加上之前买的傻多戴 U2417H,最后发现这显示器只有 HDMI 和 DP(含 MiniDP) 两种接口,所以主板方面选了款带 DP / HDMI 输出的先用着。
内存方面在二手东上随便选了个 8G * 2 的套装(结果一直蓝屏,最后发现有一根抽了,联系京东上门换货,不得不说下二手东这个服务…简直了)
机箱的话选了一款铝制的 乔思伯 C3,还有喜闻乐见的大侧透(毕竟主板说他带了灯,感觉不上测透也浪费嘛),这款机箱虽然是 ITX / Micro-ATX 的,却可以使用标准 ATX 电源,这样方便了不少。
电源考虑到加显卡以及带多硬盘的需要,选了安钛克的 Neo ECO 550,毕竟之前也在用,接口够用,关键是不会爆炸。
另外因为主板有 M.2 接口,直接就上了块 256G 的爆炸星 PM961,插到主板上就行,不需要占机箱空间,毕竟现在装机 SSD 还是标配嘛。
最后把树莓派挂的那块 3T 的硬盘接了上去。

用了几个星期之后,偶尔打了把战舰世界,发现即使是低画质帧率也没法看。
唉,没办法,谁叫我们是辣鸡集显呢,于是权衡了下老黄的 1060 和偷电大师 RX 480,最后还是支持了农企,毕竟手头上想玩的游戏比如大光头一直是 N 卡负优化。

最后整机下来大致花了 4500 左右,各类游戏基本最高画质都没啥压力。
目前只发现 GTA 5 好像会掉帧… 谁叫咱是假 4 核呢,把画质调到高来玩咯,CPU 感觉还是不太需要升级……毕竟大部分时间不需要他满负荷。

最后来听一首有毒的歌吧~
< 访问完整版以查看此播放器 >

neoFelhz's avatar

为 Hexo 博客添加评论系统

由于 Hexo 本身已经弃用了 swig 支持,所以本文教程是根据 ejs 语言来写的。如果使用了如 NexT 等基于 swig 的 Hexo 主题,请自行切换。

Hexo 是一款静态博客,所以不像 Wo

neoFelhz's avatar

Disqus 评论加载模式思路分析

Disqus 因为一些显而易见的问题,所以无法在一些 公正、平等、有序 的网络环境直接加载。

为什么要使用 Disqus 而不使用多说,可以阅读我的另一篇博客——《你好 Disqus,再见多说》

现在为了博客的加载速度,你可以看到我博客底部评论区新增加了一个按钮,点击按钮以后才能加载评论。由于这个不主动加载 Disqus 的设计,我博客的 DOM Load 成功减少了 0.4s。这个功能在 hexo-theme-material 主题 1.3.0 时发布。

但是为了解决浏览者看评论的问题,由于 Disqus 的跨域加载限制,在中国国内的互联网环境下加载 Disqus,不得不另辟蹊径。

Disqus 提供了一套完整的 API,可以调用很多类型的数据,比如评论数量、评论内容等等数据。调用地址是 disqus.com/api,这里是 Disqus API 的文档
由于 API 返回的是字符或者 json 文件,所以这时我们就可以通过反代 API 的地址就可以成功地获取到 json 数据。接下来只需要通过 JS 解析 json,转义成列表,展现出来即可。

对于指定页面加载指定评论,可以在调用 API 时用参数加以限制。Disqus 的 shortname 和文章标识符可以不需要动态生成,用 Hexo 的函数和 ejs 调用即可。例如通过 <%= theme.comment.shortname %> 可以调用主题配置文件里的 Disqus Shortname,用 <%- page.path %> 获取当前页面的标识。

以下就是你可以获取到评论列表 json 的地址。

https://YOUR.DOMAIN/api/3.0/threads/list.json?forum=" + YOUR DISQUS SHORTNAME + "&thread=ident:" + "<%- page.path %>" + "&api_key= YOUR API KEY"

那么,什么时候用评论浏览模式,什么时候加载 Disqus,我们需要做一个判断。可以判断 Disqus 下的一些特定元素能不能加载(比如那个加载动画),一旦加载超时了,就切换到评论浏览模式。当然为了避免误判,我们可以保留那个按钮,做好切换功能。

当然,Disqus 的 API 的功能非常完善,除了可以加载评论列表,还可以回传评论。屈哥(前端大菊苣)的博客 的 Disqus 评论就可以支持本地评论,然后服务器异步回传给 Disqus。

neoFelhz's avatar

从 Material 主题学习开源项目管理的一点技巧

我是我博客用的 Material 主题的 collaborater 之一。hexo-theme-material 现在在 Github,即将成为 Hexo 上 star 数前三的主题。
现在我把我从参与这个主题里学到的开源项目的管理技巧分享出来给大家作为参考。

neoFelhz's avatar

是时候离开了——我眼中的酷安

酷安曾经是一个很 Geek 的地方——至少过去是这样子的。酷安一开始就没有考虑做单纯的应用下载市场。
本来酷安在我眼里是一个大家可以自由交流的地方。大家都是高质量的 Android 玩家,人人都有两把刷子;用户可以和开发者自由互动,酷友可以和管理层相互玩笑,大家一起交流心得或者有 dalao 出来普及知识。。。

而如今呢?

一知半解的小白不懂装懂,深谙技巧的机油遭到排挤;开发者开始浮躁地追逐名利,在进步和在努力的却已经潜水不见;热心分享的酷友被迫删帖,打包党和病毒开始招摇过市;抄袭蔚然成风还受到庇护,维护开源和版权却遭到批判;当年叱咤风云的酷安大 V 逐渐离开,猖狂的小学生开始涌进酷安;用户对捐赠嗤之以鼻,对公益和慈善不屑一顾;使用盗版和破解版的人高高在上,坚持入正的酷友却遭到攻击;不负责任的开发者装着委屈,拒绝 HTTPS 的开发者傲然表示无所谓;收购神器拿来作恶的公司被打脸,没经历过历练的商业“团队”辱骂用户、主动下架了自己的作品。

这一段概括了我经历过的酷安最近的几件大事,包括 没有密码找回 柯震恶 feemo 等大 V 离开酷安,冰箱的开发者和破解者撕逼后潜水,美化版 QQ 分享被迫全部删帖, 夜之浪子 暂停了他的搬运, 绿色守护 被打包病毒, 妮乎 不遵守开源协议抄袭, 酷安小编 批判维护开源的酷友“过年吃饱了闲的”,几个宣称会黑服务器和抓包的“小学生”给妮哩招黑, 奇葩小超 奇葩云 公益捐款被攻击,xMIUI 拾乐 发生的正版盗版之争, 妮哩萌萌 用明文传输用户名和密码, 一句 的开发者坚持 “HTTPS 无用论”, 阻止运行 猎鹰网络 收购后种种丑态, 的开发团队辱骂用户、最后主动下架。

不记得是阿酷还是小编说过,酷安就像一个社会,社会百态都会出现,所以管理层一直看淡撕逼。是的,酷安的确像一个小的社会。
去过隔壁乐园吗?去过葫芦侠三楼吗?我在那两个里面都逛过一圈。隔壁乐园被自欺欺人的用户和毫无意义的评论填满;葫芦侠三楼被不懂装懂、打包抄袭的猖狂小学生充斥。似乎任何一个社区,最终都会不可避免地要走这个道路,最后堕入深渊,比如现在的知乎和贴吧,比如葫芦侠和手机乐园,比如酷安。
酷安小编说过,“酷安一天产生上万条动态”、“难道酷安需要你们撕逼来拉流量?” 是的,酷安的确不需要;同样的,葫芦侠和乐园它们也都不需要。

不记得是哪位酷友说过,酷安本身没有变,是酷友们变了。然而,酷安的灵魂就在于那足够令酷安自豪的高质量的用户。现在用户和开发者像逃离沉船一样,从酷安流失出去。不知道会不会继续有高质量的用户加入酷友的大家庭,为酷安补充新鲜的血液。

我也无所谓再做所谓的普及和分享了。过去一个月以来我进行了两次清理、累计清理了 1100 多条动态;现在留下来 31 条动态,用来告诉大家,我至少在酷安存在过。

酷安其实在转变,酷安的用户也在转变。有的用户不适合新的酷安,就会离开,大家没必要太放在心上。


联系我的方式并没有改变。你们依旧可以在我的微博、我的博客、MAT BBS 上找得到我;我的 E-Mail、我的 Telegram、我的 QQ 也没有改变。我并不是从此杳无音信、无处可寻。
或许有那么一天,我还会回酷安看看,看看那个改变了我的 2016 年,也改变了我人生方向的那个酷安。

lwl12's avatar

记弃用多说牵扯出来的一堆坑

由于多说近期极不稳定而且开始影响站点加载速度,最终咱还是把多说撤了……这里记录了撤下多说引起的一系列坑以及解决方案=。=
neoFelhz's avatar

为什么安装 Xposed 以后会导致卡顿

经常有人说 Xposed 会带来卡顿的操作体验,甚至会引起掉帧等糟糕的后果。所以我再一次阅读完 Xposed 的文档以后,希望能用 通俗的方式 做一个回答。

Xposed 的工作原理我在 《阻止运行、猎鹰网络、黑域 始末》 一文中介绍 Xposed Moudule 的权限时做了简单介绍。这里我再详细地说一遍:

Xposed 的工作原理是通过替换或劫持 /system/bin/app_process 控制 zygote(而 zygote 孵化了所有应用的进程,可以形象地称之为“进程之母”),使 app_process 在启动过程中加载 Xposed 的重要部分 XposedBridge.jar,这一段 Java 包含了所有的劫持方法,从而完成对 Zygote 进程及其创建的 Dalvik 虚拟机 的劫持,Xposed 在开机的时候利用 XposedBridge.jar 完成在原 Function 执行的前后加上自定义代码的操作,从而完成所有的 Hook Functions。

在 Android L 时,Xposed 是通过劫持 app_process 来达到 hook 的目的。到了 Android M,谷歌再一次加强了系统安全性,加强了对系统底层(主要是框架 framework)的封装。所以为了实现 hook,就不得不修改 ART(Android Run Time,Android 虚拟机执行进程的方式),从而对 app_process 提供接口。这就是为什么当时 Android L 和 M 的 Xposed 憋了老久才放出来的原因。当然这一次 Android N 的 Xposed 迟迟不出来原因主要是系统安全性的增强和由于系统分区加固而可能需要另辟蹊径 Systemless 的缘故。

说了这么多,还没有说 hook 是什么东西。hook,钩子的意思。那么这个钩子拿来钩什么东西?(反正不是鱼)实际上,钩子钩的是资源,进程调用的资源。让系统本来从 APP 中读取的资源重定向到第三方的模块,这样就实现了在不修改 APP 的情况下实现了对系统资源、APP 资源的替换!从 Zygote 产生出进程开始就已经完成了劫持。这里就和模块有关了。Xposed 提供了一系列钩子,这些钩子就是接口。开发 Xposed 模块的开发者只需要找到需要替换的资源、框架,用 Xposed 的钩子实现替换即可。

为什么钩子可以实现这个?因为 APK 在运行时会进入虚拟机(Dalvik 或者 ART),然而你在虚拟机里面劫持了原本的 Java API,制作了一个新的可供操作的 API,当然可以实现资源替换、字节码替换了。

那么 Xposed 到底消耗不消耗系统的性能?

Android L 以后,Xposed 会在标准的运行 zygote 进程的基础上制作一个新的 带有 Xpsed API 的 运行环境。所以在没有用到 Xposed 的地方,原来怎么运行的程序依然按原来的方式运行。Xposed 只有在应用启动时会根据钩子执行一些替换工作。这部分执行得是非常快的,所以你是不会意识到应用启动速度的差别的,而且这部分占用的内存是很少的。这就是为什么一些改动需要重启才能生效的原因了。所以说,单纯刷入 Xposed,是并不会引起系统卡顿的。

那么为什么 Xposed 会使用户觉得卡顿了呢?当 hook 没有启用时,系统是几乎无影响的。但是你一旦安装了模块以后,hook 开始发挥作用,然后开始替换系统资源为模块自己的代码(排除流氓终结者、核心破解、XPrivacy 这类仅仅篡改了返回值的模块),比如重力工具箱要 hook 系统 Framework 和 SystemUI 的资源。而且,重力工具箱要修改的地方要更底层一些,这样才能实现不重启实时完成切换切换并生效(XnubiaUI 模块,相当于 nubiaUI 上的重力工具箱,也是对 nubiaUI 的功能、界面进行调整的 Xposed 模块,它就没有做实时生效)。在这样的设计中,相当于一次要启用大量钩子随时调用,那么在 UI 层面就有大量改动需要用到钩子。于是在这些调用中,执行速度受到了一些影响。


总结:单单安装 Xposed 是不会引起卡顿的,影响运行速度的并不是完全在于模块多少。是否影响卡顿取决于模块的功能本身,越需要经常 hook 替换资源的模块、需要替换大量资源的模块、hook 越接近系统底层的模块,最容易拖慢运行速度。此外,模块的功能实现设计、代码写得是否优雅等,都会影响到运行速度。此外,在目前富余的性能配置面前,Xposed 带来的系统卡顿固然不可忽略,但是一般人感觉是不会太明显的。更何况,在国内 BAT 毒瘤滥用广播接收器、毒瘤后台服务面前,我们还是使用 Xposed 模块来镇压毒瘤显得更为合适——不然造成的卡顿不是 Xposed Hook 所能够比拟的。

neoFelhz's avatar

你好 Disqus,再见多说

多说又双叒叕爆炸了!——这是我看到 多说评论系统故障(9900015),请联系客服人员 报错信息时的想法。

终于,多说关闭了。

多说

多说是国内一款常见的社会化评论系统,常用于给没有自带评论服务的如 Hexo、Jeykll、MediaWiki 等提供评论服务,或者是为自带评论服务的如 WordPress、Typecho 等提供社会化评论服务。多说最大的优点可提供 QQ、微博、人人网、开心网、豆瓣、谷歌等一干社交媒体账号的登陆服务。但是作为国内一大评论系统,多说还是有许多不足:

  • 多说默认的样式实在太 $^[[email protected]#(&^9{ . . .
  • 多说的垃圾评论拦截功能形同虚设,广告、色情评论实在泛滥
  • 一段时间以来多说的服务很不稳定,经常崩坏
  • 多说已经停止开发,最后一次更新停步于 2016 年 5 月
  • 社交媒体的头像不支持 HTTPS(虽然这个锅应该归 BAT 毒瘤背)

虽然多说头像 HTTPS 可以用七牛或者 PHP 反代得以实现,但是毕竟是多说一大黑点。

Disqus

如果说国内有一家独大的评论系统多说,那么国外对应的就是 Disqus。与多说单纯仅提供评论服务不同,Disqus 提供一套完整的社区服务和推广功能(或许这是 Disqus 没有像多说一样面临困境的最大原因)。但是 Disqus 也有它的不足:

  • Disqus 与多说不同,并不支持自定义样式(但是说实话,Disqus 的样式比多说的默认样式不知道高到哪里去了)
  • Disqus 不建议游客参加评论——Disqus 会引导游客注册 Disqus 账户,除非评论者勾选I'd rather post as a guest
  • Disqus 仅提供 Facebook、Twitter 等国外社交媒体的社会化登陆方式
  • 由于 The Girl Friend Wall 的存在,Disqus 在国内 开放、自由、有序 的网络环境下是不能访问的。

duoshuo2Disqus

尽管多说有丰富的国内社交登陆方式以及无访问障碍,但是 Disqus 服务毕竟稳定可靠(没办法,洋大人的东西确实是好),而且有一整套完善的垃圾评论屏蔽功能(不会像多说一样极其容易被垃圾评论攻陷。而且国内也没有针对 Disqus 设计的垃圾评论机器人),所以我依旧决定迁移到 Disqus。
这里我直接用了现成的轮子 duoshuo-migrator 转换的。这个 Python 程序可以把多说导出的备份文件转换成 Disqus 支持的 WXR 格式。具体使用方法在项目的 README 里写的很清楚了。
不过对之前评论过的小伙伴们表示很遗憾,你们的头像都没了. . .

neoFelhz's avatar

拨开云雾见天明——解析酷安新出现的微信盗号木马

一日,某不安好心者在酷安的 Xposed 模块 “App Setting” 的评论区发布了一条评论——“APP Setting 专业版”。一位用户下载使用后中招——微信密码泄露,账户被盗刷。

neoFelhz's avatar

Goodbye 2016

怎么说呢,过去的这一年发生了很多事情,无论是好事还是坏事。我摘出那些对我很重要的事情吧,也许其中一些甚至改变了我的人生。


对我来说今年最重要事情的是莫过于我拥有了自己的个人网站和自己的独立博客,从此我有了一个可以写属于我自己的文字的地方。
同时借助这个机会认识了不少技术 dalao 和菊苣。比如我博客这个主题的作者 Viosey;建站方面给了我很多建议和帮助的 guozixi蠢黑通行;等等等等。

不得不承认因为这个我学会了很多,比如我因此学了如何 正确地 使用 Git 和 Github,还简单自学了一点点的 php 和 ejs,甚至还为 Material 主题的开发做了一点微小的贡献。

另一个重要的事件就是我来到了酷安。
不得不承认酷安的确像是一个社交平台而不是纯粹的应用市场。在这里可以和独立的个人开发者面对面平等谈话,也可以和其它折腾的 Android 爱好者交换心得,可以和酷安的小编们和开发团队 PY 交易 打情骂俏 友好交流,也可以发现很多深藏不露的 dalao。不得不承认,来酷安以后我的玩机水平和知识大有增长,获得了很多 Android 的资源,认识了很多搞机的 酷安基佬 酷友们,学会了如何更加彻底的对付 BAT 毒瘤。
我是 2016 年初来的酷安,也分享了一些自己的玩机技巧和资源,如今也把自己培养成了一个酷安小 V(500 出头的粉丝数,以及一堆活跃的、互粉的 酷安基佬 酷友们;仰望那些千粉的 dalao 中~)。

对我而言还有两件重要的事情,一件是我认识了网易云音乐(当初可能是为了找歌而且网易云的曲库比较完整吧),于是我没有像现在这样喜欢听音乐。。。音乐的确会引起人的共鸣,也是一个人与人交流的契机,而网易云和酷安一样都很看重社交。
还有就是我成为了中文 VOCALOID 的粉丝,自从听了那首《风中飞散的回忆》以后,就再也离不开中文 VOCALOID 了,从此我的网易云的每日推荐中就只剩下中 V 和纯音乐了。

还有就是有了一个自己微博(当初是我还在做 ROM 时用来和机油交流的,然后在微博上也认识了搞 Android 开发的菊苣们)。虽然渣浪微博吃枣药丸,但渣浪也好歹是一大社交媒体吧。现在在微博上也有了 500 粉丝,也能经常和一堆 dalao 们谈笑风生。


突然就变成碎碎念了。。。不论怎么说,我希望我的新的一年更好吧。

neoFelhz's avatar

A Fork in the Road — CM's last blog

Cyanogenmod 在他们的官网发布了最后一篇博客 A Fork in the Road 后,Cyanogenmod 官网和博客域名的 DNS 解析就被停了。

neoFelhz's avatar

Interactive 调速器有关参数分析

Interactive是目前常用的一种 CPU 调速器,其特点是 CPU 频率是根据负载实现交互式反应。但是与ondemandconserative不同的是,Interactive拥有一些不同的参数配置方式。

neoFelhz's avatar

用 Flow.CI 让 Hexo 持续集成

Flow.CI 是一个由著名移动应用公测平台 Fir.im 推出的持续集成(CI)的 saas 服务平台,感觉就是中国的 Travis.CI,作用是把你 Github 或者 Coding 上的代码拉过来,通过容器技术自动化完成代码的构建、测试、交付和部署。整个对 Flow.CI 使用下来的感受就是简洁和美观,配置方便,速度很快。

虽然内测阶段我没有拿到邀请码,但是我至少参加了公测。目前 Flow.CI 依然在公测,所以依旧免费 公测早就结束了,现在要付费了。
跟 Daocloud 的代码构建相比,Flow.CI 是更纯粹的持续集成 / 部署平台。

基本思路

  • 关闭 Daocloud 持续集成功能
  • 配置 Flow.CI 持续集成
  • 增加触发器
  • 在本地提交 Hexo 主项目修改的 git commit 进行测试。

准备工作

如果之前用的是 Daocloud 的持续集成服务,首先是禁用 Daocloud 的持续集成,在 Daocloud 的控制台关掉持续集成。
如果以后再也不用 Daocloud 了,那么建议你把 daocloud.ymldockerfile两个文件删除。虽然不删除也不影响部署,但是这两个配置文件并没有起任何作用。

创建持续集成项目

这一步很简单,按照 Flow.CI 控制台里面的按钮顺着点“创建项目”-> 选择 CODING 代码托管库 -> 选择你的用户 -> 选择你的项目。完成!

这时 CODING 里面的项目会有两处变化:

  • 新增了 Flow.CI 的 webhook
  • 新增了项目下的部署公钥(只读)

创建并设置工作流


接下来点击“创建你的第一个工作流”,开始设置部署流程。
由于 Hexo 的所需环境是 Node.js,所以选择 Node.js,版本选择最新的 6.6.0。

接下来就会进入到工作流定义界面。

触发器

触发器自然是选择对所有分支的 Push、对所有的 Tag 进行匹配。当然你也可以设置每天定时运行。

初始化

保持默认即可,初始环境变量(Flow.CI 提供)和 Node.js 的组件版本等信息。

Git 仓库克隆

保持默认即可,拉取你的仓库。

缓存

保持默认即可,使用缓存可以大大加快下一次部署的速度。

安装

保持默认即可。使用 npm install 指令安装依赖项,而安装的依赖项基于你仓库中的 package.json

自定义脚本

在左侧的工作流定义的“安装”与“测试”之间的 + 号,添加一个节点“自定义脚本”

我们的脚本要执行的有:

  • Hexo 命令行的安装
  • Hexo 静态站点的生成和部署

在这个节点输入以下脚本:

# 安装 Hexo 命令行工具flow_cmd "npm install hexo-cli -g" --echo# 准备并安装私钥flow_cmd "cp .daocloud/id_rsa ." --echoflow_cmd "chmod 600 ./id_rsa" --echoflow_cmd "eval $(ssh-agent)" --echoflow_cmd "ssh-add ./id_rsa" --echo# 执行 Hexo 生成和发布flow_cmd "hexo clean" --echoflow_cmd "hexo g" --echoflow_cmd "hexo d" --echo

测试

在右上角把这个节点删除。我们不需要执行 npm test

完成后

如果你打算让 Flow.CI 每次部署成功后都给你发邮件,可以在这里设置。默认会给你的注册时用的邮箱发邮件。

手动测试

回到构建列表,点击手动构建,选择你的分支开始构建,之后会看到整个工作流的执行过程和日志信息(绿色为成功,蓝色为正在执行,灰色为等待,红色为停止或失败)。
然后写一篇博客(庆祝一下你配置了 Flow.CI 嘛),然后用 git commitgit push 推送到你的仓库,看一下你的 Flow.CI 是否开始了自动运行。

小结

本文介绍了从 Daocloud 进行持续集成 / 部署改造为 Flow.CI 进行集成 / 部署的过程,今后的使用和之前的方式一样,向仓库提交 push 就可以触发自动部署。
和 Daocloud 的代码构建相比,Flow.CI 的优点如下:

  • 更简单、直观的方式,更容易理解(但是并不像配置一个 yml 那样 Geek,对吧?)
  • 更加丰富的触发方式(比如支持正则表达式匹配 commit 信息)其实这个优势并不明显
  • 方便地配置环境(而不需要像 Daocloud 一样,需要先生成一个带着 node.js 和 hexo 的 image,用来搭建一个 docker 作为运行环境)
  • 控制台界面比 Daocloud 要漂亮得多(美,才是驱动开发的第一生产力!)
neoFelhz's avatar

使用 DaoCloud 让 Hexo 持续集成

用 Hexo 搭建好博客,使用起来算方便,而且静态页面使用起来很方便,但是每次还要在安装了 Hexo 环境的机器上才能写文章和发布。能不能在任何地方只要新增或修改了 post 就自动生成并部署 hexo 呢?

实现思路

  • 用 CODING 开源社区对 Hexo 项目的源码进行管理(master 分支,要配置好 Hexo 部署信息)
  • 在 Daocloud 上进行 Hexo 环境的构建
  • Daocloud 通过持续集成功能自动生成静态页面
  • 通过 FtpSync 插件上传到我的虚拟空间

需要的东西

  • Hexo——静态页面生成器
  • CODING.NET——中国版 Github,可以拥有免费无限私有项目。
  • Daocloud——中国版 Docker hub,而且还能持续集成。

开始配置

首先自然是根据 Hexo 的官方文档对 Hexo 进行基本的配置。然后是创建一个 私有仓库 把 Hexo 文件夹 push 到你建好的私有仓库中。

通过 master 构建 Hexo 基础运行环境镜像

国内貌似也没找到什么合适的、支持 Coding 的 CI 平台,最后我找到了 Daocloud。Daocloud 可以根据 dockerfile 自动构建 Docker 私有镜像并同时进行持续集成的能力。所以可以把 Hexo 及其运行环境(node.js)打包成一个镜像。

  1. 编写 DockerFile。
#DockerfileFROM node:slimMAINTAINER 你的用户名 你的邮箱# 安装 git、ssh 等基本工具RUN apt-get update && apt-get install -y git ssh-client ca-certificates --no-install-recommends && rm -r /var/lib/apt/lists/*# 设置时区,不知道为什么?RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata# 只安装 Hexo 命令行工具,其他依赖项根据项目 package.json 在持续集成过程中安装RUN npm install hexo-cli -gEXPOSE 4000
  1. 在 Daocloud 的控制面板内的代码构建选项卡内,选择“创建新项目”
    • 输入你的应用名
    • 设置代码源的地方绑定你的 Coding 或 Github,并绑定你建立好的 Repository。
    • 开启持续集成
    • 执行环境设在国外(The GirlFriend Wall 越来越高了,有时连 npm 都执行不了)

  • 镜像选择发布在“镜像仓库”中(这个镜像仓库是私有的)

通过 DaoCloud.yml 定义流程

#Daocloud.ymlimage: daocloud.io/< 你的用户名 >/< 你的应用名 >:latest  #使用已经在上一步创建好的 Hexo 基础环境镜像(并不包括博客项目源码)install: - npm installbefore_script:script: - hexo clean - hexo g - hexo d

yml 当中有一段 before_script,这个是用户自定义脚本。如果说你是在用 Github
或者 Coding 的 Pages 服务,需要把生成的静态页面 push 到你的 Repository 中,你就需要用 SSH 使 Daocloud 和 Repository 连接。配置 SSH 的具体用法见文章最后附录。

在 install 过程中才进行了 npm install,并没有在镜像构建时进行依赖项安装,这是因为依赖项安装过程根据不同用户的 Hexo 的配置和安装的功能不同而不同(package.json中记录的不仅仅是 Hexo 依赖项,还有用户装了的插件),并没有通用性,而且本身它就属于 build 过程,尽管花费时间稍长(平均耗时 90 秒),但是这样更科学。

接下来是对 Daocloud 进行配置。

  • 在设置选项卡中设置用 daocloud.yml 定义流程。
  • 镜像构建中两个勾都选上。

  • 触发规则按照如图所示的定义。

大功告成

之后写文章发布就是使用 git commit 而不是 hexo ghexo d了。只要提交以后,持续集成平台就会自动生成静态网页并发布。

附录

关于 daocloud.yml

Daocloud 如今已经开始用 daocloud YAML 2.0 定义流程了(1.0 版本的 YAML 于 9 月份停用了), 然而本篇博客中的依然是 YAML 1.0,所以请自行按照网页提示进行 YAML 升级。

HexoAutoBuildScript 项目

本文提到的有关的 dockerfile 和 daocloud.yml(包括 1.0 和 2.0)开源在 Github 上,并包括更加详细的使用教程

neoFelhz's avatar

莱卡回家

11 月 3 日是个特别的日子。1957 年 11 月 3 日,前苏联发射了 Sputnik-2 号卫星,这是第二颗进入地球轨道的人造卫星,也是人类发射的第一颗载有活物的卫星。消息发布后,西方世界一片哗然,在美国小得可怜的首枚人造卫星发射之前,苏联的举动彻底夯实了其航天第一强国的地位。美国中情局对此作了大量分析,纠结于苏联卫星究竟是否带了活物之间。在确信苏联发射了活狗,原已令西方震惊,但这只狗的结局,更成为后来数十年的科学悬案。
那只随 Sputnik-2 升空的三岁流浪雌性混血萨摩耶犬名叫莱卡。作为第一只进入太空的地球生物,莱卡名垂青史,但它的结局却着实悲惨。从一开始,苏联人就没打算让它回来。10 月 4 日苏联发射首枚人造卫星后一星期后,赫鲁晓夫就建议再次发射更为复杂的卫星,作为伟大十月革命 40 周年献礼,这意味着工程技术人员只有 3 周时间来设计和制造新的火箭及卫星。这次苏联决定发射生物上天。
一切为了进度, Sputnik-2 使用了 Sputnik-1 的部分备件,为了最大限度提高载荷能力,火箭的部分设备甚至也被拆除。科罗廖夫的助手鲍里斯·切尔托克在回忆中这样写道,“一切火箭技术开发的传统都被抛弃,第二颗卫星的开发根本未经详细设计,或者说根本没有设计。”卫星的大部分部件都是赶工制造的,工程师们甚至被派到工厂协助工人赶工,许多部件甚至省略了蓝图环节。紧张的工期甚至不允许工程师设计出可靠的生命保障系统,更不消说为莱卡铺就一条回家的路。

发射升空过程中,监测系统显示莱卡的心率达到了每分钟 260 次,比平时高 3 倍,呼吸频率也超出正常水平 4~5 倍,但顽强的莱卡还是活了下来,成功进入轨道。入轨后,载荷舱头锥成功分离,但有些部件却分离失败。造成的一个恶劣后果就是,热控制系统无法正常工作。此外,一些隔热材料被撕裂,舱内温度很快升至 40 度以上。据信在死于焦躁和高热之前,莱卡顶多活了两天,西方人甚至认为只有几个小时,根本不像苏联人宣布的那样长。莱卡用自己的生命告诉人类科学家,通过合理的防护措施,人类能够在太空环境下生存。这个代价对人类而言不大,但对莱卡而言不小。
莱卡的悲惨结局,固然可以归结为当时尚不成熟的返回卫星技术,但更为重要的原因,是美苏当时心急火燎的太空竞赛,而竞赛背后,是东西方阵营意识形态的激烈冲突。但无论如何,我们起码可以给莱卡更有尊严的死亡方式,一支安乐死制剂就足以实现。遗憾的是,1957 年 11 月 3 日的那次发射,这些都没有被详尽计划。
每每看到关于莱卡的记述,我都会对身边动物平添几分敬意,提醒自己善待它们。为了人类的文明征程,它们已经付出了太多,我们不能与此同时再让他们成为我们野蛮举止的牺牲。
莱卡,回家吧。

kookxiang's avatar

战舰世界 自动签到

其实这个坑已经挖了很久了…

最早挖坑的时候主要是为了这个活动的自动签到,然而现在这个所谓永久活动也结束了…

最早用 Go 实现了验证码的自动识别,这回跟着 dalao 用 python 重写了一遍,然后修改了下验证码的学习算法,让获得的样本更准确(现在验证码识别率居然近似到 100% 了)

因为 python 的脚本改起来比较容易,如果有新活动的话加个配置就可以实现,目前主要签到的是陆海双雄的活动,等新活动出来加就是了

研究了下傻逼空中网的接口,现在签到的时候会自动检测是否已签到

用到了 PIL 来读取图片像素,然后用 requests 包发请求

来听歌吧~
< 访问完整版以查看此播放器 >

neoFelhz's avatar

制服火龙——为骁龙 810 降温

“高通骁龙 810 是我们的一款失败的产品”——高通工程师

kookxiang's avatar

贴吧签到助手 Go 使用教程

https://github.com/kookxiang/Tieba_sign-Go

kookxiang's avatar

动手生产一个超级精简版的手机 QQ(Android 限定)

手机 QQ 越来越慢怎么办?
轻聊版、国际版功能不全怎么办?

通过这个脚本,可以轻松精简 Android QQ,仅保留基础的聊天相关功能。

使用方法:

  • 传输到手机中
  • 用 root 权限执行

PS:详细步骤请见注释
PSS:脚本需要 Root 权限
PSSS:不用 Root 权限也能进行部分精简(无法操作 data 分区),如有需要自行修改脚本执行即可

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

在这停顿

脚本地址:(请自备梯子)

kookxiang's avatar

当 贴吧签到助手 遇上 Go 语言

在贴吧签到助手正式出炉的 3 年后的这个夏天
在开发停止 2 年后的今天
终于有了一次重大更新

花了 2 天的时间,重写了相关代码
主要是针对 PHP 7.0 的兼容处理,使代码能在 PHP 7.0 下运行

其次,把签到部分改用 Go 语言实现,多线程签到实测高峰期 CPU 占用率约 0.3%,内存占用 4MB
可以大大减少签到对服务器资源的消耗,可以与其他服务同时部署

由于 3 年间百度登录接口变化,原有登录接口已被废弃无法使用,故本次重写了 BDUSS 的 Chrome 获取扩展
可以通过 https://api.ikk.me/reborn/proxy.htm 页面向扩展请求获取 Cookie

另外由于签到部分(Go)已经实现和主程序的分离,现在可以实现签到端与网页端分开部署。
个人建议将数据库放在签到端保障系统稳定,网页端通过远程连接到数据库进行管理操作。

目前新版正在进行封闭测试,两位数的用户可以在 2 分钟内完成所有用户签到
现在正在考虑进行更多用户的测试,如果我认识你,相信你已经收到邀请码了,如果没有,可以私下找我联系

New:加入 Telegram 群,不定期发送邀请

最后惯例送上歌曲一首
< 访问完整版以查看此播放器 >

kookxiang's avatar

备忘:中国路由表 mini版

原本的 CHNROUTE 量太大了,导入都要导半天,所以弄了个精简版,试试看效果。

至于这份路由表有什么用,我也不知道啊~

0.0.0.0/7
14.0.0.0/8
27.0.0.0/8
36.0.0.0/8
39.0.0.0/8
40.72.0.0/15
40.125.128.0/17
40.126.64.0/18
42.0.0.0/7
45.64.0.0/13
45.96.0.0/11
45.224.0.0/11
47.92.0.0/14
47.96.0.0/11
49.0.0.0/8
52.80.0.0/14
54.222.0.0/15
58.0.0.0/7
60.0.0.0/7
91.232.0.0/13
101.0.0.0/8
102.0.0.0/7
106.0.0.0/8
110.0.0.0/7
112.0.0.0/4
137.58.0.0/15
139.0.0.0/12
139.128.0.0/15
139.148.0.0/15
139.152.0.0/13
139.170.0.0/16
139.176.0.0/16
139.183.0.0/16
139.186.0.0/16
139.188.0.0/14
139.192.0.0/11
139.224.0.0/16
139.226.0.0/15
140.75.0.0/16
140.143.0.0/16
140.205.0.0/16
140.206.0.0/15
140.210.0.0/16
140.224.0.0/16
140.237.0.0/16
140.240.0.0/16
140.243.0.0/16
140.246.0.0/16
140.249.0.0/16
140.250.0.0/16
140.255.0.0/16
144.0.0.0/15
144.6.0.0/15
144.12.0.0/16
144.48.0.0/16
144.52.0.0/14
144.122.0.0/15
144.255.0.0/16
146.196.0.0/16
150.0.0.0/10
150.115.0.0/16
150.121.0.0/16
150.122.0.0/16
150.128.0.0/15
150.138.0.0/15
150.223.0.0/16
150.242.0.0/16
150.254.0.0/15
152.104.0.0/13
153.0.0.0/15
153.3.0.0/16
153.34.0.0/15
153.36.0.0/15
153.96.0.0/14
153.100.0.0/15
153.118.0.0/15
157.0.0.0/12
157.16.0.0/14
157.61.0.0/16
157.112.0.0/13
157.122.0.0/16
157.148.0.0/16
157.156.0.0/14
157.255.0.0/16
159.226.0.0/16
160.16.0.0/13
160.202.0.0/18
160.202.128.0/17
160.236.0.0/14
161.207.0.0/16
162.105.0.0/16
163.0.0.0/15
163.44.0.0/14
163.48.0.0/12
163.125.0.0/16
163.136.0.0/13
163.177.0.0/16
163.178.0.0/15
163.204.0.0/16
166.110.0.0/15
167.139.0.0/16
167.189.0.0/16
167.220.240.0/21
168.160.0.0/16
170.179.0.0/16
171.0.0.0/9
171.208.0.0/12
175.0.0.0/8
180.0.0.0/6
192.124.154.0/23
192.140.128.0/17
192.188.168.0/22
202.0.0.0/7
210.0.0.0/7
218.0.0.0/7
220.0.0.0/6

via these people and places