Dvorak
Dvorak

Dvorak Chen

All Posts


P2P 的 NAT

P2P的NAT 本文讨论了NAT(网络地址转换)的原理和对P2P通信的影响。NAT是为了解决IPv4地址不足的问题而出现的临时方案,但对互联网产生了负面影响。 首先,文章介绍了全局地址和专用地址的概念,以及NAT如何将专用地址映射为全局地址。 然后,文章讨论了NAT的缺点,包括违反IP地址设计原则、使网络变得脆弱、破坏网络分层结构模型等。 接下来,文章介绍了不同类型的NAT,包括全锥型、受限锥型、端口受限锥型和对称型,并解释了它们在P2P通信中的表现。 最后,文章讨论了在不同类型的NAT下如何实现P2P通信,并指出了一些无法建立P2P连接的情况。 总的来说,NAT是一个有用但失败的协议,它缓解了IPv4地址不足的问题,但也给网络带来了复杂性和脆弱性。NAT的普及延缓了IPv6的普及,并对P2P通信造成了困扰。--GPT 4

network

How to fix some issues while using "diesel"

If you encounter the 'cannot open input file "sqlite3.lib"' error when operating sqlite file with Diesel, don't worry, it's because Diesel can't find the file sqlite3.lib at the path ~/.rustup/toolchains/..... You can download sqlite3.lib from the link provided in the article. After downloading, unzip it and move sqlite3.lib to the path ~/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/x86_64-pc-windows-msvc/lib/. Note that the path might be different if you use a different version of Rust. This article provides a simple solution to the error and helps you get back on track with your work.--GPT 4

Rust

Leptos - CSR & SSR

Leptos是一个全栈框架,支持MVC式的Web应用开发。前端框架的纯前端应用采用CSR(客户端渲染)方式,优点是更少的打包文件,更紧凑的格式,但对SEO不友好。SSR(服务器端渲染)是更好的选择,Leptos采用Actix和Axum实现SSR,分为脱水、浸泡和湿润三个步骤,使用Rust的features在不同环境运行不同代码。组件里的服务器代码运行在SSR环境下,Leptos提供了Server Functions功能,可以在组件里使用服务器的代码。但是,Leptos的SSR环境有时会遇到一些奇怪的问题。--GPT 4

Rust Leptos

Rust 和经典语言在习惯上的差异

本文介绍了 Rust 和 C# 在编程习惯上的差异。首先介绍了 Rust 中的所有权概念,即变量持有它的值的所有权、变量赋值给别的变量会转移所有权、变量不能使用它没有持有所有权的值。这种概念带来的好处是严格限制了值的生命周期,为编译器知道在何处释放它提供了基础。其次,本文介绍了 Rust 中的抽象,即单元结构体的使用方法,它不定义任何的属性,可以用 `impl` 块给他定义方法,调用的时候单元结构体的名字提供了抽象。最后,本文介绍了在 Rust 中经常出现的嵌套泛型的写法,这种写法是为了实现动态分配,而其他的,如 `Mute<T>` 和 `Arc<T>` 是为了在多线程中共享数据。在 Rust 中必须要习惯这种 **wrap** 写法。--GPT 4

Rust

Leptos - 撸一只赛博猫猫

本文介绍了使用Leptos和Rust语言,替代Javascript,编写一个可爱的赛博猫猫动画的过程。文章首先介绍了一些有用的crates,如console_log、gloo和js-sys,它们分别提供了打印输出、大量BOM调用的API和时间库功能。然后,作者详细描述了如何使用HTML和Rust编写的逻辑代码,包括事件监听和类似Javascript的Interval时间函数,来创建一个可交互的赛博猫猫动画。此外,文章还详细解释了如何使用Interval时间函数和数组存储的字符画,来实现猫猫摇尾巴的动画效果。最后,作者提到了如何使用on_cleanup函数,在组件清理的时候取消Interval函数,以及如何在组件卸载的时候清理Interval。那么,如何使用Rust和Leptos来创建自己的动画呢?你会尝试使用这些方法和技巧来创建自己的项目吗?--GPT 4

Rust

从实现 Iterator 来窥探 Rust

本文详细介绍了如何在Rust中实现Iterator trait,以支持for in遍历。首先,我们定义了一个简单的struct,然后实现了一个iter()方法,将其转换为另一个实现了Iterator trait的结构。接下来,我们探讨了为何不直接在Nums上实现Iterator,以及Rust特有的生命周期标注的概念。我们还解释了如何在NumsIter结构中使用生命周期标注,以保证在借用Nums的时间内Nums都是存在的。最后,我们实现了Iterator trait,并给出了完整的代码示例。这篇文章提供了一个深入理解Rust中Iterator实现和生命周期标注的好机会。那么,你是否已经理解了如何在Rust中实现Iterator?你是否理解了生命周期标注的作用及其在Rust中的重要性?--GPT 4

Rust

Leptos 初探 - 序言

Leptos是一个用Rust开发的全栈Web框架,其写法类似于React,但实现机制却大相径庭。Leptos采用最小粒度更新的方式,避免了虚拟DOM的处理,性能上优于React。然而,由于Rust语言的学习难度,Leptos的普及可能会受到一定限制。此外,Leptos的更新机制依赖于闭包,而Rust严苛的语法规则可能会给开发者带来一些挑战。例如,Rust的所有权规则需要通过`Rc`进行引用计数来解决。最后,Leptos的代码最终会编译到浏览器的WASM环境中运行,因此不是所有的Rust crate都能够正常运行,需要挑选能够在WASM中使用的crate。这篇文章对Leptos的使用进行了详细的介绍,对于想要了解和使用Leptos的开发者来说,具有一定的参考价值。那么,你是否已经准备好接受Leptos的挑战,使用Rust开发你的Web应用呢?--GPT 4

Rust Leptos

滑动窗口最大值

本篇博客详细解析了Leetcode上的一道题目——滑动窗口最大值。该题目要求从一个整数数组中,通过滑动窗口的方式,获取每个窗口中的最大值。博客首先介绍了题目的要求和示例,然后提出了一种直接的解决方法,即通过for循环遍历数组,对窗口中的子数组进行排序,获取最大值。但是这种方法的时间复杂度较高,无法满足题目要求。因此,博客提出了一种新的解决方法,即通过队列获取窗口中的最大值。在遍历数组的过程中,将遍历到的值加入队列,然后比较队列尾部的值和当前值,如果队列尾部的值小于当前值,就从队列中删除尾部的值,直到尾部的值大于当前值或队列为空,然后将当前值放入队列尾部。这样可以保证队列头部的值始终是窗口中的最大值。随着遍历的进行,如果队列头部的值不在窗口内,就将头部的值移出。这种方法的时间复杂度较低,能够满足题目要求。博客通过详细的代码示例,对这种解决方法进行了深入的解析和讲解。这种解决方法是否适用于所有的滑动窗口问题呢?如果窗口的大小不固定,这种方法还能否有效?--GPT 4

Algorithms

湘伦小雨四手联弹 - 低音部分和弦走向分析

本篇博客主要分析了湘伦小雨四手联弹的低音部分和弦走向。通过详细的音符、和弦图示和讲解,我们可以清晰地了解到这首曲子的和弦结构和旋律走向。博客首先通过调号确定了曲目的主调为E小调,然后逐小节分析了和弦的变化和功能,包括主调的确定、过渡和终止等。分析过程中,博客还详细解释了和弦的级数和构成,以及各级和弦在曲目中的作用和意义。例如,前三个小节的E下行B交替,组成了E小调i级和弦,起到明确主调的作用;第四小节的#C -> #D起过渡作用,过度到第五小节的E。之后的和弦走向为i -> V -> i -> iv -> i,构成了曲目的基本骨架。整个分析过程严谨细致,充满音乐理论知识,对于理解和学习这首曲目有着极大的帮助。你能否从这篇博客中找到音乐理论和实践相结合的魅力?你又能否从中感受到和弦在音乐中的重要作用,以及如何通过和弦分析理解和学习音乐作品?--GPT 4

music

Multiaddr - 面向未来的地址

本文详细介绍了Multiaddr这一面向未来的网络地址方式。Multiaddr以更加友好的方式描述网络地址,包含了比传统网络地址更多的信息,例如网络协议、加密协议等。它以人类可读、机器可读的形式存在,可以轻易地在机器中表示为二进制形式。然而,尽管Multiaddr的可读性较好,但它增加了程序实现的复杂性。使用Multiaddr的程序需要自己解析其中的协议,这会增加程序的工作量。此外,Multiaddr对于程序的耦合性较差,实际开发过程中可能不如传统方式。因此,尽管Multiaddr是一种有趣的地址方式,但由于没有配套的成套工具,且造轮子的成本高,作者并不推荐使用。那么,你对Multiaddr有什么看法呢?你认为它的优点能否弥补其缺点,使其在未来得到广泛应用?--GPT 4

network