我的创作纪念日

机缘

我写博客的历史,可以追溯到 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

  1. 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
  2. 优质的纪念文章将会获得神秘打赏哦
相关推荐
凯程序猿1号6 分钟前
ChatCut online 剪前端性能排查录屏:瀑布图、长任务与修复复测怎样对齐
程序人生·电脑
迪丽热爱18 分钟前
多媒体应用18-901(补)
学习
政企项目老覃36 分钟前
大模型 Agent 自主任务编排:电商客服地址解析从 12% 失败率到 2.1% 的落地复盘
人工智能·程序人生·算法
政企项目老覃1 小时前
金融转账“幽灵失败“排查实录:从本地消息表到 Seata TCC 的选型与权衡
数据库·程序人生·性能优化·数据分析·系统架构
传奇开心果编程1 小时前
【Rust入门练中学】第4课:函数与所有权入门
开发语言·学习·rust
sunoo-2291 小时前
【ARM嵌入式学习笔记Day5】一文打通GPIO中断全链路:从硬件引脚→GIC→汇编入口→C语言处理
arm开发·笔记·学习·中断·gic·裸机开发
m4Rk_1 小时前
【论文阅读】Agent 记忆机制(76):SEEM——从碎片检索到完整事件重建
论文阅读·人工智能·学习·开源·github
我命由我123452 小时前
Mac 操作系统 - 一些使用记录
运维·windows·学习·系统安全·运维开发·mac·学习方法
千谦阙听2 小时前
【 C++篇】:模板初阶——泛型编程、函数模板与类模板
开发语言·c++·学习·visual studio
imDwAaY2 小时前
消息队列四大核心问题:顺序性、幂等性、可靠性与一致性
学习·kafka·rabbitmq