置顶随笔

[置顶]欢迎大家来我单位看看:一个很有诚意的招聘

摘要: 这是个很有诚意的招聘启事,想招几名C#开发或架构工程师,我们正从桌面版向Web版过渡,打算使用MVC架构来开发和部署产品,所以希望您是个架构方面的大师,主导产品开发升级的技术路线;或者ASP.Net的Web方向很有实战经验,我们也是很欢迎的。阅读全文

posted @ 2011-12-09 14:45 Zigzag 阅读(27) 评论(0) 编辑

2011年12月9日

欢迎大家来我单位看看:一个很有诚意的招聘

摘要: 这是个很有诚意的招聘启事,想招几名C#开发或架构工程师,我们正从桌面版向Web版过渡,打算使用MVC架构来开发和部署产品,所以希望您是个架构方面的大师,主导产品开发升级的技术路线;或者ASP.Net的Web方向很有实战经验,我们也是很欢迎的。阅读全文

posted @ 2011-12-09 14:45 Zigzag 阅读(27) 评论(0) 编辑

2010年5月12日

CodeIgniter的工作过程(1)

CodeIgniter是一个小巧优雅的php开源框架,遵循MVC模式,兼容php4、php5版本,目前CI的最新版本是1.7.3,本文旨在描述CI的从客户端请求到渲染结束的工作过程。

  • CodeIgniter的文件结构

cache用以存储缓存文件,codeigniter文件夹包含了CI的基类CI_Base,为了兼容php4和php5,CI_Base有两个版本,其中php4版本的CI_Base继承于CI_Loader。libraries里存放了大部分常用的类库,最主要的三个类:Model,View和Cotronller,自己写的任何mvc都要继承于已有的mvc类;helpers里是一些函数(方法)集合,用以辅助其他模块的方便工作。language是一个语言包,用以支持多语言。

application文件夹用以存储您的应用程序,CI已经在内部为您增加了一些子文件,包括models、views、controllers、config、errors、hooks和libraries。其中前三个文件夹是用以创建模型、视图和控制器的。您的大部分工作都应该是创建属于自己的MVC,并可在config里加入配置文件,libraries里加入一些对象和方法,用来辅助您的模型和控制器工作。而hooks也是对CI_Hooks的扩展,具体内容见下面的章节。

  • CodeIgniter的工作过程

当有一个http请求时,如http://www.mysite.com/blog/view,首先进入CI的引导文件index.php。接下来我们看看index.php里做了哪些事情。

index首先设置了应用程序的文件夹名称为application,系统的文件夹名称为system,然后做了一系列严格的判断并转换为unix风格的服务器绝对文件路径,具体说来定义了两个比较重要的常量,APPPATH,应用程序的文件夹路径,根据分析可知,该路径可以和system同级:htdocs/application/,也可以放到system文件夹里面,作为其子文件夹:htdocs/system/application/,但推荐采用第二种方式,这样显得比较整齐;BASEPATH,网站文档的基本文件路径,写出来大概是htdoc/system/;到最后,index引导文件引入了codeigniter/codeigniter.php里。接下来我们看看codeigniter里做了什么事情。

codeigniter.php一上来就引入了三个文件:Common.php,Compat.php和config/constants.php,其中Common里包含了一些函数,用于载入类库的load_class,记录日志的log_message,和引入错误页面的show_404是几个重要的函数;Compat主要解决了php4和php5中的函数不兼容问题,而constants则定义了一些读写文件权限的常量。

紧接着codeigniter载入了第一个类库,Benchmark,这个类库最简单的一个应用就是计算网页从开始到编译结束所花掉的时间,所以您在编译开始的地方打上一个标记,渲染结束后再打上一个标记,就可以算出其中花费的时间了。

接着载入了第二个类库,Hooks,这个类库和Benchmark一样都是在system\libraries下,这个类库的作用是在程序开始编译之前给您提供一个执行其他事情的机会,Hooks会您执行其他任务提供了大约8个机会,具体参见用户指南。在这里,它导入了第一个钩子。

然后分别载入了Config,URI,Router,Output等类库,接着,检查是否有cache_override的钩子,这个钩子可以允许您调度自己的函数来替代Output类的_display_cache方法,如果没有,直接调用Output的_display_cache,检查是否有缓存内容,如果有,则直接输出缓存,退出;如果没有,则接着往下执行。

此后,继续载入Input,Language,注意此前载入的类库都是一个引用;然后又一个重要的载入,那就是CI_Base对象的载入,首先会判断php的版本,如果是php4版本的,则会首先载入Loader,然后载入Base4,因为Base4中CI_Base继承于CI_Loader,而Base5中,CI_Base与CI_Loader没有继承关系。

下一步,也是真正关键的一步了,这一步开始载入了一个Controller类,这个是个实例,而不是引用;然后通过Router来解析http地址,获得控制器和方法的名字,接着看application\controllers里是否存在这样的控制器和方法,如果没有,则报错;如果有,则开始判断。

To Be Continue~

posted @ 2010-05-12 22:05 Zigzag 阅读(371) 评论(0) 编辑

2009年8月9日

理想很丰满,现实很骨感

我在安定的环境中处于一种不安定的状态。我清楚我想要的爱情和生活,但我不清楚,它们到哪里去了,更不清楚的是,我是否能得到它们。理想总是很丰满,现实总是很骨感。我承认现实和理想的差距,如果理想和现实高度一致,便没人稀罕理想了。

安定的时候想豁出去闯闯,长期安定的结果是,没有勇气和激情出去闯。我很不喜欢自己的状态,工作状态,生活状态,爱情状态,但它们却像稀有气体一样不被氧化,稳定不变。我想改变,改变思想,改变思考的方式,改变生活的态度,改变生活的方式,一成不变显然不是我想要的,但我又没有变,为什么?因为我没有勇气和决心。

我的优柔寡断是出了名的,如果不是表哥那年鼓励我去找一个导师,说不定我的现在又是另一团糟。那次之后我意识到积极主动有百利而无一害,这意味着你将会得到一次机会,不论是否会成功。天上掉下个林妹妹并砸在你怀里的几率是很小的,但另一方面,你祈祷上帝赐给你一个妞的愿望即使能得到满足你也要准备好接住她,让她砸到水泥地就不好了,那就变成了一个被破相的林妹妹,显然不是你想要的。这就是说,机遇是给准备好的人的,所以每次积极主动之前,准备好自己,即使住在狗窝走出去也要人模狗样的。跑题了。

这里有一个矛盾。一个是想要改变,另一个是不敢改变。这个矛盾是个平衡,是理想和现实的平衡。支点是什么,支点是更理想一点,还是更现实一点。我想,以我的性格这个平衡很不容易被打破,除非把我逼上了绝境,破罐子好好地摔,说不定能摔出一件艺术品。我很希望骨感的现实给我创造一个冲击,打破这个平衡,改变了自己,改变了生活,改变了工作,改变了我想要的爱情。那时我可以天地英雄义薄云天壮志凌云志在天下运筹帷幄独领风骚地说,靠,放马过来!

前些日子终于忍不住煎熬向一个姑娘表白,结果是,有两个结果。我承认我的确不够主动,想要的爱情不去争取,遇到自己喜欢的人依然犹豫不决,但我总觉得自己在做有保证的事,能让事情按照我预料的方向发展。我知道我错了,除了人民的思想能被党控制,没有几件事情是可控的,即使在料想的范围,也有Die Another Day的担忧,变数太多。所以我很担心那些抓不住的爱情和那些人,要知道,有些人一旦错过就不再。幸运的是,经过这么多年的摸爬滚打终于在自己的世界里遇到一个自己喜欢的姑娘,不幸的是,几乎一样的性格无疑会让我遥遥无妻和我的表白遥遥无期。遇到这种事情,即使酒井法子也会变成酒井没法子,因为这真的是没法子的事。

回望过去的日志,虽然都是流水账,空泛的厉害,但还觉得过的挺有内容。不写日志的结果是,我的悠久生活便没有历史可依,回想起来,一片空白。

但空泛总比空白好,所以接着写。

posted @ 2009-08-09 15:35 Zigzag 阅读(279) 评论(1) 编辑

2009年6月10日

学海无涯,回头是岸

最近遇到的几个问题,希望知道答案的过客能留下脚印。

  • 从一个mysql数据库向另一个mysql导入数据,我的做法是通过用phpMyAdmin导出数据到一个XML文件,然后导入到另一个数据库。但是没成功,不知道为何,说是XML头的问题,改了改,仍然没成功。最后的办法是通过sql文件的方式,基本可以导成功。
  • WCF的困惑。项目组最终决定不用WCF技术,但我的那个模块已经按WCF的方式架的差不多了,于是就继续写下去,但很快出现了各种各样的问题。有这样一个比方,这是一个组合的方式,比如有这样几个对象,Room,House,Building,City,Room集合组成House,House集合组成Building,Building集合组成City,但最终的操作是针对City的。如果对City的操作不是一次性完成的,每次调用都要维护状态,是用PerSeesion模式呢,还是用事务,这样做是不是存在弊端。如果把对City的组装过程也当成一个服务,那么服务将会很多,而且状态维护很多,服务到底要细分到哪种程度呢?
  • 今天遇到的listbox.SelectedValue的问题,本来对listbox.ValueMember赋值了,但是取到的SelectedValue仍然为空,为什么呢?最终找到了问题的答案,必须对listbox.DataSource数据绑定,通过Items.Add()方法添加的项是行不通的,这个可以查看Framework源代码找到问题发生的根本原因。
  • 没有了。

posted @ 2009-06-10 18:41 Zigzag 阅读(137) 评论(0) 编辑

2009年2月19日

CSS之Position详解

CSS的很多其他属性大多容易理解,比如字体,文本,背景等。有些CSS书籍也会对这些简单的属性进行大张旗鼓的介绍,而偏偏忽略了对一些难缠的属性讲解,有避重就轻的嫌疑。CSS中主要难以理解的属性包括盒型结构,以及定位。正如positioniseverything,本文将主要讲述关于position的理解,力求让您看完本文后对position有着最全面的认识。

position的四个属性值:

  1. relative
  2. absolute
  3. fixed
  4. static

下面分别讲述这四个属性。

<div id="parent">
     <div id="sub1">sub1</id>
     <div id="sub2">sub2</id>
</div>


1. relative

relative属性相对比较简单,我们要搞清它是相对哪个对象来进行偏移的。答案是它本身的位置。在上面的代码中,sub1和sub2是同级关系,如果设定sub1一个relative属性,比如设置如下CSS代码:

#sub1
{
    position: relative;
    padding: 5px;
    top: 5px;
    left: 5px;
}


我们可以这样理解,如果不设置relative属性,sub1的位置按照正常的文档流,它应该处于某个位置。但当设置sub1为的position为relative后,将根据top,right,bottom,left的值按照它理应所在的位置进行偏移,relative的“相对的”意思也正体现于此。

对于此,您只需要记住,sub1如果不设置relative时它应该在哪里,一旦设置后就按照它理应在的位置进行偏移。

随后的问题是,sub2的位置又在哪里呢?答案是它原来在哪里,现在就在哪里,它的位置不会因为sub1增加了position的属性而发生改变。

如果此时把sub2的position也设置为relative,会发生什么现象?此时依然和sub1一样,按照它原来应有的位置进行偏移。

注意relative的偏移是基于对象的margin的左上侧的。

2. absolute

这个属性总是有人给出误导。说当position属性设为absolute后,总是按照浏览器窗口来进行定位的,这其实是错误的。实际上,这是fixed属性的特点。

当sub1的position设置为absolute后,其到底以谁为对象进行偏移呢?这里分为两种情况:

(1)当sub1的父对象(或曾祖父,只要是父级对象)parent也设置了position属性,且position的属性值为absolute或者relative时,也就是说,不是默认值的情况,此时sub1按照这个parent来进行定位。

注意,对象虽然确定好了,但有些细节需要您的注意,那就是我们到底以parent的哪个定位点来进行定位呢?如果parent设定了margin,border,padding等属性,那么这个定位点将忽略padding,将会从padding开始的地方(即只从padding的左上角开始)进行定位,这与我们会想当然的以为会以margin的左上端开始定位的想法是不同的。

接下来的问题是,sub2的位置到哪里去了呢?由于当position设置为absolute后,会导致sub1溢出正常的文档流,就像它不属于 parent一样,它漂浮了起来,在DreamWeaver中把它称为“层”,其实意思是一样的。此时sub2将获得sub1的位置,它的文档流不再基于 sub1,而是直接从parent开始。

(2)如果sub1不存在一个有着position属性的父对象,那么那就会以body为定位对象,按照浏览器的窗口进行定位,这个比较容易理解。

3. fixed

fixed是特殊的absolute,即fixed总是以body为定位对象的,按照浏览器的窗口进行定位。

4. static

position的默认值,一般不设置position属性时,会按照正常的文档流进行排列。


如果本文有任何技术或表达问题,请您留言。感谢您的阅读!

posted @ 2009-02-19 22:19 Zigzag 阅读(7887) 评论(7) 编辑

2008年11月24日

花花世界集体游戏

摘要: 双休日说是出去买衣服,见天气不好,便找到了不想出去的理由,呆在家里疯狂游戏,按照最新标准,玩游戏上瘾被诊断为精神病。我大概已经成为飞跃疯人院的人了,险些上瘾。打游戏本来是寻开心的,结果老是输,不是被人骂,就是骂别人,搞得自己很不开心,烦躁到极点。war3还是少玩点好,心情好的时候和高手玩虐虐菜鸟,给自己寻点开心还不错。玩魔兽有5年多的时间了,但总体来说魔兽并没有消磨我的意志,而恰恰相反,我要感谢它...阅读全文

posted @ 2008-11-24 21:57 Zigzag 阅读(303) 评论(0) 编辑

2008年11月22日

写博是种心情

摘要: 前天跟老姜聊天,他发给我一个女孩的网站,www.lipipi.cn,说是南方都市报上报到的一个女生,至于为什么要刊登这个女孩,他也不清楚。我便进去看了看,博客建立的很早,大约是2005年建的。女孩长得乖巧灵气,一看就是个乖宝宝类型的,这款女生已经很少见了,所以值得关注。倒序地浏览了若干文章,有一点深深地打动了我,那就是对生活的态度,积极向上的,乐观的,永远怀着一个童真纯洁的心灵,这就很好。又见到小...阅读全文

posted @ 2008-11-22 20:17 Zigzag 阅读(90) 评论(2) 编辑

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:Zigzag
园龄:3年11个月
粉丝:5
关注:3

搜索

 

常用链接

我的标签

随笔分类

随笔档案

积分与排名

  • 积分 - 6184
  • 排名 - 11761

最新评论

阅读排行榜

评论排行榜

推荐排行榜