<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ECHOutopia的专栏]]></title><description><![CDATA[每天都有进步]]></description><link>https://blog.csdn.net/ECHOutopia</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; ECHOutopia]]></copyright><item><title><![CDATA[一个新手用golang重写python rpc框架总结]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/79718523</link><guid>https://blog.csdn.net/ECHOutopia/article/details/79718523</guid><author>ECHOutopia</author><pubDate>Tue, 27 Mar 2018 20:15:17 +0800</pubDate><description><![CDATA[从前，我是个phper，每天被困在反反复复的增删改查的工作中，后来接触了python后，便对php嗤之以鼻，并且在python中拓宽了眼界，发现了后端世界，于是换了份python游戏服务器的工作，更加后台了。 
python开发久了后，我有些腻了，因为python在我心里不再完美了，它的黑魔法实在太多了，导致python入门简单，精通实在太难，这么多语法糖、黑魔法，他们再以各种组合、各种花样实现各...]]></description><category></category></item><item><title><![CDATA[python常用内值函数算法复杂度]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/69943883</link><guid>https://blog.csdn.net/ECHOutopia/article/details/69943883</guid><author>ECHOutopia</author><pubDate>Mon, 10 Apr 2017 10:48:55 +0800</pubDate><description><![CDATA[之前很长一段时间我计算字典长度都是自己维护一个长度变量，每次字典元素有增减就改变变量，今天发现len()对大多数常见数据结构都是O(1)的，我当时就崩溃了，原来我多此一举了。 
这里是常见数据结构的函数复杂度： 
https://wiki.python.org/moin/TimeComplexity　ｓｔａｃｋｏｖｅｒ相关问题： 
shttp://stackoverflow.com/question]]></description><category></category></item><item><title><![CDATA[concurrent.futures源码解析]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/56287449</link><guid>https://blog.csdn.net/ECHOutopia/article/details/56287449</guid><author>ECHOutopia</author><pubDate>Tue, 21 Feb 2017 16:27:46 +0800</pubDate><description><![CDATA[concurrent.futures模块在异步编程中非常常用，我常用在tornado里用它将同步操作异步化，这么优秀的模块，肯定很好奇它的内部原理的。 
在网上搜了一些资料，感觉附加讲解还不如代码详细，于是就自己去看源码了， 
而源码非常优秀，文件结构也非常简单，只有三个文件：
_base.py：主要定义了一些常量、类、方法等，为thread和process使用
process.py：Process]]></description><category></category></item><item><title><![CDATA[如何使用python写一个操作系统]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/55045848</link><guid>https://blog.csdn.net/ECHOutopia/article/details/55045848</guid><author>ECHOutopia</author><pubDate>Mon, 13 Feb 2017 10:53:03 +0800</pubDate><description><![CDATA[如何使用python写一个操作系统环境准备写一个操作系统所需环境非常简单，我使用的以下环境:
ubuntu 14.04 64位
virtualenvwarpper
python3
virtualenvwarpper介绍virtualenvwarpper是对virtualenv的封装，使用起来更加方便，virtualenv原理是创建一个目录，然后把所有模块都安装在这个目录下面，这样的话就可以和其他环境]]></description><category></category></item><item><title><![CDATA[protobuf rpc介绍]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/53518957</link><guid>https://blog.csdn.net/ECHOutopia/article/details/53518957</guid><author>ECHOutopia</author><pubDate>Thu, 08 Dec 2016 15:56:01 +0800</pubDate><description><![CDATA[刚接触protobuf通过service实现ｒｐｃ真的是一头雾水，相关资料非常少，找到的资料也看不懂，最后找到了两篇博文，非常详尽，看完就懂了。]]></description><category></category></item><item><title><![CDATA[ctags和virtualenv神级配合]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/52484222</link><guid>https://blog.csdn.net/ECHOutopia/article/details/52484222</guid><author>ECHOutopia</author><pubDate>Fri, 09 Sep 2016 10:08:24 +0800</pubDate><description><![CDATA[ctags和virtualenv简单介绍：

ctags查看代码的时候真的很方便，ctr+shift+鼠标左键就跳转到函数定义的地方了，然后ctr+shift+鼠标右键又能跳转回来，大大提高工作效率。
ctags是通过遍历一个目录下所有文件，生成一个.ctags文件来实现这个功能。
而virtualenv是在一个目录下模拟python安装环境，然后在这个虚拟环境里面装的所有模块都只供这个环]]></description><category></category></item><item><title><![CDATA[关于UNIX和Linux系统下SUID、SGID的解析]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51838845</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51838845</guid><author>ECHOutopia</author><pubDate>Wed, 06 Jul 2016 14:49:26 +0800</pubDate><description><![CDATA[因为本人总不能集中注意力，看了好几次suid和sgid都没耐心把这个概念弄明白干嘛的，今天看这个教程，简单清晰，很不错的一篇文章，地址：
http://www.linuxeden.com/html/unix/20071031/36892.html



如果你对SUID、SGID仍有迷惑可以好好参考一下！

 

Copyright by kevintz.

 

由于用]]></description><category></category></item><item><title><![CDATA[200行python代码实现一个类似django的简单模板引擎]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51830113</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51830113</guid><author>ECHOutopia</author><pubDate>Tue, 05 Jul 2016 11:35:17 +0800</pubDate><description><![CDATA[教程原文地址：
http://aosabook.org/en/500L/a-template-engine.html



大致原理：
根据模板语法，通过html生成python函数，这个函数作用就是输出纯html，
这样只解析一次html模板就够了，以后直接通过这个python函数来生成html内容，提高效率。


以下是我对代码的理解并做出的注释：
https://git]]></description><category></category></item><item><title><![CDATA[python两种方法实现从1000万个随机数中找出top n元素(附c语言版)]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51731269</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51731269</guid><author>ECHOutopia</author><pubDate>Wed, 22 Jun 2016 02:36:59 +0800</pubDate><description><![CDATA[很早之前看到一道面试题：
有一个长度为1000w个数组，每个元素互不重复，找出其中top n元素。
我感觉重复或者不重复都差不多，所以没管不重复这个条件。
我把1000w个结果放在了文件中，方便重复利用，生成代码：
import random

with open("random_number.txt","w") as f:
    for i in range(1,10000000):]]></description><category></category></item><item><title><![CDATA[python深拷贝浅拷贝]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51725430</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51725430</guid><author>ECHOutopia</author><pubDate>Tue, 21 Jun 2016 10:31:29 +0800</pubDate><description><![CDATA[import copy
a = [1,2,3,4,5,[6,7,8]]
b = a[:]
c = a
d = copy.deepcopy(a)
e = copy.copy(a)
print "id of a :",id(a)
print "id of b :",id(b)
print "id of c :",id(c)
print "id of d :",id(d)
print]]></description><category></category></item><item><title><![CDATA[linux grep通过管道输出到head出现write error: Broken pipe错误]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51655882</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51655882</guid><author>ECHOutopia</author><pubDate>Mon, 13 Jun 2016 10:53:57 +0800</pubDate><description><![CDATA[之前做一个分页，利用grep加head加tail实现的：
ls /tmp/conf/usergroup/ | grep -P '^(?!auto-)'| head -n 20 | tail -n 20 | awk -F . '{print $1}'


grep出来的条数大概有6w条，然后用php的exec去执行这条命令，大概耗时1.3秒，感觉太慢，不能接受。

后面发现直接去终端执行]]></description><category></category></item><item><title><![CDATA[SHELL 编程之语法基础]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51425673</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51425673</guid><author>ECHOutopia</author><pubDate>Mon, 16 May 2016 15:44:25 +0800</pubDate><description><![CDATA[这有个教程也很不错，结构清晰简单：http://c.biancheng.net/cpp/view/7005.html

#SHELL 编程之语法基础
版权声明：

本文章内容在非商业使用前提下可无需授权任意转载、发布。

转载、发布请务必注明作者和其微博、微信公众号地址，以便读者询问问题和甄误反馈，共同进步。

微博 ID ： orroz

微信公众号： Linux 系统技术


##前]]></description><category></category></item><item><title><![CDATA[python监听本地目录，并将目录下的文件同步到远端服务器]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51397123</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51397123</guid><author>ECHOutopia</author><pubDate>Fri, 13 May 2016 18:12:51 +0800</pubDate><description><![CDATA[最近写了个文件监听同步的脚本，查找资料的时候发现大部分都是rsync和inotify的方案
粗看了下就是利用这两个工具，再配置来实现，这两个工具都很强大
但是考虑到那么多配置，而且两台机子都要配置，部署会很麻烦
如果自己写功能，就无需配那么多配置项，只需要安装好python的模块再配置一些简单的项就能用了，
还能根据需求自己定制一些功能，只不过性能稳定性什么的也许没有那个成熟的方案好，但是]]></description><category></category></item><item><title><![CDATA[pyqt给js赋值，获取form表单值]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51276523</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51276523</guid><author>ECHOutopia</author><pubDate>Thu, 28 Apr 2016 18:05:30 +0800</pubDate><description><![CDATA[帮同事写客户端，发现pyqt和wxpython的api何其的多，资料又少，写一个包含各种表单的客户端对我来说难度很大，于是想到使用webkit来渲染html，pyqt自然成了我的选择。
但是发现，平时在web开发中，html向web后台获取数据或者提交数据这样简单的事，在pyqt中我完全不知道怎么办，资料又各种少。
最后找到了对应的简单例子，但是获取表单数据的那个例子在怎么都不起作用，正在要放]]></description><category></category></item><item><title><![CDATA[tornado和beego的helloworld性能对比]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51206711</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51206711</guid><author>ECHOutopia</author><pubDate>Thu, 21 Apr 2016 10:55:40 +0800</pubDate><description><![CDATA[测试环境：
windows10虚拟机vmware安装的ubuntu14.04
内存1g，处理器数量2个，每个处理器核心数量1个
测试工具apchebench（ab）
python版本：2.7
tornado版本4.3
go版本1.4
beego版本不知道


tornado helloworld：
import tornado.ioloop
import tornado.we]]></description><category></category></item><item><title><![CDATA[truncate file python]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51136488</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51136488</guid><author>ECHOutopia</author><pubDate>Tue, 12 Apr 2016 20:27:22 +0800</pubDate><description><![CDATA[今天写代码读写文件发现文件内容出现'\x00\x00\x00123'，前面多了很多0。最后发现原来是自己truncate的姿势不对
先来看看truncate函数用法吧：]]></description><category></category></item><item><title><![CDATA[python多线程join方法导致不能接收信号]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/51014722</link><guid>https://blog.csdn.net/ECHOutopia/article/details/51014722</guid><author>ECHOutopia</author><pubDate>Wed, 30 Mar 2016 15:43:02 +0800</pubDate><description><![CDATA[今天写一个小工具，开启多个线程，在子线程里循环执行任务，发现不能退出程序，然后折腾了半天，还是退出不了，最后发现，原来是个bug]]></description><category></category></item><item><title><![CDATA[python使用select监听非阻塞socket遇到的问题]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/50888936</link><guid>https://blog.csdn.net/ECHOutopia/article/details/50888936</guid><author>ECHOutopia</author><pubDate>Mon, 14 Mar 2016 19:35:29 +0800</pubDate><description><![CDATA[昨天学python的select的时候，发现一个非常诡异的事情，到现在也没弄明白，所以在这记录一下
服务端实现了一个简单的echo服务器，相关代码如下：
#coding=utf-8
import select]]></description><category></category></item><item><title><![CDATA[How To Create a SSL Certificate on Apache for Ubuntu 14.04]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/50599139</link><guid>https://blog.csdn.net/ECHOutopia/article/details/50599139</guid><author>ECHOutopia</author><pubDate>Thu, 28 Jan 2016 10:53:55 +0800</pubDate><description><![CDATA[这篇教程简单实用，配置出来默认就是tls1.2了，但是我翻墙不稳定，所以怕以后急用却翻不了墙，所以转载过来了，原文地址：
https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04



Introduction


TLS,]]></description><category></category></item><item><title><![CDATA[记PHP第几周和日期转换的坑]]></title><link>https://blog.csdn.net/ECHOutopia/article/details/50548652</link><guid>https://blog.csdn.net/ECHOutopia/article/details/50548652</guid><author>ECHOutopia</author><pubDate>Wed, 27 Jan 2016 10:16:23 +0800</pubDate><description><![CDATA[项目中有个功能是周报生成，周报里会填写这一周的事件。写周报时，会判断今天属于今年第几周，然后决定写到哪周的周报中,周报简介中会显示这周包含哪几天
。。。
所以只好自己计算了。。具体计算方法参照outlook的计算方法，不同的是我们这第一周第一天是星期一，outlook第一周第一天是星期天。]]></description><category></category></item></channel></rss>