[cc lang="python"]from twisted.web.server import Site
from twisted.web.resource import Resource
from twisted.internet import reactor
class PaymentRequired(Resource):
def render_GET(self, request):
request.setResponseCode(402)
return "Please swipe your credit card."
root = Resource()
root.putChild("buy", PaymentRequired())
factory = Site(root)
reactor.listenTCP(8880, factory)
reactor.run() [/cc]
Tuesday, August 17, 2010
Thursday, August 12, 2010
CACHE CONTROL WITH HTACCESS
[cc lang="apache"]
# Cache Control with .htaccess EXPIRES BY TYPE
# from http://forum.powweb.com/showthread.php?t=62786
### turn on the Expires engine
ExpiresActive On
### expires after a month in the client's cache
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/x-icon A2592000
ExpiresByType application/pdf A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/plain A2592000
### expires after 4.8 hours
ExpiresByType text/css A17200
# Please note that the "A" before the numbers above stands for Access.
# This means that the stopwatch starts when a client accesses the file.
# You can also use "M" for modified.
# TIME CHEAT SHEET
# 300 5 MIN
# 600 10 MIN
# 900 15 MIN
# 1800 30 MIN
# 2700 45 MIN
#
# 3600 1 HR
# 7200 2 HR
# 10800 3 HR
# 14400 4 HR
# 18000 5 HR
# 36000 10 HR
# 39600 11 HR
# 43200 12 HR
# 46800 13 HR
# 50400 14 HR
# 54000 15 HR
# 86400 24 HR
#
# 86400 1 DAY
# 172800 2 DAY
# 259200 3 DAY
# 345600 4 DAY
# 432000 5 DAY
# 518400 6 DAY
# 604800 7 DAY
#
# 604800 1 WEEK
# 1209600 2 WEEK
# 1814400 3 WEEK
# 2419200 4 WEEK
#
# 2419200 1 MONTH (FEBRUARY)
# 2505600 1 MONTH (FEBRUARY LEAP YEAR)
# 2592000 1 MONTH (APRIL, JUNE, SEPTEMBER, NOVEMBER)
# 2678400 1 MONTH (JANUARY, MARCH, MAY, JULY, AUGUST, OCTOBER, DECEMBER)
# 31536000 12 MONTH[/cc]
[cc lang="apache"]
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
[/cc]
# Cache Control with .htaccess EXPIRES BY TYPE
# from http://forum.powweb.com/showthread.php?t=62786
### turn on the Expires engine
ExpiresActive On
### expires after a month in the client's cache
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/x-icon A2592000
ExpiresByType application/pdf A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/plain A2592000
### expires after 4.8 hours
ExpiresByType text/css A17200
# Please note that the "A" before the numbers above stands for Access.
# This means that the stopwatch starts when a client accesses the file.
# You can also use "M" for modified.
# TIME CHEAT SHEET
# 300 5 MIN
# 600 10 MIN
# 900 15 MIN
# 1800 30 MIN
# 2700 45 MIN
#
# 3600 1 HR
# 7200 2 HR
# 10800 3 HR
# 14400 4 HR
# 18000 5 HR
# 36000 10 HR
# 39600 11 HR
# 43200 12 HR
# 46800 13 HR
# 50400 14 HR
# 54000 15 HR
# 86400 24 HR
#
# 86400 1 DAY
# 172800 2 DAY
# 259200 3 DAY
# 345600 4 DAY
# 432000 5 DAY
# 518400 6 DAY
# 604800 7 DAY
#
# 604800 1 WEEK
# 1209600 2 WEEK
# 1814400 3 WEEK
# 2419200 4 WEEK
#
# 2419200 1 MONTH (FEBRUARY)
# 2505600 1 MONTH (FEBRUARY LEAP YEAR)
# 2592000 1 MONTH (APRIL, JUNE, SEPTEMBER, NOVEMBER)
# 2678400 1 MONTH (JANUARY, MARCH, MAY, JULY, AUGUST, OCTOBER, DECEMBER)
# 31536000 12 MONTH[/cc]
[cc lang="apache"]
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
音乐需要social吗
音乐是用来听得,没错,从黑胶唱片到数码光碟,从电台DJ到Youtube,时代在发展,音乐得传播也在改变,唯一不变得是聆听。用Walkman得时候在聆听,交换音乐的方式是朋友和同学之间交换卡带和音乐,面对面得方式让我们可以更直接,更生动的对喜爱得音乐进行交流。用Ipod得时代我们依然在聆听,但是我们用网路交换,再也没有面对面的热情和欣喜。所以,我们加入社区得元素吧,让更多的人来填补感情空缺。于是last.fm来了。然后呢,电台VJ得位置被Youtube取代。聆听少了,social多了。
Wednesday, August 11, 2010
极速 Twisted Web 60秒(5): 错误句柄
[cc lang="python"]
from twisted.web.server import Site
from twisted.web.resource import Resource
from twisted.internet import reactor
from twisted.web.error import NoResource
from calendar import calendar
class YearPage(Resource):
def __init__(self, year):
Resource.__init__(self)
self.year = year
def render_GET(self, request):
return "
class Calendar(Resource):
def getChild(self, name, request):
try:
year = int(name)
except ValueError:
return NoResource()
else:
return YearPage(year)
root = Calendar()
factory = Site(root)
reactor.listenTCP(8880, factory)
reactor.run()
[/cc]
from twisted.web.server import Site
from twisted.web.resource import Resource
from twisted.internet import reactor
from twisted.web.error import NoResource
from calendar import calendar
class YearPage(Resource):
def __init__(self, year):
Resource.__init__(self)
self.year = year
def render_GET(self, request):
return "
%s" % (calendar(self.year),)
class Calendar(Resource):
def getChild(self, name, request):
try:
year = int(name)
except ValueError:
return NoResource()
else:
return YearPage(year)
root = Calendar()
factory = Site(root)
reactor.listenTCP(8880, factory)
reactor.run()
[/cc]
ubuntu下MySQL服务器更改目录后问题
[cc lang="text"]
100811 18:42:06 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
[/cc]
修改下面文件中得权限列表可解决问题。
[cc lang="text"]/etc/apparmor.d/usr.sbin.mysqld[/cc]
[cc lang="text"]/web/data/mysql/ r,
/web/data/mysql/** rwk,[/cc]
100811 18:42:06 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
[/cc]
修改下面文件中得权限列表可解决问题。
[cc lang="text"]/etc/apparmor.d/usr.sbin.mysqld[/cc]
[cc lang="text"]/web/data/mysql/ r,
/web/data/mysql/** rwk,[/cc]
通过与Java的比较,迅速掌握Groovy
Groovy和Java的相同点有:
0+, 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 19+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+
+表示Groovy不但涵盖了Java的语法,而且还有增强部分
Groovy和Java的不 同 点有:
1, 2, 5, 7, 9, 11, 16, 17, 24, 25, 26, 27,33
0+, 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 19+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+
+表示Groovy不但涵盖了Java的语法,而且还有增强部分
Groovy和Java的不 同 点有:
1, 2, 5, 7, 9, 11, 16, 17, 24, 25, 26, 27,33
Groovy轻松入门—搭建Groovy开发环境
Groovy既然是Java帝国的王储,当然少不了Java的支持。
先安装JDK(推荐版本为1.5及1.5以上,当然1.4也可以)
然后设置Java的环境变量:
先安装JDK(推荐版本为1.5及1.5以上,当然1.4也可以)
然后设置Java的环境变量:
- 设置环境变量[cci lang='text']java_home[/cci](设置环境变量[cci lang='text']XXX_home[/cci]的一个好处是只要修改XXX_home的值,与之相关的[cci lang='text']%XXX_home%\bin[/cci]等的值都相应改变,这样就能做到‘一处修改,处处修改’)右击‘我的电脑’-> ‘属性’ ->‘高级’-> ‘环境变量’-> 点击‘新建’(用户变量与系统变量均可,挑一便是)-> 输入‘变量名’为java_home -> 输入‘变量值’为JDK的所在目录(默认安装位置为[cci lang='text']C:\Program Files\Java\jdk1.6.0[/cci],我装的是JDK6.0)-> 点击‘确定’-> 环境变量[cci lang='text']java_home[/cci]设置成功
- 设置环境变量path环境变量java_home设置好之后,我们开始设置环境变量path前面的步骤与‘设置环境变量[cci lang='text']java_home[/cci]’相同,到点击‘新建’按钮时,选择新建用户变量(因为系统变量path已经存在,如果追加在长串已存在的path值后面,比较凌乱) -> 输入‘变量名’为path -> 输入‘变量值’为“[cci lang='text']%java_home%\bin;[/cci]” 不包括双引号“”
- 设置环境变量classpath环境变量path设置好之后,我们开始设置环境变量classpath前面的步骤与‘设置环境变量java_home’相同,到点击‘新建’按钮时,选择新建系统变量(我的个人习惯,你也可以选择新建用户变量)-> 输入‘变量名’为classpath -> 输入‘变量值’为“[cci lang='text'].;%java_home%\lib;[/cci]”不包括双引号“”,注意不要漏了最前面的小圆点.如果你已经安装了JDK,并设置好了Java环境变量,请跳过上述过程,直接安装GDK(只需3步)(如果您下载的是Groovy安装版Download Windows-Installer: Binary Release http://groovy.codehaus.org/Download,请将安装过程中出现的选项都打上勾,以下4,5,6步骤可以跳过)
- 下载GDK (http://dist.codehaus.org/groovy/distributions/groovy-1.0.zip)并将下载的groovy-1.0.zip文件解压到指定位置(我的位置是[cci lang='text']D:\D\MY_DEV\groovy[/cci]),
- 设置环境变量[cci lang='text']GROOVY_HOME[/cci]步骤与“设置环境变量java_home”类似,到 输入‘变量名’时,输入‘GROOVY_HOME’-> 输入‘变量值’为你解压指定位置(我的变量值为[cci lang='text']D:\D\MY_DEV\groovy[/cci]),需要注意一点,解压目录如[cci lang='text']D:\D\MY_DEV\groovy[/cci]中不可有空格,比如[cci lang='text']D:\D\MY DEV\groovy[/cci]
- 将[cci lang='text']GROOVY_HOME[/cci]目录下的bin追加到环境变量path中步骤与“设置环境变量path”类似,找到你设置的path,然后将“[cci lang='text']%GROOVY_HOME%\bin[/cci]”追加到path值(按上述过程,你现在的path为“[cci lang='text']%java_home%\bin;[/cci]”) 之后,你的path值为“[cci lang='text']%java_home%\bin;%GROOVY_HOME%\bin[/cci]” ,注意用英文分号;分开,不要有空白字符如空格,Tab等
Subscribe to:
Posts (Atom)