解惑

解己之惑,解人之惑

作者:cherami (第1页共82页)

自动生成的mapping不对

ElasticSearch的一个坑,发现中文分词的Analyser不起作用,生成的mapping里面完全不包含指定的内容,得到的都是类似这样的结果:

“name”: {
                        “type”: “text”,
                        “fields”: {
                            “keyword”: {
                                “type”: “keyword”,
                                “ignore_above”: 256
                            }
                        }
                    }
其实我期望的是:
“name”: {
                        “type”: “text”,
                        “analyzer”: “ik_smart”
                    }
问题在于这个Entity的class上有些字段没有设置Field,有些设置了但是没有指定类型。这些问题修正后就没有问题了。

茄子派对和游戏之梦

因为版权原因,所以决定把游戏里面的香肠派对的元素全都去掉,并更名为茄子派对:茄子派对

其实从小学开始就打游戏了,最开始是到别人家蹭红白机,魂斗罗,90坦克,超级玛丽等等,为了能够打上一局,现在还能想象自己谄媚那个富家小孩的模样。

到了小学高年级,就是街机的时代了,家里当然不可能给我钱让我打游戏,所以每逢大考,我就会不吃早餐,把钱省下来打上几局,所以也往往导致大考完会生病。。。恐龙快打,三国志,拳皇,圆桌骑士,名将,街霸

街机的时代持续到高中,高中的时候就是电脑游戏的时代了,开始的沙丘,然后是红警,从DOS时代的游戏演进到Windows游戏,再到大学的星际争霸和帝国时代。。。

总之,游戏陪伴我度过了一个美好的青春

借着儿子学习编程和游戏的契机,我也实现下我儿时学电脑的初衷:开发电脑游戏

开发游戏

没想到时隔一年,写的第一篇文章竟然是游戏的。

儿子想学编程,Python,在学而思上,我给他找了些资源,也给他报了课程,结果看到他在玩别人写的游戏,看了一眼就觉得这个也太弱了,按照一定的顺序就可以过关,这个能够叫游戏?看你爹的,所以就耗时数小时边学边写了这个真正的游戏:控制台版香肠派对

 

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线,今天到货插上后分辨率直接就调整为最高的这个了。十几年没有再搞机器和硬件,对新技术有些落后了,但是也不敢奢望能够紧紧跟上时代的步伐,毕竟,有这么多东西日新月异,而人的精力总归是有限的。。。

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

更早的文章

© 2024 解惑

本主题由Anders Noren提供向上 ↑