小型站点的全文检索,Django-haystack+Whoosh+Jieba(若是中文),是一个好的方案,刚开始打算用Sphinx(不是那个文档系统)或者Lucene来实现,N年前做某大型钢铁交易平台时用的是Sphinx,但发现了django-haystack,对一个中小网站来说足够了。

在观测性能的时候发现一个现象,就是检索查询结果的时候大量的请求数据库,而且是随着数据的增多,连接数越来越多。。。这可不成啊,虽然不是大网站,但是性能问题还是要考虑滴。

解决方案:

在查询的模板HTML文件里,不要使用系统的ORM对象,比如{{ object.user.girl_friend.the_best_friend.cup_size }}这种对象写在模板里,是万万要不得的,这会直接向多个数据表请求数据,哪怕你用了select_related,你打开查看sql语句看一下,那sql语句的数量会让你内牛满面的。

那怎么办呢?

想好搜索结果,直接在search_indexes.py里合成成html片段,search.html(假设你的查询模板叫这个名字)里只使用search_indexes.py里的索引字段来返回查询结果,就ok了。

python manage.py makemessages,如果报如标题的错误,Mac上执行如下命令即可:

brew link gettext --force

ref: https://stackoverflow.com/questions/23353113/django-admin-py-makemessages-not-working

在一台台式机上装Ubuntu,Windows上有各种各样的ISO镜像工具来制作U盘启动盘,不想去再弄一台Windows折腾,发现unetbootin这个工具可以在Mac,很好用,比Windows上那些工具简洁多了,不错。

传送门:http://unetbootin.github.io/

当出现_Boost_MISSING_DEPENDENCIES字样,并报错error: cmake configuration failed!时,多半是没有安装boost库,若是Mac 执行以下安装命令再继续即可

brew install boost-python

---------------------- 补充 -----------------------------------------------------

在家里一台Ubuntu里安装的时候碰到了点麻烦,import dlib时一直报错:非法指令(核心已转储),

不巧Linux机器上没有梯子,然后家里长宽又很恶心各种IP和端口被限,很不方便。偷懒用百度查。。。奶奶的一个小时过去了毫无进展。

后来想起有个bing不用翻wall,点击进去居然发现有一个『国际版』,用英文关键字『dlib core dumped』查询,在第二条结果上找到了答案(github上的,第一条是stackoverflow.com,家里长宽点不进去)

https://github.com/davisking/dlib/issues/620

原来dlib默认用CPU SSE4指令集编译,是我的电脑CPU太老了的原因。。。

这样的话只能源码编译安装,不能pip了,到 https://github.com/davisking/dlib/ …

/media/upic/2017/09/06/newproduct.jpg

去年决定立项做一个精致有趣的小产品,因为30岁左右那会儿热衷过一段时间户外,加上佳光总部一直专业做LED的,我打电话给谢土豪问:我想做个露营灯,可以不?

谢土豪做了二十年的户外用品,LED手电和摄影三角架等器材,他电话里回答:搞!

这一搞,就是近一年,量产在即,记录并重新审视一下产品之路。

夹带的私货是,量产之后要销售,就算软文吧,我得让产品在互联网上留下痕迹,我发现我这个博客在百度上的排名高于公司官网,Google上则不然。

最近阿里云不停发邮件告诉我有N个『高危漏洞』,点击的时候却叫我购买一个什么鬼『云骑士』服务才可见。。。这是跟360学的么?

看了下他有7天试用期,点进去一看,尼玛,其实就是提醒yum升级:

yum update kernel yum update kernel-devel
/media/upic/2017/08/17/635923705961676641-1578771833_runner_main.jpg

停了两个月后,改公园里跑了,好像比在跑步机上受伤的情况有所缓解。

老严送的SUUNTO手表+APP记录,不再这里写了。

这里有很详细的说明了,

https://www.logcg.com/archives/1709.html

但是要注意一下,如果在./letsencrypt-auto那一步一直不成功(就算安装了python虚拟环境),有可能你用的是屌丝VPS内存不够,执行如下语句再试

user@webserver:~$ sudo fallocate -l 2G /tmp/swapfile user@webserver:~$ sudo chmod 600 /tmp/swapfile user@webserver:~$ sudo mkswap /tmp/swapfile user@webserver:~$ sudo swapon /tmp/swapfile

完成之后删除swapfile

user@webserver:~$ sudo swapoff /tmp/swapfile user@webserver:~$ …

懒得翻译了,反正按中文互联网上的什么改权限这的那的不管用折腾了好久,下面这段话save my ass.

I experienced the same problem and it was due to SELinux.

To check if SELinux is running:

# getenforce

To disable SELinux until next reboot:

可通过设置AppConfig的verbose_name实现,首先需创建apps.py文件,定义如下:

from django.apps import AppConfig class MyConfig(AppConfig): name = 'your name' verbose_name = 'your display name'

 

然后可以项目配置文件的INSTALL_APPS项中,把your app改为your app.MyConfig,或者在你的app的init.py定义default_app_config = ‘your app.MyConfig’

原来自己配完在init.py里忘记了。。。

感谢链接:http://blog.csdn.net/onepiece_dn/article/details/46046783

时间:30min 公里数:2.23km 方式:跑步机 体重:68.5 kg 最高时速:8.0 平均时速:4.46

备注:前面脚受伤,休息了近一个月,很担心因为这个受伤问题,习惯培养不起来,今天不再以时间为标杆,以心率为参照,超过160就降低速度。

细节不再描述,教程网上多的是,列几个坑:

1、1.9后,zh-cn, zh-tw被弃用,改为zh-hans(简体),zh-hant(繁体).

2、在locale文件夹里,中线要换成下划线,zh_hans,zh_hant,也就是讲,在用makemessages命令时,应该是这样的:

python manage.py makemessages -l zh_hans

python manage.py makemessages -l zh_hant

说多了都是泪。。。

3、每次执行python manage.py compilemessages命令时,要重启web server,尤其是生产环境,若像我一样用gunicorn,要重新执行一下gunicorn命令。

4、补充:第2点在Mac上是没问题的,但在CentOS 7上,要改成zh_Hans和zh_Hant,不能全小写。

5、Javascript内翻译请参考:

使用一句类似

results = MoorolProduct.objects.extra(select={'day': 'date(update_time)'}).values('day').annotate( records=Count('update_time')).filter(update_time__gte=begin)

的语句来统计数据,结果发现数据不对,查Sql语句,把Created_Time也Group By进去了,因为MoorolProduct这个Model默认通过Created_Time排序的。

results = MoorolProduct.objects.extra(select={'day': 'date(update_time)'}).values('day').annotate( records=Count('update_time')).filter(update_time__gte=begin).order_by()

加一个没有参数的order_by(),搞定之。

Django的发邮件程序在本机和以前买的境内阿里云ECS都可以以简单的配置,通过端口25发送邮件。因为本身用程序也不是发什么垃圾和绝密邮件,所以也不太在意,哪想新买的一个ECS死活发不出去。

1、先检查是不是因为是境外服务器的原因,换linode,在linode上没问题,排除之。

2、继续检查是不是邮件服务商拒绝来自境外服务器的请求,把coremail换到qq邮件(QQ邮件在这个博客上可以),还是发不了,排除之。

3、最后查半天发现是ECS把端口25封掉了。。。一个下午过去了,千万头草泥马从心头跑过。

4、既然找到问题所在,就换465端口吧,发现CentOS7不是用iptables来管理端口,是一个叫什么鬼firewalld的东西,折腾一会儿,启用了465端口,结果,还是不行,按https://bbs.aliyun.com/read/302371.html?spm=5176.bbsr302357.0.0.L8JNPj 的做法测试了下,卧槽,可以了,注:文章没说明,用CentOS的话,若报『Missing "nss-config-dir" variable. 』错误,要在/etc/mail.rc里增加另外一个配置set nss-config-dir=/etc/pki/nssdb

5、悲催的是,用Django的send_mail还是不行,但确定了肯定是Django这边的问题,跟端口没关系了,因为第4步的方法可以发送成功,重读文档:https://docs.djangoproject.com/en/1.11/topics/email/ 原来还要配置EMAIL_SSL_KEYFILE和EMAIL_SSL_CERTFILE,另外提醒一下,若是EMAIL_USE_TLS=True,一般默认端口不一定是465,要看你的邮件服务商的设置,比如我的是587,所以我们这里把EMAIL_USE_SSL配置成True

Google又时断时续,一直找不到怎么配置EMAIL_SSL_KEYFILE和EMAIL_SSL_CERTFILE,F**K GFW和方校长10的10次方遍.后来想了想,从字面意思上来看,应该就是openssl的pem证书,

openssl genrsa -out ca.key

openssl req -new -key …

时间:22min 公里数:1.43km 方式:跑步机 体重:69.25 kg 最高时速:6.0 * 2,6.0 * 1,6.0*1 平均时速:3.9

备注:因为脚受伤,休息了一周,现在得小心翼翼地跑,都不敢放开,都说受伤是跑步姿式不正确,可是怎么样才是正确的跑步姿式啊。。。跑完右脚踝又有点异样,哭。

新买了一个阿里云服务器,一不小心选了新加坡机房,不能换,坑爹。

默认CentOS7,yum安装完mysql后一直连接不了,原来是出了一个分支mariadb

传送门:http://stackoverflow.com/questions/31067135/in-centos7-can-not-start-mysql

时间:23min 公里数:1.6km 方式:跑步机 体重:69.4 kg 最高时速:6.0 * 2,8.0 * 1 平均时速:4.17

备注:脚踝以及以下的部分感觉不是太好,不敢高速跑太久,看来还是找一下相关方法,自己这么摸索不一定摸索得出来。

时间:14min 公里数:1.09km 方式:跑步机 体重:-- kg 最高时速:6.0 * 3,8.0 * 1 平均时速:4.56

备注:补记昨天的,前天隔了一天,扭伤没完全好,恢复中,脚后跟的异样感,会不会有大的影响呢。。。

时间:17min 公里数:1.17km 方式:跑步机 体重:69.8kg 最高时速:6.0 * 1,6.0 * 1 平均时速:3.96

备注:脚扭伤,断了三天没跑,今天只是活动活动,好担心脚受伤。。。

时间:27min 公里数:2.01km 方式:跑步机 体重:69.95kg 最高时速:8.0 * 2 慢跑时速:6.5 * 5 平均时速:4.41

备注:断了三天没跑,一天去讨论潘公酒,一天加班太晚,另外一天光智请吃饭回来太晚。非常吃力,这两天明显觉得脚后跟、脚掌和小腿都有点异样,到底是跑步姿式不对还是换了那双红色鞋子的问题呢?另外,不开GPS的情况下,SUUNTO Ambit3 Sport在跑步机上的测速跟跑步机相差还是蛮大,不过有个心率参照,挺好,过160就非常累了。