都是睡眠不足惹的祸?

      今天偶然在网上看了一篇文章《五种情况说明你睡眠不足》,其中有一点谈到:“缺少睡眠会导致情绪反复无常。一项研究发现,睡眠不足时,我们更容易闷闷不乐,因为疲惫的大脑会储存功能更多的消极记忆。缺觉者的行为表现与抑郁症患者非常相似。”

      想想前天又不小心在网聊的时候闹别扭了,实在不是我所想。原本很想跟她倾诉一些话,可是或许真的心绪不好,有点烦躁,所以话一打出来就不知所云了……唉,又有点眼困,又不愿早点睡觉,而且还在出语伤人,真是烦恼,不知不觉在网上溜达溜达便深夜了……于是,睡眠不足也就跳进了恶性循环的怪圈,令人喟叹不已。

      很显然地,今晚又熬夜了,明天还得早起上班去,又是一个睡眠不足之夜!

The requested URL /…/… was not found on this server的解决方法

      笔者在研究Phalcon官网教程提供的Demo时,按部就班一步步来做了,结果就卡在这个问题上了。将教程再从头细看,并且google+baidu伺候,广泛寻求解答,依然不得其解。后来一个同事提醒我去看下.htaccess文件是否有问题,是否缺少mod_rewrite.c这个文件?

      最后发现,其实就是Apache下伪静态html(URL Rewrite)模块未开启。仅需两步这个问题即迎刃而解了:
1.打开 Apache 的配置文件 httpd.conf 。
2.将#LoadModule rewrite_module modules/mod_rewrite.so前面的#去掉
      补充:关于rewrite模块的调用;
Apache 2.x 中URL重写,是通过mod_rewrite.so 来实现的,因此需要查看Apache 是否已经被编译
进去这个模块了,并且在Apache的配置文件httpd.conf 中已经调用了这个模块。笔者所用的Apache
2.2.22 ,rewrite模块已经编译进去了,剩下的工作只需修改apache2.2.22\conf目录下的配置文件
httpd.conf即可。

“依赖注入”学习笔记

       Phalcon使用手册中有谈到“使用依赖注入”,依赖注入的概念,对于学过JAVA的人来说,应该比较熟悉。依赖注入(Dependency Injection,简称DI),早期被称作控制反转(Inversion of control,简称IOC)。

       首先了解一下OO编程中的依赖关系:只要A类型中用到了B类型实例,A就依赖于B。而“依赖注入”这种设计模式则能消除AB之间的直接依赖关系。其实,依赖注入就是用来削减程序的耦合问题的,也就是解除强依赖,它被称为目前最优秀的解耦方式。

       不过,解除强依赖,并非是AB之间的依赖关系不复存在了,而实际上A总是还需要B提供的服务,因此只是把这种依赖的建立时间推后了,从编译器推迟到运行时了。换言之,即是在运行的时候才产生AB之间的依赖关系,把这种依赖关系在一个合适的时机“注入”运行时。

       此外,AB之间的关系,亦可抽象至“服务使用者”和“服务提供者”的角度,体现目前SOAservice-oriented architecture)的设计思路。另外来看,也可把A看作是需要构建的主系统,而B则是A系统中的Plugin,主系统A并不强依赖与任何一个Plugin,但一旦Plugin被加载,主系统便调用适当Plugin的功能。

       Phalcon中,它的依赖注入容器也是一个非常重要的概念。一个服务容器就相当于一个袋子,用于存储我们将要用到的一些服务,每当框架需要一个组件,将要求服务容器首先注册这个服务组件。Phalcon是一个高度松耦合的框架,Phalcon\DI 将使这些要用到的服务组件透明的结合在一起。Phalcon\DI 是一个实现了服务的依赖注入功能的组件,它本身也是一个容器。容器作为全局注册表,使用容器的依赖注入做为一种桥梁来解决依赖可以使我们的代码耦合度更低,很好的降低了组件的复杂性。

初识phalcon——高性能的php框架

   Phalcon是一个开源的,全堆栈的,用C语言写成的php5框架,高性能的php扩展。同时Phalcon是松耦合的,也可以根据需要使用其他组件。

    说明:由于Phalcon编译在PHP5.3.1上,所有之前的版本无法支持Phalcon,笔者使用的是PHP5.4.3。 

搭建环境,安装Phalcon

    由于笔者现在使用的开发环境是windows xp,因此暂时只探讨windows下的安装方式。使用Phalcon只需要下载一个Windows的扩展即可,下载地址:http://phalconphp.com/download。下载完毕解压后放至php安装目录下的\ext文件夹中。

    然后编辑php.ini文件,增加下面一段:

    extension=php_phalcon.dll

    保存后,重启Web服务器。

    使用如下代码,检查安装是否正确:

    <?php   print_r(get_loaded_extensions());   ?>

    在浏览器的输出内容中查找phalcon,如果发现该项,则说明phalcon安装成功:

 

建立项目,目录结构如下:

 

   

    小结:由于Phalcon已经在上述的安装步骤中被当做一个php模块加载进来了,所以不需再include任何类库到项目中了。这也是Phalcon不同于ZF等其他框架的地方。以增添PHP扩展的方式来安装一个PHP的开发框架,是完全不同于传统的PHP框架的。可对Phalcon源文件进行编译,或选择所使用的操作系统对应的编译好的文件。

 

购书有感

今天下班后,去新华书店看书,以往无论是去图书馆还是书店,都习惯直接找计算机类的书籍,今天却一反常态,直接去看文学哲学散文传记类的书籍。拿起一本《人生要经得起诱惑》,翻看起来,不觉被书中关于爱情、婚姻、诱惑等话题所吸引……书中说“在这个世界上,男人最珍贵的财产就是一个女人的心。面对诱惑,男人必须有一颗坚定的心。为了给心爱的女人圣洁的爱,男人必须拒绝一切诱惑,做一个耐得住寂寞的人。”

新华书店中间楼梯口有个供读者休息的厅,偶尔可以看见一些人坐在那儿,他们或许是休息的,也或许是等人的……说到在书店等人,我不觉回想起小时候,妈妈带我去书店的情形,那时候,我常常一进去书店就贪婪地看很久很久才确定自己要买哪些书,而妈妈总是默默地站在书店门口等我,那时候她甚至没有坐的地方,一直都是站着,有时一站就是一个下午……而令我印象最深的是她站在书店门口时我看见的她的侧脸,母爱真是伟大!

重拾PHP--常用算法

重拾PHP–常用算法



编程语言,抛开了算法就像抛弃了灵魂。因此,学习PHP,还得不忘时不时重温一下那些经典的算法,当然,最好是能找到它们的具体应用场合。

一、冒泡算法,无疑是比较经典的算法了。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以被称作冒泡排序。



$arr = array(a,f,c,b,e);

function maopao($arr){
$length=count($array);
if($length<= 1) {
return $arr;
}

$count = count($array);
for($i=0;$i<$count;$i++){
for($j=$count-1;$j>$i;$j–){
if($arr[$j] > $arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
}
return $arr;
}


二、快速排序算法

  快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。


 
function quickSort($arr){
$len = count($arr);
if($len <= 1) {
return $arr;
}
$key = $arr[0];
$left_arr = array();
$right_arr = array();

for($i=1; $i<$len; $i++){
if($arr[$i] <= $key){
$left_arr[] = $arr[$i];
} else {
$right_arr[] = $arr[$i];
}
}

$left_arr = quickSort($left_arr);
$right_arr = quickSort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}



重拾PHP--面向过程编程与基于对象编程

关于PHP面向过程编程的好处,一个说法是:PHP是一个解释性的语言——这意味着,不像那些编译型的语言,PHP它不会被编译成一个可执行的包,而是被解释并马上执行。PHP被称为是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言。仔细想想也不难理解,因为解析Web页面本身就非常的“过程化”(从一个标签到另一个标签),所以在HTML中嵌入过程化的处理代码是很直接自然的作法。  

  关于面向对象的编程(oop),不同的人可能会有不同的解释,但应该都离不了它的三大特性:封装、继承、多态。

  其中,实现多态有两种方式:覆盖、重载。(PHP貌似不支持重载?)

  在许多编程语言中,“面向对象” 与 “面向过程” 只能使用二者之一来进行编程,但是PHP语言与其他编程语言有不同之处,那就是我们可以自由的选择或者将PHP面向对象和PHP面向过程二者混用 。

  面向过程风格:

<?php echo "翔宇后生!";  ?> 

 面向对象风格:










<?php
//父类
class Myclass
{
public $name=”我是翔宇后生!”;
public static $count = 0;
//构造函数
public function construct()
{
echo ‘类”‘,
CLASS,’”已被初始化!<br />’;
}
//析构函数
public function
destruct()
{
echo ‘类”‘,CLASS,’”已被释放!<br />’;
}

public function setProperty($new)

{

$this->name=$new;

}

public function getProperty()

{

return $this->name. “<br />”;

}
public static function plusOne()
{
return “当前数字是”.++self::$count.”<br/>”;

}

}
//类继承
class MySonClass extends MyClass
{
public function newMenthod()
{
echo “来自类”.CLASS.”的新方法<br />”;
}
}

//创建一个对象
$obj=new Myclass;
//获取属性$name的值

echo $obj->name;

//销毁这个对象(显式触发析构行为)
unset($obj);
//创建一个新的对象
$newObj = new MySonClass;
//调用子类新对象的一个方法
echo $newObj->newMenthod;//调用父类的一个方法
echo $newObj->getProperty();
do{
//不生成MyClass实例,直接调用plusOne()方法
echo MyClass::plusOne();
}while(MyClass::$count < 10)
//在文件末尾输出一条消息
echo “文件结束。<br />”;
?>




  注意:类中的方法,就是属于某一个类的函数,一个类定义多少个方法就决定它的实例能有多少种行为。上面的类,就是创建了两个方法来设置和读取这个类的属性$name。PHP中,在类内,使用$this引用对象自己。在类内引用一个方法也同样使用$this,在类外引用对象则要使用对象名。箭头(->)是访问特定对象包含的属性或方法的一个面向对象构造(其实就是一个引用运算符)。

当程序执行到文件末尾时,PHP将自动释放它使用的全部资源(释放内存),这将触发MyClass对象的析构行为。

覆盖:1.覆盖继承来的属性和方法,只需在新类中重新声明这个属性或方法,就可以简单地覆盖掉它。

     2.覆盖时保留被覆盖方法的功能(在原有基础上扩展),使用parent关键字加上作用域解析符(::)





<?php

class MySonClass{

public function _construct(){

parent::construct();//调用父类的构造函数

echo “在类”.
CLASS__.”中的一个新构造函数。<br/>”;

}

}

?>


  类的属性或方法的可见度:public、private、protected、static


  注意:protected修饰的属性或方法,只能在本类或其后代类的内部访问它。

  一个方法或属性,若声明为static,则不需要生成类的实例即可访问它。只需要提供类的名字,加上作用域解释符和属性或方法的名字即可。

  静态属性的最大好处是,所有实例共享一个值,一个实例修改了一个静态属性的值,其他实例的该属性也自动随之更改。

作者:周森标
出处:
http://zhousenbiao.com
本文版权归作者周森标所有,转载请包含作者签名和出处,不得用于商业用途,否则追究法律责任!

重拾PHP--关于开发工具

俗话说,工欲善其事,必先利其器。开发工具的重要性,不言而喻。

  1.PHP开发环境搭建

  之前有用过一键安装的集成开发环境Wamp、XAMPP等。那些集成的一键安装软件确实很便捷就能搭建好开发环境。但这种方式也存在一个问题,就是自由自合的灵活性不好,同时也不利于真正的学习。所以,现在我还是老老实实地进行手动搭建为好。

  一般而言,采用Apache+PHP+MySQL组合,因为这是学习时最常见的。当然,不能仅限于此,今天我想扩展开来,了解一下其他的组合。例如Nginx+php+oracle、nginx+php+mysql+apache、php mysql nginx、LightTPD+Mysql+PHP等等。

  下面,就web服务器、PHP版本、数据库三个方面做个比较全面的简单了解。

  (1)Web服务器的选择

  Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。

  Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。Lighttpd使用fastcgi方式运行php,它会使用很少的PHP进程响应很大的并发量。

  Apache是世界使用排名第一的Web服务器。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。

  注:在相对比较大的网站,节约下来的服务器成本无疑是客观的。而有些小型网站往往服务器不多,如果采用 Apache 这类传统 Web 服务器,似乎也还能撑过去。但有其很明显的弊端: Apache 在处理流量爆发的时候(比如爬虫或者是 Digg 效应) 很容易过载,这样的情况下采用 Nginx 最为合适。

  建议方案:

  Apache 后台服务器(主要处理php及一些功能请求 如:中文url)

  Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求)

  Lighttpd 图片服务器

  总体来说,随着nginx功能得完善将使他成为今后web server得主流。

 (2)PHP版本的选择

  PHP版本主要分三支:PHP4/PHP5/PHP6。其中,PHP4由于太古老、对OO支持不力已基本被淘汰,就不在详述。而PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,所以也不详述。

  PHP5的版本主要分三支:PHP5.2之前的版本、PHP5.2.X和PHP5.3。那我们应该如何选择适用自己项目的版本呢?PHP5.2之前的版本不值得考虑,因为某些功能缺陷或者BUG。主流PHP程序对PHP5.2.X的兼容性最好,而每次版本号的升级带来的都是安全性和稳定性的改善,所以宜挑选最新的版本。目前PHP5.2系列最新的是PHP5.2.14。而如果产品是自己开发自己使用,PHP5.3在某些方面更具优势,在稳定性上更胜一筹,增加了很多PHP5.2所不具有的功能,比如内置php-fpm、更完善的垃圾回收算法、命名空间的引入、sqlite3的支持等等,是部署项目值得考虑的版本。

  除了版本号的不同,同一版本号的PHP版本也有区别,并且在选择PHP扩展的时候需要注意。

  如何查看当前运行的PHP的版本?一个很简单的办法就是phpinfo(); Thread Safety disabled是NTS,enabled是TS。

 (3)数据库的选择

  MySQL(发音为”my ess cue el”,不是”my sequel”)是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。

  ORACLE 数据库是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。

  2.PHP编程工具、编辑器选择

  常用的编辑软件有:记事本、UltraEdit、Notepad++、Eclipse PDT、PHPDesigner 7、Dreamweaver 等等。

  前面几个都用过,之前常用Notepad++,下次打算试试Eclipse PDT。

  选择一个好的工具,将会提高我们的工作效率,这是肯定的。

作者:周森标
出处:
http://zhousenbiao.com
本文版权归作者周森标所有,转载请包含作者签名和出处,不得用于商业用途,否则追究法律责任!

重拾PHP--开篇碎碎念

  我一直认为,学习就是为了应用。同样,在技术领域,学习某门技术,也正是基于所做的工作中对该技术的需求。



  就我而言,PHP虽然是我最早接触的编程语言之一,但由于之前一直在学习和运用.NET体系的知识在做项目,包括前面在公司的实习也是采用.NET作为开发工具的,因此几乎把PHP抛开一边挺久了。但,PHP语言的快捷性、跨平台性同时又是开源等特点却实实在在是.NET无法比拟的。同时,在校园招聘的时候,面试上了一家用PHP和C++来开发产品的网络公司。正是由于PHP语言本身的魅力所在以及公司开发上的需求这两个方面的原因,使我决定跟有兴趣的人一起重新系统地学习PHP,重拾PHP。

  我希望可以坚持学下去,并坚持写好学习随笔,以飨读者。也请各位不吝赐教!


作者:周森标
出处:http://zhousenbiao.com
本文版权归作者周森标所有,转载请包含作者签名和出处,不得用于商业用途,否则追究法律责任!