‘Python’ 分类的存档

Python是一种以简洁为主的语言

3 条评论Linode && SAE 开发者 站长 geek必备[2]

2011年11月4日

在上一篇文章给大家介绍了Linode

点此查看 http://www.iamued.com/other/2021.html

这次给大家带来的是SAE(Sina App Engine)平台的介绍

你现在访问我的blog其实就是搭建在SAE平台上面的~

为什么现在才介绍SAE不是已经出很久了么?

你说得对,不过SAE在两周年之际 升级了很多东西,应该在第一时间传达给大家

SAE是什么?

SAE是基于云计算技术实现的应用开发和运行平台

目前SAE稳定支持PHP语言 编写的Web应用程序、Python for sae 已经在内测,同时支持多个python框架(Djanjo、Flask、Bottle)等

Python for sea帮助文档:http://appstack.sinaapp.com/static/doc/release/testing/index.html

为什么选择SAE?

其实SAE与GAE(http://code.google.com/appengine/)有很大的相似度

很不幸的是GAE 在国内是无法访问的

国内的同类平台有阿里云的(ACE)、百度的(BAE)

相比之下 SAE已经相对稳定 且免费注册立即开通使用 非常的方便

SAE的服务优势?

1.基于云的架构 分布式 保障系统稳定、性能高效 不因单点故障导致应用down机

2.相关服务

SAE目前已经提供了十多种服务,整体上分为计算型和存储型,计算型又包括同步计算和异步计算,而存储型则分为持久化存储和非持久化存储。具体列表如下:

服务名称 类型 说明
HTTP+PHP 同步计算 带SAE沙盒的Apache和Zend为用户提供Web计算服务
Storage 持久化存储 提供分布式文件存储
Memcache 非持久化存储 提供分布式缓存服务
RDC 持久化存储 分布式数据库集群,提供MySQL服务
TaskQueue 异步计算 异步离线轻量级任务队列,HTTP方式调用
DeferredJob 异步计算 异步离线重量级任务队列,系统方式调用
Counter 持久化存储 计数器服务
RankDB 持久化存储 分布式排行榜服务
KVDB 持久化存储 分布式key/value存储服务
Cron 异步计算 分布式定时服务
FetchURL 同步计算 分布式抓取服务
TmpFS 非持久化存储 提供临时文件存储,文件生命周期在一个会话内,Http请求结束文件自动消失
AppConfig 提供应用配置功能,取代Apache htaccess
Mail 异步计算 邮件发送服务
Image 同步计算 图像处理服务
XHProf 同步计算 Facebook提供的强大的PHP调优工具
SVN 持久存储 用户代码部署的入口点:https://svn.sianapp.com/yourapp
Online CodeEditor 持久存储 在线代码编辑器,编辑的代码保存后入自动入SVN并部署到Web服务器

SAE如何使用?费用贵吗?

其实本文的标题已经提到了,开发者、站长、Geek必备,大家其实非常关心成本的问题

SAE的收费模式是按使用量进行计费,也就是使用多少收费多少,目前SAE有身份认证活动

身份认证成功直接赠送2000云豆、在此申请开发者认证 可以获得应用的推荐及每月高额的云豆奖励

如果你只是想尝试一下 免费赠送的云豆基本就够用了
如果你申请了开发者认证 我相信 跑一个日UV2千的网站也应该足够了 如果你不超过配额的话、也可以理解为是免费的云服务

ok~希望我的使用感受能够帮助你~如果还没有sae帐号,还等什么?立即去注册吧

也欢迎朋友们与我沟通讨论使用经验和问题

免费注册立即开通使用

http://sae.sina.com.cn/

分类: php, Python 标签: , , , ,

3 条评论[原创]通过shtml实现重构页面模块化构建—实现交付物模块化

2011年10月19日

模块化思想已经不再是创新,陆续的演变成一种思维模式,在处理各种问题时都会考虑模块化思想

前端重构也已经有各种模块化的思想出现,结构模块化、样式模块化等等

今天和同事沟通视觉统一化的时候,发现流程中在产出物方面存在一个问题
如下图所示:

大家按照统一的思维过程在执行时 产出物在页面构建的环节,形成了一个聚合,从以UI组件为单位变为了以page为单位的产出物,而之后到了后端研发时,其实Template还是需要再次分拆,由于这个问题,而产生了更大的沟通成本,降低了整个团队的效率

基于这个问题 我提出了一个解决方法 还算不上解决方案,短暂的解决一下

在页面构建的环境 通过webserver的SSI Include指令 将静态页面也进行模块化,在交付产出物的时候后端研发人员是很清晰的看到module的复用代码,也降低了重构页面时对于统一的ui而产生不同html和css代码的错误率

具体实现如下:

在开发(测试环境)  建立webserver(nginx、apache均可) 然后通过配置文件开启SSI支持

Apache 开启SSI方式 http://www.uplinux.com/download/doc/apache/ApacheManual/howto/ssi.html

要使服务器允许SSI,必须在httpd.conf文件或.htaccess文件中有如下配置:

Options +Includes

告诉服务器以允许解析文件中的SSI指令。注意,在多数配置中,多个Options指令会互相覆盖,所以,可能必须对需要SSI的特定目录使用Options,以确保位于最后并起作用。

并不是所有文件中的SSI指令都会被解析,所以,必须告诉Apache应该解析哪些文件。有两种方法,使Apache解析带有特定文件后缀的任何文件,比如.shtml, 配置如下:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

在 Nginx 开启 SSI ,加入以下3行就OK了,可以放在 http, server, 和 location 段都行

ssi on;
ssi_silent_errors on;
ssi_types text/shtml;

SSI Include 指令语法,我们主要用这个语法来调用相关组件文件代码

<!–#include virtual=”文件路径” –>

在构建页面时 目录结构可以是

demoproject/ 项目文件夹
|-- aboutus.shtml  综合性页面 包含module调用
|-- index.shtml    综合性页面 包含module调用
|-- other_page.shtml 综合性页面 包含module调用
|-- module  组件文件夹
|   |-- footer.html  组件文件
|   |-- header.html  组件文件
|   `-- other_module.html 组件文件
|-- images 其他静态文件
|-- js 其他静态文件
`-- style 其他静态文件

这样 我们形成的综合性页面的代码中会包含module调用,在我们每次对通用组建修改时,只需要修改组建文件即可
如下图,因为我们之前在webserver配置了SSI支持,所以我们能够实时预览效果

这样,除了在开发时方便了我们自己,我们的交付物也能够体现模块化思想,方便后端人员处理templates

 

同时我也用python写了一个开源项目,方便使用shtml这种方式构建页面的同事 产出传统html交付物

shtml2html项目

介绍:替换shtml中include内容为真实调用内容 并在同级目录生成.html文件 给重构团队在构建页面时使用

使用方法:

必须安装python环境 2.x版本
Usage: python shtml2html.py path 支持文件和目录(递归处理)

这是我目前的解决方法,正在试行中,小团队还没那么智能化,希望能给大家提供一些思路

如果你有更好的解决方案也请告诉我,多交流

1 条评论[python]根据歌名和歌手名 获取lrc歌词

2011年7月2日

想要把之前做的豆瓣fm插件智能化一些 显示歌词在当前页 就需要获取歌词 研究了一下

api使用的是百度音乐盒的

代码如下

# -*- coding: utf-8 -*-
import urllib, urllib2,xml.dom.minidom
url="http://box.zhangmen.baidu.com/x?op=12&count=1&title=五月天$$she$$$$"
dom = xml.dom.minidom.parseString(urllib2.urlopen(url).read().encode("gb2312"))
lrcid=dom.documentElement.getElementsByTagName('lrcid')[0].childNodes[0]
lrcurlid= int(int(lrcid.data) / 100)
lrcurl="http://box.zhangmen.baidu.com/bdlrc/"+str(lrcurlid)+"/"+lrcid.data+".lrc"
print urllib2.urlopen(lrcurl).read().decode("gbk")

转载请注明来源http://www.iamued.com/development/python-development/1904.html

分类: Python 标签: ,

3 条评论Mac 10.6.7下安装PIL 报错的解决办法

2011年6月2日

安装pil 时 (python setup.py install)报错
command ‘gcc-4.2′ failed with exit status 1
已经安装了Xcode 并升级到4.0

解决办法

sudo ARCHFLAGS='-arch x86_64' python setup.py build
sudo ARCHFLAGS='-arch x86_64' python setup.py install

第二个问题
decoder jpeg not available mac

这个问题之前没准备,后来用pil时才发现的 

需要先删除pil后 安装libjpeg、freetype 然后 重新安装pil
参考:

http://mariz.org/blog/2007/01/26/mac-os-x-decoder-jpeg-not-available/
分类: Mac, Python 标签:

4 条评论Python文本处理 查找靓号脚本

2010年9月14日

今天业务部门有一个需求 将10000-19999这之间的数字 判断出其性质 大概分为如下几种

  • ABCDE
  • EDCBA
  • ABCD
  • ABC
  • CABAB
  • ABABC
  • AAAAA
  • AAAAB
  • BAAAA
  • AAACB
  • AABBC
  • AACBD

近期正好看了下python的语法 就用python写了个小脚本
算法比较弱智 就是最简单的穷举 将所有规则的正则表达式写出来 按照相关权重规则去IF匹配
代码如下:

import re
#r1 ABCDE or EDCBA
r1 = re.compile(r'(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){4}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){4})\d', re.IGNORECASE)
#r2 EABCD or ADCBA
r2 = re.compile(r'(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){3}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){3})\d', re.IGNORECASE)
#r3 ABC or CBA
r3 = re.compile(r'(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){2}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2})\d', re.IGNORECASE)
#r4 AABB
r4 = re.compile(r'([\d])\1{1,}([\d])\2{1,}', re.IGNORECASE)
#r5 AAAAA
r5 = re.compile(r'([\d])\1{4}', re.IGNORECASE)
#r6 AAAA
r6 = re.compile(r'([\d])\1{3}', re.IGNORECASE)
#r7 AAA
r7 = re.compile(r'([\d])\1{2}', re.IGNORECASE)
#r8 AA
r8 = re.compile(r'([\d])\1{1}', re.IGNORECASE)
#r9 ABAB
r9 = re.compile(r'([\d])\1([\d])\2\2\1', re.IGNORECASE)
content=''
for i in range(10000, 19999):
	if r1. search(str(i)):
		content=content+str(i)+"\t"+"ABCDE||EDCBA"+"\n"
		continue
	elif r2. search(str(i)):
		content=content+str(i)+"\t"+"EABCD||ADCBA"+"\n"
		continue
	elif r3. search(str(i)):
		content=content+str(i)+"\t"+"ABC||CBA"+"\n"
		continue
	elif r5. search(str(i)):
		content=content+str(i)+"\t"+"AAAAA"+"\n"
		continue
	elif r6. search(str(i)):
		content=content+str(i)+"\t"+"AAAA"+"\n"
		continue
	elif r7. search(str(i)):
		content=content+str(i)+"\t"+"AAA"+"\n"
		continue
	elif r4. search(str(i)):
		content=content+str(i)+"\t"+"AABB"+"\n"
		continue
	elif r8. search(str(i)):
		content=content+str(i)+"\t"+"AA"+"\n"
		continue
	elif r9. search(str(i)):
		content=content+str(i)+"\t"+"ABAB"+"\n"
		continue
	else:
		content=content+str(i)+"\t"+""+"\n"
f = file('400new.txt', 'w')
f.write(content)
f.close()
分类: Python 标签: , ,