<?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>Share 4 More</title>
	<atom:link href="http://web2.0coder.com/feed" rel="self" type="application/rss+xml" />
	<link>http://web2.0coder.com</link>
	<description>the programmer</description>
	<lastBuildDate>Wed, 07 Mar 2012 03:10:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>udacity course license</title>
		<link>http://web2.0coder.com/archives/518</link>
		<comments>http://web2.0coder.com/archives/518#comments</comments>
		<pubDate>Wed, 07 Mar 2012 03:10:27 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[onlineedu]]></category>
		<category><![CDATA[udacity]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=518</guid>
		<description><![CDATA[&#8230; We are encouraged by all the efforts our students have made to make our content available in other ways and to enhance it, so have decided to license our course content under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 license. This license allows others to redistribute and adapt our content as they wish, so long as <a href='http://web2.0coder.com/archives/518'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>&#8230; We are encouraged by all the efforts our students have made to make our content available in other ways and to enhance it, so have decided to license our course content under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 license. This license allows others to redistribute and adapt our content as they wish, so long as it is attributed to us and is not used for commercial purposes without our permission. We fully support those who have created other ways to access our content through alternative video distribution channels that make our courses more accessible and useful, and encourage efforts to develop original creative content that builds on our course content. Please share any new distributions or adaptations you produce by posting them on the course forum.</p>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/518/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Steaming Video via HLS</title>
		<link>http://web2.0coder.com/archives/512</link>
		<comments>http://web2.0coder.com/archives/512#comments</comments>
		<pubDate>Wed, 29 Feb 2012 04:56:13 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[server]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hls]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=512</guid>
		<description><![CDATA[Http Live Streaming Intro View more presentations from Vonbo PDF: HttpLiveStreamingIntro]]></description>
			<content:encoded><![CDATA[<div id="__ss_11793311" style="width: 425px;">
<p><strong style="display: block; margin: 12px 0 4px;"><a title="Http Live Streaming Intro" href="http://www.slideshare.net/beijixuexiong/http-live-streaming-intro" target="_blank">Http Live Streaming Intro</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11793311" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/beijixuexiong" target="_blank">Vonbo</a></div>
<p><a href="http://web2.0coder.com/wp-content/uploads/2012/02/HttpLiveStreamingIntro.pdf">PDF: HttpLiveStreamingIntro</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/512/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>web.py重写gdicts</title>
		<link>http://web2.0coder.com/archives/509</link>
		<comments>http://web2.0coder.com/archives/509#comments</comments>
		<pubDate>Sun, 19 Feb 2012 05:37:56 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[server]]></category>
		<category><![CDATA[gdicts]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=509</guid>
		<description><![CDATA[urh，人生在于折腾。用flask重写了gdicts之后，因为不满意flask的url route机制和规则，也觉得用sqlalchemy的那套东西有点臃肿，（感觉sqlalchemy只能作为orm届的标准，却很少投入到实际的开发环境中）。于是看了web.py，非常简洁，url route和db操作的语句很很棒，还可以方便的搭配使用jinja的模板系统。 用web.py官网下的评论讲，真是恰到好处： &#8220;Django lets you write web apps in Django. TurboGears lets you write web apps in TurboGears. Web.py lets you write web apps in Python.&#8221; 所以现在这版的gdicts.com又是跑在web.py框架下了。经历了从django到flask到web.py的三重折腾，不过之后应该会关注于加功能了，不会再折腾框架了。]]></description>
			<content:encoded><![CDATA[<p>urh，人生在于折腾。用flask重写了gdicts之后，因为不满意flask的url route机制和规则，也觉得用sqlalchemy的那套东西有点臃肿，（感觉sqlalchemy只能作为orm届的标准，却很少投入到实际的开发环境中）。于是看了<a href="http://webpy.org" target="_blank">web.py</a>，非常简洁，url route和db操作的语句很很棒，还可以方便的搭配使用jinja的模板系统。</p>
<p>用web.py官网下的评论讲，真是恰到好处：</p>
<blockquote><p>
&#8220;Django lets you write web apps in Django. TurboGears lets you write web apps in TurboGears. Web.py lets you write web apps in Python.&#8221;
</p></blockquote>
<p>所以现在这版的gdicts.com又是跑在web.py框架下了。经历了从django到flask到web.py的三重折腾，不过之后应该会关注于加功能了，不会再折腾框架了。</p>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/509/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>flask重写gdicts</title>
		<link>http://web2.0coder.com/archives/506</link>
		<comments>http://web2.0coder.com/archives/506#comments</comments>
		<pubDate>Tue, 14 Feb 2012 13:39:46 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[server]]></category>
		<category><![CDATA[gdicts]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=506</guid>
		<description><![CDATA[之前的版本是用的django，一直觉得django太笨重了，很多东西做起来绑手绑脚。 于是这两天用了轻量级的框架flask，重写了gdicts, flask + sqlalchemy + jinja2 ，用起来还是相当顺手的。现在线上的这个版本已经是flask的了。]]></description>
			<content:encoded><![CDATA[<p>之前的版本是用的<a href="http://djangoproject.com/" target="_blank">django</a>，一直觉得django太笨重了，很多东西做起来绑手绑脚。</p>
<p>于是这两天用了轻量级的框架<a href="http://flask.pocoo.org/" target="_blank">flask</a>，重写了gdicts, flask + sqlalchemy + jinja2 ，用起来还是相当顺手的。现在线上的这个版本已经是flask的了。</p>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/506/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iBooks Author</title>
		<link>http://web2.0coder.com/archives/487</link>
		<comments>http://web2.0coder.com/archives/487#comments</comments>
		<pubDate>Mon, 23 Jan 2012 04:09:15 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[ibooks]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=487</guid>
		<description><![CDATA[之前我在Twitter上说，在stanford做了这期online course之后，硅谷可能会诞生一个做在线教育的企业。虽然在stanford的online course之前udemy.com已经出来，但是一直推广不够，也没有配套的工具，一直是不愠不火。 一直以来都觉得在互联网上，在线教育是一片蓝海，也相当看好这一块的市场。但apple出app store的时候就象这块如果和在线教育结合起来，也有个edu store什么的，象任何人都可以做app一样，任何人也可以教学视频，然后用户去购买。 虽然想到可能会诞生伟大的网站推广在线教育（当时想或许youtube比较有可能，手里有大量的视频技术和资源，都是现成的），到了12年1月，没想到苹果倒现行一步了，做了这个iBooks Author。Norvig定律说，“当一个产品的市场占有率超过50%，就不要在想让这个产品翻番了。” 听起来象废话，但是很多公司会忽略这点，还在原来的领域深耕细作，期望有很高的提升。对苹果来讲，之前和教育产业的合作不过是以学生价卖几台电脑或者直接提供电脑供科研使用，几乎都是硬件层面的合作，现在出了iAuthor，已经是染指“教科书”层面上的软件了，已经是打算开辟这块新的蓝海了，任何人都可以发表，这是用了平民大众的智慧，跟当时web2.0一样。以前出版本书要各种步骤，现在只要写好了点&#8221;Publish&#8221;就行了（所以这也可能会导致iBooks store将很快在国内被墙不可用）。 下了这个试用了一下： 1，新建一本书，编辑Book Title，Intro Media（可以插入介绍这本书的视频） 2，orientation，可以以横版的方式或者竖版的方式编辑书 3，media，编辑书时可以插入各种media，包括keynote，video这种。 4，全部编辑完后可以点Preview预览和Publish到iBooks Store，其中Preview需要让iPad连接上电脑。Preview时可以看到在iBooks的书架上看到自己编辑的这本书。 整个工具还是很好用的。若国内有公司也要走在线教育这条路，可以先仿udemy。豆瓣或许可以，本来就是靠小清新的文化起家的，比做阿尔法城什么的强多了；优酷可能也行，如果要做，也会行动比较快，毕竟已有的视频服务器资源；或者有风投投我也行。 &#160; &#8211; EOF &#8211;]]></description>
			<content:encoded><![CDATA[<p>之前我在Twitter上说，在stanford做了这期online course之后，硅谷可能会诞生一个做在线教育的企业。虽然在stanford的online course之前udemy.com已经出来，但是一直推广不够，也没有配套的工具，一直是不愠不火。<span id="more-487"></span></p>
<p>一直以来都觉得在互联网上，在线教育是一片蓝海，也相当看好这一块的市场。但apple出app store的时候就象这块如果和在线教育结合起来，也有个edu store什么的，象任何人都可以做app一样，任何人也可以教学视频，然后用户去购买。</p>
<p>虽然想到可能会诞生伟大的网站推广在线教育（当时想或许youtube比较有可能，手里有大量的视频技术和资源，都是现成的），到了12年1月，没想到苹果倒现行一步了，做了这个iBooks Author。Norvig定律说，“当一个产品的市场占有率超过50%，就不要在想让这个产品翻番了。” 听起来象废话，但是很多公司会忽略这点，还在原来的领域深耕细作，期望有很高的提升。对苹果来讲，之前和教育产业的合作不过是以学生价卖几台电脑或者直接提供电脑供科研使用，几乎都是硬件层面的合作，现在出了iAuthor，已经是染指“教科书”层面上的软件了，已经是打算开辟这块新的蓝海了，任何人都可以发表，这是用了平民大众的智慧，跟当时web2.0一样。以前出版本书要各种步骤，现在只要写好了点&#8221;Publish&#8221;就行了（所以这也可能会导致iBooks store将很快在国内被墙不可用）。</p>
<p>下了这个试用了一下：</p>
<p><a href="http://web2.0coder.com/wp-content/uploads/2012/01/iauthor_1.jpg"><img class="alignnone size-full wp-image-499" title="iauthor_1" src="http://web2.0coder.com/wp-content/uploads/2012/01/iauthor_1.jpg" alt="" width="797" height="558" /></a></p>
<p>1，新建一本书，编辑Book Title，Intro Media（可以插入介绍这本书的视频）</p>
<p>2，orientation，可以以横版的方式或者竖版的方式编辑书</p>
<p>3，media，编辑书时可以插入各种media，包括keynote，video这种。</p>
<p>4，全部编辑完后可以点Preview预览和Publish到iBooks Store，其中Preview需要让iPad连接上电脑。Preview时可以看到在iBooks的书架上看到自己编辑的这本书。</p>
<p><a href="http://web2.0coder.com/wp-content/uploads/2012/01/ipad-ibooks1.png"><img class="alignnone size-full wp-image-494" title="ipad-ibooks" src="http://web2.0coder.com/wp-content/uploads/2012/01/ipad-ibooks1.png" alt="" width="624" height="436" /></a></p>
<p>整个工具还是很好用的。若国内有公司也要走在线教育这条路，可以先仿udemy。豆瓣或许可以，本来就是靠小清新的文化起家的，比做阿尔法城什么的强多了；优酷可能也行，如果要做，也会行动比较快，毕竟已有的视频服务器资源；或者有风投投我也行。</p>
<p>&nbsp;</p>
<p>&#8211; EOF &#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/487/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gdicts chrome extension</title>
		<link>http://web2.0coder.com/archives/479</link>
		<comments>http://web2.0coder.com/archives/479#comments</comments>
		<pubDate>Wed, 18 Jan 2012 14:21:58 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[app]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[gdicts]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=479</guid>
		<description><![CDATA[这两天做了个gdicts.com的chrome浏览器插件，点击这里下载。 截图如下：]]></description>
			<content:encoded><![CDATA[<p>这两天做了个<a title="gdicts.com" href="http://gdicts.com" target="_blank">gdicts.com</a>的chrome浏览器插件，<a title="gdicts.crx" href="http://download.0coder.com/chromext/gdicts.crx" target="_blank">点击这里下载</a>。</p>
<p>截图如下：</p>
<p><span id="more-479"></span></p>
<p><a href="http://web2.0coder.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-18-at-下午10.09.05.png"><img class="alignnone size-full wp-image-480" style="border-image: initial; margin-top: 10px; margin-bottom: 10px; margin-left: 5px; margin-right: 5px; border-width: 1px; border-color: #cccccc; border-style: solid;" title="Screen Shot 2012-01-18 at 下午10.09.05" src="http://web2.0coder.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-18-at-下午10.09.05.png" alt="" width="725" height="96" /></a></p>
<p><a href="http://web2.0coder.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-18-at-下午10.11.19.png"><img class="alignnone size-full wp-image-481" style="border-image: initial; margin-top: 10px; margin-bottom: 10px; margin-left: 5px; margin-right: 5px; border-width: 1px; border-color: #CCC; border-style: solid;" title="Screen Shot 2012-01-18 at 下午10.11.19" src="http://web2.0coder.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-18-at-下午10.11.19.png" alt="" width="696" height="464" /></a></p>
<p><a href="http://web2.0coder.com/wp-content/uploads/2012/01/333.png"><img class="alignnone size-full wp-image-483" style="border-image: initial; margin-top: 10px; margin-bottom: 10px; margin-left: 5px; margin-right: 5px; border-width: 1px; border-color: #ccc; border-style: solid;" title="333" src="http://web2.0coder.com/wp-content/uploads/2012/01/333.png" alt="" width="742" height="529" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/479/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>xDouRec chrome extension</title>
		<link>http://web2.0coder.com/archives/473</link>
		<comments>http://web2.0coder.com/archives/473#comments</comments>
		<pubDate>Sun, 15 Jan 2012 09:45:18 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[ext]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[chromeext]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=473</guid>
		<description><![CDATA[豆瓣从改版首页之后，登录完发现“你可能喜欢”的条目，推荐精准度太差，对我来说大都是八竿子打不着的东西。 于是做了这个chrome 插件，安装之后再刷新下首页会发现精准度立刻上去了！！！ 下载这个chrome插件：xDouRec.crx &#160;]]></description>
			<content:encoded><![CDATA[<p>豆瓣从改版首页之后，登录完发现“你可能喜欢”的条目，推荐精准度太差，对我来说大都是八竿子打不着的东西。</p>
<p>于是做了这个<a title="xDouRec" href="http://download.0coder.com/chromext/xDouRec.crx" target="_blank">chrome 插件</a>，安装之后再刷新下首页会发现精准度立刻上去了！！！</p>
<p><a title="xDouRec" href="http://download.0coder.com/chromext/xDouRec.crx" target="_blank">下载这个chrome插件：xDouRec.crx</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/473/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>gdicts开发历史</title>
		<link>http://web2.0coder.com/archives/459</link>
		<comments>http://web2.0coder.com/archives/459#comments</comments>
		<pubDate>Tue, 03 Jan 2012 15:18:57 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[gdicts]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=459</guid>
		<description><![CDATA[2012年元旦这三天，零零碎碎拾起了之前做的gdicts.com，新build一次。（新的一年从lean startup开始） 去年8月google关停了google dictionary，我注册了这个域名，并且使用unofficial api基本实现了当时google dictionary的功能，当时的unofficial api还是很全的，提供原dictionary各语言之间的翻译。当时build这个网站只要使用jsonp调用接口，写好callback函数就行。不需要任何后台动态程序，基本就是个前台网站，整个架在我的破linode机器(512MB内存)上。 这是version 1.x 时的样子，图标是使用某可以在线生成google logo样式的网站做的： &#160; 后来读了《数据之美》(Beautiful Data)，里面有一章是Peter Norvig （是的，就是Google研究院大名鼎鼎的院长老师）写的使用概率来做单词纠错的文章，使用里面的思想，加上python 的tornado web，做了一个单词纠错服务，于是有了第二版，powered by django （整个还没有用到数据库，纠错服务程序daemon只需要初始化时读单词的文本）： 想到既然是使用的google 的 unofficial api，可能就会某天关停，然后就抓下来了常用的6w多个英文单词的中文释义。果然到11年12月，我再去用现在的网站查的时候，发现已经不能搜出英文的中文释义了，所以这时我用回了之前抓好的6w+的中文释义，load into mysql，add memcache（用了我之前写的libmemcache的python包），加了sitemap，重新做了UI（包括下载了catull字体，用fireworks做了logo效果），重做了favicon.ico（btw，mac上brew可以直接install png2ico）使用html5的audio完整支持了iPad发音，于是有了现在的第三版，btw，我相当喜欢这版的Georgia字体，看起来非常舒服： &#160; &#160; &#160; 还没做的是解析返回的web definition和用户收藏功能，以后可能会考虑加进去。 &#160;]]></description>
			<content:encoded><![CDATA[<p>2012年元旦这三天，零零碎碎拾起了之前做的gdicts.com，新build一次。（新的一年从lean startup开始）</p>
<p><span id="more-459"></span></p>
<p>去年8月google关停了google dictionary，我注册了这个域名，并且使用unofficial api基本实现了当时google dictionary的功能，当时的unofficial api还是很全的，提供原dictionary各语言之间的翻译。当时build这个网站只要使用jsonp调用接口，写好callback函数就行。不需要任何后台动态程序，基本就是个前台网站，整个架在我的破linode机器(512MB内存)上。</p>
<p>这是version 1.x 时的样子，图标是使用某可以在线生成google logo样式的网站做的：</p>
<p><a href="http://web2.0coder.com/wp-content/uploads/2012/01/version1.x1.png"><img class="alignnone size-full wp-image-461" title="version1.x" src="http://web2.0coder.com/wp-content/uploads/2012/01/version1.x1.png" alt="" width="708" height="187" /></a></p>
<p>&nbsp;</p>
<p>后来读了《数据之美》(Beautiful Data)，里面有一章是Peter Norvig （是的，就是Google研究院大名鼎鼎的院长老师）写的使用概率来做<a href="norvig.com/ngrams/" target="_blank">单词纠错的文章</a>，使用里面的思想，加上python 的tornado web，做了一个单词纠错服务，于是有了第二版，powered by django （整个还没有用到数据库，纠错服务程序daemon只需要初始化时读单词的文本）：</p>
<p><a href="http://web2.0coder.com/wp-content/uploads/2012/01/version2.x.png"><img class="alignnone size-full wp-image-462" title="version2.x" src="http://web2.0coder.com/wp-content/uploads/2012/01/version2.x.png" alt="" width="720" height="296" /></a></p>
<p>想到既然是使用的google 的 unofficial api，可能就会某天关停，然后就抓下来了常用的6w多个英文单词的中文释义。果然到11年12月，我再去用现在的网站查的时候，发现已经不能搜出英文的中文释义了，所以这时我用回了之前抓好的6w+的中文释义，load into mysql，add memcache（用了我之前写的libmemcache的python包），加了sitemap，重新做了UI（包括下载了catull字体，用fireworks做了logo效果），重做了favicon.ico（btw，mac上brew可以直接install png2ico）使用html5的audio完整支持了iPad发音，于是有了现在的第三版，btw，我相当喜欢这版的Georgia字体，看起来非常舒服：</p>
<p><a href="http://web2.0coder.com/wp-content/uploads/2012/01/version3.x.png"><img class="alignnone size-full wp-image-463" title="version3.x" src="http://web2.0coder.com/wp-content/uploads/2012/01/version3.x.png" alt="" width="744" height="318" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>还没做的是解析返回的web definition和用户收藏功能，以后可能会考虑加进去。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/459/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>提升protobuf-python的解包/封包性能</title>
		<link>http://web2.0coder.com/archives/454</link>
		<comments>http://web2.0coder.com/archives/454#comments</comments>
		<pubDate>Wed, 16 Nov 2011 10:27:28 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[server]]></category>
		<category><![CDATA[protobuf]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=454</guid>
		<description><![CDATA[今天一台跑数据中转的服务器cpu满了，这个服务器的主要任务是接收网络数据包，用protobuf解包，取出数据做xxoo的事后，封成一个新的包发给后端服务器。 这个中转服务器是python做的，cpu的主要耗时在对网络数据包频繁的解包封包。也就是protobuf里的ParseFromString（解包）和SerializeToString（封包）函数。因为这两个函数均是python实现的，所以效率比较低。 既然是cpu问题，想到的就是把这块改成调用c函数，直接python调用c实现的so。然后就去找有没有可以生成.so的包，搜到一个：protocyt (http://evgenus.github.com/protocyt/) ，这个包是基于cython做的。 正当要试用的时候，关爷来告诉了一个更快的方法： 进protobuf源包的python目录： cd protobuf-2.4.1/python/ 增加一个环境变量： export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp 重新build protobuf的python包： python setup.py build 可以看到输出中多了一个_net_proto2___python.so ，这个也就是proto python的c实现 然后安装这个so python setup.py install 接下来，在你的处理脚本中也增加这个环境变量，例如之前跑python处理protobuf的脚本名称叫python a.py，现在在跑这行命令之前，同样先增加环境变量： export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp 然后 python a.py 此时查看你的python a.py进程所加载的so，就多了一个_net_proto2___python.so，这表示现在的解包封包函数已经用了这个cpp版的实现了，效果很明显，大概可以提升5倍。以我们服务器为例，cpu的负载从60%降到了12%。 关爷说他们之前还用了psyco（http://psyco.sourceforge.net/）来提升效率，大概是2倍，所以两种方法结合可以提升效率大概10倍。psyco之前我们在hi系统中对便签的解析也用过，也是很方便，貌似只要两行代码就行了。可惜的是它不支持64位系统，只好罢了。 至于protocyt的表现就没再测试了，因为还依赖于cython和jinja2，比较麻烦，还是这种原始protobuf包里就支持的好用。]]></description>
			<content:encoded><![CDATA[<p>今天一台跑数据中转的服务器cpu满了，这个服务器的主要任务是接收网络数据包，用protobuf解包，取出数据做xxoo的事后，封成一个新的包发给后端服务器。</p>
<p>这个中转服务器是python做的，cpu的主要耗时在对网络数据包频繁的解包封包。也就是protobuf里的ParseFromString（解包）和SerializeToString（封包）函数。因为这两个函数均是python实现的，所以效率比较低。<span id="more-454"></span></p>
<p>既然是cpu问题，想到的就是把这块改成调用c函数，直接python调用c实现的so。然后就去找有没有可以生成.so的包，搜到一个：protocyt (<a href="http://evgenus.github.com/protocyt/" target="_blank">http://evgenus.github.com/protocyt/</a>) ，这个包是基于cython做的。</p>
<p>正当要试用的时候，关爷来告诉了一个更快的方法：</p>
<p>进protobuf源包的python目录：<br />
<code>cd protobuf-2.4.1/python/</code><br />
增加一个环境变量：<br />
<code>export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp</code><br />
重新build protobuf的python包：<br />
<code>python setup.py build</code><br />
可以看到输出中多了一个_net_proto2___python.so ，这个也就是proto python的c实现<br />
然后安装这个so<br />
<code>python setup.py install</code></p>
<p>接下来，在你的处理脚本中也增加这个环境变量，例如之前跑python处理protobuf的脚本名称叫python a.py，现在在跑这行命令之前，同样先增加环境变量：<br />
<code>export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp</code><br />
然后 python a.py</p>
<p>此时查看你的python a.py进程所加载的so，就多了一个_net_proto2___python.so，这表示现在的解包封包函数已经用了这个cpp版的实现了，效果很明显，大概可以提升5倍。以我们服务器为例，cpu的负载从60%降到了12%。</p>
<p>关爷说他们之前还用了psyco（<a href="http://psyco.sourceforge.net/" target="_blank">http://psyco.sourceforge.net/</a>）来提升效率，大概是2倍，所以两种方法结合可以提升效率大概10倍。psyco之前我们在hi系统中对便签的解析也用过，也是很方便，貌似只要两行代码就行了。可惜的是它不支持64位系统，只好罢了。</p>
<p>至于protocyt的表现就没再测试了，因为还依赖于cython和jinja2，比较麻烦，还是这种原始protobuf包里就支持的好用。</p>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/454/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>黑客与画家 摘录2</title>
		<link>http://web2.0coder.com/archives/446</link>
		<comments>http://web2.0coder.com/archives/446#comments</comments>
		<pubDate>Thu, 29 Sep 2011 14:32:25 +0000</pubDate>
		<dc:creator>Vonbo</dc:creator>
				<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://web2.0coder.com/?p=446</guid>
		<description><![CDATA[接上一篇《黑客与画家》摘录1： 第六章，如何创造财富，ps，这是我最喜欢的一章： 最好的办法就是自己创业，或者加入创业公司。几百年来，这一直是致富的可靠途径。 你不再是低强度地工作四十年，而是以极限强度工作四年。 如果一个优秀黑客在大公司的身价是每年8万美元，那么一个勤奋工作，摆脱杂事干扰的聪明黑客，他的工作相当于每年新创造300万美元的价值。 如果你想赚100万美元，就不得不忍受相当于100万美元的痛苦。 任何公司的成功历程中，运气都是一个很大的随机因素。 致富的方法有许多种，本文只谈论其中的一种，也就是通过创造有价值的东西在市场上得到回报，从而致富。通过创造有价值的东西而致富，这种方法的优势不仅仅在于它是合法的，还在于它更简单。你只需要做出别人需要的东西就可以了。 财富与金钱并不是同义词。财富存在的时间与人类历史一样长久，甚至更长久，事实上蚂蚁也拥有财富。金钱是一种历史相对较短的发明。财富是最基本的东西。我们需要的东西就是财富。财富才是你的目标，金钱不是。 大多数生意的目的是为了创造财富，做出人们真正需要的东西。 如果你想要创造财富，那么你应该抱着特别怀疑的态度，去思考那些着眼于你自己感兴趣的东西的商业计划。对于自己感兴趣的东西，你会觉得它们很有价值，但是它们恰恰最不可能与他人眼中有价值的东西发生重合。 目前还存在的最大的手工艺人就是程序员。 公司就是许多人聚在一起创造财富的地方，能够制造更多人们需要的东西。程序员真正地面对产品，一行行地写代码把产品做出来。所以，在程序员看来，事情再明显不过，财富就是被做出来的，而不是某个想象出来的神秘人物分发的大饼。 我们这个世界，你向下沉沦或者向上奋进都取决于你自己，不能把原因推给外界。 经过这么多年，你已经习惯了自己属于这样一群人，早上全部起床，都来到同样几栋建筑物，开始做自己正常情况下没兴趣做的事情。 一个大学毕业生总是想“我需要一份工作”，别人也是这么对他说的，好像变成某个组织的成员是一件多么重要的事情。更直接的表达方式应该是，“你需要去做一些人们需要的东西”。即使不加入公司，你也能做到。公司不过是一群人在一起工作，共同做出某种人们需要的东西。真正重要的是做出人们需要的东西，而不是加入某个公司。 大公司最大的困扰就是无法准确测量每个员工的贡献。大多数时候它只是在瞎猜。在大公司中，你只要一般性地努力工作，就能得到意料之中的薪水。 如果你有一个令你感到安全的工作，你是不会致富的，因为没有危险，就几乎等于没有可放大性。 乔布斯曾经说过，创业的失败取决于最早加入公司的那十几个人。我基本同意这个观点，虽然我觉得真正决定成败的其实只是前五人。 小团队在如今这个时代可谓如鱼得水，因为他们不受官僚主义和繁琐管理制度的拖累。// 在中国还有审查制度啊。。。 高科技 = 可放大性。假定软件有两个候选的新功能，它们创造的商业价值完全相同，那么我们总是选择较困难的那个功能。不是因为这个功能能带来更多的收入，而是因为它比较难。 如果你有一个新点子去找vc，问他是否投资，他首先就会问你几个问题，其中之一就是其它人复制你的模式是否很困难。也就是说，你为竞争对手设置的壁垒有多高。 创业公司象蚊子一样，不带有任何防御，就是为了达到一个目的而活着。 怎样才能把公司卖掉呢？大多数时候，促成买方掏钱的最好办法不是让买家看到有获利的可能，而是让他们感到失去机会的恐惧。对于买家来说，最强的收购动机就是看到竞争对手可能收购你。次强的动机则是让他们担心如果现在不买你，你的高速成长将是的未来的收购耗资巨大，甚至你本身可能变成一个他们的竞争对手。 你越能满足顾客的需要，你创造的财富也就越多。]]></description>
			<content:encoded><![CDATA[<p>接<a href="http://web2.0coder.com/archives/438" target="_blank">上一篇</a>《黑客与画家》摘录1：</p>
<p><span id="more-446"></span>第六章，如何创造财富，ps，这是我最喜欢的一章：</p>
<ul>
<li><span style="color: #ff0000;"><strong>最好的办法就是自己创业，或者加入创业公司。几百年来，这一直是致富的可靠途径</strong></span>。</li>
<li>你不再是低强度地工作四十年，而是以极限强度工作四年。</li>
<li>如果一个优秀黑客在大公司的身价是每年8万美元，那么一个勤奋工作，摆脱杂事干扰的聪明黑客，他的工作相当于每年新创造300万美元的价值。</li>
<li>如果你想赚100万美元，就不得不忍受相当于100万美元的痛苦。</li>
<li>任何公司的成功历程中，运气都是一个很大的随机因素。</li>
<li>致富的方法有许多种，本文只谈论其中的一种，也就是通过创造有价值的东西在市场上得到回报，从而致富。通过创造有价值的东西而致富，这种方法的优势不仅仅在于它是合法的，还在于它更简单。你只需要做出别人需要的东西就可以了。</li>
<li>财富与金钱并不是同义词。财富存在的时间与人类历史一样长久，甚至更长久，事实上蚂蚁也拥有财富。金钱是一种历史相对较短的发明。财富是最基本的东西。我们需要的东西就是财富。财富才是你的目标，金钱不是。</li>
<li>大多数生意的目的是为了创造财富，做出人们真正需要的东西。</li>
<li>如果你想要创造财富，那么你应该抱着特别怀疑的态度，去思考那些着眼于你自己感兴趣的东西的商业计划。对于自己感兴趣的东西，你会觉得它们很有价值，但是它们恰恰最不可能与他人眼中有价值的东西发生重合。</li>
<li>目前还存在的最大的手工艺人就是程序员。</li>
<li>公司就是许多人聚在一起创造财富的地方，能够制造更多人们需要的东西。程序员真正地面对产品，一行行地写代码把产品做出来。所以，在程序员看来，事情再明显不过，财富就是被做出来的，而不是某个想象出来的神秘人物分发的大饼。</li>
<li>我们这个世界，你向下沉沦或者向上奋进都取决于你自己，不能把原因推给外界。</li>
<li>经过这么多年，你已经习惯了自己属于这样一群人，早上全部起床，都来到同样几栋建筑物，开始做自己正常情况下没兴趣做的事情。</li>
<li><strong><span style="color: #ff0000;">一个大学毕业生总是想“我需要一份工作”，别人也是这么对他说的，好像变成某个组织的成员是一件多么重要的事情。更直接的表达方式应该是，“你需要去做一些人们需要的东西”。即使不加入公司，你也能做到。公司不过是一群人在一起工作，共同做出某种人们需要的东西。真正重要的是做出人们需要的东西，而不是加入某个公司。</span></strong></li>
<li>大公司最大的困扰就是无法准确测量每个员工的贡献。大多数时候它只是在瞎猜。在大公司中，你只要一般性地努力工作，就能得到意料之中的薪水。</li>
<li>如果你有一个令你感到安全的工作，你是不会致富的，因为没有危险，就几乎等于没有可放大性。</li>
<li>乔布斯曾经说过，创业的失败取决于最早加入公司的那十几个人。我基本同意这个观点，虽然我觉得真正决定成败的其实只是前五人。</li>
<li>小团队在如今这个时代可谓如鱼得水，因为他们不受官僚主义和繁琐管理制度的拖累。// 在中国还有审查制度啊。。。</li>
<li>高科技 = 可放大性。假定软件有两个候选的新功能，它们创造的商业价值完全相同，那么我们总是选择较困难的那个功能。不是因为这个功能能带来更多的收入，而是因为它比较难。</li>
<li>如果你有一个新点子去找vc，问他是否投资，他首先就会问你几个问题，其中之一就是其它人复制你的模式是否很困难。也就是说，你为竞争对手设置的壁垒有多高。</li>
<li>创业公司象蚊子一样，不带有任何防御，就是为了达到一个目的而活着。</li>
<li>怎样才能把公司卖掉呢？大多数时候，促成买方掏钱的最好办法不是让买家看到有获利的可能，而是让他们感到失去机会的恐惧。对于买家来说，最强的收购动机就是看到竞争对手可能收购你。次强的动机则是让他们担心如果现在不买你，你的高速成长将是的未来的收购耗资巨大，甚至你本身可能变成一个他们的竞争对手。</li>
<li>你越能满足顾客的<span style="text-decoration: underline;">需要，你创造的财富也就越多。</span></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://web2.0coder.com/archives/446/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

