2019年12月

唉,没想到今年最后一天竟然在写这个。8说了,过两天还有考试呢。。

  1. 使用glGetUniformLocation获取定义的着色器uniform,输入两个参数:glCreateProgram()返回的标识值,和定义的uniform的名称(string形式)。如果在任一着色器内都没有使用过所定义的uniform的话,GLSL编译器会自动删除该变量,这时返回值是-1,对应unsigned int的值是4294967295。如果使用了错误的programId值也是一样的。

  2. 与着色器相关的函数调用序列如下:
        glCreateProgram()
        glAttachShader()
        glLinkProgram()
        glUseProgram()
        glGetUniformLocation()
        glUniformMatrix4fv()

    来自StackOverflow

群里看到的,码一下

关键词nuget, cppan, sw, vcpkg, conan

如果需要的三方库很多,就用包管理器;如果只引用mpi+cuda直接到微软找他们重构mpi for vs包,自己装cuda。 如果用于多机共算 我们可以使用mpi 如果是只有本机计算 那没有必要 STL和cuda比较搭 OO有点古老,不适合做算法

码一下。之前看到的,不一定全,但可能是切入点。

  1. Flink:基于Java 相关技术/名词

    • 拓扑图
    • 反压(背压?)机制
    • 有界/无界数据集

    相关软件

    • Redis
    • ELk
    • Docker
    • K8s
    • ...
  2. Spark:基于Scala 相关软件

    • Scala
    • Kafka
    • Spark Core
    • Spark Streaming
    • Spark MLlib
    • Spark Grapx
    • ...
  3. Hadoop
    • Flume 数据采集
    • Sqoop 数据迁移
    • Hive 数据仓库
    • Zookeeper 分布式应用协调
    • HDFS 数据存储
    • MapReduce 数据计算
    • HBase 分布式数据库
    • ...

今天第一次用IDEA写跑Tomcat的Web项目。等了老半天项目都没部署上去,直接访问地址也是404,然后习惯性地点击终止服务器,打算重新启动一次。

然后遇到了这个问题:

Application Server was not connected before run configuration stop, reason:
Unable to ping server at localhost:1099

然后查看配置,发现这个1099指的是一个什么JMX端口,似乎是用来远程控制Tomcat用的。 然后网上试了好多办法都没用,甚至JB自家论坛的解决方案都是无效的。。

最后猜测可能是Tomcat自己本身完全就没有开启JMX功能(因为搜JMX好多都是教怎么启用的),然后倒腾了一下,发现照这个思路可以解决问题。

具体方法如下: Edit Configurations.. - Tomcat - <服务器名> - Startup/Connection,选择使用的配置方案(一般都是run吧),在Environment Variables中添加环境变量CATALINA_OPTS,值设置为

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

之后再使用该配置文件启动服务器,问题解决。

最近遇到的场景,有两张图片(cv2的BGR格式)和一个蒙版(只有0,1两种值),需要按照蒙版的值将两张图象合并。

一开始百度咕果上到处查,最接近的大概是bitwise_and函数,但是其起作用的主要是0这个像素值,显然只能实现抠图的功能,但是不能合并。可以看看介个

不废话,看代码:

import numpy as np

def mergeImgs(img1, img2, mask):
    '''
    Replacing places in img1 with img2 where mask = 1.
    '''
    img2 = img2 * mask[:,:,np.newaxis]
    mask = mask * (-1) + 1
    mask = mask.astype('uint8')
    img1 = img1 * mask[:,:,np.newaxis]
    img1 = img1 + img2
    return img1

原理是使用矩阵的乘法运算,把两张图片相反区域的、mask中值为0的区域,像素颜色设置为0,然后再把两张图矩阵相加。由于mask区域是直接用的取反处理,所以不会出现任意一个错误像素点(完美拼图)。

想着想着发现这个+*操作分别对应了OpenCV里的bitwise_andbitwise_or操作,估计最多就是效率上的差别吧= =

总而言之,OpenCV并没有提供一个一步到位的多图区域拼接函数,但是只要思路对了,自己几行代码也能搞定。