<?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>Non-Trivial House</title>
	<atom:link href="http://eblog.cybersnoopy.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://eblog.cybersnoopy.com</link>
	<description>Learn to labor &#38; to wait</description>
	<lastBuildDate>Sun, 05 Feb 2012 05:52:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Sina weibo direct message export script</title>
		<link>http://eblog.cybersnoopy.com/2012/02/04/sina-weibo-direct-message-export-script/</link>
		<comments>http://eblog.cybersnoopy.com/2012/02/04/sina-weibo-direct-message-export-script/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 05:28:13 +0000</pubDate>
		<dc:creator>Snoopy</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sina]]></category>
		<category><![CDATA[weibo]]></category>

		<guid isPermaLink="false">http://eblog.cybersnoopy.com/?p=18</guid>
		<description><![CDATA[Because of some personal reasons, I need to export some of my DM (tens of thousands lines) in Sina weibo (AKA the Chinese twitter). Weibo, the major NON-international micro-blog platform have more than 250M users (including DUMMY/ROBOT/BRAIN-EATING users) now. Such Chinese web companies, mostly relying on marketing effort and a good relationship with government, generally [...]]]></description>
			<content:encoded><![CDATA[<p>Because of some personal reasons, I need to export some of my DM (tens of thousands lines) in Sina weibo (AKA the Chinese twitter). Weibo, the major NON-international micro-blog platform have more than <a href="http://www.donews.com/original/201111/802908.shtm">250M users</a> (including <a href="http://www.penn-olson.com/2011/11/09/sina-weibo-breaks-250-million-users-but-how-many-are-real/">DUMMY/ROBOT/BRAIN-EATING users</a>) now. Such Chinese web companies, mostly relying on marketing effort and a good relationship with government, generally don’t put too much heart on the user experience. It’s even worse for power users, also much harder to opt-out than opt-in, so obviously there is no official export button to expect. Google only pop up several related links but none of which deal with DM, so I have to fight myself.</p>
<p>The first thing get into my mind is the official API. It does have some DM related API, but can only get the “latest” message list. Not sure it’s possible to call it multiple times to pull everything out. I just give up, since to use the API you have to register as a developer (with your real name!) and wait for sina’s authorization. Too hard to trust sina, next.</p>
<p>Then the brutal force solution: use a macro recorder. Google it and it looks like web scraping is so popular, that there is a software category called internet macro recorder. Try one of them, the trial version is too stupid to know how to click the next page button and then save the html (still need to be parsed later). Too dangerous to buy the full version, in case it’s still very stupid. Next.</p>
<p>Then the python urllib with which I’ve written something to fetch singer list from baidu music some time ago. However, even after steal the logon dark magic from a <a href="http://community.itbbs.cn/thread/19120/">robot script</a>, successfully download the message history html, I end up with a bunch of more dark magic &lt;script&gt;…&lt;/script&gt;. Oh my, I should have known better that the good old days of static html is long gone with the wind. Sadly, next.</p>
<p>Here comes the final shot. After asking the omnipotent <a href="http://stackoverflow.com/questions/9142911/how-to-fetch-complete-webpage-using-javascript-in-python/">stackoverflow</a>, there are several suggestions. One is to use <a href="http://sitescraper.net/blog/Scraping-JavaScript-webpages-with-webkit/">WebQt’s python binding</a> which looks pretty promising but has a stiff learning curve of Qt’s hundreds of API and its python version. Or to use javascript based <a href="http://www.phantomjs.org/">Phantomjs</a>. But I’m not familiar with javascript and know nothing about its environment.</p>
<p>Finally I decided to try Selenium, a “browser automation framework”, said on its website. Looks like these tools come out of the furious browser fight raised up by google. Chrome uses lots of automatic test to torture their browser with various websites. Back to selenium, it’s a really powerful tool which can easily find all kinds of DOM element and manipulate it. In my case, it’s just go to the message history webpage and click next next next, until there is no next (or previous if you want chronicle order). The script should be pretty straight forward to understand with the comments.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: utf-8 –*-</span>
<span style="color: #808080; font-style: italic;"># A sina weibo DM export tool</span>
<span style="color: #ff7700;font-weight:bold;">from</span> selenium <span style="color: #ff7700;font-weight:bold;">import</span> webdriver
<span style="color: #ff7700;font-weight:bold;">from</span> selenium.<span style="color: black;">common</span>.<span style="color: #dc143c;">exceptions</span> <span style="color: #ff7700;font-weight:bold;">import</span> TimeoutException
<span style="color: #ff7700;font-weight:bold;">from</span> selenium.<span style="color: black;">webdriver</span>.<span style="color: black;">support</span>.<span style="color: black;">ui</span> <span style="color: #ff7700;font-weight:bold;">import</span> WebDriverWait <span style="color: #808080; font-style: italic;"># available since 2.4.0</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">codecs</span>
&nbsp;
f = <span style="color: #dc143c;">codecs</span>.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'weibo.txt'</span>, encoding=<span style="color: #483d8b;">'utf-8'</span>, mode=<span style="color: #483d8b;">'w+'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Create a new instance of the Chrome</span>
driver = webdriver.<span style="color: black;">Chrome</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># Set 15 sec as default timeout (maximum waiting time if something can't be found)</span>
driver.<span style="color: black;">implicitly_wait</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">15</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># go to the direct message history page (for DM with one user)</span>
driver.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>http://weibo.<span style="color: black;">com</span>/message/history<span style="color: #66cc66;">?</span>uid=xxxxxxxxxx<span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Find loginname input box</span>
loginnameInput = driver.<span style="color: black;">find_element_by_id</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>loginname<span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
loginnameInput.<span style="color: black;">send_keys</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>me@mydomain.<span style="color: black;">com</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># Find password input box</span>
passwdInput = driver.<span style="color: black;">find_element_by_id</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>password<span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
passwdInput.<span style="color: black;">send_keys</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>mypasswd<span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># Find the submit button</span>
submitButton = driver.<span style="color: black;">find_element_by_id</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>login_submit_btn<span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># Submit</span>
submitButton.<span style="color: black;">click</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
n = <span style="color: #ff4500;">1</span>
more = <span style="color: #ff4500;">1</span>
<span style="color: #ff7700;font-weight:bold;">while</span> more:
    <span style="color: #808080; font-style: italic;"># Find message box</span>
    messages = driver.<span style="color: black;">find_elements_by_class_name</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>txt<span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
    <span style="color: #808080; font-style: italic;"># Find time tag box</span>
    ts = driver.<span style="color: black;">find_elements_by_css_selector</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>em.<span style="color: black;">W_textb</span>.<span style="color: black;">date</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
    f.<span style="color: black;">write</span><span style="color: black;">&#40;</span>ts<span style="color: black;">&#91;</span>-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>.<span style="color: black;">text</span> + <span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>\n<span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> msg <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">reversed</span><span style="color: black;">&#40;</span>messages<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>msg.<span style="color: black;">text</span> <span style="color: #66cc66;">!</span>= <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>:
            f.<span style="color: black;">write</span><span style="color: black;">&#40;</span>msg.<span style="color: black;">text</span> + <span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>\n<span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
    f.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    buttons = driver.<span style="color: black;">find_elements_by_class_name</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span>W_btn_a<span style="color: #66cc66;">&amp;</span>quot<span style="color: #66cc66;">;</span><span style="color: black;">&#41;</span>
    more = <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> button <span style="color: #ff7700;font-weight:bold;">in</span> buttons:
        <span style="color: #808080; font-style: italic;"># Next page or previous page</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> button.<span style="color: black;">text</span> == u<span style="color: #483d8b;">'上一页'</span>:
            more = <span style="color: #ff4500;">1</span>
            <span style="color: #ff7700;font-weight:bold;">break</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> more:
        n += <span style="color: #ff4500;">1</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Page %d'</span> <span style="color: #66cc66;">%</span> n
        button.<span style="color: black;">click</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">time</span>.<span style="color: black;">sleep</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'All Done!'</span>
driver.<span style="color: black;">quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>I’m using the chrome as the webdriver so I can easily F12 or do “inspect element” to fire up the webpage debug console to reveal anything with ease. The script can be polished to support incremental export, and also auto detect users. But so far so good, I just claim victory and leave it as it is.</p>
]]></content:encoded>
			<wfw:commentRss>http://eblog.cybersnoopy.com/2012/02/04/sina-weibo-direct-message-export-script/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Emacs lisp function to copy the current line</title>
		<link>http://eblog.cybersnoopy.com/2010/03/14/emacs-lisp-function-to-copy-the-current-line/</link>
		<comments>http://eblog.cybersnoopy.com/2010/03/14/emacs-lisp-function-to-copy-the-current-line/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 23:48:31 +0000</pubDate>
		<dc:creator>Snoopy</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[elisp]]></category>

		<guid isPermaLink="false">http://eblog.cybersnoopy.com/2010/03/14/emacs-lisp-function-to-copy-the-current-line/</guid>
		<description><![CDATA[I used to have some elisp code stolen from somewhere which copy the current line. Then I find most of time I don&#8217;t want the prefix whitespaces copied, so I modified it a bit as a tiny try to cure my lisp-parenthesis-horror. &#40;defun copy-line &#40;&#38;amp;optional arg) &#34;Save current line from the first non-whitespce character into [...]]]></description>
			<content:encoded><![CDATA[<p>I used to have some elisp code stolen from somewhere which copy the current line. Then I find most of time I don&#8217;t want the prefix whitespaces copied, so I modified it a bit as a tiny try to cure my lisp-parenthesis-horror.</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> copy-line <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span>amp<span style="color: #808080; font-style: italic;">;optional arg)</span>
       <span style="color: #ff0000;">&quot;Save current line from the first non-whitespce character into Kill-Ring without mark the line &quot;</span>
       <span style="color: #66cc66;">&#40;</span>interactive <span style="color: #ff0000;">&quot;P&quot;</span><span style="color: #66cc66;">&#41;</span>
       <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>beg <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span> <span style="color: #66cc66;">&#40;</span>back-to-indentation<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>point<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>end <span style="color: #66cc66;">&#40;</span>line-end-position<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>copy-region-as-kill beg end<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
       <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>global-set-key <span style="color: #66cc66;">&#40;</span>kbd <span style="color: #ff0000;">&quot;C-c l&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">quote</span> copy-line<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>It seems that lisp is not as daunting as haskell&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://eblog.cybersnoopy.com/2010/03/14/emacs-lisp-function-to-copy-the-current-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Here comes Firefox3</title>
		<link>http://eblog.cybersnoopy.com/2008/06/12/here-comes-firefox3/</link>
		<comments>http://eblog.cybersnoopy.com/2008/06/12/here-comes-firefox3/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 03:45:04 +0000</pubDate>
		<dc:creator>Snoopy</dc:creator>
				<category><![CDATA[Snoopy Daily]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://eblog.cybersnoopy.com/?p=6</guid>
		<description><![CDATA[Coming Tuesday, June 17th: Firefox 3 Where the hell is Google Browser Sync??? Don&#8217;t fail me, Google!]]></description>
			<content:encoded><![CDATA[<h2><a title="Permanent Link: Coming Tuesday, June 17th: Firefox 3" rel="bookmark" href="http://developer.mozilla.org/devnews/index.php/2008/06/11/coming-tuesday-june-17th-firefox-3/">Coming Tuesday, June 17th: Firefox 3</a></h2>
<p><a href="http://www.grantmidwinter.com/2008/04/02/google-browser-sync-for-firefox-3/">Where the hell is Google Browser Sync???</a></p>
<p>Don&#8217;t fail me, Google!</p>
]]></content:encoded>
			<wfw:commentRss>http://eblog.cybersnoopy.com/2008/06/12/here-comes-firefox3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Have you ever kissed a girl?</title>
		<link>http://eblog.cybersnoopy.com/2008/05/03/have-you-ever-kissed-a-girl/</link>
		<comments>http://eblog.cybersnoopy.com/2008/05/03/have-you-ever-kissed-a-girl/#comments</comments>
		<pubDate>Sun, 04 May 2008 01:55:18 +0000</pubDate>
		<dc:creator>Snoopy</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://eblog.cybersnoopy.com/?p=5</guid>
		<description><![CDATA[I have to admit that when I first saw this quote from Ted&#8216;s blog on Organic vs. Non-organic Open Source, I was quite confused (another GRE reading comprehension?). So I follow the link and read the original text. It&#8217;s a long email in 1996 from Bryan Cantrill, a Solaris Engineer to David Miller, a core [...]]]></description>
			<content:encoded><![CDATA[<p>I have to admit that when I first saw this quote from <a href="http://thunk.org/tytso/">Ted</a>&#8216;s <a href="http://thunk.org/tytso/blog/">blog</a> on <a href="http://thunk.org/tytso/blog/2008/04/26/organic-vs-non-organic-open-source-revisited">Organic vs. Non-organic Open Source</a>, I was quite confused (another GRE reading comprehension?). So I follow the link and read the <a href="http://cryptnet.net/mirrors/texts/kissedagirl.html">original text</a>. It&#8217;s a long email in 1996 from Bryan Cantrill, a Solaris Engineer to <a href="http://en.wikipedia.org/wiki/David_S._Miller">David Miller</a>, a core developer working on sparc related linux kernel. Most of the email is quoted in which David talked in detail about some inefficient kernel mechanisms of Solaris compared with Linux. Then, at the end of the email comes the most amazing part, unquoted, from Sun-based Bryan</p>
<blockquote><p>Have you ever kissed a girl?</p></blockquote>
<p>What the heck!</p>
<p>Anyway, it&#8217;s an old story happened 12 years ago. Two(?) years ago, Sun published <a href="http://opensolaris.org/os/">OpenSolaris</a>. Four months ago, they <a href="http://blog.linuxoss.com/2008/01/18/sun-microsystems-buys-mysql/">aquired</a> <a href="http://www.mysql.com/">MySQL</a>, one of the most successful community-driven open source projects. However, as a commercial company, Sun doesn&#8217;t seem to truly embrace the open source camp, instead it&#8217;s more like they just want to take some advantage. OpenSolaris is <a href="http://www.ratliff.net/blog/index.php/2008/02/14/not-with-a-bang-but-a-whimper/">slow</a> in development progress, and there are <a href="http://mail.opensolaris.org/pipermail/ogb-discuss/2008-February/004488.html">complains</a>. For MySQL, they announed some of the new features will not be available for the open source version. Open source people are <a href="http://thunk.org/tytso/blog/2008/04/19/what-sun-was-trying-to-do-with-open-solaris/">suspicious</a> about Sun&#8217;s intent. Personally I think Sun will not be able to get what they want, unless they change their closing-too-long-time mind.</p>
<p>These days, open source projects like kernel, apache, Firefox, MySQL are everywhere. People are using them (say browsing internet) all the time even if they are not aware of their existense. For all these great projects, I likes Qt a lot, powered by Troll Tech and of course KDE community. I see Qt as a successful business model to make everybody happy. A company who&#8217;s employing people to improve the code constantly, a bunch of developers from open source community who contribute and give feedbacks and suggestions, and end users who get most out of the combination of the two.  There are always suspicion on Qt&#8217;s license issue (that&#8217;s why there are Gnome <img src='http://eblog.cybersnoopy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ), especially after Troll Tech <a href="http://trolltech.com/28012008/28012008">acquired by Nokia</a>. But it seems they handle these quite well. As a result of the effort from both commercial company and open source community, <a href="http://www.kde.org">KDE</a> 4.1 is <a href="http://www.kde.org/announcements/announce-4.1-alpha1.php">coming up</a> with the bleeding-edge technology very soon. And thanks to it, I get a <a href="http://code.google.com/soc/2008/kde/appinfo.html?csaid=1C95813D9A255337">slot</a> from <a href="http://code.google.com/soc/2008/">this year&#8217;s Google Summer of Code</a> to improve KGet, a opensource downloader based on KDE/Qt.</p>
<p>Economically, Open source projects are actually introduce more competence into the market. Coz once the source code itself is available to everybody, company who want to make money have to concentrate on service. The end users immideately have bunch of choises instead of been bounded to the sole company owning the source (M$?). Actually they can even hire their own people to work on it if there is a need! More competence may mean less cost which is a good thing.</p>
<p>There are also people who disagree with the open source trend. The professor who taught me advanced C++ once gave his opinion on open source trend in class. He saw open source as something directly opposed to the get-most-money-if-you-can moto held by commerical companies. He even had a quite conspiracy-theroy-like opinion that these industrial giants like IBM, Nowell are backing up open source projects merely as a kind of power to undermine Microsoft. At last he concluded, since so many smart people are contributing their brain power to the open source trends, it&#8217;s hard to forsee what will happen.</p>
<p>Having said all these, as a non-native-speaker of English, I would still like to know what&#8217;s the meaning between lines for the sentense &#8216;Have you ever kissed a girl?&#8217; at that context. Is that something like &#8216;You nerd, have you ever got a life?&#8217;</p>
<p>Comments are most welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://eblog.cybersnoopy.com/2008/05/03/have-you-ever-kissed-a-girl/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Born to be different~</title>
		<link>http://eblog.cybersnoopy.com/2008/04/17/born-to-be-different/</link>
		<comments>http://eblog.cybersnoopy.com/2008/04/17/born-to-be-different/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 21:10:32 +0000</pubDate>
		<dc:creator>Snoopy</dc:creator>
				<category><![CDATA[Snoopy Daily]]></category>

		<guid isPermaLink="false">http://www.eblog.cybersnoopy.com/?p=4</guid>
		<description><![CDATA[This will be my second blog which is in English.]]></description>
			<content:encoded><![CDATA[<p>This will be my second blog which is in English.</p>
]]></content:encoded>
			<wfw:commentRss>http://eblog.cybersnoopy.com/2008/04/17/born-to-be-different/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

