2008年12月29日星期一

从无到有:LFS(LINUX FROM SCRATCH)成功

前一阵子为了装个CMS,在WIN上做了个APACHE+PHP+MYSQL的环境,用的PHPNOW,一点劲没费,轻松搞定,后来感觉用LINUX来实现更好,就装了个VM虚拟机,装了个RED HAT 9.0的环境,安装一次要用1个小时左右,安装下来1.5G,从无到有安装了APACHE,PHP,MYSQL,从网上找了几个教程参考,也没费什么劲也搞定了,成功用远程的方式安装了CMS,心里倍有成就感,可是就只用到APACHE,PHP,MYSQL这几个功能却装了有1.5G,心里很不甘心,基本上没用到什么功能,却占用了这么多空间,就有心想把这个系统安装成最小化的只运行这个CMS,然后就是重装最小化安装,不到500M,安装完后增加功能时发现包依赖程度太高,安装非常不顺利,就想用源码安装来做后来还是失败了,就在网上找最小化的LINUX,无意中发现了LFS,发现正是我需要的.于是非常兴奋,用了一晚上时间下载了LIVECD6.3,因为从网上看到,说建LFS最好是用最新的系统来做,RED HAT9太老,所以下了LIVECD.OK,虚拟机,ISO全部就位,准备安装.
说简单点,LFS就是从新做一个新的系统,要用一个成型的系统来做这个环境,因为全部是源码安装,所以需要编译环境,然后就是用宿主系统先编译一个能编译系统的环境再一步一步把系统搭建起来然后再自己编译自己

我的环境IBM THINKPAD T23 1.13gCPU 512M VM6.5,第一次做要做成功来提升下信心,所以全部按照孙海勇(冲天飞豹)的第二版 手把手教你做自己的LINUX系统,完全按照他的步骤来实现的,来想转来的,但原文的结构做的太好了,转了后会破坏了可读性,所以就做个链接,如有兴趣可按原文去实现一下.第一遍全部按步骤来做,后来做到做自己工具链时做测试太费时间,正好朋友有个IBM R50从那本上又做了一套,这个完全省略了测试步骤,全部时间大概12小时左右,比T23还早完成了,终于12小时完成自己的LFS的创建,从网上下了LYNX,和WGET两个软件,有了它两个就可以自给自足的扩展自己的LFS了,这样就从LFS到了BLFS阶段.

后记,T23上的系统不知什么原因在做最后内核编译的时候出现了错误,所以失败了,现在正准备做第二次LFS.希望这次的关键步骤尽量自己体会,按自己的理解来实现.

2008年12月18日星期四

xp下用VMWARE装 LINUX(安装篇)

早在98年就接触过LINUX了,那时是XTEAM1.0,也曾在自己的奔二300上装过,新鲜了一阵也就过去了,后来用LINUX给朋友网吧里做了个CS服务器,并在上面安装了个流媒体服务,用了一阵子后来我人去了沈阳,那服务器没人玩的了就换了.再后来兴ADSL了单线慢就用一台闲的机器用LINUX做了个双ADSL的负载服务器运行了好几个月,后来被双WAN口的交换机给替了,玩LINUX也有了点感情,自己也比较关注这方面的信息.现在又想来用LINUX来了,现在LINUX的发行版不计其数,现在好像是UBUNTU最火,不过我手头只有REDHAT的9.0,反正以前也用过,现在正好拿这个练练手,继续学习LINUX.


原来装LINUX就要把系统全干掉才能装,所以很多时候想用LINUX是不方便,但现在有了虚拟机这一切都成了现实,想用哪个就用哪个了.

安装环境:WINXP SP3 + VMWARE +REDHAT 9.0

装这个LINUX的目的主要是为了学编程,还有做网站服务器这两方面


废话不再说了,进入正题,安装LINUX

首先在要WINXP里安装虚拟机软件,这个不用再说了,就是VMWARE(官方下载页面),填个表就能得到一个序列号能用30天

安装VMWARE不再废话,安装LINUX我用的是三张ISO的RH9.0



在这里指明要用的ISO镜像

以下两步设置虚拟机的光驱启动




后面的就是安装LINUX的步骤了,这个就不用说了,根据自己需要选择,全中文的,别说看不懂

下面有一个要说的就是半路一张ISO装完后要第二个ISO的时候,开始我没弄明白白装了好几遍,后来上网找到了,这也是VM的功能如下图


2008年12月7日星期日

UML中所使用的图

--------摘自《面向对象分析与设计》(UML2.0版)
UML有13种类型的图。UML规范没有要求这些图应在什么方法学中使用,所以可以在合适的任何阶段使用。
  • 用例图对系统的使用方式分类。
  • 类图显示类和它们的相互关系(也可以显示对象)。
  • 对象图只显示对象和它们的相互关系。
  • 活动图显示人或对象的活动,其方式类似于流程图。
  • 状态机图显示生命周期比较有趣或复杂的对象的各种状态。
  • 通信图显示在某种情形下对象之间发送的消息。
  • 顺序图显示与通信图类似的信息,但强调的是顺序,而不是连接。
  • 包图显示相关的类如何组合,对开发人员有用。
  • 部署图显示安装已完成系统的机器、过程和部署制品。
  • 组件图显示可重用的组件(对象或子系统)及其接口。
  • 交互总图使用顺序图显示活动的各个步骤。
  • 时间图显示消息和对象状态的准确时间限制。
  • 复合结构图显示对象在聚合或复合中的相互关系,显示接口和协作的对象。

2008年12月1日星期一

C++良好编程习惯(二)

----摘自《C++编程金典》第二章--控制结构
  1. 在程序中合理进行缩进(缩排)处理,可显著增强程序的可读性--建议将每个缩进单位设为1/4英寸或3个空格字符。
  2. 在程序设计阶段,通常先用伪代码来“思考”程序,再将伪代码程序转换成真正的C++程序。
  3. if/else结构的两个主体语句都应缩进。
  4. 如同时有数级缩进,那么每级缩进都在上一级缩进的基础上增加相同数量的空格。
  5. 始终记得在if/else结构(或其他任何控制结构)中主置花括号,这样有助于避免它们不慎被遗忘,特别是在以后为if/esle从句添加语句时。
  6. 有的程序员在花括号内键入单独的语句之前,习惯于先输好复合语句的起始和结束花括号。这是一个很好的习惯,有助于避免不慎漏掉一个或两个花括号。
  7. 无论如何都要初始化计数器和总和。
  8. 单独用一行声明每个变量。
  9. 进行除法运算时,假如除数可能为零,请务必明确检测这一条件,并在程序中预先采取防范措施(比如打印一条出错提示信息等等),不要让潜在的问题引发严重错误!
  10. 每次需要键盘输入时都提醒用户。提醒时,应指出输入所采取的形式,以及任何特殊值(比如用户应输入哪个标记来中止循环)。
  11. 在标记控制的循环中,请在输入数据提示中,明确告诉用户哪一个是标记。
  12. 不要试图对比两个浮点数是否相等。相反,应测试两个浮点数的差值的绝对值是否小于指定的值。
  13. 声明变量时便对其初始化,有助于程序员避免以后忘记初始化数据的问题。
  14. 一元操作符应紧挨操作数,中间不含任何空格。
  15. 用整数值来控制计数循环。
  16. 每个控制结构主体中的语句都进行缩进处理。
  17. 在每个控制结构前后都留一个空行,将其同程序的其余部分区分开。
  18. 嵌套级别过多,会导致程序难于理解。通常应把嵌套控制在3级以内。
  19. 控制结构上下的垂直间距,以及在控制结构头部对控制结构主体的缩进,可为程序员营造一种二维外观,从而极大增强可读性。
  20. 在while或for结构的条件中使用终值,并使用关系操作符<=有助于避免产生值相差1错误。例如,对用于打印1到10的循环来说,循环继续条件应是counter〈=11(尽管仍然是正确的)。许多程序员仍然喜欢所谓的“零基计数”。也就是说为通过一个循环计数10次,先将counter初始化为零,再将循环继续检测条件高为counter〈10。
  21. 在for结构的初始化及自增部分,应昼只使用与控制变量有关的表达式。如还需对其他变量进行处理,不在循环之前进行(前提是它们只执行一次,比如初始化语句),就在循环主体内进行(前提是每次重复都要执行,比如自增或自减语句)。
  22. 尽管可在for循环主体中更改控制变量的值,但尽量避免这样做,因为可能导致不易察觉的逻辑错误。
  23. 尽管for之前的语句以及for之内的语句经常都可合并到for的头部,但尽量避免这样做,因为这会降低程序的可读性。
  24. 尽可能将任何控制结构的头部限制在一行之内。
  25. 不要用float或double类型的变量来执行财务计算。不精确的浮点数会造成错误,得到不正确的金额。在练习中,我们探讨了用整数执行金融计算的方法。注意:可选择由第三方厂商提供的C++类库,它们能正确地执行金融计算。
  26. 无论如何都在switch语句中提供一个default条件。在无default条件的switch语句中,那些没有明确进行检测的情况会被忽略。如包括default条件,会使程序员关注对例外情况的需求。某些情况下,不需要进行default处理。尽管switch结构中的case从句和default从句可按任意顺序排列,但作为一个良好的习惯,应将default从句列于最后。
  27. 在switch结构中,假如default从句列于最后,则不需要为它使用break语句。有的程序员包括这个break的原因是为了更有条理,以及与其他case对应。
  28. 有的程序员习惯在do/while结构中包含花括号--即使花括号并无实际用途。这样做有助于区分while结构和只包含了一条语句的do/while结构。
  29. 有的程序员觉得break和continue违背了结构化编程准则。由于这些语句的效果可通过结构化编程技术实现,所以他们不使用break和continue。