<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>方寸心思</title>
	<atom:link href="http://www.luoxf.net/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://www.luoxf.net/wordpress</link>
	<description>欢迎光临罗小飞(抱雪)的网上家园</description>
	<pubDate>Wed, 19 Nov 2008 14:46:01 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Ruby 匿名函数的使用</title>
		<link>http://www.luoxf.net/wordpress/archives/242</link>
		<comments>http://www.luoxf.net/wordpress/archives/242#comments</comments>
		<pubDate>Wed, 19 Nov 2008 14:45:49 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[程序]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/242</guid>
		<description><![CDATA[定义：proc1=lambda {&#124;a,b&#8230;&#124; 代码块}  #Ruby 1.8proc1=-&#62;{&#124;a,b&#8230;&#124; 代码块}  #Ruby 1.9使用：proc1.call(a,b,&#8230;)
]]></description>
			<content:encoded><![CDATA[<p>定义：<br />proc1=lambda {|a,b&#8230;| 代码块}  #Ruby 1.8<br />proc1=-&gt;{|a,b&#8230;| 代码块}  #Ruby 1.9<br />使用：<br />proc1.call(a,b,&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/242/feed</wfw:commentRss>
		</item>
		<item>
		<title>在有域的情况下为多个客户端安装软件</title>
		<link>http://www.luoxf.net/wordpress/archives/241</link>
		<comments>http://www.luoxf.net/wordpress/archives/241#comments</comments>
		<pubDate>Wed, 12 Nov 2008 02:40:51 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[系统]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/241</guid>
		<description><![CDATA[一、设置共享目录
　　为了最大程度地进行访问权限的管理，首先应在使用NTFS分区格式的盘中新建一个目录，并命名为“Tools$”，然后将
adobereader.msi程序 复制到“Tools$”目录中。接着设置该目录的共享权限，“Authenticated
Users”组为可读，“Administrator”组为完全控制。
   　　提示:分发的软件必须是MSI封装文件，如果想将非MSI格式的文件封装成MSI文件，可以使用InstallShield等工具来完成这个转换操作。

 　　二、设置组策略
　　以域管理员身份登录DC(域控制器)，然后依次点击“开始→程序→管理工具→Active
Directory用户和计算机”菜单项，在弹出的窗口中右键单击shyzhong.com，并在弹出的菜单中选择“属性”。在“属性”窗口中点击“新建”按钮，并将新建的组策略对象命名为“Software”。
　　接着选中Software并单击下方的“编辑”按钮，在打开的“组策略编辑器”窗口中依次点击“用户配置→软件设置→软件安装”。接着右键单击“软件安装”，并在弹出的菜单中选择“属性”。在“软件安装属性”对话框中手工输入“\计算机名\共享文件名”，然后选中“显示部署软件对话框”和“基本”两项。
　　点击“确定”按钮返回“组策略编辑器”后，右键点击“软件安装”项，在弹出的快捷菜单中依次选择“新建→程序包”。在随后出现的“打开”对话框中，选中Tools$目录下的“adobereader.msi”文件后单击“打开”按钮即可。在随后弹出的“部署软件”对话框中选中“已发布”选项后，点击“确定”按钮。现在就可关闭组策略对话框了。接着打开命令提示符窗口，输入“Gpupdate”命令并回车，这样可以刷新组策略，以便使上述设置立即生效。
　　三、在工作站中安装软件
　　经过上述在DC(域控制器)中的设置后，软件就会被分发到shyzhong.com域中的所有工作站上了。在工作站中，当用户登录域后，只要点击“添加/删除程序”窗口中的“添加新程序”按钮，就会立即在“从网络添加程序”列表中列出从DC(域控制器)中分发出来的“adobereader.msi”程序了。点击“添加”按钮则可以立即进行程序的安装。 
 　　使用上述在工作站中进行软件安装的方法能够将共享方式的“被动下载”变为软件分发的“主动传递”。这样一来，域的管理功能变得更加强大了，同时网管的负担也减轻了不少。 
 　　小知识:MSI文件与Windows Installer 
　　Windows Installer可以实现软件安装、删除、复原等功能。但要想使用这些功能，就必须通过Windows
Installer的数据包——MSI文件来实现。MSI是实现软件分发功能所必须的文件格式。MSI文件通常包含了安装内置程序所要的环境信息和安装或卸载程序时需要的指令和数据。当用户双击MSI文件时，与之关联的Windows
Installer的一个文件Msiexec.exe将会被调用，它将用Msi.dll读取软件包文件(.msi)、应用转换文件(.mst)，以便进行
下一步的处理。
]]></description>
			<content:encoded><![CDATA[<p>一、设置共享目录<br />
　　为了最大程度地进行访问权限的管理，首先应在使用NTFS分区格式的盘中新建一个目录，并命名为“Tools$”，然后将<br />
adobereader.msi程序 复制到“Tools$”目录中。接着设置该目录的共享权限，“Authenticated<br />
Users”组为可读，“Administrator”组为完全控制。<br />
   　　提示:分发的软件必须是MSI封装文件，如果想将非MSI格式的文件封装成MSI文件，可以使用InstallShield等工具来完成这个转换操作。<br />
<span id="more-241"></span><br />
 　　二、设置组策略<br />
　　以域管理员身份登录DC(域控制器)，然后依次点击“开始→程序→管理工具→Active<br />
Directory用户和计算机”菜单项，在弹出的窗口中右键单击shyzhong.com，并在弹出的菜单中选择“属性”。在“属性”窗口中点击“新建”按钮，并将新建的组策略对象命名为“Software”。<br />
　　接着选中Software并单击下方的“编辑”按钮，在打开的“组策略编辑器”窗口中依次点击“用户配置→软件设置→软件安装”。接着右键单击“软件安装”，并在弹出的菜单中选择“属性”。在“软件安装属性”对话框中手工输入“\计算机名\共享文件名”，然后选中“显示部署软件对话框”和“基本”两项。<br />
　　点击“确定”按钮返回“组策略编辑器”后，右键点击“软件安装”项，在弹出的快捷菜单中依次选择“新建→程序包”。在随后出现的“打开”对话框中，选中Tools$目录下的“adobereader.msi”文件后单击“打开”按钮即可。在随后弹出的“部署软件”对话框中选中“已发布”选项后，点击“确定”按钮。现在就可关闭组策略对话框了。接着打开命令提示符窗口，输入“Gpupdate”命令并回车，这样可以刷新组策略，以便使上述设置立即生效。</p>
<p>　　三、在工作站中安装软件<br />
　　经过上述在DC(域控制器)中的设置后，软件就会被分发到shyzhong.com域中的所有工作站上了。在工作站中，当用户登录域后，只要点击“添加/删除程序”窗口中的“添加新程序”按钮，就会立即在“从网络添加程序”列表中列出从DC(域控制器)中分发出来的“adobereader.msi”程序了。点击“添加”按钮则可以立即进行程序的安装。 </p>
<p> 　　使用上述在工作站中进行软件安装的方法能够将共享方式的“被动下载”变为软件分发的“主动传递”。这样一来，域的管理功能变得更加强大了，同时网管的负担也减轻了不少。 </p>
<p> 　　小知识:MSI文件与Windows Installer </p>
<p>　　Windows Installer可以实现软件安装、删除、复原等功能。但要想使用这些功能，就必须通过Windows<br />
Installer的数据包——MSI文件来实现。MSI是实现软件分发功能所必须的文件格式。MSI文件通常包含了安装内置程序所要的环境信息和安装或卸载程序时需要的指令和数据。当用户双击MSI文件时，与之关联的Windows<br />
Installer的一个文件Msiexec.exe将会被调用，它将用Msi.dll读取软件包文件(.msi)、应用转换文件(.mst)，以便进行<br />
下一步的处理。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/241/feed</wfw:commentRss>
		</item>
		<item>
		<title>转帖一则网友关于最近的土地政策的寓言</title>
		<link>http://www.luoxf.net/wordpress/archives/235</link>
		<comments>http://www.luoxf.net/wordpress/archives/235#comments</comments>
		<pubDate>Thu, 06 Nov 2008 06:34:39 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/235</guid>
		<description><![CDATA[不知深浅的河上有座桥，美美在桥上走，突然看到有人在河里摸什么于是问，你在摸什么啊，那人道：我在摸石头。继续问：摸石头干吗啊？“过河呗”“这不是有桥吗”“那不符合我的国情”美美回去把那人查了下，才发现那人叫中中，住东方，有严重的神经病
]]></description>
			<content:encoded><![CDATA[<p>不知深浅的河上有座桥，美美在桥上走，突然看到有人在河里摸什么<br />于是问，你在摸什么啊，那人道：我在摸石头。继续问：摸石头干吗啊？<br />“过河呗”<br />“这不是有桥吗”<br />“那不符合我的国情”<br />美美回去把那人查了下，才发现那人叫中中，住东方，有严重的神经病</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/235/feed</wfw:commentRss>
		</item>
		<item>
		<title>看看你是不是色鬼</title>
		<link>http://www.luoxf.net/wordpress/archives/231</link>
		<comments>http://www.luoxf.net/wordpress/archives/231#comments</comments>
		<pubDate>Tue, 04 Nov 2008 13:58:35 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/231</guid>
		<description><![CDATA[据说如果把这幅图拿给小朋友们看，他们会很快找到图中有9只海豚。如果你1分钟都还没有找到海豚，说明你是个色鬼；如果两分钟都还没有找到海豚，那就说明你是一个大色鬼!我测试的结果吗？很遗憾，还不是色鬼。

]]></description>
			<content:encoded><![CDATA[<p>据说如果把这幅图拿给小朋友们看，他们会很快找到图中有9只海豚。如果你1分钟都还没有找到海豚，说明你是个色鬼；如果两分钟都还没有找到海豚，那就说明你是一个大色鬼!我测试的结果吗？很遗憾，还不是色鬼。</p>
<div align="center"><img style="max-width: 800px;" src="http://www.luoxf.net/wordpress/wp-content/uploads/2008/11/292966-1224867350xmu8.jpg" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/231/feed</wfw:commentRss>
		</item>
		<item>
		<title>Linux下查看文件编码,文件编码格式转换和文件名编码</title>
		<link>http://www.luoxf.net/wordpress/archives/227</link>
		<comments>http://www.luoxf.net/wordpress/archives/227#comments</comments>
		<pubDate>Mon, 03 Nov 2008 15:35:26 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[系统]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/227</guid>
		<description><![CDATA[inux下查看文件编码,文件编码格式转换和文件名编码转换.
如果你需要在Linux中操作windows下的文件，那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312)，而Linux一般都是UTF-8。下面介绍一下，在Linux中如何查看文件的编码及如何进行对文件进行编码转换。

查看文件编码
在Linux中查看文件编码可以通过以下几种方式：
1.在Vim中可以直接查看文件编码
:set fileencoding
即可显示文件编码格式。
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题，那么你可以在
~/.vimrc 文件中添加以下内容：
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样，就可以让vim自动识别文件编码（可以自动识别UTF-8或者GBK编码的文件），其实就是依照fileencodings提供的编码列表尝试，如果没有找到合适的编码，就用latin-1(ASCII)编码打开。
文件编码转换
1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
:set fileencoding=utf-8
2. iconv 转换，iconv的命令格式如下：
iconv -f encoding -t encoding inputfile
比如将一个UTF-8 编码的文件转换成GBK编码
iconv -f GBK -t UTF-8 file1 -o file2
文件名编码转换:
从Linux往 windows拷贝文件或者从windows往Linux拷贝文件，有时会出现中文文件名乱码的情况，出现这种问题的原因是因为，windows的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致，所以导致了文件名乱码的问题，解决这个问题需要对文件名进行转码。
在Linux中专门提供了一种工具convmv进行文件名编码的转换，可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。
首先看一下你的系统上是否安装了convmv,如果没安装的话用:
yum -y install convmv
安装。
下面看一下convmv的具体用法：
convmv -f 源编码 -t 新编码 [选项] 文件名
常用参数：
-r 递归处理子文件夹
&#8211;notest 真正进行操作，请注意在默认情况下是不对文件进行真实操作的，而只是试验。
&#8211;list 显示所有支持的编码
&#8211;unescap 可以做一下转义，比如把%20变成空格
比如我们有一个utf8编码的文件名，转换成GBK编码，命令如下：
convmv -f UTF-8 -t GBK &#8211;notest utf8编码的文件名
这样转换以后&#8221;utf8编码的文件名&#8221;会被转换成GBK编码（只是文件名编码的转换，文件内容不会发生变化）
vim 编码方式的设置
和所有的流行文本编辑器一样，Vim 可以很好的编辑各种字符编码的文件，这当然包括UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是，和很多来自 Linux 世界的软件一样，这需要你自己动手设置。
Vim 有四个跟字符编码方式有关的选项，encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names)，它们的意义如下:
* encoding: [...]]]></description>
			<content:encoded><![CDATA[<p>inux下查看文件编码,文件编码格式转换和文件名编码转换.</p>
<p>如果你需要在Linux中操作windows下的文件，那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312)，而Linux一般都是UTF-8。下面介绍一下，在Linux中如何查看文件的编码及如何进行对文件进行编码转换。</p>
<p><span id="more-227"></span></p>
<p>查看文件编码<br />
在Linux中查看文件编码可以通过以下几种方式：<br />
1.在Vim中可以直接查看文件编码<br />
:set fileencoding<br />
即可显示文件编码格式。<br />
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题，那么你可以在<br />
~/.vimrc 文件中添加以下内容：</p>
<p>set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936</p>
<p>这样，就可以让vim自动识别文件编码（可以自动识别UTF-8或者GBK编码的文件），其实就是依照fileencodings提供的编码列表尝试，如果没有找到合适的编码，就用latin-1(ASCII)编码打开。</p>
<p>文件编码转换<br />
1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式<br />
:set fileencoding=utf-8</p>
<p>2. iconv 转换，iconv的命令格式如下：<br />
iconv -f encoding -t encoding inputfile<br />
比如将一个UTF-8 编码的文件转换成GBK编码<br />
iconv -f GBK -t UTF-8 file1 -o file2</p>
<p>文件名编码转换:</p>
<p>从Linux往 windows拷贝文件或者从windows往Linux拷贝文件，有时会出现中文文件名乱码的情况，出现这种问题的原因是因为，windows的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致，所以导致了文件名乱码的问题，解决这个问题需要对文件名进行转码。</p>
<p>在Linux中专门提供了一种工具convmv进行文件名编码的转换，可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。</p>
<p>首先看一下你的系统上是否安装了convmv,如果没安装的话用:<br />
yum -y install convmv<br />
安装。</p>
<p>下面看一下convmv的具体用法：</p>
<p>convmv -f 源编码 -t 新编码 [选项] 文件名</p>
<p>常用参数：<br />
-r 递归处理子文件夹<br />
&#8211;notest 真正进行操作，请注意在默认情况下是不对文件进行真实操作的，而只是试验。<br />
&#8211;list 显示所有支持的编码<br />
&#8211;unescap 可以做一下转义，比如把%20变成空格<br />
比如我们有一个utf8编码的文件名，转换成GBK编码，命令如下：</p>
<p>convmv -f UTF-8 -t GBK &#8211;notest utf8编码的文件名<br />
这样转换以后&#8221;utf8编码的文件名&#8221;会被转换成GBK编码（只是文件名编码的转换，文件内容不会发生变化）</p>
<p>vim 编码方式的设置</p>
<p>和所有的流行文本编辑器一样，Vim 可以很好的编辑各种字符编码的文件，这当然包括UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是，和很多来自 Linux 世界的软件一样，这需要你自己动手设置。</p>
<p>Vim 有四个跟字符编码方式有关的选项，encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names)，它们的意义如下:</p>
<p>* encoding: Vim 内部使用的字符编码方式，包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在 .vimrc 中改变它的值，事实上似乎也只有在.vimrc 中改变它的值才有意义。你可以用另外一种编码来编辑和保存文件，如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会自动将读入的文件转成utf-8(vim的能读懂的方式），而当你写入文件时,又会自动转回成cp936（文件的保存编码).</p>
<p>* fileencoding: Vim 中当前编辑的文件的字符编码方式，Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。</p>
<p>* fileencodings: Vim自动探测fileencoding的顺序列表，启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式，并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面，将拉丁语系编码方式 latin1 放到最后面。</p>
<p>* termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。如果vim所在的term与vim编码相同，则无需设置。如其不然，你可以用vim的termencoding选项将自动转换成term的编码.这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效，而对 Console 模式的Vim 而言就是 Windows 控制台的代码页，并且通常我们不需要改变它。</p>
<p>好了，解释完了这一堆容易让新手犯糊涂的参数，我们来看看 Vim 的多字符编码方式支持是如何工作的。</p>
<p>1. Vim 启动，根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。</p>
<p>2. 读取需要编辑的文件，根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的，看起来是正确的 (注1) 字符编码方式。</p>
<p>3. 对比 fileencoding 和 encoding 的值，若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式，并且把转换后的内容放到为此文件开辟的 buffer 里，此时我们就可以开始编辑这个文件了。注意，完成这一步动作需要调用外部的 iconv.dll(注2)，你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。</p>
<p>4. 编辑完成后保存文件时，再次对比 fileencoding 和 encoding 的值。若不同，再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式，并保存到指定的文件中。同样，这需要调用 iconv.dll由于 Unicode 能够包含几乎所有的语言的字符，而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小)，因此建议 encoding 的值设置为utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时，Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。我们在中文 Windows 里编辑的文件，为了兼顾与其他软件的兼容性，文件编码还是设置为 GB2312/GBK 比较合适，因此 fileencoding 建议设置为 chinese (chinese 是个别名，在 Unix 里表示 gb2312，在 Windows 里表示cp936，也就是 GBK 的代码页)。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/227/feed</wfw:commentRss>
		</item>
		<item>
		<title>UBUNTU 8.10 安装记录</title>
		<link>http://www.luoxf.net/wordpress/archives/224</link>
		<comments>http://www.luoxf.net/wordpress/archives/224#comments</comments>
		<pubDate>Mon, 03 Nov 2008 01:38:25 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[系统]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/224</guid>
		<description><![CDATA[北京时间10月31日，UBUNTU 8.10 按时发布了，我也在第一时间下载了alternate－i386 版本。安装的过程和8.04差不多，很顺利就成功了，不过就在我进入系统安装中文支持的时候就出现问题了，cn99挂了，自动选择的中国源好象还不完整，后来选用了一个新加坡和韩国的源才成功。然后就是安装各种各样的软件，还不错，大多数软件安装都很顺利，其中swi-prolog在8.04不能使用的xpce现在可以使用了，不过也有新的问题出现，在8.04中可以正常使用的vmware-workstation 6.03 怎么折腾也没有安装上
]]></description>
			<content:encoded><![CDATA[<p>北京时间10月31日，UBUNTU 8.10 按时发布了，我也在第一时间下载了alternate－i386 版本。<br />安装的过程和8.04差不多，很顺利就成功了，不过就在我进入系统安装中文支持的时候就出现问题了，cn99挂了，自动选择的中国源好象还不完整，后来选用了一个新加坡和韩国的源才成功。<br />然后就是安装各种各样的软件，还不错，大多数软件安装都很顺利，其中swi-prolog在8.04不能使用的xpce现在可以使用了，不过也有新的问题出现，在8.04中可以正常使用的vmware-workstation 6.03 怎么折腾也没有安装上</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/224/feed</wfw:commentRss>
		</item>
		<item>
		<title>快速掌握一个语言最常用的50%</title>
		<link>http://www.luoxf.net/wordpress/archives/222</link>
		<comments>http://www.luoxf.net/wordpress/archives/222#comments</comments>
		<pubDate>Mon, 27 Oct 2008 17:10:43 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[程序]]></category>

		<category><![CDATA[资料]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/222</guid>
		<description><![CDATA[原作者:孟岩 原帖地址:http://blog.csdn.net/myan/archive/2008/10/25/3144661.aspx
现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度：其一，粗粗看看语法，就撸起袖子开干，边查Google边学习；其 二是花很多时间完整地把整个语言学习一遍，做到胸有成竹，然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显，不仅浪费了时间， 偏离了目标，而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家，反而忘了自己原本是要解决问题来的。 第一种路子也有问题，在对于这种语言的脾气秉性还没有了解的情况下大刀阔斧地拼凑代码，写出来的东西肯定不入流。说穿新鞋走老路，新瓶装旧酒，那都是小问 题，真正严重的是这样的程序员可以在短时间内堆积大量充满缺陷的垃圾代码。由于通常开发阶段的测试完备程度有限，这些垃圾代码往往能通过这个阶段，从而潜 伏下来，在后期成为整个项目的毒瘤，反反复复让后来的维护者陷入西西弗斯困境。


实际上语言学习有一定规律可循，对于已经掌握一门语言的 开发者来说，对于一般的语言，完全可以以最快的速度，在几天至一周之内掌握其最常用的50%，而且保证路子基本正宗，没有出偏的弊病。其实真正写程序不怕 完全不会，最怕一知半解的去攒解决方案。因为你完全不会，就自然会去认真查书学习，如果学习能力好的话，写出来的代码质量不会差。而一知半解，自己动手土 法炼钢，那搞出来的基本上都是废铜烂铁。比如错误处理和序列化，很多人不去了解“正路子”，而是凭借自己的一知半解去攒野路子，这是最危险的。因此，即使 时间再紧张，这些内容也是必须首先完整了解一遍的。掌握这些内容之后进入实际开发，即使有问题，也基本不会伤及项目大体。而开发者本人则可以安步当车，慢 慢在实践中提高自己。
以下列出一个学习提纲，主要针对的是有经验的人，初学者不合适。这个提纲只能用于一般的庸俗编程语言学习，目前在 流行编程语言排行榜上排前20的基本上都是庸俗语言。如果你要学的是LISP之类非庸俗语言，或是某个软件中的二次开发语言，这里的建议未必合适。还是那 句话，仅供参考。
1. 首先了解该语言的基本数据类型，基本语法和主要语言构造，主要数学运算符和print函数的使用，达到能够写谭浩强程序设计书课后数学习题的程度；
2. 其次掌握数组和其他集合类的使用，有基础的话可以理解一下泛型，如果理解不了也问题不大，后面可以补；
3. 简单字符串处理。所谓简单，就是Regex和Parser以下的内容，什么查找替换，截断去字串之类的。不过这个阶段有一个难点，就是字符编码问题。如果理解不了，可以先跳过，否则的话最好在这时候把这个问题搞定，免留后患；
4. 基本面向对象或者函数式编程的特征，无非是什么继承、多态、Lambda函数之类的，如果有经验的话很快就明白了；
5. 异常、错误处理、断言、日志和调试支持，对单元测试的支持。你不一定要用TDD，但是在这个时候应该掌握在这个语言里做TDD的基本技能；
6. 程序代码和可执行代码的组织机制，运行时模块加载、符号查找机制，这是初学时的一个难点，因为大部分书都不太注意介绍这个极为重要的内容；
7. 基本输入输出和文件处理，输入输出流类的组织，这通常是比较繁琐的一部分，可以提纲挈领学一下，搞清楚概念，用到的时候查就是了。到这个阶段可以写大部分控制台应用了；
8. 该语言如何进行callback方法调用，如何支持事件驱动编程模型。在 现代编程环境下，这个问题是涉及开发思想的一个核心问题，几乎每种语言在这里都会用足功夫，.NET的delegate，Java的anonymous inner class，Java 7的closure，C++OX的 tr1::function/bind，五花八门。如果能彻底理解这个问题，不但程序就不至于写得太走样，而且对该语言的设计思路也能有比较好的认识；
9. 如果有必要，可在这时研究regex和XML处理问题，如无必要可跳过；
10. 序列化和反序列化，掌握一下缺省的机制就可以了；
11. 如果必要，可了解一下线程、并发和异步调用机制，主要是为了读懂别人的代码，如果自己要写这类代码，必须专门花时间严肃认真系统地学习，严禁半桶水上阵；
12. 动态编程，反射和元数据编程，数据和程序之间的相互转化机制，运行时编译和执行的机制，有抱负的开发者在这块可以多下些功夫，能够使你对语言的认识高出一个层面；
13. 如果有必要，可研究一下该语言对于泛型的支持，不必花太多时间，只要能使用现成的泛型集合和泛型函数就可以了，可在以后闲暇时抽时间系统学习。需要注意的是，泛型技术跟多线程技术一样，用不好就成为万恶之源，必须系统学习，谨慎使用，否则不如不学不用；
14. 如果还有时间，最好咨询一下有经验的人，看看这个语言较常用的特色features是什么，如果之前没学过，应当补一下。比如Ruby的block interator, Java的dynamic proxy，C# 3的LINQ和extension method。没时间的话，我认为也可以边做边学，没有大问题。
15. 有必要的话，在工作的闲暇时间，可以着重考察两个问题，第一，这个语言有哪些惯用法和模式，第二，这个语言的编译/解释执行机制。
至 此语言的基本部分就可以说掌握了，之后是做数据库、网络还是做图形，可以根据具体需求去搞，找相应的成熟框架或库，边做边学，加深理解。对于一个庸俗语 言，我自己把上面的内容走一遍大概要花2-3周时间，不能算很快，但也耽误不了太多事情，毕竟不是每个月都学新语言。掌握了以上的内容，就给练武术打好了 基本功，虽然不见得有多优秀，但是肯定是根正苗红，将来不必绕大弯子。就算是临时使用的语言，把上面这个提纲精简一下，只看蓝色重体字的部分，大致能在几 天到一周内搞定，不算是太耗时，而且写出来的代码不会太不靠谱。
以上提纲未设及内存模型。对于C/C++，这个问题很重要，要放在显著位置来考虑，但对于其他语言，这个问题被透明化了，除非你要做hardcore项目，否则不必太关注。
]]></description>
			<content:encoded><![CDATA[<p>原作者:孟岩 原帖地址:http://blog.csdn.net/myan/archive/2008/10/25/3144661.aspx</p>
<p>现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度：其一，粗粗看看语法，就撸起袖子开干，边查Google边学习；其 二是花很多时间完整地把整个语言学习一遍，做到胸有成竹，然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显，不仅浪费了时间， 偏离了目标，而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家，反而忘了自己原本是要解决问题来的。 第一种路子也有问题，在对于这种语言的脾气秉性还没有了解的情况下大刀阔斧地拼凑代码，写出来的东西肯定不入流。说穿新鞋走老路，新瓶装旧酒，那都是小问 题，真正严重的是这样的程序员可以在短时间内堆积大量充满缺陷的垃圾代码。由于通常开发阶段的测试完备程度有限，这些垃圾代码往往能通过这个阶段，从而潜 伏下来，在后期成为整个项目的毒瘤，反反复复让后来的维护者陷入西西弗斯困境。</p>
<p><span id="more-222"></span>
</p>
<p>实际上语言学习有一定规律可循，对于已经掌握一门语言的 开发者来说，对于一般的语言，完全可以以最快的速度，在几天至一周之内掌握其最常用的50%，而且保证路子基本正宗，没有出偏的弊病。其实真正写程序不怕 完全不会，最怕一知半解的去攒解决方案。因为你完全不会，就自然会去认真查书学习，如果学习能力好的话，写出来的代码质量不会差。而一知半解，自己动手土 法炼钢，那搞出来的基本上都是废铜烂铁。比如错误处理和序列化，很多人不去了解“正路子”，而是凭借自己的一知半解去攒野路子，这是最危险的。因此，即使 时间再紧张，这些内容也是必须首先完整了解一遍的。掌握这些内容之后进入实际开发，即使有问题，也基本不会伤及项目大体。而开发者本人则可以安步当车，慢 慢在实践中提高自己。</p>
<p>以下列出一个学习提纲，主要针对的是有经验的人，初学者不合适。这个提纲只能用于一般的庸俗编程语言学习，目前在 流行编程语言排行榜上排前20的基本上都是庸俗语言。如果你要学的是LISP之类非庸俗语言，或是某个软件中的二次开发语言，这里的建议未必合适。还是那 句话，仅供参考。</p>
<p>1. 首先<strong><font color="#0000ff">了解该语言的基本数据类型，基本语法和主要语言构造</font></strong>，主要数学运算符和print函数的使用，达到能够写谭浩强程序设计书课后数学习题的程度；</p>
<p>2. <strong><font color="#0000ff">其次掌握数组和其他集合类的使用</font></strong>，有基础的话可以理解一下泛型，如果理解不了也问题不大，后面可以补；</p>
<p>3. 简单字符串处理。所谓简单，就是Regex和Parser以下的内容，什么查找替换，截断去字串之类的。不过这个阶段有一个难点，就是字符编码问题。如果理解不了，可以先跳过，否则的话最好在这时候把这个问题搞定，免留后患；</p>
<p>4. <strong><font color="#0000ff">基本面向对象或者函数式编程的特征</font></strong>，无非是什么继承、多态、Lambda函数之类的，如果有经验的话很快就明白了；</p>
<p>5. <strong><font color="#0000ff">异常、错误处理、断言、日志和调试支持，对单元测试的支持</font></strong>。你不一定要用TDD，但是在这个时候应该掌握在这个语言里做TDD的基本技能；</p>
<p>6. <strong><font color="#0000ff">程序代码和可执行代码的组织机制，运行时模块加载、符号查找机制</font></strong>，这是初学时的一个难点，因为大部分书都不太注意介绍这个极为重要的内容；</p>
<p>7. <strong><font color="#0000ff">基本输入输出和文件处理，输入输出流类的组织</font></strong>，这通常是比较繁琐的一部分，可以提纲挈领学一下，搞清楚概念，用到的时候查就是了。到这个阶段可以写大部分控制台应用了；</p>
<p>8. <strong><font color="#0000ff">该语言如何进行callback方法调用，如何支持事件驱动编程模型。</font></strong>在 现代编程环境下，这个问题是涉及开发思想的一个核心问题，几乎每种语言在这里都会用足功夫，.NET的delegate，Java的anonymous inner class，Java 7的closure，C++OX的 tr1::function/bind，五花八门。如果能彻底理解这个问题，不但程序就不至于写得太走样，而且对该语言的设计思路也能有比较好的认识；</p>
<p>9. 如果有必要，可在这时研究regex和XML处理问题，如无必要可跳过；</p>
<p>10. <strong><font color="#0000ff">序列化和反序列化</font></strong>，掌握一下缺省的机制就可以了；</p>
<p>11. 如果必要，可了解一下线程、并发和异步调用机制，主要是为了读懂别人的代码，如果自己要写这类代码，必须专门花时间严肃认真系统地学习，严禁半桶水上阵；</p>
<p>12. 动态编程，反射和元数据编程，数据和程序之间的相互转化机制，运行时编译和执行的机制，有抱负的开发者在这块可以多下些功夫，能够使你对语言的认识高出一个层面；</p>
<p>13. 如果有必要，可研究一下该语言对于泛型的支持，不必花太多时间，只要能使用现成的泛型集合和泛型函数就可以了，可在以后闲暇时抽时间系统学习。需要注意的是，泛型技术跟多线程技术一样，用不好就成为万恶之源，必须系统学习，谨慎使用，否则不如不学不用；</p>
<p>14. 如果还有时间，最好咨询一下有经验的人，看看这个语言较常用的特色features是什么，如果之前没学过，应当补一下。比如Ruby的block interator, Java的dynamic proxy，C# 3的LINQ和extension method。没时间的话，我认为也可以边做边学，没有大问题。</p>
<p>15. 有必要的话，在工作的闲暇时间，可以着重考察两个问题，第一，这个语言有哪些惯用法和模式，第二，这个语言的编译/解释执行机制。</p>
<p>至 此语言的基本部分就可以说掌握了，之后是做数据库、网络还是做图形，可以根据具体需求去搞，找相应的成熟框架或库，边做边学，加深理解。对于一个庸俗语 言，我自己把上面的内容走一遍大概要花2-3周时间，不能算很快，但也耽误不了太多事情，毕竟不是每个月都学新语言。掌握了以上的内容，就给练武术打好了 基本功，虽然不见得有多优秀，但是肯定是根正苗红，将来不必绕大弯子。就算是临时使用的语言，把上面这个提纲精简一下，只看蓝色重体字的部分，大致能在几 天到一周内搞定，不算是太耗时，而且写出来的代码不会太不靠谱。</p>
<p>以上提纲未设及内存模型。对于C/C++，这个问题很重要，要放在显著位置来考虑，但对于其他语言，这个问题被透明化了，除非你要做hardcore项目，否则不必太关注。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/222/feed</wfw:commentRss>
		</item>
		<item>
		<title>我的常用Firefox 插件</title>
		<link>http://www.luoxf.net/wordpress/archives/210</link>
		<comments>http://www.luoxf.net/wordpress/archives/210#comments</comments>
		<pubDate>Sat, 11 Oct 2008 14:07:00 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[电脑]]></category>

		<category><![CDATA[资料]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/210</guid>
		<description><![CDATA[DownThemAll: 用于下载，Linux下唯一的选择FEBE: 用于备份FireFox 的设置ScribeFire: 添加文章到博客TableTools: 对网页中的表格进行排序，筛选等操作Pearl Crescent Page Save Basic: 把网页保存为图片FlashBlock: 屏蔽Flash，要开启也很简单
]]></description>
			<content:encoded><![CDATA[<p>DownThemAll: 用于下载，Linux下唯一的选择<br />FEBE: 用于备份FireFox 的设置<br />ScribeFire: 添加文章到博客<br />TableTools: 对网页中的表格进行排序，筛选等操作<br />Pearl Crescent Page Save Basic: 把网页保存为图片<br />FlashBlock: 屏蔽Flash，要开启也很简单</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/210/feed</wfw:commentRss>
		</item>
		<item>
		<title>在SWI-PROLOG中用自定义运算符定义常量</title>
		<link>http://www.luoxf.net/wordpress/archives/209</link>
		<comments>http://www.luoxf.net/wordpress/archives/209#comments</comments>
		<pubDate>Sat, 11 Oct 2008 13:32:56 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[程序]]></category>

		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/209</guid>
		<description><![CDATA[通过查看帮助，我发现在SWI-PROLOG中无法定义常量，而有些PROLOG版本是可以的，如以前DOS版本的Turbo PROLOG。但是在书写程序时没有常量就很不方便了，如果使用字面常量，一是程序会使程序很难理解，二是修改的时候很不方便，凡是程序中出现这个常量的地方都要修改，极有可能出现遗漏；如果把常量定义成一元谓词如pi(3.14)，那么使用的时候又要先调用一次谓词，如：pi(PI),s is Pi*R*R.显得也很多余。
那么有没有办法在SWI-PROLOG中定义常量呢?当然可以，比如swi-prolog就定义得有符号pi和e，下面就以自定义符号pie=pi+e为例
pie(X):-X is pi+e.
:- arithmetic_function(pie/0).
装入这个文件后，就可以在表达式中使用使用这个常量pie了。
arithmetic_function的功能就是自定义运算符，在定义是需指明自定义函数的个数；在定义谓词时，最后一个个体变元必须是输出参数，用于保存结果。所以在arithmetic_function谓词中指明的参数个数应该比实际的变元个数少1。
]]></description>
			<content:encoded><![CDATA[<p>通过查看帮助，我发现在SWI-PROLOG中无法定义常量，而有些PROLOG版本是可以的，如以前DOS版本的Turbo PROLOG。但是在书写程序时没有常量就很不方便了，如果使用字面常量，一是程序会使程序很难理解，二是修改的时候很不方便，凡是程序中出现这个常量的地方都要修改，极有可能出现遗漏；如果把常量定义成一元谓词如pi(3.14)，那么使用的时候又要先调用一次谓词，如：pi(PI),s is Pi*R*R.显得也很多余。<br />
那么有没有办法在SWI-PROLOG中定义常量呢?当然可以，比如swi-prolog就定义得有符号pi和e，下面就以自定义符号pie=pi+e为例</p>
<p>pie(X):-X is pi+e.<br />
:- arithmetic_function(pie/0).</p>
<p>装入这个文件后，就可以在表达式中使用使用这个常量pie了。<br />
arithmetic_function的功能就是自定义运算符，在定义是需指明自定义函数的个数；在定义谓词时，最后一个个体变元必须是输出参数，用于保存结果。所以在arithmetic_function谓词中指明的参数个数应该比实际的变元个数少1。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/209/feed</wfw:commentRss>
		</item>
		<item>
		<title>VIM 学习笔记</title>
		<link>http://www.luoxf.net/wordpress/archives/193</link>
		<comments>http://www.luoxf.net/wordpress/archives/193#comments</comments>
		<pubDate>Wed, 01 Oct 2008 13:10:34 +0000</pubDate>
		<dc:creator>hugsnow</dc:creator>
		
		<category><![CDATA[电脑]]></category>

		<guid isPermaLink="false">http://www.luoxf.net/wordpress/archives/193</guid>
		<description><![CDATA[^p 或 ^n :(编辑模式)自动补全^O:切换到命令模式完成后返回编辑模式=a{ :重排选定的代码块zo:展开代码折叠zc:关闭代码折叠set encoding=编码 : 改变文件的编码方式(先设置再打开)set fileencoding=编码 : 把当前的编码转换为新的编码方式手把手教你把Vim改装成一个IDE编程环境(图文)
]]></description>
			<content:encoded><![CDATA[<p>^p 或 ^n :(编辑模式)自动补全<br />^O:切换到命令模式完成后返回编辑模式<br />=a{ :重排选定的代码块<br />zo:展开代码折叠<br />zc:关闭代码折叠<br />set encoding=编码 : 改变文件的编码方式(先设置再打开)<br />set fileencoding=编码 : 把当前的编码转换为新的编码方式<br /><a href="http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx">手把手教你把Vim改装成一个IDE编程环境(图文)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luoxf.net/wordpress/archives/193/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
