SpringSeed-极简笔记软件

SpringSeed

前言

已经几个月没有上过OMG! Ubuntu了,今天突然兴起翻了一下,就看到这个优秀的笔记软件.正如作者所说的一样,这个笔记软件简洁,美观,没有一丝累赘的功能,由node-webkit驱动,整个软件本身(不包括nw)才3M.虽然目前只有Ubuntu版本,不过大概在windows下也可以使用,毕竟nw就是为此而生的.此前我也不知道原来有node-webkit这样的东西,查了以后才发现nw实在太优秀了.前端从此可以开发本地软件了,而且相比常规开发而言,更容易做出优秀的界面和交互,这些都是native app难以做到的.(当然,也有缺点,例如下载打包好的deb,几乎都是30M以上,因为需要放一个40M的nw执行文件,下载一个无所谓,但是下载多了以后未免觉得烦)

软件介绍

springseed

其实真不用介绍,这个软件的功能很简单很简单,只要会markdown,这个软件几乎是立刻就能学会的.当然这里的markdown和标准的markdown也不太相同,在目录coffeescript/app.coffee里稍微翻一下就可以发现这个markdown标准是作者自己实现的(虽然说写的和通用的markdown也差不多),而非标准的markdown,所以有的特性无法支持,也有不同的语法,例如 ~~~ , ~~.基本功能都有.代码高亮也需要另外添加.

另外有一个bug,有时直接输入网站地址以后点击不会在浏览器打开页面,而是直接在软件本身就打开了这个网页,此时无法后退回软件界面.只能关掉重开,幸好软件本身是隔一段时间就保存的,不会丢失太多数据.当然这个问题不是软件写的有问题,应该是nw自身的问题,之前使用koala(一个SASS,LESS的预处理器)也有同样的问题.

还有一个比较严重的BUG,如果在登录了dropbox被自动同步以后,退出dropbox,然后继续编辑以写的笔记,隔一段时间再登录dropbox,笔记会被还原到上次被同步的状态.切记切记= =……

dropbox

用markdown的好处就是,做完笔记以后可以直接copy到github pages上,只要稍微注意语法即可.其实,之前还遇到一个非常优秀的软件marboo的,可惜作者不愿意开源,只有mac版,而且UI做的非常的抱歉.另外大概会有人质疑,为什么不用神器evernote,为什么不用国产的wiz.之前都试用过,感觉非常的不好.以前我在windows下的时候常用的软件是MyBase,一款很多年都不更新但是我依然无法抛弃的软件.然后直到去年10月我转投linux以后就开始用cherryTree了.我本身并不太需要多设备多平台同步,因为我写的要么是学习记录,要么是零零碎碎的想法,前者需要的时候我会直接发到github pages上然后通过pocket来让我各个终端可以查看,后者更需要在电脑面前慢慢补完,很多东西是不在电脑前做不了的..其他原因就不详述了.

用markdown的另外一个好处就是,作为前端,在只需要基础的表达的时候完全可以只用markdown的语法来写,但是无法满足需求的时候我可以通过直接编写html和内联样式来达到我想要的效果.由于写了一段时间的css了,现在感觉写代码比所见即所得的编辑器更加有效率和稳定,虽然这样违背了markdown的初衷.

远行厦门

一如既往的先放数据,虽然越来越觉得数据只是虚幻.

7.3 17:00-23:00 87.1km(未计入总里程) 广州-佛山千灯湖-广州大学城

7.4 07:00-24:00 150.7km 广州大学城-惠州郊区

7.5 05:40-25:30 304.3km 惠州郊区-陆丰城区

7.6 09:30-16:00 353.9km 陆丰-惠来东港(下雨&回老家)

7.7 老家蹲

7.8 05:30-17:00 497.9km 东港-汕头澄海

7.9 09:00-22:00 587.3km 澄海-揭阳-金平

7.10 08:30-21:00 718.8km 金平-福建云霄

7.11 06:30-26:00 887.7km 云霄-厦大

7.12 05:40-19:00 931.5km 厦门环岛

7.13 05:50-08:00 953.3km 天河客运站-大学城


全程1040km,耗费11天.不过第一天不算正式开始,只是把同学从佛山接过来而已.当天早上还去公司上班努力把网站写完才走的,完成的时候下午4点30,冲回宿舍收拾了一下就出发佛山了.所以应该算是9天吧.以后大概很难找到一段这么长的时间来挥霍了吧.

当一个人无聊的时候就会想很多东西,尤其是在骑行的过程中,并不是到处都是越野道,也不是到处都是下坡,不可能全程都有翻山越岭的快感.逐渐开始怀疑自己骑行的意义,,不知道为了什么才要出发做骑行旅行.不知道为什么没事就会踩着勇士出门到处晃上几圈.就像只是为了弥补小的时候没有买到自行车,所以将积聚的精力在这短短的时间内全部爆发出来一样.然后当新鲜感过了的时候就开始觉得没有意义了.开始对这项枯燥的运动感觉到麻木,锻炼也好,休闲散心也罢,似乎都不值得这样去做.平时骑一次也要花上几个小时,这次更是十多天的旅程,时间似乎还没有廉价到可以如此挥霍.

骑行结束之后的迷茫也要来的比其他的旅游更加深.骑行最大的痛楚就是当你以为你用毅力征服了全世界,然而回到原本的生活的时候,你发现什么都没有改变,只是骑行那段时间的活该死的被推到回来以后再做.


旅途

第一天

出发的第一天.7月4号.早上6点半的闹钟,7点收拾完成下楼,才发现没带钥匙.不过幸好除此之外大部分东西都戴上了,没带泳裤和泳镜大概是唯一的遗憾.

其实这次的出发很勉强,因为前几天刚刚大病了2场,没错,2场.上上周日的时候开始发烧,而且由于长期熬夜和夜骑导致很严重,那一天睡了大概十六十七个小时,然后周二好了以后继续熬夜和夜骑,上周六又发烧了,周日头痛不止.出发的前一天还在吃布洛芬.不过出发那天总算精神比较好.

由于这是第一次骑行,所以准备了很多东西,用的上的用不上的.导致行李过重,而且一开始只有一条扎带,却有两个包,捆的很辛苦.大概说说这次带了的东西:

出发

1.半指手套一副(其实推荐全指手套,否则骑完回来手指半截黑
2.袖套一对(如果有长袖骑行服或紧身衣,长袖速干衣可以不用袖套
3.头盔
4.手电
5.车后灯3
6.头巾
3(事实证明多带头巾是正确的选择
7.修车工具全套(拆卸工具,补胎工具,气筒
8.短袖3套+长袖1套
9.排插
10.移动电源
11.手机3(一部导航一部打电话一部上网= =……..事实证明打电话真不多,两部足矣
12.拖鞋+基本生活用品(没带洗衣粉是永远的痛,虽然其实可以路边买
13.货架
14.内胎
1
15.保鲜袋
16.袋装零食
17.水壶*2

全部加在一起将近20斤,实在不算轻量,加上勇士原本就三十几斤,整车超过50斤了.第一天走的时候感觉操控起来就略悲剧,不过踩了几个小时也就习惯了.

出发
热
惠州的某塔

第一天很热,走在路上看到远方的路都难以接受.中午在一个很凉爽的公园休息,从12点多休息到4点才重新出发.可想而知,这样还想要按照预订行程骑到目的地就要熬夜了.

事实证明,的确熬夜了,24点的时候才找到地方搭帐篷,在惠州接近惠东的郊区.大概所谓的运气差就是说的我这样的人吧.在晚上11点停下来休息的时候被不知道什么虫子咬了两口,其实当晚还好问题不大,第三天的时候就肿了一大块,连站起来都疼,G+上的变态医生给了不少建议,后来买药擦了以后隔了一段时间才慢慢没有那么痛.医生君还是很好人的.

前往惠州的路上稍微绕了一段远路,没有直接上G324,而是走了博罗县,然后再一次感叹,原来S238并不是最烂的路,博罗那段路才是最烂的,所有的公路都打了洞,但是就是不拆不修,就那样让别人走.晚上吃饭的时候就和同行的人吵架了,出发第一天就不顺利.

第二天

第二天早上5:40看到天亮就醒了.原本的计划是第一天180KM,第二天170KM.然后就可以到我老家了,在老家住一晚+半天再骑120KM去汕头蹭同学家.结果第一天和第二天一共才走了300KM.出乎意料的慢.

第二天,在去鲘门的路上,早上9点就热得发慌.10点钟休息的时候我才决定打电话告诉父母我要骑车去厦门.很自然的,被骂了.先打给老妈,花了十几二十分钟终于说服了她,然后后来她又告诉我爸,我爸打电话过来继续骂,以往都是老爸比较好说服,没想到这次倒转过来.总而言之,那一天接了很多电话,他们陆续打来很多次,让我别骑了,让我回家.当然我没有同意.最后还是说服了他们.老爸出于关心就打电话给了很多亲戚,毕竟作为一个潮汕人,在这一路上满满的亲戚.很可惜我们走的太慢,没有成功到达任何一个亲戚家.早就听闻海陆丰很乱,作为一个潮汕人对此并不了解,还真是丢脸,我妈不断的打电话来和我说一定不要晚上在海陆丰骑车,很容易被抢劫的,不过最后还是决定熬夜骑完海陆丰.事实上,也看到了不少很乱的场景,饭桌上开始打架砸卓碗的夫妇,不良青年飙车党..晚上凌晨1点半才到陆丰,然后又吵架了.

关于吵架的事情就不多说了,一些相关想法后续再说,后来我在给正在准备骑厦门的同学的同学tips的时候就让他一定要和别人签署责任自负书.绝对不要自己承担任何责任,因为这是没有必要负责的东西,作为一个成年人,这些东西是自己的责任,不在于任何人.但是如果没有书面签署的声明,谁也不知道到底是谁的责任.更别以召集人或者负责人这样身份自居,绝对会吃亏的.

雨后

第三天

酒店睡到9点多才起床,早上6点钟老妈打电话过来慰问的时候发现下雨了,所以就没有那么早骑车的打算了,毕竟我没有挡泥板,没有雨罩,没带雨衣,没法骑快.10点钟骑车的时候,从陆丰市区去博美镇的路上,开始下雨,很悲剧的书包没有扎紧,松了以后被车轮磨了几十米,3月份刚买的书包就这样报废了,不过还好没有全部穿洞,还勉强能用.后来就淋着雨赶到了博美,途中雨大的时候还是随便找了地方避雨.只骑了15公里,大概11点的时候就直接在博美休息了.看到博美居然有镇短号群,这样绝对是作弊的存在.如果广州或者深圳也能有区短号群那有多爽.

下午2点钟还在下着小雨,同伴就说他要回海丰然后坐车去汕头.我则决定要一路骑完它.于是我们分别了.

很幸运的是,在分别后的十五分钟之后,雨停了.我得以顺利骑回老家,毕竟就只剩下三十多公里的路.一路上也没有再下雨了,慢慢的路干了以后我就能用时速25飞奔回去了.回去的路上注意了一下码表.最高速度仅仅32.均速也才16.回到家的时候再看码表,最高时速已经将近50,均速当然没有明显的提升,毕竟30公里的路改变不了300公里的均速.

然后我第一次去到了自己家乡的镇上.作为一个回家次数不超过10次的人,还从来没有去过镇里.镇政府破旧的难以想象.

雨后
满是盐的袖套
东港

从镇里出去以后,我找不到家乡在哪,打电话给大伯求助,然后被笑了,居然不知道自己老家在哪.说实话,如果不是因为今年的清明刚好回来了一趟,知道老家在长围村附近,也许更找不到在哪里.无奈我们家乡太小,在google maps上没有显示出来,而且村名居然是”新村”,这种名字更是难找.后来找人问路之后终于找到.悲剧的是我找不到大伯他家在哪.后来问了一个大妈,我专门还用潮汕话来问,结果她似乎没听懂,转而用蹩脚的普通话来问我想干嘛= =.我告诉她我就是这乡里的人,来找亲戚.她问了很多,结果我不知道我大伯的名字,不知道小舅的名字= =.后来说到我住深圳的时候她才大概猜到我是谁,帮我带路了.晚上她去大伯家,说一开始以为我是北佬,潮汕话讲的又烂.我表示这真不是我的错,还能讲潮汕话已经很不错了.

第四天

早上5点半,准备出发去汕头,结果起来以后突然就下大暴雨了.然后把车推到可以避雨的地方.幸好没有淋湿.遂决定在家里多住一天.没想到那一天就下了早上半个小时的雨.一整个上午都蹲在家里打纸牌,把windows自带的所有的纸牌类游戏都拿出来打,来来回回打了近百盘.下午就跟着大伯上山给龙眼打药.他在给龙眼上药的时候我就去旁边的荔枝林摘荔枝.果然新鲜的荔枝才是真爱.吃了几斤荔枝心满意足.山上还有小溪,听说天气热的时候很多小孩在那里游泳,可惜我不敢直接裸着下去游,又没带泳裤.而且当天气温也比较低.小溪里还有不少鱼,如果真能下去游泳顺带抓鱼,那得有有惬意.

荔枝
荔枝

第五天

早上依旧5点半.同样下了一场雨,不过只有十分钟.带来的后果就是外面泥泞不堪,导致速度上不去.出发前,大伯让我带4斤荔枝和2斤干荔枝路上吃,如果吃不完就扔给在汕头的表姐.事实证明,我压根就没有打开来吃,他加了一条皮筋,捆的太牢,我都不想打开了.即使外面的路很烂,即使坑坑哇哇还有水,那一天的骑行大概是我这一路上最高兴的时候.早上6:50村口出发,11点的时候就踩了75公里。还要除掉打了个电话的十分钟和清理烂泥重新上油的十五分钟。虽然这么看来速度还是很慢,但是,要知道这里是农村,烂泥路和裂的不像样的公路有十几公里,那种路时速能有15就谢天谢地了,有水坑的路连12都没法踩,让我没有挡泥板。路况好的路基本踩25,在接近潮阳的一段路上32飙过去,然后发现tm的走过头了。中午就进了潮阳城区,在文光塔下呆了一个多小时,和别人聊天.真觉得那个时候很幸福.午餐吃的是以前从来没见过的鳖粿.

文光塔

午餐

下午就轻松到了濠江区.那两个小时里面我遇到了第一个车友,他从东莞一个人骑去上海.我遇到他的时候是因为礐(来,和我一起念,que,第四声)石大桥不给自行车上.后来一个摩托车大叔过来引开那个售票员大妈,让我们赶快冲的时候,他还是没敢冲出去.我们只好作罢去码头.原本打算一起骑汕头的,可惜我看到礐石风景区和金山中学,突然决定要去看看,但是他希望赶路.所以就分开了.不得不说金中环境真的很好,和在市中心的深中相比有不一样的韵味.

金中 码头

去到汕头市区以后在表姐家蹭饭,然后去同学家蹭睡.虽然途中遇到第一次爆胎,不过准备充足,也没什么好担忧的,只是拆掉驼包再补胎花了很长时间而已,总计将近半小时吧.一路上心情大好,即使爆胎也改变不了愉悦的心情.

第六天

转身回揭阳.也是很大的一个转折.让我对此次旅行的意义产生了怀疑.

具体我就不说了,知道的人就知道,不知道的我也不想让人知道.黑历史这种东西总是知道的人越少越好.

当我在出发的时候觉得这样才是青春,这样才是我所追求的人生,回来的时候却觉得去他妈的青春.全身脱力的感觉,路边骑车60岁的大妈都随便赶超我。回程途中一直在质疑此行的意义,最后也未得而知.于是到处询问意义,虽然觉得别人所说的是无法说服我自己的,但是依旧想要在别人身上寻找寄托.晚上10点的时候,发了条短信给表姐,说我想回广州了.正式表示弃权.后来也和不少人聊天,有劝我别放弃的,也有让我自己想怎样就怎样的.如果没有和他们聊天,也许我就真正放弃了吧.虽然找不到意义,不过都已经走了一大半的路了,在快要结束的时候才放弃,实在是太愚蠢了.有种结束是因为看不到终点,经受不住等待而放弃,即使终点就在不远的地方.而我这种明知道终点就在200公里以外,这样都还放弃的话,就太对不起自己了.会画画的菊苣说过,虽然她画画有很辛苦很想放弃的时候,也会咬咬牙继续下去.因为喜欢啊.大概就是因为喜爱才会这样坚持的吧.或许我也真的是喜欢骑行这项运动的吧.

睡了一觉醒来以后还是决定继续出发.毕竟只剩下两天的路了.

第七天

一不小心睡到8点才起床,原本打算6点起床的.起床出发去找早餐,在一个小巷里面吃了一份肠粉,果然潮汕的肠粉很良心,加了各种各样的东西,当然少不了虾和贝,鸡蛋,瘦肉.随后从金平区一直沿南边的公路走,没有走G324,原本是打算去坝头的沙滩边上露营的,由于队友的原因,又没法去了.本来约好在汕头见面,结果等了两天也没来.早知道他不来的话我就直接从揭阳去潮州看完之前在肇庆遇到的大姐大了,不过世事没有后悔这一说.后来只好决定放弃沙滩,直接赶路去福建.中午11点的时候就到了广东极东的城市:饶平.事实上,我没有进城,在距离几公里远的地方远远地眺望了一下破败的城市.享受一下最后的省内流量,最后和别人聊一下天,然后出发千万福建.事实上= =,后来还是禁不住诱惑开了省外流量包.如果早点开也许会更好一点.

进了福建,绵延两百公里的山路,不断的起伏,几乎没有平路可言.但是出奇的路况极其的好,即使没有什么人去的路,公路都修得很好.也许只是我来错季节了,大概花季的时候会有很多车(那里是花城).在那绵延的上下坡骑行简直就是一种享受.虽然上坡坡度很大,只能用十三十四的速度慢慢骑上去( 没错,即使是上坡也比和同学一起骑的快),但是下坡却可以以均速40的速度冲下去,体验山路的快感.而且由于在山里面,非常的凉爽,以至于下午6点时候冷的我套上了外套.

福建的庙多的惊人,我从来没有想过居然有什么地方能比潮汕更多人信佛.隔一小段路就有一间佛庙,一开始很还有兴趣的路过一个就停留一下拍照,后来就厌倦了,都是那样.

进入福建以后,可以看到很多广告牌在宣传一种运动饮料:盐典.这是一种无比奇葩的运动饮料,他的宣传口号就是带汽的运动饮料.喝起来感觉烂透了,喝得快,就只感受到盐水和苏打水混合的味道,慢慢喝又像稀释的宝矿力水特加盐,我是无法理解为什么这样一种饮料销量居然还能破亿,大概是福建人都比较重口么?晚上到了云霄,云霄是我除了汕头和老家以外停留的最久的城市,把大街小巷都逛遍了,因为当时到达的时候才8点,又不想继续赶路去漳浦,因为到厦门只剩下不到130公里.妥妥的第二天下午到.于是到处乱转,而且云霄本身也很繁华,比惠来,饶平都繁华的多,到厦门的最后一段路也就这个大一点的城市了.这里吃饭的价格便宜的让人惊讶,2个肉菜才5块,想想我们学校一个稍微有点肉的也要5块,这消费水平低的可以.出乎意料的是,住宿比汕头还要贵.

第八天

同样不着急赶路,早上7点多才出发.上路之前买了只矿泉水.喝了一大半才想起看生产日期= =,结果发现是过期的.但是那里前不着村后不着店,离下一个镇还有十几公里= =,没办法还是只能喝掉.幸好只是矿泉水,过期的大概也就是菌落过多而已,问题不大,也没肚子痛也没怎样,略幸运.相比第一天买的那个过期零度,连味道都变了,队友还说怎么零度变得这么好喝了,我喝了一口就发现不对劲去查生产日期= =.出发的时候顺带买了一斤多的散装食品.最后一天采用十公里喝一次水,二十公里休息5分钟并且吃一点东西的方式.定时定量的补给的确让整个旅途轻松了不少.不用像和队友一起的时候慢慢骑,但是一次又骑很久那种自虐式骑法.要骑车就要骑出踏频,这样以来不但双脚可以承担一部分的体重让屁股没那么痛,另外一方面也可以降低大腿肌肉酸痛和膝盖受伤的概率.中午1点左右的时候就到达龙海市.路上吃了不少次四果冰,第一次吃的时候以为那东西只能选4样,结果选了4样以后他很神奇的问我就要这四种?在大中午骑车热得发慌的时候能吃四果冰实在是一种享受.而且每家店的做法都不太一样,有用冰糖的,有用糖精的,也有用不知道什么名字的甜味剂的.

由于从来没有人告诉过我海沧大桥是禁止自行车摩托车上桥的,后来查了才知道:海沧大桥是世界第二、亚洲第一座特大型三跨连续全漂浮钢箱梁悬索桥,也是厦门市历史上投资最大的交通工程项目,工程全长5926.527米.所以我很悲催的绕了远路走过去,否则还会再早两个小时到厦门.而且经历了一段更烂的路:角江路,全是沙,轮胎陷进去以后就拔不出来了,速度也不够快,所以就直接摔车了,这是我这一路上惟一一次摔车.当然由于速度很慢,没受伤,只是双手和车都沾满了沙,手有点痛而已.所以我到海沧大桥以后就告诫第二队,让他们一定别再走错路了.直接去厦大漳州校区坐船过去.后来由于不想骑车绕道十几公里,所以最后搭了的士过去,后备箱太小,放不下整车,只好前轮悬空架在外面.然后用松紧绳简单固定.一路上我都担心车掉下来,然后引发一连串的车祸.

于是,我在第八天下午的5点半,正式进入厦门.

厦门之行理应到此结束,剩下就是游玩.如果没有凌晨被自虐的环岛.

进了厦门,直奔厦大投奔同学.但是到了厦大以后才发现要排队进去,准备转身离开的时候遇到了同是广州过来的3人小组.然后就勾搭上了.一起从6点玩到晚上8点.他们已经是第二天到厦门了,再玩一天就走.那天刚好准备绕一下厦大.刚好同学打电话来说有点急事要处理,我就和他们一起找不用排队的后门和芙蓉隧道.

晚上8点他们邀请我一起吃饭的时候,想到队友搭车马上要到了,只好回绝了他们.事实证明,这是个正确的选择,厦大的同学最后请我们去豪客来撮了一顿.10点离开的时候本来我想着找酒店住的,这样方便放车,然后第二天去鼓浪屿和其他地方到处走走.没想到队友居然说太贵还不如留着钱来吃.我们只好住帐篷了.住帐篷就算了,他在一天没有骑车的情况下用十公里出头的时速夜骑了三个小时,当时我就发誓再也不会这样慢慢骑车了.中途路过海滩,在海滩上默默蹲了很久.还是没有想出此行的意义.

也许强行给所有遇到的事情安上意义是没有必要的事情.并非所有的事情都是理性可以解释的,很多事情不需要理由.

第九天

早上5点就起床了.困得受不了.大概以后我再也不会用这种方式搭帐篷.

继续用龟速环岛骑行.然后随便找了个消防通道把车锁了,徒步去鼓浪屿.鼓浪屿不愧是满满小资情怀的地方,各种各具特色门店.这些其实真没什么好讲,只有自己看了才知道.反正东西买不起,难道还吃不起么.于是把想吃的都吃了一遍.下午三四点的时候老爸就来了个电话说是台风要到了.于是查了一下,台风会在第二天早上到达福建.于是我们就逃命回广州了.

由于三天之内都只能订到站票.我们无奈只能搭巴士回去.然后一部车被砍了80.听公司之前去过厦门的人说,他们当时讲价讲到2部车30.这就是人之间的差距,这也是为什么他在产品部门而我在研发部门的重要原因之一.

6点多开始等巴士,被告知8点半,7点多开始就开始飘着小雨了.看来回去果然是个正确的选择.然后边等边拆车,才发现我的前轮滚起来一点都不顺滑,这样的车况我还能用那种速度骑,如果换了一部更好的车的话,大概骑起来会更快.最后上车出发的时候已经9点一刻了.

回来之后算了一下,其实骑行比直接火车过去旅游还要更花钱,我还好,毕竟蹭吃蹭住了几天,第二队出发的比我多用了六七百.而且他们住宿还要比我便宜,因为他们有五六个人,开一间双人房.我真的觉得组队的意义就是分担住宿费,结果这一躺下来住宿几乎都是我一个人自己住.

第十天

巴士最大的优点是开得快.9点出发,早上5点40就到广园客运站了.虽然卧铺睡得很不爽,太短了,但是至少还是睡了一觉的.上次坐卧铺车已经是13年前了.上一次应该是千禧年回老家的时候了.

给老爸,表姐,同学发短信报了平安以后就开始骑回大学城.路过华农,本来想去找之前在肇庆遇到的妹子的,不过只有QQ没有电话也没法联系,遂作罢.想去华工北校找同学一起吃早餐,结果问了才知道已经回深圳了.然后就默默在路上随便找了家地方吃饭.

回到宿舍以后居然不困了.我已经不记得回来之后的那个早上在干什么了.中午把车彻底洗了一遍(当然过了两天出去骑车结果被雨淋又弄脏了什么的也是没办法的事情)

至此,旅程结束.

彻夜之行

肇庆


一如既往的先放数据

  • 出发时间:6-11 20:40
  • 结束时间:6-13 2:35
  • 全程骑行时间:16:05:28
  • 总里程:281.1KM
  • 总计睡眠时间:1小时40分钟

计划了很久很久的肇庆之行,结果因为6月10号早上的一场雨让一切都打水漂了,原本的计划也是夜骑,不过是早上7点出发到同学家,大概能在10-11点到达,然后睡一觉到下午5-6点,夜骑出发去肇庆.然后在肇庆玩两天,第二天晚上就直接住肇庆,第三天白天回来.当时其实已经出发了,走了十五公里以后觉得天气不对劲然后及时回头,当我回到宿舍楼下的停车场的时候开始大暴雨,虽然MISSION FAILED但是至少没有被淋湿.回到宿舍的时候就在想,如果11号不下雨我就继续这段旅程,很不辛的,第二天早上继续下雨,一直到下午马路才干.然后我5点睡了一个小时,稍事准备然后在8点终于决定还是出发吧.毕竟这是预订好的事情,不能就这样放弃.就这样开始了这30个小时的旅程.

鹤洞大桥

所谓的不幸,并不是指因为某一件事,而是一连串的悲剧.

当我用非常满意的速度从广州冲向佛山(我花了不到一个小时到达鹤洞大桥,而回程的时候,这段路走了1个半小时),并且兴高采烈给Vally Zhang打了个电话约出来环千灯湖之后,在去往千灯湖的路上爆胎了.人生中第一次爆胎,内胎第一次贴上了补胎片.一颗长达5厘米的钢钉一次性扎穿了3个地方.这条内胎也宣告报废(当然这是后话,而且有待考证).找了几个补胎的地方,都因为太晚所以关门了.后来Vally Zhang过来帮我补胎,补完一次装上去发现还有洞,连续补了3次,花费了不少时间,如果不是Vally Zhang,估计我就只能打退堂鼓回到学校了.其实在很久以前,我也随时带补胎工具的,不过因为在宿舍楼地下室被偷过一套修车工具,被偷过车后灯*2,然后我就再也没有把工具绑车上的习惯了,出发前看了一下备用内胎和补胎工具,打气筒,还是觉得不带了,不然每次骑完车都要拆卸,实在太麻烦了.

当修完轮胎出发的时候已经晚上11点多了,骑千灯湖的途中听Vally Zhang说了很多关于龙舟的事情,从传统的材料(e.g.柚木)到龙舟的划分(e.g.传统龙),还有各种习俗,回来之后才发现很多东西是在WIKI上找不到的,越来越觉得每个地区的文化都不一样,想要依靠网络获取到那些文化,如果不是已经被炒烂的东西,是不太现实的.也许这就是旅行的乐趣吧,发现不同文化之美,自己去体验这种文化.

四会

与他分别以后,继续赶路,事实上,等到3点的时候困意就涌上来了,毕竟前一天下午只睡了一个小时.不过那个时候刚好到了三水的中心城区,稍微补给了一下.夜里笼罩着的寒冷与萧瑟,没有想到正值6月份居然还会如此的冷,大概是因为之前下了一天的雨,目测气温只有18度-20度之间.虽然说停下来的话,什么风都感觉不到,但是当以20KM/H的速度前行的时候,风还是显得很大,于是我期待着天明的到来,稍微搜了一下天亮及日出时间,鼎湖区天亮大致在5:15分,日出在5:40分.当时就决定要在天亮之前找个地方先睡半个小时,这次很幸运的在4:40的时候到了有休息室的加油站,定了半个小时的闹钟.又走了半个小时以后,驻足观看日出.那种抬头就已经天亮的感觉,当稍显凉意却有日光照耀的感觉,就像得救了一样.

鼎湖山 鼎湖区

后来就到了鼎湖山,看到到处都是”鼎湖特产裹蒸粽”

裹蒸粽

试了以后才发现就是坑爹货,糯米被蒸的软到烂的感觉,黄豆和糯米融成一体的感觉,那瘦肉不加五香粉毫无味道可言.总而言之就是从来没试过这么奇怪的东西.我觉得老人大概会很喜欢吃,但是我果然是喜欢吃加了五香粉的肉粽的,肉汁夹杂着五香粉渗入糯米的感觉,这才是真的粽子.

不枉此行

在鼎湖山周围转了两圈,为胎压不足的后轮打了气,原本想上鼎湖山的,到了售票处才被告知山地车不允许上去.因此掉头前往七星岩.由于打了气,一路走起来轻松了不少,在仙女湖先绕了一下,看着水面荡漾.

仙女湖 仙女湖

这次的旅途,用一个单词形容的话,就是”不枉此行”.因为遇到了他们.在七星岩东门广场.遇到了他们.

事情缘由很简单,因为骑了一通宵,感觉很冷,所以看到太阳开始暖和了,就靠着一个阿伯坐下来,拆掉全身装备,开始晒太阳.虽然还听见路过的行人说这人真奇怪,居然这么晒还在这里坐着.我倒是享受着这种温暖.然后就是一群人过来,希望旁边的阿伯为他们拍张照,阿伯很努力的剪着脚趾,没理睬他们,于是我说了一句”我来吧”.就这样和他们认识了.

晒太阳的时候,坐骑勇士的身姿

晒太阳

这一天因为有了他们的陪伴显得完全不一样.如果没有他们,或许真的像她所说的,我的旅途就只有骑车,骑过来了,再骑两圈,然后再骑回去.虽然原本就是这么打算的,不过中间的插曲却让这个旅途丰满了不少,这种感觉也不错.

途中不断的和他们聊天,一开始是劳烦他们介绍一下肇庆有什么值得游玩的地方,虽然说了不少,但是最终还是跟着他们一起走,其他什么地方也没去.后来停下车来,和他们一起放风筝= =.我都已经不记得上次放风筝到底是什么时候了,因为父母很少带我们出去玩.结果就是,不管怎么放风筝都在低空飘过然后不断坠地,然后被帮忙了,把风筝放到最高处,扯线的那种实感,是在键盘上体会不到的(青轴也不行= =).

风筝

虽然并不是第一次骑行在外受人帮助,但是这次给我的感动却是最深的,大概是因为这次的骑行本来就很累,在恶劣的环境下更容易对其他人产生一种依赖感和感激感,选择通宵骑行或许本来是个错误,不过遇到他们,至少这个错误还是值得的.

跟着他们一起骑行星湖,骑的很慢,很悠闲,然后和一些人”竞速”,和他们一起吃午饭,去他们学校参观,然后被邀请到宿舍午睡,睡了一个小时起来之后,那个时候真是有种幸福的感觉,原来睡觉的感觉是那么的好.

========================
总结下这次骑行

  • 没有带全套工具出来绝对是个错误,爆胎了居然没法自己修
  • 轮胎由于损坏过于严重,在到了鼎湖区的时候,后胎的胎压就不足了,所以骑的很慢,但是回程的时候胎压又没什么问题,不过为了以防万一,还是换掉算了
  • 国道321绝对是我这辈子见过的路里面第二烂的,第一名是358省道.如果不是G321,我想我的屁股不会那么疼
  • 切忌睡眠不足的骑行,这次虽然中午天气热的时候没有骑行,做了正确的选择,但是睡眠不足一样导致各种问题
  • 记得带了移动电源以后带数据线= =…在8点到三水的时候,手机两块电池就没电了,幸好中午睡觉的时候借用了万能充冲了一个小时,否则就回不去了.
  • 右脚脚踏是外倾斜的,不知道是什么时候坏的.两个星期前就觉得骑久了右腿膝盖酸痛,一直以为是我有点外八,所以最近都有意的朝内侧发力,还戴上了护膝保护膝盖.骑到天亮的时候才发现脚踏方向不对.需要找个时间去修一下了,实在不行就吧曲柄也换了.
  • 忘了买明信片= =

最后放上合照一张,然后去睡觉,又是3点了

合照

去程路线


查看大图

回程路线


查看大图

Piwik源码分析及API编写

Piwik源码分析及API编写

Piwik提供了一整套的事件统计,分析功能,并且可以以xml,json提供返回数据,还可以生成图表.

Piwik提供了Api的编写的一套方案,Coder只需要专注于数据的的处理即可.在Piwik根目录下有一个plugins的文件夹,文件夹下即当前所有的插件.最简单的额学习方式就是查看ExampleAPI和ExamplePlugin,代码风格已经很不错了,看起来其实也还不错.

一个API建立的最简单的流程就是在plugin目录下建立一个文件夹,例如Example.目录下新建API.php,类名为Piwik_PluginName_API

<?php
    class Piwik_Example_API{
        static private $instance = null;

        static public function getInstance()
        {
            if (self::$instance == null)
            {
                self::$instance = new self;
            }
            return self::$instance;
        }

        public function getDatatable(){
            $datatable = array();
            $datatable["start"]="OK";
            return $datatable;
        }
    }

然后就可以通过localhost/piwik/index.php?module=API&method=Example.getDatatable&format=xml&token_auth=*访问(搭建在本机的piwik,token在登录以后可以查询).显然,这里用了单例模式,防止多次被实例化.

下面提示几个需要注意的地方.

如果需要接受GET/POST的值,不要直接使用$_GET/POST,使用系统自带的Piwik_Common::getRequestVar(‘NAME’);

为了避免数据库注入攻击,不要直接用GET得到的参数执行查询语句
例如

<?php
$idsite = $_GET['value'];
Piwik_Query( "SELECT * FROM ".Piwik_Common::prefixTable('site')." WHERE idsite = $idsite" );

此时可以提交”1 OR 1”这样的字符串,查询语句就会是:”SELECT * FROM piwik_site WHERE idsite = 1 OR 1”
这样就会显示所有的站点.

当然,也可以自己对注入攻击进行处理,mysql_real_escape_string()什么的.

数据库的查询是用Piwik自带的函数

• function Piwik_Query( $sqlQuery, $parameters = array())
• function Piwik_FetchAll( $sqlQuery, $parameters = array())
• function Piwik_FetchOne( $sqlQuery, $parameters = array())

<?php
    $feedburnerFeedName = Piwik_FetchOne('SELECT feedburnerName
    FROM '.Piwik_Common::prefixTable('site').
    ' WHERE idsite = ? and name = ?',
    array( Piwik_Common::getRequestVar('idSite'), Piwik_Common::getRequestVar('name') )
);

$sqlQuery中为”?”的地方可以一一匹配数据值,将数据和sql语句分开.

Piwik支持以segment作为filiter对已选择的数据进行过滤,以下的gist就是当segment=browser==FF的情况下源码生成的数组及所有所有支持的segment

对于数据库的查询,给出Live.getLastVisitsDetails (idSite, period, date, segment = '', filter_limit = '', maxIdVisit = '', minTimestamp = '')的代码分析

$visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $period, $date, $segment, $filter_limit, $maxIdVisit, $visitorId = false, $minTimestamp);

$dataTable = $this->getCleanedVisitorsFromDetails($visitorDetails, $idSite);

首先是loadLastVisitorDetailsFromDatabase()这个函数里面,实际上就只是处理数据然后对数据库进行读取,整套系统其实也都是这么做而已

$where
array(
    [0] => 'log_visit.idsite = ? '
    [1] => 'log_visit.visit_last_action_time >= ?'
)
$whereBind
array(
    [0] =>4
    [1] =>'2013-04-30 16:00:00'
)

使用join组合成字符串

if(count($where) > 0)
{
    $where = join(" 
        AND ", $where);
}

log_visit.idsite = ? AND log_visit.visit_last_action_time >= ?

最后通过segment组合

segment =Piwik_SegmentExpression(
    joins =
    valuesBind =
    parsedTree =
    tree = array(
    [0] =>array(
        [0] =>                    
        [1] => 'browserName==FF'
    )
)
parsedSubExpressions = array(
    [0] =>array(
        [0] =>
        [1] =>array(
            [0] =>'log_visit.config_browser_name'
            [1] =>'=='
            [2] =>'FF'
        )
    )
)
string = 'browserName==FF'
)

    $select = "log_visit.*";
    $from = "log_visit";
    $subQuery = $segment->getSelectQuery($select, $from, $where, $whereBind, $orderBy);


array(
    ['sql'] =>'
        SELECT
        log_visit.*
        FROM
        piwik_log_visit AS log_visit
        WHERE
        ( log_visit.idsite = ?
        AND log_visit.visit_last_action_time >= ? )
        AND
        ( log_visit.config_browser_name = ? )
        ORDER BY
        idsite, visit_last_action_time DESC'
    ['bind'] =>array(
        [0] =>4
        [1] =>'2013-04-30 16:00:00'
        [2] =>'FF'
    )
)

SQL的再度组装

    $sql = "
        SELECT sub.* 
        FROM ( 
            ".$subQuery['sql']."
            $sqlLimit
        ) AS sub
        GROUP BY sub.idvisit
        ORDER BY $orderByParent
    "; 


SELECT sub.* 
FROM ( 
    SELECT log_visit.* 
    FROM piwik_log_visit AS log_visit 
    WHERE ( log_visit.idsite = ? AND log_visit.visit_last_action_time >= ? ) 
        AND ( log_visit.config_browser_name = ? ) 
    ORDER BY idsite, visit_last_action_time DESC LIMIT 100 ) 
AS sub 
GROUP BY sub.idvisit 
ORDER BY sub.visit_last_action_time DESC 

$data = Piwik_FetchAll($sql, $subQuery['bind']);

进行查询

查询结束就会返回$visitorDetails,再通过这个数据进行详细查询和空值的过滤getCleanedVisitorsFromDetails()


[9] =>array(

    ['type'] =>1
    ['url'] =>'localhost/test/'
    ['url_prefix'] =>0
    ['pageTitle'] =>['pageIdAction'] =>11
    ['pageId'] =>9101
    ['serverTimePretty'] =>'2013-05-25 05:59:38'
    ['timeSpentRef'] =>1
    ['custom_var_k1'] =>'section1'
    ['custom_var_v1'] =>'third'
    ['custom_var_k2'] =>'section2'
    ['custom_var_v2'] =>'second'
)
[10] =>array(

    ['type'] =>1
    ['url'] =>'localhost/test/'
    ['url_prefix'] =>0
    ['pageTitle'] =>['pageIdAction'] =>11
    ['pageId'] =>9102
    ['serverTimePretty'] =>'2013-05-25 06:00:08'
    ['timeSpentRef'] =>30
    ['custom_var_k1'] =>'section1'
    ['custom_var_v1'] =>'first'
    ['custom_var_k2'] =>'section2'
    ['custom_var_v2'] =>'second'
    )
[11] =>array(

    ['type'] =>1
    ['url'] =>'localhost/test/'
    ['url_prefix'] =>0
    ['pageTitle'] =>['pageIdAction'] =>11
    ['pageId'] =>9103
    ['serverTimePretty'] =>'2013-05-25 06:00:50'
    ['timeSpentRef'] =>42
) 

以上为执行$actionDetails = Piwik_FetchAll($sql, array($idvisit));之后的原始数据

<row>
    <type>action</type>
    <url>http://localhost/test/</url>
    <pageTitle/>
    <pageIdAction>11</pageIdAction>
    <pageId>9101</pageId>
    <serverTimePretty>周六 25 五月 13:59:38    </serverTimePretty>
    <customVariables>
        <row>
            <customVariableName1>section1</customVariableName1>
            <customVariableValue1>third</customVariableValue1>
        </row>
        <row>
            <customVariableName2>section2</customVariableName2>
            <customVariableValue2>second</customVariableValue2>
        </row>
    </customVariables>
    <timeSpent>30</timeSpent>
    <timeSpentPretty>30 秒</timeSpentPretty>
    <icon/>
</row>
<row>
    <type>action</type>
    <url>http://localhost/test/</url>
    <pageTitle/>
    <pageIdAction>11</pageIdAction>
    <pageId>9102</pageId>
    <serverTimePretty>周六 25 五月 14:00:08</serverTimePretty>
    <customVariables>
        <row>
            <customVariableName1>section1
            </customVariableName1>
            <customVariableValue1>first
            </customVariableValue1>
        </row>
        <row>
            <customVariableName2>section2</customVariableName2>
            <customVariableValue2>second</customVariableValue2>
        </row>
    </customVariables>
    <timeSpent>42</timeSpent>
    <timeSpentPretty>42 秒</timeSpentPretty>
    <icon/>
</row>

可以看到时间上是错位了的= =,然后翻源代码,可以看到一个循环外加一个 注释

// set the time spent for this action (which is the timeSpentRef of the next action)
if (isset($actionDetails[$actionIdx + 1]))
{
    $actionDetail['timeSpent'] = $actionDetails[$actionIdx + 1]['timeSpentRef'];
    $actionDetail['timeSpentPretty'] = Piwik::getPrettyTimeFromSeconds($actionDetail['timeSpent']);

}

= =..也就是说,每次储存的时间长度是下一个动作的时间,这就很奇怪了.

另外,这套系统还有一些很不注意的地方,例如
数据整理结束以后,usort($actions, array($this, ‘sortByServerTime’));按照ServerTime来对所有数据进行排序
这样就有个很愚蠢的问题,如果有人同时访问了一个页面,那么时间戳是相同的,PageID会在访问的时候被确定
就会出现以下的问题..所以我很不明白既然都已经根据访问次序给了PageID了为什么不直接用PageID排序反而是用时间戳排序,再说了,就算用时间戳排序,难道不会在时间戳相同的情况下用PageID排序么?

<row>
<pageId>9100</pageId>
<serverTimePretty>周六 25 五月 13:59:37</serverTimePretty>
</row>
<row>
<pageId>9099</pageId>
<serverTimePretty>周六 25 五月 13:59:37</serverTimePretty>
</row>

骑行2012

骑行手记

一直想找个时间回顾一下我的骑行历程,但是,从去年拖到现在,不是没有时间,就是想不到怎么写,这篇东西陆陆续续写了十天,都不知道怎么吐槽自己了.


漫漫长路

去年9月,当暑假的气氛还未完全褪去,校园里满满穿着军装的新生攻略饭堂的时候,我购入了人生中第一辆的山地车.也是从此时开始,我成了坚定的山马党.无论折叠那优越的便携性也无论公路那无比的速度.我对山马的憧憬可以追溯到小学.当时学校离家6公里,对于当时身高未足160的我来说这是一段无比漫长的道路,尽管如此,我还是尝试过走路回家,一走就是一个半小时,而且以此为乐.直到有一天,同学说:”我们交换一下,我把单车借你,你骑回去我搭车回去”.然后我第一次尝试到了骑行的快感.初中那时,我对父母说,我以后骑车上学吧,父母一句太危险没必要将这个提议压了下去,我只能偶尔向同学借车绕着莲花山,绕着笔架山转圈而已.到高中时,我已经没有这种愿望,因为住宿生活的到来,新环境的压力,我把一切都抛到了脑后.

在终于对大学厌倦的大二开学的时候,我决定我再也不要呆在这个荒岛上默默度日了,但是我没有勇气拿着父母的钱颓然度日,更没有勇气休学,来个GAP YEAR,我决定了我要走出荒岛,然后就没有然后了.或许是因为我买车的目的就是为了离开这座荒岛,所以我的在试骑之后很快就骑向了岛外的大千世界.

孤独的旅程

2012年9月23日 大夫山

我的第一站是大夫山,一座我骑完之后深感其不能称之为山而应称之为土包的”山”.那也是我第一次坐船,作为一个生活在海滨城市的人,第一次坐船居然是坐渡轮.9点出发,到了大夫山12点,为什么这20公里我走了3个小时?因为等船花了大半个小时,还有走错路,还有看地图等卫星导航.我第一次出行就遇到了一个来自深圳美的的员工,和我骑着一样的勇士,然后我前去搭讪,一拍即合,绕着那座平坦的土包骑了不知道多少圈,聊天南地北.分别之后,意犹未尽,然后我决定走向北方,奔向五山,回去的时候,两块电池都用完了,我又在海珠迷路了,那个道路建设我已经无力吐槽的地方.后来我就冲上了环城高速,成功找到了回家的路.第一次的骑行走了将近120KM,喝了600Ml的水8只.

2012年9月29日&2012年10月6日 深圳

瞒着父母骑回深圳,先斩后奏.总里程:140KM*2.其实广州到深圳真没那么远,但是每次都遇到一些不可抗力因素导致我多走了15公里-20公里的路.由于翘了一天课加上中秋和国庆的长假,我背上了笔记本前行,因此一路走的很痛苦,尤其是背部无法完全需要伸直,而且笔记本又重(15.6寸立显颓势).途径我遇到过最烂并且现在感觉还是最烂的路:S238和S356.我也遇到了我经历的最凶险的公路:北环大道,在我不小心上了高速三次以后,我还是觉得,没有任何高速能比深圳这条交通干道更加危险.

s356_under_construction

2012年10月20日 珠海 160KM+168KM.

我从来就不是一个循规蹈矩的人,即使google地图告诉我,如果我走S111,那么我去珠海到达中大只有110公里而已.我绕了很多路,走了很多不同的地方,看了很多不一样的人,不一样的风光.至今,到珠海的的路上那些无数的桥还深深留在脑海里.我先去了顺德南医科大学,在大学门口等待的时候,见到了很多从大学城过来的人,有一样骑行过来的,也有搭车过来的,虽然目的相仿,都是在等,但是他们是人生赢家,都在等女朋友,短短十几分钟从我眼前走过了十几对久违相见的情侣,依偎前行.一路上路过了很多学校,什么上网小学,广药,暨大,中大.珠海很美,远比我见过的城市都美,一望无际的海滩,宽敞的公路,蔚蓝的天空,清新的空气,还有成群的车友出没,如果有机会,一定要去珠海工作,骑遍珠海每一个角落.回来的路上,绕远路去了中山,遇到一对很热情的夫妇,一起骑了两个小时,让我少走了不少弯路,后来上了城桂公路,遇到了无数骑山路的车友,感受到原来有那么多人骑车的.

zhuhai

2012年10月27日 海鸥岛

海鸥岛是没有海鸥的,全是骗人的,不过海鸥岛上有环岛的绿道,当然继承了我大吃省绿道一贯的风格,随便一条路,只要插上一个牌子就是绿道,实在太丑的路就不要了,有钱就可以先建那么一点绿道,铺完走人,以后再也不用管理.环岛绿道相比珠海的海狸岛,差了两个等级不止.不但中断很多,而且绿道久未修了,牌子的颜色都已经发黄,总不能叫它黄道吧?

dahuang


然后2012年10月31日,总里程超过1000公里,距离买车不过50天而已.


2012年11月4日 东莞广东医学院&松山湖 185KM.

GOOGLE MAP一直作为我御用的导航软件,无论什么时候,只要地图在手,连东南西北都无法辨认的我就不怕迷路,在我的SP上,它一直矜矜业业的工作着,而且很省流量,即使WM的版本无法缓存地图,我骑上整整一天也不过消耗7.8M而已,而且两块电池可以撑上14小时,相比android这种电老虎,流量杀手来说太优秀了(虽然有离线地图,但是如果不开后台限制数据的话,流量一样走的飞快).当然google地图曾经带我穿过封闭式工厂,翻越栏杆然后转向,翻山越岭最后压根没路的,之前还有早就断掉的公路,泥沙路.

无奈的终焉

2012年12月8日 花都

第一次出了车祸.虽然以前也遇到过一些小小的事件,例如一不小心撞到了前面摩托车的后轮然后被大叔瞪了,例如抓着水瓶然后一不小心摔车刷伤膝盖然后几天之后完全没事了,例如被卡车勾到书包然后被拖了十几米然后被众多路人把卡车拦下来但是毫发无损.而花都之行却是我第一次真正的受伤-骨折.食指骨折,为此我付出了将近10个星期的时间债,再也没有出去骑车.固定了6个星期然后食指无法弯曲,受伤以后将近3个月才恢复正常.当然也只是功能正常,它永远的弯了!!!

然后我的2012就这样结束了,在手指断掉的隐隐作痛中过去了.就这样度过了我十九岁最后的青春.