开始学习 Dvdwizard 源码

时不我待,本来准备继续学习 BLFS ,为做一个针对手机影音转换的系统做准备。可是,我做的东西应该是以应用层为主,这种系统层面的东西有个基本的掌握就行了,以后确有必要的时候再定制一个系统。现在计划先把这个应用工具完成一个原型再说,准备用 bash 脚本调用各种工具实现,再在此基础上弄一个图形界面(easybashgui(https://sites.google.com/site/easybashgui))。然后把这个工具集成到一个已有的微型 LiveCD 发行版中(如: Tinycore)。如果有必要,如图形界面无法商业化的应用,那么就真的要学点 Gtk 编程的东西。好在我对编程并不是很陌生,花点时间应该很快上手。现在问题是,我的 bash 脚本编程知识非常基础,没有系统的学习过,而要从头系统的找一本书来学又太漫长了,于是,就准备找一个现成的 Bash 实例来深入学习一下 Bash 编程。
Continue reading "开始学习 Dvdwizard 源码"

LFS 学习日记(修复原 LFS BOOK 中没有把 SBU 值和需要的磁盘空间解释清楚的问题 )

2010年07月01日 星期四
完善发现的LFS BOOK 开发版中措辞方面的问题。
svn co svn://svn.linuxfromscratch.org/LFS/trunk/BOOK/
取得开发版的xml源码,进入源码的顶级目录BOOK。 Continue reading "LFS 学习日记(修复原 LFS BOOK 中没有把 SBU 值和需要的磁盘空间解释清楚的问题 )"

LFS 学习日记(第2~4章:简介、分区、源码、环境设置等)

2010年06月02日 星期三

宿主机: E7400 双核64位Intel CPU,物理内存4G,华硕主板上安装的 Vmware Server 2.02 上的 UBUNTU 10.04 32位桌面版本,虚拟机 512M 内存,两个8G SCSI 硬盘。用 ssh 连接 Ubuntu 10.04 虚拟机操作系统进行 LFS 编译。为了节约资源,虚拟机没有开启图形界面。可以在 /boot/grub/grub.cfg 中将内核参数中的 "splash quiet" 替换为 "text" 禁止图形界面启动。 Continue reading "LFS 学习日记(第2~4章:简介、分区、源码、环境设置等)"

昨天去掉了网站的动态导航参数并做301定向

昨天,早上花了三个小时,晚上还花了大约两个小时,终于把原来网址中的动态导航参数暂时去掉.并把原来带参数的网址301重定向到http://java.learndiary.com中的不带参数的网址.因为原来动态导航部分与原来的代码的耦合还算小,直接把那部分注释掉就行了.基本上没有作其它改动.原来导航用的一些方法都还在里面,只不过没有调用罢了.

这些改动还没有反映到cvs库中去,因为对版本控制不熟,我在考虑究竟怎么处理这种改动.

下面还有一个问题是主页的302定向问题没有解决,可以把现在的首页写成index.jsp,输入域名后系统直接定向到这个jsp文件,不经过Struts框架的重定向处理.这样就可以返回200 OK状态码.

但是在新的index.jsp文件中怎样把原来Index2Action.java中处理的全部代码都放在index.jsp处理,或者去调用一个javabean来处理,或者可以在index.jsp中能否直接调用Struts的Index2Action.java?我不知道,只有现学现用.我的编程知识的极度缺乏就暴露出来了.

还有,向空间商问一下,可以把我们的首页直接换成indexAction.do,这样,我就可以省了这一步了,因为我试了一下,如果直接调用http://java.learndiary.com/indexAction.do,就会返回200 OK状态码.

还有,现在看来,原来的URL调用路径还是没有处理对,像什么disGoalContentAction.do什么的应该尽量简化成:disGoal.do什么的.这样好记又好看,可能对用户和搜索引擎也更加友好.

我是否应该把这样的路径都改一下,然后把原来的网址都重定向到这个新路径,借着这次去掉动态导航参数的机会,不如把事情做彻底点.

简述怎样用argouml把学习日记的源代码反向生成类图

这里以学习日记的learndiaryV0.9.0.4为例,结合最新版的ArgoUML0.22简述一下怎么样从学习日记源代码反向生成类图。其它环境为:操作系统:redhat linux9.0,jdk1.4.2_12-b03(最新的jdk6在ArgoUML0.22下工作起来据我使用好像有点问题)。

1、选择档案->汇入原始码:

2、在出现的“汇入原始码...”浏览对话框中选定源代码顶层目录:./learndiary/src/com:

3、在出现的“setup the import classpath”对话框中手工逐个把学习日记涉及到的类库加进去:



我加了的类库有:

1)Tomcat5.0中common目录下的:common/lib/servlet-api.jar

2)学习日记源码涉及到的类库,都在 ./learndiary/web/WEB-INF/lib下面,包括(保险起见,都加吧:)):

activation.jar          commons-logging.jar    jstl.jar                             standard.jar

antlr.jar               commons-validator.jar  log4j-1.2.12.jar                     struts-el.jar

commons-beanutils.jar   CVS                    mail.jar                             struts.jar

commons-digester.jar    jakarta-oro.jar        mysql-connector-java-3.1.12-bin.jar

commons-fileupload.jar  jdom.jar               rome-0.8.jar

(注:这是现在cvs库中的最新版,里面有些类库是learndiaryV0.9.0.4没有的,你如果用learndiaryV0.9.0.4的话就可以不加。)

这个过程有点麻烦,也是argouml需要改进的地方,还有,加了第一个路径后,你会发现对话框跑到主界面后面去了,你加下一个的时候需要在任务栏上的相应图标上点一下才能使它成为当前对话框继续添加classpath。

4、把classpath添加完后,点击OK,你就可以把源代码反向成类图了,这个过程可能要花几分钟,可要耐心点哟:)

这样,完成反向工程了。但是,因为argouml现在还在开发中,还没有达到一个成熟的V1.0版,据我的经验,反向的类图如果再正向生成代码是通不过编译的,比如,在类com.learndiary.website.util.Util.java中

反向后的类文件头部为:


package com.learndiary.website.util;

import byte[];

import String[];

而真正的原始文件头部为:


package com.learndiary.website.util;

import java.security.MessageDigest;

import java.util.Random;

这显然是不对的。但是,其它的绝大多数类是正确的。所以我认为,ArgoUML现在作为一个uml基础知识的学习工具和一些不需要双向生成类图和类的简单应用中可用。也就是说,我认为ArgoUML还不是一个可用的生产版本!

下面征对一个朋友的提问“servlet和struts的包是如何导入到ArgoUML中”来说一下怎样单独把这些类库反向工程成类图。

1、同上面的第1步同;

2、在同样的“汇入原始码...”浏览对话框中的“select language for import”中选择“java from classes” :

3、在出现的“汇入原始码...”浏览对话框中选定你要反向工程的类库,比如下面的struts.jar:

4、在出现的“setup the import classpath”对话框中手工逐个把编译这个类库涉及到的其它类库加进去,因为我不清楚struts.jar都需要依赖什么其它类库,所以把Struts的lib目录下的所有jar文件都加进去了,外加Tomcat5.0下面的那个:common/lib/servlet-api.jar(我也不知道是不是该用J2EE中的servlet相关的那个类库?或者用这个就行了?)

因为,我对UML的应用仅限于非常基础的类分析和活动分析,用于在后来加入的部分模块的设计中理清思路。我觉得对我来说ArgoUML已经够用了。而且,我的使用过程中也有一些肯定不正规的甚至错误的UML应用,还希望看到的朋友能够指点一二。我的电子邮件为:mdx-xx@tom.com,你最好是在网上给我留言。谢谢。

学习日记用户取回密码(重置密码)分析设计

  用户重置密码的流程设计如下:

  1、用户忘记密码,请求重置密码;

  2、检测用户是否在72小时内请求过重置密码,若是,给出提示消息,中止;否则继续;

  3、系统发一封包括用户ID和随机产生的6位Token到用户注册时留下的信箱,同时记下发送邮件的时间;

  4、系统每隔1小时检测取回密码的用户的邮件发送时间,如果没有超过72小时,则继续检测;如果超过72小时,则删除用户重置密码的记录,用户需要重新请求发送密码;

  5、用户收到重置密码的邮件,点击重置密码的链接,登录到重置密码的页面,用户输入新密码两遍;

  6、如果用户在重置密码页面输入的用户ID和Token都正确并且两次新密码一致,则系统接受新密码,并经MD5加密后,存入数据库,新密码生效,引导用户转往用户登录页面,同时,删除用户重置密码的记录;

  7、如果用户在重置密码页面输入的用户ID和Token有误或两次密码不一致或者密码字符非法,返回重置密码的页面,提示用户错误和重新输入新密码,直到用户输入正确或取消重置密码的过程;

  在分析了学习日记重置密码流程后,画出了用户重置密码用例的活动图后(尝试用ArgoUML0.18.1建模,模型地址:http://learndiary.tigris.org/source/browse/*checkout*/learndiary/old/documentation/login/design/resetPsd1.zargo,活动图地址(gif格式):http://learndiary.tigris.org/source/browse/learndiary/old/documentation/login/design/resetPsd1ActivityDiagram.gif?rev=1.1&view=markup),下面接着对其中涉及的对象实体作一检查:

  1、用户:重置密码的用户;

  2、邮件:用户重置密码的链接(包括:用户ID和取回密码的标志码)的邮件;

  3、邮件发送者:发送邮件的对象;

  4、用户重置密码的数据:保存用户ID、取回密码的标志码、发送重置密码邮件的时间的信息;

  5、用户重置密码的数据保管者:维护用户ID、取回密码的标志码、发送重置密码邮件的时间的信息的保管者;

  6、重置密码数据有效期限检查者:每隔一定时间间隔(如1小时)检查一次重置密码的数据是否有效,无效了就通知数据保管者抛弃数据;

  

改变学习日记登录方式余下的步骤

之前,已经把登录模式作了初步的改变。下面,计划一下后面的工作。

1、把重设密码纳入登录模式的改变中:

  1)、参考学习其他的程序的取回密码功能,决定运作方式;已完成,准备用jive3的方式;

  2)、设计用户取回密码的流程,尝试用ArgoUML0.20.alpha2进行建模,一方面可以完成设计,二方面可以验证argouml建模的可行性,取得大家的共识,还可以把这个模型提交给朋友们,请他们提意见和建议;

  3)、实现重设密码;

2、增加用户保存密码的功能,下一次登录可以不用输入密码;见http://www.learndiary.com/disDiaryContentAction.do?searchDiaryID=558&goalID=558&naviStr=a10ac0ad0改善系统的登录方式

和“用cookie保存用户密码登录流程http://www.learndiary.com/disDiaryContentAction.do?goalID=73”

3、实现1需要补充下面的知识:

  1)MD5加密,用于用户密码的加密(包括数据库中的和用户cookie中的);

  2)java中时间触发的使用Timer,用于重设密码失误期限的检测;

4、另外,是否考虑把邮件发送单独做成一个功能,在程序要发送各种邮件时都可以使用,例如,我在考虑是否单独增加对注册用户邮件的群发功能,或者把公告作为用户的默认订阅邮件。jive3的做法好像就是这样的。我前面作过这样的思考:

应该加入给注册用户发系统公告的功能

http://www.learndiary.com/disDiaryContentAction.do?searchDiaryID=1250&goalID=1250&naviStr=a10ac0ad0

    

学习jive的取回密码流程

  在这个问题走偏了。下了一个jivejdon2.5,却搞不定里面的中文化问题,本来里面没有取回密码的功能,可我还是尝试解决这个中文化问题。里面用的是is088591编码,在管理页面设置本地化和创建中文论坛,发中文帖子不行。问题暂时记在这里。先把既定的目标完成。我的环境是:Window2000+tomcat5+mysql4

  在jive3中有取回密码的功能,初步用导入导出sql文件在ultraedit比较的方法找到它存取回密码userID和Token的字段存在在表jiveuserprop中:

CREATE TABLE `jiveuserprop` (

  `userID` bigint(20) NOT NULL default '0',

  `name` varchar(100) NOT NULL default '',

  `propValue` text NOT NULL,

  PRIMARY KEY  (`userID`,`name`)

) TYPE=MyISAM;

数据:INSERT INTO `jiveuserprop` VALUES (1,'jiveAdminUserRange','15') , (1,'jiveThreadRange','15') , (1,'jiveMessageRange','15') , (1,'jiveTimeZoneID','Asia/Shanghai') , (1,'jiveAutoWatchNewTopics','false') , (1,'jiveAutoWatchReplies','false') , (1,'jiveAutoAddEmailWatch','false') , (2,'jiveSignatureVisible','true') , (2,'jive.passwordreset.token','1fgNz9LH') , (2,'jive.passwordreset.timestamp','1131889036888') , (2,'jive.passwordreset.last_sent','1131889036888') , (5,'jiveLocation','sds') , (5,'jiveOccupation','dsds') ;

可以看到,它里面的token是没有加密的。

当用户用jive3发的重设密码的链接:http://localhost:8080/jive3/resetPassword!default.jspa?userid=5&token=2qSwKIgy 重设密码后,有关的字段值就被删除了,如下:

INSERT INTO `jiveuserprop` VALUES (1,'jiveAdminUserRange','15') , (1,'jiveThreadRange','15') , (1,'jiveMessageRange','15') , (1,'jiveTimeZoneID','Asia/Shanghai') , (1,'jiveAutoWatchNewTopics','false') , (1,'jiveAutoWatchReplies','false') , (1,'jiveAutoAddEmailWatch','false') , (2,'jiveSignatureVisible','true') , (5,'jiveLocation','sds') , (5,'jiveOccupation','dsds') ;

jive3是隔了72小时取回密码失效,下面验证一下,发送密码后的值:

INSERT INTO `jiveuserprop` VALUES (1,'jiveAdminUserRange','15') , (1,'jiveThreadRange','15') , (1,'jiveMessageRange','15') , (1,'jiveTimeZoneID','Asia/Shanghai') , (1,'jiveAutoWatchNewTopics','false') , (1,'jiveAutoWatchReplies','false') , (1,'jiveAutoAddEmailWatch','false') , (2,'jiveSignatureVisible','true') , (2,'jive.passwordreset.last_sent','1133261729536') , (2,'jive.passwordreset.timestamp','1133261729536') , (2,'jive.passwordreset.token','ywE1T2Q0') , (5,'jiveLocation','sds') , (5,'jiveOccupation','dsds') ;

把系统时间调后72小时以后,重设密码失败:

Forums - Reset Your Password

  Welcome, Guest 

 Login 

 Guest Settings 

 Help 

 

Please enter the userID and the token exactly as shown in the password reset email you have previously received. Please note that the token is case sensitive.

An error occurred validating the userID and token that was just entered. Please confirm the userID and the token was entered exactly as shown in the email and note that the token is case sensitive. If both are exactly as shown in your email and 72 hours have passed since the email was sent, you will have to start over.

Reset your password 

UserID:   

Token:

Invalid token   

New Password:   

Confirm Password:   

  

查看数据库中相应的字段:

INSERT INTO `jiveuserprop` VALUES (1,'jiveAdminUserRange','15') , (1,'jiveThreadRange','15') , (1,'jiveMessageRange','15') , (1,'jiveTimeZoneID','Asia/Shanghai') , (1,'jiveAutoWatchNewTopics','false') , (1,'jiveAutoWatchReplies','false') , (1,'jiveAutoAddEmailWatch','false') , (2,'jiveSignatureVisible','true') , (5,'jiveLocation','sds') , (5,'jiveOccupation','dsds') ;

可以看出,字段值已经被删除了。

至此,jive3的取回密码实现的大概思路已经掌握了。