<?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>Erning.write()</title>
	<atom:link href="http://erning.net/feed" rel="self" type="application/rss+xml" />
	<link>http://erning.net</link>
	<description>Reloading</description>
	<lastBuildDate>Fri, 18 Jun 2010 18:05:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>APPLESOFT BASIC CODE SAMPLE</title>
		<link>http://erning.net/archives/applesoft-basic-code-sample</link>
		<comments>http://erning.net/archives/applesoft-basic-code-sample#comments</comments>
		<pubDate>Fri, 04 Jun 2010 03:35:29 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://erning.net/?p=257</guid>
		<description><![CDATA[1 GR 2 FOR I=1 TO 15:COLOR=I:HLIN 14,16 AT 11:VLIN 12,13 AT 13:VLIN 12,13 AT 17:HLIN 14,16 AT 14:VLIN 15,16 AT 13:VLIN 15,16 AT 17:HLIN 14,16 AT 17:HLIN 20,22 AT 11:VLIN 12,13 AT 19:VLIN 12,15 AT 23:HLIN 20,23 AT 14:PLOT 22,16:HLIN 19,21 AT 17:HLIN 15,17 AT 20:PLOT 14,21:VLIN 22,25 AT 13:HLIN 13,17 AT 23:VLIN 24,25 [...]]]></description>
			<content:encoded><![CDATA[<p><code><br />
1 GR<br />
2 FOR I=1 TO 15:COLOR=I:HLIN 14,16 AT 11:VLIN 12,13 AT 13:VLIN 12,13 AT 17:HLIN 14,16 AT 14:VLIN 15,16 AT 13:VLIN 15,16 AT 17:HLIN 14,16 AT 17:HLIN 20,22 AT 11:VLIN 12,13 AT 19:VLIN 12,15 AT 23:HLIN 20,23 AT 14:PLOT 22,16:HLIN 19,21 AT 17:HLIN 15,17 AT 20:PLOT 14,21:VLIN 22,25 AT 13:HLIN 13,17 AT 23:VLIN 24,25 AT 17:HLIN 14,16 AT 26:PLOT 21,21:PLOT 20,22:PLOT 19,23:HLIN 19,23 AT 24:VLIN 20,26 AT 22:NEXT I:GOTO 2<br />
</code><br />
复制上面的代码，并粘贴到下面这个网站，然后点击&#8221;Run&#8221;按钮<br />
<a href="http://www.calormen.com/applesoft/" rel="nofollow">www.calormen.com/applesoft/</a></p>
<p>看看我在<a href="http://www.xs4all.nl/~gp/VirtualII/">VirtualII</a>上的<a href="http://www.flickr.com/photos/zendragon/4666724359/">运行结果</a> </p>
<ul>
<li>Wikipedia: <a href="http://en.wikipedia.org/wiki/Applesoft_BASIC">en.wikipedia.org/wiki/Applesoft_BASIC</a></li>
<li>Reference: <a href="http://www.landsnail.com/a2ref.htm">www.landsnail.com/a2ref.htm</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/applesoft-basic-code-sample/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Big Bang Anjuke</title>
		<link>http://erning.net/archives/the-big-bang-anjuke</link>
		<comments>http://erning.net/archives/the-big-bang-anjuke#comments</comments>
		<pubDate>Thu, 03 Jun 2010 16:13:01 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[anjuke]]></category>

		<guid isPermaLink="false">http://erning.net/?p=247</guid>
		<description><![CDATA[上面这张图就是安居客在Subversion源代码库里的代码大爆炸。 接下来的视频可以看到从2007年的一个工程师到现在三十来个工程师的爆炸过程，挺有趣的。 code_swarm]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/zendragon/4666092652/" title="Codeswarm by Zhang Erning, on Flickr"><img src="http://farm5.static.flickr.com/4026/4666092652_9c563c05ff.jpg" width="500" height="375" alt="Codeswarm" /></a><br />
上面这张图就是安居客在Subversion源代码库里的代码大爆炸。</p>
<p>接下来的视频可以看到从2007年的一个工程师到现在三十来个工程师的爆炸过程，挺有趣的。<br />
<object type="application/x-shockwave-flash" width="500" height="375" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&#038;photo_secret=e7c11f23cc&#038;photo_id=4666693094"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&#038;photo_secret=e7c11f23cc&#038;photo_id=4666693094" height="375" width="500"></embed></object></p>
<p><a href="http://vis.cs.ucdavis.edu/~ogawa/codeswarm/">code_swarm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/the-big-bang-anjuke/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>工程师普遍采用的时区是当地时区-8</title>
		<link>http://erning.net/archives/the-timezone-for-engineers-is-usually-8-hours-behind</link>
		<comments>http://erning.net/archives/the-timezone-for-engineers-is-usually-8-hours-behind#comments</comments>
		<pubDate>Sat, 27 Feb 2010 09:36:34 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://erning.net/?p=223</guid>
		<description><![CDATA[我很喜欢《苹果往事》这本书，它以工程师的视角写记录了很多趣闻轶事。加上是APPLE ][将我带入计算机这个领域的，所以我对这家公司有着相当的感情。 书中有多很有趣的事，放到近三十年后的今天也还一样。例如，工程师周末、晚上常加班，还是主动的；不少有价值的东西是工程师利用业余时间制作的；用代码行数统计工程师的工作量时工程师会填上负数；开发经理和工程师互动常有困难；工程师有惰性时，好的老板能够逼工程师完成工程师自己认为不可能的任务；现实扭曲力场(Reality Distortion Field)对创造力的作用&#8230;. 还有一点我看出来了，工程师普遍采用的时区是当地时区-8 书中的故事都可以着folklore.org网站上读到。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.douban.com/subject/4214837/" title="苹果往事@douban"><img src="http://img2.douban.com/lpic/s4114974.jpg" alt="苹果往事" /></a><br />
我很喜欢<a href="http://www.douban.com/subject/4214837/" title="苹果往事@douban">《苹果往事》</a>这本书，它以工程师的视角写记录了很多趣闻轶事。加上是<a href="http://en.wikipedia.org/wiki/Apple_II_series">APPLE ][</a>将我带入计算机这个领域的，所以我对这家公司有着相当的感情。</p>
<p>书中有多很有趣的事，放到近三十年后的今天也还一样。例如，工程师周末、晚上常加班，还是主动的；不少有价值的东西是工程师利用业余时间制作的；用代码行数统计工程师的工作量时工程师会填上负数；开发经理和工程师互动常有困难；工程师有惰性时，好的老板能够逼工程师完成工程师自己认为不可能的任务；现实扭曲力场(Reality Distortion Field)对创造力的作用&#8230;.</p>
<p>还有一点我看出来了，<strong style="font-size:1.2em">工程师普遍采用的时区是当地时区-8</strong> <img src='http://erning.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>书中的故事都可以着<a href="http://www.folklore.org/" title="Folklore.org: Macintosh Stories">folklore.org</a>网站上读到。</p>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/the-timezone-for-engineers-is-usually-8-hours-behind/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>动态域名解析服务</title>
		<link>http://erning.net/archives/dynamic-domain-service</link>
		<comments>http://erning.net/archives/dynamic-domain-service#comments</comments>
		<pubDate>Sun, 24 Jan 2010 19:21:58 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[dns]]></category>

		<guid isPermaLink="false">http://erning.net/?p=205</guid>
		<description><![CDATA[有自己的VPS，很多服务都可以自己来做了，例如我自己安装一个VPN用来穿墙。今天用PowerDNS做了一个动态域名解析服务，替换过去老旧的方法。现在不仅可以自己用，还可以提供给其他有动态域名解析需求的同学。 更新域名的API很简单，一个HTTP请求即可。API地址是: http://dynamic.wacao.com/api/plain.php，参数为， host &#8211; 主机名，FQDN为 ${host}.dynamic.wacao.com time &#8211; unixtime形式的请求时间，时间误差在正负5分钟内有效 sign &#8211; 签名，格式为 sha1(${host}${time}${shared_key}) ip &#8211; 可选。如果未提供IP地址则采用客户端请求的来源地址 其中host和shared_key需要我来提供。这里提供一个的host和shared_key给大家测试。testing d035cdac09dd866ed8f4a244567c4daf。域名为testing.dynamic.wacao.com.。 由于仅是一个HTTP请求，客户端很容易用各种语言实现。我自己用的是一个简单的shell脚本。 [bash] #!/bin/bash function usage { echo &#8220;Usage: $0 {host} {shared_key}&#8221; } if test -z $1 &#124;&#124; test -z $2 then usage exit 1 fi HOST=$1 SHARED_KEY=$2 ENDPOINT=&#8221;http://dynamic.wacao.com/api/plain.php&#8221; TIME=`date +%s` SIGN=`echo -n &#8220;${HOST}${TIME}${SHARED_KEY}&#8221; &#124; sha1sum -t [...]]]></description>
			<content:encoded><![CDATA[<p>有自己的VPS，很多服务都可以自己来做了，例如我自己安装一个VPN用来穿墙。今天用<a href="http://www.powerdns.com/">PowerDNS</a>做了一个动态域名解析服务，替换过去<a href="/archives/dynamic-dns-diy">老旧的方法</a>。现在不仅可以自己用，还可以提供给其他有动态域名解析需求的同学。</p>
<p>更新域名的API很简单，一个HTTP请求即可。API地址是: <strong>http://dynamic.wacao.com/api/plain.php</strong>，参数为，</p>
<ul>
<li>host &#8211; 主机名，FQDN为 ${host}.dynamic.wacao.com</li>
<li>time &#8211; unixtime形式的请求时间，时间误差在正负5分钟内有效</li>
<li>sign &#8211; 签名，格式为 sha1(${host}${time}${shared_key}) </li>
<li>ip &#8211; 可选。如果未提供IP地址则采用客户端请求的来源地址</li>
</ul>
<p>其中host和shared_key需要我来提供。这里提供一个的host和shared_key给大家测试。<strong>testing</strong> <strong>d035cdac09dd866ed8f4a244567c4daf</strong>。域名为<strong>testing.dynamic.wacao.com.</strong>。</p>
<p>由于仅是一个HTTP请求，客户端很容易用各种语言实现。我自己用的是一个简单的shell脚本。<br />
[bash]<br />
#!/bin/bash</p>
<p>function usage {<br />
    echo &#8220;Usage: $0 {host} {shared_key}&#8221;<br />
}</p>
<p>if test -z $1 || test -z $2<br />
then<br />
    usage<br />
    exit 1<br />
fi</p>
<p>HOST=$1<br />
SHARED_KEY=$2<br />
ENDPOINT=&#8221;http://dynamic.wacao.com/api/plain.php&#8221;</p>
<p>TIME=`date +%s`<br />
SIGN=`echo -n &#8220;${HOST}${TIME}${SHARED_KEY}&#8221; | sha1sum -t | awk &#8216;{print $1}&#8217;`<br />
URL=&#8221;${ENDPOINT}?host=${HOST}&#038;time=${TIME}&#038;sign=${SIGN}&#8221;<br />
curl &#8220;$URL&#8221;<br />
[/bash]</p>
<p>执行后立即能够解析，TTL为5秒。<br />
[plain gutter="false"]<br />
$ update-dynamic-dns.sh testing d035cdac09dd866ed8f4a244567c4daf<br />
ok. 58.33.69.77<br />
$ host testing.dynamic.wacao.com.<br />
testing.dynamic.wacao.com has address 58.33.69.77<br />
[/plain]</p>
<p>我将这个脚本加到crontab里，每5分钟更新一次。<br />
[plain gutter="false"]<br />
*/5 * * * * /usr/local/sbin/update-dynamic-dns.sh ${HOST} ${SHARED_KEY}<br />
[/plain]</p>
<p>如果觉得testing.dynamic.wacao.com这样的域名不好看，而且你有自己的域名，可以想我一样，给自己的域名加一个CNAME。例如我把alcohol.swanpan.com做了一个CNAME指到alcohol.dynamic.wacao.com<br />
[plain gutter="false"]<br />
;; ANSWER SECTION:<br />
alcohol.swanpan.com.	86400	IN	CNAME	alcohol.dynamic.wacao.com.<br />
alcohol.dynamic.wacao.com. 5	IN	A	58.33.69.77<br />
[/plain]<br />
这样我在各个地方都能用alcohol.swanpan.com这个域名访问家里的机器，方便<a href="/archives/my-linux-gateway">用它穿墙</a>。</p>
<p>想试试的朋友告诉我你要的host，我给你发送shared_key。</p>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/dynamic-domain-service/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USB硬盘的固定设备名和自动休眠</title>
		<link>http://erning.net/archives/static-device-name-and-auto-spin-down-for-usb-harddisk</link>
		<comments>http://erning.net/archives/static-device-name-and-auto-spin-down-for-usb-harddisk#comments</comments>
		<pubDate>Sat, 23 Jan 2010 18:07:26 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[gentoo]]></category>

		<guid isPermaLink="false">http://erning.net/?p=186</guid>
		<description><![CDATA[AirPort Extreme可以外接USB硬盘提供文件服务，但是和它的路由功能一样，都不够满足我的需求。而作为穿墙路由器的华硕小机器有4个USB口，我还用它兼作文件服务器使用，提供Samba和NFS。 但是Gentoo在这里遇到两个小问题。 第一个问题，USB硬盘是可以热拔插，这样由于载入顺序的问题，每个硬盘设备名称可能会变化。例如这个机器自带一个读卡器，在没有外挂USB硬盘时启动后候设备名为/dev/sdb。之后插入USB硬盘，USB硬盘的设备名为/dev/sdc。但是如果挂着USB硬盘启动，这两个设备的设备名就正好反过来了。我希望是固定的设备名。 第二个问题，USB硬盘长时间不访问的时候不会自动停下来，这样既不省电也不利延长硬盘的寿命。我希望在不用的时候它可以休眠。 设备名的问题可以用udev的rules解决。我加了一个udev配置文件/etc/udev/rules.d/99-external-storages.rules。 [plain gutter="false"] KERNEL==&#8221;sd*&#8221;, SUBSYSTEMS==&#8221;usb&#8221;, ATTRS{idVendor}==&#8221;0bda&#8221;, ATTRS{idProduct}==&#8221;0158&#8243;, ATTRS{serial}==&#8221;20071114173400000&#8243;, SYMLINK+=&#8221;cardreader%n&#8221; KERNEL==&#8221;sd*&#8221;, SUBSYSTEMS==&#8221;usb&#8221;, ATTRS{idVendor}==&#8221;1bcf&#8221;, ATTRS{idProduct}==&#8221;0c31&#8243;, ATTRS{serial}==&#8221;20090717090A&#8221;, SYMLINK+=&#8221;storage/neso%n&#8221; [/plain] 这样给内置的读卡器添加了一个设备名的符号链接/dev/cardreader；给我的NESO 1T硬盘添加了设备名符号链接/dev/storage/neso。用固定名称访问设备的问题就解决了。 第二个问题稍微复杂些，一直没找到方便的方法。laptop-mode-tools也没能满足我的要求。一番搜索后找到sdparm可以用来控制USB硬盘，还有一段perl脚本用来调度sdparm。这样就可以满足我的需求了。脚本的原始出外我给忘了，这里我稍微修改了一点，增加对设备名符号链接的支持。 [perl] #!/usr/bin/perl -w use File::Basename; use Cwd &#8216;abs_path&#8217;; $statfile = &#8220;/proc/diskstats&#8221;; die &#8220;$0: Cannot read $statfile\n&#8221; unless -r $statfile; $&#124; = 1; ($disk, $interval) = (@ARGV); if (-l $disk) { $original_disk [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.apple.com/airportextreme/">AirPort Extreme</a>可以外接USB硬盘提供文件服务，但是和它的路由功能一样，都不够满足我的需求。而作为<a href="/archives/my-linux-gateway">穿墙路由器</a>的华硕小机器有4个USB口，我还用它兼作文件服务器使用，提供Samba和NFS。</p>
<p>但是Gentoo在这里遇到两个小问题。</p>
<p>第一个问题，USB硬盘是可以热拔插，这样由于载入顺序的问题，每个硬盘设备名称可能会变化。例如这个机器自带一个读卡器，在没有外挂USB硬盘时启动后候设备名为/dev/sdb。之后插入USB硬盘，USB硬盘的设备名为/dev/sdc。但是如果挂着USB硬盘启动，这两个设备的设备名就正好反过来了。我希望是固定的设备名。</p>
<p>第二个问题，USB硬盘长时间不访问的时候不会自动停下来，这样既不省电也不利延长硬盘的寿命。我希望在不用的时候它可以休眠。</p>
<p>设备名的问题可以用udev的rules解决。我加了一个udev配置文件/etc/udev/rules.d/99-external-storages.rules。<br />
[plain gutter="false"]<br />
KERNEL==&#8221;sd*&#8221;, SUBSYSTEMS==&#8221;usb&#8221;, ATTRS{idVendor}==&#8221;0bda&#8221;, ATTRS{idProduct}==&#8221;0158&#8243;, ATTRS{serial}==&#8221;20071114173400000&#8243;, SYMLINK+=&#8221;cardreader%n&#8221;<br />
KERNEL==&#8221;sd*&#8221;, SUBSYSTEMS==&#8221;usb&#8221;, ATTRS{idVendor}==&#8221;1bcf&#8221;, ATTRS{idProduct}==&#8221;0c31&#8243;, ATTRS{serial}==&#8221;20090717090A&#8221;, SYMLINK+=&#8221;storage/neso%n&#8221;<br />
[/plain]<br />
这样给内置的读卡器添加了一个设备名的符号链接/dev/cardreader；给我的NESO 1T硬盘添加了设备名符号链接/dev/storage/neso。用固定名称访问设备的问题就解决了。</p>
<p>第二个问题稍微复杂些，一直没找到方便的方法。<a href="http://samwel.tk/laptop_mode/">laptop-mode-tools</a>也没能满足我的要求。一番搜索后找到<a href="http://sg.danny.cz/sg/sdparm.html">sdparm</a>可以用来控制USB硬盘，还有一段perl脚本用来调度sdparm。这样就可以满足我的需求了。脚本的原始出外我给忘了，这里我稍微修改了一点，增加对设备名符号链接的支持。<br />
[perl]<br />
#!/usr/bin/perl -w<br />
use File::Basename;<br />
use Cwd &#8216;abs_path&#8217;;</p>
<p>$statfile = &#8220;/proc/diskstats&#8221;;<br />
die &#8220;$0: Cannot read $statfile\n&#8221; unless -r $statfile;</p>
<p>$| = 1;<br />
($disk, $interval) = (@ARGV);</p>
<p>if (-l $disk) {<br />
    $original_disk = $disk;<br />
    while (-l $disk) {<br />
        $disk = readlink $disk;<br />
    }<br />
    $disk = dirname($original_disk) . &#8220;/&#8221; . $disk;<br />
    $disk = abs_path($disk);<br />
}</p>
<p>$disk =~ s,/dev/,,;<br />
print &#8220;$0: disk: $disk, interval: $interval\n&#8221;;</p>
<p>$halted_data = $last_seen = &#8221;;<br />
while (1) {<br />
  open(STATUS, $statfile);<br />
  ($_) = grep(/^\s+\d+\s+\d+\s+$disk\s/o, <STATUS>);<br />
  close STATUS;</p>
<p>  if ($last_seen eq $_ &#038;&#038; $halted_data ne $_) {<br />
    print &#8220;Spinning down: $disk\n&#8221;;<br />
    system &#8220;sync&#8221;;<br />
    system &#8220;sdparm&#8221;, &#8220;&#8211;command=stop&#8221;, &#8220;/dev/$disk&#8221;;<br />
    $halted_data = $_;<br />
  }<br />
  $last_seen = $_;<br />
  sleep $interval;<br />
}<br />
[/perl]</p>
<p>最后在启动脚本里加上<br />
[plain gutter="false"]<br />
ebegin &#8221;    &#8211; Spindown USB HD&#8221;<br />
nohup /usr/local/sbin/spindown-usbhd /dev/storage/neso 1200 >> /var/log/spindown-usbhd.log 2>&#038;1 &#038;<br />
eend $?<br />
[/plain]<br />
好了，20分钟这块硬盘没有读写之后自动休眠。</p>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/static-device-name-and-auto-spin-down-for-usb-harddisk/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOW-TO: ESXi and SSH</title>
		<link>http://erning.net/archives/how-to-open-ssh-service-on-vmware-exsi4</link>
		<comments>http://erning.net/archives/how-to-open-ssh-service-on-vmware-exsi4#comments</comments>
		<pubDate>Fri, 22 Jan 2010 08:05:40 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://erning.net/?p=151</guid>
		<description><![CDATA[每次ESXi要在服务器上开启SSH服务，总是忘记具体操作方法，都要去google才行，这里记录一下。 1. Go to the ESXi console and press alt+F1 2. Type: unsupported 3. Enter the root password(No prompt, typing is blindly) 4. At the prompt type “vi /etc/inetd.conf” 5. Look for the line that starts with “#ssh” (you can search with pressing “/”) 6. Remove the “#” (press the “x” if the cursor is [...]]]></description>
			<content:encoded><![CDATA[<p>每次ESXi要在服务器上开启SSH服务，总是忘记具体操作方法，都要去google才行，这里记录一下。</p>
<blockquote><p>
 1. Go to the ESXi console and press alt+F1<br />
 2. Type: unsupported<br />
 3. Enter the root password(No prompt, typing is blindly)<br />
 4. At the prompt type “vi /etc/inetd.conf”<br />
 5. Look for the line that starts with “#ssh” (you can search with pressing “/”)<br />
 6. Remove the “#” (press the “x” if the cursor is on the character)<br />
 7. Save “/etc/inetd.conf” by typing “:wq!”<br />
 8. Restart the management service “/sbin/services.sh restart”
</p></blockquote>
<p>用下面的方法可以避免重新启动机器</p>
<blockquote><p>
8. Restart the management service “/sbin/services.sh restart”<br />
10 – Kill inetd : kill `ps | grep inetd | cut -f2 -d” “‘<br />
11 – Start inetd: inetd
</p></blockquote>
<p> 参考：<a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&#038;cmd=displayKC&#038;externalId=1003677">VMWare KB: Tech Support Mode for Emergency Support</a></p>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/how-to-open-ssh-service-on-vmware-exsi4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>安居客招聘架构师</title>
		<link>http://erning.net/archives/anjuke-is-recruiting-architect-2010-01</link>
		<comments>http://erning.net/archives/anjuke-is-recruiting-architect-2010-01#comments</comments>
		<pubDate>Wed, 20 Jan 2010 22:35:25 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[anjuke]]></category>
		<category><![CDATA[recruiting]]></category>

		<guid isPermaLink="false">http://erning.net/?p=130</guid>
		<description><![CDATA[先开门见山，安居客招聘架构师，包括软件架构师和系统架构师。工作地点是上海浦东陆家嘴。有意者请与我联系，@erning 或 erning at anjuke dot com。 随着公司的发展，安居客也开始组建专门的架构师团队了。这个职位没还有特定的需求描述，简单说需要具备互联网应用的多方面经验。还有至少要会写代码，会翻墙。 安居客目前需要从架构方面解决的问题有很多，比如从代码的框架、开发流程开始，使得我们越来越多的工程师能够方便的并行开发；项目能够更方便的部署到测试环境、staging环境和生产环境；更有效的监控网站的各个模块；提高性能；消除减少单点故障&#8230;&#8230; 我们需要已经具备实际经验的资深人士加盟，当然也欢迎认为自己能行的年轻人。 很多人可能还不了解或不知道安居客(http://www.anjuke.com/)，我稍微介绍一下。 安居客也是一个start-up公司（有VC、有上市计划，这些都可以google到）。从2007年开始，经过三年的努力，在网络找房的平台上做到了一定的成绩。从各项数据上看，都做到了每年10倍的增长。 业务上安居客有明确的商业模式，很早就盈利了（不是靠流量买广告）。从刚开始的2007年就有收入，到2009年全年实现的销售收入比年初的计划翻了一倍多。具体数额公司没说能够公开，就不好透露。 还是主要说说技术部门的情况。在2007年网站刚上线的时候还部署在虚拟机里的，2个开发工程师。2008年初有三台服务器，不到20万的日访问量，5个开发工程师。现在近百台服务器部署在多个IDC，约1000万的日访问量，差不多20个开发工程师。 网站目前架构简单说是PHP+MySQL运行在Linux上，加上用Java实现的一些后端服务模块。一样也用到了很多开源项目，例如搜索用的是Lucene，消息系统用的是RabbitMQ，前端是Nginx。图片存储用到了MogileFS（现在每天上传的照片超过40万张）。还有Squid, Memcached等等。 大致情况就是这样了。再有在安居客这样快速发展的start-up公司，以我的经验可以体验到和大公司不同的乐趣。因为你可以也需要接触到开发和运营一个网站的各个方面；有个平台可以将自己的想法付诸实现；还能享受到将一个网站从小做到大的快乐。 再次邀请有兴趣的朋友加盟。还请朋友们多帮我推荐。另外安居客除了架构师还需要很多PHP开发工程师、Java开发工程师、测试工程师和系统管理员。]]></description>
			<content:encoded><![CDATA[<p>先开门见山，<a href="http://www.anjuke.com/" title="Anjuke">安居客</a>招聘架构师，包括软件架构师和系统架构师。工作地点是上海浦东陆家嘴。有意者请与我联系，@erning 或 erning at anjuke dot com。</p>
<p>随着公司的发展，安居客也开始组建专门的架构师团队了。这个职位没还有特定的需求描述，简单说需要具备互联网应用的多方面经验。还有至少要会写代码，会翻墙。</p>
<p>安居客目前需要从架构方面解决的问题有很多，比如从代码的框架、开发流程开始，使得我们越来越多的工程师能够方便的并行开发；项目能够更方便的部署到测试环境、staging环境和生产环境；更有效的监控网站的各个模块；提高性能；消除减少单点故障&#8230;&#8230;</p>
<p>我们需要已经具备实际经验的资深人士加盟，当然也欢迎认为自己能行的年轻人。</p>
<p>很多人可能还不了解或不知道安居客(<a href="http://www.anjuke.com/" title="安居客">http://www.anjuke.com/</a>)，我稍微介绍一下。</p>
<p>安居客也是一个start-up公司（有VC、有上市计划，这些都可以google到）。从2007年开始，经过三年的努力，在网络找房的平台上做到了一定的成绩。从各项数据上看，都做到了每年10倍的增长。</p>
<p>业务上安居客有明确的商业模式，很早就盈利了（不是靠流量买广告）。从刚开始的2007年就有收入，到2009年全年实现的销售收入比年初的计划翻了一倍多。具体数额公司没说能够公开，就不好透露。</p>
<p>还是主要说说技术部门的情况。在2007年网站刚上线的时候还部署在虚拟机里的，2个开发工程师。2008年初有三台服务器，不到20万的日访问量，5个开发工程师。现在近百台服务器部署在多个IDC，约1000万的日访问量，差不多20个开发工程师。</p>
<p>网站目前架构简单说是PHP+MySQL运行在Linux上，加上用Java实现的一些后端服务模块。一样也用到了很多开源项目，例如搜索用的是Lucene，消息系统用的是RabbitMQ，前端是Nginx。图片存储用到了MogileFS（现在每天上传的照片超过40万张）。还有Squid, Memcached等等。</p>
<p>大致情况就是这样了。再有在安居客这样快速发展的start-up公司，以我的经验可以体验到和大公司不同的乐趣。因为你可以也需要接触到开发和运营一个网站的各个方面；有个平台可以将自己的想法付诸实现；还能享受到将一个网站从小做到大的快乐。</p>
<p>再次邀请有兴趣的朋友加盟。还请朋友们多帮我推荐。另外安居客除了架构师还需要很多PHP开发工程师、Java开发工程师、测试工程师和系统管理员。</p>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/anjuke-is-recruiting-architect-2010-01/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mppc for kernel 2.6.31</title>
		<link>http://erning.net/archives/mppc-for-kernel-2-6-31</link>
		<comments>http://erning.net/archives/mppc-for-kernel-2-6-31#comments</comments>
		<pubDate>Wed, 20 Jan 2010 17:47:21 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://erning.net/?p=119</guid>
		<description><![CDATA[之前我搞了一台华硕的小机器做穿墙路由器，操作系统用的是Gentoo Linux。 SSH的socks5钻墙是好了，但我现在还想要开VPN到墙外，还有VPN到公司里，这样在家里用起来就更方便了。 有些PPTP的VPN需要mppe,mppc。而我用的Gentoo不像Ubuntu，原装的内核不带mppe-mppc模块，得自己打补丁。可是这补丁只到2.6.13，之后的没有了。之前每次内核升级都遇到同样麻烦:&#124; 不过最终还是google到了devil-linux项目里现成的2.6.31补丁。 cd /usr/src/patches wget http://ftp.devil-linux.org/pub/devel/sources/1.4/linux-2.6.31-mppe-mppc-1.3.patch.bz2 bunzip2 linux-2.6.31-mppe-mppc-1.3.patch.bz2 cd /usr/src/linux patch -p1 &#60; /usr/src/patches/linux-2.6.31-mppe-mppc-1.3.patch make menuconfig 选上CONFIG_PPP_MPPE_MPPC=m Device Drivers ---> [*] Network device support ---> &#60;M&#62; PPP (point-to-point protocol) support &#60;M&#62; Microsoft PPP compression/encryption (MPPC/MPPE) 然后重新编译安装内核。这样就有了ppp_mppe_mppc模块。 最后emerge ppp的时候需要带上USE=&#8221;mppe-pmmc&#8221;参数。我是把&#8221;net-dialup/ppp mppe-mppc&#8221;添加到&#8221;/etc/portage/package.use&#8221;文件里。]]></description>
			<content:encoded><![CDATA[<p>之前我搞了一台<a href="http://www.asus.com.cn/product.aspx?P_ID=QUObl5lSRQQ3lSqJ">华硕的小机器</a>做穿墙路由器，操作系统用的是<a href="http://www.gentoo.org/">Gentoo Linux</a>。</p>
<p>SSH的socks5钻墙是好了，但我现在还想要开VPN到墙外，还有VPN到公司里，这样在家里用起来就更方便了。</p>
<p>有些<a href="http://en.wikipedia.org/wiki/Point-to-point_tunneling_protocol">PPTP</a>的VPN需要<a href="http://en.wikipedia.org/wiki/Microsoft_Point-to-Point_Encryption">mppe</a>,<a href="http://en.wikipedia.org/wiki/Microsoft_Point-to-Point_Compression">mppc</a>。而我用的Gentoo不像Ubuntu，原装的内核不带mppe-mppc模块，得自己打<a href="http://mppe-mppc.alphacron.de/">补丁</a>。可是这补丁只到2.6.13，之后的没有了。之前每次内核升级都遇到同样麻烦:|</p>
<p>不过最终还是google到了<a href="http://www.devil-linux.org/">devil-linux</a>项目里现成的<a href="http://ftp.devil-linux.org/pub/devel/sources/1.4/linux-2.6.31-mppe-mppc-1.3.patch.bz2">2.6.31补丁</a>。</p>
<ul>
<pre class="brush: plain">
cd /usr/src/patches
wget http://ftp.devil-linux.org/pub/devel/sources/1.4/linux-2.6.31-mppe-mppc-1.3.patch.bz2
bunzip2 linux-2.6.31-mppe-mppc-1.3.patch.bz2
cd /usr/src/linux
patch -p1 &lt; /usr/src/patches/linux-2.6.31-mppe-mppc-1.3.patch
make menuconfig
</pre>
</ul>
<p>选上<code>CONFIG_PPP_MPPE_MPPC=m</code></p>
<ul>
<pre class="brush: plain; gutter: false;">Device Drivers  --->
[*] Network device support  --->
&lt;M&gt;   PPP (point-to-point protocol) support
&lt;M&gt;     Microsoft PPP compression/encryption (MPPC/MPPE)</pre>
</ul>
<p>然后重新编译安装内核。这样就有了ppp_mppe_mppc模块。</p>
<p>最后emerge ppp的时候需要带上USE=&#8221;mppe-pmmc&#8221;参数。我是把&#8221;net-dialup/ppp mppe-mppc&#8221;添加到&#8221;/etc/portage/package.use&#8221;文件里。</p>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/mppc-for-kernel-2-6-31/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>安居客三周年年会上的光影节目</title>
		<link>http://erning.net/archives/lighting-show-on-the-third-anniversary-of-anjuke</link>
		<comments>http://erning.net/archives/lighting-show-on-the-third-anniversary-of-anjuke#comments</comments>
		<pubDate>Sat, 09 Jan 2010 21:46:10 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[anjuke]]></category>

		<guid isPermaLink="false">http://erning.net/?p=115</guid>
		<description><![CDATA[这个由技术部和运营部联合的节目我觉得是最好的]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/tcWLVQRBwWo&#038;hl=en_US&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/tcWLVQRBwWo&#038;hl=en_US&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
这个由技术部和运营部联合的节目我觉得是最好的</p>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/lighting-show-on-the-third-anniversary-of-anjuke/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Linux Gateway</title>
		<link>http://erning.net/archives/my-linux-gateway</link>
		<comments>http://erning.net/archives/my-linux-gateway#comments</comments>
		<pubDate>Tue, 05 Jan 2010 08:56:23 +0000</pubDate>
		<dc:creator>erning</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[gfw]]></category>

		<guid isPermaLink="false">http://erning.net/?p=110</guid>
		<description><![CDATA[使用透明网关，将web流量通过squid走，cache之后可以提高家里机器访问web的速度。 通过squid配置，将被墙的站点设置成通过SSH隧道走。但squid本身不能forward给socks5代理，因此中间加了个privoxy中转。被墙的站点也可以在squid缓存，节省流量。 如果所有的web访问都通过SSH隧道，访问国内的站点慢了。不仅会反向被墙还浪费海外主机的流量。 没有海外主机的时候，SSH隧道可以用TOR替代。 https不可以做透明代理，这时候需要将浏览器的proxy设置到网关的squid。 图上没标出，网关上还安装有bind，提供域名解析服务，用来对付DNS解析被篡改的问题。 现在这个硬件用的是Asus EeeBox b202，安静省电。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/zendragon/4192451789/" title="My Linux Gateway by Zhang Erning, on Flickr"><img src="http://farm3.static.flickr.com/2737/4192451789_ec84d67d3f.jpg" width="352" height="500" alt="My Linux Gateway" /></a></p>
<p>使用透明网关，将web流量通过squid走，cache之后可以提高家里机器访问web的速度。</p>
<p>通过squid配置，将被墙的站点设置成通过SSH隧道走。但squid本身不能forward给socks5代理，因此中间加了个privoxy中转。被墙的站点也可以在squid缓存，节省流量。</p>
<p>如果所有的web访问都通过SSH隧道，访问国内的站点慢了。不仅会反向被墙还浪费海外主机的流量。</p>
<p>没有海外主机的时候，SSH隧道可以用TOR替代。</p>
<p>https不可以做透明代理，这时候需要将浏览器的proxy设置到网关的squid。</p>
<p>图上没标出，网关上还安装有bind，提供域名解析服务，用来对付DNS解析被篡改的问题。</p>
<p>现在这个硬件用的是<a href="http://www.asus.com.cn/product.aspx?P_ID=QUObl5lSRQQ3lSqJ">Asus EeeBox b202</a>，安静省电。</p>
]]></content:encoded>
			<wfw:commentRss>http://erning.net/archives/my-linux-gateway/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
