02
Jul
2021

在 win10 远程桌面(RDP)中启用显卡加速与 UDP 连接

标签: 效能

远程桌面(RDP)默认使用的是 CPU 模拟的显示,性能很低,在使用大型软件(如 Photoshop)时便会很吃力。之前网上的说法都是通过策略组中的 “计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话主机->远程会话环境” 中的 “将硬件图形适配器应用于所有远程桌面服务会话” 配置启动,但是没有作用。


正确的方法是除了打开以上的配置之外,还需要开启显卡支持,因为显卡商考虑到利润,不会让你共享显卡,好在疫情原因让 nVidia 压力山大,于是勉强在开发者论坛放了一个设置工具,下载链接:https://developer.nvidia.com/nvidia-opengl-rdp,这个链接需要注册成开发者才能访问,下载后执行重启计算机就可以了。至于 AMD 显卡,可能也有类型的工具,目前我还没有找到。


开启 UDP 连接可以提升远程桌面的响应能力,只需要修改注册表,方法为用管理员模式打开注册表,然后运行如下命令:

Set-ItemProperty 'HKLM:/Software/Policies/Microsoft/Windows NT/Terminal Services/Client' 'fClientDisableUDP' 0


UDP 使用的端口亦为 3389,如果你在 NAT 后面,别忘了做端口映射。

17
Jun
2021

一种数组压缩算法

标签: 算法

我们在开发中后台应用或者中间件的时候,会存储一些数据在内存中以加快访问速度。随着数据量的增加,除了可以放置于堆外,还可以通过实时压缩来缓解。今天就给大家介绍一种压缩整形数组的方式

数组指 long[] 或者 int[] 类型,主要用来存索引数据。当数据量变大时,首先想到的就是缩减每个数字占用的空间,因为我们都知道一个 long 类型是占 8 个字节,而 int 也是占用 4 个字节。就以正数而言,int 3 个字节以上表示 2^24 = 16M 即 1600 百万以上的数字,一般我们是用不到的,大多数情况下高位都是闲置着的,所以可以将高位去掉,只存储用到的那几个字节(见图1)。当然为了可以还原,我们需要记录这个数字到底使用了几位。这里有两种方式:一是借用几位来表示,就拿 long 来说,我们只需要借用 3 位就可以表示用到的字节数了,另一方面,2^60 以后已经是非常大的数了,几乎用不到,所以我们借用也不会产生额外的效果;另一种就是利用字节最高位表示还有剩余数据(见图2)。这样一来,我们就把 long 或者 int 数组压缩成了 byte 数组,里面所有用到的字节都是有表示意义的。

1.jpg
图1

2.jpg
图2

这样一样我们就可以顺利地将数字进行压缩与解压缩了,在传输场景下可以很好的解决空间问题,这都是常见的思路。但是如果我们需要压缩后的数组仍然具备下标访问的能力怎么办?之前每个数字都是固定长度,我们可以通过 [单个数字占用的字节数]*[下标] 很快地找到对应的地址,但是压缩过后每个数字占用的空间不是一样的,这种方式就失效了。如果我们要取下标为 200 的数据,那我们就得线性查找 200 次?那么时间复杂度就由 O(1) 下降为了 O(n)。有没有更好的办法呢?当然是有的。我们可以建立索引(图3),即:

  1. 将数字分为若干个桶,每个桶的大小可心调节
  2. 我们使用另一个数组,大小为桶的数量,存储每个桶所第一个数据所在的下标
  3. 在查找时我首先使用二分查找到对应的桶,再使用线性查找到对应的数据

3.jpg
图3

由于在桶内是线性查找,因此不会太大,一般是 1KB 或者 4 KB。这样一来,我们查找速度就可以大大提升,接近 O(logn)。使用这套方式,经测试,在 4 亿随机数据的情况占用的空间可以缩减 30% 左右,但这并不是终点。利用桶的性质,我们可以只在桶内第一个元素存原数字,后面的都存一个偏移量,因为当数据不会明显离散(即一会儿是十几,一会是几十亿那种),可以很好地缩减数据大小,比如两个数都占用了 3 个字节,存偏移量后,第二个数字就可以使用 1~2 个字节来表示了。当然如果你对数组本身的顺序没有要求的话,还可以先对数组进行排序,这种偏移量的效果就可以暴表了。最理想的情况下,可以压缩至原来的 30%。

D3035B08-6314-4ee1-9A2D-D9E16C2E0978.png
测试压缩效果(未排序)

UPDATE:2021-06-20

这里还有优化空间,之前采用二分查找是因数我们采用定长的桶,每个桶存储的数字数量不定,但如果我们采用变长桶,让每个桶存储 N 个数,那么,便可以直接通过 “整除+求余” 的方式快速打到数所在的桶,查询效率进一步提升。

源码:seflerZ/zipped-num-array: Compressed number array and acts exactly like the original array like long[] and int[] (github.com)

21
Feb
2021

几行命令,让你的 Windows 拥有全能解压软件

首先你需要安装 WSL,最好是 Ubuntu,然后在 WSL 建立以下脚本:

#! /bin/bash

FILE=$1
FILE=${FILE##*\\}
EXT=${FILE##*.}
NAME=${FILE%%.*}

#echo $FILE >> ./filename
#echo $EXT >> ./filename
#echo $NAME >> ./filename

#echo $FILE >> ./filename

if [ $EXT = "zip" ]; then
        unzip "$FILE"
elif [ $EXT = "tgz" ]; then
        tar -xzvf "$FILE"
elif [ $EXT = "gz" ]; then
        gzip -d "$FILE"
elif [ $EXT = "rar" ]; then
        unrar x "$FILE"
else
        echo "not supported"
fi

sleep 2


然后在 Ubuntu 中安装 rar, unzip, gzip 等工具用于解压。之后就是在 Windows 注册表,路径为 \HKEY_CLASSES_ROOT\*\shell,在shell上点击右键->新建->项,命名为 解压至当前目录(随便命名),在刚才那个目录上点击右键->新建->项,命名为command(必须这个名),再新建一个字符串,输入值为:wsl exec sh ~/unzip.sh "%1",其中 ~/unzip.sh 是第一个脚本在 wsl 中的路径,我这里放置在了 home 目录。如果还不明白如何新建右键菜单可以参考这个文章 



12
Sep
2019

浅谈神经网络与机器学习

标签: 机器学习

发展历史

说到机器学习,大家听闻最多的就要数 “深度学习” 这么一个概念了,近几年比较火。深度学习其实就是机器学习的一新方法论合集,不过机器学习的研究上世纪就开始了,特别是深度学习的基础 “人工神经元网络(以下简称神经网络)” 更是于 1943 年就由心理学家 Warren McCulloch 和数学家 Walter Pitts 提出了。在经历了快速发展后陷入瓶颈期,最重要的一点便是无法有效地训练神经网络——一方便是算法,另一方面是计算能力——直到上世纪未才由反向传播(BP)方式得以改进。

神经网络就是模拟生物大脑的信息传递结构,以计算机的视角进行了构建,参照生物神经元的特性,也分为神经元、轴突与树突,具体由计算机图数据结构来表示。例如一个简单的神经元网络如下:

前馈人工神经元网络

阅读全文>>

15
May
2019

我的书出版了!Service Mesh: Istio 入门必备

标签: 思考 软件设计 架构

很长时间没有写博客了,大家可能以为它已经废弃了。其实,从去年到现在我都是在忙着写一本关于 Istio 的书籍,之所以写这本书主要还是因为当时市面上对这方面的文章太少了,书籍则是零。因此我将自己的理解与实践经验分享给大家,希望对大家有帮助。


我个人是非常看好服务网格的,我自己本身专注于软负载,我认为服务网格是在容器时代的软负载最佳的存在形态。就像 PaaS 一样,服务网格也将自己作为一个基础通用服务层下层到了基础技术栈体系,这样不仅有利于通用性,还对业务的无侵入性有很好的支持。在容器时代,一切都是浮动的、弹性的,可变的,负载也不例外,从早些时候的硬件负载,到微服务时代的透明负载,再到服务网格,这一个世代的划分。我觉得每个对分布式有兴趣或者从事其中的工程师都应该或多或少了解下。


有兴趣吗?买我一本书吧,听我慢慢为你道来~


当当:http://product.dangdang.com/27857036.html 


22
Aug
2016

2016 Spring One Platform 美国行

标签: Java 架构

有幸参加了2016在美国拉斯维加斯举行的Spring One Platform会议,接下来说一下我学习到的与了解到的一些东西。

阅读全文>>

14
Mar
2016

一张图看懂Raft

标签: 软件设计 算法
点击题目查看详情啦~

阅读全文>>

03
Nov
2015

2015 云栖大会

标签: 大会

    这次大会很幸运的是能以主办方的身份参加会议,地点在杭州下沙一个叫云栖小镇的地方,说实话这地方确实不好找,第一天早上出发的时候还走错了路。

本次大会与众不同的地方在于规模相当的大,官方公布的数据是3W人)现场不仅有主题演讲,还有会展,而且参会厂商相当广。InfoQ、 CSDN的开源大会什么的相比较起来只能算小巫见大巫。不过遗憾的是现场的导流与管理并,没有相像中的好,很大地点都没有标注清楚,印象最深的就是午饭,很多人都不知道C座在什么地方,只能靠嘴一路问过去。虽说本次大会的主题是《让云计算成为公共资源》,但参会的流程并没有让我感觉是在云端,其实我觉得完全可以利用移动端,将地图、人流分布、活动项目、资寻等都搬到云上,形成一个动态信息汇总区,还方便日后查询,不仅秀了技术还方便了大家。估计还是筹备得忽忙了一些吧,下面分块来分享一下我这次的参会感受。

一、会展

    会展是很赞了,几乎你能想到的厂商都来了,软件硬件都有且还包括很多传统企业与高校科研机构,如中国移动什么的、中科大什么的。众观整个会展,可以用一个词来代表:连接。无论是智能硬件、工业化4.0、O2O平台还是云计算。他们的特点都是把生活中的各个点连接起来了进行计算,这种场景被马总称为DT时代。什么是DT时代?以前由于通信不发达,我们专注的只是自己的那个点,比如我做红烧肉很厉害,那么我可能只靠开一个红烧肉小馆子就能获得很大的成功了,但现在不同了,通信发达了,我们已经超越了地理位置的限制,靠称霸一方当个土皇帝的时代已经显然已经出局了。其实问题的关键是光靠一家两家的力量也不能解决我们面临的问题了,正如大型计算一样,摩尔定律早已失效,人类已经开始走向多核并行计算。DT时代正是将以往的各搞各的单汇成一张网,O2O就是很好的一个具体化。货车帮、航运宝、趣医网、掌上糖衣等等企业都阐述了这个时代的一个共同特点:连接与大数据。



一些会展图片

      结合马总的DT思想就不难想像为什么这届大会的主题是《让云计算成为公共资源》了,我非常喜欢阿里云现任总裁胡晓明举的一个例子:在电力成为公共资源之后,没有知道它的价值,甚至还有人拿交流电触电事故来诋毁,说电力是不安全的;而当电力成为公共资源后,极大地推进了工业的发展,可以说第二次工业革命如果没有公共电力那是完成不可能完成。现在大家都知道我们正向工业4.0(即第四次工业革命)迈进,而这个转变的基础是什么呢?那就“计算与互联”,工业4.0 讲究的是智能化与信息化,这个前提自然所有的设备都能并网通信,试想一下,每个部件、每个传感器、每个机械手臂的数据都汇总起来,这意味着什么?这就是“大数据”而大数据的处理显然是离不开“计算”的,工业4.0处处存在着大数据,可能你的家或者你的办公室就是一个大数据生产车间,处处都需要计算,这显然就需要将计算公共化,将计算延伸到寻常百姓家,就像现在用电一样自在,而不是“高大上”的专用。我不知道各位是如何想的,我自己是非常赞同这一想法的,也许你觉得可笑,但我可以在这里断言,如果传统制造业跟不上这个步伐,等待他们的只能是被淘汰出局。现在的汽车行业就是一个潜在的案例,宝马、奥迪已经将内燃机做到了极致,可谓登峰造极,但现在丝毫有向4.0过渡的迹象,如果再这样持续下去,被Telsa这种新兴汽车干掉是迟早的事。

    总的来说,未来计算无处不在!

二、专题演讲

     说实话,我并没有觉得此次的专题演讲有什么亮点,听来听去都是些泛泛之谈,例如Docker的分享完全就是把国内人当小孩,还在举德国工厂的例子鼓吹为什么要docker化,好像大家都不知道一样,一点儿内部细节都没有。相比之下,我觉得圆桌会议(或称Pannel Discussion)还不错的,至少可以让你有与各大CEO同桌讨论的感觉(虽然你完全不能发言)。上面说的胡晓明举的例子就是出自于一个圆桌会议,这个圆桌会议讨论的是云计算以后是以私有化为主还是公有化为主,所谓私有云就是搭建一套独立的环境,整个计算能力与外界隔绝。优点是安全;缺点显然就是不够弹性。举个例子,如果12306使用私有云,那么最受益的肯定是硬件厂商(这也是为什么浪潮云的CEO一直主张私有云的原因),然后问题是一旦高峰期过了(例如春节),就会有大量的计算资源得不到有效利用(因为是隔离的环境),便会形成巨大的资源浪费;而阿里云这边认为计算是一种公共资源,它的调度应该像自来水一样,需要的时候多给,不需要的时候就少给,拿12306的例子来说,在高峰期过后,多余的计算资源就应该回收。在阿里云的设想里,所有的计算资源都应该像电网一样并网,入网的可以是不同的发电站,不管你是用核能、风能、太阳太还是水利发电,这些都不是用户需要关心,用户只需要拧开水龙头就来水(计算),关掉水龙头就减少,仅此而已。如果各位亲还在位安全担忧的话,那么我建议您还是将钱挖个坑埋起来吧,应该银行也不是安全啊,也有倒闭或者被抢劫什么的可能。所以说,现在大家对云计算的担心完全是没有信任的基础上产生的近忧,这点我觉得是可以理解的,随着云计算的普及,这些担忧肯定会越来越少的。

    其它技术方面我并没有太去了解,前面也说了,没有什么料爆出来,至少我是没看到。不过硬件我倒是看到几个新奇的东西,一个是防水插座,这种插座全 部浸入到水里也不会出现漏电,确实是很安全。中国院带来了一个量子计算加密,还是高校风格,看上去高大上,实质上没什么作用。另一个就是与植物结合的空气净化器,感觉很新鲜,不过好像是大了一点。还且个学会创客组,他们带来的是自行车导航(包含方向指引,队员距离提醒等等功能),学生们是很有激情,但我不看好,因为自行车的原因是轻量化,稍微专业点的爱好者者不会出装各种辅助装置的,要知道,自行车为了省那个几百克,都可以绞尽脑汁,简约才是自行车的发展方向。最后还一个人展区,是游戏展区,说实话真的有些非主流的味道(难道90后的审美都是如此吗?)~ 总的就这些吧~


09
Oct
2015

现代软件开发过程是艺术的创作过程

标签: 开发过程
这个问题我思考了很久,从大学开始我一直对软件开发过程有浓厚的兴趣。那个时候IBM的RUP(Rational Unified Process)非常流行,在很长一段时间内,各类大公司的软件开发过程都被我视为圣经,它们强调开发要分“需求分析”、“用例分析”、“系统设计”、“详细设计”、“编码”或者再来个迭代什么的,也学了非常多工程方法,如"UML"、"SysML"、"ERD"、"BPMN""DFD" 等等等等。然而,回首我在阿里五年的工作——其中有业务部门,也有技术部门——我发现,这些看似高大上的东西,在实际过程中根本没有人在用!

阅读全文>>

19
Sep
2015

基于贝叶斯的拼写检查算法

标签: 回忆

学生时代写的博客,被我恢复了出来了这篇文章应该大二写的,也就是2008年

阅读全文>>

1 2 3