Thursday, January 27, 2011

具有纪念意义的一天, 2011再给力一些吧!!!

小茜茜回国了, 我一个人在法国为了更好的生活奋斗 (其实是五月份还要回国..现在只能在这待着了..)

先是自己生活了一个多星期,真的是很无聊.. 可以理解在外闯荡的单身同胞们是多么的孤单了...

1月25号, 由于一个面试把来巴黎找工作的时间提前了一个星期.. 在此感谢 老付和锋锋, 无私的招待着..

1月26号, 千辛万苦的在LA DEFENSE找到了出去的路... 这地方太高级了...果然是大城市..
又千辛万苦的在一个角落里的5层还是几层的小楼里找到了要面试的公司...更是千辛万苦的问好6,7个人才找到了公司的房间在哪... 在些感谢那6,7个人..

面试很顺利, 是两个年轻的小伙, 英语很给力, 硬是不说法语.. 最后得出结论, 明天给我消息, 也就是今天

刚才,千辛万苦的等到了小伙的电话, 然后很激动的得到了好消息!!! 很是happy!!! 唯一的缺陷就是公司太小了..还好,说给转工作合同. 如果我去了的话,我就是公司的三当家的!!

又是流水帐,恩! 明天了去谈合同的细节.. 希望2011再给力一些吧!!!

Monday, January 17, 2011

wow国服3.1.3射击极限DPS抽筋宏完美版 | TG魔兽世界专区

转自: wow国服3.1.3射击极限DPS抽筋宏完美版 | TG魔兽世界专区

阅读了各位大大的研究帖,受到他们的启发,并经过自己的测试和修改
放出目前最简单,最完美,最强DPS,突破宏命令延迟缺陷的抽筋宏。
  已经测试,200急速,40秒内放出26公共CD的个技能外加两个沉默射击(做到这些的理论所需时间是40.2秒),自动射击次数正常一个不少。无论你是什么装备档次,只要是射击天赋就适合使用
更新后的前四个宏功能是,按住ALT键使用准备就绪,并且继续执行宏不会卡技能。
需要注意两点:
1,按住不要松太快,确定准备就绪使用了再松开。
2,准备就绪CD没到请不要按。

宏1:橙弓,无瞄准雕文
/施放 [mod]准备就绪;!自动射击
/施放 沉默射击
/施放 杀戮命令
/castsequence reset=10/alt 奇美拉射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/castsequence reset=10/alt 瞄准射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/施放 稳固射击
/脚本 UIErrorsFrame:Clear()
宏2:橙弓,有瞄准雕文
/施放 [mod]准备就绪;!自动射击
/施放 沉默射击
/施放 杀戮命令
/castsequence reset=8/alt 瞄准射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/castsequence reset=10/alt 奇美拉射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/施放 稳固射击
/脚本 UIErrorsFrame:Clear()
宏3:非橙弓,无瞄准雕文,整合准备就绪(这是一个一拖二宏有A,B两个部分)
宏A:
/施放 [mod]准备就绪;!自动射击
/施放 沉默射击
/施放 杀戮命令
/castsequence reset=10/alt 奇美拉射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/castsequence reset=10/alt 瞄准射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/click MultiBarBottomRightButton12
宏B:
/施放 [mod]准备就绪;!自动射击
/castsequence reset=6/alt 奥术射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/施放 稳固射击
/脚本 UIErrorsFrame:Clear()
使用时请将宏B放在MultiBarBottomRightButton12(右边动作条最后一格也就是右下脚那一格)的位置。把宏A放在要抽的那个位置。
宏4:非橙弓,有瞄准雕文,整合准备就绪(这是一个一拖二宏有A,B两个部分)
宏A:
/施放 [mod]准备就绪;!自动射击
/施放 沉默射击
/施放 杀戮命令
/castsequence reset=8/alt 瞄准射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/castsequence reset=10/alt 奇美拉射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/click MultiBarBottomRightButton12
宏B:
/施放 [mod]准备就绪;!自动射击
/castsequence reset=6/alt 奥术射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/施放 稳固射击
/脚本 UIErrorsFrame:Clear()
使用时请将宏B放在MultiBarBottomRightButton12(右边动作条最后一格也就是右下脚那一格)的位置。把宏A放在要抽的那个位置。
下面的两个宏遇到使用准备就绪的时候会卡住几秒。这里之所以放出来,是给那些不会使用一拖二宏或者懒得使用一拖二宏的玩家使用:
宏5:非橙弓,无瞄准雕文
/施放 !自动射击
/施放 沉默射击
/施放 杀戮命令
/castsequence reset=10 奇美拉射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/castsequence reset=10 瞄准射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/castsequence reset=6 奥术射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/施放 稳固射击
宏6:非橙弓,有瞄准雕文
/施放 !自动射击
/施放 沉默射击
/施放 杀戮命令
/castsequence reset=8 瞄准射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/castsequence reset=10 奇美拉射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/castsequence reset=6 奥术射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击,自动射击
/施放 稳固射击

[整理]由于法国电话网络增值税上涨,客户提前解约信样板【本文末尾段】

转自: 人人网 校内- 日志分享

由于上调增值税,“三合一”(电话、电视、因特网服务费将从2月1日起上涨。这项决定令用户与电话公司签署的合同失效,用户可以不用预先通知也不必支付赔偿金,便可以取消合约。
从二月份开始,电话公司很可能遇到用户立即取消因特网或者手机租约而且不用支付赔偿金的情况。法国电信公司刚刚向客户证实,可以“在价格修订之后四个月内解除合同而不支付赔偿金。”
www.xineurope.com某 些手机租费和三合一服务租费的变动,令电话公司和消费者协会陷入一片混乱。因为,目前推出的包括电视服务的租费均 采用5.5%的增值税率。而在欧盟委员会的敦促下,法国从1月1日开始采用19.6%的增值税,因此法国电信和SFR电话公司将从2月1日开始把这部 分额外税费反馈到客户头上。
但是电话公司没有料到,价格变动还修改了公司与客户的合约,客人于是可以不用遵守12到24个月租线承诺,立即中止合同。从11月15日开始,一些运营商已经在合同里注明关于增收TVA的precaution了,所以,小心签了之后解除不了。
www.xineurope.com法国电信的此项决定可能涉及1100万客户。但是UFC选择什么消费者协会的巴雷洛指出,所有电话公司都受到影响。
对于消费者来说,拥有可以随即取消合同的权利还给他们带来另一项好处:保留手机。一部售价99欧元的智能手机的实际价格可能是8到10倍。
电话公司推出低价是为了吸引长期客户,而取消合同令这个机制瓦解。
www.xineurope.comSIA CONSEIL电信和传媒部经理杜布勒伊证实,“这对客户来讲是好消息,但是对电话公司却是噩耗。”
增值税从5.5%增加到19.6%之后,实际收费将增加1到3个欧元。
www.xineurope.com正所谓几家欢笑几家愁。就在传统电话公司不知道如何反馈增值税上调部分的时候,潜在电话公司在一旁摩拳擦掌。这些公司很少推出连带电视服务的合同,因此不会提升价格。
www.xineurope.com对于至今仍然难以说服客户的二十几家潜在电话公司来讲,实在是个难得的机会。这些公司目前占据的市场份额是6%到7%。
=========================================================
La hausse de la TVA sur les forfaits triple play décidée dans le cadre du texte sur la loi sur les finances 2011 s'applique aussi aux forfaits mobiles qui disposaient jusque-là d'un taux de TVA réduit sur une partie de leur montant. Comme l'explique un courrier Orange qu'a reçu PCINpact : « votre forfait Origami Star a bénéficié jusqu’ici d’un taux de TVA réduit à 5,5% sur 50% de son montant HT. Dans le cadre de la loi de finances pour 2011, cette mesure fiscale disparaît ».
www.xineurope.com
http://www.igeneration.fr/iphone/forfaits-mobiles-augmentation-de-la-tva-chez-sfr-27632
www.xineurope.com
www.xineurope.comAprès Orange (lire : Hausse de la TVA : les forfaits mobiles vont augmenter), c'est au tour de SFR de présenter ses plans concernant l'augmentation de la TVA sur les forfaits mobiles. L'augmentation ne sera pas répercutée sur le mois de janvier, mais seulement à partir du premier février 2011. L'opérateur mettra à profit ce délai pour faire de la pédagogie et expliquer à ses abonnés que la hausse des tarifs n'est pas de son fait.
www.xineurope.comTous les forfaits ne seront pas concernés : les forfaits Essentiels et tous les forfaits liés aux clés 3G ou à l'iPad n'augmenteront pas. Par contre, les forfaits Illimythics iPhone augmenteront au premier février. Le forfait 1 heure passera ainsi de 41,90 € à 44,90 € par mois sur 24 mois. Pour tous les autres forfaits, les détails sont proposés sur le site de SFR.
www.xineurope.com
对于sfr,可以直接点上面的‘proposés’ 的链接,可以查询到自己的forfait是否在2月1号涨价!~
www.xineurope.com

http://www.igeneration.fr/iphone/forfaits-mobiles-augmentation-de-la-tva-chez-sfr-27632
www.xineurope.com
PS : 看来sfr为了保留客户,只涨价了一部分的forfaits,还专门是对Iphone的,毕竟ip的用户必须满6个月才能官方解锁
www.xineurope.
www.xineurope.chttp://www.lemonde.fr/technologies/article/2010/12/23/hausse-de-la-tva-sur-le-triple-play-les-clients-pourront-resilier-mais-garder-le-telephone_1457270_651865.html Le monde上面的原新闻,orange已经表态,其他公司待定!
www.xineurope.com
PS:11月份之后签的forfaits合同已改,没办法resiliser了!~
===========================================
Les prix des abonnements vont augmenter, suite à la hausse de la TVA décrétée par le gouvernement. Conséquence, les abonnés pourront résilier leurs forfaits, même s'ils sont encore engagés. Sous certaines conditions.

Les opérateurs téléphoniques se préparent au pire. D'ici un mois, une majorité de leurs clients pourront résilier leurs forfaits sans frais, même ceux qui s'étaient engagés pour douze ou vingt-quatre mois. Cette mesure, qui s'applique aussi bien aux abonnés à Internet qu'au mobile, intéressera avant tout ces derniers. En France, ils sont près de 80% à avoir choisi de s'engager, le plus souvent pour une durée de plus d'un an, en échange d'une réduction lors de l'achat de leur téléphone portable.
www.xineurope.com
www.xineurope.com
www.xineurope.comPourquoi va-t-on pouvoir résilier son forfait avant l'heure ?

Le gouvernement a décrété cet automne la fin de la TVA réduite sur les abonnements téléphoniques. Jusqu'alors, les opérateurs y appliquaient en partie - généralement la moitié - un taux de 5,5%, qui passera à 19,6% au 1er janvier 2011. Ils vont donc répercuter cette hausse sur la facture de leurs clients, dont le prix augmentera de quelques euros. Cette hausse de prix ouvrira le droit, pour l'abonné, à une résiliation sans frais par lettre recommandée, quelle que soit sa durée d'engagement, comme le prévoit la loi Chatel. Et ce, selon les textes, «jusqu'à quatre mois après l'entrée en vigueur de la modification tarifaire», rappelle Orange dans un courrier à ses abonnés envoyé cette semaine.
www.xineurope.com
www.xineurope.com
www.xineurope.comQui sera concerné ?

Tous les abonnés dont le forfait augmentera. Chez Orange, tous les clients à des forfaits sont concernés. SFR, qui expédiera des courriers à partir de la semaine prochaine, s'est lui «engag[é] à garder le prix des plus petits forfaits inchangé», sans préciser quels étaient les forfaits en question. Bouygues n'a pas fait encore connaître le détail de ses hausses, mais avait déjà annoncé son intention de répercuter toute hausse de la TVA. Cette hausse interviendra «progressivement» et pourra donc être étalée dans le temps, a-t-il précisé vendredi.
www.xineurope.com

www.xineurope.comEt si je me suis engagé récemment ?

Tout dépend de la date d'abonnement ou de réengagement. Les opérateurs ne sont en effet pas totalement pris au dépourvu. Sur ses nouvelles brochures datées du 25 novembre, Orange affiche les tarifs en vigueur à partir du 1er février. SFR prévient lui qu'il va, «dans le cadre de la modification du taux de TVA, procéder à une hausse de certains tarifs à partir du 1er février 2011». Bouygues Telecom avertit également depuis le 15 novembre qu'«en cas de hausse de la TVA, celle-ci sera répercutée sur les tarifs TTC». Ces précautions suffisent-elles ? «Si ces termes sont prévus au contrat alors logiquement la loi Chatel ne devrait pas s'appliquer. En effet, le consommateur a donné son accord, par anticipation, pour ces changements», explique au figaro.fr Edouard Barreiro, directeur des études à l'UFC-Que choisir.


Devra-t-on rendre son téléphone ?
www.xineurope.com
www.xineurope.comPour attirer de nouveaux clients, les opérateurs ont l'habitude de réduire le prix d'achat des mobiles, en échange d'un engament à rester client pendant 12 voire 24 mois. Un iPhone 4, vendu 629 euros par Apple, est ainsi proposé à partir de 149 euros dans les boutiques Orange. Quelle que soit cette réduction commerciale, le téléphone appartient au client et ne devra pas être rendu en cas de résiliation, anticipée ou pas.


www.xineurope.comPourra-t-on changer d'opérateur sans perdre son numéro ?
www.xineurope.com
Oui, les clients pourront demander la portabilité de leur numéro et changer d'opérateur, sans avoir à payer là non plus de frais de résiliation. Ce qui pourrait profiter aux opérateurs virtuels, qui disposent d'offres moins chères, mais accordent des subventions moins importantes sur les téléphones. «On est assez euphorique», explique Pascal Rialland, directeur général de Virgin Mobile, qui s'attend à voir arriver «un nombre assez significatif de nouveaux clients». «Il n'y aura pas de véritable mouvement de fond, à la marge oui, il y aura des clients qui changeront mais cela se fera dans tous les sens», tempère de son côté un porte-parole d'Orange.
============================================================
由于TVA 上涨,ORANGE SFR 公司将于2月1日 提高部分FORAIT 费用,11月15号前签约合同中有电视功能的客户无论签约一年或者两年都可以在新费用实施后的4个月之内也就是2011年6月一日之前无条件免费解约,手机还是你的。过后就晚了啊
www.xineurope.comwww.xineurope.com
PS 由于一些GGMM误解 此种条件就像我标题里说的,只针对部分 客户。如果你被通知你的合同要涨价,那就是针对你的。因为这次措施是欧盟针对法国有线电视这一块。所以说不是所有人都能解约。ex:最普通的 CLASSIC 合同不行。具体请上官方网站看下啊。
=======================================================
我电话打过了,不用写信也可以,直接电话service resiliation。但是只能2月1日开始解约。
我是sfr的,打900找service resiliation,我问他renseignement concernant la hausse de TVA,我跟他说我收到了他们的信通知。
人 家估计每天回复很多类似电话,立马说, 看了我的dossier,符合可以无条件解约的用户,不用写信,直接电话就可以解约,但是从2月1日开始才可以,4个月内。 我就顺便再问问他们有没有 什么优惠可以挽留我,人家很直接的问我想换什么手机,然后给了我一个价格,然后建议我最好2月1日重新电话问,那时候的offre会更加优惠。
=========================================================
解约信模板。具体教程在此 http://www.begeek.fr/actualite/tutoriels
Modèle de lettre de résiliation (anciens clients)
不保留号码版本
Objet: Demande de Résiliation
Madame, Monsieur,
Je viens de recevoir un courrier me stipulant que mon abonnement sera augmenté dès le mois de février 2011.
Par cette présente lettre, je vous fais part de ma décision de résilier mon contrat
d’abonnement n°######### à compter du 01 Fevrier 2011 et cela sans frais conformément aux termes de l’article L 121-84: « Tout projet de modification des conditions contractuelles de fourniture d’un service de communications électroniques est communiqué par le prestataire au consommateur au moins un mois avant son entrée en vigueur, assorti de l’information selon laquelle ce dernier peut, tant qu’il n’a pas expressément accepté les nouvelles conditions, résilier le contrat sans pénalité de résiliation et sans droit à dédommagement, jusque dans un délai de quatre mois après l’entrée en vigueur de la modification. » (cf votre courrier).

Je précise enfin que toute facturation abusive de frais serait perçue comme un manquement à la lettre de l’article L121-84 du Code de la Consommation et ne saurait en aucun cas être acceptée.
En vous remerciant par avance, je vous prie de m’informer en retour par courrier
de la confirmation de ma demande.

Veuillez agréer, Madame, Monsieur, l’expression de ma considération distinguée.
Modèle de lettre de résiliation et portabilité (anciens clients)
保留号码版本
Objet: Demande de Résiliation et de Portabilité
Madame, Monsieur,
Je viens de recevoir un courrier me stipulant que mon abonnement sera augmenté dès le mois de février 2011.
Je vous fais part de mon désaccord concernant cette augmentation modifiant les conditions contractuelles.
Par cette présente lettre, je vous fais part de ma décision de résilier mon contrat d’abonnement n°######### à compter du 01 Fevrier 2011 et cela sans frais conformément aux termes de l’article L 121-84: « Tout projet de modification des conditions contractuelles de fourniture d’un service de communicationsélectroniques est communiqué par le prestataire au consommateur au moins un mois avant son entrée en vigueur, assorti de l’information selon laquelle ce dernier peut, tant qu’il n’a pas expressément accepté les nouvelles conditions, résilier le contrat sans pénalité de résiliation et sans droit à dédommagement, jusque dans un délai de quatre mois après l’entrée en vigueur de la modification. » (cf votre courrier).
Je précise enfin que toute facturation abusive de frais serait perçue comme un manquement à la lettre de l’article L121-84 du Code de la Consommation et ne saurait en aucun cas être acceptée.
Ma portabilité étant éligible je vous demande également de me permettre cette portabilité une fois mon contrat résilié conformément à la décision n° 02-549 de l’Autorité de régulation des télécommunications.
En vous remerciant par avance, je vous prie de m’informer en retour par courrier de la confirmation de ma demande.
Veuillez agréer, Madame, Monsieur, l’expression de ma considération distinguée.
以下是寄信地址(Orange我找到两个地址,不知道哪个更好……):
Orange Service Clients/résiliation
BP 331
90006 Belfort Cedex
-
Service Resiliation Mobile Orange
33732 BORDEAUX CEDEX 9
-
Bouygues Telecom
Service résiliation
60436 Noailles Cedex
-
SFR Service Résiliation
TSA 21114
57757 Metz cedex 9
===================================
需要注意的是,很多人打电话问运营商能否解约的同时保留电话号码,答复都是否定的。

PHP程序员应该掌握的10项技能!_老鼠哥PHP工程师站--PHP编程开发平台,和您一起冲浪

转自: PHP程序员应该掌握的10项技能!_老鼠哥PHP工程师站--PHP编程开发平台,和您一起冲浪

一个PHP程序员应该掌握的10项技能!

很多学PHP的人一直也搞不清楚,一个PHP程序员和Java程序员或者是.net程序员有什么不同,告诉你,其实都一样!没有什么不同,下面 的内容,就是针对一个Java程序员掌握的技能对比PHP来说的!告诉你,它们其实是一样的,不过是工具而已,没有高低贵贱之分。只不过你不熟练,不知道 而已!

1、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。

2、命令:必须熟悉PHP带的一些常用命令及其常用选项,熟悉那些命令,自己运行php.exe -h 如果这些命令你没有全部使用过,那么你对PHP实际上还很不了解。

3、工具:必须至少熟练使用一种IDE的开发工具,例如:Eclipse、Netbeans、zend或者editplus,ultraedit,包括进行工程管理、常用选项的设置、PHP插件的安装配置以及进行调试。

4、API:PHP的核心API是非常庞大的,但是有一些内容笔者认为是必须熟悉的,否则不可能熟练的运用PHP,包括:

◆ 文件目录处理函数包80%以上的函数的功能的灵活运用。
◆ 日期时间函数中的80%以上的函数的功能的灵活运用
◆ 数学函数库中的100%的内容。
◆ 网络库中的60%以上的内容,对各个函数的功能比较熟悉。
◆ 字符串处理函数下的60%以上的内容,特别是各种处理函数。
◆ 正则表达式函数下的90%以上的内容,特别是各种正则处理
◆ 一些安全库下的40%以上的内容,如果对于安全没有接触的话根本就不可能掌握PHP
◆ XML处理,熟悉SAX、DOM以及JDOM的优缺点并且能够使用其中的一种完成XML的解析及内容处理。
◆ 图形图像函数库下的80%以上的内容,特别是一些图像生成和处理
◆ MySQL 数据库函数下的90%以上的内容,特别是处理各种数据的函数
◆ 数组处理函数下的90%以上的内容,特别是各种操作处理函数
◆ 其它PEAR,PECL,和一些扩展类库中的80%以上的内容,特别是一些常用的类的处理
◆ 针对不同的需求,查找不同的函数库。

5、测试:必须熟悉使用phpunit编写测试用例完成代码的自动测试。

6、管理:必须熟悉使用xinc, phing等完成工程管理的常用任务,例如工程编译、生成phpdoc、生成、版本控制、自动测试。

7、排错:应该可以根据异常信息比较快速的定位问题的原因和大致位置。

8、思想:必须掌握OOP的主要要求,这样使用PHP开发的系统才能是真正的PHP系统。

9、规范:编写的代码必须符合流行的编码规范,这样程序的可读性才比较好。

Wednesday, January 12, 2011

英语幽默Another 40 Years to live_笑口常开_中国英语网

转自: 英语幽默Another 40 Years to live_笑口常开_中国英语网

A middle aged woman had a heart attack and was taken to the hospital. While on the operating table she had a near death experience. Seeing God, she asked if this was it. God said, "No you have another 43 years, 2 months, and 8 days to live." Upon recovery the woman decided to stay in the hospital and have a face lift, lip-suction, breast augmentation, tummy tuck, etc. She even had someone come in and change her hair color, figuring since she had so much more time to live, she might as well make the most of it. She got out of the hospital after the last operation and while crossing the street was killed by an ambulance speeding to the hospital. Arriving in front of God, she demanded, "I thought you said I had another 40 Years? "God replied, "I didn't recognize you."


一名中年妇女心脏病突发被送到了医院, 在手术台上,濒临死亡之际,她看到了上帝, 于是,她问上帝是不是她的日子到头了。 上帝回答说,“还没有,你还能活43年,2个月零8天。” 身体快要康复的时候,这名女士想到自己还要活那么多年,得好好对待自己,于是决定先不出院,而是去给自己整整容,吸吸脂,隆隆胸,然后还做了一个腹部拉皮 和其它一些美容美体手术。 她甚至还请人到医院里面帮她头发给染了。 做完最后一个手术,这位女士出院了, 但就在过马路的时候,她被一辆风驰电挚赶回医院的救护车给撞死了。 再一次,她又站到了上帝的面前,她大惑不解地问上帝,“我记得你说我还能再活40年?” 上帝回答,“那个时候我没认出你来”。

Tuesday, January 11, 2011

纪念第一次在115U盘,抽到超过10M的空间


抽了半年了,虽说是每天可以抽免费空间, 1~100M随机, 但是从来没有抽到过超过10M的..

这次终于不小心抽到个72M! 还真是多..

特此纪念一下!




CES里的奇葩中国公司展区 - 趣科技 - 果壳网 guokr.com

转自: CES里的奇葩中国公司展区 - 趣科技 - 果壳网 guokr.com

巴禾通风设备有限公司,恭喜您了!您的展区“荣获”今年国际电子消费展“最差展区”奖。您的展区绝对是今年电子展上的一朵奇葩……
/gkimage/sn/58/nc/sn58nc.png
巴禾通风设备有限公司,恭喜您了!您的展区“荣获”今年国际电子消费展“最差展区”奖。
您的展区绝对是今年电子展上的一朵奇葩,当其他展区在高调展示最新科技产品、拼死拼活吸引来客的眼球时,你雇来帮你布置展区的人却直接一走了之了——只留下三盏风扇和一把椅子。
如果你在展厅南区的后端闲逛,就会有幸撇到这幕凄惨暗淡的景象。要知道,在这场电子盛宴中看到这场景实属罕见。那些制造廉价电缆和开关或者其他各式各样垃圾电子零件的制造商通常会在这块区域热火朝天地展出产品。但他们的这些电子零件,很可能因为质量拙劣而引起火灾。
我猜这个公司是卖风扇的?又或者他们是卖椅子的?不管怎样,从这图片可以看出,他们在推广一样“产品”的时候特别优秀,那就是令人绝望的萧条场景……
(在gizmodo网站的留言里,有网友爆料说:这个公司的几个经理就是来这设个最小型的展区,然后去渡个公费的拉斯维加斯之旅……)
在看过巴禾通风的 主页 后,发现这就是家佛山市卖电风扇的公司……

来源: gizmodo

Monday, January 10, 2011

腊八, 祝王雷同学新婚快乐!!

中国时间现在已经是腊八了

最好的朋友王雷今天结婚, 我在这里, 只能代表法国人民送去最真诚的问候!!

借一张照片沾沾喜气!!





真心祝福!!





几个基于MVC开发的PHP框架介绍 - joan理想人生 - JavaEye技术网站

转自: 几个基于MVC开发的PHP框架介绍 - joan理想人生 - JavaEye技术网站

1. Symfony
Symfony是一个用于开发PHP5项目的web应用框架。
这个框架的目的在于加速web应用的开发以及维护,减少重复的编码工作。
Symfony的系统需求不高,可以被轻易的安装在任意设置上:你只需一个Unix或Windows,搭配一个安装了PHP5的网络服务器即可。它与差不多所有的数据库兼容。Symfony的价位不高,相比主机上的花销要低得多。
对于PHP开发者而言,使用Symfony是一件很自然的事,其学习曲线只有短短一天。干净的设计以及代码可读性将缩短开发时间。开发者可以将敏捷 开发的原理(如DRY,KISS或XP等)应用在其中,将重点放在应用逻辑层面上,而不用花费大量时间在编写没完没了的XML配置文件上。
Symfony旨在建立企业级的完善应用程序。也就是说,你拥有整个设置的控制权:从路径结构到外部库,几乎一切都可以自定义。为了符合企业的开发条例,Symfony还绑定了一些额外的工具,以便于项目的测试,调试以及归档。
其官方网站:http://www.symfony-project.org/    
 
2. QPHP
QPHP,意为快速PHP,它是一个与ASP.NET类似的MVC框架。基本上它是这样一个情况:
◆整合了Java和C#的美感
◆除去了在其他PHP框架中使用的Perl形式的意义含糊的语言
◆大量基于OOP的概念
其官方网站:http://qphp.net/
 
3.Zoop
Zoop PHP框架,意为Zoop面向对象的PHP框架。这是个稳定,可伸缩并可移植的框架。从诞生到现在的5年间,已经在不少产品开发中被使用。
Zoop是一个快速,有效并干净的框架。它的伸缩性很好,你可以只安装你需要的功能。
对代码并不很熟悉的开发者也可以通过Zoop快速的开发安全的web应用。熟练的开发者则可以更加将Zoop的弹性利用到极致。
Zoop建议将display,logic以及数据层(MVC)分开使用。
Zoop由很多组件和项目集合而成,其中包括smarty和prototype AJAX框架,PEAR模块等。高效的核心组件提供了很多你原本需要自己编码来实现的功能。Zoop内置的纠错功能可以通过配置实现生产环境下的错误日志 生成,这个错误日志提供了很多信息,可读性很高,可以更轻易的寻找并排除错误。
Zoop的一个特别之处在于其GuiControls,在PHP中是一个相当革新的想法。它提供了很多form widgets与验证完整的集合到一起,并形成了一个可以轻松打造个性化GuiControls的框架。
其官方网站:http://zoopframework.com/
 
4.PHPDevShell
PHPDevShell是一个开源(GNU/LGPL)的快速应用开发框架,用于开发不含Javascript的纯PHP。它有一个完整的GUI管 理员后台界面。其主要目标在于开发插件一类的基于管理的应用,其中速度、安全、稳定性及弹性是最优先考虑的重点。其设计形成了一个简单的学习曲线,PHP 开发者无需学习复杂的新术语。PHPDevShell的到来满足了开发者们对于一个轻量级但是功能完善,可以无限制的进行配置的GUI的需求。
其官方网站:http://www.phpdevshell.org/

五个免费开源的数据挖掘软件-IT168 信息化专区

转自: 五个免费开源的数据挖掘软件-IT168 信息化专区: "五个免费开源的数据挖掘软件"

Orange
五个免费开源的数据挖掘软件
Orange是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑 定了Python以进行脚本开发。它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能。其由C++和 Python开发,它的图形库是由跨平台的Qt框架开发。

RapidMiner
RapidMiner,以前叫YALE(Yet Another Learning Environment),其是一个给机器学习和数据挖掘和分析的试验环境,同时用于研究了真实世界数据挖掘。
五个免费开源的数据挖掘软件
它提供的实验由大量的算子组成,而这些算子由详细的XML文件记录,并被RapidMiner图形化的用户接口表现出来。RapidMiner为主要的机 器学习过程提供了超过500算子,并且,其结合了学习方案和Weka学习环境的属性评估器。它是一个独立的工具可以用来做数据分析,同样也是一个数据挖掘 引擎可以用来集成到你的产品中。

Weka
由Java开发的Weka(Waikato Environment for Knowledge Analysis)是一个知名机器学机软件,其支持几种经典的数据挖掘任务,显著的数据预处理,集群,分类,回归,虚拟化,以及功能选择。
五个免费开源的数据挖掘软件
其技术基于假设数据是以一种单个文件或关联的,在那里,每个数据点都被许多属性标注。Weka使用Java的数据库链接能力可以访问SQL数据库,并可以 处理一个数据库的查询结果。它主要的用户接品是Explorer,也同样支持相同功能的命令行,或是一种基于组件的知识流接口。

JHepWork
为科学家,工程师和学生所设计的jHepWork是一个免费的开源数据分析框架,其主要是用开源库来创建一个数据分析环境,并提供了丰富的用户接口,以此来和那些收费的的软件竞争。
五个免费开源的数据挖掘软件
它主要是为了科学计算用的二维和三维的制图,并包含了用Java实现的数学科学库,随机数,和其它的数据挖掘算法。jHepWork是基于一个高级的编程语言Jython,当然,Java代码同样可以用来调用jHepWork的数学和图形库。

KNIME
KNIME (Konstanz Information Miner) 是一个用户友好,智能的,并有丰演的开源的数据集成,数据处理,数据分析和数据勘探平台。
五个免费开源的数据挖掘软件
它给了用户有能力以可视化的方式创建数据流或数据通道,可选择性地运行一些或全部的分析步骤,并以后面研究结果,模型以及可交互的视图。KNIME由 Java写成,其基于Eclipse并通过插件的方式来提供更多的功能。通过以插件的文件,用户可以为文件,图片,和时间序列加入处理模块,并可以集成到 其它各种各样的开源项目中,比如:R语言,Weka,Chemistry Development Kit,和LibSVM。

偷懒无罪,放假有理 - 科技名博 - 果壳网 guokr.com

转自: 偷懒无罪,放假有理 - 科技名博 - 果壳网 guokr.com

(文/Jonah Lehrer)21世纪最奢侈的享受就是没有电子邮件的假期了。如果让我选择,或有有稳定网络服务的豪华酒店,或没有手机信号的邋遢汽车旅馆,我一定选择 后者。不理会电子邮件、不上Twitter、注销Facebook,然后跑到海滩度假真是有够颓废的。最初的几小时也确实难捱,我总是会幻听到新邮件的提 示音,但最终克服了这种失去网络的焦虑,并且开始享受度假生活。

这篇博文将会详尽地解释这种懒散假期的必要性。尽管我们总想在泳池边打盹的间隙偷偷查一下邮件,总想在圣诞节的下午顺路去办公室看一眼,但这些想法 实际上是很糟糕的。原因很简单,当工作有一些距离感,甚至遥不可及的时候,我们会对它有新想法。结果是,原先看起来无法解决的难题,那些花了我们好几个月 还没搞定的问题,忽然就变得简单了。我们在假期反而有了工作突破。

比如,我们可以看看最近由印第安纳大学的心理学家Lile Jia领导的这项实验(来自远方的一堂课:空间距离对创造性认知的影响)。

他将几十位本科生随机分成两组,要求每组学生都列出尽可能多的交通方式(也就是“制造创意任务”)。其中一组学生被告知,这项活动是由目前在希腊留 学的印第安纳大学学生开发的;而另一组学生则被告知,这项活动是由当地的印第安纳大学学生开发的。乍一看很难相信,这点芝麻大的区别会影响到参与者的表现 吗?谁编出来的活动,又有什么关系呢?

然而,Jia发现两组学生的表现存在惊人的差异,那些知道这项任务来自希腊的学生会想出更多可能的交通方案。他们不仅提出了公交车、火车和飞机,而 且还说到了骑马、战船、宇宙飞船、自行车,以及赛格威电动车。由于任务来自远方,受试者的思维会更少地受到当地交通的限制。他们不仅考虑怎样在印第安纳附 近活动,还在思索如何环游世界。

在第二项研究中,Jia发现人们在做一系列脑筋急转弯题目时,如果知道这些题目来自2000英里外的加州而不是印第安纳,他们的表现就会好很多。题目类似以下这种:

“一个囚徒想从高塔上逃走,他在牢房中发现了一根绳子,但是只有高塔到地面的一半距离那么长。他把绳子一分两半,系起来,然后成功逃脱了。他是怎样做到的?”

距离感让这些受试者考虑了范围更广的选择,这也让他们更可能找到这些脑筋急转弯的答案(囚徒将绳子纵向解开分成两股,然后系在一起)。在思维卡壳的时候,他们不太容易放弃,而是能够坚持思考,直到找出正确答案。

这篇论文建立在更大规模的建构水平理论(CLT)的研究之上,这个理论表明,距离感(无论是空间、时间还是概率上的)会戏剧性地影响我们的思考方 式。CLT的基本前提假设是,感觉近的事物会被人们从更明确、更实在的角度考虑,而感觉很远的事物会被人们用更抽象的方式来思考。去年我给 McSweeney's写了一篇文章:

“想想看玉米地,当你站在农场中,四周被纤维素的茎秆和破败的荚壳包围,空气中隐约有肥料和爆米花的气味,你就会自动想到有关玉米的最基本定义——一种植物、一种谷物,中西部农业的支柱。

但现在换个视角想想这同一片玉米地吧。跳出农场,来到一条拥挤的街道中央,到处都是出租车和行人,那么,这种植物就不只是一种植物了。你广阔的神经 元网络会冒出各种联想,高果糖玉米糖浆、肥胖症、农业法案等等,你会琢磨乙醇和爱荷华州党团会议,集市上小孩子玩的玉米迷宫,以及培根青玉米粒煮利马豆的 美味。这个名词现在沿着想象之网离题万里,直到遥远的角落。”

这也就是假期的用处,当我们逃离惯常所处的环境时,心灵会忽然发觉那些以往被抑制的出格想法。我们开始想象那些费解的可能性,玉米可以给汽车当燃料是每天坐办公室的人永远无法想到的点子。

我们常常很难发觉环境对创造力的限制。我们不敢让手机静音,不敢不回电子邮件,以为这样就可以“离工作更近”,但其实我们陷入了思维定势的困境。我 们妄下判断,认为这是思考的唯一方法,这是做事情的唯一途径,但直到我们在泳池边打了个盹,手里拿着一杯凤梨奶霜,觉得已经把工作抛开了十万八千里,但是 梦寐以求的答案却会忽然在脑海中显现。

原文看这里
科技名博微博
看完文章来这里调查一下吧
博主介绍: Jonah Lehrer是Wired的特约编辑,是《我们如何决定》和《普鲁斯特是神经学家》的作者,同时也是New Yorker, NY Times Magazine和WNYC’s Radiolab的特约撰稿人。

Sunday, January 9, 2011

网站改版的需要注意的几个要点-月光博客

转自: 网站改版的需要注意的几个要点-月光博客

改版,是一个问题。越来越多互联网公司产品人员意识到这个问题,无论是豆瓣的改版,还是Facebook的改版都遭到了用户的疯狂抵制。
和传统1.0网站相比,2.0网站用户的力量被无限放大,也意味着用户在网站发展中拥有越来越多的话语权。任何的所谓改版,都会一定程度上影响已有用户的使用习惯,可能遭到用户的大规模抨击。
这意味着,网站改版也许需要更多的智慧和精细化运作。
为什么需要改版?
网站改版的需要注意的几个要点
一个网站刚成立的时候,总是陌生和懵懂,对于网站的核心价值有着最忠实的体现,这时候的网站可以被称为产品的初级阶段。
伴随着用户需求和商业需求的变更,我们会给网站逐步作一些调整,以便更适应网站一步步发展的需求。当这些小的改变积累到一定程度,之前所做的产品界面设计和网站架构已经不能适应需求,这时候就需要改版。
这一过程有点类似操作系统,我们刚开始接触XP的时候发现很爽,但是随着时间的进步XP越来越不能满足我们得需求,这时候微软就会给它打一些大大小小的 补丁,以便它能够更好地工作。但是如果有一天,XP真的不能满足用户和公司商业价值的需要,那么这时候就需要推出下一版操作系统,就是现在正在普及的 Windows 7.
网站改版是为两个东西服务:用户需求和商业需求。如何顺利的改版,我们来看一下有哪些需要注意的要点。
1. 改版前做好需求调查
网站改版和很多产品开发一样,会遇到需求不断变更的情况,这意味着很多时候可能需要重复劳动,甚至有些需要完全推倒重做。
所以这时候就突出了改版需求调查的重要性,你需要从用户调查、数据挖掘等方式收集用户对功能的需求,同时你也需要和管理层确认有关公司整体发展的改版需求,然后把几方面的改版需求作汇总整理,供改版的时候使用。
完善的需求调查,对于网站改版的积极意义主要有两方面:一是让产品团队在进行产品设计和开发的过程中,做到心里有数;二是减少由于需求变更带来的时间和用户损失。
2. 能不改尽量不改
网站改版的过程中,可能会影响用户使用习惯部分,能不改尽量不改。网站改版是为了做加法,为了让网站越来越好,而不是做减法。
而用户的好恶,正是检验网站改版是否成功的一个重要标准。所以如果,有一些受到好评的功能,如果与商业利益或者高层意志相左,最好能够保全用户的使用习惯,再不济也要给用户足够的适应时间。
3. 渐进式演进
多网站改版,高层很喜欢沉浸在整站焕然一新的喜悦之中。但是这种彻头彻尾的改版,往往会导致用户的大量流失,辛辛苦苦培养的用户可能会因为冒进的改版消失殆尽。网站越大,损失越重。
有一个很著名的实验叫"温水煮青蛙",我们的改版也要稳稳地一步步进行,给用户一段时间去缓冲,让用户学习和适应新功能。
如果需要改五个频道,那就一个一个频道地改;如果需要改十个功能,那就一个一个功能地改。
在改版之前应该先吹风,让用户知道哪些功能会改,会改成什么样,改过之后有什么好处。然后在这个过程中你们可以收到用户关于改版的各种看法,然后籍此评判改版的可行性。
4. 上线并不意味着改版的结束
很多朋友,在网站改版上线之后,总会松一口气,然后心理说总算完了。
但改版是手段而不是目的,迎合用户和满足商业需求才是重点。这也就意味着上线不是终点,而是一个新起点。
然后大家应该广泛收集各方关于改版的看法,这些看法的来源包括但不仅限于用户、同事、业界友人,从中筛选出合理的建议,然后再对网站进行调整和改进。

来源:XJP投稿,原文地址


“温水煮青蛙”来源于19世纪末美国康奈尔大学科学家做过的著名“青蛙实验”。科学家将青蛙投入已经煮沸的开水中时,青蛙因受不了突而其来的的高温刺激立即奋力从开水中跳出来得以成功逃生。同样是水煮青蛙实验。当科研人员把青蛙先放入装着冷水的容器中,然后再加热。结果就不一样了。青蛙反倒因为开始时水温的舒适而水中中悠然自得。直至发现无法忍高温时,已经心有余而力不足了。被活生生的在热水中热死。
  “温水煮蛙”道出了从量变到质变的原理,说明的是由于对渐变的适应性和习惯性,失去戒备而招灾的道理。突而其来的大敌当前往往让人做出意想不到的防御效果,然而面对安逸满意的环境往往会产生不拘小节的松懈,也是最至命的松懈,到死都还不知何故。

从Google Docs下载任意格式文档的方法-月光博客

转自: 从Google Docs下载任意格式文档的方法-月光博客

自从 Google Docs 可以批量上传任意格式的文档后,很多人认为它就是传说中的 Gdrive,通过它的“Share to everyone”功能,就可以当作网络硬盘用了。特别是在Dropbox 被墙后,Docs 更是成为了硕果仅存的值得信耐的网络存储分享服务之一。
但是笔者在使用 Docs 的过程中,却发现,当我要下载一个非“MS Office/Open Office/PDF”格式的文档时,譬如下图:
从Google Docs下载任意格式文档的方法
经常(注意,是经常,而不是每次,具体原因不明)会出现以下对话框:
从Google Docs下载任意格式文档的方法
提示无法对文档进行病毒扫描,即便我点了“Download anyway”,也会出现404错误。
那么,我们该如何下载这些非“MS Office/Open Office/PDF”格式文档呢?
我们知道,只要是我们通过 Docs 打开过的文件,都会自动保存到 All items 里面:
从Google Docs下载任意格式文档的方法
这时,我们选中需要下载的文档:
从Google Docs下载任意格式文档的方法
右击,在右键菜单中选择“Export……”,则会出现一个“Convert and Download”的对话框:
从Google Docs下载任意格式文档的方法
点“Download”按钮后,Docs 就会自动对之前选中的文档进行打包:
从Google Docs下载任意格式文档的方法
打包完成后,会自动弹出下载对话框:
从Google Docs下载任意格式文档的方法
这样,我们就可以顺利对存放在 Docs 的非“MS Office/Open Office/PDF”格式文档进行下载了。
来源:谷歌众包论坛投稿,原帖地址

幽默的老外程序员注释_IT新闻_博客园

转自: 幽默的老外程序员注释_IT新闻_博客园

程序源代码中的注释经常是一个卧虎藏龙的地方,来看看这一辑国外某公司产品中的注释。注意:看的时候严禁喝水或进食。
clip_image001
亲爱的代码维护人员:
当您尝试优化这段代码但发现这是一个极端错误的决定的时候,请修改下面的计时器,以便警示后人。
总计浪费在这段代码的时间 = 16小时。
clip_image002
真的很有问题。
clip_image003
谨以此代码献给我的妻子达琳,感谢她一直支持我,还有我三个孩子和一只狗。
clip_image004神奇代码,请勿改动。
clip_image005喝醉啦,迟些再弄。
clip_image006
你可能会认为你读得懂以下的代码。但是你不会懂的,相信我吧。
要是你尝试玩弄这段代码的话,你将会在无尽的通宵中不断地咒骂自己为什么会认为自己聪明到可以优化这段代码。
好了,现在请关闭这个文件去玩点别的吧。
clip_image007
程序员1(于2002年6月7日):在登陆界面临时加入一些调试代码
程序员2(于2007年5月22日):临你个屁啊
clip_image008
反正这个办法就修复了问题,我也不知道为什么会这样
clip_image009
要理解什么是递归的话,请参考本文件的底部
(在文件的底部)
clip_image010
狂插两下; //痛啊
clip_image011
亲爱的未来的我自己,请原谅我。
我有着难以表达的歉意。
clip_image012
我不对以下代码负责。
是他们逼我写的,是违背我意愿的。
clip_image013
疯了吗?欢迎来到斯巴达。
clip_image014
要是你能修正这个问题的话,我会把72个处女中的两个送给你。
clip_image015
没有注释留给你,难写的代码必定难读
clip_image016IE 浏览器的 Hack (在这里先假设IE是浏览器)
clip_image017
有待修正。 修正什么啊?
clip_image018
要是再让我看到这种代码,我会带着枪来上班的
clip_image019
有只龙在这里……
clip_image020
在你阅读以下代码时,你要先搞懂为什么我在这样做。
我想读取一个根节点下面所有的子节点,以便控制根节点不会显示在选择框上。但那个傻逼的DBA找了一些某些傻逼的借口不让我用索引去读取这些数据,而要求我用他们傻逼的迭代器。所以有了以下代码。
clip_image021
当我写这段代码的时候,只有老天和我自己知道我在做什么。
现在,只剩老天知道了。

哪吒网-哪吒投递 精彩必达|哪吒机器人提醒-MSN机器人-Skype机器人-Gtalk机器人|邮件提醒

网站推荐:

哪吒的来历

1、哪吒于2006年10月,在杭州创建。
2、哪吒是创新的信息投递服务,为用户提供基于MSN、QQ、Skype、Gtalk、邮箱、手机等的即时信息
投递服务。
3、哪吒是微软全球、MSN中国、Skype中国、新浪UC的官方合作伙伴。

iNeZha.com is simple but profound service to enable personalized micropipeline to deliver right information to Instant Messengers just in time.

User can simply input any RSS/Atom feed url to your iNezha bot on Skype, Gtalk,MSN etc. to subscribe, then to be notified in the future. All the feeds and delivery options can be also easily managed on "iNezha" web service.

iNeZha.com is a new Internet startup based on the vision of "Right Information to right people at right time". It's running to serve people globally and cooperating with many Internet services to enable every one of us to become more effective in information explosion age. 


哪吒网-哪吒投递 精彩必达|哪吒机器人提醒-MSN机器人-Skype机器人-Gtalk机器人|邮件提醒

使用Zend Framework中的 Zend_Pdf来创建pdf文档 - 春哥也编程 - 博客园


Haru 和 PDFlib 这二个php扩展提供了完整的api来操作pdf文档
另外还有很多开源代码,可以操作pdf。
这篇文章主要讲解Zend Framework 中的 Zend_Pdf组件。
Zend_Pdf 是纯PHP实现的一套程序,不依赖于其它的任何外部库文件
所以在虚拟主机上用起来是蛮合适的。
Zend_Pdf 可以对PDF进行绝大部分的操作,比如添加/删除页面,插入文件和图片,
绘图,更改PDF文档的元信息(update document meta-data)等等。
下面就以一个简单的例子开始吧:
setFont($font, 24)
->drawText('That which we call a rose,', 72, 720)
->drawText('By any other name would smell as sweet.', 72, 620);

// add page to document
$pdf->pages[] = $page;

// save as file
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}

程序一开始就引入了Zend auto-loader,它会自动include所需的类文件。
程序其它部分的流程就不解释了,直接看注释就可以明白了。
drawText函数的后两个参数是初始写入位置的X轴坐标和Y轴坐标。
注意:Zend_Pdf系统使用 Postscript geometry。也就是说,字体的单位是pt。1pt=1/72 inch;(0,0)原点位于页面的左下脚。

1.jpg

值得提一下的是, 通过Zend_Pdf_Font既可以使用内置的14种字体,比如Zend_Pdf_Font::FONT_HELVETICA,也可以使用外部的字体文件。
看代码:
setFont($font, 24)
->drawText('That which we call a rose,', 72, 720)
->drawText('By any other name would smell as sweet.', 72, 620);

// add page to document
$pdf->pages[] = $page;

// save as file
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}

这个程序与前面的基本相同,只是通过Zend_Pdf_Font::fontWithPath来引入外部字体。
再多说二句,drawText的第四个参数,可以指定文字的字符集,Zend_Pdf会自动帮你转化成所需的字符集。省得自己用iconv了。
外部字体文件会被自动压缩,然后嵌入到pdf文件里面,所以生成出来的pdf文件会占用更多的磁盘空间。

2.jpg

如果想插入一张图片到pdf文件里面,只需要调用drawImage(),并提供以下参数即可:
一个Zend_Pdf_Image资源
图像左下角横坐标
图像左下角纵坐标
图像右上角横坐标
图像右上角纵坐标
暂时只支持JPEG,PNG,TIFF格式的图片。
另外:使用JPEG图片的话需要GD库。使用PNG图片的话,需要ZLIB库。
看代码吧:
drawImage($image, 50, 50, 400, 400);

// add page to document
$pdf->pages[] = $page;

// save as file
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}

3.jpg

上面讲的drawText有一个很大的缺点:文字太长的话,不会自动换行!
关于这一点,想必用过GD库的imagestring和imagettftext的都深有体会吧。
幸运的是,Nico Edtinger为Zend_Pdf添加了一个新的功能解决这个问题。
http://framework.zend.com/wiki/display/ZFPROP/Zend_Pdf+text+drawing+improvements+-+Nico+Edtinger
很长的字符串会自动换行,也不会拆开某个单词,而且还可以设置左对齐或者右对齐,实在是很强大的。
看代码:
setFont($font, 14);

// wrap lines of text
// start at (10,600) and use a block of dimensions 500x500
$page->drawTextBlock($str, 10, 600, 500, 500, Zend_Pdf_Page::ALIGN_LEFT);

// wrap lines of text
// start at (10,500) and use a block of dimensions 200x300
$page->setFont($font, 20);
$page->drawTextBlock($str, 10, 500, 200, 300, Zend_Pdf_Page::ALIGN_RIGHT);

// add page to document
$pdf->pages[] = $page;

// save as file
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}
drawTextBlock参数的说明:
$page->drawTextBlock($str, 10, 600, 500, 500, Zend_Pdf_Page::ALIGN_LEFT);
字符串$str,
起点横坐标10,
起点纵坐标600,
文本框的宽度500,
文本框的高度500,
选项 Zend_Pdf_Page::ALIGN_LEFT 左对齐。

4.jpg

此外,Zend_Pdf提供了一整套的函数来画线,画圆,以及其它图形。
来看一下画线的例子:
setFont($font, 10);

// draw a line at the top of the page
$page->setLineColor(new Zend_Pdf_Color_Rgb(0,0,0));
$page->drawLine(10, 790, ($page->getWidth()-10), 790);

// draw another line near the bottom of the page
$page->drawLine(10, 25, ($page->getWidth()-10), 25);

// define image resource
$image = Zend_Pdf_Image::imageWithPath('logo.jpg');

// write image to page
$page->drawImage($image, 25, 800, ($image->getPixelWidth()+25), (800+$image->getPixelHeight()));

// add footer text
$page->drawText('Copyright My Company 2010. All rights reserved.', ($page->getWidth()/3), 10);

// add page to document
$pdf->pages[] = $page;

// save as file
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}
使用drawLine(),提供一下起点和终点的坐标即可画出一条线。
线条颜色可以使用Zend_Pdf_Page->setLineColor()来控制,它接受一个Zend_Pdf_Color 类型的对象做为参数。可以使用RGB,CMYK,16进制或者HTML颜色来定义Zend_Pdf_Color

5.jpg

再来画几个矩形框吧
setLineColor(new Zend_Pdf_Color_Rgb(0,0,0));

// draw a face
$page->drawRectangle(100, 300, 500, 700, Zend_Pdf_Page::SHAPE_DRAW_STROKE);

// draw the left eye
$page->setFillColor(new Zend_Pdf_Color_Rgb(255,0,0));
$page->drawRectangle(150, 600, 200, 650);

// draw the right eye
$page->setFillColor(new Zend_Pdf_Color_Rgb(255,0,0));
$page->drawRectangle(400, 600, 450, 650);

// draw the nose
$page->setFillColor(new Zend_Pdf_Color_Rgb(0,255,0));
$page->drawRectangle(260, 450, 340, 550);

// draw the mouth
$page->setFillColor(new Zend_Pdf_Color_Rgb(0,0,255));
$page->drawRectangle(200, 350, 400, 400);

// add page to document
$pdf->pages[] = $page;

// save as file
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}

drawRectangle()函数根据提供的左下角坐标和右上角坐标,可以画一个矩形出来。
最后一个参数描述了这个矩形的样式:outline(stroked),filled or both.
thesetLineColor()可以定义矩形边框的颜色。setFillColor()可以定义矩形的填充颜色。

6.jpg

再来看如何画其它的形状(椭圆,多边形):
setLineColor(new Zend_Pdf_Color_Rgb(0,0,0));

// draw a face
$page->drawRectangle(100, 300, 500, 700, Zend_Pdf_Page::SHAPE_DRAW_STROKE);

// draw the left eye
$page->setFillColor(new Zend_Pdf_Color_Rgb(255,0,0));
$page->drawRectangle(150, 600, 200, 650);

// draw the right eye
$page->setFillColor(new Zend_Pdf_Color_Rgb(255,0,0));
$page->drawRectangle(400, 600, 450, 650);

// draw the nose
$page->setFillColor(new Zend_Pdf_Color_Rgb(0,255,0));
$page->drawCircle(300, 500, 50);

// draw the mouth
$page->setFillColor(new Zend_Pdf_Color_Rgb(0,0,255));
$page->drawEllipse(200, 350, 400, 400);

// draw a hat
$page->setFillColor(new Zend_Pdf_Color_Rgb(250,250,0));
$page->drawPolygon(array(125,300,475), array(700,800,700));

// add page to document
$pdf->pages[] = $page;

// save as file
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}

drawCircle()是用来画圆的,参数是圆心的坐标和半径。
drawEllipse()是用来画椭圆的,参数是此椭圆的外接(还是外切?)矩形的左下和右上角坐标。(an ellipse within a rectangular box)
drawPolygon()是用来画多边形的(n>=3)。第一个参数是所有顶点的X坐标组成的数组。第二个参数是所有顶点的Y坐标组成的数组。

7.jpg

再来看另外一个例子,画饼图的:
$degrees[$y] = ($slices[$y] / $sum) * 360;
}

try {
// create PDF
$pdf = new Zend_Pdf();

// create A4 page
$page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);

// set font
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page->setFont($font, 14);

$lastAngle = 90;
for ($z=0; $z {
///////////////////////////////////////////////////////////////////////////
///注:原文中的下面这一段代码不全,我自己补上的。
///////////////////////////////////////////////////////////////////////////
$dx = $dy = 0;
if (0 <= $lastAngle && $lastAngle< style="word-wrap: break-word; line-height: normal;"> {
$dy = $radius * sin(deg2rad($lastAngle));
$dx = $radius * cos(deg2rad($lastAngle));

}
elseif (90 <= $lastAngle && $lastAngle< style="word-wrap: break-word; line-height: normal;"> {
$dy = $radius * sin(deg2rad(180-$lastAngle));
$dx = -1 * $radius * cos(deg2rad(180-$lastAngle));
}
elseif (180 <= $lastAngle && $lastAngle < style="word-wrap: break-word; line-height: normal;"> {
$dy = -1 * $radius * sin(deg2rad($lastAngle-180));
$dx = -1 * $radius * cos(deg2rad($lastAngle-180));
}
else
{
$dy = -1 * $radius * sin(deg2rad(360-$lastAngle));
$dx = $radius * cos(deg2rad(360-$lastAngle));
}
$endX = 250+$dx;
$endY = 250+$dy;
/////////////////////////////////////////////////////////////
/////////补充完毕。
/////////////////////////////////////////////////////////////
$page->drawLine(250, 250, $endX, $endY);

// reset the last angle value
$lastAngle = $lastAngle + $degrees[$z];
}

// draw the circle outline
$page->drawCircle(250, 250, 100, Zend_Pdf_Page::SHAPE_DRAW_STROKE);

// add page to document
$pdf->pages[] = $page;

// save document
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}

艾,这个饼图,不知道中间那段计算直角边长的方法有没有办法简化一些。

8.jpg

继续吧。
Zend_Pdf还引入了样式(Style)的概念。
所谓的样式就是预先定义好的线条颜色,填充颜色,字体之类的集合。
这个东西最大的好处就是,
当你在多种不同样式之间切换,一个函数setStyle()就搞定了,
不用每次都去重新设定线条颜色,填充颜色之类的。
下面的例子定义了二个样式:cerulean和crimson。然后进行了样式切换。
setFillColor(new Zend_Pdf_Color_Rgb(0, 161, 224));
$cerulean->setLineColor(new Zend_Pdf_Color_Rgb(0, 161, 224));
$cerulean->setLineWidth(5);
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$cerulean->setFont($font, 32);

// define another style
$crimson = new Zend_Pdf_Style();
$crimson->setFillColor(new Zend_Pdf_Color_Rgb(194, 0, 0));
$crimson->setLineColor(new Zend_Pdf_Color_Rgb(194, 0, 0));
$crimson->setLineWidth(2);
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_TIMES_ROMAN);
$crimson->setFont($font, 20);

// write text to page
// using different styles
$page->setStyle($cerulean)
->drawText('That which we call a rose,', 72, 720);

$page->setStyle($crimson)
->drawText('By any other name would smell as sweet.', 72, 620);

// add page to document
$pdf->pages[] = $page;

// send to browser as download
header("Content-Disposition: attachment; filename=example.pdf");
header('Content-Type: application/pdf');
echo $pdf->render();
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}

9.jpg

很多时候,我们需要用table表格来表现一些数据
But em,
Zend_Pdf 不支持直接画table。
如果我们手绘表格的话,计算量未免太大,一旦要做改动的话,也很难处理。
幸好,ursh开发了一个非官方的table组件;
http://sourceforge.net/projects/zendpdftable/
虽然是beta版的。
下载之后,扔到Zend Framework的library目录里面。
看以下的代码:
'127.0.0.1',
'username' => 'user',
'password' => 'pass',
'dbname' => 'world');

// configure adapter and query database
$db = Zend_Db::factory('PDO_MYSQL', $params);
$stmt = $db->query('SELECT Name, Code, Region FROM country LIMIT 0, 150');

// create PDF
$pdf = new My_Pdf_Document('example.pdf', '.');

// create page
$page = $pdf->createPage();

// define font resource
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);

// set font
$page->setFont($font, 24);

// create table
$table = new My_Pdf_Table(3);

// iterate over record set
// set up table content
while ($record = $stmt->fetch()) {
$row = new My_Pdf_Table_Row();
$cols = array();
foreach ($record as $k => $v) {
$col = new My_Pdf_Table_Column();
$col->setText($v);
$cols[] = $col;
}
$row->setColumns($cols);
$row->setFont($font, 14);
$row->setBorder(My_Pdf::TOP, new Zend_Pdf_Style());
$row->setBorder(My_Pdf::BOTTOM, new Zend_Pdf_Style());
$row->setBorder(My_Pdf:EFT, new Zend_Pdf_Style());
$row->setCellPaddings(array(10,10,10,10));
$table->addRow($row);
}

// add table to page
$page->addTable($table, 0, 0);

// add page to document
$pdf->addPage($page);

// save as file
$pdf->save();
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}

10.jpg

也没什么好解释的。

为多页面的pdf文件创建书签(bookmark,目录)
就是下面的效果:
11.jpg

代码:
outlines[0] = Zend_Pdf_Outline::create('Table of Contents', null);

// add pages to document
// and page links to outline
for ($x=1; $x<=10; $x++) { $page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4); $pdf->pages[] = $page;
$destination{$x} = Zend_Pdf_Destination_Fit::create($page);
$pdf->setNamedDestination('page_'.$x, $destination{$x});
$pdf->outlines[0]->childOutlines[] = Zend_Pdf_Outline::create('Page '.$x, $pdf->getNamedDestination('page_'.$x));
}

// save documents
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}
这个也不讲了,看看代码吧。
$destination{$x} = Zend_Pdf_Destination_Fit::create($page);
$pdf->setNamedDestination('page_'.$x, $destination{$x});
$pdf->outlines[0]->childOutlines[] = Zend_Pdf_Outline::create('Page '.$x, $pdf->getNamedDestination('page_'.$x));

这里可以简化成:
$pdf->outlines[0]->childOutlines[] = Zend_Pdf_Outline::create('Page '.$x, Zend_Pdf_Destination_Fit::create($page));

最后讲一下如何设置pdf文件的元信息(meta-data),就是下面的东西:
12.jpg

setFont($font, 14);

// write text to page
$page->drawText('That which we call a rose,', 72, 720)
->drawText('By any other name would smell as sweet.', 72, 620);

// add page to document
$pdf->pages[] = $page;

// set document properties
$pdf->properties['Author'] = 'William Shakespeare';
$pdf->properties['Title'] = 'Romeo and Juliet';
$pdf->properties['Subject'] = 'Act II, Scene II';
$pdf->properties['Keywords'] = 'shakespeare, romeo, juliet, capulet, montague';
$pdf->properties['CreationDate'] = "D:201007210634Z00'00'";
$pdf->properties['ModDate'] = "D:201008150634Z00'00'";

// save as file
$pdf->save('example.pdf');
echo 'SUCCESS: Document saved!';
} catch (Zend_Pdf_Exception $e) {
die ('PDF error: ' . $e->getMessage());
} catch (Exception $e) {
die ('Application error: ' . $e->getMessage());
}
只要设置Zend_Pdf的properties数组里的相关属性即可。

文章就到这里了。
其它更多的功能,比如pdf文件与用户交互啦,就靠您自己去测试了。

Zend_Pdf官方文档:
http://framework.zend.com/manual/zh/zend.pdf.html