Hi there!

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

在 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

中断和8259A中断控制器

在之前学习计算机组成原理的时候就曾经研究过中断: TD-CMA下计算机组成实验:带中断的复杂模型机 | Finley’s Blog 今年学习了汇编和微机接口,这是一篇对中断机制和中断控制器 8259A 的总结性文章。 术语 中断:暂停当前程序,转去处理异常或外设请求程序 主程序 中断服务程序 ISR: Interrupt Service Routine 断点:中断时,主程序中被终止指令的下一条指令地址,被压入栈中进行保护。 中断源:引发中断的事件或设备。 内部中断: CPU执行程序错误,例如除法错 外部中断:CPU外部的中断,外设提出的中断,如电源故障 中断类型号:每个中断源分配一个编号,即中断类型号 中断接口:实现中断管理的逻辑电路被称为中断接口。8259A 可编程中断控制器 中断识别:CPU确定哪一个中断源发出中断请求的过程。找到中断源对应的中断服务程序的入口地址,转去进行处理 查询法: 软件查询,确定中断源 硬件法:硬件法,由可编程中断寄存器提供中断类型号 中断向量:中断服务程序的入口地址: CS:IP 中断向量表:将系统中的所有中断向量集中起来,按照中断类型号从小到大的顺序存放在内存某区域。(数据段0段中) 中断响应:收到中断请求,CPU满足响应条件则进入中断响应周期。接受响应的条件 CPU当前指令执行结束 没有更高级的中断请求正在执行 CPU处于开中断状态,(IF = 1) 改变 IF 的状态: STI 开中断 SeT Interrupt CLI 关中断 CLear Interrupt 中断响应周期需要完成的动作:(CPU 硬件自动完成) 清IF, TF标志 将 FLAGS、CS、IP 压桟保存 查找中断向量表,获得 ISR 入口地址,转而去执行 ISR 8086/8088 微机中断系统 8 位二进制数表示一个中断类型号 一共支持 256 个中断源, 放置在 0 数据段的 0 ~ 3FFH (1KB)...

2024/01/08 · updated 2024/01/10 · 417 words · Finley Ge

obsidian dartaview 插件的使用技巧

Obsidian Obsidian - Sharpen your thinking是一款很强大的笔记软件。 它的 强大 之一就在于有着丰富的第三方插件系统。 本文要介绍的是 Obsidian 的一个重量级插件,名为 Dataview GitHub - blacksmithgu/obsidian-dataview: A high-performance data index and query language over Markdown files, for https://obsidian.md/. 你可以通过 Obsidian 自带的社区插件市场中安装。 Dataview 消歧义 需要注意的一个是对于前端开发者而言,你可能认为的 Dataview 是 DataView - JavaScript | MDN。这和 Obsidian-dataview 无关,本文为了简洁,下文中所说的 dataview 都是指 obsidian-dataview Dataview 是一个用来索引和查询你的 vault 中的 md 文件的插件。它提供了两种强大的语法支持,一种称为 DQL (Dataview Query Language),是一种类似与 SQL 的语言。除此之外还支持 JavaScript 语法。 DQL DQL 四种类型 Table List Task Calendar 分别生成不同的片段 一个最简单的DQL应当如下 1 2 3 4 ```dataview [Table/List/Task/Calendar] from ["path"/"#tag"] where [expression] 除此之外还包括 sort 用于排序, group by 用于分组。 例如我要做一张表格,用来筛选我的电影目录中没有看过的电影,按照创建时间升序...

2024/01/07 · updated 2024/01/07 · 259 words · Finley Ge
晋ICP备2022008114