修正 Django Step by Step 的一些例子

周末看了 limodouDjango Step by Step 入门教程,写得很棒,通俗易懂,谢谢先。Django 发展太快,现在已是 1.0.2 版本,可惜 Django Step by Step 上面的例子还是 0.9x 版本,所以编译运行上面的例子时会出现一些问题,主要是一些兼容问题,列出来以供参考:

第六讲

3、编辑 wiki/models.py


pagename = models.CharField(maxlength=20, unique=True)

在 Django 1.0.2 中,上面的 maxlength 应改为:

max_length

6、修改 wiki/views.py


c = Context({‘pagename’:page.pagename, ‘content’:content})

上面代码输出 content 时会把 “< >” 等字符转义输出成 “< &gt”,这个时候需要关闭自动转义,以便 content 输出 HTML 代码。改成如下:

c = Context({'pagename':page.pagename,'content':content},autoescape=False)

还有一种方法就是在 wiki/page.html 里改成:

{% autoescape off %}

{{ content }}

{% endautoescape %}

第七讲

3、修改 address/models.py


gender = models.CharField(‘性别’, choices=((‘M’, ‘男’), (‘F’, ‘女’)),
maxlength=1, radio_admin=True)

注意上面的 radio_admin=True 已经在 Django 1.0.2 中不适用了,不能写在 field 里,admin 和 model分离了,把 models.py 的全部内容用以下代码替换:

from django.db import models

# Create your models here.
class Address(models.Model):
        name = models.CharField('Name', max_length=6, unique=True)
        gender = models.CharField('Sex', choices=(('M', 'Male'), ('F', 'Female')), max_length=1)
        telphone = models.CharField('Telphone', max_length=20)
        mobile = models.CharField('Cellphone', max_length=11)
        room = models.CharField('Room', max_length=10)

from django.contrib import admin

class AddressAdmin(admin.ModelAdmin):
        model=Address
        radio_fields = {'gender':admin.VERTICAL}

admin.site.register(Address, AddressAdmin)

6、修改 urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns(”,

# Uncomment this for admin:
(r’^admin/’, include(‘django.contrib.admin.urls’)),
)

新的变化已经在 Django 1.0.2 生成的默认 url.py 里了,只需要把 urls.py 里面的 comment 前面的 # 去掉就可以了。

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

# Uncomment the next line to enable the admin:
     (r'^admin/(.*)', admin.site.root),

7、增加超级用户

manage.py shell
>>> from django.contrib.auth.create_superuser import createsuperuser
>>> createsuperuser()

只需要改成下面一条命令:

./manage.py createsuperuser

以上修正在 Django 1.0.2 + Python 2.5.1 + Mac OS X 10.5.7 上调试通过。

用 Kannel 短信网关发送 SMS

前段时间 VPSee 做了一个用 SMS 给学生发送考试成绩的项目,想法是:通过一个 SMS 网关用短信把考试成绩发送给学生,成绩出来的时候大部分学生都赶着回家或者在回家的路上,所以用短信通知比较合适,而且短信价格低廉,费用可以忽略不计,如果要给几十个学生一个一个用手机打字发短信会累死人的。这个项目逻辑很简单:

1、从 “学生成绩数据库” 里读取学生成绩;
2、从 “学生个人档案数据库” 里读取学生手机信息;
3、通过 SMS 网关把学生成绩发送给学生手机。

这个项目需要架设一台 SMS 网关用来发送短信,Kannel 是目前 open source 里面最好的 SMS gateway,安装和使用都很方便,目前只支持 Linux 和 Unix-alike 操作系统。架设 SMS 网关前需要一张 SMS 卡以及一个可以把 SMS 和电脑联系起来的 PCMCIA 卡。VPSee 用的是 Vodafone 3G Wireless Card。下面介绍如何用 Kannel 网关发短信。

安装 PCMCIA 卡和驱动

首先需要把 3G 卡装到电脑上,如果是笔记本的话有 PCMCIA 卡插槽很方便,如果是台式机的话还需要一个集成 PCMCIA 的 PCI 卡。然后在 Linux 下装 3G 卡的驱动。

下载和编译

从 Kannel 官方网站上 kannel.org 下载 source code,然后编译安装。

继续阅读 »

DirectSpace:$10 512MB OpenVZ VPS

directspace

DirectSpace 位于美国西海岸的 Portland, Oregon,公司声称2001年创立,但是 whois 显示公司域名是在2003年5月才注册的。这家公司的亮点是 24×7×365 服务,而且10分钟技术响应服务,难道它在东西半球都有人^^?1-2小时开通 VPS,10天 money back 保证。VPS 配置如下:

服务器在 Portland, Oregon
OpenVZ
自制控制面板
20GB 硬盘
512MB Guaranteed RAM,1024MB Burst RAM
1000GB 带宽
2个独立 IP
10美元

硬件和网络信息:

2x Intel Dual Core Xeon

The DirectSpace network is powered behind 31Gbps of pure Tier-1 bandwidth giving way to the lowest latency and jitter around the globe.

RamHOST:$5.99 80MB OpenVZ VPS

ramhost

RamHOST 又是一家 open source developer 创办的 startup。创始人是内容管理系统 RAM-CMS 的作者。Ram HOST 2009年1月份才建立,还是一个 one man startup,创始人自己开发的 VPS 控制面板,网站也是在自己开发的 CMS 搭建的,可以看出技术背景挺强。VPSee 提过比较偏爱 open source developers 创立的小公司,比较有技术保障,和有技术背景的人交流的时候会对自己有很大帮助。Ram HOST主要面向个人用户,为个人用户提供 real human 服务,价格厚道不耍花样(网站上是这么说的)。网站上还有很多有用的技术信息,VPS性能测试,下载速度测试,服务器状态信息等,还有一个控制面板的 demo。30分钟开通 VPS,30天返款保证。还有有很多关于正在运行的服务器的介绍,硬件/软件配置都很详细,还可以看到服务器的状态。看上去像某个 open source 爱好者/geek在自己家车库开办的一家 startup,公司2009年1月份才创立,不过创始人已经在技术领域打滚了很久。有2款 VPS 在10美元以下,配置如下:

服务器在 Kansas City, MO
OpenVZ
自制控制面板
25GB 硬盘/30GB
80MB Guaranteed RAM,192MB Burst RAM/128MB,256MB
200GB 带宽/300GB
5.99美元/8.49美元

很奇怪网站上没有公布服务器的硬件信息,也许创始人用的是自己定制的廉价 Linux 机器,不好意思把配置公布出来,一些 performance guru 似乎都有这种嗜好,榨取机器的性能。嗯,VPSee 也有这种毛病:)。网络信息:

Level 3, Cogent, AFS, and KCIX

如何与 VPS 服务商有效沟通?

communicate

当 VPS 出现问题的时候,就需要和 VPS 服务商联系,希望能尽快解决问题。这里涉及到一个如何和 VPS 服务商沟通的问题。其实沟通是一门学问,不只是与 VPS 服务商才有关系,在各行各业,各个工作岗位,与人沟通都是一个很重要的技巧。在网上沟通和在现实生活中的沟通也是一样的,需要从起码的尊重开始。

态度

以什么样的态度参与沟通很重要。服务器 down 了,数据丢了心情很糟糕,但是不能让这些坏情绪影响到沟通。沟通之前先静下来理理思绪。用 email 或其他方式交流时要注意尊敬对方,没人会愿意帮助一个不懂得尊敬的人。虽然在网上大家都看不见,但是沟通的基本道理还是和线下一样的。西方文化和中国非常不同,不是说我是顾客交了钱买了东西就是上帝,在西方文化里也有尊敬一说,而且是一种平等的尊敬。

怎样联系

提交 support ticket 和 email 是最常用的联系方式,也是最有效的。因为时差的关系,很多 VPS 服务商的 live chat 通常都是 offline 的状态。因为费用和语言的关系,电话联系通常都是最后的选择,大多数时候还是免费的 email 最有效。在用 email 联系的时候最好使用你自己注册 VPS 时用的信箱,这样便于 VPS 服务商辨认你的身份。如果你用个不知名的信箱,可能你的 VPS 服务商还需要你的身份确认,email来email去浪费了时间。在写 email 的时候最好能提供一些信息帮助服务商识别你的信息。比如:姓名全称,域名,用户名/帐号,reference number 等。当然这要看不同的 VPS 服务商了,有时候只需要你的 VPS 注册信箱就够了,什么都不用提供。

Email 内容

对于母语是中文的人来说用英文写信交流可能有点困难,而且考虑到西方文化,说话/交流的方式的不同,不是说直接把中文翻译成英文就能行的通,所以这些都应该注意到。比如:

中文:我想买2个香辣鸡翅。
英文:Can I have two spicy chicken wings?
错误:I want 2 spicy chickent wings.
错误:Give me two spicy chikcen wings.

不要笑,在最近的一次国际展览会上,我可真遇到过,我带一个大学老师去换美金。现在大学老师少说也是博士级别的人物,不是博士怎么能进大学,英语少说过了 n 级,那个老师是处理国际学生事务的,我想她的英语应该还可以不需要我跟着,所以我就不好意思在别人换钱的敏感时候离得很近,就站得比较远,那个老师对着老外说“Give me the money”。她的本意是給她当地的钱,老外以为她是在抢钱,汗~~

西方文化,英语,都是很大的话题,在这里就只提一下,不扯远了。不过大家也不用太担心,你的 VPS 服务商知道你是外国人,会在英语/语法/习惯/文化方面不那么在意。美国是个多元化的国家,美国人已经习惯了包容别人的文化。所以只要客气尊重,诚恳的提出自己的意见和不满,VPS 服务商是会努力解决的。

所以最重要的还是要尽量把自己的问题描述清楚,好让 VPS 服务商的技术人员能迅速查找问题所在,及时帮你解决问题。看下面2个例子:

坏的例子:
Hi, my server is messed up and I cannot log in, please fix it.”

好的例子:
Hi Mr./Mrs/Company Name, I am having a problem with my server login. I was trying to add a new user to replace the default “admin” account. I forgot to add my new user account to ‘wheel’ group and I cannot ‘su’ as root. I’m locked out. Can you help me fix the problem? Thanks.

Regards,
vpsee.com

首先是称呼部分,开始和人家交流的第一封信一定要有称呼,和中文信一样,直接略过称呼是不礼貌的行为,后续 email 可以略去称呼如果你直接 reply 的话。描述问题要准确,包含信息多一些,你是怎么把系统搞砸的,你做了些什么,好让对方能从你的操作中迅速定位问题所在,以便及时解决。做过软件开发和软件测试的人都知道,有时候描述问题挺难的,测试的人描述出来的 bug,开发人员在自己的机器上就是不能重现,不能重现就不能定位 bug,不能定位 bug 就不能快速解决,这就需要双方能有效地沟通。所以尽可能的给 VPS 技术人员提供多的信息,帮助他们也是在帮助自己。据 VPSee 的经验来看,VPS 服务商不管他们的产品怎么样,至少服务态度都比较友善,VPSee 还没遇到邮件不回或者粗鲁的抱怨客户的情况。

虽然这篇 blog 是针对 VPS 用户写的,希望能对其他的 web hosting 用户也有点帮助。

SQL or NoSQL

nosql

最近的 NOSQL meetup 又把SQL数据库的 scale 问题抛出来了。NoSQL guys 对 SQL 不满的主要原因是:SQL 数据库不能很好的 scale。我们可以通过 caching,用 master-slave 分担负载,给数据库横向/纵向分区等技术来减轻 SQL 数据库的负担,但是还不能真正做到 scale。目前最好的方法还是修改应用程序的代码把数据库分散存储在不同的数据库服务器上。随着 Web 应用的规模越来越庞大,这些方法始终没有解决 SQL 数据库 scale 的根本问题。Google/Amazon/Yahoo/Facebook 等都陆续自立门户,纷纷推出了自己超大规模 scale 的数据存储方案,这些方案用来处理海量数据,已经不能叫它们传统的数据库了,更像是分布式键值/文件存储系统。

什么是 scale

什么才算是真正的 scale?

How well a solution to some problem will work when the size of the problem increases, when the size decreases the solution must fit.

我对 scale 的理解是至少要满足下面三个条件:

1、扩展伸缩。加入一个新的数据库服务器后,原先的数据库的容量就扩大,性能也能增大。能立刻自动的把数据部署到新的数据库服务器上,不需要应用程序干预。拿掉一个服务器后,反过来也一样。

2、应用程序透明。对应用程序来说应该是透明的,应用程序不关心也不应该知道数据存储是怎么存储的,存储在哪个服务器上。

3、自动接管/自愈。一台服务器坏了或者 down 了不丢失数据,不影响其他数据库服务器和整个数据库的运行。

一个好例子就是RAID5:

继续阅读 »

丢失 root 的默认 shell

今天犯了一个愚蠢的错误,修改 /etc/passwd 文件把 root 的默认 csh shell(/bin/csh)改成 bash shell(/bin/bash),退出后 root 就 su 不进去了,提示找不到 /bin/bash。

% su root
Password:
su: /bin/bash: No such file or directory

看了提示信息才回过神来,刚在 FreeBSD上 装的 bash shell 的路径是 /usr/local/bin/bash,不是 /bin/bash,我想当然的以为 FreeBSD 会把 bash 装到 /bin/bash。

在 Linux 下遇到这种问题可以这样解决,su 时指定一个 shell 登陆:

$ su --shell=/bin/sh -

或者

$ su -s /bin/sh

在 FreeBSD,Solaris,AIX,以及达到 C2 安全标准的 Unix 上面遇到这种问题就只能重装系统了,让 VPS 管理员重新 load 一个操作系统。或者如果管理员能 physical access 你的服务器的话,应该可以用 cdrom 启动你的系统后恢复,不过太麻烦了,还要给管理员 root 密码,没有重要数据丢失的话不如重新 load 一下。看看FreeBSD 对安全性的要求:

继续阅读 »

in2net:$9.95 256MB Virtuozzo VPS

in2net

in2net 公司有很长的历史,1996年是一家提供拨号和数据中心服务商,99年后公司售出拨号业务专注数据中心和网络,然后演变成一家提供数据中心基础架构服务商,拥有全套自己的设备和数据中心。公司在加拿大温哥华。网站上提供的信息很全,甚至公司还公布了数据中心和服务器的图片,看得出来公司对自己的数据中心很有信心。产品应该很可靠,VPSee 推荐。其中一款 BudgetVPS1010 VPS 配置如下:

服务器在 Vancouver,Canada
Virtuozzo
Plesk控制面板
15GB 硬盘
256MB Guaranteed RAM,256MB Burst RAM
200GB 带宽
9.95美元(需年付才能拿到这个价格,月付是19.95美元)

服务器硬件:

Intel Xen Dual Quad-Core

SitePenguin:$4.99 128MB OpenVZ VPS

sitepenguin

Site Penguin 刚刚成立3个月,已经发展了300多个客户,最近在webhostingtalk上推出 25% off 的打折 VPS,算是很便宜了。网站上没有公司信息,没有公司地址,没有联系电话,估计是 one man 项目。网站上有用信息很少,没有服务器,网络,数据中心地址等信息,估计公司刚起步还在建设当中。VPS 现在只支持一种操作系统 CentOS。看在便宜的份上,VPSee 还是列出来吧,VPS 配置如下:

OpenVZ
5GB 硬盘
128MB Guaranteed RAM,256MB Burst RAM
50GB 带宽
4.99美元

根据25% Off ALL Hosting Plans For Life! Resellers & VPS Too!这个帖子,现在有25%的折扣,也就是只要3.75美元的价格。

更新:截止到7月31日,已经连续72小时不能访问,可以宣告 SitePenguin 到此结束,VPSee 不再追踪,不推荐 SitePenguin 的产品。
更新:截止到7月30日,已经连续48小时不能访问。
更新:截止到7月29日,已经连续24小时不能访问。
更新:sitepenguin.com 在2009年7月28日晚不能访问。

sitepenguin error

用 VPS 给博客做镜像

对于一个每日 PV 不超过1万的小博客来说,性能不是问题,一般的 VPS 都可以搞定,稳定性远比性能要重要。服务器 down 掉,会导致博客不能访问,不能更新,长时间 down 的话会失去读者,影响自己的写作计划/情绪,影响pagerank等等。前段时间 Hyperv 报漏洞,导致 FsckVPS 的很多客户丢失重要数据,长时间都不能恢复。小博客/网站的性能不是那么重要,每天没有那么多的访问压力。

为了给博客增加可靠性,给博客做个简单镜像是必要的,幸运的是我们的要求不高,不需要那些什么实时热备份,均衡负载,透明切换等高科技,只需要每隔一段时间同步一下博客以及数据库就可以了,很少有人能坚持每天写一篇博客,能每天写两篇就算牛博了,所以每天同步一次就够了。这里将讨论如何用 rsyn,ssh 和 mysqldump 来同步博客和数据库。

约定

为了更好的描述细节,这里作以下约定:

继续阅读 »