2006年06月26日

数据结构的作业之一,看了一篇介绍算法的文章,做了这个程序,压缩/解压可以实现,但是问题还是很多,没有使用价值。

  1. 不支持非ASCII字符集
  2. 只可以压缩txt文档
  3. 压缩效果不理想,文件稍大就要压很长时间

基于学习交流的想法,还是放上来,希望对自己对别人都能有所帮助,内附源码。

LZW.rar

2006年06月10日

FOSS4W今天刚刚发布了第一版ISO软件合集,专用Logo也在这一天公布,另外还附送一张广告

Logo:

公益广告:

欢迎也希望各位对开源软件报有爱心的朋友能够在你的blog或是网页上添加FOSS4W的Logo链接,这将给我们带来极大的支持!您只需要在网页中适当位置加入下面这段代码即可:



FOSS4W项目简介:FOSS4W全称为OpenSource and Free Software For Windows,是由浮图实验室发起的一项公益性项目,依托大学环境为主体,旨在培养开源文化,使windows平台下的用户也可以体验到自由软件带来的乐趣。我们提供一个平台,由志愿者来添加软件条目,不定期的统一打包发布,方便使用者,免去了到处下载的痛苦。更多介绍请到我们的页面来了解。

2006年05月29日

原文出处:http://dev.csdn.net/develop/article/50/50124.shtm
标题:数据库设计经验
作者: xlovem
这里只是阅读后的摘抄,如果对这篇文章感兴趣请阅读原文。
注解颜色说明:红色代表我没看懂 蓝色代表我认为很有用 橙色是我的注解

  • 定义标准的对象命名规范
    • 表内的列[字段]要针对键采用一整套设计规则。比如,如果键是数字类型,你可以用 _N 作为后缀;如果是字符类型则可以采用 _C 后缀
  • 获取数据模式资源手册
    • 《数据模式资源手册》  Len Silverston、W. H. Inmon 和 Kent Graziano著
  • 一定要记住过去的经验教训
  • 创建 ER 图表和数据字典
    • 有一份诸如 ER 图表等最新文档其重要性如何强调都不过分,这对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对 SQL 表达式的文档化来说这是完全必要的。
  • 检查各种变化
    • 比方说,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,我倾向于在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。
  • 采用前缀命名
    • 如果多个表里有好多同一类型的字段(比如 FirstName),你不妨用特定表的前缀(比如 CusLastName)来帮助你标识字段。
  • 标准化和数据驱动
    • 数据的
      标准化不仅方便了自己而且也方便了其他人。比方说,假如你的用户界面要访问外部数据源(文件、XML
      文档、其他数据库等),你不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状
      态等),那么产生工作流的数据也可以存放在数据库里。预先安排总需要付出努力,但如果这些过程采用数据驱动而非硬编码的方式,那么策略变更和维护都会方便
      得多。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。
  • 不活跃或者不采用的指示符
    • 增加一个字段表示所在记录是否在业务中不再活跃挺有用的。不管是客户、员工还是其他什么人,这样做都能有助于再运行查询的时候过滤活跃或者不活跃状态
  • 使用角色实体定义属于某类别的列[字段]
    • 比方
      说,当 John Smith, Engineer 提升为 John Smith, Director 乃至最后爬到 John Smith,
      CIO 的高位,而所有你要做的不过是改变两个表 PERSON 和 PERSON_TYPE
      之间关系的键值,同时增加一个日期/时间字段来知道变化是何时发生的。这样,你的 PERSON_TYPE 表就包含了所有 PERSON
      的可能类型,比如 Associate、Engineer、Director、CIO 或者 CEO 等。
      还有个替代办法就是改变 PERSON 记录来反映新头衔的变化,不过这样一来在时间上无法跟踪个人所处位置的具体时间。 
  • 用户来自世界各地 这一条似乎要求程序设计人员有较高的人文素养
    • 在设计用到网络或者具有其他国际特性的数据库时,一定要记住大多数国家都有不同的字段格式,比如邮政编码等,有些国家,比如新西兰就没有邮政编码一说。
  • 每个表中都应该添加的 3 个有用的字段
    • dRecordCreationDate,在 VB 下默认是 Now(),而在 SQL Server 下默认为 GETDATE()
    • sRecordCreator,在 SQL Server 下默认为 NOT NULL DEFAULT USER
    • nRecordVersion,记录的版本标记;有助于准确说明记录中出现 null 数据或者丢失数据的原因
  • 使用多个名称字段 这个很容易想不到
    • 建议应该把姓氏和名字当作两个字段来处理,然后在查询的时候再把他们组合起来
  • 提防大小写混用的对象名和特殊字符
    • 采用全部大写而且包含下划符的名字具有更好的可读性(CUSTOMER_DATA),绝对不要在对象名的字符之间留空格
  • 小心保留词
  • 保持字段名和类型的一致性
    • 假如字段在某个表中叫做“agreement_number”,你就别在另一个表里把名字改成“ref1”。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。
  • 删除标记
    • 在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。
  • 给文本字段留足余量
    • ID
      类型的文本字段,比如客户 ID
      或定单号等等都应该设置得比一般想象更大,因为时间不长你多半就会因为要添加额外的字符而难堪不已。比方说,假设你的客户 ID 为 10
      位数长。那你应该把数据库表字段的长度设为 12 或者 13 个字符长
      。这算浪费空间吗?是有一点,但也没你想象的那么多:一个字段加长 3
      个字符在有 1 百万条记录,再加上一点索引的情况下才不过让整个数据库多占据 3MB
      的空间。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。身份证的号码从 15 位变成 18 位就是最好和最惨痛的例子。
  • 列[字段]命名技巧
    • 我们发现,假如你给每个表的列[字段]名都采用统一的前缀,那么在编写 SQL 表达式的时候会得到大大的简化。
    • 举个简单的例子,假设有两个表:
      Customer 和 Order。Customer 表的前缀是 cu_,所以该表内的子段名如下:cu_name_id、cu_surname、cu_initials 和cu_address 等。Order 表的前缀是 or_,所以子段名是:
      or_order_id、or_cust_name_id、or_quantity 和 or_description 等。
      这样从数据库中选出全部数据的 SQL 语句可以写成如下所示:
      Select * From Customer, Order Where cu_surname = "MYNAME" ;
      and cu_name_id = or_cust_name_id and or_quantity = 1
      在没有这些前缀的情况下则写成这个样子(用别名来区分):
      Select * From Customer, Order Where Customer.surname = "MYNAME" ;
      and Customer.name_id = Order.cust_name_id and Order.quantity = 1
  • 使用系统生成的主键 这个不太看得懂,不过似乎应该有用
    • 但我觉得有必要在这里重复提醒大家。假如你总是在设计数据库的时候采用系统生成的键作为主键,那么你实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。
      采用系统生成键作为主键还有一个优点:当你拥有一致的键结构时,找到逻辑缺陷很容易。
  • 别忘了索引  可我还要问什么是索引?
    • 索引是
      从数据库中获取数据的最高效方式之一。95%
      的数据库性能问题都可以采用索引技术得到解决。作为一条规则,我通常对逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任
      何外键列[字段]采用非成组索引。不过,索引就象是盐,太多了菜就咸了。
    • 大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。还有,不要索引 memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。
    • 不要索引常用的小型表
    • 不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。
    • 不要把社会保障号码(SSN)或身份证号码(ID)选作键
      永远都
      不要使用 SSN 或 ID 作为数据库的键。除了隐私原因以外,须知政府越来越趋向于不准许把 SSN 或 ID
      用作除收入相关以外的其他目的,SSN 或 ID
      需要手工输入。永远不要使用手工输入的键作为主键,因为一旦你输入错误,你唯一能做的就是删除整个记录然后从头开始。
  • 不要用用户的键   这个不是明摆着的事么?不过也许主键不会,那外键呢?还是注意一下的好
  • 关系  这个会经常遇到,应该警惕
    • 如果两个实体之间存在多对一关系,而且还有可能转化为多对多关系,那么你最好一开始就设置成多对多关系。从现有的多对一关系转变为多对多关系比一开始就是多对多关系要难得多
  • 文档、文档、文档
    • 对所有的快捷方式、命名规范、限制和函数都要编制文档。
  • 保存常用信息 既然小,就作吧
    • 让一个
      表专门存放一般数据库信息非常有用。我常在这个表里存放数据库当前版本、最近检查/修复(对
      FoxPro)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做
      对非客户机/服务器环境特别有用。

终于看完了,有几点是新的收获,比如姓名字段的打散,字段空间的可扩展性等。不过也引发了很多问题:数据库索引、触发器等的概念和使用、对数据库速度的影响因素几个因素的权重、读写查询更新等操作对数据库的要求和各自的速度。这些都是涉及大型数据库应该考虑的,不过我们暂时还考虑不到这么高的层次,毕竟还没有经验,而且面对的也不是大型的商业项目,可以暂时不放在最重要的地位考虑。

2006年05月15日

Initiators:Sun Zhigang.Xie
Yubo,Wu Jin

Team Member:Liu Shi(Member of FoOTOo
Lab)
Jiang Zhanyong Frank

Director:Wu Jin(Member of
FoOTOo Lab)

Website:

http://wiki.hit.edu.cn/index.php/OpenSource_and_Free_Software_For_Windows

http://www.footoo.org/index.php?option=com_content&task=view&id=35&Itemid=49

Introduction:

FOSS For Windows全称为Free and Open Source
Software for Windows”
,是一项由浮图实验室发起,旨在推广开源理念、为广大用户提供替代Windows下专属软件的开源软件或免费软件列表以及自由软件发布的公益项目。项目服务采用Wiki的形式,允许任何热心开源事业的人参与到共建项目中来,您可以在此发布您的自由软件,您也可以建立您心中的最优秀的开源软件、自由软件的条目,您还可以对别人已经建立的条目做出您的批改,来共同书写一个完全替代Windows下专属软件的开源软件知识库。我们会在适当的时间将优秀软件打包集中发布,方便使用者的下载和使用。

Feature:

我们的目标是——汇聚开源力量,共建自由天空。

我们的梦想是——用国人编写的世界级优秀自由软件取代FOSS For Windows列表中的所有软件!

2006年05月09日

今天又听说了一个google的软件——google sketchup。一个用户建立3D模型的软件,可以把模型导入到google earth里,似乎以后又让用户来丰富earth里的模型库的意向。不过,我关心的是这个模型文件保存的格式.kml,一看就怀疑和xml有关,下载了一个文件用notepad++打开,发现真的是xml,原来模型数据都是用xml的格式来保存的。xml的前途真的是一片光明!各种用途真是不少,真有必要好好学学,主要是创新的使用思路!

2006年05月04日

在首页上看到爱因斯坦20世纪初出的谜语 98%人答不出 ,想了一下,发现用图论的思路有希望编程解决。
原体如下:

        1、在一条街上,有5座房子,喷了5种颜色。
  2、每个房里住着不同国籍的人
  3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物
  问题是:谁养鱼?

  提示:
  1、英国人住红色房子
  2、瑞典人养狗
  3、丹麦人喝茶
  4、绿色房子在白色房子左面
  5、绿色房子主人喝咖啡
  6、抽Pall Mall 香烟的人养鸟
  7、黄色房子主人抽Dunhill 香烟
  8、住在中间房子的人喝牛奶
  9、 挪威人住第一间房
  10、抽Blends香烟的人住在养猫的人隔壁
  11、养马的人住抽Dunhill 香烟的人隔壁
  12、抽Blue Master的人喝啤酒
  13、德国人抽Prince香烟
  14、挪威人住蓝色房子隔壁
  15、抽Blends香烟的人有一个喝水的邻居

        五个房子、五种颜色、五个人、五种饮料、五种香烟、五种宠物
        一共是30个节点,每个节点都可以和不属于自己同类的另外25个点建立连接。两点间的连接就代表了两个事物间建立了从属的关系。那么,15个提示就是15个条件,其中1、2、3、5、6、7、8、9、12、13这些条件指名哪些边是确实存在的,而10、11、14、15则隐式的给出哪些边是不存在的,第4条提示不能直接给出有用信息,可以作为验证条件。
        于是,可以先建立一个30*25的矩阵,每个点代表一个边,初值设为UNKNOWN,然后输入条件,第一类条件使得对应的边的值改变为TRUE,第二类条件使得对应边的值变为FALSE。之后,就是在这个矩阵基础之上寻找算法使得30个点恰可以分为5个线性表,并且包含值为TRUE的边,不含值为FALSE的边,找到一组后用第三组条件来验证,如果通过验证则为一组解。
        所以接下来关键就是怎样找出五个线性表了。首先应该找出值为TRUE的点组成的森林中的最长路,从这条路出发,用穷举的方法补全它的顶点。流程大概是:1 找出最长路-〉2 在这条路上增加一个节点,如果成功则进行3,如果失败,则取消最后建立连接的那条边,重复2-〉3 如果路的长度达到最大(6),则将这条路的顶点从顶点集中去除,重复步骤1~3;如果长度小于最大值(6),则重复2、3-〉直道找到五条线性表,输出成功退出;若穷举找不到结果,则输出失败标志返回。

       这个算法基本上和人脑算的思路是一样的,效率很低,不知道有没有什么更高效的算法。我的这个算是抛砖引玉了,等待高手的指导。

2006年04月19日

keyword: jdom  donews xml

学了jdom的皮毛,总想做点什么试验,于是就试着提取donews blog的评论。
建了两个内含类,SearchArticles用于提取blog首页的文章入口URL,并提取其中的每篇文章的rss链接地址,保存在ArrayList中。SearchComments用于提取一篇文章的所有评论,并输出打印。
要分析提取首先要知道XML文件的树型结构,donews blog的结构如下(你也可以在任何一个blog首页后链接加上"/rss.aspx" ,例如:“blog.donews.com/grammerliu/rss.aspx” ):

<rss version="2.0">
−<channel>
 <title>记录我的人生岁月</title>
 <link>http://blog.donews.com/grammerliu/</link>
 <description>人生百味,程序万态</description>
 <dc:language>zh-CHS</dc:language>
 <generator>.Text Version 0.958.2004.2001</generator>
−<item>
 	<dc:creator>死牛</dc:creator>
 	<title>你在游戏中会是什么角色?</title>
	−<link>
http://blog.donews.com/grammerliu/archive/2006/04/19/836957.aspx
</link>
 	<pubDate>Wed, 19 Apr 2006 19:19:00 GMT</pubDate>
	−<guid>
http://blog.donews.com/grammerliu/archive/2006/04/19/836957.aspx
</guid>
	−<wfw:comment>
		http://blog.donews.com/grammerliu/comments/836957.aspx
	</wfw:comment>
	−<comments>
		http://blog.donews.com/grammerliu/archive/2006/04/19/836957.aspx#Feedback
	</comments>
	<slash:comments>0</slash:comments>
	−<wfw:commentRss>
		http://blog.donews.com/grammerliu/comments/commentRss/836957.aspx
	</wfw:commentRss>
	<trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=836957</trackback:ping>
	−<description>
		<p>http://vega.cs.tku.edu.tw/~u7197120/RPG_Test.htm <br/></p><p>刘奭的個人資料</p><table width="49%" height="184" border="1"><tbody><tr><td rowspan="6" colspan="2"><div align="center"><img width="109" height="133" src="http://vega.cs.tku.edu.tw/%7Eu7197120/face/tsb.jpg" alt=""/></div></td><td width="36%"><div align="center">攻擊</div></td><td width="31%"><div align="center">63</div></td></tr><tr><td><div align="center">防禦</div></td><td><div align="center">62</div></td></tr><tr><td><div align="center">敏捷</div></td><td><div align="center">81</div></td></tr><tr><td><div align="center">耐力</div></td><td><div align="center">41</div></td></tr><tr><td><div align="center">意志</div></td><td><div align="center">93</div></td></tr><tr><td><div align="center">智商</div></td><td><div align="center">81</div></td></tr><tr><td width="17%"><div align="center">種族</div></td><td width="16%"><div align="center">天使</div></td><td><br type="_moz"/></td><td><br type="_moz"/></td></tr><tr><td><div align="center">職業</div></td><td><div align="center">弓箭手</div></td><td><div align="center">屬性</div></td><td><div align="center">風</div></td></tr></tbody></table><br/>呵呵,挺有趣。<br/>风,不错,风中飞翔的天使。<br/><img src ="http://blog.donews.com/grammerliu/aggbug/836957.aspx" width = "1" height = "1" />
	</description>
</item>

</channel>

</rss>

需要注意的只有两点:前面是对于整个blog的信息介绍,每篇文章都保存在一个item结构中。其中,先是说明命名空间的标签在用jdom提取的时候要注意用getChild(string arg0 , Namespace arg1)相应的指明Namespace,否则将不能成功提取节点元素。


代码如下:

package edu.hit.ibmclub.liushi;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;

public class DonewsComment {

    /**
     * @param args
     * @throws IOException 
     * @throws JDOMException 
     */
    public static void main(String[] args) throws JDOMException, IOException {
        
        //SearchComments( "http://blog.donews.com/grammerliu/comments/commentRss/816014.aspx");
        
        String startPoint = "http://blog.donews.com/grammerliu/rss.aspx";	//修改这个URL,可使其指向别的blog
        ArrayList comments = SearchArticles(startPoint);
        Iterator itera = comments.iterator() ;
        while(itera.hasNext()){
            String url = (String)itera.next() ;
            SearchComments(url);
            
        }
    }

    public static ArrayList SearchArticles(String url) {
        SAXBuilder factory = new SAXBuilder();
        
        Document doc = null;
        Element rssRoot = null;
        Element channel = null;
        List items = null;
        ArrayList commentsURL = null;
        
        try{
            doc = factory.build( url);
            rssRoot = doc.getRootElement() ;
            
            channel = rssRoot.getChild( "channel");
            //System .out .println(channel.getName()) ;
            String bloggerTitle = channel.getChildText ( "title");
            String linkURL = channel.getChildText ( "link");
            items = channel.getChildren( "item");
            commentsURL = new ArrayList();
            System.out.println(bloggerTitle + "\n" + linkURL + "\n") ;
            
        }catch(Exception e){
            
        }
        
        Iterator node = items.iterator();
        while(node.hasNext()){
            Element item = (Element) node.next() ;
            
            Element commentRss = item.getChild( "commentRss" ,Namespace.getNamespace( "http://wellformedweb.org/CommentAPI/"));
            
            commentsURL.add( commentRss.getText());
            //System.out.println(commentRss.getText());
            
        }
        
        return commentsURL;
        
    }
    public static void SearchComments(String url) {
        SAXBuilder factory = new SAXBuilder ();
        if(url == null){
            return;
        }
        try{
            Document doc = factory.build( url);
            Element root = doc.getRootElement() ;
            Element channel = root.getChild( "channel");
            String title = channel.getChildText( "title");
            String link = channel.getChildText( "link");
            System.out.println("Title:"+ title + "\nLink:" + link) ;
            List item = channel.getChildren( "item");//.getChildren() ;
            
            Iterator node = item.iterator();
            int i=1;
            while(node.hasNext() ){
                Element comment = (Element) node.next();
                System.out.println(i+"."+ comment.getChildText( "description")+"\n" + "————"+comment.getChildText( "creator" , Namespace.getNamespace( "http://purl.org/dc/elements/1.1/"))) ;
                i++;
            }
            
            System.out.println() ;
        }catch(Exception e){
            
        }
    }
}


提取的结果如下:


记录我的人生岁月
http://blog.donews.com/grammerliu/

Title:从今开始
Link:http://blog.donews.com/grammerliu/archive/2006/04/19/836805.aspx
1.看见了,那个小计数器,呵呵
————磁盘碎片

Title:我的话语权
Link:http://blog.donews.com/grammerliu/archive/2006/04/19/836728.aspx
1.如果是在紫丁香上,很多字眼都会被莫名其妙的审查,google还算开放的了呢
————磁盘碎片

Title:2006-04-16  调查问卷
Link:http://blog.donews.com/grammerliu/archive/2006/04/16/831343.aspx
1.被我发现了,“死牛”就是你呀,哈哈~~
————钊
2.嗯,就是我。
————死牛

Title:Renju归来
Link:http://blog.donews.com/grammerliu/archive/2006/04/15/829423.aspx
1.搞了半天,就是五子棋阿。祝贺……第几名阿?
————talengyan
2.你语文怎么学的呀?不说了是第六么,真是的,小心贺老找你!
<br>小声地告诉你:入党申请什么的我还没写过了。入党我没想过。
————死牛
3.居然不小心错过了
<br>不然肯定拿第一啦,哈哈
————Kimi
4.这么狂?哈哈,哪天先比划比划?!16928982工大五子棋爱好者之家
————死牛

Title:高级程序员的多女友处理原则
Link:http://blog.donews.com/grammerliu/archive/2006/04/13/826377.aspx
1.well, I misunderstand u at the first sight of this topic. However, it’s clear!
————frank
2.java程序员有一点问题,就是你根本不知道你的女朋友什么时候被处理掉……
<br>也就是说,一旦决定抛弃你的女朋友的时候,你不知道你的“前”女友是否还在你身边的某个地方……
<br>挺渗人的
————磁盘碎片
3.看来把编程序和找女朋友联系在一起,使程序员的通病
————lianggo
4.没办法,大多找不到女朋友,只好纸上谈兵,汗。
————死牛

Title:第三堂党课
Link:http://blog.donews.com/grammerliu/archive/2006/04/11/823549.aspx
1.我妈今天连打了两个电话催我回来,居然就是要逼我入党!
<br>死牛啊,你那些思想汇报之类的有没有电子版发给我哈
————talentyan
2.跟你说过无数次了
<br>
<br>我要加入的是共产党,在这里就是中国共产党
<br>
<br>现今存在的是党员的问题和制度的问题,党本身的属性和特性是没有错的
<br>
<br>抛开功利化的理由去说话,我要做的事情,不需要看别人的表现,而我相信我的所作所为符合一名共产党员的要求,也相信我的所作所为应当由共产党的理念和制度来约束(注意,不是特指哪一个党),所以我要加入共产党
<br>
<br>信不信仰为人民服务是一回事,信不信仰共产主义又是另一回事
<br>相不相信共产党是一回事,相不相信中国共产党又是另一回事咯
<br>
<br>给你两个选择:
<br>1.共产党本身就没什么意义
<br>建议你多用政治的思路去分析一些问题,了解一下“讲政治”的内涵
<br>2.中国共产党没什么意义
<br>你可以选择问心无愧的心态或加入并改造之的心态
<br>
————某人
3.说得不错,可以接受。
<br>但是这一点还是不太同意:
<br>现今存在的是党员的问题和制度的问题,党本身的属性和特性是没有错的
<br>党本身的正确性是需要实践来证明的,单独信仰上的正确性不足以说服信仰之外的人,用中国共产党的话说就是“事实是检验真理的唯一标准”。这一点不是争论可以解决的,需要时间来证明。
<br>对于政治,确实以前不太关心,不过以后离不开它,还是应该关心,和信仰无关。
<br>你说的话,算是80%可以接受。
————刘奭

Title:数据结构的大作业——航空售票系统
Link:http://blog.donews.com/grammerliu/archive/2006/04/10/821740.aspx
1.呵呵,我也要好好学C++
————frank
2.没什么,其实用java作也挺好的,反正学的是数据结构,语言的选择都是次要的
————Kimi
3.咱们的数据结构可以用java做么?
————磁盘碎片
4.据称可以
————wywcgs

Title:哈尔滨06年的第一场春雨
Link:http://blog.donews.com/grammerliu/archive/2006/04/09/819832.aspx
1.做卫生的还有我
————磁盘碎片
2.所以才更不好意思丢下不管了。
————死牛
3.你好像没来吧?
————frank
4.不好意思 原本想去的 后来一看表都58了 就没过去 懒吧
————死牛

Title:交流
Link:http://blog.donews.com/grammerliu/archive/2006/04/08/819171.aspx
1.说起交流,刚上完选修课“成功心理学”的我也很深有感触啊。确实是一门好课,虽然有的活动是老套了一点,但是能认识那么多真心(至少目前是真心的)的朋友,确实是一件益事。不知道你上过没有,虽然我知道你在“成功心理”这方面不需要更多的指导,但是我还是推荐你去上一次。
————frank
2.可以考虑,先把想上的选修都上了再说。
————死牛

Title:读《未来的社区》的几点惊奇发现
Link:http://blog.donews.com/grammerliu/archive/2006/04/06/816014.aspx
1.让我想起了我的读书笔记“Feel Quality Education in America”,呵呵
————frank
2.记得刚入学的时候,学生会要求每个人添一份个人情况调查表,其中有一个问题,大概意思是说,当你离开这个世界的时候,你希望世人如何评价你呢?这个问题与“我想要人们因为什么而记住我”有类似的含义;我当时思索了好久,也不记得是怎么回答的啦。如果是刘奭会怎么回答呢?
————kimi
3.我只希望人们能够记住我,越久越好。能够被更多的人记住,能够被更多的普通人记住,而不仅是被列入史册,能在口碑中流传将是我生命的延续,让我可以觉得自己还活在世上
————刘奭
4.faint
<br>这样太在意别人的看法了吧?
<br>别人怎么看我是他们自己的问题,只要自己感觉爽了,那就好了。以别人来证明自己的存在,不是什么好方法啊
————wywcgs
5.一个人只活在自己心里,他就只属于自己,死去后就灰飞烟灭;当他活在别人心中,便摆脱的生命的肉体形式,精神长存。我不愿当我的肉体消失时,留不下任何可以证明我存在过的东西,所以才可望精神的留存,算作是我对人世的留恋吧。
————死牛

Title:奭说新语(一)
Link:http://blog.donews.com/grammerliu/archive/2006/04/05/813165.aspx
1.这名字起得好啊
<br>要不人还不认识
————零度
2.刘大师的讲座,不听不行啊!
————ocean
3.别,大师听这怎么就那么像**功呢?
————死牛
4.全面发展固然重要,但是对于那些全面发展有阻力的人,是不是应该考虑发展特长呢?试想,一只营养不良的豪猪,与其长出浑身短短、钝钝或软软的刺,还不如象侏罗纪的恐龙学习,在某个部位集中生长质地坚硬的刺,倒也是一门绝技!现在也有很多一着先吃遍天的例子。而且这个社会还是很重视特长的,这就是为什么用人单位的履历表中总要有“特长”这一项;陌生人相识目无全牛,第一印象总是你的某一个或是某些特点或特长;这可能也是目前社会分工细化的一个必然趋势。不过,我的部长还是很全面的,这就是相处时间长了,却总是给人带来新鲜的感觉,也是我比较欣赏“死牛”的地方。
<br>呵呵,说多了,期待“奭说新语”的升级版本!
————kimi
5.谢谢大哥的夸奖,不过我指的&quot;豪猪&quot;不是一个人,而是一个集体,每个人只是一棵刺,强调的就是个性化的发展,独专一长。咱俩的观点并无矛盾。
————死牛
6.能不能不说豪猪?我不喜欢!原因我就不在这里说了
————frank



2006年04月13日

今天下午数据结构课偶得:
c程序员:不得不仔细处理的自己处理每一个女友,要注意女友的有效范围,进出函数、返回调用、实参形参,真真假假、虚虚实实,弄不好就错把小丽当成了小美,惹得系统报警,后果严重。
c++程序员:和C没有什么不同,被整得团团转,唯一的好处是可以取个别名,以防随便就弄错了,还算是有点进步,减少了危机产生的可能性,但是还是不爽。特别是new,如果不手动出手的话,早晚有一天会找上门,找你的麻烦,所以一定要随时掌握手中的资源,记得收尾工作一定做好。
Java程序员:相比之下,Java的优势很明显,完全不用考虑后期收尾的工作,因为有别人专门给你做,完全自动,不留后患,你大可不断的、毫无顾虑的寻找新目标。

以上不代表本人情感观点,纯技术分析 。

2006年03月29日

下午要编数据结构的大作业,开始用C++编,结果搞不清include的结构,又有两个类互相要使用对方作为参数,交织在一起,像一团乱麻。

上网搜了一下C++ include,搜到这个网站,原来include和namespace是这样用的,结构感觉有些像Java的package,但是远没有他清楚,还需要.h文件的配合,整得那么乱,不像Java里只需要指明包的名称,使用时直接import就行了。

应该是没学过的原因,感觉C++用起来特别的不顺手,什么都要自己做,连一个基本的Date Time类都是自己写的,真是从零件开始造车。

晚上接着编,再体验一下C++的风格。

2006年03月27日

由于习惯了使用eclipse,可是数据结构的可又要用C++来编,所以打算给eclipse装上cdt。

网上下载了cdt的包(注意eclipse的版本,eclipse3.1要用cdt3.0.*),解压,添加到eclipse/plugins eclipse/features 里,就完成了cdt的安装。

之后打开eclipse,发现没有显示cdt插件,打开 Help->Software Updates->Manage Configuration,将“Show disable features”点选开,在左边很容易就会找到Eclipse C/C++ Development Tools 3.0.2 的选项,发现前面的图标是被禁止的样式,于是启用。这样在New里就可以看到C/C++的相关项目了。

接下来,写了点代码,又发现不能编译。提示“Launch failed no binaries”,缺少目标二进制文件,也就是没有编译。想来是cdt不提供编译器,只好去网上下MinGW(但是不知道为什么不用VC的编译器,环境变量里应该自动设过了)。

安装之后,还需要手工设定系统环境变量。(我的电脑-〉属性-〉高级-〉环境变量)
在path中添加你的MinGW安装路径,如下:   e:/MinGW/bin
为了说得明白些,对新手有点帮助,具体举个例子:
比如现在我的MinGW安装在E盘根目录下,文件夹名字为mingw
%path% —— 带指环境变两种原有的值(value),这个不用改,直接在后面添加就行。
%MinGW_Path% —— 你的MinGW安装路径,我这里就是“e:/mingw”

那么,需要做的就是在path的值里增加这样一段(一般在最后,方便)

                              %path%;%MinGW_Path%/bin
具体说就是这样                 ;e:/mingw/bin

注意最前面的是分号,表示与前面的参数分开。
之后按照这种方法,将lib、include也设定好,指向%MinGW_Path%/lib  %MinGW_Path%/include

这样,再启动eclipse,你就可以建立并编译你的C/C++工程了。

用了这个才发现编译C/C++真的需要生成很多文件,不是VC里简单的点两下的问题,明白编译原理对认识编程真得很重要,下学期开着门课的时候一定认真上。