技术流派


技术流派& 点滴网摘& 随心所欲08 十一月 2006 11:08 am

Windows启动时通常会有一大堆程序自动启动。不要以为管好了“开始→程序→启动”菜单就万事大吉,实际上,在Windows XP/2K中,让Windows自动启动程序的办法很多,下文告诉你最重要的两个文件夹和八个注册键。   

一、当前用户专有的启动文件夹这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在:\Documents and Settings\\“开始”菜单\程序\启动,其中“”是当前登录的用户帐户名称。   

二、对所有用户有效的启动文件夹 这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在:\Documents and Settings\All Users\“开始”菜单\程序\启动。   

三、Load注册键 介绍该注册键的资料不多,实际上它也能够自动启动程序。位置:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load   

四、Userinit注册键 位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe,如图一,但这个键允许指定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”(不含引号)。

五、Explorer\Run注册键和load、Userinit不同,Explorer\Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具体位置是:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run,和

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run。   

六、RunServicesOnce注册键 RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序。RunServicesOnce注册键的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce。   

七、RunServices注册键 RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前。RunServices的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices。   

八、RunOnce\Setup注册键 RunOnce\Setup指定了用户登录之后运行的程序,它的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup。   

九、RunOnce注册键 安装程序通常用RunOnce键自动运行程序,它的位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce和HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。如果是XP,你还需要检查一下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx。   

十、Run注册键 Run是自动运行程序最常用的注册键,位置在:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“启动”文件夹之前。

技术流派& 点滴网摘20 九月 2006 08:38 pm

先来看一张简单的文档树

很明显树的顶层节点是NodeA节点,接下来可以通过指定的合适节点移动到树中的任何点,结合以下的代码你可以更好的了解这棵树节点间的相互关系:
NodeA.firstChild = NodeA1
NodeA.lastChild = NodeA3
NodeA.childNodes.length = 3
NodeA.childNodes[0] = NodeA1
NodeA.childNodes[1] = NodeA2
NodeA.childNodes[2] = NodeA3
NodeA1.parentNode = NodeA
NodeA1.nextSibling = NodeA2
NodeA3.prevSibling = NodeA2
NodeA3.nextSibling = null
NodeA.lastChild.firstChild = NodeA3a
NodeA3b.parentNode.parentNode = NodeA

DOM定义对操作一个文档对象的节点结构提供了实用的方法,它提供了像执行对象插入,更新,删除,克隆等这些常用的方法。
insertBefore()–在参考子节点之前插入一个新的子节点.如果参考的子节点为null,则新的子节点将作为调用节点的最后一个子节点插入。
replaceChild()–在childNodes集合种使用指定的newChild来代替oldChild;如果代替成功,则返回oldChild;如果newChild是null,则只需删除oldChild即可。
removeChild()–从节点的ChildNodes集合中删除removeChild指定的节点,如果删除成功,则返回删除的子节点。
appendChild()–添加一个新节点到childNodes集合的末尾,如果成功,则返回新节点。
cloneNode()–创建一个新的、复制的节点,并且如果传入的参数是true时,还将复制子节点,如果节点是一个元素,那么还将复制相应属性,返回新的节点。

为了在一棵文档树中访问或者建立一个新的节点,可以用下面这些方法:
getElementById()
getElementsByTagName()
createElement()
createAttribute()
createTextNode()
注意:在一个页面中只有一个文档对象,除了getElementsByTagName()外,其它方法均只能通过document.methodName()调用。

再看一下下面这个例子:

This is a sample paragraph.

结果将会显示”P”,下面是一些解释
document.documentElement - gives the page’s HTML tag.
lastChild - gives the BODY tag.
firstChild - gives the first element in the BODY.
tagName - gives that element’s tag name, “P” in this case.
另一个:

This is a sample paragraph.

这个例子和上面并没有什么大的区别,仅仅是多了一个空行,但是在NS中,会自动为空行加上一个节点所以返回值是”undefined”,而在IE中将跳过空行仍然指向P标签。

更常用的方法:

This is a sample paragraph.


alert(document.getElementById(”myParagraph”).tagName);
这种方法你不用关心节点在文档树的哪一个地方,而只要保证在页面中它的ID号是唯一的就可以了。

接下来一种访问元素节点的方法是document.getElementsByTagName(),它的返回值是一个数组,例如你可以通过下面的例子改变整个页面的连接:
var nodeList = document.getElementsByTagName(”A”);
for (var i = 0; i This is a sample paragraph.


alert(document.getElementById(”myParagraph”).getAttribute(”myAttribute”));
返回值将是”myValue”.但是请注意这里必须使用getAttribute,而不是AttributeName,因为有一些浏览器并不支持自定义属性。

attributes也可以被轻易的从一个元素中删除,你可以使用removeAttribute()或者将element.attributeName指向一个null值。
通过attributes我们就可以产生一些动态效果:

Text in a paragraph element.

… code for the links …
document.getElementById(’sample1′).setAttribute(’align’, ‘left’);
document.getElementById(’sample1′).setAttribute(’align’, ‘right’);
另一种:

Text in a paragraph
element.
… code for the links …
document.getElementById(’sample2′).style.textAlign = ‘left’;
document.getElementById(’sample2′).style.textAlign = ‘right’;
跟上面的例子一样,展示了可用通过元素修改style中的属性,甚至是class中的.唯一要提到的是textAlign是从style中的text-align中演变而来的,有一条基本规律,就是style中的属性如果出现-则在dom中将会被去掉并且随后的一个字母将改为大写,还有一点就是如果即使元素中没有style属性,上述例子同样可以使用。

text nodes:
先看一下例子:

This is the initial text.

… code for the links …
document.getElementById(’sample1′).firstChild.nodeValue =
‘Once upon a time…’;
document.getElementById(’sample1′).firstChild.nodeValue =
‘…in a galaxy far, far away’;
首先text nodes并没有像elements那样具有id属性,所有它并不能直接通过document.getElementById()或者document.getElementsByTagName()访问
看一下下面的结构也许会更明白一些:

可以看出通过document.getElementById(’sample1′).firstChild.nodeValue就可以读取或者设置text nodes的值了。

另一个更加复杂一点的例子:

This is the initial text.

它的文档结构

在这里通过document.getElementById(’sample1′).firstChild.nodeValue讲仅仅改变”This is the”
initial text.将不会改变.在这里大家应该看到了它和innerHTML的不同了.当然你也可以这样用:
document.getElementById(’sample3′).firstChild.nodeValue =
Once upon a time…’;
document.getElementById(’sample3′).firstChild.nodeValue =
‘…in a galaxy far, far away’;
其中的html代码将不会被解释,浏览器将把他们当成普通的文本来显示。

创建和删除text nodes:
var myTextNode = document.createTextNode(”my text”);
通过上面的代码你可以创建一个新的text node,但是它并不是文档树的一部分,要让它显示在页面上就必须让它成为文档树中某一个节点的child,因为
text nodes不能有儿子,所以你不能将它加入到一个text nodes中,attribute也不属于文档树的一部分,这条路也不行,现在只剩下elements nodes
了,以下的例子展示了如何添加和删除一个text node:

Initial text within a paragraph element.

… code to add a text node …
var text = document.createTextNode(” new text ” + (++counter1));
var el = document.getElementById(”sample1″);
el.appendChild(text);
… code to remove the last child node …
var el = document.getElementById(”sample1″);
if (el.hasChildNodes())
el.removeChild(el.lastChild);
增加文本是很容易的,上面的代码建立了一个新的text node并且通过appendChild()方法将其加入到childNodes数组的末尾,并设置了一个counter1的全局变量,利于观察
hasChildNodes()的返回值是true or false;用来判断当前节点是否还有child,以阻止当其没有child的时候调用removeChild()产生的错误。

创建element nodes
有了上面的基础,应该更容易理解了,先看一下下面的代码

This text is in a DIV element.

… code for the link …
var paraEl, boldEl;
paraEl = document.createElement(”p”);
boldEl = document.createElement(”b”);
paraEl.appendChild(document.createTextNode(”This is a new paragraph with “));
boldEl.appendChild(document.createTextNode(”bold”));
paraEl.appendChild(boldEl);
paraEl.appendChild(document.createTextNode(” text added to the DIV”));
document.getElementById(”sample1″).appendChild(paraEl);
你还可以直接为新加的element nodes设置attribute,以下两种都可以:
boldEl.style.color = “#ffff00″;
paraEl.appendChild(boldEl);
或者:
paraEl.appendChild(boldEl);
boldEl.style.color = “#ffff00″;

技术流派& 点滴网摘& 随心所欲11 九月 2006 12:05 pm

 Google Web Toolkit 已经吸引了全世界无数web程序员的眼球,因为它承诺能够使AJAX Web开发变得简单。但是,它到底有多大的优势?而且,更为重要的是,我们有多需要它呢?   这是一个否认的声音——首先,作为一个开发人员和框架架构师,我发现Google Web Toolkit (GWT)非常得迷人。它是那些非常有才能的人才能做出来的相当棒的软件。但是,问题是:在企业软件开发的领域中,这种吸引力的作用好像并不大。我的意思是,量身定制的软件中包含着成百上千个用例,而这些用例之间存在着极其复杂的交互业务和GUI逻辑。这种软件对于大多数程序员来说非常重要,因为工作中会牵涉到。而且这种软件也是我下面要探讨的Web应用程序开发的类型。   首先,我们来总结一下GWT为(Java)Web 开发团体所带来的创新,有以下几点:   一个使用Java.lang API实现的从Java到Javascript的编译器——虽然这个想法很棒,但是,这确实不能算是创新。因为,至少有一个以上的方案(J2S)已经提供了与此类似的特性,实际上,还提供了更先进的JavaScript生成特性。   一个窗口组件库,能够在不使用HTML的情况下构建用户界面(UI)。这有些类似于Dojo中具备的功能,并且与J2S/RIA几乎相同。除此之外,还有一些服务器端的框架也能够提供相同的功能(如Echo2、wingS)   一个在HTTP协议上的远程过程调用(RPC)的实现,它能够通过DWR在其他协议上实现。   一个允许在Java中调试应用程序的容器。实际上,J2S确实不需要这个功能,因为它能够解释SWT/RCP代码,并且作为桌面应用程序自动运行。   在项目开始时,脚本是受到了Ruby on Rails的启发(至少是类似的)。   因此,Google主要是陷入了这个严重的问题:重新实现所有这些可利用的项目。当然,你可以争辩说,他们实现得更好、用起来更加方便、使代码更加文档化(这通常是一个项目成功与失败的关键)。但是,他们既然够像重新实现无数的其他项目,那为什么不重新实现Eclipse项目呢?而且,他们为什么不利用丰富客户端平台(RCP)或者丰富互联网应用程序(RIA)堆栈呢?   关于这个问题,我的回答非常简单——Google希望解决他们自己的问题。为了理解GWT,我们首先需要理解Google创建它的动机。Google是不做商业软件的——他们做桌面软件,然后把它们放到web上(如GMail、Base、Spreadsheet、Calendar等)。这些软件所包含的用例相对较少,而用例通常都是很复杂的并且需要响应的。   Google需要一种开发新的web应用程序的方式,这种方式应该是:   1. 高度响应的   2. 迅速开发的   3. 迷人的   其中,第二个目标的障碍是:如果要在web上达到高度响应,那么,你必须采用很多快速解决方案,而且更糟糕的是,你需要针对不同的浏览器采用不同的快速解决方案。正是这个问题使AJAX应用程序的开发成本远远高于普通应用程序的。   针对这个问题,一个显著的解决方案是:把这些快速解决方案封装起来,放到简洁的界面背后。还有一个不很显著的解决方案是:使用大量的集成开发环境(IDE)和调试器,把快速解决方案封装到静态类型语言中,然后,尽量避免在应用程序中同时使用JavaScript。因此,GWT是解决快速开发AJAX类桌面应用程序的最佳方案,并且,GWT能够运行在主流的浏览器上而仅需要相当少的测试。   但是,剩下的开发人员应该怎么办呢(尤其是那些编写大型商业应用程序的开发人员)?我的观点是:如果GWT不是100%纯粹基于JavaScript的话,那么它将是一种非常棒的视图技术。关于HTML和JavaScript的问题是:目前,至少有4种大型的不兼容的平台实现机制。我们正在讨论的就是:一种能够配套四种虚拟机的语言,同时它能够与事后制定的标准松散耦合——James Gosling的恶梦实现了。   Web在商业应用程序中能够得到如此广泛的使用,其中一个主要原因就是:它是建立在Java承诺一次编程处处运行的基础上的(因为web平台比Java简单得多,而且对客户端环境的依赖较少)。而且web也能够给我们提供这些可能的特性:易于混搭、整合、重新设计等等。但是,JavaScript却使这个承诺变得毫无意义,因为在浏览器中存在着:   对于脚本规模的限制   对于脚本存储消耗的限制   对于脚本运行时间的限制   交叉域的访问限制   非常多其他类型的限制,程序缺陷和不兼容性,这些都在折磨着web程序员   所有的这些意味着你只能封装这么多——迟早一些“有毅力”的bug会死灰复燃,或者,使用标准工具包的话,你可能完成更多工作,而现在,你还需要采用JavaScript快速解决方案。实际上,我几乎能够确保:在所有规模足够大并且复杂的应用程序中,这种现象很快就会出现(我的意思是像内存溢出这样的bug,它们几乎不可能在平台中被调试出来)。确实,对于应用程序而言,HTML和HTTP从来都是没有意义的,它们的作用是用于在科学家之间分享信息的。不久,动态DOM、CSS、XML以及其他缩略语所代表的技术将运用到这些应用程序中来,虽然它们能够适合,但是,并不匹配——你可以用,但是无法走得很远。   现在,结束对AJAX的讨论,我们切换到应用程序本身上来。一个典型的大型企业应用程序有着各种不同的用户界面需求,而不仅仅是一个典型的桌面界面。在商业应用程序的图形用户界面(GUI)中,有许多大而复杂的工作流,但是,只是一小部分这样的工作流是需要达到高度响应的(典型地,某些查询或者搜索)。而且,通过使用HTML并且添加一些独立于浏览器的JavaScript,这些需求是很容易满足的。实际上,如果我们对商业用户的需求进行调查的话,就能够了解到他们所需要的软件是:   满足他们需要   能够快速开发、价格合理   不要与单独的开发商或者合作者绑定   易于与其他软件整合   通过以上分析,能够找到给商业世界带来这些的软件,并不是那些没有使用AJAX的软件。在web框架中,首先需要满足的是高度响应和整合——可能这就是为什么Struts如此流行的一个原因(运用Struts的主要过程是解决大量的遗留代码)。而且AJAX,如果有什么区别的话,那就是:加大整合难度、降低生产力。   但是,这就意味着我将永远宣传简单的web应用程序么?当然,不是!我只是认为:基于IE来模拟桌面,这是商业客户端所无法承受的。如果已经做好了一个通用的丰富的GUI平台,那么,我将成为第一个进行试验的人。使Eclipse 丰富客户端平台(RCP)更加完美或者在Adobe Flash上编译Java应用程序(至少是稳定的平台),甚至可能将Avalon运行在Linux上。仅仅给我一些任务——让我以此来编写Java代码、并且带来的困扰比web应用程序少,我就能够无障碍地工作了。   因此,在未来的几年内,Google Web Toolkit至关重要么?我肯定希望是不,因为这将意味着,我们必须在本质上具有破坏性的平台上来构建下一代的应用程序。而且,不论我是否有偏见,在21世纪的前十年内,我非常希望能够看到更好的平台发布。

技术流派02 Aug 2006 04:21 pm

MyEclipse 5.0 M2 注册码及下载地址

官方介绍:
The second milestone release (M2) of MyEclipse 5.0 is now available for immediate downolad. Please review the special instructions, release notes and the New and Noteworthy before download. MyEclipse 5.0M2 is compatible with Eclipse 3.2 release candidates. Please be sure to install Eclipse 3.2 prior to installation of MyEclipse 5.0M2.

Notably, the MyEclipse 5.0M2 release integrates the popular Matisse4MyEclipse Swing UI designer directly into MyEclipse, thereby enabling developers to easily build sophisticated graphical user interfaces for their applications. Though Matisse4MyEclipse is now supported on Linux, Mac users will be unable to utilize the Matisse4MyEclipse, MyUML, and MyEclipse Image Editor functions due to the long-standing Eclipse SWT_AWT bug #145890.
MyEclipse Enterprise Workbench 5.0 M2 for Windows 98/2000/XP (7/7/2006) 下载地址:

http://www.myeclipseide.com/Downloads+index-req-getit-lid-59.html

序列号过期时间为2099年12月31日,估计用上5-10年都有可能(就看myeclipse的更新速度了)。
Subscriber: www.1cn.biz
Subscriber Code: jLR8ZC-444-55-4467865481680090

注册成功后会发现:

Subscriber: www.1cn.biz
Product ID: E3MP (MyEclipse Professional Subscription)
License version: 9.99
Full Maintenance Included
Subscription expiration date (YYYYMMDD): 20991231
Number of licenses: Unlimited

Eclipse 3.2多国语言包

下载地址列表:
NLpack1 - German, Spanish, French, Italian, Japanese, Korean, Portuguese (Brazil), Traditional Chinese and Simplified Chinese.
windows OS:

http://ftp.jaist.ac.jp/pub/eclipse/eclipse/downloads/drops/L-3.2_Language_Packs-200607121700/NLpack1-eclipse-SDK-3.2-win32.zip

技术流派& 随心所欲25 Jul 2006 12:51 am

测试一下

技术流派& 点滴网摘21 Jul 2006 11:04 pm