说出来本身就是一种解决问题的方法

以前遇到过一个同事,性格温和,入职时大家都很喜欢她。但渐渐地,总觉得哪里不对劲。一次执行一个大项目,分解任务到她时,她闷闷地说一句「哦」,急性子的同事忍不住追问,「行还是不行?」她说「行吧。」

搭档当时觉得有点儿不对劲,但也没多想,觉得都是职场人,既然应允了下来,应该会各自前行,为结果负责,而且每天坐在同一个办公室,遇到状况肯定会说的。

当时人少事多,大家也就各忙各的了。

一周之后,大家阶段性碰头,这才发现她工作倒是都做了,但完全不符合要求。

「我又不是没做,前几天还熬了通宵。」她很委屈。

比她更崩溃的,是那个搭档。「到这时候了,我们哪里来得及翻身调头!」

她一脸迷茫,「那怎么办,我又没经验,我也不知道怎么办啊。」

搭档忽然就意识到「怪怪的」感觉是什么。她从来不跟大家反馈,你觉得有问题去问她,她觉得「还好啊」。再多说几句,「那就改呗,我也没太清楚。」

她态度总是很好。可是我们都知道,有些东西不对。

「我们既然已经是同事,每天早上从一个城市的四面八方赶到同一个地点,选择走在一条路上。如果她能相信我们多一点,她就可以把她的顾虑和困扰说出来,那些东西本来就是我们整个团队一起扛的,她要相信我们可以接得住。」

说出「我不喜欢,我不行了,这一切不是我想要的」,本身就是一种解决方法。

破解WinRAR

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

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

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

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

找到字符串表格(String Table)展开,找到第80行。然后找到1277行,把内容删除。

点击编译,然后保存文个。用保存下来的文件替换安装目录下的WinRAR。

经测试,如果没有注册文件,广告弹窗依然会有,只是没有内容。这里我提供一份网上找来的注册文件:点击下载

把rarreg.key复制到和WinRAR.exe同一目录即可。

这下没有弹窗,终于清爽了。

激活MS Office 2019

从MSDN下载官方office 2019镜像,安装后使用如下方法激活:

新建文本文档,输入以下代码:

@echo off
(cd /d "%~dp0")&&(NET FILE||(powershell start-process -FilePath '%0' -verb runas)&&(exit /B)) >NUL 2>&1
title Office 2019 Activator r/Piracy
echo Converting... & mode 40,25
(if exist "%ProgramFiles%\Microsoft Office\Office16\ospp.vbs" cd /d "%ProgramFiles%\Microsoft Office\Office16")&(if exist "%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs" cd /d "%ProgramFiles(x86)%\Microsoft Office\Office16")&(for /f %%x in ('dir /b ..\root\Licenses16\ProPlus2019VL*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul)&(for /f %%x in ('dir /b ..\root\Licenses16\ProPlus2019VL*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul)
cscript //nologo ospp.vbs /unpkey:6MWKP >nul&cscript //nologo ospp.vbs /inpkey:NMMKJ-6RK4F-KMJVX-8D9MJ-6MWKP >nul&set i=1
:server
if %i%==1 set KMS_Sev=kms7.MSGuides.com
if %i%==2 set KMS_Sev=kms8.MSGuides.com
if %i%==3 set KMS_Sev=kms9.MSGuides.com
cscript //nologo ospp.vbs /sethst:%KMS_Sev% >nul
echo %KMS_Sev% & echo Activating...
cscript //nologo ospp.vbs /act | find /i "successful" && (echo Complete) || (echo Trying another KMS Server & set /a i+=1 & goto server)
pause >nul
exit

保存之后,修改文本文档后缀,将.txt修改为.bat

保持联网,然后以管理员身份运行,等待数秒,即可激活。

本方法通过kms密钥管理服务器激活,有效期为180天,但是根据国外论坛的说法,也就是等到180天后,会自动联网激活。

继续阅读“激活MS Office 2019”

Java在Linux获取时间不一至

刚刚发现java程序在Linux下获取时间,比系统当前时间少8小时。程序如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()));

第一反映是系统默认时区或硬件时钟与系统时钟不同步引起,于是查看。

硬件时钟与系统时间都正常。

记得android开发中,格式化日期需要强制指定时区。于是在Java中找到设置时区的函数:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(sdf.format(new Date()));

编译再执行,发现时间正确了。

因为现在运行的项目是已编译好打包运行的,修改源码还是很麻烦的。可以加上启动参数指定时区。

继续阅读“Java在Linux获取时间不一至”

Python命令开启HTTP.Server服务器

在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer。我们可以很简单的使用  python -m SimpleHTTPServer 快速搭建一个http服务,提供一个文件浏览的web服务。

python -m SimpleHTTPServer 8000

使用上面的命令可以把当前目录发布到8000端口。

对于不同的python版本有不同的方式

Python <= 2.3

python -c "import SimpleHTTPServer as s; s.test();" 8000

Python >= 2.4

python -m SimpleHTTPServer 8000

Python 3.x

python -m http.server 8000
继续阅读“Python命令开启HTTP.Server服务器”

SSH Socket 代理

前几天发下shadowsocks不能用了,猜测是“两会”期间加强了GFW。我用的是亚玛逊云vps,虽然shadowsocks不能使用,但ssh可以正常连接。于是使用ssh隧道开启socks代理。

ssh -i LightsailDefaultKey-us-east-1.pem -N -f -C -D 0.0.0.0:1080 用户名@主机ip

参数说明:

-q 静默运行
-N 是不执行远端命令
-f 后台运行
-C 压缩
-i ssh验证密钥

然后把这段命令加入启动脚本即可。

连接ssh我使用的是密钥验证,如果使用密码验证,加入启动脚本是无效的,因为ssh自带参数不能输入密码。使用sshpass可以做到。

安装sshpass:

apt install sshpass

sshpass命令使用很简单,sshpass -p 密码,后面接着原来ssh连接命令就行了:

sshpass -p 密码 ssh -i LightsailDefaultKey-us-east-1.pem -N -f -C -D 0.0.0.0:1080 用户名@主机ip

命令启动成功后就在本地打开了一个socks5代理,端口是1080。然后使用客户端代理配置,是可以访问google、facebook的。

继续阅读“SSH Socket 代理”

MySQL把多个查询结果合并JSON

一条主数据有诺干详情记录。这种场景是很常见的。有时候我们需要全部查询出来,按关联关系返回结果。

比如:每条广告发布在多个项目里,现在需要查出前10条广告所在的项目名称。

SELECT info.title,
 CONCAT('[',
  GROUP_CONCAT(
  CONCAT('{projectCode:"', gbp.projectCode, '",'),
  CONCAT('projectName:"', gbp.projectName, '"}')),
  ']') AS projectInfo FROM ghome.ghome_billboard_project AS gbp
  left join ghome.ghome_billboard_info AS info
  ON gbp.billboardId = info.billboardId
  GROUP BY gbp.billboardId
  LIMIT 10

主要是GROUP_CONCAT和CONCAT函数用法。这条sql把广告的项目信息转成json格式放在projectInfo字段。

补充(2019-03-15):

mysql的group_concat默认连接长度为1024字符,其余部分都会被截取丢掉。可以修改配置常量:

SET SESSION group_concat_max_len=102400;

或者全局:

SET GLOBAL group_concat_max_len=102400;

也可以在配置文件上加上:

group_concat_max_len = 102400;

Spring Boog引入ZooKeeper启动报错

在Spring Boot中引入ZooKeeper的jar包,启动时报错,如图:

是slf4j日志包冲出导致,因为项目在spring-boot-starter-logging中已引入。

解决办法,排除ZooKeeper中slf4j的依赖:

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>${zookeeper.version}</version>
    <exclusions>
        <exclusion>
            <artifactId>slf4j-log4j12</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

参考:https://blog.csdn.net/change987654321/article/details/82800279

Linux下vmware开启3D加速

自建一个Linux环境的工作站,基于Ubuntu 18.04。把vmware虚拟机系统迁移到,系统是Windows 10 LTSC。启动时系统出现如下提示:

No 3D support is available from the host.
The 3D features of the virtual machine will be disabled.

搜索相关资料,在虚拟机配置文件中加上

mks.gl.allowBlacklistedDrivers = “TRUE”

再次启动,已经没有相关提示。

PS:因为Linux下驱动原因,这里是否真的在虚拟机开启3D加速,还需要验证。可以在系统进行Directx测试。

配置中心之Apollo

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

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

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

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

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

继续阅读“配置中心之Apollo”