Hi there!

Welcome to Finley’s Blog! Programing, Technology and Thinking.

Docker 网络模型

在之前的文章中,我曾经使用 Docker 的 Macvlan 网络在内网创建了一台 OpenWrt 主机作为旁路网关。在 N1 盒子 Armbian 上使用 docker 安装 openwrt 旁路网关 | Finley’s Blog 那么 Docker 的网络究竟有哪几种,每种网络模型都是什么样的呢? Docker 的网络模型一共有六种: bridge: 默认的桥接网路 host: 去除了宿主机和容器的网络隔离 none: 完全将容器和宿主机、以及其他容器隔离 ipvlan: 完全控制 ipv4 和 ipv6 协议 macvlan: 给容器分配一个 MAC 地址 overlay: 连接多个容器和宿主机 Bridge 网桥 桥接器 - 维基百科,自由的百科全书 网桥是一种在数据链路层将多个网段连接在一起变成一个子网的设备 对于 Docker 来说则是一样的道理。在同一个 Bridge 网路中的容器之间能够相互通信。 容器在没有经过任何配置的默认情况下,就是 Bridge 模式。 容器将连接到默认的 bridge 网路。 而宿主机则与默认的 bridge 连接,宿主机作为网关,转发容器的网络请求,使容器可以进行网络请求。 我们使用的 -p 8080:80 参数则相当于 端口转发。其本质是将外部的请求通过网桥传入容器。 用户定义的 Bridge 当然除开默认的 bridge,用户还可以自定义网桥设备。 最主要的作用是可以与默认的网桥隔离开来。...

2024/03/16 · updated 2024/03/16 · 275 words · Finley Ge

Neovim 配置 Volar

几天没写 vue,回来发现我的 volar 莫名奇妙的失效了。上 github 一看才知道,原来 volar 2.0.0 之后不再提供 TypeScript 解析,需要由 tsserver 提供。 之前在 nvim 上配置 volar 需要将 tsserver 关掉,或者使用 neoconf.nvim 等工具在项目中将 tsserver 禁用。 然后使用 volar 的 takeover (接管?)模式直接解析 ts 文件。 不必多说,参考 nvim-lspconfig/doc/server_configurations.md at master · neovim/nvim-lspconfig · GitHub 直接开搞 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 local lspconfig = require('lspconfig') local home = os....

2024/03/12 · updated 2024/03/12 · 176 words · Finley Ge

在 N1 盒子 Armbian 上使用 docker 安装 openwrt 旁路网关

去年搞了一台 n1 盒子,寒假期间从海鲜市场淘来了一台中兴的千兆路由器 (型号是E503),准备让 N1 盒子做旁路网关,实现软路由(主要目的是实现透明的魔法) 现在我的(宿舍)网络拓扑图如下: 1 2 3 4 5 6 [百兆宽带] -- [E503路由器](主路由 192.168.123.1 )--wlan-- 无线终端设备(手机等) | ├-- (lan1) -- 电脑 (192.168.123.123) ├-- (lan2) -- N1 盒子 |--- 192.168.123.250 Armbian ├--- 192.168.123.251 openwrt 旁路由 旁路网关就是把内网中的终端设备的网关设置为旁路由的网关(192.168.123.251),而旁路由的网关设置为主路由网关(192.168.123.1),如是,则内网中的所有流量都将经过旁路由的转发,再到主路由。 除了手动设置网关外,可以通过 DHCP 自动设置网关。 n1 刷入 Armbian 由于我购入的 n1 已经刷入过 openwrt,直接插入烧录好的 U 盘即可从 U 盘启动 我使用的 Armbian 固件是:Armbian_24.2.0_amlogic_s905d_bullseye_6.6.15_server_2024.02.01.img.gz 可以从 Releases · ophub/amlogic-s9xxx-armbian · GitHub 获取 如何选择版本? 参考: DebianReleases - Debian Wiki 我选择的是 Bullseye,较老的版本。我希望尽量使用 docker 管理我 n1 盒子上的各种应用,因此 debian 的版本并不重要。...

2024/02/27 · updated 2024/02/27 · 309 words · Finley Ge

Hugo 数学公式支持

睡不着,水篇博客。 三周以前 Hugo released 了 0.122 版本 Release v0.122.0 · gohugoio/hugo · GitHub 推出了一个新的 goldmark(hugo使用的 markdown parser) 的插件 passthrough,用于解决数学公式中的内容被转义的问题。 Hugo 的 goldmark 并不支持数学公式,一般使用前端技术栈的 KaTeX 或者是 MathJax 实现对数学公式的渲染(在浏览器上) 然而在之前,goldmark 会对如 \ 等进行转义,导致部分数学公式无法正常渲染。 例如要通过 aligned 进行多行渲染时,换行符 \\ 将被转义为单个反斜杠 \ 现在只需要配置好 passthrough 插件即可在文章的特定部分(例如数学公式)不进行 goldmark 的转义 配置 passthrough 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 markup: goldmark: extensions: passthrough: delimiters: block: - - \[ - \] - - $$ - $$ inline: - - \( - \) - - $ - $ enable: true Mathematics in markdown | Hugo...

2024/02/18 · updated 2024/02/18 · 178 words · Finley Ge

山西中国联通光猫破解及桥接+IPTV设置

首先介绍一下我家的网络情况: 光纤入户,接入光猫(型号SK-D742) 该光猫有4个lan口,其中一个为千兆网口,其余3个为百兆。 默认情况下,光猫进行 pppoe 拨号并路由。 比较合理的方式是使用千兆网口接主路由,改桥接后由主路由进行拨号。 我家使用了一台 tp-link 的路由器。笔者推荐使用一台多 Wan 口路由器,以便将 iptv 并入内网。 修改桥接需要进入光猫管理后台(192.168.1.1/cu.html) 以下为获取超级管理员密码的方式: 访问 http://192.168.1.1/hidden_version_switch.html 进入光猫隐藏设置 开启 telnet 功能(按下后页面刷新,自动取消选中) 使用 telnet 访问 192.168.1.1 输入用户名 root,密码随意。 使用 ftp 访问 192.168.1.1 ftp useradmin@192.168.1.1 密码为 192.168.1.1 ftp 使用 passive mode quote pasv passive get /var/tmp/telnet_su_passwd 为光猫管理密码(帐号为CUAdmin) IPTV 的设置需要在电视盒子里选择 DHCP 模式 参考: 联通光猫SK-D540保姆级破解教程!!!-光猫/adsl/cable无线一体机-恩山无线论坛

2024/02/03 · updated 2024/02/03 · 52 words · Finley Ge

编译原理(三):语义分析

通过语法分析可以得到语法分析树,但是不不知道其含义所在。 语义分析则赋予其含义。 语法制导翻译 语法制导定义(Syntax-Directed Definition,SDD),是在语法处理过程中对语言节点的属性的处理 我们将讨论非终结符号的两个属性:继承属性和综合属性 综合属性(synthesized attribute):在分析树节点N上的非终结符号A的综合属性是由N上的产生式所关联的语义规则来定义的。 继承属性(inherited attribute):在分析树节点N上的非终结符号B的继承属性是由N的父节点上的产生式所关联的语义规则来定义的。 如果一个SDD的每个属性都是综合属性,那么这个SDD是一个S属性的SDD。 对于一个S属性的SDD,可以按照语法分析树结点的任何自底向上顺序来计算它的各个属性值。S属性的SDD可以在自底向上的语法分析过程中实现 L 属性:一个产生式体所关联的各个属性之间,依赖图的边总是从左到右,而不能从右到左。 要么是一个综合属性 要么是一个继承属性,但是它的语义规则有这些限制 对于 $A \to X_{1}X_{2}\dots X_{n}$,继承属性 $X_{i}.a$: 只能使用 A 的继承属性 使用左兄弟节点的继承属性 与 $X_{i}$ 的实例本身相关的全部属性,但是在 $X_{i}$的 全部属性组成的依赖图中不能存在环 语法制导的翻译方案(syntax-directed translation scheme,SDT)是在产生式中嵌入了程序片段的上下文无关文法 这些程序片段称为语义动作,可以出现在产生式体中的任何地方。 基本文法可以使用LR分析技术,且SDD是S属性的 基本文法可以使用LL分析技术,且SDD是L属性的 参考: 编译工程8:语法制导翻译 - 知乎

2024/01/16 · updated 2024/01/17 · 41 words · Finley Ge

编译原理(二):语法分析

进行语法分析后得到了 token 流,对 token 流进行分析以得到语法树的过程是语法分析。 语法分析分为两种: 自顶向下的语法分析 自低向上的语法分析 这个方向的定义是来源于树的产生方式。 Context-free Grammar 使用上下文无关语法进行语法定义。 1 S -> a | b | c 非终结符产生(推导到)终结符。 二义性 一个文法可以产生多棵分析树,则为二义性文法。 例如 悬空 else 问题: 有语法: 1 2 3 4 5 S -> if C then S | if C then S else S | id := E C -> E = E | E < E | E > E E -> E + E | E - E | id 1 2 3 4 if x<3 then if x>0 then x:=5 else x:=-5 // 这个 `else` 是哪个 if 的 else ?...

2024/01/16 · updated 2024/01/16 · 397 words · Finley Ge

编译原理(一):词法分析

前言 编译原理是很有趣的一门学科,但是相对晦涩难懂。 本文的首要目的是为我自己梳理编译原理的学习笔记,也是为了能为后人有一个参考的资料。 本系列文章将会有若干篇,每篇文章的基本结构将会是: 术语表:用于解释本文中的各种术语 主要内容,将分为不同的几个标题 技巧性的知识 术语表 本系列文章将在每篇的开头先把本文的术语解释一下。 在编译原理的学习过程中,各种奇怪的术语总是令人困扰。 Lexical Analysis 将字符串转换为 Token 串的过程 Token 词法单元, 通过词法分析得到的词法单元 Regular Expression 正则表达式、正规式:用来描述词法的工具 NFA: Non-determined Finite Automaton,非确定有限状态自动机(详细解释见下文) DFA: Determined Finite Automaton, 确定有限状态自动机 词法分析的过程 词法分析的目的就是将一串字符串转化为计算机可以使用的串(也即 Token 串)。 执行这一过程的程序是一种 “扫描器”。按照一定方向(一般是从左到右)扫描字符串,并将得到的 Token 通过一定的方式表达出来 (例如 XML ) 1 2 flowchart LR 字符串 --> id[(扫描器)] --> Token串 那么如何定义某个串为一个 Token 呢? 这就需要用到正则表达式。 正则表达式是给人类使用的,用于定义 Token 串的工具,而计算机对于正则表达式也是束手无策。 实际上扫描器是基于有限状态自动机的。 正则表达式 本文不详细解释正则表达式,正则表达式理论上对于能够学习编译原理的同学并不陌生。 需要注意的是正则表达式有三种最重要的符号: 联合,通常使用+ 或 | 表示 连接,通常不使用符号表示(或者使用 $\cdot$ 表示) 闭包,通常使用* 表示 上述符号的优先级顺序为从上到下,优先级递增。 当然除此之外还需要括号来表示运算的优先级。...

2024/01/16 · updated 2024/01/16 · 176 words · Finley Ge

概率论 Cheat-sheet

事件 事件运算 $$ \begin{aligned} &A - B = A \bar{B} \\ &A - B = A - AB \\ &A = AB \cup A\bar{B} = A - B + AB \end{aligned} $$ 概率运算(减法公式, 加法公式) $$ \begin{aligned} &P(A-B) = P(A) - P(B)\\ &P(A \cup B) = P(A) + P(B) - PAB\\ \end{aligned} $$ 条件概率(理解为除法) $$ P(B|A) = \frac{P(AB)}{P(A)} $$ 乘法公式 $$ P(ABC) = P(C|AB)P(B|A)P(A) $$ 全概率公式 $$ P(A) = P(A|B_{1})P(B_{1}) + P(A|B_{2})P(B_{2}) + \dots + P(A|B_{n})P(B_{n}) $$ Bayes 公式...

2024/01/14 · updated 2024/02/03 · 116 words · Finley Ge

计算机的定时和计数

计算机的定时和计数通常是一回事。 提供定时和计数能力的芯片是 8253/8254 三个计数器结构相同,相互独立 CLK 外部时钟信号 Gate 门控制信号 Out 对外输出信号 CPU 通过数据总线控制总线和 8253 挂接。 $A_1$ $A_0$ 功能 0 0 Counter0 0 1 Counter1 1 0 Counter2 1 1 控制端 对 8253/8254 编程 写入方式字 写入初值 $D_7$ $D_6$ $D_5$ $D_4$ $D_3$ $D_2$ $D_1$ $D_0$ 计数器 读写格式 工作方式 数制 读写格式 00 锁存当前值 01 写低8位,高8位置0 10 写高8位,低8位置0 11 先写低8位,再写高8位 数制: 0 二进制 1 BCD 当初值为类似 2000 时,使用 BCD 有效提高写入速度(低8位为0,高8位为 0010 0000) 计算初值 $$ \text{定时时间} T_{out} = \text{计数初值}n \times 计数时钟周期 T_{CLK} $$ $$ \text{计数初值} n = \frac{T_{out}}{T_{CLK}} = \frac{f_{CLK}}{f_{out}} $$ 写入端口 使用 IN 和 OUT 命令进行编程...

2024/01/10 · updated 2024/01/10 · 166 words · Finley Ge
晋ICP备2022008114