前言

每到年底总想写点什么来总结一下,今年不一样。从2014年第一篇年终总结开始,年终总结系列博客已经写了10年了,今年不写年终总结,写写对这10年的总结吧。1年时间太少,而10年的时间跨度足以对这一阶段做一个总结。该从哪里写起呢?这磕磕绊绊的十年。

2014年我在跨年夜写下第一篇年终总结,暗戳戳地写下16岁那年《写给十年后的自己的一封信》,如今10年过去了,当我用年龄计算器计算年龄的时候,计算器告诉我1998年的小脑斧已经度过人生的33%。

人这一辈子那么有限,作为一个普通人,也许我穷极一生也不会有什么大的成就可以让外人为我写下一个传记。但是我可以用自己的手记录下我这一生,吃过的苦,犯过的错,爱过的人,在和一些网友聊过之后,我发现我是芸芸众生中的一粒沙,那些自以为的经历其实在陌生的一个环境里也有人同样地经历着。

一段话年度小结

重新翻了之前的博文,大概用一段话对每一年做一个简单的小结。

2014

初中毕业刚上高中,正好是4G网络正式商用,因此买了人生第一部4G手机(TCL P728M),就是这个罪恶的开始奠定了我之后的折腾之旅。免流、刷机、移植ROM,与Android的爱恨情仇正式从这一年开始。

2015

这一年学习Android ROM移植,在当时万物基于MIUI的时代,移植MIUI成了一种乐趣。每当在深夜刷入ROM然后卡在开机logo或者wifi打不开、SIM卡无信号等各种疑难杂症的时候,我暗下决心,以后我要自己做Android硬件,这样就不用为了各种驱动半夜气到睡不着,这也是我后来大学选电子信息工程专业的原因之一吧。

2016

开始接触Linux,搭建了博客,开发属于自己的APP,开了个人淘宝店铺卖起了流量,代买阿里云国际站服务器, 破解M1卡……

2017

高考。高中上课玩了三年手机,成绩稳定班级倒数前5的我高考成绩肯定也好不到哪去。幸运的是这一年的高考题似乎挺难,所以大家考的都不怎么样,对于我这种成绩差的人其实是有利的(手动狗头)。2017年广西高考理科本科分数线318分,我考了311分,又很巧有10分的照顾分,就这么魔幻的超了分数线3分。按理说这个分数是上不了本科的,但我又很幸运的被本科学校录取了,没错,是个三本。

2018

告别Android开发,拥抱微信小程序。注册了新的域名,完成了ICP备案,上线了第一个微信小程序“南泰课表”(后来因为微信认证改名“小泰课表”)并维护至今。

2019

对2019的记忆很模糊,以至于我都不知道用什么语言来描述这一年发生的种种事情,引用原文的一段话吧:

现在的我,也就只是在大学里,做着大多数人应该做的事情,过着大多数人应该过的生活。看来在这21年的生命中,我还是不够坚韧。

我想我是不甘于于平凡的,很小的时候,我就会告诉自己,不要去重复别人做过的事情,因为我是独一无二的(后来才知道原来小孩都会有这样的想法),我有自己的事情去做。现在回想起来,还真的觉得挺可爱的。

在21岁这个尴尬的年级,见识到了太多我这个年纪所拥有不了的东西,而偏偏它们天生就有很大的吸引力!

2020

因为新冠(COVID-19),学校延迟开学,世界像是按了暂停键,忽然之间,一切都慢了下来。新冠疫情是2020的唯一主题,反反复复,时好时坏。我这一年哪里也没去成,老老实实待在家里。在 2020 经历的事情,也许今后很长一段时间都不会再有;于是在 2020 总结的经验,似乎也很难运用于未来。

2021

大学毕业,从大学待了4年的江苏泰州跑到广东中山,从学生阶段过渡到社畜阶段。找工作时在软件和硬件这两个方向之间选择了硬件,现在想起来真想给当时的自己重重的一巴掌!直到写下这篇博客的这一时刻,我仍然认为硬件是很苦逼的岗位。

2022

除了上班就是下班,写不完的硬件测试报告,测不完的芯片,抓不完的波形。挣扎大半年后下定决心辞职跑路,于是在11月11日正式结束苦逼的硬件职业生涯。硬件只适合自己折腾玩自己喜欢的东西,工作就算了。

2023

前半年辞职后一直在家躺着,某一天在YouTube刷到了 Links 法罗群岛 的那期视频,由于网络原因这里贴一个B站的链接:真人版塞尔达!真实世界里的旷野之息!法罗群岛第三集|4K HDR

4K HDR真的很惊艳,我想趁着有时间或许我也可以像Links一样,多出去走走,记录下我看到的一切。于是,在这一年入坑摄影。玩了大概半年,小伙伴们都在上班,自己一个人挺无聊,所以5月份换了一座城市,从中山搬到了珠海,重新沦为一枚社畜。

2024

逛了大半个珠海,拍了一些花花草草、猫猫狗狗,其余时间不是在上班就是在上班的路上。一直在尝试能不能跳出上班这个坑,找一个让自己活得稍微舒适的方式去生活,遗憾的是没成功。

回答2014

后来去成都上大学了吗?

没有。一张图解释原因:

我成为了什么样的大人?

十六七岁时候的憧憬也许充满了变数,但是对于现在的我来说,我正在学习成为一个大人,也还在努力中。

18岁以后的人生仿佛开了加速器,数字拼命地往上增,快到我们还没有真正意识到平凡的价值,便开始冲进人生的现实。于是,曾经被告知会飞黄腾达的我们,被告知是天之骄子的我们,到了真正长大的时候才发现,原来人生,真实很可怕。这是个无解的答案,问题在于我们都不知道是否怎么样才能不那么平凡,又那么顺心顺意。但是,至少我们感受到了现在真实真切的人生,那就是看似工作稳定你也会有职场压力和瓶颈,看似收入可观你也会忙得昏天黑地,看似生活幸福你也会遇到无法与你常在的知心。这就是生活最本质的模样,一地鸡毛但也不是过不下去,因为我们学会了满足。

这个问题留给10年后的我来回答吧。说你呢,十年后的我,36岁的我,是什么原因让我又回来看这篇博客?请好好回答这个问题。

在做什么工作?

关于工作,我想从大学兼职说起。

第一份兼职,是大一的时候和同学一起去快递分拣站,在编织袋写上快递的下一个分拣站城市地址:


到了大四,一周只有一两节课,闲出屁的我又和大学室友一起去KFC兼职。

我依然清楚的记得兼职工资¥18.5/小时,那时候忽然觉得挣钱真难。
每当想买东西的时候我都在心里默念我要干多少个小时兼职才能买得起,直到现在已经形成PTSD了。

大学毕业时,在硬件和软件选择上纠结了很久,在离开学校的前3天,想着写了这么多年代码,也许可以试试硬件。
然后就投了硬件,顺利面试拿到了offer,在2021年7月份,成功从大学生转为打工人。

兜兜转转感觉硬件还是不太适合,于是在2022年10月份,我决定换个方向,然后在11月份离职成功脱坑。

目前,还在嵌入式软件开发摸爬滚打中,成功做到干一行恨一行,行行干破防!

还在写博客吗?

说来惭愧,十年来几乎没怎么写博客,唯一坚持的只有年终总结系列。也许是到年底的一种仪式感吧。博客目前处于半荒废的状态,按现在这样写博客的速度,过不了多久半衰期就可以按年计了,博客又快荒废得长毛了。

不过当初建博客的初衷就是记录自己,很多文章都是尽自己可见的,所以写没写博客应该关系不大吧。

在这里立个flag,未来一定坚持写博客,积极记录生活。

去过什么地方?

该部分仅登录用户可见

十年来我都做了什么?

免流

点击展开

十年里免流对我的影响是最大的,所以就从免流说起吧。

什么是免流?

运营商为了给客户提供方便,提供了一些优惠政策,如:接收彩信、登陆掌厅、登录wap.10086.com等免除流量费以及免收取流量费的其他业务。

运营商的计费系统为了区分用户使用的是免流量业务还是正常访问互联网会把这些免流服务的网址加入到白名单,当计费系统检测到用户访问的是白名单中的网址或接收彩信时就不会进行扣费。

问题就出在检测上了,各运营商、各地区的检测方式都不尽相同,而且并不完善,这就形成了免流的出现和不同的免流模式以及地区的限制。

免流的原理

当用户访问互联网时,会向服务器发送一条请求信息(请求头),这个请求头中包含了网络服务器与用户的所有交互信息如:访问的网址、UA、网络协议、主机(host)、Cookie、来源地址、文件类型等很多信息。计费系统通过检测请求头来分辨用户访问的是不是白名单中的网址或者是接收彩信。但是计费系统检测的是用户发来的请求信息,这条信息是来自于用户的,也就是说通过自定义该信息可以达到欺骗计费检测以达到免流上网的目的。由于我一直使用的是中国移动,所以本篇以中国移动为例。

当时在国内的GPRS网络环境下,用户以cmwap接入点上网的情况居多。cmwap是中国移动的GPRS代理上网,因此在创建连接的时候,必须采用代理的方式进行连接。假设我连接的URL为:http://www.baidu.com/; 在标准代理中,是这样子的:

Conection to 10.0.0.172:80
GET http://www.baidu.com/ HTTP/1.1
Host: www.baidu.com

但是在J2ME(Java ME)中,程序并不能控制到TCP层,因此中国移动定义了一个私有协议字段:X-Online-Host。从移动要求的规范来看,我们只需要这样即可正常进行联网:

Conection to 10.0.0.172:80
GET / HTTP/1.1
Host: 10.0.0.172
X-Online-Host: www.baidu.com

实际上对于程序来说,我们只需要将原来连接的url及http header中的host替换成10.0.0.172,并添加一个http header字段:X-Online-Host的值为原来的host。然后继续采用直连的方式即可正常进行联网。

这样问题就来了,很明显这是一个不标准的代理协议,不标准的地方在于:
GET / HTTP/1.1
因为在标准的代理协议规范中,定义了请求的必须是完整的URI。
这个问题在平常并不会出现,但是当请求的URL比较特殊时,问题就很明显了。
假设我连接的URL为:http://wap.baidu.com/logo.gif?img=http://wap.uc.cn/uc.png
使用X-Online-Host协议的联网:

Conection to 10.0.0.172:80
GET /logo.gif?img=http://wap.uc.cn/uc.png HTTP/1.1
Host: 10.0.0.172
X-Online-Host: wap.baidu.com

这样的请求到达移动网关之后,会被误发至http://wap.baidu.com/uc.png。但是实际上我们想要请求的是http://wap.baidu.com/logo.gif (?之后的表示变量)。
因为,移动网关实际上就是一个HTTP的代理服务器,它对于X-Online-Host协议是这样处理的:
截取请求头中的URL字段:
如果没有http://字段的话,则将该字段作为相对URI,同X-Online-Host字段进行补全;
如果有http://字段的话,则将该字段作为绝对URI,将host替换为X-Online-Host的值。

利用X-Online-Host实现绕过计费系统实现免流存活了很长一段时间,直到移动升级计费系统。
当时的抓包截图:

我的免流史

第一次接触免流是在2013年,那时候智能手机还没有全面普及,我用的应该算半智能机吧,手机里面有Java,可以自己下载jar程序自己安装到手机上。
在刷论坛时无意中发现一款叫做“免流UC浏览器”的软件,出于好奇就下载来看看,用了一段时间发现它居然真的可以免流量上网。当时的我感觉发现了新大陆,不过当时的移动网络还是3G,我用的手机也只支持2G,加载网页都要等很久很久,所以当时手机也就拿来登QQ。一个月30MB流量都用不完的年代免流对我来说似乎没有什么用,所以当时就没有再关注免流这个事情。

直到2014年,中国移动4G正式商用,我买了人生中第一台4G手机(TCL P728M)。2014年,流量贼贵,广西移动1G流量50元,所以当时类似“如果你睡觉时忘了关4G, 一觉醒来你的房子就归移动了。” 这样的段子我觉得也挺有道理的。

下面说说我用过的免流软件。

小枫免流服务器

有一天晚上在某刷机QQ群里下载了一款“小枫免流服务器”的APP,从此正式开启我的免流生涯。当时也没有深究其中的原理,现在看来应该是本地搭建PHP服务器。

almp

将PHP运行环境放到Android系统的system分区,开机后通过shell脚本启动PHP服务器开启本地代理,结合APN接入点设置将请求转发到almp,通过proxy.php修改请求头后实现免流。

当时最常用的做法就是通过卡刷包的形式将文件刷进系统的,刷机包的文件结构:

├─data
│  └─almp
│      └─var
│          ├─log
│          ├─tmp
│          └─www
├─META-INF
│  └─com
│      ├─android
│      └─google
│          └─android
└─system
    ├─app
    ├─etc
    │  ├─init.d
    │  ├─lighttpd
    │  └─php
    └─xbin

不同地区的用户只需要修改proxy.php文件就能实现免流,所以当时为了免流,为了写proxy.php文件,我入坑学习了PHP,以至于后来我在写任何后端程序的时候第一时间想的都是PHP。

almp没有单独的APP,全都是脚本,对很多人来说门槛有点高了。判断免流是否成功的方法就是使用系统自带浏览器进入http://freetest.hu60.cn,如果显示“Free Proxy Enable”那就说明成功了。

samp

“瑶池圣子” 在 “丢丢网”发布samp免流软件,内置彩信免流模式,但是需要登录丢丢网的账号才可以使用,而注册一个丢丢网账号好像是5块钱,鄙人也是花了钱注册了账号。那段时间也是经常在丢丢网上面刷新帖,几乎一有时间就到上面去看看,和各路网友讨论免流模式。后来samp软件被破解,不需要登录账号了,从此丢丢网逐渐走向衰败直至关站。

最开始的版本:

升级更新后被破解的版本:

HaProxy、FMNS

历史的车轮滚滚向前,关于HaProxy、FMNS的相关资料已经找不到了,只剩下几张截图。
HaProxy:


FMNS:

tiny

和almp一样,tiny没有任何用户图形界面,全靠shell命令操作。免流发展到tiny已经接近完美了,tiny以后再也没有出现本地全局代理免流的软件了。从tiny开始,我尝试自己写shell脚本,配合iptables各种规则实现比较完美的免流。也是从这里开始尝试写Android APP,入坑学习java。
第一次写shell脚本:

第一次写Android APP,利用APP执行shell脚本:

openVPN云免

由于前面几种免流方式门槛很高,光获取root权限就挡下很多人,繁琐的操作也不适合普通用户使用,所以利用openVPN搭建代理服务器实现免流的方式出现了。不得不佩服各位大神们的脑洞,openVPN就这样被利用了起来,到这里免流才逐渐被推广,普通用户也可以用上了免流。

嗅到一丝丝商机的我也开始研究起了openVPN,在这里第一次接触云服务器、域名、Linux、集群、负载均衡等。由于VPN相关话题比较敏感,这里就简单写写吧。

当时花了很长时间去各种论坛、贴吧搜索相关的教程后,终于把服务端搭建起了。放一个openVPN的配置文件:

#广东移动8080
# Enables connection to GUI
management /data/data/de.blinkt.openvpn/cache/mgmtsocket unix
management-client
management-query-passwords
management-hold

setenv IV_GUI_VER "de.blinkt.openvpn 0.6.17" 
machine-readable-output
client
verb 4
connect-retry-max 5
connect-retry 5
resolv-retry 60
dev tun

##############免流配置################
http-proxy xk.gx10086.win  8080
http-proxy-option EXT1 VPN 127.0.0.1:443
http-proxy-option EXT1 "X-Online-Host: wap.gd.10086.cn " 
http-proxy-option EXT1 "Host: wap.gd.10086.cn "
remote wap.gd.10086.cn 80 tcp-client
#####################################

auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
...省略证书...
-----END CERTIFICATE-----
</ca>
comp-lzo
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
...省略证书...
-----END OpenVPN Static key V1-----
</tls-auth>
key-direction 1
route-ipv6 ::/0
route 0.0.0.0 0.0.0.0 vpn_gateway
remote-cert-tls server
# Use system proxy setting
management-query-proxy

最开始客户端用的是应用商店下载的“OpenVPN Connect”,操作特别麻烦。后来在GitHub上发现别人已经编译好的APP,顺手下载然后反编译修改部分界面,然后就成了我的了。

该部分仅登录用户可见

当时收了很多代理,所以用户越来越多,为了分流,我又扩张服务器,做了好几个不同的APP。

图片太多,就不放上来了。

直到2017年初,三大运营商相继发布公告开展整治工作。

2017年1月工信部发布《工业和信息化部关于清理规范互联网网络接入服务市场的通知》要求:

未经电信主管部门批准,不得自行建立或租用专线(含虚拟专用网络VPN)等其他信道开展跨境经营活动。基础电信企业向用户出租的国际专线,应集中建立用户档案,向用户明确使用用途仅供其内部办公专用,不得用于连接境内外的数据中心或业务平台开展电信业务经营活动。

紧接着国内云服务器厂商逐渐排查并封杀VPN端口,openvpn免流苟延残喘一小段时间后终于走向灭亡。

2017年我在准备高考,已经没有太多的精力去维护,所以这一年以后就没玩过免流了。

免流后续

2017年中旬左右,三大运营商发布无限流量套餐,加上腾讯的大小王卡,大部分人已经不需要免流了。2017年9月我上大学办了校园卡,流量基本用不完,我的免流经历到这里基本结束。

为什么说是基本结束呢?因为虽然不能免流了,但是免流的原理和思路在以后的生活和工作中依然可以应用,在躲避网络审查方面依然有他的用处。

感觉写了一堆废话,免流就写到这里吧。

刷机

点击展开

也许你已经很久没有ROOT,也许你已经转投iOS阵营。但每一个热爱数码产品的人,一定都记得那段刷机的岁月。

这几年一直在使用iOS,已经好久没有关注刷机相关的内容了。我知道,当初那一群因为刷机而聚在一起的机友,都已经忙于奔波于工作、家庭,刷机已经是青春的记忆之一。我试图给这段刷机岁月寻找一个标志性的“句点”,好像确实没有能想到合适的。

初次刷机

为了修改开机动画,在“移动叔叔”论坛下载了修改开机动画以后的刷机包。

第一次刷机成功后我的兴趣一下子就来了,开始各种折腾,开始逛论坛找适合自己手机刷机包。

乐蛙OS

那时候只要有新的ROM发布,我都要刷进手机看看的,那种手机开机进入一个全新的系统界面的感觉真的太奇妙了。用腻了一个系统UI之后再刷入别的ROM,感觉像换了一台手机。

得知自己的手机型号被乐蛙OS适配的时候,我第一时间报名申请加入乐内测组。

后来乐蛙OS凉了,系统还是有很多的BUG,例如相机卡死、蓝牙不工作等问题十分影响日常使用。比起原生Android的奇丑无比UI,当时乐蛙OS的UI还是很好看的,是可以和MIUI相比的那种。所以当时我并不想放弃乐蛙OS,想着能不能自己修复这些BUG。

当时的我还是太天真,对我这样的小白来说修复这些BUG真的太难太难了,根本无从下手。但是我还是一直在研究ROM移植,直到把我手机刷坏了都没能成功修复。因为一顿神操作之后手机彻底废了,与乐蛙OS缘尽。

ROM移植

时间过得太久了,再回忆这部分内容时竟然不知道从哪里开始写起。写一些我在移植ROM过程中的的一些收获体会,一些经验之谈吧。

Rom移植的方向有 正向 和 逆向 之分:

正向的做法通常就是,找个目标机型的底包,然后把要移植的包的app和framework提取出来替换进去。
这样的优点是改动无需太大,非常快捷;缺点是经常因为一些bin下的程序或者库文件的差异而导致成功率不够高。

逆向的做法是,拿要移植的包作为底包,把目标机型的内核、wifi驱动、传感器库文件、配置文件等替换进去。
这样做要复杂一些,需要准确两个包的差异,知道应该改哪里;
优点是一旦移植成功能最大限度地发挥Rom性能,因为框架、程序与底层的契合度要比正向法好。

ROM移植失败是常事,大部分情况下开机卡logo,根本进不去系统。不同手机的大部分硬件驱动不同,所以在找底包的时候尽量找硬件参数相同或相近的手机ROM。在无数次解包boot.img修改打包再刷进手机,当开机进入系统的那一刻,我可以开心的睡不着!

进入系统只是开始,痛苦的是进入系统之后的各种问题,通常有:

  • 不识别SIM卡,无信号、状态栏显示无服务。
  • 蓝牙打不开、无法配对、蓝牙耳机无声音。
  • WiFi无法打开、搜不到信号、断流。
  • 相机不工作,各种FC,前后摄像头识别相反,视频录像卡死等。
  • 陀螺仪、红外、NFC、距离传感器、光线传感器不工作等。

总之就是各种硬件没法正常工作,然后就要无休止的改内核驱动,反复测试,把人折腾的不行。最可气的是有些问题怎么调都没法解决,让人无限崩溃,我折腾了3年左右吧,弃坑了。

我移植过的ROM

  • 努比亚z11移植“氢OS”
  • 红米Note2移植Flyme5

我记得还有好多机型也有移植过的,比如小米4、酷派大神F2、魅族MX5等,现在已经找不到当时的截图了,挺可惜的,居然没有留下任何痕迹。

结语

在刷机热真正过去之后,没落的不只有当初因刷机而火的论坛,还有刷机精灵、刷机大师这种网站和ROOT、一键刷机工具。对于真正经历过那个时期的人而言,大概就是逝去的青春吧。因为只有在那个时候,不会为工作、生活所困,手机里也没有那么多重要的信息。

不开心了就刷机,用的不舒服了就刷机。刷机其实很简答,刷机的理由其实也很简单,只是有些人不会理解。遗憾的是,生活不能像刷机一样,双清、四清就清除掉所有的烦恼,但仍需要刷机岁月的那般热情去捋平不顺心的点点滴滴。

编程

点击展开


写到这里其实已经没什么耐心继续往下写了,这里简单记录这些年写过的程序。

十年的变化

我的三次生命

十年来虽然没怎么写博客,但博客却给了我三次生命。这里不是说博客救了我两条命,而是指,写博客让我能够把生活过上三遍。

「第一次生命」是自己的。博客里的所有文字皆是我自己的真实经历或者想法思考,这是毫无疑问的。若非想象力超群,怎可能在没有经历和故事的前提下写文字?我不是作家,我必须走过时间的每一寸才能言之有物。

「第二次生命」是来自写博客途中我的回忆,是对我过往经历的重构。为了写出文字,我会专心回忆我当时经历那些事情的时候的时间、地点、人物、事件、思考,以求还原真实。在这个回忆的过程中,我仿佛把很多记忆的碎片又重新梳理开,排成线,结成网,最后蒸馏成文字,这是我对那些或美好或者痛苦的经历的再一次寻觅。

「第三次生命」则是互联网所赋予的。「死亡不是遗忘的终点,被遗忘才是」。文字能在互联网上「永生」,是我写博客的一大的动力。我的故事、我的思想,则通过互联网可以相对「永远」地流传下去,我很庆幸能在过去的那个时间点写下那些故事、想法、见闻。同时我也惋惜,我竟然没有好好记录一些有意义的事情,让我失去了回顾的线索。总之,收获是必然大于失去的。

个人博客就像自己的一个树洞,在记录与表达自己情绪的同时,也许也会收获一些来自陌生人的温暖。

(互联网还是保留一点点隐私吧,下面的内容仅我可见)

关于生活

该部分仅登录用户可见

关于工作

该部分仅登录用户可见

最后修改:2024 年 12 月 31 日,缓存于2025-01-16 16:02:14
看都看了,点个赞吧!