Skip to main content

Posts

Showing posts from 2008

换到自己域名的后果

没有最少,只有更少。 图片来至 索爾的美女研究室 !!

intellipoint pointer speed not work

升級到mac os x 10.5+以後,突然發現即使安裝了微軟的鼠標驅動,鼠標也相當不靈光。到 Pointer Options 裡面發現即使選擇了 Intellipoint pointer speed 也沒用,還是 System Mouse Tracking 在起作用。郁悶了很久,在google上也沒找出個什麼結果來。今天,一不小心,偶然,意外取消了 ,問題解決了。

80級獵人,截圖紀念

現在才發現,這不過是個開始,可惜我的月卡到期了,以後打的少了。5000G的高級飛行還搖搖無期啊。

開上飛機了

雖然是60%的那種。

-_-

最近比较费,客户这边的IT重病,让我过来顶起。过去的两个礼拜都呆在18度的机房兼办公室里面,还好及时的加了外套,要不然我也进医院去了吧。 魔兽奋斗到69级了,马上又要出新的资料片了。 又无趣又无意义。。。

ipod touch

昨天晚上买了iPod Touch 8G S$388,晚上手机没法照,上一张官网的图: 拿在手里的感觉很不错,超薄。终于可以用上传说中的多重触控了。音质?汗,我素木耳。 昨晚太赶,忘了贴膜,配套的套子也没有。今天再去森林看看。这些杂物好贵啊啊啊。

django.utils._os.safe_join

在Django 1.0中添加了 django.utils._os.safe_join 来负责在extend和include模板是确保目标模板在当前模板的同级或是子目录里。实际中我的模板目录为: templates/ base.html /blog/ main.html /app/ main.html 在main.html中都使用 <% extends '../base.html' %> 来extend母模板,在safe_join的情况下就无法工作了。大吼三声“开源就是好!!!”。我把代码里的判断语句注释了事。-_-

Working with forms

Working with forms 原文链接: http://docs.djangoproject.com/en/dev/topics/forms/#topics-forms-index 翻译: 將王車 使用forms 关于本文档 本文档提供对Django form处理的简单介绍,需要更详细的资料请查看 The Form API ,更多关于可用字段类型的文档请查看: Form fields django.forms 是Django用来进行表单处理的库。 虽然使用Django的 HttpRequest 类就能处理表单提交的东西,而 forms 库关注与处理大量form通用的任务。使用它你可以: 从控件自动生成可显示的HMTL的表单。 使用一定的规则来验证提交的数据。 出错后重新显示表单。 转换提交的数据到相应的Python数据类型。 简介 该库包含一下组件: Widget 用来处理HMTL表单控件的类,例如: <input type="text"> 和 <textarea> 。他负责将控件转化为HTML Field 负责验证的类,例如: EmailField 确保它的数据是有效e-mail地址。 Form 字段的集合,它知道如何对自身进行验证和显示为HTML Form Media 输出表单所需要的CSS和javascript资源。 这个库和数据库层、显示、模板等其它的Diango组件是无关的,仅仅依赖与Django的 settings 组件、 django.utils 的帮助函数和Django的国际化钩子(在使用该库的时候没有必要使用国际化属性)。 Form对象 在Form对象内封装了表单的字段和表单必须满足验证规则。Form类是 django.forms.Form 的子类,并且如果你使用了Django的数据库模型它也能很好的xxxx(are make use of a declarative style that you’ll be familiar with if you’ve used Django’s database models.)。 例如,利用form在一个个人站点上来实现一个“留言薄”的功能: from django import fo

在Google App Engine中使用Django

英文原文链接: Running Django on Google App Engine 作者: Damon Kohler 翻译: 將王車 在Google App Engine中使用Django 引言 Google App Engine和Django都使用WSGI标准来运行程序。因此可以在Google App Engine中使用包括中间件在内的几乎所有的Django的属性。作为开发人员,你唯一必须做的事仅仅是修改Django的数据模型,使用 Google App Engine Datastore API 来调用更快、更稳定的Google App Engine的数据存储。因为Django和Google App Engine对(数据)模型有着相似的定义,做为一个Django的开发人员,你将很容易修改你的程序来使用我们的数据存储。 使用Django 0.96.1 Google App Engine中已经包括Django 0.96.1,如果你使用这个最新的稳定版(译者注:本文写于2008.04,你看到译文的时候Django 1.0应该已经发布了吧),则不需要安装其它的东西。只需要简单引入你的Django组件就行了。如果你使用的是Django的开发版则需要一些额外的措施。 在 main.py 中添加WSGI处理器 使用WSGI来启动你的Django程序只需要几个简单的步骤,导入 google.appengine.ext.webapp 中的 util 和Django中的WSGI处理组件。用样,我们使用Google App Engine来记录异常来代替使用 manage.py 做处理异常,所有的日志都能在 Admin console 中看到。需要更多关于Google App Engine日志记录方面的信息,请阅读我们的 相关文章 。 相关代码: import logging , os # 导入Google App Engine的模块 from google . appengine . ext . webapp import util # 强制Django重新载入settings from django . conf import settings settings . _target = None # 在导入任何Django的模块前必须设置该环境变量。 os .

废物利用,在MAC OS X上使用Bluetooth® Notebook Mouse 5000的后退键来激活“Spaces”

前面 买了微软的Bluetooth® Notebook Mouse 5000 这款鼠标,可这款鼠标对mac os x支持得不是很好,即使安装了微软最新的驱动也找不到这一款,所以鼠标上的“后退”键就成了摆设,点击的时候和鼠标滚轮按下的效果一样。 今天在设置Spaces发现,除了默认激活Spaces的方法是F8,后没还有个下拉列表选择的是"-",好奇的点开来看一下: ,“辅键”就是鼠标右键,“第三键”应该是中键,也就是滚轮按下。“第四键”?难道就是传说中的“后退键”?测试一下,果然。。。 Spaces是在mac os x 10.5中新加的功能,默认的激活键是F8。在平时的使用中如果要腾出手来点F8还有那么一点点不方便,再添加用这个废掉的“后退键”来激活的话就相当方便了。

Google Redesigned

以前用到的Gmail皮肤:Gmail Redesigned现在已经变成了 Google Redesigned ,同时对Google Calendar的支持,什么时候能支持Google Reader啊? Tips:以前使用Gmail Redesigned是通过 Stylish 来实现的,而现在Google Redesigned则是自已以单独的Firefox插件形式存在的。

卸掉了Weave

卸掉了 Weave ,本来一直用的挺好的,某次更新后变得在强制关闭Firefox时和它的服务器同步,不幸的是同步的速度太慢,还经常失败。每次关闭Firefox看到那个同步提示框都感觉太不爽了,而且无法直接关闭,即使你点"Cancel"也会等很久才会关掉。忍无可忍,我终于把它卸掉了,反正我也是只同步书签而已,Google Toolbar的"Bookmark"就够用了。

ipod

周末打钱回家,顺便去了一下电脑城,亲手把玩了一下ipod nano3 和ipod classic。 一个S$318,一个S$388,都买不起啊,只能口水一下。

被吓死

8点的飞机记成10点,8点13分才到机场,被吓死!!被幸好打雷下雨飞机延时,过关的时候被海关的人教训得无地自容。飞机更厉害,延时到凌晨4点,

败OK2一只

PK2缺货,被迫败OK2一只,RMB700,超预算130%。上图片: 我为什么不干脆买PK1呢!!

嘿嘿

公元二零零八年七月七日上午十点二十三分,用九块领了那个传说中的红本本。 太过激动,某人照相的时候披头散发,哈哈哈! 囍

Firefox 3

Microsoft Buluetooth Notebook Mouse 5000

今天刚买的,还用得不是很习惯,S$62。蓝牙,解放我的USB口子。主要的问题是不是用Microsoft的鼠标驱动来驱动,而是用的Mac的驱动,不能识别型号,功能键不能用,移动的时候也很不顺滑。

在App Engine中使用feedparser

在App Engine中,因为对urllib和urllib2进行了限制,导致 feedparser.parse('http://feed.url') 的形式也不能工作了。而feedparser也支持直接转换字符串。所以在 urlfetch 的帮助下也能实现同样的效果,代码如下: import feedparser from google.appengine.api import urlfetch url = 'http://feed.url' result = urlfetch.fetch(url) if result.status_code == 200   d = feedparser.parse(result.content)

colspan?colSpan!

在利用javascript动态向table增加tr的时候,可能遇到某个td可能有特殊colspan,这个时候如果你直接对tr.colspan赋值会发现没有任何作用,必须写做: tr.colSpan 。 WHY?

asp.net用正则表达式对密码进行格式验证

在asp.net中常用 RegularExpressionValidator 来对密码的格式进行第一次验证。现有密码格式要求如下: 长度8-12位。 至少有一个字母。 至少有一个数字。 至少有一个特殊字符(非数字和字母的字符,例如:!@#$%等)。 在MSDN里找 asp.net membership密码强度验证 相关的东西,里面有对6位以上,至少一数字和特殊字符的正则表达式如下" (?=.{6,})(?=(.*\d){1,})(?=(.*\W){1,}) "。当我把短代码复制到 RegularExpressionValidator 里面才发现,即使是符合的规定的密码也不能通过验证。 查看asp.net的js文件,找到调用 RegularExpressionValidator 的函数: function RegularExpressionValidatorEvaluateIsValid(val) {   var value = ValidatorGetValue(val.controltovalidate);   if (ValidatorTrim(value).length == 0) {     return true;   }   var rx = new RegExp(val.validationexpression);   var matches = rx.exec(value);   return matches != null && value == matches[0]; } (?=pattern) 就是所谓的“正向预查”,是个“非获取匹配”,也就是说如果不能匹配 (?=pattern) 的话,matches的值是null,即使匹配了,matches[0](最后一次匹配的值)的值也是空("")。 根据以上,修改 RegularExpressionValidator 中的 ValidationExpression 为" (?=.{8,12})(?=.*[0-9]+)(?=.*[a-zA-Z]+)(?=.*\W+) (.*) "

Google App Engine

终于登录了google app engine了,虽然从昨天起就一直有看到google开放的app engine的说法,直到今天早上到办公室才成功登录。可惜啊,“todone”被人用了。

Google App SDK for Mac

Control.ResolveUrl

public string ResolveUrl (   string relativeUrl ) If the relativeUrl parameter contains an absolute URL, the URL is returned unchanged. If the relativeUrl parameter contains a relative URL, that URL is changed to a relative URL that is correct for the current request path, so that the browser can resolve the URL. 为什么要用到这个函数,我开发用vs2005,调试的时候会自动启动开发服务器,用http://localhost:xxxx/来访问。而部署的时候是用http://1.1.1.1/appname/来访问,好几个script和图片的路径不得改来改去。服务器离我几公里,而且我还没有权限用remote连接,操作服务器时必须在机房并有Admin的人陪同。要是有问题,哭都来不急。只用用这个函数加后台输出的方式来搞定。

[转]我为红十字会算笔账

我为红十字会算笔账 就算红十字会从上到下绝无一人腐败,都是天使转世雷锋附体,您捐的一块钱就是一块钱了么?我说,可能有五毛就算万幸了。让我用经济学的基本道理来分析这个推算吧,分析的对不对请您自己评价。

-_-

2008多灾多难也能成为你不结婚的理由?!?!?!过了地震这么危险的事你都不觉得我们更应该珍惜身边的人么?

翻譯:连接被重置

“连接被重置”(上):现象和实情 “连接被重置”(中):原理和对策 “连接被重置”(下):思考和展望 当然,不是我翻译的。感谢 译言 的大牛们。

牛博网友为四川大地震捐款捐物的方案

不用再强调灾区有多惨,尽可能的给他们提供帮助才是王道。说实话,我也是那种不相信任何中国政府组织的人,所以推荐: 组织者:北风、陈晓卿、冯唐、关军、韩寒、黄章晋、李海鹏、连岳、莫之许、钱烈宪、宋石男、王老板、王小山、张立宪、张晓舟(以上按姓氏拼音打头字母排序)、罗永浩(牛博网总编辑,本次活动的负责人)、黄斌(牛博网CTO)、黄斌(另一个黄斌,老罗教育科技有限公司CEO)

用Python和PIL批量处理图片

还记得我前面那个 体力活 吧,千多张bmp要全部旋转90度,并保存为png。现在想起来真是太恐怖了,我居然是一张一张去做的。其实使用 Python 和 PIL(Python Imaging Library) ,可以很简单的完成这类工作。 PIL并不是Python 2.5的默认包,需要另外安装。 #*coding=utf-8 import os import Image def ttimg(path):     print 'process on:', path     for name in os.listdir(path):         if name != '.DS_Store':             fullPath = os.path.join(path, name)             if os.path.isfile(fullPath):                 (fileName, fileEx) = os.path.splitext(fullPath)                 if fileEx=='.bmp':                     img = Image.open(fullPath)                     new_img = img.rotate(270)                     new_img.save(fileName+'.png')             if os.path.isdir(fullPath):                 ttimg(fullPath) if __name__ == '__main__':     ttimg('/Users/xxx/pics/')     print 'done.' 代码没有加亮,还有请顺便忽略 ttimg() 这种完全无意义的函数名。

GUID.ToString()的几种输出格式

普通的 GUID.ToString() 和 GUID.ToString("D") 输出为24个字符,有'-'分隔符的字符串,例:b3584f6b-1f97-4be1-a94f-df35d496bee4 GUID.ToString("N") 输出为20个字符,无分隔符的字符串,例:cea2081a057840dbbc30301941920e50 GUID.ToString("B") 输出为26个字符,有'-'分隔符的字符串,两端有"{}",例:{20713c2a-594f-4c80-a787-03ab2732b540} GUID.ToString("P") 输出为26个字符,有'-'分隔符的字符串,两端有"()",例:(b612d214-67fc-4285-9950-a1163a779e3d)

Google App Engine

用Python 2.5做开发语言,但有限制,只能使用标准库,有的模块不能用,例如:os,socket等。500MB的空间。和Django很像,模板系统根本就是Django的,甚至可以使用Django的包 关于Google App Engine的介绍可以看看译言的 《App Engine:在Google上托管你的应用》

django logout next_page 无效

在django 0.96中如果在url.py中配置 (r'^accounts/logout/$', logout) 来使用 django.contrib.auth.logout() 这个默认视图来执行用户的退出,退出的功能能很好的工作,但是《The Django Book》的12章所提到 next_page 参数无效,如果需要实现在退出后跳转到指定的页面最好是自己来实现。可参考djangoproject上的 how-to-log-a-user-out 。

PSP 三国无双 大蛇传 人物图片

PSP三国无双 大蛇传 人物图片(Google Picasa相册) 现在还不全,太多了。。。(2008-03-23) 搞完了,体力活啊。(2008-04-20) 暂时放弃吧,那个空间到期很久了,忘了更新这里了。什么时候找到地方放再跟新。(2009-04-29) 上传到Google Picasa(2009-09-25)

CheatMaster for psp 3.80 m33

最近玩PSP上的《无双大蛇》,觉的人物图片不错想截个图。有人推荐CheatMaster,在网上找了好半天才找到。版本说的是for 3.80的,我的3.90用起来也没问题。 下载地址: Cheatmaster for PSP firmware 3.80 M33 实际上CheatMaster是一款强大的金手指,截图只是它的一个附加功能而已。具体的使用说明可以看看: PSP金手指软件Cheat Master 。 如何安装 解压下载的文件。 将SCM和seplugins两个文件夹复制到你PSP记忆棒的根目录。 重启PSP。 进入游戏后点击音乐键(就是“Select”左边,有个音乐符那个键)可呼出CheatMaster。 关于截图的一点说明:在CheatMaster界面中选“Screen Shot”并不会马上截图,在CheatMaster的界面消失后需要再点一下“X”才会开始截图,截图的时候可以看到记忆棒的读取指示灯在闪烁。读取指示灯熄灭后截图就成功了,截取的图片默认是放在“/PICTURE/Screenshot/”,格式为BMP。可在PSP的图片查看中直接查看。

25

猫扑上看帖子 《25岁了,突然很想哭!!!》 ,想想自己也满了25了,虚岁要算26的了。可以说是人穷,脸丑,也算也个女朋友,半年没见了,没房子不嫁,供的都不行,老妈也不喜欢她。家里出钱给了房子都首付,在过个10年20年,贷款就还完了。现在在外面,钱要多点,在过3,4年,也许能解决房子问题。恩,我干脆出家吧。

如何查看猫扑大杂烩被删除的帖子

mop上有的帖子开始能看,后了被管理员删除了。点标题过去会显示:“你的mp不够”。点击”确定“就跳转了。实际上这个帖子并没有真的从数据库中删除。你需要做的是使用一个能屏蔽广告的浏览器,比如Firefox+adblock。将“http://txt.mop.com/dzhjs/dzhjs/*.js”这个地址加入需要屏蔽的地址列表里。

Python中的self

习惯上,任何Python类方法的第一个参数(对当前实例d的引用)都叫做self。这个参数扮演着C++或Java中的保留字this的角色,但self在Python中并不是一个保留字,它只是一个命名习惯。虽然如此,也请除了self之外不要使用其它的名字,这是一个非常坚固的习惯。 出自:《Dive Into Python》

Python中import moudle和from moudle import *的区别

使用:import moudle要调用moudle中的Function_a()必须完整的写为:moudle.Function_a()。 使用:from moudle import *的话,直接调用Function_a()就可以了。

鸡肋

最近发生了一件大事,本来是一件好事,结果变成了一件坏事,非常的坏。坏到需要记录一下,很多年以后我好能记起它是什么时间发生的。 我们的关系就是鸡肋。你说你累了,我也差不多。不要企图改变,我是不会同意的。

python的dictionary (字典)、tuple (元组元组) 和 list (列表)

Dictionary 字典 定义:d = {'key1':'value1', 'key2':'value2'} 访问:d['key'] 修改:d['key1'] = 'value' 删除:del d['key'] 清空:d.clear() List 列表 定义:l = ['a','b','c'] 访问:l[index],index为负,则从尾部开始取。l[-n]=l[len(l)-n] 修改:l[index] = value 分片:l[n:m] 添加:l.append(new_vlaue),l.insert(index, new_value),l.extend(['e','f']) 删除:l.remove(value),只删除首次出现的值。    l.pop(),删除最后一个值,并返回。 Tuple 元组 定义:t = ('a', b, 1) 访问:t[index] 修改:t[index] = value 分片:t[n:m] 定长,不可添加,删除。 当然,这些介绍远远不够,建议看 深入 Python :Dive Into Python 中文版

v2ex.com关闭,截图留恋

livid 决定关闭他一手创建的社区www.v2ex.com。那里气氛相当好,可惜被GFW以后人气越来越弱了。 截图留恋:

啊哦呃

打电话回家被老妈大骂20分钟,汗水都被骂出来了。 发美女一张,调节心情。

GridView Sort (排序)

GridView本身有一个 Sort() 函数: public virtual void Sort (     string sortExpression,    SortDirection sortDirection) 使用上相当方便。 但在实际使用中,常用的是点击每一列的标题来排序,点击标题会触发: protected void GridView_Sorting(object sender, GridViewSortEventArgs e) 事件。从 GridViewSortEventArgs 中可以拿到 SortDirection 和 SortExpression 。但是 GridView.Sort() 本身也会触发 GridView_Sorting() ,如果在 GridView_Sorting() 中调用 GridView.Sort() 会无限的循环,直到堆栈溢出。 这样就只能使用 DataView.Sort 属性来排序,再Bind到GridView上。 示例: protected string m_sortDirection {   get   {     if (ViewState["m_SortDirection"] == null)   {     return String.Empty;   }   return (string)ViewState["m_SortDirection"];   }     set { ViewState["m_SortDirection"] = value; } } protected string m_sortExpression {   get { return (string)ViewState["m_SortExpression"]; }   set { ViewState["m_SortExpression"] = value; } } protected void bindData(string sortExpression, string sortDirection) {   DataView dv = new DataView(ds.Tables[0]);   dv.Sort = sortExpres