2010年6月

PHP的常量和预定义常量

1.区分大小写,在定义时可以指定是否大小写敏感

2.常量的值只能是特定类型:整数型,浮点型,字符串和布尔值

如何定义?

1)define()函数定义

2)constant()动态获取常量值

3)defined()函数判断一个常量是否已经定义,

4)get_defined_constants()函数获取当前定义的所有常量

// 预定义常量

__FILE__ :php程序文件名

__LINE__:程序行数

PHP_VERSION:PHP版本

PHP_OS:操作系统信息

E_WARNING:指到最近的警告处

E_ERROR:指到最近的错误处

E_PARSE:解析语法有潜在问题

E_NOTICR:常量发生异常,但不一定是错误处

C#用MD5CryptoServiceProvider把字符串加密成32位和16位Hash值

using System.Text;
using System.Security.Cryptography;

方法1:

16位

public string GetMd5(string str)
{
System.Security.Cryptography.MD5CryptoServiceProvider md5=new MD5CryptoServiceProvider();
string a=BitConverter.ToString(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str)),4,8);
a=a.Replace("-","");
return a;
}

32位

public string GetMd5(string str)
{
System.Security.Cryptography.MD5CryptoServiceProvider md5=new MD5CryptoServiceProvider();
string a=BitConverter.ToString(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str)));
a=a.Replace("-","");
return a;
}

方法2:

public string Hash(string toHash)
{
MD5CryptoServiceProvider crypto = new MD5CryptoServiceProvider();
byte[] bytes = Encoding.UTF7.GetBytes(toHash);
bytes = crypto.ComputeHash(bytes);
StringBuilder sb = new StringBuilder();
foreach (byte num in bytes)
{
sb.AppendFormat("{0:x2}", num);
}
return sb.ToString();        //32位
return sb.ToString().Substring(8,16);        //16位
}



在美国Apple Online Store订购iPad的攻略

原创文章,转载请注明出处 http://wuhongsheng.com/

在美国Apple Online Store订购iPad的攻略

文章开篇前,我们先来算个帐:32G Wifi+3G版本的iPad,在淘宝上面销售的均价是人民币7850元。官方售价为美元729,折合人民币4980元。中间奸商赚取差价2870元。

然后我们再算算,从美国购买iPad发国际快递回国内,价格为官方价格729美元+国际快递费用27美元,折合人民币5162元。

足足比淘宝上面便宜了2688元。如果购买两台,那么省下来的钱,足够买第三台了。

相信大家都比我会算数。

当然,也有很多人想到这点了。但是他们没法买。为什么?因为在美国的Apple Online Store购买iPad,必须要有美国的地址。身在国内的人们,运气好的在美国有朋友可以帮忙代购,运气不好就只能干瞪眼。那些找美国朋友的,也会欠下一 个人情,早晚要还。而且现在美国全境大部分的线下商店的iPad都早已脱销了,就算有钱也不一定能买到。最后还是需要在Apple Online Store预定。

OK,我们来总结下在Apple Online Store订购iPad所需要具备的条件吧。

1.一个美国的地址
2.一张支持美元支付的信用卡,国内国外的无所谓,卡上的额度必须要够,为你所购买的iPad价格的2倍。比如购买32G Wifi+3G版本,价格是729美元,那么卡上就必须要够729*2=1458美元(等额10000人民币)。为什么要这么多,我会在后面说明。
3.关税问题
4.足够的耐心,把本文看完,并且可以等待10个工作日的订货周期

我们继续,先解决第一个也是最重要的一个问题,美国的地址。

中华民族的智慧是无穷的,包括身在海外的华人。在遥远的大洋彼岸,有为数众多的,华人开的快递公司,比如AAE。他们除了运营着中美之间的快递业务 外,还提供了一些增值服务,比如为你提供美国地址,然后把美国地址所收到的包裹快递回国内。

看到这里,你就知道,美国地址的问题有解了。

当然,Apple也不是吃素的。由于提供转运服务的快递公司能提供的收件点有限,一个地址被无数人使用,所以是绝对过不了苹果的审核关的。因为 iPad现在的产能严重不足,全球严重缺货,所以苹果使用了机器+人工的方式对地址进行识别。对于同一个地址,一定时间内订购超过2台以上iPad的,就 会被取消订单。

还是那句话,中华民族的智慧是无穷的。

废话说了很多,我们先开始吧。既然是攻略,总要有步骤的。

我们先去gels注册一个帐号。gels是AAE旗下一家专门提供运转服务的公司,他们为不同等级的会员提供美国各个州的收件地址。我们要知道,在 美国买东西,都是有消费税的,每个州的税率都不一样,有些州还免税,比如阿拉斯加、俄勒冈,都是免税的州。gels就提供了两个俄勒冈的收件地址,这样我 们用来购买iPad就不用交税了,可以省下至少7%的消费税。

gels的注册地址(必须要从这个地址注册,而且要在推荐注册人里面留下我的ID,没有推荐人的话你是无法注册成功的): http://url.cn/2038Ab

gels注册完后,你是看不到任何可用的收件地址的。提供运转服务毕竟不是什么光明正大的事情(从推荐注册的方式就能看出来)。你需要先充值一定的 金额,获得相应的会员级别后,才能看到对应级别会员可用的地址。等级越高,可用的地址就越多,而且会有免税州的地址,费用也能更加便宜。充值进去的金额会 被直接充当快递费。如果你不需要用他们的服务了,充值的费用可以退还,但必须要扣人民币50元的手续费。

这里我建议大家直接充值1000块钱升级为白金会员。因为只有这个等级的会员才能拥有免税州的地址,这样购买iPad才能免税。等iPad到手后, 再要求他们把剩余的钱都退回来,也就只需要再付50块钱而已。

OK,这里我假设大家都升级为白金会员了。这时可以在个人页面上看到“美国俄勒冈州GELS仓库(OR)收货地址”,我们就选这个地址吧。但这个地 址不能直接用,还需要单独处理下。

注意!!请不要使用备用地址里面的OR收货地址!!这个地址可能会导致收货失败!!血的教训,不止我一 个人因为寄送到这个地址而导致无法收货!!

然后就是激动人心的下订了。我们打开 http://store.apple.com/us/browse/home/shop_ipad/family/ipad ,选上一款自己心仪的iPad,丢进购物车,然后去结算。

结算页面,首先是填收货地址。要注意的地方来了,我们!!千万!!不能按照gels给的地址原样填上。

首先是为了确保收货人的唯一性,gels给每个会员分配了一个ID,比如ABCDE,这个ID必须要填写到名(First Name)上。如果你这个地方填错了,那么你就收不到货了。切记,这个ID不能填写到别的地方,包括填到姓(Last Name)里面。原创文章http://wuhongsheng.com/

把ID填写到first name里面后,last name就没关系了。我们可以随便乱填,不填你的名字都无所谓,这个不影响收货。比如我们可以在last name里面填上kelwen甚至ungi啥的。但如果万一订单出了问题,你要打国际长途查询,对方要求你的名字,你就要能正确说出来,避免杯具。

接着是Area Code和Primary Phone,这里填写的是电话号码。最好我们直接使用gels给的号码,或者你对自己修改后的地址很有信心,那么可以自己填一个。比如前阵很流行的 Google Voice,注册成功的朋友肯定都搞到了一个美国的电话号码。如果没有,可以把gels给的号码后面四位改改填上去。最后Area Code里面填写电话号码的前三位数字,如503,Primary Phone填写电话号码的后四位,如666-6666。反正这里自己发挥想象力,确保电话号码是一个格式上合法的假号码,或者真号码,都可以。

Email Address和Company Name都可以留空不填

最重要的地方来了,地址填写部分。地址填写一共有两栏,一栏写不下可以写另外一栏。按照gels给的地址,肯定是一栏可以写下的,但我们不能这样 干,否则Apple第一关,电脑自动检查重复地址就过不去了。Apple的程序对地址的自动识别率还是非常高的。原创文章 http://wuhongsheng.com/

我们在这里要做的,就是把地址改为程序识别不出来,但快递员人工又能正常的阅读并且投递。

聪明的小朋友一定想到了,我们加一些无关紧要的话进去不就好了吗?bingo!

比如,我们可以把地址拆成两部分,然后在第一部分的开头加上一些东西,在第二部分结尾也加上一些东西,地址里面的数字改改(当然不是单纯的把 first改为1st这么简单,这样的话程序也是可以识别出来的)。

再说明白一点。比如gels给出来的地址是1 NW 3 ST,那么拆成两部分就是1 NW和3 ST,我们把第一部分改为PLS SHIP TO #1 NW,第二部分改为#3 ST PORTLAND OR,这样就可以了。但我建议大家还是继续发挥自己的想像力,尽量区别开来。

改了地址后,请到http://maps.google.com/,输入修改后的地址,看看google搜索出来的地址是否还是原来的位置。如果 是,那么就没问题。

最难的一部分已经搞定了,后面的Zip Code输入邮编,然后把This is a business address选上,点击Continue保存并且进入到下一步的信用卡信息填写。

信用卡资料填写,大部分的地方都和收件地址一样。但是First Name和Last Name必须要填写你信用卡上面的英文名字。因为信用卡支付要匹配这部分的。所以这里必须要填写真实信息。其余部分照抄收件信息即可。

之后就是Continue,然后苹果会对你的信用卡进行两次1美元的扣款(也有一次的),以确认你的信用卡可用。然后苹果会再扣你所购买的iPad 的金额(比如729美元)。这三次对信用卡的扣款都是预授权形式的。也就是并没有实际进行消费,只对信用卡里面相应的金额做冻结。只有在苹果给你寄出 iPad以后才会正式扣款

只要扣款成功,苹果就会给你显示一个订单概况。但这个概况不代表苹果和你之间的合约已经构成。

说说文章开头提到额度的问题。不知道是因为国内信用卡在苹果上面走的通道有问题,还是其他原因。我的几张信用卡(中行和招行)在苹果寄出iPad后 正式扣款的时候,并没有对原先做的预授权进行完成预授权,而是重新扣了一次同样额度的刷卡消费。这样造成的后果是,产生了两笔同样金额的消费,但只有后面 一笔是刷卡消费,前面一笔仍然是预授权冻结的状态。所以造成了我中行的卡上没有留下足够的额度,造成苹果扣款失败。之后打了中行的电话要求临时提额,并且 打了一个国际长途用我蹩脚的英语找苹果的人给重新扣款,但最后还是因为成功扣款太晚,fedex没收到扣款后的结果,最后把我这个订单给退回了苹果的回收 站ELK GROVE, CA,导致购买失败。原创文章http://wuhongsheng.com/

所以为了保险,建议大家一定要在卡上留有足够的额度,以防出现意外的情况。

继续回到刚才的流程。支付后,在苹果销售部门正常上班的情况下,你会在一个小时内收到苹果发来的一封名为“Order Acknowledgement”的邮件。收到这封邮件表明苹果已经收到你的订单和付款,并且订单已经通过了初步的审核。同样,这封邮件也不会构成苹果和 你之间的任何合约,苹果一样能随时取消你的订单。

之后的时间就是看人品了。在订单提交成功的3个工作日内,苹果会有人工对订单进行复审。只要在3个工作日内你没收到苹果发来的,标题为 “Action Required”的邮件,那么恭喜你,你的订单基本上已经成功,并且已经提交到富士康进行生产了。之后你会有两个星期的漫长等待,中间你不会收到任何苹 果发来的邮件,就跟石沉大海一样。在后台查询订单的状态都是 Not yet shipped 原创文章http://wuhongsheng.com/

在9-10个工作日左右,登录Apple Online Store查询订单的Status,订单状态会变为 Prepared for Shipment,在这个状态下,就是iPad生产好,准备从富士康发货了。一般会在1-2天内从富士康通过fedex发到美国。

所有发出来的iPad,都是先从深圳,过关到香港,然后从香港空运到美国,之后在美国中转几次,最后送到gels的地址。

gels在签收后,会对货物统一整理,然后到他们的大仓库。这个时候在gels的网站就可以对货物进行操作了。在gels上面提交运单,等上几 天,iPad就会原包送到你手上。因为没有你的允许,gels是不会拆开包裹的。他们寄送的时候,会在原有的fedex包装上面重新打包一层寄给你。真正 做到了原包未拆封。原创文章http://wuhongsheng.com/

OK!整个购买iPad的攻略就到此为止。如果你不再需要gels的帐号,可以联系他们的客服要求退回余额。

最后说说关税,一般情况下,你需要如实申报寄送的物品,但是否需要交关税主要看海关抽查,运气不好被抽上的话,只要属于正常的自用范围,是不需要征 税的。如果超出范围,那么一台iPad需要交600-1000的关税。但就算要缴税,也比淘宝上面买的便宜1000多。

Firefox升级后cookie失效(丢失)的终极解决方案

每次升级Firefox,一些论坛的Cookie就会失效,需要重新登录。这是因为,很多论坛的Cookie是绑定User Agent的,一旦User Agent改变(Firefox每次升级,User Agent就会改变),Cookie就会失效。这个问题,可以通过固定Firefox的User Agent的方法解决这个问题,方法如下:
在地址栏输入 about:config 回车,然后在下面的窗口点击鼠标右键,选择“新建”->“字符串”,出来的对 话框中输入

general.useragent.override

,按确定后,会让你输入刚才那个选项的值,也就是你 要设定的User Agent。比如,我的系统是Windows 2003,Firefox 是3.0b2pre,我指定的User Agent是:

Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9) Gecko/Firefox/3.0

如果你用的是Firefox 2.0.0.x系列,Windows是XP,那么可以设成:

Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1) Gecko/Firefox/2.0

这个修改立刻生效,从About对话框中就可以看的 出来。设定完后,可以到下面这个网页查看自己的 User Agent 设置的是否正确: http://www.useragentstring.com/

当然,做了上面的设定以后,因为User Agent改变了,所有绑定 User Agent 的论坛,都会要求你重新登录一次。不过,只要重新登录一次后,以后升级Firefox时就不用再登录了(除非你将原来的配置文件夹删除),cookie会 一直有效,直到真的过期为止。