jQuery.datePicker endDate 的选取

jQuery.datePicker 是基于 jQuery 的一款优秀的日期选取控件

http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/

在使用的时候,dateSelected 回调函数 在endDate 那天不能被触发,

跟踪进去发现是时间比较上有点问题,

只要将 setEndDate 函数改为如下即可避免这个问题

setEndDate : function(d)
{
if (d) {
this.endDate = Date.fromString(d);
}
if (!this.endDate) {
this.endDate = (new Date('12/31/2999')); // using the JS Date.parse function which expects mm/dd/yyyy
}
if (this.endDate.getTime() < this.startDate.getTime()) {
this.endDate = this.startDate;
}
this.endDate.addHours(23); //
this.setDisplayedMonth(this.displayedMonth, this.displayedYear);
},

同时巨汗一下 Firefox 和 IE 的 GetYear() 函数

Posted in 未分类 | Leave a comment

python 生成随机密码

类似 Django 里面的 make_random_password

def makepassword(rang = "23456789qwertyupasdfghjkzxcvbnm", size = 8):
return string.join(random.sample(rang, size)).replace(" ","")

默认是生成由“23456789qwertyupasdfghjkzxcvbnm” 组成的 8位数密码
避免了 l 1 , o 零 混淆不清的麻烦。

Posted in 未分类 | Tagged | Leave a comment

cannot create system shell notification icon

这玩意是开机的时候弹出来的

notification icon error

要命的是:弹出了这个,那些其他的开机自启动的程序都出不来了

更要命的是。。这程序是我的。

从错误的字面意思上看,是因为创建 任务栏托盘图标失败造成的

找到相关代码:

if not Shell_NotifyIcon(NIM_ADD, @fData) then
raise EOutOfResources.Create('Cannot create shell notification icon');

发现是因为 Shell_NotifyIcon 的调用失败造成的。

奇怪的是,这个错误似乎只在软件随机器启动的时候才出现,而且是小概率的出现。

找到MSDN

http://msdn.microsoft.com/zh-cn/library/bb762159(en-us,VS.85).aspx

《处理 Shell_NotifyIcon 失败》一文中提到

在系统启动时调用 Shell_NotifyIcon 往往会失败

(比如你的程序在 HKLM\Software\Microsoft\Windows\CurrentVersion\Run 中)

原因是这时系统忙于开启应用程序,这个错误在那些低配置 或者加载了很多反病毒软件的机器上更为常见

不幸的是,你不能依赖 GetLastError 的返回值来发现这些错误

当 Shell_NotifyIcon 返回 false 时, GetLastError  一些可能的返回值是:

  • ERROR_FILE_NOT_FOUND (2)
  • ERROR_TIMEOUT (1460)
  • ERROR_SUCCESS (0)

Shell_NotifyIcon 返回 false时,最有效的的处理方法是等待一段时间,然后重试。

关于为何这个错误的 error code 会不一致,这里有 Paul Baker 的解释

http://groups.google.com/group/microsoft.public.platformsdk.shell/msg/59235b293cbf5dfa

http://groups.google.com/group/microsoft.public.platformsdk.shell/msg/73973287f15c03fc:

Shell_NotifyIcon 实际上调用了 SetLastError(0),在最开始,

然后它应该是用 FindWindow 来寻找任务栏托盘,如果失败了,它会返回 ERROR_FILE_NOT_FOUND

否则它会用 SendMessageTimeout  发送一个 WM_COPYDATA 消息到任务栏,超时时间只设置了 4 秒

如果 SendMessageTimeout  返回 0, 那么 Shell_NotifyIcon 失败, 并且 GetLastError 返回 0

我的这个程序 用的是 BCB6 的 TTrayIcon,这东西是在窗口创建时初始化的,

Shell_NotifyIcon 失败了以后它直接抛了一个异常,直到 Application->Run(); 外面才被抓住。。

看样子要处理这个 Error ,需要用 API 当 Shell_NotifyIcon(NIM_ADD,&nid);  失败之后重试了。

Posted in 未分类 | Tagged | Leave a comment

Lost connection to MySQL server during query

这是最近在做后台时碰到的:

OperationalError: (2013, 'Lost connection to MySQL server during query')

环境是 webpy + Apache + MySQL

这个问题麻烦之处在于它不是定期必然出现的,一般是运行了几个小时 或者 几天出现

出了这个 2013 错误以后,接下来的查询都会是:

OperationalError: (2006, 'MySQL server has gone away')

其实这个时候 MySQL Server 应该是没有挂的,

用客户端程序连接,但是看到里面 MySQLdb 的进程, 一直都是Sleep状态,即使那边一直在报错

这个问题可以通过重启 Apache 来缓解,但是不能预计下一次又会是什么时候出现

在网上搜索这两个Error,发现有很多人都有这个问题,但似乎没有一个好的解决方法

而出现这个问题的原因也是各种各样,比较流行的说法是

MySQL 的参数 wait_timeout 默认为28800=8小时,如果空闲超过了8小时 就会出现 Error 2006

但是我的 Server 应该是每分钟都会有连接过来进行数据库查询的,

不管怎么说还是把这个 wait_timeout 设置成 28800000 差不多1个月该够了吧?

但是好象没有效果

还有一种解决方法是在每次连接数据库前 ping 一下,如果连接已经断开,它会重新connect

这个也是针对Error 2006的,对我这种情况没有效果

后来在 MySQLdb 的 User‘s Guide上看到一段话:

The general upshot of this is: Don't share connections between threads. It's really not worth your effort or mine, and in the end, will probably hurt performance, since the MySQL server runs a separate thread for each connection. You can certainly do things like cache connections in a pool, and give those connections to one thread at a time. If you let two threads use a connection simultaneously, the MySQL client library will probably upchuck and die. You have been warned.

似乎 MySQLdb的多线程使用同一个连接会有点问题,

我用的 WEB  环境是 Apache + webpy(mod_wsgi),

MySQLdb是在模块中初始化的,不知道这样算不算是多线程共用一个数据库连接,

现在通过连接池 DBUtils 来管理数据库连接,服务器运行了3天,暂时还没出现那些数据库连接问题。

需要注意的是,使用DBUtils一些查询结果必须得保存起来,应为连接会被重用

比如:

value = conn.cursor.fetchall()[0]["field"]

要改成:

cur=conn.cursor
rs = cur.fetchall()
r = re[0]
value = r["field"]

PS:

又发现一个问题:

如果用 DBUtils,每次查询它都会到连接池找一个可用的连接

那么 select LAST_INSERT_ID(); 可就要小心了,这个是和连接相关的

我的解决方法是把 insert 和 select LAST_INSERT_ID(); 放到 FUNCTION 中

CREATE  FUNCTION `func`(value int(11)) RETURNS int(11)
BEGIN
INSERT INTO table(field) VALUES (value);
RETURN LAST_INSERT_ID();
END;

Posted in 未分类 | Tagged | Leave a comment

jQuery hide() 闪烁的问题

在用 jQuery 写页面的时候,碰到了一个郁闷的问题 ,

动画效果 hide() 在 firefox 下效果正常,

但是在 IE 下当 hide 结束的时候 被隐藏的 DIV 往往会闪一下才完全消失

经过 google,终于在 jQuery 中文社区 找到解决方法

这是 DTD 定义不对,在 HTML 文档最前加入定义:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

即可解决问题。

挖掘一下:

什么是 DTD?

Document Type Definition 位于文档开头,指定了浏览器该用什么规则来解析 HTML

PS:

jQuery 用的是 xhtml 1.0 Transitional

相对于一般的 HTML 语法上要严格一些,比如属性必须加引号,css数值必须跟单位 等

Posted in 未分类 | Tagged | Leave a comment

找个稳定好用的能够记东西的 Blog 空间

不记得这是第几次转移了

辗转至此,希望能够长久。

Posted in 未分类 | Tagged | Leave a comment