Submitted by gouki on 2011, February 25, 2:12 PM
又是一件亲身经历的事情了。
在卓越亚马逊网上买IPOD,明明写着有货,但却没有按时发货。这让人感觉有点烦人
事情还是需要从头说起。
某天,在卓越上订了一个IPOD,上面写着预计2~3日内到达,所有的商品都是写着目前有现货,所以我就欣欣然下单了。
下完单后,订单中显示,预计到货日期为2-23,我想那,确实挺快呀。
于是我等到了2月23日,发现没有任何快递联系我,于是打开卓越网,看了一下订单,发现上面写着尚未发货,于是我打了400电话进行咨询。
400说,由于配货不全,需要从苏州调货,然后说预计25日 可以到达,然后我就发现,预计到达时间改成了25日。
今天,25日了,打开订单一看,却仍然这样显示:
郁闷了,气愤了。
重新打400电话,400说我的订单显示是有缺货,我说那你帮我查一下吧,结果查询下来,没有任何缺货状态,所有的商品都有现货,那为什么却没有发货呢?
400解释说可能原先没货,现在有货了。我告诉他我下单的那天明明显示都是有货的状态,400解释可能是上海地区没货,从其他地方调货的。
我回复说,为什么5天了,还没有调好货呢?400说了一句我比较愤怒的话:可能是路上堵车了吧。
然后400让我重新下单,说这样可以快一点(这是什么理由?)
靠,什么车要堵上四、五天啊。
我们国家的道路状况已经差到这个地步了?
因为郁闷,所以写下来做个记录。
Tags: amazon, 卓越, 亚马逊
Misc | 评论:1
| 阅读:18061
Submitted by gouki on 2011, February 24, 5:36 PM
转帖前的话:这个问题我没有遇到过,事实上,如果不是看到这篇博客,我根本不知道原来还有闰秒这个问题。先看看这篇文章吧。
项目中碰到 PHP 和数据库之间,计算存在时间计算误差。大致的情况为根据段时间字符串,例如:
XML/HTML代码
- 2012-12-14 00:00:00 UTC
使用 MySQL 的 UNIX_TIMESTAMP 函数以及 PHP 的 strtotime 计算得出的时间戳,大概有半分钟(差不多有28秒)的误差。
同时,比较‘诡异’的是直接使用当前时间(MySQL 中 UNIX_TIMESTAMP 不带参数,同时 PHP 直接使用 time 函数),却不存在误差(测试脚本)。
排除了 PHP 和 MySQL 之间因为时区设置造成的时间误差 -- 根据经验,如果是时区设置造成的时间误差,应该有几个小时不会那么少。
搜索解决问题期间扫了下这篇帖子,觉得应该是‘闰秒’这玩意造成的问题。搜索 PHP 闰秒相关的配置似乎没有相关的,不过在这里似乎找到了些答案。
XML/HTML代码
- You also can experience this behavior if your system timezone is with leap seconds. To avoid the problem in this case please run query UPDATE mysql.time_zone SET Use_leap_seconds='N' and restart the server. Please inform us if this helps.
按照上述的步骤执行,解决了问题。
回过头来,我在工作机(Windows)上测试,发现并不起作用。研究了下,原来闰秒也需要操作系统的支持:
XML/HTML代码
- 1、对于大多数新的 Linux 内核,在设计时它们都是支持闰秒的,这一点在 REHL4/5 的 2.6.x 内核中得到肯定。
- 2、如果 Linux 系统没有配种某种时间同步机制(比如NTP),那么和闰秒无关,唯一导致的结果只是系统时间会比 UTC时间快一秒。
- 3、Window Time Service 不支持闰秒,包括服务器和客户端。
回过头来考虑项目中碰到的这种情况,直接使用时间戳存储时间点会更精确些。最后,
提供下相关的测试脚本,看看你的环境是否也会有类似的问题。
Tags: leep, 闰秒
PHP | 评论:0
| 阅读:15789
Submitted by gouki on 2011, February 23, 10:14 PM
看到有人回复说想了解junction的使用方法,我在这里就详细介绍一下吧。
下载地址在那篇文章已经有,这里我就不介绍了。
我说一下具体的应用方法吧,虽然可能还是比较简单的。
1、先执行一下junction.exe文件,让它注册到系统(我是将它扔在快盘里面的,这样我就不需要到处下载了)
2、创建引用:junction x:\test c:\test ,第一个参数是在x盘里创建的目录,需要该目录不存在 。第二个参数是目标目录。(也就是将C盘的test目录创建了一个快捷方式到x盘的test目录下),只是这种快捷方式与平时的快捷方式不太一样而已
3、其实,这样就完事了。如果觉得目录创建错误了,可以junction -d x:\test 将它删除
如果知道一个目录是引用来的,如何查看目标目录是啥呢?可以这样:
XML/HTML代码
- 假设知道x:\neatpic是引用来的目录,可以这样运行一下
- X:\>junction.exe x:\neatpic
-
- Junction v1.06 - Windows junction creator and reparse point viewer
- Copyright (C) 2000-2010 Mark Russinovich
- Sysinternals - www.sysinternals.com
-
- x:\neatpic: JUNCTION
- Substitute Name: e:\www\htdocs\neatpic
- OK,这样就知道,目标目录是 e:\www\htdocs\neatpic
如果想知道所有的junction引用的目录,可以运行想要查看的目录下运行,junction -s,
----------------------
由于这种创建快捷方式的功能与平时windows的不一样,对于虚拟盘来说,它认为这就是一个实际存在的文件,所以它就认为这些文件是在这个盘里是物理存在的,所以,就会执行正常的上传下载之类的操作。
【其实junction相当于linux下的管道,这样一来就应该明白了吧?】
Tags: junction
Software | 评论:1
| 阅读:32662
Submitted by gouki on 2011, February 22, 9:35 PM
KeePass Password Safe 2,这款软件是同事在用的,看他使用的时候,我觉得还不错,所以就向他找了一份,并尝试着使用了一下,觉得还是感觉不错的,所以用来推荐一下
Keepass有着自己的数据格式,至于能不能被其他软件所破解,就不是我关心的了(不可能说永远不可能破解,只是机率会比较小一点吧)
Keepass打开数据库时,可以指定密码,有三种方式1、密码,2、密码文件3、windows自身的用户
由于我用金山快盘,所以我就每天在单位和家里进行同步喽。使用起来也算方便,也能够自己按照自己的规定生成密码,有一个好处就是可以设定双击复制密码的时候在剪贴板里存放多少时间 ,超过这个时间后就自动被清空,这相对会让人感觉比较安全。
再说一下,这个软件也有很多的插件,比较感觉不错的会有两个插件是我想用的,kefromff,和sync,一个是可以把firefox里存放的密码导入到keepass里,另一个就是帮你把数据库备份啦 。。
其实还有一些插件,比如自动输入密码这个功能,我是觉得不太方便,因为他有顺序要设定,不能根据当初的设定而自动输入(如果顺序不对,就输的不对,我觉得太麻烦了)
当然,作为一个优秀的软件,它还是有汉化包的,所以,对于普通用户来说没有什么难度啦:http://keepass.info/ , 插件地址在:http://keepass.info/plugins.html , 插件地址是:http://keepass.info/translations.html。
以前好象有一个叫roboForm之类的软件,也用过一阵子,不过相对来说,用了这个软件后,我好象就忘了roboForm,不过那个软件好象是支持自动填表的。。而且相对比较准确(firefox也是可以的)
Tags: keepass
Software | 评论:0
| 阅读:18074
Submitted by gouki on 2011, February 21, 9:00 PM
今天在群里有朋友问我yii的relations的问题,结果贴出来的代码居然是类似这样的:
PHP代码
- function relations(){
- return array(
- 'xx'=>array(self::STAT,'aa','aa_id')
- );
- }
我当时直接了当的对他说,错了,怎么可能会有self::STAT呢?只有has_many,has_one,belongs_to,many_many,stat是错的。结果他回答说我OUT了,STAT是新加入的。。。
于是欣欣然跑到YII的官网查看了一下GUIDE,果然在 Relational Active Record,一节中发现了这个Statistical Query。
官方怎么说来着?第一句就让我大吃一惊:
Note: Statistical query has been supported since version 1.0.4.
奇怪,以前怎么没注意?
Besides the relational query described above, Yii also supports the so-called statistical query (or aggregational query). It refers to retrieving the aggregational information about the related objects, such as the number of comments for each post, the average rating for each product, etc. Statistical query can only be performed for objects related in HAS_MANY
(e.g. a post has many comments) or MANY_MANY
(e.g. a post belongs to many categories and a category has many posts).
Performing statistical query is very similar to performing relation query as we described before. We first need to declare the statistical query in the relations() method of CActiveRecord like we do with relational query.
PHP代码
- class Post extends CActiveRecord
- {
- public function relations()
- {
- return array(
- 'commentCount'=>array(self::STAT, 'Comment', 'post_id'),
- 'categoryCount'=>array(self::STAT, 'Category', 'post_category(post_id, category_id)'),
- );
- }
- }
In the above, we declare two statistical queries: commentCount
calculates the number of comments belonging to a post, and categoryCount
calculates the number of categories that a post belongs to. Note that the relationship between Post
and Comment
is HAS_MANY
, while the relationship between Post
and Category
is MANY_MANY
(with the joining table post_category
). As we can see, the declaration is very similar to those relations we described in earlier subsections. The only difference is that the relation type is STAT
here.
With the above declaration, we can retrieve the number of comments for a post using the expression $post->commentCount
. When we access this property for the first time, a SQL statement will be executed implicitly to retrieve the corresponding result. As we already know, this is the so-called lazy loading approach. We can also use the eager loading approach if we need to determine the comment count for multiple posts:
PHP代码
- $posts=Post::model()->with('commentCount', 'categoryCount')->findAll();
The above statement will execute three SQLs to bring back all posts together with their comment counts and category counts. Using the lazy loading approach, we would end up with 2*N+1
SQL queries if there are N
posts.
By default, a statistical query will calculate the COUNT
expression (and thus the comment count and category count in the above example). We can customize it by specifying additional options when we declare it in relations(). The available options are summarized as below.
-
select
: the statistical expression. Defaults to COUNT(*)
, meaning the count of child objects.
-
defaultValue
: the value to be assigned to those records that do not receive a statistical query result. For example, if a post does not have any comments, its commentCount
would receive this value. The default value for this option is 0.
-
condition
: the WHERE
clause. It defaults to empty.
-
params
: the parameters to be bound to the generated SQL statement. This should be given as an array of name-value pairs.
-
order
: the ORDER BY
clause. It defaults to empty.
-
group
: the GROUP BY
clause. It defaults to empty.
-
having
: the HAVING
clause. It defaults to empty.
关键的是看最后这几个条件,可以让你知道这些参数如何配置。。。
官方的GUIDE地址:http://www.yiiframework.com/doc/guide/1.1/en/database.arr
Tags: yii, relations, stat, static query
PHP Framework | 评论:0
| 阅读:34872