2009年12月31日

电影永不言败中的一首诗

Invictus
by William Ernest Henley (1849 – 1903)


Out of the night that covers me,
Black as the Pit from pole to pole,
I thank whatever gods may be
For my unconquerable soul.
In the fell clutch of circumstance
I have not winced nor cried aloud.
Under the bludgeonings of chance
My head is bloody, but unbowed.
Beyond this place of wrath and tears
Looms but the Horror of the shade,
And yet the menace of the years
Finds, and shall find, me unafraid.
It matters not how strait the gate,
How charged with punishments the scroll,
I am the master of my fate:
I am the captain of my soul.

透过覆盖我的深夜,我看见层层无底的黑暗。
感谢上帝赐我,不可征服的灵魂。
就算被地狱紧紧攫住,我不会畏缩,也不惊叫。
经过一浪又一浪的打击,我满头鲜血不低头。
在这满是愤怒和眼泪的世界之外,恐怖阴影在游荡。
还有,未来的威胁,可是我毫不畏惧。
无论我将穿过的那扇门有多窄,
无论我将肩承怎样的责罚。
我是命运的主宰,
我是灵魂的统帅。

2009年12月29日

[纯技术贴] 在国内围观伊朗事件的几种方法



目前伊朗事件无疑是非常受关注的,但是国内媒体的报道感觉不够及时全面,下面介绍几种在国内关注twitter上此事件发展的方法。

一、用google订阅关键字iranelection
由于大量用户用此标签在twitter上发布信息,因此用此标签搜索的结果非常之多,而且几乎每隔数秒就有新推。
google英文版已经支持twitter的及时搜索和自动刷新,在IE地址栏输入此地址即可:
注意消息会自动刷新。
由于此搜索结果绝大多数为英语信息,也可用google的翻译工具进行在线翻译,基本上能够看明白:

二、用google订阅关键字cn4iran
twitter上的中文用户基本上用此标签发布消息,因此搜索此标签可以看到国内网民对此事件的一些态度,地址:
由于大量国外用户也用此标签发布消息,因此搜索结果中有大量非中文内容,也可以尝试google翻译工具:

此网站汇集了用cn4iran作为标签的中文推,界面全中文,建议围观。

四、注册twitter
由于twitter的注册接口也已经开放,因此可以在许多网站上注册,如:http://www.cn4iran.org/dabr/

五、在twitter上发言
有了twitter帐号后,就可以在任何一个第三方网站上发言了,如:

2009年11月11日

2009年10月28日

人少低调

[人少低调]利用开源推特中文圈架在国外主机上的twitter网页客户端:http://zzhou.net/tallrain/twit2
[人少低调]利用开源推土鳖架在gae上的twitter手机客户端:http://zzhou.net/tallrain/twit
[人少低调]利用开源birdnest架在gae上的twitter api:http://birdnest.zzhou.net/api/
[人少低调]利用开源mirror架在gae上的http在线代理:http://proxy.zzhou.net/
[人少低调]利用开源gappproxy架在gae上的http本地代理:下载gappproxy客户端,设置FerchServer=http://daili.zzhou.net/fetch.py

2009年10月25日

【翻译】没有在你的婴儿床上发现爱因斯坦?去拿退款吧

No Einstein in Your Crib? Get a Refund
By TAMAR LEWIN
Published: October 23, 2009

父母们注意了:华尔特迪斯尼公司现在正为那些没有将孩子们变成天才的音像制品提供退款。

或许它们是很好的电子玩伴,但这不寻常的退款好像默认了它们没有为婴儿提升智力。

"我们将它看成此领先婴儿视频公司承认这些音像制品并没有教育性,并且我们希望其它的婴儿媒体公司也应诉退款,"Susan Linn说,她是一家非商业婴儿机构的理事,推动此事已有数年。

小小爱因斯坦,成立于1997年,是这个巨大婴儿电子媒体市场最早的玩家之一。2001年被迪斯尼收购后,此公司扩展产品线,推出了书籍、玩具、认知卡、服装,以及包括"小小莫扎特"、"小小莎士比亚"、"小小加利略"在内的DVD制品。

这些音像制品——仅仅由音乐、木偶、明亮的颜色、少数几个单词组成——成为婴儿生活的重要部分:根据一个2003年的调查,全美1/3的6个月到2岁的婴儿至少有一部"小小爱因斯坦"音像制品。

尽管它们如此普遍,事实上很多婴儿的眼睛被它们盯住了,然而美国幼儿学会建议2岁以下的婴儿不要看任何电视节目。

2006年,Linn的小组来到联邦贸易委员会,投诉迪斯尼和其它公司宣称的教育性。结果是,这些公司从市场宣传上取消了"教育性"这个词。但是小组认为这还不够。

"迪斯尼从来不勇于承担责任,父母们也从来没有得到过补偿。于是我们和一个公众健康律师小组分享信息和调查",Linn小姐说。

上一年,律师们威胁发起"不公平"和"欺诈"的集团诉讼,除非迪斯尼同意针对自2004年以后购买的音像制品全额退款。"华尔特迪斯尼公司的整个小小爱因斯坦的市场状况是基于或明或暗的宣传,认为他们的音像制品对早期婴儿的发展是有教育性的,是有益的,"律师们的一封信写道,并称这些宣传是"错误的,因为研究表明看电视对婴儿有潜在伤害。"

信件引述了华盛顿邮报和商业周刊的估计,认为小小爱因斯坦控制了90%的婴儿媒体市场,每年销售2亿美元的产品。

信件同样描述了,研究表明在1-3岁之间看电视,与7岁时的注意力问题存在关联。

作为回应,小小爱因斯坦公司将为每户提供4张DVD对应的价值15.99美元的退款,如果这些DVD购买于2004年6月5日至2009年9月5日之间,然后将之回收至公司。

律师们对此处置拒绝评论。

上个月,小小爱因斯坦公司宣布新的退款——或"提升用户满意度保证"——但是没有提及律师们的要求。

"对于小小爱因斯坦,培养父母与孩子之间的互动从来是将来也一直是放在第一位的,我们知道已有讨论怎样最大地提升这种互动,"副总裁和总经理Susan McLain, 在声明中说道。"我们依然决心提供广泛的选择,帮助父母们为自己和孩子创造最动人最丰富的体验。"

聪明宝宝(Brainy Baby)的创始人和总裁Dennis Fedoruk,在一封电子邮件里说他不清楚小小爱因斯坦的退款声明,不能够提供更多的评论。

一家小小爱因斯坦的外部公关代表说退款议价没有变动。

"我们提供客户满意度保证已有很长时间",她在向一位记者展示公司网站时说。然而,小小爱因斯坦通常的"退款"保证仅仅在购买6个月之内有效,并要求提供收据。

相比之下,现在的退款议价允许父母们交换成其它的音像节目,或者换成打折卡,或者对应最多回收4张DVD的15.99美元的退款,不要求收据,截止日期为明年的3月10日。

"几年以前当公众开始关注此议题时,许多公司对于它们的宣传变得格外小心,"凯撒家庭基金针副总裁Vicky Rideout说。"但是尽管没有印着'教育'二字,在许多市场上都清楚地暗示了产品有助于教育。"

比如说小小爱因斯坦的网站上,仍然用这样的词汇描述它的音像制品,如:"用简单的模型增强数字认知",或"介绍了圆、椭圆、三角形、正方形和长方形"。

"我的印象是父母们真地相信这些音像制品对他们的孩子有益,或者多少有点帮助,而不是有害于孩子",Rideout小姐说。"对于我来说,最重要的是提醒父母们,下楼和孩子们一起玩是他们所能做的最有教育性的事情。"

2009年10月22日

google voice开通的关键步骤和使用方法推荐

一、开通
在接到邀请码后,一定要用美国的vpn注册。
由于google voice一定要用美国的号码激活,因此一定要设法搞到一个美国虚拟号码,方法有:virtualphoneline,或gizmo5+ipkall,或28tel。
其中virtualphoneline可一步得到虚拟号码,但一个月后过期。
gizmo5+ipkall也要用vpn注册,ipkall通常要一天以后才会开通。
28tel是收费的。

得到虚拟号后,就可以激活了,也就是将你的google voice打到此号码上,并输入验证码。
virtualphoneline和gizmo5都可以将电话转移到gtalk或skype上,但是gtalk没有拨号盘,所以在激活的时候,一定要先转移到skype上,接通电话后打开拨号盘输入验证码。
28tel是将美国的电话转接到国内电话,激活应该更没有问题。

二、用法
由于google voice支持免费拨打接听美加的电话,因此可以通过google voice实现和美国pc-phone免费通话。
原理是,google voice先拨打你的美国虚拟号码,此号码转接到你的gtalk/skype上(通过gtalk2voip或opensky),就好象别人向你发起语音聊天,接受后就建立了google voice和你的聊天软件的连接。然后google voice开始拨打你希望拨出的号码,连接建立后将通话切换到你的客户端上。有点象是三方通话。
作为测试方法,你可以申请2个虚拟号码,都绑定到你的google voice上,激活后一个转移到skype,另一个转移到gtalk,然后让google voice呼叫其中一个号码,将另一个作为你的phone to ring就是google voice转接给你的主叫号码。要注意的是,用此方法测试,一定要将google voice仅仅forward to主叫号码。点connect后,google voice先后接通主叫号码和呼出号码,就可以在gtalk和skype之间建立语音通话。
因此用此方法,事实上可以实现不同IM之间的语音通话,但是skype的voip免费转接只有3分钟,而gtalk是不限时长的。
我的建议是,用google voice+gtalk和美国朋友/同事间进行免费通话。

但是,但是,如果要开电话会议,gtalk就不够了,因为会议系统往往需要密码验证,而gtalk是没有拨号盘的。
我的建议是让已加入会议的某位美国朋友/同事通过你的google voice和你建立三方通话,这样就无需验证了。
当然,如果会议特别短的话,比如3分钟,那么skype足够了。

google voice的另一特色功能是支持发免费短信,比如可以直接发免费短信给国内的手机用户,但是但是,只支持英文,(唐人街的兄弟们内牛满面了)
我一般不建议这类用法:比如给美国朋友发短信说,孩子我已经打掉了。。。

2009年10月20日

用gae+推土鳖架设私家twit服务器

原理:
1、用开源twitter客户端程序推土鳖通过google app engine创建twitter服务。
2、通过google apps将此代理指向私家域名。


准备工作:
1、申请gmail帐号,免费。
2、购买.net或.com帐号,以便申请google apps,费用50-100元。
3、从 http://dl.getdropbox.com/u/152173/tuitubie_v1.zip 下载推土鳖源码包。
5、下载并安装google app engine for java: http://code.google.com/appengine/downloads.html

详细过程:
1、申请并开通google app engine。
2、创建自己的application。
3、将推土鳖源码复制到google app engine sdk安装目录下,修改war\WEB-INF目录下的appengine-web.xml和web.xml:
appengine-web.xm中,<application>你自己的程序名</application>。
web.xml中,<param-name>encrypt_key</param-name><param-value>7dri783e</param-value>,param-value为8位数字加字母组合。
2个文件都应以UTF8格式保存。
打开dos窗口,进入gae的bin目录,运行命令appcfg.cmd update [推土鳖war包的目录]。
如果这一步失败,如提示javac没有找到,则按如下提示操作:
1)设置系统变量,CLASSPATH指向java sdk的lib目录,PATH增加java sdk的bin目录。
2)如果安装了java jre,则将javac.exe从jdk\bin复制到jre6\bin, 将tools.jar从jdk\lib复制到jre6\lib。

4、申请开通google apps,一般.net/.com域名都能申请成功。
5、将此代理指向自己的私家域名,这一步非常关键,因为存放google app engine程序的appspot.com随时可能被封。
1)首先添加域名解析,添加一个cname转向域名,注意:不要按照google apps的说明指向ghs.google.com,因为已经被封了。
由于ghs也是给域名转向用的,你完全可以用别的转向域名定位google app engine的服务器。可google ghs.google.com得到可用的替代转向域名。
2)在appengine的管理页面上,选择左边的菜单"Administation">"Application Settings",点击右边的"Add Domain"按钮,输入apps的域名,提交。激活服务。添加新网址。这样就将gappproxy指向你的私家域名了。
可以http://你的域名/ 进行测试。


放心地推吧!
也可以小范围传播你的twitter服务器,你的好友可以在你的帮助下突破网络封锁了。

域名是封不完的,twitter不死!

2009年10月14日

轻松创建私家twit api

原理:
1、用birdnest通过google app engine创建twitterapi。
2、通过google apps将此代理指向私家域名。
3、使用twitterfox支持twitterapi的修改版,或其它支持twitterapi的客户端登录twitter。

准备工作:
1、申请gmail帐号,免费。
2、购买.net或.com帐号,以便申请google apps,费用50-100元。
5、下载并安装python。
6、下载并安装google app engine for pythod。

详细过程:
1、申请并开通google app engine。
2、创建自己的application。
3、将birdnest源码复制到google app engine sdk安装目录下,修改app.yaml文件,通过appcfg.py update 上传。
或google birdnest twitter。
4、申请开通google apps,一般.net/.com域名都能申请成功。
5、将此代理指向自己的私家域名,这一步非常关键,因为存放google app engine程序的appspot.com随时可能被封。
1)首先添加域名解析,添加一个cname转向域名,注意:不要按照google apps的说明指向ghs.google.com,因为已经被封了。
由于ghs也是给域名转向用的,你完全可以用别的转向域名定位google app engine的服务器。可google ghs.google.com得到可用的替代转向域名。
2)在appengine的管理页面上,选择左边的菜单"Administation">"Application Settings",点击右边的"Add Domain"按钮,输入apps的域名,提交。激活服务。添加新网址。这样就将gappproxy指向你的私家域名了。
可以http://你的域名/ 进行测试。
另外象twibble等客户端也支持自定义twitterapi.

放心地推吧!
也可以小范围传播你的twitterapi,你的好友可以在你的帮助下突破网络封锁了。

域名是封不完的,twitter不死!

轻松创建私家http代理服务器

原理:
1、用gappproxy通过google app engine创建代理服务器。
2、通过google apps将此代理指向私家域名。
3、使用gapproxy客户端在本机创建代理。

准备工作:
1、申请gmail帐号,免费。
2、购买.net或.com帐号,以便申请google apps,费用50-100元。
3、从https://code.google.com/p/gappproxy/downloads/list下载服务器端源码包。
4、以同一地址下载windows客户端程序。
5、下载并安装python。
6、下载并安装google app engine for pythod。

详细过程:
1、申请并开通google app engine。
2、创建自己的application。
3、将gappproxy源码复制到google app engine sdk安装目录下,修改app.yaml文件,通过appcfg.py update 上传。
或google gappproxy。
4、申请开通google apps,一般.net/.com域名都能申请成功。
5、将此代理指向自己的私家域名,这一步非常关键,因为存放google app engine程序的appspot.com随时可能被封。
1)首先添加域名解析,添加一个cname转向域名,注意:不要按照google apps的说明指向ghs.google.com,因为已经被封了。
由于ghs也是给域名转向用的,你完全可以用别的转向域名定位google app engine的服务器。可google ghs.google.com得到可用的替代转向域名。
2)在appengine的管理页面上,选择左边的菜单"Administation">"Application Settings",点击右边的"Add Domain"按钮,输入apps的域名,提交。激活服务。添加新网址。这样就将gappproxy指向你的私家域名了。
可以http://你的域名/fetch.py 进行测试。
6、安装设置gappproxy客户端,选中Use FetchServer,地址为http://你的域名/fetch.py
7、将浏览器的http代理设置为127.0.0.1:8000。注意如果你是拨号用户,IE的设置在连接页中,不要选"局域网设置",而是设置拨号网络的连接。

放心地爽吧!
也可以小范围传播你的代理服务器,你的好友只要安装gappproxy客户端,就可以在你的帮助下突破网络封锁了。



2009年9月28日

tor

http://docs.google.com/View?id=dfc32596_290ffjb68dt

翻墙还需搭桥——Portable Tor设置特别说明

Portable Tor的下载地址:http://bit.ly/USOkd

下载之后双击执行,会要求你指定一个目录,将其压缩包内的文件释放到指定目录中。

解压缩完毕之后双击执行PortableTor.exe,则可看到以下程序窗口:

(或下载Vidalia Bundle安装版:http://ifile.it/xvcf3zj)




去掉"启动时显示此窗口"之前的对号,省得以后开机自动运行该程序的时候总是显示这个窗口……

按"设定"按钮,就可以看到以下对话框:



在"常规"标签中,可以去掉"Start a proxy application when Vidalia starts"之前的对号(当然有人不在意这个)……



对于国内用户这一步最重要

"网络"标签中这一页对话框中,在"我的ISP阻挡了对Tor网络的连接"之前打勾,然后就可以看到"Bridge Settings",可以为Tor添加Bridge。

bridges@torproject.org发一封邮件(最好使用gmail邮箱,没有的话就最好注册一个),内容为:"get bridges"(邮件写不写标题都可以),几秒钟之内,你就会收到一封含有bridge list(一般是三个)的邮件,比如,其中有这样的内容:


[This is an automated message; please do not reply.]

Here are your bridge relays:

bridge 92.41.50.141:443
bridge 83.226.198.100:9443
bridge 69.60.117.34:9001


把这三行分别拷贝粘贴到文字输入框中,然后点击右边标有绿色加号的按钮即可。



由于必须有bridge才可以正常使用tor,所以,这一项中,现在还只能选择"Run as a client only"……

至此,设定完毕,关闭此对话框,在主窗口中启动tor,一会儿就连接上了。而后,还可以查看Tor网络地图,看看你现在连上的tor中转站都在地球上的什么位置……



如果你恰好喜欢使用Firefox,那么请下载这个定制版:http://ifile.it/ay1zgp3

解压缩之后,Mozilla Firefox 3的目录下有一个tor目录,里面的执行文件就是Tor Portable,按照以上方式设置即可。该定制版的Firefox已经安装了FoxyProxy插件,默认已经为Youtube、Facebook、Twitter设定了"自动通过Tor访问"……

Firefox究竟好在哪里,请查阅这个链接的内容:http://bit.ly/4G4GAn

分享自由

当成功连接Tor(表现为主界面中的洋葱头变绿了)之后,就可以将自己的机器也变成bridge。

  1. 停止Tor服务(在主界面中按"Stop Tor"按钮);
  2. 点击"设置中继服务器"按钮;
  3. 在"Sharing"标签页中选择第三项"帮助用户访问Tor网络……";
  4. 在"网络"标签中,把"我的ISP阻挡了对Tor网络的连接"之前的对号去掉;
  5. 点击"确定"按钮关闭对话框;
  6. 退出Vidalia控制面板(记得也要在任务托盘中退出"Privoxy"程序),而后重新启动Vidalia(就是重新运行PortableTor.exe)——这时Windows可能会跳出一个对话框要求你为Tor程序解除防火墙禁止规则,确认即可。
  7. 成功连接Tor之后,点击"设置中继服务器"按钮,就可以看到对话框最低端"Let others access your bridge by giving them this line:"之下多了一行代码
    (例如:***.***.***.***:9001 0B8C4718CA87DA97C0673D3F73AAAD6FD80C953A)如下图所示:


这时,你的计算机也成了Tor网络中的一个bridge。你可以把"bridge ***.***.***.***:9001"这行代码(无需后面那一长串数字字母构成的字符串)拷贝粘贴给你的那些无法正常访问Tor的朋友,让他按照之前介绍的方法添加到他的网桥列表中,他就可以正常访问Tor了——因为他也有bridge了,而后他也可以将自己的机器变成bridge……如此生生不息。




2009年9月16日

被雷得外焦内嫩 - 我爱我的祖国各地群众自发朗诵



新白娘子传奇之洞房花烛版:

山东快书版:

伦敦音版:

绵羊音:

京剧版:

变形金刚版:

大师兄版:

杭州话版:

外星人版:

生产队版:  

山东版:

混搭版:

电视购物咆哮版:

小沈阳、葛优、易中天以及唐僧御弟:

吟诗事件记录曲:

超级玛丽版:

猥琐欠抽版:

18X:

2009年9月6日

醉舟网开发笔记

一、网址跳转
以下是.htaccess全文:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.zzhou\.net$ [NC]
RewriteRule ^(.*)$ http://zzhou.net/$1 [R=301,L]
RewriteRule ^(\w+)/(\w+)$ view.php?user=$1&sub=$2
RewriteRule ^(\w+)$ view.php?user=$1&sub=home
RewriteRule ^(\w+)/$ view.php?user=$1&sub=home

实现以下功能:
1、将www.zzhou.net自动跳转到zzhou.net


二、mysql字符集问题及其它
1、MySQL 字符集: UTF-8 Unicode (utf8)
2、建表是设定字符集utf8_unicode_ci,字段字符集为utf8_general_ci
3、要读写相关UTF8字段时:
    mysql_query("set names 'utf8' ");  
    mysql_query("set character_set_client=utf8");  
    mysql_query("set character_set_results=utf8");
    mysql_query("set character_set_connection=utf8");
4、设置自增变量
  先建表,然后修改结构,在AUTO_INCREMENT一项打勾。


三、表单检查
  <FORM ID='fm1' ACTION='adduser2.php' METHOD='post'> //将表单提交给adduser2.php
    用户名(英文与数字组合): <INPUT TYPE='TEXT' ID='uname' NAME='username' SIZE='20'>
<BR /><BR />
密码:       <INPUT TYPE='PASSWORD' ID='p1' NAME='pwd' SIZE='20'><BR /><BR />
重输入密码: <INPUT TYPE='PASSWORD' ID='p2' NAME='pwd2' SIZE='20'><BR /><BR />
昵称(可中文): <INPUT TYPE='TEXT' NAME='nick' SIZE='20'><BR /><BR />
图片地址: <INPUT TYPE='TEXT' NAME='pp' SIZE='80'><BR /><BR />
描述一下自己: <BR /><BR />
<TEXTAREA NAME="desc" COLS="80" ROWS="10"></TEXTAREA><BR /><BR />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<INPUT TYPE='BUTTON' NAME='sub' SIZE='30' VALUE='提  交' onClick='checkinput()'><BR /><BR /> //提交前先执行checkinput()
  </FORM>

  <script language="javascript">
    function checkinput()
{
 var flag1=/^[a-zA-Z0-9]{1,20}$/;  
 var tmp='';
 var ff=true;
      if (!flag1.exec(document.getElementById('uname').value)) //检查用户名输入有效性
 {
tmp='用户名只能是英语或数字, 长度1-20位!\n';
ff=false;
 }
 else
 {
ff=true;
 }
      var pwd=document.getElementById('p1').value;
 var pwd2=document.getElementById('p2').value;
 if (pwd !== pwd2)
 {
tmp=tmp+'两次输入的密码不一致!';
ff=false;
 }
 else
 {
 }  
 if (ff==true)
 {
   document.getElementById('fm1').submit(); //全部检查完结,则提交表单
 }
 else
 {
   alert (tmp);
 }
}

  </script>

从表单得到数据:
$user = $_POST['username']; 

在adduser2.php进一步检查用户名是否重复,如重复则提示信息将返回表单页面:
$tmp = "用户".$user2."已存在!";
$tmp = "<script language=javascript>alert ('" . $tmp . "')</script>";
echo $tmp;
echo ("<script language=javascript>window.history.go(-1);</script>"); 


五、建立SQL连接
  $link=mysql_connect("ip address","username","password"); //connect to mysql
  mysql_select_db('db name'); // connect to db  
  mysql_query("set names 'utf8' ");  
  mysql_query("set character_set_client=utf8");  
  mysql_query("set character_set_results=utf8");
  mysql_query("set character_set_connection=utf8");

  查询具体数据:
  $sql = "SELECT * FROM tb_list"; // select sql
  $result = mysql_query($sql);
  while ($user_data = mysql_fetch_array($result))  // get data from dataset array
  {
    $sub = $user_data['fl_subdomain']; // get 1 single data
  }

  检查结果集是否为空:
  $result = mysql_query($sql);
  $i = mysql_num_rows($result);
  if ($i == 0): //有数据

mysql_close($link);//关闭连接


六、cookie
设置cookie:
setcookie('usrid',(string) $userid);
setcookie('usr',$user);
setcookie('pwd',$pwd);

清除cookie:
  setcookie('usrid', "", time() - 3600);
  setcookie('usr', "", time() - 3600);
  setcookie('pwd', "", time() - 3600);  


七、根据查询结果创建动态元素
用类似document.getElementById('button_" . $sub . "').value == '显示'的方法创建动态java script脚本,然后用document.getElementById属性获得相应对象,修改相应的属性。

输入新在线文档的名称:

一、网址跳转
以下是.htaccess全文:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.zzhou\.net$ [NC]
RewriteRule ^(.*)$ http://zzhou.net/$1 [R=301,L]
RewriteRule ^(\w+)/(\w+)$ view.php?user=$1&sub=$2
RewriteRule ^(\w+)$ view.php?user=$1&sub=home
RewriteRule ^(\w+)/$ view.php?user=$1&sub=home

实现以下功能:
1、将www.zzhou.net自动跳转到zzhou.net


二、mysql字符集问题及其它
1、MySQL 字符集: UTF-8 Unicode (utf8)
2、建表是设定字符集utf8_unicode_ci,字段字符集为utf8_general_ci
3、要读写相关UTF8字段时:
    mysql_query("set names 'utf8' ");  
    mysql_query("set character_set_client=utf8");  
    mysql_query("set character_set_results=utf8");
    mysql_query("set character_set_connection=utf8");
4、设置自增变量
  先建表,然后修改结构,在AUTO_INCREMENT一项打勾。


三、表单检查
  <FORM ID='fm1' ACTION='adduser2.php' METHOD='post'> //将表单提交给adduser2.php
    用户名(英文与数字组合): <INPUT TYPE='TEXT' ID='uname' NAME='username' SIZE='20'>
<BR /><BR />
密码:       <INPUT TYPE='PASSWORD' ID='p1' NAME='pwd' SIZE='20'><BR /><BR />
重输入密码: <INPUT TYPE='PASSWORD' ID='p2' NAME='pwd2' SIZE='20'><BR /><BR />
昵称(可中文): <INPUT TYPE='TEXT' NAME='nick' SIZE='20'><BR /><BR />
图片地址: <INPUT TYPE='TEXT' NAME='pp' SIZE='80'><BR /><BR />
描述一下自己: <BR /><BR />
<TEXTAREA NAME="desc" COLS="80" ROWS="10"></TEXTAREA><BR /><BR />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<INPUT TYPE='BUTTON' NAME='sub' SIZE='30' VALUE='提  交' onClick='checkinput()'><BR /><BR /> //提交前先执行checkinput()
  </FORM>

  <script language="javascript">
    function checkinput()
{
 var flag1=/^[a-zA-Z0-9]{1,20}$/;  
 var tmp='';
 var ff=true;
      if (!flag1.exec(document.getElementById('uname').value)) //检查用户名输入有效性
 {
tmp='用户名只能是英语或数字, 长度1-20位!\n';
ff=false;
 }
 else
 {
ff=true;
 }
      var pwd=document.getElementById('p1').value;
 var pwd2=document.getElementById('p2').value;
 if (pwd !== pwd2)
 {
tmp=tmp+'两次输入的密码不一致!';
ff=false;
 }
 else
 {
 }  
 if (ff==true)
 {
   document.getElementById('fm1').submit(); //全部检查完结,则提交表单
 }
 else
 {
   alert (tmp);
 }
}

  </script>

从表单得到数据:
$user = $_POST['username']; 

在adduser2.php进一步检查用户名是否重复,如重复则提示信息将返回表单页面:
$tmp = "用户".$user2."已存在!";
$tmp = "<script language=javascript>alert ('" . $tmp . "')</script>";
echo $tmp;
echo ("<script language=javascript>window.history.go(-1);</script>"); 


五、建立SQL连接
  $link=mysql_connect("ip address","username","password"); //connect to mysql
  mysql_select_db('db name'); // connect to db  
  mysql_query("set names 'utf8' ");  
  mysql_query("set character_set_client=utf8");  
  mysql_query("set character_set_results=utf8");
  mysql_query("set character_set_connection=utf8");

  查询具体数据:
  $sql = "SELECT * FROM tb_list"; // select sql
  $result = mysql_query($sql);
  while ($user_data = mysql_fetch_array($result))  // get data from dataset array
  {
    $sub = $user_data['fl_subdomain']; // get 1 single data
  }

  检查结果集是否为空:
  $result = mysql_query($sql);
  $i = mysql_num_rows($result);
  if ($i == 0): //有数据

mysql_close($link);//关闭连接


六、cookie
设置cookie:
setcookie('usrid',(string) $userid);
setcookie('usr',$user);
setcookie('pwd',$pwd);

清除cookie:
  setcookie('usrid', "", time() - 3600);
  setcookie('usr', "", time() - 3600);
  setcookie('pwd', "", time() - 3600);  


七、根据查询结果创建动态元素
用类似document.getElementById('button_" . $sub . "').value == '显示'的方法创建动态java script脚本,然后用document.getElementById属性获得相应对象,修改相应的属性。

2009年8月30日

zzhou.net

做了一个个人网站zzhou.net醉舟。
醉舟是兰波的成名诗作,全文见:http://zzhou.net/zzhou.txt
醉舟网主要提供二级、三级域名跳转服务,注册用户可以得到类似zzhou.net/tallrain二级域名方式的个人页面,在页面上可以定义若干个次级目录链接,如zzhou.net/tallrain/news
每一个链接其实都是一次跳转,如zzhou.net/tallrain/news其实是跳转到http://dl.getdropbox.com/u/258641/tallrainrss.htm,但是zzhou.net/tallrain/news这个网址非常好记。
另外,在个人的页面上其实是列出了个人所建的所有链接,此外还包括一些文字录入的内容和好友链接等。
建这个网站主要是出于以下两点考虑:
1、国内的域名跳转一定要备案,非常不方便。
2、目前很流利短域名跳转,但是短域名产生的后缀字符都是随机产生的,不好记。而醉舟网的域名后缀是用户自定义的,好记。
希望对大家有用。

2009年8月13日

Delphi7处理XML

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,msxml,XMLIntf,XMLDoc;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  xmlDoc:IXMLDocument;
  trsnode, tmpnode, tmpnode2:IXMLNode;
  trnode: ixmlnodelist;
  m1,m2,l1,l2:string;
  fm, fl: boolean;
  i:integer;
begin

  xmlDoc := TXMLDocument.Create(nil);
  xmldoc.LoadFromFile('E:\bfcec\trans\ap\all.utf8.xml');
  xmldoc.Encoding:='utf-8';
  trsnode:=xmldoc.ChildNodes.FindNode('TranslationElements');
  trnode:=trsnode.ChildNodes;
  for i:= 1 to trnode.Count do
  begin
    m1:='';
    l1:='';
    m2:='';
    l2:='';
    fm:=true;
    fl:=true;

    try
      tmpnode:=trnode.Nodes[i-1].ChildNodes.FindNode('SourceLiterals');
      if tmpnode<>nil then tmpnode:=tmpnode.ChildNodes.FindNode('LiteralSet');
      if tmpnode<>nil then tmpnode:=tmpnode.ChildNodes.FindNode('MediumDescription');
      if tmpnode <> nil then m1:=tmpnode.Text;
    except
      m1:='';
    end;

    try
      tmpnode:=trnode.Nodes[i-1].ChildNodes.FindNode('TargetLiterals');
      if tmpnode<>nil then tmpnode:=tmpnode.ChildNodes.FindNode('LiteralSet');
    except
      m2:='';
      fm:=false;
    end;

    try
      if tmpnode<>nil then tmpnode2:=tmpnode.ChildNodes.FindNode('MediumDescription');
      if tmpnode2<>nil then m2:=tmpnode2.Text;
      if tmpnode2=nil then tmpnode.AddChild('MediumDescription');
    except
    end;

      m1:=trim(m1);
      m2:=trim(m2);
      if (m1<>'') and (m2='') and fm then
      begin
       //if tmpnode = nil then trnode.Nodes[i-1].ChildNodes.FindNode('TargetLiterals').ChildNodes.FindNode('LiteralSet').AddChild('MediumDescription');
       trnode.Nodes[i-1].ChildNodes.FindNode('TargetLiterals').ChildNodes.FindNode('LiteralSet').ChildNodes.FindNode('MediumDescription').Text:=m1;
      end;

    try
      tmpnode:=trnode.Nodes[i-1].ChildNodes.FindNode('SourceLiterals');
      if tmpnode<>nil then tmpnode:=tmpnode.ChildNodes.FindNode('LiteralSet');
    except
      l1:='';
    end;

    try
      if tmpnode<>nil then tmpnode2:=tmpnode.ChildNodes.FindNode('LongDescription');
      if tmpnode2<>nil then l1:=tmpnode2.Text;
      if tmpnode2=nil then tmpnode.AddChild('LongDescription');
    except
    end;

    try
      tmpnode:=trnode.Nodes[i-1].ChildNodes.FindNode('TargetLiterals');
      if tmpnode<>nil then tmpnode:=tmpnode.ChildNodes.FindNode('LiteralSet');
      if tmpnode<>nil then tmpnode:=tmpnode.ChildNodes.FindNode('LongDescription');
      if tmpnode<>nil then l2:=tmpnode.Text;
    except
      l2:='';
      fl:=false;
    end;

    
      l1:=trim(l1);
      l2:=trim(l2);
      if (l1<>'') and (l2='') and fl then
      begin
       //if tmpnode=nil then trnode.Nodes[i-1].ChildNodes.FindNode('TargetLiterals').ChildNodes.FindNode('LiteralSet').AddChild('LongDescription');
       trnode.Nodes[i-1].ChildNodes.FindNode('TargetLiterals').ChildNodes.FindNode('LiteralSet').ChildNodes.FindNode('LongDescription').Text:=l1;
      end;

  end;
  xmldoc.SaveToFile('E:\bfcec\trans\ap\all.out.utf8.xml');
  xmldoc:=nil;
  showmessage('done');
end;

end.

2009年7月28日

Z: 用UltraVPN翻墙

http://qingxianyan.cn/2009/07/27/个人常用的两招翻墙访问twitter.html

    之前有听过此款免费VPN的好用,因为自己一直使用的是第一种方法的,也懒得去使用开启那么多客户端之类的程序,所以就一直没有试用过,直到上周想上FriendFeed无解,所以决定安装UltraVPN试用看看,而后感觉确实挺不错的而且速度还可以接受啊。所以推荐需要的话可以首选其作为免费vpn,只需注册个账号即免费使用。
    1、下载UltraVPN:点击这里
    2、安装软件,过程中可能会出现一个安装虚拟网卡的对话窗口,如下图,点击仍然继续。
     
    3、打开 C:\Program Files\UltraVPN\config 文件夹(默认安装目录),将client.ovpn改名为 ultra.ovpn。可以下载其他可用的OpenVPN的配置文件,比如 alonweb 的配置文件在这里,解压到这个文件夹,将alonweb.conf 改名为 alonweb.ovpn;其他VPN服务的配置也是如此。
      
    4、双击运行ultravpn软件,任务栏右下角会有多出一个vpn链接图标,如图所示(右键选择对应的vpn链接)
     
    5、要求你输入用户名密码。

     
    6、输入注册的账号和密码登陆,等待一会,右下角的UltraVPN图标颜色由红色–>绿色就表示已经链接成功。这里就不截图啦/// 有什么问题再说吧!
    好啦,关于自己如何翻墙上Twitter或者使用UltraVPN免费VPN使用国外(本人ultravpn得到的是法国的IP地址)网络访问被墙在外的网站的,如相识的现实朋友想上Twitter微博客的话可以这两措施试试修改访问看看,如果还有什么不明白的可以私下与鄙人联系,尽自己微薄之力助你一臂之力 嗯!

2009年7月20日

Oracle导入导出

导出:
1、EXP生成DUMP
或用以下方法导出生成TXT:
2、pl/sql developer导出若干个表
3、TOAD
4、Oracle SQL Developer可选择导出数据库、用户模式或表。


导入:
1、用IMP导入DUMP
或用以下方法导入TXT:
2、pl/sql developer
3、TOAD
4、Oracle SQL Developer


2009年7月18日

Google 接近完整 Hosts 列表

ZZ: http://hi.baidu.com/pkudoraemon/blog/item/6565bb22736e764792580712...


发信人: szwj (MI07 & DMM | 不做大牛不喊弱), 信区: Google
标  题: Google 接近完整 Hosts 列表
发信站: 北大未名站 (2009年06月25日08:51:44 星期四), 站内信件

把下面的内容添加到C:\Windows\System32\drivers\etc\hosts文件中
由于使用的IP未必为最优,所以速度可能变慢。
有问题的清补充或更正。另外,Hints就是出不来,正在检查中。
#Search
74.125.39.99    www.google.com
74.125.39.103   www.google.com
74.125.39.104   www.google.com
74.125.39.105   www.l.google.com

#Images
74.125.39.99    images.google.com
74.125.39.103   images.google.com
74.125.39.104   images.google.com
74.125.39.105   images.google.com
74.125.39.106   images.google.com
74.125.39.147   images.google.com
74.125.77.99    tbn0.google.com
74.125.77.99    tbn1.google.com
74.125.77.103   tbn2.google.com
74.125.77.104   tbn3.google.com
74.125.77.105   tbn4.google.com
74.125.77.106   tbn5.google.com
74.125.77.147   tbn6.google.com

#Shopping
74.125.39.99    base0.googlehosted.com
74.125.39.103   base1.googlehosted.com
74.125.39.104   base2.googlehosted.com
74.125.39.105   base3.googlehosted.com
74.125.39.106   base4.googlehosted.com
74.125.39.147   base5.googlehosted.com

#Books
74.125.39.100   books.google.com
74.125.39.101   books.google.com
74.125.39.102   books.google.com
74.125.39.113   books.google.com
74.125.39.138   books.google.com
74.125.39.139   books.google.com
74.125.39.100   bks0.books.google.com
74.125.39.100   bks1.books.google.com
74.125.39.101   bks2.books.google.com
74.125.39.102   bks3.books.google.com
74.125.39.113   bks4.books.google.com
74.125.39.138   bks5.books.google.com
74.125.39.139   bks6.books.google.com
74.125.39.113   bks7.books.google.com
74.125.39.138   bks8.books.google.com
74.125.39.139   bks9.books.google.com

#Video
74.125.39.100   video.google.com
74.125.39.101   video.google.com
74.125.39.102   video.google.com
74.125.39.113   video.google.com
74.125.39.138   video.google.com
74.125.39.139   video.google.com
74.125.39.100   0.gvt0.com
74.125.39.101   1.gvt0.com
74.125.39.102   2.gvt0.com
74.125.39.113   3.gvt0.com
74.125.39.138   4.gvt0.com
74.125.39.139   5.gvt0.com

#Mail(POP3/SMTP)
209.85.147.109  pop.gmail.com
209.85.147.109  smtp.gmail.com

#WebMail
64.233.189.18   mail.google.com
64.233.189.19   mail.google.com
64.233.189.83   mail.google.com
64.233.189.18   www.gmail.com
64.233.189.19   www.gmail.com
64.233.189.83   www.gmail.com
64.233.189.19   googlemail.l.google.com

#Docs
64.233.189.101  writely-china.l.google.com
64.233.189.101  writely.l.google.com
64.233.189.102  docs.google.com
64.233.189.101  docs.google.com
64.233.189.100  docs.google.com

#Map
64.233.189.104  map.google.com
64.233.189.99   map.google.com
64.233.189.147  map.google.com
64.233.189.104  maps.google.com
64.233.189.99   maps.google.com
64.233.189.147  maps.google.com
64.233.189.99   maps.gstatic.com
203.208.39.93   khm.google.com
203.208.39.91   mt0.google.com
203.208.39.93   mt1.google.com
203.208.39.91   mt2.google.com
203.208.39.91   mt.l.google.com
64.233.189.99   maps.l.google.com

#Scholar
64.233.189.99   scholar.google.com
64.233.189.104  scholar.google.com
64.233.189.147  scholar.google.com
64.233.189.104  scholar.l.google.com

#Group
64.233.189.102  groups.google.com
64.233.189.100  groups.google.com
64.233.189.101  groups.google.com
64.233.189.101  groups.l.google.com

#Picasa
74.125.39.147   picasa.google.com
74.125.39.91    photos.google.com
74.125.39.91    picasaweb.google.com
74.125.39.93    picasaweb.google.com
74.125.39.136   picasaweb.google.com
74.125.39.190   picasaweb.google.com
74.125.39.91    lh0.ggpht.com
74.125.39.93    lh1.ggpht.com
74.125.39.136   lh2.ggpht.com
74.125.39.190   lh3.ggpht.com
74.125.39.91    lh4.ggpht.com
74.125.39.93    lh5.ggpht.com
74.125.39.136   lh6.ggpht.com
74.125.39.190   lh7.ggpht.com

#Translate
74.125.39.100   translate.google.com
74.125.39.101   translate.google.com
74.125.39.102   translate.google.com
74.125.39.113   translate.google.com
74.125.39.138   translate.google.com
74.125.39.139   translate.google.com

#Reader
74.125.39.99    reader.google.com
74.125.39.103   reader.google.com
74.125.39.104   reader.google.com
74.125.39.105   reader.google.com
74.125.39.106   reader.google.com

#Sites
64.233.161.9    sites.google.com
74.125.53.9     sites.google.com 
74.125.39.102   sites.google.com 
74.125.39.139   sites.google.com 
74.125.45.9     sites.google.com 
74.125.39.139   sites.google.com

#Code
74.125.53.9     code.google.com   
74.125.45.9     code.google.com   
64.233.161.9    code.google.com   
74.125.39.102   code.google.com   
209.85.137.9    code.google.com   
74.125.39.139   code.l.google.com

#Labs
74.125.39.141   www.googlelabs.com
74.125.39.141   appspot.l.google.com
74.125.39.100   labs.google.com
74.125.39.101   labs.google.com
74.125.39.102   labs.google.com
74.125.39.113   labs.google.com
74.125.39.138   labs.google.com
74.125.39.139   labs.google.com

#Knol
74.125.39.100   knol.google.com
74.125.39.101   knol.google.com
74.125.39.102   knol.google.com
74.125.39.113   knol.google.com
74.125.39.138   knol.google.com
74.125.39.139   knol.google.com

#Sketchup
74.125.39.99    sketchup.google.com
74.125.39.103   sketchup.google.com
74.125.39.104   sketchup.google.com
74.125.39.105   sketchup.google.com
74.125.39.106   sketchup.google.com

#Pack
74.125.39.99    pack.google.com
74.125.39.103   pack.google.com
74.125.39.104   pack.google.com
74.125.39.105   pack.google.com
74.125.39.106   pack.google.com

#News
74.125.39.99    news.google.com
74.125.39.103   news.google.com
74.125.39.104   news.google.com
74.125.39.105   news.google.com
74.125.39.106   news.google.com
74.125.39.147   news.google.com
74.125.39.99    nt0.ggpht.com
74.125.39.103   nt1.ggpht.com
74.125.39.104   nt2.ggpht.com
74.125.39.105   nt3.ggpht.com
74.125.39.106   nt4.ggpht.com
74.125.39.147   nt5.ggpht.com

#Calendar
74.125.39.100   calendar.google.com
74.125.39.101   calendar.google.com
74.125.39.102   calendar.google.com
74.125.39.113   calendar.google.com
74.125.39.138   calendar.google.com
74.125.39.139   calendar.google.com

#Blogger
74.125.39.191   www.blogger.com
74.125.39.191   blogger.l.google.com
74.125.39.191   blogger.google.com

#Orkut
74.125.47.85    www.orkut.com
74.125.47.86    www.orkut.com
74.125.47.85    orkut.google.com
74.125.47.86    orkut.l.google.com

#Youtube
74.125.39.100   www.youtube.com
74.125.39.101   www.youtube.com
74.125.39.102   www.youtube.com
74.125.39.113   www.youtube.com

#Toolbar
74.125.39.100   toolbar.google.com
74.125.39.101   toolbar.google.com
74.125.39.102   toolbar.google.com
74.125.39.113   toolbar.google.com

#Apps
74.125.39.99    apps.google.com
74.125.39.103   apps.google.com
74.125.39.104   apps.google.com
74.125.39.115   apps.google.com

#Chrome
74.125.39.99    chrome.google.com
74.125.39.103   chrome.google.com
74.125.39.104   chrome.google.com
74.125.39.115   chrome.google.com

#Finance
74.125.39.99    finance.google.com
74.125.39.103   finance.google.com
74.125.39.104   finance.google.com
74.125.39.115   finance.google.com

#Desktop
74.125.39.99    desktop.google.com
74.125.39.103   desktop.google.com
74.125.39.104   desktop.google.com
74.125.39.115   desktop.google.com

#Ajax
74.125.53.9     ajax.googleapis.com
74.125.45.9     ajax.googleapis.com
64.233.161.9    ajax.googleapis.com
209.85.137.9    ajax.googleapis.com
72.14.203.9     googleapis-ajax.l.google.com

#Modules
74.125.39.132   1.ig.gmodules.com
74.125.39.132   2.ig.gmodules.com
74.125.39.132   3.ig.gmodules.com
74.125.39.132   4.ig.gmodules.com
74.125.39.132   5.ig.gmodules.com
74.125.39.132   6.ig.gmodules.com

#Misc
64.233.189.101  id.google.com
64.233.189.102  id.google.com
64.233.189.100  id.google.com
64.233.189.100  id.l.google.com
74.125.39.132   skins.gmodules.com
74.125.39.132   googlehosted.l.google.com
74.125.39.132   img0.gmodules.com
74.125.39.99    blogsearch.google.com
74.125.39.99    www2.l.google.com
74.125.39.99    www.gstatic.com
74.125.39.100   www3.l.google.com
74.125.39.99    buttons.googlesyndication.com

2009年7月17日

oracle10g em 乱码

在安装完oracle10g后,由于jre默认使用的字体问题,使得em,dbca,netca,netmgr显示中文时出现"□□"字样的乱码,下面来说明这个问题的解决办法:  

 1. 改变$ORACLE_HOME/jdk目录下的jre的默认字体

  cd $ORACLE_HOME/jdk/jre/lib/

  ls font*zh_CN*  

 font.properties是默认使用的字体  

 还可以看到font.properties.zh_CN.Redhat和其它的字体

  cp font.properties font.properties.bak  

 cp font.properties.zh_CN.Redhat font.properties

 2.删除Cache下的gif文件(em页面中用到)

  cd $ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs/   ls *.gif

  rm -f *.gif   

3. 重新启动EM服务

  cd $ORACLE_HOME/bin/

  ./emctl stop dbconsole  

 ./emctl start dbconsole


picasa相册无法显示图片的解决办法

用记事本或其他文本编辑器编辑C:\windows\system32\drivers\etc\hosts文件
加入以下几行:
203.208.39.160 s.ytimg.com
203.208.39.104 picasaweb.google.com
203.208.39.99 lh1.ggpht.com
203.208.39.99 lh2.ggpht.com
203.208.39.99 lh3.ggpht.com
203.208.39.99 lh4.ggpht.com
203.208.39.99 lh5.ggpht.com
203.208.39.99 lh6.ggpht.com

ZT: 翻墙术 (技术贴)



于 09-7-16 通过 牛博山寨头条 作者:黄香



本文将提供一种一劳永逸的翻墙方式(ssh -D),实施之后,那道墙——对你来说——将从此透明。


本文面向的用户:使用Windows作为操作系统并且使用Firefox作为常用浏览器。


第一步:免费获取拥有SSH权限的帐号和密码。



默认的免费获取方式:将本文转载到你自己的博客上,将转载后的文章网址发送到f.ckgfw#gmail.com


注意:转载前请先确认自己是(或曾是)一名blogger(博客),否则将会浪费彼此的时间。


转载方式:拷贝文章代码至博客后台HTML编辑器中,直接发布即可,文章标题自拟,可在前后文插入自己的评论。


经过人工审核,你将收到一封附有五个拥有SSH权限的帐号和密码的电子邮件,你可以将它们赠与你信任的人。


更多获取方式将在今后陆续激活,请关注我们的最新更新:https://friendfeed.com/fuckgfw


第二步:配置MyEnTunnel软件


下载并安装MyEnTunnel,该软件全名为My Encrypted Tunnel。


一键下载:https://dl.getdropbox.com/u/873345/download/myentunnel.exe


myentunnel


按照上图将第一步收到的帐号信息填写到相应的地方后,点击save按钮,再点击hide按钮。


第一次连接过程中会出现一个认证对话框,按照提示确认即可。以后的自动连接中将不再出现此认证对话框。


最后点击hide按钮,使对话框隐藏到系统任务栏中。


提示:


为MyEntunnel创建一个快捷方式,将其复制到系统的【启动】(C:\Documents and Settings\当前用户名(需要修改成你自己的)\「开始」菜单\程序\启动)文件夹中,今后开机便可自动启动软件,并自动连接服务器。


tray


绿色代表连接成功且稳定;黄色代表正在连接或重新连接;红色代表连接失败。


第三步:配置Firefox浏览器


假设你正使用Firefox浏览器阅读本文。


一键安装:http://autoproxy.mozdev.org/latest.xpi


xpi-offical


点击立即安装,安装后,重新启动Firefox。然后你会看到如下对话框,选择gfwlist (P.R.China)后,点击确定。


gfwlist


接着你会看到Firefox主界面右上角出现有一个“福”字图案,点击“福”。


fu


点击“代理服务器——编辑代理服务器”。


edit


随即出现如下画面,你会看到如GAppProxy、Tor和Your Freedom这样一系列代理服务器名称。


before


将GAppProxy一栏的参数修改为如下图所示。


after


修改完毕后,点击确定。至此配置已全部就绪。


获取更多帮助,请关注反馈中心:https://friendfeed.com/fuckgfw-feedback


Bernie:"Eat me!"


第四步:支持fuckGFW



  1. 如果您翻墙成功,请大笑一声并用充满磁性地低音说出:Hello, world!
  2. 如果由于线路原因,始终翻墙不成,不要气馁,给我们发Email,咱们一起解决问题。
  3. 假如哪天突然无法正常连接,请先到反馈中心汇报,我们会及时做出反应。
  4. 目前您有如下几种方式及时获取我们的最新动态:FriendFeed | Twitter | Blog
  5. 保持默契,我们相信您一定可以做到。

版权信息:您可以自由复制、传播、演绎本作品且无需署名、无需注明原始出处。


文章HTML代码


2009年7月16日

把文件搬到网络上

把硬盘留给电影和游戏吧,其它的通通搬到网上。

1、电子邮件
首选:gmail,容量大,搜索方便,有很多扩展,也可以收其它邮局的邮件。
备选:qq mail,支持大附件和在线QQ。

2、文档:google docs,支持WORD/EXCEL/POWERPOINT/PDF
支持HTTPS安全协议,发布和分享非常方便。

3、电子书
首选:scribd(被墙了)
次选:docin,用flash看PDF等电子书。

4、mp3
首选:亦歌1g1g.com,搜到好歌记得收藏,随时随地播放。
备选:google music、xiami

5、照片
首选:google picasa,通过客户端上传网络照片非常方便,还支持人脸识别。
次选:yupoo

6、代码:google code

7、收藏夹
个人首选是google bookmark,配合firefox插件使用。

8、网络入口:igoogle

9、个人资料页:google profiles

10、个人文件
首选:dropbox,很强大的客户端,可以在多台电脑之间同步,分享也非常方便,甚至可以用它做静态的网站,支持javascript。

从上面可以看出google的雄心,让大家脱离电脑的约束,只要有支持浏览器的设备,随时随地进入个人的网络世界。


2009年7月15日

用口袋书屋制作E680全屏电子书

一、准备TXT。
二、分割TXT。
三、打开口袋书屋,从文件夹导入。打包方式为合并打包,改电子书名称。
四、生成电子书,选择手机型号为Motorola L6,高级页中,选择高度=320,宽度=240,全屏=True,文本字体大小=大号。按确定后制作JAR电子书。
五、安装电子书。左上键菜单,右上键返回。


2009年7月12日

项目管理模板

图例:

下载:


项目管理经验谈

一、计划一定要做细,每个任务都到细分到具体的责任人,进度安排具体到天,而对于系统切换等关键任务要具体到小时。
二、每天刚上班时,对当天的任务做一次明确的安排,让每个项目组成员都明确自己当天要完成什么。
三、每天下班前对项目进度作总结,并对项目的总体进度进行更新。
四、对于发生的每一个问题都进行记录,包括详细描述、屏幕截图、根本原因、解决方案、实施办法。
五、对于可能发生的意义进行记录,并分析影响的大小。
六、对于无法解决的问题,及时汇报或寻找更多的资源。
七、让项目组里的每个成员都能及时联系到相关人员。


康明斯的MES系统介绍

MES系统实施经验谈

一、处理好MES与ERP/控制系统的关系。
MES(执行层)是介于ERP(计划层)与控制系统之间的系统,起到承上启下的作用。
ERP下发工单,但和MES相比,有着数据不够细、不够快的缺点,因此实施MES之后,用户必然要从MES中查询大量数据。
而控制系统侧重于与设备的通讯,与MES对接之后,许多数据特别是报错就通过MES反映给用户了。
因此上了MES之后,用户会发现MES中有大量的问题,尽管许多问题是ERP或控制系统传递过来的,但由于MES是用户的界面,用户都会怪罪于MES,处理起来要格外小心。
从设计上来说,要明确定义各系统的边界,设计接口的时候尽可能地减少系统之间的强耦合,让数据从系统之间单向传递,或者通过SOA/企业总线统一调度。
从维护上来说,要通过撰写必要的技术文档及针对一线作业人员的培训,让用户在问题发生之后能作出一些初步的判断,而不是一有问题就找MES工程师。

二、处理好工厂的客户化需求
尽管现在已经有一些较成熟的MES产品,但是由于工厂的实际情况千变万化,特别是设备的规格存在很大的差异,因此客户化开发必不可少。
如果是在购买MES产品的基础上做开发,那么要做好产品核心和客户化开发之间的平衡。
对于MES供应商而说,许多客户化开发没有什么通用性,这方面的开发纯粹是资源浪费,在实际操作的时候很可能是通过本地的第三方外包供应商实施的,针对这部分开发,工厂特别要注意这方面的技术文档的编写和版本控制,不然一旦换了供应商许多东西可能就要重来。
对于MES工程师来说,在接到客户化需求的时候,要多做分析,看能不能用已有的核心模块来实现,尽可能避免过多的客户化开发,这样从长远来看可以减少大量的维护成本。

三、维护方面
一定要做好操作人员的培训。MES的主要用户是一线操作工,而这些人的流动性往往又很大,一定要做好周期性的培训,让他们了解掌握必要的技术,这样可以避免一些最简单的操作错误。象我就曾经半夜接到工厂的电话,说条码打印机出问题打不出条码,赶到现场一看,原来不知谁按了打印机的暂停键。
许多工厂要求IT人员提供一线支持,保证电脑、网络、打印机、MES系统不出故障。现场支持人员可能不大了解MES系统,但是通过一些入门的培训,可以初步把电脑、网络、打印机等硬件问题分离出来,让MES工程师可以专注于软件问题的分析。

2009年7月10日

播放youtube视频办法

打开C:\WINDOWS\System32\drivers\etc\hosts, 添加以下内容:

203.208.39.104 www.youtube.com
203.208.33.100 gdata.youtube.com
203.208.39.99 upload.youtube.com
203.208.39.99 insight.youtube.com
203.208.39.160 help.youtube.com
203.208.39.104 youtube.com
203.208.39.104 s.ytimg.com
203.208.39.104 i1.ytimg.com
203.208.39.104 i2.ytimg.com
203.208.39.104 i3.ytimg.com
203.208.39.104 i4.ytimg.com

2009年7月9日

Z: 八国峰会,美女走光,元首们~~~~~

图片背景:八国集团领导人8日在意大利中部城市拉奎拉举行工作午餐,讨论世界经济问题。这标志着为期3天的八国集团首脑会议正式拉开帷幕。7月8日,八国集团领导人准备合影,(左起)日本首相麻生太郎、加拿大总理哈珀、美国总统奥巴马、法国总统萨科齐、意大利总理贝卢斯科尼、俄罗斯总统梅德韦杰夫。


点击查看大图
美女低胸走光,麻生、哈珀看胸,萨科齐、贝卢斯科尼看屁股,奥巴马和姐夫故作道貌岸然状。