diff --git "a/content/posts/windows+wsl2\345\220\216\347\253\257\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272.md" "b/content/posts/windows+wsl2\345\220\216\347\253\257\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272.md" index d8841f28..081bbde7 100755 --- "a/content/posts/windows+wsl2\345\220\216\347\253\257\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272.md" +++ "b/content/posts/windows+wsl2\345\220\216\347\253\257\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272.md" @@ -13,6 +13,8 @@ featuredImage: draft: false --- +2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 + 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Intel CPU的MacOS,基本所有常用的后端依赖都可以用homebrew安装,GUI和命令行的结合也是最方便的。不过Windows从10代之后添加了WSL/WSL2,将Linux命令行和Windows开发环境完美的结合起来,目前来说可用性还算不错了。 @@ -148,7 +150,7 @@ Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward 参考[WSL 安装](https://learn.microsoft.com/zh-cn/windows/wsl/install),新版wsl安装步骤非常简单,比之前手动安装容易的多。 -安装完成后可以运行`wsl --version`,结果中WSL版本应该>1.0. +安装完成后可以运行`wsl --version`,结果中WSL版本应该>2.0了。 ### 配置linux @@ -164,8 +166,6 @@ Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward ### 配置wsl -参考[这里](https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config). - 激活systemd,先确定发行版里面已经安装了`systemd`,然后编辑`/etc/wsl.conf`添加: ``` @@ -173,32 +173,19 @@ Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward systemd=true ``` -然后重启wsl即可。 - -然后是将网络改成桥接,在windows的home目录下添加`.wslconfig`文件,配置如下: - -``` -[wsl2] -networkingMode=bridged -vmSwitch=OUT -ipv6=true -``` - -这里的OUT,是自建的虚拟网卡。在Hyper-V的“虚拟交换机管理器”里,新建一个“外部”的虚拟机网络交换器,名字叫OUT,桥接到外部网络(用来上网的网卡),并勾选“允许管理操作系统共享此网络适配器”,点击确定即可,注意windows会离线一段时间。 +然后重启wsl即可,建议等下面操作结束之后再一起重启。 -重启WSL即可。如果需要静态ip,需要在上面添加`dhcp=false`配置行,并在wsl里面配置`/lib/systemd/network/wsl_external.network`,内容如下: +配置网络,在windows的home目录下添加`.wslconfig`,里面内容是: ``` -[Match] -Name=eth0 -[Network] -Description=bridge -DHCP=false -Address=192.168.1.10/24 # 自行修改 -Gateway=192.168.0.1 # 自行修改 +[experimental] +networkingMode=mirrored +dnsTunneling=true +firewall=true +autoProxy=true ``` -设置桥接网络之后,在windows中,或者局域网中,就可以直接访问wsl中的服务了(注意防火墙)。 +如果你是在windows中安装docker desktop,那么直接用就可以。如果是在wsl里面安装了docker,需要配置`/etc/docker/daemon.json`,在里面加入:`"iptables":false`,否则docker可能无法正常使用。 ## 注意事项 @@ -207,7 +194,6 @@ Gateway=192.168.0.1 # 自行修改 3. 如果是本地开发,优先建议在windows下直接使用IDE开发,不要使用wslg,因为很难用; 4. 类似java/python/golang这种高级语言,直接在windows下写代码调试就行; 5. 如果是C++开发,推荐使用CLion+WSL工具链。现在CLion已经支持Makefile工程,所以linux下所有开发都已经无碍;2023版本的CLion甚至支持vcpkg集成,有一说一比rust也差不多了; -6. 如果是CMake工程,也可以使用VisualStudio+Resharper工具链,不过Makefile工程还不行; 7. 建议wsl直接用root账户,不然会经常遇到各种权限问题,比较迷惑; 8. linux的PATH会自动继承windows的path,不过Linux系统里同名的文件优先级更高;所以像git这种软件到底装Windows还是装Linux要自己想清楚;全部在Linux下也可以,都装不是不行…就是要配置两遍; 9. WSL的命令行可以直接调用windows PATH下的exe文件,如`code`,不过非`/mnt`路径下可能无法正常使用; diff --git a/docs/authors/index.xml b/docs/authors/index.xml index ca96bf2d..d51ee868 100644 --- a/docs/authors/index.xml +++ b/docs/authors/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Fri, 15 Sep 2023 14:57:05 +0800 + Fri, 15 Sep 2023 14:57:05 +0800 + 个人介绍 https://yiuterran.github.io/blog/authors/tryao/ Fri, 15 Sep 2023 14:57:05 +0800 - https://yiuterran.github.io/blog/authors/tryao/ Self Introduction 少时曾攻经史,长成却成码农。家有懒猫伏膝侧,键盘声中迷蒙。 主业后端开发,大数据、流媒体、游戏后端之类的什么都懂一点。python/golang/j - diff --git a/docs/authors/tryao/index.html b/docs/authors/tryao/index.html index b0b68731..2f7cb872 100644 --- a/docs/authors/tryao/index.html +++ b/docs/authors/tryao/index.html @@ -208,7 +208,7 @@ "@type":"ListItem", "position": 20 , "name": "Windows+wsl2后端开发环境搭建", - "description": "2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int", + "description": "2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配", "url": "https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" },{ "@type":"ListItem", @@ -1056,7 +1056,7 @@

Self Introduction

- 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配
diff --git a/docs/authors/tryao/index.xml b/docs/authors/tryao/index.xml index 376febb8..7526b996 100644 --- a/docs/authors/tryao/index.xml +++ b/docs/authors/tryao/index.xml @@ -8,195 +8,154 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Fri, 15 Sep 2023 14:57:05 +0800 + Fri, 15 Sep 2023 14:57:05 +0800 + StatefulSet使用思路梳理 https://yiuterran.github.io/blog/posts/statefulset%E4%BD%BF%E7%94%A8%E6%80%9D%E8%B7%AF%E6%A2%B3%E7%90%86/ Fri, 15 Sep 2023 14:57:05 +0800 - https://yiuterran.github.io/blog/posts/statefulset%E4%BD%BF%E7%94%A8%E6%80%9D%E8%B7%AF%E6%A2%B3%E7%90%86/ 一般服务都是使用deployment部署,deploy的使用非常简单,无状态,随意调度。但是各种需要持久化数据的中间件都需要使用StatefulSet - Configmap挂载的几种情况 https://yiuterran.github.io/blog/posts/configmap%E6%8C%82%E8%BD%BD%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5/ Fri, 15 Sep 2023 09:33:41 +0800 - https://yiuterran.github.io/blog/posts/configmap%E6%8C%82%E8%BD%BD%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5/ ConfigMap挂载的用法比较多,很容易记混淆,这里简单做个梳理: 将某个key的值挂载为环境变量 apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ &quot;/bin/sh&quot;, &quot;-c&quot;, &quot;env&quot; ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: - Sqlx备忘录 https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ Tue, 12 Sep 2023 15:22:00 +0800 - https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ 很少用golang写增删改查,sqlx的用法和java差别很大,用的时候总是要从头看文档。这里写个备忘录方便以后查询,使用sqlx和go-sqlbui - 边侧高可用解决方案 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E9%AB%98%E5%8F%AF%E7%94%A8%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/ Tue, 01 Aug 2023 14:57:03 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E9%AB%98%E5%8F%AF%E7%94%A8%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/ 边侧服务高可用其实就是当年服务还没上云的时候,使用的那套技术栈。不过稍微有些不同的是,边缘计算需要考虑完全封闭的局域网,有点像组态软件的场景。 基于域名 - PromQL笔记 https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ Mon, 24 Jul 2023 11:21:33 +0800 - https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ 格式 类似influxdb,prometheus也有自己的line protocol: &lt;--------------- metric ---------------------&gt;&lt;-timestamp -&gt;&lt;-value-&gt; &lt;---metric name---&gt;{labelname=labelvalue,....} http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417560938 =&gt; 94355 http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417561287 =&gt; 94334 上面就表示在某个时间戳系统http GET - 解决k8s的javaSDK与jackson不兼容问题 https://yiuterran.github.io/blog/posts/%E8%A7%A3%E5%86%B3k8s%E7%9A%84javasdk%E4%B8%8Ejackson%E4%B8%8D%E5%85%BC%E5%AE%B9%E9%97%AE%E9%A2%98/ Mon, 10 Jul 2023 12:29:45 +0800 - https://yiuterran.github.io/blog/posts/%E8%A7%A3%E5%86%B3k8s%E7%9A%84javasdk%E4%B8%8Ejackson%E4%B8%8D%E5%85%BC%E5%AE%B9%E9%97%AE%E9%A2%98/ k8s的java sdk中json序列化使用了google自家的gosn,但是springboot中默认使用Jackson,我们的业务代码里面也习惯上使 - K3s存储插件使用笔记 https://yiuterran.github.io/blog/posts/k3s%E5%AD%98%E5%82%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ Mon, 12 Jun 2023 09:20:20 +0800 - https://yiuterran.github.io/blog/posts/k3s%E5%AD%98%E5%82%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ 原理 k8s存储主要依赖PV和PVC的机制,前者由运维人员声明可用的存储,如: apiVersion: v1 kind: PersistentVolume metadata: name: nfs spec: storageClassName: manual capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: 10.244.1.4 path: &quot;/&quot; 后者是用户(开发人员)声明的需求 - 边缘服务器管理工具选型 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ Mon, 06 Mar 2023 14:37:28 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ 这里我们主要的需求是能够穿透内网管理服务器,服务器大部分情况下应当是linux,但是也可能是windows。我们的服务要通过API和这个服务器管理软件 - Kotlin要点笔记 https://yiuterran.github.io/blog/posts/kotlin%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ Sun, 05 Mar 2023 12:58:37 +0800 - https://yiuterran.github.io/blog/posts/kotlin%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ 实际上学习kotlin的动力一直不足,因为java is enough. 不过最近打算写一个QQ机器人玩,现在流行的框架是基于kotlin的,虽然可以用HTTP API进行 - KubeEdge要点笔记 https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ Tue, 21 Feb 2023 15:07:54 +0800 - https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ 安装流程 首先要在云端安装k8s,理论上只需要master节点,可以没有worker,换句话说可以是一个单节点集群(但是要关闭NoSchedule的ta - K8s要点简记 https://yiuterran.github.io/blog/posts/k8s%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Fri, 10 Feb 2023 09:30:19 +0800 - https://yiuterran.github.io/blog/posts/k8s%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 22年的时候需要使用CICD的时候,看了一遍k8s相关的知识点。买了一本《深入剖析Kubernetes》,大致熟悉了常用的概念。 最近因为工作调动需要做 - Makefile要点简记 https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Wed, 25 Jan 2023 16:49:11 +0800 - https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 虽然现代C/CPP一般使用cmake作为工具链,但是如果要看陈年老项目,makefile相关的知识还是要掌握一些的,不然估计很难理清编译逻辑。这也是c - CMake速记 https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ Mon, 09 Jan 2023 16:42:44 +0800 - https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ 主要参考书籍《Modern CMake for C++》,以及《CMake Best Practices》,使用CMake版本3.25. 建议先看第一本,再看第二本。 使用 一般而言, - Tinode源码解析 https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ Mon, 14 Nov 2022 19:21:38 +0800 - https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ 概述 有朋友需要做一个im,简单做了一下技术调研,开源的实现其实蛮多的,这里挑几个说一下: Synapse/dendrite,matrix系,客户端比较多 - SRE读书笔记 https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ Thu, 22 Sep 2022 10:01:11 +0800 - https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ SRE相关的书籍,截止目前google出了2本,分别是2016年的的《Site Reliability Engineering: How Google Runs Production Systems》和2020年的《The Site Reliability Workbook》 - Ginkgo使用笔记 https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ Mon, 05 Sep 2022 18:10:06 +0800 - https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ go自带的单元测试比较适合测一个小函数,如果要做一系列的流程测试,则显得较为繁琐。 推荐使用ginkgo来做流程测试,BDD风格写出来的测试代码非常容易 - Influxdb Cluster集成 https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ Thu, 01 Sep 2022 15:47:56 +0800 - https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ 本文记录在golang项目中集成influxdb-cluster需要的知识储备。 术语 database 和MySQL中一致 batch \n分割的多行数据,用来批量写入。 influ - Zabbix配置记录 https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ Wed, 13 Jul 2022 12:21:28 +0800 - https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ 安装服务 这里演示的是物理机环境监控场景,容器场景还是更推荐k8s+prom来搞。 版本是zabbix6.0 LTS,官方已经不提供CentOS7的安装包了 - Golang定时器要点 https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ Thu, 07 Apr 2022 09:35:13 +0800 - https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ golang内置的定时器是基于多个四叉堆封装调度的,增删定时器的效率是O(lgn),所以大量定时器本身可能成为性能瓶颈。可以考虑使用开源的时间轮算法实 - Windows+wsl2后端开发环境搭建 https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ Fri, 04 Mar 2022 20:54:01 +0800 - https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ - 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配 - Gb28181解析 https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ Wed, 02 Mar 2022 09:46:50 +0800 - https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ 国标GB28181(以下简称国标或者gb)文档分析的文档我去年其实写过一版,但是由于原来的电脑炸了,文档还没来得及传上去就丢了(痛苦),所以还要重写一 - diff --git a/docs/authors/tryao/page/2/index.html b/docs/authors/tryao/page/2/index.html index b0b68731..2f7cb872 100644 --- a/docs/authors/tryao/page/2/index.html +++ b/docs/authors/tryao/page/2/index.html @@ -208,7 +208,7 @@ "@type":"ListItem", "position": 20 , "name": "Windows+wsl2后端开发环境搭建", - "description": "2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int", + "description": "2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配", "url": "https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" },{ "@type":"ListItem", @@ -1056,7 +1056,7 @@

Self Introduction

- 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配
diff --git a/docs/authors/tryao/page/3/index.html b/docs/authors/tryao/page/3/index.html index b0b68731..2f7cb872 100644 --- a/docs/authors/tryao/page/3/index.html +++ b/docs/authors/tryao/page/3/index.html @@ -208,7 +208,7 @@ "@type":"ListItem", "position": 20 , "name": "Windows+wsl2后端开发环境搭建", - "description": "2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int", + "description": "2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配", "url": "https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" },{ "@type":"ListItem", @@ -1056,7 +1056,7 @@

Self Introduction

- 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配
diff --git a/docs/authors/tryao/page/4/index.html b/docs/authors/tryao/page/4/index.html index b0b68731..2f7cb872 100644 --- a/docs/authors/tryao/page/4/index.html +++ b/docs/authors/tryao/page/4/index.html @@ -208,7 +208,7 @@ "@type":"ListItem", "position": 20 , "name": "Windows+wsl2后端开发环境搭建", - "description": "2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int", + "description": "2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配", "url": "https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" },{ "@type":"ListItem", @@ -1056,7 +1056,7 @@

Self Introduction

- 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配
diff --git a/docs/authors/tryao/page/5/index.html b/docs/authors/tryao/page/5/index.html index b0b68731..2f7cb872 100644 --- a/docs/authors/tryao/page/5/index.html +++ b/docs/authors/tryao/page/5/index.html @@ -208,7 +208,7 @@ "@type":"ListItem", "position": 20 , "name": "Windows+wsl2后端开发环境搭建", - "description": "2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int", + "description": "2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配", "url": "https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" },{ "@type":"ListItem", @@ -1056,7 +1056,7 @@

Self Introduction

- 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配
diff --git a/docs/categories/index.xml b/docs/categories/index.xml index a77ba428..75677141 100644 --- a/docs/categories/index.xml +++ b/docs/categories/index.xml @@ -8,24 +8,21 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Fri, 04 Mar 2022 20:54:01 +0800 + Fri, 04 Mar 2022 20:54:01 +0800 + 瞎折腾 https://yiuterran.github.io/blog/categories/%E7%9E%8E%E6%8A%98%E8%85%BE/ Fri, 04 Mar 2022 20:54:01 +0800 - https://yiuterran.github.io/blog/categories/%E7%9E%8E%E6%8A%98%E8%85%BE/ - work https://yiuterran.github.io/blog/categories/work/ Wed, 02 Mar 2022 09:46:50 +0800 - https://yiuterran.github.io/blog/categories/work/ - diff --git a/docs/categories/work/index.xml b/docs/categories/work/index.xml index 7e45e8e2..aa426683 100644 --- a/docs/categories/work/index.xml +++ b/docs/categories/work/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Wed, 02 Mar 2022 09:46:50 +0800 + Wed, 02 Mar 2022 09:46:50 +0800 + Gb28181解析 https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ Wed, 02 Mar 2022 09:46:50 +0800 - https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ 国标GB28181(以下简称国标或者gb)文档分析的文档我去年其实写过一版,但是由于原来的电脑炸了,文档还没来得及传上去就丢了(痛苦),所以还要重写一 - diff --git "a/docs/categories/\347\236\216\346\212\230\350\205\276/index.html" "b/docs/categories/\347\236\216\346\212\230\350\205\276/index.html" index e9958f01..1e0de901 100644 --- "a/docs/categories/\347\236\216\346\212\230\350\205\276/index.html" +++ "b/docs/categories/\347\236\216\346\212\230\350\205\276/index.html" @@ -94,7 +94,7 @@ "@type":"ListItem", "position": 1 , "name": "Windows+wsl2后端开发环境搭建", - "description": "2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int", + "description": "2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配", "url": "https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" } ] @@ -224,7 +224,7 @@

瞎折腾

- 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配
diff --git "a/docs/categories/\347\236\216\346\212\230\350\205\276/index.xml" "b/docs/categories/\347\236\216\346\212\230\350\205\276/index.xml" index 6d591bfc..3db88d0b 100644 --- "a/docs/categories/\347\236\216\346\212\230\350\205\276/index.xml" +++ "b/docs/categories/\347\236\216\346\212\230\350\205\276/index.xml" @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Fri, 04 Mar 2022 20:54:01 +0800 + Fri, 04 Mar 2022 20:54:01 +0800 + Windows+wsl2后端开发环境搭建 https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ Fri, 04 Mar 2022 20:54:01 +0800 - https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ - 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配 - diff --git a/docs/css/eureka.min.css b/docs/css/eureka.min.css index 483e6b8b..e8c67663 100644 --- a/docs/css/eureka.min.css +++ b/docs/css/eureka.min.css @@ -1 +1 @@ -/*!tailwindcss v3.2.4 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }:root{--color-eureka:#38b2ac;--color-primary-bg:#f2f2f7;--color-secondary-bg:#fff;--color-tertiary-bg:#f2f2f7;--color-primary-text:rgba(0,0,0,.85);--color-secondary-text:rgba(0,0,0,.7);--color-tertiary-text:rgba(0,0,0,.55);background-color:var(--color-primary-bg);color:var(--color-primary-text);font-family:Lora,Noto Serif SC,serif}.dark{--color-eureka:#38b2ac;--color-primary-bg:#000;--color-secondary-bg:#1c1c1e;--color-tertiary-bg:#2c2c2e;--color-primary-text:hsla(0,0%,100%,.85);--color-secondary-text:hsla(0,0%,100%,.7);--color-tertiary-text:hsla(0,0%,100%,.55)}a:hover{color:var(--color-eureka);transition-duration:.3s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}code{direction:ltr}.content{color:var(--color-primary-text);line-height:1.5;overflow-wrap:break-word}.content>*{margin-bottom:1rem}.content li+li{margin-top:.25rem}.content li>p+p{margin-top:1.5rem}.content strong{font-weight:600}.content a,.content a:hover{color:var(--color-eureka)}.content a:hover{text-decoration-line:underline}.content strong a{font-weight:700}.content h1{font-size:2.25rem;line-height:2.5rem;line-height:1.25}.content h1,.content h2{border-bottom-width:1px;font-weight:600;margin-bottom:1rem;margin-top:1.5rem;padding-bottom:.5rem}.content h2{font-size:1.5rem;line-height:2rem;line-height:1.25}.content h3{font-size:1.125rem;line-height:1.75rem;line-height:1.375}.content h3,.content h4{font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h4{font-size:1rem;line-height:1.5rem;line-height:1}.content h5,.content h6{font-size:.875rem;font-weight:600;line-height:1.25rem;line-height:1.25;margin-bottom:1rem;margin-top:1.5rem}.content blockquote,.content h6{color:var(--color-secondary-text)}.content blockquote{-webkit-padding-start:1rem;-webkit-padding-end:1rem;border-color:var(--color-tertiary-text);border-inline-start-width:4px;font-size:1rem;line-height:1.5rem;padding-inline-end:1rem;padding-inline-start:1rem}.content code{color:var(--color-tertiary-text);display:inline;font-family:SFMono-Regular,Menlo,monospace;font-size:.875rem;line-height:1.25rem;padding:.25rem}.content code,.content pre{background-color:var(--color-tertiary-bg);border-radius:.25rem}.content pre{padding:1rem}.content pre code{background-color:transparent;border-radius:0;display:block;overflow:auto;padding:0}.content ul{list-style-type:disc}.content ol,.content ul{-webkit-padding-start:2rem;font-size:1rem;line-height:1.5rem;padding-inline-start:2rem}.content ol{list-style-type:decimal}.content kbd{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);border-radius:.25rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:inline-block;font-family:SFMono-Regular,Menlo,monospace;font-size:.75rem;font-weight:400;line-height:1rem;padding:.25rem;vertical-align:middle}.content table{border-color:var(--color-secondary-text);display:block;font-size:1rem;line-height:1.5rem;overflow:auto}.content td,.content th{border-width:1px;padding:.25rem .75rem}.content .katex{overflow-x:auto;overflow-y:hidden}.content .katex *{border-color:var(--color-primary-text)}.content :target{margin-top:-4rem;padding-top:4rem}.sticky-toc{position:sticky;top:8rem;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);z-index:0}.sticky-toc a{color:var(--color-primary-text);transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sticky-toc a:hover{color:var(--color-eureka)}.sticky-toc ul{list-style-type:disc}.sticky-toc ol,.sticky-toc ul{-webkit-padding-start:2rem;font-size:1rem;line-height:1.5rem;padding-inline-start:2rem}.sticky-toc ol{list-style-type:decimal}.sticky-toc li+li{margin-top:.25rem}.sticky-toc li>p+p{margin-top:1.5rem}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.pagination{display:flex;justify-content:center}.pagination .page-item{align-items:center;display:flex}.pagination .page-item .page-link{margin:.5rem;padding:.5rem}.pagination .active,.pagination .page-item:not(.disabled):hover,.selected-menu-item{color:var(--color-eureka)}.selected-menu-item{border-bottom-color:transparent;border-top-color:var(--color-eureka)}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:sticky!important}.inset-0{bottom:0!important;left:0!important;right:0!important;top:0!important}.top-16{top:4rem!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-30{z-index:30!important}.z-40{z-index:40!important}.z-0{z-index:0!important}.z-50{z-index:50!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-5{grid-column:span 5/span 5!important}.col-span-2{grid-column:span 2/span 2!important}.col-start-2{grid-column-start:2!important}.col-start-3{grid-column-start:3!important}.col-start-5{grid-column-start:5!important}.row-span-2{grid-row:span 2/span 2!important}.row-span-3{grid-row:span 3/span 3!important}.row-start-3{grid-row-start:3!important}.row-start-2{grid-row-start:2!important}.-m-12{margin:-3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-4{margin-bottom:1rem!important;margin-top:1rem!important}.mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-8{margin-bottom:2rem!important;margin-top:2rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.mt-12{margin-top:3rem!important}.mt-4{margin-top:1rem!important}.mb-4{margin-bottom:1rem!important}.mb-2{margin-bottom:.5rem!important}.mt-2{margin-top:.5rem!important}.-mt-16{margin-top:-4rem!important}.-mt-10{margin-top:-2.5rem!important}.mb-6{margin-bottom:1.5rem!important}.mb-12{margin-bottom:3rem!important}.box-border{box-sizing:border-box!important}.block{display:block!important}.inline-block{display:inline-block!important}.flex{display:flex!important}.grid{display:grid!important}.hidden{display:none!important}.h-\(screen-16\){height:calc(100vh - 4rem)!important}.h-64{height:16rem!important}.h-96{height:24rem!important}.h-128{height:32rem!important}.h-160{height:40rem!important}.h-full{height:100%!important}.h-4{height:1rem!important}.h-24{height:6rem!important}.min-h-full{min-height:100%!important}.min-h-screen{min-height:100vh!important}.min-h-16{min-height:4rem!important}.w-full{width:100%!important}.w-48{width:12rem!important}.w-4{width:1rem!important}.w-24{width:6rem!important}.w-3\/12{width:25%!important}.max-w-screen-xl{max-width:1280px!important}.flex-none{flex:none!important}.shrink-0{flex-shrink:0!important}.grow{flex-grow:1!important}.cursor-pointer{cursor:pointer!important}.cursor-default{cursor:default!important}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}.flex-row{flex-direction:row!important}.flex-col{flex-direction:column!important}.flex-col-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.gap-4{gap:1rem!important}.gap-8{gap:2rem!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0!important;border-bottom-width:calc(1px*var(--tw-divide-y-reverse))!important;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))!important}.overflow-hidden{overflow:hidden!important}.overflow-y-auto{overflow-y:auto!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.border{border-width:1px!important}.border-b{border-bottom-width:1px!important}.border-t{border-top-width:1px!important}.border-transparent{border-color:transparent!important}.border-tertiary-bg{border-color:var(--color-tertiary-bg)!important}.bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.bg-white{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.bg-primary-bg{background-color:var(--color-primary-bg)!important}.bg-tertiary-bg{background-color:var(--color-tertiary-bg)!important}.bg-opacity-75{--tw-bg-opacity:0.75!important}.bg-cover{background-size:cover!important}.bg-auto{background-size:auto!important}.bg-contain{background-size:contain!important}.bg-fixed{background-attachment:fixed!important}.bg-local{background-attachment:local!important}.bg-scroll{background-attachment:scroll!important}.bg-center{background-position:50%!important}.bg-top{background-position:top!important}.bg-right{background-position:100%!important}.bg-bottom{background-position:bottom!important}.bg-left{background-position:0!important}.p-12{padding:3rem!important}.p-6{padding:1.5rem!important}.p-2{padding:.5rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-32{padding-bottom:8rem!important;padding-top:8rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-12{padding-bottom:3rem!important;padding-top:3rem!important}.py-8{padding-bottom:2rem!important;padding-top:2rem!important}.py-4{padding-bottom:1rem!important;padding-top:1rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-6{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.px-8{padding-left:2rem!important;padding-right:2rem!important}.pt-12{padding-top:3rem!important}.pb-4{padding-bottom:1rem!important}.pt-4{padding-top:1rem!important}.pt-16{padding-top:4rem!important}.pt-6{padding-top:1.5rem!important}.pb-8{padding-bottom:2rem!important}.pt-2{padding-top:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pb-1{padding-bottom:.25rem!important}.pb-6{padding-bottom:1.5rem!important}.pt-10{padding-top:2.5rem!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.font-bold{font-weight:700!important}.font-semibold{font-weight:600!important}.leading-normal{line-height:1.5!important}.text-black{--tw-text-opacity:1!important;color:rgb(0 0 0/var(--tw-text-opacity))!important}.text-primary-text{color:var(--color-primary-text)!important}.text-eureka{color:var(--color-eureka)!important}.text-tertiary-text{color:var(--color-tertiary-text)!important}.text-opacity-75{--tw-text-opacity:0.75!important}.opacity-0{opacity:0!important}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)!important}.shadow-2xl,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important}.transition{transition-duration:.15s!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.duration-200{transition-duration:.2s!important}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.ps-1{-webkit-padding-start:.25rem!important;padding-inline-start:.25rem!important}.ps-4{-webkit-padding-start:1rem!important;padding-inline-start:1rem!important}.pe-4{-webkit-padding-end:1rem!important;padding-inline-end:1rem!important}.ps-6{-webkit-padding-start:1.5rem!important;padding-inline-start:1.5rem!important}.pe-6{-webkit-padding-end:1.5rem!important;padding-inline-end:1.5rem!important}.ps-scrollbar{-webkit-padding-start:calc(100vw - 100%)!important;padding-inline-start:calc(100vw - 100%)!important}.ms-0{-webkit-margin-start:0!important;margin-inline-start:0!important}.ms-1{-webkit-margin-start:.25rem!important;margin-inline-start:.25rem!important}.me-1{-webkit-margin-end:.25rem!important;margin-inline-end:.25rem!important}.ms-2{-webkit-margin-start:.5rem!important;margin-inline-start:.5rem!important}.me-2{-webkit-margin-end:.5rem!important;margin-inline-end:.5rem!important}.ms-4{-webkit-margin-start:1rem!important;margin-inline-start:1rem!important}.me-4{-webkit-margin-end:1rem!important;margin-inline-end:1rem!important}.me-6{-webkit-margin-end:1.5rem!important;margin-inline-end:1.5rem!important}.ms-8{-webkit-margin-start:2rem!important;margin-inline-start:2rem!important}.me-8{-webkit-margin-end:2rem!important;margin-inline-end:2rem!important}.me-auto{-webkit-margin-end:auto!important;margin-inline-end:auto!important}[dir=rtl] .start-0{right:0!important}[dir=ltr] .start-0{left:0!important}[dir=rtl] .end-auto{left:auto!important}[dir=ltr] .end-auto{right:auto!important}.border-e{border-inline-end-width:1px!important}.border-s{border-inline-start-width:1px!important}.hover\:text-eureka:hover{color:var(--color-eureka)!important}.hover\:underline:hover{text-decoration-line:underline!important}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1)!important;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}@media(min-width:768px){.md\:mx-0{margin-left:0!important;margin-right:0!important}.md\:mt-0{margin-top:0!important}.md\:block{display:block!important}.md\:inline-block{display:inline-block!important}.md\:flex{display:flex!important}.md\:hidden{display:none!important}.md\:h-16{height:4rem!important}.md\:h-\(16-4px\){height:calc(4rem - 4px)!important}.md\:max-h-doc-sidebar{max-height:calc(100vh - 4rem - var(--height-doc-title,4rem))!important}.md\:w-auto{width:auto!important}.md\:w-1\/4{width:25%!important}.md\:w-3\/4{width:75%!important}.md\:grow{flex-grow:1!important}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.md\:flex-row{flex-direction:row!important}.md\:flex-col{flex-direction:column!important}.md\:items-center{align-items:center!important}.md\:justify-end{justify-content:flex-end!important}.md\:justify-between{justify-content:space-between!important}.md\:border-b-0{border-bottom-width:0!important}.md\:border-t-2{border-top-width:2px!important}.md\:border-b-2{border-bottom-width:2px!important}.md\:border-b{border-bottom-width:1px!important}.md\:bg-transparent{background-color:transparent!important}.md\:bg-primary-bg{background-color:var(--color-primary-bg)!important}.md\:bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:px-8{padding-left:2rem!important;padding-right:2rem!important}.md\:py-0{padding-top:0!important}.md\:pb-0,.md\:py-0{padding-bottom:0!important}.md\:pt-0{padding-top:0!important}.md\:pt-8{padding-top:2rem!important}.md\:text-right{text-align:right!important}.md\:text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.md\:leading-\(16-4px\){line-height:calc(4rem - 4px)!important}.md\:text-primary-text{color:var(--color-primary-text)!important}.md\:pe-0{-webkit-padding-end:0!important;padding-inline-end:0!important}.md\:pe-8{-webkit-padding-end:2rem!important;padding-inline-end:2rem!important}.md\:ms-0{-webkit-margin-start:0!important;margin-inline-start:0!important}.md\:me-4{-webkit-margin-end:1rem!important;margin-inline-end:1rem!important}.md\:me-8{-webkit-margin-end:2rem!important;margin-inline-end:2rem!important}[dir=rtl] .md\:end-0{left:0!important}[dir=ltr] .md\:end-0{right:0!important}[dir=rtl] .md\:start-auto{right:auto!important}[dir=ltr] .md\:start-auto{left:auto!important}.md\:border-e{border-inline-end-width:1px!important}}@media(min-width:1024px){.lg\:col-span-6{grid-column:span 6/span 6!important}.lg\:col-start-2{grid-column-start:2!important}.lg\:mb-0{margin-bottom:0!important}.lg\:block{display:block!important}.lg\:w-2\/3{width:66.666667%!important}.lg\:w-3\/4{width:75%!important}.lg\:w-4\/5{width:80%!important}.lg\:w-1\/5{width:20%!important}.lg\:w-1\/4{width:25%!important}.lg\:w-1\/3{width:33.333333%!important}.lg\:w-1\/2{width:50%!important}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}.lg\:flex-row{flex-direction:row!important}.lg\:flex-row-reverse{flex-direction:row-reverse!important}.lg\:px-4{padding-left:1rem!important;padding-right:1rem!important}.lg\:pt-12{padding-top:3rem!important}.lg\:ms-4{-webkit-margin-start:1rem!important;margin-inline-start:1rem!important}.lg\:me-4{-webkit-margin-end:1rem!important;margin-inline-end:1rem!important}.lg\:ms-8{-webkit-margin-start:2rem!important;margin-inline-start:2rem!important}}@media(min-width:1280px){.xl\:mx-16{margin-left:4rem!important;margin-right:4rem!important}.xl\:w-2\/12{width:16.666667%!important}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.xl\:px-8{padding-left:2rem!important;padding-right:2rem!important}.xl\:px-12{padding-left:3rem!important;padding-right:3rem!important}} \ No newline at end of file +/*!tailwindcss v3.3.5 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }:root{--color-eureka:#38b2ac;--color-primary-bg:#f2f2f7;--color-secondary-bg:#fff;--color-tertiary-bg:#f2f2f7;--color-primary-text:rgba(0,0,0,.85);--color-secondary-text:rgba(0,0,0,.7);--color-tertiary-text:rgba(0,0,0,.55);background-color:var(--color-primary-bg);color:var(--color-primary-text);font-family:Lora,Noto Serif SC,serif}.dark{--color-eureka:#38b2ac;--color-primary-bg:#000;--color-secondary-bg:#1c1c1e;--color-tertiary-bg:#2c2c2e;--color-primary-text:hsla(0,0%,100%,.85);--color-secondary-text:hsla(0,0%,100%,.7);--color-tertiary-text:hsla(0,0%,100%,.55)}a:hover{color:var(--color-eureka);transition-duration:.3s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}code{direction:ltr}.content{color:var(--color-primary-text);line-height:1.5;overflow-wrap:break-word}.content>*{margin-bottom:1rem}.content li+li{margin-top:.25rem}.content li>p+p{margin-top:1.5rem}.content strong{font-weight:600}.content a,.content a:hover{color:var(--color-eureka)}.content a:hover{text-decoration-line:underline}.content strong a{font-weight:700}.content h1{font-size:2.25rem;line-height:2.5rem;line-height:1.25}.content h1,.content h2{border-bottom-width:1px;font-weight:600;margin-bottom:1rem;margin-top:1.5rem;padding-bottom:.5rem}.content h2{font-size:1.5rem;line-height:2rem;line-height:1.25}.content h3{font-size:1.125rem;line-height:1.75rem;line-height:1.375}.content h3,.content h4{font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h4{font-size:1rem;line-height:1.5rem;line-height:1}.content h5,.content h6{font-size:.875rem;font-weight:600;line-height:1.25rem;line-height:1.25;margin-bottom:1rem;margin-top:1.5rem}.content blockquote,.content h6{color:var(--color-secondary-text)}.content blockquote{border-color:var(--color-tertiary-text);border-inline-start-width:4px;font-size:1rem;line-height:1.5rem;padding-inline-end:1rem;padding-inline-start:1rem}.content code{color:var(--color-tertiary-text);display:inline;font-family:SFMono-Regular,Menlo,monospace;font-size:.875rem;line-height:1.25rem;padding:.25rem}.content code,.content pre{background-color:var(--color-tertiary-bg);border-radius:.25rem}.content pre{padding:1rem}.content pre code{background-color:transparent;border-radius:0;display:block;overflow:auto;padding:0}.content ul{list-style-type:disc}.content ol,.content ul{font-size:1rem;line-height:1.5rem;padding-inline-start:2rem}.content ol{list-style-type:decimal}.content kbd{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);border-radius:.25rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:inline-block;font-family:SFMono-Regular,Menlo,monospace;font-size:.75rem;font-weight:400;line-height:1rem;padding:.25rem;vertical-align:middle}.content table{border-color:var(--color-secondary-text);display:block;font-size:1rem;line-height:1.5rem;overflow:auto}.content td,.content th{border-width:1px;padding:.25rem .75rem}.content .katex{overflow-x:auto;overflow-y:hidden}.content .katex *{border-color:var(--color-primary-text)}.content :target{margin-top:-4rem;padding-top:4rem}.sticky-toc{position:sticky;top:8rem;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);z-index:0}.sticky-toc a{color:var(--color-primary-text);transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sticky-toc a:hover{color:var(--color-eureka)}.sticky-toc ul{list-style-type:disc}.sticky-toc ol,.sticky-toc ul{font-size:1rem;line-height:1.5rem;padding-inline-start:2rem}.sticky-toc ol{list-style-type:decimal}.sticky-toc li+li{margin-top:.25rem}.sticky-toc li>p+p{margin-top:1.5rem}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.pagination{display:flex;justify-content:center}.pagination .page-item{align-items:center;display:flex}.pagination .page-item .page-link{margin:.5rem;padding:.5rem}.pagination .active,.pagination .page-item:not(.disabled):hover,.selected-menu-item{color:var(--color-eureka)}.selected-menu-item{border-bottom-color:transparent;border-top-color:var(--color-eureka)}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:sticky!important}.inset-0{inset:0!important}.end-auto{inset-inline-end:auto!important}.start-0{inset-inline-start:0!important}.top-16{top:4rem!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-30{z-index:30!important}.z-40{z-index:40!important}.z-50{z-index:50!important}.col-span-2{grid-column:span 2/span 2!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-5{grid-column:span 5/span 5!important}.col-start-2{grid-column-start:2!important}.col-start-3{grid-column-start:3!important}.col-start-5{grid-column-start:5!important}.row-span-2{grid-row:span 2/span 2!important}.row-span-3{grid-row:span 3/span 3!important}.row-start-2{grid-row-start:2!important}.row-start-3{grid-row-start:3!important}.-m-12{margin:-3rem!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-4{margin-bottom:1rem!important;margin-top:1rem!important}.my-8{margin-bottom:2rem!important;margin-top:2rem!important}.-me-2{margin-inline-end:-.5rem!important}.-mt-10{margin-top:-2.5rem!important}.-mt-16{margin-top:-4rem!important}.mb-12{margin-bottom:3rem!important}.mb-2{margin-bottom:.5rem!important}.mb-4{margin-bottom:1rem!important}.mb-6{margin-bottom:1.5rem!important}.mt-12{margin-top:3rem!important}.mt-2{margin-top:.5rem!important}.mt-4{margin-top:1rem!important}.box-border{box-sizing:border-box!important}.block{display:block!important}.inline-block{display:inline-block!important}.flex{display:flex!important}.grid{display:grid!important}.hidden{display:none!important}.h-\(screen-16\){height:calc(100vh - 4rem)!important}.h-128{height:32rem!important}.h-160{height:40rem!important}.h-24{height:6rem!important}.h-4{height:1rem!important}.h-64{height:16rem!important}.h-96{height:24rem!important}.h-full{height:100%!important}.min-h-16{min-height:4rem!important}.min-h-full{min-height:100%!important}.min-h-screen{min-height:100vh!important}.w-24{width:6rem!important}.w-3\/12{width:25%!important}.w-4{width:1rem!important}.w-48{width:12rem!important}.w-full{width:100%!important}.max-w-screen-xl{max-width:1280px!important}.flex-none{flex:none!important}.shrink-0{flex-shrink:0!important}.grow{flex-grow:1!important}.cursor-default{cursor:default!important}.cursor-pointer{cursor:pointer!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}.flex-row{flex-direction:row!important}.flex-col{flex-direction:column!important}.flex-col-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.gap-4{gap:1rem!important}.gap-8{gap:2rem!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0!important;border-bottom-width:calc(1px*var(--tw-divide-y-reverse))!important;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))!important}.overflow-hidden{overflow:hidden!important}.overflow-y-auto{overflow-y:auto!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.border{border-width:1px!important}.border-b{border-bottom-width:1px!important}.border-t{border-top-width:1px!important}.border-tertiary-bg{border-color:var(--color-tertiary-bg)!important}.border-transparent{border-color:transparent!important}.bg-primary-bg{background-color:var(--color-primary-bg)!important}.bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.bg-tertiary-bg{background-color:var(--color-tertiary-bg)!important}.bg-white{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.bg-opacity-75{--tw-bg-opacity:0.75!important}.bg-auto{background-size:auto!important}.bg-contain{background-size:contain!important}.bg-cover{background-size:cover!important}.bg-fixed{background-attachment:fixed!important}.bg-local{background-attachment:local!important}.bg-scroll{background-attachment:scroll!important}.bg-bottom{background-position:bottom!important}.bg-center{background-position:50%!important}.bg-left{background-position:0!important}.bg-right{background-position:100%!important}.bg-top{background-position:top!important}.p-12{padding:3rem!important}.p-2{padding:.5rem!important}.p-6{padding:1.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-8{padding-left:2rem!important;padding-right:2rem!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-12{padding-bottom:3rem!important;padding-top:3rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-32{padding-bottom:8rem!important;padding-top:8rem!important}.py-4{padding-bottom:1rem!important;padding-top:1rem!important}.py-6{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-8{padding-bottom:2rem!important;padding-top:2rem!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-4{padding-bottom:1rem!important}.pb-6{padding-bottom:1.5rem!important}.pb-8{padding-bottom:2rem!important}.pt-10{padding-top:2.5rem!important}.pt-12{padding-top:3rem!important}.pt-16{padding-top:4rem!important}.pt-2{padding-top:.5rem!important}.pt-4{padding-top:1rem!important}.pt-6{padding-top:1.5rem!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.font-bold{font-weight:700!important}.font-semibold{font-weight:600!important}.leading-normal{line-height:1.5!important}.text-black{--tw-text-opacity:1!important;color:rgb(0 0 0/var(--tw-text-opacity))!important}.text-eureka{color:var(--color-eureka)!important}.text-primary-text{color:var(--color-primary-text)!important}.text-tertiary-text{color:var(--color-tertiary-text)!important}.text-opacity-75{--tw-text-opacity:0.75!important}.opacity-0{opacity:0!important}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)!important}.shadow-2xl,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important}.transition{transition-duration:.15s!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.duration-200{transition-duration:.2s!important}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.ps-1{padding-inline-start:.25rem!important}.ps-4{padding-inline-start:1rem!important}.pe-4{padding-inline-end:1rem!important}.ps-6{padding-inline-start:1.5rem!important}.pe-6{padding-inline-end:1.5rem!important}.ps-scrollbar{padding-inline-start:calc(100vw - 100%)!important}.ms-0{margin-inline-start:0!important}.ms-1{margin-inline-start:.25rem!important}.me-1{margin-inline-end:.25rem!important}.ms-2{margin-inline-start:.5rem!important}.me-2{margin-inline-end:.5rem!important}.ms-4{margin-inline-start:1rem!important}.me-4{margin-inline-end:1rem!important}.me-6{margin-inline-end:1.5rem!important}.ms-8{margin-inline-start:2rem!important}.me-8{margin-inline-end:2rem!important}.me-auto{margin-inline-end:auto!important}[dir=rtl] .start-0{right:0!important}[dir=ltr] .start-0{left:0!important}[dir=rtl] .end-auto{left:auto!important}[dir=ltr] .end-auto{right:auto!important}.border-e{border-inline-end-width:1px!important}.border-s{border-inline-start-width:1px!important}.hover\:text-eureka:hover{color:var(--color-eureka)!important}.hover\:underline:hover{text-decoration-line:underline!important}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1)!important;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}@media(min-width:768px){.md\:end-0{inset-inline-end:0!important}.md\:start-auto{inset-inline-start:auto!important}.md\:mx-0{margin-left:0!important;margin-right:0!important}.md\:mt-0{margin-top:0!important}.md\:block{display:block!important}.md\:inline-block{display:inline-block!important}.md\:flex{display:flex!important}.md\:hidden{display:none!important}.md\:h-\(16-4px\){height:calc(4rem - 4px)!important}.md\:h-16{height:4rem!important}.md\:max-h-doc-sidebar{max-height:calc(100vh - 4rem - var(--height-doc-title,4rem))!important}.md\:w-1\/4{width:25%!important}.md\:w-3\/4{width:75%!important}.md\:w-auto{width:auto!important}.md\:grow{flex-grow:1!important}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.md\:flex-row{flex-direction:row!important}.md\:flex-col{flex-direction:column!important}.md\:items-center{align-items:center!important}.md\:justify-end{justify-content:flex-end!important}.md\:justify-between{justify-content:space-between!important}.md\:border-b{border-bottom-width:1px!important}.md\:border-b-0{border-bottom-width:0!important}.md\:border-b-2{border-bottom-width:2px!important}.md\:border-t-2{border-top-width:2px!important}.md\:bg-primary-bg{background-color:var(--color-primary-bg)!important}.md\:bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.md\:bg-transparent{background-color:transparent!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:px-8{padding-left:2rem!important;padding-right:2rem!important}.md\:py-0{padding-top:0!important}.md\:pb-0,.md\:py-0{padding-bottom:0!important}.md\:pt-0{padding-top:0!important}.md\:pt-8{padding-top:2rem!important}.md\:text-right{text-align:right!important}.md\:text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.md\:leading-\(16-4px\){line-height:calc(4rem - 4px)!important}.md\:text-primary-text{color:var(--color-primary-text)!important}.md\:pe-0{padding-inline-end:0!important}.md\:pe-8{padding-inline-end:2rem!important}.md\:ms-0{margin-inline-start:0!important}.md\:me-4{margin-inline-end:1rem!important}.md\:me-8{margin-inline-end:2rem!important}[dir=rtl] .md\:end-0{left:0!important}[dir=ltr] .md\:end-0{right:0!important}[dir=rtl] .md\:start-auto{right:auto!important}[dir=ltr] .md\:start-auto{left:auto!important}.md\:border-e{border-inline-end-width:1px!important}}@media(min-width:1024px){.lg\:col-span-6{grid-column:span 6/span 6!important}.lg\:col-start-2{grid-column-start:2!important}.lg\:mb-0{margin-bottom:0!important}.lg\:block{display:block!important}.lg\:w-1\/2{width:50%!important}.lg\:w-1\/3{width:33.333333%!important}.lg\:w-1\/4{width:25%!important}.lg\:w-1\/5{width:20%!important}.lg\:w-2\/3{width:66.666667%!important}.lg\:w-3\/4{width:75%!important}.lg\:w-4\/5{width:80%!important}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}.lg\:flex-row{flex-direction:row!important}.lg\:flex-row-reverse{flex-direction:row-reverse!important}.lg\:px-4{padding-left:1rem!important;padding-right:1rem!important}.lg\:pt-12{padding-top:3rem!important}.lg\:ms-4{margin-inline-start:1rem!important}.lg\:me-4{margin-inline-end:1rem!important}.lg\:ms-8{margin-inline-start:2rem!important}}@media(min-width:1280px){.xl\:mx-16{margin-left:4rem!important;margin-right:4rem!important}.xl\:w-2\/12{width:16.666667%!important}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.xl\:px-12{padding-left:3rem!important;padding-right:3rem!important}.xl\:px-8{padding-left:2rem!important;padding-right:2rem!important}} \ No newline at end of file diff --git a/docs/docs/index.xml b/docs/docs/index.xml index 272f1642..b5d634fc 100644 --- a/docs/docs/index.xml +++ b/docs/docs/index.xml @@ -7,6 +7,7 @@ Hugo -- gohugo.io zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - + + diff --git a/docs/index.xml b/docs/index.xml index 11313b92..af18103b 100644 --- a/docs/index.xml +++ b/docs/index.xml @@ -8,240 +8,189 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Fri, 15 Sep 2023 14:57:05 +0800 + Fri, 15 Sep 2023 14:57:05 +0800 + StatefulSet使用思路梳理 https://yiuterran.github.io/blog/posts/statefulset%E4%BD%BF%E7%94%A8%E6%80%9D%E8%B7%AF%E6%A2%B3%E7%90%86/ Fri, 15 Sep 2023 14:57:05 +0800 - https://yiuterran.github.io/blog/posts/statefulset%E4%BD%BF%E7%94%A8%E6%80%9D%E8%B7%AF%E6%A2%B3%E7%90%86/ 一般服务都是使用deployment部署,deploy的使用非常简单,无状态,随意调度。但是各种需要持久化数据的中间件都需要使用StatefulSet - Configmap挂载的几种情况 https://yiuterran.github.io/blog/posts/configmap%E6%8C%82%E8%BD%BD%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5/ Fri, 15 Sep 2023 09:33:41 +0800 - https://yiuterran.github.io/blog/posts/configmap%E6%8C%82%E8%BD%BD%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5/ ConfigMap挂载的用法比较多,很容易记混淆,这里简单做个梳理: 将某个key的值挂载为环境变量 apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ &quot;/bin/sh&quot;, &quot;-c&quot;, &quot;env&quot; ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: - Sqlx备忘录 https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ Tue, 12 Sep 2023 15:22:00 +0800 - https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ 很少用golang写增删改查,sqlx的用法和java差别很大,用的时候总是要从头看文档。这里写个备忘录方便以后查询,使用sqlx和go-sqlbui - 边侧高可用解决方案 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E9%AB%98%E5%8F%AF%E7%94%A8%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/ Tue, 01 Aug 2023 14:57:03 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E9%AB%98%E5%8F%AF%E7%94%A8%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/ 边侧服务高可用其实就是当年服务还没上云的时候,使用的那套技术栈。不过稍微有些不同的是,边缘计算需要考虑完全封闭的局域网,有点像组态软件的场景。 基于域名 - 边侧监控选型 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E7%9B%91%E6%8E%A7%E9%80%89%E5%9E%8B/ Wed, 26 Jul 2023 12:06:43 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E7%9B%91%E6%8E%A7%E9%80%89%E5%9E%8B/ 边侧监控方案 问题 边缘计算v2适配了目前所有流行的应用部署方式: 裸系统(物理机)部署; docker部署; k8s部署; 因此对应的监控系统也要考虑兼顾各种部 - PromQL笔记 https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ Mon, 24 Jul 2023 11:21:33 +0800 - https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ 格式 类似influxdb,prometheus也有自己的line protocol: &lt;--------------- metric ---------------------&gt;&lt;-timestamp -&gt;&lt;-value-&gt; &lt;---metric name---&gt;{labelname=labelvalue,....} http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417560938 =&gt; 94355 http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417561287 =&gt; 94334 上面就表示在某个时间戳系统http GET - 解决k8s的javaSDK与jackson不兼容问题 https://yiuterran.github.io/blog/posts/%E8%A7%A3%E5%86%B3k8s%E7%9A%84javasdk%E4%B8%8Ejackson%E4%B8%8D%E5%85%BC%E5%AE%B9%E9%97%AE%E9%A2%98/ Mon, 10 Jul 2023 12:29:45 +0800 - https://yiuterran.github.io/blog/posts/%E8%A7%A3%E5%86%B3k8s%E7%9A%84javasdk%E4%B8%8Ejackson%E4%B8%8D%E5%85%BC%E5%AE%B9%E9%97%AE%E9%A2%98/ k8s的java sdk中json序列化使用了google自家的gosn,但是springboot中默认使用Jackson,我们的业务代码里面也习惯上使 - K3s存储插件使用笔记 https://yiuterran.github.io/blog/posts/k3s%E5%AD%98%E5%82%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ Mon, 12 Jun 2023 09:20:20 +0800 - https://yiuterran.github.io/blog/posts/k3s%E5%AD%98%E5%82%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ 原理 k8s存储主要依赖PV和PVC的机制,前者由运维人员声明可用的存储,如: apiVersion: v1 kind: PersistentVolume metadata: name: nfs spec: storageClassName: manual capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: 10.244.1.4 path: &quot;/&quot; 后者是用户(开发人员)声明的需求 - 边缘服务器管理工具选型 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ Mon, 06 Mar 2023 14:37:28 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ 这里我们主要的需求是能够穿透内网管理服务器,服务器大部分情况下应当是linux,但是也可能是windows。我们的服务要通过API和这个服务器管理软件 - Kotlin要点笔记 https://yiuterran.github.io/blog/posts/kotlin%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ Sun, 05 Mar 2023 12:58:37 +0800 - https://yiuterran.github.io/blog/posts/kotlin%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ 实际上学习kotlin的动力一直不足,因为java is enough. 不过最近打算写一个QQ机器人玩,现在流行的框架是基于kotlin的,虽然可以用HTTP API进行 - KubeEdge要点笔记 https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ Tue, 21 Feb 2023 15:07:54 +0800 - https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ 安装流程 首先要在云端安装k8s,理论上只需要master节点,可以没有worker,换句话说可以是一个单节点集群(但是要关闭NoSchedule的ta - K8s要点简记 https://yiuterran.github.io/blog/posts/k8s%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Fri, 10 Feb 2023 09:30:19 +0800 - https://yiuterran.github.io/blog/posts/k8s%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 22年的时候需要使用CICD的时候,看了一遍k8s相关的知识点。买了一本《深入剖析Kubernetes》,大致熟悉了常用的概念。 最近因为工作调动需要做 - Makefile要点简记 https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Wed, 25 Jan 2023 16:49:11 +0800 - https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 虽然现代C/CPP一般使用cmake作为工具链,但是如果要看陈年老项目,makefile相关的知识还是要掌握一些的,不然估计很难理清编译逻辑。这也是c - CMake速记 https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ Mon, 09 Jan 2023 16:42:44 +0800 - https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ 主要参考书籍《Modern CMake for C++》,以及《CMake Best Practices》,使用CMake版本3.25. 建议先看第一本,再看第二本。 使用 一般而言, - Golang服务接入OpenTelemetry https://yiuterran.github.io/blog/posts/golang%E6%9C%8D%E5%8A%A1%E6%8E%A5%E5%85%A5opentelemetry/ Mon, 05 Dec 2022 11:12:41 +0800 - https://yiuterran.github.io/blog/posts/golang%E6%9C%8D%E5%8A%A1%E6%8E%A5%E5%85%A5opentelemetry/ 三大支柱中,Log是最简单的,metric也不难。对于golang而言,最麻烦的是trace,这时候就分外羡慕java这种可以自动注入的语言了。 基本设 - Tinode源码解析 https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ Mon, 14 Nov 2022 19:21:38 +0800 - https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ 概述 有朋友需要做一个im,简单做了一下技术调研,开源的实现其实蛮多的,这里挑几个说一下: Synapse/dendrite,matrix系,客户端比较多 - 监控平台调研报告 https://yiuterran.github.io/blog/posts/%E7%9B%91%E6%8E%A7%E5%B9%B3%E5%8F%B0%E8%B0%83%E7%A0%94%E6%8A%A5%E5%91%8A/ Tue, 18 Oct 2022 14:47:33 +0800 - https://yiuterran.github.io/blog/posts/%E7%9B%91%E6%8E%A7%E5%B9%B3%E5%8F%B0%E8%B0%83%E7%A0%94%E6%8A%A5%E5%91%8A/ 广义的监控又称为Application Performance Monitoring(APM),即应用性能监控。其数据类型主要包括:指标数据(Metrics),日志文本(Lo - Elastic Observability系统搭建 https://yiuterran.github.io/blog/posts/es-stack%E5%8F%AF%E8%A7%82%E6%B5%8B%E6%80%A7%E8%90%BD%E5%9C%B0/ Wed, 12 Oct 2022 17:52:42 +0800 - https://yiuterran.github.io/blog/posts/es-stack%E5%8F%AF%E8%A7%82%E6%B5%8B%E6%80%A7%E8%90%BD%E5%9C%B0/ 随着ES v8.4的发布,es对于可观测性三支柱(Metric/Trace/Log)都具有较为完备的支持,Alert功能也能满足一般需求,kibana的 - SRE读书笔记 https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ Thu, 22 Sep 2022 10:01:11 +0800 - https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ SRE相关的书籍,截止目前google出了2本,分别是2016年的的《Site Reliability Engineering: How Google Runs Production Systems》和2020年的《The Site Reliability Workbook》 - Ginkgo使用笔记 https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ Mon, 05 Sep 2022 18:10:06 +0800 - https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ go自带的单元测试比较适合测一个小函数,如果要做一系列的流程测试,则显得较为繁琐。 推荐使用ginkgo来做流程测试,BDD风格写出来的测试代码非常容易 - Influxdb Cluster集成 https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ Thu, 01 Sep 2022 15:47:56 +0800 - https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ 本文记录在golang项目中集成influxdb-cluster需要的知识储备。 术语 database 和MySQL中一致 batch \n分割的多行数据,用来批量写入。 influ - Zabbix配置记录 https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ Wed, 13 Jul 2022 12:21:28 +0800 - https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ 安装服务 这里演示的是物理机环境监控场景,容器场景还是更推荐k8s+prom来搞。 版本是zabbix6.0 LTS,官方已经不提供CentOS7的安装包了 - Golang定时器要点 https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ Thu, 07 Apr 2022 09:35:13 +0800 - https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ golang内置的定时器是基于多个四叉堆封装调度的,增删定时器的效率是O(lgn),所以大量定时器本身可能成为性能瓶颈。可以考虑使用开源的时间轮算法实 - Windows+wsl2后端开发环境搭建 https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ Fri, 04 Mar 2022 20:54:01 +0800 - https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ - 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配 - Gb28181解析 https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ Wed, 02 Mar 2022 09:46:50 +0800 - https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ 国标GB28181(以下简称国标或者gb)文档分析的文档我去年其实写过一版,但是由于原来的电脑炸了,文档还没来得及传上去就丢了(痛苦),所以还要重写一 - 重新启程 https://yiuterran.github.io/blog/posts/first-post/ Sun, 27 Feb 2022 20:27:16 +0800 - https://yiuterran.github.io/blog/posts/first-post/ MBP2015 Late显卡坏了,这件事我处理的不好导致原来的数据都丢了。 就上上周在公司,出去忙了一会儿回来之后发现mbp休眠了,但是敲击键盘却无法唤醒。重启之后可 - diff --git a/docs/posts/index.xml b/docs/posts/index.xml index 0f095521..9d843630 100644 --- a/docs/posts/index.xml +++ b/docs/posts/index.xml @@ -8,240 +8,189 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Fri, 15 Sep 2023 14:57:05 +0800 + Fri, 15 Sep 2023 14:57:05 +0800 + StatefulSet使用思路梳理 https://yiuterran.github.io/blog/posts/statefulset%E4%BD%BF%E7%94%A8%E6%80%9D%E8%B7%AF%E6%A2%B3%E7%90%86/ Fri, 15 Sep 2023 14:57:05 +0800 - https://yiuterran.github.io/blog/posts/statefulset%E4%BD%BF%E7%94%A8%E6%80%9D%E8%B7%AF%E6%A2%B3%E7%90%86/ 一般服务都是使用deployment部署,deploy的使用非常简单,无状态,随意调度。但是各种需要持久化数据的中间件都需要使用StatefulSet - Configmap挂载的几种情况 https://yiuterran.github.io/blog/posts/configmap%E6%8C%82%E8%BD%BD%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5/ Fri, 15 Sep 2023 09:33:41 +0800 - https://yiuterran.github.io/blog/posts/configmap%E6%8C%82%E8%BD%BD%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5/ ConfigMap挂载的用法比较多,很容易记混淆,这里简单做个梳理: 将某个key的值挂载为环境变量 apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ &quot;/bin/sh&quot;, &quot;-c&quot;, &quot;env&quot; ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: - Sqlx备忘录 https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ Tue, 12 Sep 2023 15:22:00 +0800 - https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ 很少用golang写增删改查,sqlx的用法和java差别很大,用的时候总是要从头看文档。这里写个备忘录方便以后查询,使用sqlx和go-sqlbui - 边侧高可用解决方案 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E9%AB%98%E5%8F%AF%E7%94%A8%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/ Tue, 01 Aug 2023 14:57:03 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E9%AB%98%E5%8F%AF%E7%94%A8%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/ 边侧服务高可用其实就是当年服务还没上云的时候,使用的那套技术栈。不过稍微有些不同的是,边缘计算需要考虑完全封闭的局域网,有点像组态软件的场景。 基于域名 - 边侧监控选型 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E7%9B%91%E6%8E%A7%E9%80%89%E5%9E%8B/ Wed, 26 Jul 2023 12:06:43 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E4%BE%A7%E7%9B%91%E6%8E%A7%E9%80%89%E5%9E%8B/ 边侧监控方案 问题 边缘计算v2适配了目前所有流行的应用部署方式: 裸系统(物理机)部署; docker部署; k8s部署; 因此对应的监控系统也要考虑兼顾各种部 - PromQL笔记 https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ Mon, 24 Jul 2023 11:21:33 +0800 - https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ 格式 类似influxdb,prometheus也有自己的line protocol: &lt;--------------- metric ---------------------&gt;&lt;-timestamp -&gt;&lt;-value-&gt; &lt;---metric name---&gt;{labelname=labelvalue,....} http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417560938 =&gt; 94355 http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417561287 =&gt; 94334 上面就表示在某个时间戳系统http GET - 解决k8s的javaSDK与jackson不兼容问题 https://yiuterran.github.io/blog/posts/%E8%A7%A3%E5%86%B3k8s%E7%9A%84javasdk%E4%B8%8Ejackson%E4%B8%8D%E5%85%BC%E5%AE%B9%E9%97%AE%E9%A2%98/ Mon, 10 Jul 2023 12:29:45 +0800 - https://yiuterran.github.io/blog/posts/%E8%A7%A3%E5%86%B3k8s%E7%9A%84javasdk%E4%B8%8Ejackson%E4%B8%8D%E5%85%BC%E5%AE%B9%E9%97%AE%E9%A2%98/ k8s的java sdk中json序列化使用了google自家的gosn,但是springboot中默认使用Jackson,我们的业务代码里面也习惯上使 - K3s存储插件使用笔记 https://yiuterran.github.io/blog/posts/k3s%E5%AD%98%E5%82%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ Mon, 12 Jun 2023 09:20:20 +0800 - https://yiuterran.github.io/blog/posts/k3s%E5%AD%98%E5%82%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ 原理 k8s存储主要依赖PV和PVC的机制,前者由运维人员声明可用的存储,如: apiVersion: v1 kind: PersistentVolume metadata: name: nfs spec: storageClassName: manual capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: 10.244.1.4 path: &quot;/&quot; 后者是用户(开发人员)声明的需求 - 边缘服务器管理工具选型 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ Mon, 06 Mar 2023 14:37:28 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ 这里我们主要的需求是能够穿透内网管理服务器,服务器大部分情况下应当是linux,但是也可能是windows。我们的服务要通过API和这个服务器管理软件 - Kotlin要点笔记 https://yiuterran.github.io/blog/posts/kotlin%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ Sun, 05 Mar 2023 12:58:37 +0800 - https://yiuterran.github.io/blog/posts/kotlin%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ 实际上学习kotlin的动力一直不足,因为java is enough. 不过最近打算写一个QQ机器人玩,现在流行的框架是基于kotlin的,虽然可以用HTTP API进行 - KubeEdge要点笔记 https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ Tue, 21 Feb 2023 15:07:54 +0800 - https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ 安装流程 首先要在云端安装k8s,理论上只需要master节点,可以没有worker,换句话说可以是一个单节点集群(但是要关闭NoSchedule的ta - K8s要点简记 https://yiuterran.github.io/blog/posts/k8s%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Fri, 10 Feb 2023 09:30:19 +0800 - https://yiuterran.github.io/blog/posts/k8s%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 22年的时候需要使用CICD的时候,看了一遍k8s相关的知识点。买了一本《深入剖析Kubernetes》,大致熟悉了常用的概念。 最近因为工作调动需要做 - Makefile要点简记 https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Wed, 25 Jan 2023 16:49:11 +0800 - https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 虽然现代C/CPP一般使用cmake作为工具链,但是如果要看陈年老项目,makefile相关的知识还是要掌握一些的,不然估计很难理清编译逻辑。这也是c - CMake速记 https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ Mon, 09 Jan 2023 16:42:44 +0800 - https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ 主要参考书籍《Modern CMake for C++》,以及《CMake Best Practices》,使用CMake版本3.25. 建议先看第一本,再看第二本。 使用 一般而言, - Golang服务接入OpenTelemetry https://yiuterran.github.io/blog/posts/golang%E6%9C%8D%E5%8A%A1%E6%8E%A5%E5%85%A5opentelemetry/ Mon, 05 Dec 2022 11:12:41 +0800 - https://yiuterran.github.io/blog/posts/golang%E6%9C%8D%E5%8A%A1%E6%8E%A5%E5%85%A5opentelemetry/ 三大支柱中,Log是最简单的,metric也不难。对于golang而言,最麻烦的是trace,这时候就分外羡慕java这种可以自动注入的语言了。 基本设 - Tinode源码解析 https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ Mon, 14 Nov 2022 19:21:38 +0800 - https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ 概述 有朋友需要做一个im,简单做了一下技术调研,开源的实现其实蛮多的,这里挑几个说一下: Synapse/dendrite,matrix系,客户端比较多 - 监控平台调研报告 https://yiuterran.github.io/blog/posts/%E7%9B%91%E6%8E%A7%E5%B9%B3%E5%8F%B0%E8%B0%83%E7%A0%94%E6%8A%A5%E5%91%8A/ Tue, 18 Oct 2022 14:47:33 +0800 - https://yiuterran.github.io/blog/posts/%E7%9B%91%E6%8E%A7%E5%B9%B3%E5%8F%B0%E8%B0%83%E7%A0%94%E6%8A%A5%E5%91%8A/ 广义的监控又称为Application Performance Monitoring(APM),即应用性能监控。其数据类型主要包括:指标数据(Metrics),日志文本(Lo - Elastic Observability系统搭建 https://yiuterran.github.io/blog/posts/es-stack%E5%8F%AF%E8%A7%82%E6%B5%8B%E6%80%A7%E8%90%BD%E5%9C%B0/ Wed, 12 Oct 2022 17:52:42 +0800 - https://yiuterran.github.io/blog/posts/es-stack%E5%8F%AF%E8%A7%82%E6%B5%8B%E6%80%A7%E8%90%BD%E5%9C%B0/ 随着ES v8.4的发布,es对于可观测性三支柱(Metric/Trace/Log)都具有较为完备的支持,Alert功能也能满足一般需求,kibana的 - SRE读书笔记 https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ Thu, 22 Sep 2022 10:01:11 +0800 - https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ SRE相关的书籍,截止目前google出了2本,分别是2016年的的《Site Reliability Engineering: How Google Runs Production Systems》和2020年的《The Site Reliability Workbook》 - Ginkgo使用笔记 https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ Mon, 05 Sep 2022 18:10:06 +0800 - https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ go自带的单元测试比较适合测一个小函数,如果要做一系列的流程测试,则显得较为繁琐。 推荐使用ginkgo来做流程测试,BDD风格写出来的测试代码非常容易 - Influxdb Cluster集成 https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ Thu, 01 Sep 2022 15:47:56 +0800 - https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ 本文记录在golang项目中集成influxdb-cluster需要的知识储备。 术语 database 和MySQL中一致 batch \n分割的多行数据,用来批量写入。 influ - Zabbix配置记录 https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ Wed, 13 Jul 2022 12:21:28 +0800 - https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ 安装服务 这里演示的是物理机环境监控场景,容器场景还是更推荐k8s+prom来搞。 版本是zabbix6.0 LTS,官方已经不提供CentOS7的安装包了 - Golang定时器要点 https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ Thu, 07 Apr 2022 09:35:13 +0800 - https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ golang内置的定时器是基于多个四叉堆封装调度的,增删定时器的效率是O(lgn),所以大量定时器本身可能成为性能瓶颈。可以考虑使用开源的时间轮算法实 - Windows+wsl2后端开发环境搭建 https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ Fri, 04 Mar 2022 20:54:01 +0800 - https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ - 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配 - Gb28181解析 https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ Wed, 02 Mar 2022 09:46:50 +0800 - https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ 国标GB28181(以下简称国标或者gb)文档分析的文档我去年其实写过一版,但是由于原来的电脑炸了,文档还没来得及传上去就丢了(痛苦),所以还要重写一 - 重新启程 https://yiuterran.github.io/blog/posts/first-post/ Sun, 27 Feb 2022 20:27:16 +0800 - https://yiuterran.github.io/blog/posts/first-post/ MBP2015 Late显卡坏了,这件事我处理的不好导致原来的数据都丢了。 就上上周在公司,出去忙了一会儿回来之后发现mbp休眠了,但是敲击键盘却无法唤醒。重启之后可 - diff --git a/docs/posts/page/5/index.html b/docs/posts/page/5/index.html index 737d60ee..cf49499a 100644 --- a/docs/posts/page/5/index.html +++ b/docs/posts/page/5/index.html @@ -97,7 +97,7 @@ "@type":"ListItem", "position": 4 , "name": "Windows+wsl2后端开发环境搭建", - "description": "2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int", + "description": "2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配", "url": "https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" },{ "@type":"ListItem", @@ -335,7 +335,7 @@

文章列表

- 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配
diff --git "a/docs/posts/windows+wsl2\345\220\216\347\253\257\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272/index.html" "b/docs/posts/windows+wsl2\345\220\216\347\253\257\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272/index.html" index 84121ffc..661266b2 100644 --- "a/docs/posts/windows+wsl2\345\220\216\347\253\257\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272/index.html" +++ "b/docs/posts/windows+wsl2\345\220\216\347\253\257\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272/index.html" @@ -66,7 +66,7 @@ + content="2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配"> @@ -122,7 +122,7 @@ - + @@ -256,7 +256,8 @@

Windows+wsl2后端开发环
-

2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。

+

2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。

+

2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。

就我个人而言,目前感觉最理想的后端开发环境还是Intel CPU的MacOS,基本所有常用的后端依赖都可以用homebrew安装,GUI和命令行的结合也是最方便的。不过Windows从10代之后添加了WSL/WSL2,将Linux命令行和Windows开发环境完美的结合起来,目前来说可用性还算不错了。

准备工作

网络准备

@@ -339,7 +340,7 @@

配置pwsh

在oh-my-zsh中的z,可以在powershell中安装ZLocation来完成类似功能。

安装wsl2

参考WSL 安装,新版wsl安装步骤非常简单,比之前手动安装容易的多。

-

安装完成后可以运行wsl --version,结果中WSL版本应该>1.0.

+

安装完成后可以运行wsl --version,结果中WSL版本应该>2.0了。

配置linux

打开Windows Terminal,安装的linux发行版入口应该会自动加到下拉选单里,选中后进入。

至于怎么配置Linux我就不写了,根据个人习惯来吧。几个点:

@@ -351,29 +352,19 @@

配置linux

  • 配置好vim等;
  • 配置wsl

    -

    参考这里.

    激活systemd,先确定发行版里面已经安装了systemd,然后编辑/etc/wsl.conf添加:

    [boot]
     systemd=true
     
    -

    然后重启wsl即可。

    -

    然后是将网络改成桥接,在windows的home目录下添加.wslconfig文件,配置如下:

    -
    [wsl2]
    -networkingMode=bridged
    -vmSwitch=OUT
    -ipv6=true
    +

    然后重启wsl即可,建议等下面操作结束之后再一起重启。

    +

    配置网络,在windows的home目录下添加.wslconfig,里面内容是:

    +
    [experimental]
    +networkingMode=mirrored
    +dnsTunneling=true
    +firewall=true
    +autoProxy=true
     
    -

    这里的OUT,是自建的虚拟网卡。在Hyper-V的“虚拟交换机管理器”里,新建一个“外部”的虚拟机网络交换器,名字叫OUT,桥接到外部网络(用来上网的网卡),并勾选“允许管理操作系统共享此网络适配器”,点击确定即可,注意windows会离线一段时间。

    -

    重启WSL即可。如果需要静态ip,需要在上面添加dhcp=false配置行,并在wsl里面配置/lib/systemd/network/wsl_external.network,内容如下:

    -
    [Match]
    -Name=eth0
    -[Network]
    -Description=bridge
    -DHCP=false
    -Address=192.168.1.10/24 # 自行修改
    -Gateway=192.168.0.1 # 自行修改
    -
    -

    设置桥接网络之后,在windows中,或者局域网中,就可以直接访问wsl中的服务了(注意防火墙)。

    +

    如果你是在windows中安装docker desktop,那么直接用就可以。如果是在wsl里面安装了docker,需要配置/etc/docker/daemon.json,在里面加入:"iptables":false,否则docker可能无法正常使用。

    注意事项

    1. wsl2和windows之间传输文件io性能很差;
    2. @@ -381,7 +372,6 @@

      注意事项

    3. 如果是本地开发,优先建议在windows下直接使用IDE开发,不要使用wslg,因为很难用;
    4. 类似java/python/golang这种高级语言,直接在windows下写代码调试就行;
    5. 如果是C++开发,推荐使用CLion+WSL工具链。现在CLion已经支持Makefile工程,所以linux下所有开发都已经无碍;2023版本的CLion甚至支持vcpkg集成,有一说一比rust也差不多了;
    6. -
    7. 如果是CMake工程,也可以使用VisualStudio+Resharper工具链,不过Makefile工程还不行;
    8. 建议wsl直接用root账户,不然会经常遇到各种权限问题,比较迷惑;
    9. linux的PATH会自动继承windows的path,不过Linux系统里同名的文件优先级更高;所以像git这种软件到底装Windows还是装Linux要自己想清楚;全部在Linux下也可以,都装不是不行…就是要配置两遍;
    10. WSL的命令行可以直接调用windows PATH下的exe文件,如code,不过非/mnt路径下可能无法正常使用;
    11. diff --git a/docs/tags/c++/index.xml b/docs/tags/c++/index.xml index 024205f5..fec148e3 100644 --- a/docs/tags/c++/index.xml +++ b/docs/tags/c++/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Mon, 09 Jan 2023 16:42:44 +0800 + Mon, 09 Jan 2023 16:42:44 +0800 + CMake速记 https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ Mon, 09 Jan 2023 16:42:44 +0800 - https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ 主要参考书籍《Modern CMake for C++》,以及《CMake Best Practices》,使用CMake版本3.25. 建议先看第一本,再看第二本。 使用 一般而言, - diff --git a/docs/tags/cmake/index.xml b/docs/tags/cmake/index.xml index d0ea7477..6e4b90eb 100644 --- a/docs/tags/cmake/index.xml +++ b/docs/tags/cmake/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Mon, 09 Jan 2023 16:42:44 +0800 + Mon, 09 Jan 2023 16:42:44 +0800 + CMake速记 https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ Mon, 09 Jan 2023 16:42:44 +0800 - https://yiuterran.github.io/blog/posts/cmake%E9%80%9F%E8%AE%B0/ 主要参考书籍《Modern CMake for C++》,以及《CMake Best Practices》,使用CMake版本3.25. 建议先看第一本,再看第二本。 使用 一般而言, - diff --git a/docs/tags/cpp/index.xml b/docs/tags/cpp/index.xml index 65ec6282..adc69c70 100644 --- a/docs/tags/cpp/index.xml +++ b/docs/tags/cpp/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Wed, 25 Jan 2023 16:49:11 +0800 + Wed, 25 Jan 2023 16:49:11 +0800 + Makefile要点简记 https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Wed, 25 Jan 2023 16:49:11 +0800 - https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 虽然现代C/CPP一般使用cmake作为工具链,但是如果要看陈年老项目,makefile相关的知识还是要掌握一些的,不然估计很难理清编译逻辑。这也是c - diff --git a/docs/tags/devops/index.xml b/docs/tags/devops/index.xml index d180e1c8..e5816128 100644 --- a/docs/tags/devops/index.xml +++ b/docs/tags/devops/index.xml @@ -8,33 +8,28 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Mon, 06 Mar 2023 14:37:28 +0800 + Mon, 06 Mar 2023 14:37:28 +0800 + 边缘服务器管理工具选型 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ Mon, 06 Mar 2023 14:37:28 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ 这里我们主要的需求是能够穿透内网管理服务器,服务器大部分情况下应当是linux,但是也可能是windows。我们的服务要通过API和这个服务器管理软件 - SRE读书笔记 https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ Thu, 22 Sep 2022 10:01:11 +0800 - https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ SRE相关的书籍,截止目前google出了2本,分别是2016年的的《Site Reliability Engineering: How Google Runs Production Systems》和2020年的《The Site Reliability Workbook》 - Zabbix配置记录 https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ Wed, 13 Jul 2022 12:21:28 +0800 - https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ 安装服务 这里演示的是物理机环境监控场景,容器场景还是更推荐k8s+prom来搞。 版本是zabbix6.0 LTS,官方已经不提供CentOS7的安装包了 - diff --git a/docs/tags/edge/index.xml b/docs/tags/edge/index.xml index 26b4cc8c..da2ae58a 100644 --- a/docs/tags/edge/index.xml +++ b/docs/tags/edge/index.xml @@ -8,24 +8,21 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Mon, 06 Mar 2023 14:37:28 +0800 + Mon, 06 Mar 2023 14:37:28 +0800 + 边缘服务器管理工具选型 https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ Mon, 06 Mar 2023 14:37:28 +0800 - https://yiuterran.github.io/blog/posts/%E8%BE%B9%E7%BC%98%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E9%80%89%E5%9E%8B/ 这里我们主要的需求是能够穿透内网管理服务器,服务器大部分情况下应当是linux,但是也可能是windows。我们的服务要通过API和这个服务器管理软件 - KubeEdge要点笔记 https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ Tue, 21 Feb 2023 15:07:54 +0800 - https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ 安装流程 首先要在云端安装k8s,理论上只需要master节点,可以没有worker,换句话说可以是一个单节点集群(但是要关闭NoSchedule的ta - diff --git a/docs/tags/gb28181/index.xml b/docs/tags/gb28181/index.xml index 84912ae8..d1df66c5 100644 --- a/docs/tags/gb28181/index.xml +++ b/docs/tags/gb28181/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Wed, 02 Mar 2022 09:46:50 +0800 + Wed, 02 Mar 2022 09:46:50 +0800 + Gb28181解析 https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ Wed, 02 Mar 2022 09:46:50 +0800 - https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ 国标GB28181(以下简称国标或者gb)文档分析的文档我去年其实写过一版,但是由于原来的电脑炸了,文档还没来得及传上去就丢了(痛苦),所以还要重写一 - diff --git a/docs/tags/gnu/index.xml b/docs/tags/gnu/index.xml index 1bf34807..68ca26a0 100644 --- a/docs/tags/gnu/index.xml +++ b/docs/tags/gnu/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Wed, 25 Jan 2023 16:49:11 +0800 + Wed, 25 Jan 2023 16:49:11 +0800 + Makefile要点简记 https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Wed, 25 Jan 2023 16:49:11 +0800 - https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 虽然现代C/CPP一般使用cmake作为工具链,但是如果要看陈年老项目,makefile相关的知识还是要掌握一些的,不然估计很难理清编译逻辑。这也是c - diff --git a/docs/tags/golang/index.xml b/docs/tags/golang/index.xml index 5fbc8e52..30e3a429 100644 --- a/docs/tags/golang/index.xml +++ b/docs/tags/golang/index.xml @@ -8,51 +8,42 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Tue, 12 Sep 2023 15:22:00 +0800 + Tue, 12 Sep 2023 15:22:00 +0800 + Sqlx备忘录 https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ Tue, 12 Sep 2023 15:22:00 +0800 - https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ 很少用golang写增删改查,sqlx的用法和java差别很大,用的时候总是要从头看文档。这里写个备忘录方便以后查询,使用sqlx和go-sqlbui - Tinode源码解析 https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ Mon, 14 Nov 2022 19:21:38 +0800 - https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ 概述 有朋友需要做一个im,简单做了一下技术调研,开源的实现其实蛮多的,这里挑几个说一下: Synapse/dendrite,matrix系,客户端比较多 - Ginkgo使用笔记 https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ Mon, 05 Sep 2022 18:10:06 +0800 - https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ go自带的单元测试比较适合测一个小函数,如果要做一系列的流程测试,则显得较为繁琐。 推荐使用ginkgo来做流程测试,BDD风格写出来的测试代码非常容易 - Influxdb Cluster集成 https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ Thu, 01 Sep 2022 15:47:56 +0800 - https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ 本文记录在golang项目中集成influxdb-cluster需要的知识储备。 术语 database 和MySQL中一致 batch \n分割的多行数据,用来批量写入。 influ - Golang定时器要点 https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ Thu, 07 Apr 2022 09:35:13 +0800 - https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ golang内置的定时器是基于多个四叉堆封装调度的,增删定时器的效率是O(lgn),所以大量定时器本身可能成为性能瓶颈。可以考虑使用开源的时间轮算法实 - diff --git a/docs/tags/im/index.xml b/docs/tags/im/index.xml index 59fc096d..2cc5511f 100644 --- a/docs/tags/im/index.xml +++ b/docs/tags/im/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Mon, 14 Nov 2022 19:21:38 +0800 + Mon, 14 Nov 2022 19:21:38 +0800 + Tinode源码解析 https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ Mon, 14 Nov 2022 19:21:38 +0800 - https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ 概述 有朋友需要做一个im,简单做了一下技术调研,开源的实现其实蛮多的,这里挑几个说一下: Synapse/dendrite,matrix系,客户端比较多 - diff --git a/docs/tags/index.xml b/docs/tags/index.xml index a43730ae..1d54bd26 100644 --- a/docs/tags/index.xml +++ b/docs/tags/index.xml @@ -8,213 +8,168 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Fri, 15 Sep 2023 14:57:05 +0800 + Fri, 15 Sep 2023 14:57:05 +0800 + k8s https://yiuterran.github.io/blog/tags/k8s/ Fri, 15 Sep 2023 14:57:05 +0800 - https://yiuterran.github.io/blog/tags/k8s/ - golang https://yiuterran.github.io/blog/tags/golang/ Tue, 12 Sep 2023 15:22:00 +0800 - https://yiuterran.github.io/blog/tags/golang/ - sqlx https://yiuterran.github.io/blog/tags/sqlx/ Tue, 12 Sep 2023 15:22:00 +0800 - https://yiuterran.github.io/blog/tags/sqlx/ - prometheus https://yiuterran.github.io/blog/tags/prometheus/ Mon, 24 Jul 2023 11:21:33 +0800 - https://yiuterran.github.io/blog/tags/prometheus/ - devops https://yiuterran.github.io/blog/tags/devops/ Mon, 06 Mar 2023 14:37:28 +0800 - https://yiuterran.github.io/blog/tags/devops/ - edge https://yiuterran.github.io/blog/tags/edge/ Mon, 06 Mar 2023 14:37:28 +0800 - https://yiuterran.github.io/blog/tags/edge/ - kotlin https://yiuterran.github.io/blog/tags/kotlin/ Sun, 05 Mar 2023 12:58:37 +0800 - https://yiuterran.github.io/blog/tags/kotlin/ - cpp https://yiuterran.github.io/blog/tags/cpp/ Wed, 25 Jan 2023 16:49:11 +0800 - https://yiuterran.github.io/blog/tags/cpp/ - gnu https://yiuterran.github.io/blog/tags/gnu/ Wed, 25 Jan 2023 16:49:11 +0800 - https://yiuterran.github.io/blog/tags/gnu/ - make https://yiuterran.github.io/blog/tags/make/ Wed, 25 Jan 2023 16:49:11 +0800 - https://yiuterran.github.io/blog/tags/make/ - c++ https://yiuterran.github.io/blog/tags/c++/ Mon, 09 Jan 2023 16:42:44 +0800 - https://yiuterran.github.io/blog/tags/c++/ - cmake https://yiuterran.github.io/blog/tags/cmake/ Mon, 09 Jan 2023 16:42:44 +0800 - https://yiuterran.github.io/blog/tags/cmake/ - im https://yiuterran.github.io/blog/tags/im/ Mon, 14 Nov 2022 19:21:38 +0800 - https://yiuterran.github.io/blog/tags/im/ - tinode https://yiuterran.github.io/blog/tags/tinode/ Mon, 14 Nov 2022 19:21:38 +0800 - https://yiuterran.github.io/blog/tags/tinode/ - sre https://yiuterran.github.io/blog/tags/sre/ Thu, 22 Sep 2022 10:01:11 +0800 - https://yiuterran.github.io/blog/tags/sre/ - test https://yiuterran.github.io/blog/tags/test/ Mon, 05 Sep 2022 18:10:06 +0800 - https://yiuterran.github.io/blog/tags/test/ - influxdb https://yiuterran.github.io/blog/tags/influxdb/ Thu, 01 Sep 2022 15:47:56 +0800 - https://yiuterran.github.io/blog/tags/influxdb/ - tsdb https://yiuterran.github.io/blog/tags/tsdb/ Thu, 01 Sep 2022 15:47:56 +0800 - https://yiuterran.github.io/blog/tags/tsdb/ - zabbix https://yiuterran.github.io/blog/tags/zabbix/ Wed, 13 Jul 2022 12:21:28 +0800 - https://yiuterran.github.io/blog/tags/zabbix/ - timer https://yiuterran.github.io/blog/tags/timer/ Thu, 07 Apr 2022 09:35:13 +0800 - https://yiuterran.github.io/blog/tags/timer/ - wsl https://yiuterran.github.io/blog/tags/wsl/ Fri, 04 Mar 2022 20:54:01 +0800 - https://yiuterran.github.io/blog/tags/wsl/ - gb28181 https://yiuterran.github.io/blog/tags/gb28181/ Wed, 02 Mar 2022 09:46:50 +0800 - https://yiuterran.github.io/blog/tags/gb28181/ - multimedia https://yiuterran.github.io/blog/tags/multimedia/ Wed, 02 Mar 2022 09:46:50 +0800 - https://yiuterran.github.io/blog/tags/multimedia/ - diff --git a/docs/tags/influxdb/index.xml b/docs/tags/influxdb/index.xml index 36eeffcf..582a6105 100644 --- a/docs/tags/influxdb/index.xml +++ b/docs/tags/influxdb/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Thu, 01 Sep 2022 15:47:56 +0800 + Thu, 01 Sep 2022 15:47:56 +0800 + Influxdb Cluster集成 https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ Thu, 01 Sep 2022 15:47:56 +0800 - https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ 本文记录在golang项目中集成influxdb-cluster需要的知识储备。 术语 database 和MySQL中一致 batch \n分割的多行数据,用来批量写入。 influ - diff --git a/docs/tags/k8s/index.xml b/docs/tags/k8s/index.xml index eb1ac45f..b6b10aa3 100644 --- a/docs/tags/k8s/index.xml +++ b/docs/tags/k8s/index.xml @@ -8,60 +8,49 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Fri, 15 Sep 2023 14:57:05 +0800 + Fri, 15 Sep 2023 14:57:05 +0800 + StatefulSet使用思路梳理 https://yiuterran.github.io/blog/posts/statefulset%E4%BD%BF%E7%94%A8%E6%80%9D%E8%B7%AF%E6%A2%B3%E7%90%86/ Fri, 15 Sep 2023 14:57:05 +0800 - https://yiuterran.github.io/blog/posts/statefulset%E4%BD%BF%E7%94%A8%E6%80%9D%E8%B7%AF%E6%A2%B3%E7%90%86/ 一般服务都是使用deployment部署,deploy的使用非常简单,无状态,随意调度。但是各种需要持久化数据的中间件都需要使用StatefulSet - Configmap挂载的几种情况 https://yiuterran.github.io/blog/posts/configmap%E6%8C%82%E8%BD%BD%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5/ Fri, 15 Sep 2023 09:33:41 +0800 - https://yiuterran.github.io/blog/posts/configmap%E6%8C%82%E8%BD%BD%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5/ ConfigMap挂载的用法比较多,很容易记混淆,这里简单做个梳理: 将某个key的值挂载为环境变量 apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ &quot;/bin/sh&quot;, &quot;-c&quot;, &quot;env&quot; ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: - PromQL笔记 https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ Mon, 24 Jul 2023 11:21:33 +0800 - https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ 格式 类似influxdb,prometheus也有自己的line protocol: &lt;--------------- metric ---------------------&gt;&lt;-timestamp -&gt;&lt;-value-&gt; &lt;---metric name---&gt;{labelname=labelvalue,....} http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417560938 =&gt; 94355 http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417561287 =&gt; 94334 上面就表示在某个时间戳系统http GET - K3s存储插件使用笔记 https://yiuterran.github.io/blog/posts/k3s%E5%AD%98%E5%82%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ Mon, 12 Jun 2023 09:20:20 +0800 - https://yiuterran.github.io/blog/posts/k3s%E5%AD%98%E5%82%A8%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ 原理 k8s存储主要依赖PV和PVC的机制,前者由运维人员声明可用的存储,如: apiVersion: v1 kind: PersistentVolume metadata: name: nfs spec: storageClassName: manual capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: 10.244.1.4 path: &quot;/&quot; 后者是用户(开发人员)声明的需求 - KubeEdge要点笔记 https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ Tue, 21 Feb 2023 15:07:54 +0800 - https://yiuterran.github.io/blog/posts/kubeedge%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ 安装流程 首先要在云端安装k8s,理论上只需要master节点,可以没有worker,换句话说可以是一个单节点集群(但是要关闭NoSchedule的ta - K8s要点简记 https://yiuterran.github.io/blog/posts/k8s%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Fri, 10 Feb 2023 09:30:19 +0800 - https://yiuterran.github.io/blog/posts/k8s%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 22年的时候需要使用CICD的时候,看了一遍k8s相关的知识点。买了一本《深入剖析Kubernetes》,大致熟悉了常用的概念。 最近因为工作调动需要做 - diff --git a/docs/tags/kotlin/index.xml b/docs/tags/kotlin/index.xml index c4ee9da0..67cc954b 100644 --- a/docs/tags/kotlin/index.xml +++ b/docs/tags/kotlin/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Sun, 05 Mar 2023 12:58:37 +0800 + Sun, 05 Mar 2023 12:58:37 +0800 + Kotlin要点笔记 https://yiuterran.github.io/blog/posts/kotlin%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ Sun, 05 Mar 2023 12:58:37 +0800 - https://yiuterran.github.io/blog/posts/kotlin%E8%A6%81%E7%82%B9%E7%AC%94%E8%AE%B0/ 实际上学习kotlin的动力一直不足,因为java is enough. 不过最近打算写一个QQ机器人玩,现在流行的框架是基于kotlin的,虽然可以用HTTP API进行 - diff --git a/docs/tags/make/index.xml b/docs/tags/make/index.xml index d557ec6e..eb7a1c16 100644 --- a/docs/tags/make/index.xml +++ b/docs/tags/make/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Wed, 25 Jan 2023 16:49:11 +0800 + Wed, 25 Jan 2023 16:49:11 +0800 + Makefile要点简记 https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ Wed, 25 Jan 2023 16:49:11 +0800 - https://yiuterran.github.io/blog/posts/makefile%E8%A6%81%E7%82%B9%E7%AE%80%E8%AE%B0/ 虽然现代C/CPP一般使用cmake作为工具链,但是如果要看陈年老项目,makefile相关的知识还是要掌握一些的,不然估计很难理清编译逻辑。这也是c - diff --git a/docs/tags/multimedia/index.xml b/docs/tags/multimedia/index.xml index 1fc3744c..d645758f 100644 --- a/docs/tags/multimedia/index.xml +++ b/docs/tags/multimedia/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Wed, 02 Mar 2022 09:46:50 +0800 + Wed, 02 Mar 2022 09:46:50 +0800 + Gb28181解析 https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ Wed, 02 Mar 2022 09:46:50 +0800 - https://yiuterran.github.io/blog/posts/gb28181%E8%A7%A3%E6%9E%90/ 国标GB28181(以下简称国标或者gb)文档分析的文档我去年其实写过一版,但是由于原来的电脑炸了,文档还没来得及传上去就丢了(痛苦),所以还要重写一 - diff --git a/docs/tags/prometheus/index.xml b/docs/tags/prometheus/index.xml index c79ce261..4dc627b8 100644 --- a/docs/tags/prometheus/index.xml +++ b/docs/tags/prometheus/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Mon, 24 Jul 2023 11:21:33 +0800 + Mon, 24 Jul 2023 11:21:33 +0800 + PromQL笔记 https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ Mon, 24 Jul 2023 11:21:33 +0800 - https://yiuterran.github.io/blog/posts/promql%E7%AC%94%E8%AE%B0/ 格式 类似influxdb,prometheus也有自己的line protocol: &lt;--------------- metric ---------------------&gt;&lt;-timestamp -&gt;&lt;-value-&gt; &lt;---metric name---&gt;{labelname=labelvalue,....} http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417560938 =&gt; 94355 http_request_total{status=&quot;200&quot;, method=&quot;GET&quot;}@1434417561287 =&gt; 94334 上面就表示在某个时间戳系统http GET - diff --git a/docs/tags/sqlx/index.xml b/docs/tags/sqlx/index.xml index 731a3cd7..eb154bb1 100644 --- a/docs/tags/sqlx/index.xml +++ b/docs/tags/sqlx/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Tue, 12 Sep 2023 15:22:00 +0800 + Tue, 12 Sep 2023 15:22:00 +0800 + Sqlx备忘录 https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ Tue, 12 Sep 2023 15:22:00 +0800 - https://yiuterran.github.io/blog/posts/sqlx%E5%A4%87%E5%BF%98%E5%BD%95/ 很少用golang写增删改查,sqlx的用法和java差别很大,用的时候总是要从头看文档。这里写个备忘录方便以后查询,使用sqlx和go-sqlbui - diff --git a/docs/tags/sre/index.xml b/docs/tags/sre/index.xml index cf2eed5b..408ac317 100644 --- a/docs/tags/sre/index.xml +++ b/docs/tags/sre/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Thu, 22 Sep 2022 10:01:11 +0800 + Thu, 22 Sep 2022 10:01:11 +0800 + SRE读书笔记 https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ Thu, 22 Sep 2022 10:01:11 +0800 - https://yiuterran.github.io/blog/posts/sre%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ SRE相关的书籍,截止目前google出了2本,分别是2016年的的《Site Reliability Engineering: How Google Runs Production Systems》和2020年的《The Site Reliability Workbook》 - diff --git a/docs/tags/test/index.xml b/docs/tags/test/index.xml index b5109614..4f6a01cb 100644 --- a/docs/tags/test/index.xml +++ b/docs/tags/test/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Mon, 05 Sep 2022 18:10:06 +0800 + Mon, 05 Sep 2022 18:10:06 +0800 + Ginkgo使用笔记 https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ Mon, 05 Sep 2022 18:10:06 +0800 - https://yiuterran.github.io/blog/posts/ginkgo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/ go自带的单元测试比较适合测一个小函数,如果要做一系列的流程测试,则显得较为繁琐。 推荐使用ginkgo来做流程测试,BDD风格写出来的测试代码非常容易 - diff --git a/docs/tags/timer/index.xml b/docs/tags/timer/index.xml index 9edfcbd0..aac4b82b 100644 --- a/docs/tags/timer/index.xml +++ b/docs/tags/timer/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Thu, 07 Apr 2022 09:35:13 +0800 + Thu, 07 Apr 2022 09:35:13 +0800 + Golang定时器要点 https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ Thu, 07 Apr 2022 09:35:13 +0800 - https://yiuterran.github.io/blog/posts/golang%E5%AE%9A%E6%97%B6%E5%99%A8%E8%A6%81%E7%82%B9/ golang内置的定时器是基于多个四叉堆封装调度的,增删定时器的效率是O(lgn),所以大量定时器本身可能成为性能瓶颈。可以考虑使用开源的时间轮算法实 - diff --git a/docs/tags/tinode/index.xml b/docs/tags/tinode/index.xml index 91764884..5294cf42 100644 --- a/docs/tags/tinode/index.xml +++ b/docs/tags/tinode/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Mon, 14 Nov 2022 19:21:38 +0800 + Mon, 14 Nov 2022 19:21:38 +0800 + Tinode源码解析 https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ Mon, 14 Nov 2022 19:21:38 +0800 - https://yiuterran.github.io/blog/posts/tinode%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ 概述 有朋友需要做一个im,简单做了一下技术调研,开源的实现其实蛮多的,这里挑几个说一下: Synapse/dendrite,matrix系,客户端比较多 - diff --git a/docs/tags/tsdb/index.xml b/docs/tags/tsdb/index.xml index fb0aee4e..2bc3740e 100644 --- a/docs/tags/tsdb/index.xml +++ b/docs/tags/tsdb/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Thu, 01 Sep 2022 15:47:56 +0800 + Thu, 01 Sep 2022 15:47:56 +0800 + Influxdb Cluster集成 https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ Thu, 01 Sep 2022 15:47:56 +0800 - https://yiuterran.github.io/blog/posts/influxdb-cluster%E9%9B%86%E6%88%90/ 本文记录在golang项目中集成influxdb-cluster需要的知识储备。 术语 database 和MySQL中一致 batch \n分割的多行数据,用来批量写入。 influ - diff --git a/docs/tags/wsl/index.html b/docs/tags/wsl/index.html index e4791546..d554f370 100644 --- a/docs/tags/wsl/index.html +++ b/docs/tags/wsl/index.html @@ -94,7 +94,7 @@ "@type":"ListItem", "position": 1 , "name": "Windows+wsl2后端开发环境搭建", - "description": "2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int", + "description": "2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配", "url": "https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" } ] @@ -224,7 +224,7 @@

      wsl

    - 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配
    diff --git a/docs/tags/wsl/index.xml b/docs/tags/wsl/index.xml index 55fa5ec2..321e3091 100644 --- a/docs/tags/wsl/index.xml +++ b/docs/tags/wsl/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Fri, 04 Mar 2022 20:54:01 +0800 + Fri, 04 Mar 2022 20:54:01 +0800 + Windows+wsl2后端开发环境搭建 https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ Fri, 04 Mar 2022 20:54:01 +0800 - https://yiuterran.github.io/blog/posts/windows+wsl2%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ - 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配置步骤。 就我个人而言,目前感觉最理想的后端开发环境还是Int + 2023/11/16 Update: wsl2 2.0通过镜像网络解决了所有网络问题,已经不用折腾了。 2023/2/2 Update: wsl已经解决了systemd和网络问题,现在已经基本无障碍使用,移除了大部分无用的配 - diff --git a/docs/tags/zabbix/index.xml b/docs/tags/zabbix/index.xml index c6a37324..95ea28fc 100644 --- a/docs/tags/zabbix/index.xml +++ b/docs/tags/zabbix/index.xml @@ -8,15 +8,14 @@ zh &copy; 2021 <a href="https://github.com/YiuTerran">tryao</a> - Wed, 13 Jul 2022 12:21:28 +0800 + Wed, 13 Jul 2022 12:21:28 +0800 + Zabbix配置记录 https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ Wed, 13 Jul 2022 12:21:28 +0800 - https://yiuterran.github.io/blog/posts/zabbix%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/ 安装服务 这里演示的是物理机环境监控场景,容器场景还是更推荐k8s+prom来搞。 版本是zabbix6.0 LTS,官方已经不提供CentOS7的安装包了 - diff --git a/package.json b/package.json index dbb3e728..b79b2a8f 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,14 @@ "autoprefixer": "^10.4.9", "cssnano": "^5.1.13", "postcss": "^8.4.16", - "postcss-cli": "^10.0.0", + "postcss-cli": "^10.1.0", "tailwindcss": "^3.1.8", "tailwindcss-rtl": "^0.9.0" }, "devDependencies": { - "postcss-import": "^15.0.0" + "autoprefixer": "^10.4.16", + "cssnano": "^6.0.1", + "postcss-import": "^15.1.0", + "tailwindcss": "^3.3.5" } } diff --git a/resources/_gen/assets/css/css/eureka.css_9db11e49eb9eda60f643f6915ca49b2d.content b/resources/_gen/assets/css/css/eureka.css_9db11e49eb9eda60f643f6915ca49b2d.content index 483e6b8b..e8c67663 100644 --- a/resources/_gen/assets/css/css/eureka.css_9db11e49eb9eda60f643f6915ca49b2d.content +++ b/resources/_gen/assets/css/css/eureka.css_9db11e49eb9eda60f643f6915ca49b2d.content @@ -1 +1 @@ -/*!tailwindcss v3.2.4 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }:root{--color-eureka:#38b2ac;--color-primary-bg:#f2f2f7;--color-secondary-bg:#fff;--color-tertiary-bg:#f2f2f7;--color-primary-text:rgba(0,0,0,.85);--color-secondary-text:rgba(0,0,0,.7);--color-tertiary-text:rgba(0,0,0,.55);background-color:var(--color-primary-bg);color:var(--color-primary-text);font-family:Lora,Noto Serif SC,serif}.dark{--color-eureka:#38b2ac;--color-primary-bg:#000;--color-secondary-bg:#1c1c1e;--color-tertiary-bg:#2c2c2e;--color-primary-text:hsla(0,0%,100%,.85);--color-secondary-text:hsla(0,0%,100%,.7);--color-tertiary-text:hsla(0,0%,100%,.55)}a:hover{color:var(--color-eureka);transition-duration:.3s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}code{direction:ltr}.content{color:var(--color-primary-text);line-height:1.5;overflow-wrap:break-word}.content>*{margin-bottom:1rem}.content li+li{margin-top:.25rem}.content li>p+p{margin-top:1.5rem}.content strong{font-weight:600}.content a,.content a:hover{color:var(--color-eureka)}.content a:hover{text-decoration-line:underline}.content strong a{font-weight:700}.content h1{font-size:2.25rem;line-height:2.5rem;line-height:1.25}.content h1,.content h2{border-bottom-width:1px;font-weight:600;margin-bottom:1rem;margin-top:1.5rem;padding-bottom:.5rem}.content h2{font-size:1.5rem;line-height:2rem;line-height:1.25}.content h3{font-size:1.125rem;line-height:1.75rem;line-height:1.375}.content h3,.content h4{font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h4{font-size:1rem;line-height:1.5rem;line-height:1}.content h5,.content h6{font-size:.875rem;font-weight:600;line-height:1.25rem;line-height:1.25;margin-bottom:1rem;margin-top:1.5rem}.content blockquote,.content h6{color:var(--color-secondary-text)}.content blockquote{-webkit-padding-start:1rem;-webkit-padding-end:1rem;border-color:var(--color-tertiary-text);border-inline-start-width:4px;font-size:1rem;line-height:1.5rem;padding-inline-end:1rem;padding-inline-start:1rem}.content code{color:var(--color-tertiary-text);display:inline;font-family:SFMono-Regular,Menlo,monospace;font-size:.875rem;line-height:1.25rem;padding:.25rem}.content code,.content pre{background-color:var(--color-tertiary-bg);border-radius:.25rem}.content pre{padding:1rem}.content pre code{background-color:transparent;border-radius:0;display:block;overflow:auto;padding:0}.content ul{list-style-type:disc}.content ol,.content ul{-webkit-padding-start:2rem;font-size:1rem;line-height:1.5rem;padding-inline-start:2rem}.content ol{list-style-type:decimal}.content kbd{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);border-radius:.25rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:inline-block;font-family:SFMono-Regular,Menlo,monospace;font-size:.75rem;font-weight:400;line-height:1rem;padding:.25rem;vertical-align:middle}.content table{border-color:var(--color-secondary-text);display:block;font-size:1rem;line-height:1.5rem;overflow:auto}.content td,.content th{border-width:1px;padding:.25rem .75rem}.content .katex{overflow-x:auto;overflow-y:hidden}.content .katex *{border-color:var(--color-primary-text)}.content :target{margin-top:-4rem;padding-top:4rem}.sticky-toc{position:sticky;top:8rem;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);z-index:0}.sticky-toc a{color:var(--color-primary-text);transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sticky-toc a:hover{color:var(--color-eureka)}.sticky-toc ul{list-style-type:disc}.sticky-toc ol,.sticky-toc ul{-webkit-padding-start:2rem;font-size:1rem;line-height:1.5rem;padding-inline-start:2rem}.sticky-toc ol{list-style-type:decimal}.sticky-toc li+li{margin-top:.25rem}.sticky-toc li>p+p{margin-top:1.5rem}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.pagination{display:flex;justify-content:center}.pagination .page-item{align-items:center;display:flex}.pagination .page-item .page-link{margin:.5rem;padding:.5rem}.pagination .active,.pagination .page-item:not(.disabled):hover,.selected-menu-item{color:var(--color-eureka)}.selected-menu-item{border-bottom-color:transparent;border-top-color:var(--color-eureka)}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:sticky!important}.inset-0{bottom:0!important;left:0!important;right:0!important;top:0!important}.top-16{top:4rem!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-30{z-index:30!important}.z-40{z-index:40!important}.z-0{z-index:0!important}.z-50{z-index:50!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-5{grid-column:span 5/span 5!important}.col-span-2{grid-column:span 2/span 2!important}.col-start-2{grid-column-start:2!important}.col-start-3{grid-column-start:3!important}.col-start-5{grid-column-start:5!important}.row-span-2{grid-row:span 2/span 2!important}.row-span-3{grid-row:span 3/span 3!important}.row-start-3{grid-row-start:3!important}.row-start-2{grid-row-start:2!important}.-m-12{margin:-3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-4{margin-bottom:1rem!important;margin-top:1rem!important}.mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-8{margin-bottom:2rem!important;margin-top:2rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.mt-12{margin-top:3rem!important}.mt-4{margin-top:1rem!important}.mb-4{margin-bottom:1rem!important}.mb-2{margin-bottom:.5rem!important}.mt-2{margin-top:.5rem!important}.-mt-16{margin-top:-4rem!important}.-mt-10{margin-top:-2.5rem!important}.mb-6{margin-bottom:1.5rem!important}.mb-12{margin-bottom:3rem!important}.box-border{box-sizing:border-box!important}.block{display:block!important}.inline-block{display:inline-block!important}.flex{display:flex!important}.grid{display:grid!important}.hidden{display:none!important}.h-\(screen-16\){height:calc(100vh - 4rem)!important}.h-64{height:16rem!important}.h-96{height:24rem!important}.h-128{height:32rem!important}.h-160{height:40rem!important}.h-full{height:100%!important}.h-4{height:1rem!important}.h-24{height:6rem!important}.min-h-full{min-height:100%!important}.min-h-screen{min-height:100vh!important}.min-h-16{min-height:4rem!important}.w-full{width:100%!important}.w-48{width:12rem!important}.w-4{width:1rem!important}.w-24{width:6rem!important}.w-3\/12{width:25%!important}.max-w-screen-xl{max-width:1280px!important}.flex-none{flex:none!important}.shrink-0{flex-shrink:0!important}.grow{flex-grow:1!important}.cursor-pointer{cursor:pointer!important}.cursor-default{cursor:default!important}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}.flex-row{flex-direction:row!important}.flex-col{flex-direction:column!important}.flex-col-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.gap-4{gap:1rem!important}.gap-8{gap:2rem!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0!important;border-bottom-width:calc(1px*var(--tw-divide-y-reverse))!important;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))!important}.overflow-hidden{overflow:hidden!important}.overflow-y-auto{overflow-y:auto!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.border{border-width:1px!important}.border-b{border-bottom-width:1px!important}.border-t{border-top-width:1px!important}.border-transparent{border-color:transparent!important}.border-tertiary-bg{border-color:var(--color-tertiary-bg)!important}.bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.bg-white{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.bg-primary-bg{background-color:var(--color-primary-bg)!important}.bg-tertiary-bg{background-color:var(--color-tertiary-bg)!important}.bg-opacity-75{--tw-bg-opacity:0.75!important}.bg-cover{background-size:cover!important}.bg-auto{background-size:auto!important}.bg-contain{background-size:contain!important}.bg-fixed{background-attachment:fixed!important}.bg-local{background-attachment:local!important}.bg-scroll{background-attachment:scroll!important}.bg-center{background-position:50%!important}.bg-top{background-position:top!important}.bg-right{background-position:100%!important}.bg-bottom{background-position:bottom!important}.bg-left{background-position:0!important}.p-12{padding:3rem!important}.p-6{padding:1.5rem!important}.p-2{padding:.5rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-32{padding-bottom:8rem!important;padding-top:8rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-12{padding-bottom:3rem!important;padding-top:3rem!important}.py-8{padding-bottom:2rem!important;padding-top:2rem!important}.py-4{padding-bottom:1rem!important;padding-top:1rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-6{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.px-8{padding-left:2rem!important;padding-right:2rem!important}.pt-12{padding-top:3rem!important}.pb-4{padding-bottom:1rem!important}.pt-4{padding-top:1rem!important}.pt-16{padding-top:4rem!important}.pt-6{padding-top:1.5rem!important}.pb-8{padding-bottom:2rem!important}.pt-2{padding-top:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pb-1{padding-bottom:.25rem!important}.pb-6{padding-bottom:1.5rem!important}.pt-10{padding-top:2.5rem!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.font-bold{font-weight:700!important}.font-semibold{font-weight:600!important}.leading-normal{line-height:1.5!important}.text-black{--tw-text-opacity:1!important;color:rgb(0 0 0/var(--tw-text-opacity))!important}.text-primary-text{color:var(--color-primary-text)!important}.text-eureka{color:var(--color-eureka)!important}.text-tertiary-text{color:var(--color-tertiary-text)!important}.text-opacity-75{--tw-text-opacity:0.75!important}.opacity-0{opacity:0!important}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)!important}.shadow-2xl,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important}.transition{transition-duration:.15s!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.duration-200{transition-duration:.2s!important}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.ps-1{-webkit-padding-start:.25rem!important;padding-inline-start:.25rem!important}.ps-4{-webkit-padding-start:1rem!important;padding-inline-start:1rem!important}.pe-4{-webkit-padding-end:1rem!important;padding-inline-end:1rem!important}.ps-6{-webkit-padding-start:1.5rem!important;padding-inline-start:1.5rem!important}.pe-6{-webkit-padding-end:1.5rem!important;padding-inline-end:1.5rem!important}.ps-scrollbar{-webkit-padding-start:calc(100vw - 100%)!important;padding-inline-start:calc(100vw - 100%)!important}.ms-0{-webkit-margin-start:0!important;margin-inline-start:0!important}.ms-1{-webkit-margin-start:.25rem!important;margin-inline-start:.25rem!important}.me-1{-webkit-margin-end:.25rem!important;margin-inline-end:.25rem!important}.ms-2{-webkit-margin-start:.5rem!important;margin-inline-start:.5rem!important}.me-2{-webkit-margin-end:.5rem!important;margin-inline-end:.5rem!important}.ms-4{-webkit-margin-start:1rem!important;margin-inline-start:1rem!important}.me-4{-webkit-margin-end:1rem!important;margin-inline-end:1rem!important}.me-6{-webkit-margin-end:1.5rem!important;margin-inline-end:1.5rem!important}.ms-8{-webkit-margin-start:2rem!important;margin-inline-start:2rem!important}.me-8{-webkit-margin-end:2rem!important;margin-inline-end:2rem!important}.me-auto{-webkit-margin-end:auto!important;margin-inline-end:auto!important}[dir=rtl] .start-0{right:0!important}[dir=ltr] .start-0{left:0!important}[dir=rtl] .end-auto{left:auto!important}[dir=ltr] .end-auto{right:auto!important}.border-e{border-inline-end-width:1px!important}.border-s{border-inline-start-width:1px!important}.hover\:text-eureka:hover{color:var(--color-eureka)!important}.hover\:underline:hover{text-decoration-line:underline!important}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1)!important;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}@media(min-width:768px){.md\:mx-0{margin-left:0!important;margin-right:0!important}.md\:mt-0{margin-top:0!important}.md\:block{display:block!important}.md\:inline-block{display:inline-block!important}.md\:flex{display:flex!important}.md\:hidden{display:none!important}.md\:h-16{height:4rem!important}.md\:h-\(16-4px\){height:calc(4rem - 4px)!important}.md\:max-h-doc-sidebar{max-height:calc(100vh - 4rem - var(--height-doc-title,4rem))!important}.md\:w-auto{width:auto!important}.md\:w-1\/4{width:25%!important}.md\:w-3\/4{width:75%!important}.md\:grow{flex-grow:1!important}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.md\:flex-row{flex-direction:row!important}.md\:flex-col{flex-direction:column!important}.md\:items-center{align-items:center!important}.md\:justify-end{justify-content:flex-end!important}.md\:justify-between{justify-content:space-between!important}.md\:border-b-0{border-bottom-width:0!important}.md\:border-t-2{border-top-width:2px!important}.md\:border-b-2{border-bottom-width:2px!important}.md\:border-b{border-bottom-width:1px!important}.md\:bg-transparent{background-color:transparent!important}.md\:bg-primary-bg{background-color:var(--color-primary-bg)!important}.md\:bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:px-8{padding-left:2rem!important;padding-right:2rem!important}.md\:py-0{padding-top:0!important}.md\:pb-0,.md\:py-0{padding-bottom:0!important}.md\:pt-0{padding-top:0!important}.md\:pt-8{padding-top:2rem!important}.md\:text-right{text-align:right!important}.md\:text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.md\:leading-\(16-4px\){line-height:calc(4rem - 4px)!important}.md\:text-primary-text{color:var(--color-primary-text)!important}.md\:pe-0{-webkit-padding-end:0!important;padding-inline-end:0!important}.md\:pe-8{-webkit-padding-end:2rem!important;padding-inline-end:2rem!important}.md\:ms-0{-webkit-margin-start:0!important;margin-inline-start:0!important}.md\:me-4{-webkit-margin-end:1rem!important;margin-inline-end:1rem!important}.md\:me-8{-webkit-margin-end:2rem!important;margin-inline-end:2rem!important}[dir=rtl] .md\:end-0{left:0!important}[dir=ltr] .md\:end-0{right:0!important}[dir=rtl] .md\:start-auto{right:auto!important}[dir=ltr] .md\:start-auto{left:auto!important}.md\:border-e{border-inline-end-width:1px!important}}@media(min-width:1024px){.lg\:col-span-6{grid-column:span 6/span 6!important}.lg\:col-start-2{grid-column-start:2!important}.lg\:mb-0{margin-bottom:0!important}.lg\:block{display:block!important}.lg\:w-2\/3{width:66.666667%!important}.lg\:w-3\/4{width:75%!important}.lg\:w-4\/5{width:80%!important}.lg\:w-1\/5{width:20%!important}.lg\:w-1\/4{width:25%!important}.lg\:w-1\/3{width:33.333333%!important}.lg\:w-1\/2{width:50%!important}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}.lg\:flex-row{flex-direction:row!important}.lg\:flex-row-reverse{flex-direction:row-reverse!important}.lg\:px-4{padding-left:1rem!important;padding-right:1rem!important}.lg\:pt-12{padding-top:3rem!important}.lg\:ms-4{-webkit-margin-start:1rem!important;margin-inline-start:1rem!important}.lg\:me-4{-webkit-margin-end:1rem!important;margin-inline-end:1rem!important}.lg\:ms-8{-webkit-margin-start:2rem!important;margin-inline-start:2rem!important}}@media(min-width:1280px){.xl\:mx-16{margin-left:4rem!important;margin-right:4rem!important}.xl\:w-2\/12{width:16.666667%!important}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.xl\:px-8{padding-left:2rem!important;padding-right:2rem!important}.xl\:px-12{padding-left:3rem!important;padding-right:3rem!important}} \ No newline at end of file +/*!tailwindcss v3.3.5 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }:root{--color-eureka:#38b2ac;--color-primary-bg:#f2f2f7;--color-secondary-bg:#fff;--color-tertiary-bg:#f2f2f7;--color-primary-text:rgba(0,0,0,.85);--color-secondary-text:rgba(0,0,0,.7);--color-tertiary-text:rgba(0,0,0,.55);background-color:var(--color-primary-bg);color:var(--color-primary-text);font-family:Lora,Noto Serif SC,serif}.dark{--color-eureka:#38b2ac;--color-primary-bg:#000;--color-secondary-bg:#1c1c1e;--color-tertiary-bg:#2c2c2e;--color-primary-text:hsla(0,0%,100%,.85);--color-secondary-text:hsla(0,0%,100%,.7);--color-tertiary-text:hsla(0,0%,100%,.55)}a:hover{color:var(--color-eureka);transition-duration:.3s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}code{direction:ltr}.content{color:var(--color-primary-text);line-height:1.5;overflow-wrap:break-word}.content>*{margin-bottom:1rem}.content li+li{margin-top:.25rem}.content li>p+p{margin-top:1.5rem}.content strong{font-weight:600}.content a,.content a:hover{color:var(--color-eureka)}.content a:hover{text-decoration-line:underline}.content strong a{font-weight:700}.content h1{font-size:2.25rem;line-height:2.5rem;line-height:1.25}.content h1,.content h2{border-bottom-width:1px;font-weight:600;margin-bottom:1rem;margin-top:1.5rem;padding-bottom:.5rem}.content h2{font-size:1.5rem;line-height:2rem;line-height:1.25}.content h3{font-size:1.125rem;line-height:1.75rem;line-height:1.375}.content h3,.content h4{font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h4{font-size:1rem;line-height:1.5rem;line-height:1}.content h5,.content h6{font-size:.875rem;font-weight:600;line-height:1.25rem;line-height:1.25;margin-bottom:1rem;margin-top:1.5rem}.content blockquote,.content h6{color:var(--color-secondary-text)}.content blockquote{border-color:var(--color-tertiary-text);border-inline-start-width:4px;font-size:1rem;line-height:1.5rem;padding-inline-end:1rem;padding-inline-start:1rem}.content code{color:var(--color-tertiary-text);display:inline;font-family:SFMono-Regular,Menlo,monospace;font-size:.875rem;line-height:1.25rem;padding:.25rem}.content code,.content pre{background-color:var(--color-tertiary-bg);border-radius:.25rem}.content pre{padding:1rem}.content pre code{background-color:transparent;border-radius:0;display:block;overflow:auto;padding:0}.content ul{list-style-type:disc}.content ol,.content ul{font-size:1rem;line-height:1.5rem;padding-inline-start:2rem}.content ol{list-style-type:decimal}.content kbd{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);border-radius:.25rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:inline-block;font-family:SFMono-Regular,Menlo,monospace;font-size:.75rem;font-weight:400;line-height:1rem;padding:.25rem;vertical-align:middle}.content table{border-color:var(--color-secondary-text);display:block;font-size:1rem;line-height:1.5rem;overflow:auto}.content td,.content th{border-width:1px;padding:.25rem .75rem}.content .katex{overflow-x:auto;overflow-y:hidden}.content .katex *{border-color:var(--color-primary-text)}.content :target{margin-top:-4rem;padding-top:4rem}.sticky-toc{position:sticky;top:8rem;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);z-index:0}.sticky-toc a{color:var(--color-primary-text);transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sticky-toc a:hover{color:var(--color-eureka)}.sticky-toc ul{list-style-type:disc}.sticky-toc ol,.sticky-toc ul{font-size:1rem;line-height:1.5rem;padding-inline-start:2rem}.sticky-toc ol{list-style-type:decimal}.sticky-toc li+li{margin-top:.25rem}.sticky-toc li>p+p{margin-top:1.5rem}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.pagination{display:flex;justify-content:center}.pagination .page-item{align-items:center;display:flex}.pagination .page-item .page-link{margin:.5rem;padding:.5rem}.pagination .active,.pagination .page-item:not(.disabled):hover,.selected-menu-item{color:var(--color-eureka)}.selected-menu-item{border-bottom-color:transparent;border-top-color:var(--color-eureka)}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:sticky!important}.inset-0{inset:0!important}.end-auto{inset-inline-end:auto!important}.start-0{inset-inline-start:0!important}.top-16{top:4rem!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-30{z-index:30!important}.z-40{z-index:40!important}.z-50{z-index:50!important}.col-span-2{grid-column:span 2/span 2!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-5{grid-column:span 5/span 5!important}.col-start-2{grid-column-start:2!important}.col-start-3{grid-column-start:3!important}.col-start-5{grid-column-start:5!important}.row-span-2{grid-row:span 2/span 2!important}.row-span-3{grid-row:span 3/span 3!important}.row-start-2{grid-row-start:2!important}.row-start-3{grid-row-start:3!important}.-m-12{margin:-3rem!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-4{margin-bottom:1rem!important;margin-top:1rem!important}.my-8{margin-bottom:2rem!important;margin-top:2rem!important}.-me-2{margin-inline-end:-.5rem!important}.-mt-10{margin-top:-2.5rem!important}.-mt-16{margin-top:-4rem!important}.mb-12{margin-bottom:3rem!important}.mb-2{margin-bottom:.5rem!important}.mb-4{margin-bottom:1rem!important}.mb-6{margin-bottom:1.5rem!important}.mt-12{margin-top:3rem!important}.mt-2{margin-top:.5rem!important}.mt-4{margin-top:1rem!important}.box-border{box-sizing:border-box!important}.block{display:block!important}.inline-block{display:inline-block!important}.flex{display:flex!important}.grid{display:grid!important}.hidden{display:none!important}.h-\(screen-16\){height:calc(100vh - 4rem)!important}.h-128{height:32rem!important}.h-160{height:40rem!important}.h-24{height:6rem!important}.h-4{height:1rem!important}.h-64{height:16rem!important}.h-96{height:24rem!important}.h-full{height:100%!important}.min-h-16{min-height:4rem!important}.min-h-full{min-height:100%!important}.min-h-screen{min-height:100vh!important}.w-24{width:6rem!important}.w-3\/12{width:25%!important}.w-4{width:1rem!important}.w-48{width:12rem!important}.w-full{width:100%!important}.max-w-screen-xl{max-width:1280px!important}.flex-none{flex:none!important}.shrink-0{flex-shrink:0!important}.grow{flex-grow:1!important}.cursor-default{cursor:default!important}.cursor-pointer{cursor:pointer!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}.flex-row{flex-direction:row!important}.flex-col{flex-direction:column!important}.flex-col-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.gap-4{gap:1rem!important}.gap-8{gap:2rem!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0!important;border-bottom-width:calc(1px*var(--tw-divide-y-reverse))!important;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))!important}.overflow-hidden{overflow:hidden!important}.overflow-y-auto{overflow-y:auto!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.border{border-width:1px!important}.border-b{border-bottom-width:1px!important}.border-t{border-top-width:1px!important}.border-tertiary-bg{border-color:var(--color-tertiary-bg)!important}.border-transparent{border-color:transparent!important}.bg-primary-bg{background-color:var(--color-primary-bg)!important}.bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.bg-tertiary-bg{background-color:var(--color-tertiary-bg)!important}.bg-white{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.bg-opacity-75{--tw-bg-opacity:0.75!important}.bg-auto{background-size:auto!important}.bg-contain{background-size:contain!important}.bg-cover{background-size:cover!important}.bg-fixed{background-attachment:fixed!important}.bg-local{background-attachment:local!important}.bg-scroll{background-attachment:scroll!important}.bg-bottom{background-position:bottom!important}.bg-center{background-position:50%!important}.bg-left{background-position:0!important}.bg-right{background-position:100%!important}.bg-top{background-position:top!important}.p-12{padding:3rem!important}.p-2{padding:.5rem!important}.p-6{padding:1.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-8{padding-left:2rem!important;padding-right:2rem!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-12{padding-bottom:3rem!important;padding-top:3rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-32{padding-bottom:8rem!important;padding-top:8rem!important}.py-4{padding-bottom:1rem!important;padding-top:1rem!important}.py-6{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-8{padding-bottom:2rem!important;padding-top:2rem!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-4{padding-bottom:1rem!important}.pb-6{padding-bottom:1.5rem!important}.pb-8{padding-bottom:2rem!important}.pt-10{padding-top:2.5rem!important}.pt-12{padding-top:3rem!important}.pt-16{padding-top:4rem!important}.pt-2{padding-top:.5rem!important}.pt-4{padding-top:1rem!important}.pt-6{padding-top:1.5rem!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.font-bold{font-weight:700!important}.font-semibold{font-weight:600!important}.leading-normal{line-height:1.5!important}.text-black{--tw-text-opacity:1!important;color:rgb(0 0 0/var(--tw-text-opacity))!important}.text-eureka{color:var(--color-eureka)!important}.text-primary-text{color:var(--color-primary-text)!important}.text-tertiary-text{color:var(--color-tertiary-text)!important}.text-opacity-75{--tw-text-opacity:0.75!important}.opacity-0{opacity:0!important}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)!important}.shadow-2xl,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important}.transition{transition-duration:.15s!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.duration-200{transition-duration:.2s!important}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.ps-1{padding-inline-start:.25rem!important}.ps-4{padding-inline-start:1rem!important}.pe-4{padding-inline-end:1rem!important}.ps-6{padding-inline-start:1.5rem!important}.pe-6{padding-inline-end:1.5rem!important}.ps-scrollbar{padding-inline-start:calc(100vw - 100%)!important}.ms-0{margin-inline-start:0!important}.ms-1{margin-inline-start:.25rem!important}.me-1{margin-inline-end:.25rem!important}.ms-2{margin-inline-start:.5rem!important}.me-2{margin-inline-end:.5rem!important}.ms-4{margin-inline-start:1rem!important}.me-4{margin-inline-end:1rem!important}.me-6{margin-inline-end:1.5rem!important}.ms-8{margin-inline-start:2rem!important}.me-8{margin-inline-end:2rem!important}.me-auto{margin-inline-end:auto!important}[dir=rtl] .start-0{right:0!important}[dir=ltr] .start-0{left:0!important}[dir=rtl] .end-auto{left:auto!important}[dir=ltr] .end-auto{right:auto!important}.border-e{border-inline-end-width:1px!important}.border-s{border-inline-start-width:1px!important}.hover\:text-eureka:hover{color:var(--color-eureka)!important}.hover\:underline:hover{text-decoration-line:underline!important}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1)!important;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}@media(min-width:768px){.md\:end-0{inset-inline-end:0!important}.md\:start-auto{inset-inline-start:auto!important}.md\:mx-0{margin-left:0!important;margin-right:0!important}.md\:mt-0{margin-top:0!important}.md\:block{display:block!important}.md\:inline-block{display:inline-block!important}.md\:flex{display:flex!important}.md\:hidden{display:none!important}.md\:h-\(16-4px\){height:calc(4rem - 4px)!important}.md\:h-16{height:4rem!important}.md\:max-h-doc-sidebar{max-height:calc(100vh - 4rem - var(--height-doc-title,4rem))!important}.md\:w-1\/4{width:25%!important}.md\:w-3\/4{width:75%!important}.md\:w-auto{width:auto!important}.md\:grow{flex-grow:1!important}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.md\:flex-row{flex-direction:row!important}.md\:flex-col{flex-direction:column!important}.md\:items-center{align-items:center!important}.md\:justify-end{justify-content:flex-end!important}.md\:justify-between{justify-content:space-between!important}.md\:border-b{border-bottom-width:1px!important}.md\:border-b-0{border-bottom-width:0!important}.md\:border-b-2{border-bottom-width:2px!important}.md\:border-t-2{border-top-width:2px!important}.md\:bg-primary-bg{background-color:var(--color-primary-bg)!important}.md\:bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.md\:bg-transparent{background-color:transparent!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:px-8{padding-left:2rem!important;padding-right:2rem!important}.md\:py-0{padding-top:0!important}.md\:pb-0,.md\:py-0{padding-bottom:0!important}.md\:pt-0{padding-top:0!important}.md\:pt-8{padding-top:2rem!important}.md\:text-right{text-align:right!important}.md\:text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.md\:leading-\(16-4px\){line-height:calc(4rem - 4px)!important}.md\:text-primary-text{color:var(--color-primary-text)!important}.md\:pe-0{padding-inline-end:0!important}.md\:pe-8{padding-inline-end:2rem!important}.md\:ms-0{margin-inline-start:0!important}.md\:me-4{margin-inline-end:1rem!important}.md\:me-8{margin-inline-end:2rem!important}[dir=rtl] .md\:end-0{left:0!important}[dir=ltr] .md\:end-0{right:0!important}[dir=rtl] .md\:start-auto{right:auto!important}[dir=ltr] .md\:start-auto{left:auto!important}.md\:border-e{border-inline-end-width:1px!important}}@media(min-width:1024px){.lg\:col-span-6{grid-column:span 6/span 6!important}.lg\:col-start-2{grid-column-start:2!important}.lg\:mb-0{margin-bottom:0!important}.lg\:block{display:block!important}.lg\:w-1\/2{width:50%!important}.lg\:w-1\/3{width:33.333333%!important}.lg\:w-1\/4{width:25%!important}.lg\:w-1\/5{width:20%!important}.lg\:w-2\/3{width:66.666667%!important}.lg\:w-3\/4{width:75%!important}.lg\:w-4\/5{width:80%!important}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}.lg\:flex-row{flex-direction:row!important}.lg\:flex-row-reverse{flex-direction:row-reverse!important}.lg\:px-4{padding-left:1rem!important;padding-right:1rem!important}.lg\:pt-12{padding-top:3rem!important}.lg\:ms-4{margin-inline-start:1rem!important}.lg\:me-4{margin-inline-end:1rem!important}.lg\:ms-8{margin-inline-start:2rem!important}}@media(min-width:1280px){.xl\:mx-16{margin-left:4rem!important;margin-right:4rem!important}.xl\:w-2\/12{width:16.666667%!important}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.xl\:px-12{padding-left:3rem!important;padding-right:3rem!important}.xl\:px-8{padding-left:2rem!important;padding-right:2rem!important}} \ No newline at end of file