<?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>三叉戟2 的技术文摘</title>
	<atom:link href="http://www.nixuesong.com/blog2/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.nixuesong.com/blog2</link>
	<description></description>
	<pubDate>Wed, 25 Mar 2009 04:29:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Debian for Loongson 的几点想法(ZT)</title>
		<link>http://www.nixuesong.com/blog2/?p=262</link>
		<comments>http://www.nixuesong.com/blog2/?p=262#comments</comments>
		<pubDate>Wed, 25 Mar 2009 04:29:26 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=262</guid>
		<description><![CDATA[可能这个话题讨论过，若是老生长谈请见谅，但仍希望能集思广益，忘大家不吝赐教。
龙芯 CPU 的研发正在规划下稳步前进，每两三年就有新产品问世。
相比之下，龙芯的操作系统与应用的开发相比之下则不容乐观： RAYS 仓库有限，逸珑内建的基于 Debian 的系统则无法像正常的 Debian 系统使用（比如无法整体升级，见[1]）。这种情况如果不得到改进，也将严重限制龙芯系统的推广。目前官方支持 mipsel 架构的 GNU/Linux 发行版有 Debian 和 Gentoo，理论上其他 GNU/Linux 发行也可以移植； BSD 方面 NetBSD 也有 mips 的 port。既然有这么多成熟的发行，个人认为，在人员缺乏的条件下，没必要进行过多的重复劳动去自己维护发行，完全可以利用现有发行版的资源进行移植。这 样既可以避免重复开发（发行版、包管理的维护，以及一些非标准桌面的定制），也可避免现有 Linux 用户再次面对陌生的桌面环境（如逸珑笔记本的定制系统 Lemote Loonux），避免重复劳动，同时有效组织现有人力。
[1] http://www.lemote.com/bbs/viewthread.php?tid=20811&#38;amp;extra=page%3D2
目前，可直接选择的发行版有 Debian 和 Gentoo。由于个人对 Debian 更为熟悉一些，就以 Debian 为例讨论几点初步想法：
步骤1  完善文档。
Debian 官方文档：
目前包括龙梦首页的知识库，维基以及论坛资源中，有关 Debian 的资源虽然不少，但大部分内容松散，没有组织，还包括部分过时信息（如软件源及 Debian 的版本信息等）。实际上，这部分完全属于重复劳动。近期由 Debian 中文用户翻译的中文 Debian 文档已经非常丰富，且已更新到 Debian 官方站点。因此，只需要提供到 Debian 官方的链接即可（知识库的文章中竟然没有一个到 Debian 官方站的链接）。如有些页面未翻译，可联系 Debian 简体中文用户列表 [...]]]></description>
			<content:encoded><![CDATA[<p>可能这个话题讨论过，若是老生长谈请见谅，但仍希望能集思广益，忘大家不吝赐教。</p>
<p>龙芯 CPU 的研发正在规划下稳步前进，每两三年就有新产品问世。</p>
<p>相比之下，龙芯的操作系统与应用的开发相比之下则不容乐观： RAYS 仓库有限，逸珑内建的基于 Debian 的系统则无法像正常的 Debian 系统使用（比如无法整体升级，见[1]）。这种情况如果不得到改进，也将严重限制龙芯系统的推广。目前官方支持 mipsel 架构的 GNU/Linux 发行版有 Debian 和 Gentoo，理论上其他 GNU/Linux 发行也可以移植； BSD 方面 NetBSD 也有 mips 的 port。既然有这么多成熟的发行，个人认为，在人员缺乏的条件下，没必要进行过多的重复劳动去自己维护发行，完全可以利用现有发行版的资源进行移植。这 样既可以避免重复开发（发行版、包管理的维护，以及一些非标准桌面的定制），也可避免现有 Linux 用户再次面对陌生的桌面环境（如逸珑笔记本的定制系统 Lemote Loonux），避免重复劳动，同时有效组织现有人力。</p>
<p>[1] <a href="http://www.lemote.com/bbs/viewthread.php?tid=20811&amp;amp" target="_blank">http://www.lemote.com/bbs/viewthread.php?tid=20811&amp;amp</a>;extra=page%3D2</p>
<p>目前，可直接选择的发行版有 Debian 和 Gentoo。由于个人对 Debian 更为熟悉一些，就以 Debian 为例讨论几点初步想法：</p>
<p>步骤1  完善文档。</p>
<p>Debian 官方文档：<br />
目前包括龙梦首页的知识库，维基以及论坛资源中，有关 Debian 的资源虽然不少，但大部分内容松散，没有组织，还包括部分过时信息（如软件源及 Debian 的版本信息等）。实际上，这部分完全属于重复劳动。近期由 Debian 中文用户翻译的中文 Debian 文档已经非常丰富，且已更新到 Debian 官方站点。因此，只需要提供到 Debian 官方的链接即可（知识库的文章中竟然没有一个到 Debian 官方站的链接）。如有些页面未翻译，可联系 Debian 简体中文用户列表 <a href="mailto:debian-chinese-gb@lists.debian.org">debian-chinese-gb@lists.debian.org</a> 或者中文翻译计划 <a href="mailto:i18n-zh@googlegroups.com">i18n-zh@googlegroups.com</a> 进行完善，能够有组织合力解决，避免重复劳动。</p>
<p>Debian for 龙芯的专有文档：<br />
这部分是需要下精力完善的部分，如非官方仓库。目前由刘世伟刘工维护的非官方 Debian 仓库是需要突出的，其中包括 Debian 内核， Tor 都是无法使用 Debian 官方仓库里的，因此需要使用刘工仓库的版本。还有一些龙芯特有的内核模块，如电池模块 ec_batd ，如不加载， gnome-power-management 就无法检测到电池。其他此类信息对用户十分重要，应该合理组织，并放到显眼的位置。</p>
<p>以个人浅见，应该取消龙梦主页的知识库，并改为到龙芯维基或 Drupal 的链接，将现有资源转移到 wiki/drupal ，方便大家的改进及更新，同时帮助新用户能找到最新的文档资源：比如可以整理各位用户在论坛里的发帖总结出在龙芯安装 Debian 的方法，如 debian-installer, debootstrap, 以及使用官方提供的镜像包，等等。</p>
<p>步骤2  与官方 Debian 系统整合</p>
<p>这一步骤需要更多的工作量，也需要开发人员的协助。虽然 Debian mipsel 移植中的绝大部分软件可以直接使用，但仍存在两个问题：</p>
<p>(1) 软件不兼容。例如官方的内核无法使用。龙芯系统须在编译内核时选择龙芯架构，与其他 MIPS 架构不兼容。另外，某些软件可能依赖内核参数的设置，比如 tor ，则可能需要针对不同内核进行不同类型的 build 。这就比较难解决，即使 Debian 软件包可以根据不同的参数编译多次而提供多种风格的软件包，但由于内核更换很复杂，大大降低了可行性。</p>
<p>(2) 优化。Debian 的原则是要尽可能的运行在更多的系统上，因此默认会采用最通用的参数进行编译。目前就是采用 mips1 的 ABI。想让官方的 mipsel 为龙芯进行优化可能性为零。</p>
<p>目前通过非官方仓库可以解决第一个问题，如刘工的仓库，但并不完美。</p>
<p>一个更大胆的设想，则是建立一个完整的 Debian 的非官方龙芯移植。以 Debian 提供的工具，提供一套完整的移植并非像完成一个 LFS 那样复杂，虽仍然需要不少人力和周折，但一旦建立起来后续工作将大大简化，并真正提供了一套完整的软件解决方案。如推广进行顺利，也会进入 Debian 的官方发行。这样结合 Debian 开发者维护的软件包与龙芯方面的系统移植，可以大大节约软件包维护方面的人力。龙芯方面只要拿出几台做 buildd 即可慢慢完成软件仓库，一劳永逸。以目前的情况，此方法在短期内实现的可能性不大。</p>
<p>目前来讲，可以先完善非官方的内核编译，并联系 debian-mips 移植开发人员，讨论添加龙芯内核移植的可能性。这大概要等到 GCC 4.4 进入 sid 时可以开始进行。</p>
<p>有关 Debian mipsel 移植可以参考 Debian ports 的介绍[2][3]。</p>
<p>[2] <a href="http://www.debian.org/ports/" target="_blank">http://www.debian.org/ports/</a><br />
[3] <a href="http://www.debian.org/ports/mips/" target="_blank">http://www.debian.org/ports/mips/</a></p>
<p>这里只是以 Debian 为例简单说说。其实其他所有发行版都可行，而官方提供 mipsel 的 Debian 和 Gentoo 进行起来理论上会更顺利一些。</p>
<p>最后，鄙人才疏学浅，用语不当思考不周之处烦请各位多多批评指点，也希望各位能多提建议，提出更多的方案。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=262</wfw:commentRss>
		</item>
		<item>
		<title>史上最快Loongson 2F上的操作系统诞生了（ZT）</title>
		<link>http://www.nixuesong.com/blog2/?p=261</link>
		<comments>http://www.nixuesong.com/blog2/?p=261#comments</comments>
		<pubDate>Wed, 25 Mar 2009 03:03:32 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=261</guid>
		<description><![CDATA[张乐 发表于 2008-12-7
硬件需要软件的配合才能发挥最大功效
这个系统基本上就是目前可以让2F发挥最大功效的一个系统：
http://www.gentoo-cn.org/~zhangle/loongson2f_n32_mplt_20081209.tar.bz2
sha512sum: 18e415652785bc34ae2ce96800c63b6da2e18a9af6098a2569a9d99f82fea018b164ea2c87bf820a9a522b63db658d9e765e7a7b318885c0fd2f4661959af266  loongson2f_n32_mplt_20081209.tar.bz2
为了这样的一个系统的诞生我所做过的努力：
http://www.lemote.com/bbs/viewthread.php?tid=20134
其他条件相同，但使用-march=mips3编译的系统（可用于2e盒子，请用你的2e系统原来的内核，必须为64位内核）：
http://www.gentoo-cn.org/~zhangle/loongson_mips3_n32_mplt_20081231.tar.bz2
sha512sum:
a08cea332f32660806d494405ef69dd1de69f35be4e846c76f23a4b26d7642b39b3db4735c8913be7d4eafb0981e38d3c597ff6b9299526fbdbdb5212e0c361a  loongson_mips3_n32_mplt_20081231.tar.bz2
最新内核：http://www.gentoo-cn.org/~zhangle/vmlinux-2.6.28-rc8
内核模块：http://www.gentoo-cn.org/~zhangle/2.6.28-rc8-r0bertz.tar.bz2
主要亮点：

整个系统采用-mabi=n32编译，n32 ABI是int/long/pointer类型的变量长度为32位的n64 ABI。相比o32 ABI，n32能更充分发挥MIPS架构的特点。相比n64，n32程序的体积会更加小。而且在不需要科学运算的场合，n32已经足够应付。
整个系统采用-march=loongson2f编译，gcc包含codesourcery贡献的龙芯支持，以及阮贝鸿(jamesr)贡献的经我测试并修正的龙芯2f特有整数乘除法补丁
整 个系统采用-mplt编译，有了plt的支持，在不需要使用PIC(Position Independent Code)的地方，就不必使用PIC（之前有相当一部分不需要使用PIC的情况会使用PIC），这样可以减少指令数量，减小可执行程序体积，直接和间接的 加快软件执行速度

基本信息：

root密码：loongson
不包含X，只有一个基本系统
软件版本基本都是最新的
gcc/binutils是几天前直接从cvs里检出的
glibc用的是2008年11月24日的快照，而且包含了我的一个有关ld.so.cache的补丁
内核在/boot里，版本是2.6.27.5，好像是cjacker还是刘世伟发出来的补丁

最后要特别感谢Redhatter
因为本系统基于Redhatter的一个mips3 n32 Gentoo Linux stage3
http://dev.gentoo.org/~redhatter/mips/cobalt/stages
这省了我很多时间去从头构建这个系统
关于ADLS拨号：
配置一下/etc/conf.d/net，改一下下面的用户名密码
config_ppp0=&#8221;ppp&#8221;
link_ppp0=&#8221;eth0&#8243;
plugins_ppp0=&#8221;pppoe&#8221;
username_ppp0=&#8217;your_username&#8217;
password_ppp0=&#8217;your_password&#8217;
pppd_ppp0=&#8221;updetach defaultroute&#8221;
在/etc/init.d里创建一个net.ppp0的符号连接，指向/etc/init.d/net.lo
cd /etc/init.d
ln -sf net.lo net.ppp0
/etc/init.d/net.ppp0 start
关于/usr/portage目录：
下载这个文件
wget http://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2
tar xvf portage-latest.tar.bz2 -C /usr
关于龙芯overlay：
gentoo里的overlay就相当于其他发行版的第三方源
获得gentoo loongson overlay:
USE=&#8221;curl&#8221; emerge dev-util/git
git clone http://www.gentoo-cn.org/git/loongson.git
把overlay下载到本地硬盘上之后，然后把路径加入/etc/make.conf里的PORTDIR_OVERLAY变量即可
之后照常emerge，如果portage树（即官方源）和overlay里同时有同一版本的软件，emerge会安装overlay里的版本
就像overlay把portage树给盖住了，这也就是overlay的含义
更新overlay只需要进入overlay的目录，然后执行git pull
关于X:
1. 请使用我前面给的内核
2. 请使用龙芯overlay里的xorg-server-1.5.3，USE=&#8221;-aiglx minimal&#8221;
3. http://www.gentoo-cn.org/~zhangle/xorg.conf.txt
关于内核源代码
注意：目前循此法编译出来的内核的硬盘设备文件为sda而不是hda，请自行修改/etc/fstab和boot.cfg
git clone git://git.linux-mips.org/pub/scm/linux
cd linux
wget http://www.gentoo-cn.org/~zhangle/linux-2.6.28-rc9.patch -O /tmp/linux-2.6.28-rc9.patch
patch -p1 &#60; /tmp/linux-2.6.28-rc9.patch
git add *
git commit -m &#8220;added patch&#8221;
git archive &#8211;format=tar &#8211;prefix=junk/ [...]]]></description>
			<content:encoded><![CDATA[<p>张乐 发表于 2008-12-7</p>
<p>硬件需要软件的配合才能发挥最大功效<br />
这个系统基本上就是目前可以让2F发挥最大功效的一个系统：<br />
<a href="http://www.gentoo-cn.org/%7Ezhangle/loongson2f_n32_mplt_20081209.tar.bz2" target="_blank">http://www.gentoo-cn.org/~zhangle/loongson2f_n32_mplt_20081209.tar.bz2</a><br />
sha512sum: 18e415652785bc34ae2ce96800c63b6da2e18a9af6098a2569a9d99f82fea018b164ea2c87bf820a9a522b63db658d9e765e7a7b318885c0fd2f4661959af266  loongson2f_n32_mplt_20081209.tar.bz2</p>
<p>为了这样的一个系统的诞生我所做过的努力：<br />
<a href="http://www.lemote.com/bbs/viewthread.php?tid=20134" target="_blank">http://www.lemote.com/bbs/viewthread.php?tid=20134</a></p>
<p>其他条件相同，但使用-march=mips3编译的系统（可用于2e盒子，请用你的2e系统原来的内核，必须为64位内核）：<br />
<a href="http://www.gentoo-cn.org/%7Ezhangle/loongson_mips3_n32_mplt_20081231.tar.bz2" target="_blank">http://www.gentoo-cn.org/~zhangle/loongson_mips3_n32_mplt_20081231.tar.bz2</a><br />
sha512sum:<br />
a08cea332f32660806d494405ef69dd1de69f35be4e846c76f23a4b26d7642b39b3db4735c8913be7d4eafb0981e38d3c597ff6b9299526fbdbdb5212e0c361a  loongson_mips3_n32_mplt_20081231.tar.bz2</p>
<p>最新内核：<a href="http://www.gentoo-cn.org/%7Ezhangle/vmlinux-2.6.28-rc8" target="_blank">http://www.gentoo-cn.org/~zhangle/vmlinux-2.6.28-rc8</a><br />
内核模块：<a href="http://www.gentoo-cn.org/%7Ezhangle/2.6.28-rc8-r0bertz.tar.bz2" target="_blank">http://www.gentoo-cn.org/~zhangle/2.6.28-rc8-r0bertz.tar.bz2</a></p>
<p>主要亮点：</p>
<ul>
<li>整个系统采用-mabi=n32编译，n32 ABI是int/long/pointer类型的变量长度为32位的n64 ABI。相比o32 ABI，n32能更充分发挥MIPS架构的特点。相比n64，n32程序的体积会更加小。而且在不需要科学运算的场合，n32已经足够应付。</li>
<li>整个系统采用-march=loongson2f编译，gcc包含codesourcery贡献的龙芯支持，以及阮贝鸿(jamesr)贡献的经我测试并修正的龙芯2f特有整数乘除法补丁</li>
<li>整 个系统采用-mplt编译，有了plt的支持，在不需要使用PIC(Position Independent Code)的地方，就不必使用PIC（之前有相当一部分不需要使用PIC的情况会使用PIC），这样可以减少指令数量，减小可执行程序体积，直接和间接的 加快软件执行速度</li>
</ul>
<p>基本信息：</p>
<ul>
<li>root密码：loongson</li>
<li>不包含X，只有一个基本系统</li>
<li>软件版本基本都是最新的</li>
<li>gcc/binutils是几天前直接从cvs里检出的</li>
<li>glibc用的是2008年11月24日的快照，而且包含了我的一个有关ld.so.cache的补丁</li>
<li>内核在/boot里，版本是2.6.27.5，好像是cjacker还是刘世伟发出来的补丁</li>
</ul>
<p>最后要特别感谢Redhatter<br />
因为本系统基于Redhatter的一个mips3 n32 Gentoo Linux stage3<br />
<a href="http://dev.gentoo.org/%7Eredhatter/mips/cobalt/stages" target="_blank">http://dev.gentoo.org/~redhatter/mips/cobalt/stages</a><br />
这省了我很多时间去从头构建这个系统</p>
<p><strong>关于ADLS拨号：</strong></p>
<p>配置一下/etc/conf.d/net，改一下下面的用户名密码<br />
config_ppp0=&#8221;ppp&#8221;<br />
link_ppp0=&#8221;eth0&#8243;<br />
plugins_ppp0=&#8221;pppoe&#8221;<br />
username_ppp0=&#8217;your_username&#8217;<br />
password_ppp0=&#8217;your_password&#8217;<br />
pppd_ppp0=&#8221;updetach defaultroute&#8221;</p>
<p>在/etc/init.d里创建一个net.ppp0的符号连接，指向/etc/init.d/net.lo<br />
cd /etc/init.d<br />
ln -sf net.lo net.ppp0<br />
/etc/init.d/net.ppp0 start</p>
<p><strong>关于/usr/portage目录：</strong><br />
下载这个文件<br />
wget <a href="http://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2" target="_blank">http://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2</a><br />
tar xvf portage-latest.tar.bz2 -C /usr</p>
<p><strong>关于龙芯overlay：</strong><br />
gentoo里的overlay就相当于其他发行版的第三方源<br />
获得gentoo loongson overlay:<br />
USE=&#8221;curl&#8221; emerge dev-util/git<br />
git clone <a href="http://www.gentoo-cn.org/git/loongson.git" target="_blank">http://www.gentoo-cn.org/git/loongson.git</a><br />
把overlay下载到本地硬盘上之后，然后把路径加入/etc/make.conf里的PORTDIR_OVERLAY变量即可<br />
之后照常emerge，如果portage树（即官方源）和overlay里同时有同一版本的软件，emerge会安装overlay里的版本<br />
就像overlay把portage树给盖住了，这也就是overlay的含义<br />
更新overlay只需要进入overlay的目录，然后执行git pull</p>
<p><strong>关于X:</strong><br />
1. 请使用我前面给的内核<br />
2. 请使用龙芯overlay里的xorg-server-1.5.3，USE=&#8221;-aiglx minimal&#8221;<br />
3. <a href="http://www.gentoo-cn.org/%7Ezhangle/xorg.conf.txt" target="_blank">http://www.gentoo-cn.org/~zhangle/xorg.conf.txt</a></p>
<p><strong>关于内核源代码</strong><br />
注意：目前循此法编译出来的内核的<strong>硬盘设备文件</strong>为<strong>sda</strong>而不是<strong>hda</strong>，请自行修改<strong>/etc/fstab</strong>和<strong>boot.cfg</strong><br />
git clone git://git.linux-mips.org/pub/scm/linux<br />
cd linux<br />
wget <a href="http://www.gentoo-cn.org/%7Ezhangle/linux-2.6.28-rc9.patch" target="_blank">http://www.gentoo-cn.org/~zhangle/linux-2.6.28-rc9.patch</a> -O /tmp/linux-2.6.28-rc9.patch<br />
patch -p1 &lt; /tmp/linux-2.6.28-rc9.patch<br />
git add *<br />
git commit -m &#8220;added patch&#8221;<br />
git archive &#8211;format=tar &#8211;prefix=junk/ HEAD | (cd /var/tmp/ &amp;&amp; tar xf -)<br />
cd /var/tmp/junk<br />
wget <a href="http://www.gentoo-cn.org/%7Ezhangle/config" target="_blank">http://www.gentoo-cn.org/~zhangle/config</a> -O .config<br />
make oldconfig<br />
make</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=261</wfw:commentRss>
		</item>
		<item>
		<title>PHP将成为最受开发人员欢迎的语言吗?(ZT)</title>
		<link>http://www.nixuesong.com/blog2/?p=260</link>
		<comments>http://www.nixuesong.com/blog2/?p=260#comments</comments>
		<pubDate>Thu, 19 Mar 2009 15:16:14 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=260</guid>
		<description><![CDATA[在Sun Microsystems于1995年发表Java之后，由于Java的友善接口让工程师设计软件更为容易，受到工程师欢迎，但十年下来Java陆陆续续被加入了强大的功能，反而使它变得不容易操作。Marc Andreessen指出，现在的Java可能比C++更难学，在此同时，PHP传承了Java的简单精神，并创造一个比Java更容易使用的程序开发环境。
　　PHP为一开源项目，其中包括可以简化程序的描述性语言引擎以及一个大的链接库，也有专门开发PHP的公司，如Zend就有销售PHP套装产品、程序撰写工具及技术支持服务。
　　Andreessen的看法可能很难博得Java拥护者的认同，因为现阶段全球仍有数百万专研Java的工程师，也有数百家公司参与Java Community Process(JCP)，在JCP中共同主掌Java的命运。但是，就算是大力扶植Java、甚至以Java为WebSphere服务器软件核心的 IBM，也认为PHP的前途会比Java来得好。
　　IBM新网络科技事业处副总裁Rod Smith就说，“简单”是PHP最大的特色，而且它不会为了与其它语言竞争而加入新的语言功能，Java显然就不是这么做。
　　而且，PHP的势力也不小，目前约有2200万的网站采用PHP，包括Yahoo!、Lufthansa等知名网站，数量并持续增加中，并有450个软件工程师有权去审核在PHP软件上的任何变动。
　　与Java相较，PHP可用范畴限制较多，它仅能用在网络服务器上，不像Java，同时可用在网络服务器、个人计算机、手机、芯片卡或其它装置。
　　Java和PHP除了在某些方面相互竞争之外，某个程度来看，也在彼此靠陇。甲骨文产品策略副总Ken Jacobs表示，即使甲骨文(Oracle)销售同时可执行Java及PHP的Java服务器与数据库软件，但正为Java加上一项额外的新功能，让这两个软件项目可以协同运作;更具体的说，Java规格需求223(JSR 223)将会“协助建构在Java社群与PHP社群之间的那座桥梁”。
　　日前才发表可以分享照片等内容网站“Ning”的Marc Andreessen也说，现在Ning也同时执行Java与PHP，其中核心系统是由Java组成，比起该站所有可看见的应用程序都是由PHP写成，Java更像是操作系统层级。
　　就像其它诸如Linux及Apache的开源项目，PHP目前也受到计算机工业主要大厂的庇佑，像IBM跟Oracle都致力开发让 PHP软件可以撷取旗下数据库的程序。事实上，IBM与Oracle的行为就像在为PHP背书，连这两大厂都支持PHP，证明PHP也许就是个好东西。
来源：IT专家网
]]></description>
			<content:encoded><![CDATA[<p>在Sun Microsystems于1995年发表Java之后，由于Java的友善接口让工程师设计软件更为容易，受到工程师欢迎，但十年下来Java陆陆续续被加入了强大的功能，反而使它变得不容易操作。Marc Andreessen指出，现在的Java可能比C++更难学，在此同时，PHP传承了Java的简单精神，并创造一个比Java更容易使用的程序开发环境。</p>
<p>　　PHP为一开源项目，其中包括可以简化程序的描述性语言引擎以及一个大的链接库，也有专门开发PHP的公司，如Zend就有销售PHP套装产品、程序撰写工具及技术支持服务。</p>
<p>　　Andreessen的看法可能很难博得Java拥护者的认同，因为现阶段全球仍有数百万专研Java的工程师，也有数百家公司参与Java Community Process(JCP)，在JCP中共同主掌Java的命运。但是，就算是大力扶植Java、甚至以Java为WebSphere服务器软件核心的 IBM，也认为PHP的前途会比Java来得好。</p>
<p>　　IBM新网络科技事业处副总裁Rod Smith就说，“简单”是PHP最大的特色，而且它不会为了与其它语言竞争而加入新的语言功能，Java显然就不是这么做。</p>
<p>　　而且，PHP的势力也不小，目前约有2200万的网站采用PHP，包括Yahoo!、Lufthansa等知名网站，数量并持续增加中，并有450个软件工程师有权去审核在PHP软件上的任何变动。</p>
<p>　　与Java相较，PHP可用范畴限制较多，它仅能用在网络服务器上，不像Java，同时可用在网络服务器、个人计算机、手机、芯片卡或其它装置。</p>
<p>　　Java和PHP除了在某些方面相互竞争之外，某个程度来看，也在彼此靠陇。甲骨文产品策略副总Ken Jacobs表示，即使甲骨文(Oracle)销售同时可执行Java及PHP的Java服务器与数据库软件，但正为Java加上一项额外的新功能，让这两个软件项目可以协同运作;更具体的说，Java规格需求223(JSR 223)将会“协助建构在Java社群与PHP社群之间的那座桥梁”。</p>
<p>　　日前才发表可以分享照片等内容网站“Ning”的Marc Andreessen也说，现在Ning也同时执行Java与PHP，其中核心系统是由Java组成，比起该站所有可看见的应用程序都是由PHP写成，Java更像是操作系统层级。</p>
<p>　　就像其它诸如Linux及Apache的开源项目，PHP目前也受到计算机工业主要大厂的庇佑，像IBM跟Oracle都致力开发让 PHP软件可以撷取旗下数据库的程序。事实上，IBM与Oracle的行为就像在为PHP背书，连这两大厂都支持PHP，证明PHP也许就是个好东西。</p>
<p>来源：IT专家网</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=260</wfw:commentRss>
		</item>
		<item>
		<title>以女人角度看linux与windows</title>
		<link>http://www.nixuesong.com/blog2/?p=259</link>
		<comments>http://www.nixuesong.com/blog2/?p=259#comments</comments>
		<pubDate>Thu, 19 Mar 2009 15:01:00 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=259</guid>
		<description><![CDATA[为什么说linux是老婆,windows妓女?
1.首先，linux是免费的，和老婆上床当然不用要钱，妓女和windows都是要money的啊。
2.linux入门比较难，就象你当初追你lp的那些日子，痛并快乐着。windows？傻子都会用，就象妓女，给钱就可以了，即使你阳痿她还可以用嘴哦，当然你得多付钱才可以。
3.linux稳定，几乎不会传染病毒给你，windows么？还要带安全套－－防毒软件才可以。
4. 虽然linux可以帮你完成绝大部分事情，但偶尔你想happy一下的时候还得找windows－－－linux下的游戏似乎差一些，就象你偶尔想找点儿刺激的话，只好花钱找小姐了。如果你实在不愿意找小姐，又想享受刺激的话可以用wine，酒精会让你老婆更激情，但感觉似乎还是不如职业小姐。让你老婆喝这么多酒也不是一件容易的事，wine的配置很麻烦哦。
5.一些新奇硬件软件都是最先支持windows的，但如果真的是好东东的话，最终linux也会支持。世面上比较新的器械和流行的体位都是妓女们的卖点，随着时代的发展，夫妻之间也会慢慢接受这些的。
]]></description>
			<content:encoded><![CDATA[<p>为什么说linux是老婆,windows妓女?</p>
<p>1.首先，linux是免费的，和老婆上床当然不用要钱，妓女和windows都是要money的啊。</p>
<p>2.linux入门比较难，就象你当初追你lp的那些日子，痛并快乐着。windows？傻子都会用，就象妓女，给钱就可以了，即使你阳痿她还可以用嘴哦，当然你得多付钱才可以。</p>
<p>3.linux稳定，几乎不会传染病毒给你，windows么？还要带安全套－－防毒软件才可以。</p>
<p>4. 虽然linux可以帮你完成绝大部分事情，但偶尔你想happy一下的时候还得找windows－－－linux下的游戏似乎差一些，就象你偶尔想找点儿刺激的话，只好花钱找小姐了。如果你实在不愿意找小姐，又想享受刺激的话可以用wine，酒精会让你老婆更激情，但感觉似乎还是不如职业小姐。让你老婆喝这么多酒也不是一件容易的事，wine的配置很麻烦哦。</p>
<p>5.一些新奇硬件软件都是最先支持windows的，但如果真的是好东东的话，最终linux也会支持。世面上比较新的器械和流行的体位都是妓女们的卖点，随着时代的发展，夫妻之间也会慢慢接受这些的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=259</wfw:commentRss>
		</item>
		<item>
		<title>视频编解码器常识</title>
		<link>http://www.nixuesong.com/blog2/?p=258</link>
		<comments>http://www.nixuesong.com/blog2/?p=258#comments</comments>
		<pubDate>Wed, 18 Mar 2009 19:33:12 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=258</guid>
		<description><![CDATA[视频编解码器常识
视频编解码器，是指一个能够对数字视频进行压缩或者解压缩的程序或者设备。通常这种压缩属于有损数据压缩。历史上，视频信号是以模拟形式存储在磁带上的。随着Compact Disc的出现并进入市场，音频信号以数字化方式进行存储，视频信号也开始使用数字化格式，一些相关技术也开始随之发展起来。
音频和视频都需要可定制的压缩方法。工程师和数学家们尝试了很多种不同的办法来试图解决这个问题。
一个复杂的平衡关系存在于以下因素之间：视频的质量、用来表示视频所需要的数据量(通常称之为码率)、编码算法和解码算法的复杂度、针对数据丢失和错误的鲁棒性(Robustness)、编辑的方便性、随机访问、编码算法设计的完美性、端到端的延时以及其它一些因素。
[编辑]
应用
在日常生活中，视频编解码器的应用非常广泛。例如在DVD(MPEG-2)中，在 VCD(MPEG-1)中，在各种卫星和陆上电视广播系统中，在互联网上。在线的视频素材通常是使用很多种不同的编解码器进行压缩的，为了能够正确地浏览这些素材，用户需要下载并安装编解码器包&#8211;一种为PC准备的编译好的编解码器组件。
由用户自己来进行视频的压缩已经随着DVD刻录机的出现而越来越风行。由于商店中贩卖的DVD通常容量比较大(双层)而目前双层DVD刻录机还不太普及，所以用户有时候会对DVD的素材进行二次压缩使其能够在一张单面DVD上完整地存储。
[编辑]
视频编解码器设计
一个典型的数字视频编解码器的第一步是将从摄像机输入的视频从RGB色度空间转换到 YCbCr色度空间，而且通常还伴有色度抽样来生成4:2:0格式的视频(有时候在隔行扫描的情况下会采用4:2:2的抽样方式)。转换到YCbCr色度空间会带来两点好处：1)这样做部分的解除了色度信号中的相关性，提高了可压缩能力。2)这样做将亮度信号分离出来，而亮度信号对视觉感觉是最重要的，相对来说色度信号对视觉感觉就不是那么重要，可以抽样到较低的分辨率(4:2:0或者4:2:2)而不影响人观看的感觉。
在真正的编码之前，对空域或者时域抽样可以有效地降低原始视频数据的数据量。
输入的视频图像通常被分割为宏块分别进行编码，宏块的大小通常是16&#215;16的亮度块信息和对应的色度块信息。然后使用分块的运动补偿从已编码的帧对当前帧的数据进行预测。之后，使用块变换或者子带分解来减少空域的统计相关性。最常见的变换是 8&#215;8的离散余弦变换(DCT fordiscrete cosine transform)。变换的输出系数接下来被量化，量化后的系数进行熵编码并成为输出码流的一部分。实际上在使用DCT变换的时候，量化后的二维的系数通常使用Zig-zag扫描将系数表示为一维的，再通过对连续0系数的个数和非0系数的大小(Level)进行编码得到一个符号，通常也有特殊的符号来表示后面剩余的所有系数全部等于0。这时候的熵编码通常使用变长编码。
解码基本上执行和编码的过程完全相反的过程。其中不能被完全恢复原来信息的步骤是量化。这时候，要尽可能接近的恢复原来的信息。这个过程被称为反量化，尽管量化本身已经注定是个不可逆过程。
视频编解码器的设计通常是标准化的，也就是说，有发布的文档来准确的规范如何进行。实际上，为了使编码的码流具有互操作性(即由A编码器编成的码流可以由B解码器解码，反之亦然)，仅仅对解码器的解码过程进行规范就足够了。通常编码的过程并不完全被一个标准所定义，用户有设计自己编码器的自由，只要用户设计的编码器编码产生的码流是符合解码规范的就可以了。因此，由不同的编码器对同样的视频源按照同样的标准进行编码，再解码后输出图像的质量往往可能相差很多。
常用的视频编解码器
很多视频编解码器可以很容易的在个人计算机和消费电子产品上实现，这使得在这些设备上有可能同时实现多种视频编解码器，这避免了由于兼容性的原因使得某种占优势的编解码器影响其它编解码器的发展和推广。最后我们可以说，并没有那种编解码器可以替代其它所有的编解码器。下面是一些常用的视频编解码器，按照它们成为国际标准的时间排序:
H.261
H.261主要在老的视频会议和视频电话产品中使用。H.261是由ITU-T开发的，第一个使用的数字视频压缩标准。实质上说，之后的所有的标准视频编解码器都是基于它涉及的。它使用了常见的YCbCr颜色空间，4:2:0的色度抽样格式，8 位的抽样精度，16&#215;16的宏块，分块的运动补偿，按8&#215;8分块进行的离散余弦变换，量化，对量化系数的Zig-zag扫描，run-level符号影射以及霍夫曼编码。H.261只支持逐行扫描的视频输入。
MPEG-1第二部分
MPEG-1第二部分主要使用在VCD上，有些在线视频也使用这种格式。该编解码器的质量大致上和原有的VHS录像带相当，但是值得注意的是VCD属于数字视频技术，它不会像VHS录像带一样随着播放的次数和时间而逐渐损失质量。如果输入视频源的质量足够好，编码的码率足够高，VCD可以给出从各方面看都比VHS要高的质量。但是为了达到这样的目标，通常VCD需要比VCD标准要高的码率。实际上，如果考虑到让所有的VCD播放机都可以播放，高于1150kbps的视频码率或者高于352&#215;288的视频分辨率都不能使用。大体来说，这个限制通常仅仅对一些单体的VCD播放机(包括一些DVD播放机)有效。MPEG-1第三部分还包括了目前常见的*.mp3音频编解码器。如果考虑通用性的话，MPEG-1的视频/音频编解码器可以说是通用性最高的编解码器，几乎世界上所有的计算机都可以播放MPEG-1格式的文件。几乎所有的DVD机也支持VCD的播放。从技术上来讲，比起H.261标准，MPEG-1增加了对半像素运动补偿和双向运动预测帧。和H.261一样，MPEG-1只支持逐行扫描的视频输入。
MPEG-2第二部分
MPEG-2第二部分等同于H.262，使用在DVD、SVCD和大多数数字视频广播系统和有线分布系统(cable distribution systems)中。当使用在标准DVD上时，它支持很高的图像质量和宽屏；当使用在SVCD时，它的质量不如DVD但是比VCD高出许多。但是不幸的是，SVCD最多能在一张CD光盘上容纳40分钟的内容，而VCD可以容纳一个小时，也就是说SVCD具有比VCD更高的平均码率。MPEG-2也将被使用在新一代DVD标准HD-DVD 和 Blu-Ray(蓝光光盘)上。从技术上来讲，比起MPEG-1，MPEG-2最大的改进在于增加了对隔行扫描视频的支持。MPEG-2可以说是一个相当老的视频编码标准，但是它已经具有很大的普及度和市场接受度。
H.263
H.263主要用在视频会议、视频电话和网络视频上。在对逐行扫描的视频源进行压缩的方面，H.263比它之前的视频编码标准在性能上有了较大的提升。尤其是在低码率端，它可以在保证一定质量的前提下大大的节约码率。
MPEG-4第二部分
MPEG-4第二部分标准可以使用在网络传输、广播和媒体存储上。比起MPEG-2和第一版的H.263，它的压缩性能有所提高。和之前的视频编码标准的主要不同点在于，“基于对象”(Object-oriented)的编码方法和一些其它并非用于提高通常视频编码压缩率的技术。当然它也引入了一些提高压缩能力的技术，包括一些H.263的技术和1/4像素的运动补偿。和MPEG-2一样，它同时支持逐行扫描和隔行扫描。
MPEG-4第十部分
MPEG-4第十部分技术上和ITU-T H.264是相同的标准，有时候也被叫做“AVC”)。 这个刚刚制定完成的标准是ITU-T VCEG和ISO/IEC MPEG合作完成的性能最优的视频编码标准，并且在已经得到了越来越多的应用。该标准引入了一系列新的能够大大提高压缩性能的技术，并能够同时在高码率端和低码率端大大超越以前的诸标准。已经使用和将要使用H.264技术的产品包括例如索尼公司的PSP，Nero公司的Nero Digital 产品套装，苹果公司的Mac OS X v10.4，以及新一代DVD标准HD-DVD和蓝光光盘(Blue-Ray)。
DivX，XviD和3ivx
DivX，XviD和3ivx视频编解码器基本上使用的都是MPEG-4第二部分的技术，以后缀*.avi, *.mp4, *.ogm 或者 *.mkv 结尾的文件有一部分是使用这些视频编解码器的。
WMV
WMV（Windows Media Video）是微软公司的视频编解码器家族，包括WMV 7、WMV 8、WMV 9、WPV 10。这一族的编解码器可以应用在从拨号上网的窄带视频到高清晰度电视(HDTV)的宽带视频。使用Windows Media Video用户还可以将视频文件刻录到CD、DVD或者其它一些设备上。它也适用于用作媒体服务器。WMV 可以被看作是MPEG-4的一个增强版本。最新的WMV的版本是正在SMPTE制定中的VC-1标准。WMV-9（VC-1，开发代号为 “Corona”）刚推出的时候称为VC-9，之后才被电影电视工程师协会(SMPTE)改称为VC-1（VC指Video Codec）。
RealVideo
RealVideo是由RealNetworks公司开发的视频编解码器。近几年曾经有段时间的低迷，之后又获得市场的青睐。最近尤其在BT电影界格外受宠。
Sorenson 3
Sorenson 3是由苹果公司的软件QuickTime使用的一种编解码器。很多因特网上的QuickTime格式的视频都是这种编解码器压缩的。
Cinepak
Cinepak同样是由苹果公司的软件QuickTime使用的一种很老的编解码器，好处是即使很老的计算机(如486)也都支援并且能顺利播放。
Indeo Video
Indeo Video Indeo Video 是由 Intel 所研发的编解码器。
上面提到的编解码器都有各自的优点和缺点，经常可以看到有对这些编解码器进行比较的文章，这时候最重要的同时考虑编码的码率和清晰度(常说的律失真特性,鲁棒性)。
]]></description>
			<content:encoded><![CDATA[<p>视频编解码器常识</p>
<p>视频编解码器，是指一个能够对数字视频进行压缩或者解压缩的程序或者设备。通常这种压缩属于有损数据压缩。历史上，视频信号是以模拟形式存储在磁带上的。随着Compact Disc的出现并进入市场，音频信号以数字化方式进行存储，视频信号也开始使用数字化格式，一些相关技术也开始随之发展起来。</p>
<p>音频和视频都需要可定制的压缩方法。工程师和数学家们尝试了很多种不同的办法来试图解决这个问题。</p>
<p>一个复杂的平衡关系存在于以下因素之间：视频的质量、用来表示视频所需要的数据量(通常称之为码率)、编码算法和解码算法的复杂度、针对数据丢失和错误的鲁棒性(Robustness)、编辑的方便性、随机访问、编码算法设计的完美性、端到端的延时以及其它一些因素。</p>
<p>[编辑]</p>
<p>应用</p>
<p>在日常生活中，视频编解码器的应用非常广泛。例如在DVD(MPEG-2)中，在 VCD(MPEG-1)中，在各种卫星和陆上电视广播系统中，在互联网上。在线的视频素材通常是使用很多种不同的编解码器进行压缩的，为了能够正确地浏览这些素材，用户需要下载并安装编解码器包&#8211;一种为PC准备的编译好的编解码器组件。</p>
<p>由用户自己来进行视频的压缩已经随着DVD刻录机的出现而越来越风行。由于商店中贩卖的DVD通常容量比较大(双层)而目前双层DVD刻录机还不太普及，所以用户有时候会对DVD的素材进行二次压缩使其能够在一张单面DVD上完整地存储。</p>
<p>[编辑]</p>
<p>视频编解码器设计</p>
<p>一个典型的数字视频编解码器的第一步是将从摄像机输入的视频从RGB色度空间转换到 YCbCr色度空间，而且通常还伴有色度抽样来生成4:2:0格式的视频(有时候在隔行扫描的情况下会采用4:2:2的抽样方式)。转换到YCbCr色度空间会带来两点好处：1)这样做部分的解除了色度信号中的相关性，提高了可压缩能力。2)这样做将亮度信号分离出来，而亮度信号对视觉感觉是最重要的，相对来说色度信号对视觉感觉就不是那么重要，可以抽样到较低的分辨率(4:2:0或者4:2:2)而不影响人观看的感觉。</p>
<p>在真正的编码之前，对空域或者时域抽样可以有效地降低原始视频数据的数据量。</p>
<p>输入的视频图像通常被分割为宏块分别进行编码，宏块的大小通常是16&#215;16的亮度块信息和对应的色度块信息。然后使用分块的运动补偿从已编码的帧对当前帧的数据进行预测。之后，使用块变换或者子带分解来减少空域的统计相关性。最常见的变换是 8&#215;8的离散余弦变换(DCT fordiscrete cosine transform)。变换的输出系数接下来被量化，量化后的系数进行熵编码并成为输出码流的一部分。实际上在使用DCT变换的时候，量化后的二维的系数通常使用Zig-zag扫描将系数表示为一维的，再通过对连续0系数的个数和非0系数的大小(Level)进行编码得到一个符号，通常也有特殊的符号来表示后面剩余的所有系数全部等于0。这时候的熵编码通常使用变长编码。</p>
<p>解码基本上执行和编码的过程完全相反的过程。其中不能被完全恢复原来信息的步骤是量化。这时候，要尽可能接近的恢复原来的信息。这个过程被称为反量化，尽管量化本身已经注定是个不可逆过程。</p>
<p>视频编解码器的设计通常是标准化的，也就是说，有发布的文档来准确的规范如何进行。实际上，为了使编码的码流具有互操作性(即由A编码器编成的码流可以由B解码器解码，反之亦然)，仅仅对解码器的解码过程进行规范就足够了。通常编码的过程并不完全被一个标准所定义，用户有设计自己编码器的自由，只要用户设计的编码器编码产生的码流是符合解码规范的就可以了。因此，由不同的编码器对同样的视频源按照同样的标准进行编码，再解码后输出图像的质量往往可能相差很多。</p>
<p>常用的视频编解码器</p>
<p>很多视频编解码器可以很容易的在个人计算机和消费电子产品上实现，这使得在这些设备上有可能同时实现多种视频编解码器，这避免了由于兼容性的原因使得某种占优势的编解码器影响其它编解码器的发展和推广。最后我们可以说，并没有那种编解码器可以替代其它所有的编解码器。下面是一些常用的视频编解码器，按照它们成为国际标准的时间排序:</p>
<p>H.261</p>
<p>H.261主要在老的视频会议和视频电话产品中使用。H.261是由ITU-T开发的，第一个使用的数字视频压缩标准。实质上说，之后的所有的标准视频编解码器都是基于它涉及的。它使用了常见的YCbCr颜色空间，4:2:0的色度抽样格式，8 位的抽样精度，16&#215;16的宏块，分块的运动补偿，按8&#215;8分块进行的离散余弦变换，量化，对量化系数的Zig-zag扫描，run-level符号影射以及霍夫曼编码。H.261只支持逐行扫描的视频输入。</p>
<p>MPEG-1第二部分</p>
<p>MPEG-1第二部分主要使用在VCD上，有些在线视频也使用这种格式。该编解码器的质量大致上和原有的VHS录像带相当，但是值得注意的是VCD属于数字视频技术，它不会像VHS录像带一样随着播放的次数和时间而逐渐损失质量。如果输入视频源的质量足够好，编码的码率足够高，VCD可以给出从各方面看都比VHS要高的质量。但是为了达到这样的目标，通常VCD需要比VCD标准要高的码率。实际上，如果考虑到让所有的VCD播放机都可以播放，高于1150kbps的视频码率或者高于352&#215;288的视频分辨率都不能使用。大体来说，这个限制通常仅仅对一些单体的VCD播放机(包括一些DVD播放机)有效。MPEG-1第三部分还包括了目前常见的*.mp3音频编解码器。如果考虑通用性的话，MPEG-1的视频/音频编解码器可以说是通用性最高的编解码器，几乎世界上所有的计算机都可以播放MPEG-1格式的文件。几乎所有的DVD机也支持VCD的播放。从技术上来讲，比起H.261标准，MPEG-1增加了对半像素运动补偿和双向运动预测帧。和H.261一样，MPEG-1只支持逐行扫描的视频输入。</p>
<p>MPEG-2第二部分</p>
<p>MPEG-2第二部分等同于H.262，使用在DVD、SVCD和大多数数字视频广播系统和有线分布系统(cable distribution systems)中。当使用在标准DVD上时，它支持很高的图像质量和宽屏；当使用在SVCD时，它的质量不如DVD但是比VCD高出许多。但是不幸的是，SVCD最多能在一张CD光盘上容纳40分钟的内容，而VCD可以容纳一个小时，也就是说SVCD具有比VCD更高的平均码率。MPEG-2也将被使用在新一代DVD标准HD-DVD 和 Blu-Ray(蓝光光盘)上。从技术上来讲，比起MPEG-1，MPEG-2最大的改进在于增加了对隔行扫描视频的支持。MPEG-2可以说是一个相当老的视频编码标准，但是它已经具有很大的普及度和市场接受度。</p>
<p>H.263</p>
<p>H.263主要用在视频会议、视频电话和网络视频上。在对逐行扫描的视频源进行压缩的方面，H.263比它之前的视频编码标准在性能上有了较大的提升。尤其是在低码率端，它可以在保证一定质量的前提下大大的节约码率。</p>
<p>MPEG-4第二部分</p>
<p>MPEG-4第二部分标准可以使用在网络传输、广播和媒体存储上。比起MPEG-2和第一版的H.263，它的压缩性能有所提高。和之前的视频编码标准的主要不同点在于，“基于对象”(Object-oriented)的编码方法和一些其它并非用于提高通常视频编码压缩率的技术。当然它也引入了一些提高压缩能力的技术，包括一些H.263的技术和1/4像素的运动补偿。和MPEG-2一样，它同时支持逐行扫描和隔行扫描。</p>
<p>MPEG-4第十部分</p>
<p>MPEG-4第十部分技术上和ITU-T H.264是相同的标准，有时候也被叫做“AVC”)。 这个刚刚制定完成的标准是ITU-T VCEG和ISO/IEC MPEG合作完成的性能最优的视频编码标准，并且在已经得到了越来越多的应用。该标准引入了一系列新的能够大大提高压缩性能的技术，并能够同时在高码率端和低码率端大大超越以前的诸标准。已经使用和将要使用H.264技术的产品包括例如索尼公司的PSP，Nero公司的Nero Digital 产品套装，苹果公司的Mac OS X v10.4，以及新一代DVD标准HD-DVD和蓝光光盘(Blue-Ray)。</p>
<p>DivX，XviD和3ivx</p>
<p>DivX，XviD和3ivx视频编解码器基本上使用的都是MPEG-4第二部分的技术，以后缀*.avi, *.mp4, *.ogm 或者 *.mkv 结尾的文件有一部分是使用这些视频编解码器的。</p>
<p>WMV</p>
<p>WMV（Windows Media Video）是微软公司的视频编解码器家族，包括WMV 7、WMV 8、WMV 9、WPV 10。这一族的编解码器可以应用在从拨号上网的窄带视频到高清晰度电视(HDTV)的宽带视频。使用Windows Media Video用户还可以将视频文件刻录到CD、DVD或者其它一些设备上。它也适用于用作媒体服务器。WMV 可以被看作是MPEG-4的一个增强版本。最新的WMV的版本是正在SMPTE制定中的VC-1标准。WMV-9（VC-1，开发代号为 “Corona”）刚推出的时候称为VC-9，之后才被电影电视工程师协会(SMPTE)改称为VC-1（VC指Video Codec）。</p>
<p>RealVideo</p>
<p>RealVideo是由RealNetworks公司开发的视频编解码器。近几年曾经有段时间的低迷，之后又获得市场的青睐。最近尤其在BT电影界格外受宠。</p>
<p>Sorenson 3</p>
<p>Sorenson 3是由苹果公司的软件QuickTime使用的一种编解码器。很多因特网上的QuickTime格式的视频都是这种编解码器压缩的。</p>
<p>Cinepak</p>
<p>Cinepak同样是由苹果公司的软件QuickTime使用的一种很老的编解码器，好处是即使很老的计算机(如486)也都支援并且能顺利播放。</p>
<p>Indeo Video</p>
<p>Indeo Video Indeo Video 是由 Intel 所研发的编解码器。</p>
<p>上面提到的编解码器都有各自的优点和缺点，经常可以看到有对这些编解码器进行比较的文章，这时候最重要的同时考虑编码的码率和清晰度(常说的律失真特性,鲁棒性)。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=258</wfw:commentRss>
		</item>
		<item>
		<title>XviD 2-Pass参数设定</title>
		<link>http://www.nixuesong.com/blog2/?p=257</link>
		<comments>http://www.nixuesong.com/blog2/?p=257#comments</comments>
		<pubDate>Wed, 18 Mar 2009 19:32:28 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=257</guid>
		<description><![CDATA[
XviD Codec Setup
选择 &#8220;XviD MPEG-4 Codec&#8221; (提示：如果你不想转换成XViD格式的话，你可以选择任何其它的编码格式)。 点击&#8221;Configure&#8221;按钮,你就可以看到下面这个窗口。我们在这篇文章里只提供关于&#8221;2-Pass&#8221;方式编码的介绍，因为如果你以前做过DivX的转换，那么对你来说其它方式的编码是很容易的。请参照 Koepi的介绍以获取更详细专业的内容： Koepi&#8217;s XviD Options Explained Guide (如果这个下载链接有问题，请试着访问如下地址：this site)
介绍：
编码模式：
在这里你可以选择使用XviD的何种编码模式。
&#8220;1-pass&#8221;模式有如下几种 :
&#8221; 1 Pass - CBR : 整篇电影使用固定的静态码流
&#8221; 1 Pass - quality :允许你设置影片的质量，整篇电影的每一帧画面都使用相同的压缩率。量化器 (细节压缩度) 会发生波动。 压缩的级别基于质量的设定(从0到100)。
&#8221; 1 Pass - quantizer : 与 &#8220;1 Pass - quality&#8221;相似，只是量化器(细节压缩度)是一个固定值。压缩的级别基于量化器的设置。
在这篇介绍里，我们将使用&#8221;2-Pass&#8221;编码， 因为它能给我们更精确的最终文件大小，并且生成最佳质量的编码(在文件大小相同的情况下)。
步骤：
2-pass Encoding - The First Pass :
1. 在&#8221;Encoding Mode&#8221;选项中选择&#8221;2 Pass - 1st pass&#8221;
2. 点击&#8221;Advanced [...]]]></description>
			<content:encoded><![CDATA[<p>
XviD Codec Setup</p>
<p>选择 &#8220;XviD MPEG-4 Codec&#8221; (提示：如果你不想转换成XViD格式的话，你可以选择任何其它的编码格式)。 点击&#8221;Configure&#8221;按钮,你就可以看到下面这个窗口。我们在这篇文章里只提供关于&#8221;2-Pass&#8221;方式编码的介绍，因为如果你以前做过DivX的转换，那么对你来说其它方式的编码是很容易的。请参照 Koepi的介绍以获取更详细专业的内容： Koepi&#8217;s XviD Options Explained Guide (如果这个下载链接有问题，请试着访问如下地址：this site)</p>
<p>介绍：</p>
<p>编码模式：</p>
<p>在这里你可以选择使用XviD的何种编码模式。</p>
<p>&#8220;1-pass&#8221;模式有如下几种 :</p>
<p>&#8221; 1 Pass - CBR : 整篇电影使用固定的静态码流</p>
<p>&#8221; 1 Pass - quality :允许你设置影片的质量，整篇电影的每一帧画面都使用相同的压缩率。量化器 (细节压缩度) 会发生波动。 压缩的级别基于质量的设定(从0到100)。</p>
<p>&#8221; 1 Pass - quantizer : 与 &#8220;1 Pass - quality&#8221;相似，只是量化器(细节压缩度)是一个固定值。压缩的级别基于量化器的设置。</p>
<p>在这篇介绍里，我们将使用&#8221;2-Pass&#8221;编码， 因为它能给我们更精确的最终文件大小，并且生成最佳质量的编码(在文件大小相同的情况下)。</p>
<p>步骤：</p>
<p>2-pass Encoding - The First Pass :</p>
<p>1. 在&#8221;Encoding Mode&#8221;选项中选择&#8221;2 Pass - 1st pass&#8221;</p>
<p>2. 点击&#8221;Advanced Option&#8221;按钮, 系统弹出下列窗口：</p>
<p>3. 关于本节设置的解释：</p>
<p>o Motion search precision - 用来设置XviD编码器在指定的码率/文件大小的情况下做多少&#8221;工作&#8221;以确定编码质量。较高的设置意味着更好的质量，通常在中-低质量编码时选择&#8221;5- Very High&#8221;；当选择&#8221;6 - Ultra High&#8221;时会取得最好的质量，但是编码速度会下降(大约10%)。</p>
<p>o Qantizer type - 选择&#8221;H.263&#8243;时会在中-低码流下使图象更加平滑 (与&#8221;Motion search precision&#8221;选择&#8221;5 - Very High&#8221;时配合很好)。当是高码流时应选择&#8221;MPEG&#8221; (此时&#8221;Motion search precision&#8221;应设置为&#8221;6 - Ultra High&#8221;)。其它两个选项&#8221;MPEG-Custom&#8221;和&#8221;Modulated&#8221;用于专家用户，如果你是专家，你就应该知道怎么设置:)</p>
<p>o FourCC used - FourCC 用以确定你编码好的电影用什么样的解码器来播放，默认值为&#8221;XviD&#8221;，这意味着将使用&#8221;XviD directshow filters&#8221;，保证了最大的质量和兼容性。你也可以选择使用&#8221;DivX 4.x&#8221;或&#8221;5.x&#8221;的解码器来回放你完成的电影，但是它们不一定就能正常播放。</p>
<p>o Maximum I-frame interval - MPEG视频在编码时使用I-frame (也就是我们所熟悉的关键帧，在这一帧里所有该帧的信息都被记录)，P-frame (预测帧,用来放置对随后的影像信息的预测) and B-frames (双向预测帧，用来放置对前面和后面的影像信息的预测-这种帧会带来最好的画面质量，不幸的是，XviD现在还不支持B-Frames)。</p>
<p>如果你希望在播放时可以拖动时间条，那么实际上电影只是在到达最近的关键帧才开始播放，所以最好不要在一部电影中只采用极少的关键帧，因为这样你就不能自如的拖动电影。关键帧会在场景变换时自动地由编码器加入到电影的帧中，但是必须明白当场景几乎没发生变化时，拖动也是可能的。将关键帧设为每秒帧数的10倍(例如：240、250、300)，这意味着我们每过10秒至少会有一个关键帧，你拖动电影时间隔至少为10秒。</p>
<p>4. 点击&#8221;Two Pass&#8221;标签，可以看到如下图的内容:</p>
<p>5. 关于本节设置的解释：</p>
<p>o Minimum I-frame interval - 就象上面的&#8221;Maximum I-Frame interval&#8221;一样,这里设置的是在两个关键帧间最少应有多少帧。当我们设置为每秒都有关键帧的同时，带来的另一个后果就是画面质量的下降。该项默认值为&#8221;6&#8243; ，好象工作得很好，所以就不必改动它了。</p>
<p>o Discard first pass - 在&#8221;fist pass&#8221;的过程中通常有一个avi文件生成，这个文件一般没什么用(因为在状态文件(见下文)中已经包含了在&#8221;second pass&#8221;中需要的所有信息。这个选项默认是选中的，你可以保持它不变。</p>
<p>o Hinted ME - 这个功能类似于DivX5.X中的MV (运动矢量) 记录, 可以提高&#8221;2nd pass&#8221;的编码速度。</p>
<p>o 1st pass stats - 在这里指定存放记录/状态的文件，这个文件后面会为&#8221;second pass&#8221;提供必要的信息(见下文)。</p>
<p>6. 在&#8221;Credits&#8221; 标签下，我们可以指定电影的开头和结尾演职员表的位置 (注：在这段内容里，我们不需要保持高画质), 所以你可以通过降低这两段内容的画质，以减少最终生成文件的体积。主要有三种针对职员表的方法可以减少文件体积， quantizer (职员表区域的品质主要基于对细节的去除度，低的quantizer 值意味着比较少的去除细节，因而会带来更大文件体积)，percentage (quality/size of the credits as a percentage of the movie bitrate) and set size (credits are of a set size). If you want to use quantizer mode, you should select the I-Frame/P-Frame quantizer settings right now (记住,较低的quantizer值等于更好的画质/更大的文件体积), 另外,我们也可以等到&#8221;second pass&#8221;时再做这些设置(见下文)。</p>
<p>7. 现在我们结束了对&#8221;first pass&#8221;的设定</p>
<p>2-pass Encoding - The Second Pass :</p>
<p>1. 在&#8221;Encoding Mode :&#8221;中选择 &#8220;2 Pass - 2nd pass Int.&#8221; f</p>
<p>2. Desired size (Kbytes) - 这是XviD与使用DivX的方法不同的地方。DivX的做法是指定一个码流，并且使用一个码流计算器来计算最终的文件体积，而XviD为你做了这一切。主要来说，这个设置(粗略地)指定了你最终文件的体积(只包含视频，不包括音频)，单位是KB (1 Kbyte = 1024 Bytes ; 1 MB = 1024 Kbytes)。 当然，越小的文件体积，意味着越差的图像质量。</p>
<p>3. 点击&#8221;Advanced Option&#8221;按钮, 你可以看下面的内容：</p>
<p>4. Enable lumi masking - 这个选项类似于DivX 5.X里的&#8221;心理视觉增强技术&#8221;(psychovisual enhancement feature)，也类似于mp3压缩里的针对人耳听不到的频率的过滤技术，而是这个是针对人眼无法辨别的信息的移除。但也正如DivX5.X中的&#8221;心理视觉&#8221;(psychovisual)一样，可能会产生画面扭曲，所以如果不是对文件体积缩小有迫切的需求，最好不要使用。</p>
<p>5. 点击&#8221;Quantization&#8221;标签，你可以看到如下内容：</p>
<p>6. 正如前面解释过的，量化器的级别(quantizer level)关系到电影画面细节的移除度-越高的量化器级别，会带来越低的画面质量，量化器的设置是可以根据影片来发生变化的(决定于编码器)(例如:针对一副只有很少细节的画面可以使用更高的量化器级别)。&#8221;Min/Max I/P-frame quantizer&#8221;设置允许你设置在编码中最高和最低的量化器级别。&#8221;Min I/P-frame quantizer&#8221;的默认值可能太低，所以你最好至少将其值增加到2(如上图)。同时你也可以降低&#8221;Max I/P-fram quantizer&#8221; 的值来提高画质，这样带来的问题是：如果你减少了量化器(quantizer)的设置范围，编码器的可用量化器级别也就减少了，因此，最终生成的文件体积可能会稍稍偏离你以前在&#8221;Desired size (Kbytes)&#8221;所指定的文件体积值。如前面所述，&#8221;B-frames&#8221;在XviD中现在还不可用，所以关于&#8221;Max/Min B-frame&#8221;的设置现在还是不可选的。</p>
<p>7. 点击&#8221;Two Pass&#8221;标签，你可以看到如下内容：</p>
<p>8. 关于本节设置的解释：</p>
<p>o I-frame boost % - 这个设置是给予&#8221;I-frame&#8221;(关键帧)一些额外的空间，默认值20%已经工作得很好，无须改动。</p>
<p>o Minimum I-frame interval - 这个值必须与你在&#8221;first pass&#8221;(见上文)中所指定的值一致。</p>
<p>o Curve compression - 除非你知道你在做什么，否则还是保留默认值。简单地说，这些设置是告诉编码器如何处理高/低码流的场景。(按百分比从场景中移除多少比特的数据，以及使用多少帧来补偿超过或不足的比特数。</p>
<p>o Payback with bias - 最好保留默认的选择。</p>
<p>o Hinted ME - T这个值必须与你在&#8221;first pass&#8221;(见上文)中所指定的值一致。</p>
<p>o 1st pass stats -这个值必须与你在&#8221;first pass&#8221;(见上文)中所指定的值一致。</p>
<p>9. 点击&#8221;Alt Curve&#8221;标签，你可以看到如下内容：</p>
<p>10. 在这一节中，所有的选项都是用来规定编码器如何处理低/高码流场景的技术细节，所以如果你不是100%的明白该怎么设置，还是保留默认值不变为好。(关闭&#8221;Use Alternative curve system&#8221;)</p>
<p>关于本节设置的解释：</p>
<p>o Curve agression - 这个设置决定编码器如何处理低/高码流的帧。设置成&#8221;High&#8221;，则偏向于低码流的帧；设置&#8221;Low&#8221;则偏向于高码流的帧。所以选择&#8221;Medium&#8221;相对于两个极端的值，似乎是一个折衷的值。</p>
<p>o High distance from average % - 这个设置决定编码器对高码流的帧的重视程度，提高这个值会使编码器更重视高码流的帧。</p>
<p>o Low distance from average % -这个设置决定编码器对低码流的帧的重视程度，降低这个值会使编码器更重视低码流的帧。</p>
<p>o Strength % - 默认值&#8221;50&#8243;似乎是一个很好的值。</p>
<p>o Bonus bias - 手工将此项参数调为更高的数值，意味着使编码器更加偏向于低码流的帧。</p>
<p>11. 对于前文所述的解释(见前文), &#8220;演职员表&#8221;选项允许你设定如何降低电影中&#8221;演职员表&#8221;段落的质量以减少文件体积。在&#8221;first pass&#8221;进行之后有两个新的选项开启了：Desired % rate(演职员表部分的质量/大小相对于正片的码流百分比)；Starting/Ending size (KBytes) (演职员表的体积设置)。如果你在&#8221;first pass&#8221;中使用了&#8221;I/P-frame quantizer &#8220;(你必须在&#8221;first pass&#8221;进行设置)，那么保留现在的设置与&#8221;first pass&#8221;中的设置相同)。</p>
<p>12. 现在我们结束了对&#8221;second pass&#8221;的设置。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=257</wfw:commentRss>
		</item>
		<item>
		<title>高质量XVID制作</title>
		<link>http://www.nixuesong.com/blog2/?p=256</link>
		<comments>http://www.nixuesong.com/blog2/?p=256#comments</comments>
		<pubDate>Wed, 18 Mar 2009 19:28:50 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=256</guid>
		<description><![CDATA[既然XVID也被列入2002年0dayz通用的制作标准，那么就废话少说，来做最高质量的XVID吧。
首先安装并打开Gordian Knot，开始用SmartRipper来DeCss DVD，并把VOB文件按照影片的PGC和Angel 1(角度1)解成硬盘上的VOB文件。=版权所有  热点网络 热点下载  热点网络学院  版权所有=
（也可以同时制作VOBSUB，请参考相应文章，本文略）
接下来再用DVD2AVI将VOB解码，并同时分离音频。具体可以参考老的DivX制作功略和本站关于DVD2AVI的介绍。
然后IVTC。这里你可以选择老方法——Tmpgenc(看旧文)，也可以选择这里介绍的新方法——Gordian Knot+AviSynth+DeComb（AviSynth+DeComb在完全安装Gordian Knot应该已经包含）。
在Gordian Knot左下角有一个DVD2AVI字样和一个Open按钮，按下后打开刚刚做出来的d2v文件。这时就会弹出一个新的预览窗口。接下来就是 Gordian Knot最轻松的地方，只要在面板上依次选择DVD制式，再点击Auto Corp，所有变形、去边的工作都会自动完成，不用自己耗费时间查找IMDB的电影比例再用计算器计算了，一切有Gordian Knot分析判断。不过惯用DUB Filter的老手可能要花点时间适应这种简单的思路。
接下来点击预览窗口的”Save &#038; Encode“。如果是NTSC制式的电影DVD就在这里选择Inverse Telecine(IVTC)。再按SAVE，保存成AVS文件。这时上级者当然也可以自己编辑AVS文件。
现在就要对不起了，Gordian Knot目前还不支持XVID，它仅支持DivX3.11和DivX4-5。所以要换软件——>VirtualDUB。
用VirtualDUB打开刚刚由Gordian Knot建立的avs文件。看看有没有横纹，如果还有，那么可能是场序错了，需要回到DVD2AVI改变Field Order重做（目前decomb好像还没有类似Tmpgenc中的Field Order选项，所以要从DVD2AVI那里重做）。
没问题的话，进入VirtualDUB的Video菜单，Compression选项，应该可以在最底下看到XVID的编码(不要告诉我你到现在还没有安装XVID的Codec)，选中XVID后按下右侧的Config按钮，进入细部选项控制。
先选择[2-pass 1st]。并进入Advanced Options，在运动检测精度中选择5或者6，量化模式中选择MPEG(.h263的质量就不行了)，最小关键帧距设为10左右。
OK。OK。回到VirtualDUB主界面，在Video菜单下选择Fast Recompress(1st pass只是收集信息，所以Fast Recompress就可以了)。再到File菜单，Save AVI&#8230;。
完成硬盘根目录会生成video.stats（要想生成到其他目录或别的文件名的话，之前到 Advanced Options中可以修改）的1st pass信息文件。好了把这个video.stats交给Gordian Knot来分析。（XVID也有自己的分析计算内核，不过我想XVID的开发者都预留了Gordian Knot分析的文件接口，或许XVID的开发者自己也认为XVID的2pass计算没有胜出Gordian Knot？！Who Knows。反正如果想利用XVID自己的分析计算内核的话，只要跳过下面的Gordian Knot部分，直接在VirtualDUB中选择XVID压缩设置中的2-pass 2ed pass Int.——注意一定是Int.）
在Gordian Knot中的NanDUB Files中，OPEN打开XVID 1st pass建立的video.stats文件。再到Bitrate中，输入目标文件的大小。(注意在这里要选择DivX5模式，因为XVID和DIVX5一样，对遵循ISO MPEG4标准，1KB=1000Bytes，而不是DivX3.11的1KB=1024Bytes)。此处还可以选择音频文件或填入音频文件的码流或大小，便于便于估算最终尺寸。这里我用的是AC3音频，那么还要注意选择2Frame或者3Frame。原因是AC3的区块较大，因此TDX2002制作标准规定Audio-Video Interleave必须为66或96ms，也就是each 2-3frame。
选择好码流后，进入Stats File Editor，点击Calculate，Gordian Knot就会按照目标文件大小生成新的控制编码的stats文件。Stats File Editor中的选项不难理解，无非是限制最小码流、运动侦测精度、亮度校正、演职员表(Credits)模糊、关键帧距离等几个功能。（我个人一般会调低最小码流，不使用亮度校正、演职员表模糊，其余默认）。不过Stats [...]]]></description>
			<content:encoded><![CDATA[<p>既然XVID也被列入2002年0dayz通用的制作标准，那么就废话少说，来做最高质量的XVID吧。</p>
<p>首先安装并打开Gordian Knot，开始用SmartRipper来DeCss DVD，并把VOB文件按照影片的PGC和Angel 1(角度1)解成硬盘上的VOB文件。=版权所有  热点网络 热点下载  热点网络学院  版权所有=</p>
<p>（也可以同时制作VOBSUB，请参考相应文章，本文略）</p>
<p>接下来再用DVD2AVI将VOB解码，并同时分离音频。具体可以参考老的DivX制作功略和本站关于DVD2AVI的介绍。</p>
<p>然后IVTC。这里你可以选择老方法——Tmpgenc(看旧文)，也可以选择这里介绍的新方法——Gordian Knot+AviSynth+DeComb（AviSynth+DeComb在完全安装Gordian Knot应该已经包含）。</p>
<p>在Gordian Knot左下角有一个DVD2AVI字样和一个Open按钮，按下后打开刚刚做出来的d2v文件。这时就会弹出一个新的预览窗口。接下来就是 Gordian Knot最轻松的地方，只要在面板上依次选择DVD制式，再点击Auto Corp，所有变形、去边的工作都会自动完成，不用自己耗费时间查找IMDB的电影比例再用计算器计算了，一切有Gordian Knot分析判断。不过惯用DUB Filter的老手可能要花点时间适应这种简单的思路。</p>
<p>接下来点击预览窗口的”Save &#038; Encode“。如果是NTSC制式的电影DVD就在这里选择Inverse Telecine(IVTC)。再按SAVE，保存成AVS文件。这时上级者当然也可以自己编辑AVS文件。</p>
<p>现在就要对不起了，Gordian Knot目前还不支持XVID，它仅支持DivX3.11和DivX4-5。所以要换软件——>VirtualDUB。</p>
<p>用VirtualDUB打开刚刚由Gordian Knot建立的avs文件。看看有没有横纹，如果还有，那么可能是场序错了，需要回到DVD2AVI改变Field Order重做（目前decomb好像还没有类似Tmpgenc中的Field Order选项，所以要从DVD2AVI那里重做）。</p>
<p>没问题的话，进入VirtualDUB的Video菜单，Compression选项，应该可以在最底下看到XVID的编码(不要告诉我你到现在还没有安装XVID的Codec)，选中XVID后按下右侧的Config按钮，进入细部选项控制。</p>
<p>先选择[2-pass 1st]。并进入Advanced Options，在运动检测精度中选择5或者6，量化模式中选择MPEG(.h263的质量就不行了)，最小关键帧距设为10左右。</p>
<p>OK。OK。回到VirtualDUB主界面，在Video菜单下选择Fast Recompress(1st pass只是收集信息，所以Fast Recompress就可以了)。再到File菜单，Save AVI&#8230;。</p>
<p>完成硬盘根目录会生成video.stats（要想生成到其他目录或别的文件名的话，之前到 Advanced Options中可以修改）的1st pass信息文件。好了把这个video.stats交给Gordian Knot来分析。（XVID也有自己的分析计算内核，不过我想XVID的开发者都预留了Gordian Knot分析的文件接口，或许XVID的开发者自己也认为XVID的2pass计算没有胜出Gordian Knot？！Who Knows。反正如果想利用XVID自己的分析计算内核的话，只要跳过下面的Gordian Knot部分，直接在VirtualDUB中选择XVID压缩设置中的2-pass 2ed pass Int.——注意一定是Int.）</p>
<p>在Gordian Knot中的NanDUB Files中，OPEN打开XVID 1st pass建立的video.stats文件。再到Bitrate中，输入目标文件的大小。(注意在这里要选择DivX5模式，因为XVID和DIVX5一样，对遵循ISO MPEG4标准，1KB=1000Bytes，而不是DivX3.11的1KB=1024Bytes)。此处还可以选择音频文件或填入音频文件的码流或大小，便于便于估算最终尺寸。这里我用的是AC3音频，那么还要注意选择2Frame或者3Frame。原因是AC3的区块较大，因此TDX2002制作标准规定Audio-Video Interleave必须为66或96ms，也就是each 2-3frame。</p>
<p>选择好码流后，进入Stats File Editor，点击Calculate，Gordian Knot就会按照目标文件大小生成新的控制编码的stats文件。Stats File Editor中的选项不难理解，无非是限制最小码流、运动侦测精度、亮度校正、演职员表(Credits)模糊、关键帧距离等几个功能。（我个人一般会调低最小码流，不使用亮度校正、演职员表模糊，其余默认）。不过Stats File Editor有几个有趣的功能，例如显示影片的运动分布等等&#8230;&#8230;不那么专业的说：或许可以当作饭后消遣。^-^</p>
<p>计算完成后SAVE保存出新的控制stats文件，现在换回VirtualDUB。</p>
<p>Video菜单别忘了切换回Full Processing Mode，再次进入Compresion中XVID的压缩选项，选择2-pass 2nd pass Ext.（注意必须是Ext.）。再进入Advanced Options中，Global Option和刚刚要一样；Two Pass控制部分中选择刚刚由Gordian Knot生成的2nd pass stats文件。OK。OK。Save AVI&#8230;&#8230;</p>
<p>一阵子等待以后（可能要很多个小时，=版权所有  热点网络 热点下载  热点网络学院  版权所有= 所以不要再来问“XXXX用了n个小时正常么？”这样的问题，TKS ^-^），一个符合TDX2002标准的高质量XVID视频文件就诞生了。恭喜你。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=256</wfw:commentRss>
		</item>
		<item>
		<title>用DivX或XviD格式的AVI文件制作自己的DVD指南</title>
		<link>http://www.nixuesong.com/blog2/?p=255</link>
		<comments>http://www.nixuesong.com/blog2/?p=255#comments</comments>
		<pubDate>Wed, 18 Mar 2009 19:08:22 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=255</guid>
		<description><![CDATA[
一、入门和要求
　　当DVD-R和DVD+R刻录机越来越普及，许多人开始考虑将他们的DivX和XviD格式的电影备份成DVDR格式，特别是可以用DVD影碟机播放的DVD-Video格式。幸运的是有许多免费软件和（或）便宜的共享软件可以方便的实现目标。
1.1 本指南的作用
　　本指南试图从头至尾的向您介绍如何将您的AVI格式的电影转换成DVD-Video格式，并且介绍如何将文本格式的字幕转换成DVD字幕。只要您的电脑安装了正确的解码器，本指南的内容将不只适用于DivX或XviD视频，同样适用于几乎所有编码格式的AVI视频。在音频部分，我将向您介绍AVI文件中两种最常用的音频格式——MP3和AC3，而任何其他格式音频的处理过程都将基于本指南介绍的基本过程。
1.2 硬件和其他要求
　　非常明显，您首先需要包含音轨的AVI视频源。为了字幕转换，您需要将您的字幕用SubRip转换成SRT格式。另外，如果您需要将您的影片刻录到DVDR那您就需要有一台DVD刻录机，同时为了编辑视频，您的硬盘需要至少5GB的自由空间。
1.3 有损压缩？！
　　您应该知道绝大多数视频格式，包括MPEG-2（用于DVD-Video、数字电视和SVCD）和MPEG-4（用于DivX和XviD）都是有损压缩。
　　这意味着什么？这意味着当您将您的源视频转换成任何有损压缩格式，都会丢失一些数量的数据和细节，并且这种损失是不可逆转的。我们可以想象，将一本完整的书删节成4页，他的主要内容依然在，可是您不可能将它再还原成原书。
　　所以，在这种情况下就算是您的DivX/Xvid电影是从DVD-Video转换来的，您仍然不可能将它们还原成同样质量的DVD-Video。事实上，我们从DivX/Xvid转换来的DVD-Video画面质量会比原来的DivX/Xvid要差一点。
　　现在，既然您已经理解了这一点，您应该有了个合理的期望值，那我们就可以继续了。
1.4 需要的软件
　　为了完成本指南中的工作，您需要以下软件：
　　　　SRT2SUP（只有字幕处理需要它）
　　　　AVIcodec（帮您测定视频和音频需要的解码器）
　　　　FFDSHOW（如果您没有播放DivX或XviD文件的解码器您就需要它）
　　　　TMPGEnc（必需的！视频编码软件）
　　　　IFOEdit（必需的！DVD-Video编辑软件）
二、处理源文件
2.1 测定音频和视频格式
　　现在，启动AVIcodec，单击Select按钮，打开一个文件对话框。定位到您需要转换成DVD格式的AVI文件，单击Select按钮选择它并单击Open按钮。
　　现在，您可以在主窗口中看到视频文件的详细信息了。在我的例子中，我们可以看到视频是XVID Mpeg-4编码，音频是已经被编码成MP3格式。在页面底部我们还可以看到视频和音频的进一步详细信息，如音频采样率为48000Hz。
　　请同时注意视频的fps值并将它记录下来，通常这个值应该是25.00fps、2397fps或29.97fps（或相近的值）。
2.2 如果电影被分割成两部分，那就将它们合并
　　现在，如果您的电影源文件已经被分割成两部分或更多，您需要将它们用VirtualDub软件合并成一个文件。我建议您参考我的另一个指南“VirtualDub：合并AVI文件指南”。
AC3音频？让我们将它分离出来。
　　如果您的电影是AC3音频的，请阅读我的另一个指南“从AVI文件中分离AC3音频”。如果您的电影是MP3音频的，您就可以跳过这部分，直接处理字幕了。
三、转换AVI字幕到DVD字幕
3.1 转换字幕
　　如果您不需要在您的DVD-Video中包含字幕，请直接阅读TMPGEnc部分。
　　现在，运行SRT2SUP，单击SRT File菜单并选择Open as text。
　　现在，定位到您硬盘上的SRT格式的字幕文件，选择它并单击Open按钮。
　　在此后弹出的窗口中，您可以按您的要求对字幕的延时等进行调整。
3.2 改变字幕颜色
　　在主窗口的右侧，您可以看到一个小窗口包含了字幕中的每一行。选择其中的一行就可以在主窗口的顶部（默认位置）看到显示的文本效果，通常是不符合您的要求的。所以，您需要选择Settings菜单并单击Global。
　　在这里您可以调整菜单的颜色和其他外观效果。在调整完毕后单击OK按钮。
　　现在您可以看到您设定的菜单的效果。如果不满意，您可以回到Global Settings窗口重新设定直到满足您的要求。
3.3 保存字幕
　　在您对菜单的设定满意后，您需要将它保存为SUP文件。
　　在主窗口中，您可以看到在菜单列表下方有一项叫All。单击那个按钮，否则您的字幕文件将是空白的。
　　然后，选择SUP File菜单并单击Save。给菜单文件一个合理的文件名后单击Save按钮。保存过程将持续几分钟，最终生成一个SUP文件供IFOEdit使用。
四、转换AVI到MPEG-2
4.1 转换AVI到DVD/MPEG-2
　　现在是时候将AVI视频文件转换成DVD-Video适用的MPEG-2格式了。我们将使用TMPGEnc作为我们的编码器，因为它易于使用并且输出的MPEG-2视频质量相当好。
　　首先，您需要运行TMPGEnc。请注意TMPGEnc的使用版本只在30天内支持MPEG-2编码。在此之后，您需要购买一个TMPGEnc的商业版本，叫TMPGEnc Plus。
4.2 运行向导
　　到目前为止，新建一个TMPGEnc项目最简单的方法是使用TMPGEnc的向导。默认情况下当您运行TMPGEnc时向导会自动弹出，如果没有，请选择Files菜单并单击Project Wizard。
4.3 选择视频格式
　　在项目向导的第一页，您应该在窗口左边的DVD选项中选择正确的视频格式。对于真的知道他们在做什么的人来说，他们有很多的选择，但我们在这里将坚持两种选择：DVD-NTSC和DVD-PAL。
　　拿起您刚才记录fps值的那张纸。如果fps是25.000fps，您应该选择DVD-PAL。如果fps值是23.976或29.97，您应该选择DVD-NTSC。
　　如果您的音频不是AC3，您应该在此选择音频格式。我们建议您使用CBR-MPEG-1 Layer II Audio (MP2)，因为它体积比PCM小并且更适合DVD。如果您的音频是AC3格式的，您可以在这里忽略这个选择。
　　在您进行完这些选择后，单击Next按钮。
4.4 选择视频源
　　在第二页，您应该先单击Browse按钮。这将打开一个文件对话框，您应该在这里定位您的AVI文件（如果您合并了多个AVI片断，请选择这个合并后的文件），然后单击Open。
　　通常TMPGEnc可以自动的识别您打开的视频文件的正确参数。目前绝大多数的AVI文件都是pre-deinterlaced的，所以Video type通常设定为Non-interlaced。当您确信这个设定值不正确（或TMPGEnc推荐了另一个选项）时您可以只改变这个值。
　　屏幕比率应该保持1:1(VGA)，除非您是我前面提到的那种真的知道自己在做什么的人。
　　对PAL视频来说，Content of Video选项一般是不可选的。而对于NTSC视频来说，这个选项一般都是Film Movie，除非源文件是数码摄像机拍摄的AVI文件。
　　检查一遍刚才的选择后单击Next。
4.5 滤镜设定
　　在第三页，顶端的三个选项框在大多数情况下应该保持原样，但是您可以单击Other settings按钮。
4.6 其他设定
　　单击Other settings会弹出一个新窗口，在这里您可以更精确的定义编码参数。这里最重要的选择是Motion search precision。您应该很明确的将它定义为Highest quality (very slow)，因为这个选项值提供比默认值好得多的视频输出质量。
　　您同样应该将Rate control mode的设定值改为2-pass VBR (VBR)，这强制TMPGEnc使用multi-pass encoding进行编码。
　　当您完成这些设定后，单击OK按钮关闭小窗口。当你回到项目向导窗口时，单击Next按钮。
4.7 比特率设定
　　在比特率设定页（向导第四页）中，您可以调整bitrate和resolution在内的视频编码设定。
　　NTSC电影的Video resolution应该为720&#215;480，而PAL的应该为720&#215;576。
　　然后，确认音频比特率选项为384kbps。
　　在Average video bitrate设定上，您需要调整这个值，以使得到的DVD-Video对于DVDR来说有一个完美的大小。在窗口底部，你可以看到一个蓝色进度条和一个 Makes files size XXX% of disk capacity的文本框。调整Average [...]]]></description>
			<content:encoded><![CDATA[<p>
一、入门和要求</p>
<p>　　当DVD-R和DVD+R刻录机越来越普及，许多人开始考虑将他们的DivX和XviD格式的电影备份成DVDR格式，特别是可以用DVD影碟机播放的DVD-Video格式。幸运的是有许多免费软件和（或）便宜的共享软件可以方便的实现目标。</p>
<p>1.1 本指南的作用</p>
<p>　　本指南试图从头至尾的向您介绍如何将您的AVI格式的电影转换成DVD-Video格式，并且介绍如何将文本格式的字幕转换成DVD字幕。只要您的电脑安装了正确的解码器，本指南的内容将不只适用于DivX或XviD视频，同样适用于几乎所有编码格式的AVI视频。在音频部分，我将向您介绍AVI文件中两种最常用的音频格式——MP3和AC3，而任何其他格式音频的处理过程都将基于本指南介绍的基本过程。</p>
<p>1.2 硬件和其他要求</p>
<p>　　非常明显，您首先需要包含音轨的AVI视频源。为了字幕转换，您需要将您的字幕用SubRip转换成SRT格式。另外，如果您需要将您的影片刻录到DVDR那您就需要有一台DVD刻录机，同时为了编辑视频，您的硬盘需要至少5GB的自由空间。</p>
<p>1.3 有损压缩？！</p>
<p>　　您应该知道绝大多数视频格式，包括MPEG-2（用于DVD-Video、数字电视和SVCD）和MPEG-4（用于DivX和XviD）都是有损压缩。</p>
<p>　　这意味着什么？这意味着当您将您的源视频转换成任何有损压缩格式，都会丢失一些数量的数据和细节，并且这种损失是不可逆转的。我们可以想象，将一本完整的书删节成4页，他的主要内容依然在，可是您不可能将它再还原成原书。</p>
<p>　　所以，在这种情况下就算是您的DivX/Xvid电影是从DVD-Video转换来的，您仍然不可能将它们还原成同样质量的DVD-Video。事实上，我们从DivX/Xvid转换来的DVD-Video画面质量会比原来的DivX/Xvid要差一点。</p>
<p>　　现在，既然您已经理解了这一点，您应该有了个合理的期望值，那我们就可以继续了。</p>
<p>1.4 需要的软件</p>
<p>　　为了完成本指南中的工作，您需要以下软件：</p>
<p>　　　　SRT2SUP（只有字幕处理需要它）</p>
<p>　　　　AVIcodec（帮您测定视频和音频需要的解码器）</p>
<p>　　　　FFDSHOW（如果您没有播放DivX或XviD文件的解码器您就需要它）</p>
<p>　　　　TMPGEnc（必需的！视频编码软件）</p>
<p>　　　　IFOEdit（必需的！DVD-Video编辑软件）</p>
<p>二、处理源文件</p>
<p>2.1 测定音频和视频格式</p>
<p>　　现在，启动AVIcodec，单击Select按钮，打开一个文件对话框。定位到您需要转换成DVD格式的AVI文件，单击Select按钮选择它并单击Open按钮。</p>
<p>　　现在，您可以在主窗口中看到视频文件的详细信息了。在我的例子中，我们可以看到视频是XVID Mpeg-4编码，音频是已经被编码成MP3格式。在页面底部我们还可以看到视频和音频的进一步详细信息，如音频采样率为48000Hz。</p>
<p>　　请同时注意视频的fps值并将它记录下来，通常这个值应该是25.00fps、2397fps或29.97fps（或相近的值）。</p>
<p>2.2 如果电影被分割成两部分，那就将它们合并</p>
<p>　　现在，如果您的电影源文件已经被分割成两部分或更多，您需要将它们用VirtualDub软件合并成一个文件。我建议您参考我的另一个指南“VirtualDub：合并AVI文件指南”。</p>
<p>AC3音频？让我们将它分离出来。</p>
<p>　　如果您的电影是AC3音频的，请阅读我的另一个指南“从AVI文件中分离AC3音频”。如果您的电影是MP3音频的，您就可以跳过这部分，直接处理字幕了。</p>
<p>三、转换AVI字幕到DVD字幕</p>
<p>3.1 转换字幕</p>
<p>　　如果您不需要在您的DVD-Video中包含字幕，请直接阅读TMPGEnc部分。</p>
<p>　　现在，运行SRT2SUP，单击SRT File菜单并选择Open as text。</p>
<p>　　现在，定位到您硬盘上的SRT格式的字幕文件，选择它并单击Open按钮。</p>
<p>　　在此后弹出的窗口中，您可以按您的要求对字幕的延时等进行调整。</p>
<p>3.2 改变字幕颜色</p>
<p>　　在主窗口的右侧，您可以看到一个小窗口包含了字幕中的每一行。选择其中的一行就可以在主窗口的顶部（默认位置）看到显示的文本效果，通常是不符合您的要求的。所以，您需要选择Settings菜单并单击Global。</p>
<p>　　在这里您可以调整菜单的颜色和其他外观效果。在调整完毕后单击OK按钮。</p>
<p>　　现在您可以看到您设定的菜单的效果。如果不满意，您可以回到Global Settings窗口重新设定直到满足您的要求。</p>
<p>3.3 保存字幕</p>
<p>　　在您对菜单的设定满意后，您需要将它保存为SUP文件。</p>
<p>　　在主窗口中，您可以看到在菜单列表下方有一项叫All。单击那个按钮，否则您的字幕文件将是空白的。</p>
<p>　　然后，选择SUP File菜单并单击Save。给菜单文件一个合理的文件名后单击Save按钮。保存过程将持续几分钟，最终生成一个SUP文件供IFOEdit使用。</p>
<p>四、转换AVI到MPEG-2</p>
<p>4.1 转换AVI到DVD/MPEG-2</p>
<p>　　现在是时候将AVI视频文件转换成DVD-Video适用的MPEG-2格式了。我们将使用TMPGEnc作为我们的编码器，因为它易于使用并且输出的MPEG-2视频质量相当好。</p>
<p>　　首先，您需要运行TMPGEnc。请注意TMPGEnc的使用版本只在30天内支持MPEG-2编码。在此之后，您需要购买一个TMPGEnc的商业版本，叫TMPGEnc Plus。</p>
<p>4.2 运行向导</p>
<p>　　到目前为止，新建一个TMPGEnc项目最简单的方法是使用TMPGEnc的向导。默认情况下当您运行TMPGEnc时向导会自动弹出，如果没有，请选择Files菜单并单击Project Wizard。</p>
<p>4.3 选择视频格式</p>
<p>　　在项目向导的第一页，您应该在窗口左边的DVD选项中选择正确的视频格式。对于真的知道他们在做什么的人来说，他们有很多的选择，但我们在这里将坚持两种选择：DVD-NTSC和DVD-PAL。</p>
<p>　　拿起您刚才记录fps值的那张纸。如果fps是25.000fps，您应该选择DVD-PAL。如果fps值是23.976或29.97，您应该选择DVD-NTSC。</p>
<p>　　如果您的音频不是AC3，您应该在此选择音频格式。我们建议您使用CBR-MPEG-1 Layer II Audio (MP2)，因为它体积比PCM小并且更适合DVD。如果您的音频是AC3格式的，您可以在这里忽略这个选择。</p>
<p>　　在您进行完这些选择后，单击Next按钮。</p>
<p>4.4 选择视频源</p>
<p>　　在第二页，您应该先单击Browse按钮。这将打开一个文件对话框，您应该在这里定位您的AVI文件（如果您合并了多个AVI片断，请选择这个合并后的文件），然后单击Open。</p>
<p>　　通常TMPGEnc可以自动的识别您打开的视频文件的正确参数。目前绝大多数的AVI文件都是pre-deinterlaced的，所以Video type通常设定为Non-interlaced。当您确信这个设定值不正确（或TMPGEnc推荐了另一个选项）时您可以只改变这个值。</p>
<p>　　屏幕比率应该保持1:1(VGA)，除非您是我前面提到的那种真的知道自己在做什么的人。</p>
<p>　　对PAL视频来说，Content of Video选项一般是不可选的。而对于NTSC视频来说，这个选项一般都是Film Movie，除非源文件是数码摄像机拍摄的AVI文件。</p>
<p>　　检查一遍刚才的选择后单击Next。</p>
<p>4.5 滤镜设定</p>
<p>　　在第三页，顶端的三个选项框在大多数情况下应该保持原样，但是您可以单击Other settings按钮。</p>
<p>4.6 其他设定</p>
<p>　　单击Other settings会弹出一个新窗口，在这里您可以更精确的定义编码参数。这里最重要的选择是Motion search precision。您应该很明确的将它定义为Highest quality (very slow)，因为这个选项值提供比默认值好得多的视频输出质量。</p>
<p>　　您同样应该将Rate control mode的设定值改为2-pass VBR (VBR)，这强制TMPGEnc使用multi-pass encoding进行编码。</p>
<p>　　当您完成这些设定后，单击OK按钮关闭小窗口。当你回到项目向导窗口时，单击Next按钮。</p>
<p>4.7 比特率设定</p>
<p>　　在比特率设定页（向导第四页）中，您可以调整bitrate和resolution在内的视频编码设定。</p>
<p>　　NTSC电影的Video resolution应该为720&#215;480，而PAL的应该为720&#215;576。</p>
<p>　　然后，确认音频比特率选项为384kbps。</p>
<p>　　在Average video bitrate设定上，您需要调整这个值，以使得到的DVD-Video对于DVDR来说有一个完美的大小。在窗口底部，你可以看到一个蓝色进度条和一个 Makes files size XXX% of disk capacity的文本框。调整Average video bitrate的值，直到XXX在95到97之间。不要超出那个值，因为我们需要空间存储字幕和其他素材。同时，如果您的音频是AC3格式的，试着将这个值控制在94到96之间，因为AC3音频往往是448kbps的（如果AVIcodec测定AC3比特率小于448kbps，则忽略它）。</p>
<p>　　总之，记得确认蓝色进度条上的下拉框中显示的是DVD-R 4.7GB (UDF)。</p>
<p>　　当你完成这些设定后单击Next按钮。</p>
<p>4.8 选择目标文件</p>
<p>　　首先，记得选择Output video and audio as individual elementary streams。然后单击Browse按钮并定为到您硬盘上剩余空间大于4.5GB的分区，选择一个输出视频文件名称然后单击Save。</p>
<p>　　确定Start encoding immediately被选定，然后单击Next按钮后去睡觉，TMPGEnc将立刻开始编码视频文件并根据计算机性能不同而持续工作大约20小时。</p>
<p>五、使用IFOEdit编辑DVD</p>
<p>5.1 IFOEdit</p>
<p>　　现在，视频文件已经编码完成，是时候开始制作DVD了。我们不想创建个性化菜单或添加额外的特性，只希望制作一张可以在DVD影碟机上直接播放的视频光盘，所以免费的IFOEdit就是我们需要的。</p>
<p>　　首先，运行IFOEdit。然后，选择DVD Author菜单并单击Author new DVD。</p>
<p>5.2 选择源文件</p>
<p>　　现在，单击Video后面的小按钮并定位到您用TMPGEnc创建的m2v文件，然后单击Open。</p>
<p>　　单击Audio后面的小按钮并定位到mp2音频文件或ac3音频文件，选择它并单击Open。</p>
<p>　　单击Subpicture后面的小按钮定位到您前面创建得sup字幕文件，选择它并单击Open。</p>
<p>　　现在，我们在此没有定义章节，因为绝大多数AVI文件完全没有附带章节信息，所以我们让Scene changes选项完全空白。</p>
<p>（另一种选择是创建一个chapters.txt文件来导航DVD，每行一个数字，如第一行为10000，第二行为20000，……。这样我们就可以将这个DVD分为每10000帧一个章节）</p>
<p>　　最后，单击Output stream后面的按钮，选择一个有4.5GB剩余空间的分区，在其中选择一个目录作为我们输出目录。</p>
<p>5.3 输出……</p>
<p>　　现在，简单的单击OK，IFOEdit开始创建一个新的DVD-Video项目，这将花费几分钟时间。</p>
<p>　　当项目创建完毕，在日志窗口中单击Close按钮。最后，你将会在你选择为输出目录的文件夹下得到总容量大约4.3GB的文件。</p>
<p>六、烧录DVDR和总结</p>
<p>6.1 烧录DVD</p>
<p>　　现在您可以烧录您的DVD-Video光盘了。请阅读我的另一个指南“用Nero烧录DVD-Video”。</p>
<p>6.2 注意</p>
<p>　　如果你有其他格式的字幕文件，你可能需要将它们转换成SRT格式才能按照本指南的程序进行工作。如果您希望转换VobSub字幕（图形格式）到SRT格式，您可以使用VobSub工具包中的SubResync。</p>
<p>　　同时，您也可能按照本指南创建变形的16:9的电影，但是因为这需要了解更多屏幕比率方面的知识并进行正确的设定，我们建议只有那些熟悉这些知识的人这样做。如果你决定尝试，在测试输出结果前请不要消耗您的DVDR去烧录。大多数的DVD播放软件都可以直接播放您硬盘上的DVD文件，我们可以用它们来进行测试。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=255</wfw:commentRss>
		</item>
		<item>
		<title>玩转GZ-HD7-压缩保存高清视频（保持原画质文件缩小了10倍以上）</title>
		<link>http://www.nixuesong.com/blog2/?p=254</link>
		<comments>http://www.nixuesong.com/blog2/?p=254#comments</comments>
		<pubDate>Tue, 10 Mar 2009 06:00:00 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=254</guid>
		<description><![CDATA[JVC HD Everio 高清数码硬盘摄像机 GZ-HD7使用心得
这款摄像机很是不错，清晰度高、硬盘录像，不过就是有一点非常麻烦，因为是高清嘛，所以存储录像的时间太少了，只能存5-6个小时，如果经常长时间录像的话，只能将录像复制到电脑的硬盘上，但问题又随之而来了，每次的录像就要占去空间60G，再多的硬盘也不够使呀，唯一的办法就是把视频文件压缩但又不能损失清晰度，RMVB压缩格式是首选，为了有相同经历的朋友们少走弯路，接下来我说下我的转换文件的心得，供大家参考。
一、 打开该摄像机自带的软件PowerDirector Express，用它将摄像机里面的视频文件转换为MPG格式。打开“编辑”下“首选项”
选择导出目录（你要存放MPG文件的目录）
选择好后，点击“确定”。
点击，选择“导入媒体文件”或“导入媒体文件夹”。（建议把所有的视频文件复制到一个文件夹，在这就可以直接选择“导入媒体文件夹”）
选择好文件后，自动转换格式，完成后就可以在导出目录里面找到已经转换成MPG格式的视频文件了
二、 安装播放插件（各种格式编解码器），推荐安装暴风影音全插件版，这样所有的插件几乎就全部有了。
三、 使用WINAVI VideoConverter将MPG文件转换为RMVB文件，版本是由火烈鸟工作室
制作的 WinAVI Video Converter 7.7简体中文汉化版
点击“菜单”选择“格式转换”下的“批量转换”。
选择“添加文件”，“其他格式转换为RM”
选择好要转换的文件，设置如下：
点击“确定”开始转换。
四、 如果感觉录像产生的视频文件比较多，可以利用RealMedia Editor把相关的视频文件合并成个文件。操作如下：
选择“文件”下“打开Real媒体文件”， 打开转换好的RM文件（相关视频的第一个文件）
接下来选择“文件”下“追加Real媒体文件”顺序选择要合并的其他文件。
最后选择“文件”下“另存为Real媒体文件为”保存合并的RM文件就OK啦。
制作完成后的文件可以说能与原文件相媲美。基本上保持了高清格式的效果。这就是RMVB格式的魅力。中关村在线JVC GZ-HD7AC
希望以上的资料对大家有所帮助，以上提到的三款软件分别为
1 暴风影音全插件版
2 WinAVI Video Converter 7.7 简体中文汉化版（火烈鸟工作室）。
3 RealMedia Editor 11.0.0.535 ReLoaded 汉化版。
如需要以上软件 加QQ 231521677
                         [...]]]></description>
			<content:encoded><![CDATA[<p>JVC HD Everio 高清数码硬盘摄像机 GZ-HD7使用心得<br />
这款摄像机很是不错，清晰度高、硬盘录像，不过就是有一点非常麻烦，因为是高清嘛，所以存储录像的时间太少了，只能存5-6个小时，如果经常长时间录像的话，只能将录像复制到电脑的硬盘上，但问题又随之而来了，每次的录像就要占去空间60G，再多的硬盘也不够使呀，唯一的办法就是把视频文件压缩但又不能损失清晰度，RMVB压缩格式是首选，为了有相同经历的朋友们少走弯路，接下来我说下我的转换文件的心得，供大家参考。<br />
一、 打开该摄像机自带的软件PowerDirector Express，用它将摄像机里面的视频文件转换为MPG格式。打开“编辑”下“首选项”</p>
<p>选择导出目录（你要存放MPG文件的目录）</p>
<p>选择好后，点击“确定”。<br />
点击，选择“导入媒体文件”或“导入媒体文件夹”。（建议把所有的视频文件复制到一个文件夹，在这就可以直接选择“导入媒体文件夹”）</p>
<p>选择好文件后，自动转换格式，完成后就可以在导出目录里面找到已经转换成MPG格式的视频文件了<br />
二、 安装播放插件（各种格式编解码器），推荐安装暴风影音全插件版，这样所有的插件几乎就全部有了。<br />
三、 使用WINAVI VideoConverter将MPG文件转换为RMVB文件，版本是由火烈鸟工作室<br />
制作的 WinAVI Video Converter 7.7简体中文汉化版</p>
<p>点击“菜单”选择“格式转换”下的“批量转换”。</p>
<p>选择“添加文件”，“其他格式转换为RM”</p>
<p>选择好要转换的文件，设置如下：</p>
<p>点击“确定”开始转换。<br />
四、 如果感觉录像产生的视频文件比较多，可以利用RealMedia Editor把相关的视频文件合并成个文件。操作如下：<br />
选择“文件”下“打开Real媒体文件”， 打开转换好的RM文件（相关视频的第一个文件）</p>
<p>接下来选择“文件”下“追加Real媒体文件”顺序选择要合并的其他文件。</p>
<p>最后选择“文件”下“另存为Real媒体文件为”保存合并的RM文件就OK啦。<br />
制作完成后的文件可以说能与原文件相媲美。基本上保持了高清格式的效果。这就是RMVB格式的魅力。中关村在线JVC GZ-HD7AC</p>
<p>希望以上的资料对大家有所帮助，以上提到的三款软件分别为<br />
1 暴风影音全插件版<br />
2 WinAVI Video Converter 7.7 简体中文汉化版（火烈鸟工作室）。<br />
3 RealMedia Editor 11.0.0.535 ReLoaded 汉化版。<br />
如需要以上软件 加QQ 231521677<br />
                                                              07-12中关</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=254</wfw:commentRss>
		</item>
		<item>
		<title>X window远程登录</title>
		<link>http://www.nixuesong.com/blog2/?p=253</link>
		<comments>http://www.nixuesong.com/blog2/?p=253#comments</comments>
		<pubDate>Mon, 09 Mar 2009 19:29:51 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=253</guid>
		<description><![CDATA[X window的C/S模式使得它很容易实现远程登录。
两台机器A,B：
A为X server（安装了X window的系统，或者是安装了X-win32的windows系统）；
B为X client（要远程登录到linux系统，这里使用gdm，所以这台机器上必须安装了gdm）。
设置B：
将/etc/X11/gdm/gdm.conf文件里[xdmcp]选项的Enable改为true，让gdm支持远程登录。
操作A：
切换到ttyn（n=1,2,&#8230;,6;使用ctrl+alt+Fn），使用A的一个用户登录进入字符界面，输入：
# X :m -query Address_B ＆
即进入B系统的gnome登录界面，接下来就跟在B机器前操作一样了。
（注：上面的m为任意大于零的整数，Address_B为B的主机名或者IP地址。）
A机器只提供显示，所有的运算都是在B进行，然后把结果发送到A上进行显示。
X window远程登录还有别的方式，这种是带有窗口管理器的，不带窗口管理器的比这麻烦，并且界面不友好，不过实验一把可以更深刻的理解X window的工作方式；
如果不需要登录到图形界面，那就使用telnet或ssh等。
]]></description>
			<content:encoded><![CDATA[<p>X window的C/S模式使得它很容易实现远程登录。<br />
两台机器A,B：<br />
A为X server（安装了X window的系统，或者是安装了X-win32的windows系统）；<br />
B为X client（要远程登录到linux系统，这里使用gdm，所以这台机器上必须安装了gdm）。</p>
<p>设置B：<br />
将/etc/X11/gdm/gdm.conf文件里[xdmcp]选项的Enable改为true，让gdm支持远程登录。<br />
操作A：<br />
切换到ttyn（n=1,2,&#8230;,6;使用ctrl+alt+Fn），使用A的一个用户登录进入字符界面，输入：<br />
# X :m -query Address_B ＆</p>
<p>即进入B系统的gnome登录界面，接下来就跟在B机器前操作一样了。<br />
（注：上面的m为任意大于零的整数，Address_B为B的主机名或者IP地址。）<br />
A机器只提供显示，所有的运算都是在B进行，然后把结果发送到A上进行显示。</p>
<p>X window远程登录还有别的方式，这种是带有窗口管理器的，不带窗口管理器的比这麻烦，并且界面不友好，不过实验一把可以更深刻的理解X window的工作方式；<br />
如果不需要登录到图形界面，那就使用telnet或ssh等。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=253</wfw:commentRss>
		</item>
		<item>
		<title>linux怎么远程登录linux的机器？</title>
		<link>http://www.nixuesong.com/blog2/?p=252</link>
		<comments>http://www.nixuesong.com/blog2/?p=252#comments</comments>
		<pubDate>Mon, 09 Mar 2009 19:23:28 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=252</guid>
		<description><![CDATA[有两台装了linux的机器（机器1和机器2），机器1装了我们需要的软件，我们都是用exceed远程登录到机器1使用，现在我需要用机器2远程登录机器1，试了telnet，提示连接被拒绝，请问应该怎么办？是不是linux下也需要类似exceed的软件？
 云之上 回复于：2004-06-01 09:03:20
可以用ssh
 sakulagi 回复于：2004-06-01 10:06:29
X -query IP地址
 aspbiz 回复于：2004-06-01 10:51:10
ssh telnet x
 lrzh2000 回复于：2004-06-01 13:54:22
登陆后是像exceed那样吗？完全是服务器的桌面系统？
 sakulagi 回复于：2004-06-01 14:05:14
试试X -query不就知道了。
 lrzh2000 回复于：2004-06-01 17:28:50
不行啊，好像什么display有问题
 lrzh2000 回复于：2004-06-01 21:31:07
着急 阿,哪位大侠知道?
 platinum 回复于：2004-06-01 21:33:22
x-win32
 sakulagi 回复于：2004-06-01 23:01:06
引用：原帖由 &#8220;lrzh2000&#8243;]着急 阿,哪位大侠知道?
 发表：
你这么着急，为什么不把错误信息和你的具体操作写的清楚一点？
 lrzh2000 回复于：2004-06-02 08:51:42
两台机器都安装的linux,192.168.0.1作为服务器,用192.168.0.2登录0.1
xhost + 192.168.0.150
ps
export display=192.168.0.9:0
ssh -l username 192.168.0.1
然后输入密码进入
运行图形界面的程序提示
Cannot open display; check DISPLAY env variable&#8230;exiting&#8230;
着急,应该怎么办???
&#8211;
 sakulagi 回复于：2004-06-02 08:56:07
引用：xhost [...]]]></description>
			<content:encoded><![CDATA[<p>有两台装了linux的机器（机器1和机器2），机器1装了我们需要的软件，我们都是用exceed远程登录到机器1使用，现在我需要用机器2远程登录机器1，试了telnet，提示连接被拒绝，请问应该怎么办？是不是linux下也需要类似exceed的软件？</p>
<p> 云之上 回复于：2004-06-01 09:03:20</p>
<p>可以用ssh</p>
<p> sakulagi 回复于：2004-06-01 10:06:29</p>
<p>X -query IP地址</p>
<p> aspbiz 回复于：2004-06-01 10:51:10</p>
<p>ssh telnet x</p>
<p> lrzh2000 回复于：2004-06-01 13:54:22</p>
<p>登陆后是像exceed那样吗？完全是服务器的桌面系统？</p>
<p> sakulagi 回复于：2004-06-01 14:05:14</p>
<p>试试X -query不就知道了。</p>
<p> lrzh2000 回复于：2004-06-01 17:28:50</p>
<p>不行啊，好像什么display有问题</p>
<p> lrzh2000 回复于：2004-06-01 21:31:07</p>
<p>着急 阿,哪位大侠知道?</p>
<p> platinum 回复于：2004-06-01 21:33:22</p>
<p>x-win32</p>
<p> sakulagi 回复于：2004-06-01 23:01:06</p>
<p>引用：原帖由 &#8220;lrzh2000&#8243;]着急 阿,哪位大侠知道?<br />
 发表：<br />
你这么着急，为什么不把错误信息和你的具体操作写的清楚一点？</p>
<p> lrzh2000 回复于：2004-06-02 08:51:42</p>
<p>两台机器都安装的linux,192.168.0.1作为服务器,用192.168.0.2登录0.1<br />
xhost + 192.168.0.150<br />
ps<br />
export display=192.168.0.9:0<br />
ssh -l username 192.168.0.1<br />
然后输入密码进入<br />
运行图形界面的程序提示<br />
Cannot open display; check DISPLAY env variable&#8230;exiting&#8230;<br />
着急,应该怎么办???<br />
&#8211;</p>
<p> sakulagi 回复于：2004-06-02 08:56:07</p>
<p>引用：xhost + 192.168.0.150<br />
这个是谁的ip?<br />
引用：export display=192.168.0.9:0<br />
你不是在用192.168.0.1和192.168.0.2么？你到底在用哪台机器？</p>
<p>_______________________________________________</p>
<p>我的建议是：</p>
<p>前提：<br />
你的192.168.0.1可以用exceed连接并可以显示桌面。<br />
操作：<br />
在192.168.0.1上执行：</p>
<p>xhost +</p>
<p>在192.168.0.2上确认本机的x window可以正常启动，然后</p>
<p>X -query 192.168.0.1</p>
<p> lrzh2000 回复于：2004-06-02 09:04:03</p>
<p>对不起,写错了,0.1是服务器,我用0.2<br />
两台机器都安装的linux,192.168.0.1作为服务器,用192.168.0.2登录0.1<br />
xhost + 192.168.0.1<br />
ps<br />
export display=192.168.0.2:0<br />
ssh -l username 192.168.0.1<br />
然后输入密码进入<br />
运行图形界面的程序提示<br />
Cannot open display; check DISPLAY env variable&#8230;exiting&#8230;<br />
着急,应该怎么办???</p>
<p> platinum 回复于：2004-06-02 09:08:20</p>
<p>你想用ssh登录到远程服务器，然后执行startx？？</p>
<p> Untouch 回复于：2004-06-02 09:08:21</p>
<p>x-windows</p>
<p> sakulagi 回复于：2004-06-02 09:23:07</p>
<p>楼主可不可以抽时间试验一下我说的那个方法？</p>
<p> lrzh2000 回复于：2004-06-02 10:29:54</p>
<p>对阿, 就象windows中使用 exceed 或xwin32登录linux一样, 使用图形界面, 请问版主应该怎么作阿?  因为我要运行图形界面的软件, ssh登录过去是不是不能运行图形界面阿?  是不是安装linux下的什么软件?</p>
<p> platinum 回复于：2004-06-02 10:34:17</p>
<p>楼上的兄台看不到sakulagi版主的贴子嘛？</p>
<p> lrzh2000 回复于：2004-06-02 10:40:03</p>
<p>对不起,我试了忘回贴了,提示<br />
Fatal server error:<br />
Server is already active for display 0<br />
        If this server is no longer running, remove /tmp/.X0-lock<br />
        and start again.</p>
<p>When reporting a problem related to a server crash, please send<br />
the full server output, not just the last messages.<br />
Please report problems to xfree86@xfree86.org.</p>
<p> platinum 回复于：2004-06-02 10:48:39</p>
<p>能说说你是怎么试的吗？</p>
<p> lrzh2000 回复于：2004-06-02 10:59:04</p>
<p>xhost + 192.168.0.1<br />
X -query 192.168.0.1</p>
<p> jeffyan 回复于：2004-06-02 11:10:29</p>
<p>ssh  telnet</p>
<p> lrzh2000 回复于：2004-06-02 13:52:44</p>
<p>我在0.1上<br />
xhost + 192.168.0.2<br />
提示<br />
xhost:  unable to open display &#8220;localhost:10.0&#8243;<br />
在0.2上<br />
X -query 192.168.0.1<br />
提示<br />
Fatal server error:<br />
Server is already active for display 0<br />
        If this server is no longer running, remove /tmp/.X0-lock<br />
        and start again.</p>
<p> lrzh2000 回复于：2004-06-02 14:24:58</p>
<p>着急阿</p>
<p> sakulagi 回复于：2004-06-02 14:48:24</p>
<p>在 0.2上</p>
<p>init 3</p>
<p>，然后</p>
<p>X -query 192.168.0.1</p>
<p> lrzh2000 回复于：2004-06-02 15:18:41</p>
<p>谢谢版主,可以了<br />
不过登录过去以后退不回我的系统了!!! 我只有0.1的普通帐户, 请问怎么退到我的系统阿?</p>
<p> sakulagi 回复于：2004-06-02 15:30:55</p>
<p>ctrl_alt_<backspace>;<br />
就退出去了。</p>
<p> lrzh2000 回复于：2004-06-02 15:45:44</p>
<p>可是我的机器的x windows就没有了,怎么同时打开两个x windows ?</p>
<p> q1208c 回复于：2004-06-02 15:51:02</p>
<p>楼主可以试试这个<br />
X :1.0 -query 192.168.0.1<br />
这样就两个都 有图形了。就是不用 init 3 了。然后 [Ctrl] + [Alt] + [F7] 是本机，  [Ctrl] + [Alt] + [F8] 是远程的。</p>
<p> lrzh2000 回复于：2004-06-02 16:07:27</p>
<p>提示命令X:1.0没找到<br />
是先进入我的机器的文字界面然后按您的输入吗?</p>
<p> q1208c 回复于：2004-06-02 16:10:51</p>
<p>引用：原帖由 &#8220;lrzh2000&#8243; 发表：<br />
提示命令X:1.0没找到<br />
是先进入我的机器的文字界面然后按您的输入吗?</p>
<p>X    :1.0 192.168.0.1 &#038; </p>
<p>在哪都行。 console,  gnome-terminal都 行。 init 3 下也行，5 下也行。</p>
<p>记住 X 和 &#8220;:&#8221;中间有空格的。</p>
<p> lrzh2000 回复于：2004-06-02 16:22:27</p>
<p>问题终于解决了,谢谢sakulagi版主和q1208c大侠!!!</p>
<p> q1208c 回复于：2004-06-02 16:25:33</p>
<p>不客气。</p>
<p> lrzh2000 回复于：2004-06-02 16:43:15</p>
<p>还有个问题,我退出 远程登录后还是有log in 的界面, 怎么关上这个x windows ?</p>
<p> q1208c 回复于：2004-06-02 16:48:42</p>
<p>这个么，可能得把刚刚那个X Server kill 了才行了。<br />
你下次启动时不用后面那个 &#8221; &#038; &#8221; ，如果不想用过， 在那个命令行 [Ctrl] + [C ] 就搞定了。现在么，用jobs看一下，把它弄到前面来， fg <number>;，然后 [Ctrl]+C 就行了。</p>
<p> sakulagi 回复于：2004-06-02 16:57:39</p>
<p>对。指定一下display就行了。呵呵。</p>
<p> lrzh2000 回复于：2004-06-02 17:06:46</p>
<p>不太明白怎么用jobs看一下然后弄到前面来?</p>
<p> q1208c 回复于：2004-06-02 17:26:52</p>
<p>jobs<br />
<1>; X :1.0 -query 192.168.0.1 &#038; </p>
<p>fg 1<br />
就行了。然后就 Ctrl+C 啦!</p>
<p> q1208c 回复于：2004-06-02 17:38:22</p>
<p>引用：原帖由 &#8220;sakulagi&#8221;]对。指定一下display就行了。呵呵。<br />
 发表：<br />
 :em02: 借了版主的命令，谢谢先。 :em03:</p>
<p> lrzh2000 回复于：2004-06-02 17:48:27</p>
<p>输入命令<1>;X :1.0 -query 192.168.0.1<br />
提示<br />
bash: syntax error near unexpected token `1&#8242;</p>
<p> lrzh2000 回复于：2004-06-02 18:09:55</p>
<p>大侠还在吗?</p>
<p> lrzh2000 回复于：2004-06-02 18:31:24</p>
<p>不行阿,用jobs以后一个任务都看不到,</p>
<p> 硬-盘 回复于：2004-06-02 20:11:15</p>
<p>既然是服务器。干嘛装XWINDOW。</p>
<p> lrzh2000 回复于：2004-06-03 08:59:42</p>
<p>哪位大侠 知道阿?怎么关掉远程登录的x widown阿?</p>
<p> sakulagi 回复于：2004-06-03 09:09:58</p>
<p>引用：原帖由 &#8220;sakulagi&#8221; 发表：<br />
ctrl_alt_<backspace>;<br />
就退出去了。</p>
<p> sky_n 回复于：2004-06-28 22:04:46</p>
<p>可使用一个普通用户。OK。</p>
<p> 12+1 回复于：2004-06-29 00:52:03</p>
<p>telnet不行，是因为你服务没开。<br />
用SSH吧</p>
<p> snowtty 回复于：2005-07-25 23:20:03</p>
<p>呵呵，有意思</p>
<p>原文链接：http://linux.chinaunix.net/bbs/viewthread.php?tid=337702<br />
转载请注明作者名及原文出处</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=252</wfw:commentRss>
		</item>
		<item>
		<title>我是丁磊(1999年电脑报第4期 )ZT</title>
		<link>http://www.nixuesong.com/blog2/?p=251</link>
		<comments>http://www.nixuesong.com/blog2/?p=251#comments</comments>
		<pubDate>Sat, 07 Mar 2009 15:00:02 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=251</guid>
		<description><![CDATA[我为什么来到广州
我老家浙江宁波，1993年我从电子科技大学本科毕业后被分回宁波电信局。大学里我学的是通信专业，应该算专业对口吧。
电信局的两年，可以说是最辛苦的时候。刚从学校出来的人，被分配在宁波电信局的的程控交换机维护。工作上可以说比较轻松，可以天天用电脑，设备也比较好。我写了些小程序帮助单位的同事解决一些维护上的困难。在电信局我最大的收获是学会了Unix和电信业务。在学校，我们几乎没有怎么接触Unix，后来看到电信局主要使用的是Unix，觉得很奇怪，因为WinNT也是多任务的系统，怎么会不如Unix呢？一次和别人的比较让我印象很深刻，我决定一定要好好的研究Unix。我在研究Unix的时候是很枯燥的，没有人帮助，也没有资料。
我几乎天天在晚上12点的时候离开单位的（因为单位有unix的电脑），持之以恒终于我学会Unix的精华，后来我认为网易的成功，和我们使用Unix是无法分开的。
在电信局呆了两年，东西也学得差不多了，于是觉得呆下去已经没有多少的意思了。正好那时广州Sybase公司刚刚成立，我自己的Unix和数据库技术都很好，我决定去广州。（图）
我为什么要创办网易
在Sybase的一年，我除了到处安装调试外，几乎没有多少的进步，因此，一年后我决定离开Sybase。自己又非常喜欢搞Internet，于是，去了广州的一家ISP当总经理技术助理。在那家ISP工作了一年时间，由于激烈的竞争和不合理的电信收费，导致ISP几乎无法生存，我于是决定离开该公司。
离开公司的时候，我很矛盾，不知道自己再回外企，还是自己创业。考虑了大概5天，我决定自己来尝试一下。
现在看来当初是很冒险的，因为我根本不知道公司该靠什么赚钱。我天真地认为只要写一些软件，做一些系统的集成就可以了。后来几乎造成公司无法生存。
我当时注册资本是50万元钱，很多人问我第一笔钱是怎么来的，其实这些钱大部分是我以前存的，还有一些向兄弟借的，再一部分是替别人写了很多的计费软件赚来的。这些钱实在太少了，买几台服务器，搞搞一些装修就没有了。
公司成立的时候只有3个人，我们几个在一个7平方米的房间里面写软件。当初公司的主要业务是开发一些有潜力的Internet应用软件。我当初看好了两个Internet上的服务，一个是搜索引擎，一个是免费邮件服务。网易的搜索引擎是一个非常好的软件，当初就用在广东电信5.17的展示会上。由于那时候国内的站点非常的少，搜索引擎几乎无法发挥自己的优势，于是就搁置一边。
网易公司刚成立，需要在Internet上放置服务器提供服务，当时我提出了一个建议方案是：丰富和发展Chinanet，大概的意思是目前国内的Chinanet上服务太少，不利Internet本土化，我们应该提供更多的服务给国内的网友，这样对网友来说可以享受国内高速的服务，对电信局来说可以增加更多的上网时间，同时网易愿意免费提供这些服务给大家。电信局的领导听了觉得非常好，同时他们觉得自己又不用出钱，也愿意一起来尝试。这样我们把服务器放在电信局，我们还向他们每个月付一定的费用。
就这样，我们艰难地起步了。（图）
我为什么那么看好免费服务
公司成立没有多久，我就看好了Internet上的一个站点hotmail，因为它实在太好了，提供免费的电子邮箱服务，而且基于浏览器的操作，我想这个公司股票一定会上市。当时我想买下他们公司的这个服务系统，而且准备跟别人借10万美元。写信问hotmail公司，问他们是否愿意出售该软件，他们开始的答复是不出售，后来他们开了一个几乎是天价的价格。我觉得买已经是不可能了，就决定自己开发，因为我的Internet经验非常丰富，同时我还有一个伙伴hua，他的技术也非常好。我们开始研究hotmail的结构，一个月下来，知识大增，我们知道了如何设计一个大的系统，什么是load  balance等许多技术问题。从这里我也看到Internet是一个非常好的学习研究工具。那时我们几个伙伴之间经常为发现一个技术上的突破而高兴。
7个月以后，我们的免费电子邮件系统终于开发成功，但我们向电信局申请提供免费电子邮箱的时候，碰到了困难，对方不容许我们独立经营。我当时非常着急，我觉得国内不可能没有人会不懂Internet的基本法则：免费和容易使用。但是对方认为，免费的东西根本无法赚钱。我开始拿着可行性分析到处寻求合作，结果当初很多人对我们的东西根本不懂。我不得不提出合作经营并且提出利润四六分成（他们得六），这一下对方醒了，于是提出要购买整个系统，但我的想法是在国内独家经营，不希望出售，于是答复不卖。下来两个月的时间，我几乎是在寻找合作伙伴，但是没有一家看好。这与以后许多电信局打电话要求购买形成了强烈的对比。1998年2月，我看再拖下去也没有意思了，软件的价值在于应用，如果不用，永远没有效益，于是答应出售。对方提出要我们同时附送域名，我想了想，如果他们没有好的域名根本无法成功，更重要的是，如果我定下来卖的话，第一套的成功直接会影响以后的销售。于是就送了一个163.net。
对方购买163.net的时候，连硬件只用了100多万，而且其中的硬件和数据库系统占了75％，我们除去税后，利润很少。销售第一套的时候，我们几乎没有赚多少钱，但是公司有了发展的资本。
在163.net于去年2月16日开放使用，反应很强烈，注册用户数也以每天2千人左右的在增加。163.net的成功，很多公司纷纷打电话到我们公司要求购买该系统。
网易的另一个免费服务项目是个人主页服务，当时我看到国内可以提供的服务非常少。公司买的Internet服务器只是用来做公司主页服务，我当时觉得浪费了很可惜（因为那台服务器上有18G的硬盘），于是就写了一个个人主页服务系统，包括计数器，留言本等。
由于我们使用了FreeBSD  Unix，系统很稳定，web  server用了Apache，系统速度也很快。由于公司新成立不久的缘故，几乎没有人知道我们可以提供免费的个人主页空间。我于是买下了北京在线、中网、IHW等国内5个站点的广告，时间一共3个月。一下子，许多个人主页都来了。我搞免费个人主页服务只是觉得许多人需要这个，也没有想过会很出名。
网易的个人主页停了两次，一次是在去年4月，起因是一个个人主页链接到某个国外的个人主页上，而在那个个人主页上有一些涉及色情的内容。今天回头看这件事，也许大家的看法与做法都会与几个月前有很大不同。但当时网易受到了很大的压力，有些网友在网上指责和谩骂，然而更多的网友依然表示了理解和支持，我们对这些网友十分的感谢。
网易第二次停止主页申请是在1998年8月，主要原因是因为申请人数增长迅速，访问量大增，使线路接近饱和，为了保证原有用户的服务质量不受影响，只好暂时停止了申请。
网易近期将重新开放免费主页空间申请，与以前不同的是，这次要申请网易免费主页空间，必须首先注册成为网易虚拟社区公民。还有这次将向一些非个人用户开放申请，包括：教育机构、科研机构、政府机关、正式发行的报刊杂志、其他非赢利性和公益单位与一些社会活动组织。
我的BBS情结
网易目前又推出了个新项目——虚拟社区服务，网易推出虚拟社区是出于建立情感纽带的考虑。要保持一个网站的流量，必须提高站点的用户忠诚度。要提高用户忠诚度，必须从两方面着手，一是提供高质量的服务，二是利用感情因素。利用感情因素应从两方面着手，一是建立用户与网站之间的感情纽带，二是建立用户与用户之间的感情纽带。有互动才能建立感情纽带，用户与网站之间的互动包括个性化网站、新闻订阅等，但只有用户与用户之间的互动才能满足绝大多数人的需要。而建立虚拟社区正是让用户之间互动交流的最好方式。
网易虚拟社区是网易BBS的升级版，自1998年12月24日推出后大受欢迎。用户量以每天两千人的速度增长，用户普遍对社区的功能、界面赞不绝口。也有许多人问我为什么有BBS情结，这个要从头说起。
在宁波电信局的时候，我就开始接触到了BBS和Internet，可以说是一个很偶然的机会，我看杂志的时候看到北京有一个BBS开通了。当初我不知道该怎么上去，由于在电信局里，非常的熟悉Modem的使用，我试着拨号，结果上去了。当时里面的内容很少，不过我立刻意识到这个就是以后的信息发展方向了。
在这个BBS上，我还认识了一个人，中国惠多网络的创始人之一——孟超，在他的帮助下，我装好自己的BBS。
搞完BBS以后，几乎就在当天，深圳和江门的两个爱好者也开始按照孟超的软件安装BBS，于是我们成了国内第一批接触信息交换服务的爱好者。我负责国内的转信服务，而孟超负责到祖国台湾的转信。当初台湾使用该BBS的人很多，光台北就有2万个站台，10万人使用。
于是两岸就连通起来了，没想到刚刚连通不久，恰碰到10月10日，于是双方就两岸问题，发生了激烈的讨论，当时我们已经有6个大陆的站点了，估计有3千使用的人口。这一次的激烈争吵，引起了诸如《光碟月刊》等杂志的注意并做了详细的报道，把它称之为“两岸第四通”。
在广州那家ISP工作时，我架设了Chinanet上第一个火鸟BBS，认识了很多的网友。我和很多网友常常出来聚会，那些日子非常的开心，大家几乎每3个星期出来坐一坐，聊BBS上发生的事情。
现在我还兼着网易虚拟社区的网管，因为我骨子里是个网友，我喜欢BBS里的那种氛围。
]]></description>
			<content:encoded><![CDATA[<p><strong><span style="font-size: x-small;">我为什么来到广州<br />
</span></strong>我老家浙江宁波，1993年我从电子科技大学本科毕业后被分回宁波电信局。大学里我学的是通信专业，应该算专业对口吧。<br />
电信局的两年，可以说是最辛苦的时候。刚从学校出来的人，被分配在宁波电信局的的程控交换机维护。工作上可以说比较轻松，可以天天用电脑，设备也比较好。我写了些小程序帮助单位的同事解决一些维护上的困难。在电信局我最大的收获是学会了Unix和电信业务。在学校，我们几乎没有怎么接触Unix，后来看到电信局主要使用的是Unix，觉得很奇怪，因为WinNT也是多任务的系统，怎么会不如Unix呢？一次和别人的比较让我印象很深刻，我决定一定要好好的研究Unix。我在研究Unix的时候是很枯燥的，没有人帮助，也没有资料。<br />
我几乎天天在晚上12点的时候离开单位的（因为单位有unix的电脑），持之以恒终于我学会Unix的精华，后来我认为网易的成功，和我们使用Unix是无法分开的。<br />
在电信局呆了两年，东西也学得差不多了，于是觉得呆下去已经没有多少的意思了。正好那时广州Sybase公司刚刚成立，我自己的Unix和数据库技术都很好，我决定去广州。（<a href="d:\Program%20Files\%E7%94%B5%E8%84%91%E6%8A%A5%E5%8D%81%E5%B9%B4%E7%8F%8D%E8%97%8F%E7%89%88/Picture/1999/043201a.jpg">图</a>）<br />
<strong><span style="font-size: x-small;">我为什么要创办网易<br />
</span></strong>在Sybase的一年，我除了到处安装调试外，几乎没有多少的进步，因此，一年后我决定离开Sybase。自己又非常喜欢搞Internet，于是，去了广州的一家ISP当总经理技术助理。在那家ISP工作了一年时间，由于激烈的竞争和不合理的电信收费，导致ISP几乎无法生存，我于是决定离开该公司。<br />
离开公司的时候，我很矛盾，不知道自己再回外企，还是自己创业。考虑了大概5天，我决定自己来尝试一下。<br />
现在看来当初是很冒险的，因为我根本不知道公司该靠什么赚钱。我天真地认为只要写一些软件，做一些系统的集成就可以了。后来几乎造成公司无法生存。<br />
我当时注册资本是50万元钱，很多人问我第一笔钱是怎么来的，其实这些钱大部分是我以前存的，还有一些向兄弟借的，再一部分是替别人写了很多的计费软件赚来的。这些钱实在太少了，买几台服务器，搞搞一些装修就没有了。<br />
公司成立的时候只有3个人，我们几个在一个7平方米的房间里面写软件。当初公司的主要业务是开发一些有潜力的Internet应用软件。我当初看好了两个Internet上的服务，一个是搜索引擎，一个是免费邮件服务。网易的搜索引擎是一个非常好的软件，当初就用在广东电信5.17的展示会上。由于那时候国内的站点非常的少，搜索引擎几乎无法发挥自己的优势，于是就搁置一边。<br />
网易公司刚成立，需要在Internet上放置服务器提供服务，当时我提出了一个建议方案是：丰富和发展Chinanet，大概的意思是目前国内的Chinanet上服务太少，不利Internet本土化，我们应该提供更多的服务给国内的网友，这样对网友来说可以享受国内高速的服务，对电信局来说可以增加更多的上网时间，同时网易愿意免费提供这些服务给大家。电信局的领导听了觉得非常好，同时他们觉得自己又不用出钱，也愿意一起来尝试。这样我们把服务器放在电信局，我们还向他们每个月付一定的费用。<br />
就这样，我们艰难地起步了。（<a href="d:\Program%20Files\%E7%94%B5%E8%84%91%E6%8A%A5%E5%8D%81%E5%B9%B4%E7%8F%8D%E8%97%8F%E7%89%88/Picture/1999/043201b.jpg">图</a>）<br />
<strong><span style="font-size: x-small;">我为什么那么看好免费服务<br />
</span></strong>公司成立没有多久，我就看好了Internet上的一个站点hotmail，因为它实在太好了，提供免费的电子邮箱服务，而且基于浏览器的操作，我想这个公司股票一定会上市。当时我想买下他们公司的这个服务系统，而且准备跟别人借10万美元。写信问hotmail公司，问他们是否愿意出售该软件，他们开始的答复是不出售，后来他们开了一个几乎是天价的价格。我觉得买已经是不可能了，就决定自己开发，因为我的Internet经验非常丰富，同时我还有一个伙伴hua，他的技术也非常好。我们开始研究hotmail的结构，一个月下来，知识大增，我们知道了如何设计一个大的系统，什么是load  balance等许多技术问题。从这里我也看到Internet是一个非常好的学习研究工具。那时我们几个伙伴之间经常为发现一个技术上的突破而高兴。<br />
7个月以后，我们的免费电子邮件系统终于开发成功，但我们向电信局申请提供免费电子邮箱的时候，碰到了困难，对方不容许我们独立经营。我当时非常着急，我觉得国内不可能没有人会不懂Internet的基本法则：免费和容易使用。但是对方认为，免费的东西根本无法赚钱。我开始拿着可行性分析到处寻求合作，结果当初很多人对我们的东西根本不懂。我不得不提出合作经营并且提出利润四六分成（他们得六），这一下对方醒了，于是提出要购买整个系统，但我的想法是在国内独家经营，不希望出售，于是答复不卖。下来两个月的时间，我几乎是在寻找合作伙伴，但是没有一家看好。这与以后许多电信局打电话要求购买形成了强烈的对比。1998年2月，我看再拖下去也没有意思了，软件的价值在于应用，如果不用，永远没有效益，于是答应出售。对方提出要我们同时附送域名，我想了想，如果他们没有好的域名根本无法成功，更重要的是，如果我定下来卖的话，第一套的成功直接会影响以后的销售。于是就送了一个163.net。<br />
对方购买163.net的时候，连硬件只用了100多万，而且其中的硬件和数据库系统占了75％，我们除去税后，利润很少。销售第一套的时候，我们几乎没有赚多少钱，但是公司有了发展的资本。<br />
在163.net于去年2月16日开放使用，反应很强烈，注册用户数也以每天2千人左右的在增加。163.net的成功，很多公司纷纷打电话到我们公司要求购买该系统。<br />
网易的另一个免费服务项目是个人主页服务，当时我看到国内可以提供的服务非常少。公司买的Internet服务器只是用来做公司主页服务，我当时觉得浪费了很可惜（因为那台服务器上有18G的硬盘），于是就写了一个个人主页服务系统，包括计数器，留言本等。<br />
由于我们使用了FreeBSD  Unix，系统很稳定，web  server用了Apache，系统速度也很快。由于公司新成立不久的缘故，几乎没有人知道我们可以提供免费的个人主页空间。我于是买下了北京在线、中网、IHW等国内5个站点的广告，时间一共3个月。一下子，许多个人主页都来了。我搞免费个人主页服务只是觉得许多人需要这个，也没有想过会很出名。<br />
网易的个人主页停了两次，一次是在去年4月，起因是一个个人主页链接到某个国外的个人主页上，而在那个个人主页上有一些涉及色情的内容。今天回头看这件事，也许大家的看法与做法都会与几个月前有很大不同。但当时网易受到了很大的压力，有些网友在网上指责和谩骂，然而更多的网友依然表示了理解和支持，我们对这些网友十分的感谢。<br />
网易第二次停止主页申请是在1998年8月，主要原因是因为申请人数增长迅速，访问量大增，使线路接近饱和，为了保证原有用户的服务质量不受影响，只好暂时停止了申请。<br />
网易近期将重新开放免费主页空间申请，与以前不同的是，这次要申请网易免费主页空间，必须首先注册成为网易虚拟社区公民。还有这次将向一些非个人用户开放申请，包括：教育机构、科研机构、政府机关、正式发行的报刊杂志、其他非赢利性和公益单位与一些社会活动组织。<br />
<strong><span style="font-size: x-small;">我的BBS情结<br />
</span></strong>网易目前又推出了个新项目——虚拟社区服务，网易推出虚拟社区是出于建立情感纽带的考虑。要保持一个网站的流量，必须提高站点的用户忠诚度。要提高用户忠诚度，必须从两方面着手，一是提供高质量的服务，二是利用感情因素。利用感情因素应从两方面着手，一是建立用户与网站之间的感情纽带，二是建立用户与用户之间的感情纽带。有互动才能建立感情纽带，用户与网站之间的互动包括个性化网站、新闻订阅等，但只有用户与用户之间的互动才能满足绝大多数人的需要。而建立虚拟社区正是让用户之间互动交流的最好方式。<br />
网易虚拟社区是网易BBS的升级版，自1998年12月24日推出后大受欢迎。用户量以每天两千人的速度增长，用户普遍对社区的功能、界面赞不绝口。也有许多人问我为什么有BBS情结，这个要从头说起。<br />
在宁波电信局的时候，我就开始接触到了BBS和Internet，可以说是一个很偶然的机会，我看杂志的时候看到北京有一个BBS开通了。当初我不知道该怎么上去，由于在电信局里，非常的熟悉Modem的使用，我试着拨号，结果上去了。当时里面的内容很少，不过我立刻意识到这个就是以后的信息发展方向了。<br />
在这个BBS上，我还认识了一个人，中国惠多网络的创始人之一——孟超，在他的帮助下，我装好自己的BBS。<br />
搞完BBS以后，几乎就在当天，深圳和江门的两个爱好者也开始按照孟超的软件安装BBS，于是我们成了国内第一批接触信息交换服务的爱好者。我负责国内的转信服务，而孟超负责到祖国台湾的转信。当初台湾使用该BBS的人很多，光台北就有2万个站台，10万人使用。<br />
于是两岸就连通起来了，没想到刚刚连通不久，恰碰到10月10日，于是双方就两岸问题，发生了激烈的讨论，当时我们已经有6个大陆的站点了，估计有3千使用的人口。这一次的激烈争吵，引起了诸如《光碟月刊》等杂志的注意并做了详细的报道，把它称之为“两岸第四通”。<br />
在广州那家ISP工作时，我架设了Chinanet上第一个火鸟BBS，认识了很多的网友。我和很多网友常常出来聚会，那些日子非常的开心，大家几乎每3个星期出来坐一坐，聊BBS上发生的事情。<br />
现在我还兼着网易虚拟社区的网管，因为我骨子里是个网友，我喜欢BBS里的那种氛围。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=251</wfw:commentRss>
		</item>
		<item>
		<title>开网吧的成本核算（100台以上）</title>
		<link>http://www.nixuesong.com/blog2/?p=250</link>
		<comments>http://www.nixuesong.com/blog2/?p=250#comments</comments>
		<pubDate>Thu, 19 Feb 2009 19:31:10 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=250</guid>
		<description><![CDATA[我想开个网吧，不知道会有什么费用，电脑买多少钱的比较划算，管理系统和光纤会有多少消耗，利润该怎么核算呢？总之不太明白，请高手指点一下，谢谢(提问时间：2006-08-30 10:43)
最佳答案&#8212;-我给你说说；
首先，要看你在什么地方开，要是太小的地方，价格不高的话运作起来风险很大。
另外，房子要有消防门，租的时候要注意，如果没有的话要先问清楚房东，房子是不是能够再打一个门出来。
还有机器配置和环境，现在要求很高的，玩家要是看机器和环境不好的话通常不会有回头客。
再给你说说利润的事情，现在国内各地上网价格不一，通常分为一下几种收费方式，3元/小时，2元/小时，1元/小时。
网吧的经营收入：
网吧如果在经营上取得了规范化的管理，那么收入将与地理/系统/硬件/服务/环境等紧密相结合，现在我以100台机子为例来为大家做个总结:
1.网吧经营费率:早上8-23时为1.5元/小时 晚上24时至早上7时为1元/小时 通宵6元8小时
2.网吧管理费用:技术员一名2000元/月附吃宿 管理员三名500元/月不包吃宿
3.网吧屋售费用:根据地段不同.平方不同.位置不同.我以近街口300平方门面为例.2500元/月
4.网吧光纤费用:将遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规接入光纤，光纤费用以当地的关系而定。每个省区县城镇乡都不一样在这里列述的只供参考。
电信：100兆8800元/年750元/月 10兆6800元/年570元/月 4兆3500元/年300元/月
铁通：100兆6700元/年570元/月 10兆4600元/年395元/月 4兆2000元/年170元/月
网通：100兆7500元/年635元/月 10兆5500元/年460元/月 4兆2300元/年200元/月
5.网吧硬件费用:每月的硬件损耗在一般情况下不会超过300元.除显卡/CPU风扇/电源/鼠标/键盘/耳机等易损易坏零件外其它的硬件配置在一般情况下如非运行在五年内是很难存在坏的可能性。但是其总体在运作过程中也会逐渐的损耗，所以现在我们将根据这种情况以100台电脑每月3000元的损耗费用来规划我们实际性的纯收入。
6.网吧税务费用:工商250元/月 地税300元/月 营业税600元/月 卫生费10元/月
7.网吧用电费用:100台电脑商业用电5000元/月如果是农村商业电1.38元/度，就要增加1500元
8.网吧关系费用:15000元/年
9.按企划商业运作法计算：早8时=（天1×16时×1.5元×100台）+（晚1×8时×1元×100）-时间段落时/分/秒（盈亏平衡分析法）不排除客户下机后的时间层/离机时间层/空机时间层/维护时间层/我们将按算术平均值法做出以下结论:在离机和空隙的过程以100台机子40台不运作数量进行对比化将形成5:2那么就形成算术结果:我们先求平均数〔（1×16×1.5×100×+1×8×1×100）〕÷5×2=1280
然后我们再求平均收入值〔（1×16×1.5×100×+1×8×1×100）〕-1280=1920
这样我们得出结果星期一至星期五的收入值为1920元而双休日的收入值将以1280÷2+1920=2560
以简单化形式算31天/月双休日均8日×2560元/天=20480而工作日均为23天/月23日×1920=44160
再以总合的形式得出一个月的总产值/收入值：20480+44160=64640
最后我们还需把通宵的8时6元制做定向分析因为不可能每天晚上都是8元/台的收入所以我们将需统一划分出比率值出来：64640-（8时-2时）×1元×100台×（平均15天/月）÷（2空隙率）=平均每月网吧收入60140
10.按盈亏平衡分析法计算:
网吧月底总收入60140-（工商250元+地税300+营业税600+卫生费10+自拿3000损耗费+商业用电5000+技术员工资 2000+管理员工资1500+屋售2500+平均关系费15000÷12+平均光纤费750+硬件损耗费300+水费300）=42380
11.按史丰收快速计算法计算:
一年12月×42680=508560
在本次计算法上基本算出网吧实际性的收入情况，不过你可以把价位提高或是各方面再深入管理，比如说价位上提高/构建包厢/贵宾房/咖啡厅/构建灵感空间厢/晚上通宵8元8时制/游戏区域制等等大家可以根据自已的实际情况实行。
最后祝您顺利！ 
主要就是房子,证件,电脑,网络费和请较懂的人帮忙,不然钱是不够花的 .
(回答：2006-08-30 23:17)
]]></description>
			<content:encoded><![CDATA[<p>我想开个网吧，不知道会有什么费用，电脑买多少钱的比较划算，管理系统和光纤会有多少消耗，利润该怎么核算呢？总之不太明白，请高手指点一下，谢谢(提问时间：2006-08-30 10:43)</p>
<p>最佳答案&#8212;-我给你说说；<br />
首先，要看你在什么地方开，要是太小的地方，价格不高的话运作起来风险很大。<br />
另外，房子要有消防门，租的时候要注意，如果没有的话要先问清楚房东，房子是不是能够再打一个门出来。<br />
还有机器配置和环境，现在要求很高的，玩家要是看机器和环境不好的话通常不会有回头客。<br />
再给你说说利润的事情，现在国内各地上网价格不一，通常分为一下几种收费方式，3元/小时，2元/小时，1元/小时。</p>
<p>网吧的经营收入：</p>
<p>网吧如果在经营上取得了规范化的管理，那么收入将与地理/系统/硬件/服务/环境等紧密相结合，现在我以100台机子为例来为大家做个总结:<br />
1.网吧经营费率:早上8-23时为1.5元/小时 晚上24时至早上7时为1元/小时 通宵6元8小时<br />
2.网吧管理费用:技术员一名2000元/月附吃宿 管理员三名500元/月不包吃宿<br />
3.网吧屋售费用:根据地段不同.平方不同.位置不同.我以近街口300平方门面为例.2500元/月<br />
4.网吧光纤费用:将遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规接入光纤，光纤费用以当地的关系而定。每个省区县城镇乡都不一样在这里列述的只供参考。<br />
电信：100兆8800元/年750元/月 10兆6800元/年570元/月 4兆3500元/年300元/月<br />
铁通：100兆6700元/年570元/月 10兆4600元/年395元/月 4兆2000元/年170元/月<br />
网通：100兆7500元/年635元/月 10兆5500元/年460元/月 4兆2300元/年200元/月<br />
5.网吧硬件费用:每月的硬件损耗在一般情况下不会超过300元.除显卡/CPU风扇/电源/鼠标/键盘/耳机等易损易坏零件外其它的硬件配置在一般情况下如非运行在五年内是很难存在坏的可能性。但是其总体在运作过程中也会逐渐的损耗，所以现在我们将根据这种情况以100台电脑每月3000元的损耗费用来规划我们实际性的纯收入。<br />
6.网吧税务费用:工商250元/月 地税300元/月 营业税600元/月 卫生费10元/月<br />
7.网吧用电费用:100台电脑商业用电5000元/月如果是农村商业电1.38元/度，就要增加1500元<br />
8.网吧关系费用:15000元/年<br />
9.按企划商业运作法计算：早8时=（天1×16时×1.5元×100台）+（晚1×8时×1元×100）-时间段落时/分/秒（盈亏平衡分析法）不排除客户下机后的时间层/离机时间层/空机时间层/维护时间层/我们将按算术平均值法做出以下结论:在离机和空隙的过程以100台机子40台不运作数量进行对比化将形成5:2那么就形成算术结果:我们先求平均数〔（1×16×1.5×100×+1×8×1×100）〕÷5×2=1280<br />
然后我们再求平均收入值〔（1×16×1.5×100×+1×8×1×100）〕-1280=1920<br />
这样我们得出结果星期一至星期五的收入值为1920元而双休日的收入值将以1280÷2+1920=2560<br />
以简单化形式算31天/月双休日均8日×2560元/天=20480而工作日均为23天/月23日×1920=44160<br />
再以总合的形式得出一个月的总产值/收入值：20480+44160=64640<br />
最后我们还需把通宵的8时6元制做定向分析因为不可能每天晚上都是8元/台的收入所以我们将需统一划分出比率值出来：64640-（8时-2时）×1元×100台×（平均15天/月）÷（2空隙率）=平均每月网吧收入60140<br />
10.按盈亏平衡分析法计算:<br />
网吧月底总收入60140-（工商250元+地税300+营业税600+卫生费10+自拿3000损耗费+商业用电5000+技术员工资 2000+管理员工资1500+屋售2500+平均关系费15000÷12+平均光纤费750+硬件损耗费300+水费300）=42380<br />
11.按史丰收快速计算法计算:<br />
一年12月×42680=508560<br />
在本次计算法上基本算出网吧实际性的收入情况，不过你可以把价位提高或是各方面再深入管理，比如说价位上提高/构建包厢/贵宾房/咖啡厅/构建灵感空间厢/晚上通宵8元8时制/游戏区域制等等大家可以根据自已的实际情况实行。</p>
<p>最后祝您顺利！ </p>
<p>主要就是房子,证件,电脑,网络费和请较懂的人帮忙,不然钱是不够花的 .<br />
(回答：2006-08-30 23:17)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=250</wfw:commentRss>
		</item>
		<item>
		<title>Erlang学习资源</title>
		<link>http://www.nixuesong.com/blog2/?p=249</link>
		<comments>http://www.nixuesong.com/blog2/?p=249#comments</comments>
		<pubDate>Wed, 18 Feb 2009 06:51:37 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=249</guid>
		<description><![CDATA[Erlang语言绝对算得上是一种“小众”语言，但其未来的发展前景却是无法估量的，因为它可以解决传统语言很难解决的并行计算中的难题。Erlang是一种函数式（变量只能赋值一次）、强类型、动态类型（变量类型在运行时决定，代码需要编译后才能执行，与 Python，Ruby等不一样）、面向并发（Concurrency Oriented）的语言。
Erlang学习资源收集：
Getting Started with Erlang. 开始使用Erlang
Erlang Course. Erlang学习课程
Best practices for Erlang development: Erlang开发的最佳实践，推荐阅读，因为这篇文章介绍了一些不同的Erlang哲学，例如为什么Erlang不鼓励 “programming defensively”.
Erlang教程：如何创建使用Erlang 创建OTP应用 how to build an OTP application in Erlang.
Thinking in Erlang, 思考Erlang，一个非常优秀的30页的 面向C/C++/Java/Python 未曾使用函数式编程的开发者的介绍。
书写了务实编程(Pragmatic Programmer)和Rails敏捷编程的作者写了 Programming Erlang一书。这本书有两章详细介绍了OTP库。
Dave Thomas (of The Pragmatic Programmer fame) 在他的博客上写了两个伟大介绍文章关于Erlang： article un, article deux.
当然还有Erlang官方网站： Erlang homepage.
下面是关于Erlang一些很好的文章：
Performance Measurements of Threads in Java vs Processes in Erlang. [...]]]></description>
			<content:encoded><![CDATA[<p>Erlang语言绝对算得上是一种“小众”语言，但其未来的发展前景却是无法估量的，因为它可以解决传统语言很难解决的并行计算中的难题。Erlang是一种函数式（变量只能赋值一次）、强类型、动态类型（变量类型在运行时决定，代码需要编译后才能执行，与 Python，Ruby等不一样）、面向并发（Concurrency Oriented）的语言。</p>
<p>Erlang学习资源收集：</p>
<p>Getting Started with Erlang. 开始使用Erlang</p>
<p>Erlang Course. Erlang学习课程</p>
<p>Best practices for Erlang development: Erlang开发的最佳实践，推荐阅读，因为这篇文章介绍了一些不同的Erlang哲学，例如为什么Erlang不鼓励 “programming defensively”.</p>
<p>Erlang教程：如何创建使用Erlang 创建OTP应用 how to build an OTP application in Erlang.</p>
<p>Thinking in Erlang, 思考Erlang，一个非常优秀的30页的 面向C/C++/Java/Python 未曾使用函数式编程的开发者的介绍。</p>
<p>书写了务实编程(Pragmatic Programmer)和Rails敏捷编程的作者写了 Programming Erlang一书。这本书有两章详细介绍了OTP库。</p>
<p>Dave Thomas (of The Pragmatic Programmer fame) 在他的博客上写了两个伟大介绍文章关于Erlang： article un, article deux.</p>
<p>当然还有Erlang官方网站： Erlang homepage.</p>
<p>下面是关于Erlang一些很好的文章：<br />
Performance Measurements of Threads in Java vs Processes in Erlang. 对比Java和Erlang线程性能</p>
<p>20000 users connected to a single ejabberd server. 2万个用户链接一个ejabberd服务器</p>
<p>Wikipedia entry on Erlang. Wikipedia上Erlang 词条入口</p>
<p>IBM developerWorks article about Erlang. IBM 开发者社区中Erlang文章</p>
<p>Erlang SMP Performance on a Sun Fire T2000 (that rather lovely 32-core 2U rackmount server).</p>
<p>Joe Armstrong 展示了 how to write a fault-tolerant server in Erlang</p>
<p>Jay Nelson 写了一个 excellent, informative email 关于为什么要选择Erlang(而不是Java+JSP)来开发一个web站点和游戏服务器的原因。他提到很多原因，并比较了多种语言，告诉你只有 Erlang OTP平台能够提供给你其他语言不能提供的高性能。</p>
<p>The MMORPG Vendetta Online 现在正在使用Erlang作为背后的服务器应用 using an Erlang-based backend server… 包括几种技术比较 LISP vs Erlang vs C++!</p>
<p>分布式、并行计算语言Erlang 学习笔记<br />
http://computebank.spaces.live.com/blog/cns!955689A6CF175077!326.entry<br />
http://computebank.spaces.live.com/blog/cns!955689A6CF175077!356.entry<br />
http://computebank.spaces.live.com/blog/cns!955689A6CF175077!439.entry</p>
<p>Erlang + Yaws vs. Ruby on Rails<br />
http://yarivsblog.com/articles/2006/07/11/erlang-yaws-vs-ruby-on-rails</p>
<p>Erlang写的服务器Yaws，据说并发能是apache的15倍<br />
http://yaws.hyber.org/</p>
<p>Jabber: Open Instant Messaging and a Whole Lot More, Powered by XMPP<br />
http://www.jabber.org/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=249</wfw:commentRss>
		</item>
		<item>
		<title>程序语言的新星:走近Erlang的世界</title>
		<link>http://www.nixuesong.com/blog2/?p=248</link>
		<comments>http://www.nixuesong.com/blog2/?p=248#comments</comments>
		<pubDate>Wed, 18 Feb 2009 06:50:00 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=248</guid>
		<description><![CDATA[提起Erlang语言，相信许多人都会挠头，因为它实在是太陌生了。在2007年6月由TIOBE Programming Community提供的程序语言排名中，Erlang占有率仅为0.08%，排名第49位。与之形成鲜明对比的是，Java以20.025%的占有率高居榜首，紧随其后的是 C（15.967%）、C++（11.118%）、VB （9.332%）、PHP（8.871%）、Perl（6.177%）、C#（3.483%）、 Python（3.161%）、JavaScript （2.616%）和Ruby（2.132%）。相对于传统老牌“大佬”语言相比，Erlang语言绝对算得上是一种“小众”语言，但其未来的发展前景却是无法估量的，因为它可以解决传统语言很难解决在并行计算中的难题，甚至有专家预言可能成为下一个 Java，在正在迅猛发展的并行计算时代，Erlang将会迅速的崛起。
　　认识Erlang
　　Erlang并非一门新语言，它出现于1987年，只是当时对并发、分布式需求还没有今天这么普遍，当时可谓英雄无用武之地。Erlang语言创始人 Joe Armstrong当年在爱立信做电话网络方面的开发，他使用Smalltalk，可惜那个时候Smalltalk太慢，不能满足电话网络的高性能要求。但Joe实在喜欢Smalltalk，于是定购了一台Tektronix Smalltak机器。但机器要两个月时间才到，Joe在等待中百无聊赖，就开始使用Prolog，结果等Tektronix到来的时候，他已经对 Prolog更感兴趣，Joe当然不满足于精通Prolog，经过一段时间的试验，Joe给Prolog加上了并发处理和错误恢复，于是Erlang就诞生了。这也是为什么Erlang的语法和Prolog有不少相似之处，比如它们的List表达都是[Head &#124; Tail]。
　　1987年Erlang测试版推出，并在用户实际应用中不断完善，于1991年向用户推出第一个版本，带有了编译器和图形接口等更多功能。1992 年，Erlang迎来更多用户，如RACE项目等。同期Erlang被移植到 VxWorks、PC和 Macintosh等多种平台，两个使用 Erlang的产品项目也开始启动。1993爱立信公司内部独立的组织开始维护和支持Erlang实现和 Erlang工具。
　　目前，随着网络应用的兴起，对高并发、分布部署、持续服务的需求增多，Erlang的特性刚好满足这些需求，于是Erlang开始得到更多人的关注。
　　Erlang特性
　　Erlang是一种函数式语言，使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成，并通过消息传递相互通讯。使用Erlang来编写分布式应用比其它语言简单许多，因为它的分布式机制是透明的，即对于程序而言并不知道自己是在分布式运行。Erlang运行环境是一个虚拟机，有点类似于Java虚拟机，代码一经编译，同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果需要更高效的话，字节代码也可以编译成本地代码运行。
Erlang的结构图
　　相较于其它语言，Erlang有很多天生的适应现代网络服务需求的特性:
◆并发性，Erlang具有超强的轻量级进程，这种进程对内存的需求是动态变化的，并且它没有共享内存和通过异步消息传送的通讯。Erlang支持超大量级的并发线程，并且不需要操作系统具有并发机制。
◆分布式，Erlang被设计用于运行在分布式环境下。一个Erlang虚拟机被成为Erlang节点。一个分布式Erlang系统是多个Erlang节点组成的网络（通常每个处理器被作为一个节点）。一个Erlang节点能够创建运行在其它节点上的并行线程，而其它节点可以使用其余的操作系统。线程依赖不同节点之间的通讯，这完全和它依赖于单一节点一样。
◆ 软实时性 Erlang支持可编程的“软”实时系统，这种系统需要反应时间在毫秒级。而在这种系统中，长时间的垃圾收集（garbage collection）延迟是无法接受的，因此Erlang使用了递增式垃圾收集技术。
◆ 热代码升级 一些系统不能由于软件维护而停止运行。Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间，新旧代码是共存的。这也使得安装Bug补丁、在运行系统上升级而不干扰系统操作成为了可能。
◆ 递增式代码装载 用户能够控制代码如何被装载的细节。在嵌入式系统中，所有代码通常是在启动时就被完全装载。而在开发系统中，代码是按需装载的，甚至在系统运行时被装载。如果测试到了未覆盖的Bug，只需替换具有Bug的代码即可。
　　Erlang应用场合
　　未来的计算是并发计算。现今甚至桌面CPU也是多核的，当用户给服务器购买了越来越多的CPU时，他们更期望能最大限度地利用他们的新投资，但是今天的许多软件系统并不能很好地做到这一点。
　　整个软件行业也在发生重大变革，由卖工具软件转向卖服务（软件免费，这也是开源软件兴起的过程），由单纯客户端向B/S或C/S转化，相应的存储和计算向服务器端转移，由原来的PC客户端向客户端多元化（如手机、PDA、电视机顶盒等）转化。这些变革趋势，使得用户可以更方便地访问到服务的同时，服务器也要承受越来越高的负荷，并行/分布的需求逐渐增加。
　　Erlang语言不是用来解决所有问题的语言，至少现在还不是。Erlang最初专门为通信应用设计的，比如控制交换机或者变换协议等，非常适合于构建分布式，实时软并行计算系统。它是一门专注的语言，可以适应现代服务器要求高负荷、高可靠、持续服务的需求。它要解决的问题域包括:高并发、分布式、持续服务、热升级和高可靠等问题。
　　Erlang应用实例
　　典型的Erlang应用是由很多被分配不同任务的“节点(Node)”组成的“集群 (Cluster)”。一个Erlang节点就是一个 Erlang虚拟机的实例，用户可以在一台机器(服务器、台式机或者笔记本)上运行多个节点。 Erlang节点自动跟踪所有连接着的其他节点。要添加一个节点仅仅需要将其指向任何一个已建节点就可以了。只要这两个节点建立了连接，所有其他节点马上就会感应到新加入的节点。Erlang进程使用进程ID向其他进程传递报文，进程ID包含着运行此进程的节点信息。因此进程不需要理会正在与其交流的其他进程实际在何处运行。一组相互连接的Erlang节点可以看作是一个网格计算体或者一台超级计算机。
　Yaws是一个Erlang写的Web服务器。ErLang本身带有一个HTTP Server,叫做inet。Yaws对于inet，就相当于 Servlet对于Http Server。Yaws也可说是一个Web开发框架，Yaws的ehtml类似于jsp、 php、 ruby template。Yaws并发能力是Apache的15倍，有人利用16台集群服务器所做的显示，Yaws可以承受超八万并发活动，Apache在四千就宕机了。
　　Ejabberd也是Erlang很好的应用实例，也是目前可扩展性最好的一种 Jabber/XMPP服务器，支持分布多个服务器，并且具有容错处理，单台服务器失效不影响整个集群运作。Ejabberd基于ErLang+ Mnesia构建，项目已成功发展5年，占据30%左右Jabber服务器市场。
　　Tsung则是多协议分布式压力测试工具,可用于测试Http、Soap、Postgresql和Jabber/XMPP服务器。而Wings则是一个3D建模程序，软件支持Windows、Mac OSX和Linux等操作系统，这两个项目都基于Erlang构建。
Erlang将会成为一个非常重要的语言。如果有了大公司的支持，它甚至可能成为下一个Java。因为它是个开源项目，非常适合多核处理、Web服务等领域。事实上，它也是编写在多核机器上运行的高可靠性系统的唯一成熟语言。
　　Erlang始于20年前，是一个并发性Prolog，Joe Armstrong创造了它。第一个大型Erlang项目是一个由几百人创建的电信交换系统，系统有数百万行代码。系统主要关注的就是可靠性，并且系统有难以置信的可靠性历史。据Joe介绍，“它有99.9999999%的可靠性”。
　　这意味着每10亿秒才有1秒宕机时间，或者说10亿分钟有1分钟宕机时间。十亿秒大概是30年，10亿分钟大概有2000年。99.999%的可靠性大概是每年宕机5分钟，这已经是很好的了。了解可靠性的人都知道，可靠性系统有 99.9999%的，甚至99.99999%的，但是估计没听过有 99.9999999%可靠性的，可基于Erlang的系统实现了。
　　但这还不是令Erlang壮大的理由，因为不是什么人都关注可靠性。也不是因为 Erlang是一个函数式语言，更不是并行Erlang是个面向对象语言。其发展迅速的主要原因是唯一一个有可靠实现和完善类库的成熟的并行开发语言，在不久的将来所有的桌面系统、笔记本电脑都将是多核的，而要让程序在多核上更快的运行就要使程序能充分利用多核处理的能力。
　　Erlang带有一组类库。多数类库是用于构建各类Internet服务的。 Erlang有Web服务器和数据库。Erlang社区认为它是构建可靠Web服务器和Web服务的首选语言。Erlang是一个构建可靠系统的框架/平台，它构建的平台可以持续运行而无需关闭，可以每天更新软件，甚至可以定期的更换硬件。这些特性是电信应用所需要的，它还是在线银行、在线商城等各类在线应用所迫切需要的。
　　Joe Armstrong最近写了本书《Programming.Erlang》,所有关注Erlang的人都值得一读。Erlang符合所有面向对象语言特性，虽然它是个函数式语言，而不是面向对象语言。Erlang区分与面向对象语言的一个方面就是它的错误处理。在某消息出错时，进程不是抛出出错的部分，而是直接进程纠错。系统结构被设计为底部是工作进程（它们可能会失败），上层是管理进程，它们可以重新启动失败的进程。
　　我不相信其它语言能迅速赶上Erlang。对其它语言而言，加入像Erlang这样的语言特征是很容易的。但这将花费他们大量的时间构建一个高质量的 VM和成熟的并发性与可靠性类库。因此Erlang很自然会成功。如果将来要在多核系统上进行开发，Erlang是非常理想的选择。
Erlang在中国
　　目前，Erlang在全球都还是个小众语言，其在中国影响力就更小了，好在有国内的 Erlang爱好者已经组织起来，在进行相关的工作，成立了 Erlang-china.org，发布了部分Erlang相关中文文档，并且组织了两次 Erlang爱好者聚会，Erlang-China.org将继续为对Erlang感兴趣的中文用户提供便利，促进用户彼此之间的交流，推动对这一语言的深入研究，促成一些Erlang开源项目，帮助中文用户为整个 Erlang社区做出贡献。
　　Erlang没有类似Java、C++的语法，它不是面向对象语言，它是函数编程语言 (Functional programming Language)。大量程序员并不熟悉函数式编程，我们的计算机教育里也都是基于面向对象和面向过程语言的，这会是所有想尝试Erlang的用户遇到的首要问题，这会使得培训成本加大，决策人员也需要足够勇气来选择一个新语言来构建应用。
　　另外，Erlang虽然内建了并行、分布的支持，但是程序员还需要学习和掌握并行的思维模式，并行的思维模式也许是更加难以跨越的门槛。
　　要解决计算时代，可伸缩性、容错性以及运行时可更新系统需求，就目前而言，只有 Erlang语言可以很好的解决。Erlang语言也正面临这一场大的变革，从默默无闻走向更多人视野，会向更广的网络应用领域渗透。也许，不久的将来，当你听到Erlang时，就如同听说Java一样平常。
]]></description>
			<content:encoded><![CDATA[<p>提起Erlang语言，相信许多人都会挠头，因为它实在是太陌生了。在2007年6月由TIOBE Programming Community提供的程序语言排名中，Erlang占有率仅为0.08%，排名第49位。与之形成鲜明对比的是，Java以20.025%的占有率高居榜首，紧随其后的是 C（15.967%）、C++（11.118%）、VB （9.332%）、PHP（8.871%）、Perl（6.177%）、C#（3.483%）、 Python（3.161%）、JavaScript （2.616%）和Ruby（2.132%）。相对于传统老牌“大佬”语言相比，Erlang语言绝对算得上是一种“小众”语言，但其未来的发展前景却是无法估量的，因为它可以解决传统语言很难解决在并行计算中的难题，甚至有专家预言可能成为下一个 Java，在正在迅猛发展的并行计算时代，Erlang将会迅速的崛起。</p>
<p>　　认识Erlang</p>
<p>　　Erlang并非一门新语言，它出现于1987年，只是当时对并发、分布式需求还没有今天这么普遍，当时可谓英雄无用武之地。Erlang语言创始人 Joe Armstrong当年在爱立信做电话网络方面的开发，他使用Smalltalk，可惜那个时候Smalltalk太慢，不能满足电话网络的高性能要求。但Joe实在喜欢Smalltalk，于是定购了一台Tektronix Smalltak机器。但机器要两个月时间才到，Joe在等待中百无聊赖，就开始使用Prolog，结果等Tektronix到来的时候，他已经对 Prolog更感兴趣，Joe当然不满足于精通Prolog，经过一段时间的试验，Joe给Prolog加上了并发处理和错误恢复，于是Erlang就诞生了。这也是为什么Erlang的语法和Prolog有不少相似之处，比如它们的List表达都是[Head | Tail]。</p>
<p>　　1987年Erlang测试版推出，并在用户实际应用中不断完善，于1991年向用户推出第一个版本，带有了编译器和图形接口等更多功能。1992 年，Erlang迎来更多用户，如RACE项目等。同期Erlang被移植到 VxWorks、PC和 Macintosh等多种平台，两个使用 Erlang的产品项目也开始启动。1993爱立信公司内部独立的组织开始维护和支持Erlang实现和 Erlang工具。</p>
<p>　　目前，随着网络应用的兴起，对高并发、分布部署、持续服务的需求增多，Erlang的特性刚好满足这些需求，于是Erlang开始得到更多人的关注。</p>
<p>　　Erlang特性</p>
<p>　　Erlang是一种函数式语言，使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成，并通过消息传递相互通讯。使用Erlang来编写分布式应用比其它语言简单许多，因为它的分布式机制是透明的，即对于程序而言并不知道自己是在分布式运行。Erlang运行环境是一个虚拟机，有点类似于Java虚拟机，代码一经编译，同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果需要更高效的话，字节代码也可以编译成本地代码运行。</p>
<p>Erlang的结构图</p>
<p>　　相较于其它语言，Erlang有很多天生的适应现代网络服务需求的特性:</p>
<p>◆并发性，Erlang具有超强的轻量级进程，这种进程对内存的需求是动态变化的，并且它没有共享内存和通过异步消息传送的通讯。Erlang支持超大量级的并发线程，并且不需要操作系统具有并发机制。</p>
<p>◆分布式，Erlang被设计用于运行在分布式环境下。一个Erlang虚拟机被成为Erlang节点。一个分布式Erlang系统是多个Erlang节点组成的网络（通常每个处理器被作为一个节点）。一个Erlang节点能够创建运行在其它节点上的并行线程，而其它节点可以使用其余的操作系统。线程依赖不同节点之间的通讯，这完全和它依赖于单一节点一样。</p>
<p>◆ 软实时性 Erlang支持可编程的“软”实时系统，这种系统需要反应时间在毫秒级。而在这种系统中，长时间的垃圾收集（garbage collection）延迟是无法接受的，因此Erlang使用了递增式垃圾收集技术。</p>
<p>◆ 热代码升级 一些系统不能由于软件维护而停止运行。Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间，新旧代码是共存的。这也使得安装Bug补丁、在运行系统上升级而不干扰系统操作成为了可能。</p>
<p>◆ 递增式代码装载 用户能够控制代码如何被装载的细节。在嵌入式系统中，所有代码通常是在启动时就被完全装载。而在开发系统中，代码是按需装载的，甚至在系统运行时被装载。如果测试到了未覆盖的Bug，只需替换具有Bug的代码即可。</p>
<p>　　Erlang应用场合</p>
<p>　　未来的计算是并发计算。现今甚至桌面CPU也是多核的，当用户给服务器购买了越来越多的CPU时，他们更期望能最大限度地利用他们的新投资，但是今天的许多软件系统并不能很好地做到这一点。</p>
<p>　　整个软件行业也在发生重大变革，由卖工具软件转向卖服务（软件免费，这也是开源软件兴起的过程），由单纯客户端向B/S或C/S转化，相应的存储和计算向服务器端转移，由原来的PC客户端向客户端多元化（如手机、PDA、电视机顶盒等）转化。这些变革趋势，使得用户可以更方便地访问到服务的同时，服务器也要承受越来越高的负荷，并行/分布的需求逐渐增加。</p>
<p>　　Erlang语言不是用来解决所有问题的语言，至少现在还不是。Erlang最初专门为通信应用设计的，比如控制交换机或者变换协议等，非常适合于构建分布式，实时软并行计算系统。它是一门专注的语言，可以适应现代服务器要求高负荷、高可靠、持续服务的需求。它要解决的问题域包括:高并发、分布式、持续服务、热升级和高可靠等问题。</p>
<p>　　Erlang应用实例</p>
<p>　　典型的Erlang应用是由很多被分配不同任务的“节点(Node)”组成的“集群 (Cluster)”。一个Erlang节点就是一个 Erlang虚拟机的实例，用户可以在一台机器(服务器、台式机或者笔记本)上运行多个节点。 Erlang节点自动跟踪所有连接着的其他节点。要添加一个节点仅仅需要将其指向任何一个已建节点就可以了。只要这两个节点建立了连接，所有其他节点马上就会感应到新加入的节点。Erlang进程使用进程ID向其他进程传递报文，进程ID包含着运行此进程的节点信息。因此进程不需要理会正在与其交流的其他进程实际在何处运行。一组相互连接的Erlang节点可以看作是一个网格计算体或者一台超级计算机。</p>
<p>　Yaws是一个Erlang写的Web服务器。ErLang本身带有一个HTTP Server,叫做inet。Yaws对于inet，就相当于 Servlet对于Http Server。Yaws也可说是一个Web开发框架，Yaws的ehtml类似于jsp、 php、 ruby template。Yaws并发能力是Apache的15倍，有人利用16台集群服务器所做的显示，Yaws可以承受超八万并发活动，Apache在四千就宕机了。</p>
<p>　　Ejabberd也是Erlang很好的应用实例，也是目前可扩展性最好的一种 Jabber/XMPP服务器，支持分布多个服务器，并且具有容错处理，单台服务器失效不影响整个集群运作。Ejabberd基于ErLang+ Mnesia构建，项目已成功发展5年，占据30%左右Jabber服务器市场。</p>
<p>　　Tsung则是多协议分布式压力测试工具,可用于测试Http、Soap、Postgresql和Jabber/XMPP服务器。而Wings则是一个3D建模程序，软件支持Windows、Mac OSX和Linux等操作系统，这两个项目都基于Erlang构建。</p>
<p>Erlang将会成为一个非常重要的语言。如果有了大公司的支持，它甚至可能成为下一个Java。因为它是个开源项目，非常适合多核处理、Web服务等领域。事实上，它也是编写在多核机器上运行的高可靠性系统的唯一成熟语言。</p>
<p>　　Erlang始于20年前，是一个并发性Prolog，Joe Armstrong创造了它。第一个大型Erlang项目是一个由几百人创建的电信交换系统，系统有数百万行代码。系统主要关注的就是可靠性，并且系统有难以置信的可靠性历史。据Joe介绍，“它有99.9999999%的可靠性”。</p>
<p>　　这意味着每10亿秒才有1秒宕机时间，或者说10亿分钟有1分钟宕机时间。十亿秒大概是30年，10亿分钟大概有2000年。99.999%的可靠性大概是每年宕机5分钟，这已经是很好的了。了解可靠性的人都知道，可靠性系统有 99.9999%的，甚至99.99999%的，但是估计没听过有 99.9999999%可靠性的，可基于Erlang的系统实现了。</p>
<p>　　但这还不是令Erlang壮大的理由，因为不是什么人都关注可靠性。也不是因为 Erlang是一个函数式语言，更不是并行Erlang是个面向对象语言。其发展迅速的主要原因是唯一一个有可靠实现和完善类库的成熟的并行开发语言，在不久的将来所有的桌面系统、笔记本电脑都将是多核的，而要让程序在多核上更快的运行就要使程序能充分利用多核处理的能力。</p>
<p>　　Erlang带有一组类库。多数类库是用于构建各类Internet服务的。 Erlang有Web服务器和数据库。Erlang社区认为它是构建可靠Web服务器和Web服务的首选语言。Erlang是一个构建可靠系统的框架/平台，它构建的平台可以持续运行而无需关闭，可以每天更新软件，甚至可以定期的更换硬件。这些特性是电信应用所需要的，它还是在线银行、在线商城等各类在线应用所迫切需要的。</p>
<p>　　Joe Armstrong最近写了本书《Programming.Erlang》,所有关注Erlang的人都值得一读。Erlang符合所有面向对象语言特性，虽然它是个函数式语言，而不是面向对象语言。Erlang区分与面向对象语言的一个方面就是它的错误处理。在某消息出错时，进程不是抛出出错的部分，而是直接进程纠错。系统结构被设计为底部是工作进程（它们可能会失败），上层是管理进程，它们可以重新启动失败的进程。</p>
<p>　　我不相信其它语言能迅速赶上Erlang。对其它语言而言，加入像Erlang这样的语言特征是很容易的。但这将花费他们大量的时间构建一个高质量的 VM和成熟的并发性与可靠性类库。因此Erlang很自然会成功。如果将来要在多核系统上进行开发，Erlang是非常理想的选择。</p>
<p>Erlang在中国</p>
<p>　　目前，Erlang在全球都还是个小众语言，其在中国影响力就更小了，好在有国内的 Erlang爱好者已经组织起来，在进行相关的工作，成立了 Erlang-china.org，发布了部分Erlang相关中文文档，并且组织了两次 Erlang爱好者聚会，Erlang-China.org将继续为对Erlang感兴趣的中文用户提供便利，促进用户彼此之间的交流，推动对这一语言的深入研究，促成一些Erlang开源项目，帮助中文用户为整个 Erlang社区做出贡献。</p>
<p>　　Erlang没有类似Java、C++的语法，它不是面向对象语言，它是函数编程语言 (Functional programming Language)。大量程序员并不熟悉函数式编程，我们的计算机教育里也都是基于面向对象和面向过程语言的，这会是所有想尝试Erlang的用户遇到的首要问题，这会使得培训成本加大，决策人员也需要足够勇气来选择一个新语言来构建应用。</p>
<p>　　另外，Erlang虽然内建了并行、分布的支持，但是程序员还需要学习和掌握并行的思维模式，并行的思维模式也许是更加难以跨越的门槛。</p>
<p>　　要解决计算时代，可伸缩性、容错性以及运行时可更新系统需求，就目前而言，只有 Erlang语言可以很好的解决。Erlang语言也正面临这一场大的变革，从默默无闻走向更多人视野，会向更广的网络应用领域渗透。也许，不久的将来，当你听到Erlang时，就如同听说Java一样平常。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=248</wfw:commentRss>
		</item>
		<item>
		<title>Erlang不能错过的盛宴</title>
		<link>http://www.nixuesong.com/blog2/?p=247</link>
		<comments>http://www.nixuesong.com/blog2/?p=247#comments</comments>
		<pubDate>Wed, 18 Feb 2009 06:48:43 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=247</guid>
		<description><![CDATA[作为程序员，我们曾经闻听很多“业界动态”，“技术革新”，曾经接触很多“高手箴言”，“权威推荐”。这些正确与否，都已成过去！
现在，让我们迎接Erlang盛宴！
一、经历
2007年11月在koders.com搜索代码时，发现*.erl格式的源文件，感叹开发语言的花样百出，此时，我觉得erlang是一个丑陋的小家伙，看名字就没有对它提起多少兴趣。
2008年初的时候，公司的项目开发中，我有缘认识了ejabberd，一个采用Erlang开发的开源jabber服务器。我开始为其诱人的特性所倾倒。是时候认真看看Erlang到底什么样了！
2008年4月，通过各种资料的搜集，了解，我决定系统的学习Erlang。
今天，通过4个月的认真学习，我已经熟悉了Erlang，已经在使用Erlang开发项目。作为C++程序员，我不敢妄自使用“熟悉”，“精通”之类的字眼，但是对于Erlang我可以很负责任的说：Erlang很巧，很强大！
二、困惑
面对一个新的事务，我们本性都会充满好奇，可是作为程序员，很多时候对于新的语言我们都充满了抵触：这个新东西值得学习么？它会不会让我抛弃旧爱？它文档丰富么？是不是很难理解？它的前景如何?······相信大家跟我有一样的苦恼。
但是，请听我说！我们是程序员，我们走在技术革新的最前沿。用户的产品，体验是通过我们来产生！我们不能畏缩不前，我们的固步自封，就是我们的公司，乃至整个行业的停滞不前！口号可能有些响亮，但是认真思考，我相信朋友们一定有所感悟。
三、Erlang是什么
Erlang是什么是我们最先要面对的问题，只有清楚了它是什么，我们才能做出我们的决定。可见这个问题的重要性，它决定了很多读者是否会继续看下去！非常紧张。
Erlang最初是爱立信为开发电信相关产品而产生。
Erlang是一种面向并发(Concurrency Oriented)，面向消息（Message Oriented）的函数式(Functional)编程语言。
面向并发说明Erlang支持大规模的并发应用，我们可以在应用中处理成千上万的并发，而不相互影响。面向消息，其实是为并发服务！我们应该都熟悉多线程，熟悉加锁解锁操作，熟悉可能出现的资源竞争与死锁。在Erlang的世界里，我们可以将轻轻的抹去这些令人苦恼的词汇。Erlang的世界，每个处理都是独立的个体，他们之间的交互仅仅靠消息！因此不会有死锁，不会有那种痛苦的编程经历。
Erlang中一个非常重要的名词：Process，也就是我们前面提到的“个体”。它不是我们操作系统中的进程，也不是线程。它是Erlang提供给我们的超级轻量的进程。为了适应大规模并发的特性，Process需要能够快速创建，快速销毁。Process之间通信的唯一方法就是消息，我们只要知道一个Process的名字即pid，就可以向其发送消息。Process也可以在任何时候，接收消息。我们这样做只有一个目的：让我们的系统更加简单，用一种朴素的做法，实现一个高效的语言。
Erlang是种函数式编程语言，对此我没有很深刻的理解，最明显的特征就是，Erlang中到处都是函数，函数构成了我们的产品的主体，把这些函数放到一个个的Process中去，让他们运行起来，那么就组成了我们朝气蓬勃的产品。
Erlang支持对数据的位操作，拥有丰富的数据持久化机制。
同时需要说明的是Erlang内建垃圾回收机制（GC）。
四、Erlang的语言特性
1.简单小巧
Erlang中只有8种基本的数据类型：
integer、float、atom、reference、fun、port、pid、bitstring
同时提供2种复合结构：tuple，list，这就是Erlang的所有数据类型。
2.模式匹配
在Erlang的函数中，某些语法中，我们可以使用Pattern匹配，这是一个非常好的特性，我们可以让代码自己去决定如何执行 ：
比如，我们定义一个函数，其告诉我们某种水果的价格:
price(apple) -> 2.0;
price(banana) -> 1.2.
我们随后调用 price(Fruit)，会根据Fruit变量的内容返回具体的价格。这样做的好处就是节省了我们的代码量，我们不用if&#8230;else…或者switch…case的来伺候了。也便于代码的扩展：加一个新的水果品种，我们只需要加一行就可以了。
学习Erlang一个非常重要的内容就是模式匹配，但是请不要混淆，这个匹配和正则表达式没有任何干系。
3.变量单次赋值
这个是一个匪夷所思的特性，变量竟然只能单次赋值！是的Erlang中变量一旦绑定某个数值以后，就不能再次绑定，这样做的好处是便于调试出错（更深层次的原因是Erlang为并发设计，如果变量可以修改，那么就涉及到资源的加锁解锁等问题），当发生错误时，某个变量是什么就永远是什么，不用顺藤摸瓜的查找谁修改过它，省了好多事情。唯一的麻烦就是需要一个信的变量时，你必须再为它想一个名字。
4.丰富的libs
Erlang中提供丰富的libs
stdlib中包含大量的数据结构如lists，array，dict，gb_sets，gb_trees，ets，dets等
mnesia提供一个分布式的数据库系统
inets提供ftp client，http client/server，tftp client/server
crypto 提供加密解密相关函数，基于openssl相关实现
ssl 实现加密socket通信，基于openssl实现
ssh 实现ssh协议
xmerl 实现XML相关解析
snmp 实现SNMP协议（Simple Network Management Protocol）
observer 用来分析与追踪分布式应用
odbc 使Erlang可以连接基于SQL的数据库
orber 实现CORBA对象请求代理服务
os_mon 提供对操作系统的监控功能
dialyzer提供一个静态的代码或程序分析工具
edoc 依据源文件生成文档
gs 可以为我们提供某些GUI的功能（基于Tcl/Tk）
…
还有很多朋友提供了一些开源的lib，比如eunit，用来进行单元测试。
5.灵活多样的错误处理
Erlang最初为电信产品的开发，这样的目的，决定了其对错误处理的严格要求。Erlang中提供一般语言所提供的exception，catch，try…catch等语法，同时Erlang支持Link和Monitor两种机制，我们可以将Process连接起来，让他们组成一个整体，某个Process出错，或推出时，其他Process都具有得知其推出的能力。而Monitor顾名思义，可以用来监控某个Process，判断其是否退出或出错。所有的这些Erlang都提供内在支持，我们快速的开发坚固的产品，不在是奢望。
6.代码热替换
你的产品想不间断的更新么？Erlang可以满足你这个需求，Erlang会在运行时自动将旧的模块进行替换。一切都静悄悄。
7.天生的分布式
Erlang天生适合分布式应用开发，其很多的BIF（内建函数，相API）都具有分布式版本，我们可以通过BIF在远程机器上创建Process，可以向远程机器上的某个Process发送消息。在分布式应用的开发中，我们可以像C、C＋＋，JAVA等语言一样，通过Socket进行通讯，也可以使用Erlang内嵌的基于Cookie的分布式架构，进行开发。当然也可以两者混合。分布式开发更加方便，快速。Erlang的Process的操作，Error的处理等都对支持分布式操作。
8.超强的并发性
由于采用其自身Process，而没有采用操作系统的进程和线程，我们可以创建大规模的并发处理，同时还简化了我们的编程复杂度。我们可以通过几十行代码实现一个并发的TCP服务器，这在其他语言中都想都不敢想！
9.多核支持
Erlang让您的应用支持多个处理器，您不需要为不同的硬件系统做不同的开发。采用Erlang将最大限度的发挥你的机器性能。
10.跨平台
如同JAVA一样，Erlang支持跨平台（其目前支持linux，mac，windows等19种平台），不用为代码的移植而头疼。
我们仅仅需要了解平台的一些特性，对运行时进行优化。
11.开源
开源是我非常喜欢的一个词汇，开源意味这更加强壮，更加公开，更加的追求平等。开源会让Erlang更好。
五、Erlang与外界的交互
Erlang可以与其他的语言进行交互，如C、C＋＋，Java。当然也有热心的朋友提供了与其他语言的交互，如果需要你也可以根据Erlang的数据格式，提供一个库，让Erang与您心爱的语言交互。
Erlang支持分布式开发，您可以创建一个C Node，其如同一个Erlang节点，前提是你遵照Erlang的规范。
当然最常用的交互还是再同一个Node上，比如我们要调用某个lib，调用一些系统提供的功能，这时候主要有两种方式：Port和嵌入式执行。
Port是Erlang最基本的与外界交互的方式，进行交互的双方通过编码，解码，将信息以字节流的方式进行传递。（具体这个通道的实现方式，根据操作系统的不同而不同，比如unix环境下，采用PIPE实现，理论上任何支持对应Port通道实现的语言都可以与Erlang进行交互）。Erlang为了方便C和JAVA程序员，提供了Erl_Interface和Jinterface。
采用Port，您的代码在Erlang的平台之外运行，其崩溃不会影响Erlang。
嵌入式执行，通过Erlang平台加载，因此这是非常危险的，如果您的程序崩溃，没有任何理由，Erlang也会崩溃。
六、Erlang应用场景
分布式产品，网络服务器，客户端，等各种应用环境。
Erlang也可以作为一种快速开发语言，进行原型开发。
七、Erlang的学习过程
1.         安装首先从Erlang官方网站，下载安装Erlang（http://www.erlang.org/download.html）
linux：获取源代码，根据说明编译；windows：直接安装
2.         认真阅读《programming erlang》（中文版图书已经问世），并不断动手练习书中的例程。
3.         遇到问题时，不要退却，坚持下去找到解决办法
4. [...]]]></description>
			<content:encoded><![CDATA[<p>作为程序员，我们曾经闻听很多“业界动态”，“技术革新”，曾经接触很多“高手箴言”，“权威推荐”。这些正确与否，都已成过去！</p>
<p>现在，让我们迎接Erlang盛宴！<br />
一、经历</p>
<p>2007年11月在koders.com搜索代码时，发现*.erl格式的源文件，感叹开发语言的花样百出，此时，我觉得erlang是一个丑陋的小家伙，看名字就没有对它提起多少兴趣。</p>
<p>2008年初的时候，公司的项目开发中，我有缘认识了ejabberd，一个采用Erlang开发的开源jabber服务器。我开始为其诱人的特性所倾倒。是时候认真看看Erlang到底什么样了！</p>
<p>2008年4月，通过各种资料的搜集，了解，我决定系统的学习Erlang。</p>
<p>今天，通过4个月的认真学习，我已经熟悉了Erlang，已经在使用Erlang开发项目。作为C++程序员，我不敢妄自使用“熟悉”，“精通”之类的字眼，但是对于Erlang我可以很负责任的说：Erlang很巧，很强大！<br />
二、困惑</p>
<p>面对一个新的事务，我们本性都会充满好奇，可是作为程序员，很多时候对于新的语言我们都充满了抵触：这个新东西值得学习么？它会不会让我抛弃旧爱？它文档丰富么？是不是很难理解？它的前景如何?······相信大家跟我有一样的苦恼。</p>
<p>但是，请听我说！我们是程序员，我们走在技术革新的最前沿。用户的产品，体验是通过我们来产生！我们不能畏缩不前，我们的固步自封，就是我们的公司，乃至整个行业的停滞不前！口号可能有些响亮，但是认真思考，我相信朋友们一定有所感悟。<br />
三、Erlang是什么</p>
<p>Erlang是什么是我们最先要面对的问题，只有清楚了它是什么，我们才能做出我们的决定。可见这个问题的重要性，它决定了很多读者是否会继续看下去！非常紧张。</p>
<p>Erlang最初是爱立信为开发电信相关产品而产生。</p>
<p>Erlang是一种面向并发(Concurrency Oriented)，面向消息（Message Oriented）的函数式(Functional)编程语言。</p>
<p>面向并发说明Erlang支持大规模的并发应用，我们可以在应用中处理成千上万的并发，而不相互影响。面向消息，其实是为并发服务！我们应该都熟悉多线程，熟悉加锁解锁操作，熟悉可能出现的资源竞争与死锁。在Erlang的世界里，我们可以将轻轻的抹去这些令人苦恼的词汇。Erlang的世界，每个处理都是独立的个体，他们之间的交互仅仅靠消息！因此不会有死锁，不会有那种痛苦的编程经历。</p>
<p>Erlang中一个非常重要的名词：Process，也就是我们前面提到的“个体”。它不是我们操作系统中的进程，也不是线程。它是Erlang提供给我们的超级轻量的进程。为了适应大规模并发的特性，Process需要能够快速创建，快速销毁。Process之间通信的唯一方法就是消息，我们只要知道一个Process的名字即pid，就可以向其发送消息。Process也可以在任何时候，接收消息。我们这样做只有一个目的：让我们的系统更加简单，用一种朴素的做法，实现一个高效的语言。</p>
<p>Erlang是种函数式编程语言，对此我没有很深刻的理解，最明显的特征就是，Erlang中到处都是函数，函数构成了我们的产品的主体，把这些函数放到一个个的Process中去，让他们运行起来，那么就组成了我们朝气蓬勃的产品。</p>
<p>Erlang支持对数据的位操作，拥有丰富的数据持久化机制。</p>
<p>同时需要说明的是Erlang内建垃圾回收机制（GC）。<br />
四、Erlang的语言特性<br />
1.简单小巧</p>
<p>Erlang中只有8种基本的数据类型：</p>
<p>integer、float、atom、reference、fun、port、pid、bitstring</p>
<p>同时提供2种复合结构：tuple，list，这就是Erlang的所有数据类型。<br />
2.模式匹配</p>
<p>在Erlang的函数中，某些语法中，我们可以使用Pattern匹配，这是一个非常好的特性，我们可以让代码自己去决定如何执行 ：</p>
<p>比如，我们定义一个函数，其告诉我们某种水果的价格:</p>
<p>price(apple) -> 2.0;</p>
<p>price(banana) -> 1.2.</p>
<p>我们随后调用 price(Fruit)，会根据Fruit变量的内容返回具体的价格。这样做的好处就是节省了我们的代码量，我们不用if&#8230;else…或者switch…case的来伺候了。也便于代码的扩展：加一个新的水果品种，我们只需要加一行就可以了。</p>
<p>学习Erlang一个非常重要的内容就是模式匹配，但是请不要混淆，这个匹配和正则表达式没有任何干系。<br />
3.变量单次赋值</p>
<p>这个是一个匪夷所思的特性，变量竟然只能单次赋值！是的Erlang中变量一旦绑定某个数值以后，就不能再次绑定，这样做的好处是便于调试出错（更深层次的原因是Erlang为并发设计，如果变量可以修改，那么就涉及到资源的加锁解锁等问题），当发生错误时，某个变量是什么就永远是什么，不用顺藤摸瓜的查找谁修改过它，省了好多事情。唯一的麻烦就是需要一个信的变量时，你必须再为它想一个名字。<br />
4.丰富的libs</p>
<p>Erlang中提供丰富的libs</p>
<p>stdlib中包含大量的数据结构如lists，array，dict，gb_sets，gb_trees，ets，dets等</p>
<p>mnesia提供一个分布式的数据库系统</p>
<p>inets提供ftp client，http client/server，tftp client/server</p>
<p>crypto 提供加密解密相关函数，基于openssl相关实现</p>
<p>ssl 实现加密socket通信，基于openssl实现</p>
<p>ssh 实现ssh协议</p>
<p>xmerl 实现XML相关解析</p>
<p>snmp 实现SNMP协议（Simple Network Management Protocol）</p>
<p>observer 用来分析与追踪分布式应用</p>
<p>odbc 使Erlang可以连接基于SQL的数据库</p>
<p>orber 实现CORBA对象请求代理服务</p>
<p>os_mon 提供对操作系统的监控功能</p>
<p>dialyzer提供一个静态的代码或程序分析工具</p>
<p>edoc 依据源文件生成文档</p>
<p>gs 可以为我们提供某些GUI的功能（基于Tcl/Tk）</p>
<p>…</p>
<p>还有很多朋友提供了一些开源的lib，比如eunit，用来进行单元测试。<br />
5.灵活多样的错误处理</p>
<p>Erlang最初为电信产品的开发，这样的目的，决定了其对错误处理的严格要求。Erlang中提供一般语言所提供的exception，catch，try…catch等语法，同时Erlang支持Link和Monitor两种机制，我们可以将Process连接起来，让他们组成一个整体，某个Process出错，或推出时，其他Process都具有得知其推出的能力。而Monitor顾名思义，可以用来监控某个Process，判断其是否退出或出错。所有的这些Erlang都提供内在支持，我们快速的开发坚固的产品，不在是奢望。<br />
6.代码热替换</p>
<p>你的产品想不间断的更新么？Erlang可以满足你这个需求，Erlang会在运行时自动将旧的模块进行替换。一切都静悄悄。<br />
7.天生的分布式</p>
<p>Erlang天生适合分布式应用开发，其很多的BIF（内建函数，相API）都具有分布式版本，我们可以通过BIF在远程机器上创建Process，可以向远程机器上的某个Process发送消息。在分布式应用的开发中，我们可以像C、C＋＋，JAVA等语言一样，通过Socket进行通讯，也可以使用Erlang内嵌的基于Cookie的分布式架构，进行开发。当然也可以两者混合。分布式开发更加方便，快速。Erlang的Process的操作，Error的处理等都对支持分布式操作。<br />
8.超强的并发性</p>
<p>由于采用其自身Process，而没有采用操作系统的进程和线程，我们可以创建大规模的并发处理，同时还简化了我们的编程复杂度。我们可以通过几十行代码实现一个并发的TCP服务器，这在其他语言中都想都不敢想！<br />
9.多核支持</p>
<p>Erlang让您的应用支持多个处理器，您不需要为不同的硬件系统做不同的开发。采用Erlang将最大限度的发挥你的机器性能。<br />
10.跨平台</p>
<p>如同JAVA一样，Erlang支持跨平台（其目前支持linux，mac，windows等19种平台），不用为代码的移植而头疼。</p>
<p>我们仅仅需要了解平台的一些特性，对运行时进行优化。<br />
11.开源</p>
<p>开源是我非常喜欢的一个词汇，开源意味这更加强壮，更加公开，更加的追求平等。开源会让Erlang更好。<br />
五、Erlang与外界的交互</p>
<p>Erlang可以与其他的语言进行交互，如C、C＋＋，Java。当然也有热心的朋友提供了与其他语言的交互，如果需要你也可以根据Erlang的数据格式，提供一个库，让Erang与您心爱的语言交互。</p>
<p>Erlang支持分布式开发，您可以创建一个C Node，其如同一个Erlang节点，前提是你遵照Erlang的规范。</p>
<p>当然最常用的交互还是再同一个Node上，比如我们要调用某个lib，调用一些系统提供的功能，这时候主要有两种方式：Port和嵌入式执行。</p>
<p>Port是Erlang最基本的与外界交互的方式，进行交互的双方通过编码，解码，将信息以字节流的方式进行传递。（具体这个通道的实现方式，根据操作系统的不同而不同，比如unix环境下，采用PIPE实现，理论上任何支持对应Port通道实现的语言都可以与Erlang进行交互）。Erlang为了方便C和JAVA程序员，提供了Erl_Interface和Jinterface。</p>
<p>采用Port，您的代码在Erlang的平台之外运行，其崩溃不会影响Erlang。</p>
<p>嵌入式执行，通过Erlang平台加载，因此这是非常危险的，如果您的程序崩溃，没有任何理由，Erlang也会崩溃。<br />
六、Erlang应用场景</p>
<p>分布式产品，网络服务器，客户端，等各种应用环境。</p>
<p>Erlang也可以作为一种快速开发语言，进行原型开发。<br />
七、Erlang的学习过程</p>
<p><!--[if !supportLists]-->1.         <!--[endif]-->安装首先从Erlang官方网站，下载安装Erlang（http://www.erlang.org/download.html）</p>
<p>linux：获取源代码，根据说明编译；windows：直接安装</p>
<p><!--[if !supportLists]-->2.         <!--[endif]-->认真阅读《programming erlang》（中文版图书已经问世），并不断动手练习书中的例程。</p>
<p><!--[if !supportLists]-->3.         <!--[endif]-->遇到问题时，不要退却，坚持下去找到解决办法</p>
<p><!--[if !supportLists]-->4.         <!--[endif]-->对语言熟悉时，浏览一些好的开源项目</p>
<p><!--[if !supportLists]-->5.         <!--[endif]-->有信心时，开始动手做一个小项目</p>
<p><!--[if !supportLists]-->6.         <!--[endif]-->不间断的与大家交流，共同提高</p>
<p>可能遇到的困难：</p>
<p><!--[if !supportLists]-->a)         <!--[endif]-->对于语法的不适应？</p>
<p>坚持看下去，代码继续写下去，我相信1个月，你会喜欢上Erlang的语法</p>
<p><!--[if !supportLists]-->b)        <!--[endif]-->有些数据类型不清楚？</p>
<p>认真看资料，或者询问朋友，比如我</p>
<p><!--[if !supportLists]-->c)         <!--[endif]-->中文资料的缺乏？</p>
<p>Erlang中文的资料会越来越多，此外，Erlang的相关的英文资料也比较容易理解，还是那句话，别怕麻烦<br />
八、Erlang开源项目</p>
<p>排名不分先后</p>
<p>    * couchdb     基于文档等非结构化数据的数据库，提供HTTP接口</p>
<p>    * disco       Map-Reduce框架，Erlang + Python</p>
<p>    * ejabberd    性能出众，使用广泛的Jabber开源服务器</p>
<p>    * mochiweb    轻便，高效的HTTP应用框架</p>
<p>    * rabbitmq    中间服务器，实现AMQP协议</p>
<p>    * yaws        高效的web server</p>
<p>    * etorrent    Bittorrent客户端<br />
    * scalaris      分布式的key-value存储</p>
<p>九、遇到问题</p>
<p>参看Erlang官方文档 http://www.erlang.org/doc/</p>
<p>订阅Erlang的maillist（http://www.erlang.org/mailman/listinfo/erlang-questions），进行提问</p>
<p>在Nabble提供的Erlang maillist存档中搜索（http://www.nabble.com/Erlang-f14095.html）</p>
<p>Google中搜索答案<br />
十、推荐阅读</p>
<p>Erlang Design Principles （http://www.erlang.org/doc/design_principles/part_frame.html）</p>
<p>Erlang Efficiency Guide （http://www.erlang.org/doc/efficiency_guide/part_frame.html）</p>
<p>Erlang Programming Rules （http://www.erlang.se/doc/programming_rules.shtml）<br />
十一、推荐网站</p>
<p>http://www.erlang.org</p>
<p>http://erlang-china.org</p>
<p>http://trapexit.org （国内封锁，可以使用http://trapexit.org.nyud.net:8080/ 或其他代理登录）</p>
<p>http://toquick.com</p>
<p>http://blog.socklabs.com/</p>
<p>http://www.planeterlang.org/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=247</wfw:commentRss>
		</item>
		<item>
		<title>Hadoop介绍</title>
		<link>http://www.nixuesong.com/blog2/?p=246</link>
		<comments>http://www.nixuesong.com/blog2/?p=246#comments</comments>
		<pubDate>Wed, 18 Feb 2009 03:09:22 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=246</guid>
		<description><![CDATA[类似Google构架的开源项目Hadoop 已经存在一年多了，现在正受到来自开发社区的广泛关注。下面是来自Hadoop官网 的消息：
    Hadoop是一个软件平台，可以让你很容易地开发和运行处理海量数据的应用……Hadoop是MapReduce 的实现，它使用了Hadoop分布式文件系统（HDFS）。MapReduce将应用切分为许多小任务块去执行。出于保证可靠性的考虑，HDFS会为数据块创建多个副本，并放置在群的计算节点中，MapReduce就在数据副本存放的地方进行处理……
Hadoop是由Java编写的，该项目已到得Yahoo的全面支持，项目的领袖Doug Cutting从2006年一月开始已经被Yahoo全职雇用于此项目中。华盛顿大学也从那时开始了一个以Hadoop为基础的分布式计算的课程，课程相关的材料也已发布 在Google Code了，以满足那些对这项技术感兴趣的开发者们。
最近，Yahoo的Jeremy Zawodny提供了 一个Hadoop的状态更新：
    在过去的几年里，每家参与建立大规模Web系统的公司都面临着一些相同的基础性挑战……底层架构从来都是一个挑战。你不得不去购买、并大量安装和管理众多的服务器，即使你使用的是其他人提供的商业硬件平台，你也不得不开发软件对这些任务进行分治处理，并让其保持运行……要建立一个必要的软件基础结构，我们可以放弃开发自己的技术，这可以认为是一项竞争优势，先赚到钱再说。但我们已经选择了一条稍有不同的路，当认识到有越来越多的公司和组织的需求都很相似的时候，我们发现了Doug Cutting（开源项目Nutch和Lucene的开创者）的工作，于是我们邀请他加入Yahoo，在新的开源项目Hadoop上继续工作。
Zawodny去年一直工作于提供数据排序的基准评测，在测试中，每一个节点都对相同总和的输入数量进行排序。假如有20个节点，每个节点有100条记录，那么就有2000个记录需要排序；当有100个节点时，每个节点有100条记录，那就总共有10000条记录。下面是最近的评测结果：
日期
	节点数
	耗时（小时）
四月 	2006 	188 	47.9
五月 	2006 	500 	42.0
十一月 	2006 	20 	1.8
十一月 	2006 	100 	3.3
十一月 	2006 	500 	5.2
十一月 	2006 	900 	7.8
七月
	2007 	20 	1.2
七月 	2007 	100 	1.3
七月 	2007 	500 	2.0
七月 	2007 	900 	2.5
Tim O&#8217;Reilly找出了 Zawodny所发的帖子，并从中发现了来自于Yahoo的高层支持：
    ……Yahoo! 已经在一月聘用了Hadoop的创始人Doug Cutting，但Doug在开源大会上的谈论 [...]]]></description>
			<content:encoded><![CDATA[<p>类似Google构架的开源项目Hadoop 已经存在一年多了，现在正受到来自开发社区的广泛关注。下面是来自Hadoop官网 的消息：</p>
<p>    Hadoop是一个软件平台，可以让你很容易地开发和运行处理海量数据的应用……Hadoop是MapReduce 的实现，它使用了Hadoop分布式文件系统（HDFS）。MapReduce将应用切分为许多小任务块去执行。出于保证可靠性的考虑，HDFS会为数据块创建多个副本，并放置在群的计算节点中，MapReduce就在数据副本存放的地方进行处理……</p>
<p>Hadoop是由Java编写的，该项目已到得Yahoo的全面支持，项目的领袖Doug Cutting从2006年一月开始已经被Yahoo全职雇用于此项目中。华盛顿大学也从那时开始了一个以Hadoop为基础的分布式计算的课程，课程相关的材料也已发布 在Google Code了，以满足那些对这项技术感兴趣的开发者们。<br />
最近，Yahoo的Jeremy Zawodny提供了 一个Hadoop的状态更新：</p>
<p>    在过去的几年里，每家参与建立大规模Web系统的公司都面临着一些相同的基础性挑战……底层架构从来都是一个挑战。你不得不去购买、并大量安装和管理众多的服务器，即使你使用的是其他人提供的商业硬件平台，你也不得不开发软件对这些任务进行分治处理，并让其保持运行……要建立一个必要的软件基础结构，我们可以放弃开发自己的技术，这可以认为是一项竞争优势，先赚到钱再说。但我们已经选择了一条稍有不同的路，当认识到有越来越多的公司和组织的需求都很相似的时候，我们发现了Doug Cutting（开源项目Nutch和Lucene的开创者）的工作，于是我们邀请他加入Yahoo，在新的开源项目Hadoop上继续工作。</p>
<p>Zawodny去年一直工作于提供数据排序的基准评测，在测试中，每一个节点都对相同总和的输入数量进行排序。假如有20个节点，每个节点有100条记录，那么就有2000个记录需要排序；当有100个节点时，每个节点有100条记录，那就总共有10000条记录。下面是最近的评测结果：</p>
<p>日期<br />
	节点数<br />
	耗时（小时）<br />
四月 	2006 	188 	47.9<br />
五月 	2006 	500 	42.0<br />
十一月 	2006 	20 	1.8<br />
十一月 	2006 	100 	3.3<br />
十一月 	2006 	500 	5.2<br />
十一月 	2006 	900 	7.8<br />
七月<br />
	2007 	20 	1.2<br />
七月 	2007 	100 	1.3<br />
七月 	2007 	500 	2.0<br />
七月 	2007 	900 	2.5</p>
<p>Tim O&#8217;Reilly找出了 Zawodny所发的帖子，并从中发现了来自于Yahoo的高层支持：</p>
<p>    ……Yahoo! 已经在一月聘用了Hadoop的创始人Doug Cutting，但Doug在开源大会上的谈论 ，更像是Hadoop的发布会，Yahoo! 也想以此表明Hadoop项目对他们来讲有多么重要。实际上，我还接到David Filo打来的电话，他想确认我是否知道这种支持来自于高层……<br />
    …… 为什么Yahoo! 的参与这么重要？首先，这预示一个搜索界第二大的公司认识到开源是在Web 2.0上与一个占统治地位的对手进行竞争的强大武器……支持Hadoop和其它Apache项目不仅仅只是让Yahoo深入到他们可以使用的开源软件项目中，更会帮助他们恢复在极客（geek）心中的形象……其次，或是同样重要的是，Yahoo! 给了Hadoop一个机会进行规模方面的测试……</p>
<p>John Munsh用一句话总结了 Yahoo的参与：“Hadoop和‘非我发明症（Not-Invented-Here Syndrome）’之反例”。（译者注：John Munsh在这里用“非我发明症”来指Microsoft那种不愿意接受任何协议，标准，或是其他公司开发的软件的态度。它认为不是自己创造的东西就是不值得信任的。而Yahoo! 却基于竞争对手Google的MapReduce来构造自己的应用，所以这里说是“非我发明症”之反例。）</p>
<p>微软的Sriram Krishnan则从那些 转到类似Hadoop和Amazon EC2这种针对大规模应用并在不断发展的解决方案的创业者和开发人员所面对的问题的角度，对Hadoop提出了反对意见：</p>
<p>    Web 2.0的主要价值来自于由众多用户生成的数据，如del.ico.us、Digg、Facebook……它已经超越了任何个人运行大规模的服务器软件的商业意义，如Gmail、Google Search、Live、Y! Search……放荡不羁的极客们根本就不会去碰那些大规模blob存储（S3，Google文件系统），大规模结构化存储(Google的 Bigtable），还有在这种微架构之上运行代码的工具（MapReduct，Dryad）等等……我也不知道Doug Cutting的这种类似的开源产物在这条路上已经走了多远——也许这就是答案吧……</p>
<p>查看英文原文：Open Source Google-Like Infrastructure Project Hadoop Gains Momentum</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=246</wfw:commentRss>
		</item>
		<item>
		<title>ejabberd集群安装和配置</title>
		<link>http://www.nixuesong.com/blog2/?p=245</link>
		<comments>http://www.nixuesong.com/blog2/?p=245#comments</comments>
		<pubDate>Wed, 18 Feb 2009 02:56:22 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=245</guid>
		<description><![CDATA[(1)安装erlang.下载otp_src_R11B-3.tar.gz文件，解压，命令tar xvzf  otp_src_R11B-3.tar.gz ，cd otp_src_R11B-3，进入otp_src_R11B-3目录后依次执行1）./configure 2）make 3）make install 命令。
(2) 安装ejabberd.从下载ejabberd-1.1.3.tar文件，解压，命令tar xvf ejabberd-1.1.3.tar, cd ejabberd-1.1.3，cd src进入src目录后依次执行1）./configure 2）make  3）make install 命令。
(3) 配置ejabberd。
1）所需的配置文件及目录。配置文件：/etc/ejabberd/ejabberd.cfg   日志目录：/var/log/ejabberd/  域名文件：/root/.hosts.erlang(若没有手动创建) Cookie文件：/root/.erlang.cookie(若没有手动创建)。
2）修改ejabberd.cfg文件。%Hosts name 项中”localhost” 改成本机的域名如test.test.com。3）在/root/.hosts.erlang文件填入本机域名，如：test.test.com.(注意结尾要有“.”),设置服务器的cookie信息，随意设置，但是如配置集群，则需要各个服务器的cookie一致。如：TRHCGTSWFLCBVPMVJYYR。
3)启动ssl加密：
cd /etc/ejabberd
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem
openssl rsa -in privkey.pem -out privkey.pem
cat privkey.pem >> server.pem
rm privkey.pem
Now edit your ejabberd.cfg [...]]]></description>
			<content:encoded><![CDATA[<p>(1)安装erlang.下载otp_src_R11B-3.tar.gz文件，解压，命令tar xvzf  otp_src_R11B-3.tar.gz ，cd otp_src_R11B-3，进入otp_src_R11B-3目录后依次执行1）./configure 2）make 3）make install 命令。</p>
<p>(2) 安装ejabberd.从下载ejabberd-1.1.3.tar文件，解压，命令tar xvf ejabberd-1.1.3.tar, cd ejabberd-1.1.3，cd src进入src目录后依次执行1）./configure 2）make  3）make install 命令。</p>
<p>(3) 配置ejabberd。</p>
<p>1）所需的配置文件及目录。配置文件：/etc/ejabberd/ejabberd.cfg   日志目录：/var/log/ejabberd/  域名文件：/root/.hosts.erlang(若没有手动创建) Cookie文件：/root/.erlang.cookie(若没有手动创建)。</p>
<p>2）修改ejabberd.cfg文件。%Hosts name 项中”localhost” 改成本机的域名如test.test.com。3）在/root/.hosts.erlang文件填入本机域名，如：test.test.com.(注意结尾要有“.”),设置服务器的cookie信息，随意设置，但是如配置集群，则需要各个服务器的cookie一致。如：TRHCGTSWFLCBVPMVJYYR。</p>
<p>3)启动ssl加密：</p>
<p>cd /etc/ejabberd</p>
<p>openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem</p>
<p>openssl rsa -in privkey.pem -out privkey.pem</p>
<p>cat privkey.pem >> server.pem</p>
<p>rm privkey.pem</p>
<p>Now edit your ejabberd.cfg file and specify the correct location of your server.pem:</p>
<p>{listen, [{5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper},</p>
<p>starttls, {certfile, "/etc/ejabberd/server.pem"}]},</p>
<p>{5223, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper},</p>
<p>ssl, {certfile, "/etc/ejabberd/server.pem"}]},</p>
<p>(4)启动ejabberd.</p>
<p>erl -pa /var/lib/ejabberd/ebin \</p>
<p>      -name ejabberd@first\</p>
<p>      -s ejabberd \</p>
<p>      -ejabberd config \&#8221;/etc/ejabberd/ejabberd.cfg\&#8221; \</p>
<p>                log_path \&#8221;/var/log/ejabberd/ejabberd.log\&#8221; \</p>
<p>    -sasl sasl_error_logger \{file,\&#8221;/var/log/ejabberd/sasl.log\&#8221;\} \</p>
<p>      -mnesia dir \&#8221;/var/lib/ejabberd/spool\&#8221;</p>
<p>(5)配置集群。（假设主服务器为域名first,次服务器域名为second）</p>
<p>1)second服务器上的/root/.erlang.cookie文件内容要与first上的一致。</p>
<p>2)second服务器上的ejabberd.cfg文件修改域名为</p>
<p>{hosts, ["second","first"]}</p>
<p>3)在second上运行erl -name ejabberd@second -mnesia extra_db_nodes &#8220;['ejabberd@first']&#8221; -s mnesia</p>
<p>4)在second上检查共享是否成功。命令mnesia:info(). (注意要有“.” 才能执行)</p>
<p>如出现running db nodes = [ejabberd@first,ejabberd@second就说明共享成功，在用nodes()验证是否与first相连。正确相连则显示ejabberd@first</p>
<p>5)在second服务器上运行mnesia:change_table_copy_type(schema, node(), disc_copies). （注意有“.”才能运行）拷贝数据库表。</p>
<p>6) mnesia:add_table_copy(acl,node(),disc_copies). （注意有“.”才能运行）拷贝acl表。</p>
<p>7)退出q().（注意有“.”才能运行）</p>
<p>8)在second重新启动ejabberd. </p>
<p>erl -pa /var/lib/ejabberd/ebin      \</p>
<p> -name ejabberd@second  \</p>
<p> -s ejabberd      \</p>
<p> -ejabberd config \"/etc/ejabberd/ejabberd.cfg\" \         </p>
<p> log_path \"/var/log/ejabberd/ejabberd.log\"     \ </p>
<p> -sasl sasl_error_logger \{file,\"/var/log/ejabberd/sasl.log\"\}备注：用户实际操秩序更改服务器域名。</p>
<p>方法2：集群设置成同一个域名的</p>
<p>(1)      修改% Host name:时做如下修改{hosts, ["first(或者 second)"，"xxxx.xxxx.com"]}.其他服务器与此方法相同。</p>
<p>(2)      其他与上面的方法相同。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=245</wfw:commentRss>
		</item>
		<item>
		<title>Jabber 服务器占有率比较(ZT)</title>
		<link>http://www.nixuesong.com/blog2/?p=244</link>
		<comments>http://www.nixuesong.com/blog2/?p=244#comments</comments>
		<pubDate>Wed, 18 Feb 2009 02:47:12 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=244</guid>
		<description><![CDATA[2006-08-16 18:56
有个 Florian 的人简单测试了一下 Jabber 服务器软件的情况，他通过给他 jabber.ccc.de 服务器 log 上有 s2s 的服务器记录作为目标，向这些主机发送 jabber:iq:version 查询，在他的 log 上一共有 542 个主机，得出的结果如下：
 jabberd1 => 168
 ejabberd => 109
 jabberd2 => 78
 unknown => 64
 Wildfire => 49
 jsm => 20 (I guess this is pre-1.4.3 jabberd1)
 MSN Transport => 13
 ICQ Transport => 12
 AIM Transport => 5
 Yahoo! [...]]]></description>
			<content:encoded><![CDATA[<p>2006-08-16 18:56<br />
有个 Florian 的人简单测试了一下 Jabber 服务器软件的情况，他通过给他 jabber.ccc.de 服务器 log 上有 s2s 的服务器记录作为目标，向这些主机发送 jabber:iq:version 查询，在他的 log 上一共有 542 个主机，得出的结果如下：</p>
<p> jabberd1 => 168<br />
 ejabberd => 109<br />
 jabberd2 => 78<br />
 unknown => 64<br />
 Wildfire => 49<br />
 jsm => 20 (I guess this is pre-1.4.3 jabberd1)<br />
 MSN Transport => 13<br />
 ICQ Transport => 12<br />
 AIM Transport => 5<br />
 Yahoo! Transport => 5<br />
 JIT => 4<br />
 MU-Conference => 2<br />
 Jive Messenger => 2<br />
 XMPPPY Yahoo! Transport (Dev) => 2<br />
 dotJ => 1<br />
 XCP => 1<br />
 SMS - Transport => 1<br />
 ejabberd mod_proxy65 (unofficial) => 1<br />
 RSS component => 1<br />
 Jobble transport => 1<br />
 psyced => 1<br />
 Gadu-Gadu Transport => 1</p>
<p>结果是 jabberd 1.4.3 最受欢迎获得 115 个返回结果,<br />
ejabberd 1.1.1 47个 + ejabberd 1.1.0  40个.</p>
<p>操作系统使用最多的是 Linux 2.6, 171 replies, 然后是 Linux/unknown and Linux 2.4.</p>
<p>Most &#8220;outdated&#8221; versions were ejabberd 0.7.5 and jsm 1.1.3.</p>
<p>Using just the public jabber-servers reveals pretty much the same, the<br />
single interesting difference is that Wildfire is only used twice<br />
within 117 servers.</p>
<p>以上文章翻译自Jabber的邮件列表(by Tim Yang)，发布者是 Florian, Jabber ID: fh@mabber.d</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=244</wfw:commentRss>
		</item>
		<item>
		<title>pyqt如何处理中文？(ZT)</title>
		<link>http://www.nixuesong.com/blog2/?p=243</link>
		<comments>http://www.nixuesong.com/blog2/?p=243#comments</comments>
		<pubDate>Wed, 18 Feb 2009 02:18:45 +0000</pubDate>
		<dc:creator>sanchaji2</dc:creator>
		
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.nixuesong.com/blog2/?p=243</guid>
		<description><![CDATA[诸位大侠，在linux下用kdevelop3开发pyqt如何处理中文？不如菜单项[/quote]
使用chinese-codec转换，
方法就是
str=&#8221;文件&#8221;
uni_str=unicode(str,&#8221;gb2312&#8243;)
就可以了。
如果你用Magic Linux，自带了。
]]></description>
			<content:encoded><![CDATA[<p>诸位大侠，在linux下用kdevelop3开发pyqt如何处理中文？不如菜单项[/quote]<br />
使用chinese-codec转换，<br />
方法就是<br />
str=&#8221;文件&#8221;<br />
uni_str=unicode(str,&#8221;gb2312&#8243;)<br />
就可以了。<br />
如果你用Magic Linux，自带了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nixuesong.com/blog2/?feed=rss2&amp;p=243</wfw:commentRss>
		</item>
	</channel>
</rss>
