机缘
我写博客的历史,可以追溯到 2004 年,刚上大学不久,当时家里有电脑的人,可能就不是太多的。当年的博客,还是 MSN Space 的时代,跟现在大多数搞博客的同学一样,很快就沉溺在装修博客的喜悦当中,一个皮肤接着一个皮肤的换,在浏览器上尝试各种 js 特效。
分享的内容,也无非都是一些设定方法,js 代码片段,还有就是整天研究 MSN Space 的漏洞,怎么注入新的特效。那时候的 QQ 空间还在 "花园","小屋" 的时代,一看就是特别女孩子的氛围,完全没有写的动力。
后来,接触到了 WordPress,到 2008 年,我正式设立独立博客,开始玩 WordPress,假设独立博客,学习 Linux 运维知识,数据库,PHP 代码,我就是这样子变成了 PHP 程序员。
再后来,跟初恋女友分手,我清空了博客,开始认认真真专注于博客的写作上。说来可笑,从开始写博客,到 5 年之后,才真正专注到写作这件事情上来。从 2008 年开始认真写作,不再是只执迷于搬家,皮肤,插件,SEO等等问题,到现在,坚持博客已经 15 年了。
我的博客已经积累了 400 多篇原创文章。当然大部分不在 CSDN,这里只是我又一个分享的场所。还是以独立博客为主的,blog.charlestang.org,这是我的独立博客,欢迎大家有空去逛逛。
收获
博客,就是这么一个神奇的东西。其实写博客,非要说需要点什么的话,我觉得是坚持。
无论你写多么无聊的东西,一旦可以坚持,经年累月,你必有收获。至于水平,能力什么的,你终究会进步的,不说多么高超,但是终究会进步的。
写博客的人,一定会在最后,变得严肃。 ------ 佚名
如果你像我一样写个很多年,就会懂这句话的意思。你后来会发现,只有严肃才是写作的归宿。你不再喜欢嬉笑怒骂,至少不会是再以这些东西为内核。为了流量那种写作,不能叫写作,只能叫工作、赚钱养家,只有真正严肃起来,为了自己写点东西,才是真正的写作,自己才能感受愉悦。
当你发现了这件事情,你就有了最大的收获。
当然,通过写作,训练思维,让自己记录有价值的事情,提升日常讲话的水平和流利度等等乱七八糟的好处不胜枚举,但此时此刻我觉得都不重要了。
日常
阅读是一座随身携带的避难所。------ 毛姆
那写作就是自己思想的后花园。------ 佚名
十几年下来,时不时写点什么,已经成为一种习惯,对我个人来说毕竟不是什么工作,也不在意什么流量关注度,所以,还是比较随意的。当然,这里在 CSDN 创作来说,还是有点目的的,主要是希望更多人能关注我的开源项目,我希望认认真真写点开源的。这里不插入链接了。
我开源的也是用于博客创作的软件和工具,可见我对这个事情是多么认真,我找了一套解决方案,用于处理博客的问题,但是发现这方案里缺个内容管理。Hexo 是一个静态页面生成器,但是对内容管理和组织方面却弱得很,仿佛就没考虑过用户会大规模,编辑和组织内容。也不考虑用户的整理需求。这点和 WordPress 完全不同。
但是因为抓住一点攻击其余,所以它在静态化,和站点皮肤等方面真的很不错。我不能忍,于是就自己写了一个客户端来帮助博主管理和组织内容。我也意识到,这个时代,还肯沉下心来写点东西,组织内容的人怕是不多了。所以我没有为软件收费而是开源到了 GitHub。
所以,在这边创作,除了真心分享一些自己的所得和知识,也是为了借机推广开源软件。希望大家知道后也不要反感。多谢理解了。
成就
成就什么的是没的,我永远不会为自己的某段代码感到满意。写出来总还是要去搜索最佳实践的。总觉得自己用的不是最优方式。也很追求和执迷于最优方式。
所以,一段代码如果成为自己的一种成就,那是很可悲的。代码在我看来没有什么价值,只是程序员管理复杂度后,不得不呈现的一种记录。也是和机器沟通的手段。怎么能称为成就呢?
不过既然这个活动需要分享一段代码的话,我就分享一段,不能说成就,只能说日常用得比较多:
python
#!/usr/bin/env python3
#coding:utf-8
# dependency: PyYAML 3.13
# the config file should be a YAML file to describe the server
# configurations like this:
# ---
# personal:
# - user@192.168.1.1:22 local-test-machine
# - user@172.16.26.1:22 company-test-machine
# working:
# - user@192.168.1.1:22 local-test-machine
# - user@172.16.26.1:22 company-test-machine
import sys
import os
import re
from yaml import load
from yaml import FullLoader
from functools import reduce
server_config_file = os.path.expanduser("~/server_list/config.yml")
server_config = load(open(server_config_file, 'r'), Loader=FullLoader)
template = "\x1b[0;32;40m%2d) \x1b[0;36;40m%{width}s\x1b[0m@\x1b[0;33;40m%-18s \x1b[1;35;40m#%s\x1b[0m"
def render(servers):
max_width = reduce(max, map(lambda x: len(x[1]), servers))
for c in servers:
print(template.replace('{width}',str(max_width)) % c)
print('')
def section_parse(key, order, servers):
items = []
for svr in server_config[key]:
order += 1
user, host, port, name = re.split(r'[@:\s]\s*', svr)
items += [(order, user, host, name)]
servers += [(user, port, host)]
return items, servers, order
servers = []
line_num = 0;
working, servers, line_num = section_parse('working', line_num, servers)
print("Please select the server you want to access:\n\nFor working:\n")
render(working)
personal, servers, line_num = section_parse('personal', line_num, servers)
print("Personal:\n")
render(personal)
number = 0
while number < 1 or number > len(servers):
try:
number = int(input("Type in the number:>"))
except (EOFError, NameError, SyntaxError, KeyboardInterrupt):
break;
if number >= 1 and number <= len(servers) :
break
if number > 0:
svr = servers[number - 1]
cmd = "ssh -l %s -p %s %s" % svr
print("Now execute command:")
print(cmd)
os.system(cmd)
sys.exit(0)
这也是我开源在 GitHub 上的一个项目里的代码,项目叫 env,主要用于快速将一台 Linux 或者 Mac 的 Shell 初始化成自己习惯并且喜欢的环境。
上述代码是 goto 命令的源码,用 Python 实现,作用是在命令行下,快速连接一台服务器。服务器的 IP 和 用户,密码,通过一个 yml 配置文件列示。放在自己的私有文件夹里。执行命令效果:
跳出来两个服务器列表,输入序号,就可以快速连接过去了。
憧憬
40 岁的人,已经在随时准备失业的边缘了,没什么所谓的职业规划了。创作规划的话,我会陆续在 CSDN 分享我创作开源软件的技术、过程,已经投身开源的方方面,比如 GitHub,比如项目管理,甚至比如英语等等。技术方面就是 Vue,Electron,TypeScript,以及围绕前端项目的一些工具链。
我本身擅长后端开发,架构,也写过客户端,现在想学习 iOS 开发,也可能会分享这方面的各种笔记、观点,学习体会等等。希望大家关注我! 谢谢!
Tips