2008年5月10日

有备无患:绕过 GHS 用自定义域名发布 Blogger

2007年1月,Google Blogger 的自定义域名功能推出不到一个星期,就被 GFW 给废了。原因就是 GFW 隔断了国内用户对 Google 的免费主机托管服务 ghs.google.com 的访问。

今天试着将 App Engine 应用部署到自己域名的时候,发现 App Engine 不需要将 CNAME record 指向 ghs.google.com,从而可以避开 GFW。而同样的方法也可以适用于 Blogger。方法如下:

  1. 把 Blogger 的发布方式切换成“自定义域名(Custom Domain)”。在“你的域名(Your Domain)”一栏中填上域名,比如,py.thonic.org。保存设置(Save Settings)。
  2. 在你的域名注册商那里,修改域名(thonic.org)的 DNS 设置。为子域名(py)添加一条 A record,指向下面四个 IP 地址的其中之一。举例来说,就是添加这样一条记录:py.thonic.org 86400 IN A 216.239.34.21
    • 216.239.32.21
    • 216.239.34.21
    • 216.239.36.21
    • 216.239.38.21

DNS 设置的改动需要一段时间来完成,一般不会超过24小时。这样就可以重新使用 Blogger 的自定义域名功能了,只是,这次又可以持续多久呢?

2008-06-26 UPDATE

我把上面的 IP 绑定到自己的域名了,ghs.luliban.com。以后也可以像 ghs.google.com 一样,添加一条 CNAME 记录到 ghs.luliban.com 来绑定 Google Blogger 或者 Google Apps 了。

标签: ,

2008年3月22日

有备无患:Blogger传统模板:红黑「春日」v2

这是一个简洁风的单栏外加widget dock(wyt:直译“小玩意儿坞”-_-b)的Blogger传统模板(Blogger Classic Template)。之所以叫“红黑「春日」v2”,是因为从前一个模板中继承了一些想法,比如红与黑的色调——尽管并没有继承“凉宫春日”的元素。希望大家喜欢。

使用前说明

尽管模板上有一些示例用的widgets,但大多数情况下,大家仍然要自己动手修改模板。也就是说,这需要一点点HTML的基础——别担心,不会太多,我会在下面说明大部分的问题。如果你支持这个模板,请保留widget dock最右面的“关于本模板”(About this template)。另外,如果你想要分享这个模板,请遵循Creative Commons的“署名-非商业性使用-相同方式共享”许可。

演示blog

Haruhi Suzumiya 'Red and Black' v2

下载模板

安装

解压缩haruhiv2.tar.gz,将得到两个文件夹iconset72/和images/,以及7个文件template.html,haruhiv2.css,haruhiv2iehacks.css,haruhiv2.js,prototype.js,effects.js和readme.pdf。

  • iconset72/:目录下有模板默认的widget dock的图标。如果你想继续使用的话,上传到FTP服务器的/images/目录。需要说明的是,这些图标来自Mac4Lin Leopard GTK Icon Theme,我为它们加上了倒影,大小为72x108px。推荐大家扩展dock的时候仍然用这个主题的图标,因为它们不仅漂亮,而且风格统一。
  • images/:目录下的是背景图片,同样上传到/images/。
  • template.html:HTML模板。接下来我们要修改的基本上就是这个文件了。
  • haruhiv2.css:CSS层叠样式表。如果你已经把图片(包括背景和图标)上传到/images/,那么就不用改它了,不然你需要把文件里的URL指向相应的图片目录。上传到服务器的/styles/目录。
  • haruhiv2iehack.css:IE专用的CSS,同样上传到/styles/。
  • haruhiv2.js:Javascript脚本。上传到/scripts/目录。
  • prototype.js:Prototype javascript框架。上传到/scripts/目录。
  • effects.js:Script.aculo.us javascript框架的效果库。上传到/scripts/目录。
  • readme.pdf:这篇文章的PDF版本。

自定义模板

“红黑「春日」v2”模板需要自定义的部分有:导航栏(navigation),摘录栏(sinppets)和小玩意儿坞(widget dock)。导航栏位于整个页面的右上角,将网站的布局清晰的呈现在用户的面前。摘录栏在blog标题和导航栏下方,分为左中右三个,你既可以在这里放Twitter饭否叽歪,也可以放blog feeds,将你和blog的个性自信的表现出来。小玩意儿坞总是在页面底部,它将大量的widgets收藏其中,只在用户点击时展开相应的widget,节省了网络带宽之外,更重要的是有Fisheye效果的dock,显然很酷。(wyt:不过,可怜的IE6不会看到这个效果,因为IE6不支持有透明度的png图片)

接下来将介绍三者的自定义方法。

导航栏 Navigation

导航栏在<div id="navigation" />中,每个tab应该是class="nabs"的SPAN。示例如下:

<!-- Begin Navigation -->
<div id="navigation">

    <span id="homepage" class="navs">
        <a href="<$BlogURL$>">首页</a>
    </span>

    ... ...

</div>
<!-- End Navigation -->

摘录栏 Snippets

摘录栏在<div id="snippets" />中,它包括标题和列表,标题的class="snippet-title",列表的class="snippet-list"。不过根据实际情况的需要,你也可以把列表改成一段文字或图片,只要小心不要超过原有的大小破坏页面布局,就可以了。示例如下:

<!-- Begin Snippets -->
<div id="snippets">

    ... ...

    <!-- Right snippet -->
    <h4 class="snippet-title">订阅我的博客</h4>

    <ul class="snippet-list">
        <li><a href="http://luliban.com/blog/feeds/atom.xml">原始feed</a></li>
        <li><a href="http://feed.luliban.com/">Feedsky feed</a></li>
        <li><a href="http://feeds.feedburner.com/luliban">Feedburner feed</a></li>
    </ul>

</div>
<!-- End Snippets -->

小玩意儿坞 Widget Dock

Widget Dock比前面两者复杂一些,需要修改三个地方。首先是<div id="dock-container" />。Dock container中定义了所有dock item,是一个id="dock-name"的SPAN,其中IMG的SRC就是之前上传的图标URL,宽度默认为48,高度为72。其次是<ul id="widget-list" />。Widget list中有widgets的实际HTML代码,每个widget应由一个id="widget-name"和class="widget"的LI包装。最后是Javascript脚本haruhiv2.js,其中第二行中定义的widgets变量,包含了所有widget的name模板中的dock container和widget list的name,必须和Javascript脚本中widgets的name相对应。

示例如下:

template.html
<!-- Begin Dock container -->
<div id="dock-container">

    ... ...

    <span id="dock-profile">

        <a href="<$BlogOwnerProfileURL$>" class="dock-item" onclick="return false;">
            <img src="/images/profile.png" width="48" height="72" alt="Profile" />
        </a>

    </span>

    ... ...

</div>
<!-- End Widget dock -->

... ...


<!-- Begin Widget list -->
<ul id="widget-list">

    <!-- Begin Widget profile -->
    <li id="widget-profile" class="widget" style="display: none;">

        <h4 class="widget-title">My Profile</h4>

        <!-- Profile container -->
        <$BlogMemberProfile$>

    </li>
    <!-- End Widget profile -->

    ... ...

</ul>
<!-- End Widget list -->

haruhiv2.js
// A list of widgets' names
var widgets = ['profile','search','recent-posts','gallery','favorite-blogs','rss','about'];

然后只需要将模板发布,就大功告成了。有什么意见,建议和砖头,欢迎留言。


P.S. 把feed换了个目录,Feedsky又要重新验证了:869bc65b

标签: ,

2008年3月16日

有备无患:为Blogger传统模板(FTP发布)添加标签云

Blogger的传统模板一直不支持标签的输出。虽然有hack可以从feed中抓取标签列表,但不能分析每个标签所含的文章数,所以仍然不能生成随标签使用频率而字体大小和颜色变化的真正意义上的“标签云”。

所以,我写了一个python的自动化脚本,可以从ftp服务器上分析blogger文件,计算出每个标签的使用频率,并将这些信息保存在服务器上,供模板中的javascript脚本调用。效果么,你可以看看这个演示网页,或者点击我blog下方widget dock左起第四个“文件夹”图标(wyt:还在用IE6的同学们应该看不到。因为IE6不支持widget dock用的透明png,所以我把widget dock给隐藏起来了,实际上“标签云”还在那里。IE7、Firefox、Opera、Safari等应该都没问题)

使用方法很简单,要执行脚本首先得有python。Linux大多默认安装,Windoze上安装Python的方法见这篇文章

另外,脚本中用到了BeautifulSoup分析HTML文件,simpleJSON生成JSON格式的数据流。你也必须安装这两个python模块。如果你和我一样用Gentoo,just emerge it。Windoze用户可以用easy install工具快速安装。

接下来下载压缩文件:konatag.tar.gz,解压缩用得到两个文件konatag.py和konatag.js。

konatag.tar.gz

修改konatag.py其中的ftp服务器,用户名,密码以及归档(archives)的路径参数,以便脚本可以访问你的ftp服务器。

if __name__ == '__main__':
    options = dict(
        server='yourftpserver',    # 服务器地址不用包含ftp://
        username='yourusername',   # 用户名
         password='yourpassword',   # 密码
         path='/path/to/archives/'  # blogger的归档路径
    )
    ftp = FTPServer(**options)
    blogger = Blogger(ftp)

保存退出之后,在终端(wyt:也就是Windoze的命令行)执行:

$ python konatag.py

事实上,如果高兴的话,可以像我一样把这个脚本扔到crontab的计划任务中,每星期执行一次自动更新你的Blogger的标签信息。

执行完脚本之后,登录ftp,在你的blogger归档目录中会多出一个konatag.json的文件,这是一个包含JSON格式数据的文本文件。不用去管它,将konatag.js上传到任何你能记住的目录。接下来我们将要修改Blogger模板。需要说明的是,konatag.js使用prototype库,所以在模板里还必须包含相应的js文件。

<!-- 将js的调用加入<head> -->
<script type="text/javascript" src="/scripts/prototype.js"></script>
<script type="text/javascript" src="/scripts/konatag.js"></script>
<!-- or: 如果你想直接调用我这儿的javascript脚本的话 -->
<script type="text/javascript" src="http://demos.luliban.com/scripts/prototype.js"></script>
<script type="text/javascript" src="http://demos.luliban.com/scripts/konatag.js"></script>

<!-- 这个div是“标签云”的容器,加入<body>中
     id可以随意指定,但要与下面的javascript对象的第一个参数相一致 -->
<div id="konatag"></div>

<script type=text/javascript>//<![CDATA[ 
    // Konatag的第一个参数是刚才提到的div的id
    // 第二个参数是脚本上传的JSON数据的路径
    new Konatag('konatag', '/blog/archives/konatag.json', {
       startSize: 13,    // 使用频率最低的标签的字号,单位是px,请随意设定,下同
        stopSize: 24,     // 使用频率最高的标签的字号,单位同样是px
       startColor: '#3d81ee',    // 使用频率最低的标签的颜色
        stopColor: '#930fe3'      // 使用频率最高的标签的颜色
    });
//]]></script>

这样就大功告成,只需要重新发布一遍模板就可以了。有什么意见,建议和砖头,欢迎留言。

标签: , ,

2007年12月18日

有备无患:用饭否动态更新博客的slogan

有时候灵感来了,会蹦出一个很赞的blog口号,但每每想到还得重新发布一遍整个blog,常常就此放弃了。刚才想到一个利用饭否的解决办法。分享之。

方法很简单:把红色的"blog-description"换成相应的元素id,把橙色的"luliban"换成你的饭否ID,然后把下面这段javascript代码复制粘贴到模板最后(即</body>之前)即可。(wyt:Twitter,或其他提供API的微内容服务也可以用这种方法,代码需根据其API作相应的改动)

<script type="text/javascript">//<![CDATA[
function getDescription(json) {
    document.getElementById('blog-description').innerHTML = json[0].text;
}
//]]></script>
<script type='text/javascript'
    src='http://api.fanfou.com/statuses/user_timeline.json?id=luliban&amp;count=1&amp;callback=getDescription'>
</script>

标签: , ,

2007年9月29日

有备无患:Blogger传统模板——红黑「春日」

心血来潮,做了一个“凉宫春日”主题的Blogger传统模版——红黑「春日」。红黑色调,三栏,Adsense兼容,以及免费。

大家先看看这个Demo:
http://haruhi-black-red.blogspot.com(需穿墙)
http://demos.luliban.com/haruhiv1/

点这里下载:haruhiblackred-0.4.tar.gz


页面截图:

标签: ,

2007年4月23日

悠言悠闲:解封了?

OR NOT?


Update:看起来Blogger又要经历一个很长的冰封期了。2007年8月12日

标签: , ,

2007年3月26日

悠言悠闲:南京归来,Blogger又遇“鬼打墙”

南京实习

南京之行,与其说实习,倒不如说是毕业旅行。当然,我没有任何不满意,尤其是车费可以报销的情况下。

十天时间,我们大多在参观国营厂。上世纪末的国企改革,催生了一批成功的民营企业家。他们通过良好的政府关系,用低廉的价格接收行将入墓的国企,去其糟粕取其精华,整合到自家企业,实现了企业实力的飞跃。优胜劣汰,本是市场经济的基本规律,但是由于历史原因,即便是被剥离的“劣等资源”——一些陈旧的设备,和习惯了吃大锅饭,而被认为不符合企业精神的工人们——企业家也不能名正言顺的抛弃他们。这也许就是南京有线电厂,原国营734厂的现实。我们参观了他们的厂房,生产线上空无一人。 “不好意思,今天就是参观一下”,负责人向我们解释,“我们没办法解答你们技术方面的问题,因为工人们要下个星期三才上班。”而那天还只是星期五。

Blogger又被封了,没人知道多久会解封,又或者将是一次“冰河时代”。但是,日子要继续过,blog也要继续写。既然feedsky的服务器没有办法“红杏出墙”,我们只能“引狼入室”了。

将feedsky的feed源地址更改为,http://www.pkblogs.com/idoshi/feeds/posts/default

直接访问blogger可以通过,http://www.pkblogs.com/idoshi

2007-8-28 UPDATE:现在的blog是用ftp发布的,不用再受GFW的气了。现在feed是http://feed.luliban.com,欢迎订阅

标签: ,

2006年8月23日

悠言悠闲:Hello world!

开张大喜,终于从live space搬到blogspot了。呵呵,虽说是“搬”,也就是挑了几篇最近的文章纪念一下罢了。
暮然回首,发现自己几乎把全线服务都搬到了Google上。Gmail,Writely,Spreadsheets,因为好用;Picasa,Earth,Desktop,因为特别;而Blogspot,Reader,Web album,却是因为无奈。因为教育网的国际网限制,因为教育网的乌龟网速,不得不放弃了一些更好的服务,幸好这也只剩下一年不到了。

标签:

2006年7月17日

南言北哲:博客即媒体,无关理念 or 商业

新浪的陈彤说,"博客并不能成为第五媒体",并以前些天北京地震为例,"即使国家地震局局长在自己的博客上预告此事,网友也不会相信。这就是博客天生的缺陷"。

这种说法倒是有趣。且不说以政府公务员的水准知不知道博客为何物还是个问题。但是如果国家地震局局长是以公开的局长身份在博客上发表预告的话,我想即使怀疑地震预报的准确率,也没有理由去不相信他的预告。因为博客不是自家闺房,即使是BBS,也都是某种意义上的公共场所。道德上,每个公民都应该对自己在公共场所的言论负责任,何况公众人物。不然老徐在新浪博客上瞎话胡说也就罢了,如果日本外相麻生太郎也在他的日记里胡言乱语的话,政治影响可是大大滴。

所以我想陈彤的意思是,因为网络的匿名性,所以博客不可信。因为不可信,所以博客不可能成为媒体。

但是,每个博客有自己的 blogosphere,中译"博客圈"。每个人对于blogosphere理解可能不尽相同,可以是折射万象人世演绎百态人生的"博客世界";也可以是山头林立党同伐异的"博客江湖";或是鸿鹄之志者逐鹿称雄的"博客天下";当然也可以认为 "Blogosphere像是自然界里万物荣枯与共的生态圈" 。而我则现实主义一些:我的Blogosphere就是我在 Bloglines订阅的1180个RSS/Feeds。其中有我的朋友们的日记,也有我喜欢的博客,也有传统媒体的新闻报道,而数量上最多的是从keso那导出的rss/feed opml列表

或许陈彤还是和一年前一样,认为rss是炒作,博客是个性化bbs,草根码的字比垃圾邮件强不了多少。又或许不是,因为新浪自己也做起了草根的博客。无论如何,从名人博客到草根博客,新浪心不甘情不愿的事用实证明了rss不是炒作,RSS即价值,RSS订阅是一种价值肯定。你订阅了我博客的RSS,说明你认为至今为止我的博客是有价值的,同时也证明你对从今往后我的博客的价值也是充满信心。这种价值不只包括阅读价值,同时也包括信任价值。就像我的朋友们今天在博客上说上海地震了,我会相信,当然愚人节例外,因为他们是我的朋友。同样的,keso说今天北京地震了,我也会相信,当然也是愚人节例外。因为他的博客有足够的信誉度。不过,如果新浪说今天西藏又地震了,那我就要犹豫一下了,毕竟木乃伊出土能怀孕 女排能痛失奥运冠军,那西藏又怎么会地震呢?^^不好意思掘墓了,不过我还是要问,传统媒体真的比博客更值得信任么?

首先,博客来自三百六十个行业,比起专业新闻从业者来更有专业知识方面的资源优势。

其次,传统媒体是眼球驱动的。根据国家法规,新浪搜狐等网络媒体是没有独立的采访权和报导权的,只能够从传统的平面媒体上转载内容。所以在我看来,新浪也算传统媒体,只不过平面媒体重销量,网络媒体重点击,而本质上都是一样的要抓人眼球,所谓"眼球驱动"——因为要抓眼球,所以要抢新闻;因为要抓眼球,所以要有危言耸听的标题;因为要抓眼球,所以即使是假新闻也没关系。但是,博客只需细心关注自己的周围,认真表达自己的真实,就可以吸引到读者。

最后,传统媒体是利益驱动的。得罪政府的真相不报,得罪权贵的真相也不报,得罪有钱人的真相同样不报。而博客至少在目前看来是没有和钞票挂上钩。我们不用为写博客交钱,也不用为读博客交钱。我们甚至可以在不为BSP增加流量的情况下,RSS浏览大部分博客。同为蕾丝,我确实木有为老徐的44M流量做太多贡献。惭愧啊^^所谓"吃人手软",博客不吃嗟来之食自然不用手软,得以享有自由的言论权。

综上,至少在专业真实和自由上,博客比传统媒体更有传播的价值。

标签: , ,

2006年6月16日

南言北哲:boke examined,它不是博客

事情起因是这样的。

06月10日,号称"全球第一博客门户"的博客网 bokee.com ,发布了一份《关于博客专栏文章变先审后发的通告》 。虽然不清楚logo下面的"全球第一"是否违法了广告法律,不过,这份通告倒是会让博客网成了全球第一个挑战博客的根本精神——言论自由——的BSP(Blog Services Provider)。而我呢才恍然大悟,它为什么在好端端的拼音(博客的拼音,boke)后面加一个'e'?原来意思是boke examined(博客,经审查)。

所以如果哪天, 豆瓣 douban.com的域名改成doubane.com的话,那么keso大概会哭吧。^^

"先审后发"不是从blog开始的。传统的新闻媒体,报纸和杂志,是事先审核的典型。网络平面的新闻媒体虽然没有独立发布新闻的权利,也需要经过事先审查。而像MOP东北强国这样的论坛,也自愿半自愿非自愿的,改为先审后发的人工审查制度了。

但是,blog不一样,blog的审查权理应在用户自己手上。blog用户通过rss/feed订阅,可以编辑自己需要阅读的blog——如果觉得这个blog值得读,就添加进自己的subscribe list,如果那个blog狗屁不通,就把狠狠踹一脚它的屁股,删除掉这个feed。换句话说,blog的阅读权编辑权审查权天生就都在用户自己手上。

总之呢,事先的审查,如果把没人看的blog被切掉了,那就是编辑在做无用功,如果把有人看的blog被砍掉了,那就是强奸民意。把中心思想拔得高一点,就是网站编辑对blogger权利的干涉,对blogger精神的亵渎!hoho~~非政治面来看,大概就是这个情况了。

从政治面来说,言论自由。或许我们不曾拥有过言论自由,但也正因此没有人像我们会这样渴望自由的说话。从明朝东厂文化大G命的红W兵,从清代文字狱google.cn的阉割,中国政的府从来不会忘记"祸从口出"的古训。祖先的状况,并不比我们好到哪里去。把话反过来说,我们的情况,比起祖先也好不到哪儿去。

我最近在看 《攻壳机动队》。那里2024年的警察们像黑客入侵网站一样的入侵人类的"大脑"——人类掌握了把抽象的"灵魂"的数字化提取和保存的技术,自然也包括窃取的技术。他们把数字化的灵魂称之为ghost,通过把ghost加载到速度更快容量更大的电子脑,人类获得了违反自然进化法则的智能飞跃。——获取所需要的信息。如果这种技术用在言论控制会怎么样?看来未来也不容乐观啊。^a^

之前转过NY Times上Clive Thompson的"他不是google",里面的一句话,我很喜欢,


中国的民主革命"将不会存在"伟人",也不会存在Lech Walesa(波兰革命的领袖人物)式的英雄,激励被压迫的同胞,为民主而战的将是一亿毫不关心政治的年轻人,他们在博客上谈论他们的约会,他们喜欢的乐队,电子游戏——整整一代把公共言论当作日常习惯的年轻人。"

标签: , ,