<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[GL]]></title><description><![CDATA[Graphics, Math]]></description><link>https://blog.youkuaiyun.com/makefish</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; makefish]]></copyright><item><title><![CDATA[Express-Middleware和Router]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/117366137</link><guid>https://blog.youkuaiyun.com/makefish/article/details/117366137</guid><author>makefish</author><pubDate>Fri, 28 May 2021 16:17:27 +0800</pubDate><description><![CDATA[app.use(function(req,res,next){

console.log("middlereq="+req);

req.authenticatedUser=users[0];

res.send('Viewinguser');

//next();

});
]]></description><category></category></item><item><title><![CDATA[Docker之一： Appwrite]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/117198226</link><guid>https://blog.youkuaiyun.com/makefish/article/details/117198226</guid><author>makefish</author><pubDate>Sun, 23 May 2021 18:09:22 +0800</pubDate><description><![CDATA[安装Docker：
https://www.docker.com/products/docker-desktop
安装appwrite
git glone https://github.com/appwrite/appwrite.git
cd appwrite
docker build -t appwrite .
docker run -it --rm ^
    --volume //var/run/docker.sock:/var/run/docker.sock ^
    --volume "%cd%]]></description><category></category></item><item><title><![CDATA[远程桌面的vnc-any模式]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/113365083</link><guid>https://blog.youkuaiyun.com/makefish/article/details/113365083</guid><author>makefish</author><pubDate>Fri, 29 Jan 2021 09:31:46 +0800</pubDate><description><![CDATA[通过vnc-any可以远程像在本地打开Ubuntu一样，打开Ubuntu桌面（速度肯定会蛮很多，但是界面权限一致）。
Vnc/Xrdp/remote desktop
1），sudo apt-get install xrdp
检查xrdp是否工作：ps -xua|grep xrdp
/usr/sbin/xrdp-sesman
/usr/sbin/xrdp

2），settings
sudo apt install net-tools
ifconfig
sudo apt install ssh
sudo apt]]></description><category></category></item><item><title><![CDATA[JavaScript的null和undefined，两个等号三个等号]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/112966235</link><guid>https://blog.youkuaiyun.com/makefish/article/details/112966235</guid><author>makefish</author><pubDate>Thu, 21 Jan 2021 16:36:55 +0800</pubDate><description><![CDATA[const benchmarks = {
  'mobilenet_v2': {
    type: 'GraphModel',
    load: async () =&gt; {
      const url =
          'https://storage.googleapis.com/learnjs-data/mobilenet_v2_100_fused/model.json';
      return tf.loadGraphModel(url);
    },
    predict]]></description><category></category></item><item><title><![CDATA[Linux on Windows]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/111313562</link><guid>https://blog.youkuaiyun.com/makefish/article/details/111313562</guid><author>makefish</author><pubDate>Thu, 17 Dec 2020 13:51:52 +0800</pubDate><description><![CDATA[序
如果在十五年前，那时候我刚开始看Linux内核情景分析，看到了微软这么用心的支持Linux、甚至是在Windows上支持Linux，我可能会很激动吧。
但是现在，我只会说，哦，这样啊！
Linux on Windows有两个阶段：不支持Linux GUI应用的WSL；支持Linux GUI的 WSL2。
XDC2020上有些话题是关于WSL2的图形系统的，这里稍微摘录整理下。
OpenGL over D3D
https://www.collabora.com/news-and-blog/blog/202]]></description><category></category></item><item><title><![CDATA[对JavaScript Promise/async/await的一些理解2]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/108828431</link><guid>https://blog.youkuaiyun.com/makefish/article/details/108828431</guid><author>makefish</author><pubDate>Sun, 27 Sep 2020 15:19:24 +0800</pubDate><description><![CDATA[在http://jsfiddle.net/，下面这段js可以正常输出一个图片：
fetch('http://fiddle.jshell.net/img/logo.png')
.then(response =&gt; response.blob())
.then(myBlob =&gt; {
  let objectURL = URL.createObjectURL(myBlob);
  let image = document.createElement('img');
  image.src = obje]]></description><category></category></item><item><title><![CDATA[TensorFlowJS 如何export一个async API]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/108822875</link><guid>https://blog.youkuaiyun.com/makefish/article/details/108822875</guid><author>makefish</author><pubDate>Sun, 27 Sep 2020 10:37:16 +0800</pubDate><description><![CDATA[下属代码讨论的都是位于tfjs-core里面。
容易想到的是，在browser.ts增加：
async function fromPixelsAsync_(
    pixels: PixelData | ImageData | HTMLImageElement | HTMLCanvasElement |
        HTMLVideoElement,
    numChannels = 3): Promise&lt;Tensor3D&gt; {
    return await fromPixels(]]></description><category></category></item><item><title><![CDATA[等等鸿蒙]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/108789591</link><guid>https://blog.youkuaiyun.com/makefish/article/details/108789591</guid><author>makefish</author><pubDate>Fri, 25 Sep 2020 09:30:19 +0800</pubDate><description><![CDATA[操作系统的发展，其实有两个路线。一个是以产品经理（本质是用户）为主导的自顶向下的改进。一个是工程师为主导的自底而上的革新。看了几页鸿蒙的介绍，我认为鸿蒙是对传统操作系统自顶向下的演进。
所谓自底而上，就是开发人员能够敏锐的扑捉到硬件系统的变革，然后带来操作系统的变化。譬如安卓和之前的嵌入式Linux相比，就顺应了多处理器的发展。这是自底而上。自底而上的特点是，这类发展和变化是颠覆式和革命性的。大家都看到了，安卓和IOS对诺基亚摩托等传统巨头的冲击有多大。
所谓自顶向下，就是从用户需求出发。研究用户需求是产品]]></description><category></category></item><item><title><![CDATA[X 扩展实现]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/107120101</link><guid>https://blog.youkuaiyun.com/makefish/article/details/107120101</guid><author>makefish</author><pubDate>Sat, 04 Jul 2020 09:49:36 +0800</pubDate><description><![CDATA[X Server（xorg-server-1.20.8）定义了119个接口（0号和120之外的初始的时候都是ProcBadRequest）。
128之外的接口都是给扩展用的（#define EXTENSION_BASE 128）。
但是每个扩展可能实现了多个接口，而ProcVector仅仅为每个扩展准备了一个入口。所以扩展协议如果有多个接口，就需要自行分发。所以这里的MainProc其实就是扩展协议的入口。对于XRender协议，MainProc就是ProcRenderDispatch。
所以XRender]]></description><category></category></item><item><title><![CDATA[TypeScript的Memory leak]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/106993499</link><guid>https://blog.youkuaiyun.com/makefish/article/details/106993499</guid><author>makefish</author><pubDate>Sun, 28 Jun 2020 10:14:12 +0800</pubDate><description><![CDATA[在C++语言里面，申明了一个对象，当代码走出了对象的作用域的时候，这个对象的析构函数会被调用，因而给用户提供了自主释放资源的机会，无论这个资源是位于内存还是显存，都没有关系。
譬如下面的代码，String a1的资源释放过程是：先调用析构函数String::~String，然后释放a1 对象本身（譬如size，vtable等）。
#include &lt;iostream&gt;
#include &lt;cstring&gt;
using namespace std;
 
class String 
{ ]]></description><category></category></item><item><title><![CDATA[Visual Studio Code列编辑和多光标编辑]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/106090612</link><guid>https://blog.youkuaiyun.com/makefish/article/details/106090612</guid><author>makefish</author><pubDate>Wed, 13 May 2020 09:26:41 +0800</pubDate><description><![CDATA[要求：下面的文本，要在行头插入cp，行尾插入src（Windows）：
../src/thil
../src/thre
../src/thre
../src/thre.h
../src/threp
../src/thTrpp
../src/the.cpp

多行行首插入：光标移动到第一行行首（最后一行也可以），按住ALT+SHIFT，移动鼠标选择多行，直接输入cp 就可以（也可以移动到任一列）：：
cp ../src/thil
cp ../src/thre
cp ../src/thre
cp ../src/]]></description><category></category></item><item><title><![CDATA[Vulkan资源的逻辑大小和实际大小]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/105953750</link><guid>https://blog.youkuaiyun.com/makefish/article/details/105953750</guid><author>makefish</author><pubDate>Wed, 06 May 2020 16:37:46 +0800</pubDate><description><![CDATA[逻辑大小就是存储的有效数据的大小，譬如说存储了8个int，那么逻辑大小就是32。实际大小的话，则有可能比这个逻辑大小要大，主要是每个资源都有一些meta数据。
主要讨论两种Vulkan资源：VkImage，VkBuffer。
VkBuffer的逻辑大小是VkBufferCreateInfo来指定的。实际大小在调用vkAllocateMemory创建VkDeviceMemory的时候，通过VkMem...]]></description><category></category></item><item><title><![CDATA[C/C++开发人员的TypeScript入门笔记]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/104554571</link><guid>https://blog.youkuaiyun.com/makefish/article/details/104554571</guid><author>makefish</author><pubDate>Fri, 28 Feb 2020 13:08:35 +0800</pubDate><description><![CDATA[TypeScript里面的有些概念，是C++开发人员无法直接理解的。
TypeScript之object
在TFJS里面，每一个object都通过大括号初始化，然后用作WeakMap的关键字：
export type DataId = object;
const dataId = {}; //DataId类型

初始化之后，这个dataId就不再更改了。原因是，虽然初始化的过程都是一样的大括号，但...]]></description><category></category></item><item><title><![CDATA[IPhone8 升级变砖复活记]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/104504412</link><guid>https://blog.youkuaiyun.com/makefish/article/details/104504412</guid><author>makefish</author><pubDate>Tue, 25 Feb 2020 20:18:20 +0800</pubDate><description><![CDATA[家人的IPhone 8，之前是IOS 12.出现了死机问题，所谓死机也不是完全不能点，任何一个界面能够点开前面的一二级菜单，后面就卡住了，譬如微信，设置里面的升级系统等。
经验之谈是，死机问题大多数是可以通过重启解决的。如果重启一次不行，就重启两次。说到死机，不得不说IPhone的第一个坑，那就是长按电源键并不会让系统真正重启。
死机现象在多次按电源键重启后依旧。后来突然大脑抽风了，隐约想起来之前...]]></description><category></category></item><item><title><![CDATA[tf.grads的使用]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/103958362</link><guid>https://blog.youkuaiyun.com/makefish/article/details/103958362</guid><author>makefish</author><pubDate>Mon, 13 Jan 2020 15:19:28 +0800</pubDate><description><![CDATA[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(...]]></description><category></category></item><item><title><![CDATA[Clanf-format在Visual studio code上格式化代码的write EPIPE问题]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/103952419</link><guid>https://blog.youkuaiyun.com/makefish/article/details/103952419</guid><author>makefish</author><pubDate>Mon, 13 Jan 2020 09:18:11 +0800</pubDate><description><![CDATA[开始的时候，报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...]]></description><category></category></item><item><title><![CDATA[ArrayBuffer和Float32Array]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/100038704</link><guid>https://blog.youkuaiyun.com/makefish/article/details/100038704</guid><author>makefish</author><pubDate>Wed, 08 Jan 2020 21:44:19 +0800</pubDate><description><![CDATA[ArrayBuffer指的是实际的存储数据。但是这些数据怎么解读，则取决于数据的视图。数据的视图种类很多，本文只讨论其中的一种：Float32Array。
RangeError: byte length of Float32Array should be a multiple of 4
如果用视图Float32Array来解读ArrayBuffer。ArrayBuffer的大小应该是4的倍数。否则...]]></description><category></category></item><item><title><![CDATA[CUDA共享内存用于加速矩阵转置]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/102474711</link><guid>https://blog.youkuaiyun.com/makefish/article/details/102474711</guid><author>makefish</author><pubDate>Thu, 10 Oct 2019 09:39:13 +0800</pubDate><description><![CDATA[直观上来看，矩阵转置和卷积等操作不同，不存在数据共享（卷积窗口在输入数据上滑动的时候，相邻数据存在共享），因为仅仅是将数据换个位置存储而已。
但是NVIDIA在https://github.com/NVIDIA-developer-blog/code-samples.git实现了一种基于共享内存的转置算法，在某些场景实现了两倍以上的加速，示意如下图（从做到右依次是：输入，共享内存，输出）：

其原...]]></description><category></category></item><item><title><![CDATA[OpenGL和Vulkan的Color Renderable Format]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/99633067</link><guid>https://blog.youkuaiyun.com/makefish/article/details/99633067</guid><author>makefish</author><pubDate>Thu, 15 Aug 2019 14:41:40 +0800</pubDate><description><![CDATA[Image/Texture资源可以分为两种：

Sampleable
Renderable

OpenGL ES 2.0

https://www.khronos.org/registry/OpenGL/specs/es/2.0/es_full_spec_2.0.pdf
Vulkan
Vulkan的情形要复杂一些，每个不同用途的Image，支持的格式都是有区别的。
所以Vulkan在处理Image...]]></description><category></category></item><item><title><![CDATA[SwiftShader-Vulkan的线程结构]]></title><link>https://blog.youkuaiyun.com/makefish/article/details/99558772</link><guid>https://blog.youkuaiyun.com/makefish/article/details/99558772</guid><author>makefish</author><pubDate>Wed, 14 Aug 2019 13:19:18 +0800</pubDate><description><![CDATA[SwiftShader是谷歌的开源项目，使用软件的方式实现了部分GPU的渲染功能，它支持OpenGL/Vulkan/D3D等接口。本文讨论SwiftShader的Vulkan实现，它本身是通过多线程来实现的：

Submit线程：将用户提交到同一个CommandBuffer的Vulkan命令整理成绘图任务（Task，也可以叫DrawCall）；
Raster线程：执行绘图任务。绘图任务主要工作是：...]]></description><category></category></item></channel></rss>