网络蜗居 之 RSS的生成、发布与订阅

这两天为了在当前theme里添加RSS订阅,把RSS的生成、发布和订阅顺带研究了下。看完了刚好以bmlzf.intscan.org为例,讲讲RSS的工作机制。

  1. 什么是RSS
  2. 怎样生成RSS文件
  3. 网站怎样发布RSS源
  4. 客户端如何订阅RSS

什么是RSS

简单的说,RSS是一种消息来源格式规范。网站通过更新RSS文件(包含发布资料的部分内容或全文,以及一些资料发布元信息)发布资料,读者使用阅读器订阅RSS文件来获取网站资料的更新。

详细定义在这里,具体规范在这里。看不懂的拿Google Reader试下就知道了

怎样生成RSS文件

首先看下RSS文件的格式。实际上RSS文件就只是一个xml文件(废话一句,在JSON之前,我是大爱XML啊),在上面的具体规范里有xml格式的具体定义。以bmlzf.intscan.org提供的rss文件为例,用chrome浏览器的developer tool抓到的HTTP Response:

从里面可以很清楚的看到RSS文件的格式。在<channel>下包含了一些网站的元信息,和发布的资料信息。在示例中,每篇blog作为一个<item>元素存在。

知道了格式之后,生成RSS文件就非常简单,任何文本或者XML编辑器都可以制作。不过这个不用自己写,有很多现成的RSS生成工具可以用来制作RSS文件。就算是变成实现也不是很难,wordpress的php实现在feed-rss2.php里,需要的可以参考

网站怎样发布RSS源

生成好RSS文件之后,怎么告诉别人我的网站提供了RSS功能呢?对人来说简单当然简单,用经典的黄色小图标提供链接,从页面上点一下触发请求就行了。但是对于很多订阅客户端来说怎么知道呢?比如说,在Google Reader里,我只需要在添加订阅框内输入http://bmlzf.intscan.org,Reader自己会找到http://bmlzf.intscan.org/?feed=rss2,这又是怎么做到的呢?答案在html header里

在HTML的<head>tag里,有两行<link type=”application/rss+xml”>的tag,他们的href属性告诉了订阅者RSS文件从哪里可以访问的到。从例子也可以看出,虽然我在页面上只加了一个图标link,但实际上wordpress提供了两个RSS feed:) 除此之外,有关wordpress更多的RSS信息在这里

客户端如何订阅RSS

RSS客户端包括很多种,网页版客户端版多的是,功能也不尽相同。大致流程是读取RSS文件解析内容并展现。功能集多少取决于各自的实现。我比较喜欢的是Google Reader,很幸运这款有开放API,有兴趣的可以去这里下载源自己看看

今天在页面上添加了订阅按钮,因为wordpress本身已经提供了RSS文件生成函数,所以实现相当简单。在右边的边框里加入图标外加链接就行,也就是在当前theme目录下的sidebar.php文件里添加下面的代码就可以了

<a href=”<?php bloginfo(‘rss2_url’); ?>” title=”<?php _e(‘Syndicate this site using RSS’); ?>”>
<img src=”xxxx” alt=”RSS Feed” title=”RSS Feed” />
</a>


有的网站是提供专门的订阅页面,支持一键订阅到很多著名的RSS客户端的,比如说个人比较喜欢的月光博客。实现也不难,基本上都是第三方提供好的API(所以API是个好东西,嗯),具体见下面图中的示例。有需要的同学直接抄就行了

feed_google

网络蜗居 之 用Google Webmaster工具做SEO

用自己架的主页的好处是自由,坏处是没有搜索排名。用google和baidu搜了几篇blog标题,发现搜索结果里基本上都是新浪博客上镜率最高。翻了半天也找不到自己的,借spaces.live.com东风的往事一去不复返了……小本经营,没钱竞价排名。没关系,我们有穷苦挨踢民工的守护天使Google。这两天用google的webmaster tool做了些初步的SEO,简单记录下。

首先,先去http://www.google.com/webmasters/创建google webmaster帐号,找到“Add a site”把bmlzf.intscan.org加入我的站点。这一步需要认证,确认网站确实归我所有。我选的第三种,下载google提供的html页面,上传到网站根目录就可以了。认证成功后就可以进入这个网站的管理页面

第二步,创建robots.txt文件,允许搜索引擎的网络爬虫抓到我的页面(有关robots的更多问题看这里http://www.robotstxt.org/faq.html)。robots.txt文件用任何文本编辑器都可以创建,注意文件名小写、公开访问权限,以及放在网站根目录上。试试twitter的,在这里http://twitter.com/robots.txt。我的可以在这里看到http://bmlzf.intscan.org/robots.txt。这里有一个问题是,泄露了某些隐私。比如说我的robots.txt阻止了admin目录,这偏偏告诉了好奇的同学哪里有好戏看。如果真的不想被人看也没关系,用apache的.htaccess和.htpasswd保护此目录的访问就可以了。用Google的webmaster工具创建和测试robots的功能非常方便,web界面点个按钮就可以了。昨天做好的robots,今天在baidu里搜索,就发现了下面的记录,日期是昨天的

第三步,制作sitemap文件,告诉搜索引擎网站上有哪些可供他们抓取的网页。其实就是个xml文件,具体的书写说明看这里http://www.google.com/support/webmasters/bin/answer.py?answer=183668。当然这个不需要自己做,有很多做好的第三方工具。这里有一陀http://code.google.com/p/sitemap-generators/wiki/SitemapGenerators。我试了两个,Google Sitemap Generator需要重启apache,弃之。最后用的是Enarion phpSitemapsNG,有管理页面做sitemap,还可以看到哪些页面已经被爬过。做完后把结果上传到webmaster就可以了。当然结果并不局限于google搜索引擎,具体看http://www.sitemaps.org/

以上三步做完,就可以找个沙发喝喝茶等着看结果了。试着搜了几篇blog的标题,就可以看到关键字了。大功告成:)

在google webmaster网站上还给了很多SEO的建议(http://www.google.com/support/webmasters/bin/answer.py?answer=35769),在我看来好玩的几点:

1. 确保robots.txt没有拦截搜索引擎,当然故意的除外……

2. 用lynx文本浏览器来检查网站,因为大多数搜索引擎信息采集软件查看您网站的方式与Lynx几乎一样,防止一些javascript、flash等复杂功能造成网页无法访问。(用lynx访问bmlzf.intscan.org无法显示中文,一开始以为是lynx设置的问题,试了www.google.com.tw发现中文可以,貌似是网站的问题……求解)

3. 确保您的网络服务器支持If-Modified-Since HTTP标头。用这个HTTP头可以查出自上次某段时间以来网站的更新。用curl命令可以测试:curl -v -H “If-Modified-Since: Sat, 01 Jan 2011 19:43:31 GMT” http://bmlzf.intscan.org

其他还有一些内容相关的,大意是苦心经营关键字,控制外链数目,不要链接恶意网站

网络蜗居 之 添加“分享到”按钮

“There are things that we don’t want to happen but have to accept,things we don’t want to know but have to learn,and people we can’t live without but have to let go”

近来不得不accept的一件事是live space到期。感谢以B同学为首的公司内部小团体,才能租了这个地盘暂时蜗居。也感谢wordpress,不费吹灰之力就盖好了房子,连基本装修都省了。

好不容易有个窝,当然要认真对待。以后会慢慢的往这里加入更多练手的东西,虽然是蜗居也得好好装修。

昨天完成的第一个元素是“分享到”按钮,这个别人已经做好了,所以做法非常方便,在自己的页面里嵌入一段code就可以了。code在哪里?右键“view page source”找找看:)(不同的“分享到”样式可以去http://www.jiathis.com/找)。

为了避免每次写blog都要添加,我实际上是改了wordpress的theme,把这段code加到了framework里面去。听高人说,wordpress新的theme里面已经包含了这些元素,所以最方便的方式是换个theme就好可以了。本着专一的原则,我还是一个theme用到底好了……

以后所有的blog会集中在这里发布,然后分享到不同的地方。唯一麻烦的是不知道怎么处理微博消息。现在通过饭否->intscan、饭否rss->google reader->google buzz……折腾得很,如果有好方法能够做到一处更新多出同步的朋友,欢迎交流

更新:“分享到”按钮从主页面挪掉,打开单篇博客里的仍然保留

入门级廉价家庭高清方案

最近闲着没事突然想看高清,刚好赶着搬新家,1080P的电视也有了,于是开始做功课,也已经有了一个雏形,记录如下。 整个记录大致分成以下几部分:片源,下载机,播放器,视频显示,音频输出,音频播放。因为本人不太喜欢all in one的solution,于是乎每个部分大都有专用的设备 片源 高清的来源有很多种,最直接的莫过于买蓝光碟片,一方面可以满足部分人的收藏喜好,另一方面片源的质量也是没得说的。不过一旦选了蓝光碟片,播放器也就基本定了,只能是蓝光机,PS3,或者支持蓝光光驱的高清播放器,而考虑到价格的问题,这种方案直接被我否决 没有蓝光碟片,另一种最直接的方式就是从网上下载了。众所周知在以前那个BT的时代,只要有足够的带宽,下载还是蛮方便的。不过不要紧,BT没了,咱还有PT(不熟悉PT的同学可以自己google),以现有国内的网络带宽,下载达到线速肯定是没问题的。不过像ADSL这种畸形的小水管,没有上传带宽的保证,想混大站还是要花点精力的 下载机 既然选择了网络获取片源,一个24*7*365的下载机就很有必要了,特别是对于咱这种ADSL小水管,得时刻开着保证上传。下载机的选择也比较多,有人喜欢用路由器直接刷固件,有人喜欢用NAS,有人喜欢用HTPC,还有人喜欢用高清播放器自带的下载功能。不过原则上下载机需要具备的功能是:低功耗(毕竟是一直开机的),高稳定性(理由同左,搭建HTPC的同学可能要注意点)。路由器刷固件有个小缺点就是内存太小,不适合大量做种;HTPC本人不是很喜欢,抛开功耗不说,决定搞那么大个东西做下载太浪费了,而一旦加上播放功能又觉得功能没有独立开来,钱也是一个问题;NAS一直没有淘到便宜的,也被否决了。 幸好有朋友推荐了O2 Joggler(具体干什么的请看这里),这玩意真是神奇,1.33GHz Atom,512M RAM,触摸电容屏,功耗还不到10W,Perfect!灌了个debian在里面,还有点空间装个lighttpd,写点小东西远程控制rtorrent进行PT 价格:450米 播放器 播放器在整个流程中担任着视频解码输出,音频输出(可解可不解,不解码就需要支持源码输出,让后端的解码器负责解码)。如果选择了网上下载的高清资源,最简单的就是去搞个高清播放器(有兴趣的朋友可以看这里),小巧,便宜,功耗低,功能专注,我喜欢 家里正在用的是美如画R5,价格:499米 外加一个500G的2.5寸移动硬盘,价格:412米 视频显示,音频输出,音频播放 既然是介绍入门方案,一个支持1080P的液晶或者等离子电视就够了。对音频没有需求的同学可以直接用电视输出声音(比如只关注高清连续剧的,用功放,音箱也改善不大,因为目前电视剧基本都是两声道音频编码)。经常看电影大片想体验5.1或7.1的同学可以考虑入手次世代功放+音箱。用高清播放器HDMI接口接次世代功放源码输出,次世代功放负责解码并模拟输出到5.1音箱(对次世代有兴趣的可以看这里) 价格参考: Sharp 46 G100A: 5899米 天龙1311次世代功放: 1700米 JBL 200.5 5.1音箱:2700米 总结 价格方面,抛开家里的电视不算(不玩高清电视还是要看的),如果不需要好的音频效果,前期投入是O2 Joggler(450)+2.5寸500G硬盘(419)+美如画R5(499)=1368米,需要好的音频效果加上功放(1700)+音箱(2700)=5768;后期投入主要是下载机的电费: 0W O2 Joggler + 5W移动硬盘)=15W/小时,如果有收藏癖的可能还要算上后期购买硬盘的价格 在整个部署的过程中,碰到过一些小小的问题,留着提个醒 为了实现播放下载两不误,家里采用的是播放器播放时直接通过局域网访问连在O2 Joggler上面的硬盘,播放的同时下载,想无线访问的同学注意了,54Mbps的带宽网络直接播放720P快速切换场面还是会卡的,1080P就更不用说了。考虑到11n无线网卡在播放器上的兼容性,奉劝还是采用有线连接,100Mbps的局域网已经足够 还是跟上面的有关,为了实现100Mbps的局域网访问,我在家里是把O2 Joggler跟R5接在无线路由器的两个LAN口,实际情况证明有些无线路由如果有大量数据在LAN交换的时候无线网络以及WAN口的数据访问会受到影响,反应出来就是PC这时候上网会受到影响,所以无线路由器也不能为了省米而随便搞一个,一分钱一分货 占位

进位制与数学游戏

  现有1000个苹果,10个盒子,问各个盒子内应该分别放入多少个苹果,才能使得用户要买任意1至1000之间的一个苹果数,都可以给他(卖的时候是整个盒子卖,不能拆盒子的包装)。

  曾经在我的那些数学玩具们——二进制篇中提到过这个问题,看过那篇文章后,答案应该是不言而喻的,1, 2, 4, 8, 16, 32……

  如果把题目换成:现有一架天平,若干个砝码,每个砝码应该分别多重才能称出1至1000克整数克的物品?

  答案如果是不假思索的1, 2, 4, 8, 16, 32……自然是可以的,那我也不用废话写这篇文章了。实际上1000个苹果需要装在10个箱子里,用天平称1至1000克的物品却不需要10个砝码,只用7个就够了。

  差别在于:装苹果的盒子只以能是选择拿或者不拿,而天平则可以不放砝码,或者把砝码放在左边,或者放在右边。所以,我只用两个砝码:1克和3克,就可以称出1至4克的任意整数克。

  因此,解装苹果的问题需要用到二进制,解天平砝码的问题则需要用到三进制。二进制有0或1,真或假,开或关的两种状态。三进制则就有三种状态,0、1、2或-1、0、1(平衡三进制)。

  在生活中,也有不少东西具有三种状态。对于天平称东西的问题(尤其是那些在XX个小球中找出X个不同的智力题)或者一些带有约束条件的过河问题,都可以用三进制来建模和解决。

  进位制是一个很有意思的话题,以学习十进制和二进制的思维方式,我们就很容易的类推出各种进制的表现型式和性质,甚至于还可以捣鼓出“负2进制"之类的东东。感兴趣的TX可以考虑拜读Donald E. Knuth的神书TAOCP的第二卷。

  好吧,其实这篇文章算是看了《进位制与数学游戏》一书的一小点收获了,在这本书中,作者不厌其烦的为一个相同的数学模型创造出了无数的问题和实例,所以在看完整本书后,能发现的收获也就只有那么一小点。

  最后联想到了一个以前学编译原理时老师讲过的题,当时在课堂上我还真是没能自己做出来:

  构造一个DFA,用于识别字母表∑={0,1}上可以被3整除的二进制数。

Posted in Uncategorized

SSH over USB

某天在wiki上闲逛,发现一个SSH_Over_USB的entry,可以让SSH通过USB数据线来连接iOS,上面说的是在Mac OS下,当然在linux和Windows下也是可以的。原理是什么呢,是在Local运行一个usb多路复用(multiplexor)的daemon,然后运行client程序通过它建立本地<—>远程端口转发,最后就可以使用ssh进行基于usb tunnel的连接了。这个有什么用呢?对于jb/unlock肯定是有帮助的,还可以开发cydia上的app,折腾(可以装web server,或者在上面写python,java),甚至crack wifi密码都可以(现在暂时还不行)。

1.安装usbmuxd,可以看到在Ubuntu源里已经包含了,这里八卦一下,Mac App Store发布了,里面包含了1000多个应用,你可以下载/购买,更新,sounds familiar,linux folks?(see :Apple, Linux welcomes you to 1998!

#sudo apt-get install usbmuxd

usbmxd

2.usbmuxd的作者提供了一个简易的python-client,运行它,可以看到将本地的2222端口转发到了远程的22端口(即被将被连接的iDevice)

#./tcprelay.py –t 22:2222

daemon_listen

3.建立ssh连接,#ssh root@127.0.0.1 –p 2222

ssh_ipod

python-client的回显,连接建立了

daemon_accept

 

在Windows下就很简单了,最新版本的ifunbox,提供了USB Tunnel的功能,点击下USB Tunneling,如图

Untitled4

将本地的22端口转发到远程的22端口

Untitled3

ssh连接之,现在可以干很多事情了~

Untitled5

 

SSH over USB

某天在wiki上闲逛,发现一个SSH_Over_USB的entry,可以让SSH通过USB数据线来连接iOS,上面说的是在Mac OS下,当然在linux和Windows下也是可以的。原理是什么呢,是在Local运行一个usb多路复用(multiplexor)的daemon,然后运行client程序通过它建立本地<—>远程端口转发,最后就可以使用ssh进行基于usb tunnel的连接了。这个有什么用呢?对于jb/unlock肯定是有帮助的,还可以开发cydia上的app,折腾(可以装web server,或者在上面写python,java),甚至crack wifi密码都可以(现在暂时还不行)。

1.安装usbmuxd,可以看到在Ubuntu源里已经包含了,这里八卦一下,Mac App Store发布了,里面包含了1000多个应用,你可以下载/购买,更新,sounds familiar,linux folks?(see :Apple, Linux welcomes you to 1998!

#sudo apt-get install usbmuxd

usbmxd

2.usbmuxd的作者提供了一个简易的python-client,运行它,可以看到将本地的2222端口转发到了远程的22端口(即被将被连接的iDevice)

#./tcprelay.py –t 22:2222

daemon_listen

3.建立ssh连接,#ssh root@127.0.0.1 –p 2222

ssh_ipod

python-client的回显,连接建立了

daemon_accept

 

在Windows下就很简单了,最新版本的ifunbox,提供了USB Tunnel的功能,点击下USB Tunneling,如图

Untitled4

将本地的22端口转发到远程的22端口

Untitled3

ssh连接之,现在可以干很多事情了~

Untitled5

 

2011新年好

  好多人都在盘点2010,那我也跟风盘一下。

  2010年,我做了这些事:

  - 写了20篇博客

  博客空间总访问量16842 PageView(Google Analytics数据),比去年上涨23%。首页、折腾My BookSSH隧道折腾O2 Joggler加速Linux编译这几个页面的PV占总PV的50%。博客的RSS订阅数刚刚超过了100(以Google Webmaster Tool数据)。

  开通了Google AdSense,两个多月以来收入是$0.01,也就是只有一次点击——我自己点的。

  - 完成2010年的计划

  开车学完了,4月份开始,9月份结束,所有项目一次顺利通过。2010的财务收入支出相当清晰,不翼而飞的开销占总开销的0.2%。时间管理,不敢说自己做得很好,但有很多时候感觉比以前更充实,开始使用Remember The Milk来避免忘事。

  - 参与了4个自由软件项目

  1. 电子书开源固件OpenInkpot的中文化,提交了一个Patch。但这个项目在6月份以后几乎处于休眠状态,前景不明。

  2. 电子书管理软件calibre的开发,完成了豆瓣元信息插件、豆瓣封面下载插件、盛大Bambook设备接口、Bambook SNB文件格式支持等功能。同时参与它的中文化工作。

  3. GNU中文翻译小组。在加入这个沉寂的小组6年后,终于提交并发布了包括GNU首页在内若干页面的翻译。但由于这个项目活跃度仍然很低,还有不少页面翻译由于没有得到审核而没有发布。

  4. 继续开发PockeTwit。由于饭否刚刚回归,PockeTwit的只针对饭否回归发布了一个新版本,还没有更多的新功能加进去。也还没有能把饭否的支持并回PockeTwit的主干。

  - 我自己的自由软件项目

  1. LGuo的电子运行图。发布了一个新版本2.60,主要改进了多平台和多语言的支持。

  2. 豆饭。饭否回归后发布了一个新版本,没有新的功能增加。曾经把它分支成“豆推”用于支持Twitter,现在已经并回主线,成为一个隐藏功能。

  3. Windows Mobile上的火车时刻表和余票查询。这个软件数据来源是12306.cn的实时数据,所以会比离线时刻表更有价值,但在POC完成后一直放在那里没动了。当时停滞的原因是我画不出一个自己满意的界面……后来没有动力再做的原因是我觉得做客户端软件不如做个可以良好支持手机浏览器的Web版更有价值。

  - 几个重要的IT产品

  1. 汉王N510电子书。没花钱,因为它关注了OpenInkpot和calibre。

  2. LEGO Mindstorm NXT 2.0。去美国的时候犹豫再三还是决定买下了。不过迄今为止还没有用它原创出一个我自己满意的作品,倒是为leJOS贡献了一点文档中文化。

  3. 盛大Bambook电子书。我承认我这个买得头脑发热,不过还是因为它更多的参与了calibre项目。我写的calibre的Bambook插件正在参加盛大的Bambook程序达人赛,从目前来看,有望把投资回本,欢迎大家去为它投票。

  4. O2 Joggler。去年的My Book因为硬件升级阵亡,所以入了O2 Joggler。于是博客的很大一部分流量也从My Book的那篇文章转移到了O2 Joggler的文章。

  5. Linode VPS。秒杀到了免费赠送$100的Linode VPS,打算长期使用。

  - 旅游

  美国5日游(Blog文章(1)(2)(3)(4)(5)),新疆8日游送别京沪线最后一趟绿皮1462次+滁州琅琊山4小时游,创103万人次记录的上海世博一日游

  2011年,希望能做这些事:

  2011年应该会是忙碌的一年,要做的事很多,为了不在这里给自己太多的压力,就写个“没有鸭梨”的吧:2009年底中国发射了第一颗业余通信卫星希望一号(HO-68),2010年一直想着要试验一次卫星通联却没有实现,就把这个愿望放到2011年吧。小卫星的寿命非常有限,希望能抓住这次机会。CQ satellite, this is BG4XTR, calling CQ and standing by.

  几分钟前好友给我带来了新年的第一个好消息:2012年维也纳新年音乐会将由曾经执棒2006年维也纳新年音乐会的马里斯·杨松斯(Mariss Jansons)指挥,2006年的音乐会给我留下了深刻的印象,所以一直很期待他可以再次登台。期待10多个小时后即将开始的2011年维也纳新年音乐会,也期待365天后的2012年维也纳新年音乐会。新年音乐会总是在新年的第一天为我带来新一年全新的气息。

Posted in Uncategorized