工作日志
利用iphone4联通版制作随身网络(个人热点的使用)
经常要在外面做东西,虽然大部分地方都有wifi,但保不齐有的地方没有无线,又必须上网。昨天跟朋友聊天,他教了我一个相当给力的方法。
如何利用个人热点制作随身网络
首先要先看你的iphone4是不是有足够的流量,如果是包月1g,你又用不完,像我一样,那就看下去吧
如果想开启个人热点,据说必须是越狱的机器,而且是4.3以上
这样在你的手机“设置”中就会有一个叫“个人热点”的选项,点击进入,选择开启“个人热点”
下面会随机产生一个“无线局域网”密码,个人建议你设置成你独有的,自己好记的密码,这样可以无线局域网就开启了
作为一个随身的无线局域网,个人热点有三种方式:wifi,蓝牙,usb
最方便的就是wifi
现在打开你的电脑,打开无线网络,搜索就会发现一个“iphone4”的网络,输入你的密码
哈哈,你就可以上网了
这样的网络流量很珍贵,所以我开启了360的流量监控,时时提醒我用了多少,千万别超
如果你想改iphone4这个无线网络的名称,你可以用usb连接itunes,在那里修改名称
好,打完收工
本博已于今天正式迁移到Linode
为了便于管理今天本博已正式迁移到了linode,linode在东京的机房步给力啊,怎么有时候会ping超时呢
特此记录以下。
游戏服务器管理-文件同步的解决方案
服务器均使用LINUX的CENTOS,同步程序使用Rsync,台湾服务器为Rsync的服务端
服务端配置
同步软件安装
yum -y install xinetd
启动rsync服务端
#rsync –daemon
配置同步软件为可用
vi /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it /
# allows crc checksumming etc.
service rsync
{
disable = no [...]
html中title没写完整造成同样的页面firefox可以显示,其他浏览器都是空白
无聊的IE,失败的IE就是个垃圾。
不过也怪自己不好,一个页面在IE中或者在基于IE内核的浏览器中显示为一片空白,但是在火狐浏览器或者其他非IE浏览器中显示正常,这种情况下问题很有可能出现在Title标签上。
这次记住了:
1.title标签未写完整。
如:《title》murray-专注于网站建设及优化《title》,
解决办法:只要把它更改完整应该就没问题。
2.title标签位置不对。
如: 《title》murray-专注于网站建设及优化《/title》
解决办法:将meta标签内和title标签位置互换即可。
原因:Content-Type的位置出现在title之前。这使得IE浏览器不知怎么解释这个数据(按照图片解析还是按照文本解析),IE一片迷茫,所以就出现空白现象。FireFox 会“阅读”完所有代码后判断编码方式,自然不会出现空白现象。
CSS之标签导致我的字体全变成斜体了
这几天在调整UCHOME的SPACE的页面,无意中调了一个东西,导致页面很多地方成了斜体。我用FONT-STYLE进行强制限制也不行,搞了我很长时间。到最后找到规律了,发现所有斜体的地方都是<em></em>标签中,难道是这个问题。
网上查了资料才知道,在HTML中,EM强调文本,通常用斜体显示。这个我还真没注意过。
在我的这个情况下,主要的作用是用来调用CLASS做显示的。解决办法就是,不想用斜体来显示的话,把EM改成SPAN。不过这样的话,我的工作量有点大,于是我在CSS中对这个标签做了重新定义,呵呵用的就是FONT-STYLE,这下起作用了。
具体这么些的,大家来COPY吧
em{font-style:normal}
如何找回Windows显示桌面图标快捷方式
本人是个糊涂人,经常把xp的显示桌面的快捷方式,然而用的有thinkpad,键盘没有windows键,这就郁闷了,没得替换。找了很多发现了制作Windows XP显示桌面图标快捷方式。
步骤如下:
新建文本,在里边输入如下
[shell]
command=2
iconfile=explorer.exe,3
[taskbar]
command=toggledesktop
单击“文件”,选择“另存为”,命名为“显示桌面.scf ”。
此时就会出现一个显示桌面的图标。哈哈,这下方便了,可以把它放到任何想放的地方,我当然就放在快速启动了
linux下LFTP的高级应用
在我刚刚发现LFTP的时候,我就注意到了它功能强大的mirror功能。
因为它可以给 mirror 命令传入参数,控制同步的行为:
–reverse 上传到FTP上,也可以使用 -R
–delete: 如果远程目录下已经没有某个文件,而本地有,则删除这个文件。
–only-newer: 只下载新的文件。mirror的判定新文件是通过文件大小和修改时间来判定的,我们可以使用–ignore-time,来屏蔽时间判定,这样mirror只通过大小来判断新闻,是同步速度加快。
–exculde: 不包含某个目录。
–verbose: 详细输出。
比如:
mirror –delete –only-newer –verbose work bak/
自动备份服务器work文件夹,到本地当前目录的 bak文件夹下,并且删除已经不存在的文件,并且只下载最新的文件,再给出详细的输出。
用 lftp 的 -e 选项,把命令直接接在 lftp 之后:
lftp -u username,password -e”mirror –delete –only-newer –verbose /work bak/” ftpIP
也可以用 at 选项指定备份的时间:
lftp at 01:00 -u username,password -e”mirror –delete –only-newer –verbose /work bak/” ftpIP
这样每天 1 点就会执行备份任务。
根据经验,ftp比rsync快很多,以后如果有大量数据备份,还是考虑使用ftp好,所以还是用好LFTP吧
关于PHP开发框架的现状
新一代框架的诞生
PHP社区在被RoR震晕后,没有陷入过多的争论。而是立即行动起来,开始了新一代框架的设计。首先出现的第一批框架几乎都是RoR的克隆。例 如PHP on Trax(连名字都借鉴Ruby on Rails)和TaniPHP、Akelos等。这些框架最大的特点就是力求100%克隆RoR,不管是采用的架构、设计模式,还是使用方法。
这几个框架一开始确实吸引了开发者的注意,但随着开发者的深入了解,这些框架头上的光环逐步褪色。晦涩难懂的架构、糟糕的性能,以及太多的限制,让这些框架难以在实际项目中运用。
此时,许多PHP开发者认为可以借鉴RoR的设计思想,但不应照搬RoR的结构和实现。为此,一些同样推崇快速开发的框架开始在PHP社区出现。这些框架中,CakePHP和Symfony可谓佼佼者。
CakePHP
CakePHP充满了RoR的影子,从ActiveRecord模式到视图的布局管理都和RoR非常相似。而且CakePHP一开始也尝试实现与?RoR一样的许多东西。但CakePHP的开发团队后来发现PHP语言和Ruby语言存在巨大区别,因此RoR中的许多设计即便能够在PHP中实现,但是缺乏实用价值的。
CakePHP在发展中逐步走出了RoR的阴影,开始探索更能发挥PHP语言本身优势的架构和实现。因此有一段时间CakePHP的API发生了剧烈的变化,以致其他开发者纷纷停下脚步处于观望状态。
但由于前期一些架构的不合理和对RoR太多的模仿,导致CakePHP的核心部分越来越难以理解,运行性能也不尽人意。而且CakePHP将一个庞大的数据库操作对象作为所有业务对象的基础。这虽然利于快速开发,但却导致对业务逻辑对象的测试非常困难。
CakePHP的Model类太复杂,超过1600行代码。这个类不但尝试实现?ActiveRecord模式,同时还尝试封装行数据集,甚至连数据库访问也包含在内。因此,?Model?类不但难以理解,而且根本无法进行单元测试。而开发者还要从?Model?类派生自己的类,并将领域逻辑实现为这些派生类的方法。
对于较小型的项目,CakePHP非常理想。出色的快速开发能力、丰富的API和详尽的文档都可以帮助开发者很快完成工作。但随着项目规模的增加,CakePHP的局限性也变得突出。
而FleaPHP则干脆完全抛弃Active Record,采用更适合脚本语言的Table Data Gateway模式来封装数据库操作。不但性能更好,而且使用上也更方面。同时仍然提供了对关联记录的自动化处理。
Symfony
Symfony是一个非常成熟的框架,大量利用了已有的开源项目。Symfony使用Mojavi的核心代码实现了框架的MVC模式,利用?Propel作为数据库抽象层。Symfony不仅功能强大,而且对Ajax有全面的支持。加上官方网站提供的大量文档和教程,并拥有一个活跃的社区,因此受到许多开发者的欢迎。
Symfony最大的问题也在于使用了太多风格迥异的开源项目来组合成框架。由于Mojavi和Propel本身都相当复杂,因此Symfony的结构非常复杂,难以理解和学习。
symfony似乎要J2EE将struts+hibernate+spring这些东西融合在一起放在PHP里使用。symfony从一开始就要告诉全世界,PHP是可以做企业级大项目的,不是你们所想的过家家游戏.
Symfony,是一个非常有活力的应用程序开发框架。但它也有一些显著的缺点:
1、使用了庞大的?Creole?和?Propel?作为数据源层。虽然实现了功能超强的数据库访问 功能和对象关系影射(真正的对象关系与关系式数据库之间的影射),但性能损失太大,代价高昂;
2、用?XML?文件配置数据库,YAML?文件配置应用程序,造成了项目的维护困难;
3.试图封装太多基础的东西,让框架应用看上去更面向对象(连$_GET、$_POST都封装)
不过对于希望选择一个框架作为企业内部系统基础架构的企业来说,Symfony的成熟度、丰富的文档和活跃的社区都是值得考虑的。毕竟企业内部系统更为看重的是稳定性和长期的支持。
商业利益与大道至简
看到PHP开发框架的潜在商业价值后,Zend.com联合IBM宣布将要推出一个真正能够发挥PHP优势的开发框架。一时间,这个消息在整个PHP社区引起了地震。大家都开始期盼这个具有“官方”背景的开发框架能够为PHP开发者指出一条正确的道路。
不过世事难测,就在Zend Framework团队公布几个代码片断后,立即就有开发者指出这些代码片段是不可能实现的。事实证明这些代码片段不过是美好的理想。限于PHP语言本身 的能力,Zend Framework最终没有实现当初承诺提供的类似RoR中ActiveRecord模式的实现品。
Zend Framework
Zend Framework大量应用了PHP5中面向对象的新特征:接口、异常、抽象类、SPL等等。这些东西的应用让Zend Framework具有高度的模块化和灵活性。同时,因为严格遵循“针对接口编程”和“单一对象职责”等原则,让Zend Framework很有希望成为一个出色的企业应用开发框架。
但不幸的是Zend Framework直到今天,也没有做出更多的突破。在使用Zend Framework开发时,框架对应用程序自身最重要的领域逻辑分离没有提供任何帮助。如果希望开发出真正健壮的企业应用,仍然需要开发者做出相当的努 力,并且在Zend Framework之上建造自己的基础设施。
针对这点,批评者指出Zend Framework虽然大量应用PHP5的新特征,但却没有将这些相对于PHP4的优势转化为能够为开发者提供帮助的东西。
对于简单和小型的项目来说,Zend Framework不但不能提高开发效率。反而因为在框架中应用了大量面向对象设计和PHP5的新特征,对开发者提出了更高的要求,间接增加了项目的开发 成本。而对于较大的项目和企业应用,Zend Framework倒是一个不错的基础。但要创建一个成功的应用,仍然需要付出不小的努力。并且要时刻注意Zend Framewok的性能问题。
Code Igniter
Code Igniter可以说是一匹黑马。Code Igniter出现之时正是Symfony和CakePHP大行其道、Zend Framework万众期待的时刻。可凭借着独特的设计思想,Code Igniter吸引了大批开发者。这点从其火爆的官方论坛就可得到证实。
Code Igniter推崇“简单就是美”这一原则。没有花哨的设计模式、没有华丽的对象结构,一切都是那么简单。几行代码就能开始运行,再加几行代码就可以进行 输出。大部分日常开发中用到的东西都可以立即找到,并且可以很容易的使用。Code Igniter可谓是“大道至简”的典范。
但是,Code Igniter本身的实现不太理想。内部结构过于混乱,虽然简单易用,但缺乏扩展能力。因此在发展到1.5系列版本时,作者不得不通过增加各种hooks来为框架提供扩展能力。
国内PHP开发框架
国内虽然过去也曾有开发者发布过一些框架,但这些框架要么太过简单,要么和某一类型的应用紧密耦合,缺乏通用性。直到进入2006年,随着PHP在国内的大量应用和追捧,真正的国产PHP开发框架才陆续发布。
FCS
FCS是从Java的Struts结构移植过来的中文PHP开发框架,使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,借 鉴了国外一些不错的思想,尤其是Java框架方面,因此熟悉Java的开发人员相对比较容易上手,其模版引擎、缓存机制、认证机制和扩展性方面均表现不凡。
在借鉴国外优秀思想的同时,FCS也更多地考虑了国内的应用开发需要。PHP4兼容、完全支持UTF-8,以及PATHINFO支持等,更加有利于国 内的主机环境和开发需要。秉着易用和易扩展的原则,FCS采用容易理解的项目、模块和操作机制加上内置的一些自动化操作方法,让应用开发变得更加简单,其 功能可以通过基类库以及各种插件的形式灵活扩展,从而满足日益增长的业务需求。正是因为具备良好的开发结构,使得FCS在开发大型应用的时候并不会显得有 很多障碍,基于构件的方式,以及配合框架的项目管理机制同样可以让你在处理大型应用的时候一展所长。
FCS力求精简的代码和全中文化的文档、注释,有利于国内PHP开发人员学习和掌握,不过根据目前的情况来看,官方的文档和社区支持目前还比较缺乏,而且对Ajax的支持还不够全面,因此国内的应用成熟度还不够。
FleaPHP
FleaPHP从发展上看,是一个具有一定历史的框架。在过去三年中,FleaPHP是作者发布了从PFC1到PFC3系列和flea1试验框架后,推出的第一个真正成熟、稳定的开发框架。
与许多其他框架不同,FleaPHP设计之初,就是围绕快速开发和充分利用PHP自身优势两个重点展开的。因此FleaPHP最大的特点就是极高的模块化程度和扩展能力。
FleaPHP框架的核心非常小,但通过灵活的配置,可以组合出各种类型的基础架构。对于简单的脚本页面,FleaPHP不需要载入MVC模式,只需 要为应用程序提供业务逻辑和数据库服务。而对于复杂的应用程序,FleaPHP可以完成从MVC模式调用、访问控制、数据验证到文件上传、图片处理等各种 各样的任务。
正是因为这种出色的定制和扩展能力,FleaPHP真正接近了“满足从简单应用到企业开发的各种需求”这个目标。而且与许多其他框架不同,?FleaPHP是一个完全在实际开发中精炼出来的框架。因此伴随着FleaPHP的发展,各种各样的实际应用也相继出现。在FleaPHP官方网站上,可 以看到各种各样的实际应用。从最简单的企业宣传网站,到复杂的社区网站、企业内部系统等等,不一而足。
FleaPHP作为一个完全国产的框架,具有完全中文化的文档、代码注释,并且在扩展功能上也注重考虑国内开发者的实际需求。因此相对于国外的各种框架,FleaPHP更容易被国内开发者所接受。
但是,也正因为处在国内,FleaPHP面临比国外同行多得多的困难。缺乏足够的贡献者、无礼的责难,以及充满怀疑的眼光,这些都让FleaPHP的 开发团队成员需要更多的奉献精神。而且由于缺乏足够的贡献者,FleaPHP框架目前在文档和扩展功能方面,与其他成熟框架相比还有不小的差距。
并且与其他所有的PHP开发框架一样,FleaPHP也没有找到帮助开发者分离应用程序领域逻辑的途径。虽然有指导文档,但对于初级开发者来说,一个可以拿来就用的领域逻辑基础会显得很实用。
反思与进取
RoR带来的冲击波还远未平息,但PHP开发者们已经在开始反思一味追随RoR的脚步是否真的能够为PHP开发带来质变?
RoR之所以能够取得如此巨大的成功,除了RoR本身的设计思想外,还有一个重要原因就是RoR充分利用了Ruby这种语言的特长。将Ruby动态语言的优势发挥得淋漓尽致。而在PHP中如果只是单纯照搬RoR中设计,则要处处遇到PHP语言本身的限制。为了绕开这些限制,开发者不得不用一些难以理解 的技巧来解决问题。但这样一来通常会导致框架的结构变得晦涩难懂、性能受到损害。
在这种反思中,Code Igniter、FleaPHP等框架就是对这个问题的最好回答。只有充分利用PHP语言本身的优势,才能真正让PHP开发变得更简单、更有趣。
发展到今天,各种PHP开发框架虽然具有各自的特色,但几乎都是为了提高开发效率而努力。但是,虽然其中部分框架注意到了提高应用程序可维护性的问题,但都没有为领域逻辑分离这个至关重要的问题提出解决方案。而这正是这些框架在未来的发展目标。
对于简单的Web应用和复杂的企业应用,两者之间的差别就注定了采用一种固定的架构是无法满足需求的。因此像FleaPHP这样能够提供自定义架构能力的框架,可以让开发者尝试用一个框架的不同组合来解决从简单到复杂的不同程度的需求。
未来,PHP将成为Web开发领域中越来越重要的平台。因此我们相信会出现更多更好的开发框架。虽然作为开发者来说,并不一定需要采用某一个框架来解决问题。但正是因为这些不断出现的框架,我们对使用PHP开发Web应用的理解和把握得到了一次次的推动。
如何配置邮箱服务器域名的解析
当我们配置好邮件服务器,服务器也开始运行了,但我们要对外进行邮件服务就需要对服务器进行域名绑定。
首先我们要做一个名为mail.murray.cn的A纪录,地址指向邮件服务器的IP
然后我们做一个头为空的MX纪录,如murray.cn,地址指向刚刚做好的A纪录,mail.murray.cn
这样,等域名解析生效,就我们的邮件服务就可以外面访问了。
PHP正则相关的几个preg函数
preg_match: 字符串比对解析。
preg_match_all: 字符串整体比对解析。
preg_replace: 字符串比对解析并取代。
preg_split: 将字符串依指定的规则切开。
preg_match字符串比对解析
语法: int preg_match(string pattern, string subject, array [matches]);
返回值: 整数/数组
内容说明: 本函数以 pattern 的规则来解析比对字符串 subject。比对结果返回的值放在数组参数 matches 之中,matches[0] 内容就是原字符串 subject、matches[1] 为第一个合乎规则的字符串、matches[2] 就是第二个合乎规则的字符串,余类推。若省略参数 matches,则只是单纯地比对,找到则返回值为 true。
preg_match_all字符串整体比对解析
语法: int preg_match_all(string pattern, string subject, array matches, int [order]);
返回值: 整数
内容说明: 本函数以 pattern 的规则来整体解析比对字符串 subject。比对结果返回的值放在数组参数 matches 之中,并依顺序值 order 排序。参数 order 的值有 PREG_PATTERN_ORDER 及 PREG_SET_ORDER 二种。若没有 order 值,则系统自动以 PREG_PATTERN_ORDER 代入 order 值中。返回值为合乎比对结果的数目,若没有或错误则返回 [...]

