<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Goodspeed</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/404/rss</id><updated>2012-04-10T07:34:29Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/404/rss"/><entry><id>http://www.cnblogs.com/goodspeed/archive/2012/04/10/2440664.html</id><title type="text">Ror安装过程</title><summary type="text">1 安装Ruby1.9.1sudo apt-get install ruby1.9.1-full安装后gem也安装好了。是1.8.212 安装railssudo gem install rails安装后是3.2.3装完运行一下bundle install还没完，还得装一下nodejssudo apt-get install nodejs以上所有代码是在ubuntu 11.10运行的。从这几天的感受来看，Ror比较让我失望，框架太重了。我只写个helloworld，搞出一堆文件，而且安装太麻烦，又是什么execjs,又是jquery的，我最怕这种大而全的框架。那个gem慢不说，还没有进度条。Ro</summary><published>2012-04-10T07:33:00Z</published><updated>2012-04-10T07:33:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2012/04/10/2440664.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2012/04/10/2440664.html"/><content type="html">&lt;p&gt;1 安装Ruby1.9.1&lt;/p&gt;&lt;p&gt;sudo apt-get install ruby1.9.1-full&lt;/p&gt;&lt;p&gt;安装后gem也安装好了。是1.8.21&lt;/p&gt;&lt;p&gt;2 安装rails&lt;/p&gt;&lt;p&gt;sudo gem install rails&lt;/p&gt;&lt;p&gt;安装后是3.2.3&lt;/p&gt;&lt;p&gt;装完运行一下&lt;/p&gt;&lt;p&gt;bundle install&lt;/p&gt;&lt;p&gt;还没完，还得装一下nodejs&lt;/p&gt;&lt;p&gt;sudo apt-get install nodejs&lt;/p&gt;&lt;p&gt;以上所有代码是在ubuntu 11.10运行的。&lt;/p&gt;&lt;p&gt;从这几天的感受来看，Ror比较让我失望，框架太重了。我只写个helloworld，搞出一堆文件，而且安装太麻烦，又是什么execjs,又是jquery的，我最怕这种大而全的框架。&lt;/p&gt;&lt;p&gt;那个gem慢不说，还没有进度条。&lt;/p&gt;&lt;p&gt;Ror的安装还只能拿这个gem装，真是蛋痛呀。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/goodspeed/aggbug/2440664.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/goodspeed/archive/2012/04/10/2440664.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/goodspeed/archive/2012/03/17/2404172.html</id><title type="text">普通年金终值和现值计算（白话版）</title><summary type="text">（本人非专业人士，只作学习笔记，不对正确性负责）普通年金就是一年存一笔钱，加上利息。类似于零存整取。计算终值的意思就是零存几年后，最后能拿多少钱。例如：小明计划一年存100元，银行利率是10%，问三年后本息合计多少？详细分解如下 帐户金额年底获得利息100102102133133.1364.1或通过公式 P4= 100 * (((1 + 10%)4-1) / 0.1)) = 364.1注明：因为普通年金是每期期末发生，而零存整取是期初发生，所以公式年限需要加一。计算现值就是计算终值反过来推。白话解释就是，如果想最后拿到多少钱，现在应该每年投多少钱呢？例如：某人出国3年，请你代付房租，每年租.</summary><published>2012-03-17T15:24:00Z</published><updated>2012-03-17T15:24:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2012/03/17/2404172.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2012/03/17/2404172.html"/><content type="html">&lt;p&gt;（本人非专业人士，只作学习笔记，不对正确性负责）&lt;/p&gt;&lt;p&gt;普通年金就是一年存一笔钱，加上利息。类似于零存整取。&lt;/p&gt;&lt;p&gt;计算终值的意思就是零存几年后，最后能拿多少钱。&lt;/p&gt;&lt;p&gt;例如：小明计划一年存100元，银行利率是10%，问三年后本息合计多少？&lt;/p&gt;&lt;p&gt;详细分解如下&lt;/p&gt;&lt;table style="width: 176px;" border="0" cellspacing="0" cellpadding="0"&gt;&lt;colgroup&gt;&lt;col width="72" /&gt; &lt;col width="104" /&gt; &lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="xl65" width="72" height="18"&gt;帐户金额&lt;/td&gt;&lt;td class="xl65" width="104"&gt;年底获得利息&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="xl65" align="right" height="18"&gt;100&lt;/td&gt;&lt;td class="xl65" align="right"&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="xl65" align="right" height="18"&gt;210&lt;/td&gt;&lt;td class="xl65" align="right"&gt;21&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="xl65" align="right" height="18"&gt;331&lt;/td&gt;&lt;td class="xl65" align="right"&gt;33.1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="xl65" align="right" height="18"&gt;364.1&lt;/td&gt;&lt;td class="xl65"&gt;　&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;或通过公式 P&lt;sub&gt;&lt;span style="font-size: 12px; line-height: 15px;"&gt;4&lt;/span&gt;&lt;/sub&gt;&amp;nbsp;= 100 * (((1 + 10%)&lt;sup&gt;&lt;span style="font-size: 12px; line-height: 15px;"&gt;4&lt;/span&gt;&lt;/sup&gt;-1) / 0.1)) = 364.1&lt;/p&gt;&lt;p&gt;注明：因为普通年金是每期期末发生，而零存整取是期初发生，所以公式年限需要加一。&lt;/p&gt;&lt;p&gt;计算现值就是计算终值反过来推。白话解释就是，如果想最后拿到多少钱，现在应该每年投多少钱呢？&lt;/p&gt;&lt;p&gt;例如：某人出国3年，请你代付房租，每年租金100元，设银行存款利率10%，他应当现在给你在银行存入多少钱？&lt;/p&gt;&lt;table style="width: 206px;" border="0" cellspacing="0" cellpadding="0"&gt;&lt;colgroup&gt;&lt;col width="102" /&gt; &lt;col width="104" /&gt; &lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="xl65" width="102" height="18"&gt;帐户金额&lt;/td&gt;&lt;td class="xl65" width="104"&gt;年底获得利息&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="xl65" align="right" height="18"&gt;248.6852&lt;/td&gt;&lt;td class="xl65" align="right"&gt;24.86852&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="xl65" align="right" height="18"&gt;173.55372&lt;/td&gt;&lt;td class="xl65" align="right"&gt;17.355372&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="xl65" align="right" height="18"&gt;90.909092&lt;/td&gt;&lt;td class="xl65" align="right"&gt;9.0909092&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="xl65" align="right" height="18"&gt;100.0000012&lt;/td&gt;&lt;td class="xl65"&gt;　&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;将上面的参数带入公式 PV = 100 * (1-1/(1+10%)&lt;sup&gt;3&lt;/sup&gt;) / 10% = 248.67&lt;/p&gt;&lt;img src="http://www.cnblogs.com/goodspeed/aggbug/2404172.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/goodspeed/archive/2012/03/17/2404172.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/goodspeed/archive/2011/12/31/2309211.html</id><title type="text">2011总结</title><summary type="text">2011年还有一个小时左右就要过去了。 以前早早就会做总结，今年只在这个时候才有时间想一想，还是总结总结吧。2011年对我讲是复杂的一年，很多故事、很多成长、很多经历。想到了写到了吧。家庭雨晨现在比年初长大了不少，懂的事情越来越多，话也越来越多。她开始在用她的大脑思考和理解这个世界。我看到她第一次自己尝试独立行走，我听到她第一次叫爸爸。我努力记住所有这些永远的短暂。刚开始，因为照顾她让我非常疲惫，自己的个人时间几乎完全被她的各种各样的琐事占据。在心里我甚至埋怨她妈妈为什么不能把这份工作都承担下来。但是今天，我越来越觉得与她在一起越来越开心，很多时候能从她的行为中看到自己。她已经是我最重要的人之</summary><published>2011-12-31T15:35:00Z</published><updated>2011-12-31T15:35:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2011/12/31/2309211.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2011/12/31/2309211.html"/><content type="html">该文被密码保护。</content></entry><entry><id>http://www.cnblogs.com/goodspeed/archive/2011/12/17/android_start.html</id><title type="text">Android开发，通迅薄的注意事项</title><summary type="text">上周拿到小米。最近一周在尝试开发通迅薄。一方面是系统自带的通迅薄的确有些不爽的地，一方面也是想尝试写一些手机应用。中间碰到两个问题，估计其它人也会碰到，就一并写下。1 效率太慢。网上有大量的帖子（如http://blog.csdn.net/yao_guet/article/details/6626001），先要去查所有联系人（有些人根本没有电话），接着去查电话纪录（一个人可能有多个电的话）。如果你的联系很多，比如像我有600多个联系人，那打开通迅薄差不多要3秒以上（小米的硬件还是很强悍的）。问题的关键就这在两个while上。其实只需要直接查询ContactsContract.CommonDat</summary><published>2011-12-17T14:49:00Z</published><updated>2011-12-17T14:49:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2011/12/17/android_start.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2011/12/17/android_start.html"/><content type="html">&lt;p&gt;上周拿到小米。最近一周在尝试开发通迅薄。一方面是系统自带的通迅薄的确有些不爽的地，一方面也是想尝试写一些手机应用。&lt;/p&gt;&lt;p&gt;中间碰到两个问题，估计其它人也会碰到，就一并写下。&lt;/p&gt;&lt;p&gt;1 效率太慢。&lt;/p&gt;&lt;p&gt;网上有大量的帖子（如&lt;a href="http://blog.csdn.net/yao_guet/article/details/6626001"&gt;http://blog.csdn.net/yao_guet/article/details/6626001&lt;/a&gt;），先要去查所有联系人（有些人根本没有电话），接着去查电话纪录（一个人可能有多个电的话）。如果你的联系很多，比如像我有600多个联系人，那打开通迅薄差不多要3秒以上（小米的硬件还是很强悍的）。问题的关键就这在两个while上。&lt;/p&gt;&lt;p&gt;其实只需要直接查询ContactsContract.CommonDataKinds.Phone.CONTENT_URI就可以拿到DisplayName和PhoneNumber。我想内部很可能只查了一个表就搞定了。&lt;/p&gt;&lt;p&gt;另外，我的应用只需要手机，所以加上以下条件&lt;/p&gt;&lt;p&gt;StringBuffer selection = new StringBuffer()&lt;br /&gt; .append(pn + " NOT LIKE '106%'")&lt;br /&gt; .append(" and substr("+pn+",0,3) != '106'")&lt;br /&gt; .append(" and "+pn + " NOT LIKE '010%'")&lt;br /&gt; .append(" and length("+pn + ") &amp;gt;= 11")&lt;br /&gt; .append(" and ("+pn + " LIKE '1%' or "+pn + " LIKE '01%')");&lt;/p&gt;&lt;p&gt;基本上够我用了。&lt;/p&gt;&lt;p&gt;针对查询速度问题，有熟手自己写AyncQueryHandler。我这种菜鸟没敢尝试。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2 通迅薄拼音排序&lt;/p&gt;&lt;p&gt;网上的例子大部份都是&amp;nbsp;&lt;/p&gt;&lt;p&gt;sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";&lt;/p&gt;&lt;p&gt;本来以为Sqlite和SQL server差不多应该能换那个LOCALIZED，结果都不行。&lt;/p&gt;&lt;p&gt;其实一句话就能搞定&lt;/p&gt;&lt;p&gt;sortOrder = "sort_key_alt";&lt;/p&gt;&lt;p&gt;我想可能在表中有个字段就叫sort_key_alt。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;二个问题都很常见，网上也有很多人问，不过正确答案确不多。另外，Android的API也的确比较乱点，中文资料也很少（个人观点）。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/goodspeed/aggbug/2291431.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/goodspeed/archive/2011/12/17/android_start.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/goodspeed/archive/2011/12/07/git_setup.html</id><title type="text">windows下安装和设置Git客户端</title><summary type="text">1 安装软件msysgithttp://code.google.com/p/msysgit/TortoiseGithttp://code.google.com/p/tortoisegit/2 获取私钥运行Puttygen（开始菜单-&gt;TortoiseGit-&gt;Puttygen）点击上图的“Generale”，稍等片刻选择“Save private key”，将Key保存到你的硬盘（下次直接可以点击“Load”，不用再次生成）。将你的Key发给git admin。</summary><published>2011-12-07T05:14:00Z</published><updated>2011-12-07T05:14:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2011/12/07/git_setup.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2011/12/07/git_setup.html"/><content type="html">&lt;p&gt;1 安装软件&lt;/p&gt;&lt;p&gt;msysgit&lt;/p&gt;&lt;p&gt;http://code.google.com/p/msysgit/&lt;/p&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-869" title="msysgit1" src="http://geryit.com/blog/wp-content/uploads/2010/12/msysgit11.png" alt="" width="498" height="383" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-870" title="msysgit2" src="http://geryit.com/blog/wp-content/uploads/2010/12/msysgit2.png" alt="" width="496" height="383" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-871" title="msysgit3" src="http://geryit.com/blog/wp-content/uploads/2010/12/msysgit3.png" alt="" width="497" height="384" /&gt;&lt;/p&gt;&lt;p&gt;TortoiseGit&lt;/p&gt;&lt;p&gt;http://code.google.com/p/tortoisegit/&lt;/p&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-874" title="tortoisegit1" src="http://geryit.com/blog/wp-content/uploads/2010/12/tortoisegit1.png" alt="" width="491" height="381" /&gt;&lt;/p&gt;&lt;p&gt;2 获取私钥&lt;/p&gt;&lt;p&gt;运行&lt;dfn&gt;Puttygen&lt;/dfn&gt;（开始菜单-&amp;gt;TortoiseGit-&amp;gt;&lt;dfn&gt;Puttygen&lt;/dfn&gt;）&lt;/p&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-911" title="puttygen3" src="http://geryit.com/blog/wp-content/uploads/2010/12/puttygen31.png" alt="" width="477" height="463" /&gt;&lt;/p&gt;&lt;p&gt;点击上图的&amp;ldquo;Generale&amp;rdquo;，稍等片刻&lt;/p&gt;&lt;p&gt;&lt;img class="alignnone size-full wp-image-912" title="puttygen4" src="http://geryit.com/blog/wp-content/uploads/2010/12/puttygen41.png" alt="" width="464" height="401" /&gt;&lt;/p&gt;&lt;p&gt;选择&amp;ldquo;Save private key&amp;rdquo;，将Key保存到你的硬盘（下次直接可以点击&amp;ldquo;Load&amp;rdquo;，不用再次生成）。&lt;/p&gt;&lt;p&gt;将你的Key发给git admin。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/goodspeed/aggbug/2279120.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/goodspeed/archive/2011/12/07/git_setup.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/goodspeed/archive/2011/12/01/nginx_install.html</id><title type="text">手动安装nginx</title><summary type="text">安装gcc编译器sudo apt-get install gcc安装盘pcre库，以支持正则apt-get install libpcre++0安装zlib，支持gzip压缩apt-get install zlib1g-dev安装打包程序apt-get install makewget http://nginx.org/download/nginx-1.0.8.tar.gztar xzvf nginx-1.0.8.tar.gzcd nginx-1.0.8./configure --prefix=/opt/nginx --conf-path=/etc/nginx/nginx.conf --pid</summary><published>2011-12-01T03:28:00Z</published><updated>2011-12-01T03:28:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2011/12/01/nginx_install.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2011/12/01/nginx_install.html"/><content type="html">&lt;p&gt;安装gcc编译器&lt;/p&gt;&lt;p&gt;sudo apt-get install gcc&lt;/p&gt;&lt;p&gt;安装盘pcre库，以支持正则&lt;/p&gt;&lt;p&gt;apt-get install libpcre++0&lt;/p&gt;&lt;p&gt;安装zlib，支持gzip压缩&lt;/p&gt;&lt;p&gt;apt-get install zlib1g-dev&lt;/p&gt;&lt;p&gt;安装打包程序&lt;/p&gt;&lt;p&gt;apt-get install make&lt;/p&gt;&lt;p&gt;wget http://nginx.org/download/nginx-1.0.8.tar.gz&lt;/p&gt;&lt;p&gt;tar xzvf nginx-1.0.8.tar.gz&lt;/p&gt;&lt;p&gt;cd nginx-1.0.8&lt;/p&gt;&lt;p&gt;./configure --prefix=/opt/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log&lt;/p&gt;&lt;p&gt;make&lt;/p&gt;&lt;p&gt;sudo make&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;设置开机启动&lt;/p&gt;&lt;p&gt;wget http://www.cslog.cn/wp-content/uploads/2010/10/nginx.gz&lt;/p&gt;&lt;p&gt;gunzip nginx.gz&lt;/p&gt;&lt;p&gt;sudo mv nginx /etc/init.d&lt;/p&gt;&lt;p&gt;sudo chmod +x /etc/init.d/nginx&lt;/p&gt;&lt;p&gt;sudo update-rc.d -f nginx defaults&lt;/p&gt;&lt;img src="http://www.cnblogs.com/goodspeed/aggbug/2270279.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/goodspeed/archive/2011/12/01/nginx_install.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/goodspeed/archive/2011/11/12/2246764.html</id><title type="text">个人宣言</title><summary type="text">1 家庭第一。永远不放弃不抛弃她们，让她们得到快乐。2 努力工作，永不懈怠。3 积极帮助他人，让他们喜欢自己。4 不轻易许诺，如果许诺那就一定要做到。5 坚持自己是一个正直的人。就算做不到正直，也不去帮助邪恶。6 不做金钱的奴隶。7 保持幽默感</summary><published>2011-11-12T13:16:00Z</published><updated>2011-11-12T13:16:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2011/11/12/2246764.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2011/11/12/2246764.html"/><content type="html">该文被密码保护。</content></entry><entry><id>http://www.cnblogs.com/goodspeed/archive/2011/11/11/epio.html</id><title type="text">在ep.io上建立一个站点</title><summary type="text">ep.io是一个基于python的云托管服务商。创始人Andrew （python最流利web框架Django的主要贡献者），现在的技术层面的支持都是他在。目前是邀请质，你需要留个email给他，他过一段时间就会帮你开通了。现在让我们来看看如何在ep.io上如何写一个Hello world站点。因为不是很喜欢Django那种很重的框架，所以选用Flask.你一步是确保你的机器安装了下面的组件sudo apt-get gitsudo apt-get python-pipsudo apt-get openssh-client安装epio的管理组件pip install epio之后再來就是 dep</summary><published>2011-11-11T09:10:00Z</published><updated>2011-11-11T09:10:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2011/11/11/epio.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2011/11/11/epio.html"/><content type="html">&lt;p&gt;ep.io是一个基于python的云托管服务商。创始人Andrew （python最流利web框架Django的主要贡献者），现在的技术层面的支持都是他在。目前是邀请质，你需要留个email给他，他过一段时间就会帮你开通了。&lt;/p&gt;&lt;p&gt;现在让我们来看看如何在ep.io上如何写一个Hello world站点。因为不是很喜欢Django那种很重的框架，所以选用Flask.&lt;/p&gt;&lt;p&gt;你一步是确保你的机器安装了下面的组件&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;sudo apt-get git&lt;br /&gt;sudo apt-get python-pip&lt;br /&gt;sudo apt-get openssh-client&lt;/div&gt;&lt;p&gt;安装epio的管理组件&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;pip install epio&lt;/div&gt;&lt;p&gt;之后再來就是 deploy 过程中很重要的身份识別匙 SSH Key。如果没有生成过SSH Key，那么需要用下面的保住生成一个&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;ssh-keygen&lt;/div&gt;&lt;p&gt;运行下面的命令来上传&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;epio upload_ssh_key&lt;/div&gt;&lt;p&gt;如果上面一切正常，下面就可以开始写一些Flask的代码了。&lt;/p&gt;&lt;p&gt;如果本地没有安装Flask，运行下面的命令安装&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;pip install Flask&lt;/div&gt;&lt;p&gt;建立一个文件夹&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;mkdir ep&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;建立一个app.py的文件，代码如下&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; flask &lt;span style="color: #0000ff;"&gt;import&lt;/span&gt; Flask&lt;br /&gt;app = Flask(&lt;span style="color: #800080;"&gt;__name__&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;@app.route(&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;def&lt;/span&gt; index():&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Hello from Flask!\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #800080;"&gt;__name__&lt;/span&gt; == &lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;__main__&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;:&lt;br /&gt;    app.run(debug=True)&lt;/div&gt;&lt;p&gt;通过本地测试，看看有没有问题&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;python app.py&lt;/div&gt;&lt;p&gt;如果没有问题，请开始准备发布文件了。&lt;/p&gt;&lt;p&gt;第一个是epio.ini&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #800000;"&gt;wsgi&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;]&lt;/span&gt;&lt;br /&gt;entrypoint = app:app&lt;br /&gt;requirements = requirements.txt&lt;/div&gt;&lt;p&gt;这个requirements文件(requirements.txt)只有一行:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Flask&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;现在就可以发布我们的应用了&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;epio create [optional appname]&lt;br /&gt;epio upload&lt;/div&gt;&lt;p&gt;好了。你可以过过http://appname.ep.io 访问你的应用了！&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/goodspeed/aggbug/2245909.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/goodspeed/archive/2011/11/11/epio.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/goodspeed/archive/2011/11/10/2245079.html</id><title type="text">如何搭建领导班子，最为困难的地方是什么</title><summary type="text">第一个怎么——班子的整体素质怎么提高？对于这个问题，我们组认为要注意方法。我们建议的方法总结起来就是四个字——适时放权。解释一下就在适当的时间和场合，放权给基层的干部和工程师。l 当班子成员的技战术水平比较低或者能力不是很强的时候，团队规模比较小的情况下，可以采用指令性的方式工作，由管理者说了算。比如去年我刚来那会儿，前端页面的局面还是很困难的。一是人员少，连兵带将一共5个人，还有一个要离职；二是新人多，5个人里面只有1个工作超过一年的，其它都是娃娃兵；三是技战术水平有限，大部份团队成员对技术的把握都不是很到位。这个时候就不能乱放权，越放越乱，只能自己盯着做。一方面重要的架构自己亲自上，另一方</summary><published>2011-11-10T15:14:00Z</published><updated>2011-11-10T15:14:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2011/11/10/2245079.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2011/11/10/2245079.html"/><content type="html">该文被密码保护。</content></entry><entry><id>http://www.cnblogs.com/goodspeed/archive/2011/11/08/python_marshal_cPickle.html</id><title type="text">Python中序列化处理之——marshal和cPickle篇</title><summary type="text">#!/usr/bin/python#coding=utf-8import osimport marshal,cPickle"""marshal只能序列化有限的类型而cPickle能够序列化自定义的类型"""class Foo: def __init__(self, name): self.name = name def __str__(self): return self.nameo=range(0,10)L = Foo("Goodspeed")cls = [marshal,cPickle]for c in cls</summary><published>2011-11-08T06:51:00Z</published><updated>2011-11-08T06:51:00Z</updated><author><name>Goodspeed</name><uri>http://www.cnblogs.com/goodspeed/</uri></author><link rel="alternate" href="http://www.cnblogs.com/goodspeed/archive/2011/11/08/python_marshal_cPickle.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/goodspeed/archive/2011/11/08/python_marshal_cPickle.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;!/usr/bin/python&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;coding=utf-8&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;import&lt;/span&gt; os&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;import&lt;/span&gt; marshal,cPickle&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000;"&gt;"""&lt;/span&gt;&lt;span style="color: #800000;"&gt;&lt;br /&gt;marshal只能序列化有限的类型&lt;br /&gt;而cPickle能够序列化自定义的类型&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"""&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Foo:&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;def&lt;/span&gt; &lt;span style="color: #800080;"&gt;__init__&lt;/span&gt;(self, name):&lt;br /&gt;        self.name = name&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;def&lt;/span&gt; &lt;span style="color: #800080;"&gt;__str__&lt;/span&gt;(self):&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; self.name&lt;br /&gt;&lt;br /&gt;o=range(0,10)&lt;br /&gt;&lt;br /&gt;L = Foo(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Goodspeed&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;cls = [marshal,cPickle]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; c &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; cls:&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;print&lt;/span&gt; c.&lt;span style="color: #800080;"&gt;__name__&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;序列化到文件中&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    fi =open(os.path.join(os.getcwd(),&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;fle.txt&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;),&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;wb&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;)&lt;br /&gt;    c.dump(o,fi)&lt;br /&gt;    fi.close()&lt;br /&gt;    &lt;br /&gt;    fi =open(os.path.join(os.getcwd(),&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;fle.txt&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;),&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;rb&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;)&lt;br /&gt;    o1 = c.load(fi)&lt;br /&gt;    fi.close()&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;序列化成字符串&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    d = c.dumps(o)&lt;br /&gt;    o2 = c.loads(d)&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;print&lt;/span&gt; o&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;print&lt;/span&gt; o1&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;print&lt;/span&gt; o2&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/goodspeed/aggbug/2241141.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/goodspeed/archive/2011/11/08/python_marshal_cPickle.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
