标签归档:blog

[哎] 吐个槽,blog恢复了

感谢郭嘉,自动linode被封以后blog就无法访问了,一直懒得管它。
最近搬到amazon的aws上,总算恢复了一大半。不过bianbian.org域名还是感谢郭嘉无法及时转出。
要完全正常再等等吧。。。
其实这篇主要不是来吐槽的。
自从土豪一把上了 Netgear R6300 v2 以后,以前的路由器 tp-link WR741N 就闲置下来,然后今天抽经就折腾了一把。
刷Gargoyle,ssh到路由器上,opkg install一堆感谢郭嘉的组件后,总算在路由器上实现了自动proxy。
妈妈再也不用担心手机iPad要用VPN才能感谢郭嘉了。。。
几个有用的链接:OpenWRTGargoyleshadowsocks-on-openwrtPrivoxyport-mirroring

[原]一种blog日历的JSON压缩输出算法

一般高效的blog日历会将所有发表日期单独存储到js中,由客户端脚本负责输出日历链接。
以前都是按yyyymmdd输出blog日历的,如果发文多的话会特别长(特别是几年下来)。
最近用JSON输出blog日历的时候,发现一种更简单、更高效、更省数据量的方法:

即年份作为JSON属性,值是十二个月天数构成的数组(五月天纯粹是增加关键字 – -)。
一个月最多有31天,如果用数字表示得用62个长度的字符。我决定用单个可打印字符的ASCII码代替。
在ASCII表里找了一段:从61-91(”=>?@ABCDEF……UVWXYZ[“)满足要求(刚好是天数+60)
于是,原来比如2006每个月各发表1篇blog的数据从:

就可以压缩到(106是linux下struct tm的year,是1900+的,106+1900=2006):

当然这只是一个特殊例子,实际上用户写blog都有一段时间的连续性。用这种办法输出的日历数据在
数据量大的情况下会更加省空间。(显然原来的方法重复了很多年份、月份数据)。
下面是一个勤劳用户从04到07年的blog日历(几乎天天有文章更新):
总数据量1K不到,如果用yyyymmdd的方法估计要是这个的5-6倍

用客户端Javascript解析的时候也比原来方便直接。原来需要split然后循环判断(如果排序了可以用二分法)。而JSON不需要这种解析,直接可以拿来用:使用String.fromCharCode(60+天)获得某天的字符,然后在当月中查找一下:

(当然,如果要更省空间,甚至可以把各月的数据用一个字符串表示、用逗号隔开;不过这样就得在客户端split然后再解析了。我认为这是不必要的:每年只省下22个字节而已)