解惑

解己之惑,解人之惑

TransportClient要被淘汰了

发现我们使用的ElasticSearch的版本快过期了(end of life),计划升级,发现ElasticSearch将要淘汰原来的TransportClient转而力推High Level Rest Client了。

其它的问题都还好说,包的依赖和Client的初始化的不同影响面比较小,但是接口的不兼容影响比较大,不知道需要多少代价才能改完,不过好在都有各种测试代码了,修改应该可以。

 

新成就Get:Java的bug

搞了这么多年Java,总算是让我逮住一个Java的bug,Java不能正确的处理未经压缩的大Jar包:JDK-8223811

最开始怀疑是第三方的打包库导致的,后来进一步验证确定是Java自己的bug,因为使用jar命令打出来的包也有同样的问题。

出现的异常信息是:java.util.zip.ZipException: invalid LOC header (bad signature)

那种Jar包读取metadata都没有问题,使用第三方软件解压读取也都没有问题,唯独使用Java自己的代码从JarEntry获取InputStream读取的时候会出错,另外使用jarsigner -verify去验证jar也会出问题,估计内部实现也是调用了同样的代码。

基于Spring Boot的支持ElasticSearch和JWT的POM

不多说废话了,直接贴内容吧,用的库的版本基本是最新的了:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.auth0</groupId>
        <artifactId>auth0-spring-security-api</artifactId>
        <version>1.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.auth0</groupId>
        <artifactId>java-jwt</artifactId>
        <version>3.4.1</version>
    </dependency>
</dependencies>
<repositories>
    <repository>
        <id>elastic.co</id>
        <url>https://artifacts.elastic.co/maven</url>
    </repository>
</repositories>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>8</source>
                <target>8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Windows断点续传

IT的世界,角落里面永远有我们想有还真有的功能,今天就是复制一个大文件老出错,网络不稳定,VPN连接,经常搞了几百M就断了,搜索了下,发现DOS下的copy命令加个参数/z就可以了,例如:

copy /z \\server\folder\file.txt c:\temp\file.txt

不用下载第三方工具!😀

2018总结

2018年对我而言总体是非常不错的,首先还是换了个老板,非常对我的路子,产出越多,获得越多,在展现了自己的真实能力后迅速得到认可并放手让我发挥。

大体总结下这一年的成绩:

  1. 做了产品的Security Champion,从一无所知到成为整个部门里面Security合规做得最好的产品只花了2个多月,并且得到负责Security的VP亲自写的表扬信,Security合规的全部必须项全过,Security问题的修复速度最快。
  2. 在做Security的同时,看到原来产品的升级功能太冗余,花了三个星期完全重写,基于BASH,最终达到了全自动,并且支持任何版本的直接升级,没有原来的N+2的限制。
  3. 负责了3个版本的Patch的发布。
  4. 完成一个集成产品的架构设计和实现。
  5. 部门的下一代产品的升级部分失火,原有团队失血并有太多的任务,紧急介入,和5个不同的小组紧急讨论现有状况和各种架构设计,用两个星期完全搞清楚并commit在接下来的两个星期里面deliver第一个Beta版本可以支持顺利升级到下一个Beta版本。
  6. 自己亲自写和别人合作完成8个专利。

这一年基本上是工作这么多年来强度最大的一年,但是确实值得,起码证明自己还没有老,当然,收获也是不错的。

事实证明,跟对老板很重要。

展望2019年,希望有更多的机会可以发挥,主要是有更多的项目被从美国转移到中国来,中国的团队可以更加的壮大,这样也可以借机解决更多的问题搞出更多的专利,也有更强的理由可以升职。

 

BASH的一些知识总结

不知不觉一个月就过去了,发现什么都没有写,趁放假补一下功课吧。

最近的几个月搞了不少BASH的东西,因为我把系统的升级功能重写了下,原来的代码实在是惨不忍睹。总结几个在重写的过程中的BASH知识点。

  1. 根据变量名得到变量值,这个在使用动态功能的时候特别有用,其实也很简单 ${!variablename}
  2. 使用管道后得到管道的某个输出的exit code:${PIPESTATUS[0]}, 0就是拿管道最开始的那个命令的返回值,如果不使用这个,那么exit code永远是0
  3. 使用“可以得到命令执行的输出结果,比如`hostname -s`,另外一种方式是$(hostname -s)
  4. 可以直接使用某个方法的返回值做if的条件判断,比如 if my_function; then
  5. 在引用变量值的时候尽可能给变量加上引号,特别是想把变量值往其他的方法传的时候,例如 my_function “$my_variable”,因为使用的那个变量值包含空格之类的就可能不是你期望的结果了。
  6. 得到当前代码行的行号:$LINENO
  7. 方法只能返回int值,不能返回string,所以方法想返回string的时候只能借助global的变量
  8. exit code的返回值范围是0到255
  9. 放在双引号里的变量会被解析,如果不想被解析,就用单引号
  10. 只有方法里面的变量才能定义为local,最外层的变量只能是global,方法里面定义的变量默认也是global
  11. 在条件判断里面做字符串大小比较,<前面要加个\:if [ “$onestring” \< “$anotherstring” ] ; then
  12. 把一个local变量的值赋值给一个global变量的时候必须在local变量前加$:globalvar=$localvar
  13. 在复杂功能里面尽量不要用xargs,因为它会起子shell,变量赋值不能传到外面的功能,尽可能用while do
  14. 做数字运算其实都是个没那么简单的事情:let “filecount-=1″,变量减一操作,其它类似,使用let加上运算表达式
  15. 判断是否是空值:if [ -z $somevar] ; then
  16. 需要把多行的语句放到一行的,应该换行的地方加个分号
  17. 方法后面的参数可以接其它的方法,后面的方法甚至还可以带参数,只要在方法里面调用”$@”就可以
  18. 获得上一个语句的返回值:$?
  19. 循环处理数组中的每个值:for value in “${my_array[@]}”
  20. 判断一个变量值是否设置了:if [ -z ${myvar+x} ]; then echo “not set”; fi
  21. 如果要计算两个数并赋值给其他的变量:thirdvar=$(expr $firstvar + $secondvar)
  22. 条件判断中的字符判断直接用=,数字比较就得 -eq, -gt等,文件目录判断 -f,-d
  23. 计算数组的大小:${#myarray[@]}
  24. 把数组里面的值拼成字符串,可以使用”${nodes[@]}”,但是如果你要把这个作为方法的参数传递则不行,必须先把这个结果赋值给一个变量再传递那个变量值:allvalues=”${myarray[@]}”; my_function “$allvalues”

好像还不少,任何一个语言,要用好都不容易,但是如果你知道自己要什么,其实也不难,有google啊。

有点落后了

前段时间升级了用了十几年的显示器,从20寸升级到32寸,带的是HDMI线,而我的电脑没有HDMI口,然后看到还带了个VGA的口,结果就很傻的买了个DP转VGA的转接头,然后每次显示器打开的时候就提示显示器的分辨率可以到更高,而到电脑的设置里面发现并不能。另外一个问题就是,电脑重启的时候视频线不能连着,连着电脑就启动不了。直到昨天,忍无可忍了,搜索了下,没有看到直接有人说相同的问题,但是看到一个人说DP是纯数字接口,而VGA是模拟接口,这个转接的方案并不推荐,马上就查了我的机器和显示器的规格参数,发现都直接支持DP,马上就下单了DP线,今天到货插上后分辨率直接就调整为最高的这个了。十几年没有再搞机器和硬件,对新技术有些落后了,但是也不敢奢望能够紧紧跟上时代的步伐,毕竟,有这么多东西日新月异,而人的精力总归是有限的。。。

仅以此文记录自己的知识落后导致的这么久的被两个小问题折磨。

过境马来西亚

上个月底去了趟泰国,去程是在马来西亚转机的,之所以如此是因为便宜,比直飞便宜1000块人民币,相信很多经常飞长途的会在订票的时候遇到相同的情况,应该是两段航线的人数都很多,但是又不满,为了进一步提高上座率而采取的方法。因为转机碰到延误的情况也很多,所以转机的时间间隔一般比较长,我们这次长到7个小时,所以就出机场溜达了一圈。在吉隆坡机场发现海关的人非常多,但是有两个队伍的人很少,后来我们也去了那个队伍,就是过境签。前年去新加坡玩的时候我们其实也过境马来西亚一次,不过我们在吉隆坡住了一晚,为了看双子塔。那个时候过境签是可以72小时的,就是可以玩3天,而这次去,发现改成120小时也就是5天了,最重要的是过境签不用签证费。去国外旅游的可以利用这个免签政策免费的多玩一个地方也不错。

搜索了下,这个总结得很全面:http://www.sohu.com/a/219583418_383565

搭建好ShadowSocks

根据这个文章搭建的,搭建服务器端没有什么问题,但是在使用的时候有问题,FF直接配置不行,下载了Windows的客户端才可以连接上,目前原因还不清楚。

服务器在Azure上,所以也要开对应的端口。另外就是配置文件中的服务器端口,写0.0.0.0就可以了。

现在可以很爽快的上网了,不用登录到公司VPN了。

手机上也下载了APK,然后也下载了google play。

世界一下子更清爽了。。。

bing好弱

今天原来的老同事问我一些Java的入门问题,我说直接google啊,他说搜了没有搜索到结果,只不过用的是bing,然后我就震惊了,都告诉他google了啊(他曾经供职微软,被毒害了😋)。bing只能用于搜索自家的东西,因为都在MSDN上,它对MSDN的索引做得最好,而除了微软自家技术外的技术内容,只能使用google。而baidu,呵呵,就是娱乐和广告的代名词吧,只是用来测试网络是否是通的时候会试一下,在没有翻墙的情况下我也是退而求其次的用bing的。
而今天晚上,我用bing试图搜索我的这个站,“cherami jiehoo”,显示有三页,翻页到第二页再点下一页的时候,又回到了第一页,还是显示有3页,而在另外一台电脑上搜索“jiehoo cherami”显示有4页,而到了第二页点击下一页,直接显示没有任何结果,而且不能回到上一页,就是认为一个匹配结果都没有。看了下,两个浏览器都是Chrome,区别是一个登录了微软账户,一个没有登录。
呵呵,基本功能做成这样也是没有谁了吧。必应的同学们,看到的话,请参考下google是怎么做的吧。。。
Bing,你听到了吗?怎么给你报bug啊🤔

 

更新:我还真给bing提了个建议,不知道是否有反馈回来。

« 更早的文章

© 2019 解惑

本主题由Anders Noren提供向上 ↑