<?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; Linux</title>
	<atom:link href="http://amberlife.net/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://amberlife.net</link>
	<description>No pain No gain.</description>
	<lastBuildDate>Sun, 25 Dec 2011 16:47:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>hadoop+hbase安装成功。</title>
		<link>http://amberlife.net/2011/09/hadoophbase%e5%ae%89%e8%a3%85%e6%88%90%e5%8a%9f%e3%80%82/</link>
		<comments>http://amberlife.net/2011/09/hadoophbase%e5%ae%89%e8%a3%85%e6%88%90%e5%8a%9f%e3%80%82/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 03:24:49 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[云计算之路]]></category>
		<category><![CDATA[心情随笔]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=339</guid>
		<description><![CDATA[hadoop+hbase ，因为后来hbase的单独飞跃：从2.0跨越至9.0 。导致很多版本不兼容问题。再者还有hbase同OS的关系问题。
昨天在用换用debian6+hadoop0.21+hbase0.90.4 之后，成功安装。hadoop0.21+hbase0.90.4+ubuntu10这个组合却总是失败，不知道原因，在ubuntu下总是无法在hbase shell中创建表。
这里，感谢国华师兄的指导，和一起奋斗的进嘉同学。
]]></description>
			<content:encoded><![CDATA[<p>hadoop+hbase ，因为后来hbase的单独飞跃：从2.0跨越至9.0 。导致很多版本不兼容问题。再者还有hbase同OS的关系问题。<br />
昨天在用换用debian6+hadoop0.21+hbase0.90.4 之后，成功安装。hadoop0.21+hbase0.90.4+ubuntu10这个组合却总是失败，不知道原因，在ubuntu下总是无法在hbase shell中创建表。<br />
这里，感谢<a href="http://scholat.com/~chengh">国华师兄</a>的指导，和一起奋斗的进嘉同学。</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2011/09/hadoophbase%e5%ae%89%e8%a3%85%e6%88%90%e5%8a%9f%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux环境下如何安装C++编译器Code::Block(转）</title>
		<link>http://amberlife.net/2011/03/linux%e7%8e%af%e5%a2%83%e4%b8%8b%e5%a6%82%e4%bd%95%e5%ae%89%e8%a3%85c%e7%bc%96%e8%af%91%e5%99%a8codeblock%e8%bd%ac%ef%bc%89/</link>
		<comments>http://amberlife.net/2011/03/linux%e7%8e%af%e5%a2%83%e4%b8%8b%e5%a6%82%e4%bd%95%e5%ae%89%e8%a3%85c%e7%bc%96%e8%af%91%e5%99%a8codeblock%e8%bd%ac%ef%bc%89/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 16:14:23 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=266</guid>
		<description><![CDATA[安这个东东有点崩溃，整了一个下午。由于之前没有过Linux使用及开发经验，初次涉及Linux环境下的开发，多少感觉不太适应，特别是对于各种软件的安装，相比Windows确实要麻烦许多。
前几天买了一本书叫《Linux程序设计第3版》，据说相当经典，经典当然不能错过，特别是对于一个刚刚开始学习Linux的新手而言。花了一天半时间狂翻了300多页，多多少少心里知道这是讲啥东东，感觉还不错，嘿~
心里痒痒就开始整Linux，虽然说vim+gcc+gdb已经能够满足Linux下C++的开发了，但还是想找一个IDE作为辅助集成开发环境。查了很多篇博客，看来大家都还比较推荐这款Code::Block，总结了一些文章的观点，原因可以从以下几点看出：

（1）开源：有一篇博文里面的观点说开源的东东就意味着免费，其实这是个错误的，开源的东东是可以收费的。但开源本身而言对于一个软件的发展是极为有利的，Linux本身就是一个很好的例子！
（2）跨平台：大多数在Linux环境下开发的程序员都或多或少地接触过Windows平台下的程序开发（这几乎可以是肯定的，君不见Windows的盗版光盘满大街4块钱一张的）。当你在Linux下完成了一个系统，你恐怕潜意识里都在想，这玩意能不能直接在Windows上跑那？因此，从这点来说，即使你现在所设计的系统并不需要考虑跨平台的问题，但是为了将来的长远打算，能跨平台当然不是一件坏事。而像Code::Blocks这样一款IDE软件可以跨Linux和Windows平台，又可以支持Mac系统，有什么理由不值得我们去用一下呢！
（3）IDE本身是用C++写成的：如果你所使用的IDE是用Java写的，就像Eclipse，而你要在上面写开发C++程序，你会什么感觉！要知道Java的虚拟机是用C++写的！- -&#124;&#124;&#124;
（4）支持多编译器：这个Happy，不同的编译器对于C++99的标准支持的程度不同，之前用VC6，那就一个崩溃啊，很多程序都无法正常运行，这个好，可以选像GCC、Inter C++、Borland C++、VC++等等，我默认还是用了GCC。
（5）插件式的框架：联想一下Eclipse，这种开发的方式让IDE保留了良好的可扩展性，对于一款开源的IDE而言，这恐怕是最合理的选择了。Code::Blocks有很多核心功能，包括调试功能都是通过插件来实现的，明天去下载个代码格式美化的插件玩玩去，等水平到了，我也想开发个插件，比如什么“坦克大战”，加载到小游戏里面去，哈哈！
（6）升级：几乎每个月都会有更新，非常有生命力的东东！
（7）内嵌可视化设计：可视化开发平台与VB、Delphi、C++ Builder相比，在“傻瓜性”上差了一大截，主要原因在于主流的跨平台图形窗口定位体系都是采用定位“容器”来实现的，这一点一开始可能不会太习惯，但在熟悉之后，设计各种对话框什么的都很得心应手了的。一点点的不直观，但却很容易让你的程序迁移到别的操作系统上面，同时你对窗口设计了解更深入了，还是很值得的！
（8）C++扩展库支持：通过它的一个用以支持Dev C++的插件，可以下载大量的C++开源的扩展库，比如网络操作、图形算法、压缩、加密等等。
（9）多国语言：支持近40国语言，不过并不是默认支持的，语言包文件可以下载后使用
（10）众人的选择：Code::Blocks进入了“SourceForge Community Choice Award”2008年度决赛，“SourceForge”是全球最大的开源社区，这一赛事也被称为“社区最佳选择奖”，可见其拥有一定规模的用户群体，并深受用户的喜爱！
关于安装过程总结起来可以分为以下几个步骤：
1.首先要安装wxGTK，这个是必须的，否则Code::Blocks将无法成功安装。因为Code::Blocks是基于wxWidgets（wxGTK）开发出来的。
wxGTK最新版本下载地址：http://www.wxwidgets.org/downloads/
我所使用的版本下载地址为：
http://nchc.dl.sourceforge.net/sourceforge/wxwindows/wxGTK-2.8.10.tar.gz
2.编译安装wxGTK（以wxGTK-2.8.10为例）
依次输入如下命令进行安装：
tar zxvf wxGTK-2.8.10.tar.gz
cd wxGTK-2.8.10
./configure &#8211;enable-xrc &#8211;enable-monolithic &#8211;enable-unicode
make
make install
其中的make过程时间会相当的长，请耐心等待，如果没有错误提示，说明安装比较顺利！
3.下载Code::Block
Code::Block最新版本的下载地址：http://www.codeblocks.org/downloads/
我所使用的版本下载地址为：
http://ncu.dl.sourceforge.net/sourceforge/codeblocks/codeblocks-8.02-src.tar.bz2
4.编译安装Code::Block（以codeblocks-8.02为例）
依次输入如下命令进行安装：
tar jxf codeblocks-8.02-src.tar.bz2
cd codeblocks-8.02
./configure –prefix=/usr
make
make install
这里面将其安装于/usr下，如果在/usr/local下会提示有些so文件找不到，按照Linux的习惯而言，系统包都是安装在/usr下，而用户使用的应用软件默认安装于/usr/local下，如果不指定话会因为PATH不够，无法包含Lib库的情况，当然可以自己添加。
5.修改库文件路径指向
因为在安装wxGTK时没有指定路径，因此，wxGTK被装到了/usr/local/lib下，当然，如果安装wxGTK时已经指定了路径，即加入“-prefix=/usr”这个参数后，则可以省略这一步。
库文件路径指向方法：
vi /etc/ld.so.conf
在文件最后输入：/usr/local/lib
保存后，运行/sbin/ldconfig
按照上述配置路径就应该没有什么问题，否则就会出现运行Code::Blocks之后，一闪就自动关闭了，本人就是这种情况，通过修改就解决了。
6.验证安装是否正确
可以通过以下操作的输出检索安装是否正确
wx-config &#8211;prefix
wx-config &#8211;libs
which wx-config
7.创建快捷方式
在桌面上点鼠标右键，选择“创建启动器”，并输入如下路径：
/usr/bin/codeblocks
8.双击启动Code::Block
或直接在终端输入/usr/bin/codeblocks
9.中文语言包
需要下载一个中文语言包：d2school_codeblocks_chinese_locale.7z
下载地址：
http://www.d2school.com/codeblocks/download/d2school_codeblocks_chinese_locale.7z
在Linux下解压后，创建一个目录mkdir -p /usr/share/codeblocks/locale 将解压出来的mo文件复制到下面，再打开就是中文的了，
有人说还需要下面的操作，其实是不需要的，打开之后就是中文了：
启动Code::Blocks，选择SettingsàEnviornmentàViewàInternationalizationà
Chinese (Simplified)即可。
10.更改编译器的默认路径
费了老半天的劲把code::blocks装上去了，兴奋地赶快想敲个HELLO WORLD程序，结果呢，又折腾了半天点了构建、运行…等等按钮都是一点反应都没有。
原因很简单Fedora上编译器默认的安装路径是/usr/lib，但实际上，我们把code::blocks安装到了/usr下面，所以需要把默认的路径改为/usr：settingàcompiler and ddebugeràToolchain executables中将compiler’s installtion directory改为/usr就行了，code::blocks自动检测结果是/usr/lib。
]]></description>
			<content:encoded><![CDATA[<p>安这个东东有点崩溃，整了一个下午。由于之前没有过Linux使用及开发经验，初次涉及Linux环境下的开发，多少感觉不太适应，特别是对于各种软件的安装，相比Windows确实要麻烦许多。<br />
前几天买了一本书叫《Linux程序设计第3版》，据说相当经典，经典当然不能错过，特别是对于一个刚刚开始学习Linux的新手而言。花了一天半时间狂翻了300多页，多多少少心里知道这是讲啥东东，感觉还不错，嘿~<br />
心里痒痒就开始整Linux，虽然说vim+gcc+gdb已经能够满足Linux下C++的开发了，但还是想找一个IDE作为辅助集成开发环境。查了很多篇博客，看来大家都还比较推荐这款Code::Block，总结了一些文章的观点，原因可以从以下几点看出：</p>
<p><span id="more-266"></span></p>
<p>（1）开源：有一篇博文里面的观点说开源的东东就意味着免费，其实这是个错误的，开源的东东是可以收费的。但开源本身而言对于一个软件的发展是极为有利的，Linux本身就是一个很好的例子！<br />
（2）跨平台：大多数在Linux环境下开发的程序员都或多或少地接触过Windows平台下的程序开发（这几乎可以是肯定的，君不见Windows的盗版光盘满大街4块钱一张的）。当你在Linux下完成了一个系统，你恐怕潜意识里都在想，这玩意能不能直接在Windows上跑那？因此，从这点来说，即使你现在所设计的系统并不需要考虑跨平台的问题，但是为了将来的长远打算，能跨平台当然不是一件坏事。而像Code::Blocks这样一款IDE软件可以跨Linux和Windows平台，又可以支持Mac系统，有什么理由不值得我们去用一下呢！<br />
（3）IDE本身是用C++写成的：如果你所使用的IDE是用Java写的，就像Eclipse，而你要在上面写开发C++程序，你会什么感觉！要知道Java的虚拟机是用C++写的！- -|||<br />
（4）支持多编译器：这个Happy，不同的编译器对于C++99的标准支持的程度不同，之前用VC6，那就一个崩溃啊，很多程序都无法正常运行，这个好，可以选像GCC、Inter C++、Borland C++、VC++等等，我默认还是用了GCC。<br />
（5）插件式的框架：联想一下Eclipse，这种开发的方式让IDE保留了良好的可扩展性，对于一款开源的IDE而言，这恐怕是最合理的选择了。Code::Blocks有很多核心功能，包括调试功能都是通过插件来实现的，明天去下载个代码格式美化的插件玩玩去，等水平到了，我也想开发个插件，比如什么“坦克大战”，加载到小游戏里面去，哈哈！<br />
（6）升级：几乎每个月都会有更新，非常有生命力的东东！<br />
（7）内嵌可视化设计：可视化开发平台与VB、Delphi、C++ Builder相比，在“傻瓜性”上差了一大截，主要原因在于主流的跨平台图形窗口定位体系都是采用定位“容器”来实现的，这一点一开始可能不会太习惯，但在熟悉之后，设计各种对话框什么的都很得心应手了的。一点点的不直观，但却很容易让你的程序迁移到别的操作系统上面，同时你对窗口设计了解更深入了，还是很值得的！<br />
（8）C++扩展库支持：通过它的一个用以支持Dev C++的插件，可以下载大量的C++开源的扩展库，比如网络操作、图形算法、压缩、加密等等。<br />
（9）多国语言：支持近40国语言，不过并不是默认支持的，语言包文件可以下载后使用<br />
（10）众人的选择：Code::Blocks进入了“SourceForge Community Choice Award”2008年度决赛，“SourceForge”是全球最大的开源社区，这一赛事也被称为“社区最佳选择奖”，可见其拥有一定规模的用户群体，并深受用户的喜爱！</p>
<p>关于安装过程总结起来可以分为以下几个步骤：<br />
1.首先要安装wxGTK，这个是必须的，否则Code::Blocks将无法成功安装。因为Code::Blocks是基于wxWidgets（wxGTK）开发出来的。<br />
wxGTK最新版本下载地址：http://www.wxwidgets.org/downloads/<br />
我所使用的版本下载地址为：<br />
http://nchc.dl.sourceforge.net/sourceforge/wxwindows/wxGTK-2.8.10.tar.gz</p>
<p>2.编译安装wxGTK（以wxGTK-2.8.10为例）<br />
依次输入如下命令进行安装：<br />
tar zxvf wxGTK-2.8.10.tar.gz<br />
cd wxGTK-2.8.10<br />
./configure &#8211;enable-xrc &#8211;enable-monolithic &#8211;enable-unicode<br />
make<br />
make install<br />
其中的make过程时间会相当的长，请耐心等待，如果没有错误提示，说明安装比较顺利！</p>
<p>3.下载Code::Block<br />
Code::Block最新版本的下载地址：http://www.codeblocks.org/downloads/<br />
我所使用的版本下载地址为：<br />
http://ncu.dl.sourceforge.net/sourceforge/codeblocks/codeblocks-8.02-src.tar.bz2</p>
<p>4.编译安装Code::Block（以codeblocks-8.02为例）<br />
依次输入如下命令进行安装：<br />
tar jxf codeblocks-8.02-src.tar.bz2<br />
cd codeblocks-8.02<br />
./configure –prefix=/usr<br />
make<br />
make install<br />
这里面将其安装于/usr下，如果在/usr/local下会提示有些so文件找不到，按照Linux的习惯而言，系统包都是安装在/usr下，而用户使用的应用软件默认安装于/usr/local下，如果不指定话会因为PATH不够，无法包含Lib库的情况，当然可以自己添加。</p>
<p>5.修改库文件路径指向<br />
因为在安装wxGTK时没有指定路径，因此，wxGTK被装到了/usr/local/lib下，当然，如果安装wxGTK时已经指定了路径，即加入“-prefix=/usr”这个参数后，则可以省略这一步。<br />
库文件路径指向方法：<br />
vi /etc/ld.so.conf<br />
在文件最后输入：/usr/local/lib<br />
保存后，运行/sbin/ldconfig<br />
按照上述配置路径就应该没有什么问题，否则就会出现运行Code::Blocks之后，一闪就自动关闭了，本人就是这种情况，通过修改就解决了。</p>
<p>6.验证安装是否正确<br />
可以通过以下操作的输出检索安装是否正确<br />
wx-config &#8211;prefix<br />
wx-config &#8211;libs<br />
which wx-config</p>
<p>7.创建快捷方式<br />
在桌面上点鼠标右键，选择“创建启动器”，并输入如下路径：<br />
/usr/bin/codeblocks</p>
<p>8.双击启动Code::Block<br />
或直接在终端输入/usr/bin/codeblocks</p>
<p>9.中文语言包<br />
需要下载一个中文语言包：d2school_codeblocks_chinese_locale.7z<br />
下载地址：<br />
http://www.d2school.com/codeblocks/download/d2school_codeblocks_chinese_locale.7z<br />
在Linux下解压后，创建一个目录mkdir -p /usr/share/codeblocks/locale 将解压出来的mo文件复制到下面，再打开就是中文的了，<br />
有人说还需要下面的操作，其实是不需要的，打开之后就是中文了：<br />
启动Code::Blocks，选择SettingsàEnviornmentàViewàInternationalizationà<br />
Chinese (Simplified)即可。</p>
<p>10.更改编译器的默认路径<br />
费了老半天的劲把code::blocks装上去了，兴奋地赶快想敲个HELLO WORLD程序，结果呢，又折腾了半天点了构建、运行…等等按钮都是一点反应都没有。<br />
原因很简单Fedora上编译器默认的安装路径是/usr/lib，但实际上，我们把code::blocks安装到了/usr下面，所以需要把默认的路径改为/usr：settingàcompiler and ddebugeràToolchain executables中将compiler’s installtion directory改为/usr就行了，code::blocks自动检测结果是/usr/lib。</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2011/03/linux%e7%8e%af%e5%a2%83%e4%b8%8b%e5%a6%82%e4%bd%95%e5%ae%89%e8%a3%85c%e7%bc%96%e8%af%91%e5%99%a8codeblock%e8%bd%ac%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>linux下多线程编程初学笔记(1)</title>
		<link>http://amberlife.net/2011/02/linux%e4%b8%8b%e5%a4%9a%e7%ba%bf%e7%a8%8b%e7%bc%96%e7%a8%8b%e5%88%9d%e5%ad%a6%e7%ac%94%e8%ae%b01/</link>
		<comments>http://amberlife.net/2011/02/linux%e4%b8%8b%e5%a4%9a%e7%ba%bf%e7%a8%8b%e7%bc%96%e7%a8%8b%e5%88%9d%e5%ad%a6%e7%ac%94%e8%ae%b01/#comments</comments>
		<pubDate>Sat, 26 Feb 2011 08:57:33 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=261</guid>
		<description><![CDATA[主要了解这三个函数

/*pthread_create函数主要完成线程的创建.
   参数解释: 
     thread参数是一个线程标识符,当新创建一个线程的时候,会以此变量记录线程标识符
     attr参数用于设置线程的属性,一般使用时,常为NULL
     start_routine 函数指针,指向一个函数.也就是这个线程所要运行的函数
     arg参数:线程所指向的函数的参数,如果函数不需要参数,设为NULL
*/
int pthread_create&#40;pthread_t *thread,pthread_attr_t *attr, 
void *&#40;*start_routine&#41;&#40;void *&#41;,void *arg&#41;; 
/*
  pthread_join : 调用pthread_join的线程将等待参数thread所指向的线程
  结束为止，当pthread_join函数返回时，被等待线程的资源被收回。
  参数解释:
   第一个参数为被等待的线程标识符，
   第二个参数为一个用户定义的指针，它可以用来存储被等待线程的返回值
*/
int pthread_join&#40;pthread *thread,void **thread_return&#41;; 
/*
   pthread_exit [...]]]></description>
			<content:encoded><![CDATA[<p>主要了解这三个函数</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*pthread_create函数主要完成线程的创建.
   参数解释: 
     thread参数是一个线程标识符,当新创建一个线程的时候,会以此变量记录线程标识符
     attr参数用于设置线程的属性,一般使用时,常为NULL
     start_routine 函数指针,指向一个函数.也就是这个线程所要运行的函数
     arg参数:线程所指向的函数的参数,如果函数不需要参数,设为NULL
*/</span>
<span style="color: #993333;">int</span> pthread_create<span style="color: #009900;">&#40;</span>pthread_t <span style="color: #339933;">*</span>thread<span style="color: #339933;">,</span>pthread_attr_t <span style="color: #339933;">*</span>attr<span style="color: #339933;">,</span> 
<span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>start_routine<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span>arg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #808080; font-style: italic;">/*
  pthread_join : 调用pthread_join的线程将等待参数thread所指向的线程
  结束为止，当pthread_join函数返回时，被等待线程的资源被收回。
  参数解释:
   第一个参数为被等待的线程标识符，
   第二个参数为一个用户定义的指针，它可以用来存储被等待线程的返回值
*/</span>
<span style="color: #993333;">int</span> pthread_join<span style="color: #009900;">&#40;</span>pthread <span style="color: #339933;">*</span>thread<span style="color: #339933;">,</span><span style="color: #993333;">void</span> <span style="color: #339933;">**</span>thread_return<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #808080; font-style: italic;">/*
   pthread_exit 主要用于结束线程.
   下面主要解释一下pthread_exit的参数 retval .当线程调用pthread_exit时,
   线程将退出,retval中保存需要返回的信息.只要pthread_join中的第二个参数thread_return不是NULL，这个值将被传递给thread_return.
*/</span>
<span style="color: #993333;">void</span> pthread_exit<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span>retval<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>下面分析一个实例:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;pthread .h&gt;</span>
<span style="color: #339933;">#include &lt;stdio .h&gt;</span>
<span style="color: #339933;">#include &lt;errno .h&gt;</span>
<span style="color: #339933;">#include &lt;string .h&gt;</span>
<span style="color: #993333;">void</span> <span style="color: #339933;">*</span>thread_function<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span>arg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">char</span> message<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;Hello World&quot;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> res<span style="color: #339933;">;</span>
	pthread_t a_thread<span style="color: #339933;">;</span>
	<span style="color: #993333;">void</span> <span style="color: #339933;">*</span>thread_result<span style="color: #339933;">;</span>
	res <span style="color: #339933;">=</span> pthread_create<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>a_thread<span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #339933;">,</span> thread_function<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>res <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		perror<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Thread creation failed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Waiting for thread to finish...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	res <span style="color: #339933;">=</span> pthread_join<span style="color: #009900;">&#40;</span>a_thread<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>thread_result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//pthread_join 阻塞执行的线程直到某线程结束</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>res <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		perror<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Thread join failed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Thread joined, it returned %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>thread_result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Message is now %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">void</span> <span style="color: #339933;">*</span>thread_function<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span>arg<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;thread_function is running. Argument was %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>arg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	sleep<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	strcpy<span style="color: #009900;">&#40;</span>message<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Bye!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	pthread_exit<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Thank you for the CPU time&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>string<span style="color: #339933;">&gt;&lt;/</span>errno<span style="color: #339933;">&gt;&lt;/</span>stdio<span style="color: #339933;">&gt;&lt;/</span>pthread<span style="color: #339933;">&gt;</span></pre></div></div>

<p>当主线程执行到pthread_create时,将创建一个新线程.我们将它称之为子线程<br />
这时将根据cpu将主线程和子线程之间调度<br />
当主线程执行到pthread_join的时候,将阻塞主线程的执行,直到a_thread所标示的子线程执行结束后,再执行主线程<br />
<div id="attachment_264" class="wp-caption alignnone" style="width: 478px"><img src="http://amberlife.net/wp-content/uploads/2011/02/thread.jpg" alt="执行结果" title="thread" width="468" height="149" class="size-full wp-image-264" /><p class="wp-caption-text">执行结果</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2011/02/linux%e4%b8%8b%e5%a4%9a%e7%ba%bf%e7%a8%8b%e7%bc%96%e7%a8%8b%e5%88%9d%e5%ad%a6%e7%ac%94%e8%ae%b01/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SSH下的乱码问题</title>
		<link>http://amberlife.net/2009/11/ssh%e4%b8%8b%e7%9a%84%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98/</link>
		<comments>http://amberlife.net/2009/11/ssh%e4%b8%8b%e7%9a%84%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 09:43:44 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=152</guid>
		<description><![CDATA[1.vi /etc/sysconfig/i18n 
将内容改为 
LANG=&#8221;zh_CN.GB18030&#8243;
LANGUAGE=&#8221;zh_CN.GB18030:zh_CN.GB2312:zh_CN&#8221;
SUPPORTED=&#8221;zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en&#8221;
SYSFONT=&#8221;lat0-sun16&#8243;  
这样中文在SSH,telnet终端就可以正常显示了。
2.安安装Linux的时候选择的是中文字,但是使用的时候出现了乱码解决方法是在命令提示下输入export LANG=C 
3.export LC_ALL=zh_CN.GBK
export LANG=zh_CN.GBK 
]]></description>
			<content:encoded><![CDATA[<p>1.vi /etc/sysconfig/i18n </p>
<p>将内容改为 </p>
<p>LANG=&#8221;zh_CN.GB18030&#8243;<br />
LANGUAGE=&#8221;zh_CN.GB18030:zh_CN.GB2312:zh_CN&#8221;<br />
SUPPORTED=&#8221;zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en&#8221;<br />
SYSFONT=&#8221;lat0-sun16&#8243;  </p>
<p>这样中文在SSH,telnet终端就可以正常显示了。</p>
<p>2.安安装Linux的时候选择的是中文字,但是使用的时候出现了乱码解决方法是在命令提示下输入export LANG=C </p>
<p>3.export LC_ALL=zh_CN.GBK<br />
export LANG=zh_CN.GBK </p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2009/11/ssh%e4%b8%8b%e7%9a%84%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Linux: the big picture</title>
		<link>http://amberlife.net/2009/10/linux-the-big-picture/</link>
		<comments>http://amberlife.net/2009/10/linux-the-big-picture/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 08:40:16 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=136</guid>
		<description><![CDATA[This article gives a brief introduction to Linux, with a sketch of the background history. It was written for PC Update, the monthly magazine of the PC user group in Melbourne, Australia. This version does not contain all the editorial changes and spelling fixes made by the magazine.
April 28, 2003
History
The history of computer operating systems [...]]]></description>
			<content:encoded><![CDATA[<p>This article gives a brief introduction to Linux, with a sketch of the background history. It was written for <em>PC Update</em>, the monthly magazine of the <a href="http://www.melbpc.org.au/">PC user group in Melbourne</a>, Australia. This version does not contain all the editorial changes and spelling fixes made by the magazine.</p>
<p>April 28, 2003</p>
<h2>History<span id="more-136"></span></h2>
<p>The history of computer operating systems starts in the 1950s, with simple schemes for running batch programs efficiently, minimizing idle time between programs. A batch program is one that does not interact with the user at all. It reads all its input from a file (possibly a stack of punch cards) and outputs all its output to another file (possibly to a printer). This is how all computers used to work.</p>
<p>Then, in early 1960s, interactive use started to gain ground. Not only interactive use, but having several people use the same computer at the same time, from different terminals. Such systems were called time-sharing systems and were quite a challenge to implement compared to the batch systems.</p>
<p>During the 1960s there were many attempts at building good time-sharing systems. Some of these were university research projects, others were commercial ones. One such project was Multics, which was quite innovative at the time. It had, for example, a hierarchical file system, something taken for granted in modern operating systems.</p>
<p>The Multics project did not, however, progress very well. It took years longer to complete than anticipated and never got a significant share of the operating system market. One of the participants, Bell Labs, withdrew from the project. The Bell Labs people who were involved then made their own operating system and called it Unix.</p>
<p>Unix was originally distributed for free and gained much popularity in universities. Later, it got an implementation of the TCP/IP protocol stack and was adopted as the operating system of choice for early workstations.</p>
<p>By 1990, Unix had a strong position in the server market and was especially strong in universities. Most universities had Unix systems and computer science students were exposed to them. Many of them wanted to run Unix on their own computers as well. Unfortunately, by that time, Unix had become commercial and rather expensive. About the only cheap option was Minix, a limited Unix-like system written by Andrew Tanenbaum for teaching purposes. There was also 386BSD, a precursor NetBSD, FreeBSD, and OpenBSD, but that wasn&#8217;t mature yet, and required higher end hardware than many had at home.</p>
<p>Into this scene came Linux, in October, 1991. Linus Torvalds, the author, had used Unix at the University of Helsinki, and wanted something similar on his PC at home. Since the commercial alternatives were way too expensive, he started out with Minix, but wanted something better and soon started to write his own operating system. After its first release, it soon attracted the attention of several other hackers. While Linux initially was not really useful except as a toy, it soon gathered enough features to be interesting even for people uninterested in operating system development.</p>
<p>Linux itself is only the kernel of an operating system. The kernel is the part that makes all other programs run. It implements multitasking, and manages hardware devices, and generally enables applications to do their thing. All the programs that the user (or system administrator) actually interacts with are run on top of the kernel. Some of these are essential: for example, a command line interpreter (or shell), which is used both interactively and to write shell scripts (corresponding to .BAT files).</p>
<p>Linus did not write these programs himself, and used existing free versions instead. This reduced greatly the amount of work he had to do to get a working environment. In fact, he often changed the kernel to make it easier to get the existing programs to run on Linux, instead of the other way around.</p>
<p>Most of the critically important system software, including the C compiler, came from the Free Software Foundation&#8217;s GNU project. Started in 1984, the GNU project aims to develop an entire Unix-like operating system that is completely free. To credit them, many people like to refer to a Linux system as a GNU/Linux system. (GNU has their own kernel as well.)</p>
<p>During 1992 and 1993, the Linux kernel gathered all the necessary features it required to work as a replacement for Unix workstations, including TCP/IP networking and a graphical windowing system (the X Window System). Linux also received plenty of industry attention, and several small companies were started to develop and distribute Linux. Dozens of user groups were founded, and the Linux Journal magazine started to appear in early 1994.</p>
<p>Version 1.0 of the Linux kernel was released in March, 1994. Since then, the kernel has gone through many development cycles, each culminating in a stable version. Each development cycle has taken a year or three, and has involved redesigning and rewriting large parts of the kernel to deal with changes in hardware (for example, new ways to connect peripherals, such as USB) and to meet increased speed requirements as people apply Linux to larger and larger systems (or smaller and smaller ones: embedded Linux is becoming a hot topic).</p>
<p>From a marketing and political point of view, after the 1.0 release the next huge step happened in 1997, when Netscape decided to release their web browser as free software (the term &#8216;open source&#8217; was created for this). This was the occasion that first brought free software to the attention of the whole computing world for the time. It has taken years of work since then, but free software (whether called that or open source) has become not only generally accepted but also often the preferred choice for many applications.</p>
<h2>Social phenomenon</h2>
<p>Apart from being a technological feat, Linux is also an interesting social phenomenon. Much through Linux, the free software movement has broken through to general attention. On the way, it even got an informal marketing department and brand: open source. It is baffling to many outsiders that something as successful as Linux could be developed by a bunch of unorganized people in their free time.</p>
<p>The major factor here is the availability of all the source code to the system, plus a copyright license that allows modifications to be made and distributed. When the system has many programmers among its users, if they find a problem, they can fairly easily fix it. Additionally, if they think a feature is missing, they can add it themselves. For some reason, that is something programmers like to do, even if they&#8217;re not paid for it: they have an itch (a need), so they scratch (write the code to fill the need).</p>
<p>It is necessary to have at least one committed developer who puts in lots of effort. After a while, however, once there are enough programmer-users sending small changes and improvements, you get a snowball effect: lots of small changes result in a fairly rapid total development speed, which then attracts more users, some of which will be programmers. This then results in more small changes and improvements sent in by users, and so on.</p>
<p>For operating system development specifically, this large group of programmer-users results in two important types of improvements: bug fixes and device drivers. Operating system code often has bugs that only occur rarely and it can be difficult for the developers to reproduce them. When there are thousands or more users who are also programmers, this results in a very effective testing and debugging army.</p>
<p>Most of the code volume in Linux is device drivers. The core functionality, which implements multitasking and multiuser functionality, is small in comparison. Most device drivers are independent from each other, and only interact with the operating system core via well defined interfaces. Thus, it is fairly easy to write a new device driver without having to understand the whole complexity of the operating system. This also allows the main developers to concentrate on the core functiionality, and they can let those people write the device drivers who actually have the devices.</p>
<p>It would be awkward just to store the thousands of different sound cards, Ethernet cards, IDE controllers, motherboards, digital cameras, printers, and so on that Linux supports. The Linux development model is distributed, and spreads the work around quite effectively.</p>
<p>The Linux model is not without problems. When a new device gets on the market, it can take a few months before a Linux programmer is interested enough to write a device driver. Also, some device manufacturers, for whatever reason, do not want to release programming information for their devices, which can prevent a Linux device driver to be written at all. Luckily, with the growing global interest in Linux such companies become fewer in numbers.</p>
<h2>What it is</h2>
<p>Linux is a Unix-like multitasking, multiuser 32 and 64 bit operating system for a variety of hardware platforms and licensed under an open source license. This is a somewhat accurate but rather brief description. I&#8217;ll spend the rest of this article expounding on it.</p>
<p>Being Unix-like means emulating the Unix operating system interfaces so that programs written for Unix will work for Linux merely by re-compiling. It follows that Linux uses mostly the same abstractions as the Unix system. For example, the way processes are created and controlled is the same in Unix and Linux.</p>
<p>There are a number of other operating systems in active use: from Microsoft&#8217;s family of Windows versions, through Apple&#8217;s MacOS to OpenVMS. Linux&#8217;s creator, Linus Torvalds, chose Unix as the model for Linux partly for its aesthetic appeal to system programmers, partly because of all the operating systems he was familiar with, it was the one he knew best.</p>
<p>The Unix heritage also gives Linux the two most important features: multitasking and multiuser capabilities. Linux, like Unix, was designed from the start to run multiple processes independently of each other. Implementing multitasking well requires attention at every level of the operating system. It is hard to add multitasking to an operationg system afterwards. That&#8217;s why the Windows 95 series and MacOS (before MacOS X) did multitasking somewhat poorly: multitasking was added to an existing operating system, not designed into a new one. That&#8217;s also why the Windows NT series, MacOS X, and Linux do multitasking so much better.</p>
<p>A good implementation of multitasking requires, among other things, proper memory management. The operating system must use the memory protection support in the processor to protect running programs from each other. Otherwise a buggy program (that is, most any program) may corrupt the memory area of another program, or the operating system itself, causing weird behavior or a total system crash, with likely loss of data and unsaved work.</p>
<p>Supporting many concurrent users is easy after multitasking works. You label each instance of a running program with a particular user and prevent the program from tampering with other user&#8217;s files.</p>
<h2>Portable and scalable</h2>
<p>Linux was originally written for an Intel 386 processor, and naturally works on all successive processors. After about three years of development, work began to adapt (or port) Linux to other processor families as well. The first one was the Alpha processor, then developed and sold by the Digital Equipment Corporation. The Alpha was chosen because Digital graciously donated a system to Linus. Soon other porting efforts followed. Today, Linux also runs on Sun SPARC and UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64 and CRIS processors. (See <a href="http://kernel.org/">http://kernel.org</a> for details.)</p>
<p>Most of those processors are not very common on people&#8217;s desks. For example, S/390 is IBM&#8217;s big mainframe architecture. Here, mainframe means the kind of computer inside of which you can put your desk, rather than the kind that fits on your desk.</p>
<p>Some of those processors are 32 bit, like the Intel 386. Others are 64 bit, such as the Alpha. Supporting such different processors has been good for Linux. It has required designing the system to use proper modularity and good abstractions and this has improved code quality.</p>
<p>The large variety of supported processors also shows off Linux&#8217;s scalability: it works everything from very small systems, such as embedded computers, handheld devices, and mobile phones, to very large systems, such as the IBM mainframes.</p>
<p>Using clustering technology, such as Beowulf (<a href="http://www.beowulf.org/">http://www.beowulf.org/</a>), Linux even runs on supercomputers. For example, the US Lawrence Livermore National Laboratories bought a cluster with 1920 processors, resulting in one of the five fastest supercomputers in the world with a theoretical peak performance of 9.2 teraFLOPS or 9.2 trillion calculations per second. (<a href="http://lwn.net/Articles/4759/">http://lwn.net/Articles/4759/</a>).</p>
<h2>Using Linux</h2>
<p>The operating system itself is pretty boring to most people. Applications are necessary so to get things done. Traditionally, Linux applications have been the kinds of applications used with Unix: scientific software, databases, and network services. Also, of course, all the tools programmers want for their craft.</p>
<p>Much of such software seems rather old-fashioned by today&#8217;s desktop standards. User interfaces are text based, or they might not exist at all. Indeed, most software has usually been non-interactive and has been of the command line, batch processing variety. Since most users have been experts in the application domain, this has been good enough.</p>
<p>Thus, Linux first found corporate employment as a file server, mail server, web server, or firewall. It was a good platform for running a database, with support from all major commercial database manufacturers.</p>
<p>In the past few years Linux has also become an interesting option on the user friendly desktop front. The KDE (<a href="http://www.kde.org/">http://www.kde.org/</a>) and Gnome (<a href="http://www.gnome.org/">http://www.gnome.org/</a>) projects develop desktop environments and applications that are easy to learn (as well as effective to use). There is now plenty of desktop applications which people with Windows or MacOS experience will have no difficulty using.</p>
<p>There is even a professional grade office software package. OpenOffice (<a href="http://www.openoffice.org/">http://www.openoffice.org/</a>), based on Sun&#8217;s StarOffice, is free, fully featured, and file compatible with Microsoft Office. It includes a word processor, spreadsheet, and presentation program, competing with Microsoft&#8217;s Word, Excel, and Powerpoint.</p>
<h2>Linux distributions</h2>
<p>To install Linux, you have to choose a Linux distribution. A distribution is the Linux kernel, plus an installation program, plus some set of applications to run on top of it. There are hundreds of Linux distributions, serving different needs.</p>
<p>All distributions use pretty much the same actual software, but they are different in which software they include, which versions they pick (a stable version known to work well or the latest version with all the bells and whistles and bugs), how the software is pre-configured, and how the system is installed and managed. For example, OpenOffice, Mozilla (web browser), KDE and Gnome (desktop environments), and Apache (web server) will all work on all distributions.</p>
<p>Some distributions aim to be general purpose, but most of them are task specific: they are meant for running a firewall, a web kiosk, or meant for users within a particular university or country. Those looking for their first Linux experience can concentrate on the three biggest general purpose distributions: Red Hat, SuSE, and Debian.</p>
<p>The Red Hat and SuSE distributions are produced by companies by the same names. They aim at providing an easy installation procedure, and for a pleasant desktop experience. They are also good as servers. Both are sold in boxes, with an installation CD and printed manual. Both can also be downloaded via the network.</p>
<p>The Debian distribution is produced by a volunteer organization. It&#8217;s installation is less easy: you have to answer questions during the installation the other distributions deduce automatically. Nothing complicated as such, but requiring understanding of and information about hardware most PC users don&#8217;t want to worry about. On the other hand, after installation, Debian can be upgraded to each new release without re-installing anything.</p>
<p>The easiest way to try out Linux is to use a distribution that works completely off a CD-ROM. This way, you don&#8217;t have to install anything. You merely download the CD-ROM image from the net and burn it on a disk, or buy a mass-produced one via the net. Insert disk in drive, then reboot. Not having to install anything on the hard disk means you can easily switch between Linux and Windows. Also, since all Linux files are on a read-only CD-ROM, you can&#8217;t break anthing by mistake while you&#8217;re learning.</p>
<h2>Further information</h2>
<ul>
<li><a href="http://www.tldp.org/">The Linux Documentation Project</a>. A good place to start looking for manuals and help.</li>
<li><a href="http://lwn.net/">Linux Weekly News</a>, <a href="http://slashdot.org/">Slashdot</a>: Two important news sites about Linux and related things.</li>
<li>Linux distributions: <a href="http://www.debian.org/">http://www.debian.org/</a>, <a href="http://www.redhat.com/">http://www.redhat.com/</a>, <a href="http://www.suse.com/us/index.html">http://www.suse.com/us/index.html</a>.</li>
<li><a href="http://knopper.net/knoppix/index-en.html">Knoppix</a>: Single bootable CD, for testing Linux without installing.</li>
</ul>
<h2>Author blurb</h2>
<p>Lars Wirzenius designs and implements embedded telematic software for <a href="http://www.oliotalo.fi/">Oliotalo</a> at work, and develops Debian at home.</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2009/10/linux-the-big-picture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>部分c#资料。整理中&#8230;..</title>
		<link>http://amberlife.net/2009/04/%e9%83%a8%e5%88%86c%e8%b5%84%e6%96%99%e3%80%82%e6%95%b4%e7%90%86%e4%b8%ad/</link>
		<comments>http://amberlife.net/2009/04/%e9%83%a8%e5%88%86c%e8%b5%84%e6%96%99%e3%80%82%e6%95%b4%e7%90%86%e4%b8%ad/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 02:17:55 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=83</guid>
		<description><![CDATA[http://amberlife.net/csharp/index.html
]]></description>
			<content:encoded><![CDATA[<p><a href="http://amberlife.net/csharp/index.html">http://amberlife.net/csharp/index.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2009/04/%e9%83%a8%e5%88%86c%e8%b5%84%e6%96%99%e3%80%82%e6%95%b4%e7%90%86%e4%b8%ad/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

