一次可怕的误操作-暨IDE的重要性

很早之前喜欢用VIM 敲代码,也跟着yangyangwithgnu的文档折腾过一段时间,不过随着几次换电脑、重装等(虽然配置也做了备份),热情逐渐退却,在项目开发中还是换回了IDE,平常写一些简单的脚本才会用VIM,也是第一反应,毕竟为了写两三个文件的代码是不需要用IDE的。也幸亏用了PyCharm,才免去了一次说大不大说小不小的损失。

Read More

Django添加用户Celery任务

系统开发需要添加用户自己设定的定时任务,当然这种任务不是用户自己编程那种,而是写好的逻辑,用户设定参数执行即可。

上篇Django2结合Celery添加定时任务说明了如何利用Celery设定定时任务,这次需要用户添加自己的定时任务,总共分为步:

Read More

Twisted 服务间通信

基于Django & Channels & WebSocket & Twisted的物联网远程控制】写到,下位机每隔一段时间连接上位机传送数据和进行任务下发,现在领导改需求了,要求使用长链接,使得上位机的任务可以随时下发,方便用户。小米的智能家电采取的应该也都是长链接的方式,由于小米家电本身是市电供应,家里也都是wifi上网,所以除了会多消耗服务器资源外,这种即时的控制还是蛮不错的。但是真正用于野外的物联网终端,还是要平衡好电量、流量的问题才行。

Read More

记一次Confluence迁移数据库和Docker network网络修改

公司的Confluence越来越慢,查看了一下日志,好多数据库连接超过最大数错误,另外由于数据库有很多定时任务,磁盘读写频繁,所以选择在另一台机器上重建一个数据库。

由于Confluence是破解的,如果每次创建新容器序列号会变,所以原有的Confluence容器不能删除。

Read More

docker-compose 子目录编译、运行

公司开发物联网业务,使用Twisted 基于TCP协议开发的上位机服务,使用Django开发的Web后端,虽然是分别开发的,但两个服务之间有一定的耦合,比如上篇【基于Django & Channels & WebSocket & Twisted的物联网远程控制】就需要Web后端和Twisted共同完成,而Twisted上位机接收到下位机但上传数据后,是异步调用了Web后端进行数据入库的,所以两个服务还是一块启动的,再加上Redis, Postgresql数据库服务等,最终选择使用Docker Compose 一块发布管理。

Read More

ShadowsocksX-NG kcptun加速配置释疑

新版ShadowsocksX-NG 已经自带了kcptun 客户端,这样就不用自己单独启动kcptun进程了。但是shadowsocks团队并没有给出配置示例,导致很多网友对设置含含糊糊,从Google 搜索的第一页结果就可以看出来。

Read More

基于Django & Channels & WebSocket & Twisted的物联网远程控制

公司业务需要开发IOT从硬件到软件的全部工作,由于一开始来的硬件工程师选择了基于TCP直接进行终端与控制中心交互,自己设计报文内容与格式,所以远程控制也需要自己实现。还是自己太年轻,放着好好的现成的MQTT协议不用,自己瞎折腾。

硬件终端与服务器的通讯模块采用的是普通的2G卡,这样才能与自己的服务器直接通信(电信的物联网卡只能连接华为云,移动的物联网卡只能连接Oneconnect云平台,然后再对接自己的业务系统)。为了节省终端电池电量,终端5分钟唤醒一次连接服务器上报数据,也就是在这个时候,需要服务器查询控制任务队列,下发给下位机。所以,这里有下面几个工作需要完成:

Read More

django-allauth配置微信登陆

django-allauth很方便地继承了第三方登陆的功能,但其说明文档并不是很详细,配置一个demo都捉摸了好长时间,这里就以微信订阅号登陆为例,详细地说明一下配置过程,以供其他新上手地小伙伴参考。

Read More

Django2结合Celery添加定时任务

项目需要对一些观测数值做监控预警,没有找到特别合适的专门的开源项目,因此决定采用Celery实现任务调度,当然,除了Cerlery,还有就是可以采用APScheduler实现,也有django-apscheduler的开源项目利用Django的ORM存储APScheduler的任务和调度信息,但是APScheduler并没有那么灵活,比如要想修改例行信息,是需要修改源代码并且重启Django进程才可以,也正是参考了这个Stackoverflow问题,才决定选用Celery来调度任务。

Read More

python3调用Twisted web request的坑

硬件终端发送数据给服务器采用的是TCP直接传输,自己定义了二进制数据流格式,选来选去采用了Twisted开发TCP服务器。在数据外露的时候,采用Django开发了一个网站,因为在Django中已经定义了数据模型,不能也不想定义两次数据模型,所以Twisted接收到数据时,调用Django的REST接口保存数据到数据库,这就需要用到Twisted web client 发送数据。该回答 分析了在Twisted和Django中“共享数据库”的几种方法。

Read More