合理的组织django的settings文件

django在一个项目的目录结构划分方面缺乏必要的规范,因此不同人的项目组织形式也千奇百怪,而且也很难说谁的做法就比较好。我根据自己的项目组织习惯,发布了一个项目dj-scaffold
前些天在reddit上为我的项目dj-scaffold打了个“广告”(见:http://redd.it/kw5d4)。不想评价甚糟,甚至差点被打成负分。其中更也人将这个项目说的一文不值。面对负面声音虽然会有些不爽,但其中的建设性意见还是需要听取的,至于那些纯属个人偏好部分就自动过滤了。
在谈及settings文件如何组织时,coderanger建议参考The Best (and Worst) of Django中的做法。文中的主要观点是开发环境和生产环境的配置都需要放到VCS中进行版本控制。参考文中的做法,我对settings模块做了部分调整。注:代码 https://github.com/vicalloy/dj-scaffold/tree/master/dj_scaffold/conf/prj/sites/settings

local_settings的弊病

为将项目的默认配置和本地配置区分开,最常用的做法是增加一个local_settings.py文件,并在settings文件的最后对该文件进行import。

try:
    from local_settings import *
except:
    pass

由此引发的问题是你不能对local_settings.py进行版本控制,部署环境的配置万一丢失将难以找回。

解决方案

针对该问题,建议的解决方案如下

合理的配置文件组织方式

|~settings/
| |-__init__.py
| |-base.py   #默认配置信息
| |-dev.py    #开发环境的配置
| |-local.sample    #本地的扩展配置在dev和production的最后进行import
| |-pre.sample    #设置当前使用的配置为生产环境还是开发环境
| `-production.py    #生产环境的配置

使用方式

DJANGO_SETTINGS_MODULE

django的admin脚本提供了settings参数用于指定当前使用的配置文件

django-admin.py shell --settings=settings.dev

在wsgi脚本中则可直接设置需要使用的settings

deploy.wsgi
os.environ['DJANGO_SETTINGS_MODULE'] = settings.production

简化参数
当然,如果每次使用django-admin.py的时候都要带上settings参数还是非常恼人,所以推荐的做法是在pre.py中配置自己所需要使用的配置文件。

SETTINGS = 'production' #dev

《时间简史》,换个角度看世界

在我看来对宇宙和时间的探索属于哲学的一部分。因为和哲学扯上了关系,所以本文的内容很乱。

跳出常识,换个角度看世界

花了几天时间,断断续续的将《时间简史》给看完了。坦白的说,量子物理学中那些自旋粒子的确有些将我搞晕。不过有时在想,这部分的理论或许并不是懂不的问题,真正的问题在于是是否愿意接受这个理论。就如日心说,并不是日心说有多复杂,只是对当时的人们而言这个理论太过激进,人们不愿意去接受这个事实。

我们总是喜欢习惯用自己固有的常识去理解世界。但是在进入更高一个层次的世界时,传统的常识往往都将“失效”,这时候我们需要利用新的理论来理解世界(古典力学->牛顿力学->相对论->量子论)。另一方面,在你接收新理论后,新理论也变成了你常识的一部分。对我们大多人而言,牛顿力学是常识,相对论和量子论还不是。

微观世界是一个足以颠覆我们所有常识的世界。在微观世界中的”物质“都同时表现出粒子和波的特性,这在我们日常生活中是无法找到相似物的。但我们总是很习惯的用自己的常识去理解微观世界,于是我们将原子解释为,电子绕着原子核运动,就如太阳系一样。

要想理解更高一个层次的理论就必须抛弃固有的常识去接受它。然而这毕竟不是一件容易的事,于是就有了”新理论被人们接受,不在于说服反对者,而是反对者的老去“这一说法。

深入本质

最伟大的理论都必须是简单的,如达尔文的进化论(适者生存),牛顿的万有引力定律(F=K*M1M2/R^2),爱因斯坦的能量公式(E=MC2)。如果一个理论还够简单,那是因为还不够接近本质,太多的噪声掩盖了真相。

所谓的本质其实是探索一切理所当然背后的东西。以前人们认为物体总是掉落到地上是理所当然,牛顿深入下去,于是发现了万有引力。

我有时会想到底什么是引力。两个物体间会有引力,不同电荷间也会有引力。引力看不见摸不着,但确实存在。到底是什么东西让两个看似相互完全无关的物体产生了联系。

到底什么是过去、现在、未来

曾一度在想到底什么是“现在”?“现在”的我为什么会是这个样子,这个年纪。当下次再思考“现在”这词的时候又是什么时候。

所谓的现在是和时间联系的动态。当你说现在的时候,所谓的现在已经成了过去。所谓的现在是一个动态的状态,如果将“现在”孤立的看则是一个没有任何意义的一个时间切片。

物理

一直觉得物理是门挺有意思的学科。在我看来物理属于一个混合学科,连接着理论(科学?)与常识。物理是一门功利性的学科,利用物理知识可以做出不少有趣的东西(小时候非常想)。同时在对宇宙的研究过程中,物理又同哲学扯上了关系。

超越光速之后的世界

CCTV报道了中微子超光速的新闻,还找了位专家讨论可能出现的时间旅行问题。 关于时间旅行,反正我是不信了。

相对论的理论基础是光速是不能超越的。 时间倒流有是基于相对论的。 如果相对论都不成立,那又何来的时光倒流? 光速未必不可超越,但光速却可能是人类所能接触到的极限。

超越光速后,时间将倒流?

相对论中提出时间是相对的,越接近光速,时间就越慢在无限接近光速时,时间将停止。于是很多人就想,如果超越了光速,那是不是时间就可以倒流了?听上去挺是这么一会事,其实完全没有根据。

A在跑步。

  1. 如果B静止,A相对B的速度为A的实际速度。
  2. 若B也在向前跑,则A相对B的速度为A-B的速度(时间变慢)。
  3. 若A、B的速度完全一致,则A相对B而言速度静止(时间静止)。
  4. 若B的速度比A快,则A相对B的速度为负。但不管这么样A也不可能会倒退回起点(时间倒流)。

超越光速之后的世界

每种理论都有自己的极限,要突破这层极限就需要有新的理论来进行支持。

  1. 在我看来牛顿力学是物理学的第一层极限,是人类在日常生活中可以接触到的力学极限。牛顿力学突破了这层极限,让我们可以很方便的分析日常生活中的力学原理。
  2. 爱因斯坦的相对论是继牛顿力学后的第二层极限。微观光速力学已经超越了人们的日常认识。说的玄一些,我觉的相对论是接近神之领域的理论。爱因斯坦相对论让我们可以解释微观光速的现象。
  3. 相对论的下一层理论即是超越光速后的世界,这或许会是我们永远无法涉及的神之领域。我们是通过各类的“物质”来了解世界。即使是光、能量都可以理解为物质。在超越光速后,我们对物质的理解可能都需要完全重构。

光速未必不可超越,但超光速的世界并不是相对论所能解释的。用相对论去YY时光倒流,就如用牛顿力学去YY近光速的世界一样,非常的扯。

黑客与画家读书笔记

目前比较火的一本书。书中认为程序员同艺术家们一样同为创造者。因为比较认同这个观点,所以对这书还比较感兴趣。读过后,感觉这书虽然没有期 望的好,却还是有些有意思的观点。

计算机科学?

计算机科学是个奇怪的说法,所谓到计算机科学其实是各类学科的一个大杂烩。

  • 数学家 类似冯•诺依曼这样的计算机理论学家,确切的说 他们更关心的是数学。只是研究的数学恰好是为计算机所用而已。
  • 计算机博物学家 某些人只研究计算机中到某一个极小到领域,然后在这个领域内做到极致。如某些人只做网络算法。
  • 黑客 黑客真正感兴趣的在于他们能做出来的东西。对他们而言,计算机犹就如画家的画笔。计算机只是将自己想法实体化的一个工具。

你希望自己成为其中的那一类?

作为一个”黑客“你需要多少计算机知识?

一个”黑客“对计算机理论知识的需求量和画家对颜料化学成分的了解程度差不多。简单的说,你只需要很少的计算机理论知识就可以了。

书中就点说的非常的简单,按照我的理解,书中到意见应当是不应当过于注重计算机的理论知识。相比深陷在细节中不能自拔,作为一个创造者更应当清楚 的知道自己在做什么,需要哪些知识。

犹如画家作画,程序的编写过程更象是一个涂鸦。画家们总是先将一副画的整体勾勒出来,再去做细节的刻画。程序也应当如此。你需要有了总体概念后才 知道如何动手,即使方向不对也能即使的修正。

我的计算机到我的数据的转换

这本书成书于2004年,作为第一代互联网公司的创始人,这书的作者还是非常有远见的。

反人月神话

按照人月神话的观点,人越多效率越低。若团队的每个成员都具备极高的素质,则可依靠极少的人创造出惊人的价值。

viaweb直到被yahoo收购的时候也只有3个人在维护。他们有招人,却只是为了能让公司卖个好价钱而已。招来的这些人也只是分配一些”闲活 “,干放着。

反人月神话-程序员工作效率的差别

做个不恰当到比喻,即使堆砌再多平庸到画家也无法画出蒙拉丽莎。优秀程序员和平庸程序员到差别也是如此。优秀程序员可以高效的完成任务,平庸的程 序员不但不能迅速到完成任务,甚至可能因为引入bug而带来麻烦。优秀程序员和平庸程序员直接效率的差别可能会超过100倍。

反人月神话-互联网创业项目需要多少人?(我自己扩展的)

有种说法,互联网创业项目的初期团队人数最好控制在2~3人,最多不应当超过5人。团队中设计1人,程序1~2人。有人或许会感到诧异,如此少的 人怎么可能做出优秀的产品。

  • 首先,如果你在一开始就希望把项目做的非常复杂,这个想法本身就是有问题到。
  • 其次,如果成员足够优秀,他们创造出的东西远比一对平庸团队的要多。
  • 另外,即使优秀的人才窝在大公司中也很难做到高效。

LISP

文中大量谈及LISP,相信会有不少人因为这书去学习LISP。作者认为编程语言是存在优劣的,哪些不优秀的东西都已经灭亡或将要灭亡。 JAVA就属于要灭亡的编程语言之一。 优秀的编程语言应当是精巧可再设计的。语言本身的规则非常的少,但借助这些规则你可以很方便的定义出自己的规则。 按照我的理解,作者的想法是,一个理想的编程语言可以让用户很方便的设计出适合自己应用场景的编程语言。

If I Could Tell You

曾有一段时间对New Age非常感兴趣,听了不少New Age。然而我一直没太听过雅尼这位New Age代表人物的音乐。或许是因为潜意识里会有几分叛逆的成分。想,太火的东西多半就俗了。

最近在虾米电台听到这首If I Could Tell You。非常优美的一首曲子。这曲子给人的感觉就如曲名一样,If I Could Tell You。心中纵有千言,却又不知如何说起,只能化为这曲低吟浅唱。

Gliffy confluence插件的破解

Gliffy是一个在线画流程图的工具,或者简单的说Gliffy就是web版的Visio。Gliffy的用户体验非常的好,加打开浏览器就可以使用,使用起来非常的方便。Gliffy同时推出了confluence的插件版本。在安装插件后可在confluence中方便的编辑和插入流程图。

同事对Gliffy甚为垂涎,只是Gliffy还有些小贵。confluence插件版,500用户的许可要卖到2000$。

虽然同事的利诱有些不靠谱,但偶尔干干着方面的事也还算有趣,那就动手吧。

注:下面只是简单的讲解一些关键点,如果你对java一窍不通,那还是罢手吧。

java应用破解的通常做法是:将文件反编译,找到认证部分的处理,直接将认证结果返回true。java的反编译工具推荐Java Decompiler

Gliffy的jar包比较大,但其中java代码并不是很多。而且Gliffy采用的是仿君子不防小人的做法,里面的java代码并未混淆过。在代码中有个目录非常的扎眼\src\com\gliffy\core\license\。再做些简单的分析我们即可找到真正的关键点SimpleLicenseManager.java

不得不说Gliffy的命名还是非常规范的。以函数名为线索,很容易就可以找到我们要的函数validLicenseValues。简单粗暴的将函数返回值改为true。打包并重新安装插件。

如果问题就这么解决了,那也未免顺利的有些不太寻常。虽然可以成功安装,但运行的时候抛出一堆的异常。试着进入Gliffy的管理界面,依旧是一堆的异常。虽然我们强制的将认证结果设置为了true,但某些地方还需要获取license的到期日期等信息。由于读不到相关数据,直接出异常了。

既然如此,那我们需要先将license信息写入系统。

validLicenseValues还原,然后找到设置license的函数installLicense。在函数中注释掉license认证相关的代码,让系统在忽略认证结果的情况下强行写入注册信息。修改后的java文件在执行时还会报getHostedStatus的虚函数错误。按理说这个函数应当会在子类中被重写。不过我们先不管这么多,把它修改为普通函数并直接返回0。

重新打包安装,然后进入Gliffy的管理界面,license信息随便填写,然后保存。保存是成功的,但认证还是失败。修改validLicenseValues函数,重新打包安装。这次由于我们有写入注册信息,因此就不会再出现先前的空指针异常了。

享受Gliffy吧。

注:Gliffy确实是个好东西,如果喜欢,还是尽量说服公司出钱买吧。

宋江是个悲催的CEO

一直不太喜欢《水浒》,总感觉水浒讲述的是一窝土匪的故事。既然是土匪,那自然是粗莽之辈,明明是闯了祸却还自以为是快意恩仇的英雄。陆陆续续的看了些最近热播的《新水浒》,发现却还有些意思。又看了些水浒的影评,想若将水浒当初单纯的土匪故事确实有些浅薄了。

不知是否是张涵予演义的问题,总感觉梁山上大小头目无不欢乐,只剩宋江一人独自悲催的想着如何招安。

若将水泊梁山比作一个公司,宋江无疑就是这个公司的CEO。大多公司在创业的初期都会干些见不得光的勾当,这即是所谓的原罪。对梁山而言,他们的原罪自然就是打家劫舍了。打家劫舍这原本就是他们的营生。但到宋江接手时后,梁山的规模已经足够壮大,传统的打家劫舍已难以满足公司的正常运作。风光无限的背后,梁山正遭遇着有史以来最大的危机。作为CEO的宋江不得不思索梁山的未来。细想下来,梁山可走的路并不多。

  1. 破罐子破摔,继续打家劫舍。周边的村子都抢的差不多了,老百姓们能搬的估计也都搬的差不多了。梁山名声在外,能绕道的商旅们都绕道了,送上门的生意也不好做。现在想抢的话只能发兵去抢比较远的村子了。若不建立分部,发兵的成本无疑太高。若建立分部那无疑相当于对朝天的宣战,走上了正式造反的道路。固守梁山可以活,却没有未来。
  2. 干掉朝廷,转正上市。上市,无疑是不少公司的终极目标。然,上市对梁山来说难度太大。梁山虽多次击败了朝廷的“围剿”,但毕竟实力悬殊且当时朝廷并未真正发力。若朝廷认真对待,梁山难免不成为另一个方腊。抛开朝廷不谈,这世界上类似梁山这样的小山头也不少,如何从这些山头中脱颖而出也并不容易。有人或许会觉得我有贬低梁山实力之嫌,人家梁山可是有108位好汉啊。这108好汉西数下来,可用的还真没几个。最近流行所谓的基因文化,每个公司都有所谓的基因,这些基因决定了这个公司能做成什么,做不成什么。梁山的基因即是所谓的义,谁的功夫好谁就牛。那些“好汉”说白了也只是社会上混不下去的失败者而已。梁山文化说难听就是有勇无谋的莽夫文化,谋士很难在梁山上混的下去。宋江虽也想招募些牛人,但他能给出的筹码实在太少。宋江想靠自己的一己之力扭转梁山的莽夫文化实在太难。
  3. 被朝廷招安。这相当于找个大公司收购,操作难度比上市容易的多,而且套现快。招安对梁山而言不失是个不错的出路。

为众弟兄分配好封号,发行完内部股,安抚完兄弟后就要开始正式实施招安计划了。

招安计划的实施过程中,朝廷方面谈不拢,兄弟们又不理解。宋江近乎孤军奋战,还得两面讨好,难免不悲催。

最后推荐影评:看到77集了:失败者连撕破脸皮的资本都没有了

SkyDrive无限空间了,去整个吧

当初gmail的1G免费空间开启了大容量网络存储的先河,现在SkyDrive都无限容量了。不过SkyDrive由于没有客户端,只能使用网页上传,如果你想用他存储大量文件小文件,这几乎是一个不可能的任务。好在现在已经有不少支持SkyDrive的第三方客户端了。

试试Gladinet Cloud Desktop吧,Gladinet Cloud Desktop可以为你提供类似Dropbox的体验。更详细的说明参考小小众软件的介绍Gladinet Cloud Desktop – Skydrive/Docs/Picasa/Amazon S3 客户端程序

我已经决定将所有的照片都移到SkyDrive了,大家也去试试?

违和感

有时候会莫名其妙的想到一些词,然后按照自己的方式对其进行注解。最近想到一个词违和感
违和感按照百度百科的解释是:因为与周围的环境不适应、不协调,而感到无法融入其中,产生一种疏离感的意思。比如当一个人身处国外,面对着不同的文化背景时,就可以用“违和感”一词来表达他无法融入大环境的感觉。
违和感按照我给出的解释是:“心、行”以及“言、行”不一致使人产生的不舒服的感觉。比如,奥德曼的理想是打小怪,但每天干的活却是给领导写报告,奥特曼心中的不适就是违和感。又如领导每天都要大家提高自觉性,自己却每天上班不干正事。领导言行不一致使手下人产生的不爽就是违和感。
真正可以做到心、行合一,言、行合一的人毕竟是少数,所以违和感总是普遍存在的。
都没什么机会出去玩,相机也只能拍拍杂物玩了。

那些似是而非的寓言

很多寓言故事都是如此,刚听上去的时候似乎很有道理,但再仔细推敲下去似乎又并不是这么一回事。

木桶原理

木桶原理的核心内容为:一只木桶盛水的多少,并不取决于桶壁上最高的那块木块,而恰恰取决于桶壁上最短的那块。

木桶理论即形象又生动,似乎无懈可击。但木桶理论的前提是建立在“木桶是用来盛水”的这个前提下。或许用这个木桶来盛水本来就是个错误。如果这个木桶是用来挑石块,那这块短板或许就变的无关紧要了。

有时候认清自己的优势,了解如何将自己的价值最大化要远比盲目的取长补短要强的多。

葡萄理论

《围城》中谈到:“天下只有两种人。譬如一串葡萄到手,一种人挑最好的先吃,另一种人把最好的留在最后吃。照例第一种人应该乐观,因为他吃的每一颗都是吃剩的葡萄里最好的;第二种人应该悲观,因为他每吃一颗都是吃剩的葡萄里最坏的。不过事实上适得其反,缘故是第二种人还有希望,第一种人只有回忆。”

其实让我说,这和吃葡萄的先后顺序没多少关系,悲观者看到的永远都是悲观,乐观者看到的永远都是乐观。一千个观众眼中有一千个哈姆雷特。