<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Home on Blurred code</title>
    <link>/</link>
    <description>Recent content in Home on Blurred code</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    
	<atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Nvrhi|Vulkan的VolatileConstantBuffer设计</title>
      <link>/notes/rhi/d5158078/</link>
      <pubDate>Tue, 05 May 2026 19:44:48 +0800</pubDate>
      
      <guid>/notes/rhi/d5158078/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 RenderPass n</description>
    </item>
    
    <item>
      <title>PBRT: Tagged Pointer模拟多态</title>
      <link>/2026/04/d900c760/</link>
      <pubDate>Sun, 26 Apr 2026 15:06:04 +0800</pubDate>
      
      <guid>/2026/04/d900c760/</guid>
      <description>[TOC] 必要性 在GPU Kernel上要支持虚函数有若干限制： 对象必须构造到GPU上，不能跨越host/device边界调用函数（在global/d</description>
    </item>
    
    <item>
      <title>UE | 一个错误的%格式化字符串引起的卡死</title>
      <link>/2026/04/9fd71eb9/</link>
      <pubDate>Thu, 02 Apr 2026 22:24:58 +0800</pubDate>
      
      <guid>/2026/04/9fd71eb9/</guid>
      <description>真机打包后的包，在 vivo 某台手机上频繁出现卡死无响应。 经过多次实验后，发现每次卡死前都会出现一条固定日志（在 Android 上表现为 ANR，应用失去响应）。 nativeBatteryEvent(stat</description>
    </item>
    
    <item>
      <title>UE | Vulkan_下 UE Editor 操作界面卡顿问题</title>
      <link>/2026/04/2f208232/</link>
      <pubDate>Wed, 01 Apr 2026 02:11:31 +0000</pubDate>
      
      <guid>/2026/04/2f208232/</guid>
      <description>通过-vulkan -sm5启动 每次操作界面可以肉眼注意到slate的界面出现模糊然后卡顿2s后变清晰 经过定位发现是卡在swapchain的重</description>
    </item>
    
    <item>
      <title>UE | Mobile Preview部分材质出现Create PSO失败的问题</title>
      <link>/2026/03/7f1014a7/</link>
      <pubDate>Sat, 14 Mar 2026 17:31:13 +0800</pubDate>
      
      <guid>/2026/03/7f1014a7/</guid>
      <description>[TOC] 项目里有一部分材质在切换到 Mobile Preview 后，会在进入渲染阶段时崩溃。 崩溃时日志会出现如下报错： error X8000: D3D11 Internal Compiler Error: Invalid Bytecode: Incompatible min precision type for operand #1 of opcode #233 (counts are 1-based). Expected int or uint. 要复</description>
    </item>
    
    <item>
      <title>UE | AVolume::EncompassesPoint永远失败的问题</title>
      <link>/2026/02/3adb5b11/</link>
      <pubDate>Sun, 08 Feb 2026 15:07:16 +0800</pubDate>
      
      <guid>/2026/02/3adb5b11/</guid>
      <description>EncompassesPoint always fails when called with a Navigation Mesh Bounds Volume due to the Body Instance not being valid - Development / Programming &amp;amp; Scripting - Epic Developer Community Forums 最近碰到了和这个老哥类似的问题，任何一个继承自AVolume的子类在判断Acto</description>
    </item>
    
    <item>
      <title>Mesa | 交叉编译v3dv驱动到raspberry pi5上</title>
      <link>/2026/01/6ed1e1c5/</link>
      <pubDate>Sun, 25 Jan 2026 18:58:24 +0800</pubDate>
      
      <guid>/2026/01/6ed1e1c5/</guid>
      <description>本文含有一定的AI润色 想要直接在Pi上编译v3dv也不是不行，target并不是很多，大约500多个c target，一会也就编完了。 直接编译</description>
    </item>
    
    <item>
      <title>Mobile | 集成HWCPipe(libGPUCounter)来监测性能</title>
      <link>/2025/11/9f36f844/</link>
      <pubDate>Sun, 30 Nov 2025 06:58:39 +0000</pubDate>
      
      <guid>/2025/11/9f36f844/</guid>
      <description>最近在抓移动端的数据的时候还是经常感觉到一些痛点，尤其是虚幻在移动端分析性能的工具比较欠缺，主要还是要依靠厂商提供的工具和SDK。 项目组有钱</description>
    </item>
    
    <item>
      <title>UE | 下一款Android开发机不一定是Android</title>
      <link>/2025/10/3e667544/</link>
      <pubDate>Thu, 09 Oct 2025 22:32:58 +0800</pubDate>
      
      <guid>/2025/10/3e667544/</guid>
      <description>最近看了下Epic在Unreal Fest2024和Unreal Fest2025的两篇关于移动端的workflow的介绍，又尝试了一些新的东西</description>
    </item>
    
    <item>
      <title>UE | SingleLayerWater和Translucent截断的问题</title>
      <link>/2025/08/d4c72dd2/</link>
      <pubDate>Mon, 18 Aug 2025 23:44:30 +0800</pubDate>
      
      <guid>/2025/08/d4c72dd2/</guid>
      <description>SLW or Not? 选择SLW的理由: 虚幻提供的一整套水体渲染解决方案，天然支持水上，水下以及真实感水体渲染 原生开箱即用，和water系统结合紧密 不用处理</description>
    </item>
    
    <item>
      <title>Donut | 有意思的Bent Normal</title>
      <link>/notes/rhi/f0273e37/</link>
      <pubDate>Tue, 05 Aug 2025 22:38:28 +0800</pubDate>
      
      <guid>/notes/rhi/f0273e37/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 bent normal</description>
    </item>
    
    <item>
      <title>UE | Variable Shading Rate的定制和应用</title>
      <link>/2025/06/491d0591/</link>
      <pubDate>Sun, 29 Jun 2025 14:34:27 +0800</pubDate>
      
      <guid>/2025/06/491d0591/</guid>
      <description>虚幻从5.4以后提供了完整的VRS Tier2支持，并且在Nanite的场景下额外提供了对Nanite特定优化的Software Variable Shading Rate的</description>
    </item>
    
    <item>
      <title>UE | HLOD 让部分Moveable的Actor也参与HLOD Build</title>
      <link>/2025/06/69bb9694/</link>
      <pubDate>Sat, 14 Jun 2025 21:08:47 +0800</pubDate>
      
      <guid>/2025/06/69bb9694/</guid>
      <description>这算是一个我们项目碰到的一个&amp;quot;伪&amp;quot;需求吧。有一部分Mesh在场景里可能按照Sequence K的动画的方式移动(因为涉及到</description>
    </item>
    
    <item>
      <title>UE | HLOD 绕开Landscape Build Crash</title>
      <link>/2025/06/309c585a/</link>
      <pubDate>Sat, 14 Jun 2025 21:03:13 +0800</pubDate>
      
      <guid>/2025/06/309c585a/</guid>
      <description>这是一个在5.3.2上碰到的问题，不清楚更新一点的引擎还会不会有。 Build HLOD中如果Landscape参与了Build那么可能会出现 Build</description>
    </item>
    
    <item>
      <title>UE | HLOD优化 加快Build速度</title>
      <link>/2025/06/3902fd43/</link>
      <pubDate>Fri, 13 Jun 2025 21:30:24 +0800</pubDate>
      
      <guid>/2025/06/3902fd43/</guid>
      <description>使用最后一级LOD的资源 虚幻默认HLOD Builder只提供了两个选项: 始终选择LOD0的资源 会使用一个1920x1080x45FOV 和某个</description>
    </item>
    
    <item>
      <title>UE | HLOD优化 纠正错误的效果</title>
      <link>/2025/06/49830e01/</link>
      <pubDate>Sat, 07 Jun 2025 22:05:28 +0800</pubDate>
      
      <guid>/2025/06/49830e01/</guid>
      <description>HLOD builder UE有好几套不同的合并Mesh，Baking材质的实现，Modeling Tool里有一套，UE4时期集成Simplygon有一套， HLO</description>
    </item>
    
    <item>
      <title>UE | Mobile Load 开源freedreno Vulkan驱动</title>
      <link>/2025/05/af26cfac/</link>
      <pubDate>Sun, 25 May 2025 12:04:21 +0800</pubDate>
      
      <guid>/2025/05/af26cfac/</guid>
      <description>之前看到Android上的switch模拟器有这个挺有意思的功能，就研究了一下，是否可以不使用系统的驱动，Load第三方的Vulkan驱动来</description>
    </item>
    
    <item>
      <title>UE5 | Mobile GPUScene 超过LWC Tile的Actor的显示问题</title>
      <link>/2025/04/77029615/</link>
      <pubDate>Sat, 12 Apr 2025 14:04:32 +0800</pubDate>
      
      <guid>/2025/04/77029615/</guid>
      <description>注意这个Bug和UE5.x的Mobile GPUScene的实现方案强相关，忘了是5.x改到有Bug的实现方案的，UE5.3中为了绕开Mali</description>
    </item>
    
    <item>
      <title>UE | Mobile: Mesh和Material的UV套数不匹配的问题</title>
      <link>/2025/03/bf8a3658/</link>
      <pubDate>Sat, 22 Mar 2025 14:51:16 +0800</pubDate>
      
      <guid>/2025/03/bf8a3658/</guid>
      <description>最近发现一些Mesh只有1-2套UV，如果TA错误的使用了需要3-4套UV的材质，那么在PC预览上看起来是正常的，切换到Mobile Prev</description>
    </item>
    
    <item>
      <title>UE | Mobile: Prepass Or Not?</title>
      <link>/2025/03/239ae6a3/</link>
      <pubDate>Sat, 15 Mar 2025 14:04:22 +0800</pubDate>
      
      <guid>/2025/03/239ae6a3/</guid>
      <description>首先可以看看一篇其他人写的好博客。 参考：To z-prepass or not to z-prepass – Interplay of Light 为什么对Mask材质开PrePass有性能优势 Overdraw的产生: 由于ma</description>
    </item>
    
    <item>
      <title>Mobile | 通过UAV和RTV Clear纹理的测试</title>
      <link>/2025/02/e20059a6/</link>
      <pubDate>Wed, 12 Feb 2025 02:12:58 +0000</pubDate>
      
      <guid>/2025/02/e20059a6/</guid>
      <description>Clear By UAV / RTV 高通845 XIAOMi 8 PF_RGBA8 Res UAV RTV 64x64 14us 11us 256 37 21 512 116 52 1024 443 170 2048 1698 621 4096 6.7ms 2.4ms 8192 24.9ms 10.08ms 测试代码 测试数据用Snapdragon Profiler抓出来的 void FShaderDemoModule::RandomGraphicsTest_Renderthread(FPostOpaqueRenderParameters&amp;amp;</description>
    </item>
    
    <item>
      <title>2024: 狂飙</title>
      <link>/misc/c293dd8b/</link>
      <pubDate>Tue, 31 Dec 2024 20:21:55 +0800</pubDate>
      
      <guid>/misc/c293dd8b/</guid>
      <description>又到了一年一度写总结的时候了！ 然而我下午还在艰难的调试Android Crash的问题...好在下班前修好了，真是顺顺又利利啊！ 聊聊生活 &amp;amp; 健康</description>
    </item>
    
    <item>
      <title>UE | WPO Disable Distance的使用</title>
      <link>/2024/12/af05ecba/</link>
      <pubDate>Sat, 21 Dec 2024 03:58:50 +0000</pubDate>
      
      <guid>/2024/12/af05ecba/</guid>
      <description>这个功能在5.3才被彻底在普通管线上实现，在 5.2 之前这个功能是 nanite only 的。 可以根据距离停止WPO的计算，根据 Epic 某篇文章说在堡垒之夜有非常好的性能收</description>
    </item>
    
    <item>
      <title>BRDF | 白炉测试</title>
      <link>/2024/12/4d821343/</link>
      <pubDate>Sun, 08 Dec 2024 08:39:56 +0000</pubDate>
      
      <guid>/2024/12/4d821343/</guid>
      <description>有一个很有意思的文件，bsdftest.cpp 其实这就是我一直想实现的白炉测试了。 (uniform incoming radiance: 1.0) BRDF能量守恒 \[ \int_{\Omega} f(\omega_i, \omega_o) \cos(\omega_i,n) d\omega_i Lambert BRDF 当\(\rho = 1</description>
    </item>
    
    <item>
      <title>BVH | HLBVH建树方法</title>
      <link>/2024/12/92aa5f22/</link>
      <pubDate>Sat, 07 Dec 2024 07:36:04 +0000</pubDate>
      
      <guid>/2024/12/92aa5f22/</guid>
      <description>HLBVH HLBVH为什么快: 普通BVH建树是自顶向下，必须要知道上一层的bounds大小才能继续建树。而HLBVH通过莫顿编码可以快速的划分不同P</description>
    </item>
    
    <item>
      <title>BVH | Naive和SAH建树方法</title>
      <link>/2024/11/0e73fe60/</link>
      <pubDate>Sat, 30 Nov 2024 18:41:41 +0800</pubDate>
      
      <guid>/2024/11/0e73fe60/</guid>
      <description>Naive 建树方法 二分Bounds法 每次取得BVH节点的最长轴，将其Box沿着最长轴一分为二，落在不同子节点的Primitive分别放入两个子节点中</description>
    </item>
    
    <item>
      <title>Rider在虚幻的调试技巧</title>
      <link>/2024/11/4bdaa5f3/</link>
      <pubDate>Wed, 27 Nov 2024 02:32:17 +0000</pubDate>
      
      <guid>/2024/11/4bdaa5f3/</guid>
      <description>查看全局变量 VS的语法 UnrealEditor-Core!GConfig UnrealEditor-Engine!GPlayInEditorContextString Rider的语法: {,,UnrealEditor-UnrealEd.dll}::GEditor-&amp;gt;PreviewPlatform.PreviewFeatureLevel {,,UnrealEditor-RHI.dll}::GMaxRHIFeatureLevel {,,UnrealEditor-UnrealEd.dll}::GEditor-&amp;gt;PreviewPlatform.PreviewFeatureLevel {,,UnrealEditor-Core}::PrintScriptCallstack() // 查看蓝图堆栈 {,,UnrealEditor-Engine.dll}::GPlayInEditorContextString 条件断点 FString: wcsstr((wchar_t*)MyString.Data.AllocatorInstance.Data, L&amp;quot;Search substring&amp;quot;) FName: strstr(((FNameEntry&amp;amp;)GNameBlocksDebug[MyFName.DisplayIndex.Value &amp;gt;&amp;gt; FNameDebugVisualizer::OffsetBits][FNameDebugVisualizer::EntryStride * (MyFName.DisplayIndex.Value &amp;amp; FNameDebugVisualizer::OffsetMask)]).AnsiName,&amp;quot;Searchsubstring&amp;quot;) Reference: 更详细的资料可以从这里找到，这片笔记的</description>
    </item>
    
    <item>
      <title>UE | 虚幻里浮点数的Round模式</title>
      <link>/2024/11/6565b5f8/</link>
      <pubDate>Tue, 26 Nov 2024 00:00:11 +0800</pubDate>
      
      <guid>/2024/11/6565b5f8/</guid>
      <description>IEEE 754 Floating-Point Rounding Mode (MIT/GNU Scheme 12.1) IEEE 754允许4种浮点round模式: round-to-nearest 等同于十进制下的四舍五入。 一个比较典型的特征是，在0.5的时候，会round到最近的偶</description>
    </item>
    
    <item>
      <title>Puerts | v8::InternalField 大小和UStruct的包装成本</title>
      <link>/2024/11/b3ae7426/</link>
      <pubDate>Sun, 24 Nov 2024 06:05:08 +0000</pubDate>
      
      <guid>/2024/11/b3ae7426/</guid>
      <description>SMI v8要求存入的void*必须按2字节对齐，也就是最后一位必须是0 很容易想到这个是v8压缩指针要求。 进去看一下 void v8::Object::SetAlignedPointerInInternalField(int index, void* value) { auto obj = Utils::OpenDirectHandle(this); const char* location = &amp;quot;v8::Object::SetAlignedPointerInInternalField()&amp;quot;;</description>
    </item>
    
    <item>
      <title>KDE_Wayland_Nvidia登陆后黑屏的问题</title>
      <link>/2024/11/d02b0f52/</link>
      <pubDate>Sun, 03 Nov 2024 21:39:42 +0800</pubDate>
      
      <guid>/2024/11/d02b0f52/</guid>
      <description>这两天重新装了Manjaro KDE作为桌面。因为双显示器的缩放问题(x11只能设置全局缩放不能设置per monitor缩放)只能用wayla</description>
    </item>
    
    <item>
      <title>UE | 解决Rider在Unreal Android配置下大片飘红的问题</title>
      <link>/2024/09/8739b0fb/</link>
      <pubDate>Sun, 15 Sep 2024 20:35:43 +0800</pubDate>
      
      <guid>/2024/09/8739b0fb/</guid>
      <description>Rider打开Unreal Android 大片爆红 Rider在平时开发虚幻的时候很好用，但是一旦用来开发和调试Android平台的虚幻代码时，就会出现大片</description>
    </item>
    
    <item>
      <title>UE | UnrealInsights 截图采用Jpg数据</title>
      <link>/2024/09/e1141481/</link>
      <pubDate>Sun, 15 Sep 2024 12:54:54 +0800</pubDate>
      
      <guid>/2024/09/e1141481/</guid>
      <description>背景: 我们在录制Unreal Insights时为了方便查看性能热点时候正在做什么，开了一个后台线程在定时截屏并传输数据给insights存储</description>
    </item>
    
    <item>
      <title>Mesa | u_vector的实现</title>
      <link>/2024/09/07cd164d/</link>
      <pubDate>Wed, 11 Sep 2024 00:05:57 +0800</pubDate>
      
      <guid>/2024/09/07cd164d/</guid>
      <description>可以看u_vector.c里的注释: * A dynamically growable, circular buffer. Elements are added at head and * removed from tail. head and tail are free-running uint32_t indices and we * only compute the modulo with size when accessing the array. This way, * number of bytes in the queue is always head - tail, even in</description>
    </item>
    
    <item>
      <title>Mesa | VK_EXT_PRIVATE_DATA的实现</title>
      <link>/2024/09/7cf58aab/</link>
      <pubDate>Mon, 02 Sep 2024 20:54:33 +0800</pubDate>
      
      <guid>/2024/09/7cf58aab/</guid>
      <description>这个扩展允许在任意的VK_OBJECT上绑定若干个8字节的数据。 主要用法是: 通过vkCreatePrivateDataSlotEXT创建一个</description>
    </item>
    
    <item>
      <title>UE5 | ChildActorComponent Transient Child在PIE下消失的问题</title>
      <link>/2024/08/e488f1cb/</link>
      <pubDate>Thu, 15 Aug 2024 22:49:58 +0800</pubDate>
      
      <guid>/2024/08/e488f1cb/</guid>
      <description>To be Transient or Not To be? /** * Should the spawned actor be marked as transient? * @note The spawned actor will also be marked transient if this component or its owner actor are transient, regardless of the state of this flag. */ UPROPERTY(EditDefaultsOnly, Category=ChildActorComponent) uint8 bChildActorIsTransient:1; 这个Flag主要作用是给Spawn出来的Ch</description>
    </item>
    
    <item>
      <title>UE Panner节点移动端Half精度问题</title>
      <link>/2024/08/3ffbfa69/</link>
      <pubDate>Sun, 11 Aug 2024 19:31:32 +0800</pubDate>
      
      <guid>/2024/08/3ffbfa69/</guid>
      <description>Panner节点主要是用于实现材质中纹理的平滑滚动的效果，可以用在水花等地方。 最近发现在移动端上，随着时间的推移，用了该节点的材质会滚动得越</description>
    </item>
    
    <item>
      <title>UE5 | 一个Mobile小于4x4的法线贴图采样错误的问题</title>
      <link>/2024/07/59e1920f/</link>
      <pubDate>Fri, 05 Jul 2024 23:44:10 +0800</pubDate>
      
      <guid>/2024/07/59e1920f/</guid>
      <description>最近注意到在移动端上Build出来的HLOD看上去光照不太对，明显感觉法线出了点问题。但是在PIE和PC包里看上去都没问题。 把Android</description>
    </item>
    
    <item>
      <title>使用FWeakObjectPtr安全判断UObject失效</title>
      <link>/2024/06/a57858d2/</link>
      <pubDate>Sat, 29 Jun 2024 13:00:20 +0800</pubDate>
      
      <guid>/2024/06/a57858d2/</guid>
      <description>最近碰到一个比较奇葩的问题，就是渲染线程里绑定材质Material Uniform的地方居然保存了UTexture*的裸指针。 具体可以见 Engine\Source\Runtime\Engine\Private\Materials\MaterialInstanceSupport.h 然后</description>
    </item>
    
    <item>
      <title>Unreal Including IndirectDraw Primitives In Stats(DirectX12 Only)</title>
      <link>/2024/06/aeefcfc1/</link>
      <pubDate>Mon, 17 Jun 2024 23:12:00 +0800</pubDate>
      
      <guid>/2024/06/aeefcfc1/</guid>
      <description>Stat Unit / Stat RHI IndirectDraw is widely used in Unreal (especially on Desktop Deferred Renderer). It&#39;s a common practice to use IndirectDraw to draw a large number of objects with a single draw call, with GPU Culling on GPUScene. With GPUScene enabled, HISM and ISM and landscape will be drawn with IndirectDraw. However, the instances drawn with IndirectDraw are decided by Compute Shader, the result is stored in a</description>
    </item>
    
    <item>
      <title>UE | 移动端谨慎使用Occlusion/Timer Query</title>
      <link>/2024/04/42bea8b2/</link>
      <pubDate>Sat, 27 Apr 2024 15:29:06 +0800</pubDate>
      
      <guid>/2024/04/42bea8b2/</guid>
      <description>最近在项目里连续遇到了几个关于Query的问题，这里记录一下.. Occlusion Query Hardware Occlusion Query在桌面端是一个很可靠的功能， GPU Gems里有好几篇文章都介绍</description>
    </item>
    
    <item>
      <title>UE5: Strange Magenta Pixels Sampled in ASTC6x6 On Android</title>
      <link>/2024/04/ea7c59b3/</link>
      <pubDate>Thu, 25 Apr 2024 23:52:24 +0800</pubDate>
      
      <guid>/2024/04/ea7c59b3/</guid>
      <description>Recently I noticed that some strange magenta pixels (1,0,1,1) appeared on objects in Android Packages. After a quick investigation through Renderdoc, I noticed some textures compressed in ASTC6x6 format have there mipmaps lower than 4x4 filled with magenta pixels. I&#39;m not sure which way is correct to handle the 4x4 mipmaps and lower for ASTC6x6. These small mipmaps should probably be filled with the correct down-sampled pixels (but still take</description>
    </item>
    
    <item>
      <title>一个有意思的UE SwitchParam Dynamic Branch 导致驱动崩溃/渲染错误问题</title>
      <link>/2024/04/79b3d5d0/</link>
      <pubDate>Thu, 25 Apr 2024 00:10:18 +0800</pubDate>
      
      <guid>/2024/04/79b3d5d0/</guid>
      <description>UE在5.2(也许5.3)推出的一个功能，将材质里的SwitchParam变成了Dynamic Branch(但是不支持动态修改，只允许在MI</description>
    </item>
    
    <item>
      <title>Puerts | 利用V8机制进行并行GC</title>
      <link>/2024/04/f1685bcf/</link>
      <pubDate>Sat, 13 Apr 2024 16:18:20 +0800</pubDate>
      
      <guid>/2024/04/f1685bcf/</guid>
      <description>这里讨论的东西其实是利用v8的机制，所以理论上nodejs的也能用上。 Finalizer的性能问题和可靠性问题 在用脚本语言和宿主语言交互的时</description>
    </item>
    
    <item>
      <title>UE半精度下SpirV-Cross生成了错误的Metal Shader</title>
      <link>/2024/04/a86c2360/</link>
      <pubDate>Sat, 13 Apr 2024 14:55:20 +0800</pubDate>
      
      <guid>/2024/04/a86c2360/</guid>
      <description>UE5 Metal后端打开半精度Shader编译支持 虚幻默认在IOS上是禁用半精度的，但是实际上手机上需要这个功能。 禁用的地方在于 BaseEngi</description>
    </item>
    
    <item>
      <title>UE调试Shader编译失败的问题</title>
      <link>/2024/03/04dbd0cf/</link>
      <pubDate>Sat, 30 Mar 2024 00:20:49 +0800</pubDate>
      
      <guid>/2024/03/04dbd0cf/</guid>
      <description>最近碰到了打包UE的时候碰见了编译Spir-v Shader的时候，DXC直接抛Internal Error然后导致ShaderCompileW</description>
    </item>
    
    <item>
      <title>Shader Generation for Binning Pass</title>
      <link>/2024/03/cc00bf0c/</link>
      <pubDate>Thu, 21 Mar 2024 21:53:02 +0800</pubDate>
      
      <guid>/2024/03/cc00bf0c/</guid>
      <description>What is Binning Pass? Reference: Tile-based rendering Binning Pass is a special vertex pass which marks which bin a triangle visible belongs to. It&#39;s a common tech widely used in Mobile GPU to reduce the amount of fragment shader invocations. How is Binning Pass implemented? I&#39;ve been curious about it for a long time, especially when I ran into a performance issue(Snapdragon Profiler will show how long Binning Pass is)</description>
    </item>
    
    <item>
      <title>UE 谨慎使用SetCollisionProfileName和SetCollisionEnabled</title>
      <link>/2024/02/3303b9f3/</link>
      <pubDate>Sun, 18 Feb 2024 22:28:57 +0800</pubDate>
      
      <guid>/2024/02/3303b9f3/</guid>
      <description>我的一个测试工程里有个测试场景是大批量的调整Component的碰撞属性，用了SetCollisionProfileName和SetColl</description>
    </item>
    
    <item>
      <title>一个JS的class fields导致在v8 9.4(nodejs 16)上的性能退化的问题</title>
      <link>/2024/02/ca4cc3e1/</link>
      <pubDate>Sat, 10 Feb 2024 15:32:34 +0800</pubDate>
      
      <guid>/2024/02/ca4cc3e1/</guid>
      <description>最近仍然在做一些关于v8的性能测试，用到的v8的版本是9.4，对应nodejs的16版本。 在测试以下代码的时候发现一个有意思的性能问题。 class Point</description>
    </item>
    
    <item>
      <title>Nvrhi | Push Constant的处理</title>
      <link>/notes/rhi/b152921e/</link>
      <pubDate>Thu, 18 Jan 2024 22:41:41 +0800</pubDate>
      
      <guid>/notes/rhi/b152921e/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 Push Constant</description>
    </item>
    
    <item>
      <title>Halton序列和Faure_Permutations</title>
      <link>/2024/01/0f112f8b/</link>
      <pubDate>Wed, 17 Jan 2024 23:40:49 +0800</pubDate>
      
      <guid>/2024/01/0f112f8b/</guid>
      <description>.notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Note 文章内图片来自参考资料1的课件。 从N维空间任取一块空间， 这块空间和整体空间的比值 [0,1] 落在这块空间里的点和所有</description>
    </item>
    
    <item>
      <title>一个RenderDoc调试VK_KHR_synchronization2崩溃的问题</title>
      <link>/2024/01/e7923477/</link>
      <pubDate>Sun, 14 Jan 2024 17:13:38 +0800</pubDate>
      
      <guid>/2024/01/e7923477/</guid>
      <description>把有问题的RDC File放在这里 https://drive.google.com/file/d/1XCYulZg0esli__yX0cRjsvjCKrAeMpJo/view?usp=sharing 这两天在研究KHR Sync2的barrier写法，并且尝试从Core的vkCmdPipelineBarri</description>
    </item>
    
    <item>
      <title>我的2023: Unreal的一年</title>
      <link>/misc/3e54c858/</link>
      <pubDate>Sat, 30 Dec 2023 13:52:57 +0800</pubDate>
      
      <guid>/misc/3e54c858/</guid>
      <description>在2022的灰色基调后面，今年总算是多了一点鲜艳的颜色。 今年最大的改变也许是口罩令终于结束了。我在2022年12月的上半旬随着口罩令的解除也</description>
    </item>
    
    <item>
      <title>Puerts 编译带调试符号的debug版v8</title>
      <link>/2023/12/964342de/</link>
      <pubDate>Sat, 23 Dec 2023 15:18:42 +0800</pubDate>
      
      <guid>/2023/12/964342de/</guid>
      <description>最近一段时间一直在和PuerTs打交道，有的时候碰见问题想跟到v8里看一下v8的具体实现细节。 Puerts的官方提供编译好的二进制，开箱即用</description>
    </item>
    
    <item>
      <title>UE Cull Distance Volume 杂记</title>
      <link>/2023/12/547b212a/</link>
      <pubDate>Sun, 03 Dec 2023 23:41:57 +0800</pubDate>
      
      <guid>/2023/12/547b212a/</guid>
      <description>UE的距离剔除不是默认打开的，需要在场景里摆一个Cull Distance Volume打开才生效。 参考：Cull Distance Volume | Unreal Engine 4.27 Documentation 官方文档写的还算详细，补充几点</description>
    </item>
    
    <item>
      <title>Nvrhi的RefCounter和侵入式计数</title>
      <link>/notes/rhi/e7f14935/</link>
      <pubDate>Sat, 04 Nov 2023 17:12:30 +0800</pubDate>
      
      <guid>/notes/rhi/e7f14935/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 RefCountPtr 介</description>
    </item>
    
    <item>
      <title>Donut virtual filesystem的设计</title>
      <link>/notes/rhi/0385ff99/</link>
      <pubDate>Sat, 04 Nov 2023 17:08:17 +0800</pubDate>
      
      <guid>/notes/rhi/0385ff99/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 do</description>
    </item>
    
    <item>
      <title>UE 降低编译线程数</title>
      <link>/2023/11/36d363d7/</link>
      <pubDate>Fri, 03 Nov 2023 23:28:08 +0800</pubDate>
      
      <guid>/2023/11/36d363d7/</guid>
      <description>简单做个备忘。 与在公司不同，在家编译UE的时候通常会一边干其他事情一边等编译。 如果虚幻把所有线程都占满就没法干其他事情了(刷B站或者看其他代</description>
    </item>
    
    <item>
      <title>用Unreal Insights 查看UE Cooking过程</title>
      <link>/2023/10/85fda58f/</link>
      <pubDate>Fri, 20 Oct 2023 21:16:51 +0800</pubDate>
      
      <guid>/2023/10/85fda58f/</guid>
      <description>Cooking Profiling可以用来查打包过程中Cooking打包过程为什么慢的问题。 可以用Unreal Insights来看。 官方虽然有一个文档，但</description>
    </item>
    
    <item>
      <title>UE的Allocator以及StompAllocator的实现</title>
      <link>/2023/10/d7a3cb82/</link>
      <pubDate>Fri, 06 Oct 2023 23:50:30 +0800</pubDate>
      
      <guid>/2023/10/d7a3cb82/</guid>
      <description>虚幻默认带有好几种不同的Allocator实现，用来实现不同的malloc/free策略。有一些调试用的Allocator可以用来查内存相关</description>
    </item>
    
    <item>
      <title>UE InstancedStaticMeshComponent 备忘</title>
      <link>/notes/a17e09fb/</link>
      <pubDate>Sat, 16 Sep 2023 00:01:36 +0800</pubDate>
      
      <guid>/notes/a17e09fb/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px</description>
    </item>
    
    <item>
      <title>在博客里贴UE蓝图的一个示例</title>
      <link>/2023/09/271fd62d/</link>
      <pubDate>Wed, 13 Sep 2023 22:32:19 +0800</pubDate>
      
      <guid>/2023/09/271fd62d/</guid>
      <description>折腾了一下在网页端渲染蓝图，主要是有的时候可能会贴点代码。 蓝图直接复制，编辑器会帮忙格式化成文本形式表示。 一个有趣的事实是编辑器里复制一个节</description>
    </item>
    
    <item>
      <title>Unreal Loads Packages Slowly On Actor Deletion</title>
      <link>/2023/08/692f9003/</link>
      <pubDate>Fri, 04 Aug 2023 23:37:06 +0800</pubDate>
      
      <guid>/2023/08/692f9003/</guid>
      <description>Recently, I&#39;ve been annoyed by a long loading when deleting actors in an active level. It happens only in studio project with a fairly large amount of assets. The behavior is weird: when creating a new template level, then trying to delete an actor from this level, unreal strangely begins to calculate references, and a lot of packages are loaded, taking about 20 seconds. This happens the first time an</description>
    </item>
    
    <item>
      <title>Deploy A Local SVN Repo For Unreal Source Control</title>
      <link>/2023/08/4cec92aa/</link>
      <pubDate>Wed, 02 Aug 2023 23:06:12 +0800</pubDate>
      
      <guid>/2023/08/4cec92aa/</guid>
      <description>Perforce is the first class source control system for Unreal Engine, Epic itself, along with many other game studios, including my current studio, are using it. Epic develops an excellent tool to work with Perforce UnrealGameSync. Although perforce is the best choice for Unreal Engine, it&#39;s not free, and it&#39;s not easy to setup a local perforce server for personal use. It&#39;s common for developers, and also artists, to create</description>
    </item>
    
    <item>
      <title>CMake Snippets</title>
      <link>/notes/utils/ae3cb50c/</link>
      <pubDate>Fri, 28 Jul 2023 05:05:12 +0000</pubDate>
      
      <guid>/notes/utils/ae3cb50c/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 跨平</description>
    </item>
    
    <item>
      <title>D3D11_Filter 枚举组装</title>
      <link>/2023/07/203e2ba7/</link>
      <pubDate>Mon, 24 Jul 2023 00:56:12 +0800</pubDate>
      
      <guid>/2023/07/203e2ba7/</guid>
      <description>今天才注意到D3D11_FILTER的枚举的数字是由构造的规律的，头文件还提供了方便的构造宏。这里速记一下以备忘。 DX11的Sampler F</description>
    </item>
    
    <item>
      <title>Fix DirectX Graphics Tools On Win10 Failed To Install</title>
      <link>/2023/07/190d19e2/</link>
      <pubDate>Wed, 12 Jul 2023 22:43:08 +0800</pubDate>
      
      <guid>/2023/07/190d19e2/</guid>
      <description>中文关键词: 修复DirectX图形工具无法安装的问题 Graphics Tool Graphics Tool is one of the essential components of Graphics Programming on Windows. During the installation of Visual Studio, the installer tries to automatically install Graphics Tool, but things are not always going well. In complicated network environment, such as in a</description>
    </item>
    
    <item>
      <title>限定长度的vector容器实现</title>
      <link>/2023/06/676d5850/</link>
      <pubDate>Mon, 26 Jun 2023 23:03:43 +0800</pubDate>
      
      <guid>/2023/06/676d5850/</guid>
      <description>标准库一直缺少限定上限的vector实现，但是在实际一些场景里也还是有用的。 比如在图形API里，一些API能够绑定的数量是有上限的。 比如DX</description>
    </item>
    
    <item>
      <title>Generate Renderdoc Python-API Stubs</title>
      <link>/2023/06/b12cd5f8/</link>
      <pubDate>Sat, 17 Jun 2023 00:58:00 +0800</pubDate>
      
      <guid>/2023/06/b12cd5f8/</guid>
      <description>Which Mode? Renderdoc has a friendly Python API for writing custom scripts. It allows both modes: QRenderDoc is the host, scripts are embeded. Scripts runs in its UI Python Shell Python Interpreter is the host, Renderdoc is library. In this case, scripts can freely use third-party libraries, and writes just like a normal Python script. With custom Python scripts, developers have free access to all the data stored in a</description>
    </item>
    
    <item>
      <title>禁止Hugo的goldmark后端转义英文引号为&amp;rsquo</title>
      <link>/2023/06/02dd9af9/</link>
      <pubDate>Thu, 15 Jun 2023 20:29:56 +0800</pubDate>
      
      <guid>/2023/06/02dd9af9/</guid>
      <description>根据主题的不同，我有时候会使用英文写作博客。 平时由于字体的原因，我还没注意到hugo的会把markdown中的&#39;转义为&amp;amp;rsquo。</description>
    </item>
    
    <item>
      <title>Build Mesa3D on MinGW64 in 2023</title>
      <link>/2023/06/4c4e845f/</link>
      <pubDate>Tue, 13 Jun 2023 22:44:53 +0800</pubDate>
      
      <guid>/2023/06/4c4e845f/</guid>
      <description>Background It&#39;s been a long time since I wrote the first line of OpenGL code. However, I&#39;ve never read the implementation or debugging in driver. Mesa3D is a hodgepodge of Open Source driver implementation, and is widely used on Linux Desktop. It&#39;s a good place to start. For Linux Users I miss my old golden days of working on Linux Desktops. It&#39;s trivial to compile it on Linux, just follow</description>
    </item>
    
    <item>
      <title>UE Programmatically Modifying Material Nodes</title>
      <link>/2023/06/64b1b73b/</link>
      <pubDate>Sun, 11 Jun 2023 12:56:00 +0800</pubDate>
      
      <guid>/2023/06/64b1b73b/</guid>
      <description>Note: I&#39;ve tested the code on UE5 as well. There are some minor API changes, but the logic still applies. Introduction Recently, I&#39;ve a need to create a fairly complicated material in a programmatically way. Even if the desired material is created by Tech-Artists, I need to modify some nodes in it automatically. After some searching, there is already a great article about Adding nodes to material, see Re</description>
    </item>
    
    <item>
      <title>Nvrhi | ShaderTool</title>
      <link>/notes/rhi/6e6d9502/</link>
      <pubDate>Mon, 29 May 2023 22:59:53 +0800</pubDate>
      
      <guid>/notes/rhi/6e6d9502/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 ShaderBlob is</description>
    </item>
    
    <item>
      <title>alianas/alignof/#pragma pack的一点测试</title>
      <link>/2023/05/9da9c22d/</link>
      <pubDate>Mon, 22 May 2023 00:08:05 +0800</pubDate>
      
      <guid>/2023/05/9da9c22d/</guid>
      <description>pragma pack 在x64下其对齐标准为 struct Test { char a; // offset 0 int b; // offset 4 char c; // offset 8 double d; // offset 16 }; sizeof(Test) == 24; #pragma pack 主要控制类内元素间的对齐。 这是个非标语法，但是主流的编译</description>
    </item>
    
    <item>
      <title>Quick Reference About Asset Name/Path in UE</title>
      <link>/2023/05/7a83b54b/</link>
      <pubDate>Sat, 20 May 2023 11:41:47 +0800</pubDate>
      
      <guid>/2023/05/7a83b54b/</guid>
      <description>There are tons of different functions that return AssetName/AssetPath/PackagePath/PackageName, but there are subtle differences in the strings returned by different APIs. What&#39;s worse, there are also many different APIs for manipulating assets that accept randomly formatted path strings. Some of them accept Virtual Path defined by UE, while others may accept System Path. I&#39;m tired of using Go to Definition to check what format an API needs. So I made</description>
    </item>
    
    <item>
      <title>关于x86下的几种调用约定的一点测试</title>
      <link>/2023/04/3648c0f9/</link>
      <pubDate>Sun, 16 Apr 2023 23:44:20 +0800</pubDate>
      
      <guid>/2023/04/3648c0f9/</guid>
      <description>写了个简单的例子来测试 _cdecl,_stdcall,_fastcall的区别，见https://godbolt.org/z/ao9v3Tj</description>
    </item>
    
    <item>
      <title>UE4 Compilation Process Affinity with Intel 12th Gen CPU on Windows 10</title>
      <link>/2023/04/bc4cbce3/</link>
      <pubDate>Thu, 13 Apr 2023 23:58:44 +0800</pubDate>
      
      <guid>/2023/04/bc4cbce3/</guid>
      <description>Slow Compilation Today, I&#39;ve compiled a UE 4.26 release on an Intel i7 12700 CPU (a heterogeneous archtecture with 8-Cores and 4 E-cores ) running the latest Win10 22H2 system. However, the compilation was noticeably slower than on an older AMD CPU. With the task manager, I observed my cpu utilization was between 30% and 50% and it appeared all compilers were running on the E-Cores. After some research, I</description>
    </item>
    
    <item>
      <title>Why glClipControl is crucial for reverse-Z implementation in OpenGL</title>
      <link>/2023/03/9f52e5cc/</link>
      <pubDate>Wed, 22 Mar 2023 20:00:13 +0800</pubDate>
      
      <guid>/2023/03/9f52e5cc/</guid>
      <description>Reverse-Z is a widely used technique for optimizing depth buffer precision in modern video games. If you are looking for a detailed tutorial on how to implement Reverse-Z in OpenGL, Blog reversed-z-in-opengl is an excellent starting point. In short, the process involves several steps, including: Use glClipControl to adjust z-range in NDC from [-1,1] to [0,1] Adjust Project Matrix to project far plane on 0 and near plane on 1</description>
    </item>
    
    <item>
      <title>Discover Unreal Engine APIs Offline with Zeal</title>
      <link>/2023/03/d009f04a/</link>
      <pubDate>Sat, 11 Mar 2023 20:26:44 +0800</pubDate>
      
      <guid>/2023/03/d009f04a/</guid>
      <description>For days I have been using an offline documentation browser named zealdocs/zeal to search for and browse the APIs I need while programming. Zeal is an open-source offline documentation, which is compatible with the popular MacOS-Only paied documentation tool named Dash. Zeal offers several open-box documentations, including CPP and Lua documentation. Unfortunately, there is no official UE documentation availbale from Epic Games or Zeal. Some developpers have taken it upon</description>
    </item>
    
    <item>
      <title>Rendering Plane Reflected Objects</title>
      <link>/2023/03/c193add0/</link>
      <pubDate>Sat, 11 Mar 2023 00:51:05 +0800</pubDate>
      
      <guid>/2023/03/c193add0/</guid>
      <description>One approach to implementing a plane mirror is to render objects twice: once in their original positions, and again as a mirror reflection. Reflected matrix with a given plane DirectX offers a convenient function XMMatrixReflect for reflecting objects. The function takes normalized Point-Normal form of plane as an argument, which is \( ax + by + cz + d = 0, \vec{n} = \{a,b,c\}\). It then returns a matrix can</description>
    </item>
    
    <item>
      <title>脆弱的2022底: 派遣，裁员与逃离</title>
      <link>/misc/5664e986/</link>
      <pubDate>Thu, 19 Jan 2023 21:54:06 +0800</pubDate>
      
      <guid>/misc/5664e986/</guid>
      <description>续着谈谈我的2022 | Blurred code文章继续写吧。 本来在做年终总结的时候想着不要写很多负面的东西，也就没有写一些坏的事情。 结果到了1月初接连发生</description>
    </item>
    
    <item>
      <title>Monkey语言 | 3. 字节码与栈式VM</title>
      <link>/notes/monkey/56b5a9fd/</link>
      <pubDate>Sat, 07 Jan 2023 17:05:30 +0800</pubDate>
      
      <guid>/notes/monkey/56b5a9fd/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 结构</description>
    </item>
    
    <item>
      <title>谈谈我的2022</title>
      <link>/misc/81827c32/</link>
      <pubDate>Thu, 22 Dec 2022 12:32:03 +0800</pubDate>
      
      <guid>/misc/81827c32/</guid>
      <description>先插一个今年最喜欢的BGM(也许也是去年最喜欢的)，来自一个R18游戏 Succubus Academia。 这篇博客接着硕士三年的Github继续写吧。 今年发</description>
    </item>
    
    <item>
      <title>Talking about Hitches in UE4 LoadingScreen</title>
      <link>/2022/12/6ec75576/</link>
      <pubDate>Sat, 10 Dec 2022 23:45:16 +0800</pubDate>
      
      <guid>/2022/12/6ec75576/</guid>
      <description>中文版: 谈谈UE4 LoadingScreen卡顿问题 This blog is just some casual thoughts around one problem I&#39;ve met. I believe there are ways to solve it, However I&#39;ve yet found. Background Loading Screen is an common component of games, preventing users from getting bored by wait game loading. Unreal provides</description>
    </item>
    
    <item>
      <title>UE4 Hide Stats Rendering</title>
      <link>/2022/11/3408630c/</link>
      <pubDate>Mon, 28 Nov 2022 23:09:05 +0800</pubDate>
      
      <guid>/2022/11/3408630c/</guid>
      <description>中文版: UE4 隐藏统计数据Stats渲染 Recently there was a need for hide UE4 stats rendering. When stats are enabled, the stats data are collected and meanwhile tables are rendering into viewport canvas. The need is to collect stats data background without rendering them on the canvas, which obscures other primitives. Using stats none or other similar methods</description>
    </item>
    
    <item>
      <title>UE4 Get Binary Build Timestamp</title>
      <link>/2022/11/6b21234f/</link>
      <pubDate>Sun, 27 Nov 2022 14:25:37 +0800</pubDate>
      
      <guid>/2022/11/6b21234f/</guid>
      <description>中文版: UE4获取二进制编译时间戳Recently, we need a string representation of timestamps to tag the built UE4 game binary. To test random topics I package game about ~10 versions a day, and we need a string tag to distinguish different versions.
The expected string is v20220101T235959, which in UE format is v%Y%m%dT%H%M%S.
Get Compile Time Timestamp The trick is that we must record the BuiltTime in somewhere when compilers are doing their work.</description>
    </item>
    
    <item>
      <title>UE4生成zip压缩文件</title>
      <link>/2022/11/b7ea1d63/</link>
      <pubDate>Sun, 20 Nov 2022 16:39:41 +0800</pubDate>
      
      <guid>/2022/11/b7ea1d63/</guid>
      <description>最近有用UE生成zip文件的需求。 FZipArchiveWriter UE提供一个非常简单的RAII风格的ZIP类FZipArchiveWriter，只有三个API（Engi</description>
    </item>
    
    <item>
      <title>HBAO的Unity实现杂记</title>
      <link>/2022/10/e9d23ec7/</link>
      <pubDate>Sat, 15 Oct 2022 22:13:09 +0800</pubDate>
      
      <guid>/2022/10/e9d23ec7/</guid>
      <description>HBAO实现杂记 主要参考原始的Image-Space Horizon-Based Ambient Occlusion.pdf。 主要思想是以在半圆内朝着不同的方向步进，步进的方向越崎岖</description>
    </item>
    
    <item>
      <title>Monkey语言 | 2.evaluator</title>
      <link>/notes/monkey/e6a47ab4/</link>
      <pubDate>Mon, 26 Sep 2022 00:09:52 +0800</pubDate>
      
      <guid>/notes/monkey/e6a47ab4/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 树遍</description>
    </item>
    
    <item>
      <title>Monkey语言 | 1. Lexer &amp; Parser</title>
      <link>/notes/monkey/85f52114/</link>
      <pubDate>Wed, 14 Sep 2022 21:52:05 +0800</pubDate>
      
      <guid>/notes/monkey/85f52114/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 最近</description>
    </item>
    
    <item>
      <title>浮点数有效位数</title>
      <link>/2022/08/79b6a364/</link>
      <pubDate>Tue, 30 Aug 2022 00:48:13 +0800</pubDate>
      
      <guid>/2022/08/79b6a364/</guid>
      <description>十进制下的有效位数定义 以科学计数法记录， 十进制下， \( 1.23456 \times 10^3 \) 的有效数字为6位。 如果一个变量x的范围为[0,123456],那么这个变量x的有</description>
    </item>
    
    <item>
      <title>Bind的简单实现剖析</title>
      <link>/2022/08/402a1cee/</link>
      <pubDate>Mon, 22 Aug 2022 00:20:21 +0800</pubDate>
      
      <guid>/2022/08/402a1cee/</guid>
      <description>本来想剖析下UE的Delegate的实现，想到一直想看下bind的实现就干脆看看bind的。 翻了下EASTL，发现其拒绝实现bind，因为l</description>
    </item>
    
    <item>
      <title>C&#43;&#43;的MemoryOrder以及Fence</title>
      <link>/2022/08/21e0de5a/</link>
      <pubDate>Tue, 16 Aug 2022 01:28:02 +0800</pubDate>
      
      <guid>/2022/08/21e0de5a/</guid>
      <description>Memory Order 借Wiki的定义， Memory ordering describes the order of accesses to computer memory by a CPU. The term can refer either to the memory ordering generated by the compiler during compile time, or to the memory ordering generated by a CPU during runtime. 内存顺序可以指编译器乱序或者运行期乱序</description>
    </item>
    
    <item>
      <title>从NDC到View Space坐标推导</title>
      <link>/2022/08/b46b0bd8/</link>
      <pubDate>Mon, 15 Aug 2022 00:01:28 +0800</pubDate>
      
      <guid>/2022/08/b46b0bd8/</guid>
      <description>从NDC到ViewSpace/WorldSpace的方式有好几种。 利用Project_Inv到ViewSpace，然后再用View_Inv到</description>
    </item>
    
    <item>
      <title>UE4的临界区</title>
      <link>/2022/07/158130ce/</link>
      <pubDate>Wed, 27 Jul 2022 01:08:41 +0800</pubDate>
      
      <guid>/2022/07/158130ce/</guid>
      <description>由于UE是多线程渲染结构，所以在主线程更新某个参数，而渲染线程需要某个参数的时候，往往需要加锁。 其实C++在C++11以后提供了统一的锁结构</description>
    </item>
    
    <item>
      <title>TSubclassOf的作用与实现</title>
      <link>/2022/07/48413275/</link>
      <pubDate>Thu, 21 Jul 2022 00:49:10 +0800</pubDate>
      
      <guid>/2022/07/48413275/</guid>
      <description>TSubclassOf的作用 UE官方文档里描述了一个通过TSubclassOf在蓝图里限制下拉框选取范围的例子，不过感觉也不是讲的很清楚。 U</description>
    </item>
    
    <item>
      <title>UE4中的断言</title>
      <link>/2022/07/1e49fb86/</link>
      <pubDate>Sun, 17 Jul 2022 15:15:59 +0800</pubDate>
      
      <guid>/2022/07/1e49fb86/</guid>
      <description>编译flags 从Engine\Source\Runtime\Core\Public\Misc\Build.h中定义了一系列的编译宏(这些宏的</description>
    </item>
    
    <item>
      <title>分析enable_shared_from_this</title>
      <link>/2022/07/b1767390/</link>
      <pubDate>Thu, 14 Jul 2022 01:13:26 +0800</pubDate>
      
      <guid>/2022/07/b1767390/</guid>
      <description>std::shared_ptr在以下情况下会触发未定义行为(double free) //错误用法 struct A { std::shared_ptr&amp;lt;A&amp;gt; GetSharedPtr() { return std::make_shared&amp;lt;A&amp;gt;(); } } std::shared_ptr&amp;lt;A&amp;gt; ptr1= std::make_shared&amp;lt;A&amp;gt;(); ptr2 = ptr1-&amp;gt;GetSharedPtr(); //ptr2 and ptr1 will both free the object 由于s</description>
    </item>
    
    <item>
      <title>硕士三年的Github</title>
      <link>/misc/50954ba8/</link>
      <pubDate>Mon, 30 May 2022 22:03:54 +0800</pubDate>
      
      <guid>/misc/50954ba8/</guid>
      <description>终于毕业了，一直想根据github理一下，从本科到硕士期间每个阶段在学习些什么在做些什么。 2015 - 2018 github基本全黑，处于未入门的阶段。这段</description>
    </item>
    
    <item>
      <title>顺序无关半透明物体渲染OIT</title>
      <link>/2022/05/4c17b61d/</link>
      <pubDate>Sat, 07 May 2022 23:54:19 +0800</pubDate>
      
      <guid>/2022/05/4c17b61d/</guid>
      <description>半透明物体和深度 正确绘制半透明物体渲染需要技巧。 一种顺序相关的渲染方式是 渲染所有不透明物体 关闭深度写入 排序所有透明物体 从后到前渲染透明物体 打</description>
    </item>
    
    <item>
      <title>Unity TAA实现杂记(附录带开箱即用代码)</title>
      <link>/2022/05/9f1444db/</link>
      <pubDate>Fri, 06 May 2022 18:21:10 +0800</pubDate>
      
      <guid>/2022/05/9f1444db/</guid>
      <description>TAA 主要理论参考资料可以参考Inside的分享GDC Vault - Temporal Reprojection Anti-Aliasing in INSIDE，主要实现代码可以参考Unity的Post Processing v2的实现，相较于In</description>
    </item>
    
    <item>
      <title>根据文字显示乱码猜测当前编码</title>
      <link>/2022/04/7210c1a5/</link>
      <pubDate>Thu, 14 Apr 2022 00:58:13 +0800</pubDate>
      
      <guid>/2022/04/7210c1a5/</guid>
      <description>用UTF-8编码的这句话来测试。这个字符串包含emoji，emoji部分无法被编码到gbk,big5等ANSI编码。 这是编码测试fontTe</description>
    </item>
    
    <item>
      <title>MSVC调试器显示UTF 8中文字符串</title>
      <link>/2022/04/8a85b633/</link>
      <pubDate>Tue, 12 Apr 2022 22:16:17 +0800</pubDate>
      
      <guid>/2022/04/8a85b633/</guid>
      <description>C++20以前没有std::u8string，虽然msvc有一个扩展(/Zc:char8_t-)可以用，但是最好别碰(https://doc</description>
    </item>
    
    <item>
      <title>Win32窗口程序打开Console终端</title>
      <link>/2022/03/cb7ce10f/</link>
      <pubDate>Thu, 31 Mar 2022 18:29:34 +0800</pubDate>
      
      <guid>/2022/03/cb7ce10f/</guid>
      <description>默认的Win32窗口程序(subsystem:Windows)，入口点为WinMain的程序是不会显示Console终端的，意味着std::</description>
    </item>
    
    <item>
      <title>Catlike Coding | Chapter 4 Directional Shadows</title>
      <link>/notes/catlikecodingsrp/e36ff115/</link>
      <pubDate>Tue, 08 Mar 2022 19:14:50 +0800</pubDate>
      
      <guid>/notes/catlikecodingsrp/e36ff115/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 Rendering Shadows</description>
    </item>
    
    <item>
      <title>Catlike Coding | Chapter 3 Directional Lights</title>
      <link>/notes/catlikecodingsrp/d791911c/</link>
      <pubDate>Tue, 08 Mar 2022 19:12:47 +0800</pubDate>
      
      <guid>/notes/catlikecodingsrp/d791911c/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 Lighting Lit</description>
    </item>
    
    <item>
      <title>Catlike Coding | Chapter 2 Drawcalls</title>
      <link>/notes/catlikecodingsrp/c2282dd8/</link>
      <pubDate>Tue, 08 Mar 2022 19:12:44 +0800</pubDate>
      
      <guid>/notes/catlikecodingsrp/c2282dd8/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误认识或偏颇观点，亦或采用只有自身能够理解的记录。 # Chapter</description>
    </item>
    
    <item>
      <title>Catlike Coding | Chapter 1 Pipeline Asset</title>
      <link>/notes/catlikecodingsrp/18139ebf/</link>
      <pubDate>Tue, 08 Mar 2022 19:00:42 +0800</pubDate>
      
      <guid>/notes/catlikecodingsrp/18139ebf/</guid>
      <description>笔记栏文章声明 .notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:#444;background:#e7f2fa}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:#fff;background:#6ab0de}.notice.warning .notice-title{background:rgba(217,83,79,.9)}.notice.warning{background:#fae2e2}.notice.info .notice-title{background:#f0b37e}.notice.info{background:#fff2db}.notice.note .notice-title{background:#6ab0de}.notice.note{background:#e7f2fA}.notice.tip .notice-title{background:rgba(92,184,92,.8)}.notice.tip{background:#e6f9e6}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:0.125em;position:relative} Warning 笔记栏所记录文章往往未经校对，或包含错误观点以及认知，亦或采用只有自身能够理解的表达。 这是来</description>
    </item>
    
    <item>
      <title>搜索行尾为CRLF换行符的所有文件</title>
      <link>/2022/03/265a6886/</link>
      <pubDate>Sun, 06 Mar 2022 20:45:25 +0800</pubDate>
      
      <guid>/2022/03/265a6886/</guid>
      <description>autoCRLF的问题 在多个平台工作的时候经常需要注意换行符的问题，Windows习惯使用CRLF(\r\n)作为换行符，而Linux习惯采</description>
    </item>
    
    <item>
      <title>Hugo的GitInfo为nil的问题</title>
      <link>/2022/02/4f3428ec/</link>
      <pubDate>Fri, 18 Feb 2022 15:11:32 +0800</pubDate>
      
      <guid>/2022/02/4f3428ec/</guid>
      <description>我现在的博客程序用的是Hugo，并且版本Pin在了0.68.3，因为高版本似乎禁用了mmark这个格式但是我现在写Katex需要它。 最近试图</description>
    </item>
    
    <item>
      <title>多重重要性采样与路径跟踪</title>
      <link>/2022/02/bd19f3eb/</link>
      <pubDate>Tue, 08 Feb 2022 15:48:11 +0800</pubDate>
      
      <guid>/2022/02/bd19f3eb/</guid>
      <description>Veach在其博士论文里详细阐述了MIS的理论Multiple Importance Sampling，并给出了一段简单的无偏性证明，但是其过于精简导致我一直没看</description>
    </item>
    
    <item>
      <title>Links</title>
      <link>/links/</link>
      <pubDate>Sun, 06 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>/links/</guid>
      <description>只记录技术博客。 烟雨迷离半世殇 愿天下心诚剑士人人可剑开天门! 无境 梦想成为家里蹲的游戏开发萌新</description>
    </item>
    
    <item>
      <title>为什么延迟渲染和MSAA不搭</title>
      <link>/2022/02/5b548f07/</link>
      <pubDate>Fri, 04 Feb 2022 15:10:42 +0800</pubDate>
      
      <guid>/2022/02/5b548f07/</guid>
      <description>MSAA与延迟渲染 翻了下之前在Games101上写的MSAA的实现，发现错的离谱(逃。 改了一下以后顺手就把MSAA和延迟渲染这部分写了。 MS</description>
    </item>
    
    <item>
      <title>Windows上CMake&#43;Lua编译和luarocks环境配置</title>
      <link>/2022/01/5455335f/</link>
      <pubDate>Mon, 31 Jan 2022 14:30:13 +0800</pubDate>
      
      <guid>/2022/01/5455335f/</guid>
      <description>Windows10 珍爱生命，远离预编译的包。编译Lua环境相对容易，只需要一个支持ANSI C的编译器环境，所以推荐自己编译，否则可能由于预编译的包的工具链和</description>
    </item>
    
    <item>
      <title>基于LTC方法的面光源渲染</title>
      <link>/2022/01/bbf5cca9/</link>
      <pubDate>Sat, 22 Jan 2022 22:07:04 +0800</pubDate>
      
      <guid>/2022/01/bbf5cca9/</guid>
      <description>渲染方程的解析解 (注:这部分来着Prof Ravi的CSE168 Homework2) 渲染方程的完整形式，其中假定 \(\omega_i\) 是指向光源的，\(\omega_o\) 指向视角</description>
    </item>
    
    <item>
      <title>生者常戚戚</title>
      <link>/misc/76dd3298/</link>
      <pubDate>Mon, 13 Dec 2021 11:34:17 +0000</pubDate>
      
      <guid>/misc/76dd3298/</guid>
      <description>无他，唯接力尔。 愿逝者在另一个世界也能心潮澎湃。</description>
    </item>
    
    <item>
      <title>PBR渲染中的能量补偿</title>
      <link>/2021/08/4df3fd6f/</link>
      <pubDate>Mon, 09 Aug 2021 11:20:31 +0800</pubDate>
      
      <guid>/2021/08/4df3fd6f/</guid>
      <description>菲涅尔项 描述了以某个角度看向微表面有多少能量被反射。 NDF项，描述了微观法线的统计分布。给定参数粗糙度，法线和半程向量h，NDF给出了整个微</description>
    </item>
    
    <item>
      <title>面试异闻录</title>
      <link>/misc/fa15ea61/</link>
      <pubDate>Wed, 28 Jul 2021 00:28:00 +0800</pubDate>
      
      <guid>/misc/fa15ea61/</guid>
      <description>聊以记录大厂招聘的一些故事吧,此篇致敬我的2018年计算机实习和秋招经历（微软、阿里、腾讯、网易游戏、今日头条等）, 虽然素未蒙面，但是这篇在</description>
    </item>
    
    <item>
      <title>xv6的mmap的实现</title>
      <link>/2021/07/f586ed81/</link>
      <pubDate>Sun, 18 Jul 2021 17:03:00 +0800</pubDate>
      
      <guid>/2021/07/f586ed81/</guid>
      <description>很长一段时间没整理xv6的相关笔记了。mmap是Linux下的一个比较常用的api，可以将磁盘的文件映射到虚拟内存中。 实现mmap需要用到l</description>
    </item>
    
    <item>
      <title>PBR渲染: Cook-Torrance的实现与补充</title>
      <link>/2021/05/dec701b2/</link>
      <pubDate>Sat, 15 May 2021 23:08:49 +0800</pubDate>
      
      <guid>/2021/05/dec701b2/</guid>
      <description>Cook-Torrance反射方程 原始的Cook-Torrance反射方程来自论文1. (注：原文的公式里的分母少了一个4) \( \begin{aligned} &amp;L_{o}\left(p, \omega_{o}\right) =\int_{\Omega^+}\left(k_{d} f_d(\omega_i \rArr \omega_o)+ k_{s}f_{s}(\omega_i</description>
    </item>
    
    <item>
      <title>C&#43;&#43;跨平台新体验: Vcpkg Manifest与Github Actions</title>
      <link>/2021/05/4756a873/</link>
      <pubDate>Wed, 05 May 2021 16:36:54 +0800</pubDate>
      
      <guid>/2021/05/4756a873/</guid>
      <description>C++的跨平台体验一直比较糟糕，尤其是涉及到需要链接大量的第三方库的时候，整个项目的依赖管理变得相当复杂。 究其根本，问题的源头是C++一直未</description>
    </item>
    
    <item>
      <title>渲染方程与蒙特卡罗积分与重要性采样</title>
      <link>/2021/03/a49ec510/</link>
      <pubDate>Wed, 03 Mar 2021 13:55:18 +0800</pubDate>
      
      <guid>/2021/03/a49ec510/</guid>
      <description>渲染方程的可解性 先上渲染方程 \[ \textcolor{red}{L_r(p,\omega_r)} = \textcolor{blue}{L_e(p,\omega_o)} + \int_{\Omega^+} \textcolor{blue}{f_r(\omega_i \Rarr \omega_r )}\textcolor{red}{ L_i(p,\omega)} \textcolor{blue}{\cos\theta_i \text{d}\omega_i}\\ where: \cos\theta_i = \mathbf{n} \cdot \mathbf{w_i} \] 方程中蓝色的量代表已知量，红色代表未知量。 左边和右边的\(\mathbf</description>
    </item>
    
    <item>
      <title>xv6的用户态线程(协程)</title>
      <link>/2021/02/98bbdc4e/</link>
      <pubDate>Tue, 23 Feb 2021 20:22:46 +0800</pubDate>
      
      <guid>/2021/02/98bbdc4e/</guid>
      <description>来自MIT6S081的多线程lab, 需要在用户态实现一个“多线程”，实际上是一个简单的协程的实现。其实这个lab挺容易的，因为只需要弄懂保存</description>
    </item>
    
    <item>
      <title>xv6的文件系统设计</title>
      <link>/2021/01/xv6%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/</link>
      <pubDate>Thu, 21 Jan 2021 20:32:15 +0800</pubDate>
      
      <guid>/2021/01/xv6%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/</guid>
      <description>xv6的文件系统大概介于ext2和ext3之间吧，相较于ext2增加了日志(logging)部分，可以确保异常中断下下次重启硬盘可以恢复未写</description>
    </item>
    
    <item>
      <title>LRU Cache的简单实现</title>
      <link>/2021/01/lru_cache%E7%9A%84%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0/</link>
      <pubDate>Sun, 10 Jan 2021 20:20:31 +0800</pubDate>
      
      <guid>/2021/01/lru_cache%E7%9A%84%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0/</guid>
      <description>CS:APP的最后一个proxy lab需要实现一个LRU cache用于代理服务器的缓存。 定义一个数据块 data_block，用于存放sock</description>
    </item>
    
    <item>
      <title>xv6的lock,sleep,wakeup的实现</title>
      <link>/2020/12/xv6_lock_sleep_wakeup_implement/</link>
      <pubDate>Sat, 12 Dec 2020 14:37:26 +0800</pubDate>
      
      <guid>/2020/12/xv6_lock_sleep_wakeup_implement/</guid>
      <description>自旋锁的实现 在xv6中实现有两种锁，自旋锁和睡眠锁，其中睡眠锁的实现是依靠自旋锁来实现的。自旋锁的实现相当的简单，我们首先考虑一个错误的锁的</description>
    </item>
    
    <item>
      <title>CPP线程池的实现</title>
      <link>/2020/12/cpp%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%9A%84%E5%AE%9E%E7%8E%B0/</link>
      <pubDate>Tue, 01 Dec 2020 20:51:22 +0800</pubDate>
      
      <guid>/2020/12/cpp%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%9A%84%E5%AE%9E%E7%8E%B0/</guid>
      <description>在DiRender中有一份 C++线程池 ，主要用于渲染中的图像的分块并行。 这个线程池大概是从 thread pool 或者其他的项目中改过来的。 为什么需要有线程池 在</description>
    </item>
    
    <item>
      <title>xv6 fork的实现</title>
      <link>/2020/11/xv6fork%E7%9A%84%E5%AE%9E%E7%8E%B0/</link>
      <pubDate>Mon, 23 Nov 2020 14:20:32 +0800</pubDate>
      
      <guid>/2020/11/xv6fork%E7%9A%84%E5%AE%9E%E7%8E%B0/</guid>
      <description>Posix中规定的fork的签名很简单，这个函数的作用是复制一个新的进程，子进程和父进程被复制出来是一样的，Linux的实现还会采用cow复</description>
    </item>
    
    <item>
      <title>xv6的内核态与用户态的切换</title>
      <link>/2020/11/xv6%E5%86%85%E6%A0%B8%E6%80%81%E4%B8%8E%E7%94%A8%E6%88%B7%E6%80%81%E7%9A%84%E5%88%87%E6%8D%A2/</link>
      <pubDate>Tue, 17 Nov 2020 15:00:03 +0800</pubDate>
      
      <guid>/2020/11/xv6%E5%86%85%E6%A0%B8%E6%80%81%E4%B8%8E%E7%94%A8%E6%88%B7%E6%80%81%E7%9A%84%E5%88%87%E6%8D%A2/</guid>
      <description>当一个进程需要调用kernel提供的服务的时候，他们调用一个system call， 在x86上一个system call大概类似于int 0x80</description>
    </item>
    
    <item>
      <title>About Me</title>
      <link>/about/</link>
      <pubDate>Tue, 17 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>/about/</guid>
      <description>In code we trust. 😀
   // GitHubCalendar(&#34;.calendar&#34;, &#34;BlurryLight&#34;); // or enable responsive functionality GitHubCalendar(&#34;.calendar&#34;, &#34;BlurryLight&#34;, { responsive: true,tooltips: true});   </description>
    </item>
    
    <item>
      <title>C&#43;&#43;的虚函数,虚表与多继承</title>
      <link>/2020/10/%E8%99%9A%E5%87%BD%E6%95%B0_%E8%99%9A%E8%A1%A8_%E5%A4%9A%E7%BB%A7%E6%89%BF/</link>
      <pubDate>Thu, 29 Oct 2020 17:50:14 +0800</pubDate>
      
      <guid>/2020/10/%E8%99%9A%E5%87%BD%E6%95%B0_%E8%99%9A%E8%A1%A8_%E5%A4%9A%E7%BB%A7%E6%89%BF/</guid>
      <description>虚函数 考虑到面向对象设计中，当基类base派生出的Derived类的方法覆盖了基类中的方法时，使用基类的指针去访问此方法，可能出现: 调用基类</description>
    </item>
    
    <item>
      <title>整数和浮点数的机器级表示</title>
      <link>/2020/09/%E6%95%B4%E6%95%B0%E5%92%8C%E6%B5%AE%E7%82%B9%E6%95%B0%E7%9A%84%E6%9C%BA%E5%99%A8%E7%BA%A7%E8%A1%A8%E7%A4%BA/</link>
      <pubDate>Mon, 21 Sep 2020 15:47:44 +0800</pubDate>
      
      <guid>/2020/09/%E6%95%B4%E6%95%B0%E5%92%8C%E6%B5%AE%E7%82%B9%E6%95%B0%E7%9A%84%E6%9C%BA%E5%99%A8%E7%BA%A7%E8%A1%A8%E7%A4%BA/</guid>
      <description>文章节选于csapp 3rd edition. 整数表示 无符号整数表示 无符号整数是最简单的。由每一位二进制的0/1和二次幂累加而成。 \[ X=\sum_{i=0}x_i 2^i \] 二进制串0001映射到\</description>
    </item>
    
    <item>
      <title>Manjaro下texlive环境配置指北</title>
      <link>/2020/08/linux%E4%B8%8Btexlive%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8C%97/</link>
      <pubDate>Sat, 15 Aug 2020 17:58:25 +0800</pubDate>
      
      <guid>/2020/08/linux%E4%B8%8Btexlive%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8C%97/</guid>
      <description>Linux下安装texlive环境大致分为两种方式，一种是从包管理器中安装，二是从下载已经打包好的texlive镜像。 在Ubuntu这种带版</description>
    </item>
    
    <item>
      <title>Debug你的光线追踪渲染器</title>
      <link>/2020/07/debug%E4%BD%A0%E7%9A%84%E5%85%89%E7%BA%BF%E8%BF%BD%E8%B8%AA%E6%B8%B2%E6%9F%93%E5%99%A8/</link>
      <pubDate>Wed, 01 Jul 2020 18:39:12 +0800</pubDate>
      
      <guid>/2020/07/debug%E4%BD%A0%E7%9A%84%E5%85%89%E7%BA%BF%E8%BF%BD%E8%B8%AA%E6%B8%B2%E6%9F%93%E5%99%A8/</guid>
      <description>光线追踪渲染debug很困难，当然实时渲染debug也很难。有的时候材质实现的不太对，可能很长一段时间都看不出来。渲染环境下Debugger</description>
    </item>
    
    <item>
      <title>辐射度量学与渲染方程</title>
      <link>/2020/05/%E8%BE%90%E5%B0%84%E5%BA%A6%E9%87%8F%E5%AD%A6%E4%B8%8E%E6%B8%B2%E6%9F%93%E6%96%B9%E7%A8%8B/</link>
      <pubDate>Thu, 28 May 2020 15:48:07 +0800</pubDate>
      
      <guid>/2020/05/%E8%BE%90%E5%B0%84%E5%BA%A6%E9%87%8F%E5%AD%A6%E4%B8%8E%E6%B8%B2%E6%9F%93%E6%96%B9%E7%A8%8B/</guid>
      <description>辐射度量学提供了一系列方便的概念来描述渲染中的光学问题，所以渲染中大量运用到这些符号(与物理含义)。渲染中的光学做了一些简化。 光线不会自相交</description>
    </item>
    
    <item>
      <title>对随机变量的采样</title>
      <link>/2020/05/%E5%AF%B9%E9%9A%8F%E6%9C%BA%E5%8F%98%E9%87%8F%E7%9A%84%E9%87%87%E6%A0%B7/</link>
      <pubDate>Sat, 23 May 2020 22:12:52 +0800</pubDate>
      
      <guid>/2020/05/%E5%AF%B9%E9%9A%8F%E6%9C%BA%E5%8F%98%E9%87%8F%E7%9A%84%E9%87%87%E6%A0%B7/</guid>
      <description>首先,先上Rendering Equation: \[ L_o(p,\omega_o) = L_e(p,\omega_o) + \int_{\Omega +}L_i(p,\omega _i)f_r(p,\omega_i,\omega_o)(n \cdot \omega_i) \text{d}\omega_i \] 其中包含有含有递归定义的L项和对半球面的积分项,这个式子是没有解析解的,数值方法可以使</description>
    </item>
    
    <item>
      <title>直线与三角形相交Moller Trumbore算法推导</title>
      <link>/2020/04/%E7%9B%B4%E7%BA%BF%E4%B8%8E%E4%B8%89%E8%A7%92%E5%BD%A2%E7%9B%B8%E4%BA%A4moller-trumbore%E7%AE%97%E6%B3%95%E6%8E%A8%E5%AF%BC/</link>
      <pubDate>Fri, 03 Apr 2020 20:24:25 +0800</pubDate>
      
      <guid>/2020/04/%E7%9B%B4%E7%BA%BF%E4%B8%8E%E4%B8%89%E8%A7%92%E5%BD%A2%E7%9B%B8%E4%BA%A4moller-trumbore%E7%AE%97%E6%B3%95%E6%8E%A8%E5%AF%BC/</guid>
      <description>Moller Trumbore算法是一种快速求解直线与三角形求交的算法，通过向量与矩阵计算可以快速得出交点与重心坐标。要推导它还比较麻烦，需要用到向量的</description>
    </item>
    
    <item>
      <title>AABB包围盒快速变换方式</title>
      <link>/2020/03/aabb%E5%8C%85%E5%9B%B4%E7%9B%92%E5%BF%AB%E9%80%9F%E5%8F%98%E6%8D%A2%E6%96%B9%E5%BC%8F/</link>
      <pubDate>Tue, 24 Mar 2020 20:57:36 +0800</pubDate>
      
      <guid>/2020/03/aabb%E5%8C%85%E5%9B%B4%E7%9B%92%E5%BF%AB%E9%80%9F%E5%8F%98%E6%8D%A2%E6%96%B9%E5%BC%8F/</guid>
      <description>这个问题来源于PBRT的第二章的一个练习题，朴素的AABB包围盒的变换方式是对8个顶点做同等变换，然后在8个顶点中找最小的xyz和最大的xy</description>
    </item>
    
    <item>
      <title>Linux的socket指北</title>
      <link>/2020/03/linux%E7%9A%84socket%E6%8C%87%E5%8C%97/</link>
      <pubDate>Mon, 16 Mar 2020 22:13:26 +0800</pubDate>
      
      <guid>/2020/03/linux%E7%9A%84socket%E6%8C%87%E5%8C%97/</guid>
      <description>socket概览 这是继signal, pthread后的第三篇，socket系列，代表的是进程间通讯和网络通讯。我没有读过unp，对网络编程一</description>
    </item>
    
    <item>
      <title>Pthread指北</title>
      <link>/2020/02/pthread%E6%8C%87%E5%8C%97/</link>
      <pubDate>Tue, 25 Feb 2020 23:35:58 +0800</pubDate>
      
      <guid>/2020/02/pthread%E6%8C%87%E5%8C%97/</guid>
      <description>Pthread简介 Pthread,也即Posix thread，顾名思义，是posix的一部分，跨平台的线程库。Linux上的现在的实现是Na</description>
    </item>
    
    <item>
      <title>Linux的signal指北</title>
      <link>/2020/02/linux%E7%9A%84signal%E6%8C%87%E5%8C%97/</link>
      <pubDate>Wed, 19 Feb 2020 17:53:26 +0800</pubDate>
      
      <guid>/2020/02/linux%E7%9A%84signal%E6%8C%87%E5%8C%97/</guid>
      <description>预计此系列有三篇文章，分别记录信号(signal), 线程(pthread) 和 套接字(socket) 方面的内容，作为学习知识的整理记录。只讨论</description>
    </item>
    
    <item>
      <title>一个有锁线程安全的队列实现</title>
      <link>/2020/02/%E4%B8%80%E4%B8%AA%E6%9C%89%E9%94%81%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E7%9A%84%E9%98%9F%E5%88%97%E5%AE%9E%E7%8E%B0/</link>
      <pubDate>Mon, 03 Feb 2020 19:28:27 +0800</pubDate>
      
      <guid>/2020/02/%E4%B8%80%E4%B8%AA%E6%9C%89%E9%94%81%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E7%9A%84%E9%98%9F%E5%88%97%E5%AE%9E%E7%8E%B0/</guid>
      <description>最近在学习pthread的过程中，也算是重温了多线程编程的一些知识。关于单生产者单消费者的模式，最佳实践应该是circle buffer，可以</description>
    </item>
    
    <item>
      <title>一次numpy读取txt文件优化</title>
      <link>/2020/01/%E4%B8%80%E6%AC%A1numpy%E8%AF%BB%E5%8F%96txt%E6%96%87%E4%BB%B6%E4%BC%98%E5%8C%96/</link>
      <pubDate>Wed, 01 Jan 2020 20:04:49 +0800</pubDate>
      
      <guid>/2020/01/%E4%B8%80%E6%AC%A1numpy%E8%AF%BB%E5%8F%96txt%E6%96%87%E4%BB%B6%E4%BC%98%E5%8C%96/</guid>
      <description>简单介绍下背景，有大约600个txt，大小在1M左右，实际内容是4列的浮点数，也就是csv格式，以空格分割。想用python读到内存里转成n</description>
    </item>
    
    <item>
      <title>X11VNC搭建指北</title>
      <link>/2019/11/x11vnc%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8C%97/</link>
      <pubDate>Sat, 30 Nov 2019 13:10:51 +0800</pubDate>
      
      <guid>/2019/11/x11vnc%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8C%97/</guid>
      <description>vnc作为开源协议，实现的有很多，包括出名的realVNC,tightVNC以及它的fork tigerVNC，不同的vnc后端也不少，主要分</description>
    </item>
    
    <item>
      <title>经典光照模型:Phong光照模型以及BlinnPhong光照模型</title>
      <link>/2019/10/phong_and_blinn_phong/</link>
      <pubDate>Mon, 28 Oct 2019 16:27:19 +0800</pubDate>
      
      <guid>/2019/10/phong_and_blinn_phong/</guid>
      <description>Phong 光照模型 Phong Lighting Model在1975年，由Phong提出，以他的名字冠名。是一种局部光照的模型，他认为一个光照模型可以用三种不同的部分组成，主</description>
    </item>
    
    <item>
      <title>UEFI&#43;win7&#43;Linux双启动踩坑日记</title>
      <link>/2019/10/uefi-win7-linux%E5%8F%8C%E5%90%AF%E5%8A%A8%E8%B8%A9%E5%9D%91%E6%97%A5%E8%AE%B0/</link>
      <pubDate>Thu, 17 Oct 2019 13:40:01 +0800</pubDate>
      
      <guid>/2019/10/uefi-win7-linux%E5%8F%8C%E5%90%AF%E5%8A%A8%E8%B8%A9%E5%9D%91%E6%97%A5%E8%AE%B0/</guid>
      <description>启动黑屏 在服务器上装了一个Ubuntu server，安装盘启动黑屏，其实就应该想到是驱动有问题，因为服务器的显卡是Quadro M4000,但</description>
    </item>
    
    <item>
      <title>读Machine-Learning-Yearning杂记</title>
      <link>/2019/10/%E8%AF%BBmachine-learning-yearning%E6%9D%82%E8%AE%B0/</link>
      <pubDate>Sat, 05 Oct 2019 15:09:49 +0800</pubDate>
      
      <guid>/2019/10/%E8%AF%BBmachine-learning-yearning%E6%9D%82%E8%AE%B0/</guid>
      <description>用差不多两个下午的时间读了这本120页的小册子，Andrew NG的诚意之作，并不是tutorial之类的巨头，而是娓娓道来的经验之谈，重点讨</description>
    </item>
    
    <item>
      <title>LookAt的实现</title>
      <link>/2019/09/lookat%E7%9A%84%E5%AE%9E%E7%8E%B0/</link>
      <pubDate>Sat, 14 Sep 2019 21:28:47 +0800</pubDate>
      
      <guid>/2019/09/lookat%E7%9A%84%E5%AE%9E%E7%8E%B0/</guid>
      <description>一个物体要在OpenGL中被渲染出现，需要经过经典的MVP变换，主要是从物体坐标系，通过Model Matrix，变换到世界坐标系，然后通过V</description>
    </item>
    
    <item>
      <title>我选择了Manjaro</title>
      <link>/2019/09/%E6%88%91%E9%80%89%E6%8B%A9%E4%BA%86manjaro/</link>
      <pubDate>Sat, 14 Sep 2019 16:48:10 +0800</pubDate>
      
      <guid>/2019/09/%E6%88%91%E9%80%89%E6%8B%A9%E4%BA%86manjaro/</guid>
      <description>我在过去的四年内一直使用Debian,大约从Debian7的末期开始使用，到第八个stable版本jessie，到第九个stable版本st</description>
    </item>
    
    <item>
      <title>Kinect_V1在Debian testing的配置指北</title>
      <link>/2019/08/kinect_v1%E5%9C%A8debian_testing%E7%9A%84%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8C%97/</link>
      <pubDate>Thu, 29 Aug 2019 17:07:59 +0800</pubDate>
      
      <guid>/2019/08/kinect_v1%E5%9C%A8debian_testing%E7%9A%84%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8C%97/</guid>
      <description>坑在哪里 在Linux下驱动Kinect V1现在有两种方式，一种是使用OpenNI + SensorKinect + Nite的方案，一种是使用OpenNI2 + libfre</description>
    </item>
    
    <item>
      <title>图形学中常见的变换</title>
      <link>/2019/08/matrix_transformation/</link>
      <pubDate>Fri, 09 Aug 2019 17:33:03 +0800</pubDate>
      
      <guid>/2019/08/matrix_transformation/</guid>
      <description>引言: https://learnopengl.com/Getting-started/Transformations 这里讲得不错。这篇文章不过是对链接指向地址的简单摘要。此外，推荐&amp;lt;Foundation of 3D computer graphics&amp;gt;，前六章的</description>
    </item>
    
    <item>
      <title>关于C&#43;&#43;的命名约定</title>
      <link>/2019/07/%E5%85%B3%E4%BA%8Ec-%E7%9A%84%E5%91%BD%E5%90%8D%E7%BA%A6%E5%AE%9A/</link>
      <pubDate>Tue, 30 Jul 2019 18:59:25 +0800</pubDate>
      
      <guid>/2019/07/%E5%85%B3%E4%BA%8Ec-%E7%9A%84%E5%91%BD%E5%90%8D%E7%BA%A6%E5%AE%9A/</guid>
      <description>谷歌命名约定 本篇文章几乎照搬于谷歌命名约定，部分根据个人习惯有所改动，可供参考。 文件名 文件名全部小写,采用_连接单词。如my_useful_</description>
    </item>
    
    <item>
      <title>Debian10双显卡安装Anaconda&#43;Cuda9&#43;Pytorch</title>
      <link>/2019/06/debian10%E5%8F%8C%E6%98%BE%E5%8D%A1%E5%AE%89%E8%A3%85anaconda-cuda9-pytorch/</link>
      <pubDate>Tue, 11 Jun 2019 16:46:04 +0800</pubDate>
      
      <guid>/2019/06/debian10%E5%8F%8C%E6%98%BE%E5%8D%A1%E5%AE%89%E8%A3%85anaconda-cuda9-pytorch/</guid>
      <description>在笔记本上搭建Pytorch的环境还算比较麻烦的,我的笔记本带核显和独显，在Linux下配置起来要稍微麻烦点，主要要解决的问题包括三个： 在D</description>
    </item>
    
    <item>
      <title>谈谈constexpr,inline和static</title>
      <link>/2019/06/%E8%B0%88%E8%B0%88constexprinline%E5%92%8Cstatic/</link>
      <pubDate>Sat, 08 Jun 2019 16:16:18 +0800</pubDate>
      
      <guid>/2019/06/%E8%B0%88%E8%B0%88constexprinline%E5%92%8Cstatic/</guid>
      <description>constexpr，inline和static可能是C++里最让人迷惑的几个关键词了，如同vector&amp;lt;bool&amp;gt;既不是一个ve</description>
    </item>
    
    <item>
      <title>FakeSTL From Scratch | AVL TREE的实现</title>
      <link>/2019/06/fakestl_from_scratch____avl_tree%E7%9A%84%E5%AE%9E%E7%8E%B0/</link>
      <pubDate>Tue, 04 Jun 2019 16:57:12 +0800</pubDate>
      
      <guid>/2019/06/fakestl_from_scratch____avl_tree%E7%9A%84%E5%AE%9E%E7%8E%B0/</guid>
      <description>Why AVL Tree? STL里平衡二叉树应用的很广泛，主要是标准规定了查找、插入和删除的复杂度。set,multiset,map,multimap下面都是平</description>
    </item>
    
    <item>
      <title>博客迁移到Hugo &amp; github pages</title>
      <link>/2019/06/%E5%8D%9A%E5%AE%A2%E8%BF%81%E7%A7%BB%E5%88%B0hugo-github-pages/</link>
      <pubDate>Sun, 02 Jun 2019 10:30:01 +0800</pubDate>
      
      <guid>/2019/06/%E5%8D%9A%E5%AE%A2%E8%BF%81%E7%A7%BB%E5%88%B0hugo-github-pages/</guid>
      <description>迁移原因 原来的服务器体验了一把GFW VIP待遇，先是被TCP阻断，随后直接IP block了。幸亏没有被DNS污染，不然就浪费了我辛辛苦苦想的</description>
    </item>
    
    <item>
      <title>谈谈observer_ptr</title>
      <link>/2019/05/459/</link>
      <pubDate>Sat, 25 May 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/05/459/</guid>
      <description>&lt;p&gt;&lt;code&gt;observer_ptr&lt;/code&gt;是于14年的提案N4282&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;提出的一种“世界上最蠢的智能指针&amp;quot;，现在的&lt;code&gt;observer_ptr&lt;/code&gt;在&lt;code&gt;std::experimental::memory&lt;/code&gt;里，当然也可以自己写一个，&lt;code&gt;observer_ptr&lt;/code&gt;的代码简单到”代码即文档“的级别了，但是目前来看&lt;code&gt;observer_ptr&lt;/code&gt;应该是进不了标准库了，因为Bjarne Stroustrup在提案P1408R0&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;:里有力的驳斥了&lt;code&gt;observer_ptr&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Debian 字体回落到AR PL UKai、AR PL UMing的解决方法</title>
      <link>/2019/05/457/</link>
      <pubDate>Thu, 23 May 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/05/457/</guid>
      <description>Debian现在中文经过社区的不断努力已经解决的很好了，但是Firefox在浏览某些网页中，偶尔会见到不和谐的字体。 比如在这种 A Brief Introduction to DDD 网页</description>
    </item>
    
    <item>
      <title>Huffman编码与解码</title>
      <link>/2019/05/454/</link>
      <pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/05/454/</guid>
      <description>Huffman编码在数据结构里是必学的部分。要实现霍夫曼编码首先要实现霍夫曼树（一个简单的教程，它是一个带权最优编码树，主要特性有两点： 所有</description>
    </item>
    
    <item>
      <title>FakeSTL From Scratch | Iterator and Traits(迭代器与类型萃取)</title>
      <link>/2019/04/452-1/</link>
      <pubDate>Sat, 13 Apr 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/04/452-1/</guid>
      <description>&lt;h3 id=&#34;iterator&#34;&gt;Iterator&lt;/h3&gt;
&lt;p&gt;迭代器是STL特有的一个概念,翻译的比较绕口,更加通俗的翻译可以翻译成&lt;strong&gt;游标&lt;/strong&gt;. 它提供一种统一和抽象的方式,使用迭代器可以用于访问和修改&lt;code&gt;STL&lt;/code&gt;容器的每一个元素,而无需暴露&lt;code&gt;STL&lt;/code&gt;容器的内部实现.
迭代器提供和指针一样的&lt;code&gt;dereference&lt;/code&gt;和&lt;code&gt;member access&lt;/code&gt;的功能,所有的迭代器都重载了&lt;code&gt;*&lt;/code&gt;和&lt;code&gt;-&amp;gt;&lt;/code&gt;运算符,使他们工作的更像指针. 事实上,一般的&lt;code&gt;STL&lt;/code&gt;实现里,&lt;code&gt;vector&lt;/code&gt;容器的&lt;code&gt;iterator&lt;/code&gt;就是&lt;code&gt;T*&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;在这里推荐一篇博客&lt;a href=&#34;https://zcheng.ren/sourcecodeanalysis/stliterator/#%E8%BF%AD%E4%BB%A3%E5%99%A8%E6%A6%82%E8%BF%B0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;带你深入理解STL之迭代器和Traits技法&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>FakeSTL From Scratch | 编写Allocator</title>
      <link>/2019/04/450/</link>
      <pubDate>Fri, 05 Apr 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/04/450/</guid>
      <description>&lt;p&gt;&lt;code&gt;Allocator&lt;/code&gt;模版是所有 标准库容器里默认的内存分配器。在实现容器前，首先要实现&lt;code&gt;Allocator&lt;/code&gt;以管理容器的内存。文中涉及到的函数标准一律以&lt;code&gt;C11&lt;/code&gt;为准。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>FakeSTL From Scratch  | C&#43;&#43; 从0开始写FakeSTL [目录]</title>
      <link>/2019/03/443/</link>
      <pubDate>Sun, 31 Mar 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/03/443/</guid>
      <description>&lt;h2 id=&#34;引言&#34;&gt;引言&lt;/h2&gt;
&lt;p&gt;我的项目地址 ： &lt;a href=&#34;https://github.com/BlurryLight/PDSTL&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;BlurryLight/PDSTL&lt;/a&gt;
目前处于边学边写（半抄半写）状态。
我的知识水平：cpp beginner&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>建立简单的带单元测试的CMake项目</title>
      <link>/2019/03/452/</link>
      <pubDate>Sun, 24 Mar 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/03/452/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Cmake&lt;/code&gt;是一个跨平台的C/C++项目组织管理工具，虽然许多IDE都有私有的项目管理工具，但是在现在2019年，各大IDE基本都支持了&lt;code&gt;CMAKE&lt;/code&gt;的管理，所以如果有跨平台的需求，使用&lt;code&gt;CMAKE&lt;/code&gt;管理是最方便的。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>浅谈RAII和智能指针</title>
      <link>/2019/03/438/</link>
      <pubDate>Sat, 02 Mar 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/03/438/</guid>
      <description>&lt;p&gt;不管cpp有多少被诟病的地方，但是RAII是一个很伟大的发明。可以说不懂RAII，连C++的门槛都还没入。
《cpp primer》在第12章的动态内存中讲解了很多智能指针的使用，参考着另外一本国内的《C++泛型》的教材书上的代码，记个笔记。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>从Thunar中在xfce-terminal打开VIM</title>
      <link>/2019/02/437/</link>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/02/437/</guid>
      <description>&lt;p&gt;VIM在xfce的默认设置中,如果用图形化调用,则是默认打开Xterm来显示,Xterm显示效果比xfce-terminal效果差很多.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>CPP Exercises</title>
      <link>/2019/01/435/</link>
      <pubDate>Mon, 07 Jan 2019 00:00:00 +0000</pubDate>
      
      <guid>/2019/01/435/</guid>
      <description>&lt;p&gt;做一些CPP的练习。
不讲究奇技淫巧，不讲究运行速度。
以练习C++11的语法和强调代码的可读性为主要目标。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43; lambda初探</title>
      <link>/2018/01/434/</link>
      <pubDate>Wed, 24 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>/2018/01/434/</guid>
      <description>&lt;p&gt;&lt;code&gt;lambda&lt;/code&gt;表达式主要用于一次性的函数，最常见的应用就是在&lt;code&gt;remove_if&lt;/code&gt;,&lt;code&gt;find_if&lt;/code&gt;这种需要predicator的函数中了。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;模板函数的重载决议问题</title>
      <link>/2018/01/433/</link>
      <pubDate>Wed, 24 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>/2018/01/433/</guid>
      <description>&lt;p&gt;事情的起因是我在尝试实现&lt;code&gt;std::list&lt;/code&gt;的过程中，我发现了其&lt;code&gt;insert&lt;/code&gt;函数并不如我想象中的顺序工作。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt使用预编译头PCH及多核编译加快编译</title>
      <link>/2017/09/427/</link>
      <pubDate>Sun, 03 Sep 2017 00:00:00 +0000</pubDate>
      
      <guid>/2017/09/427/</guid>
      <description>最近在用Qt做一些小项目的时候，发现Qt的编译很慢，理论上来说不应该有这样的问题的。查了一下Qt的文档以及在知乎上的问题为什么 Qt Creator 的编译如此</description>
    </item>
    
    <item>
      <title>Qt5.8 Patch: Missing qtmultimediadefs.h</title>
      <link>/2017/08/425/</link>
      <pubDate>Tue, 22 Aug 2017 00:00:00 +0000</pubDate>
      
      <guid>/2017/08/425/</guid>
      <description>&lt;p&gt;详情请见：
&lt;a href=&#34;https://bugreports.qt.io/browse/QTBUG-58432&#34;&gt;https://bugreports.qt.io/browse/QTBUG-58432&lt;/a&gt;
这是被列在Qt5.8的等级为P1的Bug report,原因是在某次merge中移除了这个&lt;code&gt;qtmultimediadefs.h&lt;/code&gt;这个文件，&lt;strong&gt;很多头文件的声明被更名到&lt;code&gt;qtmultimediaglobal.h&lt;/code&gt;，&lt;/strong&gt;，并进行了一些其他的修改，但是在打包成安装包的过程中出现了一些问题，加粗部分的变动并没有打进安装包，导致所有引用了qtmultimedia功能的程序均无法编译。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Debian利用Squid3搭建Pac代理，端口25</title>
      <link>/2017/08/423/</link>
      <pubDate>Sat, 12 Aug 2017 00:00:00 +0000</pubDate>
      
      <guid>/2017/08/423/</guid>
      <description>虽然平时都是用shadowsocks，但是偶尔在没有条件的时候也会用到Pac来救急（通常是在我的chromebook上）,在网上找PAC不是</description>
    </item>
    
    <item>
      <title>Git push 失败，提示&#39;receive.denyCurrentBranch&#39; configuration variable to &#39;refuse&#39;.</title>
      <link>/2017/08/420/</link>
      <pubDate>Tue, 01 Aug 2017 00:00:00 +0000</pubDate>
      
      <guid>/2017/08/420/</guid>
      <description>在VPS上新建了一个Git仓库，本地开发测试完了以后直接通过Git Push上去，不用SCP传了 但是却提示remote: error: &#39;receive.denyCurrentBranch&#39; configuration variable to &#39;refuse&#39;. 查了一下，</description>
    </item>
    
    <item>
      <title>Debian 9 stretch 解决网易云音乐(NetEase-music)的依赖问题</title>
      <link>/2017/04/415/</link>
      <pubDate>Sun, 09 Apr 2017 00:00:00 +0000</pubDate>
      
      <guid>/2017/04/415/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;明明记得stretch已经冻结了，于是无聊的时候直接从jessie升级上了stretch,内核升级到4.9带来了一堆问题，但是最麻烦的还是一些旧的软件包被废弃了，导致一些软件的依赖满足不了。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>造轮子能走多远？Ubuntu最终放弃了Unity</title>
      <link>/2017/04/414/</link>
      <pubDate>Sat, 08 Apr 2017 00:00:00 +0000</pubDate>
      
      <guid>/2017/04/414/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;长久以来，Ubuntu一直是我讨厌的发行版。虽然我一向不参与发行版之间的无止境的争吵，但是Ubuntu是例外。“分裂”，“吸血”，“商业化”等一直是我对它的固有印象。但是如今这么一个发行版最终在造轮子的路上走到了头，碰的头破血流，竟还是忍不住一丝感慨。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>Crouton安装Debian 9&#43;xfce4后出现触摸板不能轻触点击的问题</title>
      <link>/2017/04/413/</link>
      <pubDate>Mon, 03 Apr 2017 00:00:00 +0000</pubDate>
      
      <guid>/2017/04/413/</guid>
      <description>这个问题蛮少见的，因为完整安装Debian的话应该是会带这个驱动，但是利用Crouton安装出来的Debian没有，所以导致我的Chrome</description>
    </item>
    
    <item>
      <title>RSA与AES加密杂谈——兼Python实现</title>
      <link>/2016/05/rsa%E4%B8%8Eaes%E5%8A%A0%E5%AF%86%E6%9D%82%E8%B0%88-%E5%85%BCpython%E5%AE%9E%E7%8E%B0/</link>
      <pubDate>Sun, 22 May 2016 00:00:00 +0000</pubDate>
      
      <guid>/2016/05/rsa%E4%B8%8Eaes%E5%8A%A0%E5%AF%86%E6%9D%82%E8%B0%88-%E5%85%BCpython%E5%AE%9E%E7%8E%B0/</guid>
      <description>&lt;blockquote&gt;本文代码部分大量参考于http://www.jianshu.com/p/6a39610122fa&lt;/blockquote&gt;
&lt;blockquote&gt;使用的Pycryto库的API：https://www.dlitz.net/software/pycrypto/apidoc/ &lt;/blockquote&gt;
环境要求:Python 2.7,Pycryto库</description>
    </item>
    
    <item>
      <title>Python2生成简单验证码</title>
      <link>/2016/04/python2%E7%94%9F%E6%88%90%E7%AE%80%E5%8D%95%E9%AA%8C%E8%AF%81%E7%A0%81/</link>
      <pubDate>Sat, 23 Apr 2016 00:00:00 +0000</pubDate>
      
      <guid>/2016/04/python2%E7%94%9F%E6%88%90%E7%AE%80%E5%8D%95%E9%AA%8C%E8%AF%81%E7%A0%81/</guid>
      <description>&lt;p&gt;使用python2.7环境编写，原因是Python2.7内置了PIL库，而Python3需要手动安装Pillow库，且Pillow还依赖几个其他的库。功能很简单，所以就不想折腾了。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>解决Debian和windows相差八小时的问题</title>
      <link>/2016/04/%E8%A7%A3%E5%86%B3debian%E5%92%8Cwindows%E7%9B%B8%E5%B7%AE%E5%85%AB%E5%B0%8F%E6%97%B6%E7%9A%84%E9%97%AE%E9%A2%98/</link>
      <pubDate>Sun, 10 Apr 2016 00:00:00 +0000</pubDate>
      
      <guid>/2016/04/%E8%A7%A3%E5%86%B3debian%E5%92%8Cwindows%E7%9B%B8%E5%B7%AE%E5%85%AB%E5%B0%8F%E6%97%B6%E7%9A%84%E9%97%AE%E9%A2%98/</guid>
      <description>&lt;p&gt;windows在查询时间时，采用读取&lt;em&gt;CMOS&lt;/em&gt;时间作为标准时间,而Linux如果采用UTC（世界协调时）时间，则会在读取CMOS时间后，按照时区（北京时间为东八区）来计算时间，所以如果不小心在Linux中启用了UTC时间，就总是会和windows相差八小时。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>关于chromebook在安装crouton后没有声音的解决办法</title>
      <link>/2016/03/%E5%85%B3%E4%BA%8Echromebook%E5%9C%A8%E5%AE%89%E8%A3%85crouton%E5%90%8E%E6%B2%A1%E6%9C%89%E5%A3%B0%E9%9F%B3%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/</link>
      <pubDate>Fri, 25 Mar 2016 00:00:00 +0000</pubDate>
      
      <guid>/2016/03/%E5%85%B3%E4%BA%8Echromebook%E5%9C%A8%E5%AE%89%E8%A3%85crouton%E5%90%8E%E6%B2%A1%E6%9C%89%E5%A3%B0%E9%9F%B3%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/</guid>
      <description>&lt;blockquote&gt;
  最近去弄了一台chromebook回来，13寸1080p屏幕，8小时以上的超级续航，不到200刀的价格，Linux原生支持，这价格也没有谁可以比了.
&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>关于Py2exe对Pyqt5.uic报错的解决</title>
      <link>/2016/03/%E5%85%B3%E4%BA%8Epy2exe%E5%AF%B9pyqt5%E6%89%93%E5%8C%85%E4%B8%AD%E7%9A%84%E5%87%A0%E4%B8%AA%E5%9D%91/</link>
      <pubDate>Sat, 05 Mar 2016 00:00:00 +0000</pubDate>
      
      <guid>/2016/03/%E5%85%B3%E4%BA%8Epy2exe%E5%AF%B9pyqt5%E6%89%93%E5%8C%85%E4%B8%AD%E7%9A%84%E5%87%A0%E4%B8%AA%E5%9D%91/</guid>
      <description>&lt;p&gt;先上代码&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Python利用Qtcreator和Pyqt快速创建GUI</title>
      <link>/2016/02/python-%E5%88%A9%E7%94%A8qtcreator%E5%92%8Cpyqt%E5%BF%AB%E9%80%9F%E5%88%9B%E5%BB%BAgui/</link>
      <pubDate>Sun, 28 Feb 2016 00:00:00 +0000</pubDate>
      
      <guid>/2016/02/python-%E5%88%A9%E7%94%A8qtcreator%E5%92%8Cpyqt%E5%BF%AB%E9%80%9F%E5%88%9B%E5%BB%BAgui/</guid>
      <description>&lt;p&gt;利用qtcreator创建简单的界面很容易，生成一个xml格式化的ui文件，再在python里面载入这个ui文件即可快速编写GUI。关于按钮点击等编写qtcreator同样可以完成。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Debian开放AP热点</title>
      <link>/2015/11/debian%E5%BC%80%E6%94%BEap%E7%83%AD%E7%82%B9/</link>
      <pubDate>Thu, 19 Nov 2015 00:00:00 +0000</pubDate>
      
      <guid>/2015/11/debian%E5%BC%80%E6%94%BEap%E7%83%AD%E7%82%B9/</guid>
      <description>&lt;li&gt;&lt;strong&gt;4.Debian开放AP热点&lt;/strong&gt;&lt;/li&gt;
&lt;a href=&#34;http://www.cutinlove.com/2015/11/ubuntu/139.html&#34;&gt;Ubuntu建立AP热点&lt;/a&gt;
由于Ubuntu和Debian那暧昧的关系，我天真的以为能够照搬这个教程。结果出现了卡在Starting wifi这个步骤。</description>
    </item>
    
    <item>
      <title>man?不，你需要cheat</title>
      <link>/2015/10/man%E4%B8%8D-%E4%BD%A0%E9%9C%80%E8%A6%81cheat/</link>
      <pubDate>Fri, 30 Oct 2015 00:00:00 +0000</pubDate>
      
      <guid>/2015/10/man%E4%B8%8D-%E4%BD%A0%E9%9C%80%E8%A6%81cheat/</guid>
      <description>&lt;p&gt;Linux界有一个经典的俗语，不懂就问男人。 即man命令。&lt;/p&gt;
&lt;p&gt;但是，&lt;span style=&#34;color: #ff0000;&#34;&gt;man实在是太冗长了。&lt;/span&gt;&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>