JSToolbox

    最近写了个Greasemonkey脚本jstoolbox,将一些bookmarklet(爱库,QQ输入法,有道翻译,Instapaper)做成了一个下拉列表,在页面顶上就能点击使用。为什么要多此一举呢?点书签不是很方便吗?原因其实是在我使用Firefox的时候,只会保留地址栏、Tab栏、和右下角的扩展栏,没有书签栏;而且我多年的收藏经验表示,我最讨厌点击书签了,收藏夹里的书签基本上没点过,一是数量比较大,组织的麻烦,二是收藏夹每次打开都是密密麻麻的,根本不想细看。直到我发现了Fastdial,不点收藏夹的情况才有所改观。快速拨号这个功能最早是opera发明的,Firefox上也有很多扩展,但是都用的不太顺手,Fastdial有点不一样,很简单,如同它的名字一样,打开速度很快,支持文件夹的功能,生成的缩略图基本上不看标题也知道是什么网站,而且对应到收藏夹里就一个Fastdial的文件夹,所以我就把Fastdial当成收藏夹来用了。

    这个问题一直存在就对了,不过真正让我写脚本的原因是爱库的Firefox扩展,爱库网是一个用于整理(collect),组织(organize),分享(share)任何互联网上面的网站、图片、视频等资源的在线服务,并且致力于让用户发现(discover)更多有意思的互联网资源。而且爱库网收藏的内容都以缩略图的方式来展示这一点我很满意,为此我还弃用了delicious。安装爱库的Firefox扩展后,它会hook住新Tab的打开页面,效果是不错但是这样一来Fastdial就不能用了;而且必须要到菜单->工具才能点到爱库的选项。因为菜单栏一般都是隐藏的,所以就相当不爽了。好在爱库提供了一个bookmarklet,顺带我就把其他的一些我觉得有用的bookmarklet给加进来了,代码也很简单,把li元素createElement出来,然后绑定上对应的function,最后添加到当前页面。因为bookmarklet其实就是浏览器执行一段js,所以那些function其实就是bookmarklet。目前已知的问题是在一些web mail里,如网易邮箱会被insert多次,所以把网易邮箱添加到了exclude里。

效果图如下:

image

鼠标移到JS-Toolbox会出现一个下拉列表,点击即可。

image

后续可能的工作:1.添加别的功能,现成的bookmarklet或者其他的js小工具。2.修改代码使得易于修改配置,可以选择哪些打开,哪些关闭。

 

有关书的一点碎碎念

  2011年6月18日,全民动员,像打了鸡血一样在京东抢购对折书,连我这种向来对“非必须”商品持谨慎态度的人也冲动了一把。冲动的后果当然就是到现在为止还在对着“正在出库”了2天半的订单无奈的流口水。

  @和菜头对抢书行为很不以为然,认为书的价值在于阅读,而抢购低价图书则似乎是因为有些人把购买与阅读这两个完全不同的行为在心理上等同了起来,并没有体现出书籍真正应有的价值。或者说低价倾销图书也是互联网界一直存在的鼓励用户贪婪之心的一种体现。

  我很认同书的主要价值在于阅读,不过我倒是觉得把书买回来放着也不算是什么罪恶。书籍做为商品,自然会有它多方面的使用价值,阅读是价值之一,收藏当然也是。另一方面说,购买行为也可以看成是对书籍作者和作品价值的肯定。就我自己而言,能让我下决心买回来的书(或音像制品),多半是我已经在图书馆或另的地方看过的,所以购买这件事本身,通常不会完全是为了阅读。我向来觉得,对于书籍这种商品,在我读过(或者在一定程度上了解)它之前,我无法判断它对我有没有价值,我又凭什么要支付它封面上所标明的价格呢?

  一周前拿到了摆摆书架的内测邀请,这是在5月底的TEDxNJU活动上了解到的一个网站。摆摆书架试图打造一个社会化的图书馆,通过捐赠、交换来更充分的实现图书的价值。基本的模式就是注册会员捐赠自己的图书,根据捐赠的数量可以获得等量的从别人那里获取图书的机会。

  我很喜欢摆摆书架的创意,但是这个创意和目前的实现似乎完全基于一个不现实的基础:所有人都是善意与合作的。在摆摆书店目前的体系中,只要出现一些不合作的人,整个体系就会乱套,很快就会出现类似于“劣币驱逐良币”的现象:大家把好书都囤到自己手里,剩下一些价值不高的书籍在外面流通或甚至导致流通趋于停滞。

  类似于京东打折这样的低价图书的存在和中国高昂的物流成本,也会更多的限制摆摆书架的发展:买一本新书可能只要不到20元,寄一本旧书给别人却需要7-12元左右的快递费用(别跟我提中国邮政的平邮业务,实践证明,“丢包率”太高了)。一本书在摆摆书架的体系中流通两三次的物流成本,就可能超过它本身的价格,这样的书籍价值实现,实在是不好让人接受。

  有个叫“青蕃茄”的网站,实现了免费图书借阅、送书上门,感觉它把图书和物流这两个问题放到一起去通盘考虑,似乎是可以找到一种可靠的模式来维持这个体系的存在。不过我一直没有去体验他们的服务,不知道现在实际运营的如何。

Posted in Uncategorized

进入IPv6的世界

  我的虚拟主机提供商Linode从5月份开始提供原生的IPv6支持,虽然暂时没有什么实质性的用处,但还是决定体验一下。记录一下添加IPv6支持时遇到的问题,供大家参考。

  1. Linux中启用IPv6支持

  原则上只需要确保你的Linux内核中已经把IPv6的支持编译进去了就行了。在Red Hat系列的发行版上,可能要检查一下/etc/sysconfig/network这个配置文件中有没有把NETWORKING_IPV6设成yes。启用IPv6后,网卡在up过程中就可以从DHCP服务器那里分配到IPv6地址了。如果需要手工配置静态的IPv6地址,跟配置IPv4的方法是类似的,直接修改相应的配置文件即可。比如在Red Hat系列的发行版上,就修改/etc/sysconfig/network-scripts/ifcfg-eth0,在里面加上IPV6INIT, IPV6ADDR, IPV6_DEFAULTGW等配置项即可。

  2. nginx中启用IPv6支持 

  如果只是在配置文件中写上listen 80;的话,nginx只会在IPv4的80端口上侦听。如果需要全局启用IPv6,可以改成:

    listen [::]:80;

  因为在Linux中,默认情况下,IPv6的TCP socket会同时在IPv4地址上工作。所以对于listen 80;和listen [::]:80;这两种绑定所有地址的80端口的监听,只能两者取其一。不然在启动nginx时会报端口已经被占用而导致启动失败。

  如果你的nginx是为多个vhost提供服务的,却又不想在所有的vhost上都启用IPv6,则可以分开写IPv4和IPv6的监听规则:

    listen 80;
    listen [::]:80 default ipv6only=on;

  然后在各个vhost的配置文件中分别有选择性的使用这两行配置就可以了。或者也可以采用非全地址绑定的方式,在listen后面显式的指明要绑定的IP地址。

  有关nginx的配置,可以参考nginx的HTTP Core Module的相关文档。

  3. DNS设置

  在你的域名的DNS配置面板上,你应该可以为你的域名添加A记录或AAAA记录,A记录是IPv4地址,AAAA记录IPv6地址。同一个域名可以同时指定A记录和AAAA记录。在访问的时候就会同时解析出IPv4和IPv6的地址。

  除了主域名上同时绑定A和AAAA记录,通常也建议用一个独立的子域名去单纯绑定AAAA记录,这样可以便于在双栈的网络中明确指定希望走IPv6网络。

  目前我的主域名freemindworld.com上同时绑定了IPv4和IPv6地址,ipv6.freemindworld.com上为纯IPv6地址。

  使用国内的ISP的DNS服务器测试IPv6时需要小心,如果你的域名只绑定了IPv6地址,ISP的DNS服务器可能会进行一次DNS劫持,在返回你IPv6地址的同时,也返回给你一个错误的IPv4地址。至少在Linux下,Firefox和wget都会优先去用那个假的IPv4地址去发起请求,从而得到错误的结果。换用更可靠的DNS服务器或在/etc/hosts文件中添加IPv6地址映射可以解决一部分的问题,更可靠的解决途径可能可以使用TCP DNS。

  4. 客户端

  CERNET2的用户应该是有原生的IPv6环境来使用的,中国电信的用户就暂时只能通过Teredo隧道这样的方法来使用IPv6了。在Linux下,Teredo的一种实现叫做miredo(音乐中的三个唱名,mi re do),常见发行版中直接安装这个软件包并启动相应的服务就可以得到IPv6地址,通过Teredo隧道的方式来体验IPv6了。请记得改用ping6来测试IPv6的服务器连接,在nslookup时需要set type=AAAA。

  最后再赞一下Linode的客服,我在不同时间提交了两个VPS开通IPv6的ticket后,都在3分钟中内得到响应并完成了请求,效率相当的高。

Posted in Uncategorized