余小平说:“学习的目的是什么?是为了学习而去学习吗?那样就是在学习中自我毁灭,学完要学的、想学的差不多也就可以办理退休手续了...”。
非常直白的警告,知识是没有穷尽的。就算你计划倾毕生之力也学不完这个世界上你认为有用的知识,所以即使对于学习充满热情与憧憬,也必须明白学习的目的是为了在适当的时候在社会立足并且用所学的知识体现自身的价值。而不是将自己牢牢锁在象牙塔内闭门修炼,不闻世事。那是迂腐、穷酸、落后、自卑的表现,甚至有一些逃避社会责任的嫌疑。
P/S:虽然我不太喜欢余小平的说话风格,太油滑,感觉像个江湖术士而不是教育工作者。但是这句话还是对我有帮助的!
今天找到两套电子书和一篇很惊醒的文章
一套书是《晚清七十年》远流版 作者:唐德刚
一套书是《Introduction to Algorithms 2ndEdt》作者:Thomas H.Cormen Charles E.Leiserson Ronald L.Rivest Clifford Stein
文章是从CSDN看到的,看完之后真惊出一身冷汗,这分明就是我当前的写照和困惑。放在这里做一个全文转载,时刻鞭策自己在学习的道路永无止境,必须再接再厉,勇攀高峰。
写给互联网上从业的Web程序员
作者:奶瓶
程序员是一个脆弱、特殊的群体,以各种方式生存在有01的世界里。
程序员的特点:
狂躁,但是有修养
随和,但是疯癫
肯向任何人学,但是不服任何人
守约,但是不守时
感情丰富,但是单纯
……
Web程序是程序员中的一个别具特色的群体,他们有着和HTTP协议类似的无状态性、无序性、不可预测性。我这么说,是因为web程序员的出身、成分、学习途径、从业历程多种多样。Web程序员,是现今IT从业者中最具活力也最复杂的最可爱的一群人。
相比于传统的“学院派”程序员(请暂时允许我这么说),Web程序员的普遍出身都比较“贫寒”,这是行业事实,尤其是处于刚入行不久的这一大部分人中,有很多是没有上过大学,受过正常高校教育体制折磨的。高中、专科甚至初中学历的程序员比比皆是,他们通过自己的努力,掌握了一定的技能,取得了一项不错的工作。
“学院派”包括很多集团性质的大规模开发活动,外包项目,基于底层或硬件的开发,研究性的开发等等,体现在开发工具上多集中于C、C++、Ada等学院气息浓厚的语言,Java在某种程度上也可以算作其中,他们的特点是基础牢固、严谨、重视内在,又有些枯燥的味道。Web开发更倾向与灵活、开发效率和表现形式。
然而由于各种原因,很多高等学府中的学生有一种很不正确的误解,认为Web开发是低于传统开发的,没有水平的,浮躁的,实在没工作的表现,从而看不起它。相对的,很多Web从业者认为大学生毕业后去的大公司的工作是死板的,缺乏创造性的,枯燥的,没有真才实学的,更认为大学里学不到什么,从而也看不起,甚至仇视大学教育(包括一些受过高等教育的人)。这是一个非常现实的矛盾。
当然这个矛盾只是集中没有毕业的学生和从业时间不长的人群中,等到工作一段时间之后,相互接触得多了,都会觉得自己原本并没有体验到对方的真实内涵。传统开发中有很多富有创造性富有激情的内容值得互联网行业借鉴,而Web开发中千奇百怪的想法和时刻面对亿万用户的几乎无法预测的使用环境都是传统开发者觉得羡慕不已的,而两者结合更是体现了学院的严谨、知识的重要、来自用户的成败决定性,比如搜索引擎,比如企业级的B/S分布系统。
一个精熟C语言并有着丰富经验的人,转行从事Web开发是比较快的,甚至可以说是如鱼得水,但是一个做了两年PHP而又没有什么其它的语言背景的程序员,在自身发展上就会受到阻碍了。任何一门语言上升到一定高度,它所面对的问题已经不再是这门语言本身。语言只是工具,使用工具的方法才是生产效率的决定因素。熟习了语言之后,慢慢地在工作中会碰到诸如执行效率、存储方法、算法优化等更多偏向分析而不是代码艺术的内容。通常对于一个没有受过系统的计算机教育,没有受过自认为“没用”的大学培养的程序员,在这些问题面前表现都是比较盲目、无助的。很多问题需要严整的数学分析,查阅参考资料需要比较好的英文水平和数学基础,聪明一点的会马上意识到大学基础教育的重要性,多半都会后悔上课睡觉了,呵呵~~
一些人对于分析方法等抱着不以为然的态度,认识多是浮于表面,比如对于数据结构和算法的淡漠,觉得在Web开发中极少或不可能触及到这些内容。诚然,现在的 Web开发脚本语言都有丰富的函数,灵巧的使用方式,多数已经不需要再像C语言一样声名变量、创建指针、计算内存地址、写排序算法。而且基于互联网的不可预知性,也很难有一个完美的算法解决所有情况下的问题,比如排序。程序员在这种情况下都是使用语言内置的各种功能在完成操作,当然我不是说什么都要从头开始自己写,那是莽夫做的傻事,但是我想,既然用了,多多少少也应该知道函数是怎么回事。自己写的function是函数,系统提供的就不是函数了么?不求看懂源码,至少也应该知道它是在做什么。每天追求执行效率和页面执行时间的程序员,更是忽略了系统函数本身的效率问题,把所有的系统函数都想象成了汇编中的NOOP这种单元操作。
Web开发中碰到的算法问题很少么?举一个小例子:iForum论坛(前年我在上海看过)中记载用户组权限的方法,是在数据表中插入一条类似11110010011100的字符串,每一位代表一种操作,1就是表示有权限进行操作,0就是没有。这种方式很简单实用,但是它受到Varchar的长度限制(虽然255种操作已经足够复杂了),而且字符串的计算效率又是低于数字,那么有没有想过这种算法的本质是什么呢?有没有想过优化它呢?
中国古代有一套数学理论叫做“盈不足术”,例如,有十只盒子,第一个盒子里放一个盘子,第二个盒子里放两只,第三个盒子里放四只,第四个盒子里放八只……第九个盒子里放256只,第十个盒子放512只,即第N只箱子里放2^(N-1)只盘子,一共1023只。那么命题如下:在1023这个数字之内,任何一个数目都可以由这十只盒子里的几只组合相加而成(大家自己算算就知道了……呵呵)。
那么1、2、4、 8、16、32、64、128、256、512这个序列为什么有这么个魔力?这个数列的特点:1、每项是后一项的二倍,2、每项都比前面所有项的和大,而且大1。这个1就是关键,就因为这个1,它才可以按1递增,拼出总和之内任意一个整数。这个序列叫做超递增序列,它是解决背包问题的基础。
对于一个整数,假设377,它的二进制表示为“101111001”,它就是由第一只、第四只、第五只、第六只、第七只和第九只箱子拼成的,对于一个表现了9种操作的描述,377就是这个描述下的一个实例,是一个权值。
那么相比于保存这个字符串和保存这样一个数值,好处和坏处都在哪里呢~~很明显的,保存字符串的好处是运算压力小。我们可能听过一个故事,就是把这个超递增序列延伸到第64项,就是那个术士和皇帝在国际象棋棋盘上要米粒的传说。64项的和是一个天文数字!但是不要忘了,计算机本身就是一个只认识二进制的机器!(这点很多Web程序员都忽视了,很多人不知道位操作是什么玩意)有人担心数据库的int不够长,那么既然可以保存一个只有0、1组成的 varchar字符串,为什么不能保存一个十六进制的字符串,有人规定varchar只能保存01吗?十六进制串的长度正好是二进制的四分之一,而十六进制到二进制的转化是非常直接方便的。
以上就是这个权限串的由来,不知道有多少web程序员想到过这些……而一个C或汇编程序员看到这个字符串第一眼就会想起这是个十进制的15516(当然不是马上就算得出来)。
由此引出的和web相关的,比如多选框的保存,投票选项的保存等等……
Web 程序员需要学习一些数据结构、算法分析等知识,虽然在工作中不会使用得那么明显,但是这些概念是学习本身语言的一个很好的催化剂,它会让程序员更有效地理解资料上的信息,达到事半功倍的目的,也会在问题陷入苦处不得解脱时候帮助开发者理清头绪,以一个清晰的思维过程找到解决问题的突破点。
阻碍程序员学习这些的原因,第一就是基础学科不扎实,比如数学。计算机划分为理工科是非常有道理的,计算机科学建立在深厚庞大的数学系统之上,至于如何学数学……这是功夫问题了。第二是心理障碍,觉得离开学校就学不好。自然学校是学习基础学科的最好地方,但是往往工作上需要的知识更贴近实际,在实际中学习通常会比在枯燥的书本上搬东西效果更好。第三是客观原因:从业者多半工作都很忙,业余时间很少(这几乎是程序员的标志),那么学习只能在工作中见缝插针,这种学习方式需要会用巧功,会联系。第四个就是信息来源。现在适合Web程序员学习,根据Web脚本语言特点编写的基础类书籍太少了!比如数据结构类书籍多半是以C/C++/Pascal这类强类型的严谨的传统语言为描述基础,操作系统原理多是以汇编等底层脚本描述,设计思想多是以Java这种纯OO的语言为主,我没有发现有使用Perl这种怪异的语言教授数据结构的学校。
基于以上的研究结果,我们可以有条理地整理思路,多站在Web程序员的角度上考虑,做出一些适合这个特殊群体学习提高的有意义的活动。
(——NP博士,2006年6月12日夜)
From: http://conanmusic.spaces.msn.com/PersonalSpace.aspx
一套书是《Introduction to Algorithms 2ndEdt》作者:Thomas H.Cormen Charles E.Leiserson Ronald L.Rivest Clifford Stein
文章是从CSDN看到的,看完之后真惊出一身冷汗,这分明就是我当前的写照和困惑。放在这里做一个全文转载,时刻鞭策自己在学习的道路永无止境,必须再接再厉,勇攀高峰。
写给互联网上从业的Web程序员
作者:奶瓶
程序员是一个脆弱、特殊的群体,以各种方式生存在有01的世界里。
程序员的特点:
狂躁,但是有修养
随和,但是疯癫
肯向任何人学,但是不服任何人
守约,但是不守时
感情丰富,但是单纯
……
Web程序是程序员中的一个别具特色的群体,他们有着和HTTP协议类似的无状态性、无序性、不可预测性。我这么说,是因为web程序员的出身、成分、学习途径、从业历程多种多样。Web程序员,是现今IT从业者中最具活力也最复杂的最可爱的一群人。
相比于传统的“学院派”程序员(请暂时允许我这么说),Web程序员的普遍出身都比较“贫寒”,这是行业事实,尤其是处于刚入行不久的这一大部分人中,有很多是没有上过大学,受过正常高校教育体制折磨的。高中、专科甚至初中学历的程序员比比皆是,他们通过自己的努力,掌握了一定的技能,取得了一项不错的工作。
“学院派”包括很多集团性质的大规模开发活动,外包项目,基于底层或硬件的开发,研究性的开发等等,体现在开发工具上多集中于C、C++、Ada等学院气息浓厚的语言,Java在某种程度上也可以算作其中,他们的特点是基础牢固、严谨、重视内在,又有些枯燥的味道。Web开发更倾向与灵活、开发效率和表现形式。
然而由于各种原因,很多高等学府中的学生有一种很不正确的误解,认为Web开发是低于传统开发的,没有水平的,浮躁的,实在没工作的表现,从而看不起它。相对的,很多Web从业者认为大学生毕业后去的大公司的工作是死板的,缺乏创造性的,枯燥的,没有真才实学的,更认为大学里学不到什么,从而也看不起,甚至仇视大学教育(包括一些受过高等教育的人)。这是一个非常现实的矛盾。
当然这个矛盾只是集中没有毕业的学生和从业时间不长的人群中,等到工作一段时间之后,相互接触得多了,都会觉得自己原本并没有体验到对方的真实内涵。传统开发中有很多富有创造性富有激情的内容值得互联网行业借鉴,而Web开发中千奇百怪的想法和时刻面对亿万用户的几乎无法预测的使用环境都是传统开发者觉得羡慕不已的,而两者结合更是体现了学院的严谨、知识的重要、来自用户的成败决定性,比如搜索引擎,比如企业级的B/S分布系统。
一个精熟C语言并有着丰富经验的人,转行从事Web开发是比较快的,甚至可以说是如鱼得水,但是一个做了两年PHP而又没有什么其它的语言背景的程序员,在自身发展上就会受到阻碍了。任何一门语言上升到一定高度,它所面对的问题已经不再是这门语言本身。语言只是工具,使用工具的方法才是生产效率的决定因素。熟习了语言之后,慢慢地在工作中会碰到诸如执行效率、存储方法、算法优化等更多偏向分析而不是代码艺术的内容。通常对于一个没有受过系统的计算机教育,没有受过自认为“没用”的大学培养的程序员,在这些问题面前表现都是比较盲目、无助的。很多问题需要严整的数学分析,查阅参考资料需要比较好的英文水平和数学基础,聪明一点的会马上意识到大学基础教育的重要性,多半都会后悔上课睡觉了,呵呵~~
一些人对于分析方法等抱着不以为然的态度,认识多是浮于表面,比如对于数据结构和算法的淡漠,觉得在Web开发中极少或不可能触及到这些内容。诚然,现在的 Web开发脚本语言都有丰富的函数,灵巧的使用方式,多数已经不需要再像C语言一样声名变量、创建指针、计算内存地址、写排序算法。而且基于互联网的不可预知性,也很难有一个完美的算法解决所有情况下的问题,比如排序。程序员在这种情况下都是使用语言内置的各种功能在完成操作,当然我不是说什么都要从头开始自己写,那是莽夫做的傻事,但是我想,既然用了,多多少少也应该知道函数是怎么回事。自己写的function是函数,系统提供的就不是函数了么?不求看懂源码,至少也应该知道它是在做什么。每天追求执行效率和页面执行时间的程序员,更是忽略了系统函数本身的效率问题,把所有的系统函数都想象成了汇编中的NOOP这种单元操作。
Web开发中碰到的算法问题很少么?举一个小例子:iForum论坛(前年我在上海看过)中记载用户组权限的方法,是在数据表中插入一条类似11110010011100的字符串,每一位代表一种操作,1就是表示有权限进行操作,0就是没有。这种方式很简单实用,但是它受到Varchar的长度限制(虽然255种操作已经足够复杂了),而且字符串的计算效率又是低于数字,那么有没有想过这种算法的本质是什么呢?有没有想过优化它呢?
中国古代有一套数学理论叫做“盈不足术”,例如,有十只盒子,第一个盒子里放一个盘子,第二个盒子里放两只,第三个盒子里放四只,第四个盒子里放八只……第九个盒子里放256只,第十个盒子放512只,即第N只箱子里放2^(N-1)只盘子,一共1023只。那么命题如下:在1023这个数字之内,任何一个数目都可以由这十只盒子里的几只组合相加而成(大家自己算算就知道了……呵呵)。
那么1、2、4、 8、16、32、64、128、256、512这个序列为什么有这么个魔力?这个数列的特点:1、每项是后一项的二倍,2、每项都比前面所有项的和大,而且大1。这个1就是关键,就因为这个1,它才可以按1递增,拼出总和之内任意一个整数。这个序列叫做超递增序列,它是解决背包问题的基础。
对于一个整数,假设377,它的二进制表示为“101111001”,它就是由第一只、第四只、第五只、第六只、第七只和第九只箱子拼成的,对于一个表现了9种操作的描述,377就是这个描述下的一个实例,是一个权值。
那么相比于保存这个字符串和保存这样一个数值,好处和坏处都在哪里呢~~很明显的,保存字符串的好处是运算压力小。我们可能听过一个故事,就是把这个超递增序列延伸到第64项,就是那个术士和皇帝在国际象棋棋盘上要米粒的传说。64项的和是一个天文数字!但是不要忘了,计算机本身就是一个只认识二进制的机器!(这点很多Web程序员都忽视了,很多人不知道位操作是什么玩意)有人担心数据库的int不够长,那么既然可以保存一个只有0、1组成的 varchar字符串,为什么不能保存一个十六进制的字符串,有人规定varchar只能保存01吗?十六进制串的长度正好是二进制的四分之一,而十六进制到二进制的转化是非常直接方便的。
以上就是这个权限串的由来,不知道有多少web程序员想到过这些……而一个C或汇编程序员看到这个字符串第一眼就会想起这是个十进制的15516(当然不是马上就算得出来)。
由此引出的和web相关的,比如多选框的保存,投票选项的保存等等……
Web 程序员需要学习一些数据结构、算法分析等知识,虽然在工作中不会使用得那么明显,但是这些概念是学习本身语言的一个很好的催化剂,它会让程序员更有效地理解资料上的信息,达到事半功倍的目的,也会在问题陷入苦处不得解脱时候帮助开发者理清头绪,以一个清晰的思维过程找到解决问题的突破点。
阻碍程序员学习这些的原因,第一就是基础学科不扎实,比如数学。计算机划分为理工科是非常有道理的,计算机科学建立在深厚庞大的数学系统之上,至于如何学数学……这是功夫问题了。第二是心理障碍,觉得离开学校就学不好。自然学校是学习基础学科的最好地方,但是往往工作上需要的知识更贴近实际,在实际中学习通常会比在枯燥的书本上搬东西效果更好。第三是客观原因:从业者多半工作都很忙,业余时间很少(这几乎是程序员的标志),那么学习只能在工作中见缝插针,这种学习方式需要会用巧功,会联系。第四个就是信息来源。现在适合Web程序员学习,根据Web脚本语言特点编写的基础类书籍太少了!比如数据结构类书籍多半是以C/C++/Pascal这类强类型的严谨的传统语言为描述基础,操作系统原理多是以汇编等底层脚本描述,设计思想多是以Java这种纯OO的语言为主,我没有发现有使用Perl这种怪异的语言教授数据结构的学校。
基于以上的研究结果,我们可以有条理地整理思路,多站在Web程序员的角度上考虑,做出一些适合这个特殊群体学习提高的有意义的活动。
(——NP博士,2006年6月12日夜)
From: http://conanmusic.spaces.msn.com/PersonalSpace.aspx
豆瓣
晚上跑步的时候,朋友对我说最近有一个网站叫豆瓣的。其实很早之前我就一直在豆瓣看书评了,本来以为像豆瓣那样很淡然地网站知名度应该不会这么广。没想到朋友居然也知道,足令我感受到豆瓣在爱看书年轻人中的燎原之势。所以不久前我也在豆瓣注册了用户,开始使用豆瓣的其他一些功能。不仔细挖掘还真不知道豆瓣除了书评以外还有这么多让我感兴趣的话题。比如小组,就是在我很偶然的情况下打开的,没想到就是在小组频道中流连了足足一个下午,看了上海图书馆小组,上海书店小组等好一些很有价值的话题。衷心祝福豆瓣能越办越好,本且保持自己的本色。非常赞!
墩墩的两个笑话
1,说她上小学的时候她爷爷接送她上学,可是每次墩墩到学校门口的时候,她爷爷还没到。
2,说她最近再看关于心理学方面的书,我心里一阵窃喜。爱看书总是件好事情啊,接着她又来一句,就因为那本书送一条瑜伽裤。
2,说她最近再看关于心理学方面的书,我心里一阵窃喜。爱看书总是件好事情啊,接着她又来一句,就因为那本书送一条瑜伽裤。
8.24跑步日记
昨天跑了9圈,左脚踝开始出现滞疼的感觉。可能是热身没有完全做够,所以很可惜没有完成之前预想的10圈目标。其实跑步感觉最好的时候是过极限期后的那种节奏感,很轻快。完全不像刚起跑时那种气血翻涌的感觉。今天特意去查了下标准体重表,发现体重不知不觉之间超标了,下一个阶段的目标是12圈半。
Oracle+PHP,分页排序处理
原分页SQL如下:
SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."";
需要加入排序功能后的SQL:
SELECT * FROM (SELECT * FROM iteminfo ORDER BY infoid DESC) WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM (SELECT * FROM iteminfo ORDER BY infoid DESC) WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."";
2006.9.11 补充如下
其实上面的SQL居于并不能完全实现分页+排序的功能,其中的ORDER BY的字段因为正巧是数据表的主键,所以实现了排序的功能。当将这个主键字段换成其他的字段,则排序的效果就不能实现了。现改造SQL语句如下,可以实现分页+排序(非主键字段)的功能;
SELECT * FROM (SELECT * FROM (SELECT * FROM iteminfo ORDER BY disorder ) WHERE ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM (SELECT * FROM iteminfo ORDER BY disorder) WHERE ROWNUM<=".$pager ->offset().") ORDER BY disorder
经测试后通过!
SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."";
需要加入排序功能后的SQL:
SELECT * FROM (SELECT * FROM iteminfo ORDER BY infoid DESC) WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM (SELECT * FROM iteminfo ORDER BY infoid DESC) WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."";
2006.9.11 补充如下
其实上面的SQL居于并不能完全实现分页+排序的功能,其中的ORDER BY的字段因为正巧是数据表的主键,所以实现了排序的功能。当将这个主键字段换成其他的字段,则排序的效果就不能实现了。现改造SQL语句如下,可以实现分页+排序(非主键字段)的功能;
SELECT * FROM (SELECT * FROM (SELECT * FROM iteminfo ORDER BY disorder ) WHERE ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM (SELECT * FROM iteminfo ORDER BY disorder) WHERE ROWNUM<=".$pager ->offset().") ORDER BY disorder
经测试后通过!
乱七八糟
在8月的《生活》上,我看到了一张修筑青藏铁路农民工的合影(P.76) 。留意了下照片上的11个人,7个带帽子。其中3顶帽子都绣着nike的logo。
这个社会越发不注重人的内涵了,评介一个人的价值往往只看重他创造财富的能力。相反,你如果在不经意间流露出这样的不满,往往还会被冠以“酸”、“装深沉”之类的评语。
已经11天没拿到薪水了,连一本英语词典都买不了。
写书评是一桩很困难的事,将作者字字珠玑的几十万字用寥寥千字甚至百字便要刻画出其中奥义。的确有点为难。但我仍旧想把我看余华《在细雨中呼喊》的感想写出来。
这个社会越发不注重人的内涵了,评介一个人的价值往往只看重他创造财富的能力。相反,你如果在不经意间流露出这样的不满,往往还会被冠以“酸”、“装深沉”之类的评语。
已经11天没拿到薪水了,连一本英语词典都买不了。
写书评是一桩很困难的事,将作者字字珠玑的几十万字用寥寥千字甚至百字便要刻画出其中奥义。的确有点为难。但我仍旧想把我看余华《在细雨中呼喊》的感想写出来。
艰难的实名认证
姓名中带有生僻字总会在不经意间让你头大,上一回是银行划帐,这一回是淘宝的实名认证。注册淘宝差不多有1年多的时间了,因为免费的缘故所以渐渐放弃了Ebay的三星帐号,但是要使用免费的午餐也不是这么容易地,特别是对于广大姓名中带有生僻字的兄弟们,淘宝在通过他们的“支付宝”给用户的银行卡打验证款的时候,生僻字给自己带来了很大的困惑。开始使用招商银行的卡,每次总提示银行卡帐户名同实际帐户名不符,验证失败。在和淘宝的客服人员进行几次沟通后仍旧未果,这次乘办工资卡的机会,开通了农业银行的网上银行功能,并且重新去做淘宝的认证,总算天遂人愿。再经历过一次的失败和客服人员的例行沟通后,今天终于发现卡里孤零零的出现了2分钱,Hahaha,艰难的成为淘宝一员。
PHP with Oracle Work Tips
这次开发的道具购买系统由于牵涉到用户信息的修改,所以采用了PHP直接调用Oracle数据库的做法 ,到目前为止系统已经在内部测试阶段,所以写一些第一次用PHP操作Oracle数据库的心得。
我的开发环境:
本地机:
OS: Windows NT 5.1 build 2600
PHP:PHP5.1.1
PHP组件:Oci8 Support
Web Server: Apache/2.0.55
Database: Oracle 10.1
测试机:
OS: Linux 2.6.9.5
PHP:PHP 4.4.2
PHP组件:Oci8 Support
Web Server: Apache/2.0.58
Database: Oracle 10.1
开发过程中使用了Pear:DB作为数据库抽象层,下面是一些使用过程中同Mysql不同的部分:
1、连结信息
$dbname_oci = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SID=JIRA)))";
$dsn_oci = "oci8://"."username".":"."password"."@".$dbname_oci;
$dbh_oci = Db::connect($dsn_oci);
可以发现在作数据库连结信息的时候同Mysql数据库还是有较大的区别的。
2、分页
Oracle数据库的SQL语言不支持Limit子句,所以在做分页SQL语句时,要使用ROUNUM以及minus子句实现。例:
"SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."";
3,日期处理
在Mysql中,我习惯将时间用Unix时间戳的格式来存储。在输出过程中使用date函数来制定日期输出格式就行了。但是在Oracle中,日期格式是直接以"YYYY-MM-DD HH:mm:ss"的格式来存放的,这样在插入数据,编辑数据(特别是日期累加)的过程中,就需要用另外一种方式处理了。在Oracle数据库的SQL语句中,取得当前时间的SQL是这样的,例:
"SELECT sysdate FROM dual";
但是这样取到的数据可能并不是你希望获取的日期格式,那么就要用到SQL中的to_char函数了,例:
"SELECT TO_CHAR(sysdate, 'DD-MM-YY HH24:MI:SS') FROM dual";
具体的输出格式规范,可以在Google中查找to_char获取;
在日期处理过程中,发现过通过to_char输出的时间,不能够插入到日期格式的数据表中,在插入的过程中,只能将通过to_char获取的时间字符串再用to_date函数返还后,才能正确插入数据表中,就这个问题就折磨了我很长时间。
4,编码处理
这个问题发生于服务器的差异,在本地可以正常显示的中文字符在测试机中显示均为“???”,
猜测问题可能是PHP的字符设置问题,也许是Apache的字符设置问题,也可能是服务器安装 了Oci8扩展后的客户端数据库字符设置的问题,在修改php.ini和httpd.conf文件无结后,终于确定问题出现在Oci8扩展的客户端数据库 字符设置上,运行以下命令后,页面上的中文字符正常显示,问题解决!
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
重启Apache
5,自增长ID处理
Mysql数据库中,只需在建表中将ID字段设置为automatic_increment时,在INSERT的语句中,只要放入null,就可以实现ID自动增长的需要,但是在Oracle中,这种类型不被支持。所以只能通过设置一个叫做ID.Nextval的值来实现这个目的。
我的开发环境:
本地机:
OS: Windows NT 5.1 build 2600
PHP:PHP5.1.1
PHP组件:Oci8 Support
Web Server: Apache/2.0.55
Database: Oracle 10.1
测试机:
OS: Linux 2.6.9.5
PHP:PHP 4.4.2
PHP组件:Oci8 Support
Web Server: Apache/2.0.58
Database: Oracle 10.1
开发过程中使用了Pear:DB作为数据库抽象层,下面是一些使用过程中同Mysql不同的部分:
1、连结信息
$dbname_oci = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SID=JIRA)))";
$dsn_oci = "oci8://"."username".":"."password"."@".$dbname_oci;
$dbh_oci = Db::connect($dsn_oci);
可以发现在作数据库连结信息的时候同Mysql数据库还是有较大的区别的。
2、分页
Oracle数据库的SQL语言不支持Limit子句,所以在做分页SQL语句时,要使用ROUNUM以及minus子句实现。例:
"SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."+".$pager ->limit()."
minus
SELECT * FROM iteminfo WHERE typecode='".$typecode."' AND ROWNUM<=".$pager ->offset()."";
3,日期处理
在Mysql中,我习惯将时间用Unix时间戳的格式来存储。在输出过程中使用date函数来制定日期输出格式就行了。但是在Oracle中,日期格式是直接以"YYYY-MM-DD HH:mm:ss"的格式来存放的,这样在插入数据,编辑数据(特别是日期累加)的过程中,就需要用另外一种方式处理了。在Oracle数据库的SQL语句中,取得当前时间的SQL是这样的,例:
"SELECT sysdate FROM dual";
但是这样取到的数据可能并不是你希望获取的日期格式,那么就要用到SQL中的to_char函数了,例:
"SELECT TO_CHAR(sysdate, 'DD-MM-YY HH24:MI:SS') FROM dual";
具体的输出格式规范,可以在Google中查找to_char获取;
在日期处理过程中,发现过通过to_char输出的时间,不能够插入到日期格式的数据表中,在插入的过程中,只能将通过to_char获取的时间字符串再用to_date函数返还后,才能正确插入数据表中,就这个问题就折磨了我很长时间。
4,编码处理
这个问题发生于服务器的差异,在本地可以正常显示的中文字符在测试机中显示均为“???”,
猜测问题可能是PHP的字符设置问题,也许是Apache的字符设置问题,也可能是服务器安装 了Oci8扩展后的客户端数据库字符设置的问题,在修改php.ini和httpd.conf文件无结后,终于确定问题出现在Oci8扩展的客户端数据库 字符设置上,运行以下命令后,页面上的中文字符正常显示,问题解决!
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
重启Apache
5,自增长ID处理
Mysql数据库中,只需在建表中将ID字段设置为automatic_increment时,在INSERT的语句中,只要放入null,就可以实现ID自动增长的需要,但是在Oracle中,这种类型不被支持。所以只能通过设置一个叫做ID.Nextval的值来实现这个目的。
气温创新高,立此存照
上海中心气象台预报稿 上海中心气象台2006年08月14日11时发布的上海市高温报告、今天和明天天气预报: 晴到多云,今天午后到上半夜局部地区有阵雨或雷雨,明天多云。 东南风3-4级,雷雨时阵风7-8级,风向偏北。 今天最高温度37度,明天最低温度28度。 今天相对湿度40%--80%, 明天相对湿度40%--80%.
风能进,雨能进,国王不能进
“即使是最穷的人,在他的小屋里也敢于对抗国王的权威。屋子可能很破旧,屋顶可能摇摇欲坠;风可以吹进这所房子,雨可以打进这所房子,但是国王不能踏进这所房子,他的千军万马也不敢跨过这间破房子的门槛。”
-- 英国前首相 威廉皮特
-- 英国前首相 威廉皮特
近两日在KDS看到的两个比较有趣的话题
[KDS]:咨询一下55个平方小屋的装修格局
[KDS]:月收入3k,贷40w吃力伐?
第一个话题里贴出的房型图和我现在居住的房间非常类似,几乎一模一样了。看到很多的参考意见和示意图,对自己也很有启发,将来如果有机会的话,现在的这套房子肯定是需要推倒重新来规划的,至少目前的格局非常的不科学。


第二个话题同样引来了很多人的回复,原因其实很简单目前身处这种状况下的上海青年不在少数,所以问题就摆在眼前,如何解决,千奇百怪。但是绝大部分的人都会在政策洪流带动下下,被动的改变自己的生存方式。于是出现了月收入2K--20K不等的人都在讨论如何买房,何时买房,房价如何等等等等。这是一种奇怪的社会状态,大家似乎都不考虑是否应该买房,而是考虑在自己力所能及的条件下,先买了然后再想办法慢慢还。至于买近买远,买大买小,买新买旧都无足所谓。不得不对于国家政策的编撰者佩服的五体投地,一个手打,一个手哄。你们骂归骂,不满归不满。时间一到,都乖乖的去问自己的老爹老娘伸手要钱,理由及其充沛而且响亮:“房子总归要有的咯”。
[KDS]:月收入3k,贷40w吃力伐?
第一个话题里贴出的房型图和我现在居住的房间非常类似,几乎一模一样了。看到很多的参考意见和示意图,对自己也很有启发,将来如果有机会的话,现在的这套房子肯定是需要推倒重新来规划的,至少目前的格局非常的不科学。


第二个话题同样引来了很多人的回复,原因其实很简单目前身处这种状况下的上海青年不在少数,所以问题就摆在眼前,如何解决,千奇百怪。但是绝大部分的人都会在政策洪流带动下下,被动的改变自己的生存方式。于是出现了月收入2K--20K不等的人都在讨论如何买房,何时买房,房价如何等等等等。这是一种奇怪的社会状态,大家似乎都不考虑是否应该买房,而是考虑在自己力所能及的条件下,先买了然后再想办法慢慢还。至于买近买远,买大买小,买新买旧都无足所谓。不得不对于国家政策的编撰者佩服的五体投地,一个手打,一个手哄。你们骂归骂,不满归不满。时间一到,都乖乖的去问自己的老爹老娘伸手要钱,理由及其充沛而且响亮:“房子总归要有的咯”。
URL Rewrite
车东:Search Engine Friendly的URL设计
竹笋炒肉:
Apache的Mod_rewrite学习(五)
Apache的Mod_rewrite学习(四)
Apache的Mod_rewrite学习(三)
Apache的Mod_rewrite学习(二)
Apache的Mod_rewrite学习(一)
Sitepoint:mod_rewrite: A Beginner's Guide to URL Rewriting
Apache 1.3 URL Rewriting Guide
Zend:Search Engine Friendly PHP Pages
Sitepoint:Search Engine-Friendly URLs
IISRewrite Documentation
竹笋炒肉:
Apache的Mod_rewrite学习(五)
Apache的Mod_rewrite学习(四)
Apache的Mod_rewrite学习(三)
Apache的Mod_rewrite学习(二)
Apache的Mod_rewrite学习(一)
Sitepoint:mod_rewrite: A Beginner's Guide to URL Rewriting
Apache 1.3 URL Rewriting Guide
Zend:Search Engine Friendly PHP Pages
Sitepoint:Search Engine-Friendly URLs
IISRewrite Documentation
治腰伤药酒的配方
主治:腰间椎盘突出压迫神经导致的腰痛及老腰伤,对*功能无明显提升
1、鹿尾一只(10元1克,根据大小400-600元一只)不论男用女用都建议用雄尾
2、人参3支(生晒、西洋参都可)
3、杜仲3两
4、黄芪2两
5、枸杞3两
制法:
用4瓶量的高粱酒浸泡半个月即可饮用,每天饮一两左右。夏季酌情减量,浸泡时间越长效果越好。两年后只需将人参及其他药引取出,换入新的变可,鹿尾无须更换。
注意事项:
鹿尾需在买时一定要请药店师傅切片。由于鹿尾中有尾骨,自己回家很难切,不可贪图方便把整只鹿尾泡酒,效果将大打折扣。
1、鹿尾一只(10元1克,根据大小400-600元一只)不论男用女用都建议用雄尾
2、人参3支(生晒、西洋参都可)
3、杜仲3两
4、黄芪2两
5、枸杞3两
制法:
用4瓶量的高粱酒浸泡半个月即可饮用,每天饮一两左右。夏季酌情减量,浸泡时间越长效果越好。两年后只需将人参及其他药引取出,换入新的变可,鹿尾无须更换。
注意事项:
鹿尾需在买时一定要请药店师傅切片。由于鹿尾中有尾骨,自己回家很难切,不可贪图方便把整只鹿尾泡酒,效果将大打折扣。
Subscribe to:
Posts (Atom)