| 溢泽's profile冲冲冲PhotosBlogLists | Help |
|
冲冲冲March 31 谈论POSA2读书笔记(二)豁然开朗~ 引用 POSA2读书笔记(二) January 16 [计划]将draw2d移植到c# 前面一段时间有个项目是用java开发图形编辑程序,开发工具用eclipse,图形编辑框架用GEF。现在一个新的项目要用c#来开发图形编辑程序。
我只知道c#有一套绘图API是GDI+,好像没有图形库。
我想,最好在c#下能有一套象draw2d那样的矢量图形库。我在网上找了半天都找不到。看来这种好东西c#开发者不舍得开源的,sigh...
看来只好自己来移植了。draw2d是lightweight(轻量级)的,移植起来应该没什么困难,不过工作量不小。
计划步骤:1、学习c#语言(以前都没用过,-___-!)
2、熟悉c#界面应用程序开发,特别是事件处理、绘图API。
3、将draw2d几何包部分先移植过去(较easy)
4、移植draw2d的核心部分:LightweightSystem、Graphics、UpdateManager...(最重要)
5、移植各种Figure。 SWT……内幕?FooSleeper 翻译 原文: http://groups.yahoo.com/group/straight_talking_java/ http://groups.yahoo.com/group/straight_talking_java/messages/24236 翻译整理:FooSleeper 最后修改:2004-03-03 译注:本文来自straight_talking_java@yahoogroups.com讨论组,已经是一年多前的文章。Alan Williamson是Java Developers Journal的编辑,下文来自他在IBM的一个消息来源。SWT和Swing的论争我见过不少,Netbeans和Eclipse的也同样多。译者翻译此文并不是要激起什么争执,也不是支持哪一方(虽然我的确是站在SWT一边的),更不是要攻击Amy。我最重要的理由是,这是一篇有趣的文章。里面有内幕、线人、公司政治、垄断巨头、美女、商界风云……足够拍一出电影。有趣,这就够了。不过此文反映了IBM对Swing的看法和SWT的由来,还是有一点营养的。 From: Alan Williamson Date: Wed Nov 6, 2002 10:31 am Reply-To: To: Subject: SWT ... the scoop?(SWT……内幕?) 好了这就来……阅读……消化……再阅读……再消化…… -------------------------------- 谢谢你的回复。我很乐意给你提供Swing和SWT背后的一些信息,既然你还把我当作你秘密的“IBM内幕线人”。 要想弄清楚为什么一切都被弄得如此混乱,要从几年前只存在AWT的时候说起。SUN当时已经建立了一套基本的可移植控件类,这些类映射到不同操作系统上的原生窗口组件(native widget),显然下一步应该继续增强这套模型,除了初始的CUA 92组件(文字、按钮等等),再继续加上表格、树、记事本、滑块等等……当时的AWT还满是漏洞,远不能称为可靠,还需要SUN的coder们去修补。SUN的developer们如Graham和Otto总是习惯于公开把他们的bug归咎为操作系统的差异,比如“Windows和OS/2的焦点次序不同”或者“在……之间Ctrl-X的行为不一样”,以及其他苍白的托辞,好让批评的火力从SUN太早释出代码这个问题的真相上移开。然后Amy Fowler来到了SUN。不是我大男子主义,Amy是个聪明的美女,大多数呆头呆脑只懂技术的开发人员都要被她捏在手里。 Amy来自一家Smalltalk公司,叫做Objectshare,在那里她负责搞UI类库。跟Java相比Smalltalk的历史有些悲惨,曾几何时有3家庞大的Smalltalk公司——IBM、Parc-Place和Digitalk。在90年代初期3家公司的市场份额大致相等,生活是美好的。Parc-Place采用仿窗口部件(emulated widgets)的设计(即Swing的设计),IBM和Digitalk则采用原生窗口部件(native widgets)。后来IBM压倒了另外两家,因此他们打算合并成一家,假设叫做Parc-Place Digitalk。随后当他们试图将他们的产品融合到一个叫做Jigsaw的计划中时爆发了一场大战,计划由于政治原因失败了(开发人员实际上已经能让它运转起来),就因为原生和仿造两派的死战。Amy赢得了精神上的胜利,不过在IBM我们赢得了他们所有的生意,因为这两家公司在一整年里除了吵架什么都没做。当尘埃落定之后PPD(Parc-Place Digitalk当时已改名为Objectshare,跟Windscale改名为Sellafield的原因相同——让人们淡忘之前发生的灾难)的股票价格从60美元掉到了低于1美元1股。他们因为伪报收入被NASDAQ摘牌,从此消失。此时SUN正走上与PPD类似的技术方向,于是PDD的技术人员都把他们的简历投到了SUN。Amy被雇佣了,她承诺通过轻量级方案解决所有窗口组件的问题,因此说服SUN管理层让她当了GUI开发部门的头头。她是拿着“这里原来的人都搞砸了,我是来解决的”的钥匙进来的。随后Amy雇佣了所有她过去在Parc-Place的旧朋友,让他们来开发Swing。 显然Swing应该做的是仅仅成为一个绘制框架,给那些希望创建地图软件或者绘图软件的人们使用,无论如何,应该围绕AWT类库来建造它,按钮之类的东西仍然交给AWT来管。SUN的人比如Philip和Mark已经让AWT能够处理表格、树和记事本(notebook,?),所以Swing的方向应该说很明显了。但那些毁了PDD的人不干,他们非要把一切都弄成轻量级的。由于SUN管理层的无知,再加上Amy无情的政治手段,造成了我们今天所见的混乱局面。Amy还使SUN相信Swing是作为Mozilla项目的一部分与Netscape联合开发的,事实上这只是她的宣传伎俩。 在IBM,我们从第一天起就憎恶Swing。庞大、满是错误,而且难看至极。原先我们的工具如VisualAge for Java都是用Smalltalk(用的是原生窗口组件)写的,所以当我们将这些工具向Java代码库迁移时,我们需要一套窗口组件。IBM这边的开发人员都是原来搞Smalltalk的那一批人,我们对管理层要求用Swing来构建WebSphere Studio工具都非常不情愿。Swing是个可怕的充满缺陷的怪兽。在WebSphere Studio最初的预览中,当与Microsoft Visual Studio作对比演示的时候,我们所有的客户都讨厌它,就因为它的外观,而不管它的功能有多强。大多数消费者都不会买一辆让人觉得难看的车,哪怕这车有一台出色的引擎。因此我们开始了一个项目,是把我们的Smalltalk原生窗口组件移植到Java上去。这个项目是加拿大的Object Technology International小组做的。这个项目获得了成功,被运用在在我们发布的VisualAge Micro Edition产品中,VisualAge Micro Edition后来成为J2ME开发方面一个非常成功的IDE。但是OTI的人发现,Swing在读取Windows事件方面有极严重的缺陷,我们甚至无法进行SWT(S开始是Simple的缩写,不过后来变成了Standard的缩写)和Swing间的互操作。他们在读事件队列的时候用了一种可能留下内存漏洞的方式,所以我们不得不采用我们自己的查询Windows事件队列的循环,以纠正这个错误。我们试了一次又一次让SUN修复这个错误,但Amy就是听不进去,所以我们才决定SWT和AWT/Swing不能共存。我们甚至在SWT中定义了自己的Point和Rectangle类——整个工具包对AWT或Swing都没有任何依赖。我们把这个工具包放到了Eclipse中,这是一个工具平台,它的总体设计目标就是要战胜Micrsoft和Visual Studio。Eclipse是开源的,所以任何人都可以在上面构建自己的东西,我们已经有像TogetherSoft和Rational这样的公司移植到了上面。我们的竞争者是Microsoft,所以我们所有努力和注意力都是从正面针对Microsoft。 不管怎么说SUN对此非常不满。他们的Netbeans跟Eclipse做的是相同的事,因此他们向IBM高层抱怨。他们认为SWT是要将你绑到Windows上,这纯粹是胡说,因为SWT能通过GTK在Mac/Linux上运行,以及一大堆嵌入式平台。他们拒绝让Eclipse获得Java认证,因为里面有原生代码,所以Eclipse产品必须很小心地使用单词“Java”这个SUN的商标。Eclipse甚至不能把自己称为一个Java IDE,SUN已经威胁过要采取法律行动来制止IBM在任何时候把Eclipse称作一个Java IDE。结果之一就是IBM在Eclipse上创建的GUI设计工具,允许你构建Swing/AWT GUI,却不让你往里面拖放SWT窗口控件。 将SWT从Eclipse中分离出来是完全可能的,只需要把DLL抠出来放到路径中,并使用窗口组件工具包来给你的银行或者保险或者其他什么应用程序开发GUI。再次说明,我们无法更进一步,因为SUN把我们的双手绑上了。虽然作为Eclipse开放源码协议的一部分,CPL允许我们提供这样的解决方案,但SUN已经很清楚地表明他们不希望我们这样做。 对于用户社区来说,无论IBM和SUN的最终动机是什么,我发现有一点总是很有趣:喜爱Swing的人总会说“一旦你花上几年时间去掌握它,你就能正确地使用它”,这基本上是他们在试图证明和维护他们辛苦得来的用途有限的专门技术;而SWT的拥护者们说的是“哇,这真快,这跟原生的一样,还可以用XP皮肤……它还又轻又小”。有一句话是我喜欢的,我们的一个用户说,Swing就像Java决定不通过操作系统来实现原生的IO,而是通过磁头马达API自己来读磁盘的扇区。Swing基本上就是这样的,它拿着个底层的“paint(Graphics)”方法,自己来绘制所有的窗口组件。 -------------------------------- 后记:现在的情况已经有所不同,SWT到底还是单独发布了,VE也承诺在1.0版的时候支持SWT的GUI设计。 什么是轻量级方法?What is a Lightweight Methodology?
什么是轻量级方法? A software methodology is the set of rules and practices used to create computer programs. A heavyweight methodology has many rules, practices, and documents. It requires discipline and time to follow correctly. A lightweight methodology has only a few rules and practices or ones which are easy to follow. In the late 1960s and early 1970s it was common practice for computer programmers to create software any way they could. Many programmers excelled at creating software too complex for anyone to understand. At that time it was a miracle if a program ran without any bugs. Making computers useful was considered a worthy quest and not unlike an adventure into the old west. In 1968 Edsger Dijkstra wrote a letter to CACM entitled GOTO Statement Considered Harmful. The central ideas of software engineering were being born. At that time we believed that bigger, more disciplined methodologies would help us create software with consistent quality and predictable costs. The lawless cowboy coders were being reined in. We had a few rules and practices to create software that was far superior in quality to what we were creating only a few years earlier. It seemed like if we could just create enough rules to cover the problems we encounter we could create perfect software and be on time. We added more and more rules and practices to cover all the potential problems. Now in the 21st century we find these rules are hard to follow, procedures are complex and not well understood and the amount of documentation written in some abstract notation is way out of control. Trying to come up with a bigger and better methodology was like a California gold rush; everyone headed west only to be disappointed. But this quickly got out of control and dreadnought CASE tools were born. These tools, originally created to help us follow the rules, are too hard to use themselves. Computer programmers find it necessary to cut corners and skip important practices to stay on schedule. No one is actually following the heavy methodologies we have handcuffed ourselves with. The cowboys have returned and we find ourselves back at the OK Corral. When programmers ignore the rules of their methodology they are instinctively moving away from heavyweight methodologies and back toward an earlier, simpler time of lightweight methodologies when a few rules were enough. But we don't want to forget what we have learned. We can choose to keep the rules that help us create quality software and throw away those that hinder our progress. We can simplify those rules that seem too complex to follow correctly. But instead let's stop at just enough rules to keep our software reliable and reasonably priced. Extreme Programming (XP) is one of several new lightweight methodologies. XP has a few rules and a modest number of practices, all of which are easy to follow. XP is a clean and concise environment developed by observing what makes software development go faster and what makes it move slower. It is an environment in which programmers feel free to be creative and productive but remain organized and focused. January 13 php生成验证码<?php
/* * filename: authimg.php * author: ymsw * date: 2006-1-12 */ // 启动session
session_start(); session_register('AuthNum'); Header("Content-type:image/PNG");
srand((double)microtime()*1000000); $im =imagecreate(50,23); $fg = ImageColorAllocate($im, 0,0,0); $bg =ImageColorAllocate($im, 240,240,240); // 填充背景 imagefill($im,0,0,$bg); // 干扰像素
for($i=0;$i<150;$i++) { $randcolor =ImageColorallocate($im,rand(100,255),rand(100,255),rand(100,255)); imagesetpixel($im, rand()%50 , rand()%23 ,$randcolor); } // 随机线段
for($i=0;$i<4;$i++) { imageline($im,rand(0,50),rand(0,50),rand(0,50),rand(0,50),$fg); } // 生成新的四位十六进制数验证码
$authnum=strtoupper(dechex(rand(4096,65535))); // 把验证码保存到session里
$_SESSION['AuthNum'] = md5($authnum); // 画验证码
imagestring($im,5,8,5,$authnum,$fg); ImagePNG($im);
ImageDestroy($im); ?> 下面是验证页面:
<?php
/* * filename: authpage.php * author: ymsw * date: 2006-1-12 */ session_start(); srand((double)microtime()*1000000); //验证用户输入是否和验证码一致
if(isset($HTTP_POST_VARS['authinput'])) { if(strcmp($_SESSION['AuthNum'],md5(strtoupper($HTTP_POST_VARS['authinput'])))==0) echo "验证成功!"; else echo "验证失败!"; } ?> <form action=authpage.php method=post> <table> 请输入验证码:<input type=text name=authinput maxlength=4 style="width: 40px"><br> <input type=submit name="验证" value="提交验证码"> <img src=authimg.php> </table> </form> -----------------注意--------------------
php4.2.0以后的版本要将$HTTP_POST_VARS替换成$_POST
【秘密】有一个号码可以让你取消手机的任何服务项目有一个号码可以让你取消手机的任何服务项目 其实早就有那么一个短信内容让你可以取消你订购的服务或者强加给你的服务,内容就是“0000”四个零, 那发送给谁呢? 这个问题问的太专业了,发送给谁呢,其实发送的号码就是你订购服务的号码,或者是*商硬家给你的号码,如果不知道可以到相关的网站去查,可以看看订购此服务的号码就是了,现在你就可以试试,比如你想取消qq上的某些或所有服务,你就发送“0000”到“1700”上去,马上就有回复,让你选择取消的服务,格式是“qx+数字”,其中“0”是取消所有服务,也就是你发送“qx0”就取消的qq的所有收费服务,其实这是国家给这些短信服务js订的规矩,但是他们害怕大家知道,谁也不告诉大家应该享受的权利,现在好了,我告诉大家了,其实我是从一个做短信的朋友那里得来的,希望大家广泛传播,让js不能得逞,有圈扔圈吧。希望能解除大家的难言之隐,呵呵。 记住发送“0000”(四个零,不是四个欧)到相应号码,随后按回复的短信去做就可以了。 取消服务的通用码有两个:"0000"和"00000",就是4个零和5个零。所有的短信服务 商都默认使用两个代码作为取消服务的代码(虽然很多时候他们自己会制定各项服务的 取消代码),因为这是国家相关管理部门规定的。只要你发送这两个代码之一到服务商 的号码处(就是发短信给你的那个号码的前四位),就可以取消服务。 很多人也问到4个零和5个零有什么区别?是这样的,"0000"(4个零)是提请取消服 务代码,当服务商收到这个代码后,他会检查你的手机号码在他那里订制了什么服务, 然后会把你订制的服务及取消方法发给你,你必须按照他所说的办法再发送取消代码才 能取消具体的某项服务。而"00000"(5个零)则是无条件取消所有服务的代码,当服务 商收到该代码,就必须取消你的手机在他那里定制的全部服务,同时反馈已取消所有服 务的信息给用户。 所以说4个零适合于单独取消服务商的单个服务,比如说你的手机在腾讯(1700)上 订制了移动QQ,QQ交友两个服务,而你又只想取消QQ交友而不想取消移动QQ,那么就应 该发送"0000"到1700,然后根据1700发过来的提示来取消QQ交友。如果你是发送"00000" 到1700的话就会把移动QQ和QQ交友两项服务都取消掉。 |
|||
|
|