python numpy/matplotlib绘制生物节律曲线

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

import datetime
import math

def daysnow(birthdate):
return (datetime.date.today() – birthdate).days

def clockwise(days, p):
return math.sin(2*math.pi *(days % p) / p)

def clockwise_2(date, birthdate, p):
return math.sin(2*math.pi*((date – birthdate).days % p) / p)

base = datetime.date.today()
birthdate = datetime.date(年, 月, 日)
datelist = [base + datetime.timedelta(days=x) for x in range(-15, 15)]

dla = np.array(datelist)
dlb = np.array([clockwise_2(x, birthdate, 23) for x in datelist])
dlc = np.array([clockwise_2(x, birthdate, 28) for x in datelist])
dld = np.array([clockwise_2(x, birthdate, 33) for x in datelist])

plt.plot(dla, dlb, dla, dlc, dla, dld)
plt.show()

Python 2.7.9+gevent

Python 2.7.9+gevent会出问题。
如果你使用gevent 1.0 ,比如你使用Ubuntu 14.10,使用apt-get安装的缺省版本就是它,报的错误是:global name SSLContext not defined.这个路线我现在还没有分析。
如果你使用gevent 1.0.1,同样在Ubuntu 14.10,使用sudo easy_install -U gevent,安装的版本是目前gevent的最新版本1.0.1。提示的错误是:global name sslwrap not defined。

根据Debian的bug report,这个问题已经出现好长时间了。

Google的解决方案如下:
1. https://gist.github.com/ellimilial/5ef1d1917e00970d4457

sudo apt-get install python-dev cython git python-pip
sudo pip install git+git://github.com/ellimilial/gevent.git@master

not work。因为网络的原故,从github直接这么安装着实是慢得要死。

2. https://github.com/gevent/gevent/issues/477
这里面提供的代码经过测试是好用的,前提是使用gevent的最新1.0.1版本。

gist地址:https://gist.github.com/zz/af7d9efa539999757950

代码如下:

# Re-add sslwrap to Python 2.7.9
import inspect
__ssl__ = __import__('ssl')

try:
    _ssl = __ssl__._ssl
except AttributeError:
    _ssl = __ssl__._ssl2

def new_sslwrap(sock, server_side=False, keyfile=None, certfile=None, cert_reqs=__ssl__.CERT_NONE,  ssl_version=__ssl__.PROTOCOL_SSLv23, ca_certs=None, ciphers=None):
    context = __ssl__.SSLContext(ssl_version)
    context.verify_mode = cert_reqs or __ssl__.CERT_NONE
    if ca_certs:
        context.load_verify_locations(ca_certs)
    if certfile:
        context.load_cert_chain(certfile, keyfile)
    if ciphers:
        context.set_ciphers(ciphers)

    caller_self = inspect.currentframe().f_back.f_locals['self']
    return context._wrap_socket(sock, server_side=server_side, ssl_sock=caller_self)

if not hasattr(_ssl, 'sslwrap'):
    _ssl.sslwrap = new_sslwrap

考虑到使用方便,可以使用下面代码(因为这条import当时忘记了,结果又重新修改了一下)

# Re-add sslwrap to Python 2.7.9
import inspect

def new_sslwrap(sock, server_side=False, keyfile=None, certfile=None, cert_reqs=__ssl__.CERT_NONE,  ssl_version=__ssl__.PROTOCOL_SSLv23, ca_certs=None, ciphers=None):
    context = __ssl__.SSLContext(ssl_version)
    context.verify_mode = cert_reqs or __ssl__.CERT_NONE
    if ca_certs:
        context.load_verify_locations(ca_certs)
    if certfile:
        context.load_cert_chain(certfile, keyfile)
    if ciphers:
        context.set_ciphers(ciphers)

    caller_self = inspect.currentframe().f_back.f_locals['self']
    return context._wrap_socket(sock, server_side=server_side, ssl_sock=caller_self)

if not hasattr(_ssl, 'sslwrap'):
    _ssl.sslwrap = new_sslwrap

加到这段代码之下:

try:
    _ssl = __ssl__._ssl
except AttributeError:
    _ssl = __ssl__._ssl2

修改文件的位置:/usr/local/lib/python2.7/dist-packages/gevent-1.0.1-py2.7-linux-x86_64.egg/gevent
文件名:ssl.py

记得Ubuntu下使用gksu来应用权限。

此记。
———-
为什么会遇到这个问题:之前一篇文章说使用gevent速度会快些。已经加上了,速度什么的没有体会,反倒让这个问题折腾了,太喜爱技术的问题,以后还是少点发散吧。

Hotot以及其它

Twitter有许多只技术牛。男牛、女牛、老牛、年轻牛。

最近识得的几只技术牛都还只是学生。想想当初上学的时候真是光阴虚度了。

一、
前段时间WoW! Ubuntu站推荐了新的客户端Hotot。见原文:Hotot:Linux 下最新潮的 Twitter 客户端,几番试用之后,还觉得真是很好用。而且有什么使用不适之处还可以与作者之一@shellex兄联系。开源软件,改进非常迅速。虽然官网上没有释出,但是可以通过ppa自动更新到最新版本。详见:Twitter 客户端 Hotot 的 PPA 源

来源是:PPA 源地址: https://edge.launchpad.net/~hotot-team/+archive/ppa

sudo add-apt-repository ppa:hotot-team 
sudo apt-get update 
sudo apt-get install hotot

如果象我一样,先手可./install.ubuntu安装过了话,再用ppa方式安装可能会出现UI上gettext字符串显示问题,具体症状是label位置上_(“UserName”)之类。如果出现这种情况,将由./install.ubuntu安装在/usr/lib/python2.6/dist-packages里的hotot目录干掉就行了。

二、
Hotot的源代码很容易得到。如果想学习python,又有写这类客户端的想法,不妨跟Hotot学学。程序的结构非常好。怎么说呢?记得几年前特别羨慕Microsoft Money的结构。程序外壳中嵌入了网页,增强了美化和定制的能力。当年也为之研究了一下:Register new URL type with Delphi。等有时间了,一定好好学习一下这种webkit+page的方式。

Django CMS step by step

1. 准备工作:

sudo apt-get install python-setuptools # This is for easy_install
sudo easy_install django # 安装Django 1.2x如果直接采用sudo apt-get install python-django则安装的是1.1x版本,这个版本不能与Django CMS一起使用,因为缺少CSRF模块
sudo easy_install django-cms
# create the project
django-admin startproject demo # demo is your project name.

2. 修改配置文件:
参考:
Django-CMS在开发服务器下配置
注意将你的模板文件目录加进来。

3. 修改url route文件:
参考:
Django-CMS在开发服务器下配置

4. 启用数据库

./manage.py syncdb

5. 创建你在配置文件中指定的模板文件
刚才在settings.py中指定的几个模板,比如base.html之类是不存在的。而且也没有缺省的可以用。所以你需要手工编辑一下。

6. 开始测试吧:

./manage.py runserver

说明:
1. 按照Django-CMS和 Django-CMS在开发服务器下配置一文的内容配置,基本上不会遇到什么问题。
2. 《Django Web开发指南》这本小册子显然没有《Web开发敏捷之道》写得清晰自然。python和ruby的用户群确实可以看出点点区别。
3. Django的版本是本次测试折磨人的要点。csrf_token…:(
4. Ubuntu下还没有遇到:不写PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))不可用的问题。

参考文件:
1. Django-CMS在开发服务器下配置
2. Django CMS Installation Guide
3. No module named csrf
4.

Denied – the next generation python micro-web-framework

从雅奇离职之后,这几天一直在整理以前留下来的一些内容。人生面临方向选择。

偶尔发现了这个基于python的小型web框架。确实很好玩。小巧,一个文件,deny.py文件的大小约396k。虽然是编码基于iso-8859-15,但是程序构思很巧妙。在deny.py内置了压缩包,程序自动解压到临时文件夹。其中WSGI部分使用的是werkzeug,模板使用了jinja2,JSON使用了simplejson。网站只有一页,很简单。下面仅做简单翻译,有兴趣的同学可以进行深入研究。

1. A completely denied application(一个完整的Denied实例)
No installation or configuration required. No dependencies other than the Python standard library. Just get a copy of deny.py, place it into your project directory and start coding.
对于Denied应用来说,它既不需要安装也不需要配置。除了标准的python库也不信赖于其它的库。你所要做的仅仅是获得一份deny.py的拷贝,将其放到你的项目目录,然后就开始编码吧。
[code language=”bash”]
from deny import *

@route(‘/’)
def hello():
return ‘Hello World!’

if __name__ == ‘__main__’:
run()
[/code]

That’s it! Now run your application and go to http://localhost:5000/ and your application will greet you!
看到上面的代码了吧,这就是所有内容。现在就运行你的程序然后浏览http://localhost:5000/吧,你的程序就会欢迎你了。Hello, world!,第一个应用。

2. Watch the Screencast(观看屏幕录像)
Not sold yet? Watch the screencast to see how easy it is to write a scalable web 2.0 application with denied: watch in quicktime format
还没有Denied非常感兴趣?那就看看屏幕录像来了解一下用Denied编写一个可伸缩的web2.0应用是多么的容易吧:观看quicktime格式的录像。录像中声音应该来源于开发者,但他的口音带来一定理解方面的难度。

3. Download it Now(现在马上单击下载吧!)
Just download the deny.py file from here and drop it into your project directory. You can also fork the code from github.
下载就是这么简单,安装就是这么简单,那还犹豫什么?马上下载deny.py文件,并把它拖动到你的项目文件夹。对了,就是这么简单。你还可以从github中检出相关的代码。

4. Full of Features(全部特性)
Denied comes out of the box with superior awesomeness(Denied伴随着一些特别棒的特性问世,现在听我吹):
* A single Python file, no need for setuptools(由一个单独的python文件构成,不需要setuptools)
* Works out of the box on Python 2.5 and 2.6, support for 3.x is planned(可以运行于Python 2.5和2.6,并计划支持3.x)
* Brings its own development server(带有自己的开发服务器)
* Kick-ass performance. 6000 requests per second with running on top of tornado(超级棒的性能。在tornado上运行,可以达到每秒6000次請求。)
* builtin URL mapping, beautiful and RESTful URLs without the need to write a single regular expression(内置URL映射,无需编写正则表达式即可有漂亮、RESTful的URL)
* builtin intuitive django-inspired templating language but without the limits(内置直观的源自Django灵感的模板语言,但是没有什么限制,当然了,是使用jinja2)
* RESTful
* Impressive Scaling Capabilites(给人印象深刻的可伸缩能力)

5. What People Say(人们说什么)

Alex Gaynor (Django Developer)
“Denied is like nothing I’ve ever seen before, I think it’s the future of the internet” (Denied跟我以前遇到的东西都不大一样,我想它是internet的未来。)

Benjamin Peterson (Python Developer)
“I have never seen so much code in one .py file” (我从来没有看到过一个.py文件里包含如此多的代码。)

Armin Ronacher (Werkzeug Developer)
“Probably the most hideous code I have ever seen” (这可能是我遇到的最让人惊异的代码。)

Dick Taylor
“very nicely written and concise (not to mention it’s written by Eirik Lahavre, whose coding skills are very trustable), and doesn’t get in my way”(缩写良好、简明(无需提及,这些代码是由Eirik Lahavre所写,他的编码技术非常可信),跟我的编写风格不同)

6. Who is behind this Project?(项目背后的人)
Hailing from the beautiful Lyon, Eirik Lahavre brings you the latest hotness of web development. Having Created Denied for a local company developing real-time web collaboration applications, Eirik brings an extensive knowledge about Python, web development and scaling.
Hailing from the beautiful Lyon(来自美丽的Lyon的致意?), Eirik Lahvre带给你最热的web开发技术。Eirik Lahavre从美丽的Lyon为你带来最热门的Web开发技术(感謝@turlingbook)。为一家当地公司开发实时web交互应用而创建了Denied之后,Eirik带来了关于Python、web开发和扩展的更深刻的知识。

Get in contact with him now.
现在跟他联系吧。他的邮件标签可真长啊。

7. Where is the documentation?(文档在哪里?)
Documentation is upcoming, until then please refer to the screencast which should give you a good introduction how it works. You can also use the interactive Python help function that should give you a basic overview over the API.
文档即将到来,在此之前,你可以参考屏幕录像。它可以给你Denied如何工作的一个好的介绍。并且,你可以通过交互的Python帮助功能,来获得关于API的一个基本的内容。

以上是Denied网站的简要翻译,有些实在不知道如何翻译,如果翻译的不对,请回复指出。谢谢。

又,简单的看了下deny.py,这个文件由两部分构成,前面是stub,后面是base64文本化的zip,deny.py将之解压到临时文件并运行了它。所以我怀疑Armin Ronacher (Werkzeug Developer)未必说的是好听的话。真实的denied内容可以看临时目录里的_denysource.py文件。

在C程序中集成Python

测试环境:Ubuntu 10.04

[code language=”c”]
#include
#include int main(int argc, char * argv[])
{
// initialize the interpreter
Py_Initialize();
// evaluate some code
PyRun_SimpleString(“import sys\n”);
//ignore line wrap on following line
PyRun_SimpleString(“sys.stdout.write(‘Hello from an embedded Python Script\\n’)\n”);
// shut down the interpreter
Py_Finalize();
return 0;
}
[/code]

编译:
[code language=”bash”]
$gcc Listing1.c -I/usr/include/python2.6 -lpython2.6
[/code]

编译成.so
[code language=”bash”]
$gcc -c -fPIC Listing2.c -I/usr/include/python2.6
$gcc -shared Listing2.o -o libcrypto.so -lpython2.6
[/code]

参考:
1. Embedding Python in Multi-Threaded C/C++ Applications