OMG,难道GFW了?

发布于: 2008年07月22日

今天下午15:30访问我的这个博客,FF居然告诉我显示连接被重置。查看网站流量,下午15:00开始流量为0。难道被GFW了?尝试爬墙,居然可以访问。 OMG, 我被GFW了。

我的IP独立,不存在被别人连累的情况。但是这个小小的个人博客,怎么会被网警看上的呢?纳闷,纳闷。希望只是GFW服务器临时抽筋,明天就恢复正常访问。

God bless me.

考0分都可以上大学,幸福的台湾学生

发布于: 2008年07月21日

当然,这有点标题党试的标题,并不是说台湾教育制度的改革或者其他什么的。只是如今的台湾高校招生制度遇到了令人尴尬的情况。据昨晚凤凰卫视报道(2008-7-20),2008年台湾所有大学招生人数和是85270,而实际报考人数只有84313,所以理论上,所有科目交白卷,也可以弄个大学读读。

冰冻三尺,非一日之寒(当然,台湾的学生并不会认同这个是“寒”字)。去年的最低录取分数线也仅比今年的理论分数高18分而已。台湾的教育部对此无能为力。他们也曾试图干预大学,设立最低录取分数,但是很遗憾,由于各大学的反对未果。相信这个跟台湾的私立学校较多有关。

本文为寻找人生的起点(http://blog.cn-ic.org)原创,如需转载,请注明出处,并保留原文链接 http://blog.cn-ic.org/?p=99。

天涯社区的服务器构架

发布于: 2008年07月15日

今天有幸看到了一下天涯社区的一个错误页面,如下:

500 Servlet Exception

java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:574)
at cn.tianya.common.database.CommonDAO.getFromCache(CommonDAO.java:92)
at cn.tianya.common.database.CommonDAO.get(CommonDAO.java:58)
at cn.tianya.focus.dao.TopicDAO.selectTopArticles(TopicDAO.java:39)
at _jsp._focus._index__jsp._jspService(focus/index.jsp:94)
at com.caucho.jsp.JavaPage.service(JavaPage.java:60)
at com.caucho.jsp.Page.pageservice(Page.java:579)
at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179)
at com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:222)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
at com.caucho.server.hmux.HmuxRequest.handleRequest(HmuxRequest.java:420)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:511)
at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:516)
at com.caucho.util.ThreadPool.run(ThreadPool.java:442)
at java.lang.Thread.run(Thread.java:595)

Resin-3.0.21 (built Thu, 10 Aug 2006 12:03:19 PDT)

发现天涯用的居然是jsp, 显然页面rewrite成html了。而且用了Resin-3.0.21,看起来jsp大型应用也不是weblogic的天下。

只是看不出数据库用的是什么,既然说不定用的也是开源产品。等有机会再瞧瞧吧

卓越亚马逊–理想和现实总是有距离的

发布于: 2008年07月10日

在卓越买东西,看到的并不是“卓越”,而是“亚马逊”和他的邮寄免费。有时候买的东西比市场便宜,但是加上邮费就差不多了,何况邮寄的东西售后服务困难。如今,我就因为贪便宜,而被售后折腾了一下。

事情发生在买了卓越亚马逊上的三本书开始(《魔戒三部曲》)。网络这个狗东西,让我忘记了如何写字和看书,我希望这三本书是我重拾信心的开始。

当我孜孜不倦得看到第二本的时候,发现了严重的质量问题:缺页,缺32页。

随即,我通过网站的客户服务邮件抱怨,那是2008/6/18:

根据订单号为#95008xxxx,我购买了魔戒三部曲,今天发现其中第二部《魔戒-双塔奇兵》存在缺页情况:缺失319-350页,计32页之多。不知道能否要求调换?

客服的邮件回复得很快,24小时内就回了一封让人心情愉悦的答复:

亲爱的朋友:

您好!感谢您的email.

尊敬的用户您好,首先对于给您带来的麻烦我们向您表示深深的歉意。
请您放心,我们已经给您安排了(950085698号)订单中商品”魔戒第二部-双塔奇兵”的换货,
但因目前此件商品广州库房无货,需要从其他库房进行调拨,所以换货时间会有些延迟,一般
调拨时间是3-4天,配送人员会在6-9天左右免费上门去给您办理。去前会与您电话联系的。
建议您再稍微等待一下,给您带来的不便还请您谅解。

如果您还有什么问题,欢迎您随时与我们联系。我们将竭诚为您服务。
欢迎您再次到卓越亚马逊购物。

对于这样的客服答复,等待并不是焦虑的,除非一直让你等到第10天。于是我继续抱怨,显然愉悦的心情变成了一丝担忧。已经是2008/6/28:

我于本月6/18给你们客服提出如下问题:
#此处省略引用内容#
可以看到回复的内容里面说明会在”配送人员会在6-9天左右免费上门去给您办理”,但是目前已经过去十多天了,没有任何消息。

希望有一个比较满意的后续解决方案。
谢谢

客服的及时答复还是一如既往:

尊敬的用户您好,非常抱歉耽误您的时间了,经查询,您的(95008xxxx号)订单中购买的《魔戒第二部-双塔奇兵》这件商品
是在6月18日联系我们办理的换货,但由于商品在广州地区出现了缺货情况,导致迟迟没有为您上门更换,
目前我们正在联系供货商进行采购,但由于进货涉及很多环节,暂时还无法确定具体的到货时间。
您看能否先给您办理这件商品的退货呢,以便不再耽误您的时间,给您带来的不便我们向您表示深深的歉意,还请您谅解。

但是这样的答复是让人不能满意的,我提出了我的个人意见:

你好,
这已经是我第三次与你们联络了。

对于”缺货说”越来感到不满意。看看你们的网站上:
http://www.amazon.cn/mn/productReviewApplication?uid=168-4333193-5341845&prodid=bkbk748335
上面写着有货,难道是假的?或者广州地区的订单都不需要处理了?还是只歧视更换的?

我的问题只是书上有缺页,即使更换简装版甚至只是复印那32页给我,都可以接受。希望amazon能够理解一个读者的心情。
谢谢

附上上次的E-mail 全文:
#附上的全文省略#

也许简单客户的抱怨并不能放大客服人员的权限,但是确实也在做点什么:

非常抱歉,给您带来的不便请您谅解,是这样的,查询到您的95008xxxx号订单是从广州库房发货的,现在需要换货的商品广州库房出现了缺货的情况,

只有北京库房有一件,但此商品调拨时间无法确定,您的心情我们理解,为了让您尽快收到好的商品,所以我们建议您先作退货处理,再重新订购,这样时间也会比较快,

请您确认是否需要退货,确认后请告知,以便我们尽快处理,对此带来的不便向您深表歉意,感谢您对卓越亚马逊的支持!

在这种情况下,我不得不妥协,于是我回复同意退货。

收到退货确认邮件是2008/7/2:

请您放心!您95008xxxx号订单中商品:魔戒第二部-双塔奇兵,我们已经给您安排了退货物,一般情况下可以在一周之内

上门办理,请您放心耐心等待并注意查收!为您申请的5元礼品卡已提供给相关负责部门,有结果后我们会邮件通知您,

请您放心!给您带来不便,还请您谅解!

关于退换货条款,详情请您参见卓越亚马逊右上角”帮助中心”。

这时的等待虽然还是乐观的,但是亚马逊还是给了我一个意外,直到2008/7/9, 还是不见丝毫动静,我终于带着愤怒回复了如下邮寄:

我终于还是相信你们的建议,同意退货了。

相信我的这个问题相当的复杂,复杂到需要将近一个月的时间了,我还在跟你们客服人员扯皮。

如果我是你们客服的工作人员,我会跟客户说“一般情况下可以在一年之内上门办理”而非“一般情况下可以在一周之内上门办理”

我还一度建议我的朋友,amazon.cn还是很可靠的。我相信我错得很离谱,全世界都是一样的,售后服务就是噩梦

也许是amazon.cn公司内部的规章制度使然,什么抱怨能在24小时内回复,只是这次,他们似乎听了我的建议,上面再也不出现解决问题的期限:

再次为商品问题给您带来的不便深表遗憾和歉意,我们会尽快为您办理退货,我们会努力完善各个环节和流程的操作,
相信在您的支持和我们不断努力下会给广大用户和您带来更优质的服务.

2008-7-10, 我最终带着可能永远都不能解决问题的邮件,写下了这篇文章。

即使如此,我还是相信,卓越亚马逊在服务理念上还是可以的,只是,也许,我纯粹的猜测,什么东西一到中国就变味。

请容许我胡乱猜测:
在国外,谁离客户近,谁就有话语权,谁的话有有用。
但是在一到中国,那个吊你一个小小的客服人员?他的思维在于,我的绩效来源于我能卖多少东西出去,售后服务内容的增加花去了我原本可以送货给客户的时间。

所以不从我小小的32也书本内容看,而是以卓越亚马逊来看,他们的理想和中国的现实还是有不小距离的。

本文为寻找人生的起点(http://blog.cn-ic.org)原创,如需转载,请注明出处,并保留原文链接 http://blog.cn-ic.org/?p=96。

取名之90年代和00年代

发布于: 2008年06月25日

上世纪90年代,改革的春风正在让神州大地的人们如火如荼地搞各种基础建设。高楼大厦拔地而起,需要各种原材料。当时,我随着父母呆在一家建筑原材料工厂边上卖汽水冰棍,那是一家砖瓦厂。

当时我发现了一个问题,虽然这些称为乡镇企业的砖瓦厂挺多,而且彼此也没有什么关系,但是貌似有着一条潜在的工厂的命名规则。

比如有一个叫湖山镇的地方,有一群家伙合资搞了一个砖瓦厂。因为当时本地只有一家厂,就起名为“湖山镇砖瓦厂”;或者为了叫得响亮点,干脆叫“湖山镇第一砖瓦厂”,这样起来算是本地第一家也好,或者你理解成本地排名第一也罢。反正那个“湖山镇第一砖瓦厂”的厂长对此挺满意的。

那“湖山镇第一砖瓦厂”开得不错,砖瓦卖得挺好。于是隔壁村的几个一向有些想法的家伙看不下去了,于是一合计也搞了一个砖瓦厂。明显他们抢不到“第一”那个头衔了。这一点上看起来还是挺认命的,一般来说,毫无疑问,厂名会是“湖山镇第二砖瓦厂”

由于需求旺盛,当地的砖瓦厂一家一家得添,序号也在一“i++”的方式进行着。当地的序号一度到了“第九”。

需求不会一直以增长的方式进行。供需也渐渐掉头,有些厂也因为质量差或者其他原因,资金链断裂而倒闭。营运一个工厂简单的依靠能生产就可以的买的时代一去不复返了。后续觉得尚有利可图再新建厂的时候,开始算计着厂名了。“湖山镇第十砖瓦厂”名号说什么也不想要了。怎么办呢,厂址的附近有一座青山,于是那座厂就叫“湖山镇青山砖瓦厂”。

大学毕业,远离家乡,我也不再老师惦记着那些砖瓦厂的名字了。但是在城市里面,名字的规则又有一番新的气象。除了“小肥羊”和“小尾羊”之类的盗版外,我还发现了另外一种通用的手法。

比如街的东边开了一家酒楼,叫“龙门客栈”,生意红火。西边那有一个家伙的“月来客栈”生意却很清淡。于是灵机一动,关店装修一阵,重新开张,店名叫“新龙门客栈”。让客人认为是老店新开,或者连锁经营。可惜那两家店是“一毛钱的关系都没有”。就像“湖山镇第一砖瓦厂”和“湖山镇第二砖瓦厂”一样。

如果你在城市的繁华街市上看到一家“新XX饭店”或者“新XX夜总会”,在周围溜一圈也许会看到原版的“XX饭店”或“XX夜总会”呢。 不过,看起来还是“湖山镇第二砖瓦厂”的厂长会厚道一些。

本文为寻找人生的起点(http://blog.cn-ic.org)原创,如需转载,请注明出处,并保留原文链接 http://blog.cn-ic.org/?p=95。

Linux下配置PHP5连接Oracle 10.2.0

发布于: 2008年06月16日

按惯例,必须先本地安装Oracle,至少是Oracle Client, 最好是全部服务器程序。安装Oracle 不在本文讨论范围。另外本文假设安装Oracle 10.2.0 全部服务器程序。

首先,编译安装PHP, 必须增加一条“–with-oci=/path/to/oracle”, 下面是我的PHP编译完整命令:

'./configure' '--prefix=/opt/php5' '--with-config-file-path=/opt/php5' '--with-bz2' '--with-exec-dir=/usr/bin/' '--with-curl' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-gd=shared' '--enable-gd-native-ttf' '--with-xml' '--with-jpeg-dir=/usr' '--with-openssl' '--with-zlib' '--with-pear=/usr/share/pear' '--with-mysql=shared,/usr' '--with-apxs2=/usr/sbin/apxs' '--with-oci8=/oracle/product/10.2.0'

其次,修改apache文件,识别oracle path。其中apache 识别php不再赘述。可以修改apache 的启动文件apachectl,找到下面文字
# |||||||||||||||||||| START CONFIGURATION SECTION ||||||||||||||||||||
# -------------------- --------------------
#
# the path to your httpd binary, including options if necessary
HTTPD='/usr/sbin/httpd'

在下面添加
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/product/10.2.0/
export PATH=$PATH:$ORACLE_HOME/BIN:
export LD_LIBRARY_PATH=/oracle/product/10.2.0/lib:$LD_LIBRARY_PATH

重启apache

最后,测试。写一个php 测试脚本,我的脚本如下:
检查phpinfo页面, 应该会有下面的文字

oci8

OCI8 Support enabled
Version 1.2.5
Revision $Revision: 1.269.2.16.2.43 $
Active Persistent Connections 0
Active Connections 0
Oracle Version 10.1
Compile-time ORACLE_HOME /oracle/product/10.2.0
Libraries Used no value
Temporary Lob support enabled
Collections support enabled

表示php 已经正查支持OCI8模块了。但并不保证能正查连接Oracle,只是说OCI8相关的函数可以使用而已。
//PHP连接Oracle函数
function php_conn_ora(){
$username='your username';
$passwd='your password';
$protocol='TCP';
$SERVICE_NAME='you service_name or SID';
$ORACLE_SERVER_IP_ADDRESS='your oracle ip';
$Port='1521';
PutEnv("NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8");
if(!$conn = oci_pconnect($username, $passwd, "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = $protocol)(HOST = $ORACLE_SERVER_IP_ADDRESS)(PORT = $Port)) ) (CONNECT_DATA = (SERVICE_NAME = $SERVICE_NAME) ) )")) echo("Error in Connecting to DataBase");
return $conn;
}
//Query 函数
function ora_query($sql){
global $conn_ora;
$result=oci_parse($conn_ora,$sql);
oci_execute($result,OCI_DEFAULT);
return $result;
}
//Echo 环境变量
$ORACLE_HOME = getenv("ORACLE_HOME");
echo "ORACLE_HOME=$ORACLE_HOME
\n";
$LD_LIBRARY_PATH = getenv("LD_LIBRARY_PATH");
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH
\n";
$PATH = getenv("PATH");
echo "PATH=$PATH
\n";
//连接测试
$conn_ora=php_conn_ora();
$sql="select * from sometable where rownum<=2";
$result=ora_query($sql);
oci_fetch_all($result,$array);
echo "<pre>";
var_dump($array);
echo "</pre>";

通过浏览器访问上面的脚本文件,如果一切正常,至少会有正常的环境变量结果输出,还有你的数据查询结果:

ORACLE_HOME=/oracle/product/10.2.0
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
PATH=/usr/kerberos/sbin:/oracle/product/10.2.0/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/oracle/bin
//下面省略数据查询结果

异常处理:
这种事情一般很难一蹴而就,经常会有这样那样的问题。下面是我碰到过的情况:
测试页面包含下面提示文字:

...OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME is set and points to the right directory...

解决办法:
1.检查测试脚本的环境变量输出是否正常。如果为:

ORACLE_HOME=
NLS_LANG=
PATH=

表示执行apache服务的用户没有得到正确环境变量。建议的解决办法是,将上面写入apachectl文件的文字:
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/product/10.2.0/
export PATH=$PATH:$ORACLE_HOME/BIN:
export LD_LIBRARY_PATH=/oracle/product/10.2.0/lib:$LD_LIBRARY_PATH

写道/etc/init.d/httpd文件试试,可以写到下面文字之后
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

2.如果上面的显示正常,请检查oracle安装目录是否能为执行apache服务的用户读取。如果没有,请执行

chmod a+r /path/to/oracle

本文为寻找人生的起点(http://blog.cn-ic.org)原创,如需转载,请注明出处,并保留原文链接 http://blog.cn-ic.org/?p=94。

浙ICP备18056264号-1