关于bash中的2>&1 &理解

经常运行一些python脚本或者jar包,如果直接运行python *.py,或者 java -jar *.jar,再进行其他操作,需要终止运行,所以应该是后台运行。
这也就经常看到这样的句式:

1
nohup python *.py > nohup.log 2>&1 &

1、开始的nohup(no hang up, 不挂起),用于系统后台不挂断的运行命令;
2、中间的python *.py我们好理解,就是运行脚本;
3、> nohup.log 意思将新建nohup.log文件,并将运行日志写到该文件中,我们可以使用>>,表示追加日志内容;
4、bash中0,1,2分别表示STDIN_FILENO(标准输入),STDOUT_FILENO( 标准输出),STDERR_FILENO(标准错误),输入输出可以重定向,如cat < text.c将test.c重定向为cat命令的输入源,输出重定向就是将指定具体的输出目标以替换默认的标准输出。默认输入只有一个(0,STDIN_FILENO),而默认输出有两个(标准输出1,STDOUT_FILENO,标准错误输出2,STDERR_FILENO),因此输出的错误信息会被输出到2,而普通信息会输出到1,但我们希望在一个终端下看到所有的信息,那么综上就应该是2>1,而2>&1中&是为了bash将1解释成标准输出而不是文件1,至于2>&1 &中最后一个&则是让bash在后台运行。

类型化数组

为了绘制三维图形,WebGL通常需要同时处理大量相同类型的数据,例如顶点的坐标和颜色数据。为了优化性能,WebGL为每种基本数据类型引入了一种特殊的数组(类型化数组)。浏览器事先知道数组中的数据类型,所以处理起来也更加有效率。
类型化数组
类型化数组方法
注意:

  1. 类型化数组不支持push,pop方法;
  2. 类型化数组初始化唯一方法是new,如 new Float32Array([0.0, 0.5, -0.5, -0.5, 0.5, -0.5]);
  3. 另外,可以通过定义长度初始化一个数组 new Float32Array(4)

缓冲区对象工作流程

1
2
3
4
5
1、创建缓冲区对象(gl.createBuffer());
2、绑定缓冲区对象(gl.bindBuffer());
3、将数据写入缓冲区对象(gl.bufferData());
4、将缓冲区对象分配给一个attribute变量(gl.vertexAttribPointer());
5、开启attribute变量(gl.enableVertexAttribArray())

缓冲区对象工作流程1
缓冲区对象工作流程2

WebGL缓冲区(buffer object)对象

WebGL 提供了一种很方便的机制,即缓冲区对象(buffer obiect),它可以一次性地向着色器传人多个顶点的数据。
缓冲区对象是 WebGL 系统中的一块内存区域,我们可以一次性地向缓冲区对象中填充大量的顶点数据,然后将这些数据保存在其中,供顶点着色器使用。

解决openlayers前端加载大数据量显示卡顿的性能建议

这段时间一直在做XX大数据项目,由于多维度和多条件查询的缘故,数据比较大,一个ol.layer.vector的图层要加载将近一两万的点,这时性能瓶颈就上来了,所以在前端显示时:页面及其卡顿甚至崩溃。另外因为添加了interaction交互事件,每个点都包含了较多的属性,信息量比较大。。。忍不了一下。。

照例查了查openlayers的API文档,发现新版的openlayers6支持WebGLPointsLayer,直接渲染百万级的点都没啥问题。

奈何现在项目用的是openlayers5,测试了一下,一些方法有更改,影响其他功能页面,短期不能贸然升级,于是放弃了这个升级的方式。

最后结合了切片加载形式和GIS的抽稀思想:同时创建了两个图层,一个图层在初始化页面就只加载部分包含重要信息的点,另一个图层在放大到一定层级后显示剩余的点。

动手实施后,果然纵享丝滑。
效果图

A Star算法实现最短路径查找【python】

这段时间用python实现A Star(也叫A*,A星算法),翻了不少博客论坛,发现A星算法大都用在游戏开发的路径移动中,并且都是基于马赛克方格寻找,与我想要实现的实际路段有所不同,不过思想都是大差不差的,数据结构有些许差异。
这里先起个头。。。
先放个最终实现效果图
效果图
==========

button造成的异常跳转问题解决一例

今天下午遇到一个比较坑的问题,严格来说是没意识到。
情形:vue页面通过两个button按钮,控制不同组件页面显示,页面有缓存属性
问题:首次进入页面点击某个按钮,切换到另一个页面,页面闪白后出现刷新,又跳回至默认页面,再次点击按钮,正常切换至另一个页面
原因:button按钮自身带有提交表单属性,正好页面有form表单,导致页面再次执行查询操作,造成页面刷新,回到默认页面
解决:click事件添加prevent属性,阻止button默认的提交事件

1
<button @click.prevent="clickTest"></button>

备注:养成按钮点击事件添加stop或者prevent属性,避免因冒泡或者自身属性的异常问题

geoserver WFS服务 Filter过滤查询踩坑一个

有时会通过视图方式发布一个图层,然后变相实现接口调用数据。
当数据属性中有id字段,并作为过滤字段查询时,使用in会查不出结果,调取geoserver日志,发现id并没有作为字段名称传入,可以采用or查询结果,但是需要在前端重新拼接一下id数组,

1
'id='+idList.join(',or id=')

geoserver多个图层要素相同的问题

今天在解决一个BUG的过程中发现:当多个图层layer共用一个Feature时,虽然每个图层的要素使用不同的style,但最后所有图层渲染的效果一样。
原因:因为geoserver的layer的source中(有些拗口)包括的Feature都一样,属于引用,所以会以最后一个Feature样式为准。
解决方法:使用feature的clone()方法