<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>开源小站 &#187; 硬件相关</title>
	<atom:link href="http://www.litrin.net/category/hardware/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.litrin.net</link>
	<description>It is Cool to OpenSource</description>
	<lastBuildDate>Fri, 03 Feb 2012 04:33:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Linux的CPU调速器</title>
		<link>http://www.litrin.net/2011/10/15/linux%e7%9a%84cpu%e8%b0%83%e9%80%9f%e5%99%a8/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=linux%25e7%259a%2584cpu%25e8%25b0%2583%25e9%2580%259f%25e5%2599%25a8</link>
		<comments>http://www.litrin.net/2011/10/15/linux%e7%9a%84cpu%e8%b0%83%e9%80%9f%e5%99%a8/#comments</comments>
		<pubDate>Sat, 15 Oct 2011 05:52:03 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1576</guid>
		<description><![CDATA[都说Android手机的耗电和发热是与生俱来的，作为一个Android用户，我也深受其苦。于是刷了一个非官方的固件——Cyanogenmod。既然说是非官固件，总有特别的地方，在省电和性能的均衡方面，CM特地的设置了一个“调速器”的选项。Android本身就是一个Linux的内核，调速器的设置本身就是Linux内核中继承而来的。 在桌面版本的Linux中，一般默认已经安装了调速器的控制台，并可以通过类似gnome控制栏插件的方式简单的启用和调整。对于Server版本，由于定位不同，这样的设置意义不大，但可以手工安装。考虑到要做“绿色IT”，个人觉得在一定范围内适当的使用不但不会影响性能，而且还可以降低主机温度，达到延长主机寿命的功效。具体方法如下： sudo apt-get install cpufrequtils 手工调整CPU频率，需要CPU支持，虽然现如今大多数CPU都支持类似的技术（Speed Step之Intel和nCool之AMD），但恰巧我有一台ATOM芯片的机器就不支持。同样需要注意的是，不是超频，而是降频，指望这种方法为CPU超频的话我劝您还是直接去 BIOS里跳吧 cpufreq-selector -f  频率数，单位是kHz cpufreq-set -d 最高频率 cpufreq-set -u 最低频率 查看CPU状态，不需要太多解释了吧 cpufreq-info 设置CPU运行模式，这才是主要的。系统默认会为CPU设置几种模式方便直接切换 cpufreq-set -g 模式类型 模式类型 powersave，省电模式，简洁明了，就是最省电的状态，CPU始终工作在最低频率上。 userspace，用户定制，手工定制频率的方式。 ondemand，守护模式，自动根据系统负载调整模式，负载越高，频率越高。这是绝大多数系统选择的模式。 conservative，保守模式，有些类似于ondemand，但不同于ondemand一有负载就提高频率到最高，次模式尽量采用较低的模式，直至满载无法承受才提升频率。 performance，性能模式，系统始终工作在最高频率之上。 就拿我的Android手机为例，默认工作在ondemand模式，CPU主频是600mHz（不是新机器，让您见笑了）。下设245, 400, 480, 600共计4个档位。未调整前，大约有超过60％的时间系统工作在600mHz的档位上满负荷工作，而245的档位时间不足1％，耗电和温度自然降不下来。由于手机不同于台式机和服务器，待机时间相比性能而言更为重要——至少我的需求如此，而在大部分时间都应该处在相对空闲的状态下，满负荷大可不必。于是将调速器模式设置为conservative，一周后的统计，245的档位上占据了接近80％，而600的档位不足13％，发热也得到控制，待机时间至少增加了1/3。]]></description>
			<content:encoded><![CDATA[<p>都说Android手机的耗电和发热是与生俱来的，作为一个Android用户，我也深受其苦。于是刷了一个非官方的固件——<a rel="nofollow" target="_blank" href="http://www.cyanogenmod.com" target="_blank">Cyanogenmod</a>。既然说是非官固件，总有特别的地方，在省电和性能的均衡方面，CM特地的设置了一个“调速器”的选项。Android本身就是一个Linux的内核，调速器的设置本身就是Linux内核中继承而来的。</p>
<p><span id="more-1576"></span>在桌面版本的Linux中，一般默认已经安装了调速器的控制台，并可以通过类似gnome控制栏插件的方式简单的启用和调整。对于Server版本，由于定位不同，这样的设置意义不大，但可以手工安装。考虑到要做“绿色IT”，个人觉得在一定范围内适当的使用不但不会影响性能，而且还可以降低主机温度，达到延长主机寿命的功效。具体方法如下：</p>
<p>sudo apt-get install cpufrequtils</p>
<p><strong>手工调整CPU频率</strong>，需要CPU支持，虽然现如今大多数CPU都支持类似的技术（Speed Step之Intel和nCool之AMD），但恰巧我有一台ATOM芯片的机器就不支持。同样需要注意的是，不是超频，而是降频，指望这种方法为CPU超频的话我劝您还是直接去 BIOS里跳吧 <img src='http://www.litrin.net/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
<p>cpufreq-selector -f  频率数，单位是kHz<br />
cpufreq-set -d 最高频率<br />
cpufreq-set -u 最低频率</p>
<p><strong>查看CPU状态，</strong>不需要太多解释了吧</p>
<p>cpufreq-info</p>
<p><strong>设置CPU运行模式，这才是主要的。</strong>系统默认会为CPU设置几种模式方便直接切换</p>
<p>cpufreq-set -g 模式类型</p>
<p>模式类型</p>
<ul>
<li>powersave，省电模式，简洁明了，就是最省电的状态，CPU始终工作在最低频率上。</li>
<li>userspace，用户定制，手工定制频率的方式。</li>
<li>ondemand，守护模式，自动根据系统负载调整模式，负载越高，频率越高。这是绝大多数系统选择的模式。</li>
<li>conservative，保守模式，有些类似于ondemand，但不同于ondemand一有负载就提高频率到最高，次模式尽量采用较低的模式，直至满载无法承受才提升频率。</li>
<li>performance，性能模式，系统始终工作在最高频率之上。</li>
</ul>
<div>就拿我的Android手机为例，默认工作在ondemand模式，CPU主频是600mHz（不是新机器，让您见笑了）。下设245, 400, 480, 600共计4个档位。未调整前，大约有超过60％的时间系统工作在600mHz的档位上满负荷工作，而245的档位时间不足1％，耗电和温度自然降不下来。由于手机不同于台式机和服务器，待机时间相比性能而言更为重要——至少我的需求如此，而在大部分时间都应该处在相对空闲的状态下，满负荷大可不必。于是将调速器模式设置为conservative，一周后的统计，245的档位上占据了接近80％，而600的档位不足13％，发热也得到控制，待机时间至少增加了1/3。</div>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/10/15/linux%e7%9a%84cpu%e8%b0%83%e9%80%9f%e5%99%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8216;xterm-256color&#8217;: unknown terminal type.</title>
		<link>http://www.litrin.net/2011/10/06/xterm-256color-unknown-terminal-type/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=xterm-256color-unknown-terminal-type</link>
		<comments>http://www.litrin.net/2011/10/06/xterm-256color-unknown-terminal-type/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 07:53:22 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1573</guid>
		<description><![CDATA[把我的Mac pro升级到Lion之后，照旧通过终端ssh连接到了Ubuntu Server。其他的命令操作均无异常，只是在习惯性的输入了top命令之后，系统没有正常启动top界面，反而出现如下的提示： root@www:~# top &#8216;xterm-256color&#8217;: unknown terminal type. 然而在Centos的主机下却不会出现问题。 说起终端的类型，尽管现在的终端大多都是一个PC而已，事实上在N多年前，终端类型可能仅仅只是体现了厂商的品牌而已，不同的终端类型多如牛毛。他们对于光标、控制字符以及颜色的定义相互都不兼容，历史遗留的问题了。包括之前也发觉很多主机商“backspace”键无效，必须使用ctrl+h进行退格的问题。 在Mac的终端下操作： LitrindeMacBook-Pro:~ litrin$ echo $TERM vt100 LitrindeMacBook-Pro:~ litrin$ infocmp vt100 # Reconstructed via infocmp from file: /usr/share/terminfo/76/vt100 vt100&#124;vt100-am&#124;dec vt100 (w/advanced video), am, mc5i, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{&#124;&#124;}}~~, bel=^G, blink=\E[5m$&#60;2&#62;, bold=\E[1m$&#60;2&#62;, clear=\E[H\E[J$&#60;50&#62;, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C$&#60;2&#62;, cup=\E[%i%p1%d;%p2%dH$&#60;5&#62;, [...]]]></description>
			<content:encoded><![CDATA[<p>把我的Mac pro升级到Lion之后，照旧通过终端ssh连接到了Ubuntu Server。其他的命令操作均无异常，只是在习惯性的输入了top命令之后，系统没有正常启动top界面，反而出现如下的提示：<br />
root@www:~# top<br />
&#8216;xterm-256color&#8217;: unknown terminal type.<br />
然而在Centos的主机下却不会出现问题。</p>
<p><span id="more-1573"></span></p>
<p>说起终端的类型，尽管现在的终端大多都是一个PC而已，事实上在N多年前，终端类型可能仅仅只是体现了厂商的品牌而已，不同的终端类型多如牛毛。他们对于光标、控制字符以及颜色的定义相互都不兼容，历史遗留的问题了。包括之前也发觉很多主机商“backspace”键无效，必须使用ctrl+h进行退格的问题。</p>
<p>在Mac的终端下操作：</p>
<pre>LitrindeMacBook-Pro:~ litrin$ echo $TERM
vt100</pre>
<pre>LitrindeMacBook-Pro:~ litrin$ infocmp vt100
#	Reconstructed via infocmp from file: /usr/share/terminfo/76/vt100
vt100|vt100-am|dec vt100 (w/advanced video),
	am, mc5i, msgr, xenl, xon,
	cols#80, it#8, lines#24, vt#3,
	acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
	bel=^G, blink=\E[5m$&lt;2&gt;, bold=\E[1m$&lt;2&gt;,
	clear=\E[H\E[J$&lt;50&gt;, cr=^M, csr=\E[%i%p1%d;%p2%dr,
	cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
	cuf=\E[%p1%dC, cuf1=\E[C$&lt;2&gt;,
	cup=\E[%i%p1%d;%p2%dH$&lt;5&gt;, cuu=\E[%p1%dA,
	cuu1=\E[A$&lt;2&gt;, ed=\E[J$&lt;50&gt;, el=\E[K$&lt;3&gt;, el1=\E[1K$&lt;3&gt;,
	enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=^J, ka1=\EOq,
	ka3=\EOs, kb2=\EOr, kbs=^H, kc1=\EOp, kc3=\EOn, kcub1=\EOD,
	kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kent=\EOM, kf0=\EOy,
	kf1=\EOP, kf10=\EOx, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOt,
	kf6=\EOu, kf7=\EOv, kf8=\EOl, kf9=\EOw, lf1=pf1, lf2=pf2,
	lf3=pf3, lf4=pf4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8,
	rev=\E[7m$&lt;2&gt;, ri=\EM$&lt;5&gt;, rmacs=^O, rmam=\E[?7l,
	rmkx=\E[?1l\E&gt;, rmso=\E[m$&lt;2&gt;, rmul=\E[m$&lt;2&gt;,
	rs2=\E&gt;\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
	sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$&lt;2&gt;,
	sgr0=\E[m\017$&lt;2&gt;, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=,
	smso=\E[7m$&lt;2&gt;, smul=\E[4m$&lt;2&gt;, tbc=\E[3g,</pre>
<p>说明了主机的默认终端类型正是导致出现问题的“xterm-256color”，对于每一种终端的定义，需要在terminfo文件中定义，Mac下这个文件保存在/usr/share/terminfo/目录下，而这个故障出现的最终原因是Ubuntu或者说Debian系的Linux默认没有xterm-256color终端的定义，而Lion操作系统升级之后，默认的终端类型从之前的vt100变成了xterm-color。</p>
<p>扯了这么多，解决方案有两种，都很简单：</p>
<ol>
<li>让server端支持xterm-256color：apt-get install ncurses-term，安装终端支持。</li>
<li>在Mac下终端的“偏好设置”，“设置”选项卡，“高级”选项，“声明终端为：”修改为“xterm-color”或者其他的类型，看个人喜好了。</li>
</ol>
<p>个人推荐还是采用方法2解决，此外，你也可以通过定义其他类型的终端，解决其他类似的问题。</p>
<p>&nbsp;</p>
<p><span style="font-family: Arial, Helvetica, sans-serif; color: #ffffff; background-color: #000000;">2011－10－05（<strong>PST</strong>）来自：<a rel="nofollow" target="_blank" style="color: #ffffff;" href="http://zh.wikipedia.org/wiki/史蒂夫·乔布斯">乔布斯</a>的MacBook Pro</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/10/06/xterm-256color-unknown-terminal-type/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用linux的/dev/shm</title>
		<link>http://www.litrin.net/2011/09/30/%e4%bd%bf%e7%94%a8linux%e7%9a%84devshm/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bd%25bf%25e7%2594%25a8linux%25e7%259a%2584devshm</link>
		<comments>http://www.litrin.net/2011/09/30/%e4%bd%bf%e7%94%a8linux%e7%9a%84devshm/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 07:30:34 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[硬件相关]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1570</guid>
		<description><![CDATA[挖掘一个很久之前的设想，06年的，之前的想法是用tmpfs，tmpfs是RAM和磁盘swap的混杂机制，大部分的情况是优先使用内存空间，尽管本质上是非持久存储，但性能上远不是磁盘甚至固态硬盘所能企及的。而且现在是内存空前便宜的时代，类似的方案例如memcache等，变得更有价值了。 默认的Linux发行版中的内核配置都会开启tmpfs，映射到了/dev/下的shm目录。可以通过df 命令查看结果如下： Filesystem Size Used Avail Use% Mounted on /dev/sda1 146G 14G 125G 10% / varrun 501M 84K 501M 1% /var/run varlock 501M 0 501M 0% /var/lock udev 501M 32K 501M 1% /dev devshm 501M 0 501M 0% /dev/shm 默认配置的shm分区正好是内存的一半。 可以重新调整大小： vi /etc/fstab tmpfs /dev/shm tmpfs defaults,size=4096M 0 0 umount /dev/shm; mount /dev/shm 不同于文件系统/dev/shm不是一个文件，是一个目录，完全可以通过文件链接的方式挂装到指定目录，还是推荐采用mount方式： [...]]]></description>
			<content:encoded><![CDATA[<p>挖掘一个<a title="关于使用tmpfs优化的设想" href="http://www.litrin.net/2006/06/21/%e5%85%b3%e4%ba%8e%e4%bd%bf%e7%94%a8tmpfs%e4%bc%98%e5%8c%96%e7%9a%84%e8%ae%be%e6%83%b3/">很久之前的设想</a>，06年的，之前的想法是用tmpfs，tmpfs是RAM和磁盘swap的混杂机制，大部分的情况是优先使用内存空间，尽管本质上是非持久存储，但性能上远不是磁盘甚至固态硬盘所能企及的。而且现在是内存空前便宜的时代，类似的方案例如memcache等，变得更有价值了。</p>
<p>默认的Linux发行版中的内核配置都会开启tmpfs，映射到了/dev/下的shm目录。可以通过df 命令查看结果如下：</p>
<pre>Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             146G   14G  125G  10% /
varrun                501M   84K  501M   1% /var/run
varlock               501M     0  501M   0% /var/lock
udev                  501M   32K  501M   1% /dev
devshm                501M     0  501M   0% /dev/shm</pre>
<p><span id="more-1570"></span></p>
<p>默认配置的shm分区正好是内存的一半。</p>
<p>可以重新调整大小：</p>
<p>vi /etc/fstab<br />
tmpfs /dev/shm tmpfs defaults,size=4096M 0 0</p>
<p>umount /dev/shm; mount /dev/shm</p>
<p>不同于文件系统/dev/shm不是一个文件，是一个目录，完全可以通过文件链接的方式挂装到指定目录，还是推荐采用mount方式：</p>
<p>mount &#8211;bind /dev/shm /data</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/09/30/%e4%bd%bf%e7%94%a8linux%e7%9a%84devshm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>分布式文件系统Moose FS的部署</title>
		<link>http://www.litrin.net/2011/06/20/%e5%88%86%e5%b8%83%e5%bc%8f%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9fmoose-fs%e7%9a%84%e9%83%a8%e7%bd%b2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%2588%2586%25e5%25b8%2583%25e5%25bc%258f%25e6%2596%2587%25e4%25bb%25b6%25e7%25b3%25bb%25e7%25bb%259fmoose-fs%25e7%259a%2584%25e9%2583%25a8%25e7%25bd%25b2</link>
		<comments>http://www.litrin.net/2011/06/20/%e5%88%86%e5%b8%83%e5%bc%8f%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9fmoose-fs%e7%9a%84%e9%83%a8%e7%bd%b2/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 03:22:46 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1500</guid>
		<description><![CDATA[近期随着云概念的热炒，什么都分布式。所谓分布式的文件系统就是把若干机器上的磁盘空间统一维护，成为一个逻辑上的独立空间，当然，还有对应的容错和压力分散解决方案。 这些天在研究分布式存储的东西，测试了比较出名的几个分布式文件系统。首先是淘宝的tfs，国人出品应该支持了，谁知TFS的支持库实在不敢恭维，换了几种操作系统，最终才在suse上安装成功。可作为一个绑死操作系统的应用，风险太大。接着是MogileFS，MogileFS是基于perl的，在安装了一系列的perl依赖包之后，MogileFS安装的很顺利，性能也能达到要求，问题就是在于我们实在不愿意去维护一个perl环境。最后剩下了MooseFS。 凡是分布式系统一般都会有中心和节点的概念，对应到mfs上就是master server和chunk servers。其中master 是运算消耗型，chunk是磁盘消耗型。整个系统是网络带宽消耗型。建议生产环境中使用千兆网络，并可以根据本站提供的信息建立bond。 mfs还有自己的Backup server被称为metalogger在master出现故障时能够及时替换掉master的地位。硬件相同于master一致，至少拥有同样大小的内存。 MooseFS环境准备 作为测试环境，我准备了两台服务器，仅搭建Master和chunk各一台。没有metakogger。 192.168.1.1 master #Ubuntu 11.04 192.168.1.101 chunk #Ubuntu 11.04 192.168.1.201 客户端 #Ubuntu 11.04 由于需要编译，build-essential, pkg-config,  zlib1g-dev是必须的。 下载源码包 http://sourceforge.net/projects/moosefs/ MooseFS Master的安装 #groupadd mfs  #准备组/用户 #useradd -g mfs mfs #tar -zxvf mfs-1.6.15.tar.gz #cd mfs-1.6.15 #./configure &#8211;prefix=/usr &#8211;sysconfdir=/etc/mfs &#8211;localstatedir=/var/lib &#8211;with-default-user=mfs&#8211;with-default-group=mfs &#8211;disable-mfschunkserver &#8211;disable-mfsmount #make #make install 需要注意的是，这次所有的./configure都是类似的，不要搞错！安装结束后/etc/mfs下会有几个dist结尾的配置文件，去掉.dist结尾。 其中 mfsmaster.cfg 文件是允许访问的主机权限，做过nfs的应该很清楚了。 cd /var/lib/mfs cp [...]]]></description>
			<content:encoded><![CDATA[<p>近期随着云概念的热炒，什么都分布式。所谓分布式的文件系统就是把若干机器上的磁盘空间统一维护，成为一个逻辑上的独立空间，当然，还有对应的容错和压力分散解决方案。</p>
<p>这些天在研究分布式存储的东西，测试了比较出名的几个分布式文件系统。首先是淘宝的tfs，国人出品应该支持了，谁知TFS的支持库实在不敢恭维，换了几种操作系统，最终才在suse上安装成功。可作为一个绑死操作系统的应用，风险太大。接着是MogileFS，MogileFS是基于perl的，在安装了一系列的perl依赖包之后，MogileFS安装的很顺利，性能也能达到要求，问题就是在于我们实在不愿意去维护一个perl环境。最后剩下了MooseFS。</p>
<p><span id="more-1500"></span></p>
<p>凡是分布式系统一般都会有中心和节点的概念，对应到mfs上就是master server和chunk servers。其中master 是运算消耗型，chunk是磁盘消耗型。整个系统是网络带宽消耗型。建议生产环境中使用千兆网络，并可以根据<a title="Linux下多网卡负载的实现" href="http://www.litrin.net/2006/05/21/linux%e4%b8%8b%e5%a4%9a%e7%bd%91%e5%8d%a1%e8%b4%9f%e8%bd%bd%e7%9a%84%e5%ae%9e%e7%8e%b0/" target="_blank">本站提供的信息建立bond</a>。</p>
<p>mfs还有自己的Backup server被称为metalogger在master出现故障时能够及时替换掉master的地位。硬件相同于master一致，至少拥有同样大小的内存。</p>
<h2>MooseFS环境准备</h2>
<p>作为测试环境，我准备了两台服务器，仅搭建Master和chunk各一台。没有metakogger。</p>
<p>192.168.1.1 master #Ubuntu 11.04</p>
<p>192.168.1.101 chunk #Ubuntu 11.04</p>
<p>192.168.1.201 客户端 #Ubuntu 11.04</p>
<p>由于需要编译，build-essential, pkg-config,  zlib1g-dev是必须的。</p>
<p>下载源码包 http://sourceforge.net/projects/moosefs/</p>
<h2><strong>MooseFS Master的安装</strong></h2>
<p>#groupadd mfs  #准备组/用户<br />
#useradd -g mfs mfs</p>
<p>#tar -zxvf mfs-1.6.15.tar.gz<br />
#cd mfs-1.6.15</p>
<p>#./configure &#8211;prefix=/usr &#8211;sysconfdir=/etc/mfs &#8211;localstatedir=/var/lib &#8211;with-default-user=mfs&#8211;with-default-group=mfs <span style="text-decoration: underline;">&#8211;disable-mfschunkserver &#8211;disable-mfsmount</span><br />
#make<br />
#make install</p>
<p>需要注意的是，这次所有的./configure都是类似的，不要搞错！安装结束后/etc/mfs下会有几个dist结尾的配置文件，去掉.dist结尾。</p>
<p>其中 mfsmaster.cfg 文件是允许访问的主机权限，做过nfs的应该很清楚了。</p>
<p>cd /var/lib/mfs<br />
cp metadata.mfs.empty metadata.mfs</p>
<p>mfsmaster start #启动服务器</p>
<p>mfscgiserv #启动webbase管理界面，通过http://192.168.1.1:9425可以看到一个相当不错的界面。</p>
<p>借此，master段配置完成</p>
<h2><strong>MooseFS Chunk的安装</strong></h2>
<p>与master差不多的过程，我直接贴了：</p>
<p>#groupadd mfs  #准备组/用户<br />
#useradd -g mfs mfs</p>
<p>#tar -zxvf mfs-1.6.15.tar.gz<br />
#cd mfs-1.6.15</p>
<p>#./configure &#8211;prefix=/usr &#8211;sysconfdir=/etc/mfs &#8211;localstatedir=/var/lib &#8211;with-default-user=mfs&#8211;with-default-group=mfs <span style="text-decoration: underline;">&#8211;disable-mfsmaster</span></p>
<p>make &amp;&amp; make install</p>
<p>同样，将/etc/mfs下的.dist文件改名，文件不大，我是直接新建的。</p>
<p>mfshdd.cfg 里面记录了你想要共享（事实上是存放文件信息的）的路径，我习惯上用了/data</p>
<p>mfschunckserver.cfg 加上两行：</p>
<pre>MASTER_HOST = 192.168.1.1</pre>
<pre>MASTER_PORT = 9420</pre>
<p>/data目录的权限要注意，mfs可写。</p>
<p>mfschunkserver start #启动chunk server。回头去看http://192.168.1.1:9425的disks选项卡，应该会多出一个记录。</p>
<h2><strong>MooseFS Client的安装</strong></h2>
<p>moosefs支持fuse的直接挂装，客户端先安装fuse.</p>
<p>apt-get install fuse-util</p>
<p>总算不用添加mfs用户组了！</p>
<p>#tar -zxvf mfs-1.6.15.tar.gz<br />
#cd mfs-1.6.15<br />
#./configure &#8211;prefix=/usr &#8211;sysconfdir=/etc/mfs &#8211;localstatedir=/var/lib &#8211;with-default-user=mfs&#8211;with-default-group=mfs <span style="text-decoration: underline;">&#8211;disable-mfsmaster&#8211;disable-mfschunkserver </span> #3个disable!</p>
<p>#make &amp;&amp; make install</p>
<p>mfsmount /mnt -H 192.168.1.1 #Master 的IP</p>
<p>df -h | grep mnt结果</p>
<p>192.168.1.1:9421    4.6G     0  46G   0% /mnt</p>
<p>挂装成功！写个大文件看看：dd if=/dev/zero of=/mnt/bigfile bs=1024 count=1seek=$((20*1024*1024-1))</p>
<p>去http://192.168.1.1:9425，应该会有变化，但由于mfs是支持动态压缩的，磁盘占用不会像上面那条命令那么变态的20G。</p>
<p>当chunk写满后可以很方便的再添加一台chunk，这就是分布式的方便之处！</p>
<h2><strong>MooseFS 安装问题</strong></h2>
<p>在Ubuntu下异常的顺利，在redhat系下出了几个问题。</p>
<ol>
<li>安装fuse后启动fuse系统提示error in fuse_mount<br />
出现在fuse2.8.x 的安装过程中，这是因为fuse2.8要求linux内核版本较高，使用2.7.6即可。不要忘记安装kernel-devel库</li>
<li>出现fuse library is too old or not installed &#8211; mfsmount needs version 2.6 or higher<br />
可以在fuse的./configure中prefix=/usr，或者 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH更改默认路径即可！</li>
</ol>
<h2><strong>MooseFS 的常用维护</strong></h2>
<ol>
<li>察看文件保存状态：<br />
client：  mfsgetgoal -r FILENAME　或　mfsgetgoal -r FILENAME</li>
<li>备份meta状态：<br />
master: /var/lib/mfs下的metadata.mfs文件是当前的metadata，默认每小时都会更新，旧文件将会添加.back后缀备份即可，并同时增加changelog.*.log。当然，推荐使用moosefs metalogger</li>
<li>强行数据回写：<br />
master: mfsmetarestore -a</li>
<li>数据回滚：<br />
master: mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog.?.mfs</li>
</ol>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/06/20/%e5%88%86%e5%b8%83%e5%bc%8f%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9fmoose-fs%e7%9a%84%e9%83%a8%e7%bd%b2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>高负载的Lamp架构</title>
		<link>http://www.litrin.net/2011/04/20/%e9%ab%98%e8%b4%9f%e8%bd%bd%e7%9a%84lamp%e6%9e%b6%e6%9e%84/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e9%25ab%2598%25e8%25b4%259f%25e8%25bd%25bd%25e7%259a%2584lamp%25e6%259e%25b6%25e6%259e%2584</link>
		<comments>http://www.litrin.net/2011/04/20/%e9%ab%98%e8%b4%9f%e8%bd%bd%e7%9a%84lamp%e6%9e%b6%e6%9e%84/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 04:23:26 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[网络和安全]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1435</guid>
		<description><![CDATA[记得那时是2005年10月，开源小站刚上线不久的一篇文章。那时的我还仅仅将网站的高可用性和大负载，大流量集中在“堆硬件”的层面上。包括之后的一篇文档，似乎也没有逃脱这个范畴。之后由于工作内容的关系，始终没有再继续探讨这个问题。仅仅只在一篇关于GAE的文章中讲述了一下架构的趋势。 时隔了5年多，不妨回头重新从新的高度上说说LAMP结构的网站如何支撑尽可能大的负载。同样说明，本文代表站长Litrin的个人意见，欢迎共同探讨，但喷子慎入。 首先声明的是，以下一堆相对无趣的文字仅针对一系列负载到了至少10W pv以上级别，对于较小规模的网站大可不必遵守，还是提倡成本优先的原则，到了对应的PV级别想必也会有足够的财力和物力去改版了。 初期规划 这里主要还是指设计模型等前期工作。MVC的设计结构深入人心，不得不承认确实大多架构设计师首选的设计结构必是MVC。事实上，在一个网站上最容易获取，最不缺的资源是CPU和内存，最大的瓶颈都是出现在IO。 作为LAMP架构最大的问题就是MVC的代价太大，层层的封包意味着重复判断；打开大量的程序文件只会严重拖累性能。网上很多免费的、开源的PHP框架，用过的几个诸如ThinkPHP, ZF等应付中小型网站绝对没有问题，但都不适合大负载的网站。甚至包括Smarty这样单纯的模版引擎，大量的IO操作会拖累整体性能。如果不考虑其他因素，我甚至都考虑过All in 1的垃圾结构——这当然不现实。但恰恰是这种all in 1却正是大负载最适合的结构。奇怪的悖论。 受GAE的影响，曾经想过API+XML的方式实现网站架构，但后来打消了这个念头。XML本身的结构冗余度很多，这也就意味着信息承载率低。在内部几台服务器之间的通讯状况想必都没有必要搞XML，如果要搞类似的模式，CSV方式反倒是不错的选择。XML是为了开放给第三方用户的。 数据库设计 读写分离这个是众所周知的秘密了。Mysql 的Master + Slaver的设计真的很方便！最多就是多搞几重的读写分离。 拆表、拆库、分机器，大表做纵拆，宽表做横拆，不关联的分机器；纵拆是为了省时间，横拆是为了省内存，分机器是为了分负载。Mysql在几百万行数据级别以下性能是很不错的，超过这个数量级，就算机器再强悍都会死的很难看，mysql垃圾的锁表机制会展现无疑。没有人愿等到30秒以上的Respone，何况我曾经遭遇一个45分钟以上的Select操作（一重操作，没有用到Like，使用索引）。曾经用过mysql 的分区表，感觉这种方法更像是在打补丁——改变数据库结构去适应程序，很奇怪的流程，更何况即便逃过这次不拆，迟早有一天还会回来拆的。 索引，该有的全都有，但对于写操作频繁的表，索引反倒成了累赘，不要让索引数占到字段数的30%以上这是约定俗成的标准吧。 memcache，没什么可以多说的，这玩意基本上就是铺硬件换时间的。 说道非关系型数据库，好像近期很热门。怎么说呢？越是复杂的网站越是能体现出它的优势，但问题是大多数网站都不会像twitter或者Facebook这么复杂，况且大多数程序员的逻辑还是SQL模式，贸进很可能搞砸。 WWW服务器拓扑设计 F5这类的设备是必须的，之前曾经觉得LVS可以替代F5这样的设备。用过之后才发现，这等于是将整个网站的身价性命都扔到了一台服务器上，一旦宕机或者被侵入呢？ 对于Apache还是nginx的争论持续了很久。nginx很快速，可以将单独的PHP负载分离出去，但没有apache来的灵活。要根据需求再做评价。 异步操作和缓存机制 这个貌似也没有什么花头，调整好负载之后可以将一部分操作异步到数据库相对空闲的时段进行，达到移峰填谷的效果。配合memcache或者其他的缓存机制本身也是动转静的手段之一。 自动和手动的问题 属于代码级别了吧。良好的编程规范对系统的优化是很显著的。漫山遍野的select *， 大量的变量不清空是高负载系统的忌讳。纵然php的内存处理机制再出色，它永远也不会理解你设置的变量什么时候失效，减少这看似寥寥无几的空间乘上惊人的pv数也是很可观的。]]></description>
			<content:encoded><![CDATA[<p>记得那时是2005年10月，<a title="开源小站" href="http://www.litrin.net" target="_blank">开源小站</a>刚上线不久的<a title="中国顶级门户网站架构分析" href="http://www.litrin.net/2005/10/27/%e4%b8%ad%e5%9b%bd%e9%a1%b6%e7%ba%a7%e9%97%a8%e6%88%b7%e7%bd%91%e7%ab%99%e6%9e%b6%e6%9e%84%e5%88%86%e6%9e%90/" target="_blank">一篇文章</a>。那时的我还仅仅将网站的高可用性和大负载，大流量集中在“堆硬件”的层面上。包括之后的<a href="http://www.litrin.net/2005/11/06/%e5%8c%96%e7%ae%80%e4%b8%ba%e7%b9%81%e2%80%94%e2%80%94%e4%bc%98%e5%8c%96%e4%bd%a0%e7%9a%84%e7%bd%91%e7%ab%99%e5%b1%82%e6%ac%a1/" target="_blank">一篇文档</a>，似乎也没有逃脱这个范畴。之后由于工作内容的关系，始终没有再继续探讨这个问题。仅仅只在一篇关于<a href="http://www.litrin.net/2010/12/21/%e4%bb%8egae%e7%9c%8b%e7%bd%91%e7%ab%99%e6%9e%b6%e6%9e%84%e8%b6%8b%e5%8a%bf/" target="_blank">GAE的文章</a>中讲述了一下架构的趋势。</p>
<p>时隔了5年多，不妨回头重新从新的高度上说说LAMP结构的网站如何支撑尽可能大的负载。同样说明，本文代表站长Litrin的个人意见，欢迎共同探讨，但喷子慎入。</p>
<p><span id="more-1435"></span></p>
<p>首先声明的是，以下一堆相对无趣的文字仅针对一系列负载到了至少10W pv以上级别，对于较小规模的网站大可不必遵守，还是提倡成本优先的原则，到了对应的PV级别想必也会有足够的财力和物力去改版了。</p>
<h2>初期规划</h2>
<p>这里主要还是指设计模型等前期工作。MVC的设计结构深入人心，不得不承认确实大多架构设计师首选的设计结构必是MVC。事实上，在一个网站上最容易获取，最不缺的资源是CPU和内存，最大的瓶颈都是出现在IO。</p>
<p>作为LAMP架构最大的问题就是MVC的代价太大，层层的封包意味着重复判断；打开大量的程序文件只会严重拖累性能。网上很多免费的、开源的PHP框架，用过的几个诸如ThinkPHP, ZF等应付中小型网站绝对没有问题，但都不适合大负载的网站。甚至包括Smarty这样单纯的模版引擎，大量的IO操作会拖累整体性能。如果不考虑其他因素，我甚至都考虑过All in 1的垃圾结构——这当然不现实。但恰恰是这种all in 1却正是大负载最适合的结构。奇怪的悖论。</p>
<p>受GAE的影响，曾经想过API+XML的方式实现网站架构，但后来打消了这个念头。XML本身的结构冗余度很多，这也就意味着信息承载率低。在内部几台服务器之间的通讯状况想必都没有必要搞XML，如果要搞类似的模式，CSV方式反倒是不错的选择。XML是为了开放给第三方用户的。</p>
<h2>数据库设计</h2>
<p>读写分离这个是众所周知的秘密了。Mysql 的Master + Slaver的设计真的很方便！最多就是多搞几重的读写分离。</p>
<p>拆表、拆库、分机器，大表做纵拆，宽表做横拆，不关联的分机器；纵拆是为了省时间，横拆是为了省内存，分机器是为了分负载。Mysql在几百万行数据级别以下性能是很不错的，超过这个数量级，就算机器再强悍都会死的很难看，mysql垃圾的锁表机制会展现无疑。没有人愿等到30秒以上的Respone，何况我曾经遭遇一个45分钟以上的Select操作（一重操作，没有用到Like，使用索引）。曾经用过mysql 的分区表，感觉这种方法更像是在打补丁——改变数据库结构去适应程序，很奇怪的流程，更何况即便逃过这次不拆，迟早有一天还会回来拆的。</p>
<p>索引，该有的全都有，但对于写操作频繁的表，索引反倒成了累赘，不要让索引数占到字段数的30%以上这是约定俗成的标准吧。</p>
<p>memcache，没什么可以多说的，这玩意基本上就是铺硬件换时间的。</p>
<p>说道非关系型数据库，好像近期很热门。怎么说呢？越是复杂的网站越是能体现出它的优势，但问题是大多数网站都不会像twitter或者Facebook这么复杂，况且大多数程序员的逻辑还是SQL模式，贸进很可能搞砸。</p>
<h2>WWW服务器拓扑设计</h2>
<p>F5这类的设备是必须的，之前曾经觉得LVS可以替代F5这样的设备。用过之后才发现，这等于是将整个网站的身价性命都扔到了一台服务器上，一旦宕机或者被侵入呢？</p>
<p>对于Apache还是nginx的争论持续了很久。nginx很快速，可以将单独的PHP负载分离出去，但没有apache来的灵活。要根据需求再做评价。</p>
<h2>异步操作和缓存机制</h2>
<p>这个貌似也没有什么花头，调整好负载之后可以将一部分操作异步到数据库相对空闲的时段进行，达到移峰填谷的效果。配合memcache或者其他的缓存机制本身也是动转静的手段之一。</p>
<h2>自动和手动的问题</h2>
<p>属于代码级别了吧。良好的编程规范对系统的优化是很显著的。漫山遍野的select *， 大量的变量不清空是高负载系统的忌讳。纵然php的内存处理机制再出色，它永远也不会理解你设置的变量什么时候失效，减少这看似寥寥无几的空间乘上惊人的pv数也是很可观的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/04/20/%e9%ab%98%e8%b4%9f%e8%bd%bd%e7%9a%84lamp%e6%9e%b6%e6%9e%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android的问题</title>
		<link>http://www.litrin.net/2011/04/01/android%e7%9a%84%e9%97%ae%e9%a2%98/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android%25e7%259a%2584%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2011/04/01/android%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 02:26:18 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1424</guid>
		<description><![CDATA[前些日子写过一篇东西，总之，满肚子的牢骚。 现在的智能手机市场上，主要就是Nokia主导的Symbian，Apple主导的iOS，以及Google主导的Android 3家，剩下的RIM，微软，以及已经归HP所有的WebOS相对要么针对特定人群，要么占有率实在不值一提。尽管都是响当当的业界巨头，Nokia连自己都认为已经错过机会了，等到Symbian具备了新一代的智能手机标准的时候，黄花菜都凉了，于是出人意料却又在情理之中的，Nokia投奔了微软。现在能够相提并论的只剩下了iOS和Android两家。 相比Apple一贯的封闭原则，Android相对开放，这个开放造就了较低的售价，同时也造就了相对漂亮的市场份额。无可否认的是，Android作为操作系统整体的意识是高于iOS的，包括桌面的widge的使用，通知机制等。但也许是因为它过于开放了，目前的问题大多都于此有关。 “电子市场”的问题，iOS有自己统一的一个app store，所有的应用只有这一个渠道。而且由于大多数软件都是采用了微收费原则，相对来说对于开发者的吸引力很大。新的创新应用层出不穷。只要Apple在前面牢牢的把握住程序的品质，这个市场已经不会出现问题。所以尽管入门的门槛$99远远高于Android的$25，开发人员更乐意选择这个平台。 Android相对复杂了一点，一方面有google自营的电子市场，另一方面各个手机厂商也有自己的应用市场，其中还不乏第三方的电子市场的存在，而且Android允许自行安装操作。开发人员面临渠道过多的问题，而且相对而言应用数量很丰富，价格大多以免费为主，但除游戏外真正经典的应用不多。 硬件环境的问题，上篇文章中已经提到过，对于开发人员而言，硬件不统一不利于应用的开发。Android的过于开放造成的问题是android开发人员趋于保守，很难“压榨性开发”一些特定平台应用，这进一步影响了整体应用的质量。尽管总体上市场占有率喜人，但事实上开发者很难享受到。 SDK的问题，首先我承认Android SDK确实很方便，但这仅是对于入门而言。Java语言这种相对的高级语言在一些底层数据的处理上力不从心，正如Android上鲜有iOS上遍地开花的图片处理应用。这样的应用对于Android开发而言，真的很有挑战性。而且同样硬件配置的条件下，Android运行效率不佳。 iOS的Xcode环境的问题是Object C语言，个人觉得有点类似Python，但部分情况下已经实现了图形化编程，相信如果Apple方面如果能够松口允许PC环境的化很有前途。 不想发太多牢骚，结果又发了牢骚。]]></description>
			<content:encoded><![CDATA[<p>前些日子写过<a title="发发Android的牢骚" href="http://www.litrin.net/2010/12/15/%e5%8f%91%e5%8f%91android%e7%9a%84%e7%89%a2%e9%aa%9a/" target="_blank">一篇东西</a>，总之，满肚子的牢骚。</p>
<p>现在的智能手机市场上，主要就是Nokia主导的Symbian，Apple主导的iOS，以及Google主导的Android 3家，剩下的RIM，微软，以及已经归HP所有的WebOS相对要么针对特定人群，要么占有率实在不值一提。尽管都是响当当的业界巨头，Nokia连自己都认为已经错过机会了，等到Symbian具备了新一代的智能手机标准的时候，黄花菜都凉了，于是<a title="从Symbian的摇摆说起" href="http://www.litrin.net/2010/12/30/%e4%bb%8esymbian%e7%9a%84%e6%91%87%e6%91%86%e8%af%b4%e8%b5%b7/" target="_blank">出人意料却又在情理之中</a>的，Nokia投奔了微软。现在能够相提并论的只剩下了iOS和Android两家。</p>
<p><span id="more-1424"></span>相比Apple一贯的封闭原则，Android相对开放，这个开放造就了较低的售价，同时也造就了相对漂亮的市场份额。无可否认的是，Android作为操作系统整体的意识是高于iOS的，包括桌面的widge的使用，通知机制等。但也许是因为它过于开放了，目前的问题大多都于此有关。</p>
<p>“电子市场”的问题，iOS有自己统一的一个app store，所有的应用只有这一个渠道。而且由于大多数软件都是采用了微收费原则，相对来说对于开发者的吸引力很大。新的创新应用层出不穷。只要Apple在前面牢牢的把握住程序的品质，这个市场已经不会出现问题。所以尽管入门的门槛$99远远高于Android的$25，开发人员更乐意选择这个平台。<br />
Android相对复杂了一点，一方面有google自营的电子市场，另一方面各个手机厂商也有自己的应用市场，其中还不乏第三方的电子市场的存在，而且Android允许自行安装操作。开发人员面临渠道过多的问题，而且相对而言应用数量很丰富，价格大多以免费为主，但除游戏外真正经典的应用不多。</p>
<p>硬件环境的问题，上篇文章中已经提到过，对于开发人员而言，硬件不统一不利于应用的开发。Android的过于开放造成的问题是android开发人员趋于保守，很难“压榨性开发”一些特定平台应用，这进一步影响了整体应用的质量。尽管总体上市场占有率喜人，但事实上开发者很难享受到。</p>
<p>SDK的问题，首先我承认Android SDK确实很方便，但这仅是对于入门而言。Java语言这种相对的高级语言在一些底层数据的处理上力不从心，正如Android上鲜有iOS上遍地开花的图片处理应用。这样的应用对于Android开发而言，真的很有挑战性。而且同样硬件配置的条件下，Android运行效率不佳。<br />
iOS的Xcode环境的问题是Object C语言，个人觉得有点类似Python，但部分情况下已经实现了图形化编程，相信如果Apple方面如果能够松口允许PC环境的化很有前途。</p>
<p>不想发太多牢骚，结果又发了牢骚。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/04/01/android%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>新·MacBook Pro</title>
		<link>http://www.litrin.net/2011/03/04/%e6%96%b0%c2%b7macbook-pro/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e6%2596%25b0%25c2%25b7macbook-pro</link>
		<comments>http://www.litrin.net/2011/03/04/%e6%96%b0%c2%b7macbook-pro/#comments</comments>
		<pubDate>Fri, 04 Mar 2011 05:11:48 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1399</guid>
		<description><![CDATA[我之前两次笔记本的更换： http://www.litrin.net/2006/01/13/新·小黑/ http://www.litrin.net/2007/12/09/新·hp520/ 借着Apple最新推出的Mac Book pro的东风，我也第一时间入手了一台700款，最低配置的。 配置如下： CPU: Intel i5 2.3G Ram: 4G HDD: 320G 13寸屏 先不说别的，上图片！ 一番设置后，从app store里买了一套iwork page，再次花费$30。不过很超值！ 装上xcode, Eclipse, MSN，设置邮箱，机器基本设置完成。 比教郁闷的是没有一个免费的，功能上类似notepad++的软件存在，只能暂时使用textwrangler替代部分功能。 &#160;]]></description>
			<content:encoded><![CDATA[<p>我之前两次笔记本的更换：</p>
<p><a title="新·小黑" href="http://www.litrin.net/2006/01/13/新·小黑/">http://www.litrin.net/2006/01/13/新·小黑/</a></p>
<p><a title="新·hp520" href="http://www.litrin.net/2007/12/09/新·hp520/" target="_blank">http://www.litrin.net/2007/12/09/新·hp520/</a></p>
<p>借着Apple最新推出的Mac Book pro的东风，我也第一时间入手了一台700款，最低配置的。</p>
<p>配置如下：</p>
<ul>
<li>CPU: Intel i5 2.3G</li>
<li>Ram: 4G</li>
<li>HDD: 320G</li>
<li>13寸屏</li>
</ul>
<p>先不说别的，上图片！</p>
<p><span id="more-1399"></span><a href="http://www.litrin.net/wp-content/uploads/2011/03/20110303131.jpg"><img class="aligncenter size-medium wp-image-1400" title="mac book pro" src="http://www.litrin.net/wp-content/uploads/2011/03/20110303131-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://www.litrin.net/wp-content/uploads/2011/03/20110303132.jpg"><img class="aligncenter size-medium wp-image-1401" title="20110303132" src="http://www.litrin.net/wp-content/uploads/2011/03/20110303132-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://www.litrin.net/wp-content/uploads/2011/03/20110303133.jpg"><img class="aligncenter size-medium wp-image-1402" title="20110303133" src="http://www.litrin.net/wp-content/uploads/2011/03/20110303133-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://www.litrin.net/wp-content/uploads/2011/03/20110303135.jpg"><img class="aligncenter size-medium wp-image-1403" title="20110303135" src="http://www.litrin.net/wp-content/uploads/2011/03/20110303135-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>一番设置后，从app store里买了一套iwork page，再次花费$30。不过很超值！</p>
<p>装上xcode, Eclipse, MSN，设置邮箱，机器基本设置完成。</p>
<p>比教郁闷的是没有一个免费的，功能上类似notepad++的软件存在，只能暂时使用textwrangler替代部分功能。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/03/04/%e6%96%b0%c2%b7macbook-pro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS tech talk</title>
		<link>http://www.litrin.net/2011/02/15/ios-tech-talk/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ios-tech-talk</link>
		<comments>http://www.litrin.net/2011/02/15/ios-tech-talk/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 10:02:00 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[业界话题]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1395</guid>
		<description><![CDATA[经过春节前Lerry 和Jestin的双重推荐，我成功的报名参加了今天在浦东香格里拉举行的iOS tech talk会议。再此感谢两位老大！  根据推友的消息，不同于以往在全球各国开展的iOS tech talk会议，今年只在中国举行，其他国家则采用1对1的方式举行，估计成本不小。同时消息认为这是由于中国的iOS开发者队伍庞大但相对水平不高的缘故。暂且不去理会，这里就把我在会议中的笔记整理一下，给感兴趣的人。当然，由于针对重点不同，而且本人的英语听力有限，里面肯定有遗漏，这里只作为一个参考吧。如果需要更多内容，欢迎您直接联系我。  首先是welcome，演讲人是Mr. Michael Jurewitz 大致上介绍了一下ios的市场占有率，开发者构成，以及“辉煌的业绩报表”等等。N多商业术语，大致上作为开发者可以忽略了，感兴趣的朋友直接google或者关注apple的官方新闻即可。 Make it great! 演讲人同样还是Michael Jurewitz 这个题目似乎是每次apple必讲的题目。这次主要就是说这个平台怎么怎么优秀之类的话题，其间一个翻译软件的演示很精彩：用摄像头直接取词翻译，注意不是简单的OCR，而是直接将翻译后的文本像PS那样转换回去，名副其实的“有色眼镜”。 然后就是介绍了几位主讲。  转入正题了  关于UI设计，演讲人从姓氏上看是日本裔。很抱歉，当时正在调试wifi，没有记下题目和演讲者全名。 主要内容如下： 当所有的用户都是傻子，他们什么都不懂。不要给他们产生太多操作上的歧义。 他们只会用触摸操作，要善用触摸的优势，抛开劣势。同时只有44&#215;44以上的按钮他们才不会点错。 他们有耳朵，要用合适的声音反馈。 要让他们的操作跟着你走。 让人误解的动画不如没有。 字体要合适，虽然可能没人注意 图形要合适，有参与性，且要鲜明，要一看就懂。 要有漂亮的图标，至少不会让你在app store里失分。  Optimizing app performance with instruments （用instruments优化app性能）演讲人又是重量级的Michael Jurewitz 主要内容： 对于一个程序来说性能永远是第一位的，没有人愿意为你的程序等待太多时间。 apple提供了很多对于具体性能的测试工具，不要凭感觉行事。 着眼于真实环境下的测试数据和运行情况而不是仅仅停留在模拟机的测试结果。 快速启动一个应用是重中之重，解决这个问题最行之有效的方法是将所有的非UI操作都放到后台进程去执行。 一系列instruments的Demo，我想要拍照，被工作人员及时制止了 尽量合适尺寸的Png，但要尽量减少PNG的透明效果以减少运算量，节省资源。 尽量减少内存占用（废话），推荐了Auto realease pool的解决方案和原理。 不要把内存泄漏信息直接透露给用户，这个似乎是低级错误了。 要及时清理后台进程和程序。  iOS application architecture （iOS应用的程序架构）还是Michael Jurewitz 主要内容： [...]]]></description>
			<content:encoded><![CDATA[<p>经过春节前<span style="font-family: Times New Roman, serif;">Lerry </span>和<span style="font-family: Times New Roman, serif;">Jestin</span>的双重推荐，我成功的报名参加了今天在浦东香格里拉举行的<span style="font-family: Times New Roman, serif;">iOS tech talk</span>会议。再此感谢两位老大！</p>
<p lang="zh-CN"> 根据推友的消息，不同于以往在全球各国开展的<span style="font-family: Times New Roman, serif;">iOS tech talk</span>会议，今年只在中国举行，其他国家则采用<span style="font-family: Times New Roman, serif;">1</span>对<span style="font-family: Times New Roman, serif;">1</span>的方式举行，估计成本不小。同时消息认为这是由于中国的<span style="font-family: Times New Roman, serif;">iOS</span>开发者队伍庞大但相对水平不高的缘故。暂且不去理会，这里就把我在会议中的笔记整理一下，给感兴趣的人。当然，由于针对重点不同，而且本人的英语听力有限，里面肯定有遗漏，这里只作为一个参考吧。如果需要更多内容，欢迎您直接联系我。</p>
<p lang="zh-CN"><strong> 首先是<span style="font-family: Times New Roman, serif;">welcome</span>，演讲人是</strong><span style="font-family: Times New Roman, serif;"><strong>Mr. Michael Jurewitz</strong> </span></p>
<p>大致上介绍了一下<span style="font-family: Times New Roman, serif;">ios</span>的市场占有率，开发者构成，以及“辉煌的业绩报表”等等。<span style="font-family: Times New Roman, serif;">N</span>多商业术语，大致上作为开发者可以忽略了，感兴趣的朋友直接<span style="font-family: Times New Roman, serif;">google</span>或者关注<span style="font-family: Times New Roman, serif;">apple</span>的官方新闻即可。</p>
<p lang="zh-CN"><span id="more-1395"></span><br />
<strong><span style="font-family: Times New Roman, serif;">Make it great! </span>演讲人同样还是</strong><span style="font-family: Times New Roman, serif;"><strong>Michael Jurewitz</strong> </span></p>
<p lang="zh-CN">这个题目似乎是每次<span style="font-family: Times New Roman, serif;">apple</span>必讲的题目。这次主要就是说这个平台怎么怎么优秀之类的话题，其间一个翻译软件的演示很精彩：用摄像头直接取词翻译，注意不是简单的<span style="font-family: Times New Roman, serif;">OCR</span>，而是直接将翻译后的文本像<span style="font-family: Times New Roman, serif;">PS</span>那样转换回去，名副其实的“有色眼镜”。</p>
<p lang="zh-CN">然后就是介绍了几位主讲。</p>
<p lang="zh-CN"> 转入正题了</p>
<p lang="zh-CN"> <strong>关于<span style="font-family: Times New Roman, serif;">UI</span>设计，演讲人从姓氏上看是日本裔。</strong>很抱歉，当时正在调试<span style="font-family: Times New Roman, serif;">wifi</span>，没有记下题目和演讲者全名。</p>
<p lang="zh-CN">主要内容如下：</p>
<ol>
<li>当所有的用户都是傻子，他们什么都不懂。不要给他们产生太多操作上的歧义。</li>
<li>他们只会用触摸操作，要善用触摸的优势，抛开劣势。同时只有<span style="font-family: Times New Roman, serif;">44&#215;44</span>以上的按钮他们才不会点错。</li>
<li>他们有耳朵，要用合适的声音反馈。</li>
<li>要让他们的操作跟着你走。</li>
<li>让人误解的动画不如没有。</li>
<li>字体要合适，虽然可能没人注意</li>
<li>图形要合适，有参与性，且要鲜明，要一看就懂。</li>
<li>要有漂亮的图标，至少不会让你在<span style="font-family: Times New Roman, serif;">app store</span>里失分。</li>
</ol>
<p lang="zh-CN"> <strong><span style="font-family: Times New Roman, serif;">Optimizing app performance with instruments </span>（用<span style="font-family: Times New Roman, serif;">instruments</span>优化<span style="font-family: Times New Roman, serif;">app</span>性能）演讲人又是重量级的<span style="font-family: Times New Roman, serif;">Michael Jurewitz</span></strong></p>
<p lang="zh-CN">主要内容：</p>
<ol>
<li>对于一个程序来说性能永远是第一位的，没有人愿意为你的程序等待太多时间。</li>
<li><span style="font-family: Times New Roman, serif;">apple</span>提供了很多对于具体性能的测试工具，不要凭感觉行事。</li>
<li>着眼于真实环境下的测试数据和运行情况而不是仅仅停留在模拟机的测试结果。</li>
<li>
<p lang="zh-CN">快速启动一个应用是重中之重，解决这个问题最行之有效的方法是将所有的非<span style="font-family: Times New Roman, serif;">UI</span>操作都放到后台进程去执行。</p>
</li>
<li>一系列<span style="font-family: Times New Roman, serif;">instruments</span>的<span style="font-family: Times New Roman, serif;">Demo</span>，我想要拍照，被工作人员及时制止了<span style="font-family: Times New Roman, serif;"> <img src='http://www.litrin.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </span></li>
<li>尽量合适尺寸的<span style="font-family: Times New Roman, serif;">Png</span>，但要尽量减少<span style="font-family: Times New Roman, serif;">PNG</span>的透明效果以减少运算量，节省资源。</li>
<li>尽量减少内存占用（废话），推荐了<span style="font-family: Times New Roman, serif;">Auto realease pool</span>的解决方案和原理。</li>
<li>不要把内存泄漏信息直接透露给用户，这个似乎是低级错误了。</li>
<li>要及时清理后台进程和程序。 </li>
</ol>
<p><strong><span style="font-family: Times New Roman, serif;">iOS application architecture </span>（<span style="font-family: Times New Roman, serif;">iOS</span>应用的程序架构）还是<span style="font-family: Times New Roman, serif;">Michael Jurewitz</span></strong></p>
<p lang="zh-CN">主要内容：</p>
<ol>
<li>要在底层做好维护，简单有效的程序才叫优雅 。</li>
<li><span style="font-family: Times New Roman, serif;">Mvc is helpful &#8211; <img src='http://www.litrin.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  just as i know</span></li>
<li>通知信息不要高度耦合，要防止因为子循环影响了主循环的进度。</li>
<li><span style="font-family: Times New Roman, serif;">will/did/should/</span>方式的命名优势。</li>
<li>不要滥用视图<span style="font-family: Times New Roman, serif;">(View</span>层<span style="font-family: Times New Roman, serif;">)</span>，视图没有数据！！最糟糕的设计是在视图中操作数据。</li>
<li><span style="font-family: Times New Roman, serif;">goal is flex</span>（最终目标是弹性化）</li>
<li>减少模型之间过的多管理，同时不要跨层操作数据（说白了还是在强调<span style="font-family: Times New Roman, serif;">MVC</span>）。</li>
</ol>
<p> 中饭时间，不同上次我参加<span style="font-family: Times New Roman, serif;">SAP</span>的发布会，这次是中餐，第一次跟一帮不认识的人在一张桌子上吃饭，感觉气氛很尴尬。据说去年会议是中国人主讲，吃的是自助；今年是老外，搞得是中餐。深刻体现了<span style="font-family: Times New Roman, serif;">apple“</span>改变传统”的信条<span style="font-family: Times New Roman, serif;">^_^</span>！</p>
<p>下午分开两场，<span style="font-family: Times New Roman, serif;">A</span>会场偏向于<span style="font-family: Times New Roman, serif;">Game和</span>图形图像的开发，<span style="font-family: Times New Roman, serif;">B</span>则是偏向于<span style="font-family: Times New Roman, serif;">web</span>应用。考虑到我的实际需求，我选择了<span style="font-family: Times New Roman, serif;">B</span>场。</p>
<p> <strong><span style="font-family: Times New Roman, serif;">Building and optimizing website for ios </span>（为<span style="font-family: Times New Roman, serif;">iOS</span>架设和优化一个网站），主讲人<span style="font-family: Times New Roman, serif;">Ms. Vicki Murley </span></strong></p>
<p lang="zh-CN">主要内容：</p>
<ol>
<li>
<p lang="zh-CN">主要讲的内容其实是<span style="font-family: Times New Roman, serif;">HTML5</span>的规范。</p>
</li>
<li>
<p lang="zh-CN"><span style="font-family: Times New Roman, serif;">Css3</span>中<span style="font-family: Times New Roman, serif;">-webkit</span>标签的介绍。</p>
</li>
<li>
<p lang="zh-CN">一堆演示，同样不许拍照。</p>
</li>
<li>
<p lang="zh-CN"><span style="font-family: Times New Roman, serif;">IOS</span>和<span style="font-family: Times New Roman, serif;">html5</span>的组合的优势以及与桌面浏览器的不同之处</p>
<ol>
<li>
<p lang="zh-CN"><span style="font-family: Times New Roman, serif;">Html5</span>是<span style="font-family: Times New Roman, serif;">ios</span>上体现内容的最好载体。</p>
</li>
<li>
<p lang="zh-CN">要善用<span style="font-family: Times New Roman, serif;">HTML5</span>的离线存储，<span style="font-family: Times New Roman, serif;">ios4.2 </span>最大<span style="font-family: Times New Roman, serif;">50m </span></p>
</li>
<li>
<p lang="zh-CN"><span style="font-family: Times New Roman, serif;">ios</span>只能用基本的媒体格式，很少扩展，必须设定宽高，不支持音量调节种种限制。</p>
</li>
<li>
<p lang="zh-CN"><span style="font-family: Times New Roman, serif;">ios </span>的上浏览器的优势：<span style="font-family: Times New Roman, serif;">air print</span>设备、<span style="font-family: Times New Roman, serif;">air play</span>设备、加速计，陀螺仪，定位系统的使用</p>
</li>
</ol>
</li>
</ol>
<p> </p>
<p><strong><span style="font-family: Times New Roman, serif;">Working with video in iOS </span>（在<span style="font-family: Times New Roman, serif;">iOS</span>上播放视频），演讲人是<span style="font-family: Times New Roman, serif;">Mr. Eryk Vershen </span>（姓氏让我想到了福尔摩斯的助手，呵呵）</strong></p>
<p lang="zh-CN">这里的内容主要是展示了一堆代码，用于生成一个媒体播放器。主讲内容以<span style="font-family: Times New Roman, serif;">Demo</span>为主，停留在战术级别。个人觉得在这种场合下很难给人留下什么印象。让我感兴趣的就是最后他使用了一堆很生僻的<span style="font-family: Times New Roman, serif;">listener</span>实现了耳机线控，<span style="font-family: Times New Roman, serif;">ariplay</span>和向其他媒体输出的控制。</p>
<p lang="zh-CN"> <strong>总结：</strong></p>
<p lang="zh-CN">不谈别的，单从内容上讲，这次会议主要还是停留在比较低的层次。感觉适合初学者，对于有一定开发经验的朋友来说相对意义不大。当然主办方在会议的同时还开设了<span style="font-family: Times New Roman, serif;">Apple Lab</span>，开放与各位主讲人之间一对一的咨询，但需要预约，而且可能价格不菲。你带着问题来而且不发愁银子的话还是会有收获的。 </p>
<p lang="zh-CN"><span style="font-family: Times New Roman, serif;">PS</span>：与会者大多是用<span style="font-family: Times New Roman, serif;">Apple</span>的笔记本，我回头时发现无数个发光的<span style="font-family: Times New Roman, serif;">Apple logo</span>在照射着我，场面非常壮观，再此真的佩服<span style="font-family: Times New Roman, serif;">apple</span>的产品设计。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/02/15/ios-tech-talk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>说说Python的垃圾回收机制</title>
		<link>http://www.litrin.net/2011/02/08/%e8%af%b4%e8%af%b4python%e7%9a%84%e5%9e%83%e5%9c%be%e5%9b%9e%e6%94%b6%e6%9c%ba%e5%88%b6/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e8%25af%25b4%25e8%25af%25b4python%25e7%259a%2584%25e5%259e%2583%25e5%259c%25be%25e5%259b%259e%25e6%2594%25b6%25e6%259c%25ba%25e5%2588%25b6</link>
		<comments>http://www.litrin.net/2011/02/08/%e8%af%b4%e8%af%b4python%e7%9a%84%e5%9e%83%e5%9c%be%e5%9b%9e%e6%94%b6%e6%9c%ba%e5%88%b6/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 05:27:01 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1393</guid>
		<description><![CDATA[作为Java和python这类相对设计比较完善的解释型语言而言，总有很严密的垃圾回收机制用以防止资源被浪费甚至内存溢出之类的问题。起先我始终认为这会大大提升系统的性能，然而这次碰上了悖论。 刚过完春节，春节前，考虑到会有很多人发送贺卡，邮件系统的压力剧增。同时春节期间无人值守，没有办法人为干预很多。于是我打包了之前的一段python程序用来在节日期间发送大量的邮件贺卡。 初次测试的过程中，由于仅仅只是测试下性能如何，没有“特别规矩”没有关闭定义的类，于是代码大致如此： for mailBody in mailList:         mail = SendMail()         mail.MailServer['UserName'] = username         mail.MailServer['Password'] = password          mail.MailServer['Host'] = host         mail.MailServer['port'] = port         mail.SenderName = senderName         mail.Charset = 'UTF-8'         mail.AddMeta('Precedence', 'bulk')         delFromDb(mailBody[3])           try :             mail.Send(From = smtpFrom,               Address = mailBody[0],               Subject = mailBody[1], [...]]]></description>
			<content:encoded><![CDATA[<p>作为Java和python这类相对设计比较完善的解释型语言而言，总有很严密的垃圾回收机制用以防止资源被浪费甚至内存溢出之类的问题。起先我始终认为这会大大提升系统的性能，然而这次碰上了悖论。<br />
刚过完春节，春节前，考虑到会有很多人发送贺卡，邮件系统的压力剧增。同时春节期间无人值守，没有办法人为干预很多。于是我打包了<a href="http://www.litrin.net/2010/06/30/%E9%87%8D%E6%96%B0%E5%B0%81%E5%8C%85%E7%9A%84python-smtplib/" target="_blank">之前的一段python程序</a>用来在节日期间发送大量的邮件贺卡。</p>
<p><span id="more-1393"></span><br />
初次测试的过程中，由于仅仅只是测试下性能如何，没有“特别规矩”没有关闭定义的类，于是代码大致如此：</p>
<pre name=code class=python>
for mailBody in mailList:

        mail = SendMail()
        mail.MailServer['UserName'] = username
        mail.MailServer['Password'] = password 
        mail.MailServer['Host'] = host
        mail.MailServer['port'] = port

        mail.SenderName = senderName
        mail.Charset = 'UTF-8'

        mail.AddMeta('Precedence', 'bulk')

        delFromDb(mailBody[3])  

        try :
            mail.Send(From = smtpFrom,
              Address = mailBody[0],
              Subject = mailBody[1],
              Body = mailBody[2])           

            logging.info('Mail send to: ' + mailBody[0] + " with subject is " + mailBody[1] + " By thread #" + str(thread))

        except:
            logging.error('Error send to: ' + mailBody[0] + " with subject is " + mailBody[1] +"By thread #" + str(thread))</pre>
<p>初版测试了一下，每小时的发送量保守达到2w左右。已经达到了要求，可以正式部署。<br />
考虑到了生产环境中的服务器负载很高，于是对python的代码提出了更高的要求，在上述代码的最后加上了一句：<br />
mail = None<br />
结束发送循环以后立即释放 SendMail()这个类占据的资源。这是一个程序员都应该遵守的好习惯。部署好了以后，再次测试，每小时仅能发送不足7000。性能仅有之前的30%。<br />
多次拉锯测试，只要加上那句mail=None，性能就会下降。所有的性能缺陷都指向了这句“好习惯”。没什么说的，直接在头部加上</p>
<pre name=code class=python>
import gc
gc.disable()
</pre>
<p>加不加那句已经没有实质性的影响了。</p>
<p>Python不同于Java的垃圾回收机制，Java机制是只有等到资源，特别是内存资源紧张的情况下才会执行垃圾回收机制。而Python则是忠实于C++系的逻辑，只要资源没有被引用就回自动被回收机制无情的回收。<br />
在这个例子中，由于Sendmail的类相对比较复杂的操作，每次构建和解构的过程都需要花费较长时间。而且由于Sendmail是主循环，占用了大量的内存，每次垃圾的回收系统都会重新整理内存碎片，如果每次都为释放内存而手工解构的话性能反而会大大降低。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2011/02/08/%e8%af%b4%e8%af%b4python%e7%9a%84%e5%9e%83%e5%9c%be%e5%9b%9e%e6%94%b6%e6%9c%ba%e5%88%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从Symbian的摇摆说起</title>
		<link>http://www.litrin.net/2010/12/30/%e4%bb%8esymbian%e7%9a%84%e6%91%87%e6%91%86%e8%af%b4%e8%b5%b7/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bb%258esymbian%25e7%259a%2584%25e6%2591%2587%25e6%2591%2586%25e8%25af%25b4%25e8%25b5%25b7</link>
		<comments>http://www.litrin.net/2010/12/30/%e4%bb%8esymbian%e7%9a%84%e6%91%87%e6%91%86%e8%af%b4%e8%b5%b7/#comments</comments>
		<pubDate>Thu, 30 Dec 2010 13:22:08 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[业界话题]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1378</guid>
		<description><![CDATA[今天刚刚更新了Nokia的OVI套件到3.0，粗粗的扫了一下界面，不忍唏嘘起来。最新的界面总算开了窍，把应用的下载放在了主界面上，多媒体、应用的购买也直接整合进了系统。这次算是Nokia总算跟上了潮流，但这已经晚了，而且不是晚了一年两年。 Nokia，在我周围的人群当中占有率极高，可以说是压倒性的。随便问问一个人：“你为什么选择Nokia？”“信号好，价钱便宜！”但是一旦问起一个稍微潮一点的人，下一部手机准备买什么。几乎所有的人都对Nokia说NO!至少单从这一点而言，Nokia的老大地位岌岌可危。 所谓成也萧何，败也萧何。Symbian这个Nokia的金字招牌也随着Nokia的沉浮命运多舛。尽管Nokia的官方一再强调持续支持Symbian及其后续版本Symbian3，但明眼人都明白Nokia对于未来都寄托在那个与Intel合作开发的Meego系统上了。 Symbian，先是Nokia独美的系统，开源后先后被大多数的手机厂商打包近自己的产品。Symbian基金会的业务繁忙，一度引领整个智能手机行业。虽然事实上Nokia牢牢控制着Symbian的走向，但作为一个开源的项目，众人拾柴火焰高的道理显而易见。 后来出来一个Iphone，世界由此改变…… Android，彻底颠覆了世界…… Android已经逐步替换了Symbian的位置，同样是开源。 现如今Symbian成了弃儿，各大厂商纷纷转投了Adroid名下，Symbian的开源已经没有意义，只能重新闭源。对于Nokia而言，反正只有自己在上面玩了，关起门来不是更安全么。于是乎，很少见的闭源复辟了。 用过iphone，用过HTC，Moto。毫无疑问的是，这些手机的信号绝对没有Nokia来的强。Nokia毕竟是一个手机公司，做的事情毫无疑问的是围绕“电话”这个功能做文章。而对于3G时代领跑的Apple和Google，两家本身是“IT”公司，他们的目标事实上是“提供信息”。语音也是信息，但无疑直接的语音信息远没有开个网页那么简单。于是乎，所谓3G的手机事实上最大的用途不是通话而是“互联网”。 最早提出智能手机的似乎是Moto，然而时机的不成熟差点让他关门大吉。显然Apple看准了时机。天时、地利、人和，显然最难把握的要数天时了。兴许iphone的推出，Nokia根本没有意识到，以通讯质量、待机时间、音质考核一部手机的时代已经远去。未来是CPU，内存，显卡等等看似现在用来评价PC的东西。“永远不要与傻子作对，他会把你拉到同等的智商下，然后用自己对于这个智商丰富的经验来打败你。”两家IT公司确实做到了。 同样的对于将手机变大的趋势，Apple成功的给几乎地铁里的每一个人配了个ipad，Android的也是从mp4做起，搞了七零八落的所有想得到的东西。Symbian 只是前些日子听过有个上网本，后来就，没有后来了。 Nokia是3G标准的制定者之一（WCDMA），也算是最早推出3G终端的供应商之一。然而无疑，他被自己设置的门槛绊倒了。Symbian的大势已去迎来的是拼手机硬件的时代，智能手机是一个带电话功能的PDA而已，Nokia白忙活了。 这世上之所以成功的人永远是少数，是因为大多数人的方向错了，走上一段后，又重定方向，最后只是在原地打转，可只要不变，坚持下去，也会成功。就像欧阳锋，就算一本错的《九阴真经》，依然会有傲视群雄的一天……（围脖上某位大师的话）暂且用Jobs的那句讽刺Nokia的话给他指明方向吧：“我们可没有能力造出$100的手机。”]]></description>
			<content:encoded><![CDATA[<p>今天刚刚更新了Nokia的OVI套件到3.0，粗粗的扫了一下界面，不忍唏嘘起来。最新的界面总算开了窍，把应用的下载放在了主界面上，多媒体、应用的购买也直接整合进了系统。这次算是Nokia总算跟上了潮流，但这已经晚了，而且不是晚了一年两年。</p>
<p>Nokia，在我周围的人群当中占有率极高，可以说是压倒性的。随便问问一个人：“你为什么选择Nokia？”“信号好，价钱便宜！”但是一旦问起一个稍微潮一点的人，下一部手机准备买什么。几乎所有的人都对Nokia说NO!至少单从这一点而言，Nokia的老大地位岌岌可危。</p>
<p>所谓成也萧何，败也萧何。Symbian这个Nokia的金字招牌也随着Nokia的沉浮命运多舛。尽管Nokia的官方一再强调持续支持Symbian及其后续版本Symbian3，但明眼人都明白Nokia对于未来都寄托在那个与Intel合作开发的Meego系统上了。</p>
<p><span id="more-1378"></span>Symbian，先是Nokia独美的系统，开源后先后被大多数的手机厂商打包近自己的产品。Symbian基金会的业务繁忙，一度引领整个智能手机行业。虽然事实上Nokia牢牢控制着Symbian的走向，但作为一个开源的项目，众人拾柴火焰高的道理显而易见。</p>
<p>后来出来一个Iphone，世界由此改变……<br />
Android，彻底颠覆了世界……<br />
Android已经逐步替换了Symbian的位置，同样是开源。</p>
<p>现如今Symbian成了弃儿，各大厂商纷纷转投了Adroid名下，Symbian的开源已经没有意义，只能重新闭源。对于Nokia而言，反正只有自己在上面玩了，关起门来不是更安全么。于是乎，很少见的闭源复辟了。</p>
<p>用过iphone，用过HTC，Moto。毫无疑问的是，这些手机的信号绝对没有Nokia来的强。Nokia毕竟是一个手机公司，做的事情毫无疑问的是围绕“电话”这个功能做文章。而对于3G时代领跑的Apple和Google，两家本身是“IT”公司，他们的目标事实上是“提供信息”。语音也是信息，但无疑直接的语音信息远没有开个网页那么简单。于是乎，所谓3G的手机事实上最大的用途不是通话而是“互联网”。</p>
<p>最早提出智能手机的似乎是Moto，然而时机的不成熟差点让他关门大吉。显然Apple看准了时机。天时、地利、人和，显然最难把握的要数天时了。兴许iphone的推出，Nokia根本没有意识到，以通讯质量、待机时间、音质考核一部手机的时代已经远去。未来是CPU，内存，显卡等等看似现在用来评价PC的东西。<strong>“永远不要与傻子作对，他会把你拉到同等的智商下，然后用自己对于这个智商丰富的经验来打败你。”</strong>两家IT公司确实做到了。</p>
<p>同样的对于将手机变大的趋势，Apple成功的给几乎地铁里的每一个人配了个ipad，Android的也是从mp4做起，搞了七零八落的所有想得到的东西。Symbian 只是前些日子听过有个上网本，后来就，没有后来了。</p>
<p>Nokia是3G标准的制定者之一（WCDMA），也算是最早推出3G终端的供应商之一。然而无疑，他被自己设置的门槛绊倒了。Symbian的大势已去迎来的是拼手机硬件的时代，智能手机是一个带电话功能的PDA而已，Nokia白忙活了。</p>
<p><em>这世上之所以成功的人永远是少数，是因为大多数人的方向错了，走上一段后，又重定方向，最后只是在原地打转，可只要不变，坚持下去，也会成功。就像欧阳锋，就算一本错的《九阴真经》，依然会有傲视群雄的一天……</em>（围脖上某位大师的话）暂且用Jobs的那句讽刺Nokia的话给他指明方向吧：“我们可没有能力造出$100的手机。”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/12/30/%e4%bb%8esymbian%e7%9a%84%e6%91%87%e6%91%86%e8%af%b4%e8%b5%b7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从GAE看网站架构趋势</title>
		<link>http://www.litrin.net/2010/12/21/%e4%bb%8egae%e7%9c%8b%e7%bd%91%e7%ab%99%e6%9e%b6%e6%9e%84%e8%b6%8b%e5%8a%bf/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bb%258egae%25e7%259c%258b%25e7%25bd%2591%25e7%25ab%2599%25e6%259e%25b6%25e6%259e%2584%25e8%25b6%258b%25e5%258a%25bf</link>
		<comments>http://www.litrin.net/2010/12/21/%e4%bb%8egae%e7%9c%8b%e7%bd%91%e7%ab%99%e6%9e%b6%e6%9e%84%e8%b6%8b%e5%8a%bf/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 01:59:53 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[业界话题]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1372</guid>
		<description><![CDATA[在Google App Engine做了几个东西。从当初觉得这个平台的迥然不同，直到现在逐步了解了这个平台的逻辑架构。作为Google的一款成功的作品，相信GAE的很多东西将会陆陆续续被模仿和抄袭，直到真正影响到我们。本文就以我个人的理解，谈谈GAE将会给今后的网站架构带来哪些革命性的东西。 首当其冲的应该算是云技术，但这个技术总体上属于物理层的技术，况且云已经成为公认的技术趋势。这里主要是谈下网站的架构，云技术相对关系较为偏离，我也就不再探讨了。 BigTable数据库 一开始接触下来的GAE，最感觉不适应的就非它的“数据存储”技术。通常用惯了SQL，用了GAE觉得数据设计上很要有很大的转变。 GAE的“数据库”感觉就是一个巨大的List，每一条记录都是key-value的对应关系。当然起初是无法满足很多传统上的数据结构。不过如果你能够在数据结构设计上打破SQL的限制，通过极端灵活的Key-value, key-value, key-value，你就能发觉这样的框架事实上比传统的SQL更适合网站。 说mysql比oracle在网站实现上的优势并非是因为它功能的强大，而是它速度快，结构简单。尽管有人戏称mysql“裸奔”，但无可否认的就是这种“裸奔”的效果带来的mysql的成功。GAE的数据库比mysql还要“裸奔”，但更快的响应将会是SQL永远无法企及的。FaceBook之前也抛弃了SQL亦证明了这一点。 此外整站之间的数据复制也算是革新之一。 多通道的融合 GAE整合了mail，xmpp，跨域验证等一系列的通道也算是特色之一，想必很多人会认为google这是在捆绑自己的产品。作为之前的门户网站的特色，每家人都会有一个自己的邮箱，一个自己的聊天工具，以及一系列自己的产品捆绑在内。GAE的创新在于用户只需要一个自己的google帐户就可以实现捆绑所有的gae服务。这是一个真正意义上的以用户为本。 Xmpp的捆绑还意味着EDM之后，将来IM营销或者类似的IM推送将会逐步成为一个产业。或者更进一步，IM机器人或者类似的技术将会一定程度上取代现有人人对话模式。当然，这需要一段时间，但至少个人认为目前大量的taobao网店需要这种技术^_^。 精巧的运维界面 相信GAE的后他大家也会印象深刻，能对每一个模块进行精确的监控，已经让运维的工作从翻阅日志的文本化提升到了图形化。粒度也更为精准，如果能配合Analytics之类的数据，完全可以实现智能化的运维。 RSS XML SOAP 网址抓取&#8230; 其实这也不算是什么革新，Web2.0时代的开始就是以此为标志的。但事实上单单从开发库中各个库的名称都叫API来看，就可以明白，其实整个GAE就是构建在这些基础之上的。SOAP成为了各个模块之间的粘合剂。 这个带来的优势就是，无需关心这个库那个库——好像本站技术性文档的大部分都是解决的“库问题”。各自统一接口，加速了开发的进程。]]></description>
			<content:encoded><![CDATA[<p>在Google App Engine做了几个东西。从当初觉得这个平台的迥然不同，直到现在逐步了解了这个平台的逻辑架构。作为Google的一款成功的作品，相信GAE的很多东西将会陆陆续续被模仿和抄袭，直到真正影响到我们。本文就以我个人的理解，谈谈GAE将会给今后的网站架构带来哪些革命性的东西。</p>
<p>首当其冲的应该算是云技术，但这个技术总体上属于物理层的技术，况且云已经成为公认的技术趋势。这里主要是谈下网站的架构，云技术相对关系较为偏离，我也就不再探讨了。</p>
<p><span id="more-1372"></span></p>
<p><strong>BigTable数据库</strong></p>
<p>一开始接触下来的GAE，最感觉不适应的就非它的“数据存储”技术。通常用惯了SQL，用了GAE觉得数据设计上很要有很大的转变。<br />
GAE的“数据库”感觉就是一个巨大的List，每一条记录都是key-value的对应关系。当然起初是无法满足很多传统上的数据结构。不过如果你能够在数据结构设计上打破SQL的限制，通过极端灵活的Key-value, key-value, key-value，你就能发觉这样的框架事实上比传统的SQL更适合网站。<br />
说mysql比oracle在网站实现上的优势并非是因为它功能的强大，而是它速度快，结构简单。尽管有人戏称mysql“裸奔”，但无可否认的就是这种“裸奔”的效果带来的mysql的成功。GAE的数据库比mysql还要“裸奔”，但更快的响应将会是SQL永远无法企及的。FaceBook之前也抛弃了SQL亦证明了这一点。</p>
<p>此外整站之间的数据复制也算是革新之一。</p>
<p><strong>多通道的融合</strong></p>
<p>GAE整合了mail，xmpp，跨域验证等一系列的通道也算是特色之一，想必很多人会认为google这是在捆绑自己的产品。作为之前的门户网站的特色，每家人都会有一个自己的邮箱，一个自己的聊天工具，以及一系列自己的产品捆绑在内。GAE的创新在于用户只需要一个自己的google帐户就可以实现捆绑所有的gae服务。这是一个真正意义上的以用户为本。<br />
Xmpp的捆绑还意味着EDM之后，将来IM营销或者类似的IM推送将会逐步成为一个产业。或者更进一步，IM机器人或者类似的技术将会一定程度上取代现有人人对话模式。当然，这需要一段时间，但至少个人认为目前大量的taobao网店需要这种技术^_^。</p>
<p><strong>精巧的运维界面</strong></p>
<p>相信GAE的后他大家也会印象深刻，能对每一个模块进行精确的监控，已经让运维的工作从翻阅日志的文本化提升到了图形化。粒度也更为精准，如果能配合Analytics之类的数据，完全可以实现智能化的运维。</p>
<p><strong>RSS XML </strong><strong>SOAP </strong>网址抓取&#8230;</p>
<p>其实这也不算是什么革新，Web2.0时代的开始就是以此为标志的。但事实上单单从开发库中各个库的名称都叫API来看，就可以明白，其实整个GAE就是构建在这些基础之上的。SOAP成为了各个模块之间的粘合剂。<br />
这个带来的优势就是，无需关心这个库那个库——好像<a href="http://www.litrin.net/" target="_blank">本站</a>技术性文档的大部分都是解决的“库问题”。各自统一接口，加速了开发的进程。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/12/21/%e4%bb%8egae%e7%9c%8b%e7%bd%91%e7%ab%99%e6%9e%b6%e6%9e%84%e8%b6%8b%e5%8a%bf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>发发Android的牢骚</title>
		<link>http://www.litrin.net/2010/12/15/%e5%8f%91%e5%8f%91android%e7%9a%84%e7%89%a2%e9%aa%9a/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%258f%2591%25e5%258f%2591android%25e7%259a%2584%25e7%2589%25a2%25e9%25aa%259a</link>
		<comments>http://www.litrin.net/2010/12/15/%e5%8f%91%e5%8f%91android%e7%9a%84%e7%89%a2%e9%aa%9a/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 03:06:17 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1368</guid>
		<description><![CDATA[这些日子正在做一个手机终端的项目。作为项目的原型设计，总要自己做点东西出来看看。于是乎，考虑到现在Android的大热，而且不像iphone那样必须上专用的开发机（xcode必须要Mac系统），于是决定用Android。 进度进行的很快，有人说开发起来像Java，我觉得其实比Java来的轻松的多，所有的事件已经提前绑定在了系统里，整个过程更像是在开发一个脚本或者插件，几下子一个界面就出来了。如果你像我一样仅仅是做个原型，不在UI多做考虑的话真的是很方便。 本以为做CS结构的系统，不像做BS结构那样要调什么浏览器兼容性之类的问题。只要考虑UI和具体实现就OK了。几天开发过去，我严重鄙视了这个想法。 OK，说UI，问题来了。一开始用Google自家的Nexus One (G5)作为测试平台，所有的UI都是按照那个分辨率进行的。后来G5给了另一个兄弟测试用，自己用了HTC WildFire(G8)。那叫一个晕，所有的定位全部乱套。想要调整吧，Eclipse插件实现的“所见即所得”的功能实在是不敢恭维，生成出来的界面XML文件基本上已经封杀了肉眼能够读通的水平。最简单的方法反而是重新做一套。后来得知Android SDK 2.1以上本身就有实现此功能的解决方法，但一下子都封装到一个安装包里是不是有点怪异？不考虑到怪异版本的分辨率，480&#215;320, 640&#215;360, 800&#215;480算是主流的几种分辨率，还要考虑横向纵向什么的已经有了6种可能。远不如Iphone甚至于Nokia sybiam那样的统一。 再说兼容性的问题。1.5的Moto me600差不多我用到的系统调用有一半跟2.2是不一样的。用2.2开发出来的程序可以强制安装到2.0上，而且没有任何兼容性故障（可能是我代码没有体现出来两者的不同）。但看似很简单的一个setOnItemClickListener 事件，1.5就无法实现。只能把me600刷成2.2来跑。如果是开发一个产品的话无疑要考虑到这个问题，开发成本和难度以及测试覆盖成本可想而知。这也无外乎Angry Bird之类最热门的Android应用索性直接放弃了1.6以下。 最后说说SDK库和文档的问题，手册本地化也不提了，手册被墙也和Android无关。只能说，Android的SDK只考虑到了最简单的Hello world之类的实现，对于手机上如此丰富的系统调用却根本没有提及。SDK自动生成的部分也是经常搞的你晕头转向，经常报些无厘头的错。 就说这么多。]]></description>
			<content:encoded><![CDATA[<p>这些日子正在做一个手机终端的项目。作为项目的原型设计，总要自己做点东西出来看看。于是乎，考虑到现在Android的大热，而且不像iphone那样必须上专用的开发机（xcode必须要Mac系统），于是决定用Android。</p>
<p>进度进行的很快，有人说开发起来像Java，我觉得其实比Java来的轻松的多，所有的事件已经提前绑定在了系统里，整个过程更像是在开发一个脚本或者插件，几下子一个界面就出来了。如果你像我一样仅仅是做个原型，不在UI多做考虑的话真的是很方便。</p>
<p><span id="more-1368"></span></p>
<p>本以为做CS结构的系统，不像做BS结构那样要调什么浏览器兼容性之类的问题。只要考虑UI和具体实现就OK了。几天开发过去，我严重鄙视了这个想法。</p>
<p>OK，说UI，问题来了。一开始用Google自家的Nexus One (G5)作为测试平台，所有的UI都是按照那个分辨率进行的。后来G5给了另一个兄弟测试用，自己用了HTC WildFire(G8)。那叫一个晕，所有的定位全部乱套。想要调整吧，Eclipse插件实现的“所见即所得”的功能实在是不敢恭维，生成出来的界面XML文件基本上已经封杀了肉眼能够读通的水平。最简单的方法反而是重新做一套。后来得知Android SDK 2.1以上本身就有实现此功能的解决方法，但一下子都封装到一个安装包里是不是有点怪异？不考虑到怪异版本的分辨率，480&#215;320, 640&#215;360, 800&#215;480算是主流的几种分辨率，还要考虑横向纵向什么的已经有了6种可能。远不如Iphone甚至于Nokia sybiam那样的统一。</p>
<p>再说兼容性的问题。1.5的Moto me600差不多我用到的系统调用有一半跟2.2是不一样的。用2.2开发出来的程序可以强制安装到2.0上，而且没有任何兼容性故障（可能是我代码没有体现出来两者的不同）。但看似很简单的一个setOnItemClickListener 事件，1.5就无法实现。只能把me600刷成2.2来跑。如果是开发一个产品的话无疑要考虑到这个问题，开发成本和难度以及测试覆盖成本可想而知。这也无外乎Angry Bird之类最热门的Android应用索性直接放弃了1.6以下。</p>
<p>最后说说SDK库和文档的问题，手册本地化也不提了，手册被墙也和Android无关。只能说，Android的SDK只考虑到了最简单的Hello world之类的实现，对于手机上如此丰富的系统调用却根本没有提及。SDK自动生成的部分也是经常搞的你晕头转向，经常报些无厘头的错。</p>
<p>就说这么多。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/12/15/%e5%8f%91%e5%8f%91android%e7%9a%84%e7%89%a2%e9%aa%9a/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ubuntu上Xen的快速部署</title>
		<link>http://www.litrin.net/2010/10/08/ubuntu%e4%b8%8axen%e7%9a%84%e5%bf%ab%e9%80%9f%e9%83%a8%e7%bd%b2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ubuntu%25e4%25b8%258axen%25e7%259a%2584%25e5%25bf%25ab%25e9%2580%259f%25e9%2583%25a8%25e7%25bd%25b2</link>
		<comments>http://www.litrin.net/2010/10/08/ubuntu%e4%b8%8axen%e7%9a%84%e5%bf%ab%e9%80%9f%e9%83%a8%e7%bd%b2/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 02:02:29 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1324</guid>
		<description><![CDATA[上篇CentOS上Xen的快速部署中给的承诺，现在兑现。 注意的是本文的实例采用的是Ubuntu804 Server的LTS版本，采用这个版本而不是习惯上采用最新版本的Ubuntu主要是考虑到几个因素： 至少在904之后，Ubuntu从支持库中移除了Kernel-xen的包，仅保留xen-server的支持包。这也就意味着Xen已经得不到官方支持，804成了目前唯一提供官方支持的xen版本。当然你可以手工编译自己的内核或者使用debian的对应包强行安装Xen，但出错的概率比较大（本人在1004的版本上尝试过几次才顺利启动）。 1004的grub设置变动很大，尚没有搞懂手动修改启动顺序的正确方法。设置错误会直接损坏grub导致无法启动。 这次主机比上次的好，至少支持硬件虚拟化，方便很多。 安装Xen支持 Ubuntu的标志性命令，非常容易。 #sudo apt-get install ubuntu-xen-server xen 如果使用的是804以后的版本，在此之后，如果使用debian包，则下载linux linux-modules linux-headers的带xen的包，并使用sudo dpkg -i 方法安装。 直接编译内核的同学，可以直接load /boot/config-xxxx-xxx文件并手工添加xen的支持(make menuconfig) 用xen内核重启。 #sudo nano /etc/xen/xend-config.sxp 将#(vnc-listen &#8217;127.0.0.1&#8242;)修改为(vnc-listen &#8217;0.0.0.0&#8242;) 安装来宾操作系统：方法1，直接安装 这种方式的前提是你的cpu支持硬件虚拟化 建立虚拟硬盘，如果使用实际裸分区，可跳过 #sudo mkdir /xen #sudo dd if=/dev/zero of=/xen/2003_disk bs=1 count=0 seek=5G 编辑配置文件/etc/xen/2003 kernel = '/usr/lib64/xen/boot/hvmloader'#64位内核，32位的则替换为'/usr/lib/xen/boot/hvmloader' builder='hvm' memory = 512 #内存 shadow_memory = 8 name [...]]]></description>
			<content:encoded><![CDATA[<p>上篇<a title="Permanent Link: CentOS上Xen的快速部署" rel="bookmark" href="http://www.litrin.net/2010/09/16/centos%e4%b8%8axen%e7%9a%84%e5%bf%ab%e9%80%9f%e9%83%a8%e7%bd%b2/">CentOS上Xen的快速部署</a>中给的承诺，现在兑现。</p>
<p>注意的是本文的实例采用的是Ubuntu804 Server的LTS版本，采用这个版本而不是习惯上采用最新版本的Ubuntu主要是考虑到几个因素：</p>
<ol>
<li>至少在904之后，Ubuntu从支持库中移除了Kernel-xen的包，仅保留xen-server的支持包。这也就意味着Xen已经得不到官方支持，804成了目前唯一提供官方支持的xen版本。当然你可以手工编译自己的内核或者使用<a rel="nofollow" target="_blank" href="http://security.debian.org/debian-security/pool/updates/main/l/">debian的对应包</a>强行安装Xen，但出错的概率比较大（本人在1004的版本上尝试过几次才顺利启动）。</li>
<li>1004的grub设置变动很大，尚没有搞懂手动修改启动顺序的正确方法。设置错误会直接损坏grub导致无法启动。</li>
</ol>
<p>这次主机比上次的好，至少支持硬件虚拟化，方便很多。</p>
<p><span id="more-1324"></span></p>
<p><strong>安装Xen支持</strong></p>
<p>Ubuntu的标志性命令，非常容易。<br />
#sudo apt-get install <a title="ubuntu" href="http://www.litrin.net/tag/ubuntu/">ubuntu</a>-xen-server xen</p>
<p>如果使用的是804以后的版本，在此之后，如果使用debian包，则下载linux linux-modules linux-headers的带xen的包，并使用sudo dpkg -i 方法安装。<br />
直接编译内核的同学，可以直接load /boot/config-xxxx-xxx文件并手工添加xen的支持(make menuconfig)</p>
<p>用xen内核重启。</p>
<p>#sudo nano /etc/xen/xend-config.sxp<br />
将#(vnc-listen &#8217;127.0.0.1&#8242;)修改为(vnc-listen &#8217;0.0.0.0&#8242;)</p>
<p><strong>安装来宾操作系统：方法1，直接安装</strong></p>
<p>这种方式的前提是你的cpu支持硬件虚拟化</p>
<p>建立虚拟硬盘，如果使用实际裸分区，可跳过<br />
#sudo mkdir /xen<br />
#sudo dd if=/dev/zero of=/xen/2003_disk bs=1 count=0 seek=5G<br />
编辑配置文件/etc/xen/2003</p>
<pre>kernel = '/usr/lib64/xen/boot/hvmloader'#64位内核，32位的则替换为'/usr/lib/xen/boot/hvmloader'
builder='hvm'
memory = 512 #内存
shadow_memory = 8
name = "2003"
vif = [ 'type=ioemu, bridge=eth0' ]
disk = [
   'tap:aio:/xen/2003_disk,hda,w',
   #'phy:/dev/sda5,hda,w', #挂装裸分区方式
   'phy:/dev/cdrom,hdc:cdrom,r'
]

boot = "dc"
device_model = '/usr/lib64/xen/bin/qemu-dm'
vnc=1
vncpasswd=''
serial='pty'
sdl=1</pre>
<p>启动虚拟机<br />
sudo xm create /etc/xen/2003</p>
<p>用vnc客户端直接连接主机，即可开始典型的图形化安装过程。</p>
<p><strong>安装来宾操作系统：方法2，xen-create-image</strong></p>
<p>sudo xen-create-image &#8211;hostname=xen-ubuntu &#8211;size=5gb &#8211;memory=256mb &#8211;partitions=with-data &#8211;dist=lucid &#8211;ip=192.168.103.101 &#8211;gateway=192.168.103.254 &#8211;netmask=255.255.254.0  &#8211;mirror=http://cn.archive.ubuntu.com/ubuntu  &#8211;boot &#8211;passwd &#8211;role udev &#8211;dir=/etc/xen &#8211;force</p>
<p>系统会自动完成xen的配置并从制定的源中下载安装操作系统。</p>
<p><strong>部分操作（照贴过来的）</strong></p>
<p>xm console &lt;NAME&gt; 连接到虚拟机控制台<br />
xm create &lt;NAME&gt; 根据配置文件创建主机，如果您一直follow之前的操作并且完成了虚拟主机的安装，这条命令实际上等于启动一台虚拟机<br />
xm shutdown &lt;NAME&gt; 关机<br />
xm reboot &lt;NAME&gt; 重启<br />
xm destroy &lt;NAME&gt; 删除主机<br />
xentop 各主机之前的资源占用情况</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/10/08/ubuntu%e4%b8%8axen%e7%9a%84%e5%bf%ab%e9%80%9f%e9%83%a8%e7%bd%b2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CentOS上Xen的快速部署</title>
		<link>http://www.litrin.net/2010/09/16/centos%e4%b8%8axen%e7%9a%84%e5%bf%ab%e9%80%9f%e9%83%a8%e7%bd%b2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=centos%25e4%25b8%258axen%25e7%259a%2584%25e5%25bf%25ab%25e9%2580%259f%25e9%2583%25a8%25e7%25bd%25b2</link>
		<comments>http://www.litrin.net/2010/09/16/centos%e4%b8%8axen%e7%9a%84%e5%bf%ab%e9%80%9f%e9%83%a8%e7%bd%b2/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 05:57:43 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1312</guid>
		<description><![CDATA[背景描述 一台托管在外的服务器，环境为CentOS5.5，跑LAMP。由于运行环境和成本控制的考虑，需要同时配置PHP4+Mysql和PHP5+Mysql两种环境。起初计划采用两个apache环境，不同的端口来解决。考虑到目前Xen技术上已经成熟，于是考虑在真实主机上安装ngnix和mysql。通过xen安装两套虚拟环境分别配置不同的Php版本，前端使用ngnix代理的方式实现多个虚拟主机合并到同一个80号的目的。 本文同样适用于Redhat和小白鼠Fedora. 真实主机（主机名:www）上配置Xen CentOS的Xen还是比较容易设置的 #yum install kernel-xen xen等待安装，安装结束后，修改grub配置，确保主机通过xen内核启动后，重启主机。 主机启动后，首先确认 #uname -r ，内核版本号后面应该跟随一个xen标记，如：2.6.18-194.11.3.el5xen 需要解释的是，由于这台主机的要求网络结构是“一个出口”，即逻辑上虚拟主机的网络拓扑应该是路由方式，而Centos默认Xen的结构是网桥模式，这里需要修改下相应的配置。 /etc/xen/xend-config.sxp文件中 (network-script network-bridge) (vif-script vif-bridge) 注释掉 (network-script network-route) (vif-script     vif-route) 去掉注释 重启xen服务使设置生效，/etc/init.d/xend restart 配置虚拟主机 相比之前参考的很多文档，Centos的虚拟主机配置相对比较容易，至少没有那么复杂，因为Centos提供了一个比较方便的工具virt-install 我准备给虚拟主机都安装CentOS5.5，为了方便，我将光盘挂装到了 /mnt并设置了ngnix可以直接通过http://www/方式访问光盘中的文件，如果您之前通过http或者其他方式网络安装过操作系统，这一步应该很好理解。 正题来了：  virt-install -n CentOSVM1 -r 512 -f /xen/CentOSVM1.img  -l http://www/  &#8211;network=network:default -p -s 10 &#8211;nographics &#8211;vcpus=2 解释： -n CentOSVM1 设置虚拟服务器名称 -r 512 设置内存大小 -f [...]]]></description>
			<content:encoded><![CDATA[<p>背景描述</p>
<p>一台托管在外的服务器，环境为CentOS5.5，跑LAMP。由于运行环境和成本控制的考虑，需要同时配置PHP4+Mysql和PHP5+Mysql两种环境。起初计划采用两个apache环境，不同的端口来解决。考虑到目前Xen技术上已经成熟，于是考虑在真实主机上安装ngnix和mysql。通过xen安装两套虚拟环境分别配置不同的Php版本，前端使用ngnix代理的方式实现多个虚拟主机合并到同一个80号的目的。</p>
<p>本文同样适用于Redhat和小白鼠Fedora.</p>
<p><span id="more-1312"></span></p>
<p><strong>真实主机（主机名:www）上配置Xen</strong></p>
<p>CentOS的Xen还是比较容易设置的<br />
#yum install kernel-xen xen等待安装，安装结束后，修改grub配置，确保主机通过xen内核启动后，重启主机。</p>
<p>主机启动后，首先确认<br />
#uname -r ，内核版本号后面应该跟随一个xen标记，如：2.6.18-194.11.3.el5<strong>xen</strong></p>
<p>需要解释的是，由于这台主机的要求网络结构是“一个出口”，即逻辑上虚拟主机的网络拓扑应该是路由方式，而Centos默认Xen的结构是网桥模式，这里需要修改下相应的配置。<br />
/etc/xen/xend-config.sxp文件中<br />
(network-script network-bridge)<br />
(vif-script vif-bridge)<br />
注释掉<br />
(network-script network-route)<br />
(vif-script     vif-route)<br />
去掉注释<br />
重启xen服务使设置生效，/etc/init.d/xend restart</p>
<p><strong>配置虚拟主机</strong></p>
<p>相比之前参考的很多文档，Centos的虚拟主机配置相对比较容易，至少没有那么复杂，因为Centos提供了一个比较方便的工具virt-install</p>
<p>我准备给虚拟主机都安装CentOS5.5，为了方便，我将光盘挂装到了 /mnt并设置了ngnix可以直接通过<a rel="nofollow" target="_blank" href="http://www/">http://www/</a>方式访问光盘中的文件，如果您之前通过http或者其他方式网络安装过操作系统，这一步应该很好理解。</p>
<p>正题来了：</p>
<p> virt-install -n CentOSVM1 -r 512 -f /xen/CentOSVM1.img  -l <a rel="nofollow" target="_blank" href="http://mirrors.163.com/FreeBSD/releases/i386/8.1-RELEASE/8.1-RELEASE/">http://www/</a>  &#8211;network=network:default -p -s 10 &#8211;nographics &#8211;vcpus=2</p>
<p>解释：<br />
-n CentOSVM1 设置虚拟服务器名称<br />
-r 512 设置内存大小<br />
-f /xen/CentOSVM1.img  虚拟磁盘文件的保存路径，如果有重名可以使用&#8211;force参数强制重建。<br />
-l <a rel="nofollow" target="_blank" href="http://mirrors.163.com/FreeBSD/releases/i386/8.1-RELEASE/8.1-RELEASE/">http://www/</a> 安装文件的访问方式，支持nfs http ftp smb等多种方式。如果你对你的带宽比较自信，可以使用<a rel="nofollow" target="_blank" href="http://mirrors.163.com/centos/5.5/os/i386/">http://mirrors.163.com/centos/5.5/os/i386/</a>网易的镜像站<br />
&#8211;network=network:default 网络连接方式，我选择的是route中的default<br />
-p 我的机器不支持硬件虚拟化，-p参数不使用类似技术。现在新的CPU连Atom这样的都支持了，-p可以不加。<br />
-s 10磁盘文件的大小，单位是G<br />
&#8211;nographics 不使用图形界面，可以不加此参数，然后加入&#8211;vnc看看图形效果<br />
&#8211;vcpus=2 虚拟CPU的个数</p>
<p>剩下的就是等待安装的过程，由于之前的设置，网络这块直接DHCP就可以通过了。安装过程中报错找不到安装媒体的大多都是网络设置错误。</p>
<p>整个过程中可以通过ctrl+]回到真实主机，通过在真实主机中使用xm console CentOSVM1回到CentOSVM1的控制台。</p>
<p>OK，可以开始第二台主机的安装了，照旧吧：<br />
 virt-install -n CentOSVM2 -r 512 -f /xen/CentOSVM2.img  -l <a rel="nofollow" target="_blank" href="http://mirrors.163.com/FreeBSD/releases/i386/8.1-RELEASE/8.1-RELEASE/">http://www/</a>  &#8211;network=network:default -p -s 10 &#8211;nographics &#8211;vcpus=1</p>
<p><strong>部分操作</strong></p>
<p>xm console &lt;NAME&gt; 连接到虚拟机控制台<br />
xm create &lt;NAME&gt; 根据配置文件创建主机，如果您一直follow之前的操作并且完成了虚拟主机的安装，这条命令实际上等于启动一台虚拟机<br />
xm shutdown &lt;NAME&gt; 关机<br />
xm reboot &lt;NAME&gt; 重启<br />
xm destroy &lt;NAME&gt; 删除主机<br />
xentop 各主机之前的资源占用情况</p>
<p><strong>关于Ubuntu的xen</strong></p>
<p>记得804的时候，通过apt-get install ubuntu-xen-server xen的方式可以搭建起xen的环境，但不知出于什么目的，904以后，apt源里面移出了linux-xen内核的安装包。你当然可以下载到类似的替代安装包，但这无疑给安装带来了麻烦。</p>
<p>ubunt desktop和server的安装盘都无法通过网络安装程序，如果需要部署Ubuntu的虚拟机，你需要下载alternate安装盘。</p>
<p>暂时就这么多，改日写个ubuntu的安装文档出来。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/09/16/centos%e4%b8%8axen%e7%9a%84%e5%bf%ab%e9%80%9f%e9%83%a8%e7%bd%b2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FreeBSD ZFS版本升级的问题</title>
		<link>http://www.litrin.net/2010/09/10/freebsd-zfs%e7%89%88%e6%9c%ac%e5%8d%87%e7%ba%a7%e7%9a%84%e9%97%ae%e9%a2%98/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=freebsd-zfs%25e7%2589%2588%25e6%259c%25ac%25e5%258d%2587%25e7%25ba%25a7%25e7%259a%2584%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2010/09/10/freebsd-zfs%e7%89%88%e6%9c%ac%e5%8d%87%e7%ba%a7%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 09:32:34 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[网络和安全]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1308</guid>
		<description><![CDATA[之前的文章,介绍FreeBSD下的ZFS。 FreeBSD 8.1比较吸引我的一个重要更新就是将ZFS从测试模块升级到了正式模块。这意味着Zfs已经足够的成熟和稳定了。 闲话不说，我这台主机是用zfs来做nfs服务器。刚升级到了FreeBSD 8.1 stable的版本。 首先，升级zpool的版本 #zpool upgrade -a 接着，升级zfs版本 #zfs upgrade -a 正常情况下zfs的升级就完成了。中间几乎没有延时。 由于zfs需要使用nfs，而且随着zfs成为了正式版本，原本有一个垃圾设置（设不设没效果）sharenfs 已经正式实现了。不去修改的话就会出现nfs被挂装但是无法访问文件的问题。 # zfs set sharenfs=yes  /YOURPATCH 由于默认i386默认没有为zfs开启prefetch（预读），需要在/boot/load.conf中加入vfs.zfs.prefetch_disable=0。 同时，系统vm.kmem_size_max和vm.kmem_size两个设置如果过大的话可能会在系统拷贝大文件时吃光所有内存，设置请慎重。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.litrin.net/2008/11/19/freebsd%e7%9a%84zfs/" target="_blank">之前的文章,介绍FreeBSD下的ZFS。</a></p>
<p>FreeBSD 8.1比较吸引我的一个重要更新就是将ZFS从测试模块升级到了正式模块。这意味着Zfs已经足够的成熟和稳定了。</p>
<p>闲话不说，我这台主机是用zfs来做nfs服务器。刚升级到了FreeBSD 8.1 stable的版本。</p>
<p><span id="more-1308"></span></p>
<p>首先，升级zpool的版本</p>
<p>#zpool upgrade -a</p>
<p>接着，升级zfs版本</p>
<p>#zfs upgrade -a</p>
<p>正常情况下zfs的升级就完成了。中间几乎没有延时。</p>
<p>由于zfs需要使用nfs，而且随着zfs成为了正式版本，原本有一个垃圾设置（设不设没效果）sharenfs 已经正式实现了。不去修改的话就会出现nfs被挂装但是无法访问文件的问题。</p>
<p># zfs set sharenfs=yes  /YOURPATCH</p>
<p>由于默认i386默认没有为zfs开启prefetch（预读），需要在/boot/load.conf中加入vfs.zfs.prefetch_disable=0。</p>
<p>同时，系统vm.kmem_size_max和vm.kmem_size两个设置如果过大的话可能会在系统拷贝大文件时吃光所有内存，设置请慎重。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/09/10/freebsd-zfs%e7%89%88%e6%9c%ac%e5%8d%87%e7%ba%a7%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用Ubuntu搭建私有云</title>
		<link>http://www.litrin.net/2010/08/11/%e5%88%a9%e7%94%a8ubuntu%e6%90%ad%e5%bb%ba%e7%a7%81%e6%9c%89%e4%ba%91/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%2588%25a9%25e7%2594%25a8ubuntu%25e6%2590%25ad%25e5%25bb%25ba%25e7%25a7%2581%25e6%259c%2589%25e4%25ba%2591</link>
		<comments>http://www.litrin.net/2010/08/11/%e5%88%a9%e7%94%a8ubuntu%e6%90%ad%e5%bb%ba%e7%a7%81%e6%9c%89%e4%ba%91/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 06:30:09 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1293</guid>
		<description><![CDATA[这一段时间大家都在谈云计算，Ubuntu也是在它的server版本中增加了Eucalyptus软件包，用以支持一个与亚马逊EC2兼容的企业云。作为一个弹性扩展方式，Cloud的确很方便。 闲来无事，测试了一下。报下配置，理论上用虚拟机是完全可以的： 1台Dell 台式机，用以安装Cluster，双核+2G+250G；一台Asus本本，用以安装Node，双核+2G+160G；当然，我的测试中还有我自己的ubuntu本本充当客户端，这台机器可以省略，将客户端放在上述主机中的任何一台——前提是只要不是生产环境。 1. 安装Cluster主机 貌似这里没什么好说的，我用的是Ubuntu 910 x86_64 server，我的网络已经开启了DHCP（ip:192.168.103.223），没有太多的配置。安装的最后，系统会询问你安装的软件包。选择 Install Ubuntu Enterprise Cloud Cluster。系统会要求配置postfix以发送验证邮件，internet Site选项即可。Name your cluster 也没什么特别，我就用了My Cloud。 a list of available IP addresses on your network 选项是用于虚拟机的IP段，这里用一个空的Ip段即可。 2. 安装Node主机 同样没什么可以多说的，但要求Node主机跟Cluster在同一个网段内即可（ip:192.168.103.233）。选择 Install Ubuntu Enterprise Cloud Node。由于Cluster主机已经启动了，向导直接就通过了。 3. 调试Cloud 在Cluster上执行 sudo euca_conf &#8211;no-rsync &#8211;discover-nodes ，系统会提示发现Node并将Node加如Cloud。 用客户端访问https://192.168.103.223:8443 (建议使用Linux+Firefox)，默认的用户名和密码都是admin，比较汗。登录后在Credentials选项卡中download Credentials下载打包好的验证文件。我的文件名~/euca2-admin-x509.zip    4. 配置客户端  据说有一个基于Firefox插件的图形化客户端，没有测试过，各位可以测试下。我还是比较笨的用命令行。 sudo apt-get install ec2-api-tools   euca2ools mkdir ~/.euca cd ~/.euca unzip ~/euca2-admin-x509.zip chmod -R 0700 ~/.euca  ~/.euca/eucarc  echo ”[ -r ~/.euca/eucarc ] &#38;&#38; . ~/.euca/eucarc” &#62;&#62; ~/.bashrc 重新开一个终端，让配置生效，或者。。。重启吧。]]></description>
			<content:encoded><![CDATA[<p>这一段时间大家都在谈云计算，Ubuntu也是在它的server版本中增加了Eucalyptus软件包，用以支持一个与亚马逊EC2兼容的企业云。作为一个弹性扩展方式，Cloud的确很方便。</p>
<p>闲来无事，测试了一下。报下配置，理论上用虚拟机是完全可以的：<br />
1台Dell 台式机，用以安装Cluster，双核+2G+250G；一台Asus本本，用以安装Node，双核+2G+160G；当然，我的测试中还有我自己的ubuntu本本充当客户端，这台机器可以省略，将客户端放在上述主机中的任何一台——前提是只要不是生产环境。</p>
<p><span id="more-1293"></span></p>
<p><strong>1. 安装Cluster主机</strong></p>
<p>貌似这里没什么好说的，我用的是Ubuntu 910 x86_64 server，我的网络已经开启了DHCP（ip:192.168.103.223），没有太多的配置。安装的最后，系统会询问你安装的软件包。选择 Install Ubuntu Enterprise Cloud Cluster。系统会要求配置postfix以发送验证邮件，internet Site选项即可。Name your cluster 也没什么特别，我就用了My Cloud。<br />
a list of available IP addresses on your network 选项是用于虚拟机的IP段，这里用一个空的Ip段即可。</p>
<p><strong>2. 安装Node主机</strong></p>
<p>同样没什么可以多说的，但要求Node主机跟Cluster在同一个网段内即可（ip:192.168.103.233）。选择 Install Ubuntu Enterprise Cloud Node。由于Cluster主机已经启动了，向导直接就通过了。</p>
<p><strong>3. 调试Cloud</strong></p>
<p>在Cluster上执行 sudo euca_conf &#8211;no-rsync &#8211;discover-nodes ，系统会提示发现Node并将Node加如Cloud。<br />
用客户端访问<a rel="nofollow" target="_blank" href="https://192.168.103.223:8443">https://192.168.103.223:8443</a> (建议使用Linux+Firefox)，默认的用户名和密码都是admin，比较汗。登录后在Credentials选项卡中download Credentials下载打包好的验证文件。我的文件名~/euca2-admin-x509.zip   </p>
<p><strong>4. 配置客户端</strong> </p>
<p>据说有一个基于<a rel="nofollow" target="_blank" href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609" target="_blank">Firefox插件的图形化客户端</a>，没有测试过，各位可以测试下。我还是比较笨的用命令行。</p>
<p>sudo apt-get install ec2-api-tools   euca2ools</p>
<p>mkdir ~/.euca<br />
cd ~/.euca<br />
unzip ~/euca2-admin-x509.zip<br />
chmod -R 0700 ~/.euca<br />
 ~/.euca/eucarc <br />
echo ”[ -r ~/.euca/eucarc ] &amp;&amp; . ~/.euca/eucarc” &gt;&gt; ~/.bashrc</p>
<p>重新开一个终端，让配置生效，或者。。。重启吧。</p>
<p><strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/08/11/%e5%88%a9%e7%94%a8ubuntu%e6%90%ad%e5%bb%ba%e7%a7%81%e6%9c%89%e4%ba%91/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQLServer的聚合索引问题</title>
		<link>http://www.litrin.net/2010/07/05/sqlserver%e7%9a%84%e8%81%9a%e5%90%88%e7%b4%a2%e5%bc%95%e9%97%ae%e9%a2%98/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sqlserver%25e7%259a%2584%25e8%2581%259a%25e5%2590%2588%25e7%25b4%25a2%25e5%25bc%2595%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2010/07/05/sqlserver%e7%9a%84%e8%81%9a%e5%90%88%e7%b4%a2%e5%bc%95%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 06:08:45 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1272</guid>
		<description><![CDATA[ 有台SqlServer2000的主机，主要是用来纪录日志的。系统配置属于双核+2G，不算很高，目前数据文件大约在2G左右。高峰时每分钟100次写入左右。 这些天，系统在部分时间（不一定是高峰期），会出现大量的堵塞。堵塞每次持续时间最多5分钟，之后要么自己恢复，要么系统IO吃光。已经排除了病毒或者网络的问题。 利用sqlserver自带的“事件探查器”发觉大多数的阻塞都是跟其中的一个表有关。这个表数据有3M行的数据，并建立了聚合索引。 反复优化索引，系统没有起色。狠心删除了主键的聚合索引，问题竟奇迹般的解决了！ 将聚合索引索引转为非聚合索引之后，系统再也没有出现故障。 分析下来大致如此： 系统纪录的日志文件是以时间倒序为聚合索引，但由于日志的记入方式决定了数据的纪录方式并非按照顺序。即会出现新纪录比旧纪录先写入的情况。 3百万行的数据大约有500~700M的磁盘空间占用，按照聚合索引占整体数据大小的30%来计，索引大小大约为200M左右。 由于聚合索引是按照固定的顺序纪录，出现乱序的数据写入，sqlserver就必须重建聚合索引，每次都要重新生成这200M。 200M的数据需要相当长的时间，在此期间如果再有数据记入，行锁就上升为表锁，故出现系统阻塞。而之前一直没有出现问题，只不过是由于数据小，而索引生成的很快罢了。 所以建议聚合索引的使用前请确认在大数据的情况下务必保证新加的数据都在文件的末尾，这样系统就不会因为频繁的重建索引而造成数据阻塞或者IO的浪费。]]></description>
			<content:encoded><![CDATA[<p> 有台SqlServer2000的主机，主要是用来纪录日志的。系统配置属于双核+2G，不算很高，目前数据文件大约在2G左右。高峰时每分钟100次写入左右。</p>
<p>这些天，系统在部分时间（不一定是高峰期），会出现大量的堵塞。堵塞每次持续时间最多5分钟，之后要么自己恢复，要么系统IO吃光。已经排除了病毒或者网络的问题。<br />
<span id="more-1272"></span></p>
<p>利用sqlserver自带的“事件探查器”发觉大多数的阻塞都是跟其中的一个表有关。这个表数据有3M行的数据，并建立了聚合索引。<br />
反复优化索引，系统没有起色。狠心删除了主键的聚合索引，问题竟奇迹般的解决了！<br />
将聚合索引索引转为非聚合索引之后，系统再也没有出现故障。</p>
<p>分析下来大致如此：</p>
<ol>
<li>系统纪录的日志文件是以时间倒序为聚合索引，但由于日志的记入方式决定了数据的纪录方式并非按照顺序。即会出现新纪录比旧纪录先写入的情况。</li>
<li>3百万行的数据大约有500~700M的磁盘空间占用，按照聚合索引占整体数据大小的30%来计，索引大小大约为200M左右。</li>
<li>由于聚合索引是按照固定的顺序纪录，出现乱序的数据写入，sqlserver就必须重建聚合索引，每次都要重新生成这200M。</li>
<li>200M的数据需要相当长的时间，在此期间如果再有数据记入，行锁就上升为表锁，故出现系统阻塞。而之前一直没有出现问题，只不过是由于数据小，而索引生成的很快罢了。</li>
</ol>
<p>所以建议聚合索引的使用前请确认在大数据的情况下务必保证新加的数据都在文件的末尾，这样系统就不会因为频繁的重建索引而造成数据阻塞或者IO的浪费。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/07/05/sqlserver%e7%9a%84%e8%81%9a%e5%90%88%e7%b4%a2%e5%bc%95%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>python multiprocessing的问题</title>
		<link>http://www.litrin.net/2010/06/23/python-multiprocessing%e7%9a%84%e9%97%ae%e9%a2%98/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-multiprocessing%25e7%259a%2584%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2010/06/23/python-multiprocessing%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 09:30:55 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1260</guid>
		<description><![CDATA[multiprocessing的是Python2.6中新加入的模块，旨在用类似threading调用tread(线程)的方式使用process(进程)。 服务器中经常需要对大规模的数据进行压缩，传统使用单进程操作不足以体现8核CPU并发的威力。于是写了一个脚本用于多进程压缩。然而在windows的主机上进行调试，全都是死循环，以至于机器都无法进行响应。导入Linux主机，测试却通过。对脚本进行了精简如下： 出错的代码： from multiprocessing import Process #from threading import Thread def work(a): print "This is : " + str(a) + '\n' exit x = 2 while(x&#62;1): p = Process(target=work, args=(x,)) p.start() x -= 1 类似的调用方法，换成threading库是正确的 #from multiprocessing import Process from threading import Thread def work(a): print "This is : " + str(a) + '\n' [...]]]></description>
			<content:encoded><![CDATA[<p>multiprocessing的是Python2.6中新加入的模块，旨在用类似threading调用tread(线程)的方式使用process(进程)。</p>
<p>服务器中经常需要对大规模的数据进行压缩，传统使用单进程操作不足以体现8核CPU并发的威力。于是写了一个脚本用于多进程压缩。然而在windows的主机上进行调试，全都是死循环，以至于机器都无法进行响应。导入Linux主机，测试却通过。对脚本进行了精简如下：</p>
<p><span id="more-1260"></span><br />
出错的代码：</p>
<pre name=code class="python">
from multiprocessing  import Process
#from threading  import Thread

def work(a):
    print "This is : " + str(a) + '\n'
    exit

x = 2

while(x&gt;1):
    p = Process(target=work, args=(x,))
    p.start()
    x -= 1</pre>
<p>类似的调用方法，换成threading库是正确的</p>
<pre name=code class="python">
#from multiprocessing  import Process
from threading  import Thread

def work(a):
    print "This is : " + str(a) + '\n'
    exit

x = 2

while(x&gt;1):
    thread = Thread(target=work, args=(x,))
    thread.start()
    x -= 1</pre>
<p>翻阅了<a rel="nofollow" target="_blank" href="http://docs.python.org/library/multiprocessing.html#windows">官方文档</a>，找到了问题所在：</p>
<p>*Nix平台对于multiprocessing 的实现是基于C库中的fork()，所有子进程与父进程的数据是完全相同，可以说是父进程的完全克隆。<br />
而对于windows，由于windows对于进程的实现方式不同，没有fork()函数，multiprocessing 的调用只能是对于该脚本的重新调用，难怪会出现死循环的问题。</p>
<p>改良后的代码：</p>
<pre name=code class="python">
from multiprocessing  import Process
#from threading  import Thread

def work(a):
    print "This is : " + str(a) + '\n'
    exit

if __name__ == '__main__' :
    x = 2

    while (x&gt;1):
        p= Process(target=work, args=(x,))
        p.start()
        x -= 1</pre>
<p>对于multiprocessing 和 Threading的区别：</p>
<p>Threading的操作只能和父进程在同一个物理CPU上执行。但由于不需要底层的调用，大多数简单的操作效率很高。<br />
multiprocessing的操作可以在多个CPU上执行，但耗费的内存资源也远高于thread方式，适合于集中运算或大并发的状态。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/06/23/python-multiprocessing%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Solaris连锁故障</title>
		<link>http://www.litrin.net/2010/02/22/solaris%e8%bf%9e%e9%94%81%e6%95%85%e9%9a%9c/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=solaris%25e8%25bf%259e%25e9%2594%2581%25e6%2595%2585%25e9%259a%259c</link>
		<comments>http://www.litrin.net/2010/02/22/solaris%e8%bf%9e%e9%94%81%e6%95%85%e9%9a%9c/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 06:19:29 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[solaris]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1172</guid>
		<description><![CDATA[公司有一台服务器，属于经常被冷落的那种。SunV245 + solaris 10 + Oracle 10G 。自从装好机之后uptime至少有2年了。 且说这天需要重启，重启后无法通过ssh连接，通过串口终端连上之后发觉由于之前习惯于ssh key登录，一直没有root密码。郁闷中。 这台机器，一没有显卡，二没有光驱。实在让人头疼。七手八脚的把自己本本的光驱拆下来装在机器上，又发觉是自动硬盘启动的那种，无法光驱启动。 获得OK提示符 获得OK，相对比较容易，只是一般的键盘不是sun专用，没有那一堆控制键。 进入串口终端，启动机器并载入操作系统之后，在终端输入 #. 进入SC，运气不错，SC没有密码。输入break，再console回来就获得了Ok提示符。 获取root密码 进入OK后，放入solaris for sparc的盘，输入boot cdrom -s 进入修复系统。中间有一段比较漫长的等待。 进入系统后将硬盘 /dev/dsk/c1t0d0s0 挂装好之后找到硬盘上的etc/shadow。 将第一行的root:xxxxxxxxxxxx:14302:::::: 修改为root::14302:::::: 重新启动后用空密码就可以直接登系统。 SVCS问题 进入系统后，发现一大堆SVC服务无法启动，所有的问题都来自于一个关键应用 system-filesystem-local:default 无法正常启动。 tail /var/svc/log/system-filesystem-local:default.log 发觉有如下报错：WARNING: /sbin/mountall -l failed: exit status 1 不解，但既然是mount的问题，肯定和/etc/vfstab有关。打开这个文件，顿时就傻了——最后一行： /dev/dsk/c1t0d0s0       /dev/rdsk/c1t0d0s0      /       ufs     1       no &#8230;&#8230;. /dev/dsk/c1t3d0s0  /dev/rdsk/c1t3d0s0  /backup  ufs  0  yes  [...]]]></description>
			<content:encoded><![CDATA[<p>公司有一台服务器，属于经常被冷落的那种。SunV245 + solaris 10 + Oracle 10G 。自从装好机之后uptime至少有2年了。</p>
<p>且说这天需要重启，重启后无法通过ssh连接，通过串口终端连上之后发觉由于之前习惯于ssh key登录，一直没有root密码。郁闷中。</p>
<p><span id="more-1172"></span></p>
<p>这台机器，一没有显卡，二没有光驱。实在让人头疼。七手八脚的把自己本本的光驱拆下来装在机器上，又发觉是自动硬盘启动的那种，无法光驱启动。</p>
<p><strong>获得OK提示符</strong></p>
<p>获得OK，相对比较容易，只是一般的键盘不是sun专用，没有那一堆控制键。<br />
进入串口终端，启动机器并载入操作系统之后，在终端输入 #. 进入SC，运气不错，SC没有密码。输入break，再console回来就获得了Ok提示符。</p>
<p><strong>获取root密码</strong></p>
<p>进入OK后，放入solaris for sparc的盘，输入boot cdrom -s 进入修复系统。中间有一段比较漫长的等待。<br />
进入系统后将硬盘 /dev/dsk/c1t0d0s0 挂装好之后找到硬盘上的etc/shadow。<br />
将第一行的root:xxxxxxxxxxxx:14302:::::: 修改为root::14302::::::<br />
重新启动后用空密码就可以直接登系统。</p>
<p><strong>SVCS问题</strong></p>
<p>进入系统后，发现一大堆SVC服务无法启动，所有的问题都来自于一个关键应用 system-filesystem-local:default 无法正常启动。<br />
tail /var/svc/log/system-filesystem-local:default.log 发觉有如下报错：<span style="color: #ff0000;">WARNING: /sbin/mountall -l failed: exit status 1</span></p>
<p><span style="color: #000000;">不解，但既然是mount的问题，肯定和/etc/vfstab有关。打开这个文件，顿时就傻了——最后一行：<br />
</span><span style="color: #000000;">/dev/dsk/c1t0d0s0       /dev/rdsk/c1t0d0s0      /       ufs     <span style="text-decoration: underline;">1 </span>      no<br />
&#8230;&#8230;.</span><span style="color: #000000;"><br />
/dev/dsk/c1t3d0s0  /dev/rdsk/c1t3d0s0  /backup  ufs <span style="text-decoration: underline;"> 0</span>  yes  rw<br />
系统将/backup的挂装顺序设置为了0，/为1。这意味着系统默认会先挂/backup，后挂/。摆明了肯定会错。注释掉/backup这一行，问题解决！</span></p>
<p><span style="color: #000000;"><strong>分析</strong></span></p>
<p><span style="color: #000000;">问题出的无厘头。<br />
原来之前曾经对这个机器添加过硬盘，当时通过webmin直接修改的vfstab，webmin的一个bug导致了vfstab的错误。只是之前从未重启，也没暴露出来。<br />
没有root密码也是因为一直没有暴露出这个交接不清的问题。</span></p>
<p><span style="color: #000000;"><br />
<strong>Webmin BUG -&gt;硬盘挂装出错-&gt;fs关键服务不能启动-&gt;网络不启动-&gt;ssh不启动-&gt;无密码不能登入-&gt;需要OK提示符</strong></span><span style="color: #000000;">纠结~~~~</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/02/22/solaris%e8%bf%9e%e9%94%81%e6%95%85%e9%9a%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>virtual server上安装ubuntu</title>
		<link>http://www.litrin.net/2010/01/11/virtual-server%e4%b8%8a%e5%ae%89%e8%a3%85ubuntu/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=virtual-server%25e4%25b8%258a%25e5%25ae%2589%25e8%25a3%2585ubuntu</link>
		<comments>http://www.litrin.net/2010/01/11/virtual-server%e4%b8%8a%e5%ae%89%e8%a3%85ubuntu/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 08:07:19 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=1141</guid>
		<description><![CDATA[都说MS 的virtual server仅能够支持MS自家的系统。比如解决了的xorg桌面的显示问题。  这次在virtual server上安装ubuntu 804 server，每次跳出启动选项之后，选择好语言之后，启动安装程序，虚拟机马上重启。一开始以为是ACPI的问题，关闭了acpi之后，故障依旧。久而久之发现问题的规律是只会出现在成功启用了“硬件辅助虚拟化功能”的虚拟机上。    多次失败之后，找到了解决方法：  利用光盘启动好之后，选择好语言之后，进入Ubuntu的启动选项界面。 如果您安装的是desktop版本，按F4键，选择“安全图形模式”。Server版本直接跳过这一步。 按F6，修改启动参数，原版本为 &#8216;XXXXXX quiet splash &#8211;&#8217; ，删除掉后面的 &#8216;&#8211;&#8217; ，当然，你也可以直接删除quiet splash跳过飞溅界面。添加 vga=791 noreplace-paravirt ，直接按回车启动。 完成安装。 第一次启动载入grub时，直接esc编辑grub 设置，将kenerl那一行的末尾同样加上vga=791 noreplace-paravirt ，按b键启动。 这种方法似乎也支持Fedora一类的Linux。  noreplace-paravirt这个模块，网络上解释的很少。根据字面分析大致是一旦启用了硬件虚拟化支持以后，内核的一部分机器码将会被替换，强制操作系统关闭这个功能之后，系统才能正常启动。 PS:关于vga=791的解释 vga的模式分为如下几种，以及相互对应的数字标识 16 進位表示: pixel 640&#215;480 800&#215;600 1024&#215;768 1280&#215;1024 text 80&#215;30 100&#215;37 128&#215;48 160&#215;64 256 0&#215;301 0&#215;303 0&#215;305 0&#215;307 32k 0&#215;310 0&#215;313 0&#215;316 0&#215;319 64k [...]]]></description>
			<content:encoded><![CDATA[<p>都说MS 的virtual server仅能够支持MS自家的系统。比如<a href="http://www.litrin.net/2008/02/19/virtual-server-virtual-pc%e4%b8%8blinux%e6%a1%8c%e9%9d%a2%e7%9a%84%e9%97%ae%e9%a2%98/" target="_blank">解决了的xorg桌面的显示问题</a>。 </p>
<p>这次在virtual server上安装ubuntu 804 server，每次跳出启动选项之后，选择好语言之后，启动安装程序，虚拟机马上重启。一开始以为是ACPI的问题，关闭了acpi之后，故障依旧。久而久之发现问题的规律是只会出现在成功启用了“硬件辅助虚拟化功能”的虚拟机上。 </p>
<p><span id="more-1141"></span> </p>
<p>多次失败之后，找到了解决方法： </p>
<ol>
<li>利用光盘启动好之后，选择好语言之后，进入Ubuntu的启动选项界面。</li>
<li>如果您安装的是desktop版本，按F4键，选择“安全图形模式”。Server版本直接跳过这一步。</li>
<li>按F6，修改启动参数，原版本为 &#8216;XXXXXX quiet splash &#8211;&#8217; ，删除掉后面的 &#8216;&#8211;&#8217; ，当然，你也可以直接删除quiet splash跳过飞溅界面。添加 <strong>vga=791 noreplace-paravirt </strong>，直接按回车启动。</li>
<li>完成安装。</li>
<li>第一次启动载入grub时，直接esc编辑grub 设置，将kenerl那一行的末尾同样加上<strong>vga=791 noreplace-paravirt ，</strong>按b键启动。</li>
</ol>
<div id="attachment_1142" class="wp-caption alignleft" style="width: 310px"><a href="http://www.litrin.net/wp-content/uploads/2010/01/MSVS-ubutnu.png"><img class="size-medium wp-image-1142" style="vertical-align: middle;" title="ms virtual server 安装 ubuntu Linux " src="http://www.litrin.net/wp-content/uploads/2010/01/MSVS-ubutnu-300x248.png" alt="ms virtual server 安装 ubuntu Linux" width="300" height="248" /></a><p class="wp-caption-text">ms virtual server 安装 ubuntu Linux </p></div>
<p>这种方法似乎也支持Fedora一类的Linux。 </p>
<p>noreplace-paravirt这个模块，网络上解释的很少。根据字面分析大致是一旦启用了硬件虚拟化支持以后，内核的一部分机器码将会被替换，强制操作系统关闭这个功能之后，系统才能正常启动。</p>
<p>PS:关于vga=791的解释</p>
<p>vga的模式分为如下几种，以及相互对应的数字标识</p>
<p>16 進位表示:</p>
<blockquote>
<table id="table1" border="0" cellpadding="3">
<tbody>
<tr>
<td align="right">pixel</td>
<td>640&#215;480</td>
<td>800&#215;600</td>
<td>1024&#215;768</td>
<td>1280&#215;1024</td>
</tr>
<tr>
<td align="right">text</td>
<td align="right">80&#215;30</td>
<td align="right">100&#215;37</td>
<td align="right">128&#215;48</td>
<td align="right">160&#215;64</td>
</tr>
<tr>
<td align="right">256</td>
<td align="right">0&#215;301</td>
<td align="right">0&#215;303</td>
<td align="right">0&#215;305</td>
<td align="right">0&#215;307</td>
</tr>
<tr>
<td align="right">32k</td>
<td align="right">0&#215;310</td>
<td align="right">0&#215;313</td>
<td align="right">0&#215;316</td>
<td align="right">0&#215;319</td>
</tr>
<tr>
<td align="right">64k</td>
<td align="right">0&#215;311</td>
<td align="right">0&#215;314</td>
<td align="right">0&#215;317</td>
<td align="right">0x31A</td>
</tr>
<tr>
<td align="right">16M</td>
<td align="right">0&#215;312</td>
<td align="right">0&#215;315</td>
<td align="right">0&#215;318</td>
<td align="right">0x31B</td>
</tr>
</tbody>
</table>
</blockquote>
<p>10 進位表示:</p>
<blockquote>
<table id="table2" border="0" cellpadding="3">
<tbody>
<tr>
<td align="right">pixel</td>
<td>640&#215;480</td>
<td>800&#215;600</td>
<td>1024&#215;768</td>
<td>1280&#215;1024</td>
</tr>
<tr>
<td align="right">text</td>
<td align="right">80&#215;30</td>
<td align="right">100&#215;37</td>
<td align="right">128&#215;48</td>
<td align="right">160&#215;64</td>
</tr>
<tr>
<td align="right">256</td>
<td align="right">769</td>
<td align="right">771</td>
<td align="right">773</td>
<td align="right">775</td>
</tr>
<tr>
<td align="right">32k</td>
<td align="right">784</td>
<td align="right">787</td>
<td align="right">790</td>
<td align="right">793</td>
</tr>
<tr>
<td align="right">64k</td>
<td align="right">785</td>
<td align="right">788</td>
<td align="right">791</td>
<td align="right">794</td>
</tr>
<tr>
<td align="right">16M</td>
<td align="right">786</td>
<td align="right">789</td>
<td align="right">792</td>
<td align="right">795</td>
</tr>
</tbody>
</table>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/01/11/virtual-server%e4%b8%8a%e5%ae%89%e8%a3%85ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

