• 一个PhpMyAdmin的https错误

    使用docker安装phpmyadmin,启动成功登录,出现提示:服务器和客户端上指示的 HTTPS 之间不匹配。这可能导致 phpMyAdmin 无法正常工作或存在安全风险。请修复您的服务器配置以正确指示 HTTPS。

    以前phpmyadmin是直接安装在nginx里的,没有这个问题。现在用nginx做为代理。外部访问使用https,内部用http。

    解决方法是修改参数:

    $cfg[‘PmaAbsoluteUri’] = ‘https://pma.xxx.com’;

    在docker中启动,可以在启动时指定环境参数(该参数在官方文档里没有但是有效):

    -e PMA_ABSOLUTE_URI=https://pma.xxx.com

  • 破解WinRAR

    最近WinRAR爆出一个存在十多年的漏洞,影响很大。全新的5.7版本已修复。

    几年前WinRAR开始免费,但免费版会弹出广告。我在官方下载了最新WinRAR 5.7,然后导入注册文件。再打开WinRAR显示已注册。可WinRAR依然弹出广告。

    源于强迫症,不肯屈服广告。但网上没有最新的正式破解版(有5.7 beta2版本),无奈只有自己动手了。

    下载 Resource Hacker ,找到WinRAR安装目录,打开WinRAR.exe文件编辑。

    (更多…)
  • 配置中心之Apollo

    随着业务系统越来越复杂,微服务架构成为主流。管理众多微服务的配置是一件头疼的事。在Spring Cloud中有提供配置中心模块,是基于文件管理方式,依赖svn/git,修改配置文件后无法自动同步。

    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

    与Spring Cloud相比,Apollo是将配置文件存入MySQL数据库中,有WEB管理界面,有权限控制,支持灰度发布,配置回滚及集群和配置文件时实同步。同时也能很好的与Spring Boot、Spring Cloud整合。以下是它的基础模型和架构模块图。

    关于Apollo详细设计可参与官方文档:Apollo配置中心设计

    Apollo的官方资料写得挺详细,但文档的结构不太符合我的阅读习惯。比如:在介绍一项配置,它列出各种集成方式。我觉得应该分开,基础的,与Spring Boot集成的,与Spring Cloud集成。废话不多说,以下是我的操作回放。

    (更多…)
  • 本地架设私有git服务器

    从事软件开发肯定少不了对代码进行管理和版本控制。以前一直使用svn,好处是简单又有权限控制。后来项目种类多了,用git管理,不相关的项目做隔离。使用git有很多种方式,自己管理代码采用ssh连接,方便快捷。现在希望有一个好的呈现界面,像github和gitlab一样,方便查阅和分享。

    github属于微软派系,自己用的比较多,可惜不提供源码自己架设。所以我选择google旗下的gitlab。
    本地环境:Ubuntu Server 18.04

    我采用docker安装,首先安装docker
    apt install docker-compose

    下载gitlab社区版镜像
    docker pull gitlab/gitlab-ce

    启动gitlab

    docker run –detach –hostname gitlab.wangzhengzhen.com –publish 10080:80 –publish 10022:22 –name gitlab –restart always –volume /home/docker/gitlab/config:/etc/gitlab –volume /home/docker/gitlab/logs:/var/log/gitlab –volume /home/docker/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest

    在这里,端口和目录的映射跟据自己需要修改。
    PS:启动过程有点慢,需要耐心等待。

    (更多…)
  • 实现 MySQL Top 函数【原创】

    需求:查询数据,根据字段分组,取出分组后每组的前N条记录。
    如果是在SQL Server中,可以使用top,取前N条记录。但是在MySQL是不支持的。网上说的比较多的是用limit N,虽然可以取到前N条,但那是分组后的N条,不是每组N条数据,所以不符合需求,排除。还有一种是使用union把多个结果连接起来,这种方法需要提前知道有分多少组,而且不适合分组太多的场景,排除。

    我的实现思路:
    1.查出分组后的数据。
    2.使用原表数据和分组后的数据连接起来。
    3.按组生成序列(从0开始)。
    4.根据序列编号做为条件,找出前N条数据。
    (更多…)

  • 从SQL查询结果随机取一条数据

    最近工作中会涉及复杂的SQL语句,还是挺有意思的。以前想写没有应用场景,现在正好可以多锻炼锻炼。我觉得在实际开发中,程序代码并不是最难的,最难的还是SQL。SQL逻辑性最强,而且还要很清楚表设计,业务场景。特别是复杂的业条场景下提炼数据,要考虑到功能,性能,是否会锁表。
    需求:有一张表保存诺干条广告信息。当APP启动时,根据登录用户所在的区域,随机取出一条广告返回,作为启动页。

    数据库:MySQL
    刚开始,我的做法是:

    select floor(max(startPageId) * rand()) from ghome.ghome_startpage_info where 1=1 and status!='00';
    

    startPageId是自动增长的Integer型
    其他where条件不贴出来了。这句意思是,查询符合条件的数据,根据 max 函数找出结果最大的,乘以 rand 函数随机生成的一个小于1的数,再用 floor 去掉小数位。得出一个 randId。
    (更多…)

  • [原创]通用验证工具2.0

    两年前,我在这里发布了”JAVA通用验证工具”,并开源共享到 github 上。在之后的项目中,也是有使用的,算得上是经历了线上的考验。与其他如:Spring Validator,Apache Validator相比,主要有几个优点:
    1.无第三方依懒引入,更轻量更容易扩展。
    2.对于JAVA对象支持分组,根据不同业务场景验证必要字段。
    3.对Android提供独立支持,验证返回资源引用ID。
    (更多…)

  • 云开发IDE - Eclipse Che

    Eclipse Che是一个现代的、开放源代码的软件开发环境,它是基于云端的IDE。官方没有提供直接可运行的程序,而是使用现在正火的Docker镜像。官方推荐Docker 17+,首先需把本的Docker升级到最新。

    不同平台的升级方法:https://docs.docker.com/install/
    我本地的环境是Ubuntu 18.04,使用单用户安装方式。执行如下:

    1.卸载旧的docker

    apt remove docker docker-engine docker.io
    

    2.安装必要的软件包

    apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        software-properties-common
    

    (更多…)

  • 近期的工作

    打开电脑,现在北京时间是2017-11-17 3:56。在深圳这座充满激情的城市,每天深夜和清晨都会迸发出很多灵感。有时候一些突如其来的思绪会让我兴奋地睡不着,就像现在,实在忍不住起床大干一场。

    今天注定是个不眠的夜。回想起最近的工作,确实有值写的东西。公司刚开始做线上的业务,系统的所有功能都是按线上的东西去做,可是变化太快,转眼线下的业务开始了。于是每一次的需求评审完就是立即安排输出,系统就像堆积木一样,零零散散,越到后面顾及和兼容的东西越多,解决每次因依赖关系造成的稳定问题刻不容缓。于是在需求之外的三轮主要优化工作开始了。

    我是一个比较喜欢折腾的人,在代码方面也有洁癖。同时我不是一个为技术而技术的人,结合实际情况使用实现。最近的系统优化让我感受很多。我从不相信一个固定的道理。任何道理都有正反两面可以去说,只有在合适的场景去相信那些鸡汤,才会鼓舞人心,事半功倍。否着就是螳臂挡车,逆行而上,自然也会遇到阻碍。
    (更多…)

  • Linux搭建VPN服务器

    系统:MintLinux(基于Ubuntu)
    类型:PPTP
    搭建 VPN 服务器的方法非常多,比较著名的有 PPTP, L2TP/IPSec 和 OpenVPN。这三种方式中后两者的安全性比较好,但配置较麻烦。其中 OpenVPN 在 Windows/Mac 平台上还需要额外的客户端。

    操作如下:
    安装pptpd

    apt install pptpd
    

    编辑pptpd配置文件

    打开 pptp.conf 配置文件

    vi /etc/pptpd.conf
    

    找到
    #localip 192.168.0.234-238,192.168.0.245
    #remoteip 192.168.1.234-238,192.168.1.245
    去掉前面的注释#号,修改为
    (更多…)

  • Android使用SOAP调用远程服务

    SOAP是一种基于XML的协议规范,最近正好使用到了它。在Android中,可以使用KSOAP2来调用WebService。
    KSOAP2相关文档:http://simpligility.github.io/ksoap2-android/
    KSOAP2下载地址:https://oss.sonatype.org/content/repositories/ksoap2-android-releases/
    下载 ksoap2-android-assembly-3.6.0-jar-with-dependencies.jar,将该jar包放入工程的libs目录中。调用步聚如下:

    SoapObject request = new SoapObject("http://service", "getName");
    

    SoapObject类的第1个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第2个参数表示要调用的WebService方法名。
    设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步。设置方法的参数值的代码如下:
    (更多…)

  • 解析HTTP协议实现文件上传

    在J2EE开发中,使用浏览器上传文件很简单,服务器用Apache的Commons FileUpload实现就可以了。但是在开发C/S架构的程序时就需要自己处理。用代码实现文件上传需要对表单的multipart/form-data有所了解,(表单默认情况下使用application/x-www-form-urlencoded)。

    在multipart/form-data中Content-Type是这样的:

    boundary是表示分隔,用于分隔多个文件。格式是 — 后面可以跟随一串随机数。
    (更多…)

  • Android 图片压缩

    现在的手机动不动就是几千万像素,拍下来的照片一般都有3M-5M,像华为荣耀7拍的有7M左右。这么大的图片上传不仅很慢,还会造成服务器端有很大的压力,所以有必要把图片进行压缩。

    压缩图片有两个要点:
    1.等比缩小图片大小
    2.适当降低图片质量
    现在的项目中需要有一个证件上传功能,在保证证件照清晰可辩的情况下要缩减图片大小,所以我写了一个工具类。
    (更多…)

  • J2EE基础框架集成

    Spring 4出来很长一段时间了,现在最新稳定版是4.2.4。我把外面做项目常用的框架集成写了一个demo,从请求到保存数据。可以作为项目快速搭建与开发。如果要提高效率和形成团队规范,还需要深度开发。
    项目为Maven工程,始用Eclipse创建。导入项目后可能需要一段时间让Eclipse自动下载依赖包。依赖包主要有:Spring、Spring Web、Spring Jdbc、MyBatis、Mybatis Spring、MySQL Connect Java、Apache Common DBCP2、Log4j2。

    项目结构如下:
    20151220132534
    数据库脚本:
    (更多…)

  • openssl生成pfx证书

    做为一个javaer,生成证书工作理应首选keytool。但是keytool生成的证书是jsk的keystore,不符合要求,只有使用openssl了。
    openssl是一个很强大的工具,里面有很多加密算法和证书格式,对此我也只是了解一部分,有时间要好好补补这一块知识。以前在接支付宝时使用openssl生成过pfx证书,没有记住命令。在网上一搜,大部分都是5部生成https证书的。好不容易生成出来,特意mark一下。

    1.生成2048位的rsa私密。之所以使用2048是因为1024位的密钥对于现在计算机性能来说,比较容易破解。

    2.生成公钥,有需要的话可以不加上 -days参数。这个参数表示有效时间,单位是天。

    (更多…)