月度归档:2016年08月

阿里云Opensearch Python SDK summery BUG

问题出在summery只有第一个参数field有效,其他参数都不行。应该是开发者在开发时的测试用例比较局限。

this problem was caused by incorrect Summary join in Search.py file line 202
params[‘index_name’] = ‘;’.join(self.indexes)
change 2
params[‘index_name’] = ‘,’.join(self.indexes)

Docker阿里云加速器 for Mac

阿里东西在国内还算好,就是太抠门,还好docker的对手还有好几个,这不dev的加速器还是妥妥的免费的。ubuntu下用着很快,宽带确实没的说,昨天在mac上配置发现怎么搞都不行,表现是怎么都加不上镜像,阿里云的方法也好还是类似ubuntu的配置都不行。今天能翻墙了才发现官方原来是有提供专门的app的,居然可以gui配置镜像,官方doc还有详细说明如何卸载dockertools(阿里推荐安装这个,事实证明被骗了,可能以前是可以的)。

  • mac的docker最好用官方的app来管理;
  • 可以在gui中配置阿里云的加速器;

Python Flask 实现搜索(阿里云 open search)

为什么选择阿里云open search?一开始是想选开源的组件,但是之前对开源的糟糕分词还是印象深刻,加之现在的vps是普通的入门版,高io也是一种担心,综合维护成本来看还是打算选别家的服务.这里首推阿里云,没办法,有中文服务的也就它了。

PY居然官方没有SDK,好在有人做了:https://github.com/aliyun-beta/aliyun-opensearch-python-sdk

添加文档成功了,在测试的时候发现example里有等待2秒的代码,很是奇怪,去掉后测试发现会有一半的结果是失败的,太可怕了,加上后就ok了。

我猜:添加的文档会自动建立索引,而索引是一件很慢的事情,面向所有人的时候是应该规定的时间长一点,可以有效的防止过载,但是2秒什么概念,我这么小的库都需要很长时间才能初始化完,如果是个高并发的站点,建立索引得多慢。因为自己没有需求暂时还没有测试出缩短到多少是可靠的,阿里居然也没有告知可以缩短到多少,这个让人很气愤,面对有恶意的攻击者这个不告知是没有意义的,而对于普通的用户像我们就会抓瞎。

Python中Datetime类型转为整数类型

Unix里的时间戳用的很广泛,很多地方都有用到,标准是一个Float类型,整数部分是秒数,小数部分是毫秒,从1970年1月1日开始计算。

返回时间戳的代码:

time.mktime(dt.timetuple())

返回整数时间戳的代码:

int(time.mktime(dt.timetuple()))

Flask Babel(开启调试) 不能识别某些文件中的翻译

问这个问题的人好多,主要babel太流行了,使用又很简单,导致大家都不太熟悉它的配置。默认配置下slient选项的值是true,就是有文件翻译不了也不会报错,更没有详细上下文。改为false后如果相应文件extract失败会有py错误提示。flask常见的就是使用了assset但是没有设置他的环境变量,在初始化时设置一下就好了。

升级python3后出现b”的bug

原来显示数字的地方都变成了b’n’,以前没见过,后来发现是py3里的byte,py3跟py2最大的不同。这个地方是redis返回value的场景,不知道是不是所有字符串返回都是这样。也可能是赋值时是数字的原因。所有py3里str转成的byte都可以用decode()函数解码。

之前觉得py里减少了对type的认知是件很方便的事,py3似乎对此妥协了。

开始用DDG来搜索

不用爪子搜索的原因是众所周知的,gg一直是主力搜索,但是用久了也蛮单调,ddg名声鹊起,尝试用了下,输入:

!taobao 徒步鞋

居然可以bang到网站里去搜索,大喜。就冲这个也值得尝试,另外中文索引确实很不好,大多只收录了百度的页面。

Python中的Generator的合并

刚学python时看到诸如:

book_name_list=(book.name for book in libary)

都觉得是一种顿悟,今天才知道它的原理yield,带有这个东西的都是generator。这么写简洁流畅、语义通顺,缺点是一直不知道怎么合并,用集合的操作符 | 会报错误:

unsupported operand type(s) for |: ‘generator’ and ‘generator’

然后发现了itertools,这个库的定义太爆了,创建高效的循环,没错就是他。那么多个generator可以这样合起来:

 

from itertools import chain

def generator1():
    for item in 'abcdef':
        yield item

def generator2():
    for item in '123456':
        yield item

generator3 = chain(generator1(), generator2())
for item in generator3:
    print item