<?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>Chocobo &#124; 巧克博</title>
	<atom:link href="http://c.hocobo.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://c.hocobo.net</link>
	<description></description>
	<lastBuildDate>Wed, 13 Jul 2011 02:19:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Hadoop Archive解决海量小文件存储</title>
		<link>http://c.hocobo.net/2010/08/05/har/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=har</link>
		<comments>http://c.hocobo.net/2010/08/05/har/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 12:39:32 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[HAR]]></category>
		<category><![CDATA[HDFS]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://c.hocobo.net/?p=84</guid>
		<description><![CDATA[这段时间看了公司部门邮件中大家讨论较多的几个关于HDFS的问题，一个是关于Namenode可扩展性的讨论，目前单台服务器作为Namenode，当文件数量规模不断增大时，元数据的规模增长将是一个需要面对的问题，由于Namenode需要将所有元数据Load到内存中，单台Namenode可能会无法管理海量的元数据。另一个是HDFS中SequenceFile存储方式的讨论，利用Block压缩方式可以很好的解决空间压力。 今天刚好看到Yahoo! Hadoop Blog上的一篇文章Hadoop Archive: File Compaction for HDFS，和上面两个问题都有一点联系，文章主要提出了在HDFS中存在海量的小文件时，会给存储带来的一系列问题 。 HDFS中文件是按Block来存储的，默认一个Block的长度是128MB，当HDFS中存在大量小文件（长度小于128MB）时，不仅占用大量存储空间，而且也占用大量的namespace，给Namenode带来了内存压力，Yahoo内部有一个生产集群，统计下来有57,000,000个小于128MB的文件，这些小文件消耗了95%的namespace，占用了30%的存储空间。Namenode的压力一般也常常是因为有海量的小文件存在，如果没有这些小文件存在的话，Namenode内存还没撑爆，估计存储空间就先爆了。。 文中提到了解决方法，是利用Hadoop Archive（HAR），这个特性从Hadoop 0.18.0版本就已经引入了，他可以将众多小文件打包成一个大文件进行存储，并且打包后原来的文件仍然可以通过Map-reduce进行操作，打包后的文件由索引和存储两大部分组成，索引部分记录了原有的目录结构和文件状态。 举个例子，原本获取一个文件通过命令 hadoop fs –get hdfs://namenode/foo/file-1 localdir 如果将foo目录打包成bar.har后，获取file-1的命令就变成 hadoop fs –get har://namenode/bar.har#foo/file-1 localdir 通过以下命令可以将文件打包成HAR。 hadoop archive -archiveName * 但是，目前HAR文件中的源数据只能获取，不能修改，文章中提到实现可以修改将是下一步的工作。 参考文章： Hadoop Archive: File Compaction for HDFS The Small Files Problem Hadoop Archives]]></description>
			<content:encoded><![CDATA[<p>这段时间看了公司部门邮件中大家讨论较多的几个关于HDFS的问题，一个是关于Namenode可扩展性的讨论，目前单台服务器作为Namenode，当文件数量规模不断增大时，元数据的规模增长将是一个需要面对的问题，由于Namenode需要将所有元数据Load到内存中，单台Namenode可能会无法管理海量的元数据。另一个是HDFS中SequenceFile存储方式的讨论，利用Block压缩方式可以很好的解决空间压力。</p>
<p>今天刚好看到Yahoo! Hadoop Blog上的一篇文章<strong><span style="color: #ffff00;">Hadoop Archive: File Compaction for HDFS</span></strong>，和上面两个问题都有一点联系，文章主要提出了在HDFS中存在海量的<strong>小文件</strong>时，会给存储带来的一系列问题 。</p>
<p>HDFS中文件是按Block来存储的，默认一个Block的长度是128MB，当HDFS中存在大量小文件（长度小于128MB）时，不仅占用大量存储空间，而且也占用大量的namespace，给Namenode带来了内存压力，Yahoo内部有一个生产集群，统计下来有57,000,000个小于128MB的文件，这些小文件消耗了95%的namespace，占用了30%的存储空间。Namenode的压力一般也常常是因为有海量的小文件存在，如果没有这些小文件存在的话，Namenode内存还没撑爆，估计存储空间就先爆了。。</p>
<p>文中提到了解决方法，是利用Hadoop Archive（HAR），这个特性从Hadoop 0.18.0版本就已经引入了，他可以将众多小文件打包成一个大文件进行存储，并且打包后原来的文件仍然可以通过Map-reduce进行操作，打包后的文件由索引和存储两大部分组成，索引部分记录了原有的目录结构和文件状态。</p>
<p><a href="http://c.hocobo.net/wp-content/uploads/2010/08/har.png"></a><a href="http://c.hocobo.net/wp-content/uploads/2010/08/har.png"><img class="alignnone size-full wp-image-85" style="background-color: #FFFFFF;" title="Har" src="http://c.hocobo.net/wp-content/uploads/2010/08/har.png" alt="Hadoop Archive" width="569" height="195" /></a></p>
<p>举个例子，原本获取一个文件通过命令</p>
<pre lang="Shell">hadoop fs –get hdfs://namenode/foo/file-1 localdir</pre>
<p>如果将foo目录打包成bar.har后，获取file-1的命令就变成</p>
<pre lang="Shell">hadoop fs –get har://namenode/bar.har#foo/file-1 localdir</pre>
<p>通过以下命令可以将文件打包成HAR。</p>
<pre lang="Shell">hadoop archive -archiveName  *</pre>
<p>但是，<span style="color: #ffff00;"><strong>目前</strong><strong>HAR</strong><strong>文件中的源数据只能获取，不能修改</strong></span>，文章中提到实现可以修改将是下一步的工作。</p>
<p>参考文章：</p>
<ol>
<li><a href="http://developer.yahoo.net/blogs/hadoop/2010/07/hadoop_archive_file_compaction.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+YDNHadoop+%28Hadoop+and+Distributed+Computing+at+Yahoo%21%29">Hadoop Archive: File Compaction for HDFS</a></li>
<li><a href="http://www.cloudera.com/blog/2009/02/the-small-files-problem/">The Small Files Problem</a></li>
<li><a href="http://hadoop.apache.org/common/docs/r0.18.2/cn/hadoop_archives.html">Hadoop Archives</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://c.hocobo.net/2010/08/05/har/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>用Python监视进程是否结束</title>
		<link>http://c.hocobo.net/2010/07/20/python_popen/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python_popen</link>
		<comments>http://c.hocobo.net/2010/07/20/python_popen/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 16:30:46 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[popen]]></category>
		<category><![CDATA[ps]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[进程]]></category>

		<guid isPermaLink="false">http://c.hocobo.net/?p=70</guid>
		<description><![CDATA[平时不打游戏在Linux下的时间比较长，用VirtualBox装了个XP可以上上QQ，用用其他一些只有Windows版的软件，这两天下BoA的演唱会又用到了网盘，而且网盘的客户端软件只支持Windows，这样就只能在VirtualBox里下载，可是下载结束自动关机的功能就失效了。。于是想到能不能VirtualBox自动关闭的同时，也能让Linux也一起关闭。 不知道有什么简便的方法可以实现，只想到了用Python写个小脚本(过去一直用Python来解决一些小问题)，于是去网上搜了Python相关的类库，其中os.system函数可以调用Linux命令，初步想了下，准备用一个线程来不断执行ps命令，并检查VirtualBox的进程是否还存在，如果不存在了，就执行halt。 不过尝试了一下用os.system调用ps后，输出的结果无法保存到变量中，看了一个帖子，发现os.popen可以解决，os.popen可以像打开文件一样执行一条Linux命令，命令返回的结果可以通过读取文件的方式获得。 通过ps ax&#124;grep VirtualBox&#124;grep xp的组合命令可以得到正在执行xp的虚拟机进程，其中xp是自己设定的虚拟机的标题，一般得到的结果会有2条，1条就是虚拟机进程，另1条是grep命令本身，所以当得到的结果只剩下grep命令本身时，说明虚拟机已经关闭。 由于我用的Linux发行版是Ubuntu，执行关机命令需要sudo并且输入密码，所以要让自动关机能够实现还有一步是，设定用户执行sudo不需要输入密码，这可以通过sudo visudo对sudoers文件进行修改，在文件最后加上chocobo ALL=(ALL) NOPASSWD: ALL其中chocobo是用户名。 好了，准备工作都做完，就可以执行脚本监视进程啦，具体代码如下： #!/usr/bin/env python import os import time def autohalt(): while True: ps_string = os.popen('ps ax &#124; grep VirtualBox &#124; grep xp','r').read() ps_strings = ps_string.strip().split('\n') if len(ps_strings) &#60; 2: os.system('sudo halt') return else: print 'Still',len(ps_strings),'Processes, waiting 10s...' time.sleep(10) if __name__=='__main__': autohalt() 参考资料： http://docs.python.org/library/os.html#os.system http://docs.python.org/library/os.html#os.popen [...]]]></description>
			<content:encoded><![CDATA[<p>平时不打游戏在Linux下的时间比较长，用VirtualBox装了个XP可以上上QQ，用用其他一些只有Windows版的软件，这两天下BoA的演唱会又用到了网盘，而且网盘的客户端软件只支持Windows，这样就只能在VirtualBox里下载，可是下载结束自动关机的功能就失效了。。于是想到能不能VirtualBox自动关闭的同时，也能让Linux也一起关闭。</p>
<p>不知道有什么简便的方法可以实现，只想到了用Python写个小脚本(过去一直用Python来解决一些小问题)，于是去网上搜了Python相关的类库，其中<code>os.system</code>函数可以调用Linux命令，初步想了下，准备用一个线程来不断执行<code>ps</code>命令，并检查VirtualBox的进程是否还存在，如果不存在了，就执行<code>halt</code>。</p>
<p>不过尝试了一下用<code>os.system</code>调用<code>ps</code>后，输出的结果无法保存到变量中，看了一个帖子，发现<code>os.popen</code>可以解决，<code>os.popen</code>可以像打开文件一样执行一条Linux命令，命令返回的结果可以通过读取文件的方式获得。</p>
<p>通过<code>ps ax|grep VirtualBox|grep xp</code>的组合命令可以得到正在执行xp的虚拟机进程，其中xp是自己设定的虚拟机的标题，一般得到的结果会有2条，1条就是虚拟机进程，另1条是grep命令本身，所以当得到的结果只剩下grep命令本身时，说明虚拟机已经关闭。</p>
<p>由于我用的Linux发行版是Ubuntu，执行关机命令需要sudo并且输入密码，所以要让自动关机能够实现还有一步是，设定用户执行sudo不需要输入密码，这可以通过<code>sudo visudo</code>对<code>sudoers</code>文件进行修改，在文件最后加上<code>chocobo ALL=(ALL) NOPASSWD: ALL</code>其中<code>chocobo</code>是用户名。</p>
<p>好了，准备工作都做完，就可以执行脚本监视进程啦，具体代码如下：</p>
<pre lang="Python">#!/usr/bin/env python

import os
import time

def autohalt():
    while True:
        ps_string = os.popen('ps ax | grep VirtualBox | grep xp','r').read()
        ps_strings = ps_string.strip().split('\n')
        if len(ps_strings) &lt; 2:
            os.system('sudo halt')
            return
        else:
            print 'Still',len(ps_strings),'Processes, waiting 10s...'
            time.sleep(10)

if __name__=='__main__':
    autohalt()
</pre>
<p>参考资料：</p>
<ol>
<li><a href="http://docs.python.org/library/os.html#os.system">http://docs.python.org/library/os.html#os.system</a></li>
<li><a href="http://docs.python.org/library/os.html#os.popen">http://docs.python.org/library/os.html#os.popen</a></li>
<li><a href="http://maestric.com/doc/unix/ubuntu_sudo_without_password">http://maestric.com/doc/unix/ubuntu_sudo_without_password</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://c.hocobo.net/2010/07/20/python_popen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>听豆瓣电台想到的推荐算法</title>
		<link>http://c.hocobo.net/2010/03/14/douban-fm/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=douban-fm</link>
		<comments>http://c.hocobo.net/2010/03/14/douban-fm/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 02:39:53 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[个性化推荐]]></category>
		<category><![CDATA[数据挖掘]]></category>
		<category><![CDATA[推荐算法]]></category>
		<category><![CDATA[用户体验]]></category>
		<category><![CDATA[用户行为]]></category>
		<category><![CDATA[电台]]></category>
		<category><![CDATA[虾米]]></category>
		<category><![CDATA[豆瓣]]></category>

		<guid isPermaLink="false">http://c.hocobo.net/?p=57</guid>
		<description><![CDATA[无聊想听歌，尝试了下豆瓣电台，感觉“我喜欢”、“不再播放”、“跳过曲目”的设定很好，比虾米的评分、推荐、上标签更简洁，用户体验更好，通过这样3个用户行为就可以猜测用户的偏好。我不知道豆瓣后台具体的推荐算法是怎么样的，只能以自己的体验来猜测。 第一，我在“喜欢的歌手”里设置了一堆，不过开始听豆瓣电台连续放了n首都没有出现其中的歌手。难道是根据喜欢的歌手来猜测喜欢的曲风？但我设了很多日本歌手，开头几首没有一首是日语歌曲。。 第二，在我对一首歌点了“我喜欢”以后，后续会出现1到2首同一个歌手的歌曲。这个很符合常理，有时把我喜欢的几首歌连续放出了，不错。 第三，在我对东方神起的一首日语歌点了“跳过曲目”以后，后续出现了一首曲风差不多的其他日语歌。也许猜到了我只是不大喜欢听东方神起而已。。 虽然在听豆瓣电台时用户行为只有3种，但我觉得用户做出这3种行为的时间点也很重要，不知豆瓣电台的算法中是否有考虑。比如： 在歌曲一开始就点击了“我喜欢”，明显是用户耳熟能详的歌曲，对用户来说有一种怀旧的感觉，后续可以推荐“相关性”比较大的歌曲，如同一时期，或同一歌手，或其他有相关性的歌曲。 歌曲放了一段时间以后才点击“我喜欢”，可能是初次听了以后喜欢上的，后续可以继续推荐该歌手的歌曲，试探用户的喜好，若用户没有继续喜欢，或者直接跳过，那用户喜欢这个歌手的可能性就低了很多。 同时，“不再播放”的选择应该也是和“我喜欢”类似的。 至于“跳过曲目”，其实也是可以从时间点来反映一些问题的，有时候旋律的不断重复，会促使用户跳过，就像k歌时一样，但并不代表用户不喜欢这首歌，或这个歌手。 在写这篇blog的时候，因为对中岛美嘉的Orion（《流星之绊》主题曲）两个版本都评价了“我喜欢”，结果连续推荐了《求婚大作战》和《东京铁塔》的主题曲，不错。。另外提一点，虽然我知道这个是“电台”，但我还是想要个“暂停”功能。。。]]></description>
			<content:encoded><![CDATA[<p>无聊想听歌，尝试了下豆瓣电台，感觉“我喜欢”、“不再播放”、“跳过曲目”的设定很好，比虾米的评分、推荐、上标签更简洁，用户体验更好，通过这样3个用户行为就可以猜测用户的偏好。我不知道豆瓣后台具体的推荐算法是怎么样的，只能以自己的体验来猜测。</p>
<p>第一，我在“喜欢的歌手”里设置了一堆，不过开始听豆瓣电台连续放了n首都没有出现其中的歌手。难道是根据喜欢的歌手来猜测喜欢的曲风？但我设了很多日本歌手，开头几首没有一首是日语歌曲。。</p>
<p>第二，在我对一首歌点了“我喜欢”以后，后续会出现1到2首同一个歌手的歌曲。这个很符合常理，有时把我喜欢的几首歌连续放出了，不错。</p>
<p>第三，在我对东方神起的一首日语歌点了“跳过曲目”以后，后续出现了一首曲风差不多的其他日语歌。也许猜到了我只是不大喜欢听东方神起而已。。</p>
<p>虽然在听豆瓣电台时用户行为只有3种，但我觉得用户做出这3种行为的<strong>时间点</strong>也很重要，不知豆瓣电台的算法中是否有考虑。比如：</p>
<ol>
<li>在歌曲一开始就点击了“我喜欢”，明显是用户耳熟能详的歌曲，对用户来说有一种怀旧的感觉，后续可以推荐“相关性”比较大的歌曲，如同一时期，或同一歌手，或其他有相关性的歌曲。</li>
<li>歌曲放了一段时间以后才点击“我喜欢”，可能是初次听了以后喜欢上的，后续可以继续推荐该歌手的歌曲，试探用户的喜好，若用户没有继续喜欢，或者直接跳过，那用户喜欢这个歌手的可能性就低了很多。</li>
<li>同时，“不再播放”的选择应该也是和“我喜欢”类似的。</li>
<li>至于“跳过曲目”，其实也是可以从时间点来反映一些问题的，有时候旋律的不断重复，会促使用户跳过，就像k歌时一样，但并不代表用户不喜欢这首歌，或这个歌手。</li>
</ol>
<p>在写这篇blog的时候，因为对中岛美嘉的Orion（《流星之绊》主题曲）两个版本都评价了“我喜欢”，结果连续推荐了《求婚大作战》和《东京铁塔》的主题曲，不错。。另外提一点，虽然我知道这个是“电台”，但我还是想要个“暂停”功能。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://c.hocobo.net/2010/03/14/douban-fm/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>试用新主题SimpleDark</title>
		<link>http://c.hocobo.net/2010/03/10/simpledark/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=simpledark</link>
		<comments>http://c.hocobo.net/2010/03/10/simpledark/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 09:49:48 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Web前端]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[SimpleDark]]></category>
		<category><![CDATA[WordPress主题]]></category>
		<category><![CDATA[WordPress插件]]></category>

		<guid isPermaLink="false">http://c.hocobo.net/?p=45</guid>
		<description><![CDATA[教授(@Justice)出品，必属精品，是我喜欢的朴素风格。教授不仅dota打的好，Web前端也是一等一的高手，blog地址：http://lync.in。 试用过程中顺便发现了WP-CodeBox插件可能导致的一个问题，WP-CodeBox里用了jQuery.noConflict()，这样其他地方就不能用$作为jQuery别名了，如果其他地方用到了jQuery，可能会出现冲突。在教授的推荐下，改用WP-Syntax。（虽然都还没派上用场过）]]></description>
			<content:encoded><![CDATA[<p>教授(<a href="http://twitter.com/justice360">@Justice</a>)出品，必属精品，是我喜欢的朴素风格。教授不仅dota打的好，Web前端也是一等一的高手，blog地址：<a href="http://lync.in">http://lync.in</a>。</p>
<p>试用过程中顺便发现了WP-CodeBox插件可能导致的一个问题，WP-CodeBox里用了jQuery.noConflict()，这样其他地方就不能用$作为jQuery别名了，如果其他地方用到了jQuery，可能会出现冲突。在教授的推荐下，改用WP-Syntax。（虽然都还没派上用场过）</p>
]]></content:encoded>
			<wfw:commentRss>http://c.hocobo.net/2010/03/10/simpledark/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>牛年小节续</title>
		<link>http://c.hocobo.net/2010/03/06/new_year_summary_2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new_year_summary_2</link>
		<comments>http://c.hocobo.net/2010/03/06/new_year_summary_2/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 02:41:09 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[个人生活]]></category>
		<category><![CDATA[数据挖掘]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[CRL]]></category>
		<category><![CDATA[eBay]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[VeryCD]]></category>
		<category><![CDATA[不确定数据]]></category>
		<category><![CDATA[学术]]></category>
		<category><![CDATA[实习]]></category>
		<category><![CDATA[工作]]></category>
		<category><![CDATA[数据仓库]]></category>
		<category><![CDATA[淘宝]]></category>
		<category><![CDATA[直方图]]></category>
		<category><![CDATA[算法]]></category>
		<category><![CDATA[聚类]]></category>
		<category><![CDATA[论文]]></category>

		<guid isPermaLink="false">http://c.hocobo.net/?p=39</guid>
		<description><![CDATA[前段时间牛年小节写了没多少内容就发觉已经出轨了，而且是出轨后继续行驶1000公里，真正在牛年做的事情好像没记录多少，今天再来回忆一下，顺便当笔记用了，哈哈。 学位论文发表了，虽然自己感觉有点豆腐渣工程，并略带忽悠，但毕业论文还是要写这一方向的内容，还是需要好好整理思考一下。文章的题目是《面向大型数据集合的关键分类查找算法》，题目是小老板定的，不过我还是没搞清楚为什么前面要加上“面向大型数据集合”这个定语，可能是为了吸引评审的眼球，在我看来，虽然算法有些优化的规则，但真的用到大型数据集合上，时间开销难保惨不忍睹，毕业论文还要好好把算法改进一下。 再来说说文章的核心“关键分类查找算法”，随意举个例子，统计青年人，中年人，老年人买车的开销(A: 老年人买什么车啊。。 B: 举例子！举例子！)，看哪一类人买车的开销最高，很容易想到，就是对每一类人取个平均值，再做比较，但有时候这样的统计方法得到的结果可能并不科学，假如真实情况是中年人买车开销最高，但统计的样本中有几个老年人买了名贵车种（一辆抵几十辆），一下子就把平均值拉高了，这样用平均值得到的结果就有些失实了。为了消除平均值带来的不准确性，我在文章里用了近年数据库领域比较火热（为了能发表，就只能接受忽悠大军的思想了）的“不确定数据”模型去对问题建模，主要是考虑了数据的分布特性，而不是简单的平均值。 上面仅仅举了个简单例子，说穿了“关键分类”在这个例子里就是购车开销最高的年龄段，但从“有几个老年人买了名贵车种”看出，也许决定购车开销的“关键分类”并不一定是年龄段，在实际的问题中，除了年龄段，还有例如性别，学历，或者其他各种分类属性同时存在，所以这篇文章做的事情就是在众多不同的属性中找到最重要的属性值，比如“女性最爱看瑞丽杂志”或者“30-40岁的人买房子花的钱最多”。 以上就是文章解决的问题。很容易想到，能够再进一步深入的话，可以解决这样一个问题，就是可以得到一个结果类似“25-30岁、职业是软件工程师的人在数码产品上花的钱最多”，也就是说找到一个多属性的“关键分类”，但问题分两面，要想得到这样的结果还要考虑这样的结果是否有价值，如果得到“25-30岁、职业是软件工程师，男性，名字是Chocobo（举例子！）的人在数码产品上花的钱最多”，这样的结果等于是找到一个特例，就毫无价值了，反而有点侵犯隐私的嫌疑。恩，毕业论文可以从这个角度入手。 另一个可以深入的角度是，上面举的例子中属性本来就是分好类的，实际的数据中有些可能并不是离散数据，比如人的年龄，年收入，如果能自动将原始数据分类，再找出关键分类，那就更好了。而这样的方法也是有很多的，比如聚类、直方图，关键是如何与原来的方法很好地结合，这也是毕业论文需要考虑的。其他诸如算法的优化就不多写了，还要再思考思考。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;我叫分割线，我信春哥&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; 再来记录下实习，本科的时候是在VeryCD实习，虽然实习时间很短（应学校规定）工作做得不是很多，但还是被公司良好氛围(人手一台apple，嘴里大嚼php,python,ubuntu及各种奇闻异事)感染，对技术更添兴趣和热情。这次实习本来是去eBay的，本科时投过两次都没拿到过offer，可能是当初对自己的定位不清晰，这次投了数据仓库部门，结果群面总共只说了一句话，还拿到了offer。。本来抱定要去eBay实习，结果小老板说IBM CRL的一个原来实验室师兄项目缺人，推荐我去，一来是小老板推荐，不好意思拒绝，二来也有点好奇心，觉得自己以后工作肯定不会去啥研究院之类的地方，就答应去了，本来以为IBM办事效率低，说不定等我eBay实习开始了那边实习生招聘流程还没走完，那我就可以有正当理由拒绝了，结果IBM办事效率确实低，不过在我on board前一天给办好了。。我只好硬着头皮给eBay打电话说不能去报道了。 IBM研究院的人（不包括像我这样的实习生）给我的感觉是太累，并不是指工作累，我的工作地点是上海张江，但IBM研究院本来是在北京的，08年底才在上海设立了分院，如此一来，可能一个team的人分居京沪两地，这样工作上有什么事情就只能电话沟通，此乃一累。每个正式员工可能同时参与了多个项目组，而项目组经常会有各种会议要开，会议在会议室里面开，用网络电话和异地的同事进行交流，这样的情况导致了两种场面发生，一个是像我mentor那样项目很多的人，有时候一天看不到人，在会议室里面都不出来了，连续作战；另一个场面是有时候办公室里面看不到人，都去各种会议室开各种的会了，有时候是为了能和异地的同事沟通，但在自己座位上打电话不方便，怕影响别人，只能去会议室。 工作内容么，此处略过300字（IBM confidential），哈哈。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;我叫分割线，我信春哥&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; 找工作也已经尘埃落定，淘宝数据平台部门，职位是我一心向往的数据仓库开发工程师。虽然当初投淘宝的时候对淘宝除了购物网站以外一点也不了解，听宣讲会的时候还有点自己是去打酱油的感觉，但笔试完回去以后特意找了数据平台部门的团队blog看了一下，发现做的东西都很有意思，而且用的技术都很新，也是我想学习的方向。没想到笔试完当天晚上就接到第二天去面试的通知，面试完也是当天晚上就接到offer的通知，可以说从一个打酱油者，到感兴趣者，再到被录用者的转变就发生在短短的两天内。。。 这次记录的全面一点了，篇幅有点过长了， 不过反正这里也是我记笔记的地方，大家不想看的内容可以略过数行，哈哈。 confidential]]></description>
			<content:encoded><![CDATA[<p>前段时间牛年小节写了没多少内容就发觉已经出轨了，而且是出轨后继续行驶1000公里，真正在牛年做的事情好像没记录多少，今天再来回忆一下，顺便当笔记用了，哈哈。</p>
<p>学位论文发表了，虽然自己感觉有点豆腐渣工程，并略带忽悠，但毕业论文还是要写这一方向的内容，还是需要好好整理思考一下。文章的题目是《面向大型数据集合的关键分类查找算法》，题目是小老板定的，不过我还是没搞清楚为什么前面要加上“面向大型数据集合”这个定语，可能是为了吸引评审的眼球，在我看来，虽然算法有些优化的规则，但真的用到大型数据集合上，时间开销难保惨不忍睹，毕业论文还要好好把算法改进一下。</p>
<p>再来说说文章的核心“关键分类查找算法”，随意举个例子，统计青年人，中年人，老年人买车的开销(A: 老年人买什么车啊。。 B: 举例子！举例子！)，看哪一类人买车的开销最高，很容易想到，就是对每一类人取个平均值，再做比较，但有时候这样的统计方法得到的结果可能并不科学，假如真实情况是中年人买车开销最高，但统计的样本中有几个老年人买了名贵车种（一辆抵几十辆），一下子就把平均值拉高了，这样用平均值得到的结果就有些失实了。为了消除平均值带来的不准确性，我在文章里用了近年数据库领域比较火热（为了能发表，就只能接受忽悠大军的思想了）的“不确定数据”模型去对问题建模，主要是考虑了数据的分布特性，而不是简单的平均值。</p>
<p>上面仅仅举了个简单例子，说穿了“关键分类”在这个例子里就是购车开销最高的年龄段，但从“有几个老年人买了名贵车种”看出，也许决定购车开销的“关键分类”并不一定是年龄段，在实际的问题中，除了年龄段，还有例如性别，学历，或者其他各种分类属性同时存在，所以这篇文章做的事情就是在众多不同的属性中找到最重要的属性值，比如“女性最爱看瑞丽杂志”或者“30-40岁的人买房子花的钱最多”。</p>
<p>以上就是文章解决的问题。很容易想到，能够再进一步深入的话，可以解决这样一个问题，就是可以得到一个结果类似“25-30岁、职业是软件工程师的人在数码产品上花的钱最多”，也就是说找到一个多属性的“关键分类”，但问题分两面，要想得到这样的结果还要考虑这样的结果是否有价值，如果得到“25-30岁、职业是软件工程师，男性，名字是Chocobo（举例子！）的人在数码产品上花的钱最多”，这样的结果等于是找到一个特例，就毫无价值了，反而有点侵犯隐私的嫌疑。恩，毕业论文可以从这个角度入手。</p>
<p>另一个可以深入的角度是，上面举的例子中属性本来就是分好类的，实际的数据中有些可能并不是离散数据，比如人的年龄，年收入，如果能自动将原始数据分类，再找出关键分类，那就更好了。而这样的方法也是有很多的，比如聚类、直方图，关键是如何与原来的方法很好地结合，这也是毕业论文需要考虑的。其他诸如算法的优化就不多写了，还要再思考思考。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;我叫分割线，我信春哥&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>再来记录下实习，本科的时候是在VeryCD实习，虽然实习时间很短（应学校规定）工作做得不是很多，但还是被公司良好氛围(人手一台apple，嘴里大嚼php,python,ubuntu及各种奇闻异事)感染，对技术更添兴趣和热情。这次实习本来是去eBay的，本科时投过两次都没拿到过offer，可能是当初对自己的定位不清晰，这次投了数据仓库部门，结果群面总共只说了一句话，还拿到了offer。。本来抱定要去eBay实习，结果小老板说IBM CRL的一个原来实验室师兄项目缺人，推荐我去，一来是小老板推荐，不好意思拒绝，二来也有点好奇心，觉得自己以后工作肯定不会去啥研究院之类的地方，就答应去了，本来以为IBM办事效率低，说不定等我eBay实习开始了那边实习生招聘流程还没走完，那我就可以有正当理由拒绝了，结果IBM办事效率确实低，不过在我on board前一天给办好了。。我只好硬着头皮给eBay打电话说不能去报道了。</p>
<p>IBM研究院的人（不包括像我这样的实习生）给我的感觉是太累，并不是指工作累，我的工作地点是上海张江，但IBM研究院本来是在北京的，08年底才在上海设立了分院，如此一来，可能一个team的人分居京沪两地，这样工作上有什么事情就只能电话沟通，此乃一累。每个正式员工可能同时参与了多个项目组，而项目组经常会有各种会议要开，会议在会议室里面开，用网络电话和异地的同事进行交流，这样的情况导致了两种场面发生，一个是像我mentor那样项目很多的人，有时候一天看不到人，在会议室里面都不出来了，连续作战；另一个场面是有时候办公室里面看不到人，都去各种会议室开各种的会了，有时候是为了能和异地的同事沟通，但在自己座位上打电话不方便，怕影响别人，只能去会议室。</p>
<p>工作内容么，此处略过300字（IBM confidential），哈哈。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;我叫分割线，我信春哥&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>找工作也已经尘埃落定，淘宝数据平台部门，职位是我一心向往的数据仓库开发工程师。虽然当初投淘宝的时候对淘宝除了购物网站以外一点也不了解，听宣讲会的时候还有点自己是去打酱油的感觉，但笔试完回去以后特意找了数据平台部门的团队blog看了一下，发现做的东西都很有意思，而且用的技术都很新，也是我想学习的方向。没想到笔试完当天晚上就接到第二天去面试的通知，面试完也是当天晚上就接到offer的通知，可以说从一个打酱油者，到感兴趣者，再到被录用者的转变就发生在短短的两天内。。。</p>
<p>这次记录的全面一点了，篇幅有点过长了， 不过反正这里也是我记笔记的地方，大家不想看的内容可以略过数行，哈哈。</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 1072px; width: 1px; height: 1px;">confidential</div>
]]></content:encoded>
			<wfw:commentRss>http://c.hocobo.net/2010/03/06/new_year_summary_2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>牛年小节</title>
		<link>http://c.hocobo.net/2010/02/08/new_year_summary/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new_year_summary</link>
		<comments>http://c.hocobo.net/2010/02/08/new_year_summary/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 14:51:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[个人生活]]></category>
		<category><![CDATA[Autoproxy]]></category>
		<category><![CDATA[Tor]]></category>
		<category><![CDATA[学术]]></category>
		<category><![CDATA[春哥]]></category>
		<category><![CDATA[翻墙]]></category>
		<category><![CDATA[论文]]></category>
		<category><![CDATA[诛仙]]></category>

		<guid isPermaLink="false">http://c.hocobo.net/?p=26</guid>
		<description><![CDATA[还有一周不到的时间就要过春节了，外国人新年是1月1日，中国人都信春哥，所以春节才是中国的新年，作为春哥信众，自然也要到春节前才做年度小节。 牛年发生了许多大事，尤其是互联网，但对我个人生活产生的影响并不大，倒是借此机会掌握了二十一世纪上网的必备技能——翻墙，最方便的还是Autoproxy+Tor，开个小洋葱，就可以一支红杏出墙来了，按照Firefox + Autoproxy + Tor 使用详解（转载）这篇文章很容易配置。 前两天，帮小老板做实验的论文终于又投出去了，前前后后大概已经快折腾了1年了，记得去年春节的时候也是在加班加点地coding。虽然半年前投了已经沦为rank2的会议ICDE都被拒了，这次改投了rank1的期刊TKDE，但看上去还是蛮有希望的，3个reviewer中2个态度比较“友好”，只有1个看上去比较“专业”，上一轮发回的意见一大堆，拼写错误和字母大小写也丝毫不看漏。这次的修改稿，看在我辛辛苦苦做了那么多实验的份上，就给我们过吧～不过论文确实比较忽悠，虽然算法还算巧妙，但所要解决的问题，我总觉得在现实生活中还是很难找到应用场景，这算学术总是走在应用之前？还是为了学术而学术呢？我也搞不明白，至少我还是喜欢走用技术去做实用的产品的道路，等什么时候境界达到能走在应用之前的时候，再回去搞学术吧。 利用做实验时100%CPU占用率以及0%人脑占用率的机会，终于把《诛仙》看完了，一开始以为没多少字，看了个通宵，结果看了一天才揭了个序幕，整部小说一共200多万字，差不多相当于四大名著中三部之和那么长了。很多人都是先看了诛仙的小说，然后去玩了诛仙的网游，后来又有人做了个诛仙的war3rpg地图，我接触诛仙的顺序却刚好反过来，先是玩了war3的版本，觉得这个rpg的人物，技能，背景设定都不错，既古朴又华丽。后来发现有诛仙的网游，是完美时空出的，去玩了一下，发觉这个游戏实在是太傻瓜式了，任务不单单有地点提示，还能自动跑点，不仅如此。。居然还能自动打怪，还能指定只打与任务有关的怪，这和一个界面华丽的外挂也没多大差别了。 看了小说以后，才真正感受到了《诛仙》的经典，有人用一句话概括说“金庸写的是侠，古龙写的是义，诛仙写的是情”，经典也不只是诛仙的情，还有贯穿整部小说的那句“天敌不仁，以万物为刍狗”，出自老子的道德经，我看过的武侠小说不算多，以往的小说中一般总会体现一个“邪不胜正”的价值观，最终正义战胜了邪恶。虽然诛仙的结局还是“近卫军团”战胜了“天灾军团”，但小说中对“正”提出了质疑，所谓的正道就一定是正义的吗？正道和魔教一样也存在内在的勾心斗角，同时正道在“替天行道”剿灭魔教的时候，一样也妇孺皆杀。“天敌不仁，以万物为刍狗”，大致意思是世间万物本都是一样的，没有贵贱之分，正邪也是如此，并不是标榜“正道”就是所谓的正义了。 好像已经偏离了牛年小节的轨道了，下次接着写。]]></description>
			<content:encoded><![CDATA[<p>还有一周不到的时间就要过春节了，外国人新年是1月1日，中国人都信春哥，所以春节才是中国的新年，作为春哥信众，自然也要到春节前才做年度小节。</p>
<p>牛年发生了许多大事，尤其是互联网，但对我个人生活产生的影响并不大，倒是借此机会掌握了二十一世纪上网的必备技能——翻墙，最方便的还是Autoproxy+Tor，开个小洋葱，就可以一支红杏出墙来了，按照<a title="Firefox + Autoproxy + Tor 使用详解（转载）" href="http://docs.google.com/View?docid=ajh9rxdbc326_32dpkgtkf5" target="_blank">Firefox + Autoproxy + Tor 使用详解（转载）</a>这篇文章很容易配置。</p>
<p>前两天，帮小老板做实验的论文终于又投出去了，前前后后大概已经快折腾了1年了，记得去年春节的时候也是在加班加点地coding。虽然半年前投了已经沦为rank2的会议ICDE都被拒了，这次改投了rank1的期刊TKDE，但看上去还是蛮有希望的，3个reviewer中2个态度比较“友好”，只有1个看上去比较“专业”，上一轮发回的意见一大堆，拼写错误和字母大小写也丝毫不看漏。这次的修改稿，看在我辛辛苦苦做了那么多实验的份上，就给我们过吧～不过论文确实比较忽悠，虽然算法还算巧妙，但所要解决的问题，我总觉得在现实生活中还是很难找到应用场景，这算学术总是走在应用之前？还是为了学术而学术呢？我也搞不明白，至少我还是喜欢走用技术去做实用的产品的道路，等什么时候境界达到能走在应用之前的时候，再回去搞学术吧。</p>
<p>利用做实验时100%CPU占用率以及0%人脑占用率的机会，终于把《诛仙》看完了，一开始以为没多少字，看了个通宵，结果看了一天才揭了个序幕，整部小说一共200多万字，差不多相当于四大名著中三部之和那么长了。很多人都是先看了诛仙的小说，然后去玩了诛仙的网游，后来又有人做了个诛仙的war3rpg地图，我接触诛仙的顺序却刚好反过来，先是玩了war3的版本，觉得这个rpg的人物，技能，背景设定都不错，既古朴又华丽。后来发现有诛仙的网游，是完美时空出的，去玩了一下，发觉这个游戏实在是太傻瓜式了，任务不单单有地点提示，还能自动跑点，不仅如此。。居然还能自动打怪，还能指定只打与任务有关的怪，这和一个界面华丽的外挂也没多大差别了。</p>
<p>看了小说以后，才真正感受到了《诛仙》的经典，有人用一句话概括说“金庸写的是侠，古龙写的是义，诛仙写的是情”，经典也不只是诛仙的情，还有贯穿整部小说的那句“天敌不仁，以万物为刍狗”，出自老子的道德经，我看过的武侠小说不算多，以往的小说中一般总会体现一个“邪不胜正”的价值观，最终正义战胜了邪恶。虽然诛仙的结局还是“近卫军团”战胜了“天灾军团”，但小说中对“正”提出了质疑，所谓的正道就一定是正义的吗？正道和魔教一样也存在内在的勾心斗角，同时正道在“替天行道”剿灭魔教的时候，一样也妇孺皆杀。“天敌不仁，以万物为刍狗”，大致意思是世间万物本都是一样的，没有贵贱之分，正邪也是如此，并不是标榜“正道”就是所谓的正义了。</p>
<p>好像已经偏离了牛年小节的轨道了，下次接着写。</p>
]]></content:encoded>
			<wfw:commentRss>http://c.hocobo.net/2010/02/08/new_year_summary/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>陆行鸟</title>
		<link>http://c.hocobo.net/2010/01/20/chocobo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=chocobo</link>
		<comments>http://c.hocobo.net/2010/01/20/chocobo/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 12:31:21 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[个人生活]]></category>
		<category><![CDATA[O2小队]]></category>
		<category><![CDATA[技术历程]]></category>
		<category><![CDATA[陆行鸟]]></category>

		<guid isPermaLink="false">http://c.hocobo.net/?p=14</guid>
		<description><![CDATA[第一次注册域名(Chocobo的顶级域名买不起，只能买了配件自己组装)，第一次用wordpress，的第一篇日志，让我想起了初中时第一次做个人主页，用的是免费空间，附送二级域名(及各种弹出式广告)，用frontpage将一些文字和图片以和谐但美观度小于0的形式建立了第一个网站，内容是各种资讯，图片，游戏，下载，活脱脱的山寨版门户网站，和个人主页完全无关，但站名却用了“晓峰个人空间”，囧。当时大家都喜欢用各种网名，我却反其道而用真名，等大家都开始用真名了，我找到了个感兴趣的ID: Chocobo，就是“最终幻想”里的陆行鸟，并不是因为我热爱最终幻想，虽然最终幻想的CG和音效都不错，而是因为在玩FF8时，玩了那个捆绑的陆行鸟养成游戏，突然觉得Chocobo这个字母组合很好看，而且陆行鸟这个名字也很有意思，大有将鸡鸭鸵鸟等禽类收归派生类的气势，就把各种应用的ID和头像全都换成了陆行鸟，而“巧克博”取自Chocobo的谐音，“博”通“Blog”，所以为Blog取了这个名字，听上去比“陆行鸟”更Install B一点 XD 最近周围的事情特别多，几乎没有时间能够停顿下来好好做自己的事情，学学自己想学的东西，玩玩自己想玩的游戏，域名和空间其实也已经注册了有一段时间了。不过有位名人曾说过“时间就像[文明用语]，挤一挤还是有的”，O2小队里现在只有Chris和木头还会更新Blog(虽然木头是一年更新一次)，我也不甘落后，为了证明一点，男人更勤劳！第一篇日志到此结束，以后会常更新，因为还要当技术笔记用，^_^]]></description>
			<content:encoded><![CDATA[<p>第一次注册域名(Chocobo的顶级域名买不起，只能买了配件自己组装)，第一次用wordpress，的第一篇日志，让我想起了初中时第一次做个人主页，用的是免费空间，附送二级域名(及各种弹出式广告)，用frontpage将一些文字和图片以和谐但美观度小于0的形式建立了第一个网站，内容是各种资讯，图片，游戏，下载，活脱脱的山寨版门户网站，和个人主页完全无关，但站名却用了“晓峰个人空间”，囧。当时大家都喜欢用各种网名，我却反其道而用真名，等大家都开始用真名了，我找到了个感兴趣的ID: Chocobo，就是“最终幻想”里的陆行鸟，并不是因为我热爱最终幻想，虽然最终幻想的CG和音效都不错，而是因为在玩FF8时，玩了那个捆绑的陆行鸟养成游戏，突然觉得Chocobo这个字母组合很好看，而且陆行鸟这个名字也很有意思，大有将鸡鸭鸵鸟等禽类收归派生类的气势，就把各种应用的ID和头像全都换成了陆行鸟，而“巧克博”取自Chocobo的谐音，“博”通“Blog”，所以为Blog取了这个名字，听上去比“陆行鸟”更Install B一点 XD</p>
<p>最近周围的事情特别多，几乎没有时间能够停顿下来好好做自己的事情，学学自己想学的东西，玩玩自己想玩的游戏，域名和空间其实也已经注册了有一段时间了。不过有位名人曾说过“时间就像[文明用语]，挤一挤还是有的”，O2小队里现在只有Chris和木头还会更新Blog(虽然木头是一年更新一次)，我也不甘落后，为了证明一点，男人更勤劳！第一篇日志到此结束，以后会常更新，因为还要当技术笔记用，^_^</p>
]]></content:encoded>
			<wfw:commentRss>http://c.hocobo.net/2010/01/20/chocobo/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

