使用 cloudflare 转发 ipv6 网页至 ipv4
Descript for artical
Descript for artical
Descript for artical
Descript for artical
Descript for artical
Descript for artical
通过 GithubPage 或者 Vercel, Netlify 发布 Hugo 博客的记录
通过Hugo的短代码功能,拓展主题的功能,使博客能够支持更多的样式
利用render hook修改markdown元素的默认渲染样式
进一步对PaperMod主题修改,设置侧边目录,侧边导航栏,评论区等功能
以PaperMod主题为例,初始化hugo主题,并配置一些基础的功能
test hugo's shortcode function
使用类前置声明来解决CPP头文件相互包含带来的编译问题
<h2 id="troubleshooting-故障排查">TroubleShooting 故障排查</h2> <h3 id="credential-related">Credential Related</h3> <blockquote class="alert-blockquote alert-error"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Error</span> </p> <p>error getting credentials - err: exec: “docker-credential-desktop.exe”: executable file not found in $PATH, out: ``</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>如果页面的功能较为复杂,且涉及到了从服务端获取数据等操作,如果简单的使用同步编程,等待一个个任务按顺序执行,由于网络或者某些时间复杂度较高的操作,导致网页加载时间过长,或者使用逻辑不合理(加载某些资源的同时无法进行浏览等),因此异步编程的特性在 web 端是十分重要的。</p> </blockquote> <p>通过<strong>异步编程</strong>使一个长时间运行的任务运行的同时能够对网页做出其他的操作和对其他事件做出相应,而不需等待该任务完成,以下的这些功能就是最常见需要异步完成的;</p> <ul> <li><code>fetch</code> 发起 http 请求</li> <li><code>getUserMedia()</code> 获取用户的摄像头和麦克风</li> <li><code>showOpenFilePicker()</code> 请求用户选择文件以供访问。</li> </ul> <h2 id="基于事件处理程序实现异步">基于事件处理程序实现异步</h2> <blockquote> <p>事件处理的逻辑实际上也是一种接近异步编程的方式,对应的函数不是即时执行,而是等事件被触发后在进行调用。一些早期的异步 API 就是这样使用事件的。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>本篇是 <a href="https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/JSON" target="_blank" rel="noopener">Mdn 使用 JSON</a> 一文的阅读笔记,对 web 开发中的 JSON 进行了介绍</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>JS 中的一切变量皆为对象,可以将对象理解为一个包含相关数据和方法的集合(变量 & 函数)我们也将其称之为属性和方法,就像我们在 python 里做的那样,本篇为 <a href="https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Basics" target="_blank" rel="noopener">mdn_JS对象基础</a> ,<a href="https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Object_prototypes" target="_blank" rel="noopener">mdn_JS对象原型</a> 的阅读笔记</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>web-js 中主要的编程方式就是需要结合browser 的事件和属性来实现对页面的动态控制,事件章节可以说是web 动态编程中的核心部分了,了解主要存在和需要被控制的事件是相当重要的。</p> </blockquote> <h2 id="常见的浏览器事件">常见的浏览器事件</h2> <p>下面列出一些常见的事件类型和具体事件,更多的事件可以<a href="https://developer.mozilla.org/zh-CN/docs/Web/Events" target="_blank" rel="noopener">参考Mdn</a> ,在设计页面的时候可以考虑我们希望获得什么效果来找寻是否有对应的事件来构建对应的动态响应。</p>
<h2 id="js-基础语法">JS 基础语法</h2> <blockquote> <p>该部分的学习除了 MDN 的相关知识,会结合数据结构的内容来进行学。</p> </blockquote> <p>语言的第一印象和 python 有许多相似的地方。语法上可能大差不差,在循环和其他一些变量上又有一些和 C#,CPP 相似的地方。</p> <h3 id="basic-rules-基础规则简介">Basic Rules 基础规则简介</h3> <p>首先介绍基本的编写规则:如注释、缩进规则、变量规则等…</p> <ul> <li><strong>注释</strong>:CPP 相同使用 <code>//</code> 和 <code>/* */</code> 进行行/块注释。</li> <li><strong>句尾</strong> <code>;</code> :单行单条语句结束可以无需 <code>;</code> (但为了规范和明确可以加上),同行多个语句可以用 <code>;</code> 进行语句的区分。</li> </ul> <h3 id="变量">变量</h3> <blockquote> <p>声明变量使用:<a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/var" target="_blank" rel="noopener"><code>var</code></a> , <a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/let" target="_blank" rel="noopener"><code>let</code></a> , <a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/const" target="_blank" rel="noopener"><code>const</code></a> 三个关键词;其中 <code>let</code> 和 <code>const</code> 是相似的,用于声明块级作用域的局部变量,只有在声明的位置之后才能使用,唯一的区别在于 <code>const</code> 声明的常量不能用赋值运算符直接更改,(但如果是个对象,它的属性可以被添加、更新、删除)</p> </blockquote> <p><strong>变量定义:</strong>(另起一个 Paragraph 表示尊重) JS 为非强类型语言(即类似 python 而非 cpp),为<strong>动态类型语言</strong>,变量声明<strong>无需指定类型</strong>。但有以下几个注意的事项:</p> <ul> <li>(不推荐)不带关键字的变量声明会默认为全局变量。</li> <li>(推荐)可以使用 <code>let</code> 或 <code>var</code> 关键字定义变量。</li> <li>(最推荐)最推荐使用 <code>let</code> 进行变量的声明,var 对变量定义位置的要求更低,使用 var 编写可能会方便,但是在后续维护和阅读中可能会体验很差。使用 <code>let</code> 然后和别的语言一样声明和使用变量。</li> <li>可以使用 <code>typeof</code> 来检查变量类型</li> </ul> <p>其中对于变量的定义上,Var 和 let 的详细差别可以参考 <a href="https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Variables#var_%E4%B8%8E_let_%E7%9A%84%E5%8C%BA%E5%88%AB" target="_blank" rel="noopener">var与let的区别</a> ,<a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/var#%E5%8F%98%E9%87%8F%E6%8F%90%E5%8D%87" target="_blank" rel="noopener">var变量提升</a> ,简单的讲 var 的定义会先于所有的语句执行,声明一个全局的变量。下面简单介绍一下各种不同的数据类型:</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>本篇读书笔记主要记录书中一些投资理财相关的概念、一些思维方式、一些典型的策略等等,用于自己后续理财的基础。</p> </blockquote> <p>“投资理财越早开始越好,无需拘泥于启动资金的多少,时间才是投资理财中最重要的增长因子”。</p> <hr> <h2 id="财务自由">财务自由</h2> <h3 id="需要多少钱才能财富自由">需要多少钱才能财富自由</h3> <p>4%法则(William Bengen):通过投资一组资产,每年从退休金中提取不超过 4%的金额用来支付自己的生活所需,那么直到自己趋势,退休金都花不完。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>设计个人首页作为 HTML 和 CSS 的实战,主要设计以下的几个部分,导航栏,侧边栏,logo,页脚,背景,以及一个简单的个人介绍页面,首先不考虑使用框架和库,仅对整体流程做熟悉,使用纯 HTML 和 CSS 进行基础实现。后续考虑使用框架和组件库进行重写。</p>
<ul> <li><a href="https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Responsive_Design" target="_blank" rel="noopener">响应式设计的历史和思路:</a> </li> <li><a href="https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Media_queries" target="_blank" rel="noopener">媒介查询的入门 与或非等语句</a> </li> <li><a href="https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Legacy_Layout_Methods" target="_blank" rel="noopener">传统的布局方法</a> </li> </ul> <p>尽可能使用现代的布局方法,我们可能不需要媒介查询的方式去实现响应式设计了,当然我们也可以结合媒介查询去对现代布局方式做优化。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>这里 CSS 的布局指的是通过控制元素的属性:宽度,高度,块(不同类型),内联等来实现在 HTML 的基础上对整体页面的布局进行调整。将其排布在页面上。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>这一章节主要是涵盖开发 css 的各部分,有一些需要掌握的技能的 TODO 还有一些代码风格之类的东西</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>表格的部分主要还是要实操,<a href="https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Building_blocks/Styling_tables" target="_blank" rel="noopener">MDN</a> 中给了一个例子,这里给我的启示是要更多的去阅读<a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_table" target="_blank" rel="noopener">表格的相关属性</a> ,或者去阅读别人对表格设计中用到的元素,才能更好的掌握一些设计的思路,这里就给出本文中给出的一些常见的属性和设置方法,后续在具体实践中慢慢补充。</p> </blockquote> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>css</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="nt">table</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">table-layout</span><span class="p">:</span> <span class="kc">fixed</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="k">width</span><span class="p">:</span> <span class="mi">100</span><span class="kt">%</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="k">border-collapse</span><span class="p">:</span> <span class="kc">collapse</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">3</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">purple</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nt">thead</span> <span class="nt">th</span><span class="p">:</span><span class="nd">nth-child</span><span class="o">(</span><span class="nt">1</span><span class="o">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">width</span><span class="p">:</span> <span class="mi">30</span><span class="kt">%</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nt">thead</span> <span class="nt">th</span><span class="p">:</span><span class="nd">nth-child</span><span class="o">(</span><span class="nt">2</span><span class="o">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">width</span><span class="p">:</span> <span class="mi">20</span><span class="kt">%</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nt">thead</span> <span class="nt">th</span><span class="p">:</span><span class="nd">nth-child</span><span class="o">(</span><span class="nt">3</span><span class="o">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">width</span><span class="p">:</span> <span class="mi">15</span><span class="kt">%</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nt">thead</span> <span class="nt">th</span><span class="p">:</span><span class="nd">nth-child</span><span class="o">(</span><span class="nt">4</span><span class="o">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">width</span><span class="p">:</span> <span class="mi">35</span><span class="kt">%</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nt">th</span><span class="o">,</span> </span></span><span class="line"><span class="cl"><span class="nt">td</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">padding</span><span class="p">:</span> <span class="mi">20</span><span class="kt">px</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><ul> <li>当为表格设置初始样式的时候,使用 layout 为 fixed 会使得表格的行为更好预测,避免由于内容产生的畸变导致难以设置或者出现一些奇怪对齐情况,使用 fixed 然后设置每一列的宽度,在对内容进行处理可能更好。</li> <li>使用 <code>nth-child</code> 设置每一列的宽度,最终相加为 100%,使得在不同分辨率下比较好控制。</li> <li><code>border-collapse: collapse;</code> 原本两个格子之间会有两条边线,这样的话可以合并重叠的边线,让表格更符合我们的预期。</li> <li>使用 <code>text-align</code> 设置对齐方式</li> <li>使用 <code>thead</code>,<code>tfoot</code>,<code>tbody</code> 来分别设置样式,可以做出类似三线表之类的东西</li> <li>为标题 <code>caption</code> 设置对应的样式</li> </ul> <p>后续可能会找一些比较常见的表之类的来整理,& 查看一下组件库。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>该篇章主要收集一些常见的样式设置的参考页和一些需要记住的重要设置内容,由于不可能记住所有的属性和设置,善用查询可能才是唯一的王道。</p> </blockquote> <hr> <h2 id="css-中的值与单位">CSS 中的值与单位</h2> <p><a href="https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Building_blocks/Values_and_units" target="_blank" rel="noopener">CSS 中的值与单位</a> 这里介绍常见的一些值和单位,有一些新的可能会有所缺失,但是大部分都有了,这里可以列举几个常见但是之前不理解的。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>HTML 和 CSS 中,所有的元素都是基于一个个的 Box 去渲染的,理解盒子模型的设计,才能知道如何进行布局,从而使的页面按照希望的样子呈现,该定义实际上和 HTML 的块级元素和内联元素使完全相对应的。需要注意两者之间的关联性。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>本章节是额外对于优先级的补充章节,在使用上可能会没有明显的感知,但是从概念上理解 CSS 的优先级和后续复杂项目的开发中还是起到了比较大的作用,该章节介绍层叠层的概念,在原先的优先级判定上添加了层的概念。</p> </blockquote> <h2 id="层叠概念回顾">层叠概念回顾</h2> <p>该 Section 内容完全摘录自 MDN CSS 教程,也算是对于整体重要性和优先级的一个很好的总结。</p>
<blockquote class="alert-blockquote alert-note"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Note</span> </p> <p><ol> <li>你永远无法记住所有的 CSS 属性,善用参考资料:<a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference" target="_blank" rel="noopener">MDN CSS reference</a> 和 GPT</li> <li>善用浏览器的开发者面板在页面上及时编辑 CSS。</li> </ol> </blockquote> <h2 id="css-运行逻辑">CSS 运行逻辑</h2> <p>前面在 <a href="tmp/LearnWeb00-Web%e5%85%a5%e9%97%a8.md">LearnWeb00-Web入门</a> 中简单提及了浏览器以及 CSS 起了什么作用,这里则是对于 CSS 是如何具体参与进页面的渲染的讲解,包括早该知道的 DOM 的定义也会在这里介绍,是 <a href="https://developer.mozilla.org/zh-CN/docs/Learn/CSS/First_steps/How_CSS_works" target="_blank" rel="noopener">CSS 是如何运行</a> 的读书笔记。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>HTML 中需要使用 CSS 进行样式组合才能得到一个阅读体验较好的表格,目前还是先专注在 HTML 的部分,后面到 CSS 部分的时候再合起来一起看。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>接下来主要探讨 HTML 中的多媒体元素,图片、视频、音频以及 iframe 等等。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>本章节在 HTML01 的基础上加深对于一些基础概念,标签等的认知,还是以 HTML 编写的基础知识为主。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>JS 除了 WEB 在现代还有很多 NodeJS 的应用也会使用 JS,这里只介绍 web 相关的 JS 代码编写的部分。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>在前文 web 入门中已经简单介绍了 CSS 是如何起作用,如何与 HTML 进行相互合作的,本篇主要简单介绍如何编写 CSS 文件中的各种样式。</p>
<blockquote class="alert-blockquote alert-intro"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Intro</span> </p> <p>在 Web 入门,How HTML Work 部分已经简单介绍过,HTML 是一种定义内容结构的标记语言,通过一系列标记(确定其表现形式)和对应内容组成的元素,嵌套,排列,构成完整的页面。本文主要是整理和熟悉一下基础的标记元素</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>Familiar with the pipeline of how to build a website, how to organize the files, etc…</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>Web 前端开发者路线学习,基本的目的是能够为自己想做的项目搭建前端界面,从 web 开始再到各个移动设备的前端 UI,基于 Mdn 课程,Roadmap 具体项目逐步推进对各个知识点的学习。</p>
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>有一些希望能在后台运行的任务,例如 nohup,tmux,screen 可实现的一些功能,简单介绍以下 powershell 中的类似用法和功能。</p>
Secure and Personalize Your Web Services: A Guide to Nginx Authentication and Engaging Frontend Design
使用StableDiffusion客制化自己的QRCode的教程
<blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p> <p>在搭建了 Immich 服务之后,考虑到数据本身的重要性,又对硬盘本身的寿命和各种数据安全的场景有所顾虑,对加密备份的需求就浮出水面了,希望能有一个备份的预案来对抗各种数据风险,因此有本篇文章,对各种备份工具做简单调研和选择。</p> </blockquote> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231229113137.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231229113137.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231229113137.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
<head> <script src="https://mirrors.sustech.edu.cn/cdnjs/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script> </head> <div class="hugo-encryptor-container"> <div class="hugo-encryptor-prompt"> <p>文章的部分内容被密码保护:</p> </div> <div class="hugo-encryptor-form"> <input class="hugo-encryptor-input" placeholder='请输入密码' /> <input class="hugo-encryptor-button" type="button" value='CLICK' onclick="_click_handler(this)" /> </div> <div class="hugo-encryptor-cipher-text" data-password="aikenhong_blog" style="display: none;" > <span style="display: none;">--- DON'T MODIFY THIS LINE ---</span> <blockquote class="alert-blockquote alert-summary"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Summary</span> </p>
<h2 id="禁止屏幕休眠显示作为-dashboard-显示">禁止屏幕休眠显示作为 Dashboard 显示</h2> <blockquote> <p>树莓派官方的 Raspbian 系统使用的是 lightdm 桌面显示管理器,可以设置 xservice 桌面交互显示来达到屏幕常亮的目的,也就是修改桌面配置文件 lightdm.Conf</p> </blockquote> <p>参考资料:<a href="http://www.raspi.cc/read-10-1.html" target="_blank" rel="noopener">树莓派设置禁止让屏幕休眠,显示器保持常亮状态-树莓派基础学习入门-树莓派极客,raspi.cc - Powered by raspi</a> </p> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>shell</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo vim /etc/lightdm/lightdm.conf</span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><p>找到 x-server-command 取消注释并在后面加 <code>-s 0-dpms</code>,添加完后重启即可。</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231111132731.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231111132731.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231111132731.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
<h2 id="intro-问题描述">Intro 问题描述</h2> <p>以 emby 为例,学习如何对这种自托管的服务,请求验证网站的软件进行破解,破解的整体思路分为以下的两类:</p> <blockquote> <p>一种是改客户端,一种是改服务端。两种方式的最终原理一样,都是搭建仿冒认证服务器,客户端访问伪服务器拿到授权信息;【3】</p> </blockquote> <p>因此无论是那种方法我们都需要搭建伪验证服务器:所以以下的操作是必须的:</p> <ol> <li>抓取定位到验证服务器的地址,并获取验证服务器返回的验证信息格式;</li> <li>使用 Nginx 搭建虚拟的验证服务器,使其返回激活/验证信息;</li> </ol> <p>如果是<strong>修改客户端</strong>,则在搭建完验证站后需要:</p> <ul> <li>修改 Host 文件,将请求验证服务器的请求劫持到本地搭建的服务上;</li> <li>需要伪服务器和客户端都要安装自签名证书</li> </ul> <p>如果是<strong>修改服务端</strong>,则后续需要:</p> <ul> <li>修改服务端源文件,将默认的认证服务器 mb3admin.com 地址直接改成伪服务器</li> <li>这样就<strong>不需要安装自签名证书</strong></li> </ul> <p>如果是使用 Docker 进行部署的 emby 可以使用别人修改好的服务端的镜像进行部署安装(like 开心版)</p> <p>本文主要介绍验证服务器的搭建、修改客户端的方法,以及一些其他的注意事项;</p> <h2 id="server-伪验证服务器搭建">Server 伪验证服务器搭建</h2> <h3 id="ca-证书申请">CA 证书申请</h3> <blockquote> <p>什么是证书:<a href="https://aws.amazon.com/cn/what-is/ssl-certificate/" target="_blank" rel="noopener">什么是 SSL 认证?- SSL/TLS 认证简介 - AWS (amazon.com)</a> </p> </blockquote> <p>这里由于我们并没有真正拥有认证网站 md3admin 的域名故而没有对应的证书文件,因此需要为自己的服务自签发一个假的证书文件,并手动让浏览器信任该证书,保证在将该域名通过 hosts 修改转移到自己的服务上时,浏览器能正常请求该页面。</p> <p>下面介绍证书的签发过程(转载自参考文献:【2】):</p> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>shell</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">mkdir -p <username>/<docker-file-path>/nginx/cert/mb3admin.com <span class="o">&&</span> <span class="nb">cd</span> <username>/<docker-file-path>/nginx/cert/mb3admin.com </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># 生成 CA 密钥</span> </span></span><span class="line"><span class="cl">openssl genrsa -out ca.key <span class="m">2048</span> </span></span><span class="line"><span class="cl"><span class="c1"># 生成 CA 证书</span> </span></span><span class="line"><span class="cl">openssl req -x509 -new -nodes -key ca.key -subj <span class="s2">"/C=CN/ST=Beijing/L=Beijing/O=<username>/OU=<username>/CN=<username>/emailAddress=<user-email>"</span> -days <span class="m">36500</span> -out ca.crt </span></span><span class="line"><span class="cl"><span class="c1"># 将 CA 转换成 p12 格式,并指定密码 (<username>)</span> </span></span><span class="line"><span class="cl">openssl pkcs12 -export -clcerts -in ./ca.crt -inkey ca.key -out ca.p12 -password pass:<username> </span></span><span class="line"><span class="cl"><span class="c1"># 将 p12 格式的证书 Base64 编码</span> </span></span><span class="line"><span class="cl">base64 ca.p12 </span></span><span class="line"><span class="cl"><span class="c1"># Base64 一行不能超过 76 字符,超过则添加回车换行符。如果因为换行的原因,不能安装证书,可以使用 -w 参数</span> </span></span><span class="line"><span class="cl">base64 -w <span class="m">0</span> ca.p12 </span></span><span class="line"><span class="cl"><span class="c1"># 将 CA 转换成 pem 格式</span> </span></span><span class="line"><span class="cl">openssl x509 -outform pem -in ca.crt -out ca.pem </span></span><span class="line"><span class="cl"><span class="c1"># 生成服务端私钥 server.key</span> </span></span><span class="line"><span class="cl">openssl genrsa -out server.key <span class="m">2048</span> </span></span><span class="line"><span class="cl"><span class="c1"># 生成服务端证书请求 server.csr</span> </span></span><span class="line"><span class="cl">openssl req -new -sha256 -key server.key -out server.csr -subj <span class="s2">"/C=CN/L=Beijing/O=<username>/OU=<username>/CN=mb3admin.com/CN=*.mb3admin.com"</span> </span></span><span class="line"><span class="cl"><span class="c1"># 生成服务端证书 server.crt</span> </span></span><span class="line"><span class="cl">openssl x509 -req -extfile <<span class="o">(</span><span class="nb">printf</span> <span class="s2">"subjectAltName=DNS:mb3admin.com,DNS:*.mb3admin.com"</span><span class="o">)</span> -days <span class="m">3650</span> -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt</span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><p>上述代码中替换一下自己的相关信息即可(也可以直接去参考资源中获取直接执行的代码):</p>
<blockquote> <p>本系列主要介绍通过公网的 ipv6 访问局域网设备并部署自己的服务供公网访问;本篇是其中的第三篇,以 DDNS-go 开源项目为例,部署动态域名解析服务,自动更新主机记录值。</p> </blockquote> <p><a href="https://github.com/jeessy2/ddns-go" target="_blank" rel="noopener">jeessy2/ddns-go: 简单好用的DDNS。自动更新域名解析到公网IP(支持阿里云、腾讯云、Dnspod、Cloudflare、Callback、华为云、百度云、Porkbun、GoDaddy、Google Domain) (github.com)</a> </p> <p>该工具使用起来非常简单,推荐需要动态域名解析的可以尝试使用该工具,简单介绍工具的使用如下:</p> <h2 id="配置-ddns-go">配置 DDNS-GO</h2> <p>前往 <a href="https://github.com/jeessy2/ddns-go/releases/tag/v5.6.6" target="_blank" rel="noopener">release</a> 页面下载对应系统的版本:</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20231108083156.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20231108083156.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20231108083156.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p> <p>解压后双击打开 ddns-go.exe 会自动弹出配置的界面:locahost:9876,选择需要解析域名的 DNS 服务商,选择创建密钥并填入对应的密钥。</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20231108083447.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20231108083447.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20231108083447.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
<blockquote> <p>本系列主要介绍通过公网的 ipv6 访问局域网设备并部署自己的服务供公网访问;本篇是其中的第二篇,以腾讯云和 Nginx 为例,介绍如何将服务部署到 https://域名 。</p> </blockquote> <p>需要以下的事前准备:</p> <ul> <li>腾讯云/阿里云/Cloudflare 等随便一个地方购买一个自己的域名</li> <li>公网 ipv4/ipv6 地址</li> <li>本地部署一个服务以供测试</li> </ul> <h2 id="nginxdocker-安装">Nginx(Docker) 安装</h2> <blockquote> <p>这里选择 Docker 来分离安装 Nginx 服务,Docker 部署的优势这里就不再赘述,这里建议使用 portainer 进行容器管理和运行状态查看。</p> </blockquote> <p>首先创建存放 Nginx 配置文件和证书文件的目录,后续挂载给 Nginx Contrainer 使用:</p> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>shell</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">mkdir -p /home/username/docker-file/nginx/conf.d </span></span><span class="line"><span class="cl">mkdir -p /home/username/docker-file/nginx/cert</span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><blockquote> <p>配置文件存放到 <code>conf.d</code> 中,<strong>各种 SSL 证书则存放到</strong> <code>cert</code> 文件夹中;</p>
<p>Windows11基于 WSL2启动 docker 后报错如下(需要注意有时候使用启动命令会报错,但是 restart 命令 docker 可以运行,对应服务无法访问)</p> <blockquote> <p><strong>Bind: An attempt was made to access a socket in a way forbidden by its access permissions.</strong></p> </blockquote> <p>观察错误发现占用的信息为2345,从 windows 和 wsl 中分别查看端口是否被占用:</p> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>powershell</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="n">netstat</span> <span class="n">-aon</span><span class="p">|</span><span class="n">findstr</span> <span class="s2">"2345"</span></span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>shell</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">netstat -tunlp <span class="p">|</span> grep <span class="m">2345</span></span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><p>均显示没有被占用,这可能是由于协议 tcp 使用的动态端口问题导致,可以使用管理员权限在 powershell 或者 cmd 中执行下列命令查看端口是否在动态范围中:</p>
<blockquote> <p>本系列主要介绍通过公网的 ipv6 访问局域网设备并部署自己的服务供公网访问;本篇是其中的第一篇,以电信宽带为例,说明如何开启 ipv6 服务和外网访问放行。</p> </blockquote> <p>开启 IPV6 服务主要需要修改两个地方的配置:**光猫开启桥接模式和 IPV6 **、<strong>路由器修改为 pppoe 拨号模式以及防火墙设置</strong>;这里以本人的电信光猫和小米路由器为例:</p> <h2 id="背景介绍">背景介绍</h2> <p>需要在外网访问部署于家庭内网的一些服务,考虑了以下的几个方案,决定使用 ipv6作为核心</p> <table> <thead> <tr> <th>类型</th> <th>方案</th> <th>简要说明</th> </tr> </thead> <tbody> <tr> <td>内网穿透</td> <td>Zerotier</td> <td>免费,需要注册账户,支持移动端,国内速度极慢,且不稳定</td> </tr> <tr> <td>内网穿透</td> <td>Tailscale(备用)</td> <td>免费,需要注册账号,支持移动端,国内速度一版,稳定性相 Zetotier 较好,但仍不够稳定</td> </tr> <tr> <td>内网穿透</td> <td>frp</td> <td>申请一个有公网的服务器,使用 frp 自己作为内网穿透的中转,贵,较为麻烦</td> </tr> <tr> <td>公网 IP</td> <td>Ipv4</td> <td>难以申请,其他都好</td> </tr> <tr> <td>公网 IP</td> <td>Ipv6(主力)</td> <td>获取简单,需要配置一下光猫使用,一劳永逸,快,稳定,多,有暴露公网的危险,需要设置防火墙</td> </tr> <tr> <td>其他</td> <td>Cloudflare Zerotrust</td> <td>简单,免费,可以绑定域名,但是网站根本登不进去配置页面,速度不快</td> </tr> </tbody> </table> <h2 id="光猫设置">光猫设置</h2> <p>查看光猫背面的管理员 url,进入光猫管理界面,登录<strong>超级管理员账户</strong>(非普通账户,会跳转到更详细的管理页面,大部分同地区的超级管理员账户应该是一致的,不对可以询问下宽带师傅)</p> <ul> <li>管理地址通常为:192.168.1.1</li> <li>超级管理员账号:useradmin</li> <li>超级管理员密码:nE7jA%5</li> </ul> <p>开始之前准备 PPPoe 拨号的帐号和密码,不知道的话等询问好了再开始操作。</p> <p>在天翼网关->网络->网络设置中进行如下的操作:(这里可以尝试改成 pppoe 并通过开发者模式查看密码,不知道密码不要轻易进行后续操作)</p> <ol> <li>连接名称选择 <code>+++INTERENT_R_VID_41</code></li> <li>连接模式从路由改为桥接</li> <li>IP 模式确认为 <code>IPv4&IPv6</code></li> <li>点击保存/应用</li> </ol> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20231105215512.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20231105215512.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20231105215512.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
<p>该文作为基础的闪念卡片的使用说明,介绍几种闪念卡片定义的方式,便于后续查阅,参考:</p> <ul> <li><a href="https://zhuanlan.zhihu.com/p/558326315" target="_blank" rel="noopener">Obsidian: Spaced Repetition插件使用指南 </a> </li> <li><a href="https://www.stephenmwangi.com/obsidian-spaced-repetition/" target="_blank" rel="noopener">Index - Obsidian Spaced Repetition</a> </li> </ul> <h2 id="基本规则">基本规则</h2> <ul> <li>单个确定为 Flashcards 的笔记文件中可以存放多个闪念卡片。</li> <li>会根据记忆程度来设立需要复习的时间</li> </ul> <h2 id="卡片分组">卡片分组</h2> <p>在 Tab 中使用 <code>/</code> 可以引出卡片界面的层级,只需要在设置里设定最高层的分组,后续的分组用 <code>/</code> 引出即可。</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231027212958.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231027212958.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231027212958.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p> <p>使用以下的标签就能实现上述的分组结果:<code>#vocabulary/day00</code>;需要注意到的是只有至少一个问答时才会显示在对应的表中。</p> <h2 id="卡片制作">卡片制作</h2> <p>在使用标签确定为 FlashCard 的页面可以使用如下的格式来定义一个一个的问答卡片,基础问答卡片的制作以如下的格式确认:</p> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>txt</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">Question :: Answer.</span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"> <script src="https://cdn.jsdmirror.com/npm/jquery@3.3.1/dist/jquery.min.js"></script> <link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/nanogallery2@3.0.5/dist/css/nanogallery2.min.css"> <script src="https://cdn.jsdmirror.com/npm/nanogallery2@3.0.5/dist/jquery.nanogallery2.min.js"></script> </head> <body> <div data-nanogallery2='{ "thumbnailDisplayTransition": "none", "thumbnailDisplayTransitionDuration": 500, "thumbnailDisplayInterval": 30, "galleryDisplayTransition": "none", "galleryDisplayTransitionDuration": 500, "galleryDisplayMode": "rows", "thumbnailDisplayOutsideScreen": "false", "eventsDebounceDelay": 10, "thumbnailL1BorderHorizontal": 0, "thumbnailL1BorderVertical": 0, "thumbnailLabel": { "titleFontSize": "0.6em" }, "thumbnailHoverEffect2": "image_scale_1.00_1.10|label_backgroundColor_rgba(0,0,0,0)_rgba(255,255,255,0)", "galleryTheme": { "thumbnail": { "borderRadius": "8px" } }, "thumbnailToolbarImage": { "topLeft": "", "topRight": "", "bottomLeft": "", "bottomRight": "" }, "viewerToolbar": { "display": true, "standard": "label" }, "viewerTools": { "topLeft": "pageCounter, playPauseButton", "topRight": "downloadButton, rotateLeft, zoomButton, fullscreenButton, closeButton" }, "viewerGalleryTWidth": 40, "viewerGalleryTHeight": 40 }'> <a href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231027232414.png" data-ngThumb="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20231027232414.png"></a> </div> </body> </html> <h3 id="单行翻转卡片">单行翻转卡片</h3> <p>进行问答的翻转,会将一张卡变为两张,正反各问一遍,互为答案与问题;</p>
using RegExp to search and replace
基于Docker安装和配置HA,并提供一些初始的配置选项。
<blockquote> <p>想要通过命令行直接下载文件,通常想到的就是下面的两个工具:wget 和 curl,下面简单介绍一下两者的使用。</p> </blockquote> <h2 id="wget">Wget</h2> <p><code>wget</code> 全称为 <code>web get</code> ,其基本用法为:<code>wget [-para] url </code> ,常用的参数有以下几种:</p> <ul> <li>-O 指定下载文件的保存名称</li> <li>-b 为后台下载模式</li> <li>-P 下载到指定目录</li> <li>-c 支持断电续传</li> <li>-p 下载页面内的所有资源、包括图片视频等</li> <li>-r 递归下载</li> <li>-t 最大尝试次数</li> </ul> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>bash</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 默认无需参数的情况下即会将文件下载到当前文件夹下。</span> </span></span><span class="line"><span class="cl"><span class="c1"># 也是最常见的用法,可以加入-c避免下载中断</span> </span></span><span class="line"><span class="cl">wget url </span></span><span class="line"><span class="cl">wget -O file.tgz url</span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><p>参考 Man Page 或者 <a href="https://www.explainshell.com/explain/1/wget" target="_blank" rel="noopener">ExplainShell</a> 可以找到完整的参数列表;支持从文件中读取 url ;将 log 写入指定的文件等等功能;</p>
<blockquote class="alert-blockquote alert-error"> <p class="alert-heading"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> <path d="M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> <span>Error</span> </p> <p>多次循环进行 Numpy Concentrate 操作后,当原始数组变得过大的时,单步处理时间会逐渐变长,处理大量数据的时候时间成本极高。</p> </blockquote> <h2 id="解决思路">解决思路</h2> <p>这里简单的讲一下问题的定位过程,通过装饰器 Check 每个函数的执行时间,重点关注执行时长逐渐变长的部分。</p>
<blockquote> <p>树莓派家庭服务器的搭建以 docker 为核心,通过 docker 统一管理家庭服务,目前搭建的服务还在持续完善中,主要目的是为了方便日常使用、满足学习和探索的需求。</p> </blockquote> <p>Docker 的安装这里不再赘述,参考 Docker Configuration01 Install on Linux 一文进行安装即可;本篇主要侧重于介绍部署的镜像和服务,以及简单介绍使用方式。</p> <h2 id="一些-docker-容器推荐">一些 Docker 容器推荐</h2> <p>这里推荐一些 Docker 容器:Alist、XiaoYa、PiDashboard、redis、mysql、portainer、memos、wikijs</p> <p>相关的 Docker-Compose 文件会上传到<a href="https://github.com/AikenH/aikenh-DockerComposeYML" target="_blank" rel="noopener">AikenH/aikenh-DockerComposeYML (github.com)</a> </p> <h2 id="数据库部署与远程连接测试">数据库部署与远程连接测试</h2> <h3 id="sqlite-3">sqlite 3</h3> <blockquote> <p>Sqlite 与 Mysql 等不同,是一个无服务器、零配置的数据库,其更像是一个解析特定数据库文件的命令接口(CLI 工具),其将数据完全存储于一个单一的跨平台磁盘文件中;</p> </blockquote> <p>由于 sqlite3 的特性,决定了其是一个<strong>轻量级</strong>且<strong>不需要额外配置</strong>的数据库,但是在远程访问方面,只能通过文件共享来实现远程操作数据库。</p> <p>大多数的 Linux 系统版本都会附带 SQLite 的安装,因此我们可以直接使用下面的指令验证一下是否安装:</p> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>bash</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sqlite3</span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><p>如果没有安装的话,可以去官方的<a href="https://www.sqlite.org/download.html" target="_blank" rel="noopener">下载页面</a> 下载对应的预编译包,然后进行安装即可。</p>
<blockquote> <p>将 RaspBerry Pi 4B 作为家庭影视中心/机顶盒的核心就是 KODI 软件,这是考虑到以下的几点:遥控器的控制、对挂载 webdav 和其他的支持</p> </blockquote> <p>最方便的方式可以选择以 KODI 为核心的两个 OS:LibreELEC、OSMC(推荐),这两个系统以 KODI 为默认启动,同时也支持远程登录和 Docker 部署等 Linux 的功能。后者更为推荐应该是前者的官方改进版本。</p> <p>考虑到后续可能会将该 SD 卡用于其他用处,因此本文选择的是使用 RaspBerryPi OS 的方案,以下围绕该方案进行展开:</p> <h2 id="raspberry-pi-oskodialist-方案探究">RaspBerry Pi OS+Kodi+Alist 方案探究</h2> <blockquote> <p>可以参考 trouble shooting,可以发现实际上安装 kodi 最简单的方式就是直接使用 apt,无需做其他的 PPA 添加。</p> </blockquote> <h3 id="安装kodi">安装Kodi</h3> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>bash</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt-get install kodi</span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><p>安装完后,使用 kodi 命令开启或者在开始菜单的软件中心中选择 kodi 打开。</p>
使用Clash作为局域网中的代理服务器
install docker on linux with portainer
It is recommended to replace tmux with zellij
<blockquote> <p>该章节主要介绍 Stable-Diffusion 中模型的训练,考虑到硬件条件的限制,实际上这里介绍的训练,都是针对大模型的各种微调技术(Lora,Dreambooth,HyperNetwork, …),这里会以 LoRA 模型的训练为主。</p> </blockquote> <p>参考文献:</p> <ul> <li><a href="http://www.gamelook.com.cn/2023/04/514936" target="_blank" rel="noopener">AIGC教程:Stable Diffusion精进,如何训练特定画风LoRA模型? | 游戏大观 | GameLook.com.cn</a> </li> <li><a href="https://www.cnblogs.com/wangiqngpei557/p/17301360.html" target="_blank" rel="noopener">stable diffusion打造自己专属的LORA模型 - 王清培 - 博客园 (cnblogs.com)</a> </li> <li><a href="https://github.com/kohya-ss/sd-scripts/blob/main/train_README-zh.md" target="_blank" rel="noopener">sd-scripts/train_README-zh.md at main · kohya-ss/sd-scripts · GitHub</a> </li> </ul> <h2 id="train-lora">Train LoRA</h2> <blockquote> <p>LoRA 的优势就是其模型更小,且更加模块化;也就是说其的训练成本和要求都更低,同时使用代价小,可以作为某种风格插件或者角色插件来使用。</p> </blockquote> <ul> <li><a href="https://huggingface.co/blog/zh/lora" target="_blank" rel="noopener">使用 LoRA 进行 Stable Diffusion 的高效参数微调 (huggingface.co)</a> </li> <li><a href="https://arxiv.org/abs/2106.09685" target="_blank" rel="noopener">[2106.09685] LoRA: Low-Rank Adaptation of Large Language Models (arxiv.org)</a> </li> </ul> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20230706171541.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20230706171541.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20230706171541.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
using immich to backup all the photos of your home.
intro how we use potplayer with alist,
<blockquote> <p>该章节主要包括 Promot 生成和部分工作流的分析,旨在了解如何写出更好的关键词,如何生成更好的图片,当我们不知道怎么描述的时候也可以将该工作交给 ChatGPT,让其为我们攥写一般基础的提示词</p> </blockquote> <h2 id="prompt-编写范式">Prompt 编写范式</h2> <p>参考资料:<a href="https://zhuanlan.zhihu.com/p/619247417?utm_id=0" target="_blank" rel="noopener">【Stable Diffusion】Prompt</a> </p> <p>通常编写可以遵照以下的类别进行组织,主要有 <code><质量控制> + <前置> + <主体> + <场景词></code> 几类,其中分别包括以下的几类词:</p> <ul> <li><strong>质量控制</strong>:画质、镜头效果、光照效果</li> <li><strong>前置词</strong>:画风、艺术家、风格</li> <li><strong>主体</strong>:人物&对象、姿势、服装、道具</li> <li><strong>场景</strong>:环境、背景、细节</li> <li><strong>Additional Network</strong>:载入额外模型</li> </ul> <p><strong>分割符号:</strong> 各个关键词之间用 <code>,</code> 分割,且对应的权重从前到后依次递减,因此在编写关键词的时候也要注意先后顺序。</p> <p><strong>权重加权符号</strong>:各种括号代表各种不同的加权系数,这里建议用 <code>(prompt: weight)</code> 统一来编写提示词的权重规则,整体可读性会更好。</p> <p>这里的 weight 指的是权重变成原本的 weight 倍,就可以调整加强或减弱。</p> <blockquote> <p>各个括号的默认系数如下: () -> 1.1 ; {} -> 1.05 ; <code>[]</code> -> 0.952 可以通过(())进行叠加即 1.1*1.1</p> </blockquote> <p><strong>额外模型调取</strong>:编写格式为 <code><lora:loramodelname:multiplier></code>,即载入 loramodelname 模型,权重为 multiplier,该权重不建议过大。</p> <p><strong>关键词的切换</strong>: 语法如下 <code>[key1:key2:step]</code>,通过该语法可以实现在进行到不同步骤的时候使用不同的关键词进行渲染,其中 <code>:key2</code> 可以忽略,忽略后即可理解为 <code>["":key1:step]</code>,有一下的一些规则:</p> <ul> <li>Step 在大于 1 时表示具体的步骤,小于 1 时表示迭代步数的百分比</li> <li>如果想要在某步之后忽略 key1,与上面忽略 key2 正好相反,可以写成 <code>[key1::step]</code></li> <li><code>[key1|key2]</code> 则表示两个关键词交替选择渲染</li> </ul> <p><strong>反向提示词</strong>:反向提示词就是让 AI 避免生成什么样的图片,使用得当可以帮助我们更好的生成想要的图片,后面再关键词的地方会介绍一些常见的反向关键词,例如低画质相关和一些容易变形身体部位的描述等</p>
Using Control Net to optimize you pic
The Basic Function of Stable Diffusion
<blockquote> <p>在 Windows 和 WSL2 中安装 Cuda 和 Cudnn ,是配置 GPU 开发环境中重要的一步,其支撑了 AI 模型进行 Training 和 Interface 。本篇介绍安装 CUDA 和 Cudnn 的步骤和一些踩过的坑。</p> </blockquote> <p>参考资料如下:<a href="https://blog.csdn.net/halou10200912/article/details/106048719" target="_blank" rel="noopener">版本查看</a> | <a href="https://zhuanlan.zhihu.com/p/99880204" target="_blank" rel="noopener">Win 安装 Cuda 和cuDNN</a> | <a href="https://blog.csdn.net/Apple_Coco/article/details/129293019" target="_blank" rel="noopener">WSL 2 安装 CUDA 和cuDNN</a> </p> <h2 id="win-11-安装-cuda-和-cudnn">Win 11 安装 CUDA 和 cuDNN</h2> <h3 id="cuda">CUDA</h3> <p>首先在 Nvidia 的控制面板:<strong>帮助-系统信息</strong>的如下位置,查看 GPU 最大支持的 CUDA 版本:</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230424130608.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230424130608.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230424130608.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
Intro on How to Set up and use it.
Linux 三剑客之Awk
Linux 三剑客之Sed
Linux三剑客之Grep
Linux 三剑客之RegExp
理解内网穿透的原理和简单实现
<p>Mac 的 Terminal 和 Ubuntu 的操作上较为相似,都是 Unix 的吧,但是要注意一下安全和软件管理库。</p> <p>其他的参考资料: <a href="https://www.youtube.com/watch?v=RNqDkF17ogY&t=787s" target="_blank" rel="noopener">https://www.youtube.com/watch?v=RNqDkF17ogY&t=787s</a> </p> <h2 id="temrinal-终端">Temrinal 终端</h2> <p>The default terminal is zsh, so we do not need to install zsh from scratch.</p> <h3 id="brew">Brew</h3> <p>we install brew follow the <a href="https://brew.sh" target="_blank" rel="noopener">official website</a> settings :</p> <div class="code-block"> <div class="code-title" onclick="toggleCode(this)"> <span class="code-block-open"><ion-icon name="chevron-down-outline"></ion-icon></span> <span class="code-block-close"><ion-icon name="chevron-forward-outline"></ion-icon></ion-icon></span> <span>bash</span> </div> <div class="code-content"> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bin/bash -c <span class="s2">"</span><span class="k">$(</span>curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh<span class="k">)</span><span class="s2">"</span></span></span></code></pre></div> </div> </div> <script> function toggleCode(element) { const codeContent = element.nextElementSibling; if (codeContent.style.display === "none" || codeContent.style.display === "") { codeContent.style.display = "block"; codeContent.parentNode.classList.remove("code-has-hidden-child"); } else { codeContent.style.display = "none"; codeContent.parentNode.classList.add("code-has-hidden-child"); } } </script><h3 id="iterm-2">Iterm 2</h3> <p>After install brew we can install iterm 2 like this :</p>
Explain Devops, CI, CD and How it works
基于Icarus的主题的个人配置
计算大规模数据流中的元素出现频次的方法
manager python env for development.
Setup powershell in windows
How to write shell script.
<p>该文介绍基于 Windows11 系统的双系统安装和删除,安装的双系统选择 Ubuntu(开发还是比较推荐使用 WSL2 即可)</p> <h2 id="install-dual-system">Install Dual System</h2> <p>参考资料:<a href="https://blog.csdn.net/NeoZng/article/details/122779035" target="_blank" rel="noopener">全面解决各种问题</a> <a href="https://www.cnblogs.com/masbay/p/10745170.html" target="_blank" rel="noopener">双系统安装</a> <a href="https://zhuanlan.zhihu.com/p/363640824" target="_blank" rel="noopener">Windows+Ubuntu20.04双系统安装教程</a> </p> <h3 id="1-安装-u-盘制作">1. 安装 u 盘制作</h3> <p>这里推荐 <a href="https://github.com/ventoy/Ventoy" target="_blank" rel="noopener">ventoy</a> 来做启动盘,ventoy 可以同时将很多系统的镜像放到一个 u 盘中,最最重要的是:干净简洁,可以参考其<a href="https://www.ventoy.net/cn/doc_start.html" target="_blank" rel="noopener">官方文档</a> 来制作盘,制作后将镜像文件放到指定目录即可。</p> <h3 id="2-硬盘分区">2. 硬盘分区</h3> <p>win+s 搜索创建并格式化分区,找一块空闲空间较大的硬盘,右键压缩卷,设定好预留给 Linux 的空间即可(记住该大小,方便后续辨认,可以将各个盘的大小拍照记录下来,安装的时候别把 windows 覆盖了)。</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230323085002.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230323085002.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230323085002.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230323085239.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230323085239.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230323085239.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
<p><strong>Reference</strong></p> <p>本文介绍如何配置自己的 Github 的个人资料界面,同时会介绍相关美化个人资料的一些资源网站和项目,并简单介绍其用法。最终结果如下(还有许多优化的空间):</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20230122113307.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20230122113307.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20230122113307.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p> <h2 id="创建同名仓库">创建同名仓库</h2> <p>Github 中创建用户名的同名仓库,该仓库的 README.md 将会在个人的资料页进行展示。(附上官方的说明如下)</p> <blockquote> <p>AikenH/AikenH is a special repository. Its <code>README.md</code> will appear on your public profile.</p> </blockquote> <p>创建该仓库之后,我们对 Readme 的改动将会实时的同步到我们的个人界面,后续我们就只需要专注于编写和修改该 Readme 即可。</p> <h2 id="相关资源推荐">相关资源推荐</h2> <p>由于大家的审美和风格不同,这里不做设计上的推荐,仅推荐一些用于美化个人界面的资源和部分项目的用法(以本人的 blog 为例)。</p> <p>名字部分,简单文字转图片随便找一个<a href="http://www.atoolbox.net/Tool.php?Id=723" target="_blank" rel="noopener">工具箱</a> 或者网站生成即可,不在赘述;</p> <p><strong>这里是一个工具和推荐仓库的大全集</strong>:<a href="https://github.com/abhisheknaiidu/awesome-github-profile-readme#tools" target="_blank" rel="noopener">abhisheknaiidu/awesome-github-profile-readme</a> </p> <p>这里是一些优秀的 <a href="https://zzetao.github.io/awesome-github-profile/" target="_blank" rel="noopener">readme profile</a> </p> <h2 id="动态字幕">动态字幕</h2> <p>介绍使用的动态字幕效果实现:<a href="https://github.com/DenverCoder1/readme-typing-svg" target="_blank" rel="noopener">DenverCoder1/readme-typing-svg</a> ,进入其 <a href="https://readme-typing-svg.demolab.com/demo/" target="_blank" rel="noopener">Demo Site</a> ,设定想要的样式和文字即可生成对应的 markdown 和 html 代码。</p>
<p>@AikenH 2022 Node-JS-Chapter1</p> <p>参考:<a href="https://blog.csdn.net/Newbie___/article/details/104759861" target="_blank" rel="noopener">包管理工具npm、yarn以及nvm简介及简单使用</a> </p> <h2 id="concept-概念">Concept 概念</h2> <p>对 Node,NPM,JS,Yarn,NVM 的概念和作用进行一个辨析和介绍,了解各自的含义和职责,进而理解我们使用的到底是什么,环境怎么管理,怎么自定义和进行改动等。</p> <ul> <li> <p><strong>JS</strong>在 1995 年诞生,Nodejs 在 2009 年诞生,在此之前 JS 只能在浏览器中使用(google 开发的 chrome 的 V8 引擎),NodeJS(第三方作者想直接在计算机运行 JS,让其脱离浏览器)相当于提供的一个 JS 的运行环境,用来支持 JS 的执行,也就是 JS 的一个 runtime system。</p> <blockquote> <p>由此,JS 除了 web 前端编程,又可以支持后台开发、GUI 开发、APP 开发和 CLI 工具开发</p> </blockquote> </li> <li> <p><strong>Nodejs</strong>和 JS 的概念已经在上述清楚了,这里说一下 nodejs 组成:</p> <ul> <li>V8 引擎将 JS 编译成机器码,提高运行速度;</li> <li>本地模块:使用 C/C++实现的一些高性能开源库;</li> <li>标准库:封装 C/C++的一些本地模块的接口,转换为 JS 接口,就是 Nodejs 的标准库,其良好的设计也赋予 Nodejs 强大的生命力;</li> </ul> </li> <li> <p><a href="https://www.npmjs.com/" target="_blank" rel="noopener">NPM</a> 是随 NodeJS 一起安装的包管理工具(提供下载,版本校验,兼容性校验等功能),就像 pip、conda 帮助 Nodejs 管理并解决本地部署的问题。</p> <ul> <li>允许下载别人写好的第三方包到本地使用;</li> <li>允许下载安装别人编写的命令行程序;</li> <li>允许上传包或命令行程序给别人使用;</li> </ul> </li> <li> <p><strong>Yarn</strong>:由 Facebook、Google、Exponent 和 Tilde 联合推出的 JS 包管理工具,和 NPM 就像是 pip 和 conda 的关系,其仍然使用 NPM 的 registry,不过提供了全新的 CLI 来进行管理(也就是管理包的代码和逻辑有区别)</p>
build your website by django and vue, save info in mysql
this Configuration focus on the terminal functionality.
basic linux operation
5分钟入门vimscript,想要中文也可以看https://zhuanlan.zhihu.com/p/37352209 韦易笑的翻译
Create and Run Unittest for python in VsCode
mySQL and business
增删改(查)
Query in SQL
SQL C2 from Install to use
学习数据库的标准处理语言SQL C1
windows设置文件共享,以及全平台如何访问
<h2 id="config-windows-terminal-in-win11">Config Windows Terminal in Win11</h2> <h3 id="install-安装">Install 安装</h3> <p>windows terminal 在 win11 已经自带,无需安装,如果需要安装的话在 Microsoft Store 下载即可,默认的 terminal 在中文环境中可能要搜索 windows 终端。</p> <h3 id="baisc-基础设置">Baisc 基础设置</h3> <p>新版的 Windows Terminal 有了图形化配置界面,因此配置简单和直观了不少,该部分就简要的介绍一下基础的设置。通过 Ctrl+, 或者下拉菜单可以打开设置页面。</p> <p><strong>完成每一部分的修改后记得保存</strong></p> <p>首先在<strong>默认的终端应用</strong>程序中选择 windows 终端,将其作为默认的终端模拟器(terminal simulator),启动的地方,可以设置默认的配置文件,这里后续会用到。</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230322083142.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230322083142.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230322083142.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p> <p>接着交互选项卡中启用<strong>复制粘贴</strong>功能,该功能可以避免在和终端或者 WSL,vim 交互的时候一些复制粘贴的相关问题和配置,(记得点击保存)</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230322083832.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230322083832.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230322083832.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
概率编程语言Markov Junior 随机生成迷宫
对波函数坍塌算法的理解
Reduce 'cd' to facilitate jumping between projects
设置 vscode, vim, obsidian 自动为 Markdown 添加 Hexo 所需Meta信息
test hexo render
以 Livemylive 为例搭建并发布自己的Hexo博客
recorder of neovim
Github | Tencent-COS
Design and code fine-tune in pytorch
config git, usage, remote, bugs fixed
using crontab, rsync, scp
Incremental Learning
<p>: hammer: 王耀智</p> <h2 id="regularization-系列方法">Regularization 系列方法</h2> <p>这类方法旨在添加一些正则化损失来解决 <code>catastrophic forgetting</code> 的问题。</p> <h3 id="weight-regularization">Weight Regularization</h3> <p>这类方法一般是对网络中每个参数的重要性进行评估,根据每个参数的重要性和梯度信息更新参数。</p> <p>典型的文章为 <a href="https://www.pnas.org/content/pnas/114/13/3521.full.pdf" target="_blank" rel="noopener">EWC</a> .</p> <blockquote> <p>PS: 这类文章我也没有读过。</p> </blockquote> <h3 id="data-regularization">Data Regularization</h3> <p>这类方法专注于记住特征表示,通常是结合 Hinton 的知识蒸馏损失函数使得模型记住旧类别的知识,解决 catastrophic forgetting。</p> <p>推荐以下几篇文章:</p> <ul> <li><code>LwF</code>(Learning without forgetting),这篇文章在我看来是增量学习的开山之作,第一次给增量学习找到了一个比较好的方向,也是第一次将知识蒸馏应用到增量学习上;</li> <li><a href="https://arxiv.org/abs/2004.13513" target="_blank" rel="noopener">PODNet CVPR2020</a> ,这篇文章最大的贡献在我看来是设计了一个全新的蒸馏损失函数,最终结果也是达到了当时的sota,甚至目前也是几个榜单的sota。</li> </ul> <h2 id="rehearsal-系列方法">Rehearsal 系列方法</h2> <p>这类方法主要的想法是使用一些旧类别的数据,在新类别到来时使用新旧数据一起训练模型,根据旧类别数据的真假分为以下两种方法。</p> <h3 id="pseudo-rehearsal">Pseudo rehearsal</h3> <p>这类方法通常是在学习旧类别的同时,训练一个生成模型,可以生成旧的类别数据,在新类别数据到来时,生成相当数量的旧类别数据,一起训练新模型。</p> <p>这里推荐一篇文章:Continual learning with deep generative replay。</p> <blockquote> <p>PS:这个小类别的论文我也没有太关注,个人不是很推荐这类方法。</p> </blockquote> <h3 id="save-real-data">Save real data</h3> <p>这类方法是开辟一个内存空间,空间中保存旧类别的少部分训练数据,在新类别到来时,使用内存空间的数据与新数据共同学习,按照对空间的使用方法不同可分为:</p> <h4 id="exemplar-rehearsal">Exemplar Rehearsal</h4> <p>这类方法是将新旧数据混合,共同作为训练数据,一起训练模型,使得模型能够保持旧类别的知识。</p> <p>但是在训练过程中新旧数据的类别数量是不均衡的,这也催生了我下面会说到的一大类解决方法。</p> <p>这种方法推荐的论文是 <code>iCaRL</code>,这篇论文是 exemplar rehearsal 的开山之作,第一次提出了内存空间这个概念,也提出了一个非常有效的内存选择策略(herb),并且也是第一个使用特征作为分类依据的方法,我个人认为是继 LwF 之后又一个将 IL 推到一个新的高度的方法。</p> <h4 id="gradient-rectification">Gradient Rectification</h4> <p>这类方法我称之为 Gradient Rectification,其主要思路是模型每次更新的梯度由 shared gradient 和 task-specific gradient 组成。分别代表所有类别的共性信息和某一个类别的特性信息,在新类别学习时借助内存空间中的数据获得旧类别的两项梯度,在更新时对梯度进行修正,力求做到不增加共享梯度代表的损失,尽量减少类别特定梯度代表的损失。</p>
Long-Tailed Learning Colooection
<p>@AikenHong 2021</p> <p>Noise Contrastive Estimation Loss = NCE Loss 噪声对比估计损失,这里的Noise实际上就是Negative Samples. 该损失被广泛的用于对比学习的任务,而对比学习广泛的作为自监督学习的无监督子任务用来训练一个良好的特征提取器,于是对于对比学习的目标和效用的理解十分关键。</p> <h2 id="whats-nce-loss">What’s NCE Loss</h2> <p>在介绍NCE之前我们可以将其和CE进行一个简单的对比,虽然名称上不是同一个CE,但是在数学表达上却有很相近的地方(softmax-kind of loss)</p> <p>首先softmax,他保证所有的值加起来为一,结合onehot的ce,实际上<code>j==gt</code>的情况下外层+log也就是ceLoss,也就是 $logSoftmax$</p> <div> $$ S_j = \frac{e^{a_j}}{\sum_{k=1}^N e^{a_k}} $$ </div> <p>然后看infoNCE,基础的对比学习损失可以写成:</p> <div> $$ L_{contrast} = \mathbb{E}[-\log\frac{e^{f_x^T f_y/T}}{e^{f_x^T f_y/T} + \sum_i e^{f_x^T f_{y_-^i}/T}}] $$ </div> <p>其中 $f_x^T f_y^T$ 为 $sim(x,y)$ 时即转化为带 $T$ 的NCE,即InforNCE.</p> <p>分子是正例对的相似度,分母是正例对+所有负例对的相似度,最小化infoNCE loss,就是去最大化分子的同时最小化分母,也就是最大化正例对的相似度,最小化负例对的相似度。</p> <p>从该形式上看,和soft的CE形式上是统一的,当我们把分母看作概率和自身以及和其他的相似性,这样和NCE在形式上和简化后的CE实现了统一。</p> <blockquote> <p>但是我不认为这和label smooth 后的CE有相关性,而是和原始的CE经由One-hot简化后结构上有相似性。</p> </blockquote> <h2 id="how-it-works">How it Works</h2> <p>NCE的思想是<strong>拉近相似的样本,推开不相近的样本</strong>,从而学习到一个好的<strong>语义表示空间</strong>,这一点上实际上和度量学习的思想是一样的,只是对比学习通常作用在无监督或者自监督的语境中,度量学习这是有监督的。</p> <p>考虑之前人脸匹配的研究,使用 “Alignment and Uniformity on the Hypersphere"中的Alignment and Uniformity,就是一个更好理解他的角度</p> <div> $$ \begin{gathered} L_{\text {contrast }}=\mathbb{E}\left[-\log \frac{e^{f_{x}^{T} f_{y} / \tau}}{e^{f_{x}^{T} f_{y} / \tau}+\sum_{i} e^{T_{x}^{T} f_{y_{i}}^{-} / \tau}}\right] \\ =\mathbb{E}\left[-f_{x}^{T} f_{y} / \tau\right]+\mathbb{E}\left[\log \left(e^{f_{x}^{T} f_{y} / \tau}+\sum_{i} e^{f_{x}^{T} f_{y_{i}^{-} / \tau}}\right)\right] \\ \mathbb{P}\left[\left(f_{x}=f_{y}\right)\right]=1 \underbrace{\mathbb{E}\left[-f_{x}^{T} f_{y} / \tau\right]}_{\text {positive alignment }}+\underbrace{\mathbb{E}\left[\log \left(e^{1 / \tau}+\sum_{i} e^{f_{x}^{T} f_{y_{i}}-/ \tau}\right)\right]}_{\text {uniformity }} \end{gathered} $$ </div> <p>公式经过上面的推导就可以看成下的两个部分,其中<strong>alignment</strong>只与<strong>positive pair</strong>有关,相反<strong>Uniformity</strong>只与<strong>negative pair</strong>相关,希望所有的点都能尽可能的分布在uni hypersphere上。</p>
<p>@AikenHong 2021 @topic</p> <ul> <li>smooth label (inception v2)</li> <li>when does label smoothing help (nips 2019)</li> <li>sharpen in semi-supervised in the future</li> <li><a href="https://github.com/seominseok0429/label-smoothing-visualization-pytorch?utm_source=catalyzex.com" target="_blank" rel="noopener">offical code github</a> </li> </ul> <p>不是一个通用的方法,在很多的任务上反而会导致掉点的现象,可以简单分析一下,汲取一下思想和Sharpen做对比,在这篇文章中,我们可以结合之前的人脸对比损失来进行分析。</p> <h2 id="whats-the-smooth-label">What’s the smooth label</h2> <p>首先介绍在图像分类任务中对logits和Hard label做ce得到我们的损失,可以表现为如下的形式:</p> <div> $$ Loss = -\sum^{K}_{i=1}p_i \log(q_i) $$ </div> <p>由于我们的标签是一个hard label,实际上可以转化成一个one-hot,即</p> <div> $$ \begin{equation} p_i = \left\{ \begin{array}{c1} 1 & i==gt \\ 0 & i!=gt \\ \end{array} \right. \end{equation} $$ </div> <p>而soft label实际上做的是将 1的位置变为 $1-\alpha$ ,其他位置设置为 $\alpha/(K-1)$ ,然后再去求CE,</p> <p>Hinton论文中给出该损失对特征分布的作用测试图: <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/labimg/20211216194040.png"> <img loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/labimg/20211216194040.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/labimg/20211216194040.png" style="display: block; margin: 0 auto;" alt="" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
<p>@Aiken 2020,</p> <p>主要针对神经网络的训练过程中的一些基础策略的调整,比如当训练的曲线出现一定的问题的时候,我们应该怎么去调整我们训练过程中的策略。</p> <p>参数调整过程中最重要的就是优化器(优化或者说是下降算法)和学习率(优化算法的核心参数),此外像是数据增强策略还是Normalization策略,都能极大的影响一个模型的好坏。</p> <h2 id="优化器">优化器</h2> <p><a href="https://wizardforcel.gitbooks.io/learn-dl-with-pytorch-liaoxingyu/content/" target="_blank" rel="noopener">Some Material</a> 实际上虽然有很多的优化算法,但是到最后最常用的还是 SGD+Mon 和 Adam两种:</p> <p>Adam主要的有事在于自适应学习率,他对我们设计的学习率实际上没有那么敏感,但是在具体实验中往往不会有调的好的SGD那么好,只是在SGD的参数调整中会比较费劲。</p> <p>但是有了根据patient调整lr的scheduler后,我们基本上可以使用SGD做一个较为简单的调整,只要设计好初始的lr的实验以及用来调整学习率的参数值。</p> <h2 id="学习率">学习率</h2> <p>$\omega^{n} \leftarrow \omega^{n}-\eta \frac{\partial L}{\partial \omega^{n}}$ 其中的权重就是学习率lr,</p> <p>==Basic==</p> <table> <thead> <tr> <th></th> <th>学习率大</th> <th>学习率小</th> </tr> </thead> <tbody> <tr> <td>学习速度</td> <td>快</td> <td>慢</td> </tr> <tr> <td>使用情景</td> <td>刚开始训练时</td> <td>一定的次数过后</td> </tr> <tr> <td>副作用</td> <td>1. Loss爆炸 2.振荡</td> <td>1.过拟合 2.收敛速度慢</td> </tr> </tbody> </table> <h3 id="学习率的基本设置">学习率的基本设置</h3> <p>在训练过程中,一般根据训练轮数设置动态变化的学习率。</p> <ul> <li>刚开始训练时:学习率以 0.01 ~ 0.001 为宜。</li> <li>一定轮数过后:逐渐减缓。</li> <li>接近训练结束:学习速率的衰减应该在100倍以上。</li> </ul> <p><strong>Note:</strong> 如果是 <strong>迁移学习</strong> ,由于模型已在原始数据上收敛,此时应设置较小学习率 (≤10−4) 在新数据上进行 <strong>微调</strong> 。</p> <h3 id="学习率变化方法">学习率变化方法</h3> <p>==warm up==</p> <p><a href="https://www.zhihu.com/question/338066667/answer/771252708" target="_blank" rel="noopener">warm up为什么有用</a> </p> <p>warm up衰减策略与上述的策略有些不同,它是先从一个极低的学习率开始增加,增加到某一个值后再逐渐减少, 这点上倒是和Cosine Anneal LR有一定的相似之处,将这两种结合起来是一种常见的训练策略:</p> <p>这样训练模型更加稳定,因为在刚开始时模型的参数都是随机初始化的,此时如果学习率应该取小一点,这样就不会使模型一下子跑偏。</p> <p>而这样的跑偏对于<strong>大模型</strong>而言,可能是导致很严重的影响,后面收敛了也可能不会达到最佳的效果,一开始的跑偏,可能会造成准确率在后面的严重结果。 <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/3070imgs/20211216001833.png"> <img alt="warmup" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/3070imgs/20211216001833.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/3070imgs/20211216001833.png" style="display: block; margin: 0 auto;" alt="warmup" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
Basic Knowledge of PyTorch
Do We Need Zero Training Loss After Achieving Zero Training Error
Implementation of Sorting Algorithm
The Design of the UniFramework 1
Matching Algorithm
cherno(ytb)-cpp-lesson
<head> <script src="https://mirrors.sustech.edu.cn/cdnjs/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script> </head> <div class="hugo-encryptor-container"> <div class="hugo-encryptor-prompt"> <p>文章的部分内容被密码保护:</p> </div> <div class="hugo-encryptor-form"> <input class="hugo-encryptor-input" placeholder='请输入密码' /> <input class="hugo-encryptor-button" type="button" value='CLICK' onclick="_click_handler(this)" /> </div> <div class="hugo-encryptor-cipher-text" data-password="aikenhong_blog" style="display: none;" > <span style="display: none;">--- DON'T MODIFY THIS LINE ---</span> <h2 id="主要是limited-labels--few-samples--data-programing">主要是limited labels & Few Samples & Data programing</h2> <hr> <p><del>Weakly supervised learning</del><br> <del>semi-supervised in video field</del><br> if we can recoding this work?<br> <del>多指标下降(LOSS的耦合或者循环的选择)、相关的CV最新论文等等会在后续关注</del><br> <del>元学习、浅层神经网络的概念等等</del> <del>semi-supervised</del></p> <hr> <h3 id="part1-limited-labels-base-on-lifeifeis-reference">PART1 Limited Labels (base on LiFeiFei‘s reference)</h3> <p><em>in this part we may list the paper which is useful for my recoding.</em><br> 还有一些其他重要的可能在对论文进行重新精读的时候要记得注意reference:就比如说在loss变换和决策树生成那一块。<br> <em>distant supervision(it’s kind of early) can be another baseline for our method, we need to understand how this method work for that situation</em><br> distant supervisor到底是什么机制可以去CSDN什么的看一下</p>
Multi-Grained Slow vs. Fast Framework for Few-Shot Class-Incremental Learning
MoCo V3 An Empirical Study of Training Self-Supervised Visual Transformers
<p>@aikenhong 2020 @h.aiken.970@gmail.com</p> <p>另一个综述文章:https://zhuanlan.zhihu.com/p/61215293 对该文中一些内容有一些补充,可以看看</p> <p>FSL简介:https://blog.csdn.net/xhw205/article/details/79491649</p> <p>GCN用于FSL:https://blog.csdn.net/qq_36022260/article/details/93753532</p> <h2 id="abstract">Abstract</h2> <p>FSL的根本目的就是弥合人工智能和人类之间的鸿沟,从少量带有监督信息的示例中学习。像人类一样有很高的泛化能力。这也能解决在实际应用场景中,数据难以收集或者大型数据难以建立的情景。</p> <p>FSL的<strong>核心问题</strong>是:经验风险最小化器不可靠;那么如何<strong>使用先验知识</strong>去解决这个问题?</p> <p>三个主要的角度:</p> <ol> <li>数据:使用先验知识增强数据的监督经验</li> <li>模型:使用先验知识来降低假设空间</li> <li>算法:使用先验知识来改变搜索最佳假设(来进行搜索?)</li> </ol> <p>现阶段针对FSL提出的一些相关的机器学习方法: <code>meta-learning;</code> <code>embedding learning;</code> <code>generative modeling etc.</code></p> <p><strong>本文的主要工作:</strong></p> <ol> <li> <p>基于FSL的原有设定,在现阶段的FSL发展上给出正式定义,同时阐明具体目标以及解决方式</p> </li> <li> <p>通过具体示例列举和FSL的相关学习问题,比较了相关性和差异性,更好的区分问题</p> </li> <li> <p>指出核心问题:经验风险最小化器不可靠,这提供了更系统有组织的改进FSL的方向。 经验风险最小化器👉:基于ML中的错误分解来分析的</p> </li> <li> <p>整理,更好的理解</p> </li> <li> <p>未来方向</p> </li> </ol> <h2 id="notation-and-terminology">Notation and Terminology</h2> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20200519154522883.png"> <img alt=" " loading="lazy" src="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20200519154522883.png"class="responsive-image" src="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20200519154522883.png" style="display: block; margin: 0 auto;" alt=" " /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> 一般基于参数方法(因为非参数方法需要大量数据),在假设空间中搜索最优假设,并基于基于标签的Loss Function 来衡量效果。</p> <h2 id="main-body">Main Body</h2> <h3 id="overview">Overview</h3> <p>2.1:具体定义&示例 2.2:相关问题和FSL的相关性和差异 2.3:核心问题 2.4:现有的方法如何处理这个问题</p>
Data Structure and Type
<p align="center"><img src="https://aikenh.cn/images/logo.png" alt=""></p> <h1 align="center">What the f*ck Python! 🐍</h1> <p align="center">一些有趣且鲜为人知的 Python 特性.</p> <p align="center"> <a href="https://github.com/satwikkansal/wtfpython">English</a> | <a href="#">中文</a> </p> <p>Python, 是一个设计优美的解释型高级语言, 它提供了很多能让程序员感到舒适的功能特性. 但有的时候, Python 的一些输出结果对于初学者来说似乎并不是那么一目了然.</p> <p>这个有趣的项目意在收集 Python 中那些难以理解和反人类直觉的例子以及鲜为人知的功能特性, 并尝试讨论这些现象背后真正的原理!</p> <p>虽然下面的有些例子并不一定会让你觉得 WTFs, 但它们依然有可能会告诉你一些你所不知道的 Python 有趣特性. 我觉得这是一种学习编程语言内部原理的好办法, 而且我相信你也会从中获得乐趣!</p> <p>如果您是一位经验比较丰富的 Python 程序员, 你可以尝试挑战看是否能一次就找到例子的正确答案. 你可能对其中的一些例子已经比较熟悉了, 那这也许能唤起你当年踩这些坑时的甜蜜回忆 :sweat_smile:</p> <p>PS: 如果你不是第一次读了, 你可以在<a href="https://github.com/satwikkansal/wtfpython/releases/" target="_blank" rel="noopener">这里</a> 获取变动内容.</p> <p>那么, 让我们开始吧…</p> <!-- more --> <h1 id="table-of-contents目录">Table of Contents/目录</h1> <!-- TOC --> <ul> <li><a href="#table-of-contents%e7%9b%ae%e5%bd%95">Table of Contents/目录</a> </li> <li><a href="#structure-of-the-examples%e7%a4%ba%e4%be%8b%e7%bb%93%e6%9e%84">Structure of the Examples/示例结构</a> </li> <li><a href="#usage%e7%94%a8%e6%b3%95">Usage/用法</a> </li> <li><a href="#-examples%e7%a4%ba%e4%be%8b">👀 Examples/示例</a> <ul> <li><a href="#section-strain-your-brain%e5%a4%a7%e8%84%91%e8%bf%90%e5%8a%a8">Section: Strain your brain!/大脑运动!</a> <ul> <li><a href="#-strings-can-be-tricky-sometimes%e5%be%ae%e5%a6%99%e7%9a%84%e5%ad%97%e7%ac%a6%e4%b8%b2-">> Strings can be tricky sometimes/微妙的字符串 *</a> </li> <li><a href="#-time-for-some-hash-brownies%e6%98%af%e6%97%b6%e5%80%99%e6%9d%a5%e7%82%b9%e8%9b%8b%e7%b3%95%e4%ba%86">> Time for some hash brownies!/是时候来点蛋糕了!</a> </li> <li><a href="#-return-return-everywhere%e5%88%b0%e5%a4%84%e8%bf%94%e5%9b%9e">> Return return everywhere!/到处返回!</a> </li> <li><a href="#-deep-down-were-all-the-same%e6%9c%ac%e8%b4%a8%e4%b8%8a%e6%88%91%e4%bb%ac%e9%83%bd%e4%b8%80%e6%a0%b7-">> Deep down, we’re all the same./本质上,我们都一样. *</a> </li> <li><a href="#-for-what%e4%b8%ba%e4%bb%80%e4%b9%88">> For what?/为什么?</a> </li> <li><a href="#-evaluation-time-discrepancy%e6%89%a7%e8%a1%8c%e6%97%b6%e6%9c%ba%e5%b7%ae%e5%bc%82">> Evaluation time discrepancy/执行时机差异</a> </li> <li><a href="#-is-is-not-what-it-is%e5%87%ba%e4%ba%ba%e6%84%8f%e6%96%99%e7%9a%84is">> <code>is</code> is not what it is!/出人意料的<code>is</code>!</a> </li> <li><a href="#-a-tic-tac-toe-where-x-wins-in-the-first-attempt%e4%b8%80%e8%b9%b4%e5%8d%b3%e8%87%b3">> A tic-tac-toe where X wins in the first attempt!/一蹴即至!</a> </li> <li><a href="#-the-sticky-output-function%e9%ba%bb%e7%83%a6%e7%9a%84%e8%be%93%e5%87%ba">> The sticky output function/麻烦的输出</a> </li> <li><a href="#-is-not--is-not-is-not-is-not--%e4%b8%8d%e6%98%af-is-not-">> <code>is not ...</code> is not <code>is (not ...)</code>/<code>is not ...</code> 不是 <code>is (not ...)</code></a> </li> <li><a href="#-the-surprising-comma%e6%84%8f%e5%a4%96%e7%9a%84%e9%80%97%e5%8f%b7">> The surprising comma/意外的逗号</a> </li> <li><a href="#-backslashes-at-the-end-of-string%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%9c%ab%e5%b0%be%e7%9a%84%e5%8f%8d%e6%96%9c%e6%9d%a0">> Backslashes at the end of string/字符串末尾的反斜杠</a> </li> <li><a href="#-not-knot%e5%88%ab%e7%ba%a0%e7%bb%93">> not knot!/别纠结!</a> </li> <li><a href="#-half-triple-quoted-strings%e4%b8%89%e4%b8%aa%e5%bc%95%e5%8f%b7">> Half triple-quoted strings/三个引号</a> </li> <li><a href="#-midnight-time-doesnt-exist%e4%b8%8d%e5%ad%98%e5%9c%a8%e7%9a%84%e5%8d%88%e5%a4%9c">> Midnight time doesn’t exist?/不存在的午夜?</a> </li> <li><a href="#-whats-wrong-with-booleans%e5%b8%83%e5%b0%94%e4%bd%a0%e5%92%8b%e4%ba%86">> What’s wrong with booleans?/布尔你咋了?</a> </li> <li><a href="#-class-attributes-and-instance-attributes%e7%b1%bb%e5%b1%9e%e6%80%a7%e5%92%8c%e5%ae%9e%e4%be%8b%e5%b1%9e%e6%80%a7">> Class attributes and instance attributes/类属性和实例属性</a> </li> <li><a href="#-yielding-none%e7%94%9f%e6%88%90-none">> yielding None/生成 None</a> </li> <li><a href="#-mutating-the-immutable%e5%bc%ba%e4%ba%ba%e6%89%80%e9%9a%be">> Mutating the immutable!/强人所难</a> </li> <li><a href="#-the-disappearing-variable-from-outer-scope%e6%b6%88%e5%a4%b1%e7%9a%84%e5%a4%96%e9%83%a8%e5%8f%98%e9%87%8f">> The disappearing variable from outer scope/消失的外部变量</a> </li> <li><a href="#-when-true-is-actually-false%e7%9c%9f%e4%ba%a6%e5%81%87">> When True is actually False/真亦假</a> </li> <li><a href="#-from-filled-to-none-in-one-instruction%e4%bb%8e%e6%9c%89%e5%88%b0%e6%97%a0">> From filled to None in one instruction…/从有到无…</a> </li> <li><a href="#-subclass-relationships%e5%ad%90%e7%b1%bb%e5%85%b3%e7%b3%bb-">> Subclass relationships/子类关系 *</a> </li> <li><a href="#-the-mysterious-key-type-conversion%e7%a5%9e%e7%a7%98%e7%9a%84%e9%94%ae%e5%9e%8b%e8%bd%ac%e6%8d%a2-">> The mysterious key type conversion/神秘的键型转换 *</a> </li> <li><a href="#-lets-see-if-you-can-guess-this%e7%9c%8b%e7%9c%8b%e4%bd%a0%e8%83%bd%e5%90%a6%e7%8c%9c%e5%88%b0%e8%bf%99%e4%b8%80%e7%82%b9">> Let’s see if you can guess this?/看看你能否猜到这一点?</a> </li> </ul> </li> <li><a href="#section-appearances-are-deceptive%e5%a4%96%e8%a1%a8%e6%98%af%e9%9d%a0%e4%b8%8d%e4%bd%8f%e7%9a%84">Section: Appearances are deceptive!/外表是靠不住的!</a> <ul> <li><a href="#-skipping-lines%e8%b7%b3%e8%bf%87%e4%b8%80%e8%a1%8c">> Skipping lines?/跳过一行?</a> </li> <li><a href="#-teleportation%e7%a9%ba%e9%97%b4%e7%a7%bb%e5%8a%a8-">> Teleportation/空间移动 *</a> </li> <li><a href="#-well-something-is-fishy%e5%97%af%e6%9c%89%e4%ba%9b%e5%8f%af%e7%96%91">> Well, something is fishy…/嗯, 有些可疑…</a> </li> </ul> </li> <li><a href="#section-watch-out-for-the-landmines%e5%b0%8f%e5%bf%83%e5%9c%b0%e9%9b%b7">Section: Watch out for the landmines!/小心地雷!</a> <ul> <li><a href="#-modifying-a-dictionary-while-iterating-over-it%e8%bf%ad%e4%bb%a3%e5%ad%97%e5%85%b8%e6%97%b6%e7%9a%84%e4%bf%ae%e6%94%b9">> Modifying a dictionary while iterating over it/迭代字典时的修改</a> </li> <li><a href="#-stubborn-del-operator%e5%9d%9a%e5%bc%ba%e7%9a%84-del-">> Stubborn <code>del</code> operator/坚强的 <code>del</code> *</a> </li> <li><a href="#-deleting-a-list-item-while-iterating%e8%bf%ad%e4%bb%a3%e5%88%97%e8%a1%a8%e6%97%b6%e5%88%a0%e9%99%a4%e5%85%83%e7%b4%a0">> Deleting a list item while iterating/迭代列表时删除元素</a> </li> <li><a href="#-loop-variables-leaking-out%e5%be%aa%e7%8e%af%e5%8f%98%e9%87%8f%e6%b3%84%e6%bc%8f">> Loop variables leaking out!/循环变量泄漏!</a> </li> <li><a href="#-beware-of-default-mutable-arguments%e5%bd%93%e5%bf%83%e9%bb%98%e8%ae%a4%e7%9a%84%e5%8f%af%e5%8f%98%e5%8f%82%e6%95%b0">> Beware of default mutable arguments!/当心默认的可变参数!</a> </li> <li><a href="#-catching-the-exceptions%e6%8d%95%e8%8e%b7%e5%bc%82%e5%b8%b8">> Catching the Exceptions/捕获异常</a> </li> <li><a href="#-same-operands-different-story%e5%90%8c%e4%ba%ba%e4%b8%8d%e5%90%8c%e5%91%bd">> Same operands, different story!/同人不同命!</a> </li> <li><a href="#-the-out-of-scope-variable%e5%a4%96%e9%83%a8%e4%bd%9c%e7%94%a8%e5%9f%9f%e5%8f%98%e9%87%8f">> The out of scope variable/外部作用域变量</a> </li> <li><a href="#-be-careful-with-chained-operations%e5%b0%8f%e5%bf%83%e9%93%be%e5%bc%8f%e6%93%8d%e4%bd%9c">> Be careful with chained operations/小心链式操作</a> </li> <li><a href="#-name-resolution-ignoring-class-scope%e5%bf%bd%e7%95%a5%e7%b1%bb%e4%bd%9c%e7%94%a8%e5%9f%9f%e7%9a%84%e5%90%8d%e7%a7%b0%e8%a7%a3%e6%9e%90">> Name resolution ignoring class scope/忽略类作用域的名称解析</a> </li> <li><a href="#-needle-in-a-haystack%e5%a4%a7%e6%b5%b7%e6%8d%9e%e9%92%88">> Needle in a Haystack/大海捞针</a> </li> </ul> </li> <li><a href="#section-the-hidden-treasures%e9%9a%90%e8%97%8f%e7%9a%84%e5%ae%9d%e8%97%8f">Section: The Hidden treasures!/隐藏的宝藏!</a> <ul> <li><a href="#-okay-python-can-you-make-me-flypython-%e5%8f%af%e5%90%a6%e5%b8%a6%e6%88%91%e9%a3%9e-">> Okay Python, Can you make me fly?/Python, 可否带我飞? *</a> </li> <li><a href="#-goto-but-whygoto-%e4%bd%86%e4%b8%ba%e4%bb%80%e4%b9%88-">> <code>goto</code>, but why?/<code>goto</code>, 但为什么? *</a> </li> <li><a href="#-brace-yourself%e5%81%9a%e5%a5%bd%e6%80%9d%e6%83%b3%e5%87%86%e5%a4%87-">> Brace yourself!/做好思想准备 *</a> </li> <li><a href="#-lets-meet-friendly-language-uncle-for-life%e8%ae%a9%e7%94%9f%e6%b4%bb%e6%9b%b4%e5%8f%8b%e5%a5%bd-">> Let’s meet Friendly Language Uncle For Life/让生活更友好 *</a> </li> <li><a href="#-even-python-understands-that-love-is-complicated%e8%bf%9ePython%e4%b9%9f%e7%9f%a5%e9%81%93%e7%88%b1%e6%98%af%e9%9a%be%e8%a8%80%e7%9a%84-">> Even Python understands that love is complicated/连Python也知道爱是难言的 *</a> </li> <li><a href="#-yes-it-exists%e6%98%af%e7%9a%84-%e5%ae%83%e5%ad%98%e5%9c%a8">> Yes, it exists!/是的, 它存在!</a> </li> <li><a href="#-inpinity%e6%97%a0%e9%99%90-">> Inpinity/无限 *</a> </li> <li><a href="#-mangling-time%e4%bf%ae%e9%a5%b0%e6%97%b6%e9%97%b4-">> Mangling time!修饰时间! *</a> </li> </ul> </li> <li><a href="#section-miscellaneous%e6%9d%82%e9%a1%b9">Section: Miscellaneous/杂项</a> <ul> <li><a href="#--is-faster%e6%9b%b4%e5%bf%ab%e7%9a%84-">> <code>+=</code> is faster/更快的 <code>+=</code> </a> </li> <li><a href="#-lets-make-a-giant-string%e6%9d%a5%e5%81%9a%e4%b8%aa%e5%b7%a8%e5%a4%a7%e7%9a%84%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%90%a7">> Let’s make a giant string!/来做个巨大的字符串吧!</a> </li> <li><a href="#-explicit-typecast-of-strings%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%9a%84%e6%98%be%e5%bc%8f%e7%b1%bb%e5%9e%8b%e8%bd%ac%e6%8d%a2">> Explicit typecast of strings/字符串的显式类型转换</a> </li> <li><a href="#-minor-ones%e5%b0%8f%e7%9f%a5%e8%af%86%e7%82%b9">> Minor Ones/小知识点</a> </li> </ul> </li> </ul> </li> <li><a href="#contributing%e8%b4%a1%e7%8c%ae">Contributing/贡献</a> </li> <li><a href="#acknowledgements%e8%87%b4%e8%b0%a2">Acknowledgements/致谢</a> </li> <li><a href="#-license%e8%ae%b8%e5%8f%af">🎓 License/许可</a> <ul> <li><a href="#help%e5%b8%ae%e5%8a%a9">Help/帮助</a> </li> <li><a href="#surprise-your-geeky-pythonist-friends%e6%83%b3%e7%bb%99%e4%bd%a0%e7%9a%84%e6%9e%81%e5%ae%a2%e6%9c%8b%e5%8f%8b%e4%b8%80%e4%b8%aa%e6%83%8a%e5%96%9c">Surprise your geeky pythonist friends?/想给你的极客朋友一个惊喜?</a> </li> <li><a href="#need-a-pdf-version%e9%9c%80%e8%a6%81%e6%9d%a5%e4%b8%80%e4%bb%bdpdf%e7%89%88%e7%9a%84">Need a pdf version?/需要来一份pdf版的?</a> </li> <li><a href="#follow-commit%e8%bf%bd%e8%b8%aaCommit">Follow Commit/追踪Commit</a> </li> <li><a href="#996icu">996.icu</a> </li> </ul> </li> </ul> <!-- /TOC --> <h1 id="structure-of-the-examples示例结构">Structure of the Examples/示例结构</h1> <p>所有示例的结构都如下所示:</p>
config your linux from begin
<p>intergrate with those augmentation method.</p> <p>this doc will</p> <ul> <li>Record those theory and the effect after transformation</li> <li>Show the codes for ez use</li> </ul> <p>And the complete <code>.py</code> will be intergrate in my classification pipeline</p> <p><strong>reference</strong> below:arrow_down_small:, if use them,start it for respect for his work.</p> <ul> <li><a href="https://github.com/aleju/imgaug#documentation" target="_blank" rel="noopener">aleju/imgaug</a> </li> <li>:star:<a href="https://github.com/albumentations-team/albumentations" target="_blank" rel="noopener">albumentations-team/albumentations: </a> </li> <li><a href="https://pytorch.org/vision/stable/transforms.html#transforms-on-pil-image-and-torch-tensor" target="_blank" rel="noopener">torchvision</a> </li> <li><a href="https://pillow.readthedocs.io/en/stable/reference/ImageEnhance.html" target="_blank" rel="noopener">PIL/ImageEnhance CCBS</a> </li> <li>opencv</li> </ul> <h2 id="principle">Principle</h2> <p><strong>Principle 1</strong> of coding: Don’t reinvent the wheel unless it’s needed</p> <ul> <li>具体而言,仅在函数的拓展性较差,无法对其定制化,满足我们的日常需求的时候,我们会自行编写函数从而满足我们的需求,否则我们直接引用已知的库,提升我们的实现效率。</li> </ul> <p><strong>Principle 2</strong> of coding 图像增强的两种使用方式:</p> <ul> <li> <p>做全集的增强后存储在本地,然后通过<strong>随机</strong>载入或者按一定<strong>batch</strong>的载入来实现我们增强的作用,(or contrasive),这种方式实际上是使用空间来换时间,由于处理是一次性的,所以如果空间充足的话,是更为充足的方式。</p>
困难样本再采样
Help to understand the data or model parallel in PT
A Simple Framework for Masked Image Modeling
<p>@aikenhong 2021</p> <p>References For Transformer:</p> <ol> <li>NLP <a href="https://lilianweng.github.io/lil-log/2020/04/07/the-transformer-family.html" target="_blank" rel="noopener">The Transformer Family (lilianweng.github.io)</a> </li> <li>VIT <a href="https://mp.weixin.qq.com/s?__biz=MjM5ODExNDA2MA==&mid=2449941486&idx=1&sn=336a47a31f4b4ff0f6cd8e2fc3cb184a&chksm=b13c258d864bac9b32d10ec36a058d77cc7cf90e066e76ae476fd2fde1b54256cd608a559bb6&mpshare=1&scene=23&srcid=1101rcBaNzO4pu00PCPsJOAl&sharer_sharetime=1635744838591&sharer_shareid=ec299f1c891fc72cd699f8eaeb8a0cd5#rd" target="_blank" rel="noopener">Transformer眼中世界 VS CNN眼中世界</a> </li> <li>李沐 NLP <a href="https://www.bilibili.com/video/BV1pu411o7BE?spm_id_from=333.999.0.0" target="_blank" rel="noopener">Transformer论文精读</a> </li> <li>Suveys <a href="https://mp.weixin.qq.com/s?__biz=MzUxNjcxMjQxNg==&mid=2247514162&idx=2&sn=d094eecbfd91ca1e478c41e29f2b98d5&scene=21#wechat_redirect" target="_blank" rel="noopener">cver1</a> , <a href="https://mp.weixin.qq.com/s?__biz=MzUxNjcxMjQxNg==&mid=2247514982&idx=2&sn=7e38021234b7ab5455429e4485128efd&chksm=f9a1c9e9ced640ff045d1c4fe9d4e98a785602d980b25df4fa18477dd2b4b829ed4fc3fd028f&scene=21#wechat_redirect" target="_blank" rel="noopener">cver2</a> ,<a href="https://mp.weixin.qq.com/s/_th7rXfZDuSu2xo7gdPp0w" target="_blank" rel="noopener">cver3</a> </li> </ol> <p>This blog will divided into several part : lil’s blog, the survey for ViT, we using those article to help us understand the transformer.</p> <p>综述我们以最新的一篇为准进行阅读,其他的可能后续进行查缺补漏把,如无必要,勿增烦恼。</p> <h2 id="intro导言">Intro导言</h2> <p>主要参考文章2来进行我们简单的导入</p> <h3 id="基本问题">基本问题</h3> <p>Transformer原本是NLP中的重要模型, 作为LSTM的后继者, 用于处理Seq2Seq的数据类型和情景, 若是要将Transformer运用到Vision的领域中, 首要的问题就是如何:</p> <p><strong>将Image作为序列化的Token输入Transform中</strong> , 而达成这个目的主要有三种典型的方法:</p> <ul> <li>像素点作为token,</li> <li>使用VAE离散化图片作为token再输入</li> <li>ViT: 将图片切为一个个<code>Patch</code>在经过线性的<code>projector</code>之后组成一个<code>embedding</code>表示进行交互</li> </ul> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/3070imgs/20211120010516"> <img alt="图片" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/3070imgs/20211120010516"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/3070imgs/20211120010516" style="display: block; margin: 0 auto;" alt="图片" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
Image Best Pre-Training With Online Tokenizer
Masked Autoencoders Are Scalable Vision Learners
<p>@AikenHong2021 OWL</p> <p>分析现有的OWL特点,和当前自己的研究做一个区分,也汲取一下别人的研究的要点,</p> <h2 id="reference">Reference</h2> <ol> <li>arxiv @ <a href="https://arxiv.org/pdf/2102.07848.pdf" target="_blank" rel="noopener">self-supervised feature improve open-world learning</a> </li> <li><a href="https://zhuanlan.zhihu.com/p/374268236" target="_blank" rel="noopener">arxiv</a> @ <a href="https://arxiv.org/pdf/2102.03526.pdf" target="_blank" rel="noopener">open-world semi-supervised learning</a> </li> <li>arxiv @ <a href="https://arxiv.org/pdf/2011.12906.pdf" target="_blank" rel="noopener">open-world learning without labels</a> </li> <li>arxiv @ <a href="https://arxiv.org/pdf/1801.05609.pdf" target="_blank" rel="noopener">unseen class discovery in open-world classification</a> </li> <li>arxiv @ <a href="https://arxiv.org/pdf/2109.06628.pdf" target="_blank" rel="noopener">Open-World Active Learning with Stacking Ensemble for Self-Driving Cars</a> </li> <li><a href="https://dl.acm.org/doi/pdf/10.1145/3308558.3313644" target="_blank" rel="noopener">www</a> @ <a href="https://blog.csdn.net/u011150266/article/details/118242627" target="_blank" rel="noopener">open-world learning and application to product classification</a> </li> <li>cvpr @ <a href="https://openaccess.thecvf.com/content/CVPR2021/papers/Mancini_Open_World_Compositional_Zero-Shot_Learning_CVPR_2021_paper.pdf" target="_blank" rel="noopener">open world composition zero-shot learning</a> </li> <li><a href="https://arxiv.org/pdf/2103.02603.pdf" target="_blank" rel="noopener">cvpr</a> @ <a href="https://zhuanlan.zhihu.com/p/356272271" target="_blank" rel="noopener">Towards Open World Object Detection</a> </li> <li>[cvpr](<a href="https://openaccess.thecvf.com/content_CVPR_2019/papers/Liu_Large-Scale_Long-Tailed_Recognition_in_an_Open_World_CVPR_2019_paper.pdf" target="_blank" rel="noopener">Large-Scale Long-Tailed Recognition in an Open World (thecvf.com)</a> ) @ <a href="https://github.com/zhmiao/OpenLongTailRecognition-OLTR" target="_blank" rel="noopener">Large-Scale Long-Tailed Recognition in an Open World</a> </li> </ol> <h2 id="conclusion">Conclusion</h2> <h2 id="papers">Papers</h2> <p><strong>Mulit Open world Learning Definition</strong></p>
my personal notebook for python, record basic knowledge
Some configurations of VsCode
vim's basic operation
Install and Set up LSP and UI
Semi-Supervised Object Detection with Soft Teacher
Using Vimscript to deploy my nvim(<=0.5)
deploy vim
<h1 id="stylegan-v1">StyleGAN V1</h1> <p>@AikenHong 2020 10.8</p> <p>《A Style-Based Generator Architecture for Generative Adversarial Networks》</p> <h2 id="related-work">Related Work:</h2> <p>继承的文献工作: ProGAN 参考解读:</p> <ul> <li><a href="https://blog.csdn.net/a312863063/article/details/88795147" target="_blank" rel="noopener">《其中子链接值得一看》</a> (包括源码解析啥的)(甚至还有GAN的笔记)</li> <li><a href="http://www.gwylab.com/pdf/Note_StyleGAN.pdf" target="_blank" rel="noopener">《StyleGan源码解析和拓展应用》</a> </li> <li><a href="https://cuijiahua.com/blog/2020/07/dl-22.html" target="_blank" rel="noopener">《秃头生成器1》</a> <a href="https://cloud.tencent.com/developer/article/1658228" target="_blank" rel="noopener">《秃头生成器2》 </a> </li> <li><a href="https://medium.com/swlh/hairstyle-transfer-semantic-editing-gan-latent-code-b3a6ccf91e82" target="_blank" rel="noopener">NO.3</a> </li> </ul> <p>Contribution(Problem):</p> <ol> <li>解纠缠:Mapping Network</li> <li>Noise Generator</li> <li>AdaIN before all conv</li> </ol> <h2 id="structure">Structure:</h2> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/img/20210930135941.png"> <img alt="image-20210930135938114" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/img/20210930135941.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/img/20210930135941.png" style="display: block; margin: 0 auto;" alt="image-20210930135938114" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/img/20210930161259.png"> <img alt="image-20210930161258031" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/img/20210930161259.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/imgs/img/20210930161259.png" style="display: block; margin: 0 auto;" alt="image-20210930161258031" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
Optimal Speed and Accuracy of Object Detection
Open World Learning
How to Understand Attention Mechanism
<p>Tags: Paper URL1: <a href="https://arxiv.org/pdf/1905.11946.pdf" target="_blank" rel="noopener">https://arxiv.org/pdf/1905.11946.pdf</a> URL2: <a href="https://arxiv.org/pdf/2104.00298.pdf" target="_blank" rel="noopener">https://arxiv.org/pdf/2104.00298.pdf</a> </p> <p>提出了一种模型缩放策略,如何更高效的平衡网络的深度、宽度、和图片分辨率 <strong>1. Efficient Net: Rethinking Model Scaling for Convolutional Neural Networks 2. EfficientNetV2: Smaller Models and Faster Training</strong></p> <hr> <p>@Aiken H 2021 find detail to code his</p> <h1 id="efficient-net-v1">Efficient Net V1</h1> <p>除了提出了缩放策略以外,还使用神经架构搜索还建立了一个新的baseline network,得到了一系列模型。</p> <p>平衡网络宽度、深度、分辨率至关重要,这种平衡可以通过简单的恒定比率缩放维度来实现,于是我们<strong>提出了一种简单有效的复合缩放</strong>方法。</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210610180603496.png"> <img alt="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210610180603496.png" loading="lazy" src="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210610180603496.png"class="responsive-image" src="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210610180603496.png" style="display: block; margin: 0 auto;" alt="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210610180603496.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p> <p>复合缩放的物理意义:输入图像更大的话就需要更多层来增加感受野和更多通道,从而能在更大的图像上捕获更多细粒度的图案,而宽度和深度(对于表达能力来说很重要)之间也存在着一定的关系,“我们”是第一个对此进行了建模的。</p> <p>从各个维度单独的进行缩放能发现都存在着增益瓶颈,如何去得到这么一个合适的等比缩放增益</p> <h2 id="motivation-and-method">Motivation and Method</h2> <p><strong>一些直观上的motivation,以及假想</strong></p>
google's GPU-server
install docker on wsl2 with portainer
A*算法,最短寻路算法,Dijkstra的变体的Py实现
init and set up WSL2
Some Special tips for Windows
Build your Gitbook
Mastering DouDizhu with Self-Play Deep Reinforcement Learning
conclusion for leetcode
<h1 id="downsamplingpooling的全面调研">DownSampling:Pooling的全面调研</h1> <p>@Aiken 2021 笔记摘录:</p> <p><a href="https://zhuanlan.zhihu.com/p/341820742" target="_blank" rel="noopener">深度神经网络中的池化方法:全面调研(1989-2020) - 知乎</a> ;<a href="https://www.sohu.com/a/442710521_823210" target="_blank" rel="noopener">相同论文的简单中文Version</a> </p> <p>16页综述,共计67篇参考文献。网络千奇百怪,但基础元素却大致相同!本文全面调研了1989至2020年一些著名且有用的池化方法,并主要对20种池化方法进行了详细介绍(这些方法,你都知道么?) 注1:文末附【计算机视…</p> <p>来自 <a href="https://zhuanlan.zhihu.com/p/341820742" target="_blank" rel="noopener">https://zhuanlan.zhihu.com/p/341820742</a> </p> <p>原文:《Pooling Methods in Deep Neural Networks, a Review》</p> <p><a href="https://zhuanlan.zhihu.com/p/112216409" target="_blank" rel="noopener">整合2</a> </p> <h2 id="池化的根本目的motivation">池化的根本目的(Motivation)</h2> <p>卷积神经网络是DNN的一种特殊类型,它由几个卷积层组成,每个卷积层后都有一个激活函数和一个池化层。</p> <p>池化层是重要的层,它对来自上一层的特征图执行下采样,并生成具有简化分辨率的新feature maps 。该层<strong>极大地减小了输入的空间尺寸</strong>。 它有两个主要目的。 首先是减少参数或权重的数量,从而减少计算成本。 第二是控制网络的过拟合。</p> <ul> <li>池化可以增加网络对于平移(旋转,伸缩)的不变性,提升网络的泛化能力。</li> <li>增大感受野;</li> <li>降低优化难度和参数数目,</li> </ul> <p>理想的池化方法应仅提取有用的信息,并丢弃无关的细节。</p> <p><strong>特征不变性、特征降维、在一定程度上防止过拟合,更方便优化</strong></p> <h2 id="主流的池化方法">主流的池化方法</h2> <h3 id="average-pooling-平均池化">Average Pooling 平均池化</h3> <p>没啥好说的,就是每个block取一个均值。如下图所示:更关注全局特征</p> <h3 id="max-pooling-最大值池化">Max Pooling 最大值池化</h3> <p>更关注重要的局部特征</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210219153154458.png"> <img alt="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210219153154458.png" loading="lazy" src="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210219153154458.png"class="responsive-image" src="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210219153154458.png" style="display: block; margin: 0 auto;" alt="https://raw.githubusercontent.com/AikenH/md-image/master/img/image-20210219153154458.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>
Reviving Known Knowledge for Discovering Novel Visual Categories in An Open World
<p>Desc: RL Finished?: Yes Tags: Paper</p> <p>通用人工智能,是否能通过强化学习的奖励机制就实现</p> <p><a href="https://mp.weixin.qq.com/s/XTNyLjZ9KfdtHY4Omb9_4w" target="_blank" rel="noopener">实现AGI,强化学习就够了?Sutton、Silver师徒联手:奖励机制足够实现各种目标</a> </p> <h2 id="对reward构建agi的可行性的分析和探讨">对reward构建AGI的可行性的分析和探讨</h2> <p>这篇文章实际上没有给出一个很好的方案通过reward来实现各种AGI的设计,但是给出了在每一种场景下的AGI的reward设计的设想把。和对用reward进行设计的可行性分析。 同时分析了:感知、社交、语言、泛化、模仿,这几个方面</p> <blockquote> <p>类似地,如果人工智能体的经验流足够丰富,那么单一目标(例如电池寿命或生存)可能隐含地需要实现同样广泛的子目标的能力,因此奖励最大化应该足以产生一种通用人工智能。</p> </blockquote> <p>这不久回到了最基础的问题,没有这种长线以及大量数据交互以及全面场景的经验流,来支撑这样一个AGI的学习,所以这不也是在现阶段上纸上谈兵嘛?</p> <p>对这篇论文我的总结是,我不推荐详细阅读,我觉得收益有限,太理想化,其实和强化学习本身的假设也没有太多新东西,我们可以假设强化学习能带来一个AGI,但是对应的约束和限制确实是有点多了。</p>
腾讯绝悟
Reinforcement learning Notebook 01
additional information for interview
Inverting the Inherence of Convolution for Visual Recognition
Knowledge Evolution in Neural Networks
all the text I have coded
init ssh and set up remote services and ...
Understand what's GAN
<p align="center"> <img src=" https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/DSCF4104_%E5%89%AF%E6%9C%AC.JPG" width=100%> </p> <p align="center"> 👋 Hi there! I'm AikenHong. </p> <h2 id="-about-me">🚀 About Me</h2> <p>I am a Machine Learning Engineer and passionate software developer, specializing in AI research, with a strong commitment to exploring the endless possibilities within the IT industry. I hold a master’s degree from Xi’an Jiaotong University.</p> <p>I am currently focused on AI and machine learning projects while diligently working to become a full-stack developer. My enthusiasm for exploring new worlds and concepts is fueled by my love for travel and immersive video games, which inspire my creativity and drive my eagerness to learn and try new things.</p>
test website's function is normal
how to build a Image Caption Dataset
<p>根据这次需要搜集的表情的数据集,整理一下搜索数据集的网站和思路等</p> <p>##PART1 “表情数据集” 下列是对数据搜集的要求:</p> <ul> <li>是否开源</li> <li>图片的大小和数量</li> <li>图片的采集方式</li> </ul> <p>eg:<strong>ck+</strong></p> <p>==数据来源及对应的搜索结果如下:==</p> <ul> <li><a href="https://toolbox.google.com/datasetsearch" target="_blank" rel="noopener">谷歌数据集搜索导航</a> </li> <li><a href="https://www.kairos.com/blog/60-facial-recognition-databases" target="_blank" rel="noopener">60个人脸识别的数据集汇总</a> </li> <li><a href="http://homepages.inf.ed.ac.uk/rbf/CVonline/Imagedbase.htm" target="_blank" rel="noopener">cv方面的好几百个数据集汇总</a> </li> <li><a href="www.cvpapers.com/datasets.html">另一个cv方向的数据集汇总</a> </li> <li><a href="https://github.com/ChanChiChoi/awesome-Face_Recognition" target="_blank" rel="noopener">github-CV汇总帖</a> </li> </ul> <ol> <li><a href="http://cbcsl.ece.ohio-state.edu/EmotionNetChallenge/index.html#overview" target="_blank" rel="noopener">EmotioNet</a> </li> </ol> <blockquote> <p>好像是一个什么挑战赛的数据集要博士后或者相应教员才能申请使用<a href="http://cbcsl.ece.ohio-state.edu/dbform_compound.html" target="_blank" rel="noopener">申请页面</a> <br> 没有具体的用于表情识别的数据子集的信息(好像数据很多,但是不知道在哪下,除了那个博士后申请的)</p> </blockquote> <ol start="2"> <li><a href="http://www.whdeng.cn/RAF/model1.html" target="_blank" rel="noopener">RAF</a> </li> </ol> <blockquote> <p>real-world Affective Face<br> <strong>数据量</strong>29672个图像,7种基本情绪,12种复合情绪,(包含种族年龄范围性别属性,5个准确定位和37个自动生成的定位)<br> **数据收集方式:**来源网络,大小应该很杂 (由40个人独立标定)<br> email</p> </blockquote> <p><strong>onenote中标记的和google 数据集搜索</strong></p> <ol> <li><a href="http://www.cs.columbia.edu/CAVE/databases/facetracer/" target="_blank" rel="noopener">FaceTracer Database</a> basic info:(有图片的原始url)(wild)(网上收集的)姿势、环境、照明、质量 等等参差不齐,<strong>大小不固定</strong> (针对<strong>非商业用途开放</strong>) (<strong>表情只有笑容</strong>) 故而不在详细收集,其他的标注信息,文中有详细讲解。</li> <li><a href="https://github.com/Tencent/tencent-ml-images?tdsourcetag=s_pctim_aiomsg#tencent-ml-images" target="_blank" rel="noopener">Tencent ML-Images</a> 可能会有表情吧,是一个很大规模的多标签数据集。。。</li> <li><a href="https://cvrl.nd.edu/projects/data/#nd-2006-data-set" target="_blank" rel="noopener">ND-2006 Dataset</a> 06年貌似 13450张图片 6种基本情感 888个对象</li> <li><a href="https://ai.google/tools/datasets/google-facial-expression/" target="_blank" rel="noopener">Google facial expression comparison dataset</a> 没有对数据集的基本信息介绍</li> </ol> <p><strong>百度/CSDN搜索</strong></p> <ul> <li><a href="https://blog.csdn.net/mathlxj/article/details/87920084" target="_blank" rel="noopener">https://blog.csdn.net/mathlxj/article/details/87920084</a> </li> <li><a href="https://blog.csdn.net/computerme/article/details/49469767" target="_blank" rel="noopener">https://blog.csdn.net/computerme/article/details/49469767</a> </li> </ul> <ol> <li><a href="https://zenodo.org/record/3451524#.XaQ4vm5uKmQ" target="_blank" rel="noopener">JAFFE</a> 只有219张,标签为分散离散值。 划分六种情感指标 256*256</li> <li>中科大的<a href="http://nvie.ustc.edu.cn/" target="_blank" rel="noopener">NVIE</a> 其中<strong>正面光照103人,左侧光照99人,右侧光照103人</strong>。每种光照下,每人有六种表情(<strong>喜悦、愤怒、哀 伤、恐惧、厌恶、惊奇</strong>)中的三种以上 平静帧、最大帧都已挑出 <a href="http://nvie.ustc.edu.cn/contact.html" target="_blank" rel="noopener">下载协议然后发给他们,才能下载</a> </li> <li><a href="https://sites.google.com/site/emotiwchallenge/" target="_blank" rel="noopener">AFEW database</a> <strong>数据来源</strong>:电影片段的剪辑。<strong>情绪类型</strong>:“六类基本表情”+中性 <a href="https://cs.anu.edu.au/few/emotiw2015.html" target="_blank" rel="noopener">SFEW database</a> <strong>数据来源</strong>:从AFEW中抽取出来的表情的静态帧。标注都在xml中</li> <li><a href="https://liris-accede.ec-lyon.fr/" target="_blank" rel="noopener">LIRIS-ACCEDE database</a> 同样也是基于电影抽取的,有三种数据集,包含离散的情感数据和基于维度的情感数据</li> <li><a href="http://www.cs.binghamton.edu/~lijun/Research/3DFE/3DFE_Analysis.html" target="_blank" rel="noopener">BU-3DFE database</a> 3D的人脸表情数据集 **数据来源:**找人来做实验采集,按照要求的情绪做出表情 **数据量:**2500个3d面部模型(来自100个人) 还有同类的一些包含序列的等等的数据集,估计差别不大。 同样需要email获取</li> <li><a href="http://www.cse.oulu.fi/CMV/Downloads/Oulu-CASIA" target="_blank" rel="noopener">Oulu-CASIA database</a> <strong>数据来源</strong>:让80个受试者做出相应的表情并用不同相机采集(红外可见光正常光和弱光) <strong>情绪类型</strong>:快乐、悲伤、惊讶、愤怒、恐惧、厌恶 email</li> <li><a href="http://www.socsci.ru.nl:8180/RaFD2/RaFD" target="_blank" rel="noopener">RAFD</a> <strong>数据来源</strong>:让67个受试者做出相应的表情在不同注视点和不同角度采集 <strong>情绪类型</strong>:8种情感类型 email</li> <li><a href="https://www.emotionlab.se/kdef/" target="_blank" rel="noopener">KDEF database</a> <strong>数据来源</strong>:柔和、均匀的光线,多角度拍摄表情,使用统一的T恤颜色,在拍摄过程中使用网格将参与者面部居中,以及在扫描过程中将眼睛和嘴巴定位在固定的图像坐标中。 <strong>数据量</strong>:4900张 (70个人,一个7个情感) 页面底端超链接(没进去成功。。)</li> <li><a href="http://mmlab.ie.cuhk.edu.hk/projects/socialrelation/index.html" target="_blank" rel="noopener">ExpW</a> 9w张左右,图片差不多8G</li> <li><a href="http://mohammadmahoor.com/affectnet/" target="_blank" rel="noopener">AffectNet</a> 百万量级数据(Emotion Net好像也是) <strong>获取方式</strong>:从互联网获取 <strong>7类情感</strong>,首页有各种情感的数据量,最少的也有4k张 填写申请表email下载</li> <li><a href="http://www.flintbox.com/public/project/4742/" target="_blank" rel="noopener">Multi-PIE Face Database</a> 收钱给数据集 <strong>获取方式</strong>:记录会话 <strong>数据量</strong>:75w图片</li> </ol> <p>一些视频数据集(具体的在CSDN站上)(这些我就没有去详细看了)</p>
<blockquote> <p>最近入手了树莓派 4B,打算基于树莓派做一些有趣&有用的项目,该系列笔记来记录个人树莓派学习和开发的历程。</p> </blockquote> <p>连载确认!该系列文章将会从装机开始,介绍树莓派用于以下几个项目的开发和部署过程:</p> <ul> <li><input checked="" disabled="" type="checkbox"> 基于 Docker 的家庭服务器</li> <li><input checked="" disabled="" type="checkbox"> 智能家居控制中枢</li> <li><input checked="" disabled="" type="checkbox"> 影音中心 & 电视机顶盒</li> <li><input checked="" disabled="" type="checkbox"> 物联网 or AI 的衍生应用实践</li> </ul> <p>本篇首先介绍亮机和开发环境设置过程,包含:组装、系统安装、远程开发环境设置(SSH、XRDP)</p> <h2 id="树莓派组装">树莓派组装</h2> <p>树莓派组装上比较防呆接口,唯一需要注意的是散热块和风扇的安装:</p> <ul> <li>在 CPU 和缓存等模块上装上散热片</li> <li>风扇的固定位置在外壳上,接线如下图所示</li> <li>SD 卡的安装位置在背面</li> </ul> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230626091027.jpg"> <img alt="微信图片_20230626091027.jpg" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230626091027.jpg"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230626091027.jpg" style="display: block; margin: 0 auto;" alt="微信图片_20230626091027.jpg" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p> <h2 id="系统安装">系统安装</h2> <blockquote> <p>该部分仅介绍我使用的系统安装和烧录软件,系统的选择需要根据自己所拥有的设备,以及目的去选择。</p> </blockquote> <p>硬件准备:SD 卡,读卡器,一台正常运行的 PC,可外接的屏幕。</p> <h3 id="系统烧录软件安装">系统烧录软件安装</h3> <p><a href="https://www.raspberrypi.com/software/" target="_blank" rel="noopener">Raspberry-Software</a> : 安装 Raspberry Pi Image 系统烧录软件</p> <p> <div class="post-img-view"> <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230625171352.png"> <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230625171352.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/3070PC/20230625171352.png" style="display: block; margin: 0 auto;" alt="image.png" /> </a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var images = document.querySelectorAll(".responsive-image"); var maxHeight = window.innerHeight / 2.5; images.forEach(function(image) { image.style.maxHeight = maxHeight + "px"; }); }); </script> </p>