Whoosy's Blog

藏巧于拙 用晦而明 寓清于浊 以屈为伸

0%

拉取镜像很慢怎么解决

下载官方镜像点的镜像国内访问速度太慢,使用加速器可以解决;DNS可以自己定义
首先打开配置文件daemon.json,centos上默认有此文件,但是ubuntu上需要自己创建

阅读全文 »

Docker简介

docker通过内核虚拟化技术(namespace及cgroups等)来提供容器的资源隔离与安全保障等,由于docker通过操作系统层的虚拟化实现隔离,所以docker容器在运行时,不需要类似虚拟机额外的操作系统开销,提供资源利用率。

阅读全文 »

极验滑块验证码识别及破解

[success] 文档说明:

该文档主要介绍利用SeleniumPIL,和numpy等开源工具对滑块验证码的破解及识别

目标

通过程序识别并通过极验验证码的验证
  • 分析识别思路
  • 识别缺口位置
  • 生成滑动拖动路径
  • 模拟实现滑块拼合通过验证

识别思路

对于应用了极验验证码的网站,识别并不是没有办法。如果我们直接模拟表单提交的话,加密参数的构造是个问题,必须利用js逆向工程找出相关加密方式,如果参数构造有问题服务端就会校验失败,并且对方网站相关js文件更新也会对验证码识别造成影响,所以在这里我们采用直接模拟浏览器动作的方式来完成验证,在 Python 中我们就可以使用 Selenium 来通过完全模拟人的行为的方式来完成验证,此验证成本相对于直接去识别加密算法容易不少。

阅读全文 »

TCP 长连接和 KeepAlive 心跳机制

[danger] “踩坑”背景:公司因为需要,计划将内部一些生产服务迁移至云主机进行长期维护。云服务商是国内某主流电信运营商旗下的虚拟化云平台,因为性价比高且在我们当地部署有云节点,成为了我们创业小团队的首选。

说实话,在使用该平台订购主机的时候,就已经感受到其易用性和整体 Web 系统的用户体验上都无法和“老马家”的虚拟化云平台相媲美。算了,这都无所谓,只要云主机和整体网络环境足够稳定,其他都无法比“省钱”来得更实在。多余的话不说了,云主机和网络环境是否足够稳定,需要我们长期观察,这里主要还是记录下由于我们在云主机环境下搭建生产环境的经验较少,导致诸多异常情况无法及时处理的经验、教训和总结。所谓“打铁还需自身硬”,各领域知识的积累是我们解决问题的关键,有时候会成为思路上的启发,进而成为领域认知的问题,比如对“TCP 长连接和 KeepAlive 心跳机制”的准确理解,是解决我们云主机部署过程中遇到问题的关键。

阅读全文 »

在web开发中,我们经常会遇到项目中很多对表单进行自定义,比如说saas应用针对用户自定义表单字段名称,自定义列表名称。 还有更高级自定义,比如说自定义的模块,表单、字段、字段类型、流程等自定义。

提供自定义也是一个系统扩展性的体现,自定义功能的强大自然能适应更多的用户场景。

接下来我们就看看自定义的实现方案通常都有哪些方式。

常见的自定义字段的实现方式分为四种由简到繁,扩展性、复杂性也是逐渐增强的,每个方式各有优劣解决的场景也有所不同,具体往下看。

动态列式存储自定义字段

模型如下

ID Name Ext1(性别) Ext2(地区) Ext3(手机号) Ext4(WECAHT)
1 韩梅梅 河南 13700000000
2 李雷 北京 abc
阅读全文 »

容器化自动打包部署思路

简介

公司当前的文章都是发布在gitbook上,gitbook是一个基于nodejs的项目,之前是直接跑在服务器上,现在已经把它迁到了docker容器内,并实现持续集成持续发布。

阅读全文 »

部署Hadoop集群

目前对大数据挺感兴趣的,后面想要深入研究一下,故再次先尝试搭建一下Hadoop集群

阅读全文 »

rabbitmq四种交换机介绍

RabbitMQ作为一个消息队列提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全可靠。
消息(Message)由Client发送,RabbitMQ接收到消息之后通过交换机转发到对应的队列上面。Worker会从队列中获取未被读取的数据处理。
RabbitMQ消息模式的核心理念是:生产者没有直接发送任何消费到队列。实际上,生产者都不知道这个消费是发送给哪个队列的。
相反,生产者只能发送消息给交换机,交换机是非常简单的。一方面它接受生产者的消息,另一方面向队列推送消息。交换机必须清楚的知道如何处理接收到的消息。附加一个特定的队列吗?附加多个队列?或者是否丢弃?这些规则通过交换机的类型进行定义。

阅读全文 »

编码不易,转载请注意出处!

事务及其特性

数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务的使用是数据库管理系统区别文件系统的重要特征之一。

事务拥有四个重要的特性: 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),简称ACID。

阅读全文 »

编码不易,转载请注意出处!
在阅读本文章之前,您需要对python logging模块了解,并清楚什么是root logger

Python logging模块可以自定义日志消息。比如,您可能希望将日志消息写入屏幕、文件和日志管理服务(如Papertrail)。
在这种情况下,你将要添加三个日志处理程序到你的应用程序的根日志中去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import logging

logger = logging.getLogger()
formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s [%(lineno)d]')

# StreamHandler
sh = logging.StreamHandler()
sh.setFormatter(formatter)
logger.addHandler(sh)

# FileHandler
fh = logging.FileHandler('logs.log')
fh.setFormatter(formatter)
logger.addHandler(fh)

# SysLogHandler
slh = logging.handlers.SysLogHandler(address=('logsN.papertrailapp.com', '...'))
slh.setFormatter(formatter)
logger.addHandler(slh)
阅读全文 »