Hello SylphGear, Hello SylphPhoto, Hello World !

打开Eclipse看了眼写下SylphGear第一行代码的日期 “Created on 2014年9月12日”,
又看了看完成她的时间,不禁感叹,挖坑不易且挖且珍惜……

那天Wordpress又升了个大版本,弄得我VPS的 LNAMPP 架构很不正常,还有那阵子老是有人狂扫我的站,凤凰卷的VPS又不给力,搞得我超想把WP这玩意儿换掉。
可是对其他所谓的轻量级Blog系统又一点都不感兴趣,那阵子流行在Github上放静态Blog,但是纯静态的系统还是太笨拙,没有独立的VPS支撑制约很大, 而且github和disqus不挂代理老早就访问不顺了。

最近,我说今年这时候,Wordpress又是一个版本更新,然后我发现一个超蛋疼的问题,WP把我评论模块的Emoji代码也弄坏了。
原本的“豆丁”表情符号没法用,所有的表情会被换成WP内嵌的,而且还是一个叫 w.org 的网站链接过来的图片,最蛋疼的是,你不翻墙所有的Emoji资源都是404!

于是我用grep狂扫了一遍Wordpress的代码,发现确实有些函数变动,我想能不能在WP Theme的钩子里面把这些该死的新函数给换掉,然后发现没法用钩子。
于是再一想,把那关键的几行代码也换掉呢?
于是开始直接改Wordpress的源码,结果发现要改的地方越来越多,这呢玛还能用?
最后只能加两个钩子把WP的表情功能注销掉了,Emoji还能用,只不过会退化成颜文字……

距离我写下第一个WP主题iMucid,已经六年过去,WP越来越臃肿,开发起来也越来越复杂。
我需要一个轻量小巧的,性能非常好又不能占太多资源,重要的是我想怎么艹她就怎么艹她,换各种姿势都可以 的 Blog系统。
于是才想起曾经信誓旦旦要给自己写一整套 独立Web 系统的Project。

可是给项目叫什么名字好呢,一时间才发现当年英语老师死的早,
翻字典翻股沟,终于找到了这个单词—— Sylph(蜂鸟),
但光叫 Sylph 也太单薄了点,蜂鸟小巧顽强,但是不太坚韧,于是整个下午我都在想给项目叫什么名字好,
“坚韧耐磨”,Gear(齿轮)不就是这个含义么,就叫她 SylphGear 吧,翻译为 “蜂鸟的齿轮”!
(注:Sylph 也被翻译成 “精灵”,所以叫她 “精灵的齿轮” 也不错 ^_^)

于是那天下午(一年前)我写下了 SylphGear 的第一行代码,然后一直放置Play到现在,最近实在受不了Wordpress,加上工作也闲的蛋疼,
但是鷀酱最近身体不太好,上班的时候没事写两行,也就周末有点时间专心写她,断断续续的 Sylph系列 整个写完都差不多一个月了。
自从书生到社畜,尤其是作为一个程序猿,每天都想着给自己写一点东西,可是朝10晚7,两趟地铁一趟公交(现在离家最后3.8公里我骑单车比较快),回家就一个字——累!
不管是身体还是精神,早已无力继续写代码了,所以比起技术和能力,能够坚持下去才是最重要的。

那么,为什么会有这么强烈的愿望,一定要给自己写一点东西呢?

我早年的时候读过一篇文章,那篇文章叫《请重新认识你作为程序员的价值》:

  作为一个程序员,你需要认识到,你有无价的技能需要你去驾驭。投资者们早就知道这些,他们用成捆成捆的现金让你们为他开发出将来有一天能够赚钱的东西。
  我知道很多优秀的程序员数十年都是在帮助别人实现知识产权上的财富,但却只花很少的时间用在开发自己的软件上。领工资很容易,你很容易满足于个人的这点成就,但当你把自己放在对这些软件的知识产权的背景下时,很多程序员的口袋都是空空如也。
  当我回首这十几年,我看到有大量的财富来来去去,而最终剩下来的只有我在业余时间为自己开发的软件。我在自己的产权领域投入时间和精力,而这些我投入的时间和精力所产生的价值突然间开始膨胀。

其实就如古话所说的那样,“好木匠没有一把好椅子”。

遍身绮罗者 不是养蚕人。


还是聊聊技术吧,Sylph系列 目前分两大块: SylphGear 和 SylphPhoto

SylphGear 又分为四小块: sylphgear, sylphworker, sylphwriter, sylphvisor

sylphgear 是Blog系统的主体,就是你现在看到的这个,基于 Python Tornado框架 和 MongoDB 构建,除此外没有任何第三方服务依赖,是一个纯异步的高性能实现。

作为异步系统的 sylphgear, CPU和IO就显得非常珍贵了,所以为了让 sylphgear 运行不受阻碍,便剥离出了 sylphworker 这个相对独立的子系统。

sylphworker 是我用纯Py写的一个单独运行的worker(工人进程),负责处理 耗时耗cpu 的任务,比如发邮件啊(目前的主要工作),更新cache啊……

sylphgear 会将任务打包成 job 送到一个队列,然后 sylphworker 负责从队列取出 job 然后完成它。

只不过 sylphgear 和 sylphworker 通过一个隐性的队列连接在一起,这个队列的实现非常轻量,实际上也就是我为 Sylph系统 实现了一个非常简单的消息系统。

既然有了Blog系统,还需要发布工具啊,SylphGear 没有后台(一开始就不打算有),其实 SylphGear 也有后台,但是只提供API不提供浏览器界面。

sylphwriter 就是用来管理Blog系统的,也是我用纯Py写的Blog后台管理工具,作为一个多年的Linux用户,敲命令已经成了习惯和效率,比起用 Wordpress 后台的那个编辑器(发文章前我都会先把文章粘贴到gedit里面,免得等点下Publish按钮那一刻服务器挂啦,WP挂啦,神盾又在抽风啦……然后只能哭了)。

所以怎么给 sylphgear 发布文章呢,先建立一个 article文件夹,文件夹里用markdown写好内容,然后执行命令:

sylphwriter "path to article directory"

就会把文章推送到线上去,以后更新了文章只要用 sylphwriter 同步一下就可以了,这样线上服务器发布了文章,本地也有原始的文档备份。

sylphvisor 是一个守护组件,方便线上的 sylphgear/sylphworker 启动和停止,如图:

Blog系统是有了,还差一个很重要的组件啊,Blog的重点是内容,好文章里面总少不了图片,还差一个图床!

SylphPhoto 也分为两小块:sylphphoto, sylphvisor

sylphphoto 是 SylphPhoto 系统的主体,线上页面见 SylphPhoto

SylphPhoto 是 Sylph系列 第二个相对独立的主系统,基于 Python Bottle框架 构建(本来想用 Flask 的,但是工作上用 Flask 写了些子系统后,一个很直观的感觉—— Flask 就是 解耦后的Django,也罢也罢),

虽然 SylphPhoto 作为相册,但是无需数据库支持,她会自动扫描文件夹,自动归类为相册展现出来。

以前用 Wordpress 的时候,用的一个叫 MG2 的,由 PHP 编写的相册系统 MG2官网

其实很大程度上是用来展示图片的,至于图片上传,折腾来折腾去,我觉得还不如用 scp 命令直接送到VPS上简单粗暴有效。 而且由于 LNAMPP 架构,还得单独配置下这玩意儿(虽然本来就没什么卵用)……

SylphPhoto 就是用来代替 MG2 作为整个 Sylph系列 图床支持的,当然也支持其他的CMS系统调用,比如 SylphPhoto 目前就为 SylphGear 和 Wordpress 同时提供相册服务。

所以,以后也会添加通过 sylphwriter 直接从命令行向 SylphPhoto 推送图片的接口支持。

sylphvisor 也是一个守护模块,专门用来管理线上的 sylphphoto 的启动和停止,如图:

说太多有点乱,还是来张图吧,目前的整体架构图:

旧Blog依旧在,只不过换了一个域名,所以目前我依旧在维护的站点有这些:

Today(新Blog):
Today.Brilliant.Run
Brilliant.Run

Yesterday(旧Blog):
Yesterday.Brilliant.Run

Photo(相册):
IMG.Brilliant.Run

Code(代码托管):
Code.Brilliant.Run

GHS(GAE反代):
GHS.Brilliant.Run
Cloud.Brilliant.Run
Mail.Brilliant.Run

最大的变化是新旧Blog的更替和相册系统的更换,
旧博客依旧在维护,所有的帖子依旧还能评论只是不再更新文章了,
那个古老的 MG2 相册系统已经被 SylphPhoto 替代,
Code(代码托管)是自建的 Git+SVN 服务,弄着玩的所以保持不变,
GHS是用来纪念 GoogleAppEngine 的所以也没有变化。

对了 RSS 一直用 FeedBurn 烧录的所以保持不变:
http://feeds2.feedburner.com/Mucid

然后,以下两个 RSS 地址也是可用的:
http://feeds.feedburner.com/Mucid
http://feedproxy.feedburner.com/Mucid

终于赶在中秋前把新系统上线了,各位有时间帮忙测一下 Bug,如果能找到 XSS/SQL 之类的注入漏洞就真是太感谢了!(虽然已经检查了主要的数据入口)

Sylph系统 目前勉强能跑,但是完成度还不算高,很多模块都没能开发完,路漫漫其修远~

SNS还是太零碎,是时候拾起放置已久的Blog了,越是这样的年代就越需要静下心思考问题。


最近VPS又被淦了一大批,Blog的访问速度依旧比较慢,不嫌弃的话挂个代理吧,如果是被盾了请报告一声,感觉这台VPS也快完蛋了……

最后,感谢一路走来的各位博友,

晚安,献上午夜的祝福!

Recent Comments
羽毛
April 13, 2016 at 12:16 PM
工人进程,耗 CPU ,还有更新 cache 那里的空格好混乱
Mucid
April 14, 2016 at 12:01 PM
@羽毛, 人工断词!
nomaka
October 25, 2015 at 22:25 PM
这博主是谁 看着好眼熟
Mucid
October 26, 2015 at 03:05 AM
@nomaka, 是鹚酱!
lingyired
October 14, 2015 at 02:41 AM
以前的内容呢
Mucid
October 15, 2015 at 12:32 PM
@lingyired, 移到 yesterday.brilliant.run 了啊
朵未
October 14, 2015 at 01:04 AM
最近多说出问题,我去掉了多说,才发现经过几次更新原来的表情没法用了。后来折腾了几个小时,总算把表情弄回来了。 你自己写博客程序牛啊,完善后发布出来给大伙用用。哈哈~
Mucid
October 15, 2015 at 12:34 PM
@朵未, 是不是很清爽哈哈
LouisHan
October 09, 2015 at 04:05 AM
真是好多年不见了啊
Mucid
October 15, 2015 at 12:33 PM
@LouisHan, 乃都修成正果了!
LouisHan
October 20, 2015 at 00:36 AM
@Mucid, 你穿越了吧
GDBGJJCJ
October 08, 2015 at 04:34 AM
支持一下!嘻嘻
ysjxsb
October 08, 2015 at 04:31 AM
逛逛。。。
Angel
September 30, 2015 at 07:11 AM
来看看楼主,response header显示用tornado框架写的博客程序?测试下<img src="javascript:alert('test')" />
Angel
September 30, 2015 at 07:28 AM
@Angel, 邮件评论看一下...
Mucid
September 30, 2015 at 09:48 AM
@Angel, 想注入的话估计有点难度\(^o^)/~
Angel
October 03, 2015 at 08:46 AM
@Mucid, 发现回复文字anchor描述有误:不是"Replay/CancelReplay",应该是"Reply/CancelReply"
Mucid
October 05, 2015 at 03:46 AM
@Angel, All bug fix~
Mucid
October 05, 2015 at 05:41 AM
@Angel, 测试邮件请无视~ 貌似有评论不完整问题, 区块1,区块2,区块3,区块4!
Mucid
October 05, 2015 at 05:53 AM
@Mucid, All bug fix~ Fuck,这bug真难修!
YongQi
September 25, 2015 at 07:56 AM
小鹚的自建blog,牛!围观一下。。
Mucid
September 28, 2015 at 00:52 AM
@YongQi, 大家都是自建的啦,只不过这是新blog哈哈
公子
September 23, 2015 at 22:02 PM
大牛现在都自己写框架玩了。。。。nb
Mucid
September 28, 2015 at 00:52 AM
@公子, 公哥最近在干些啥嘛=w=
Leave a Reply