Submitted by gouki on 2011, June 11, 11:39 AM
本文来自coolshell.cn。。。,原文地址为:http://coolshell.cn/articles/4811.html
其实文中的情况我们以前在设计的时候也遇到过,不过当时的情况比较好,是在设计的时候就遇到了。本来是想做一个分类树,分类树嘛,大家都接触过,无非就是层次的关系,二叉叉到底也能解决。但是在设计的时候,BA说这样不行啊。某个分类其实 也可能属于另外一个分支的分类。当时就傻眼了。怎么可以这样呢。。。
好吧,先看下面的原文:
-----------------------------start---------------------------
还记得以前本站的那一篇“编程好难啊”吗,那是一篇众程序员调侃程序新手的文章,有恶搞的成分在里面。今天要和大家说的这个事没有一些恶搞和调侃的意思,是比较严肃的话题,你一定可以从中收获一些东西。这个话题来自StackOverflow上的一个问题——Cycle in Family Tree Software,这个程序员问了下面这个问题:
我是一个写家族族谱软件的程序员(我用的是C++和Qt),这个软件基本上没有什么问题,真到有一天有个用户报告了一个bug。这个问题是这样的——我这个用户和他女儿生了两个孩子。
于是,我程序员的一些断言和硬性条件导致程序报错,因为我的程序在处理这个关系的时候,其发现X即是Y的爸爸,又是Y的爷爷,所以只能报错。
请问,在不需要移除我的断言和数据验证的情况下,我怎么才能解决这个问题?
看到这里,请重点阅读一下下面的两点:
- 如果你看到这里开始兴奋了,请你为你阴暗的心理去面壁反省10分钟,因为这是一个很技术的问题。
- 如果你开始陷入了深深的思考如何解决这个问题,那么你绝对是一个合格的程序员,因为你已陷入技术已经很深了,有点呆了。
我在前面说过,“这个是一个严肃的话题,你可以从中收获一些东西”,当然,我并不希望你来收获乱伦的知识和心得,酷壳是一个技术博客,应该是收获技术方面的东西。
从技术的角度上来说,这是我们经常在设计软件时犯的错误——
1)作了错误的假设(Assumption)
Assumption是软件设计的重大天敌,Assumption的动词Assume意为Ass u me – Ass you and me 。你的假设做得越多,你的设计就越不靠谱。这里的假设是——我们以为family tree是一个tree,其实并不是tree。Assumption是魔鬼。
还有一些经典的Assumption如下所示
2)没有认真分析用户案例(Use Case)
在设计软件时,我们需要考虑各种各样的用户案例,比如如下的东西:
- 私生子的问题
- 一夫多妻或一妻多夫,同父异母,同母异父
- 就算一夫多妻制违反法律,也会有离异再婚的情况
- 同性恋的问题,虽然不能繁衍,但可以领养。
- 换妻活动
- 各种乱伦关系——这种东西那个民族都不少,尤其是古时候,比如:
- 先后嫁了两个人其是父子关系(昭君)
- 达尔文同学和他的表妹,爱因斯坦的二婚是和他的表姐,埃及艳后嫁了她的弟弟,……
- 顺治同学娶了四个老婆,这四个人还是一家人:姑姑,侄女,妹妹,女儿。(参看这里)
- 刘邦同学的母后干出来的事,相当变态(参看这里)
- 中国古代的“扒灰老” (类似于楼主那个问题的Use Case)
不想再列下去了,人类真TMD恶心,有点要吐了。
——————————为了缓解一下恶心的气氛,请允许我插入一个搞笑短文——————————
一位自杀者在他的遗书里讲述了他自杀的原因,听起来实在让人头痛。遗书这样写道:“我和一个寡妇结了婚,她有一个已成年的 女儿,我父亲跟我妻子带过来的女儿结了婚。所以我父亲就成了我的女婿,女儿就成了我的后母,我管父亲叫爸爸,而我父亲也管我叫爸爸;我女儿管我叫爸爸,但 我却管她叫妈妈;我还得管我妻子叫姥姥,因为她是我后母的母亲。不久我女儿,也就是我后母生了一个儿子,他是我同父异母的弟弟,他也得管我叫姥爷,因为他 也是我的外孙。后来我妻子,也就是我姥姥生了一个儿子,他是我后母的弟弟,我是他的外甥,所以儿子管我叫爸爸,我管儿子叫舅舅。另外我是我妻子,也就是我 姥姥的外孙,同时也是我姥姥的丈夫,所已我也是我的外祖父。又因为我妻子是我的外祖母,我的儿子,也就是我的舅舅是我的弟弟和我女儿的弟弟,所以我……我 的天哪,这么复杂的关系实在让我伤透了脑筋,我只有一死才能得以解脱……”
————————————————————————插入完毕————————————————————
看完上面这个短文,不知道你是否和我一样,觉得这么一个简单的程序将是如此难做啊。另外,我决定在下一次的面试中让应聘者来设计Family Tree的程序。
我又说多了,现在还是让我们回到技术上来。除了上面那几个观点,我在回复中还看到了如入一些有意思的回复:
- “我的软件没有bug,是你的生活有bug”——让我想到了程序员惯用的借口
- “算法中不应该加太多的限制,限制多了反而让算法不灵活。”
- “移除断言,并不代表就不出错,对于这种rare case,我们最好给一个Warning提醒用户,让用户确认确实是这样的。”
- “关于解决这个问题,移除那个断言,如果显示上会有问题的话,那就复制一下有不同关系的人就可以了”
- “你真的应该想想你的软件的价值是什么?市场在哪里?你真的要照顾这样的用户吗?”
挺好的,相信你对软件开发又学到了一些东西。
------------------------------------------------------
树和图都是让人纠结的东西。做WEB也会用到图吗?
Tags: 软件设计
Software | 评论:0
| 阅读:16867
Submitted by gouki on 2011, June 4, 12:02 PM
这两天一直在试用phpstorm,本以为这个IDE是基于IntelliJ IDEA的,所以性能上不会有太高的体现,但在整体试用过程中,却发现,它果然还是一个不错的软件。当然你说它吃内存不?嗯,比较吃内存,但它有一个调节功能,如:power safe mode,可以在降低IDE性能的同时,释放一部分资源。

而且该软件在状态栏有一个内存使用情况,单击还可以释放内存,看到那个483了没,表示它最大会占用483M内存。于是你到任务管理器的时候,它最多可以占用483.。。不会再上去了,不象netbeans或者firefox之类的特占内存软件一样,会持续上升。
在试用过程中,觉得软件对于对象的识别和智能完成确实不错,对于HTML等的校验也相对比较完善。当然对于代码中错误的定位、warning等的显示都比较迅速和快捷,不象netbeans那样较缓慢,让人几乎感觉不错这是一款基于java的软件。实在让人吃惊。
软件的启动速度和打开速度都是非常的惊人,对于版本控制软件也支持的挺好,扫描项目的时间也相对netbeans来说较短。总体来说,不错
软件有点大,70M,不过,这是含 Jre的版本,这样说来,它其实与netbeans也差不太多了。毕竟,netbeans 46M+jre,也差不多70M了,而且这样的版本里,还有一些插件是不全的,还需要额外下载。
安装完后,240多M与netbeans+jre的大小也差不多。
嗯,快捷页和字符编码以及IDE的字体需要额外的调整一下,我是对着netbeans调整的,而且把快捷键也设成了与netbeans一样。一下子就适应了过来。HOHO
不过,netbeans有一个功能是phpstorm没有的,那就是,将项目save to other directory,这个功能非常好,它使得我在用svn的项目时,可以将代码export到WEB目录下,对于这个目录里的测试,所生成的一些无用文件等不会影响到svn目录,不会污染原SVN项目。phpstorm没有该功能,遗憾啊。。。
Tags: php, ide, phpstorm, netbeans
Software | 评论:2
| 阅读:32447
Submitted by gouki on 2011, May 12, 10:59 PM
本文尝试用来测试SEO,顺便抒发一下我那可怜的感慨之情。
vmware server,这个很多人都了解,它是虚拟机服务器,用来为HOST提供更多的选择,比如我们的HOST是xp,那么我们如果要学习Linux,但是对它又不太了解,如果直接安装双系统,或许反而会影响了正常使用。万一引导出了点问题那可能是一个系统也启动不了。
于是虚拟机就成了我们最好的选择,在虚拟机里我们可以尝试做任何操作,而不用担心HOST会被损坏。一般常见的就是vmware和virtualbox了。但是在这里我不谈virtualbox,只是针对vmware做一点说明吧。
可能大多数人用vmware的时候都是用的professional版,这个版本对于大多数人来已经足够了。不过我要说的是vmware server。因为它可以当成服务启动,也就是说,你可以不用手动启动vmware,嗯。这是我最喜欢做的。因为我把ubuntu装在虚拟机里启动了。然后运行了samba程序,共享了一个目录出来,使得我在开发的时候,直接把代码扔到那个目录里而不用担心程序运行环境。
vmware在虚拟机的设置里有一个选项,随HOST启动而启动,随HOST关闭而关闭。这使得我前面所说的一切都成了现实。
但是vmware server会有一点小小的问题,它在非SERVER的操作系统里非常占资源,比如在WIN7中,如果设置开机启动,那么机器居然会卡住 将近一分钟左右,直到虚拟机启动完毕才恢复正常。而且SERVER版操作系统中则一点问题没有。为此,我格掉了我所有现在的系统,換成了2003。
嗯,用到现在,我感觉最爽的系统还是2003和win7。xp什么的都是浮云啊。只是2003会有一个巨大的问题,就是很多软件在安装的时候,都说not support this os 。好郁闷。
顺便说一下,vmware server的下载地址是:http://www.vmware.com/download。再顺便说一下下,现在vmware server居然免费了。只是有另一个重要的问题,那就是,vmware server已经很长时间没更新了。看来,以后是没的用了。所以留了一份1.x版的在电脑里。为什么说是保留1.x呢,是因为2.0开始,控制台是WEB方式了,而不象1.x一样是用客户端来管理。还是不太喜欢WEB方式来进行管理
Tags: vmware, 虚拟机, 免费下载, virtualbox, windows
Software | 评论:0
| 阅读:18109
Submitted by gouki on 2011, May 10, 9:11 PM
李明是谁?不知道,但是ultraiso有个经典的序列号就是用户名是李明,序列号是509F-BA54-BBA6-73C5。所以,他应该也算是一个知明人物了吧。
其实我这个做个记录,因为我会用ULTRAISO相对较多,每次都要找它的注册码,还不如记录一下。。
对了,这是网络上搜到的。和我无关,如果你觉得影响了你的视觉或其他,请通知我删除。谢谢。
当然,李明再厉害,但他爸不是李刚,所以他也有失效的时候,这时候他们就派用场了:
UltraISO Premium 9.3 注册码
QUOTE:
注册名:UW-Madison Executive Education
注册码:1519-E287-A828-A24A
多国语言注册码:
QUOTE:
注册名:UW-Madison Executive Education
注册码:1519-E287-A828-A24A
简体中文注册码:
QUOTE:
注册名:李明
注册码:509F-BA54-BBA6-73C5
Tags: ultraiso, 李明
Software | 评论:0
| 阅读:19948
Submitted by gouki on 2011, May 3, 11:18 PM
由于安装了ubuntu,所以不可避免的需要使用一些命令行的东西了。比如这个svn,以前在windows下面,可以用小乌龟搞定。但在linux下面就不能这样了。
当然一些简单的命令我还是会用的,比如svn update,svn checkout,svn commit这类常用操作,但是这些只能解决一些简单的问题,遇到一些复杂的就搞不定了。
比如,为了做一些本地的配置不想传到服务器上,在windows下面,我可以直接在想要忽略的文件上右键,加入到ignore列表。在ubuntu下就不行了。。。
因此找了一点资料,先备份一下(家中连不上单位的svn服务器,所以没法测试)
若想创建了一个文件夹,并且把它加入版本控制,但忽略文件夹中的所有文件的内容:
$ svn mkdir spool
$ svn add spool
$ svn commit -m “Adding ’spool’”
$ svn propset svn:ignore ‘*’ spool
$ svn ci -m ‘Adding “spool” and ignoring its contents.’
若想创建一个文件夹,但不加入版本控制,即忽略这个文件夹:
$ mkdir spool
$ svn propset svn:ignore ’spool’ .
$ svn ci -m ‘Ignoring a directory called “spool”.’
若已经创建了文件夹,并加入了版本控制,现在想忽略这个文件夹,但要保持文件夹的内容:
$ svn export spool spool-tmp
$ svn rm spool
$ svn ci -m ‘Removing inadvertently added directory “spool”.’
$ mv spool-tmp spool
$ svn propset svn:ignore ’spool’ .
$ svn ci -m ‘Ignoring a directory called “spool”.’
若要忽略文件夹里的某几个文件
$ svn mkdir spool
$ svn add spool
$ svn commit -m “Adding ’spool’”
gvim .svnignore
每种要忽略的文件加一行,如:
.svnignore
*.pyc
*.cash
test.php
然后
svn propset svn:ignore -F .svnignore .
svn status
---EOF--
来源于:http://www.lampblog.net/2010/08/svn-ignore-%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%94%A8%E6%B3%95/
纯备份。
Tags: svn, ignore, ubuntu
Software | 评论:1
| 阅读:32120