川西-云南 记录(三)康定.新都桥

07-21 海螺沟->康定->新都桥

高山草地/藏民/牦牛

本打算在康定先休整一天再继续后面的旅行。结果一下车就遇到一位拉客的师傅,在商讨之后决定先去新都桥。事后证明这是一个正确的决定。康定就是一个普通的小城镇,并无太多的特别,而大家对附近的跑马山又无太多的兴趣。

在去新都桥的途中可以看到远处的雪山,这是这次旅行中看雪山看得最清楚的一次了。只可惜这座雪山的外形并不是很好,感觉比照片上的梅里雪山要差不少。

中途翻越的折多山海拔4200,这应当是我们第一次上4000的海拔。

翻过折多山后有种豁然开朗的感觉。漂亮的高山草地和牦牛群。同时也算正式进入藏区了,一路上的藏民多了起来。和我们一起拼车的是一群藏族MM。

由于是进藏的传统路线,一路上可以看到很多骑车进藏的朋友。在折多山上遇到一位50来岁的老先生,据他说也是有计划要骑行进藏的。

新都桥的大多房子已经是藏式的了,新都桥的路上也可以看到很多藏民。我们找的住处是一个藏式的背包客栈,客栈的前身应当是一个普通的藏族民居,里面的陈设还挺有意思。

新都桥在以前是一个专门关押犯人的地方,所以据说治安并不是太好。我们吃饭的餐馆老板提醒我们不要给对面的兵站拍照,不然相机很可能被没收。新都桥的店铺很早就关门了。后来想来,这应当和治安有很大关系。我们三人晚上还傻傻的在出去闲逛。不过索性没有遇到什么麻烦。

据说比新都桥更乱的是新都桥的下一站,雅江。后面的一位通行说,雅江街上都是有些佩刀的闲散藏民。他的客栈老板甚至在晚上将他锁在房内,禁止他出门。

在新都桥的晚上看到了久违的星空,虽和预想的还有些差距,不过夜算不错了。

川西-云南 记录(二)海螺沟

07-19 成都->海螺沟

多云/10小时的汽车/二郎山隧道/鑫飞客栈

坐了一整天的汽车,虽然有些累,却并不怎么无聊。蜀道难难于上青天。一路的山路,一面是嶙峋的峭壁,另一面是深涧和滔滔的江水。此前就有人提到雨季的危险性,但我一直都没太在意,到了才知道确实危险。路上看到多处的塌方和塌陷的桥梁。在一塌方处,甚至看到一辆完全压成废铁的汽车。

一路上最漂亮的应当是二郎山隧道一段了,出隧道后看见阳光照在对面的高山上,异常的漂亮。只可惜坐的公共班车并未在观景台停下,给我们提供拍照的机会。

二郎山山下的大渡河波涛汹涌。要在这样的河里游泳绝对是想不开了,一个浪过来就直接被拍死了。

下车后坐上鑫飞客栈的接客车,直接被拉到了客栈。鑫飞客栈在网上的口碑很不错,住过后感觉很好。老板是个很热心的人,客栈的很多地方也很人性化。

晚上和一起入住的几位朋友一起闲逛。

这里的雪莲花如同咸菜一样晾在门外,为此通行的MM还伤感了好久。

07-20 海螺沟

藏传佛教/冰川徒步/贡嘎雪山

本是和同客栈的几位朋友约好同游海螺沟,却不想小T实在是起不来,于是我们将出发时间给推迟了。

海螺沟是所能达到的海拔最低的冰川。不过海螺沟的冰川和我想象中的冰川要差挺远。本以为冰川就是一整块晶莹剔透的大冰河,海螺沟的冰川看到的更多的是碎石。后来知道下游的冰川通常都是这样的。冰川形成的同时总是夹杂着很多碎石,在冰川融化后碎石就浮到了冰川表面。

冰确实很滑,由于缺乏专门的攀冰装备,我们在冰川上行进了没远就无法继续了。由于时间还早,大家想了在后来感觉比较疯狂的主意,请保洁大叔带路,在冰川上徒步回三营。沿途都是巨大的碎石,其中有部分还有些松动。现在想来,如果冰川随便打个盹我们就惨大了。结果还不错,大家顺利下山,看到了大冰洞,此外贡嘎雪山还短暂的从云中露了个脸。本来看雪山是这次旅行的目的之一,没想到这次看到的雪山,成与雪山的少数接触之一。

晚上在住处遇到相约的朋友们聊到当天的经历,他们后悔没接收我们的邀请再游一遍冰川。不过话说来,冰川徒步绝不是什么好主意。徒步后我们的登山鞋都惨不忍睹了,象他们一样穿着运动鞋肯定会非常难受。

川西-云南 记录(一)成都

题记

很早就想做一次真正意义上的旅行。最早的计划是西藏,却不想在出行前改为了云南。在开始旅行后发现此次旅行的主要部分变成了川西,在进入云南后旅行就慢慢的开始结束了。

同行的朋友有老Y,小T

最终的行程为 成都-海螺沟-新都桥-稻城.亚丁-中甸(香格里拉)-虎跳峡-丽江-大理-昆明

07-16 火车->成都

带上加菲猫去旅行

7月16号出发乘火车去成都和同行的两位同事会合,正式开始此次旅行。打包的时候很无聊的将以前KFC送的加菲猫给带上,和加菲猫一起开始此次旅行。

07-17 成都

全面戒备的时代广场/专骗外地人的锦里/熊猫卡/武侯祠/春熙路/刘一手/酒吧

在放好行李后,老Y提议去锦里。成都小吃出名,锦里又是专吃小吃的地方,大家自然没有意见。不过事后才知道这里的小吃不但贵,且并不怎么正宗。据成都本地人说,锦里是专门忽悠外地人的,正宗的成都小吃只能在成都的一些小胡同里找。

去锦里的路上路过时代广场。或许是受7.5事件的影响广场上很多全面戒备的武警,老Y给兵哥哥拍了张照,被勒令删除了。

成都为了促进旅游业,推出了熊猫卡业务。外地游客可以花1¥办理熊猫卡,凭熊猫卡免费游览部分景区。锦里出来时间还早,大家开通好熊猫卡后直接到锦里附近的武侯祠溜达。

武侯祠是为了纪念刘/关/张等三国人物所建。


春熙路以美女出名。或许是天气不好,路上并没看到太多的美女。成都人皮肤好倒是真的,成都人的皮肤普遍都不错。

晚上和前同事老X在刘一手一起吃火锅。应当是现在的连锁火锅店足够发达了,并没有感觉刘一手和小肥羊相比有多好吃。

饭后游览廊桥和酒吧一条街。这里的酒吧很特别,都是类大排档的开放式。由于一条街都是酒吧,竞争也是异常的激烈。一路上都是用四川话拉客的酒保们。

最初计划在成都只停留一天。在review路线的时候感觉时间有些紧张,且按照我的最初计划住青旅,然后在青旅打探消息,安排第二天的行程计划。成都时并没有住青旅,导致该计划完全不能执行。大家决定在成都再呆一天,由小T查询过资料后再决定下一目的地。

07-18 成都

计划外的一天,悠闲的一天/老妈蹄花/人民公园/川大
最终决定取消去四姑娘山的行程,改道去海螺沟。由于是计划外的一天,基本上没有啥安排。睡觉睡到自然醒,吃过老妈蹄花(据前一天的的士师傅说不错)后,去住处对面的人民公园闲逛,在鹤鸣茶社喝茶。在我看来这里最大的特色就是有很多专门的掏耳匠。老Y去享受了一次掏耳服务,总共花费50¥。我感觉有些贵,不过据他说还挺舒服。

url_helper简化Django的url配置

django的url采用正则表达式进行配置,虽然强大却也广为诟病。反对者们认为django的url配置过于繁琐,且不支持默认的路由功能。

我倒觉得还好,只是如果觉得不爽,为什么不自己小小的hack一下,反正也就几行代码的事。

在这个背景下,我整了这个url_helper,利用url_helper可以简化配置和实现url的默认路由。所谓的url_helper其实就只有url_helper.py一个文件,使用的时候只想要import就可以。

url_helper的具体用法请参考具体的例子:

url_helper下载/范例

下面对使用方法做个简单的说明。

url的默认路由

from url_helper import execute, url_
import views
urlpatterns += patterns('',
    url(r'^(?P.*)', execute, {'views': views}),
)

在urls.py里增加如下配置,其中views为需要进行路由的views模块。url的规则为 /action/param1/param2/…/ 。

例如:

#/edit/4/
def edit(request, n="id"):
    html = """ edit object: %s""" % n
    return HttpResponse(html)

在没有指定action的时候默认使用的action为index。

提供函数url_简化url配置

仿照ROR的做法,参数用”:”标识。

例如:

url_(r’/space/:username/:tag/’, views.url_), 对应的django url配置为url(r’^space/(?P<username>[^/]+)/(?P<tag>[^/]+)/$’, views.url_),

#url_(r’/space/:username/:tag/’, views.url_),
#/space/vicalloy/just/
def url_(request, username, tag):
    html = """ username: %s 
tag: %s""" % (username, tag) return HttpResponse(html)

url_helper的完整代码

就如前面说的,代码非常少。不过实际应用的话,应当还需要做一些扩展。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from django import http
from django.conf.urls.defaults import url
import re
def execute(request, urls, views):
    """
    urls [methodName/]param1/param2/.../
    methodName default index
    """
    def get_method(views, methodName):
        try:
            return getattr(views, methodName)
        except Exception, e:
            return None
    method = None
    params = [e for e in urls.split("/") if e]
    params.reverse()
    if params:
        method = get_method(views, params.pop())
    if not method:
        method = get_method(views, 'index')
    if not method:
        raise http.Http404('The requested admin page does not exist.')
    return method(request, *params)
def url_(*args,**dic):
    regex = args[0]
    if regex[0] == "/":
        regex = regex[1:]
    regex = '^' + regex
    regex = regex + '$'
    regex = re.sub(":[^/]+",
            lambda matchobj: "(?P<%s>[^/]+)" % matchobj.group(0)[1:],
            regex)
    return url(regex, *args[1:], **dic)

DPress-Django开发的Blog

用Django做Blog实在是太过简单,所以在网上可以轻易的找到大量用django实现的Blog,DPress就是其中一个。

本想用这个项目做Django最佳实践的教程,不过发现自己实在是不擅长这个。此外该项目花费的时间比预期的要多出不少,以至到后期挺没耐心,功能方面也因此大幅缩水。

目前DPress的基础功能已经完成,文档方面我会在晚些时候补上。

有兴趣的朋友可以将代码下回来看看。如果要使用Django自己服务器启动起来非常容易。

  1. 使用SVN把代码下回来 http://dpress.googlecode.com/svn/trunk/
  2. 运行 \trunk\scripts\init.bat 完成一些必要的初始化(复制静态文件到相关目录)。
  3. 运行 \trunk\site\dpress\scripts\syncdb.bat 初始化数据库。
  4. 运行 \trunk\site\dpress\scripts\runserver.bat 启动服务。
  5. 访问 http://127.0.0.1:8000/admin/ 在管理后台添加日志。

DPress本着以最少的代价完成最多工作的原则,能不造轮子的地方就不造轮子。

  • Blog的编辑功能完全交给admin处理。
  • 使用filebrowser对admin扩展,实现对文件的管理。
  • 使用django-tinymce,实现html的可视化编辑。
  • 文章的Tag功能使用django-tagging实现。
  • comments功能使用django.contrib.comments。
  • Blog本身也大量“借鉴”了pinax的blog组件。
  • Blog支持使用书写格式有Markdown、Textile、普通文本,html(支持可视化编辑)、reStructuredText(当然,你需要安装有相关的库)。

对Blog应用来说,一般都会有较高的个性化要求。换肤基本上成了必备功能。很遗憾,这方面是django的软肋。换肤需要创建新的模板,并需要修改配置文件,指定使用新模板。好的方面是,DPress的模板在我优化过后,还是比较简单,改起来还算方便的。

虽然在开始DPress之前就计划的很好,本以为很容易就可以搞定,但事与愿违开发过程中遇中还是遇到了一些麻烦。

Pinax中的Blog组件使用threadedcomments来增加评论支持。在评论内容填写不完整时,会转到它自定义的页面。我认为这是一个挺不友好的设置,尝试修正无果。切换到django.contrib.comments后问题则更糟,不但评论出错会跳到自定义页面,即使评论成功了不会转到评论页面,而是给出一个评论成功的提示。最后没办法,还是自己将添加评论的代码给写了一遍。

此外在模板方面也折腾掉了大量的时间。模板的本身也是程序中重要的一环,但不少的可重用app都没有带任何模板,而且也缺乏模板方面的范例。在我看来,这也是django的第三方app普遍不太好用的重要原因之一。

下面上张图吧,模板的样式,是偷的朋友BLOG的(他也是偷别人的)。

初次尝试翻译较长的文章

以前也翻译过一些东西,不过都是非常短的文字。今天在网上看到一篇关于unladen swallow(Google的python实现)的文章,于是尝试对其进行翻译。

翻译东西确实不是一件容易的事。外文文章要读懂很容易,你只想要关注其中的重点即可,对于一些不重要的地方即使你没读懂也没关系。在翻译的时候你很容易的就会陷入了原作者的语言习惯,但外文和中文的语言习惯还是有很大的差别。其中语言习惯的差别不仅仅表现在句式结构上,还会贯穿在整片文字的语言组织上。所以如果你是按句翻译,那不管你如何组织语言,依旧会读起来很拗口。

除技术因素外,翻译还是一个很考验耐心的活。一篇可以在几分钟内读完的文章翻译起来得花几个小时。

虽然翻译得比较糟糕(自己都不想再读一遍),不过总算翻译完了,如果哪天有空就再休整一下,至少不要读得这么恶心。

unladen swallow: 加速Python

物质起源

卷首语

曾有那麽一段时间,忽然间脑袋里出现了很多奇奇怪怪的想法。然而现在似乎很久都没有出现过一些什么新的怪想法了。或许生活让人变得平庸,让人变得缺乏想象力。或许是最近看了太多关于时间穿越的电视剧,让我忽然间又想来了这些无聊的想法。

其实这些东西我在很久以前也写过,发布在某个论坛上,只是估计没几个人认真的看了。不过也没关系,这本就是我自娱自乐,一个人的YY。

人类对宇宙的思考,或许正是哲学的起源之一。同时,人们又用所谓的哲学去解释宇宙。下面我要写的是我对物质,对宇宙的YY。我想这些YY应当和早期的冥想家们的YY差不多。里面不会有太多的严谨的论据,更多的可能是因为这样,所以这样。用一个假设去论证另一个假设。

理论概览

  1. 光其实是一种微观粒子(光子),这些例子是组成一切物质的基础。
  2. 能量是光子从物体里逃逸的宏观表现形式。
  3. 物质和能量的转换,其实是光子在势能和速度间的转换。

能量 = 质量 x 光速平方

曾一直很迷惑能量本是无形的东西,怎么会变成有形的物质。不过换个角度,如果能量本身也是一种物质那这一切似乎就开始变得容易理解了。能量只是微观粒子的宏观表现形式,而能量的直观的表象形式就是热,更直观一些则是光。为了方便表述,我将这些能量粒子称为光子

这些粒子在无时无刻的运动着,其运动的速度为光速。同时由于存在类似分子间作用力的东西(我决定取名为”光子间作用力”),保证这些粒子可以聚集在一起,以物质的形式出现。同时由于类似水的蒸发,一些粒子会脱离出去。这时对外的表现形式就是发热/发光。

通常物体散热减少的粒子非常有限,人们无法察觉到质量的减少。但在进行核聚变或核裂变时,逃离的粒子数已经多到了可以测量的程度,这时人们发现物体的质量减轻了。由于粒子逃离的速度为光速,根据宏观世界的能量公式很自然的推导出了爱因斯坦的能量公式 能量 = 质量 x 光速平方。

至于为什么光子的速度为光速,我们可以将光子理解为,光子组成物质,其实是将速度转换成了势能,而光子的逃逸只是将势能重新转换成速度而已。

光的波粒二象性

光的特殊还在于它的波粒二象性。可能光子并不是单纯的粒子,它如同双子星一样,每个光子由两个质量相同的粒子相互围绕着。所谓的波长受两个粒子的旋转周期的影响。

光的传播和弯曲

物理学力告诉我们光是一种波,通常情况下波的传播是需要介质的。不过在前面的假设里,光本身就是一种物质,因此介质变得不再必要。与此相反,在真空里由于没有了其他物质的阻挡,光的传播速度反而是最快的。

曾一直认为光的弯曲是一件匪夷所思的事,不过既然前面已经假设光本身就是一种粒子,那这一切都变得容易理解了。

万有引力本身只是光子间作用力的一种外在表现形式。当万有引力足够强的时候,光子的运行轨迹将被明显的改变,看起来就是光弯曲了。

无法超越的光速

在爱因斯坦的理论里,物体的质量将随速度的增加而增大,在达到光速的时候物体的质量无限大。根据能量公式,我们可以算出超越光速所需要的能量是∞,此时达到光速根本就变成了一个伪命题。

在前面的理论中有个很重要的前提,质量增大。

物体的运动可以看成是组成物体的分子的宏观运动方向一致,再细分下去就是光子的宏观运动一致。

从微观上讲,对于接近光速的物体我们可以看成是用光子去轰击一个物体,来给物体加速。当物体的速度越接近光速的时候,光子相对物体的相对速度就越慢。当物体的运动速度达到光速的一半的时候,光子相对物体的运动速度也只有原来的一半。此时增加相同的速度,需要比静止时需要更多的光子(能量)。

同样,当物体的运动速度无限接近光速时,物体和光子的相对速度也无限的接近零,此时光子再也无法为物体加速。

时间变慢

和前面物体质量的增加类似。当物体的运动速度接近光速时,组成物质的粒子将的相对运动速度也将变慢。达到光速后组成物质的粒子间的速度降完全变为零。此时对该物体而言,以前的物理活动都停止了。

这就有如将某个人冰冻了N年,然后某日解冻,虽然世界已经改变,但对被冰冻的人而言,他还和被冰冻的那天一样。

黑洞/虫洞/平行宇宙/时间倒流

我相信黑洞的存在。黑洞应当是个超越人类理解能力的世界,黑洞已经不再符合已知的物质的组成理论。而且或许我们永远也不可能知道。黑洞里面的世界,或许除了YY没有更好的了解方式。

至于所谓的虫洞等时髦的科幻名词,还是忘了的好。

黑莓8320初步印象

把玩了两天的黑莓,总体感觉黑莓的可玩性和windows mobile相比还是有不小的差距。

这里将黑莓的优缺点罗列一下。

优点:

  1. 屏幕
    黑莓即使在阳关下也可以清楚的看清屏幕上的文字,效果确实不错。
  2. 轨迹球
    轨迹球确实是非常的好用,可以说比我预想的要好不少。
  3. 通话效果
    很清晰,是一个合格的电话。
  4. 相机
    其实8320的相机效果和其他同档次的手机比起来没任何优势,但和以前的那个手机比起来也算个优点吧。
  5. 无线网络
    感觉gprs还挺稳定的。虽然8320的wifi和同事的钻石比起来能找到的热点要少很多,但估计连上后也差不多。
  6. 键盘
    以前以为一个手按起来会不方便,但实际使用起来也还好。
  7. mp3
    效果还不错,基本上达到我可以接受的水平了。

缺点:

  1. 应用程序少
    我觉得这是黑莓的最大缺点,甚至让我产生了“是否要用以前的ppc手机当pda”用的想法。黑莓系统封闭,加之中国的黑莓用户少,这直接导致了黑莓应用程序的极不丰富,而适合国人使用的就少之又少。
    1. 输入法
      在wm下梅花/A4等第三方输入法一大堆,但到了黑莓下面就只看到一个梅花的第三方输入法,而且还是以外挂的形式出现的。虽然梅花输入法本身不错,但外挂的方式还是给使用带来了一定的麻烦。
    2. busline
      wm/plam下一个著名的公交查询软件。但转了一圈,黑莓下就是没有类似的东东。
    3. 列车时刻
      wm下列车时刻表软件有好几个,而且都还不错。黑莓下虽然有,但似乎并不太好用。
    4. 地图
      wm下一抓一大把,怕的不是找不到,怕的是不知道选哪个好。黑莓下的选择就少多了,而且似乎都不太好用。这里也要庆幸下,好在没买8820,相比而言相机比GPS实用些。
    5. 万年历
      wm下的掌心万年历还是非常不错的。黑莓下虽然也有万年历,但那个也太简陋了点吧。
    6. …… 
      感觉再写下去都罄竹难书了。
  2. 今日主题
    wm的桌面有很强的定制性,而且我觉得wm默认的今日主题还挺实用的。约会和待办事项都会直接显示在桌面上,这样一目了然。黑莓就只能点开程序去看了。
  3. 都是翻新机,价格并不便宜
    单看黑莓的价格似乎还不错,但如果考虑到这些都是翻新机,其实价格也并不怎么样了。其实翻新机也就算了,但其中居然还有不少打孔机(使用报废的不合格主板组装的黑莓),这就让人崩溃得多了。而且我就很不幸的买到了传说中的打孔机。
  4. 偷流量
    黑莓会自动的连接GPRS,每个月都会因此用掉几M的流量,而且还是走的cnnet。如果事先没有了解,那很可能就这么莫名其妙损失不少米米。
  5. 触屏
    说来这个应当不算缺点了,但人家wm有,就也说说吧。不少情况下有触屏还是要方便不少的。比如网页浏览,图片浏览,地图浏览啥的。