<?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>I am LAZY bones ?</title>
	<atom:link href="http://luy.li/feed/" rel="self" type="application/rss+xml" />
	<link>http://luy.li</link>
	<description>all linux</description>
	<lastBuildDate>Mon, 30 Aug 2010 01:26:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>设置python的stdout为无缓存模式</title>
		<link>http://luy.li/2010/08/29/pythonunbuffered/</link>
		<comments>http://luy.li/2010/08/29/pythonunbuffered/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 13:52:01 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[编程相关]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1686</guid>
		<description><![CDATA[考虑以下python程序： #!/usr/bin/env python &#160; import sys &#160; sys.stdout.write&#40;&#34;stdout1 &#34;&#41; sys.stderr.write&#40;&#34;stderr1 &#34;&#41; sys.stdout.write&#40;&#34;stdout2 &#34;&#41; sys.stderr.write&#40;&#34;stderr2 &#34;&#41; 其中的sys.stdout.write也可以换成print。 运行这程序，你觉得会输出什么？试验一下，就会发现，其实输出并不是 stdout1 stderr1 stdout2 stderr2 而是： stderr1 stderr2 stdout1 stdout2 究其原因，是因为缓存：虽然stderr和stdout默认都是指向屏幕的，但是stderr是无缓存的，程序往stderr输出一个字符，就会在屏幕上显示一个；而stdout是有缓存的，只有遇到换行或者积累到一定的大小，才会显示出来。这就是为什么上面的会显示两个stderr的原因了。 然而，有时候，你可能还是希望stdout的行为和stderr一样，能不能实现呢？当然是可以的，而且对于python，实现起来还特别方便，以下是两个方法： python -u stderr_stdout.py PYTHONUNBUFFERED=1 python stderr_stdout.py 第一种方法是给python指定 -u 参数，第二种方法是在python运行时，指定 PYTHONUNBUFFERED 环境变量，这两种方法其实是等效的。 当然，也可以在程序的第一行指定 #!/usr/bin/python -u 然后程序加可执行权限来运行，或者把 export PYTHONUNBUFFERED=1 写到 .bashrc 里去。]]></description>
			<content:encoded><![CDATA[<p>考虑以下python程序：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
&nbsp;
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;stdout1 &quot;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;stderr1 &quot;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;stdout2 &quot;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;stderr2 &quot;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>其中的sys.stdout.write也可以换成print。<br />
运行这程序，你觉得会输出什么？试验一下，就会发现，其实输出并不是</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">stdout1 stderr1  stdout2 stderr2</pre></div></div>

<p>而是：</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">stderr1 stderr2 stdout1  stdout2</pre></div></div>

<p>究其原因，是因为缓存：虽然stderr和stdout默认都是指向屏幕的，但是stderr是无缓存的，程序往stderr输出一个字符，就会在屏幕上显示一个；而stdout是有缓存的，只有遇到换行或者积累到一定的大小，才会显示出来。这就是为什么上面的会显示两个stderr的原因了。<br />
然而，有时候，你可能还是希望stdout的行为和stderr一样，能不能实现呢？当然是可以的，而且对于python，实现起来还特别方便，以下是两个方法：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">python <span style="color: #660033;">-u</span> stderr_stdout.py</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">PYTHONUNBUFFERED</span>=<span style="color: #000000;">1</span> python stderr_stdout.py</pre></div></div>

<p>第一种方法是给python指定 -u 参数，第二种方法是在python运行时，指定 <code>PYTHONUNBUFFERED</code> 环境变量，这两种方法其实是等效的。<br />
当然，也可以在程序的第一行指定 #!/usr/bin/python -u 然后程序加可执行权限来运行，或者把 export PYTHONUNBUFFERED=1 写到 .bashrc 里去。</p>
]]></content:encoded>
			<wfw:commentRss>http://luy.li/2010/08/29/pythonunbuffered/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>gentoo下的pppoe拨号</title>
		<link>http://luy.li/2010/08/28/gentoo_pppoe/</link>
		<comments>http://luy.li/2010/08/28/gentoo_pppoe/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 12:59:23 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[gentoo]]></category>
		<category><![CDATA[故障分析]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1683</guid>
		<description><![CDATA[最近，无线路由坏了，所以只能先用自己的电脑拨adsl了。 其实这本也没什么，我的win7和ubuntu都只要稍微设置一下就OK了。 这里再稍微提一下ubuntu的pppoe设置：记得以前的版本（应该是6.xx的时候吧），NetworkManager是不直接支持pppoe的，还要自己手工设置，然后执行pon/poff来拨号，但是现在进步了，直接在NM里输一下用户名和密码就可以上了。 但是我的gentoo是用wicd来管理网络的，而wicd至今都还不支持pppoe，于是只能用原始的命令行来拨号了。 于是eix一搜，发现有个net-dialup/rp-pppoe，安上，看到有 pppoe-setup、pppoe-start、pppoe-stop。啥都不用说了，先pppoe-setup，再pppoe-start，本以为会很顺利，但是几次尝试都在最后一步出错了，而且提示的错误都没啥价值，不知道从何查起~ 正当我无计可施，想妥协安个NetworkManager的时候，忽然灵感一现，发现了可能的错误原因，那就是──内核模块。原来，之前我的gentoo内核基本上也是按需配置的，以前我一直都有路由器拨号，所以没有在内核选项里打开ppp的支持，才导致了这一郁闷的结果，哈哈，既然发现了可能的原因，那就好办了，make menuconfig 里面选上 Device Drivers &#8212;>Network device support &#8212;>PPP (point-to-point protocol) support 下面的所有项，编译完再重启。再 pppoe-start ，果然看到了 Connected!]]></description>
			<content:encoded><![CDATA[<p>最近，无线路由坏了，所以只能先用自己的电脑拨adsl了。<br />
其实这本也没什么，我的win7和ubuntu都只要稍微设置一下就OK了。<br />
这里再稍微提一下ubuntu的pppoe设置：记得以前的版本（应该是6.xx的时候吧），NetworkManager是不直接支持pppoe的，还要自己手工设置，然后执行pon/poff来拨号，但是现在进步了，直接在NM里输一下用户名和密码就可以上了。<br />
但是我的gentoo是用wicd来管理网络的，而wicd至今都还不支持pppoe，于是只能用原始的命令行来拨号了。<br />
于是eix一搜，发现有个net-dialup/rp-pppoe，安上，看到有 pppoe-setup、pppoe-start、pppoe-stop。啥都不用说了，先pppoe-setup，再pppoe-start，本以为会很顺利，但是几次尝试都在最后一步出错了，而且提示的错误都没啥价值，不知道从何查起~<br />
正当我无计可施，想妥协安个NetworkManager的时候，忽然灵感一现，发现了可能的错误原因，那就是──内核模块。原来，之前我的gentoo内核基本上也是按需配置的，以前我一直都有路由器拨号，所以没有在内核选项里打开ppp的支持，才导致了这一郁闷的结果，哈哈，既然发现了可能的原因，那就好办了，make menuconfig 里面选上 Device Drivers  &#8212;>Network device support  &#8212;>PPP (point-to-point protocol) support 下面的所有项，编译完再重启。再 pppoe-start ，果然看到了 Connected!</p>
]]></content:encoded>
			<wfw:commentRss>http://luy.li/2010/08/28/gentoo_pppoe/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>湿地博物馆</title>
		<link>http://luy.li/2010/08/16/wetlandmuseum/</link>
		<comments>http://luy.li/2010/08/16/wetlandmuseum/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 04:41:38 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[流水帐]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1670</guid>
		<description><![CDATA[话说，自从我老婆孩子从老家回到杭州以后，原来刚好够我们小两口住的那个小房间，显然是住不下了。于是只能张罗着搬家和添置一些生活用品，到现在，虽然清苦（房子还是不大，也比较破旧），也总算慢慢安定下来了。 之所以在这里先说我搬家的事情，是因为我现在的住处比较偏远，靠近西溪湿地。然后，附近有一个“中国湿地博物馆”，大热天的，空调足，又免费，所以可以算是避暑胜地。今天──好吧，已经是昨天了（昨晚写这日志由于网络不好没写完）──终于有个周末可以空下来了，就去这博物馆玩了。 由于此博物馆并没有禁止拍照，所以我就拍了些照片回来，供大家观赏，以下图片都可以点击看大图~ 这是门口： 入口附近： 这里有些传感器，上面画着各种动物的脚印，踩上去，会播放对应动物的声音： 门口的导览图： 前台： 进去以后，在前台附近的交互式导览图，地图的各部分可以点击查看详细，做得还不错： 标本： 这些长方形的不是水缸，而都是触摸屏，介绍地图对应位置的湿地现状和保护情况等： 很有个性的玻璃顶棚，上面种满了绿色植物： 又是标本： 里面N多这样的大尺寸显示屏： 梯田的模型： 这个玩意对准模型里的某些物品，就可以看到一段相应的介绍录像，比较炫，不过实际上体验不怎么样： 和谐： 从楼上往下看： 这是个体验影院，里面会循环播放一段9分钟的介绍湿地的视频，屏幕超宽，估计得有10m以上吧，形成一个柱面的145度左右的弧。 里面有很多利用投影仪来营造气氛的装置： 这些小时候常用的工具，以比我想象中还要快的速度进了博物馆： 这个可以算是最有个性的消防栓么？ 这个得说明一下：不是我把它搞成这样的，是一个小萝莉，对着触摸屏瞎点瞎点，导致那Flash播放器崩溃了，才出来开始菜单什么的。。。可惜那电脑不能上网~ 又是一个用win+IE的系统~ 什么专题展厅： 西溪湿地模型： 标本： 窗外的风景： 这个是一套介绍生物常识的系统，中间的滑杆和放大镜用来选择片断，然后下面的显示器会播放。另外上面那个罩子，是用来感知下面是否有人的，如果播放过程中，你就闪人了，它就会把声音停掉，这样可以避免影响到旁边的其他机器和观众；另外这个罩子应该可以把声场固定在下面的一小块范围内，也是避免相互影响。个人觉得，是个不错的设计： 可以有部分互动的模型： 好，图片就贴上面这么多了，是不是有点意思呢？如果你也在杭州的话，不妨也去看看，地点是在天目山路和紫金港路的交叉口，哈哈。 另外这博物馆好像还有个新浪的官方blog，虽然不怎么更新。]]></description>
			<content:encoded><![CDATA[<p>话说，自从我老婆孩子从老家回到杭州以后，原来刚好够我们小两口住的那个小房间，显然是住不下了。于是只能张罗着搬家和添置一些生活用品，到现在，虽然清苦（房子还是不大，也比较破旧），也总算慢慢安定下来了。<br />
之所以在这里先说我搬家的事情，是因为我现在的住处比较偏远，靠近西溪湿地。然后，附近有一个“中国湿地博物馆”，大热天的，空调足，又免费，所以可以算是避暑胜地。今天──好吧，已经是昨天了（昨晚写这日志由于网络不好没写完）──终于有个周末可以空下来了，就去这博物馆玩了。<br />
由于此博物馆并没有禁止拍照，所以我就拍了些照片回来，供大家观赏，以下图片都可以点击看大图~<br />
这是门口：<br />
<a href="http://luy.li/data/wetland/S7305874_.JPG"><img src="http://luy.li/data/wetland/S7305874_t.JPG"></a></br><br />
<span id="more-1670"></span><br />
入口附近：<br />
<a href="http://luy.li/data/wetland/S7305880_.JPG"><img src="http://luy.li/data/wetland/S7305880_t.JPG"></a></br><br />
这里有些传感器，上面画着各种动物的脚印，踩上去，会播放对应动物的声音：<br />
<a href="http://luy.li/data/wetland/S7305882_.JPG"><img src="http://luy.li/data/wetland/S7305882_t.JPG"></a></br><br />
门口的导览图：<br />
<a href="http://luy.li/data/wetland/S7305883_.JPG"><img src="http://luy.li/data/wetland/S7305883_t.JPG"></a></br><br />
前台：<br />
<a href="http://luy.li/data/wetland/S7305885_.JPG"><img src="http://luy.li/data/wetland/S7305885_t.JPG"></a></br><br />
进去以后，在前台附近的交互式导览图，地图的各部分可以点击查看详细，做得还不错：<br />
<a href="http://luy.li/data/wetland/S7305887_.JPG"><img src="http://luy.li/data/wetland/S7305887_t.JPG"></a></br><br />
<a href="http://luy.li/data/wetland/S7305888_.JPG"><img src="http://luy.li/data/wetland/S7305888_t.JPG"></a></br><br />
标本：<br />
<a href="http://luy.li/data/wetland/S7305890_.JPG"><img src="http://luy.li/data/wetland/S7305890_t.JPG"></a></br><br />
<a href="http://luy.li/data/wetland/S7305891_.JPG"><img src="http://luy.li/data/wetland/S7305891_t.JPG"></a></br><br />
这些长方形的不是水缸，而都是触摸屏，介绍地图对应位置的湿地现状和保护情况等：<br />
<a href="http://luy.li/data/wetland/S7305894_.JPG"><img src="http://luy.li/data/wetland/S7305894_t.JPG"></a></br><br />
很有个性的玻璃顶棚，上面种满了绿色植物：<br />
<a href="http://luy.li/data/wetland/S7305895_.JPG"><img src="http://luy.li/data/wetland/S7305895_t.JPG"></a></br><br />
<a href="http://luy.li/data/wetland/S7305904_.JPG"><img src="http://luy.li/data/wetland/S7305904_t.JPG"></a></br><br />
又是标本：<br />
<a href="http://luy.li/data/wetland/S7305905_.JPG"><img src="http://luy.li/data/wetland/S7305905_t.JPG"></a></br><br />
里面N多这样的大尺寸显示屏：<br />
<a href="http://luy.li/data/wetland/S7305909_.JPG"><img src="http://luy.li/data/wetland/S7305909_t.JPG"></a></br><br />
<a href="http://luy.li/data/wetland/S7305911_.JPG"><img src="http://luy.li/data/wetland/S7305911_t.JPG"></a></br><br />
梯田的模型：<br />
<a href="http://luy.li/data/wetland/S7305915_.JPG"><img src="http://luy.li/data/wetland/S7305915_t.JPG"></a></br><br />
这个玩意对准模型里的某些物品，就可以看到一段相应的介绍录像，比较炫，不过实际上体验不怎么样：<br />
<a href="http://luy.li/data/wetland/S7305917_.JPG"><img src="http://luy.li/data/wetland/S7305917_t.JPG"></a></br><br />
和谐：<br />
<a href="http://luy.li/data/wetland/S7305919_.JPG"><img src="http://luy.li/data/wetland/S7305919_t.JPG"></a></br><br />
<a href="http://luy.li/data/wetland/S7305923_.JPG"><img src="http://luy.li/data/wetland/S7305923_t.JPG"></a></br><br />
从楼上往下看：<br />
<a href="http://luy.li/data/wetland/S7305924_.JPG"><img src="http://luy.li/data/wetland/S7305924_t.JPG"></a></br><br />
这是个体验影院，里面会循环播放一段9分钟的介绍湿地的视频，屏幕超宽，估计得有10m以上吧，形成一个柱面的145度左右的弧。<br />
<a href="http://luy.li/data/wetland/S7305925_.JPG"><img src="http://luy.li/data/wetland/S7305925_t.JPG"></a></br><br />
里面有很多利用投影仪来营造气氛的装置：<br />
<a href="http://luy.li/data/wetland/S7305930_.JPG"><img src="http://luy.li/data/wetland/S7305930_t.JPG"></a></br><br />
这些小时候常用的工具，以比我想象中还要快的速度进了博物馆：<br />
<a href="http://luy.li/data/wetland/S7305932_.JPG"><img src="http://luy.li/data/wetland/S7305932_t.JPG"></a></br><br />
<a href="http://luy.li/data/wetland/S7305933_.JPG"><img src="http://luy.li/data/wetland/S7305933_t.JPG"></a></br><br />
这个可以算是最有个性的消防栓么？<br />
<a href="http://luy.li/data/wetland/S7305936_.JPG"><img src="http://luy.li/data/wetland/S7305936_t.JPG"></a></br><br />
这个得说明一下：不是我把它搞成这样的，是一个小萝莉，对着触摸屏瞎点瞎点，导致那Flash播放器崩溃了，才出来开始菜单什么的。。。可惜那电脑不能上网~<br />
<a href="http://luy.li/data/wetland/S7305938_.JPG"><img src="http://luy.li/data/wetland/S7305938_t.JPG"></a></br><br />
又是一个用win+IE的系统~<br />
<a href="http://luy.li/data/wetland/S7305941_.JPG"><img src="http://luy.li/data/wetland/S7305941_t.JPG"></a></br><br />
什么专题展厅：<br />
<a href="http://luy.li/data/wetland/S7305944_.JPG"><img src="http://luy.li/data/wetland/S7305944_t.JPG"></a></br><br />
西溪湿地模型：<br />
<a href="http://luy.li/data/wetland/S7305950_.JPG"><img src="http://luy.li/data/wetland/S7305950_t.JPG"></a></br><br />
标本：<br />
<a href="http://luy.li/data/wetland/S7305951_.JPG"><img src="http://luy.li/data/wetland/S7305951_t.JPG"></a></br><br />
<a href="http://luy.li/data/wetland/S7305952_.JPG"><img src="http://luy.li/data/wetland/S7305952_t.JPG"></a></br><br />
窗外的风景：<br />
<a href="http://luy.li/data/wetland/S7305954_.JPG"><img src="http://luy.li/data/wetland/S7305954_t.JPG"></a></br><br />
这个是一套介绍生物常识的系统，中间的滑杆和放大镜用来选择片断，然后下面的显示器会播放。另外上面那个罩子，是用来感知下面是否有人的，如果播放过程中，你就闪人了，它就会把声音停掉，这样可以避免影响到旁边的其他机器和观众；另外这个罩子应该可以把声场固定在下面的一小块范围内，也是避免相互影响。个人觉得，是个不错的设计：<br />
<a href="http://luy.li/data/wetland/S7305970_.JPG"><img src="http://luy.li/data/wetland/S7305970_t.JPG"></a></br><br />
可以有部分互动的模型：<br />
<a href="http://luy.li/data/wetland/S7305973_.JPG"><img src="http://luy.li/data/wetland/S7305973_t.JPG"></a></br></p>
<p>好，图片就贴上面这么多了，是不是有点意思呢？如果你也在杭州的话，不妨也去看看，地点是在天目山路和紫金港路的交叉口，哈哈。<br />
另外这博物馆好像还有个<a href="http://blog.sina.com.cn/wetlandmuseum">新浪的官方blog</a>，虽然不怎么更新。</p>
]]></content:encoded>
			<wfw:commentRss>http://luy.li/2010/08/16/wetlandmuseum/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>oracle里循环搜索父子关系的键</title>
		<link>http://luy.li/2010/08/12/connect_by_prior_start_with/</link>
		<comments>http://luy.li/2010/08/12/connect_by_prior_start_with/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 01:07:47 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[数据平台]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1665</guid>
		<description><![CDATA[想象一下，如果有一张oracle里的表，存着的是一个linux系统当前的进程信息，有ID、父ID、进程名之类的字段，如果给定一个进程ID，要查这个进程的所有父进程（包括爷爷进程等）的ID，sql改怎么写？这就要用到 CONNECT BY PRIOR &#8230; START WITH 子句了。 下面就是这样的一个例子： --原先的表大致是这样的： SELECT id, parentid FROM the_table WHERE id IN &#40;14976, 14975&#41;; ID PARENTID ---------- ---------- 14975 14657 14975 14658 14975 14992 14975 15047 14976 14975 --要查所有的父进程，这么干： SELECT DISTINCT id FROM the_table CONNECT BY PRIOR parentid = id START WITH id = 14976; ID ---------- 1 110 [...]]]></description>
			<content:encoded><![CDATA[<p>想象一下，如果有一张oracle里的表，存着的是一个linux系统当前的进程信息，有ID、父ID、进程名之类的字段，如果给定一个进程ID，要查这个进程的所有父进程（包括爷爷进程等）的ID，sql改怎么写？这就要用到 CONNECT BY PRIOR &#8230; START WITH 子句了。<br />
下面就是这样的一个例子：</p>

<div class="wp_syntax"><div class="code"><pre class="oracle11" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">--原先的表大致是这样的：</span>
<span style="color: #993333; font-weight: bold; text-transform: uppercase;">SELECT</span> id<span style="color: #66cc66;">,</span> parentid <span style="color: #993333; font-weight: bold; text-transform: uppercase;">FROM</span> the_table <span style="color: #993333; font-weight: bold; text-transform: uppercase;">WHERE</span> id <span style="color: #993333; font-weight: bold; text-transform: uppercase;">IN</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">14976</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">14975</span><span style="color: #66cc66;">&#41;</span>;
        ID   PARENTID
<span style="color: #808080; font-style: italic;">---------- ----------</span>
     <span style="color: #cc66cc;">14975</span>      <span style="color: #cc66cc;">14657</span>
     <span style="color: #cc66cc;">14975</span>      <span style="color: #cc66cc;">14658</span>
     <span style="color: #cc66cc;">14975</span>      <span style="color: #cc66cc;">14992</span>
     <span style="color: #cc66cc;">14975</span>      <span style="color: #cc66cc;">15047</span>
     <span style="color: #cc66cc;">14976</span>      <span style="color: #cc66cc;">14975</span>
<span style="color: #808080; font-style: italic;">--要查所有的父进程，这么干：</span>
<span style="color: #993333; font-weight: bold; text-transform: uppercase;">SELECT</span> <span style="color: #993333; font-weight: bold; text-transform: uppercase;">DISTINCT</span> id <span style="color: #993333; font-weight: bold; text-transform: uppercase;">FROM</span> the_table <span style="color: #993333; font-weight: bold; text-transform: uppercase;">CONNECT</span> <span style="color: #993333; font-weight: bold; text-transform: uppercase;">BY</span> <span style="color: #993333; font-weight: bold; text-transform: uppercase;">PRIOR</span> parentid <span style="color: #66cc66;">=</span> id <span style="color: #993333; font-weight: bold; text-transform: uppercase;">START</span> <span style="color: #993333; font-weight: bold; text-transform: uppercase;">WITH</span> id <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">14976</span>;
        ID
<span style="color: #808080; font-style: italic;">----------</span>
         <span style="color: #cc66cc;">1</span>
       <span style="color: #cc66cc;">110</span>
       <span style="color: #cc66cc;">127</span>
       <span style="color: #cc66cc;">130</span>
       <span style="color: #cc66cc;">155</span>
       <span style="color: #cc66cc;">163</span>
     <span style="color: #cc66cc;">12930</span>
     <span style="color: #cc66cc;">13812</span>
     <span style="color: #cc66cc;">14656</span>
     <span style="color: #cc66cc;">14657</span>
     <span style="color: #cc66cc;">14658</span>
     <span style="color: #cc66cc;">14949</span>
     <span style="color: #cc66cc;">14950</span>
     <span style="color: #cc66cc;">14951</span>
     <span style="color: #cc66cc;">14975</span>
     <span style="color: #cc66cc;">14976</span>
     <span style="color: #cc66cc;">14992</span>
     <span style="color: #cc66cc;">15047</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://luy.li/2010/08/12/connect_by_prior_start_with/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>perl 的特色</title>
		<link>http://luy.li/2010/07/25/special-perl/</link>
		<comments>http://luy.li/2010/07/25/special-perl/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 07:24:54 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[流水帐]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1662</guid>
		<description><![CDATA[由于工作中偶尔要接触一下perl，所以我花了点时间，很粗略地看了一遍flamephoenix的perl中文教程。本文就是我在看的过程中记录下来的点点滴滴，对大家不一定有用，但是也可以让不会perl的同学对其有个直观的印象。perl果然是个非主流，哈哈。 字符串有很不同的转义，可以转义大小写。 $a = "T\LHIS IS A \ESTRING"; # same as "This is a STRING" 比较操作符有“比较”这个操作，整数是 ，字符串是 cmp ，会返回 1,0,-1 字符串能进线自加（++）操作，而且逢zZ9会进位，但是不能自减。 字符串的重复操作符是x（小写字母x），对应的python操作符是 * （星号） 条件操作符可以用来选择变量： $condvar == 43 ? $var1 : $var2 = 14; 数组变量要有个 @ 头，而且可以和普通变量重名，列表用的是()，对应python里是 []。 列表可以用..表示范围： (2, 5..7, 11) = (2, 5, 6, 7, 11) 更神奇的是，还可以用于实数： (2.1..5.3) = (2.1, 3.1 ,4.1, 5.1) [...]]]></description>
			<content:encoded><![CDATA[<p>由于工作中偶尔要接触一下perl，所以我花了点时间，很粗略地看了一遍flamephoenix的perl中文教程。本文就是我在看的过程中记录下来的点点滴滴，对大家不一定有用，但是也可以让不会perl的同学对其有个直观的印象。perl果然是个非主流，哈哈。</p>
<p>字符串有很不同的转义，可以转义大小写。<br />
<code> $a = "T\LHIS IS A \ESTRING"; # same as "This is a STRING"</code></p>
<p>比较操作符有“比较”这个操作，整数是 <=> ，字符串是 cmp ，会返回 1,0,-1</p>
<p>字符串能进线自加（++）操作，而且逢zZ9会进位，但是不能自减。</p>
<p>字符串的重复操作符是x（小写字母x），对应的python操作符是 * （星号）</p>
<p>条件操作符可以用来选择变量：<br />
<code>$condvar == 43 ? $var1 : $var2 = 14;</code></p>
<p>数组变量要有个 @ 头，而且可以和普通变量重名，列表用的是()，对应python里是 []。</p>
<p>列表可以用..表示范围： (2, 5..7, 11) = (2, 5, 6, 7, 11) 更神奇的是，还可以用于实数： (2.1..5.3) = (2.1, 3.1 ,4.1, 5.1) 和字符串 (&#8220;aaa&#8221;..&#8221;aad&#8221;) = (&#8220;aaa&#8221;,&#8221;aab&#8221;, &#8220;aac&#8221;, &#8220;aad&#8221;) ，还可以包含变量： ($var1..$var2+5)</p>
<p>列表赋值给简单变量，会得到列表的长度。。。</p>
<p>打开文件的模式（读、写或追加）是通过在文件名前加前缀指定的，所以，我不知道如果要只读打开文件名是 “>“ 的文件该怎么写。</p>
<p>文件测试操作更像bash的风格。</p>
<p>@ARGV[0] 就是第一个参数，而不是程序名本身。</p>
<p>有个 <> 操作符，可以直接按参数顺序读取指定的文件，这个就得实践过才能体会了。</p>
<p>可以像操作普通文件那样操作管道。而且也是用的open函数。</p>
<p>模式（也就是 正则表达式）操作是内置的，而不用像python那样import re。这点倒是比较像javascript。</p>
<p>有类似 awk 的模式匹配操作符。比如： $result = $var =~ /abc/; 这个用在逻辑判断里很方便。</p>
<p>模式的定界符缺省是/，但是可以用m来自定义。</p>
<p>模式匹配以后可以用 $1 $2 $&#038; 等引用匹配到的组。</p>
<p>模式匹配操作可以放在while里循环，还可以pos定位。</p>
<p>elsif 也比较bash。</p>
<p>有 foreach 的语法。foreach语法里的 循环变量 是 循环内部 的局部变量；在循环里改变循环变量，会修改数组的对应项。。。</p>
<p>last就是break；next就是continue；还有个redo。循环控制很强大。</p>
<p>以上两点，可以用这个小程序体会一下：</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/env perl</span>
&nbsp;
<span style="color: #0000ff;">@list</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;@list<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #0000ff;">$temp</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@list</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;temp=$temp<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #0000ff;">$temp</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">next</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #0000ff;">$temp</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">30</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">redo</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #0000ff;">$temp</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">40</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;@list<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>也支持goto。</p>
<p>单行条件，也很有特色：语法为statement keyword condexpr。其中keyword可为if、unless、while或until。尤其是短循环时，很方便。</p>
<p>用 sub 来定义子程序，用 &#038;xxx 或者 do xxx 来引用。</p>
<p>实参用括号的传入，（&#038;xxx(1, 2, 3)），形参不列出，在子程序里用 @_ 来引用传入的实参。</p>
<p>局部变量有两种， my($xxx) 的变量自在本子程序内有效。 local($xxx) 的变量在本子程序和下级的子程序内有效。</p>
<p>用变量和数组混合做为参数，传给子程序时，要小心有可能传到 @_ 的时，会被重组。</p>
<p>传参数的时候，也可以传地址，这时候，子程序里改变的变量会影响外部。</p>
<p>perl5里有3个预设的子程序，BEGIN、END、AUTOLOAD，这点又有点像awk。AUTOLOAD 是在找不到子程序的时候被调用。</p>
<p>关联数组，就是用任意变量类型做下标的数组，用 %变量名表示，可以用 foreach $key (keys(%hashlist)) 来遍历。这其实就是python的dict。 不过其 sort keys 不知道是什么语法。。。</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">%fruit</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;apples&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">17</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;bananas&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;oranges&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;none&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
和这个等效：
<span style="color: #0000ff;">%fruit</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;apples&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #cc66cc;">17</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;bananas&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;oranges&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #ff0000;">&quot;none&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
可以先数组，再关联数组：
<span style="color: #0000ff;">@fruit</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;apples&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">17</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;bananas&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;oranges&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;none&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">%fruit</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@fruit</span><span style="color: #339933;">;</span>
反之亦然：
<span style="color: #0000ff;">%fruit</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;grapes&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">11</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;lemons&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">27</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">@fruit</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">%fruit</span><span style="color: #339933;">;</span>
不过<span style="color: #0000ff;">@fruit</span>可能变成 <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;lemons&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">27</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;grapes&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">11</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>关联数组可以直接赋值增加，用 delete 函数删除。 (&#8220;lemons&#8221;,27,&#8221;grapes&#8221;,11)</p>
<p>keys 对应的是 values，可以取出所有的值。</p>
<p>可以用each更好地循环关联数组：<br />
%records = (&#8220;Maris&#8221;, 61, &#8220;Aaron&#8221;, 755, &#8220;Young&#8221;, 511);<br />
while (($holder, $record) = each(%records)) {<br />
  # stuff goes here<br />
}</p>
<p>$~ 是个系统变量，用于指定打印格式。</p>
<p>@<<<	左对齐输出  尖尖的个数，就是占的位数。<br />
@>>>	右对齐输出<br />
@|||	中对齐输出<br />
@##.##  	固定精度数字<br />
@*	多行文本</p>
<p>select 可以改变缺省文件变量，这样就可以输出内容到文件了。</p>
<p>format 还可以设置页眉。。。</p>
<p>$^是页眉格式，$=是每页行数。还有个当前页的行计数器： $-</p>
<p>设置系统变量$|为非零值，则输出到文件的时候不使用缓冲。</p>
<p>内置了一套完整的文件处理函数，基本上和linux命令是同名的，用法也类似。比如： read/getc/mkdir/readdir/rmdir/rename/link/unlink/chown/stat 等等。</p>
<p>perl和C类似，存在指针，也可以叫“引用”。和C的&#038;取地址符类似的是 \   地址可以指向所有的类型，包括子程序。</p>
<p>perl也是面向对象的──类是一个Perl包，其中含提供对象方法的类。方法是一个Perl子程序，类名是其第一个参数。对象是对类中数据项的引用。</p>
<p>与包的引用结合，可以用单引号(&#8216;)操作符来定位类中的变量，类中成员的定位形式如：$class&#8217;$member。在Perl5中，可用双冒号替代单引号来获得引用，如：$class&#8217;$member与$class::$member相同。</p>
<p>一个perl程序可以用package切分成很多个“包”，各包之间有独立的命名空间，而且程序可以随时在包之间来回切换。</p>
<p>perl里有两个和python的import类似的语法，require和use，require更像C的宏替换，use更像import。然后和 sys.path 类似的数组叫 @INC。</p>
<p>还有 cpan 很强大~</p>
]]></content:encoded>
			<wfw:commentRss>http://luy.li/2010/07/25/special-perl/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
