最近一些折腾的感悟。

个人博客那些事

其实我从很早的时候就开始了个人博客网站的搭建,最初得益于 github.io 域名的开放。总的来说,我搭建博客的历史主要分为三个阶段。

第一阶段

第一阶段属于简单至上主义。这个时期使用 Jekyll 作为主要的静态博客生成引擎,可以方便地使用 Markdown 来进行写作,并且这也是 Github Pages 官方支持的。

最初是使用了一个简单的模板,后来随着需求日益增加,比如需要标签、目录、侧边栏等功能,于是又转投了另一个主题。

第二阶段

由于在第一阶段中日益增长的定制需求和静态博客的限制矛盾,这个时期开始了一段折腾的造轮子历程。在这个阶段,我用 Python (Django) 写了一个完整博客系统,命名为 berserk (因为当时喜欢听阿姆)。该博客支持以下功能:

  • 支持 Markdown 渲染,文章目录、代码语法高亮、自适应文章布局
  • 支持文章分类、标签,以及这些属性的数据库管理
  • 支持页面访问统计、评论
  • 支持后台管理 (基于定制的Django-Admin)
  • 支持在后台使用类似 VIM 的键盘映射来编写文章
  • 支持真实后台管理页面的隐藏以及虚假后台页面的蜜罐和告警 (没错)

此外因为当时工作接触了一些新潮前端概念,还尝试将一套前后端分离的模式融入到系统中。学习 ReactJS 并折腾了一段时间后发现和 Django 原本的模板系统格格不入,然后就又去掉了。

这个博客系统一直缝缝补补并使用了很一段时间,充满了各种奇怪的前后端 tricks。期间也遇到过各种问题,比如整天被乌克兰的机器人在评论区发广告,于是又加入了人机验证,诸如此类。……直到有一天发现这一切和我的初衷(写博客)似乎没什么直接关系,于是又怀念起了以前用 Jekyll 的那段开心时光。

第三阶段

在自建博客前后端被搞的焦头烂额之后,我又回到了 Jekyll 的怀抱。其实是在自建博客期间看到了许多优秀的 Jekyll 主题完全可以满足我的要求,所以才最终回归。并且在内心暗暗下决心: 再也不折腾了

不过还是小小折腾了一下,在此期间对一个小众的主题进行了一些简单的定制和优化。这个阶段算是返璞归真,没有了后端的琐事,可以简单地对主题模板进行修改。基于对 Jekyll 模板的了解,这些事情算是驾轻就熟,可以说对博客页面的折腾已经到头了。

这个系统也一直使用了较长的时间,一切都挺满意,除了头顶的几片乌云:

  1. 博客访问统计使用的是不算子,服务器在国外,而且数据不可控;
  2. 网页常规同步加载,在图片等资源多的时候会感觉速度很慢;
  3. Jekyll 使用 Ruby,安装繁琐,构建速度极慢;

第3点的依赖问题可以通过 bundle 或者直接使用 docker 来解决,但是编译构建的速度着实堪忧,比如才几十篇文章,在服务器上构建就需要长达 15秒 的时间:

$ docker run -it --rm -v $PWD:/srv/jekyll -p 4000:4000 jekyll/jekyll jekyll serve -s /srv/jekyll
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux-musl]
Configuration file: /srv/jekyll/_config.ymlSource: /srv/jekyllDestination: /srv/jekyll/_siteIncremental build: disabled. Enable with --incrementalGenerating...done in 15.28 seconds.Auto-regeneration: enabled for '/srv/jekyll'Server address: http://0.0.0.0:4000/Server running... press ctrl-c to stop.

所以,我又开始折腾了。……但是这次没有忘记初衷,而是选择了 Hugo 加一个比较活跃的主题,因为我不想在前端的修改上花费时间,也不想花太多时间去研究新的模板语法(不过最终还是提了pull request)。

总之,我从 Jekyll 迁移到了 Hugo。迁移过程不算太顺利,因为二者对 Markdown 的元数据理解不同,而且整站的路径也不一样,但通过编写迁移脚本可算实现了。

新的博客可以直接通过 https://evilpan.com 访问。

感悟

其实改来改去,对于最终的阅读者(如果有的话)并不会产生太大影响。就我个人而言,反而不太喜欢那些花里胡哨的博客主题,比如背景弄一些酷炫的 canvas 搞得电脑风扇直转。从阅读者的角度来说,(博客)网站只需要做到:

  1. 良好的阅读体验,包括字体、图片、颜色,别搞些绿底黄字的非人间配色;
  2. 文章长的话最好有目录,方便阅读;
  3. 链接的持久性,不要让阅读者在百度或者其他地方索引过来发现是 404;
  4. RSS (当然也可以不提供,需要的人可以用 feed43 之类的爬虫,但是没必要);

这些一般的博客引擎都能满足,实在没有瞎折腾的必要。而对于博客本身,其实最重要的只有一个 —— 文章质量!其他的都是扯谈,如果是内容农场那就另当别论。

关于 credit

很多人在自建博客时习惯把底部的 credit 去掉,比如 Power by Hugo / Theme By XXX 这种信息。我以前也会这样,一方面是为了简洁,另一方面也是希望能有一些“个性”,生怕宝藏主题被别人抄去了导致烂大街;或者就是干脆想让别人认为这是自己写出来的。

其实大可不必。首先你不是一个前端工程师,所以前端技能并不是别人想要从你身上学习的点。反过来说,如果你是前端,那么自己写一套主题那也应该是常规操作,投机取巧并不能让你自己有所受益;其次,留下主题信息可以让更多看到的人去使用是件好事,获得更多关注后就可能潜在引入更多的开源贡献,最终能让你自己获得更好的使用体验;最后,credit 是对原作者劳动成果的一个起码尊重,谁也不想自己辛苦开发或者写的东西被白嫖党滥用。

在看许多国外的 slides 或者文章时候经常看到对于图片、截图如果不是自己画的都会有明显说明来源何处,国内经常就是拿来就用,当然俺也一样,不过已经在改了。

关于时间

年轻的时候喜欢做加法,奉行 艺多不压身 的准则,对于各种不同领域都喜欢去探索和学习,现在也还是会有很多冲动。但是随着任务列表的逐渐变长,里面的很多项目很可能会一直沉睡在收藏夹中。到了一定的阶段,就需要学会管住自己的双手,把时间用在刀刃上。也就是说,需要学会给人生做减法了。

除了前面提到的博客系统,我还做过很多浪费时间的事情,比如自己写 XSS 盲注后台、DNS服务器(SSRF)、GPS钓鱼系统、写各种命令行工具去实现本可以在网页做到的功能。……

各种命令行工具,有查单词的:

$ dictionary.py restrain
##########################
### Youdao Translation ###
##########################
restrain: 抑制
us:[rɪˈstreɪn], uk:[rɪˈstreɪn]
=== basic ===
vt. 抑制,控制;约束;制止
=== web ===
restrain: 阻止,抑制,限制
Ratio restrain: 比率制动
restrain test: 栓固试验
$ abbr.py PUA
[+] found 25 results
+------+----------------------------------------+-----------------------------------+------+
| name |                  desc                  |               domain              | rate |
+------+----------------------------------------+-----------------------------------+------+
| PUA  |    Pandemic Unemployment Assistance    |    Miscellaneous / Unclassified   |  5   |
| PUA  |   Potentially Unwanted Applications    |    Miscellaneous / Unclassified   |  4   |
| PUA  |    Potentially Unwanted Application    |        Computing / Software       |  4   |
| PUA  |             Pick Up Artist             |    Community / Performing Arts    |  3   |
| PUA  |            Public Use Area             |    Miscellaneous / Unclassified   |  2   |
| PUA  |         Puas, Papua New Guinea         |      Regional / Airport Codes     |  2   |
| PUA  |            Private Use Area            |             Community             |  2   |
| PUA  |          Personal User Agent           |    Miscellaneous / Unclassified   |  2   |
| PUA  | Professional Underwriters Agency, Inc. |    Business / Companies & Firms   |  1   |
| PUA  |    Professional Underwriters Agency    |        Business / Agencies        |  1   |
| PUA  |           Present under Arms           |    Miscellaneous / Unclassified   |  1   |
| PUA  |       Premium Upgrade Assurance        |    Miscellaneous / Unclassified   |  1   |
| PUA  |    Potentialy Unwanted Application     |    Miscellaneous / Unclassified   |  1   |
| PUA  |       Potentially Unwanted Apps        |    Miscellaneous / Unclassified   |  1   |
| PUA  |      Possession and Use Agreement      |    Miscellaneous / Unclassified   |  1   |
| PUA  |      Portland Urologic Associates      |    Business / Companies & Firms   |  1   |
| PUA  |            Plasma Uric Acid            |   Academic & Science / Chemistry  |  1   |
| PUA  |            Pick Up Artists             |          Community / Art          |  1   |
| PUA  |    Pharos University in Alexandria     | Academic & Science / Universities |  1   |
| PUA  |   Peoples University of the Americas   | Academic & Science / Universities |  1   |
| PUA  |      Pediatric Urology Associates      |        Medical / Pediatric        |  1   |
| PUA  |     Payment Undertaking Agreement      |    Miscellaneous / Unclassified   |  1   |
| PUA  |  Partido de Unificación Anticomunista  |     International / Guatemalan    |  1   |
| PUA  |           Paid Up Additions            |    Miscellaneous / Unclassified   |  1   |
| PUA  | Paul University, Awka - Anambra State  |         Academic & Science        |  0   |
+------+----------------------------------------+-----------------------------------+------+

有查股票的:

有查 IP 地址的:

$ iplocate.py --on 1.1.1.1
>>>>>> results for 1.1.1.1 <<<<<<
[*] GeoLite : 澳大利亚(AU) - None
[*] Kn0007  : CLOUDFLARE.COMCLOUDFLARE.COM
[*] DBIP    : OC(Oceania),AU(Australia) New South Wales, Sydney
[*] Tencent : 澳大利亚 code(-1) lnglat(149.1333,-35.2667)
[*] IPIP    : ["CLOUDFLARE.COM","","","",""]

复杂一点的还有代理池管理工具,书签管理工具等等:

有些小工具就是三下五除二就弄好了,但是有些就颇花了些时间。要说有没有必要,其实很多都没必要,想要开车并不表示需要自己造轮子。原型开发的过程还是很有趣的,但是其中有许多项目做完之后也就爽那么一下,然后就很长时间都没用过。

为了避免这种做无用功的尴尬,重要的是管理好自己的想法。对于时不时冒出来的 idea 可以先记录下来,到周末或者某个固定时间再进行排序,评估哪些可以做、需要做,哪些可以借助已有的轮子。站在巨人的肩膀上,而不是盲目追求写代码的快感。

曾经的想法是**“因为我可以做,所以我就去做”**,但重要的是管理好自己的精力和时间。学习也是一样,各种新概念层出不穷,开始学习之前需要先评估这究竟是不是你需要的,而不是因为看起来很热门就去投入。

Be curious , but don’t get drown.

关于白嫖

在迁移博客的时候发现 Chrome 新版本对于 https 站点中的所有 HTTP 资源都拒绝加载了,导致以前七牛 CDN 上的图片都无法显示,而七牛的 HTTPS 流量又是收费的,所以我决定换一个图床。为了找一个新的 HTTPS 免费图床,我翻了很多记录,发现很多免费站点都已经无法访问了,最终是选择使用某个博客平台的图片上传功能,为了批量上传还分析了该平台的验签和加密算法。

虽然最终目标实现了,但我也耗费了大半天的时间。都是传统的白嫖思想在作祟,因为从小习惯了免费。免费的聊天工具,免费的游戏,免费的操作系统,免费的杀毒软件,……这其实完全没有道理。如果一个东西做的很好,但是完全不赚钱,那么开发者是否还会投入那么多精力去维护呢?一腔热情投入开源工作,还要面对各种小白的挑刺以及伸手党的催促,个中滋味只有经历过才能体会到吧。

我们花几百块钱吃一顿饭觉得合情合理,但是花几十块钱购买在线服务或者软件就踌躇不决。但是说到底,白嫖终究不是长久之计。一个免费 CDN 需要在流量和速度上进行限制,一个免费的云服务器不会提供可用性保证,一个免费的图床可能说挂就挂,能在下线前告诉你一声已经仁至义尽了。

白嫖在线的服务需要自己承担稳定性和迁移风险,白嫖本地应用需要忍受广告和推送,这世上本就没有免费的午餐。如果上天能给我个再来一次的机会,我想说:

最近看到一篇新闻感觉很有意思,微信推出看一看小视频等功能,不是因为用户需要,而是面对头条对 用户时间 的蚕食感到不安 —— 用户每天花在微信的时间从 X 小时下降到了 Y 小时,而在头条系产品中投入的时间从 M 小时增加到了 N 小时。第一次对"时间就是金钱"有了别样的认识。

你以为你白嫖赚到了,其实最后被嫖的是你自己。

我TM就是管住不自己这双手啊相关推荐

  1. 做项目、学课程不怕坑多,就怕你认知不够

    近期,一些粉丝找我帮他们鉴别项目真假和学习课程的坑.有些粉丝还和我分享了他们被割韭菜的经历,听完甚为痛心.实际上各种各样的骗术和招数,我在微信公众号上也写过不少,可能大家只是看过瘾罢了,根本就不以为然 ...

  2. 美国国家情报总监手机和个人电邮被黑

    美国国家情报总监詹姆斯·克拉珀的威瑞森My FiOS账户被黑,所有电话均被转接至"自由巴勒斯坦运动".黑客组织名为"有态度的克拉卡"(Crackas With ...

  3. 谨以此篇献给正在迷茫的人生 浅谈网络时代各种骗局

    在这儿呢,我其实是有一些打广告的目的的,嘿嘿,但这是其次,最主要的是想谈下接触推广行业几年以来的一些经验以及感慨!!! 先直奔主题一波,新手微商几大禁忌: 1.酒类行业,白酒不要做,做得话可以做洋酒红 ...

  4. 《论工业社会及其未来》—泰德.卡辛斯基

    中文译文基于1996年中国文史出版社<轰炸文明--发往人类未来的死亡通知单>,原译者王小东 INTRODUCTION 介绍 1. The Industrial Revolution and ...

  5. 机器人被挠脚心_《fm及机器人系列(tk)》专题

    15 2019-02-17 "嘻嘻嘻嘻嘻~现在改了轮到我了~"这回梅并不是报时间,而是发表了自己的进攻宣言,她在溟的身上做了两分多钟,也确实该...[作者空间] 20 2019-0 ...

  6. 简述API HOOK技术及原理

    目录 前言 原始的HOOK技巧(inline HOOK) 最朴实无华的全局HOOK – SysCall_Table HOOK 内核跟踪的利器 - kprobe kprobe的实战-隐藏进程 内核中一些 ...

  7. 健身的基本知识(4)

    拉伸运动 拉伸运动 主动拉伸 被动拉伸 拉伸运动的动作 胸部拉伸 肩部拉伸 肱三头肌拉伸 弓步上肢伸展 蝶式伸展 坐姿大腿后侧拉伸 大腿后侧拉伸 腓肠肌拉伸 拉伸运动 作用:拉伸运动可以使韧带肌肉和关 ...

  8. 大明16帝之:朱厚照

    现在让我们调整一下呼吸,明代三百年中最能闹的一位兄弟终于要出场了. 一 朱祐樘这辈子什么都忙到了,什么都惦记到了,就是漏了他的这个宝贝儿子.朱祐樘命不好,只生了两个儿子,还病死了一个,唯一剩下来的就是 ...

  9. 瑜伽教学法 | <战士三口令>手把手教你精准口令的秘诀!

    今天给大家分享3位老师关于战士三(高位起跑进入,退回下犬)口令,并在『瑜伽教学法』的引导下和大家分析一下,这三个口令的优缺点,以及改善的方法,帮助引发大家对口令的思考,取长补短. 老师A: 所有人来到 ...

最新文章

  1. 创建可重用代码(C++)
  2. Bootstrap(8) 路径分页标签和徽章组件
  3. Base64加密解密算法的C/C++代码实现
  4. 【Classification】分类的进阶
  5. OpenCASCADE:建模算法之隐藏线去除
  6. 近期打算及毕业前要补完的题
  7. springboot---【jdbc】数据库连接池
  8. 【文件处理】——字典写入json文件或TXT文件,读取文件中的字典TypeError: Object of type ‘ndarray‘ is not JSON serializable错误解决方法
  9. 前端学习(1944)vue之电商管理系统电商系统之绘制分类组件的基本结构
  10. OpenCore 的代码结构
  11. 程序员水平自测题:程序员们,想知道你的技术达到了什么水平吗?
  12. mysql 数据备份方案_MySQL常见备份方案
  13. selenium webdriver (6) -- iFrame
  14. tomcat中gzip压缩
  15. 【现代机器人学】基于指数积的机械臂逆运动学
  16. 程序员之道——编程也是一门艺术
  17. matlab计算方差和平均值,matlab求平均值和方差
  18. vue 获取汉字的全拼、简拼、首拼
  19. rar password recover(rar密码恢复工具) v2.0.0.0
  20. js通过base64编码显示图片

热门文章

  1. 记一次apache POI存储word乱码问题
  2. Python(五)文件与IO
  3. PCA | 特征值和特征向量
  4. 第二章--(第四单元)---分区
  5. 1609. 链表的中间结点
  6. sockjs.js?9be2:1609 GET http://192.168.0.121:8080/sockjs-node/info?t=1619326975370 net::ERR_INTERNET
  7. 拉线位移编码器是怎样和PLC接线的,你会了吗?
  8. 【海云捷迅云课堂】vGPU在OpenStack中的应用
  9. 主流图嵌入模型的原理和应用
  10. python安装numpy模块教程_如何在windows机器上安装python 3.6的matplotlib和numpy模块?...