Sikuli的App类中文手册
应用类(App)
class App
使用类或者实例的方法
一般而言,你可以选择使用类的方法(e.g. App.open("application-identifier"))或者先创建一个类的实例接着使用该实例的方法(e.g. 先myApp = App("application-identifier") ,之后 myApp.open())。(对于二者)没有一个优先级的用法推荐,唯一真正的不同之处在于,当使用实例方法时,可能会节省一些资源,因为使用类的方法可能会产生更多的中间对象。因此,如果您频繁地使用相同的应用或者窗口,使用实例方法也许更合适(注:transparent的意思为"透明的;显然的;坦率的;易懂的",但译者认为此处理解为“合适的”最好)。
如何创建一个应用程序实例
基本的选择只是说,创建应用someApp = App("some-app-identifier")之后,你有你的应用实例,以后你可以一起使用实例的方法,而不必再次指定字符串。
通常,所有类的方法都会返回一个应用实例,您可以将其保存在一 ...
通过反编译破解charles
[TOC]
0x00 反编译
下载Charles应用并安装,获取源文件:Mac OS下打开finder==>应用程序,找到Charles,右键=>显示包内容=>Contents=>Java=>charles.jar。
将找到的charles.jar包拷贝一份到桌面或者其他目录,使用JD_GUI打开。如果没有JD_GUI,请自行度娘安装该软件。
在jd_gui界面中,可以看到charles.jar包的全部内容,和预想的一样,代码使用了混淆,看到的基本都是abcdef等等的类名。如果够幸运的话,能在com.xk72.charles包下面找到License类。请找这个类:com.xk72.charles.gui.frames.RegisterFrame.java。一定能找到此类,因为这个类就是改程序的入口,为什么这么肯定呢?是有原因,我们都知道Java应用的入口函数是main方法。不管代码怎么混淆,你总得告诉JVM,你的入口是什么吧。
12345public static void main(String[] paramArrayOfString){ ...
Java日志Log4j或者Logback的NDC和MDC功能
NDC和MDC的区别
Java中使用的日志的实现框架有很多种,常用的log4j和logback以及java.util.logging,而log4j是apache实现的一个开源日志组件(Wrapped implementations),logback是slf4j的原生实现(Native implementations)。需要说明的slf4j是Java简单日志的门面(The Simple Logging Facade for Java),如果使用slf4j日志门面,必须要用到slf4j-api,而logback是直接实现的,所以不需要其他额外的转换以及转换带来的消耗,而slf4j要调用log4j的实现,就需要一个适配层,将log4j的实现适配到slf4j-api可调用的模式。
说完基本的日志框架的区别之后,我们再看看NDC和MDC。
不管是log4j还是logback,打印的日志要能体现出问题的所在,能够快速的定位到问题的症结,就必须携带上下文信息(context information),那么其存储该信息的两个重要的类就是NDC(Nested Diagnostic Context)和MD ...
Mysql事务排查
当我们跑MySQL服务器查看日志的时候,如果发现如下类似日志:
171013 2:04:25 [ERROR] /usr/local/mysql/bin/mysqld: Sort aborted: Lock wait timeout exceeded; try restarting transaction
171013 2:06:26 [ERROR] /usr/local/mysql/bin/mysqld: Lock wait timeout exceeded; try restarting transaction
171013 2:06:26 [ERROR] /usr/local/mysql/bin/mysqld: Sort aborted: Lock wait timeout exceeded; try restarting transaction
171013 2:07:33 [ERROR] /usr/local/mysql/bin/mysqld: Lock wait timeout exceeded; try restarting transaction
…
出现这些日志 ...
springboot启动时开启一个或多个线程
需求背景
最近项目基于springboot做微信机器人,从网上看了一下,一般都是单个用户登录,然后一个线程死循环,类似监听器,如果有信息就处理信息。但是,我们的要求是需要可以多个用户登录,所以,每次登录一个用户,开启一个线程,用户意外退出或者接口响应错误的情况下,该线程回收。
具体流程图如下:
设计思路很简单,但是问题真多。具体遇到的问题,在另一篇中详细讲解吧。此处,就想解决线程池争取资源时间太长的问题,想放弃前面的思路,直接在项目启动的时候开启一个监听器线程,循环处理。也就是上面流程图中async的监听器,原来是每个登录请求都会创建,现在设计为程序启动后直接开启一个线程监听,从队列中获取信息,新来的机器人加入到队列末尾,依次遍历,同微信服务器保持心跳。虽然两者都有很多弊端,能支持4-8个机器人同时在线即可。
开启线程
方法1
首先想到方法是在Application的main方法中创建一个线程:
1234567891011public static void main(String[] args) { System.setProperty("https.p ...
Docker仓库介绍
Docker Hub
Docker 官方维护了一个公共仓库,大约有上万个镜像,大多数情况下,我们可以直接使用该仓库中的镜像部署服务。
通过在 Docker Hub 注册账户,获得一个 dockerId,可能很多人在 Mac 版的 Docker 中看到登录时需要一个 dockerID,其实这个dockerId 就是登录账号。
在 Docker Hub 的 WEB 站点,可以搜索自己感兴趣的镜像,还可以查看镜像的参数,比如nginx、mysql等,可以看到数据nginx html 页面保存的目录,端口配置,可以看到MySQL用户名和密码的设置参数等信息。
在 shell 窗口可以使用 docker login 交互式命令输入用户名和密码登录,也可以使用docker logout退出。
搜索镜像
12docker search {imageName}# docker search nginx
拉取镜像
12docker pull {imageName}[:tagName]docker pull nginx:latest
推送镜像
注意,p ...
ShiroFilter的配置
table th:first-of-type {
width: 15%;
}
table th:nth-of-type(2) {
width: 40%;
}
table th:last-of-type {
width: 45%;
}
引言
上一节《DelegatingProxyFilter的作用》中详细讲解了DelegatingProxyFilter,并且引出了shiro。
Shiro是Java的一个安全框架。因为其较之于spring-security配置灵活,使用方便,越来越受到程序猿的青睐。目前,Shiro应用在各大公司的OA系统、CRM系统等具有资源权限管理的系统中。
Shiro的相关概念,请参考开涛的跟我学Shiro的第一章《Shiro简介》,如果要做相关开发,请仔细学习。
认识Shiro
【下面的内容属于开涛,我只是自学的过程中抄写一遍,加深自己的影响和理解】
Shiro框架
Shiro提供:认证、授权、加密、会话管理、与web集成、缓存等功能。因此是RBAC开发中的一件利器。
![shiro-framework][3]
shiro框架 ...
DelegatingProxyFilter的作用
概要介绍
人人网开源了一款基于Mybatis、Springmvc、Shiro框架的一套权限管理系统,项目的地址在此:【SpringMVC版】,【SpringBoot版】。
既然是web应用,就先从web配置开始学习。 renren-security是基于shiro框架做的权限管理。shiro和spring-security都能实现权限粒度的管控,只不过shiro提供了一套Java api,spring-security需要和springmvc整合在一起。
Shiro和Spring-security的比较
该比较来源此文:安全框架Shiro和Spring Security比较,为了方便阅读,现copy此处。
Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:
易于理解的 Java Security API;
简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
对角色的简单的签权(访问控制),支持细粒度的签权;
支持一级缓存,以提升应用程序的性能;
内置的 ...
K8S离线依赖库与镜像制作
docker环境下载
1.yum仓库添加
1234567# vim /etc/yum.repos.d/docker-ce.repo [docker-ce-stable]name=Docker CE Stable - $basearchbaseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stableenabled=1gpgcheck=1gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
推荐添加阿里云的源,速度非常快。
2.docker环境本地下载
1yum install --downloadonly --downloaddir=. docker
该命令会把docker以及依赖全下载到指定目录。
注:若发现目录下没有下载的rpm包,请到/var/cache/yum/{RepositoryName}/packages/目录中找。
123$ ls /var/cache/yum/x86_64/7/base ...
Ubuntu 16.04 安装MySQL + nginx + PHP7
1. 安装MYSQL
note: 如果是新购买的服务器,可能需要升级软件安装源。
否则会出现如下错误:
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to locate package mysql-server
E: Unable to locate package mysql-client
升级命令:
apt-get update
<-- more–>
1.1 安装命令
1apt-get -y install mysql-server mysql-client
你会被要求提供MySQL的root用户密码,总共输入两次,一次输入,一次确认。我们从安装信息我们可以知道3件事:
安装的MySQL的版本,此处安装的是5.7
依赖包:libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.0-5 libfcgi-perl libhtml-parser ...