<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[学Z-one]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[我想让自己飞翔，年轻是翅膀我要飞过太平洋，我想让自己跟着太阳，寻找那片属于我自己的晴朗]]></description>
<link>http://hi.baidu.com/hxzon</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[svn在linux下的使用（svn命令）]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/c1d10408f4ddc7db62d986bb.html]]></link>
        <description><![CDATA[
		
		<p>svn在linux下的使用（svn命令）</p>
<p style="text-indent: 2em">刚来公司时同事将电脑安装好了才给我使用，很多东西都不是我亲自动手，这几天我们换了新的电脑很多东西都是我自己动手实现，不容易啊，在使用linux下的SVN时遇到些问题，从网上拷来一篇文章学习了不少东西，保留下来以后好看。</p>
<p style="text-indent: 2em">svn在linux下的使用（svn命令）</p>
<p style="text-indent: 2em">1、将文件checkout到本地目录</p>
<p style="text-indent: 2em">svn checkout path（path是服务器上的目录）</p>
<p style="text-indent: 2em">例如：svn checkout svn://192.168.1.1/pro/domain</p>
<p style="text-indent: 2em">简写：svn co</p>
<p style="text-indent: 2em">2、往版本库中添加新的文件</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn add file</p>
<p style="text-indent: 2em">例如：svn add test.php(添加test.php)</p>
<p style="text-indent: 2em">svn add *.php(添加当前目录下所有的php文件)</p>
<p style="text-indent: 2em">3、将改动的文件提交到版本库</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn commit -m &ldquo;LogMessage&ldquo; [-N] [&ndash;no-unlock] PATH<img border="0" src="http://www.blogjava.net/Images/dot.gif">(如果选择了保持锁，就使用&ndash;no-unlock开关)</p>
<p style="text-indent: 2em">例如：svn commit -m &ldquo;add test file for my test&ldquo; test.php</p>
<p style="text-indent: 2em">简写：svn ci</p>
<p style="text-indent: 2em">4、加锁/解锁</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn lock -m &ldquo;LockMessage&ldquo; [&ndash;force] PATH<img border="0" src="http://www.blogjava.net/Images/dot.gif"></p>
<p style="text-indent: 2em">例如：svn lock -m &ldquo;lock test file&ldquo; test.php</p>
<p style="text-indent: 2em">svn unlock PATH</p>
<p style="text-indent: 2em">5、更新到某个版本</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn update -r m path</p>
<p style="text-indent: 2em">例如：</p>
<p style="text-indent: 2em">svn update如果后面没有目录，默认将当前目录以及子目录下的所有文件都更新到最新版本。</p>
<p style="text-indent: 2em">svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)</p>
<p style="text-indent: 2em">svn update test.php(更新，于版本库同步。如果在提交的时候提示过期的话，是因为冲突，需要先update，修改文件，然后清除svn resolved，最后再提交commit)</p>
<p style="text-indent: 2em">简写：svn up</p>
<p style="text-indent: 2em">6、查看文件或者目录状态</p>
<p style="text-indent: 2em">&nbsp;&nbsp; 1）svn status path<img border="0" src="http://www.blogjava.net/Images/dot.gif">（目录下的文件和子目录的状态，正常状态不显示）</p>
<p style="text-indent: 2em">【?：不在svn的控制中；M：内容被修改；C：发生冲突；A：预定加入到版本库；K：被锁定】</p>
<p style="text-indent: 2em">2）svn status -v path<img border="0" src="http://www.blogjava.net/Images/dot.gif">(显示文件和子目录状态)</p>
<p style="text-indent: 2em">第一列保持相同，第二列显示工作版本号，第三和第四列显示最后一次修改的版本号和修改人。</p>
<p style="text-indent: 2em">注：svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的，原因是svn在本地的.svn中保留了本地版本的原始拷贝。</p>
<p style="text-indent: 2em">简写：svn st</p>
<p style="text-indent: 2em">7、删除文件</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn delete path -m &ldquo;delete test fle&ldquo;</p>
<p style="text-indent: 2em">例如：svn delete svn://192.168.1.1/pro/domain/test.php -m &ldquo;delete test file&rdquo;</p>
<p style="text-indent: 2em">或者直接svn delete test.php 然后再svn ci -m &lsquo;delete test file&lsquo;，推荐使用这种</p>
<p style="text-indent: 2em">简写：svn (del, remove, rm)</p>
<p style="text-indent: 2em">8、查看日志</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn log path</p>
<p style="text-indent: 2em">例如：svn log test.php 显示这个文件的所有修改记录，及其版本号的变化</p>
<p style="text-indent: 2em">9、查看文件详细信息</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn info path</p>
<p style="text-indent: 2em">例如：svn info test.php</p>
<p style="text-indent: 2em">10、比较差异</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn diff path(将修改的文件与基础版本比较)</p>
<p style="text-indent: 2em">例如：svn diff test.php</p>
<p style="text-indent: 2em">svn diff -r m:n path(对版本m和版本n比较差异)</p>
<p style="text-indent: 2em">例如：svn diff -r 200:201 test.php</p>
<p style="text-indent: 2em">简写：svn di</p>
<p style="text-indent: 2em">11、将两个版本之间的差异合并到当前文件</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn merge -r m:n path</p>
<p style="text-indent: 2em">例如：svn merge -r 200:205 test.php（将版本200与205之间的差异合并到当前文件，但是一般都会产生冲突，需要处理一下）</p>
<p style="text-indent: 2em">12、SVN 帮助</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn help</p>
<p style="text-indent: 2em">svn help ci</p>
<p style="text-indent: 2em">&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;</p>
<p style="text-indent: 2em">以上是常用命令，下面写几个不经常用的</p>
<p style="text-indent: 2em">&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;</p>
<p style="text-indent: 2em">13、版本库下的文件和目录列表</p>
<p style="text-indent: 2em">&nbsp;&nbsp; svn list path</p>
<p style="text-indent: 2em">显示path目录下的所有属于版本库的文件和目录</p>
<p style="text-indent: 2em">简写：svn ls</p>
<p style="text-indent: 2em">14、创建纳入版本控制下的新目录</p>
<p style="text-indent: 2em">svn mkdir: 创建纳入版本控制下的新目录。</p>
<p style="text-indent: 2em">用法: 1、mkdir PATH…</p>
<p style="text-indent: 2em">2、mkdir URL…</p>
<p style="text-indent: 2em">创建版本控制的目录。</p>
<p style="text-indent: 2em">1、每一个以工作副本 PATH 指定的目录，都会创建在本地端，并且加入新增</p>
<p style="text-indent: 2em">调度，以待下一次的提交。</p>
<p style="text-indent: 2em">2、每个以URL指定的目录，都会透过立即提交于仓库中创建。</p>
<p style="text-indent: 2em">在这两个情况下，所有的中间目录都必须事先存在。</p>
<p style="text-indent: 2em">15、恢复本地修改</p>
<p style="text-indent: 2em">svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:</p>
<p style="text-indent: 2em">用法: revert PATH…</p>
<p style="text-indent: 2em">注意: 本子命令不会存取网络，并且会解除冲突的状况。但是它不会恢复</p>
<p style="text-indent: 2em">被删除的目录</p>
<p style="text-indent: 2em">16、代码库URL变更</p>
<p style="text-indent: 2em">svn switch (sw): 更新工作副本至不同的URL。</p>
<p style="text-indent: 2em">用法: 1、switch URL [PATH]</p>
<p style="text-indent: 2em">2、switch &ndash;relocate FROM TO [PATH…]</p>
<p style="text-indent: 2em">1、更新你的工作副本，映射到一个新的URL，其行为跟&ldquo;svn update&rdquo;很像，也会将</p>
<p style="text-indent: 2em">服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的</p>
<p style="text-indent: 2em">方法。</p>
<p style="text-indent: 2em">2、改写工作副本的URL元数据，以反映单纯的URL上的改变。当仓库的根URL变动</p>
<p style="text-indent: 2em">(比如方案名或是主机名称变动)，但是工作副本仍旧对映到同一仓库的同一目录时使用</p>
<p style="text-indent: 2em">这个命令更新工作副本与仓库的对应关系。</p>
<p style="text-indent: 2em">17、解决冲突</p>
<p style="text-indent: 2em">svn resolved: 移除工作副本的目录或文件的&ldquo;冲突&rdquo;状态。</p>
<p style="text-indent: 2em">用法: resolved PATH…</p>
<p style="text-indent: 2em">注意: 本子命令不会依语法来解决冲突或是移除冲突标记；它只是移除冲突的</p>
<p style="text-indent: 2em">相关文件，然后让 PATH 可以再次提交。</p>
<p style="text-indent: 2em">18、输出指定文件或URL的内容。</p>
<p style="text-indent: 2em">svn cat 目标[@版本]…如果指定了版本，将从指定的版本开始查找。</p>
<p style="text-indent: 2em">svn cat -r PREV filename &gt; filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%C3%FC%C1%EE%D1%A1%CF%EE">命令选项</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/c1d10408f4ddc7db62d986bb.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月25日 星期三  03:26 P.M.</pubDate>
        <category><![CDATA[命令选项]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/c1d10408f4ddc7db62d986bb.html</guid>
</item>

<item>
        <title><![CDATA[linux乱码问题:LANG变量的秘诀]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/1c607dcba5633f15be09e6bf.html]]></link>
        <description><![CDATA[
		
		<h1 class="postTitle"><a class="postTitle2" href="http://www.cnblogs.com/huangpeng/archive/2009/02/20/1394882.html">linux乱码问题:LANG变量的秘诀</a></h1>
<div class="clear"> </div>
<div class="postBody">
<p><a href="http://www.zhidun.com/phpbb/viewtopic.php?t=2396">http://www.zhidun.com/phpbb/viewtopic.php?t=2396</a></p>
<p>对于国内的Linux用户,经常烦恼的一个问题是:系统常常在需要显示中文的时候却显示成了乱码,而由于某些原因,需要英文界面的系统的时候,却苦于系统不能正常输入和显示中文.另外,由于大部分主要Linux发行版都是以英语为主体的,英文界面的系统和应用程序不管在界面的美观程度和稳定程度上都比中文的略好一些,各种奇怪的BUG也要少一些。因此，很多稍微有英语基础的Linux用户都宁愿使用英文界面的系统。但是，矛盾又突现出来：在英文系统下，如何才能正常显示和输入中文呢？有没有两全其美的方案呢？因此，笔者开始探索如何解决这个问题。我的完美状态是：系统和应用程序全部为英文(系统菜单、应用程序工具栏、默认输入法等），而我需要阅读和撰写中文文档的时候，能正确的显示中文并调出中文输入法。经过尝试，设置成功，现在以FC4　Linux为例，讲解一些相关知识和设置过程。 </p>
<span style=" font-size: 14px"><br>
本文主要通过修改系统配置的过程来展现修改linux系统配置的一般思路和过程，如果你不太有耐心看完，请跳过文章的1&mdash;4节，直接看第五节快速设置部分。 <br>
<br>
一，相关变量介绍 <br>
<br>
我们知道大部分Linux系统是无所谓中文版和英文版的，以FC4　Linux为例,系统发行的时候全世界都一样，系统是中文的还是英文的完全取决于你选择的语言包。不同国家的人在安装使用的时候选择属于自己国家的语言包，应用程序中的语言也不是写死的，它根据系统的设置来调用相关的语言，所以，一个应用程序写出来不经过修改，全世界不同国家的用户都可以以母语界面使用它，这就事所谓的internationalization（国际化），简称 i18n。这也是未来软件的发展趋势。 <br>
<br>
那么，如果我在系统中安装了不同的语言包和不同的字体，系统是如何判断我所要的语言界面并调用相关的字体的呢？系统中那些文件和变量在控制这些呢？ <br>
<br>
在redHat和FC系列Linux系统下，记录系统默认使用语言的文件是/etc/sysconfig/i18n,如果默认安装的是中文的系统，i18n的内容如下： <br>
代码: <br>
<br>
LANG=&quot;zh_CN.UTF-8&quot; SYSFONT=&quot;latarcyrheb-sun16&quot; SUPPORTED=&quot;zh_CN.UTF-8:zh_CN:zh&quot; <br>
<br>
<br>
其中LANG变量是language的简称，稍微有英语基础的用户一看就看出来这个变量是决定系统的默认语言的，即系统的菜单、程序的工具栏语言、输入法默认语言等。SYSFONT是system font的简称，决定系统默认用哪一种字体。SUPPORTED变量决定系统支持的语言，即系统能够显示的语言。需要说明的是，由于计算机起源于英语国家，因此，不管你把这些变量设置成什么，英语总是默认支持的，而且不管用什么字体，英文字体总包含在其中。 <br>
<br>
这些变量中LANG变量是在字符模式和图形界面下都用到的，在你登录系统后就被读取并生效，相信很多人在字符界面下输入Linux命令的时候经常会遇到显示出来的出错信息是乱码的情况，必需安装zhcon或者cce等字符模式下的中文软件才能正常显示中文的出错信息。如果我不要他显示中文乱码，我也不要为了看个很简单的出错信息而特意起用zhcon那我该怎么办呢？一个简单的零时解决的办法就是设置一下LANG变量： <br>
代码: <br>
<br>
[root@gucuiwen ~]# LANG=&quot;en_US.UTF-8&quot; <br>
<br>
<br>
即把系统的语言临时设置成英文，或者更简单一点，可以直接这样： <br>
代码: <br>
<br>
[root@gucuiwen ~]# LANG=&quot;&quot; <br>
<br>
<br>
即把LANG变量清空，由于英语是无论什么情况都支持的，LANG变量被清空后，系统就默认用英语。这样设置后，在字符模式下输出的出错信息等就是全英文的了。但这种设置是临时的，只是临时改变了LANG这个bash变量而已。当退出重新登录或者切换到其他字符终端后就无效了。到现在，读者应该想到了，只要把i18n文件中的LANG变量设置成英文的&rdquo;en_US.UTF-8&rdquo;，就可以永久解决这个问题了。修改后的文件如下： <br>
代码: <br>
<br>
#LANG=&quot;zh_CN.UTF-8&quot; LANG=&quot;en_US.UTF-8&quot; SYSFONT=&quot;latarcyrheb-sun16&quot; SUPPORTED=&quot;zh_CN.UTF-8:zh_CN:zh&quot; <br>
<br>
<br>
请不要把LANG变量简单的清空，因为这个变量不仅在字符模式下用到，在图形界面下也用到，简单清空在字符模式下确实不会有问题，但在图形界面下，却会造成中文无法正常显示的情况，在过去Re d ha t 系列的版本中i18n文件中还有一个叫LANGUAGE的变量，专门控制图形界面下的语言设置，现在的FC系列中已经把这两个变量整合成一个变量了。 <br>
<br>
经过修改这个变量，重新起动图形界面后，就可以看到界面一经完全是英文的了。但是按ctrl+空格却不能调出中文输入法，输入法菜单中也不能添加中文输入法。我们只简单的修改了LANG变量改变了系统语言设置，当然这一步也可以用图形界面下的工具修改，而不用亲自修改配置文件。 <br>
<br>
二，关于运行等级 <br>
<br>
这个问题似乎和这篇文章的的主题无关，但是介于现在越来越多的linux新手遇到linux图形界面的问题，而且在中文输入法设置过程中也牵涉到这些问题，因此想顺便提一下。 <br>
<br>
现在的linux安装完成后，默认就运行在第5个系统运行级别。在SYSTEM V 风格的UNIX系统中，系统被分为不同的运行级别，这和BSD分支的UNIX有所不同，常用的为0~6七个级别: <br>
<br>
0　关机 <br>
1　单用户 <br>
2　不带网络的多用户 <br>
3　带网络的多用户 <br>
4　保留，用户可以自给定义 <br>
5　图形界面的多用户 <br>
6　重起系统 <br>
<br>
由于现在的Linux系统安装完后就运行在第5个级别，即系统启动后直接进入图形界面，而不用在字符模式下登录后用startx或者xinit 来起动图形界面。这样看起来很方便。但是有什么坏处呢？　一旦你改变了某些设置，显示出问题的时候，系统不断在图形和字符间派徊，新手又不知道如何应对，十分麻烦，而且对于学习研究Linux的人来说，这样不利于了解和学习Linux底层的一些东西。很早就用Linux的老用户都知道，过去的Linux如 redhat6.0，都是默认运行接别为3，即使后来的RedHat9.0也可以在安装时候选默认字符登录还是图形登录。但现在的FC系列和其他大多数版本都不管三七二十一直接帮用户选择了直接图形界面登录。虽然对于大多数菜鸟来说，Linux确实越来越简单了，但是很多乐趣，那些新手也体验不到了。 <br>
<br>
也许你不相信，直接图形登录到系统确实会有很多问题，因此，作为一个有6年Linux使用经验的Linux和Solaris 系统管理员，我强烈建议在系统安装完成后把系统的默认运行等级设置在第3级，在字符终端登录后，再手工输入startx 命令起动图形界面。可以用如下的方法修改： <br>
用文本编辑器修改　/etc/inittab文件，把 <br>
代码: <br>
<br>
id:5:initdefault: <br>
<br>
<br>
这一行，修改成 <br>
代码: <br>
<br>
id:3:initdefault: <br>
<br>
<br>
保存后就重起，系统就默认起动到字符界面。不同运行级别之间的差别的在于系统默认起动的服务的不同，如运行级别3默认不启动X图形界面服务，而运行级别5 却默认起动。本质上是没有区别的，更无所谓不同级别间功能强弱的问题。用户完全可自给定义不同级别的默认服务。在任何运行级别，用户都可用init 命令来切换到其他运行级别。<br>
<br>
三，调出中文输入法： <br>
<br>
我之所以要在上面费那么多笔墨来讲系统运行级别，是因为对系统的认识是从底部向上开始的。 <br>
先把默认运行级别修改成3级别，当然，如果你实在不想修改，就临时用init 3命令切换到第3级。 <br>
<br>
这样你就可以用startx起动图形界面，然后用ctrl+alt+backspace退出图形界面。请注意我说的是&ldquo;退出&rdquo;图形界面，而不是按ctrl+alt＋F2切到一个字符终端。 <br>
<br>
好了，一切由startx开始。当你需要在Linux系统中设置某个东西，或者配置某个服务的时候，最关键的是要知道，这一切是怎么开始的。知其然必需知其所以然。如果你有空把/etc/rc.d目录下的系统起动时运行的脚本通读一遍，就完全知道了/etc下的各种配置文件是用来干什么的、如何修改、修改后有什么效果等等。玩起系统来也能随心所欲想怎么改就怎么改。这就是我一直强调的,知其然一定要知其所以然。一定要深入系统，读脚本，学会用命令和手工修改系统配置文件。这样对系统才会有透彻的了解，整天用图形界面的工具是不能帮助你对系统有教为透彻深入的了解的，不同的linux系统提供的图形界面配置程序会不同，但命令和配置文件都是相同的，越是底层的东西越具有通用性。所以，应当先学会手动配置和修改系统配置文件，等熟悉了以后，再用图形界面的工具修改，以便减少工作量。 <br>
<br>
上面提了一下我解决问题的思路。我是顺着这个思路开始的： <br>
<br>
中文输入法是在图形界面下使用的，是图形界面下运行的一个程序。而图形界面中的一切，都是由startx程序开启运行的。这就是问题的根源。 <br>
<br>
找出startx的位置： <br>
代码: <br>
<br>
[root@gucuiwen ~]# which startx /usr/X11R6/bin/startx <br>
<br>
<br>
看startx是一个脚本还是二进制文件： <br>
代码: <br>
<br>
[root@gucuiwen ~]# file /usr/X11R6/bin/startx /usr/X11R6/bin/startx: Bourne shell script text executable <br>
<br>
<br>
发现startx是一个shell 脚本，于是我打开它分析并阅读，看看能不能找到一些关于输入法起动过程和相关变量的线索： <br>
代码: <br>
<br>
[root@gucuiwen ~]# vi /usr/X11R6/bin/startx <br>
<br>
<br>
我找到了该脚本在运行过程中调用的其他脚本和配置文件的信息： <br>
代码: <br>
<br>
userclientrc=$HOME/.xinitrc userserverrc=$HOME/.xserverrc sysclientrc=/etc/X11/xinit/xinitrc sysserverrc=/etc/X11/xinit/xserverrc <br>
<br>
<br>
并且知道，startx的目的是寻找系统中可用的桌面系统X服务器系统、以及用户自定义的参数，最终调用xinit来初始化X图形界面。我没有在startx脚本中找到直接和起动输入法相关的代码，于是就可以肯定，输入法相关的代码在startx调用的脚本中。于是我来到 <br>
/etc/X11/xinit/ 目录下，阅读并分析该目录下的脚本，这些脚本有些是startx直接调用的，有些是被startx调用的脚本再调用的，存在着多级嵌套的关系，没有一点耐心还真是搞不清楚。最终我在/etc/X11/xinit/xinitrc.d目录中的xinput.sh脚本中找到了和输入法相关的代码： <br>
代码: <br>
<br>
lang_region=$(echo $tmplang | sed -e 's/&quot;..*//') lang_region=&quot;zh_CN&quot;　 #这一行是修改后加上去的 for f in $HOME/.xinput.d/${lang_region} &quot; $HOME/.xinput.d/default &quot; /etc/X11/xinit/xinput.d/${lang_region} &quot; /etc/X11/xinit/xinput.d/default ; do [ -r $f ] &amp;&amp; source $f &amp;&amp; break done <br>
<br>
<br>
通过分析脚本，我知道，图形界面启动的时候脚本是根据LANG变量来决定是否启用输入法，以及启用哪种语言的输入法等。问题在于：我们还没有把LANG变量改成英语之前，系统得到的LANG变量是中文的，因此，它知道需要在图形界面启动过程中启用中文输入法，但把LANG变量改成英文后，系统根据LANG 变量知道系统是英文的，它便不再启动中文输入法，也不再设置和导出相关的变量，导致中文输入法不可用。因此，只要在这个脚本中，&ldquo;骗&rdquo;过系统，让输入法脚本&ldquo;以为&rdquo;系统是中文的，它不就运行中文输入法，并导出相关变量了吗？　于是，通过分析脚本，我在xinput.sh中的： <br>
代码: <br>
<br>
<p>lang_region=$(echo $tmplang | sed -e 's/&quot;..*//') 后面又添加了 lang_region=&quot;zh_CN&quot; </p>
<br>
<br>
直接把lang_region=$(echo $tmplang | sed -e 's/&quot;..*//')　修改成　lang_region=&quot;zh_CN&quot;　也可以 <br>
多添加一行是为了以后改过来方便，直接删除添加的一行就可以了。 <br>
<br>
当然，把for循环中的/etc/X11/xinit/xinput.d/${lang_region}该成 <br>
/etc/X11/xinit/xinput.d/zh _CN也可以。 <br>
<br>
当然还有其他的改法，前提是你要懂得shell 脚本的语法，看得懂脚本的意思。这样修改后，即便系统是英文的，xinput.sh脚本也会去读取/etc/X11/xinit/xinput.d/zh _CN　文件并导出其中的内容、设置好XMODIFERS等输入法变量，并运行iiimx输入法程序。 <br>
<br>
那么为什么不在图形界面启动后直接运行iiimx输入法程序呢？实验一下就知道，这根本不行。因为输入法程序是须要和被输入的应用程序配合运行的软件，在运行过程中需要导出很多变量。直接运行iiimx只运行了主程序，而没相关变量，没办法和应用程序配合完成输入工作。 <br>
<br>
完成修改工作后，保存脚本文件。输入startx命令启动图形界面，就可以用全英文的系统界面和中文输入法了。但需要注意的是：由于系统是全英文的，默认输入法也是英文，通过GNOME或者KDE菜单起动的应用程序第一次输入中文的时候不能按ctrl+空格来切换到中文，需要用鼠标在任务栏上点击输入法图标切换，第一次切换后以后就可以用ctrl+空格快捷键来切换中英文输入法了。 <br>
<br>
四，一些后续问题 <br>
<br>
某些软件，比如Open Office，通过GNOME或者KDE菜单启动的话，即使切换到中文输入法也输不进中文，这是因为整个桌面系统的环境是英文的，软件&ldquo;继承&rdquo;了英文环境的相关变量，这些软件就&ldquo;认死理&rdquo;，就是不让输入中文，这时候可以打开一个gnome终端，把LANG变量临时设置成zh_CN.UTF-8　： <br>
<br>
[root@gucuiwen ~]# LANG=&quot;zh_CN.UTF-8&quot; <br>
<br>
然后在这个gnome终端中，用命令打开open office: <br>
<br>
[root@gucuiwen ~]# oowriter &amp; <br>
<br>
这样Open Office就&ldquo;继承&rdquo;了gnome终端的LANG变量，起动后，工具栏和菜单等都是中文的，而且能输入中文。推而广之，任何软件都可以用这种方法，根据需要，打开中文界面的软件和英文界面的软件。要以英文界面运行软件时，只要从GNOME或者KDE菜单打开，要用中文界面运行软件时，在终端中修该 LANG变量，从修改过LANG变量的终端中通过命令运行即可。当然，如果你还安装了其他语言的字体，你还可以以其他语言的界面来运行程序。如日语： <br>
<br>
[root@gucuiwen ~]# LANG=&quot;ja_JP.UTF-8&quot; <br>
[root@gucuiwen ~]# gedit &amp; <br>
<br>
我用上面的两条命令打开的gedit 编辑器就是全日语界面的，但是能输入中文和英文，并显示日文。从而达到，一个系统，多种语言和文字共存的目的。 <br>
<br>
当然，前提是要安装了日语字体和日语locale，否则所有有文字的地方会全部显示成一连串问号。总之，要先懂得原理，之后想怎么玩就怎么玩，随心所欲，完全不受限制，充分享受用Linux的乐趣。 <br>
<br>
<br>
五,　快速设置步骤： <br>
<br>
1.修改/etc/sysconf/i18n文件，把 <br>
LANG=&quot;zh_CN.UTF-8&quot; <br>
修改成： <br>
LANG=&quot;en_US.UTF-8&quot; <br>
<br>
2.修改/etc/X11/xinit/xinitrc.d/xinput.sh文件，把其中一行： <br>
<br>
lang_region=$(echo $tmplang | sed -e 's/&quot;..*//') <br>
<br>
修改成： <br>
<br>
lang_region=&rdquo;zh_CN&rdquo; <br>
<br>
<p>3,重新启动图形界面，就可以用英文的界面并且正确显示中文和输入中文。</p>
<p>--------------------------------------------------------------------</p>
<p>以下为个人补充:</p>
<p>&nbsp;&nbsp;   用ssh登录LINUX时,ssh终端有时会出现乱码,即使你设置LANG=en_US.UTF-8也一样.我试过SecureCRT,OpenSSH,SSH Secure Shell的客户端,都出现过这问题.有时更改一下客户端的设置就好了,但是有时更改客户端的设置后只能运行一次某个命令,之后又变成乱码了.</p>
<p>&nbsp;&nbsp;   一个偶然的机会,在网上看到有人说将LANG变量的值改成&quot;C&quot;就行了.不过还真邪了,就来个LANG=C,什么问题都解决了,也不用设置客户端了,真是莫名其妙!不过到现在还不知道那个&quot;C&quot;是什么意思,它咋就那么厉害.</p>
</span></div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%CF%B8%BD%DA">细节</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/1c607dcba5633f15be09e6bf.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月25日 星期三  03:21 P.M.</pubDate>
        <category><![CDATA[细节]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/1c607dcba5633f15be09e6bf.html</guid>
</item>

<item>
        <title><![CDATA[批处理命令之Start的详细用法]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/b9a40af379f0b7c10a46e094.html]]></link>
        <description><![CDATA[
		
		<p>批处理命令之Start的详细用法</p>
<p>(hxzon:运行&ldquo;start 文件路径&rdquo;打开新的命令行窗口，加上&ldquo;&quot;&quot;&rdquo;，即 &ldquo;start &quot;&quot; 文件路径&rdquo;后正常打开资源管理器。)</p>
<p>=====================</p>
<p>Start &shy;</p>
<p>启动单独的&ldquo;命令提示符&rdquo;窗口来运行指定程序或命令。如果在没有参数的情况下使用，start 将打开第二个命令提示符窗口。 &shy;</p>
<p>&shy;</p>
<p>语法 &shy;</p>
<p>start [&quot;title&quot;] [/dPath] [/I][/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/B][FileName] [parameters] &shy;</p>
<p>&shy;</p>
<p>参数 &shy;</p>
<p>&quot;title&quot; 指定在&ldquo;命令提示符&rdquo;窗口标题栏中显示的标题。 &shy;</p>
<p>/dpatch 指定启动目录。 &shy;</p>
<p>/i 将 Cmd.exe 启动环境传送到新的&ldquo;命令提示符&rdquo;窗口。 &shy;</p>
<p>/min 启动新的最小化窗口。 &shy;</p>
<p>/max 启动新的最大化窗口。 &shy;</p>
<p>/separate 在单独的内存空间启动 16 位程序。 &shy;</p>
<p>/shared 在共享的内存空间启动 16 位程序。 &shy;</p>
<p>/low 以空闲优先级启动应用程序。 &shy;</p>
<p>/normal 以一般优先级启动应用程序。 &shy;</p>
<p>/high 以高优先级启动应用程序。 &shy;</p>
<p>/realtime 以实时优先级启动应用程序。 &shy;</p>
<p>/abovenormal 以超出常规优先级的方式启动应用程序。 &shy;</p>
<p>/belownormal 以低出常规优先级的方式启动应用程序。 &shy;</p>
<p>/wait 启动应用程序，并等待其结束。 &shy;</p>
<p>/b 启动应用程序时不必打开新的&ldquo;命令提示符&rdquo;窗口。除非应用程序启用 CTRL+C，否则将忽略 CTRL+C 操作。使用 CTRL+BREAK 中断应用程序。 &shy;</p>
<p>非执行文件只要将文件名作为命令键入，即可通过其文件关联运行该文件。有关使用 assoc 和 ftype 在命令脚本中创建这些关联的详细信息，请参阅&ldquo;&rdquo;。 &shy;</p>
<p>在运行的命令的第一个标记为&ldquo;CMD&rdquo;字符串但不包括扩展名或路径限定符时，&ldquo;CMD&rdquo;将被 COMSPEC 变量的值取代。这样可以防止用户从当前目录选取 cmd。 &shy;</p>
<p>当您运行 32 位图形用户界面 (GUI) 应用程序时，cmd 不会在返回到命令提示符之前等待应用程序退出。如果从命令脚本运行应用程序，则不会发生这种新情况。在运行的命令中第一个符号不包括扩展名的情况下，Cmd.exe 使用 PATHEXT 环境变量的值确定要查找的扩展名以及查找顺序。PATHEXT 变量的默认值为：COM;.EXE;.BAT;.CMD（语法与 PATH 变量相同，使用分号分开不同元素）。当您搜索可执行文件且在任何扩展名上都没有匹配项时，start 将搜索目录名。 &shy;</p>
<p>&shy;</p>
<p>具体例子： &shy;</p>
<p>说明：如果你所在程序的路径中带有空格，那么必须用&quot;&quot;把路径括起来，否则系统会提示找不到XX文件，另外，在运行某些程序时，需在路径的前面加一对空白的&quot;&quot;，表示创建一个空白的窗口，它指向的程序是XXXXXXXX。还有就是别忘了空格。 &shy;</p>
<p>&shy;</p>
<p>当我想运行位于&ldquo;D:\draw\&rdquo;的&ldquo;photoshop.exe&rdquo;使，应该使用以下命令： &shy;</p>
<p>start &quot;&quot; &quot;D:\draw\photoshop.exe&quot; 表示以常规窗口运行程序 &shy;</p>
<p>&shy;</p>
<p>如果想让程序以最大化窗口运行，则使用以下命令： &shy;</p>
<p>&shy;</p>
<p>start /max &quot;&quot; &quot;D:\draw\photoshop.exe&quot; 表示以最大化窗口运行程序 &shy;</p>
<p>&shy;</p>
<p>最小化这是这样： &shy;</p>
<p>&shy;</p>
<p>start /min &quot;&quot; &quot;D:\draw\photoshop.exe&quot; 表示以最小化窗口运行程序 &shy;</p>
<p>&shy;</p>
<p>等待某个程序允许完毕，也就是窗口关闭后，再打开下一个程序这可以这样： &shy;</p>
<p>&shy;</p>
<p>start /wait &quot;&quot; &quot;D:\draw\photoshop.exe&quot; &shy;</p>
<p>start &quot;&quot; cmd.exe &shy;</p>
<p>&shy;</p>
<p>好了，希望你已经学会了。 &shy;</p>
<p>以上是网上转载,现在发表自己的心得,&shy;</p>
<p>start /d 详细解释&shy;</p>
<p>首先给大家看一个start /d 的 实际例子&shy;</p>
<p>start /d &quot;%temp%&quot; tmp.vbs 这段命令有另外几个写法&shy;</p>
<p>start /d %temp% tmp.vbs&shy;</p>
<p>start /d D:\Temp tmp.vbs&nbsp;&nbsp;  &lt;我的Temp变量文件夹换成了D盘,所以是D&gt;&shy;</p>
<p>通过上述三个表达方法相信大家应该能看明白,加了/d 参数以后就是运行/d 后面的指定目录而不是绝对路径.&shy;</p>
<p>start+空格+/d+空格+目录路径+空格+程序名&nbsp;&nbsp;  start /d patch *.*&shy;</p>
<p>而如果不加/d的话就是要写绝对路径了.&shy;</p>
<p>start &quot;&quot; &quot;%temp%\tmp.vbs&quot;&shy;</p>
<p>start &quot;&quot; %temp%\tmp.vbs&shy;</p>
<p>start %temp%\tmp.vbs&shy;</p>
<p>start D:\Temp\tmp.vbs&nbsp;&nbsp;  &shy;</p>
<p>在以上的几个例子里大家都看到了&quot;&quot;这两个连在一起的符号.根据自己的理解,我理解出它是在什么情况下运用的&shy;</p>
<p>当start 后面的路径在没有被&quot;patch&quot;括住时还能正常被cmd运行,那就不需要另外再加&quot;&quot;&shy;</p>
<p>那什么情况下没有被&quot;patch&quot;括住时不能被cmd正常运行了?详情请参阅我的另一篇日志&shy;</p>
<p><a href="http://user.qzone.qq.com/327815734/blog/1235549165" target="_blank"><font color="#800000">DOS 8.3 文件名命名规则</font></a><wbr></wbr>&nbsp;&nbsp;  在用批处理时 &shy;</p>
<p>对含有空格的文件夹名或文件名，批处理无法读取，找不到地址。 &shy;</p>
<p>如果路径被&quot;&quot;括起来的话,使用start &quot;patch&quot; 就会打开一个新的CMD窗口.&shy;</p>
<p>因为start 的其中一个参数是&quot;title&quot; 指定在&ldquo;命令提示符&rdquo;窗口标题栏中显示的标题。&shy;</p>
<p>所以在路径被&quot;&quot;括住的前面要另外加两个&quot;&quot;表示创建一个空白的窗口，它指向的程序是&quot;patch&quot;。&shy;</p>
<p>-----------------------------------------------------------------------------------------&shy;</p>
<p>再写一个运用start打开IE窗口,是打开新的一个IE窗口,而不是在原IE窗口&shy;</p>
<p>start&nbsp;&nbsp;  www.baidu.com&nbsp;&nbsp;&nbsp;&nbsp;  这个效果就是开启一个IE进程打开百度首页,如果你当前有打开IE的话那就在你当前浏览的窗口打开百度首页.把你正在看的网页改成百度首页.&shy;</p>
<p>start C:\Progra~1\Intern~1\iexplore.exe www.baidu.com&nbsp;&nbsp;  这个效果就是在你当前打开了IE窗口下再另外开启IE进程&shy;</p>
<p>另一种方法.看懂上面的朋友应该知道怎么弄了&shy;</p>
<p>start start &quot;&quot; &quot;C:\Program Files\Internet Explorer\iexplore.exe&quot; www.baidu.com&shy;</p>
<p>也可以用/d&shy;</p>
<p>start /d C:\Progra~1\Intern~1 iexplore.exe www.baidu.com&shy;</p>
<p>start /d &quot;&quot; &quot;C:\Program Files\Internet Explorer&quot; iexplore.exe www.baidu.com&shy;</p>
<p>既然谈到了IE,那就再写下IE的一些参数吧.&shy;</p>
<p>-k参数可以让IE工作在全屏方式下&shy;</p>
<p>-slf参数会让IE连接到默认的主页&shy;</p>
<p>-new开新的IE进程&shy;</p>
<p>-channelband 收藏夹&shy;</p>
<p>-nohome 无显示``blank空白页面也不显示&shy;</p>
<p>-remote参数可以在Unix平台上启动另一个IE进程&shy;</p>
<p>-v参数会显示出IE当前的版本(Unix平台上适用) &shy;</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%C3%FC%C1%EE%D1%A1%CF%EE">命令选项</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/b9a40af379f0b7c10a46e094.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月25日 星期三  10:03 A.M.</pubDate>
        <category><![CDATA[命令选项]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/b9a40af379f0b7c10a46e094.html</guid>
</item>

<item>
        <title><![CDATA[explorer命令详解 -grule -gdo]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/60ce054f1bdf3b3cafc3ab81.html]]></link>
        <description><![CDATA[
		
		<p> </p>
<p>explorer命令详解 -grule -gdo</p>
<p><font face="NSimsun">命令格式<br>
<br>
Explorer [/n][/e][[,/root],[path]][[,/select],[path filename]]<br>
<br>
参数说明<br>
<br>
/n表示以&ldquo;我的电脑&rdquo;方式打开一个新的窗口，通常打开的是Windows安装分区的根目录。<br>
<br>
/e表示以&ldquo;资源管理器&rdquo;方式打开一个新的窗口，通常打开的也是Windows安装分区的根目录。<br>
<br>
/root,[path]表示打开指定的文件夹，/root表示只显示指定文件夹下面的文件（夹），不显示其它磁盘分区和文件夹；[path]表示指定的路径。<br>
<br>
如果不加/root参数，而只用[path]参数，则可以显示其它磁盘分区和文件夹中的内容。另外，[path]还可以指定网络共享文件夹。<br>
<br>
/select,[path filename]表示打开指定的文件夹并且选中指定的文件，[path filename]表示指定的路径和文件名。<br>
<br>
如果不加/select参数，则系统会用相应的关联程序打开该文件。如果[path filename]不跟文件名就会打开该文件夹的上级目录并选中该文件夹。</font></p>
<p><font face="NSimsun">（hxzon：文件路径不认斜杠，需用反斜杠。）<br>
<br>
<br>
应用实例<br>
<br>
1.以&ldquo;资源管理器&rdquo;方式打开E盘根目录<br>
<br>
单击&ldquo;开始→运行&rdquo;，输入&ldquo;explorer /e,/root,e:\&rdquo;，回车即可。如果需要显示其它磁盘分区和文件夹中的内容，可以输入&ldquo;explorer /e,e:\&rdquo;。<br>
<br>
2.以&ldquo;我的电脑&rdquo;方式打开&ldquo;E:\Download&rdquo;目录下的QQ.exe文件在&ldquo;开始→运行&rdquo;中键入&ldquo;explorer /n,/select e:\download\qq.exe&rdquo;或&ldquo;explorer /select e:\download\qq.exe&rdquo;，回车即可。<br>
<br>
3.通过&ldquo;开始&rdquo;菜单中的&ldquo;Windows 资源管理器&rdquo;命令打开特定窗口<br>
<br>
以在Windows XP下打开E盘根目录为例。首先在&ldquo;开始&rdquo;菜单中用鼠标右键单击&ldquo;所有程序→附件→Windows 资源管理器&rdquo;项，选择&ldquo;属性&rdquo;命令。接着在弹出窗口的&ldquo;目标&rdquo;栏中输入&ldquo;%SystemRoot%\explorer.exe /e,e:\&rdquo;（默认值是&ldquo;%SystemRoot%\explorer.exe&rdquo;）即可。<br>
<br>
4.在右键菜单里添加&ldquo;打开我的文件夹&rdquo;命令打开特定文件<br>
<br>
以在Windows XP下打开&ldquo;E:\myfolder&rdquo;文件夹为例。在&ldquo;开始→运行&rdquo;中输入&ldquo;Regedit&rdquo;，打开&ldquo;注册表编辑器&rdquo;，展开分支&ldquo;HKEY_CLASSES_ROOT\Directory\shell，接着在右边窗口中新建一个名为&ldquo;PersonalWindow&rdquo;的子键，并将默认值改成&ldquo;打开我的文件夹&rdquo;；然后在&ldquo;PersonalWindow&rdquo;下新建一个名为&ldquo;Command&rdquo;的子键，在右侧的窗口中将&ldquo;默认&rdquo;值改为&ldquo;explorer.exe /e,E:\myfolder&rdquo;。这样就可以在浏览任何文件夹的时候，通过右键快捷菜单中的&ldquo;打开我的文件夹&rdquo;命令快速以资源管理器方式打开&ldquo;E:\myfolder&rdquo;文件夹。<br>
<br>
示例<br>
<br>
以下示例说明了 Windows 资源管理器参数的用法。<br>
<br>
Explorer /n<br>
<br>
此命令使用默认设置打开一个资源管理器窗口。显示的内容通常是安装 Windows 的驱动器的根目录。<br>
<br>
Explorer /e<br>
<br>
此命令使用默认视图启动 Windows 资源管理器。<br>
<br>
Explorer /e,C:\Windows<br>
<br>
此命令使用默认视图启动 Windows 资源管理器，并把焦点定位在 C:\Windows。<br>
<br>
Explorer /root, C:\Windows\Cursors<br>
<br>
此命令启动 Windows 资源管理器后焦点定位在 C:\Windows\Cursors folder。此示例使用<br>
<br>
C:\Windows\Cursors 作为 Windows 资源管理器的&ldquo;根&rdquo;目录。<br>
<br>
备注：请注意命令中&ldquo;/root&rdquo;参数后面的逗号。<br>
<br>
Explorer /select, C:\Windows\Cursors\banana.ani<br>
<br>
此命令启动 Windows 资源管理器后选定&ldquo;C:\Windows\Cursors\banana.ani&rdquo;文件。<br>
<br>
备注<br>
<br>
请注意命令中&ldquo;/select&rdquo;参数后面的逗号。<br>
<br>
Windows 资源管理器参数可以在一个命令中进行组合。以下示例显示了 Windows 资源管理器命令行参数的组合。<br>
<br>
Explorer /root, \\server\share, /select, Program.exe  (hxzon:select前有斜杠)<br>
<br>
此命令启动 Windows 资源管理器时以远程共享作为&ldquo;根&rdquo;文件夹，而且 Program.exe 文件将被选中。</font></p>
<p><font face="NSimsun">========================<br>
Java中打开资源管理器</font></p>
<p><font face="NSimsun">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Runtime.getRuntime().exec(&quot;cmd.exe  /c&nbsp;&nbsp;  explorer \&quot;&quot; + filepath + &quot;\&quot;&quot;);//start<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch (IOException e) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.debug(e.getMessage(), e);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</font></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%C3%FC%C1%EE%D1%A1%CF%EE">命令选项</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/60ce054f1bdf3b3cafc3ab81.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月25日 星期三  09:48 A.M.</pubDate>
        <category><![CDATA[命令选项]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/60ce054f1bdf3b3cafc3ab81.html</guid>
</item>

<item>
        <title><![CDATA[关于URI is hierarchical错误的解决方案]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/68667ad96432cbe339012fbc.html]]></link>
        <description><![CDATA[
		
		<div>关于URI is hierarchical错误的解决方案</div>
<div> </div>
<div>getResourceAsStream()<br>
=============================<br>
从类路径加载(一)<br>
关键字: 类路径 ClassLoader <br>
JAR文件是打包基于JAVA技术的解决方案的标准方法。它允许开发者将所有相关内容（.class、图片、声音、及所有支持的文件）打包到一个文件中。JAR格式支持压缩、认证、版本号及其他很多特性。 <br>
　　<br>
　　从JAR文件中读取文件是很麻烦的事情，但是也不一定全是这样。本文将告诉你如何从JAR文件中读取文件，首先，得到JAR文件中的文件目录，然后在进行具体的某一个文件的操作。 <br>
　　<br>
　　如果你对于常用的ZIP格式比较熟悉的话，JAR文件也就差不多。JAR文件提供一种将多个文件打包到一个文件中的方法，其中每一个文件可能独立地被压缩。JAR文件所增加的内容是manifest，它允许开发者可以提供附加的关于内容的信息。例如，manifest表明JAR文件中的哪个文件是用来运行一个程序的，或者库的版本号等 <br>
　　<br>
　　J2SEDK提供了一个jar工具，你可以用它从控制台读写JAR文件。然而，如果你需要在程序中代码读写JAR文件，可能需要一点时间（本文只包含如何在程序中读写JAR文件）。好消息是你可以做到这一点，而且你不用担心解压的事，因为类库将帮助你完成这些。你所需要的类文件位于java.util.jar包中。这里主要的类是JarFile，它是.jar文件自身的一个引用。较大文件中的每一个单独的文件是通过一个JarEntry引用的。 <br>
　　<br>
　　首先，通过把将JAR文件位置传给构造函数，创建一个JarFile的实例，位置可能是String或File的形式，如下： <br>
　　　 JarFile jarFile = new JarFile(&quot;thefile.jar&quot;); <br>
　　<br>
　　或者： <br>
　　<br>
　　　 File file = new File(&quot;thefile.jar&quot;); <br>
　　　 JarFile jarFile = new JarFile(file); <br>
　　<br>
　　<br>
　　你可能注意到当文件不在class path中时，JarFile类对于从JAR中读取文件文件是很有用的。 <br>
　　当你想指定目标JAR文件时，JarFile类对于从JAR中读取文件同样也很有用。当然，如果JAR文件在class path中，从其中读取文件的方法比较简单，你可以用下面的方法： <br>
　　<br>
　　　URL url = ClassLoader.getSystemResource(name); <br>
　　或者 <br>
　　<br>
　　　InputStream stream = <br>
　　　　 ClassLoader.getSystemResourceAsStream(name); <br>
　　<br>
　　这种技术允许你从在class path中的JAR文件里读取文件。你不必指定JAR文件名。 <br>
　　<br>
　　<br>
　　还有其他的构造函数，如认证支持，标志要删除的文件等。这些构造函数在这儿不做说明。 <br>
　　<br>
　　当你有了该JAR文件的一个引用之后，你就可以读取其文件内容中的目录信息了。JarFile的entries方法返回所有entries的枚举集合(Enumeration)。通过每一个entry，你可以从它的manifest文件得到它的属性，任何认证信息，以及其他任何该entry的信息，如它的名字或者大小等。 <br>
　　<br>
　　 Enumeration enum = jarFile.entries(); <br>
　　 while (enum.hasMoreElements()) { <br>
　　　 process(enum.nextElement()); <br>
　　 } <br>
　　<br>
　　正如前面提到的，每一个entry是一个JarEntry。该类有getName，getSize，getCompressedSize等方法。 <br>
　　<br>
　　下面，让我们举例说明在程序中如何使用这些特性。下面的程序显示你指定的JAR文件中内容的名称，大小，压缩大小等（这有点类似于在使用jar命令时，指定&quot;t&quot;和&quot;v&quot;选项）。 <br>
　　<br>
　　　import java.io.*; <br>
　　　import java.util.*; <br>
　　　import java.util.jar.*; <br>
　　<br>
　　　public class JarDir { <br>
　　　　public static void main (String args[]) <br>
　　　　　　throws IOException { <br>
　　　　　if (args.length != 1) { <br>
　　　　　　System.out.println( <br>
　　　　　　　 &quot;Please provide a JAR filename&quot;); <br>
　　　　　　System.exit(-1); <br>
　　　　　} <br>
　　　　　JarFile jarFile = new JarFile(args[0]); <br>
　　　　　Enumeration enum = jarFile.entries(); <br>
　　　　　while (enum.hasMoreElements()) { <br>
　　　　　　process(enum.nextElement()); <br>
　　　　　} <br>
　　　　} <br>
　　<br>
　　　　private static void process(Object obj) { <br>
　　　　　JarEntry entry = (JarEntry)obj; <br>
　　　　　String name = entry.getName(); <br>
　　　　　long size = entry.getSize(); <br>
　　　　　long compressedSize = entry.getCompressedSize(); <br>
　　　　　System.out.println( <br>
　　　　　　　name + &quot;\t&quot; + size + &quot;\t&quot; + compressedSize); <br>
　　　　} <br>
　　　} <br>
　　<br>
　　如果你用J2SE1.4.1中的jce.jar作为参数运行上面的JarDir程序，你将看到类似于下面的输出（...部分为省略掉的输出）： <br>
　　<br>
　　META-INF/MANIFEST.MF　　5315　　1910 <br>
　　META-INF/4JCEJARS.SF　　5368　　1958 <br>
　　META-INF/4JCEJARS.DSA　 2207　　1503 <br>
　　META-INF/　　　 0　　　 2 <br>
　　javax/　0　　　 0 <br>
　　javax/crypto/　 0　　　 0 <br>
　　javax/crypto/interfaces/　　　　0　　　 0 <br>
　　javax/crypto/interfaces/DHKey.class　　 209　　 185 <br>
　　javax/crypto/interfaces/DHPublicKey.class　　　 265　　 215 <br>
　　javax/crypto/interfaces/DHPrivateKey.class　　　267　　 215 <br>
　　javax/crypto/interfaces/PBEKey.class　　268　　 224 <br>
　　javax/crypto/SecretKey.class　　167　　 155 <br>
　　... <br>
　　<br>
　　注意输出最开始的META-INF行。这是manifest和安全认证信息。0字节的entries不是文件，但是有点相当于目录。 <br>
　　<br>
　　为了从JAR文件中真正读取一个指定的文件，你必须到其entry的InputStream。这和JarEntry不一样。这是因为JarEntry只是包含该entry的有关信息，但是并不实际包含该entry的内容。这和File和FileInputStream的区别有点儿相似。访问文件没有打开文件，它只是从目录中读取了该文件的信息。下面是如何得到entry的InputStream： <br>
　　<br>
　　　InputStream input = jarFile.getInputStream(entry); <br>
　　<br>
　　当你有了输入流，你就可以像读取其他流一样读取它。在文本流中(text stream)，记得使用读取器(Reader)从流中取得字符。对于面向字节的流，如图片文件，直接读取就行了。 <br>
　　<br>
　　下面的程序演示如何从JAR文件中读取文件。指定JAR文件的名称，要读取的文件的名称（打包JAR文件中的某一个文件）作为参数来调用该程序。要读取的文件应该有一个文本类型的。 <br>
　　<br>
　　　import java.io.*; <br>
　　　import java.util.jar.*; <br>
　　<br>
　　　public class JarRead { <br>
　　　　public static void main (String args[]) <br>
　　　　　　throws IOException { <br>
　　　　　if (args.length != 2) { <br>
　　　　　　System.out.println( <br>
　　　　　　　&quot;Please provide a JAR filename and file to read&quot;); <br>
　　　　　　System.exit(-1); <br>
　　　　　} <br>
　　　　　JarFile jarFile = new JarFile(args[0]); <br>
　　　　　JarEntry entry = jarFile.getJarEntry(args[1]); <br>
　　　　　InputStream input = jarFile.getInputStream(entry); <br>
　　　　　process(input); <br>
　　　　　jarFile.close(); <br>
　　　　} <br>
　　<br>
　　　　private static void process(InputStream input) <br>
　　　　　　throws IOException { <br>
　　　　　InputStreamReader isr = <br>
　　　　 new InputStreamReader(input); <br>
　　　　　BufferedReader reader = new BufferedReader(isr); <br>
　　　　　String line; <br>
　　　　　while ((line = reader.readLine()) != null) { <br>
　　　　　　System.out.println(line); <br>
　　　　　} <br>
　　　　　reader.close(); <br>
　　　　} <br>
　　　} <br>
　　<br>
　　假设在myfiles.jar文件中有一个spider.txt文件，spider文件的内容如下： <br>
　　<br>
　　　The itsy bitsy spider <br>
　　　Ran up the water spout <br>
　　　Down came the rain and <br>
　　　Washed the spider out <br>
　　<br>
　　你可以通过下面的命令来显示该文本文件的内容： <br>
　　<br>
　　　java JarRead myfiles.jar spider.txt　<br>
==========================</div>
<div> </div>
<div>在Java的程序发布中，很多人会选择采用二进制的jar的格式进行发布，怎么样读取Jar里面的资源呢？<br>
主要是采用ClassLoader的下面几个方法来实现：<br>
public URL getResource(String name)；<br>
public InputStream getResourceAsStream(String name)</div>
<div> </div>
<div>public static InputStream getSystemResourceAsStream(String name)<br>
public static URL getSystemResource(String name)</div>
<div> </div>
<div>后两个方法可以看出是静态的方法，这几个方法都可以从Jar中读取图片资源，但是对与动画的gif文件，笔者在尝试过程中发现，存在一些差异。</div>
<div> </div>
<div>String gifName为Gif文件在Jar中的相对路径。<br>
(1)使用了两个静态方法<br>
BufferedImage image=ImageIO.read（ClassLoader.getSystemResourceAsStream(gifName));</div>
<div> </div>
<div>或者</div>
<div> </div>
<div>Image image=Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(gifName));</div>
<div> </div>
<div>这两种方式可以成功地读取gif文件，但是对于gif动画，显示出来地是静态的。</div>
<div> </div>
<div>(2)使用其他两个方法<br>
Image image=Toolkit.getDefaultToolkit().getImage(this.getClass.getClassLoader().getResource(gifName));</div>
<div> </div>
<div>再这种方式下动画可以正常显示了。</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%B3%F6%B4%ED%BA%CD%BE%AD%D1%E9">出错和经验</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/68667ad96432cbe339012fbc.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月24日 星期二  02:54 P.M.</pubDate>
        <category><![CDATA[出错和经验]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/68667ad96432cbe339012fbc.html</guid>
</item>

<item>
        <title><![CDATA[俞敏洪+马云+牛根生+史玉柱经典语录]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/f2ab273f4a22bee654e72386.html]]></link>
        <description><![CDATA[
		
		<div>俞敏洪+马云+牛根生+史玉柱经典语录</div>
<div> </div>
<div>俞敏洪经典语录:</div>
<div> </div>
<div><br>
１．女人如果因为觉得一个男生帅就跟嫁给他，这是好色；男生因为女生漂亮而娶她，是审美。<br>
２.为什么你不要自傲和自卑？<br>
你可以说自己是最好的，但不能说自己是全校最好的、全北京最好的、全国最好的、全世界最好的，所以你不必自傲；同样，你可以说自己是班级最差的，但你能证明自己是全校最差的吗？能证明自己是全国最差的吗？所以不必自卑。<br>
３.年纪大了，人们看重不再是外表，不是你帅不帅，而是看你的内心的魅力：你的气魄、气概。<br>
４.这个世界上有很多天才，天才是用来欣赏的，不是用来攀比的。<br>
５.你说我是猪，不对，其实我连猪都不如。<br>
很多人失去了快乐，是因为他太敏感了。别人一句话、一个评论就使自己生气一个月。这时非常无聊的。严重了就成了马家爵，因为别人不请自己吃饭就郁闷地要杀人。<br>
６.要每天多努力一些，比别人多努力一个小时。<br>
７.使这个世界灿烂的不是阳光，而是女生的微笑。<br>
8. 要引人敬意，就要研究一个非常专业的领域，在那个领域中，你是最顶尖的，至少是中国钱10名，这样无论任何时候你都有话说，有事情可作。我俞敏洪原来想成为中国研究英语的前100名，但后来发现根本不可能。所以我就背单词，用1年的时间背诵了一本英文词典，成为中国单词专家，现在我出版的红宝书系列：从初中到GRE词汇有十几本，年销量100万册，稿费比我正式工作都高的多。<br>
9.大学生应该做的事情是：<br>
（1）专业方面，成为中国前100名；<br>
（2）人文方面，读500本书。<br>
（3）英语。<br>
10.如果你要引人注目，就要使得自己成为一棵树，傲立于大地之间；而不是做一颗草，你见过谁踩了一棵草，还抱歉地对草说：对不起？<br>
11．学英语好比学鸟叫，你在树林里学鸟叫，当有四只鸟落在你肩上时，说明你过了英语四级，当有六只鸟落在你肩上时，说明你过了英语六级，当有许多鸟落在你肩上，说明你成了鸟人。<br>
12．女人的温柔和男人的成就是成正比的。<br>
13、俞敏洪在《赢在中国》点评语录<br>
蜗牛的壳是自己加上的。<br>
既靠天，也靠地，还靠自己。<br>
心平气和地接受失败。<br>
做人要大方、大气，不放弃！<br>
世界上没有绝对的公平，公平只在一个点上。<br>
心中平，世界才会平。<br>
学会给别人机会。<br>
名次和荣誉，就像天上的云，不能躺进去，躺进去就跌下来了。名次和荣誉其实是道美丽的风景，只能欣赏。<br>
只要出于同情心和面子做的事，几乎都会失败。<br>
每条河流都有一个梦想：奔向大海。长江、黄河都奔向了大海，方式不一样。长江劈山开路，黄河迂回曲折，轨迹不一样。但都有一种水的精神。水在奔流的过程中，如果沉淀于泥沙，就永远见不到阳光了。<br>
14、俞敏洪：人要像树一样活着<br>
于《赢在中国》第三赛季36进12现场演讲<br>
人的生活方式有两种，<br>
第一种方式是像草一样活着，<br>
你尽管活着，每年还在成长，<br>
但是你毕竟是一棵草，<br>
你吸收雨露阳光，<br>
但是长不大。<br>
人们可以踩过你，<br>
但是人们不会因为你的痛苦，而他产生痛苦；<br>
人们不会因为你被踩了，而来怜悯你，<br>
因为人们本身就没有看到你。<br>
所以我们每一个人，<br>
都应该像树一样的成长，<br>
即使我们现在什么都不是，<br>
但是只要你有树的种子，<br>
即使你被踩到泥土中间，<br>
你依然能够吸收泥土的养分，<br>
自己成长起来。<br>
当你长成参天大树以后，<br>
遥远的地方，人们就能看到你；<br>
走近你，你能给人一片绿色。<br>
活着是美丽的风景，<br>
死了依然是栋梁之才，<br>
活着死了都有用。<br>
这就是我们每一个同学做人的标准和成长的标准。</div>
<div> </div>
<div> <br>
马云经典语录：</div>
<div> </div>
<div> </div>
<div> </div>
<div>1.当你成功的时候，你说的所有话都是真理。-<br>
2.我永远相信只要永不放弃，我们还是有机会的。最后，我们还是坚信一点，这世界上只要有梦想，只要不断努力，只要不断学习，不管你长得如何，不管是这样，还是那样，男人的长相往往和他的的才华成反比。今天很残酷，明天更残酷，后天很美好，但绝对大部分是死在明天晚上，所以每个人不要放弃今天。-<br>
3.孙正义跟我有同一个观点，一个方案是一流的Idea加三流的实施；另外一个方案，一流的实施加三流的Idea，哪个好？我们俩同时选择一流的实施，三流的Idea。-<br>
4.我既要扔鞭炮，又要扔炸弹。扔鞭炮是为了吸引别人的注意，迷惑敌人；扔炸弹才是我真正的目的。不过，我可不会告诉你我什么时候扔鞭炮，什么时候扔炸弹。游戏就是要虚虚实实，这样才开心。如果你在游戏中感到很痛苦，那说明你的玩法选错了。-<br>
5.&ldquo;其实，有的时候人的最大问题就在于他说的都是对的&rdquo; 。-<br>
---6.那些私下忠告我们，指出我们错误的人，才是真正的朋友。-</div>
<div> </div>
<div>7.我生平最高兴的，就是我答应帮助人家去做的事，自己不仅是完成了，而且比他们要求的做得更好，当完成这些信诺时，那种兴奋的感觉是难以形容的……-<br>
8.注重自己的名声，努力工作、与人为善、遵守诺言，这样对你们的事业非常有帮助。-<br>
9. 商业合作必须有三大前提:一是双方必须有可以合作的利益，二是必须有可以合作的意愿，三是双方必须有共享共荣的打算。此三者缺一不可。-<br>
10.服务是全世界最贵的产品，所以最佳的服务就是不要服务，最好的服务就是不需要服务.-<br>
11.永远不要跟别人比幸运，我从来没想过我比别人幸运，我也许比他们更有毅力，在最困难的时候，他们熬不住了，我可以多熬一秒钟、两秒钟。-<br>
12.今天到北大演讲心里特别激动。我一直把北大的学子当做我的偶像，一直考却考不进，所以我想如果有一天我一定要到北大当老师。-<br>
13.看见10只兔子，你到底抓哪一只？有些人一会儿抓这个兔子，一会儿抓那个兔子，最后可能一只也抓不住。CEO的主要任务不是寻找机会而是对机会说NO。机会太多，只能抓一个。我只能抓一只兔子，抓多了，什么都会丢掉.-<br>
14.我们公司是每半年一次评估，评下来，虽然你的工作很努力，也很出色，但你就是最后一个，非常对不起，你就得离开。-<br>
15.我们与竞争对手最大的区别就是我们知道他们要做什么，而他们不知道我们想做什么。我们想做什么，没有必要让所有人知道。-<br>
16.网络上面就一句话，光脚的永远不怕穿鞋的。-<br>
17.中国电子商务的人必须要站起来走路，而不是老是手拉手，老是手拉着手要完蛋。我是说阿里巴巴发现了金矿，那我们绝对不自己去挖，我们希望别人去挖，他挖了金矿给我一块就可以了。-<br>
18.我深信不疑我们的模式会赚钱的，亚马逊是世界上最长的河，8848是世界上最高的山，阿里巴巴是世界上最富有的宝藏。一个好的企业靠输血是活不久的，关键是自己造血。-<br>
19.我为什么能活下来？第一是由于我没有钱，第二是我对INTERNET一点不懂，第三是我想得像傻瓜一样。-<br>
20.发令枪一响，你是没时间看你的对手是怎么跑的。只有明天是我们的竞争对手。-<br>
21.如果早起的那只鸟没有吃到虫子，那就会被别的鸟吃掉。-<br>
22.听说过捕龙虾富的，没听说过捕鲸富的。-<br>
23.好的东西往往都是很难描述的。-<br>
24.在我看来有三种人，生意人：创造钱;商人：有所为，有所不为。企业家：为社会承担责任。企业家应该为社会创造环境。企业家必须要有创新的精神。-<br>
25.一个公司在两种情况下最容易犯错误，第一是有太多的钱的时候，第二是面对太多的机会，一个ＣＥＯ看到的不应该是机会，因为机会无处不在，一个ＣＥＯ更应该看到灾难，并把灾难扼杀在摇篮里。-<br>
-<br>
牛根生经典语录：</div>
<div> </div>
<div> </div>
<div> </div>
<div>1.小胜凭智，大胜靠德。-<br>
2.有干劲，你就洒下汗水；有知识，你就献出智慧；二者都不具备，请你让出岗位。-<br>
3.城市多喝一杯奶，农村致富一家人。-<br>
4.财散人聚，财聚人散。-<br>
5.一个产品，抓眼球，揪耳朵，都不如暖人心。-<br>
6.一个人智力有问题，是次品；一个人的灵魂有问题，就是危险品。经营人心就是经营事业。-<br>
7.好心态才有好状态。-<br>
8.帮助别人，但不伤害别人。-<br>
9.要想知道，打个颠倒。-<br>
10.从无到有，是件快乐的事。而从有到无，同样是种快感。-<br>
11.产品市场是亿万公民，资本市场是千万股民，原料市场是百万农民。-<br>
12.让认识你的人受益，还不能算好；让不认识你的人也受益，那才是真好。-<br>
13.吃亏吃到再也吃不进的时候，就不会吃亏了。苦多了，甜就大了。-<br>
14.想赢个三回两回，三年五年，有点智商就行；想做个百年老店，想一辈子赢，没有德商绝对不行。-<br>
15.学得辛苦，做得舒服；学得舒服，做得辛苦。-<br>
16.产品等于人品，质量就是生命。-<br>
17.看别人不顺眼，首先是自己修养不够。-<br>
18.从最不满意的客户身上，学到的东西最多。-<br>
19.管理是严肃的爱。-<br>
20.经营企业就是经营人心。-<br>
21.人不能把金钱带入坟墓，但金钱却可以把人带入坟墓。-<br>
22.一个人快乐不是因为他拥有得多，而是因为计较得少。-<br>
23.一个事业能不能成功，关键靠制度设计。-<br>
24.别人从零起步，而我从负数起步。-<br>
25.听不到奉承的人是一种幸运，听不到批评的人却是一种危险。-<br>
26.善待每一头牛，因为它们都是母亲。-<br>
27.布局决定结局。-<br>
28.世界上还有很多事情，只要你把它做透了，做成专家，你就能够为自己创造成功的机会。-<br>
29.会说话的产品卖得快，哑巴产品走得慢。-<br>
30.你如果拿五分的力量跟别人较劲，别人会拿出十二分的力量跟你较劲。-<br>
 <br>
史玉柱经典语录：</div>
<div> </div>
<div> </div>
<div> </div>
<div> <br>
1.90%的困难你现在想都没有想到，你都不知道那是困难。-<br>
2。团队核心成员有人要提出辞职时，不要挽留，既然提出了，他迟早是要走的。-<br>
3。如果没有价格上的优势与技术上的绝对优势，千万不要进入红海市场，否则你会必输无疑！-<br>
4。做连锁经营业务，一定要做一套傻瓜版的营销手册与管理手册，只有这样，才能实现远距离的管理。-<br>
5。做成功一个店之后离你大的成功就不远了，所以你首先就是脚踏实地、集中精力地先做出一家，也是要放弃掉连锁的这种，不要在将来如何做连锁方面做太多的梦，先脚踏实地做出第一家。-<br>
6。做全国性市场，一定要先做一个试销市场，要一点点来，快不得；做成了，真到做全国市场时，要快半步，慢不得！-<br>
7。初中水平跟博士后没啥区别。只要能干就行，我一直是这个观点，不在乎学历，只要能干能做出贡献就行。-<br>
8。作为我们曾经失败过，至少有过失败经历的人，应该经常从里面学点东西。人在成功的时候是学不到东西的，人在顺境的时候，在成功的时候，沉不下心来，总结的东西自然是很虚的东西。只有失败的时候，总结的教训才是深刻的，才是真的。-<br>
9.对过去成功的经验再好好总结总结，尤其是对失败的教训，下半夜夜深人静的时候你仔细想一想。反正睡觉也想，想一想实际上对你有很大收获比你看书更有用。因为有的书离你远，那是看自己过去写的东西。-<br>
10。最痛苦的时候，压力最大的时候，脑子里面只有一件事儿的时候，我把全国分公司经理招到荒山脚下北大门那个地方，招待所里面，然后在那个地方闭门开批判会。大家批判我，批判了三天三夜，我觉得那个就很有用。-<br>
11。要改变消费者固有的想法，比登太阳还难；但不是不可能的。-<br>
12。现在的时代，战略正确之后细节决定因素，有很多细节处理不好，你的战略正确了也会失败。-<br>
13。不要只看塔尖，二三线市场比一线的更大。-<br>
14。管理无情，人有情。-<br>
15。所谓人才，就是你交给他一件事情，他做成了；你再交给他一件事情，他又做成了。</div>
<div> </div>
<div>-</div>
<div> </div>
<div> </div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%C6%C0%CB%B5%B9%B2%C9%CD%CE%F6">评说共赏析</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/f2ab273f4a22bee654e72386.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月22日 星期日  08:22 P.M.</pubDate>
        <category><![CDATA[评说共赏析]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/f2ab273f4a22bee654e72386.html</guid>
</item>

<item>
        <title><![CDATA[QT编程书籍大汇总（2008年的）]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/8cbabf12f5df06c4c3fd78bc.html]]></link>
        <description><![CDATA[
		
		<p>QT编程书籍大汇总（2008年的）</p>
<dl class="t_attachlist"><dt>虽然旧了点但是还是很有用的，供参考 </dt><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/text.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI0M3wxNDMzOTA3OXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">Prentice.Hall.PTR.C++.GUI.Programming.with.Qt.4.Jun.2006.chm</a> (6.06 MB)</p>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI0NnwyZGMwNWQ2NXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">C++ GUI Programming with Qt 3.pdf</a> (3.56 MB)</p>
<div class="attach_popup" style="display: none; z-index: 301; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); left: 736px; position: absolute; top: 584px; opacity: 1" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aid3246">
<div class="cornerlayger">
<p>下载次数:18899</p>
<p>2008-4-10 23:34</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1MHw5ZmYzYzU4ZHwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">24小时Qt编程.part1.rar</a> (7.15 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1MXw4NWMxYjc5YXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">24小时Qt编程.part2.rar</a> (6.59 MB)</p>
<div class="attach_popup" style="display: none; z-index: 301; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); left: 736px; position: absolute; top: 654px; opacity: 1" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aid3251">
<div class="cornerlayger">
<p>下载次数:57431</p>
<p>2008-4-12 11:02</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/zip.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1MnwxYTQ0ZDRlYnwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">C++ GUI Programming with Qt 4 - Examples Source.tar.gz</a> (297.23 KB)</p>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1M3wzM2ViOGVjOXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">Document For QT.rar</a> (475.16 KB)</p>
<div class="attach_popup" style="display: none; z-index: 301; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); left: 736px; position: absolute; top: 724px; opacity: 1" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aid3253">
<div class="cornerlayger">
<p>下载次数:5562</p>
<p>2008-4-12 11:08</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1NHxlZmEyOTYwOHwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">Foundations_of_Qt_Development.pdf</a> (6.31 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p>下载次数:24343</p>
<p>2008-4-12 11:14</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1NXxkYzM1ZmM5NXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">KDE2_Qt_Programming_Bible.pdf</a> (2.63 MB)</p>
<div class="attach_popup" style="display: none; z-index: 301; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); left: 736px; position: absolute; top: 794px; opacity: 1" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aid3255">
<div class="cornerlayger">
<p>下载次数:9103</p>
<p>2008-4-12 11:30</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/text.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1NnxkMDVjZmQxZHwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">Qt4_Book.chm</a> (3.99 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1N3w2ZjkxM2ViYXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">KDE 2_Qt编程宝典.part1.rar</a> (7.63 MB)</p>
<div class="attach_popup" style="display: none; z-index: 301; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); left: 736px; position: absolute; top: 864px; opacity: 1" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aid3257">
<div class="cornerlayger">
<p>下载次数:28663</p>
<p>2008-4-12 11:52</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1OHw0MjBkZWU4N3wxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">KDE 2_Qt编程宝典.part2.rar</a> (5.68 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI1OXxjZDk0OTA0NXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">QT4.1参考手册.part1.rar</a> (7.63 MB)</p>
<div class="attach_popup" style="display: none; z-index: 301; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); left: 736px; position: absolute; top: 934px; opacity: 1" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aid3259">
<div class="cornerlayger">
<p>下载次数:20240</p>
<p>2008-4-12 12:39</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2MHxjZjJiMTc5MnwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">QT4.1参考手册.part2.rar</a> (6.05 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/text.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2MXxkZDQ2OWMyY3wxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">Qt4_Design_Patterns.chm</a> (3.99 MB)</p>
<div class="attach_popup" style="display: none; z-index: 301; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); left: 736px; position: absolute; top: 1004px; opacity: 1" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aid3261">
<div class="cornerlayger">
<p>下载次数:20629</p>
<p>2008-4-12 13:14</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2MnwyZmQ1MzliZnwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">qt4白皮书.pdf</a> (1.57 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2M3w4YmEzZjE0YXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">qt33-whitepaper-zh.pdf</a> (658.53 KB)</p>
<div class="attach_popup" style="display: none; z-index: 301; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); left: 736px; position: absolute; top: 1074px; opacity: 1" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aid3263">
<div class="cornerlayger">
<p>下载次数:3946</p>
<p>2008-4-12 13:29</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2NHw2ZDVkNTU1Y3wxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">qt41-class-chart.pdf</a> (82.05 KB)</p>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2NXw2NmE0MzZjZXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank" unselectable="true" outfunc="null" initialized="true">QT 3.3 中文白皮书.pdf</a> (660.97 KB)</p>
<div class="attach_popup" style="display: none; z-index: 301; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); left: 736px; position: absolute; top: 1144px; opacity: 1" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aid3265">
<div class="cornerlayger">
<p>下载次数:6207</p>
<p>2008-4-12 13:35</p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2NnxmMTgwY2RjNnwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">Qt Designer And Kdevelop-3.0 For Beginners.pdf</a> (2.12 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2N3w4Y2I0NGY3NXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">Qt_嘒彼小星.rar</a> (1.34 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2OHxlOThjYmM1ZXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">QtEmbedded在嵌入式Linux系统中的应用.pdf</a> (277.61 KB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger"> </div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI2OXxkMmQyMWEzY3wxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">Qte编程初步.pdf</a> (624.49 KB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger"> </div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI3MHxlZGQxMTg3ZHwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">Qt程序设计.pdf</a> (6.95 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/pdf.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI3MXxjZjdhN2MyYXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">Qt嵌入式图形开发.pdf</a> (3.72 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI3MnxmMTkzZjNhMnwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">[PDF][若干QT相关论文][2006-1-10].rar</a> (2.93 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI3M3xmMzc0YmFjZHwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">qt.programming.chs.xteam.2002.part1.rar</a> (7.63 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI5NHwxOTE0MDU1M3wxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">qt.programming.chs.xteam.2002.part2.rar</a> (7.63 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI5NXxhN2E0ZDU3MnwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">qt.programming.chs.xteam.2002.part3.rar</a> (7.63 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI5NnwxMDUzNTllOHwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">qt.programming.chs.xteam.2002.part4.rar</a> (7.63 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger"> </div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI5N3xhN2Y0ZTEwM3wxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">qt.programming.chs.xteam.2002.part5.rar</a> (7.63 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger"> </div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl><dl class="t_attachlist"><dt><img class="absmiddle" src="http://bbs.linuxpk.com/images/attachicons/rar.gif" border="0"> </dt><dd>
<p class="attachname"><a href="http://bbs.linuxpk.com/attachment.php?aid=MzI5OHxkOWIxYmNjNXwxMjU4ODgyMDEyfGMxMDZGTExDakFpNVpRczhwS09jMENCNUNFd1BZS0FCUkNnSlRLMzFQVUV3NzFR" target="_blank">qt.programming.chs.xteam.2002.part6.rar</a> (5.67 MB)</p>
<div class="attach_popup" style="display: none">
<div class="cornerlayger">
<p> </p>
</div>
<div class="minicorner"> </div>
</div>
<p> </p>
<p> </p>
</dd></dl> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%B1%E0%B3%CC%A1%A4%BB%F9%B4%A1">编程·基础</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/8cbabf12f5df06c4c3fd78bc.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月22日 星期日  08:11 P.M.</pubDate>
        <category><![CDATA[编程·基础]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/8cbabf12f5df06c4c3fd78bc.html</guid>
</item>

<item>
        <title><![CDATA[11个Java第三方类库]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/4ba01fd89ffb723f32fa1c1e.html]]></link>
        <description><![CDATA[
		
		<div>
<h3>11个Java第三方类库</h3>
<h2>单元测试</h2>
<p><strong><span style="text-decoration: underline"><span style="text-decoration: underline">1.</span><a style="text-decoration: none" href="http://www.dbunit.org/">DBUnit</a></span></strong></p>
<p>DBunit是一个基于junit扩展的数据库测试框架。它提供了大量的类对与数据库相关的操作进行了抽象和封装。</p>
<p> </p>
<p><strong><span style="text-decoration: underline">2.<a href="http://mockito.org/">MOckito</a></span></strong></p>
<p> </p>
<p>Mockito是一个针对Java的mocking框架。你可以使用简洁的API编写出漂亮的测试。</p>
<p> </p>
<p><strong><span style="text-decoration: underline">3.<a href="http://code.google.com/p/hamcrest/">Hamcrest Matchers</a></span></strong></p>
<p> </p>
<p>Hamcrest 是一个测试辅助工具，提供了一套通用的匹配符 Matcher，灵活使用这些匹配符定义的规则，程序员可以更加精确的表达自己的测试思想，指定所想设定的测试条件。</p>
<p>Junit4结合Hamcrest提供了新的断言语句-assertThat，只需一个assertThat语句，结合Hamcrest提供的匹配符，就可以表达全部的测试思想。</p>
<p> </p>
<h2>Apache Commons</h2>
<p><strong><span style="text-decoration: underline">4.<a href="http://commons.apache.org/configuration/">Configuration</a></span></strong></p>
<p>这个工具是用来帮助处理配置文件的，支持很多种存储方式</p>
<p> </p>
<p><strong><span style="text-decoration: underline">5.<a href="http://commons.apache.org/dbutils/">DbUtils</a></span></strong></p>
<p>DbUtils可以将数据库操作单独做成一个包，简化数据库操作。</p>
<p> </p>
<p><strong><span style="text-decoration: underline">6.<a href="http://commons.apache.org/io/">IO</a></span></strong></p>
<p>可以看成是java.io的扩展。它提供了文件阅读功能，以及一些使用的方法，类似于DbUtils。</p>
<p> </p>
<p><strong><span style="text-decoration: underline">7.<a href="http://commons.apache.org/lang/">Lang</a></span></strong></p>
<p>如果你要问我还有哪个库一会在此名单之上，我会告诉你是Lang或者google Collections。lang可以看成是对java.lang的扩展，提供了诸如StringUtils, StringEscapeUtils, RandomStringUtils, Tokenizer, WordUtils等工具类。</p>
<p> </p>
<h2>后起之秀</h2>
<p><strong><span style="text-decoration: underline">8.<a href="http://www.slf4j.org/">SLF4J</a></span></strong></p>
<p>SLF4J是为各种loging APIs提供一个简单统一的接口，从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。Slf4j类似于Apache Common-Logging和Log4J，但Slf4j比它们都要优秀。</p>
<p> </p>
<p><strong><span style="text-decoration: underline">9.<a href="http://code.google.com/p/google-collections/">Google Collections</a></span></strong></p>
<p>Java的集合框架是Java类库当中使用频率最高的部分之一，而Google Collections库是由Google基于Java5.0 Collections Framework开发的一套新的Java集合框架，提供一些高级集合操作的API。</p>
<p> </p>
<p><span style="font-weight: bold"><span style="text-decoration: underline">10.<a href="http://www.mchange.com/projects/c3p0/index.html">c3p0</a></span></span></p>
<p>C3P0是一个随Hibernate一同分发的开源的JDBC连接池， 它位于lib目录下。 包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。 </p>
<p> </p>
<p><strong><span style="text-decoration: underline">11.<a href="http://joda-time.sourceforge.net/">Joda Time</a></span></strong></p>
<p>Joda Time是一个强大易用的日期和时间库，可以完全取代JDKDate和Calendar类。</p>
</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/Tools">Tools</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/4ba01fd89ffb723f32fa1c1e.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月22日 星期日  01:10 P.M.</pubDate>
        <category><![CDATA[Tools]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/4ba01fd89ffb723f32fa1c1e.html</guid>
</item>

<item>
        <title><![CDATA[医疗保险，公积金、养老、生育、工伤、失业保险]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/b827af7747637011b151b943.html]]></link>
        <description><![CDATA[
		
		<p><span><font color="#000000">医疗保险，公积金、养老、生育、工伤、失业保险</font></span></p>
<p><span><font face="宋体" color="#000000" size="4">具体的社保构成比例为:<br>
<br>
&nbsp;&nbsp;&nbsp;  养老保险:单位每个月为你缴纳21%,你自己缴纳8%;<br>
&nbsp;&nbsp;&nbsp;  医疗保险:单位每个月为你缴纳9%,你自己缴纳2%外加10块钱的大病统筹(大病统筹主要管住院这块）；<br>
<br>
&nbsp;&nbsp;&nbsp;  失业保险:单位每个月为你缴纳2%,你自己缴纳1%;<br>
&nbsp;&nbsp;&nbsp;  工伤保险:单位每个月为你缴纳0.5%,你自己一分钱也不要缴;<br>
&nbsp;&nbsp;&nbsp;  生育保险:单位每个月为你缴纳0.8%,你自己一分钱也不要缴;<br>
&nbsp;&nbsp;&nbsp;  住房公积金:单位每个月为你缴纳8%,你自己缴纳8%<br>
&nbsp;&nbsp;&nbsp;  以上,这么算下来,单位每个月为你缴纳的社保比例应该是21%+9%+2%+0.5%+0.8%+8%=41.3%<br>
&nbsp;&nbsp;&nbsp;  你自己每个月为你缴纳的社保比例应该是8%+2%+10块+1%+8%=19%+10块<br>
&nbsp;&nbsp;&nbsp;  暂时去掉你交的10块钱不谈,单位缴纳的比例和你缴纳的比例应该为413:190,这就是说如果你每个月为自己的社保缴纳了190块钱,那么单位会往你的社保帐户上打进去413块钱,每个月你的社保帐户上增加的钱就应该是413+190=603块钱<br>
&nbsp;&nbsp;&nbsp;  所以说在你看不见的情况下,单位交的社保费用其实是你的2倍还多,所以你每个月交社保费的时候千万别心疼呀~你要知道单位比你交的多得多了呢,心疼的其实是单位。<br>
&nbsp;&nbsp;&nbsp;  话说回到那三险一金和五险一金,这里大家应该已经看出来了,其实江湖上所说的三险一金完全就等于五险一金,只是三险一金是从你个人交的保险(养老+医疗+失业+公积金)来说的,五险一金是从你单位交的保险(养老+医疗+失业+工伤+生育+公积金)来说的。把三险一金说成五险一金其实只是说起来好听而已。<br>
&nbsp;&nbsp;&nbsp;  除了单位能为你交社保,其实没工作但有收入的人员或者有单位但单位不交社保的人员也可以自己交社保,不过个人只能缴纳养老保险+医疗保险,工伤呀生育呀失业呀公积金呀，你个人都交不起来的。<br>
<br>
　　下面介绍下什么是社会保险缴纳基数<br>
刚才大家已经知道了每个月单位缴纳的社保比例和你缴纳的比例差不多是413:190了,那么现在又出来一个问题:自己每个月交的社保费和这个比例有什么关系呢,社保费到底是怎么确定的呢?<br>
&nbsp;&nbsp;&nbsp;  大家可能没注意过,各个省市每年都会在7月初发布一个&ldquo;社会保险最低缴纳基数&rdquo;,这个基数是根据上一年度职工的平均工资+福利+各种补贴等杂七杂八的费用经过统计和计算以后确定的,南京今年7月公布的最低基数是1189元,这是个什么意思呢,意思是说南京只要是正规为职工缴纳社保的单位,每个月为每个职工交的钱最少为1189×41.3%=491元,而职工每个月最少要交1189×19%+10=236元,这样你和单位每个月应该交的社保费就出来了。<br>
&nbsp;&nbsp;&nbsp;  但是现在又出来了新问题,南京市职工工资差别很大呀,有人一个月拿1000,有人一个月能拿10000,难道叫拿1000和拿10000的都交同样的社保费?<br>
&nbsp;&nbsp;&nbsp;  请注意,这1189是最低基数,在1189之上还有最高基数, 南京今年的最高基数好象是8000多,具体我也忘记了,反正如果你的工资每个月在1189元以下,单位也必须按照1189元为你交1189×41.3%= 491元,而你自己每个月最少也要交1189×19%+10=236元,这个就是1189作为社保最低缴费基数的意义之所在了:哪怕你一个月拿1000或者800块,你每个月最低也必须要按照这1189交钱!<br>
&nbsp;&nbsp;&nbsp;  但是如果你工资比1189要高,比如你一个月拿3000块,那单位去劳动局给你交保险的时候(你单位和你缴纳的社保费用都是劳动局扣的喔~)就应该对劳动局说:&rdquo;呀呀,我们这边有位同志一个月拿3000,请按照3000块钱的标准来扣社保费&rdquo;.那么劳动局就会以3000块为缴纳基数来扣你单位和你的钱然后打到你的社保帐户上,你单位这时候每个月就应该为你交3000×41.3%= 1239元,而你个人每个月就该交3000×19%+10=580元<br>
&nbsp;&nbsp;&nbsp;   就是说如果你的工资在1189元以下,那么每个月你就按照1189交;如果你的工资在1189元以上,那么每个月你就按照你的实际工资交,除非你的工资比最高基数还要高,如果你一个月拿10000而最高基数是8000的话,你和你单位就都按照8000交<br>
&nbsp;&nbsp;&nbsp;  在这里要揭露一些公司的无耻做法, 这些公司每个月可能给你好几千的工资,但是他们去劳动局申报你的基数的时候并不会按照你的实际工资去报,比如你如果每个月拿3000块,他们去劳动局可能说你只拿1189块,然后劳动局每个月只扣你1189×19%+10=236元,你恐怕还高兴的很,因为你觉得扣你的钱少,你实际拿到手的钱多错! 如果这样你的公司就太无耻了!因为公司缴纳的钱是你的2倍多,所以你交的越少他们也交的越少!如果按照你的实际工资3000来算,他们每个月该给你交 3000×41.3%=1239元的社保费,而按照1189来算的话,他们每个月只为你交1189×41.3%=491元!所以实际上你吃了大亏!正规的公司只会按照你的实际工资去劳动局申报然后扣钱!只有那些下作的公司才会不管你工资多高都按照最低标准给你交!!千万别以为每个月你的社保费扣的越少越好!!可能你已经被公司无耻地欺负了而你还完全不知情!!!要确定单位为你到底缴纳的基数是多少很简单:如果你每个月扣300块的社保, 那你的基数差不多就是300÷19%≈1578元,你看看你工资是不是这个数,如果你工资明显比1578高,比如每个月你其实拿3000或者4000,那肯定你已经被公司给欺负了,被欺负以后你可以去当地的<br>
劳动监察大队告你单位,一般一告一个准,不过最好在离职的时候把证据(比如工资条等)找好了再告,否则你告了以后在公司一般混不下去了- -+要再次说明的是,各个地方的社保构成比例不一样,如果你不在南京那你的缴费比例很可能不是19%,但是肯定不会差太多,比如你的基数可能是20%或22%,但绝对不会是30%或40%!所以虽然19%是南京的比例,但是外地的同学也可以靠这个大概算出自己的基数<br>
　  下面介绍一下这些社保费具体是什么情况以及该怎么用<br>
前面已经说了, 社会保险=养老保险+医疗保险+工伤保险+生育保险+失业保险+住房公积金<br>
先说说养老保险好了<br>
&nbsp;&nbsp;&nbsp;  这个保险一般都要交满15年以后到退休的时候才能终生享受养老金,所以想拿养老金的同学请务必在自己退休之前的15年以前就开始交,这个在南京以外差不多也是这样规定的如果你到退休年龄交养老保险不满15年,那等到你退休的时候国家会把你个人帐户上存的8%的养老金全部退给你<br>
&nbsp;&nbsp;  那你会问,单位给你交的21%到哪里去了?这个你就别指望国家会交给你了,你退休把你个人的钱拿走之后,国家就把单位为你交的21%的钱全部划到国家的养老统筹基金里了,从此这钱就和你再也没有关系了你也许会说:我靠!那是我的钱为什么不给我<br>
因为国家就是这么规定的<br>
&nbsp;&nbsp;&nbsp;  退钱的时候只退给个人他自己扣的个人交的钱,单位为他交的钱全部都为国家做贡献了- -<br>
<br>
&nbsp;&nbsp;&nbsp;  下面我们来看一下你退休时候的养老金是怎么算出来的<br>
&nbsp;&nbsp;&nbsp;  养老金的算法很复杂,因为国家每年都会把缴费基数变一次,举例来说好了:如果你现在30岁,你现在的缴费基数是3000元,而退休年龄如果是55岁的话,那你必须在你40岁以前就开始交养老保险了,而如果你现在从30岁就开始交,交到55岁是25年,那首先肯定你能享受养老金了,其次,如果25年后你交的 3000块的缴费基数已经变成了6000块(我说的是如果),那你55岁的时候首先每个月可以拿到6000×20%=1200块的基本养老金,这是国家给你的,此外你的个人帐户上的钱在25年里也积攒了不少,把缴费基数平均一下好了,(3000+6000)÷2=4500,那么你这25年里个人帐户上应该有4500×8%(你缴纳的养老保险的个人比例)×25年×12个月=108000元钱,那么除了之前的1200块以外你每个月还能拿到108000÷ 120=900块,这样你55岁开始每个月起码可以拿到1200+900=2100元的养老金,当然每年国家的基数还在往上涨,这样每年除了你自己的 900块,你退休以后每个月都会拿到比1200块更多的钱,那你的养老金当然也会越来越多的<br>
&nbsp;&nbsp;&nbsp;  所以说交养老保险交得越多越好,你交得越多你退休以后享受的也越多,而且,国家每年调整基数以后你拿的钱也会越来越多,现在交1000十年之后拿1500都是有可能的这里要介绍一个变态的政策,就是不管你在哪里交社保费,等你退休的时候你都只能回你的户口所在地享受当地的退休待遇,这么来看,在基数高的地方交社保但是退休回基数低的地方享受养老金的人那就亏大了, 为什么这么说呢?我来举个例子,如果你年轻的时候在南京工作,交了20年的社保然后退休了,但是如果你的户口在黑龙江,那你必须回黑龙江享受养老金.如果你在南京交了20年的平均基数是3000(我说的是如果),而当你退休的时候黑龙江的缴费基数才1000(我说的是如果),那么你退休的时候只能享受 1000的待遇!这是很亏的!一句话,如果你在富地方交社保但是退休的时候回穷地方享受社保,那你一辈子交的很多但是享受的很少!交3000 块可能只能享受1000块!这是很恐怖的事情,但是没办法,国家就是这个政策,所以请所有目前户口在西部等基数低的地方但是在北京或上海等基数高的地方工作交社保的同学注意了,你要么就在西部交社保,要么就在退休之前把户口迁到北京或上海,否则你就是在做人生一笔巨亏本的买卖<br>
&nbsp;&nbsp;&nbsp;  那也许你会说,如果我的户口在南京,那我在黑龙江交20年不就好了嘛,在基数低的地方交钱,退休的时候回基数高的地方享受高福利.错!你以为南京市劳动局会随随便便就让你享受么?!一般这种情况下南京会找个理由直接拒绝你转入!到时候你就聪明反被聪明误了:在黑龙江享受不了,在南京也享受不了!不过有些地方对这样的情况有了一些缓和的规定,比如南京允许你在退休前5年从基数低的地方转回南京,再在南京继续交5年南京的高基数,之后它才允许你回南京享受养老金.这个政策各个地方估计都不一样,今后打算转的同学最好现在就去你当地的劳动局把这个问题搞清楚,免得退休时候发生你意想不到的意外!<br>
　　下面说说医疗保险<br>
这个险国家的政策还算不错,重要的是住院报销的不少之前说了单位每月给你交的医疗保险是9%,你个人每月交的医疗保险大概是2%外加10块钱的大病统筹,这个大病统筹不管别的只管你住院,而那11%里国家每个月会往你的医保帐户上打属于你自己的2%,如果你每个月按照1189元的最低基数交社保,那么1189×2%=23.78元就是国家每个月打给你个人的钱,这个钱你可以积累起来直接刷卡去买药或者看门诊,剩下的9%国家就拿去算到医疗统筹基金里了<br>
&nbsp;&nbsp;&nbsp;  按照南京的规定,如果你从2007年1月开始缴纳医疗保险,那么从2007年2月起你就可以刷卡买药或者看门诊了,从2007年7月起你住院的费用就可以报销了,报的还蛮复杂的,举例说好了:<br>
&nbsp;&nbsp;&nbsp;  如果你2007年8月1日住院了,住的是南京市最好的三级医院,住院期间用的都是医保范围内的药,手术+住院等费用一共花了5000元,那么报销的时候医保中心首先扣除1000块,这是起步价,剩下的4000块医保中心可以报销4000×86%=3440元,你个人只要付4000×14%=560元就可以了,加上之前的1000元起步价,你花了5000块自己只要付1560元就可以了,而且这1560元还可以从你的医保卡里扣(如果你平时不怎么用那卡), 所以实际上你住院花不了多少钱医疗保险对于我们年轻人来说比养老保险重要多了,毕竟看病住院实在太他妈贵了,这也是参加社会保险最重要的意义之所在不过南京市规定医疗保险必须交满25年才能在退休以后终生享受,所以如果你55岁退休,那最迟30岁起就必须开始交医疗保险了<br>
　　下面说说工伤保险<br>
&nbsp;&nbsp;&nbsp;  这个险实践中一般用得少,我接触的也不多,需要提醒大家的是你如果在工作的时候或者上下班的时候出了什么事,这个险就用得上了<br>
&nbsp;&nbsp;&nbsp;  但是在实践中很多人出了事不注意保存证据,导致自己无法享受工伤保险,这是很可惜的如果你下班的时候被车撞了,那你应该赶快报警,让警察来调查记录并拍照采集证据,警察处理完以后会给你开个事故什么鉴定书之类的东西,你就可以拿这个去单位要求报工伤了如果你出了事就随便让人跑了而且还不找证人还不报警什么的,那没证据的情况下一般不会被采纳为工伤的<br>
&nbsp;&nbsp;&nbsp;&nbsp; 工伤还有个时效问题,如果你2007年7月1日出了工伤,那你必须马上报告单位,把警察出具的证据和事故鉴定书以及你出工伤以后去看病或住院的病历交给单位,叫单位拿着这些材料去做工伤鉴定,你的单位必须在2007年8月1日之前把你的有效材料送到工伤鉴定中心,如果距离你出工伤的日子超过了一个月, 那工伤可能就鉴定不起来了.如果你单位不去给你鉴定,那你自己可以拿着材料去鉴定中心鉴定,最好也不要超过一个月,否则会很麻烦很麻烦<br>
　　下面说说生育保险<br>
&nbsp;&nbsp;&nbsp;  这个也举例说明好了,如果你是位女生,每个月工资为1000元,2007年1月1日开始交生育保险,缴费基数为1189,而你2007年3月怀孕,2007年12月底生了孩子,2008年1月出院,那么你出院以后要赶快把结婚证(未婚生子的报销不了)+独生子女证(一般来说生2胎的报销不了)+病历+建大小卡检查和住院和手术费用的所有发票+住院清单+出院小结这些所有的材料交到公司,如果你怀孕时候检查花了500块,生孩子的时候住院+手术花了2000块,一般来说,公司在医保规定范围内基本上可以给你全部报销,报销以后给你的钱包括:500块检查费+2000块住院手术费+1189元/月×4个月=7256块, 1189元/月×4个月这是医保中心特别为报销的女生补贴的,只有女生报销才能拿的到<br>
&nbsp;&nbsp;&nbsp;  国家规定女孩子报销生育保险的时候必须给4个月的平均工资,所以你生孩子报销的话不仅不要花钱而且还可以赚4个月的工资!如果你基数交的比工资高,比如拿1000块交的是1189,那么你还赚了呢<br>
&nbsp;&nbsp;&nbsp;  生育保险起码要交一年才能享受,切记切记<br>
&nbsp;&nbsp;&nbsp;  此外还有个问题,男生也交生育保险呀~那么男生可不可以享受生育保险呢?<br>
如果你是男生,你老婆没工作或者工作单位没交保险,而她生孩子的时候你交生育保险也已经超过了一年,那么你也可以报销生育保险哦,但是以之前的例子为例,你只能报销500块检查费+2000块住院手术费的一半=1250元, 补贴的1189元/月×4个月的工资你就享受不到了!这是只有女生报销的时候才可以享受的哦~同样的花费,女生报销就能拿7256块,男生报销只能拿1250块,这大概也是中国少有的&rdquo;歧视男性&rdquo;的政策的说- -+所以说,女生要生孩子之前最好计划一下,提前一年开始找个单位交生育保险,可以赚呢!而男生如果要娶老婆,最好娶一个生孩子的时候已经交了一年生育保险而且缴的基数还比她本身工资高的女生哦!不过如果她实在没保险也没关系,你还可以给她报销生育保险呢,不过你没补贴的4个月工资拿,而且该报的费用你只能拿回来一半。<br>
　　　　　　　　　　　<br>
　　失业保险<br>
失业保险,这个也是要你交满一年才能享受,一般交1年拿2个月,交2年拿4个月,但一辈子最多拿24个月.举例说明好了:<br>
&nbsp;&nbsp;&nbsp;  如果你2007年1月1日开始交保险,2008年1月你被公司辞退了,那你可以让公司给你拿2个月的失业保险,如果这一年你都是以1189的基数交的保险,那你2个月起码可以拿到800多块钱<br>
&nbsp;&nbsp;&nbsp;  或者你2007年1月1日开始交保险,2008年1月你和公司合同到期了,你们都不想续签合同的话那你也可以在离开公司以前让公司给你去拿2个月的失业保险,也是800多块就是说合同到期或者公司辞退,你都可以按照一年拿2个月的失业金的比例去要求公司给你办,如果公司不给你办你可以去告它,一告一个准。<br>
&nbsp;&nbsp;&nbsp;  但是如果你是合同没到期自己辞职走,那就算你交满了1年也享受不到失业保险<br>
只要是自己辞职的,别说交1年了,就是交10年的失业保险到辞职的时候你也拿不到一分钱。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  　&nbsp;&nbsp;</font></span></p>
<p><font face="宋体" color="#000000" size="4">住房公积金是个好东西啊<br>
&nbsp;&nbsp;&nbsp;  这么说吧,如果你每个月为公积金交200块,那么公司每个月也往你帐户上打200块,你买房子的时候这就是400块了,如果你一辈子交了5万,那你帐户上就是10万了,这种好事大家一定不要拒绝啊。<br>
&nbsp;&nbsp;&nbsp;  公积金可以用来买房子,还贷款,装修什么的,如果你自己家可以找到地皮盖房子,那盖房子的钱也可以从公积金里付<br>
&nbsp;&nbsp;&nbsp;  如果你一直不用这钱,最后退休的时候貌似可以把钱全部取出来吧<br>
[进阶篇]各项补充说明　[5KB]<br>
来说说和南京不同的地方吧，魔都是不允许不缴医疗保险的，也就是说社保中心这一块包括养老医疗失业工伤生育一起问企业收的，倒是公积金可缴可不缴，因为这是隶属公积金中心的管辖范畴<br>
具体的社保构成比例为:<br>
养老保险:单位每个月为你缴纳22%,你自己缴纳8%;<br>
医疗保险:单位每个月为你缴纳12%,你自己缴纳2%;<br>
失业保险:单位每个月为你缴纳2%,你自己缴纳1%;<br>
工伤保险:单位每个月为你缴纳0.5%,你自己一分钱也不要缴;<br>
生育保险:单位每个月为你缴纳0.5%,你自己一分钱也不要缴;<br>
住房公积金:单位每个月为你缴纳7%,你自己缴纳7%<br>
补充住房公积金：单位每个月为你缴纳8%，你自己缴纳8%（这个只有一般效益很好的国企才会有的，且比例又公司自己定，一般公司缴个公积金就算很道义了）<br>
另外要说的是社保和个调税的关系<br>
在缴纳个调税的时候，是把个人扣金那部分扣除后再算应纳税基数的，但是有一点要注意，公积金和补充公积金超过12%的部分（个人和企业缴纳部分）也需要算在应纳税基数中<br>
比如上面说的公积金7%、补充公积金8%，加起来就是15%，那么个人扣金那3%的部分就要算在应纳税额中，同时，企业的那3%，虽然不是从个人工资里扣除的，但还是要算在应纳税基数中，也就是说，个人要为这笔费用的个调税埋单。<br>
医疗保险使用这一块，各地对于划入个人账户的方式不同<br>
爱说的是南京那种按月划入的方式，还有很多地方是按年划入<br>
具体来说是这样的，医保年度是每年的4月1日至次年的3月31日，同时社保缴费基数变更也是在4月上中旬确定。<br>
医保局会在4月1日按照每人的社保基数预提1年的个人医保（也就是那2%）进入个人医保卡账户，但这时候就有问题出现了，4月1日的时候，当年的社保基数尚未确立，医保局只能按照上一年的基数来预计当年的个人医保金，那么这个差额该怎么办呢？那就是在第二年的4月1日来补足少算的或扣除多给的<br>
可能这么大段字看起来会觉得很麻烦，那我们举例来说<br>
某人2004年月平均收入5000元，2005年月平均收入4000元，2006年收入6000元<br>
医保局在2006年4月1日给个人账户打入金额的时候，社保中心还没有核准2006年的缴费基数（也就是2005年的月平均收入），所以医保局还是按照2005年的缴费基数（也就是2004年的月平均收入）来计算全年的个人账户数额，也就是5000*2%*12=1200，<br>
但实际上此人这一年的个人账户数额应该是4000*2%*12=960，<br>
那么这多给的240元会在2007年4月1日的时候扣除。同时2007年4月1日打入帐户的新一年个人金依然是960元（其实应该是6000*2%*12=1440元），少给的480元，会在2008年4月1日补回来。<br>
所以因为大部分人每年的缴费基数都不相同，所以几乎每个人每年3月的帐户总数和4月时看到的历年帐户的金额是不同的，这就是医保局在做每年的费用核算时产生的。<br>
工伤还有个时效问题,如果你2007年7月1日出了工伤,那你必须马上报告单位,把警察出具的证据和事故鉴定书以及你出工伤以后去看病或住院的病历交给单位,叫单位拿着这些材料去做工伤鉴定,你的单位必须在2007年8月1日之前把你的有效材料送到工伤鉴定中心,如果距离你出工伤的日子超过了一个月,那工伤可能就鉴定不起来了.如果你单位不去给你鉴定,那你自己可以拿着材料去鉴定中心鉴定,最好也不要超过一个月,否则会很麻烦很麻烦<br>
这点有个补充，申报工伤有两种途径，一个是单位申报，就和上面爱说的一样，30天内有效，还有一种是个人申报，一年内有效，但由于伤势或其他原因，拖得越久证据就越不足，个人申报的话也会因为不懂得流程耽误很多时间和精力。<br>
生育保险方面，流产的、难产的、多胞胎的、早产的，可以具体看看下面这个链接，虽然是上海的政策，但各地都有相似性。<br>
可能上海和南京政策上有不同，公司绝对不会管这方面的报销，都是由医保直接和孕妇挂钩<br>
在生育检查生产住院期间，医保统筹范围之内的都是医保统筹支付，当然自费的项目（比如高级病房、自费药etc）还是要自己承担。<br>
生好孩子后，自己去医保局申请生育补助，医保局给3000块钱社保那块，再给3个月的缴费基数的收入<br>
晚育的加半个月，多胞胎的，多一个加半个月<br>
如果上一年月平均工资性收入是大于社保缴费基数上限的，那么社保只支付缴费基数那部分，剩下的由公司支付<br>
例如某人上一年月平均工资性收入为10000，社保基数封顶为7392。<br>
那么社保给的每月收入为7392，剩下的10000-7392=2608就是由单位支付。<br>
（虽然我觉得这种情况，在云中的各位看官不太容易碰到=。=。。）<br>
其实关键的地方有两点：<br>
1、生育前缴费满1年<br>
2、社保缴费基数正常申报<br>
所以说同学们，特别是女同学们，不要觉得公司给你申报的基数高低无所谓，甚至为了基数低些自己工资到手高而庆幸，到这时候就看出问题来了吧！<br>
这也就是为啥有那么多女职工宁可留在工资低但是社保足额申报的地方生完孩子再跳槽的原因，一来小地方不喜欢未婚未遇的女性员工，二来生育保险也是很大一笔收入补充。<br>
比如说，一个人正常工资3000，但是社保基数申报时算上她的年终奖等等其他奖金收入，那么月平均可能达到5000，这时候生孩子的那几个月拿的就是一月5000的收入。<br>
如果你一直不用这钱,最后退休的时候貌似可以把钱全部取出来吧 <br>
不是貌似，是绝对可以！<br>
而且公积金贷款比商业贷款利息低的多，这也是一大好处。</font></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%BD%CC%D3%FD%A1%A4%B4%F3%D1%A7">教育·大学</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/b827af7747637011b151b943.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月22日 星期日  11:15 A.M.</pubDate>
        <category><![CDATA[教育·大学]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/b827af7747637011b151b943.html</guid>
</item>

<item>
        <title><![CDATA[没有事业的女人会很惨]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/20521c4c943318f3d72afc96.html]]></link>
        <description><![CDATA[
		
		<p>没有事业的女人会很惨</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>  今天行政又推荐了一个素质<wbr></wbr>不错的女士刘小姐，到我办公室面<wbr></wbr>试，我扫了一眼她的简历，就看透<wbr></wbr>她了，不过还是让她叙述了一下，<wbr></wbr>她一直做售楼员，４年换了３个项<wbr></wbr>目，中间休息了一年，现年２８岁<wbr></wbr>，来到我们公司，希望继续在项目<wbr></wbr>上干接待客户的工作． <br>
　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 我们公司招聘<wbr></wbr>的人员，归纳起来有三类，一类是<wbr></wbr>物业顾问，是所谓行销的，一类是<wbr></wbr>项目销售，是坐销的，第三类是行<wbr></wbr>政文员类．　 <br>
　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 我每次都会让<wbr></wbr>面试的女士挑，往往她们愿意干行<wbr></wbr>政，其次是坐销，实在挑行销的寥<wbr></wbr>寥无几．即使我告诉她们物业顾问<wbr></wbr>底薪最高，还有提成，未来还能当<wbr></wbr>经理，转到行政部或项目部是很ea<wbr></wbr>sy的事，她们仍然不会改变他们的<wbr></wbr>选择． <br>
　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 她们的选择顺<wbr></wbr>序，正好是与赚钱多少相反的，怪<wbr></wbr>了．　 <br>
　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 其实她们的选<wbr></wbr>择顺序是按照工作的压力顺序来选<wbr></wbr>择的，也就是说，她们宁可找一个<wbr></wbr>，压力小的，稳定的，清闲的工作<wbr></wbr>，即使赚钱少，升值机会小，发展<wbr></wbr>难．可惜，这样的人，我连行政部<wbr></wbr>都不会录用她，因为她们根本没有<wbr></wbr>事业心，也不会学习，除非现在公<wbr></wbr>司恰好有个紧急的缺岗． <br>
　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 她们的年龄均<wbr></wbr>再２５岁上下，有些确实形象可人<wbr></wbr>，但是，我真的为她们的未来担心<wbr></wbr>，因为，很有可能，她们的未来很<wbr></wbr>麻烦，甚至会过悲惨的后半生．．<wbr></wbr> <br>
　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 在最能吃苦的<wbr></wbr>时候寻求了安逸，在最能学习的时<wbr></wbr>候，谈了恋爱，因为她们的计划是<wbr></wbr>２８岁以前结婚生子，所以打扮，<wbr></wbr>交友是她们全部的世界，当然了，<wbr></wbr>享受青春的快乐时光，也是最吸引<wbr></wbr>她们的，即使为此请假，辞职，也<wbr></wbr>不会当回事． <br>
　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 自然她们在２<wbr></wbr>８岁，如期的嫁给了一个有钱的或<wbr></wbr>是有潜力的男人，这个男人之所以<wbr></wbr>娶她，往往是因为她花开正艳。 <wbr></wbr><br>
　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 老公那个时候<wbr></wbr>或许还在事业的发展阶段，她很听<wbr></wbr>老公的话，辞职回家了，当了全职<wbr></wbr>的太太，有些还在无心的上班，直<wbr></wbr>到生孩子． <br>
　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 对于一直处于<wbr></wbr>底层员工的妇女，生孩子，几乎是<wbr></wbr>她们事业的结束。除非是在事业单<wbr></wbr>位，如果是一般性的单位，她们往<wbr></wbr>往因此就辞职了，怀孕到生，喂养<wbr></wbr>孩子半年，一切恢复的时候，想起<wbr></wbr>上班就头疼，首先，不好再找清闲<wbr></wbr>的工作，因为那个时候，要找可以<wbr></wbr>回家比较早的差事，否则，无法照<wbr></wbr>顾孩子，不放心呀，其次发现要雇<wbr></wbr>阿姨来代替自己，一盘算，阿姨比<wbr></wbr>自己还贵，结果，给了自己一个借<wbr></wbr>口，为了教育孩子，亲自带孩子，<wbr></wbr>一直到长大，其实对事业的没追求<wbr></wbr>，以及对社会工作的畏惧也是造成<wbr></wbr>她成为专职太太的原因．　 <br>
　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 全家的经济重<wbr></wbr>担落到了老公的身上，老公在事业<wbr></wbr>上不断的努力和学习，和业务关系<wbr></wbr>的不断交往，素质提高了，职位和<wbr></wbr>金钱提高了，朋友圈子也越来越大<wbr></wbr>，社会不断的进步，老公也不断的<wbr></wbr>进步． <br>
　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 老婆其实也不<wbr></wbr>是那么的忙，孩子上幼儿园了，她<wbr></wbr>一个人，孩子上学了，她还是一个<wbr></wbr>人，偶尔也会和另一个不上班的太<wbr></wbr>太，一起逛街，美容，但是发现，<wbr></wbr>自己和社会越来越远，几次鼓起勇<wbr></wbr>气要再次步入社会，但是年龄不饶<wbr></wbr>人，原来的基层工作，她不能干，<wbr></wbr>原来干不了的，现在更是干不了，<wbr></wbr>其实这样的女人，也不会特别的贤<wbr></wbr>惠，料理家务慢慢的失去了兴趣，<wbr></wbr>毕竟是新时代的女性，哪里愿意甘<wbr></wbr>心在家老这么呆着，可是，后悔呀<wbr></wbr>，小得时候没有认真的读书，在职<wbr></wbr>的时候没有学什么，也没有真正潜<wbr></wbr>心与任何的事业，没有一技之长，<wbr></wbr>怎么开始呢，怎么坚持呢，在可以<wbr></wbr>吃苦的时候，享乐了，人生的糖果<wbr></wbr>都吃光了，现在除了不断的犹豫，<wbr></wbr>影响着心情，甚至还烦扰着老公．<wbr></wbr>可是她可以忍受，毕竟有幸福的家<wbr></wbr>，有爱她的老公和可爱的孩子。只<wbr></wbr>是她经常抱怨家务的烦琐，她为了<wbr></wbr>这个家，奉献了一切，老公懒得和<wbr></wbr>她抬杠，其实老公想说，我为了这<wbr></wbr>个家在拼． <br>
　　　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 她最大的愿望<wbr></wbr>，是想让老公跟她耐心的聊一会儿<wbr></wbr>，可是他回家很晚，因为应酬，即<wbr></wbr>使回了家，也不说话，看电视睡觉<wbr></wbr>，女人不让他睡，吵架，老公觉得<wbr></wbr>这个女人越来越难以理喻，女人感<wbr></wbr>觉男人好象不那么爱她．吵架，对<wbr></wbr>于一对幸福的夫妇，是打情骂俏，<wbr></wbr>而对于冷漠的夫妇，是想打破麻木<wbr></wbr>，打破了麻木，往往是烦，往往是<wbr></wbr>彻底的厌恶。 <br>
　　　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 两个人在社会<wbr></wbr>生活中的不同角色，决定了两个人<wbr></wbr>产生了巨大的差异，这种差异，造<wbr></wbr>成了共同语言的减少，女人当初吸<wbr></wbr>引男人的魅力，已经不在，而跋扈<wbr></wbr>和神经质，不断的骚扰着男人，一<wbr></wbr>直到男人，真的有了外遇． <br>
　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 一个在恐惧中<wbr></wbr>生活的女人，怀着不愿承认的自卑<wbr></wbr>，在老公熟睡的时候，偷偷的翻查<wbr></wbr>老公的手机，多么可怜的景象，发<wbr></wbr>现了什么，又能怎样。　 <br>
　　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 女人，悲惨的<wbr></wbr>生活开始了，其实早就开始了，这<wbr></wbr>个时候，她将在寂寞中老去，她将<wbr></wbr>与家务为伴，与电视为伴，如果她<wbr></wbr>精力旺盛，还会与家长里短为伴，<wbr></wbr>当然，作为报复，她甚至会挥霍老<wbr></wbr>公的钱．她并不快乐，甚至上网，<wbr></wbr>其实，网络上寻求不到什么，可能<wbr></wbr>有个比较闲的无聊的人，会和她聊<wbr></wbr>几句，替她的老公． <br>
　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 她的老公，不<wbr></wbr>仅和她说的少，好象动的也很少，<wbr></wbr>总之，无望的苦难，毫无悬念．一<wbr></wbr>直到老。如果离婚,她会陷入绝望,<wbr></wbr>因为生活曾经是她的全部. <br>
　　　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 女人，如果在<wbr></wbr>年轻的时候没有事业，没有学习，<wbr></wbr>自从她生了孩子，生活就越来越悲<wbr></wbr>惨，苦难的一生．　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 而有事业的女<wbr></wbr>人，不断的丰富自己，爱情不是她<wbr></wbr>生活的全部，他和男人，太有共同<wbr></wbr>的语言，生孩子对于她，只是一个<wbr></wbr>小小的耽误，因为她已经在管理层<wbr></wbr>，我有个装修公司的朋友，副总经<wbr></wbr>理，看似柔弱的女子，她是临产前<wbr></wbr>，老板开车把她送回家，她自然生<wbr></wbr>产的，一个月不到的时候，我给她<wbr></wbr>打电话，她在武汉出差．孩子很健<wbr></wbr>康，家里安排的很好．她的例子可<wbr></wbr>能有些极端，但是说明了很多问题<wbr></wbr>． <br>
　　　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 男人有外遇，<wbr></wbr>其实真的不全是因为好色，说句实<wbr></wbr>话，如果当你苦恼于事业的症结的<wbr></wbr>时候，老婆和你因为鸡毛蒜皮的家<wbr></wbr>长里短，唠叨个不停，你和她说企<wbr></wbr>业管理，她和你说商场的打折，你<wbr></wbr>很困，因为压力，她拿枕头砸你，<wbr></wbr>你说有多烦，你再定睛一看，对面<wbr></wbr>的女人，面目狰狞，满嘴泥泞，你<wbr></wbr>还能说什么． <br>
　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 这样的女人，<wbr></wbr>不仅仅自己苦难，也会给她的责任<wbr></wbr>老公带来烦恼． <br>
　　　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 有事业的女人<wbr></wbr>，很美，看她们在男人的世界里，<wbr></wbr>闪展腾挪，学习中的女人很美，才<wbr></wbr>情横逸,和这样的女人生活，乐趣是<wbr></wbr>难以言表的，她们或许不是花瓶般<wbr></wbr>的绚丽，但会让你静，让你甜，让<wbr></wbr>你乐，让你敬．现代社会，经济是<wbr></wbr>如此发达，女人当全职太太，如果<wbr></wbr>是女人的决定，是因为她已经退缩<wbr></wbr>，如果是男人的决定，那实在是自<wbr></wbr>私的对自己犯了错．　 <br>
　　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 我给面试的女<wbr></wbr>孩子讲了这个大概意思，她说，她<wbr></wbr>明知道会这样，但是她还是觉得不<wbr></wbr>想吃苦，和担风险．她相信爱她的<wbr></wbr>男人，不会那样的． <br>
　　　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 什么叫吃苦？<wbr></wbr>你们真的没有见过吃苦的工作，看<wbr></wbr>看搬家公司和工地上的工人，你在<wbr></wbr>办公室里打打电话能算吃苦？在有<wbr></wbr>空调的高级写字楼里，拜访客户算<wbr></wbr>是吃苦？听老板的话，认真的看看<wbr></wbr>书，网络上查查资料，算吃苦？这<wbr></wbr>样的女职员,看她们的人际关系很有<wbr></wbr>趣,她们在公司里的朋友，不是利于<wbr></wbr>业务进步的,而是有男性魅力的,不<wbr></wbr>是一起干活的,而是能玩到一块或或<wbr></wbr>聊倒一块的. <br>
<br>
　　　这就是为什么中国当今离婚<wbr></wbr>率高的原因，所谓中国式离婚，正<wbr></wbr>在不断的发生，在我看来，继续会<wbr></wbr>发生。女人凭什么只是生孩子的工<wbr></wbr>具,凭什么生了孩子以后就沦为保姆<wbr></wbr>,难道要用所有的精力为了家吗,别<wbr></wbr>忘了,她也曾经受过良好的教育，她<wbr></wbr>也曾经有过梦想.可是什么改变了她<wbr></wbr>的人生轨迹?&nbsp;&nbsp;  <br>
　　　　　　 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 当然，没有事<wbr></wbr>业的男人，会更加的悲惨，他的悲<wbr></wbr>惨就是，一生都没有吃过糖．比女<wbr></wbr>人还惨． <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 本文献给公司<wbr></wbr>的女员工,因为世界是复杂的,很可<wbr></wbr>能有人会觉得文字偏激,以偏盖全,<wbr></wbr>毕竟幸福的家庭是一样的,不幸的家<wbr></wbr>庭各有各的不幸. <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 女人是应该拿<wbr></wbr>来宠拿来爱的,男人教育女人要有事<wbr></wbr>业心,看起来多么冷漠和不体贴,只<wbr></wbr>有老板才会这么卑鄙和务实,可就是<wbr></wbr>这个卑鄙的老板,在公司里边给予妇<wbr></wbr>女和男人一样的平等晋升的机会,他<wbr></wbr>痛心那些曾和他并肩作战的红颜知<wbr></wbr>己,他花心血培养出来的有商业天赋<wbr></wbr>的女职员,早早退出了职业的舞台,<wbr></wbr>那些嘴上追求平等的女人，暗自默<wbr></wbr>念,女人是弱者. <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 一个事业上有<wbr></wbr>追求的女人，是多么具有魅力,这种<wbr></wbr>魅力是那么厚重,她辛勤工作的身影<wbr></wbr>,和随时洋溢的才华,多么迷人,多么<wbr></wbr>的禁得起岁月的推敲.这样的女人，<wbr></wbr>才应该多给她们一些体贴和关爱，<wbr></wbr>因为值得也需要. <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 那些还天真烂<wbr></wbr>漫，养尊处优，抱怨忧郁的在职的<wbr></wbr>女员工,如果你的事业目标是没有目<wbr></wbr>标，我还怎么要求你不要上班迟到<wbr></wbr>,真不知道哪一天,你的男朋友一句<wbr></wbr>话,就让你辞职了.她们所受到的关<wbr></wbr>爱已经太多,她们有的是时间休息和<wbr></wbr>娱乐,她们的未来会在庸懒中度过余<wbr></wbr>生,还能和她们有什么可聊的?我不<wbr></wbr>觉得她们有什么魅力,特别是对于我<wbr></wbr>,在她们辞职的时候，我几乎懒得假<wbr></wbr>意挽留. <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr></wbr>&nbsp;&nbsp;&nbsp; 因为我说的笑<wbr></wbr>话,她们听不懂,我说的悲剧,她们当<wbr></wbr>笑话</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%C6%C0%CB%B5%B9%B2%C9%CD%CE%F6">评说共赏析</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/20521c4c943318f3d72afc96.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月21日 星期六  03:07 P.M.</pubDate>
        <category><![CDATA[评说共赏析]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/20521c4c943318f3d72afc96.html</guid>
</item>

<item>
        <title><![CDATA[linux下vi命令大全]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/5ca0364e17012bc0d1c86ab7.html]]></link>
        <description><![CDATA[
		
		<p><span><font color="#000000">linux下vi命令大全</font></span></p>
<span>
<p><font size="3"><font color="#000000" size="3">文本编辑器是所有计算机系统中最常用的一种工具。使用最为广泛的是vi，而vi命令繁多，各大论坛基本上都有总结！为了大家学习方便，请自由转发!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   Network is sharing!  John  Yu</font></font></p>
<p><font color="#000000">进入vi的命令 <br>
vi filename :打开或新建文件，并将光标置于第一行首 <br>
vi +n filename ：打开文件，并将光标置于第n行首 <br>
vi + filename ：打开文件，并将光标置于最后一行首 <br>
vi +/pattern filename：打开文件，并将光标置于第一个与pattern匹配的串处 <br>
vi -r filename ：在上次正用vi编辑时发生系统崩溃，恢复filename <br>
vi filename....filename ：打开多个文件，依次进行编辑 <br>
<br>
移动光标类命令<br>
h ：光标左移一个字符 <br>
l ：光标右移一个字符 <br>
space：光标右移一个字符 <br>
Backspace：光标左移一个字符 <br>
k或Ctrl+p：光标上移一行 <br>
j或Ctrl+n ：光标下移一行 <br>
Enter ：光标下移一行 <br>
w或W ：光标右移一个字至字首 <br>
b或B ：光标左移一个字至字首 <br>
e或E ：光标右移一个字至字尾 <br>
) ：光标移至句尾 <br>
( ：光标移至句首 <br>
}：光标移至段落开头 <br>
{：光标移至段落结尾 <br>
nG：光标移至第n行首 <br>
n+：光标下移n行 <br>
n-：光标上移n行 <br>
n$：光标移至第n行尾 <br>
H ：光标移至屏幕顶行 <br>
M ：光标移至屏幕中间行 <br>
L ：光标移至屏幕最后行 <br>
0：（注意是数字零）光标移至当前行首 <br>
$：光标移至当前行尾 <br>
<br>
屏幕翻滚类命令 <br>
Ctrl+u：向文件首翻半屏 <br>
Ctrl+d：向文件尾翻半屏 <br>
Ctrl+f：向文件尾翻一屏 <br>
Ctrl＋b；向文件首翻一屏 <br>
nz：将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。 <br>
<br>
插入文本类命令 <br>
i ：在光标前 <br>
I ：在当前行首 <br>
a：光标后 <br>
A：在当前行尾 <br>
o：在当前行之下新开一行 <br>
O：在当前行之上新开一行 <br>
r：替换当前字符 <br>
R：替换当前字符及其后的字符，直至按ESC键 <br>
s：从当前光标位置处开始，以输入的文本替代指定数目的字符 <br>
S：删除指定数目的行，并以所输入文本代替之 <br>
ncw或nCW：修改指定数目的字 <br>
nCC：修改指定数目的行 <br>
<br>
删除命令 <br>
ndw或ndW：删除光标处开始及其后的n-1个字 <br>
do：删至行首 <br>
d$：删至行尾 <br>
ndd：删除当前行及其后n-1行 <br>
x或X：删除一个字符，x删除光标后的，而X删除光标前的 <br>
Ctrl+u：删除输入方式下所输入的文本 <br>
<br>
搜索及替换命令 <br>
/pattern：从光标开始处向文件尾搜索pattern <br>
?pattern：从光标开始处向文件首搜索pattern <br>
n：在同一方向重复上一次搜索命令 <br>
N：在反方向上重复上一次搜索命令 <br>
：s/p1/p2/g：将当前行中所有p1均用p2替代 <br>
：n1,n2s/p1/p2/g：将第n1至n2行中所有p1均用p2替代 <br>
：g/p1/s//p2/g：将文件中所有p1均用p2替换 <br>
<br>
选项设置 <br>
all：列出所有选项设置情况 <br>
term：设置终端类型 <br>
ignorance：在搜索中忽略大小写 <br>
list：显示制表位(Ctrl+I)和行尾标志（$) <br>
number：显示行号 <br>
report：显示由面向行的命令修改过的数目 <br>
terse：显示简短的警告信息 <br>
warn：在转到别的文件时若没保存当前文件则显示NO write信息 <br>
nomagic：允许在搜索模式中，使用前面不带&ldquo;\&rdquo;的特殊字符 <br>
nowrapscan：禁止vi在搜索到达文件两端时，又从另一端开始 <br>
mesg：允许vi显示其他用户用write写到自己终端上的信息 <br>
<br>
最后行方式命令 <br>
：n1,n2 co n3：将n1行到n2行之间的内容拷贝到第n3行下 <br>
：n1,n2 m n3：将n1行到n2行之间的内容移至到第n3行下 <br>
：n1,n2 d ：将n1行到n2行之间的内容删除 <br>
：w ：保存当前文件 <br>
：e filename：打开文件filename进行编辑 <br>
：x：保存当前文件并退出 <br>
：q：退出vi <br>
：q!：不保存文件并退出vi <br>
：!command：执行shell命令command <br>
：n1,n2 w!command：将文件中n1行至n2行的内容作为command的输入并执行之，若不指定n1，n2，则表示将整个文件内容作为command的输入 <br>
：r!command：将命令command的输出结果放到当前行 <br>
<br>
寄存器操作 <br>
&quot;?nyy：将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，n为一个数字 <br>
&quot;?nyw：将当前行及其下n个字保存到寄存器？中，其中?为一个字母，n为一个数字 <br>
&quot;?nyl：将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，n为一个数字 <br>
&quot;?p：取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字 <br>
ndd：将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存器中。<br>
<br>
VI的使用<br>
--------------------------------------------------------------------------------<br>
<br>
一、插入文本 <br>
┌──┬────────────┐ <br>
│命令│描述　　　　　　　　　　│ <br>
├──┼────────────┤ <br>
│i 　│在当前字符前插入文本　　│ <br>
├──┼────────────┤ <br>
│I 　│在行首插入文本 　　　 　│ <br>
├──┼────────────┤ <br>
│a 　│在当前字符后添加文本　　│ <br>
├──┼────────────┤ <br>
│A 　│在行末添加文本　　　　　│ <br>
├──┼────────────┤ <br>
│o 　│在当前行后面插入一空行　│ <br>
├──┼────────────┤ <br>
│O 　│在当前行前面插入一空行　│ <br>
├──┼────────────┤ <br>
│R 　│以改写方式输入文本　　　│ <br>
└──┴────────────┘ <br>
二、移动光标 <br>
┌─────┬───────────┐ <br>
│命令　　　│描述　　　　　　　　　│ <br>
├─────┼───────────┤ <br>
│j或下箭头 │向下移动一行　　　　　│ <br>
├─────┼───────────┤ <br>
│k或上箭头 │向上移动一行　　　　　│ <br>
├─────┼───────────┤ <br>
│h或左箭头 │左移一个字符　　　　　│ <br>
├─────┼───────────┤ <br>
│l或右箭头 │右移一个字符　　　　　│ <br>
├─────┼───────────┤ <br>
│w 　　　　│右移一个词　　　　　　│ <br>
├─────┼───────────┤ <br>
│W 　　　　│右移一个以空格分隔的词│ <br>
├─────┼───────────┤ <br>
│b 　　　　│左移一个词　　　　　　│ <br>
├─────┼───────────┤ <br>
│B 　　　　│左移一个以空格分隔的词│ <br>
├─────┼───────────┤ <br>
│0 　　　　│移到行首　　　　　　　│ <br>
│Ctrl-F　　│向前翻页　　　　　　　│ <br>
├─────┼───────────┤ <br>
│Ctrl-B　　│向后翻页　　　　　　　│ <br>
├─────┼───────────┤ <br>
│nG　　　　│到第n行 　　　　　　　│ <br>
├─────┼───────────┤ <br>
│G 　　　　│到最后一行　　　　　　│ <br>
└─────┴───────────┘ <br>
三、替换文本 <br>
┌─────┬──────┐ <br>
│命令　　　│描述　　　　│ <br>
├─────┼──────┤ <br>
│$ 　　　　│到行尾　　　│ <br>
├─────┼──────┤ <br>
│( 　　　　│到句子的开头│ <br>
├─────┼──────┤ <br>
│) 　　　　│到句子的末尾│ <br>
├─────┼──────┤ <br>
│{　 　　　│到段落的开头│ <br>
├─────┼──────┤ <br>
│}　　 　　│到段落的末尾│ <br>
└─────┴──────┘ <br>
<br>
四、删除文本 <br>
┌───┬───────────┐ <br>
│命令　│描述 　　　　　　 　　│ <br>
├───┼───────────┤ <br>
│r 　　│替换一个字符 　　　　 │ <br>
├───┼───────────┤ <br>
│c 　　│修改文本直到按下Esc健 │ <br>
├───┼───────────┤ <br>
│cw　　│修改下一个词 　　　 　│ <br>
├───┼───────────┤ <br>
│cnw　 │修改接下来的n个词 　　│ <br>
└───┴───────────┘ <br>
五、文本编辑 <br>
┌──┬──────────────────────┐ <br>
│命寺│描述　　　　　　　　　　　　　　　　　　　　│ <br>
├──┼──────────────────────┤ <br>
│yy　│将一行文本移到缺省缓冲区中 　　　　 　　　　│ <br>
├──┼──────────────────────┤ <br>
│yn　│将下一个词移到缺省缓冲区中 　　 　　　　　　│ <br>
├──┼──────────────────────┤ <br>
│ynw │将后面的n个词移到缺省缓冲区中　　　　 　　　│ <br>
├──┼──────────────────────┤ <br>
│p 　│如果缺省缓冲区中包含一行文本，则在当前　　　│ <br>
│　　│行后面插入一个空行井将缺省缓冲区中的声　　　│ <br>
│　　│容粘贴到这一行中；如果缺省缓冲区中包含　　　│ <br>
│　　│多个词，把这些词粘贴到光标的右边．　　　　　│ <br>
├──┼──────────────────────┤ <br>
│P 　│如果缺省缓冲区中包含一行文本，则正当前 　 　│ <br>
│ 　 │行前面插入一个空行井将缺省缓冲区中的内 　 　│ <br>
│　　│容粘贴到这一行中；如果缺省缓冲区中包含 　　 │ <br>
│ 　 │多个词，把这些词粘贴到光标的左边 　 　<br>
<br>
　　│ <br>
└──┴──────────────────────┘ <br>
六、保存退出 <br>
┌───────────┬───────────────┐ <br>
│命令　　　　　　　　　│描述　　　　　　　　　　　　　│ <br>
├───────────┼───────────────┤ <br>
│zz　　　　　　　　　　│保存并退出　　　　　　　　　　│ <br>
├───────────┼───────────────┤ <br>
│:w filename　　　　 　│写入文件　　　　　　　　　 　 │ <br>
├───────────┼───────────────┤ <br>
│:W　　　　　　　　　　│写入文件　　　　　　　　　　　│ <br>
├───────────┼───────────────┤ <br>
│:x　　　　　　　　　　│保存(如果当前文件修改过)并退出│ <br>
├───────────┼───────────────┤ <br>
│:q!　　　　　　　　　 │不保存文件，直接退出　　 　　 │ <br>
├───────────┼───────────────┤ <br>
│:q　　　　　　　　　　│退出vi　　　　　　　　　　　　│ <br>
<br>
VI常用技巧<br>
<br>
VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了，但是因为它的命令集众多，很多人都不习惯使用它，其实您只需要掌握基本命令，然后加以灵活运用，就会发现它的优势，并会逐渐喜欢使用这种方法。本文旨在介绍VI的一些最常用命令和高级应用技巧。 <br>
<br>
一、基本命令介绍 <br>
<br>
---- 1．光标命令 <br>
<br>
k、j、h、l&mdash;&mdash;上、下、左、右光标移动命令。虽然您可以在Linux中使用键盘右边的4个光标键，但是记住这4个命令还是非常有用的。这4个键正是右手在键盘上放置的基本位置。 <br>
nG&mdash;&mdash;跳转命令。n为行数，该命令立即使光标跳到指定行。 <br>
Ctrl+G&mdash;&mdash;光标所在位置的行数和列数报告。 <br>
w、b&mdash;&mdash;使光标向前或向后跳过一个单词。 <br>
---- 2．编辑命令 <br>
i、a、r&mdash;&mdash;在光标的前、后以及所在处插入字符命令(i=insert、a=append、r=replace)。 <br>
cw、dw&mdash;&mdash;改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。 <br>
x、d$、dd&mdash;&mdash;删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。 <br>
---- 3．查找命令 <br>
---- /string、?string&mdash;&mdash;从光标所在处向后或向前查找相应的字符串的命令。 <br>
---- 4．拷贝复制命令 <br>
---- yy、p&mdash;&mdash;拷贝一行到剪贴板或取出剪贴板中内容的命令。 <br>
<br>
二、常见问题及应用技巧 <br>
<br>
---- 1．在一个新文件中读/etc/passwd中的内容，取出用户名部分。 <br>
---- vi file <br>
---- :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd <br>
---- :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。 <br>
---- 您也可以在指定的行号后读入文件内容，例如使用命令&ldquo;:3r /etc/passwd&rdquo;从新文件的第3行开始读入 /etc/passwd的所有内容。 <br>
---- 我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。 <br>
---- #cat squid.conf.default | grep -v ^$ | grep -v ^# <br>
<br>
---- 2．在打开一个文件编辑后才知道登录的用户对该文件没有写的权限，不能存盘，需要将所做修改存入临时文件。 <br>
---- vi file <br>
---- :w /tmp/1 保存所做的所有修改，也可以将其中的某一部分修改保存到临时文件，例如仅仅把第20～59行之间的内容存盘成文件/tmp/1，我们可以键入如下命令。 <br>
---- vi file <br>
---- :20,59w /tmp/1 <br>
<br>
---- 3．用VI编辑一个文件，但需要删除大段的内容。 <br>
---- 首先利用编辑命令&ldquo;vi file&rdquo;打开文件，然后将光标移到需要删除的行处按Ctrl+G显示行号，再到结尾处再按Ctrl+G，显示文件结尾的行号。 <br>
---- :23,1045d 假定2次得到的行号为23和1045，则把这期间的内容全删除，也可以在要删除的开始行和结束行中用ma、mb命令标记，然后利用&ldquo;:a,bd&rdquo;命令删除。 <br>
<br>
---- 4．在整个文件的各行或某几行的行首或行尾加一些字符串。 <br>
---- vi file <br>
---- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入&ldquo;some string&rdquo;。 <br>
---- :%s/$/some string/g 在整个文件每一行的行尾添加&ldquo;some string&rdquo;。 <br>
---- :%s/string1/string2/g 在整个文件中替换&ldquo;string1&rdquo;成&ldquo;string2&rdquo;。 <br>
---- :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的&ldquo;string1&rdquo;成&ldquo;string2&rdquo;。 <br>
---- 注意: 其中s为substitute，%表示所有行，g表示global。 <br>
<br>
---- 5．同时编辑2个文件，拷贝一个文件中的文本并粘贴到另一个文件中。 <br>
---- vi file1 file2 <br>
---- yy 在文件1的光标处拷贝所在行 <br>
---- :n 切换到文件2 (n=next) <br>
---- p 在文件2的光标所在处粘贴所拷贝的行 <br>
---- :n 切换回文件1 <br>
<br>
---- 6．替换文件中的路径。 <br>
---- 使用命令&ldquo;:%s#/usr/bin#/bin#g&rdquo;可以把文件中所有路径/usr/bin换成/bin。也可以使用命令&ldquo;:%s//usr/bin//bin/g&rdquo;实现，其中&ldquo;&rdquo;是转义字符，表明其后的&ldquo;/&rdquo;字符是具有实际意义的字符，不是分隔符。</font></p>
</span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%C3%FC%C1%EE%D1%A1%CF%EE">命令选项</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/5ca0364e17012bc0d1c86ab7.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月20日 星期五  01:48 P.M.</pubDate>
        <category><![CDATA[命令选项]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/5ca0364e17012bc0d1c86ab7.html</guid>
</item>

<item>
        <title><![CDATA[glib介绍]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/1ab975f0e9dee7a5a50f52f5.html]]></link>
        <description><![CDATA[
		
		<p>glib介绍</p>
<p>gnome是基于gtk+开发的一套桌面环境，gnome和KDE作为两大最流行的桌面环境，在全世界广泛使用。只要是在Linux下工作的开发人员，对于gtk+一定不陌生。而对于glib，这个gtk+下的无名英雄，其功能强大却鲜为人知。今天，在这里简要介绍一下，如果你是开发人员，看完本文，相信你会爱上它的。<br>
<br>
glib不是gllibc，尽管两者都是基于(L)GPL的开源软件。但这一字之差却误之千里，glibc是GNU实现的一套标准C的库函数，而glib是gtk+的一套函数库。在linux平台上，像其它任何软件一样，glib依赖于glibc。<br>
<br>
glib不是一个学院派的东西，也不是凭空想出来的，完全是在开发gtk+的过程中，慢慢总结和完善的结果。如果你是一个工作3年以上的C语言程序员，现在让你讲讲写程序的苦恼，你可能有很多话要说，但如果你有时间研究一下glib，你会发现，很多苦恼已不再成其为苦恼，glib里很多东西正是你期望已经久的。 <br>
<br>
gobject是glib的精粹，glib是用C实现的，但在很大程序是基于面向对象思想设计的，gobject是所有类的基类。signal在其中也是一大特色，signal与操作系统中的signal并不一样，它是类似消息一样的东西，让消息在各个对象间传递，但尽量降低对象间的耦合。仔细读一下它的代码，唯一想说的话就是&ldquo;绝！&rdquo;。<br>
<br>
动态数组、链表、哈希表等通用容器，在不同的公司，在不同的时期，在不同的情况下，我们每个人对每一种容器，可能都实现过N次以上。甚至在同一个项目里，出现几份链表的实现，也并非罕见。一直在抱怨，标准C中为什么没有类似于STL的标准容器，让全世界的程序员在数以万次的重复实现它们。不过，还算走运，有了glib，恶梦在此终结了。glib提供了动态数组、单/双向链表、哈希表、多叉树、平衡二叉树、字符串等常用容器，完全是面向对象设计的，实现得非常精致。不用白不用，别客气了。<br>
<br>
你开发过跨硬件平台的软件吗？是不是常常为硬件平台的差异而苦恼呢？字节顺序是常见的问题之一，大端格式，小端格式，还是PDP格式的？这样差异造成的BUG会浪费不少时间，同时让代码晦涩难读。glib提供了一套完整的宏，利用这些宏编写程序，问题大大简化了。<br>
<br>
你开发过跨操作系统的软件吗？在不同的平台下，很多函数有相同的功能，但函数原型，返回值差异巨大，也有的貌合神离，相同的名称有着不同的意义，请看下面这张清单：<br>
&nbsp;&nbsp;  动态库加载函数<br>
&nbsp;&nbsp;  线程函数<br>
&nbsp;&nbsp;  信号量函数<br>
&nbsp;&nbsp;  互斥锁函数<br>
&nbsp;&nbsp;  事件函数<br>
&nbsp;&nbsp;  字符集转换函数<br>
&nbsp;&nbsp;  原子操作函数<br>
&nbsp;&nbsp;  创建进程函数<br>
&nbsp;&nbsp;  时间格式<br>
&nbsp;&nbsp;  IO函数<br>
为完成相同的功能，你却要为此写出不同的代码。那怕只是一个简单的封装，这么多，你烦不烦？用glib吧，它的作者们都是高手中的高手，对不同的平台的理解程度，远远超出你和我，而且这些程序经过大量的应用程序测试，已经非常的稳定了，放心的用吧。<br>
<br>
你写过读取配置文件的模块吧，像读取ini这样简单格式的文件，当然不在话下，要读markup语言格式的配置文件，难度可能大了点，虽然不是不可能，但除非是为了学习，何必自己找麻烦呢。glib里提供了词法分析、markup语言解析、ini文件存取等功能，你完全不用为此担忧。<br>
<br>
不管是命令行程序，还是GUI程序，或者后台服务进程，通过命令参数来控制程序的行为，都是开发人员惯用的手法。从命令行参数取到有用的信息，不难，遍历一遍不就行了吗？但在每个程序中都来遍一次，你不觉得很单调吗？我们的时间很宝贵，浪费时间做这种事情，不值得吧。glib的作者们早考虑到了，它提供了这样的功能，你调用的它的函数，可能轻松的取得所要的命令行参数。<br>
<br>
对于正则表达式，Win32下的开发人员可能用得少一点，而在Linux下的Shell里，它却是不可或缺之物。有没有想到在自己的程序中使用的它呢，在有的情况下，使用正则表达式，可能会大大降低开发的难度，提高易用性。glib也想到了这一点，它提供了简单的正则表达式功能，当然，用与不用完全取决于你自己。<br>
<br>
在程序里，如果程序出错了，特别是调了不该调用的函数，你是不是很想知道是谁调了它？大多数时候用debuger是最好的选择，在某些情况下，没有 debuger可用，或者在debuger里重现不了这个问题，你会不会觉得很无助？别怕，glib提供了一套跨平台的backtrace函数，有了它，你可以很容易找到元凶了。<br>
<br>
如果读过一些大型的开源项目，你会发现，差不多每个项目都有一套自己的log函数，用于记录程序运行的调试或者审计信息。也有可能，你自己都曾在不同的项目里实现过好几次这个功能，第一次实现会觉得很好玩，会学到了一些东西，后来就会发现自己在做无用功。重复就是浪费，重复就是犯罪，glib想到了这一点，它实现了一套完整的log机制，供大家在不同的项目中使用。<br>
<br>
产生质数的算法不难，在我们的程序里也像是星外来客，很少使用，常常忽略了它。所谓书到用时方恨少，有这样的东东，说不定就有用得到它的时候。glib提供了这样的功能，同时还提供了一个较好的随机数算法。<br>
<br>
Linux Shell里的自动补完功能很好用吧，从Linux转移到Win32下工作的开发人员，常常抱怨Win32的Shell里没有这个功能，其实Win32下也是有的，把注册表里的一个选项打开就行了。不管怎么样，总之这个功能太有用了，没有它，你都会觉得少了点什么，全身不自在，glib里连这个功能都提供了，是不是很人性化呢？<br>
<br>
内存问题！还是内存问题！如果你没有为内存问题而苦恼过，我都怀疑你是不是一个真正的C语言程序员。内存泄露、访问越界、空指针、野指针和内存优化等问题，是不是都曾让你夜不能昧？有些工具可以帮助你，但这不是万能的良药，好好写你的程序才是第一要义。glib提供了一些的手段，也可以在一定程度上减轻你的痛苦。<br>
<br>
呵，怎么样？还快不去下载一个来玩玩？ftp://ftp.gtk.org/pub/gtk/v2.8/</p>
<p><a href="http://hi.baidu.com/mingong2/blog/item/31153c0e1016e0c97acbe144.html">http://hi.baidu.com/mingong2/blog/item/31153c0e1016e0c97acbe144.html</a><br>
<a href="http://dev.osprg.org/docs/page.php/glib/index.html">http://dev.osprg.org/docs/page.php/glib/index.html</a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/Tools">Tools</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/1ab975f0e9dee7a5a50f52f5.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月20日 星期五  12:02 P.M.</pubDate>
        <category><![CDATA[Tools]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/1ab975f0e9dee7a5a50f52f5.html</guid>
</item>

<item>
        <title><![CDATA[JPopupMenu添加JComboBox导致的问题 -gcode]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/eeb593cae6751c8cc8176816.html]]></link>
        <description><![CDATA[
		
		<div>JPopupMenu添加JComboBox导致的问题 -gcode</div>
<div> </div>
<div>JPopupMenu添加JComboBox，当comboBox弹出下拉框时会导致popup消失。<br>
解决方法：<br>
public class NewComboBox extends JComboBox {<br>
&nbsp;&nbsp;&nbsp;  public void updateUI() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  setUI(new NewComboUI());<br>
&nbsp;&nbsp;&nbsp;  }&nbsp;&nbsp;&nbsp;  <br>
}</div>
<div> </div>
<div>public class NewComboUI extends BasicComboBoxUI{<br>
&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;  protected ComboPopup createPopup() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return new NewComboPopup(comboBox);<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  <br>
}</div>
<div> </div>
<div>匿名类<br>
newComboBox = new JComboBox(){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void updateUI() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  setUI(new BasicComboBoxUI(){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  protected ComboPopup createPopup() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return new NewComboPopup(comboBox);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  });<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  };<br>
----------------<br>
关键<br>
import java.awt.Container;<br>
import java.lang.reflect.Field;<br>
import java.lang.reflect.Method;<br>
import java.util.Vector;</div>
<div> </div>
<div>import javax.swing.JComboBox;<br>
import javax.swing.JMenu;<br>
import javax.swing.JPopupMenu;<br>
import javax.swing.MenuElement;<br>
import javax.swing.MenuSelectionManager;<br>
import javax.swing.Popup;<br>
import javax.swing.plaf.basic.BasicComboPopup;</div>
<div> </div>
<div>public class NewComboPopup extends BasicComboPopup{<br>
&nbsp;&nbsp;&nbsp;  JComboBox combo;<br>
&nbsp;&nbsp;&nbsp;  private MenuElement[]elements;<br>
&nbsp;&nbsp;&nbsp;  /** Creates a new instance of MonthComboPopup */<br>
&nbsp;&nbsp;&nbsp;  public NewComboPopup(JComboBox combo) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  super(combo);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.combo=combo;<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  public void setVisible(boolean b) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (b == isVisible())<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (b == false) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Boolean doCanceled = (Boolean)getClientProperty(&quot;JPopupMenu.firePopupMenuCanceled&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (doCanceled != null &amp;&amp; doCanceled == Boolean.TRUE) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  putClientProperty(&quot;JPopupMenu.firePopupMenuCanceled&quot;, Boolean.FALSE);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  firePopupMenuCanceled();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  getSelectionModel().clearSelection();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } else {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (isPopupMenu()) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(getSubElements().length&gt;0){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MenuElement me[] = new MenuElement[2];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  me[0]=getSubElements()[0];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  me[1]=(MenuElement)this;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MenuSelectionManager.defaultManager().setSelectedPath(me);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }else{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MenuElement me[] = new MenuElement[1];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  me[0]=(MenuElement)this;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MenuSelectionManager.defaultManager().setSelectedPath(me);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(b) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  firePopupMenuWillBecomeVisible();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  setThePopup(invokeGetPopup());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  firePropertyChange(&quot;visible&quot;, Boolean.FALSE, Boolean.TRUE);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } else if(getThePopup() != null) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Popup p=getThePopup();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  firePopupMenuWillBecomeInvisible();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p.hide();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  setThePopup(null);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  firePropertyChange(&quot;visible&quot;, Boolean.TRUE, Boolean.FALSE);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  public void hide() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MenuSelectionManager manager = MenuSelectionManager.defaultManager();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MenuElement [] selection = manager.getSelectedPath();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Vector&lt;MenuElement&gt; tmp=new Vector&lt;MenuElement&gt;();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for ( int i = 0 ; i &lt; selection.length ; i++ ) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if ( selection[i] != this )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  tmp.add(selection[i]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  selection=new MenuElement[tmp.size()];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for(int i=0;i&lt;tmp.size();i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  selection[i]=tmp.get(i);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  manager.setSelectedPath(selection);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  comboBox.repaint();<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  private boolean isPopupMenu() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return  !(getInvoker() instanceof JMenu);<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  void setThePopup(Popup p){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  popupField.set(this, p);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }catch(Exception e){}<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  Popup getThePopup(){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return (Popup)popupField.get(this);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }catch(Exception e){}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return null;<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  Popup invokeGetPopup(){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return (Popup)getPopupMethod.invoke(this);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }catch(Exception e){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  static Field popupField;<br>
&nbsp;&nbsp;&nbsp;  static Method getPopupMethod;<br>
&nbsp;&nbsp;&nbsp;  static Class popupClass=JPopupMenu.class;<br>
&nbsp;&nbsp;&nbsp;  static{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  popupField=popupClass.getDeclaredField(&quot;popup&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  popupField.setAccessible(true);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  getPopupMethod=popupClass.getDeclaredMethod(&quot;getPopup&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  getPopupMethod.setAccessible(true);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }catch(Exception e){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  e.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  private void initialize(final JComboBox combo) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Container parent=combo.getParent();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Vector&lt;MenuElement&gt; tmp = new Vector&lt;MenuElement&gt;();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  while(parent!=null){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(parent instanceof MenuElement){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  tmp.add((MenuElement)parent);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  parent=parent.getParent();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  elements=new MenuElement[tmp.size()];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for(int i=0;i&lt;tmp.size();i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  elements[i]=tmp.get(i);<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  public MenuElement[] getSubElements() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(elements==null)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  initialize(combo);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return elements;<br>
&nbsp;&nbsp;&nbsp;  }<br>
}<br>
这是WilliamChen的解决方案。<br>
<a href="http://blog.sina.com.cn/swingjava">http://blog.sina.com.cn/swingjava</a><br>
<a href="http://blogs.sun.com/swing/">http://blogs.sun.com/swing/</a><br>
<a href="http://hi.baidu.com/hxzon/blog/item/6fa54dfb8878126e024f562e.html">http://hi.baidu.com/hxzon/blog/item/6fa54dfb8878126e024f562e.html</a></div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%B8%B4%D3%C3%B4%FA%C2%EB">复用代码</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/eeb593cae6751c8cc8176816.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月19日 星期四  03:19 P.M.</pubDate>
        <category><![CDATA[复用代码]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/eeb593cae6751c8cc8176816.html</guid>
</item>

<item>
        <title><![CDATA[改造JComboBox实现日期选择组件]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/6fa54dfb8878126e024f562e.html]]></link>
        <description><![CDATA[
		
		<p>改造JComboBox实现日期选择组件</p>
<p>在Swing标准组件中JComboBox是最有空间表现力的一个组件了。如果将下拉框的内容换成其他内容就可以实现自定义的选择组件了。这种组件能表现和编辑复杂类型的数据，通常通过JComboBox编辑器或者下拉框都可以实现编辑。</p>
<div>&nbsp;&nbsp;&nbsp;  这两天试着改造JComboBox以便实现日期选择组件。日期选择组件是复杂应用中经常用到的组件。它是这类组件的典型代表。在改造过程中遇到一个大问题：下拉框为了实现失去焦点而取消消失，需要下拉框继承JPopupMenu。实际上缺省的JComboBox下拉框也是继承JPopupMenu的。当然可以使用从PopupFactory获得的Popup来实现下拉框，但是这些窗口和MenuSelectionManager并没有任何关联，因此在焦点消失或者点击屏幕其他位置时无法自动关闭窗口。但是JPopupMenu作为浮动窗口也有一个问题，就是它上面不能再放置弹出窗口是继承自JPopupMenu的组件，比如JComboBox。而日期选择中，月份的选择通常使用JComboBox实现。</div>
<div>&nbsp;&nbsp;&nbsp;  为什么JPopupMenu上面不能放JComboBox组件呢？原因是JComboBox的下拉框也是继承自JPopupMenu的。MenuSelectionManager这个菜单管理器集中管理着当前打开的任何菜单，包括JComboBox拉开下拉框。理论上MenuSelectionManager是一个单项选择器，即同时只允许一个选择路径出现，比如当前屏幕只能有一个菜单路径，如果激活另一个弹出窗口，任何不是该弹出窗口的子菜单都将被自动关闭。由于JComboBox的下拉框实际上就是一个JPopupMenu，因此它弹出式，任何其他已经弹出的JPopupMenu窗口就要自动关闭，因此缺省的JComboBox不能放在JPopupMenu上。由于要实现的日期选择组件的弹出窗口也是JPopupMenu，因此就不能放置在这个日期选择组件上。</div>
<div>&nbsp;&nbsp;&nbsp;  其实MenuSelectionManager可以允许多个弹出JPopupMenu窗口出现在屏幕上，前提是这些菜单之间是父子菜单的关系。比如选择多级菜单的子菜单时，父菜单并不会关闭。这是因为子菜单和父菜单一直上溯到根菜单都是一条选择路径上的。经过这个启迪，我发现可以改造JComboBox的弹出窗口，让它弹出时（setVisible)，成为父JPopupMenu的子菜单，然后使用MenuSelectionManager.setSelectionPath来设置当前的菜单选择路径，这样父弹出窗口就不会因为JComboBox弹出下拉框而自动关闭，造成界面不一致。</div>
<div>&nbsp;&nbsp;&nbsp;  为了实现这个日期选择器，除了要解决上面的问题，还要写一个日期选择面板。这并没有花费太多的时间，大部分时间是在消耗在解决上面弹出窗口的问题上了，花了我两天的闲暇时间来追踪问题和解决问题。</div>
<div>&nbsp;&nbsp;&nbsp;  下面是实现的日期选择组件的演示截图：</div>
<div> </div>
<div> </div>
<div> </div>
<div>
<div forimg="1"><img class="blogimg" border="0" src="http://hiphotos.baidu.com/wangmeng617/pic/item/936a11f34c50c9dd0b46e072.jpg" small="0"></div>
&nbsp;&nbsp;&nbsp;  这个日期选择器同前面的风格一样，里面的日期面板在改变当前月份时可以具有滑动和淡入淡出效果。演示程序上面的有几个设置，选择animation effect可以看到这个效果：</div>
<div><a href="http://hiphotos.baidu.com/wangmeng617/pic/item/91ab26c784a44acad0006070.jpg" target="_blank"><img style="width: 280px; height: 253px" class="blogimg" border="0" src="http://hiphotos.baidu.com/wangmeng617/abpic/item/91ab26c784a44acad0006070.jpg" width="319" height="231" small="1"></a></div>
<div> </div>
<div> </div>
<div> </div>
<div>&nbsp;&nbsp;&nbsp;  另外，由于这儿的弹出窗口也是PopupFactory获取的，因此使用前面几篇文章提供的自定义工厂类，可以改变弹出窗口的动画效果。</div>
<div>&nbsp;&nbsp;&nbsp;  <a href="http://blogs.sun.com/Swing/resource/date_picker.zip"><font color="#333333">演示源代码下载</font></a>。</div>
<div class="invisible">文章引用自： <a href="http://blog.sina.com.cn/swingjava">WilliamChen</a><br>
<a href="http://hi.baidu.com/wangmeng617/blog/item/4020b034293eb8b1d1a2d343.html">http://hi.baidu.com/wangmeng617/blog/item/4020b034293eb8b1d1a2d343.html</a></div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%CF%B8%BD%DA">细节</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/6fa54dfb8878126e024f562e.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月18日 星期三  05:59 P.M.</pubDate>
        <category><![CDATA[细节]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/6fa54dfb8878126e024f562e.html</guid>
</item>

<item>
        <title><![CDATA[武大前校长刘道玉痛批北大“校长实名推荐制”]]></title>
        <link><![CDATA[http://hi.baidu.com/hxzon/blog/item/3ca9978f10f0b0f0513d92b6.html]]></link>
        <description><![CDATA[
		
		<p style="text-indent: 2em"><strong>武大前校长刘道玉痛批北大&ldquo;校长实名推荐制&rdquo;</strong></p>
<p style="text-indent: 2em"><strong>称改革初衷无可厚非，但此举隐藏几大不公平，可以预见会失败</strong></p>
<p style="text-indent: 2em">&ldquo;北大进行改革，初衷无可厚非，但推行&lsquo;<a target="_blank" href="http://news.qq.com/a/20091116/000110.htm">中学校长实名推荐制</a>&rsquo;不可取，这是在出昏招，因为这种做法没有抓住高校改革与高考改革的本质问题。&rdquo;昨日下午，著名教育家、武汉大学前校长刘道玉接受本报记者采访时，痛批北大&ldquo;中学校长实名推荐制&rdquo;。</p>
<p style="text-indent: 2em"><strong>隐藏几大不公平</strong></p>
<p style="text-indent: 2em">&ldquo;北大&lsquo;中学校长实名推荐制&rsquo;最大问题是隐藏着不公平，中国高校不公平现象本来就已很严重，北大此举一推行，将加剧教育不公平现象。&rdquo;对于&ldquo;北大招生新政&rdquo;，刘道玉指出其症结所在。他还一一分析其隐藏的不公平。</p>
<p style="text-indent: 2em">首先，只有39所学校入围对其他学校来说不公平，他反问：&ldquo;全国这么多中学，仅给39所学校校长推荐权，这对其他学校公平吗？再说这么多高中都集中在大中城市，对其他地方也不公平。&rdquo;</p>
<p style="text-indent: 2em">其次，他认为对众多参加高考的学生来说不公平：&ldquo;其他学校学生怎么办？难道这些学生就不优秀？&rdquo;刘道玉还指出，校长实名推荐，&ldquo;不直接、不科学、不权威&rdquo;，因为真正了解学生的是班主任与任课老师，但他们却无权推荐，&ldquo;是校长了解学生，还是老师了解学生？这是一种官本位思想的体现。当然，校长可能说会听取班主任的意见，但意见跟推荐是两回事。&rdquo;刘道玉说。</p>
<p style="text-indent: 2em">&ldquo;优秀学生可以降低30分，而一般学生却参加高考？&rdquo;刘道玉认为这也不公平，&ldquo;既然你是最优秀的学生，你还怕考试？高招录取时1分就可压一批人，降低30分是什么概念？&rdquo;</p>
<p style="text-indent: 2em"><strong>照顾偏科生不能成为借口</strong></p>
<p style="text-indent: 2em">&ldquo;中学校长实名推荐制&rdquo;也被许多人解读成偏科生的福音&mdash;&mdash;一些偏科的学生将通过此种方式进入大学就读。不过刘道玉认为，这不能成为&ldquo;校长推荐制&rdquo;的借口，&ldquo;我们要考虑偏科学生的特殊性，因为其中确实不乏一些杰出人才，比如吴晗被清华录取时，数学就得了0分。但是，通过降分录取不可取。&rdquo;</p>
<p style="text-indent: 2em">对于偏科生，刘道玉认为应该通过特殊的办法来考核。&ldquo;首先要有一个考试来衡量其是否偏科，其次要对其擅长的科目进行考试，证实他确实是杰出人才。&rdquo;</p>
<p style="text-indent: 2em"><strong>强行推行肯定失败</strong></p>
<p style="text-indent: 2em">对于北大此次的招生改革，刘道玉很不客气地指出，&ldquo;如果北大明智的话，现在就应该戛然而止，如果一意孤行，肯定会失败。希望北大充分听取广大教育工作者的意见，不要盲目推行一项根本不可能取得成功的改革。&rdquo;</p>
<p style="text-indent: 2em">高中校长推荐学生上大学，在国外非常普遍，但不是某一个人或一个小圈子少数人的特权，而是教育名家与中学校长的一项基本权利。刘道玉认为，北大此举却有&ldquo;特权化&rdquo;现象倾向，&ldquo;这里面有权钱交易、走后门等隐患。&rdquo;</p>
<p style="text-indent: 2em"><strong>应要求完全自主招生</strong></p>
<p style="text-indent: 2em">刘道玉还抨击了现行自主招生制度：&ldquo;我一向反对少数几个人享受免试，因为优秀学生减分或免试，成绩平平的还参加高考，进一步加剧了教育不公平。&rdquo;但他并非反对改革，而是反对&ldquo;不公平的改革&rdquo;。他认为高考改革势在必行，北大应要求完全自主招生：&ldquo;如果有改革精神，就应该要求完全自主招生，或者联系几所高校，单独考试，自主录取。&rdquo;</p>
<p style="text-indent: 2em">他谈及北大近几年改革时用&ldquo;乏善可陈&rdquo;来形容，教师人事制度改革不了了之，大力引进海外人才又造成丑闻，&ldquo;作为中国大学的&lsquo;大哥大&rsquo;，北大应在教学改革、提高高校学术水平上起带头作用，但是很遗憾，至少现在还没有看到。&rdquo;</p>
<p style="text-indent: 2em">刘道玉还说：&ldquo;真正的教育改革要有卓识与胆识。卓识让人知道问题在哪，应该做什么；而胆识表现出来的则是迎难而上。北大这次改革就缺乏卓识。&rdquo;</p>
<p style="text-indent: 2em">本版稿件除署名外均据本报记者柯美杰张瑜琨采写</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/hxzon/blog/category/%BD%CC%D3%FD%A1%A4%B4%F3%D1%A7">教育·大学</a>&nbsp;<a href="http://hi.baidu.com/hxzon/blog/item/3ca9978f10f0b0f0513d92b6.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月18日 星期三  09:23 A.M.</pubDate>
        <category><![CDATA[教育·大学]]></category>
        <author><![CDATA[hxzon]]></author>
		<guid>http://hi.baidu.com/hxzon/blog/item/3ca9978f10f0b0f0513d92b6.html</guid>
</item>


</channel>
</rss>