- 博客(97)
- 资源 (5)
- 收藏
- 关注
原创 Power Query M中判断字符是不是数字
Power Query M中没有像c中的的函数来直接判断一个字符是不是数字的函数,我们可以用如下两种方法来进行判断。如果不是,会报错,所以会返回分支的。如果是空白符,会返回,用来排除这种情况。Type.InferNumberType如果不是number,则会报错,此时返回。[1] Test for a Number in Power Query M Language...
2022-07-06 09:32:27 1741 1
原创 使用Power Query M简单处理table的每一行
由于最近经常做一些简单的Excel处理,虽然可以写python来操作excel文件,但是一些简单的操作直接在Excel中处理会更方便,不需要事先安装python。这次的需求是对于表中的每一行记录进行变换,生成一个list,之后再将这个listoflist展平未一个list。表示为伪代码如下function transfrom_table(table) result = [] for each row of table result.append(transform(row)) return r
2022-02-07 19:19:47 1281
原创 OpenGL自定义剪裁
本文给出了计算线段与平面交点的方法,以及为什么在OpenGL中可以通过写入gl_ClipDistance[]而无需整个平面方程就可以自定义剪裁平面的原因。
2019-06-24 21:58:17 875
原创 透视正确插值Perspective Correct Interpolation
本文对OpenGL中透视正确插值perspective correct interpolation的原理进行简单推导,并指出了齐次坐标w分量对perspective correct interpolation的重要性。
2019-06-18 07:02:45 1991 2
原创 优化uGUI中的SetParent的调用开销
概述当前项目是一个类似scratch那种积木式的编程工具,编辑器用Unity的uGUI实现,但是对于大型的的工程(600多个block,每个block大概有5、6个GameObject),原有的实现在加载工程时很慢,profiler中查看,发现有很大一部分时间花在了RectTransform.SetParent调用上,这几天花了点时间,优化了这部分调用。原因RectTransform.Set...
2019-01-14 21:58:50 2501
原创 让Unity Camera Space UI根据viewport rect进行缩放
默认情况下,如果camera space UI的缩放模式设置为Scale with screen size,那么无论你怎么修改camera space UI对应的camera的viewport,UI也不会像场景中3D物体一样根据viewport的大小进行缩放。原因在于默认的CanvasScaler组件的实现,没有将对应camera的viewport考虑进去,而总是采用screen的大小。p...
2018-08-03 22:02:18 3827 2
原创 vscode vim key mapping
vim中由于冒号:命令十分常用,所以一种做法是将冒号:和;分号进行交换,这样在输入命令时可以不用按shift键了,减少了负担。vscode的vim插件默认还是使用:作为命令行的输入,在User Settings中,使用如下的配置重新映射’;’和’:’, "vim.otherModesKeyBindingsNonRecursive": [ { "
2017-05-20 12:43:25 4787
原创 Perspective Matrix的另一种推导
本文给出了OpenGL投影矩阵的一种推导方法,读者可以从推导的结果中看出为什么投影矩阵第3行被写成了[0 0 A B]的形式。
2016-08-06 12:49:46 1338
原创 mac osx上代码高亮
平时会用onenote来记笔记,难免会想要摘录一下代码,所以会想要对代码进行一下高亮。windows上一直使用highlight来高亮代码,挺好用的,提供了不少风格选择和高亮样式。osx可以用brew安装,不过是命令行版本的,于是弄了一个简单的脚本来调用highlight,将格式化后的代码输出到terminal上,代码如下#! /bin/sh# create a temporary file to
2016-06-09 15:07:52 2765
原创 EOF on Windows
最近在学习go时,在运行一个简单的读取标准输入的例子时发现,在控制台上(cmd)输入ctrl-z竟然不能结束程序。以前在学习c/c++时,也遇到过有关的问题,也就是当我想要结束输入时,如果在输入ctrl-z之前又输入了某些其他字符,那么此时标准输入不会被关闭,而当一行中仅有一个ctrl-z时,才能结束输入。下面一个简单的c++程序可以验证这个问题:#include <iostream>#inclu
2016-02-27 21:51:35 1878
原创 恢复损坏的pdf文件
昨天在编辑一个pdf时机器突然重启,导致pdf文件损坏,打不开了。由于平时有边看pdf边做注释的习惯,如果无法恢复,那么就导致其中的所有的笔记丢失,这下损失会比较惨重。baidu了一下pdf修复软件,无一能够比较好地恢复pdf,并且保留其中的格式。google之后发现mupdf可以重写pdf,于是尝试了一下,效果比较理想,大部分的注释都能恢复,这算是一种比较好的结果了。恢复时使用mupdf自带的工具
2015-10-18 12:35:34 12056 5
原创 Windows PATH变量不起作用
今天突然发现设置在PATH中的路径不起作用了,直接查看PATH中的值也没发现什么特别的错误。找了大半天,最后终于发现只要PATH中设置了其他的环境变量,并且该环境变量已经不存在了,那么PATH就不工作了。比如,我有时会先设置一个环境变量,之后再在PATH中引用该环境变量,主要是为了让PATH看上去不是太长PATH=%VAR%;...VAR=c:\path这里如果VAR被删除了,那么PATH就无法正
2015-09-29 21:33:51 11824
原创 敏感词过滤
最近需要实现对聊天里的敏感词过滤,要求比较简单,只需要对字库中存在的关键字进行匹配,所以不需要非常复杂的实现,但是需要能够快速地对一个关键字集合进行匹配。搜了一下相关的资料,比较简单的一个算法是使用Aho-Corasick算法,以下简称AC算法。该算法的基本思想中包含了KMP算法,即利用模式串中已匹配的子串的最长后缀(同时是前缀)来跳过一些不可能的匹配位置,进而达到快速匹配的目的。不过AC算法在匹配
2015-09-11 21:42:25 1132 1
原创 vim-ctrlspace
最近发现一个很好用的插件vim-ctrlspace,可以用来代替minibufexplorer来做buffer管理,并且提供更强大的功能。不过似乎windows上ctrlspace搜索文件的效率不高(即使开启了ruby binding,带ruby的版本是在这里下载),所以我还是用ctrlp来做文件的搜索,还有就是ctrlp还有tag的搜索功能。
2015-06-09 22:11:54 3425
原创 Marmalde中使用Packed font的渲染的问题
近期由于需要让游戏支持中文,而游戏默认的实现是用bitmap font来实现字体,而中文常用字又很多,所以打算将NGUI中packed font的实现移植到游戏中,但是渲染时出现了问题,效果如下:明显可以看到字中间的某些像素被抠掉了。问题在于CIwTexture中有一个叫chromakey的东西,如果贴图中某些像素与这个chromakey相等,那么会被当做透明像素而抠掉。这让我想起
2015-01-13 10:31:25 1106
原创 Game Developer Magazine 1994-2013
有需要的朋友可以到百度网盘下载,链接: https://pan.baidu.com/s/1vU1BbNe1NwOOOJ9i3IkzpQ 提取码: 4krg原文链接为http://www.gdcvault.com/gdmag。
2015-01-02 18:03:24 907
原创 找回GoodReader中丢失的书签
GoodReader是一款iOS上功能比较强大的PDF工具,不过我在使用当中发现一个书签会丢失的问题。因为有时候在PC上看PDF比较方便,所以会将PDF从iOS复制到PC,之后做完注释后再复制回iPad。但是之后在GoodReader中再次打开,发现以前做的书签全部丢失了,这可令人头疼。今天尝试着在它的Document目录下寻找相关的记录文件,果然找到了一个可以防止丢失书签的方法。用iTool
2014-02-06 21:01:09 2551
原创 DirectX RHW和viewport
我们知道,viewport是用来设定渲染后的场景在render target中的位置和大小的,也就是场景会被拉伸到指定的viewport中。但是一旦和pre transformed坐标一起使用,那就是另外一回事了。rhw,即reciprocal homogeneous w,我们在指定pre transformed顶点坐标时,w分量被称为rhw。通常,经过投影变换后的顶点在clip space,此时
2014-01-01 09:51:24 3232 3
原创 服务器端逻辑的迁移
我们现在的游戏,基本是客户端是dummy的,也就是没有什么gameplay的逻辑(除了当前控制的人物移动的预测),,AI都在服务端。无论是对于单人的PVE,以及强PVP,都是如此。发行商好老板们又想要让游戏跑在手机上,那么,显然,延迟问题就会比较突出。比如你在地铁里或者汽车上玩,由于所有AI在服务器,所以一旦网络不流畅,就没法玩。观察了一下最近市面上的一些手游,基本上,单人PVE都可以在网络延
2013-09-03 20:51:20 1166
原创 smartfox和NAT
最近的项目中使用smartfox来作为服务器,并且我们游戏的某些移动消息基于UDP(使用了cs中的entity interpolation技术)。有时,可以在服务器的log里观察到smartfox检测到session的udp端口变化而将udp包直接丢弃,这所带来的问题就很严重。客户端就无法收到服务端的位置更新了。发生这个问题的原因有两方面:路由的NAT机制smartfox本身的安全
2013-05-25 21:32:53 1623
原创 c++11 rvalue reference & perfect forwarding
简介右值引用,是c++11中为了解决大对象拷贝性能问题,以及参数传递而新加的特性。形如T&&,其中T是referenced type。Lvalue & Rvalue左值和右值在c语言中差不多可以表述为分别出现在表达式左右两侧,但是在c++中,因为引入了class,情况变得更加复杂。基本上可以总结为:左值可以运用&操作符取得地址,注意临时对象是无法取得地址的,因为很容易导致问
2013-05-12 19:31:02 2922
原创 c++ & Memory consistency model
c++11中一个最重要的特性就是加入了多线程的支持,并定义了c++的memory model。memory model定义了一个处理器上对内存的操作如何被其他处理观察到,The memory model, or memory consistency model, specifies the values that a shared variable read in a multit
2013-02-13 16:20:50 1820
原创 什么是101
经常在一些国外的文章上看到某某101的字样,一直没有深究,这次查了一下。基本上某某101可以理解为对某种话题的基本的介绍和总览,也就是基础知识。当然还有一种用法是为了表示该文章中的内容比其他同类文章中要多。见http://www.internetslang.com/101-meaning-definition.asp
2013-02-11 15:29:31 1623
转载 两篇关于stl容器性能比较的文章
STL container BenchmarkC++ benchmark – std::vector VS std::list VS std::dequeC++ benchmark – std::vector VS std::list我们知道通常对于在序列中插入和删除频繁的操作,使用list会更快,而对于序列头尾插入频繁的操作,用deque会更快。vector对于查找来说会
2013-01-01 14:13:12 1396
转载 memory barrier
这里有一篇关于memory barrier的文档,文档中详细介绍了什么是memory barrier,以及memory barrier的作用。有助于我们理解为什么最初的双重检测锁定模式(Double Checked Locking Pattern)在某些CPU环境下是有问题的。文中还指出,如果要正确使用MB进行同步,那么write barrier和read barrier必须是成对出现,也就c
2012-11-04 16:12:58 1160
转载 TCP和UDP之间的相互影响
这里有一篇在同一个程序中同时使用TCP和UDP,UDP丢包率和TCP window大小的论文。论文中研究了,在一个程序中tcp的flow control算法可能对udp丢包率造成的影响,而udp的发包率和包大小也会影响tcp的流量控制,并且也会影响网络的吞吐量。论文中提到了一个词汇就是TCP Synchronization,大概意思就是不同的tcp连接在同一时间内(或相近)调整window s
2012-10-01 11:18:07 3044
原创 浮点数有效数字位数
在上一篇《浮点数能够精确表示的整数的范围》中,我们知道了,对于float,实际有效的尾数是23位,对于double,实际有效的位数是53位。所以这里我们可以得到float的十进制表示有效数字个数为:这里最小的n为7,对于double,最小的n为15。有时我们在代码中可能会看到比较浮点数时,会使用一个epsilon,而这个epsilon = 1e-6,可能就是因为当浮点数绝对值 >=
2012-05-25 22:27:17 7542
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人