﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-YODA</title><link>http://www.blogjava.net/yoda/</link><description>如切如磋,如琢如磨</description><language>zh-cn</language><lastBuildDate>Sun, 06 Jul 2008 09:00:00 GMT</lastBuildDate><pubDate>Sun, 06 Jul 2008 09:00:00 GMT</pubDate><ttl>60</ttl><item><title>再说Modal Dialog上的URL跳转</title><link>http://www.blogjava.net/yoda/archive/2008/06/30/211634.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Mon, 30 Jun 2008 04:50:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/06/30/211634.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/211634.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/06/30/211634.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/211634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/211634.html</trackback:ping><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6b2bb739-3355-4444-860f-902794438dfa" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/html" rel="tag">html</a>,<a href="http://technorati.com/tags/showModalDialog" rel="tag">showModalDialog</a>,<a href="http://technorati.com/tags/BASE" rel="tag">BASE</a></div> <p>之前写过一篇关于在HTML页面中modal dialog中进行URL转向的问题。现在找到了一个新的办法。</p> <p>场景是这样的：在页面上进行输入信息时，某些信息是从数据库中预先查找出来，然后填充到下拉列表的。但是由于部分数据项的可选数据太多了，将近3000条，这样的情况下，使用下拉列表就有点不太合适，所以提供了一个弹出窗口，是使用showModalDialog方法弹出的模态窗口。而且在这个窗口上提供了查找的功能，但是遇到一个问题是当弹出窗口的&lt;form&gt;被submit按钮提交的时候，结果是在新的窗口打开的，这显然不是我们想要的。</p> <p>查找了一些资料，又咨询了同事，发现在HTML中有一个元素为base，通常很少会用到，但是这个时候就需要了。</p> <p>base对象的说明如下：</p> <p>【指定一个显式 URL 用于解析对于外部源的链接和引用，如图像和样式表】</p> <p>通过设置base标签的target属性为_self，可以控制在modal dialog上将URL的转换限制在当前窗口。target属性大家都比较常用了，用以设置或获取目标内容要显示于哪个窗口或框架。</p> <p>根据说明文档，BASE标签要出现在HEAD标签之内的任何外部元素引用之前，比如：</p> <p>&lt;head&gt;<br>&lt;base target="_self"&gt;<br>&lt;meta http-equiv="Content-Type" content="text/html; charset=GB18030"&gt;<br>&lt;title&gt;POPUP模态窗口测试&lt;/title&gt;<br>&lt;link rel="stylesheet" type="text/css" href="../css/lab.css"&gt;<br>&lt;/head&gt; <p>&nbsp; <p>设置了BASE标签的target属性为_self之后，在模态窗口上对于相对URL的跳转就可以控制在窗口内，而不在弹出新的窗口。</p><img src ="http://www.blogjava.net/yoda/aggbug/211634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-06-30 12:50 <a href="http://www.blogjava.net/yoda/archive/2008/06/30/211634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是MP3文件比特率[转贴]</title><link>http://www.blogjava.net/yoda/archive/2008/06/05/205971.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Thu, 05 Jun 2008 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/06/05/205971.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/205971.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/06/05/205971.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/205971.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/205971.html</trackback:ping><description><![CDATA[<p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0199224b-60ea-4680-a156-f6ae299869da" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/mp3" rel="tag">mp3</a>,<a href="http://technorati.com/tags/bit%20ratio" rel="tag">bit ratio</a></div></p> <p>摘自：<a href="http://digi.maddiy.com/mp3/diy/2007-05-22/2600.html">http://digi.maddiy.com/mp3/diy/2007-05-22/2600.html</a><br></p> <p>数字音频格式即以数字形式进行记录、处理和播放的音频信号。数字音频格式的出现，是为了满足高保真复制、存储、传输的需求。简单的说，早期的模拟音频格式，存在着复制失真和因为介质磨损而失效的问题。从CD盘的问世开始，数字格式音频文件开始普及，但又产生了一个问题——存储体积上的限制，同时CD盘仍然存在磨损的现象。如果保存到硬盘上（相对存储时间更长），在当时存储介质（主要是硬盘）仍然昂贵的情况下，也不是好的解决方法。而互联网的出现，更产生了远距离传输文件的要求，在带宽的制约下，缩小文件体积的需求变得更加强烈，这些都从外部因素上导致了有损压缩数字音频格式产生！ </p> <p>而从内部因素来说，随着电脑运算、编码能力的提高，各种声学心理模式的进步，促进了各种有损压缩数字音频格式的层出不穷。以下简要介绍一些在MP3随身听上广泛使用的音频格式——MP3（CBR、VBR、ABR）、WMA、WAV、ADPCM，以及新兴的音频格式AAC、ASF和OGG。  <p>在介绍几种数字音频格式之前，我们先来明晰一个概念——Bit Rate（比特率）。  <p>在计算机领域中，所有的资料都是被数字化的，比特（Bit）是电脑中最小的数据单位，指一个0或者1的数，也就是数学上的二进制数字，一个“0”或“1”，就是一个位。例如当我们说一个2位的数字，就是指它是一个两位数的二进制数字，有“00”、“01”、“10”、“11”这4种组合，分别代表十进制中的0、1、2、3四个数字。  <p>比特率是一种数字音乐压缩效率的参考性指标，比特率表示单位时间（1秒）内传送的比特数bps（bit per second，位/秒），通常我们使用kbps（通俗地讲就是每秒钟1000比特）作为单位。CD中的数字音乐比特率为1411.2kbps（也就是记录1秒钟的CD音乐，需要1411.2×1024比特的数据）。音乐文件的比特率越高，意味着在单位时间（1秒）内需要处理的数据量（Bit）越多，也就表明音乐文件的音质越好。但是，比特率高时文件大小变大，会占据很多的存储容量，MP3音乐文件最常用的bit rate是128kbps，MP3文件可以使用的比特率一般是8～320kbps。  <p>--------------------------------------------------------------------------------  <p>1、 WMA（Windows Media Audio，视窗媒体音频）  <p>作为微软公司的多媒体压缩方式，它是在Windows Media Technologies中只压缩音频数据的那一部分技术，音质类似MP3，能以MP3一半的技术完成压缩。它具有版权所有的Windows Media Rights Manager，可通过安装在WMP（Windows Media Player，视窗媒体播放器）进行播放。由于微软和Windows的强大影响力，以及最重要的版权原因，美国的主要唱片公司EMI和BMG公司等正式确定使用由微软公司开发生产的WMA方式。相信，今后这种先进方式会得到进一步的普及。  <p>2、 MP3（CBR、VBR、ABR）  <p>MP3是目前使用用户最多、应用最为广泛的有损压缩数字音频格式，在前文已经做过解释，在此不再复述。  <p>CBR（Constant Bit Rate，固定比特率）  <p>CBR是最古老最简单的MP3编码（压缩）方式。采用此法编码时，整个文件的比特率都是一样的，换言之，MP3文件每秒使用的比特率都是一样。尽管音乐文件有复杂程度不同的段落，编码器始终把比特率保持一致，除非你用最高音质，否则，MP3文件中不同段落的音质会有变化。越是复杂的段落，其音质就越差。它的最大优点是文件的尺寸固定，便于计算存储的空间。  <p>VBR（Variable Bit Rate，可变比特率）  <p>VBR是一种可变编码速率的MP3压缩方式，其原理就是将一首歌的复杂部分用高比特率编码，简单部分用低比特率编码，通过这种动态调整编码速率的方式，进一步得到音质和文件体积之间的平衡。它的主要优点是可以让整首歌都能大致达到我们的音质要求，缺点是编码时无法估计压缩出来的文件体积大小。  <p>现在推出的MP3随身听大部分都支持VBR了，不过有些机器虽然能够播放VBR格式的歌曲，但是不能够正确显示播放时间，目前许多高品质的MP3音乐都是采用VBR编码的。  <p>ABR（Average Bit Rate，平均比特率）  <p>ABR是VBR的一种插值参数，它是在VBR的基础上发展出来的一种编码方式，是针对CBR较大的文件体积和VBR生成文件体积大小不定的特点创造了这种编码模式。ABR在指定的文件大小内，以每50帧（30帧约1秒）为一段，低频和不敏感频率使用相对低的流量，高频和大动态表现时使用高流量，可以作为VBR和CBR的一种折中选择。  <p>3、 WMA（Windows Media Audio，视窗媒体音频）  <p>WMA是微软公司的多媒体压缩方式，它是在微软视窗媒体技术中只压缩音频数据的技术，音质类似MP3。从压缩比角度来说，在低于192kbps的编码速率条件下，WMA可以在同样音质条件下获得比MP3文件更小的体积——甚至一半（但当编码速率高于192kbps时，普遍的反映是MP3的音质要好于WMA）。微软官方宣布的资料中称WMA格式的可保护性极强，甚至可以限定播放机器、播放时间及播放次数，具有相当的版权保护能力。  <p>4、 WAV（声音资源文件）  <p>WAV是一种波形文件，直接记录声音的波形，未被压缩，从CD抓取的音轨就是wav文件，体积大。  <p>5、 ADPCM  <p>ADPCM是Adaptive Differential Pulse Code Modulation的缩写，全名为自适应差分脉冲编码，也是一种有损压缩数字音频格式。这个格式常用在MP3随身听的录音方面，它可以提供极高的压缩比，一般128MB的MP3随身听最长可以记录16小时的录音，但追求录音时间过长是以牺牲音质为代价的。  <p>6、 AAC（Advanced Audio Coding，高级音频编码）  <p>AAC是由Fraunhofer研究院（MP3格式的创造者）、杜比（DOLBY）试验室和AT&amp;T（美国电话电报公司）共同研发出的一种有损压缩音频格式，是MPEG-2规范的一部分。与MP3相比，AAC增加了对立体声的完美再现、码流效果音扫描、多媒体控制、降噪优化等MP3音频格式所没有的特性，同时还支持更多种采样率和比特率、多种语言的兼容能力、更高的解码效率。总之，AAC可以在比MP3文件缩小30％的前提下提供更好的音质。  <p>不过，在目前的MP3随身听上，仅有少数几家应用了这一格式。  <p>7、 ASF（Advanced Streaming Format，高级流动格式）  <p>ASF是微软公司针对Real公司开发的新一代网上流式数字音频压缩技术。这种压缩技术的特点是同时兼顾了保真度和网络传输需求，所以具有一定的先进性。也是由于微软的影响力，这种音频格式现在正获得越来越多的支持。  <p>8、 OGG Vorbis格式  <p>OGG是一个庞大的多媒体开发计划的项目名称，涉及视频音频等方面的编码开发。OGG Vorbis是高质量的音频编码方案，它比MP3先进在于可以支持多声道编码。官方数据显示，OGG Vorbis可以在相对较低的数据速率下实现比MP3更好的音质。但由于随身听使用耳机播放的局限，即便是经过多声道（两声道以上）编码的OGG Vorbis格式音频文件，用耳机收听也感受不到环绕效果，因为耳机只提供双声道输出。 <p>&nbsp; <p>&nbsp; <p>什么是MP3 <p>摘自：<a title="http://zhidao.baidu.com/question/2839473.html?fr=qrl" href="http://zhidao.baidu.com/question/2839473.html?fr=qrl">http://zhidao.baidu.com/question/2839473.html?fr=qrl</a> <p>MP3的全称是Moving Picture Experts Group, Audio Layer III,它所使用的技术是在VCD  <p>MPEG声音标准提供三个独立的压缩层次：层1(Layer 1)、层2(Layer 2)和层3(Layer 3)，用户对层次的选择可在复杂性和声音质量之间进行权衡。 <br>① 层1的编码器最为简单，编码器的输出数据率为384 kb/s，主要用于小型数字盒式磁带(digital compact cassette，DCC)。 <br>② 层2的编码器的复杂程度属中等，编码器的输出数据率为256 kb/s～192 kb/s，其应用包括数字广播声音(digital broadcast audio，DBA)、数字音乐、CD-I(compact disc-interactive)和VCD(video compact disc)等。 <br>③ 层3的编码器最为复杂，编码器的输出数据率为64 kb/s，主要应用于ISDN上的声音传输。  <p>Mpeg-1 lay 3支持的采样率为32,44.1,48khz,比特率支持32---320kbps <br>Mpeg-2 lay 3支持的采样率为16,22.05,24khz,比特率支持8---160kbps <br>Fraunhofer对此又进行扩展，将原来MPEG-2所支持的低采样率再除以2，得到： 8, 11.025, 和 12 kHz，比特率跟MPEG-2相同，称为 "MPEG 2.5"。 <br>MP3文件可以以不同比特率进行编码，比特率越小，压出来的文件也越小，当然失真也越大。至于它的品质，只要不是太夸张的压缩比，一般人的耳朵是听不出来的，一般来说128kbps已经相当于CD的音质了。 <br>Mp3是怎样压缩数据的 <br>MP3 压缩时运用到五个重要的技巧，分别是最小听觉门槛判定 (The minimal audition threshold) ，遮蔽效应 (The Masking effect) ，位元储存槽 (The reservoir of byres) ， The Joint Stereo ，和 Huffman 编码。 <br>最小听觉门槛判定是一种减少资料量的手段，因为人耳对不同频率的声音听到的音量反应不是平直的，因此我们可以将大部分的纪录资讯集中在人耳最灵敏的 2kHz 到 5kHz ，其余频率分配比较少的容量纪录。 <br>遮蔽效应也是听觉心理学模型 (Psychoacoustic models)的一种，它是指一个声音A能感知的阀值因另一个声音B的出现而提高的现象，这时B叫遮蔽声，A叫被遮蔽声；在视觉上呈现的效果就是在大太阳下你比较难看到天空中飞翔的鸟，听觉上的涵义就是当有一个音量或音色特别突出的声音出现，其他细小的声音就比较难被察觉，就像是管弦乐团齐奏时我们很难发现有观众的咳嗽声，尽管咳嗽的音量与没有其他声音时其实是相同的。因此在编码时我们不需要把所有的声音细节都编进去，而该把资料拿去纪录比较突出容易引起注意的声音。 <br>在解释前位元储存槽之前要先说明 MP3 的几个属性 CBR 和 VBR 。 CBR 是 Constant Bitrate 的缩写，也就是说该 MP3 每秒钟的资料流量是固定的，常见的 MP3 都是以 CBR 编码，好处是压缩速度快。相对的 VBR 是 Variable Bitrate的缩写，每秒钟的流量是可以变化的，好处是在讯号复杂时用比较多的容量去纪录，波型简单时就用比较低的流量，以有效利用空间。 CBR 的缺点就是每秒钟的流量都相同，很容易造成空间的浪费，因此有 reservoir of byres 的出现，用途就是当波型简单时就不要用那么大的流量，把多余的空间保留下来储存将来比较复杂的波性资料，维持流量的大小，达到类似 VBR 的效果。 VBR 的 MP3 并不需要 reservoir of byres 。 <br>Joint Stereo 是一种立体声编码技巧，主要分为 Intensity Stereo(IS) 和 Mid/Side (M/S) stereo 两种。 IS 的是在比较低流量时使用，利用了人耳对于低频讯号指向性分辨能力的不足，将音讯资料中的低频分解出来合成单声道资料，剩余的高频资料则合成另一个单声道资料，并另外纪录高频资料的位置资讯，来重建立体声的效果。例如钢琴独奏的录音就可以利用这种方法在有限的资料流量中减少音场资讯却大幅增加音色资讯。Mid/Side (M/S) stereo 在左右声道资料相似度大时常被用到，纪录方式是将左右声道音讯合并 (L+R) 得到新的一轨，再将左右声道音讯相减 (L-R) 得到另外一轨，然后再将这两轨资料用上面提到听觉心理学模型与滤波器处理。 Mid/Side (M/S) stereo 与 IS 一样的是利用部分相位 (phase) 资讯的损失来换得较高的音色纪录资讯。一般的 MP3 是 Mid/Side stereo 和 Intensity Stereo 交替使用的，视资料内容与流量而定。如果是更高流量如 160kbps 以上的 MP3 ，则可以单独将立体声的两个声道独立编码，以保存相位资讯。 <br>Huffman 编码 (coding) 是一种常见的无失真压缩方案。当 PCM 讯号被分成好几个频段并经过以上的处理之后，最后就是经过一种类似 FFT(Fast Fourier Transforms) 的运算称为 MDCT(Modified Discrete Cosine Transform) ，将波型转换为一连串的系数。这些系数最后就要经过 Huffman 编码来做最后的压缩。 Huffman 编码的原理是将比较常出现的字串用特定的符号表示，压缩后就得到一个纪录每个符号代表的字串的编码表以及一连串由各符号组成的资料内容。 Huffman 编码可以节省约 20% 的空间，而也因为经过了 Huffman 编码，我们可以发现用 WinZip 、 WinRAR 之类的压缩软体并没有办法把 MP3压缩小多少，理由就是因为这些压缩软体也是利用类似 Huffman 编码的技巧，因此压缩程度有限。(以上关于 MP3 编码的资料取自 <a href="http://www.mp3-tech.org/tech.html">http://www.mp3-tech.org/tech.html</a> 。) <br>MP3 播放时的运算远比编码时简单，只要先经过 Huffman 解码再由 MDTC 的逆运算重建波型就可以了，值得注意的是 MP3不同于PCM没有bits的概念，我们可以自由使用 16bits 或是 20bits 甚至 24bits 的运算精度来重建波型。</p><img src ="http://www.blogjava.net/yoda/aggbug/205971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-06-05 09:37 <a href="http://www.blogjava.net/yoda/archive/2008/06/05/205971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CVS根据文件扩展名判断文件类型Text/Binary</title><link>http://www.blogjava.net/yoda/archive/2008/06/04/205945.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Wed, 04 Jun 2008 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/06/04/205945.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/205945.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/06/04/205945.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/205945.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/205945.html</trackback:ping><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fc7a583f-9b61-4c12-8da7-ac2b7b43a668" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/cvs" rel="tag">cvs</a>,<a href="http://technorati.com/tags/cvsnt" rel="tag">cvsnt</a>,<a href="http://technorati.com/tags/binary" rel="tag">binary</a>,<a href="http://technorati.com/tags/text" rel="tag">text</a>,<a href="http://technorati.com/tags/visio%20file" rel="tag">visio file</a>,<a href="http://technorati.com/tags/vsd" rel="tag">vsd</a></div> <p>今天很失败，画了一个中午的Visio流程图，在CVS上提交的时候，提交是成功了，就是文件被破坏掉了，大小变成了1KB。仔细看了一下，原来是Visio的文件.vsd的被CVS识别成Text的了，但是我确定我添加这个文件的时候是按照Binary的方式来添加的啊。于是继续做实验，发现果然是，即使你按照Binary的方式添加，在提交完毕之后，就变成了Text方式了。</p> <p>&nbsp;</p> <p>于是查看CVS的文档，也就是-kb参数来设定文件的类型。我切换到命令行方式，还是一样，被识别成Text的了。</p> <p>&nbsp;</p> <p>于是想找一种方式，来解决这个问题，否则在之后的工作中会有麻烦的（其实PowerDesigner的文档.pdm的也存在这种情况，但是至少.pdm是真正的文本文件，即使发生了冲突，虽然几率较小，也是可以在文文本编辑器中修改回来，但是Visio就不一样了，.vsd可是真正的Binary的文档啊）。</p> <p>&nbsp;</p> <p>看到cvs文档上说，可以修改cvswrappers文件来设定扩展名对应的处理方式，是Text还是Binary的方式，因为CVS并不能准确判断你加入的文件的类型。</p> <p>&nbsp;</p> <p>1. 使用WinCVS客户端或者cvs.exe命令行工具检出CVSROOT这个Module，需要注意的是，这个Module的安全界别设置比较高，需要Administrator或者有Admin权限的用户才可以。可以登录到服务器查看一下CVSROOT\CVS\fileattr.xml</p> <p>2. 修改cvswrappers文件，里面有简单的说明，在最后加入两行：</p> <p>&nbsp;&nbsp;&nbsp; *.vsd -kb</p> <p>&nbsp;&nbsp;&nbsp; *.pdm -kb</p> <p>&nbsp;&nbsp;&nbsp; 如果是其它的CVS版本，参考cvswrappers文件注释部分的内容</p> <p>3. Commit 文件 cvswrappers</p> <p>&nbsp;</p> <p>然后就可以添加.vsd的文件了，果然能够识别成Binary的了。</p> <p>&nbsp;</p> <p>上面描述的问题和解决办法是 CVSNT 2.5 版本的，</p> <p>在CVSNT 2.0版本中，如果你Add文件时用Binary方式，那么之后的操作就是以Binary对待了。</p> <p>其它版本没有环境测试了。</p><img src ="http://www.blogjava.net/yoda/aggbug/205945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-06-04 23:35 <a href="http://www.blogjava.net/yoda/archive/2008/06/04/205945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Word的ListNum域实现自动编号</title><link>http://www.blogjava.net/yoda/archive/2008/06/04/205685.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Tue, 03 Jun 2008 16:17:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/06/04/205685.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/205685.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/06/04/205685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/205685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/205685.html</trackback:ping><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f61e9d3b-e8b2-4f7f-887e-8330cfd4c570" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/Office" rel="tag">Office</a>,<a href="http://technorati.com/tags/word" rel="tag">word</a>,<a href="http://technorati.com/tags/ListNum" rel="tag">ListNum</a></div> <p>这几天一直在写文档...可是俺最不愿意干的事情。但是既然要干，就得好好干。</p> <p>到了文档中和其它系统接口部分，要详细列出接口的参数表。由于参数太多，在表格的第一列加入了一个编号列。但是有时候添加或者删除了某个行，会导致要重新调整所有的编号。要是在Excel中这个是一个很简单的问题，但是在Word中还真是不知道怎么弄。知道Word有一个自动序号的域，就是AutoNum域，但是使用这个很容易导致和标题之间的层次混绕在一块。查查文档，看到有说使用ListNum域的，微软的文档上也说到在Office 2002之后的版本，建议大家使用ListNum代替AutoNum。</p> <p>&nbsp;</p> <p>在Word中，菜单：插入&gt;域</p> <p><a href="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_2.png"><img height="229" alt="image" src="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_thumb.png" width="163" border="0"></a> </p> <p>然后出现选择域的列表：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_4.png"><img height="374" alt="image" src="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_thumb_1.png" width="546" border="0"></a> </p> <p>&nbsp;</p> <p>选择ListNum，然后在右侧选项中进行相关的设定，新开始一个编号的话，就要设置起始值为1或者是其它的具体数字，这样Word就知道这里新开始了一个ListNum。在这个域之后的要递增的编号处，只需添加一个ListNum域，无需设定其它任何属性，Word就会根据这个ListNum域之前的ListNum域进行计算，然后剩下的就是Copy Paste了...</p> <p>&nbsp;</p> <p>插入完毕之后的页面如下：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_6.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="257" alt="image" src="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_thumb_2.png" width="195" border="0"></a> </p> <p>&nbsp;</p> <p>&nbsp;</p> <p>使用Alt+F9查看一下域代码：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_10.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="252" alt="image" src="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_thumb_4.png" width="290" border="0"></a> </p> <p>第一个斜线\后面的是字母L，对应Level属性，\s对应起始值属性。</p> <p>对ListNum域的代码熟悉之后，可以不用菜单操作，直接在需要输入的地方按Ctrl+F9输入域代码，然后按F9回到正常编辑状态。</p> <p>&nbsp;</p> <p>关于列表名称、列表中级别、开始值，在微软的网站找到一个说明：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_12.png"><img height="177" alt="image" src="http://www.blogjava.net/images/blogjava_net/yoda/WindowsLiveWriter/WordListNum_40F/image_thumb_5.png" width="514" border="0"></a> </p> <p>&nbsp;</p> <p>呵呵，虽然这是一个很小的技巧，但是用起来还是能够方便很多的。</p><img src ="http://www.blogjava.net/yoda/aggbug/205685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-06-04 00:17 <a href="http://www.blogjava.net/yoda/archive/2008/06/04/205685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JavaScript计算字符串占用字节数</title><link>http://www.blogjava.net/yoda/archive/2008/05/29/203893.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Thu, 29 May 2008 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/05/29/203893.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/203893.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/05/29/203893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/203893.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/203893.html</trackback:ping><description><![CDATA[<p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:43ece3b2-0186-456b-9b17-25dc6b4226a5" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/javascript" rel="tag">javascript</a>,<a href="http://technorati.com/tags/multibyte" rel="tag">multibyte</a>,<a href="http://technorati.com/tags/string" rel="tag">string</a>,<a href="http://technorati.com/tags/length" rel="tag">length</a>,<a href="http://technorati.com/tags/utf-8" rel="tag">utf-8</a></div></p> <p>最近和JavaScript纠缠上了。</p> <p>遇到这么一个问题，数据库的字符集为UTF-8的，要在页面上使用JavaScript验证输入的文本用UTF-8存储时占用字节长度。JavaScript的String对象有length属性，但是这个计算的是字符数，不是字节数（问题总是翻来覆去的，记得当年玩Delphi的时候，还得写程序计算字符串的字符数，因为Delphi中String的length是字节数...）。偷懒一点的办法是将验证代码中最大长度设置为数据库中对应字段的长度的1/3，但是这样准确来说有点不合适。</p> <p>所以想办法在JavaScript中判断在UTF-8下存储的String的字节数，在网上找到很多关于Unicode介绍的文档，最重要的是字符编码数值对应的存储长度：</p> <p>UCS-2编码(16进制) UTF-8 字节流(二进制) <br>0000 - 007F 0xxxxxxx （1字节）<br>0080 - 07FF 110xxxxx 10xxxxxx （2字节）<br>0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx （3字节） <p>&nbsp;</p> <p>于是代码如下：</p> <p>function mbStringLength(s) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var totalLength = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var charCode;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; s.length; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; charCode = s.charCodeAt(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (charCode &lt; 0x007f) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalLength = totalLength + 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ((0x0080 &lt;= charCode) &amp;&amp; (charCode &lt;= 0x07ff)) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalLength += 2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ((0x0800 &lt;= charCode) &amp;&amp; (charCode &lt;= 0xffff)) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalLength += 3;<br>&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; //alert(totalLength);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return totalLength;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <p>&nbsp;</p> <p>实际上,0x0080到0x07ff之间的字符很少会在实际用户输入中用到。</p> <p>&nbsp;</p> <p>参考文档：</p> <p>程序员趣味读物：谈谈Unicode编码 <a title="http://www.lihuasoft.net/article/show.php?id=2778" href="http://www.lihuasoft.net/article/show.php?id=2778">http://www.lihuasoft.net/article/show.php?id=2778</a></p><img src ="http://www.blogjava.net/yoda/aggbug/203893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-05-29 17:39 <a href="http://www.blogjava.net/yoda/archive/2008/05/29/203893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>加拿大公司招聘e-learning项目人员</title><link>http://www.blogjava.net/yoda/archive/2008/05/29/203702.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Thu, 29 May 2008 01:26:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/05/29/203702.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/203702.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/05/29/203702.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/203702.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/203702.html</trackback:ping><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1b2c2755-5d0a-4674-b3b9-871f601b778d" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/e-learning" rel="tag">e-learning</a></div> <p>2008年该公司在中国开始组建IT小组,中国IT小组成员将在北京与加拿大的同事一起协同工作, 共同开发和维护一套E-LEARNING网站项目. 对于合格的应征者我们将提供优厚的待遇和发展机会, 你将有机会得到公司提供的英语培训和出国短期工作的机会.  <p>技术要求:(ASP / JAVASCRIPT/ c#.net / MS SQL(2000/2005)/ WEB SERVICE ) <br>3+ Years of programming experience. <br>ASP/ ASP.NET (C# preferred)/Web Services. <br>SQL Server 2000 experience (SQL Server 2005 preferred), HTML, XML, XSLT, JavaScript. <br>Ability to work both in a team environment and independently with minimal guidance. <br>Ability to adapt and learn new technologies quickly.  <p>Excellent analytical and problem-solving abilities. <br>Communication - you will be required to work in English environment. <br>Therefore, a good English skill in both reading and writing is a must to have.  <p>Nice To Have: <br>E-learning management system projects experience <br>CVS experience  <p>职位需求 <br>Web programmer - is required to assist with the maintenance and evolution of the client's external website and internal portal. Multiple projects encompass research and analysis, configuration, customization, monitoring operations, migration of content, creating prototypes, application integration and testing. Responsibilities <br>include: <br>Implement and integrate the design of web application  <p>Process Analysis and Design Discipline. <br>Provide practical solutions using web technologies to solve business problems. <br>Migrate content a website to another platform. <br>Assist with configuration, testing, monitoring, supporting and resolving technical issues of a third party enterprise portal. <br>Create, code, test and document customizations on the portal and external website.  <p>Record, track and action defects using the client's defect tracking tool. <br>Participate in the coordination and testing in multiple test environments following the client's release schedule and process.  <p>工作地点<br>Beijing  <p>应聘要求 <br>英文简历 If you meet the requirements as outlined above, please send your resume to: zheng.xue@sympatico.ca or hr_shizj@sohu.com</p><img src ="http://www.blogjava.net/yoda/aggbug/203702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-05-29 09:26 <a href="http://www.blogjava.net/yoda/archive/2008/05/29/203702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Windows 批处理文件自动生成CLASSPATH</title><link>http://www.blogjava.net/yoda/archive/2008/05/29/203674.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Wed, 28 May 2008 16:12:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/05/29/203674.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/203674.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/05/29/203674.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/203674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/203674.html</trackback:ping><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d571c270-e23a-468e-b64b-1b2d02984e19" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/Windows%20batch" rel="tag">Windows batch</a>,<a href="http://technorati.com/tags/classpath" rel="tag">classpath</a>,<a href="http://technorati.com/tags/for" rel="tag">for</a></div> <p>自从有了Ant，好像就不用再自己写很长很长的CLASSPATH了，尤其是有时候手动编写这个变量还可能误写，导致出现了ClassNotFound错误时查了很久都不知道是怎么回事。</p> <p>对于比较大的项目，搞一个Ant是很不错的事情，但是有时候就是做一些简单的测试，我就不再费力气写Ant了，直接在命令行输入命令。但是设置CLASSPATH在这个时候就比较头疼了，尤其是现在的Java应用，随便写个简单的东西可能就需要一堆的框架，就会有一堆的jar文件要加入到CLASSPATH里面了。想起来Windows的批处理有For命令，就拿来研究一下：</p> <p>在命令行窗口：</p> <p>set cp=</p> <p>for %f in (*.jar) do set cp=%cp%;%f</p> <p>echo %cp%</p> <p>输出结果是：</p> <p>%cp%;servlet-api.jar</p> <p>这个明显是不对的啊，于是查看Windows的Set命令的帮助，发现也存在类似在编程中变量生命周期的问题，需要打开V模式才能够延展变量生命周期。默认情况下，V模式是关闭的。</p> <p>于是，在命令行窗口进行如下命令：</p> <p>cmd /V:ON （这一句是打开cmd的V模式）</p> <p>set cp=</p> <p>for %f in (*.jar) do set cp=!cp!;%f</p> <p>echo %cp%</p> <p>输出结果是：</p> <p>;commons-el.jar;jasper-compiler-jdt.jar;jasper-compiler.jar;jasper-runtime.jar;jsp-api.jar;naming-factory-dbcp.jar;naming-factory.jar;naming-resources.jar;servlet-api.jar <p>&nbsp; <p>正是我们需要的。当然了，还要加上全路径的。还有要注意的就似乎在for循环中，变量cp的引用不再是%%了，而是!!了，真是搞不懂MS怎么会这么奇怪。相比而言Unix/Linux的Shell就好很多了。 <p>&nbsp; <p>注意，如果是在.bat文件中运行，好像不能直接使用cmd /V:ON命令，需要手动先打开；另外，在批处理文件中的for循环的变量是要两个%来表达的，如果在批处理文件中，就得这么写：  <p>for %%f in (*.jar) do set cp=!cp!;%%f  <p>&nbsp; <p>Windows的批处理文件还是很有意思的，抽空得整理的好的教程了，呵呵。  <img src ="http://www.blogjava.net/yoda/aggbug/203674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-05-29 00:12 <a href="http://www.blogjava.net/yoda/archive/2008/05/29/203674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用免费软件替换盗版软件</title><link>http://www.blogjava.net/yoda/archive/2008/05/23/202441.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Fri, 23 May 2008 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/05/23/202441.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/202441.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/05/23/202441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/202441.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/202441.html</trackback:ping><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:49e3670f-c570-4026-a769-3dfe83512995" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/Software" rel="tag">Software</a>,<a href="http://technorati.com/tags/Free%20Software" rel="tag">Free Software</a>,<a href="http://technorati.com/tags/Open%20source%20software" rel="tag">Open source software</a></div> <p>在上一家公司养成了不用盗版软件的良好习惯，呵呵，其实主要是IT部门的查的太严格了。现在在项目组，有很多软件都是用的盗版的。但是没有办法，因为考虑到一个团队协同工作的问题，必须和大家保持一致。但是使用盗版毕竟不是一件好事，严格的说是违法的。下面就将俺以前积攒的值得一试的免费/开源软件整理一下：</p> <p>&nbsp;</p> <p>1. 看图工具 FastStone Image Viewer&nbsp; </p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.faststone.org/" href="http://www.faststone.org/">http://www.faststone.org/</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：简单，小巧，速度很快。功能上和ACDSee相比并不逊色。支持佳能，尼康，宾得等主流数码相机的原始格式图片（RAW格式）。并且带有一个简单但是基本够用的屏幕截屏功能。FastStone同样也有退出专业的屏幕截屏软件FastStone Capture，但是是共享软件，过期要收费的。</p> <p>&nbsp;</p> <p>2. 文本编辑工具 PSPad</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.pspad.com/index_en.html" href="http://www.pspad.com/index_en.html">http://www.pspad.com/index_en.html</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：客观地说，PSPad与UltraEdit相比，还有很多不足，但是满足日常使用是够了。支持HEX模式，支持列编辑模式，支持语法高亮。作者是捷克的一个工程师，39岁了，用Delphi开发的。</p> <p>&nbsp;</p> <p>3. 资源管理器 FreeCommander</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.freecommander.com/" href="http://www.freecommander.com/">http://www.freecommander.com/</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：TotalCommander的光环太盛了，而且可以免费下载和使用。但是TotalCommander的主页上明确表示，过了试用期之后，必须购买License或者卸载。所以俺找到了FreeCommander。目前FreeCommander的插件远远没有TotalCommander这么多，但是用起来很相似，从TotalCommander转过来基本上不会觉得别扭。</p> <p>&nbsp;</p> <p>4. 开发工具 Eclipse</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.eclipse.org/" href="http://www.eclipse.org/">http://www.eclipse.org/</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：这个就不多说了，列在这里只是想说，MyEclipse是商用软件，不要和Eclipse搞混了。其实现在Eclipse很多做得不错的插件都开始商业化了，这不是一件好事。</p> <p>&nbsp;</p> <p>5. 开发工具 NetBeans</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.netbeans.org/" href="http://www.netbeans.org/">http://www.netbeans.org/</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：Sun出品。没有用过，但是看现在风头很劲。尤其是6.1的推出，反响不错。其实从我做Java开发开始，用过几种IDE，个人觉得最好用的IDE是IntelliJ（<a title="http://www.jetbrains.com/idea/" href="http://www.jetbrains.com/idea/">http://www.jetbrains.com/idea/</a>），就像他的名字一样，非常的Intelligent。Visual J++由于不是纯Java的，被干掉了；JBuilder太笨重；NetBeans最初版本太让人失望；Eclipse本来很好，现在有点...臃肿。IntelliJ虽然是商用的，但是有一个优惠政策，如果你是两个开源项目的负责人，就可以免费得到正式的License。由于俺不符合条件，所以不知道到底是什么样的License。</p> <p>&nbsp;</p> <p>6. HTTP数据分析工具 Fiddler</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.fiddler2.com" href="http://www.fiddler2.com">http://www.fiddler2.com</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：HTTPWatch Basic是免费的，但是限制了很多的功能。Fiddler可以用来替代HTTPWatch。是MS的一个哥们儿开发的，很不错的。</p> <p>&nbsp;</p> <p>7. XML工具 </p> <p>&nbsp;&nbsp;&nbsp; Eclipse差不多够用了。XMLSpy太贵了...</p> <p>&nbsp;</p> <p>8. 远程字符终端 Putty</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.chiark.greenend.org.uk/~sgtatham/putty/" href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">http://www.chiark.greenend.org.uk/~sgtatham/putty/</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：虽然功能上比起SecureCRT有些不足，但是小巧玲珑，功能够用。用了将近3年了，感觉很不错。</p> <p>&nbsp;</p> <p>9. PDF转换工具 OpenOffice</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.openoffice.org/" href="http://www.openoffice.org/">http://www.openoffice.org/</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：OpenOffice原来是打算和MS Office对抗的，但是现在来看，他还没有赢得这场战争。Word文档转换到PDF文档，随便Google一下，能够有好多结果。但是大部分都是虚拟打印机，也就是说生成的PDF文档丢失了文档结构的信息。Acrobat（不是Reader哦）是商用的。有一次尝试安装了OpenOffice，发现他转换PDF文件是能够保存文档结构信息的，不知道是不是和Adobe有协议，拿到了PDF文档的API，呵呵。</p> <p>&nbsp;</p> <p>10. 翻译软件：Longoes</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.lingoes.cn/zh/" href="http://www.lingoes.cn/zh/">http://www.lingoes.cn/zh/</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：不知道金山和Google的合作到了什么程度了，但是Lingoes是替换盗版金山词霸的绝佳选择。很小巧，很多词典是在线查找的，还支持用Google的在线翻译功能进行全文翻译。</p> <p>&nbsp;</p> <p>11. 数据库客户端 Aqua Data Studio</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.aquafold.com/" href="http://www.aquafold.com/">http://www.aquafold.com/</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：Aqua Data Studio 最新的6.5版本已经不是免费的了，这个产品来自一个开源项目。Java开发的，使用JDBC连接数据库。针对Oracle数据库提供一些特定的有用的功能，虽然在管理方面比不上PL/SQL Developer和TOAD，但是对开发人员来说够用了。免费版本的URL找不到了... :(</p> <p>&nbsp;</p> <p>12. 压缩工具 7-zip</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a href="http://www.7-zip.org/zh-cn/">www.7-zip.org/zh-cn/</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：WinZip和WinRAR都是共享软件，过期要收费的。还好7-zip出现了！</p> <p>&nbsp;</p> <p>13. 画图软件 EDraw Max （亿图图示专家）</p> <p>&nbsp;&nbsp;&nbsp; 主页：<a title="http://www.edrawsoft.com/cn/download.php" href="http://www.edrawsoft.com/cn/download.php">http://www.edrawsoft.com/cn/download.php</a></p> <p>&nbsp;&nbsp;&nbsp; 点评：Visio也很贵的，那就尝试一下这个软件吧。注意，他不是免费的，但是License只需人民币28元！俺就是买的。有这么便宜的正版，就和盗版告别吧！界面和Visio很相似。但是有一个问题就是当文件中图示太多的话，处理可能会慢一点。但是，忍了！</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>先整理这些，希望大家把自己用的很不错的软件也写上来啊～～</p><img src ="http://www.blogjava.net/yoda/aggbug/202441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-05-23 16:44 <a href="http://www.blogjava.net/yoda/archive/2008/05/23/202441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>蓝屏屏保</title><link>http://www.blogjava.net/yoda/archive/2008/05/22/202168.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Thu, 22 May 2008 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/05/22/202168.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/202168.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/05/22/202168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/202168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/202168.html</trackback:ping><description><![CDATA[<p>由于公司强制要求大家的电脑都要设置屏保，所以昨天俺就下载了MS的蓝屏屏保，这个可是MS官方的哦。</p> <p>中午，去吃饭。回来后，发现机器没有反应了，不是蓝屏，是黑屏！仔细研究，发现关机了。</p> <p>于是乎，大喊一声：谁动了我的机器！</p> <p>再于是乎，可爱的老覃同志站起来说：我回来后发现你的机器不停的蓝屏，然后又不停的重启，所以我就给你关机了。</p> <p>晕倒～～</p> <p>&nbsp;</p> <p>下载地址：</p> <p><a href="http://www.microsoft.com/technet/sysinternals/Miscellaneous/BlueScreen.mspx">http://www.microsoft.com/technet/sysinternals/Miscellaneous/BlueScreen.mspx</a></p><img src ="http://www.blogjava.net/yoda/aggbug/202168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-05-22 14:39 <a href="http://www.blogjava.net/yoda/archive/2008/05/22/202168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript Modal Dialog 加载新页面的问题</title><link>http://www.blogjava.net/yoda/archive/2008/05/09/199435.html</link><dc:creator>YODA</dc:creator><author>YODA</author><pubDate>Fri, 09 May 2008 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/yoda/archive/2008/05/09/199435.html</guid><wfw:comment>http://www.blogjava.net/yoda/comments/199435.html</wfw:comment><comments>http://www.blogjava.net/yoda/archive/2008/05/09/199435.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yoda/comments/commentRss/199435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yoda/services/trackbacks/199435.html</trackback:ping><description><![CDATA[<p>刚才在做一个功能，在页面A上面点击某个按钮，弹出模态窗口（window.showModalDialog），页面为B。在页面B上有一个按钮，需要在当前的模态窗口中加载页面C，但是经过测试发现在页面B上适用window.href="C.html"或者window.navigate("C.html")都会打开新的IE窗口。只好想一个变通的办法，当页面B的按钮点击之后，设置window.returnValue="GOTO_C"，就是设置一个特殊的返回值，来标识要转向页面C。页面B的按钮点击代码如下：</p> <p>&nbsp;&nbsp;&nbsp; function gotoNextStep() {<br>&nbsp;&nbsp;&nbsp; window.returnValue = "GOTO_NEXT_STEP";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.close();<br>&nbsp;&nbsp;&nbsp; } <p>&nbsp;</p> <p>页面A的代码就要判断B返回的值是什么，然后决定如何对应动作。</p> <p>function popupB() {<br>&nbsp; var retVal = window.showModalDialog("B.htm", "", <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dialogHeight:286px; dialogWidth:408px; center:yes; resizable:yes");<br>&nbsp;&nbsp;&nbsp; if (retVal == "GOTO_C") {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.showModalDialog("C.htm", "", <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dialogHeight:286px; dialogWidth:408px; center:yes; resizable:yes");<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return true;<br>} <p>&nbsp; <p>逻辑上有点怪异，但是现在能够想到的就是这个变通方法了。 <p>&nbsp; <p>测试环境：Windows XP SP2, IE 6.0 <p>&nbsp;</p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0aeeb2c6-0682-409c-b2a0-903bf77794de" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/javascript" rel="tag">javascript</a>,<a href="http://technorati.com/tags/showModalDialog" rel="tag">showModalDialog</a>,<a href="http://technorati.com/tags/navigate" rel="tag">navigate</a>,<a href="http://technorati.com/tags/href" rel="tag">href</a></div><img src ="http://www.blogjava.net/yoda/aggbug/199435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yoda/" target="_blank">YODA</a> 2008-05-09 10:44 <a href="http://www.blogjava.net/yoda/archive/2008/05/09/199435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>