自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GL

Graphics, Math

  • 博客(50)
  • 收藏
  • 关注

原创 Express-Middleware和Router

app.use(function(req,res,next){console.log("middlereq="+req);req.authenticatedUser=users[0];res.send('Viewinguser');//next();});

2021-05-28 16:17:27 232

原创 Docker之一: Appwrite

安装Docker:https://www.docker.com/products/docker-desktop安装appwritegit glone https://github.com/appwrite/appwrite.gitcd appwritedocker build -t appwrite .docker run -it --rm ^ --volume //var/run/docker.sock:/var/run/docker.sock ^ --volume "%cd%

2021-05-23 18:09:22 1303

原创 远程桌面的vnc-any模式

通过vnc-any可以远程像在本地打开Ubuntu一样,打开Ubuntu桌面(速度肯定会蛮很多,但是界面权限一致)。Vnc/Xrdp/remote desktop1),sudo apt-get install xrdp检查xrdp是否工作:ps -xua|grep xrdp/usr/sbin/xrdp-sesman/usr/sbin/xrdp2),settingssudo apt install net-toolsifconfigsudo apt install sshsudo apt

2021-01-29 09:31:46 1721

原创 JavaScript的null和undefined,两个等号三个等号

const benchmarks = { 'mobilenet_v2': { type: 'GraphModel', load: async () => { const url = 'https://storage.googleapis.com/learnjs-data/mobilenet_v2_100_fused/model.json'; return tf.loadGraphModel(url); }, predict

2021-01-21 16:36:55 377

原创 Linux on Windows

序如果在十五年前,那时候我刚开始看Linux内核情景分析,看到了微软这么用心的支持Linux、甚至是在Windows上支持Linux,我可能会很激动吧。但是现在,我只会说,哦,这样啊!Linux on Windows有两个阶段:不支持Linux GUI应用的WSL;支持Linux GUI的 WSL2。XDC2020上有些话题是关于WSL2的图形系统的,这里稍微摘录整理下。OpenGL over D3Dhttps://www.collabora.com/news-and-blog/blog/202

2020-12-17 13:51:52 302 1

原创 对JavaScript Promise/async/await的一些理解2

在http://jsfiddle.net/,下面这段js可以正常输出一个图片:fetch('http://fiddle.jshell.net/img/logo.png').then(response => response.blob()).then(myBlob => { let objectURL = URL.createObjectURL(myBlob); let image = document.createElement('img'); image.src = obje

2020-09-27 15:19:24 599

原创 TensorFlowJS 如何export一个async API

下属代码讨论的都是位于tfjs-core里面。容易想到的是,在browser.ts增加:async function fromPixelsAsync_( pixels: PixelData | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement, numChannels = 3): Promise<Tensor3D> { return await fromPixels(

2020-09-27 10:37:16 837

原创 等等鸿蒙

操作系统的发展,其实有两个路线。一个是以产品经理(本质是用户)为主导的自顶向下的改进。一个是工程师为主导的自底而上的革新。看了几页鸿蒙的介绍,我认为鸿蒙是对传统操作系统自顶向下的演进。所谓自底而上,就是开发人员能够敏锐的扑捉到硬件系统的变革,然后带来操作系统的变化。譬如安卓和之前的嵌入式Linux相比,就顺应了多处理器的发展。这是自底而上。自底而上的特点是,这类发展和变化是颠覆式和革命性的。大家都看到了,安卓和IOS对诺基亚摩托等传统巨头的冲击有多大。所谓自顶向下,就是从用户需求出发。研究用户需求是产品

2020-09-25 09:30:19 1968 2

原创 X 扩展实现

X Server(xorg-server-1.20.8)定义了119个接口(0号和120之外的初始的时候都是ProcBadRequest)。128之外的接口都是给扩展用的(#define EXTENSION_BASE 128)。但是每个扩展可能实现了多个接口,而ProcVector仅仅为每个扩展准备了一个入口。所以扩展协议如果有多个接口,就需要自行分发。所以这里的MainProc其实就是扩展协议的入口。对于XRender协议,MainProc就是ProcRenderDispatch。所以XRender

2020-07-04 09:49:36 830

原创 TypeScript的Memory leak

在C++语言里面,申明了一个对象,当代码走出了对象的作用域的时候,这个对象的析构函数会被调用,因而给用户提供了自主释放资源的机会,无论这个资源是位于内存还是显存,都没有关系。譬如下面的代码,String a1的资源释放过程是:先调用析构函数String::~String,然后释放a1 对象本身(譬如size,vtable等)。#include <iostream>#include <cstring>using namespace std; class String {

2020-06-28 10:14:12 575

原创 Visual Studio Code列编辑和多光标编辑

要求:下面的文本,要在行头插入cp,行尾插入src(Windows):../src/thil../src/thre../src/thre../src/thre.h../src/threp../src/thTrpp../src/the.cpp多行行首插入:光标移动到第一行行首(最后一行也可以),按住ALT+SHIFT,移动鼠标选择多行,直接输入cp 就可以(也可以移动到任一列)::cp ../src/thilcp ../src/threcp ../src/threcp ../src/

2020-05-13 09:26:41 3370

原创 Vulkan资源的逻辑大小和实际大小

逻辑大小就是存储的有效数据的大小,譬如说存储了8个int,那么逻辑大小就是32。实际大小的话,则有可能比这个逻辑大小要大,主要是每个资源都有一些meta数据。主要讨论两种Vulkan资源:VkImage,VkBuffer。VkBuffer的逻辑大小是VkBufferCreateInfo来指定的。实际大小在调用vkAllocateMemory创建VkDeviceMemory的时候,通过VkMem...

2020-05-06 16:37:46 644

原创 C/C++开发人员的TypeScript入门笔记

TypeScript里面的有些概念,是C++开发人员无法直接理解的。TypeScript之object在TFJS里面,每一个object都通过大括号初始化,然后用作WeakMap的关键字:export type DataId = object;const dataId = {}; //DataId类型初始化之后,这个dataId就不再更改了。原因是,虽然初始化的过程都是一样的大括号,但...

2020-02-28 13:08:35 1398

原创 IPhone8 升级变砖复活记

家人的IPhone 8,之前是IOS 12.出现了死机问题,所谓死机也不是完全不能点,任何一个界面能够点开前面的一二级菜单,后面就卡住了,譬如微信,设置里面的升级系统等。经验之谈是,死机问题大多数是可以通过重启解决的。如果重启一次不行,就重启两次。说到死机,不得不说IPhone的第一个坑,那就是长按电源键并不会让系统真正重启。死机现象在多次按电源键重启后依旧。后来突然大脑抽风了,隐约想起来之前...

2020-02-25 20:18:20 5615

原创 tf.grads的使用

TFJS的源码并没有对第三个参数dy进行注释。官方文档也仅仅给出了前两个参数https://js.tensorflow.org/api/latest/#grads的示例。具体使用第三个参数的示例是:const a = tf.scalar(5);const b = tf.scalar(2);const dy = tf.scalar(4);const before = tf.memory(...

2020-01-13 15:19:28 178

原创 Clanf-format在Visual studio code上格式化代码的write EPIPE问题

开始的时候,报WRITE EPIPE错误。根据https://github.com/KratosMultiphysics/Kratos/wiki/How-to-configure-clang%E2%80%90format的提示,去安装了LLVM。但是依然报类似的错误:[error] spawn clang-format ENOENT: Error: spawn clang-format ENO...

2020-01-13 09:18:11 1413

原创 ArrayBuffer和Float32Array

ArrayBuffer指的是实际的存储数据。但是这些数据怎么解读,则取决于数据的视图。数据的视图种类很多,本文只讨论其中的一种:Float32Array。RangeError: byte length of Float32Array should be a multiple of 4如果用视图Float32Array来解读ArrayBuffer。ArrayBuffer的大小应该是4的倍数。否则...

2020-01-08 21:44:19 4645

原创 CUDA共享内存用于加速矩阵转置

直观上来看,矩阵转置和卷积等操作不同,不存在数据共享(卷积窗口在输入数据上滑动的时候,相邻数据存在共享),因为仅仅是将数据换个位置存储而已。但是NVIDIA在https://github.com/NVIDIA-developer-blog/code-samples.git实现了一种基于共享内存的转置算法,在某些场景实现了两倍以上的加速,示意如下图(从做到右依次是:输入,共享内存,输出):其原...

2019-10-10 09:39:13 786 1

原创 OpenGL和Vulkan的Color Renderable Format

Image/Texture资源可以分为两种:SampleableRenderableOpenGL ES 2.0https://www.khronos.org/registry/OpenGL/specs/es/2.0/es_full_spec_2.0.pdfVulkanVulkan的情形要复杂一些,每个不同用途的Image,支持的格式都是有区别的。所以Vulkan在处理Image...

2019-08-15 14:41:40 713

原创 SwiftShader-Vulkan的线程结构

SwiftShader是谷歌的开源项目,使用软件的方式实现了部分GPU的渲染功能,它支持OpenGL/Vulkan/D3D等接口。本文讨论SwiftShader的Vulkan实现,它本身是通过多线程来实现的:Submit线程:将用户提交到同一个CommandBuffer的Vulkan命令整理成绘图任务(Task,也可以叫DrawCall);Raster线程:执行绘图任务。绘图任务主要工作是:...

2019-08-14 13:19:18 3999

原创 3D编程的深度信息

深度信息在不同的阶段其意义是不同的,不同的3D接口对这个深度信息的理解也有区别。本文仅仅讨论位于NDC空间的深度信息,其取值范围通常是[0, 1.0]或者[-1.0, 1.0]。OpenGL的深度信息OpenGL默认是GL_NEGATIVE_ONE_TO_ONE,即[-1.0, 1.0]。通过glClipControl(GL_ZERO_TO_ONE)可以修改为[0, 1.0]。修改后可以和D...

2019-08-08 14:27:29 262 1

原创 Chromium 版本信息

规则: [版本信息-snapshot代号-日期]62.0.3182.0-493477-2017081074.0.3726.0-637953-20190306

2019-07-10 08:54:55 2940

原创 Ubuntu18.04 安装NVIDIA驱动登录后卡住的问题

现象:登录后界面就卡住,全屏是背景色,没有任何菜单显示。测试环境:Ubuntu18.04/GTX1060问题分析:这个问题由来已久。根据https://askubuntu.com/questions/1030060/freeze-after-login-ubuntu-18-04,试了多个版本的驱动都失败。也尝试了https://blog.youkuaiyun.com/lanchunhui/artic...

2019-07-09 14:53:02 6328

原创 TFJS:conv2d输入输出形状的计算computeConv2DInfo

conv2d包含了两个输入参数:x,filter。一个输出参数:output shape。参考源码:https://github.com/tensorflow/tfjs-core/blob/master/src/ops/conv_util.ts, 版本号7833594输入参数的处理conv2d有两个输入参数:x和filter。 * @param x The input tensor, of...

2019-06-25 10:13:44 1200

原创 深度可分离卷积的Depth,Stack,Channel Multiplier

通道数目的不同单通道的卷积下面的代码测试了仅仅一个属性(depth是1)的深度卷积,其结果和普通卷积是一样的:async function depthwiseConv2dTestSingleDepth() { const fSize = 2; const pad = 'valid'; const stride = 1; const chMul = 1; const inD...

2019-06-11 13:30:23 2206

原创 TensorFlowJS的卷积和深度可分离卷积实现

本文介绍GPU实现的Conv2DProgram。逻辑输出坐标:xRCorner,xCCorner。卷积的基本流程:用高宽分别是filterHeightxfilterWidth的卷积核对输入数据做卷积。要注意的是:输入数据和卷积核除了有高度和宽度之外,还有一个参数,深度convInfo.inChannels。所以卷积就变成了:对逻辑输出坐标对应的所有深度的的通道,依次做getX()xgetW...

2019-04-12 15:57:38 587

原创 矩阵乘法(测试)

https://www.ibiblio.org/e-notes/webgl/gpu/mul/sgemm2.htmconst CSs = `#version 310 es#define TS 32ulayout (local_size_x = TS, local_size_y = TS, local_size_z = 1) in;layout (std430, binding = 0) re...

2019-03-30 07:50:52 346

原创 深度可分离卷积

下面这个文章介绍了深度可分离卷积是怎么做的:https://towardsdatascience.com/a-basic-introduction-to-separable-convolutions-b99ec3102728。(我记得有一片文章证明了深度可分离卷积和正常卷积是等效的,但是暂时没找到链接。)正常卷积原始图像是12x12的,由于是RGB格式的,所以有三个通道。其输入图片格式是:12...

2019-03-22 09:06:25 14333 9

原创 对JavaScript Promise/async/await的一些理解

var promise1 = new Promise(function(resolve, reject) { console.log(&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;Inside new Promise, with 300 timeout&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;);

2019-03-06 14:05:20 436

原创 TenorFlowJS-激活函数

概述激活函数用来决定一个神经元的最终的输出。譬如对一个细胞来说,理想的输出是0和1。但是如果真实的输出是0.85的话,这个时候用来决定输出是0还是1的函数就叫激活函数。激活函数或者位于网络的尾部,用于调整输出,或者位于Layer之间。本文介绍激活函数用于Dense Layer的情况。图片来自:https://cdn-images-1.medium.com/max/1400/0*44z99...

2019-02-27 16:53:12 252

原创 TensorFlowJS-算子的常见用法

TensorFlowJS的算子(tfjs-core/src/ops)有两种常见的用法。第一种,直接在JS代码里面调用tfjs-core/src/ops里面的算子,譬如tf.conv2d就会调用tfjs-core/src/ops里面的conv2d算子。第二种,创建Layer,Layer里面会调用算子。譬如通过tf.layers.conv2d创建的Layer就封装了卷积运算。tf.conv2...

2019-02-24 21:24:57 713

原创 TensorFlowJS的入门资料

接口部分最基本的核心概念:Tensor,Tensor的运算https://js.tensorflow.org/tutorials/core-concepts.htmlLayer的创建和概念:https://js.tensorflow.org/tutorials/tfjs-layers-for-keras-users.html模型。模型是和Layer关系很紧密的概念,或者说,模型描述了La...

2019-02-24 20:56:10 478

原创 TensorFlowJS-Model

模型用来描述Layer之间的拓扑逻辑关系,即一个Layer的输出,以何种形式作为下一个Layer的输入。模型可以被用来训练和预测。模型的状态(包括拓扑逻辑,训练得到的权重)可以从其他的格式里面恢复过来。有两种创建模型的方式: tf.sequential和tf.model。tf.sequential简单的类似栈一样的关系。就是每一层的输入,依赖于上一层的输出(我理解的是:一层的某个Tensor...

2019-02-23 20:47:30 322

原创 Python-Office: Python统计Excel里面的数据

问题描述类似下面的excel表格,第一列为关键字,第二列为关键字出现的次数。统计每个关键字的总数目。譬如ab 是12+1, cd是13+2, ef是0。XlsxWriter的安装pip install XlsxWriter之后,python仍然可能提示找不到XlsxWriter。这个时候可以尝试下面的方法安装:$ git clone https://github.com/jmcnama...

2019-02-22 13:39:46 5728

原创 Android-WebKit视频播放原理之一 —— 界面呈现部分

在了解这部分功能之前,需要先了解一下浏览器的布局特点。在大部分应用里面,Activity的Layout文件是通过Activity::setContentView来指定的。不过浏览器的BrowserActivity有点特殊。他首先通过BrowserActivity所使用的DecorView取得其窗口内容的根View (由com.android.internal.R.id.content指定,请注意这...

2019-02-20 21:52:32 8310 1

原创 Android编程示例之——横竖屏切换动画

设计思路:利用接口View::onConfigurationChanged,来捕获横竖屏幕切换事件,然后对控件使用动画。实施步骤:1),对Activity设置属性:android:configChanges="orientation"。2),控件代码:package test.view.customimageview;import android.content.Contex...

2019-02-20 21:48:48 4411

原创 Android编程示例之——UI主线程以及多线程

前几天看到一个帖子,有位朋友列出了一段代码1:/********************代码1:在非UI线程里面操作UI*****************************/class myThread extends Thread {private Handler myHandler;public void run() {Looper myLooper, mainLoope...

2019-02-20 21:24:20 5489

原创 Android编程示例之——WebView,判断JavaScript引擎是V8还是JavaScriptCore

1), Html页面设计:&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;script type="text/javascript"&gt; if (window.devicePixelRatio) { //If WebKit browser  var st = escape(navigator.javaEnabled.to...

2019-02-20 21:19:08 4506

原创 Java——Servlet的配置和测试

本文以一个实例介绍如何用Java开发Servlet。主要内容有:配置和验证Tomcat。测试Servlet在这之前需要安装Java,请参考“Java——环境配置和Hello”。第一部分:配置和验证Tomcat:1,下载Tomcathttp://tomcat.apache.org/download-70.cgi2, 设置classpath追加C:\MY\tools\ja...

2019-02-20 21:11:53 23334

原创 Skia实现图像边缘检测

这里使用的是Laplace算子:Skia的实现如下:#include "SkMatrixConvolutionImageFilter.h"void draw(SkCanvas* canvas) { SkScalar kernel[9] = { SkIntToScalar(-1), SkIntToScalar(-1), SkIntToScalar(-1), SkI...

2019-02-20 19:02:21 551

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除