2015年1月3日
摘要: 这里记录一下,以Ubuntu 14.04为例。 1.安装samba服务器。 sudo apt-get install samba 2.修改配置文件 sudo vim /etc/samba/smb.conf 然后找到home目录共享的部分,大概是190-214行,将前面的注释去掉,如下: # Un-comment the following (and twea... 阅读全文
posted @ 2015-01-03 18:43 inevermore 阅读(2512) 评论(6) 推荐(0) 编辑
  2015年1月1日
摘要: 使用python发送邮件并不难,这里使用的是SMTP协议。 Python标准库中内置了smtplib,使用它发送邮件只需提供邮件内容与发送者的凭证即可。 代码如下: # coding:utf-8 import smtplib from email.mime.text import MIMEText import time import os import sys def send_m... 阅读全文
posted @ 2015-01-01 13:43 inevermore 阅读(330) 评论(0) 推荐(0) 编辑
  2014年12月30日
摘要: 装饰器前面提过了,采用python的闭包特性实现: from time import time from time import sleep def count_time(): def tmp(func): def wrapped(*args, **kargs): begin_time = time() result... 阅读全文
posted @ 2014-12-30 21:31 inevermore 阅读(864) 评论(0) 推荐(0) 编辑
  2014年12月29日
摘要: Ajax,指的是网页异步刷新,一般的实现均为js代码向server发POST请求,然后将收到的结果返回在页面上。 这里我编写一个简单的页面,ajax.html 测试Ajax 点击 注意,从上面的代码可以看出,数据存储在“message”字段中。 所以后台从messag... 阅读全文
posted @ 2014-12-29 23:16 inevermore 阅读(6290) 评论(0) 推荐(0) 编辑
摘要: 关于用户的登录状态,一部分的应用程序是采用session实现的。 HTTP是一个无状态协议,用户的每次请求都是相互独立的,HTTP本身意识不到用户是否登录。 很多web框架选择将session存放在cookies中,本节我们也是这样实现: import tornado.ioloop import tornado.web class BaseHandler(tornado.web.Re... 阅读全文
posted @ 2014-12-29 21:54 inevermore 阅读(2137) 评论(0) 推荐(0) 编辑
  2014年12月28日
摘要: 上文的程序中有这样一段: class MessageHandler(tornado.web.RequestHandler): def get(self): self.write(''' Please Input Message ''' ... 阅读全文
posted @ 2014-12-28 20:12 inevermore 阅读(532) 评论(0) 推荐(0) 编辑
摘要: Tornado的搭建很简单,使用pip,或者下载源码均可。 我们先看一个最简单的程序: import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello World") appli... 阅读全文
posted @ 2014-12-28 19:06 inevermore 阅读(333) 评论(0) 推荐(0) 编辑
摘要: 之前用C++写过一篇生产者消费者的实现。 生产者和消费者主要是处理互斥和同步的问题: 队列作为缓冲区,需要互斥操作 队列中没有产品,消费者需要等待,直到生产者放入产品并通知它。队列慢的情况类似。 这里我使用list模拟Python标准库的Queue,这里我设置一个大小限制为5: SyncQueue.py from threading import Lock fro... 阅读全文
posted @ 2014-12-28 14:36 inevermore 阅读(1442) 评论(0) 推荐(0) 编辑
  2014年12月27日
摘要: 这里采用的是算法导论的划分方式: import random def partition(array, left, right): pivot = array[left] i = left #j left +1 -> right for j in range(left + 1, right + 1): if array[j] right ... 阅读全文
posted @ 2014-12-27 22:10 inevermore 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 我们先看一个闭包的例子: from time import ctime def before_call(f): def wrapped(*args, **kargs): print 'before calling, now is %s' % ctime() return f(*args, **kargs) return wrapped d... 阅读全文
posted @ 2014-12-27 21:44 inevermore 阅读(469) 评论(0) 推荐(0) 编辑
摘要: 最近要使用python,研究下闭包特性。 看下列的代码: def counter(start_at = 0): count = [start_at] def incr(): count[0] += 1 return count[0] return incr if __name__ == '__main__': cou... 阅读全文
posted @ 2014-12-27 21:32 inevermore 阅读(197) 评论(0) 推荐(0) 编辑
  2014年12月24日
摘要: 前面我们实现了从字符串到User对象的转换。如果表单中有多个User数据,我们可以批量转换。 我们把input.jsp修改为: 使用分号隔开username password 然后新建ac... 阅读全文
posted @ 2014-12-24 14:52 inevermore 阅读(305) 评论(0) 推荐(0) 编辑
  2014年11月26日
摘要: Traits不是一种语法特性,而是一种模板编程技巧。Traits在C++标准库,尤其是STL中,有着不可替代的作用。 如何在编译期间区分类型 下面我们看一个实例,有四个类,Farm、Worker、Teacher和Doctor,我们需要区分他们是脑力劳动者还是体力劳动者。以便于做出不同的行动。 这里的问题在于,我们需要为两种类型提供一个统一的接口,但是对于不同的类型,必须做出不同的... 阅读全文
posted @ 2014-11-26 00:17 inevermore 阅读(1252) 评论(1) 推荐(0) 编辑
  2014年11月25日
摘要: Linux提供了一个解析命令行参数的函数。 #include int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt; ... 阅读全文
posted @ 2014-11-25 21:31 inevermore 阅读(399) 评论(0) 推荐(0) 编辑
  2014年11月14日
摘要: python中的函数使用较简单,这里列出值得注意的几点: 内嵌函数 例如: # coding: utf-8 def foo(): def bar(): print 'bar() called.' print 'foo() called.' foo() bar() 对bar的调用是非法的,因为bar的作用域仅限于foo内,除非使用闭包将... 阅读全文
posted @ 2014-11-14 21:56 inevermore 阅读(252) 评论(0) 推荐(0) 编辑
  2014年11月13日
摘要: 这个相对于多进程更加简单,每accept一个新的连接就创建一个新的线程。代码如下: # coding: utf-8 import socket import sys import errno import threading from time import ctime class ClientThread(threading.Thread): def __init__(self... 阅读全文
posted @ 2014-11-13 23:07 inevermore 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 每创建一个TCP连接,就创建一个进程。 代码如下: # coding: utf-8 import socket import os import sys import signal import errno from time import ctime def hanlde_sigchld(a, b): (pid, status) = os.wait() prin... 阅读全文
posted @ 2014-11-13 23:03 inevermore 阅读(565) 评论(0) 推荐(0) 编辑
  2014年11月12日
摘要: python中多进程与Linux 下的C基本相同。 fork的基本使用 先看最简单的例子: # coding: utf-8 import os def my_fork(): pid = os.fork() if pid == 0: print 'this is child, pid = %d, parent id = %d' % (os.g... 阅读全文
posted @ 2014-11-12 21:29 inevermore 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 这节记录学习多线程的心得。 Python提供了thread模块,不过该模块的缺点很多,例如无法方便的等待线程结束,所以我们使用更加高级的threading模块。 threading模块的使用一共三种模式: 1.利用函数生成一个Thread实例 2.利用函数生成一个可以调用的类对象,生成一个Thread实例 3.从Thread派生一个子类,创建这个子类的实例 ... 阅读全文
posted @ 2014-11-12 17:11 inevermore 阅读(310) 评论(0) 推荐(0) 编辑
摘要: Python中的网络编程比C语言中要简洁很多,毕竟封装了大量的细节。 所以这里不再介绍网络编程的基本知识。而且我认为,从Python学习网络编程不是一个明智的选择。 简单的TCP连接 服务器代码如下: import socket from time import ctime sock = socket.socket() sock.setsockopt(socket.SOL... 阅读全文
posted @ 2014-11-12 15:04 inevermore 阅读(279) 评论(0) 推荐(0) 编辑