假如设计一个mc的mod……(从计算机学生的角度考虑大致的流程) 和朋友讨论自己小服务器的一些规划,因为我有想要在cocricot外增加miniaturia并且同时使用两者的打算,想起了之前也想自行添加更多的玻璃方块,聊天话题就转到了mod的设计上。 大体上,这个mod该怎么设计呢? 我的想法,大概还是基于「如果已有的mod可以实现,尽量不添加」吧,一个原因是因为添加mod对于一个mc服务器来说大概是不可逆的——至少不能保证删掉mod后服务器还能正常运行。 所以 2023-09-10 水 #编程理念
我觉得我还是不喜欢AOP和注解这套写法 写了差不多一个月的Quarkus,对这套写法也差不多熟悉了。不过我还是想说很不喜欢这种写法。当然Quarkus大约比Spring还是好点,没有字符串硬写的切面了,最多也只是@Inject这样的依赖注入语法。 一般来说,依赖注入的实现不外乎两种思路,通过constructor传参,或者在类型里面添加setter后在外部调用。注解的实现机制,Spring的autowire也好,Quarkus的ArC也 2023-07-12 实习回顾 #编程理念 #元编程
小论工厂模式(们) 这是「从函数式角度看设计模式」的第四篇。目的是从和OOP不同的角度重新审视设计模式。 今天讨论的是工厂模式。但是其实并没有一个叫工厂模式的设计模式,一般来说,有抽象工厂和工厂方法这两种模式。 抽象工厂「能创建一系列相关的对象, 而无需指定其具体类」。 工厂方法「在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型」。 两种模式都属于「创建型模式」,换句话说就是和程序里面值的创建有关。 2023-06-25 程序设计杂谈 #设计模式 #函数式编程
回顾Unity的Coroutine 虽然现在的实习已经不再使用Unity了,但是回过头看,至少在异步编程这方面,还是有了不少体会,也更好的理解了Unity的Coroutine的设计。 之前提到了使用UnityWebRequest来跟网关进行通信,因为是个典型的异步场景所以使用了Coroutine。在C#里面,一般都是用Task<T>来表达异步的语义,这一点和JavaScript类似,而且也可以很方便的用上async/aw 2023-05-25 实习回顾 #异步编程 #Unity #协程
关于代码行数的一些想法 在做项目的时候和同学就「单文件的最大行数」产生了分歧。同学的说法是,「代码长就看不下去,因为干净架构需要简单、行数短的代码」。 但是在这个项目,或者说专门针对当时的情况,有这么几个理由吧: 这段代码是Flutter的,众所周知,Flutter是以嵌套括号和冗长的render函数而闻名的。 代码使用了MVVM的模式,因为是试验性的代码,所以就先把各种class和enum写在了同一个文件里,这样的话 2023-04-27 其他 #编程理念
Monad - A functional design pattern 今年学校课程里有一门课,大概要求选一门技术来介绍一下。考虑到我的编程偏好,我觉得介绍一下函数式编程的概念比一些很具体的厂商产品更有趣吧。所以就选了Monad。 想想也许适合水一篇文章,毕竟一般来说,接触函数式编程的人最终都要写一篇自己的Monad介绍文章(雾 这篇文章不是用来手把手教怎么入门Monad的,毕竟课程要求也不是这个,所以就是简单的「引子 - 正式介绍 - 用处和优势 - 案例 - 小结 2023-02-20 笔记 #函数式编程 #PLT
高阶函数和模版方法模式 这是「从函数式角度看设计模式」的第三篇。目的是从和OOP不同的角度重新审视设计模式。 实际上感觉都没什么好写的? 这是「模版方法模式」的定义和实现方法: 模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 模板方法模式建议将算法分解为一系列步骤, 然后将这些步骤改写为方法, 最后在 “模板方法” 中依次调用这些方法。 步骤可以 2022-12-04 程序设计杂谈 #设计模式 #函数式编程
使用std::move和std::optional来更清晰地处理错误 在这个实习里也用到了基于C++的私有框架。这个框架虽说是基于C++17的,但是错误处理用的是错误码和参数位置返回出去的做法。可能和框架需要接入gRPC有关。 自己这边需要用框架来做一些简易的操作,实现一个自己的proxy服务器,也就想到了用std::optional来重新处理一下这个错误流程的想法了。 大概的思路是,因为自己写的方法会被框架托管,所以自己实现的每个方法都返回一个optional的值 2022-11-06 实习回顾 #C++
模式匹配,观察者模式和GADT 这是「从函数式角度看设计模式」的第二篇。目的是从和OOP不同的角度重新审视设计模式。 这里讨论的是观察者模式,和它在函数式语言里的等价品,模式匹配(Pattern Matching)。最后也会讨论到GADT(广义代数数据类型)。 Java的模式匹配 考虑一个可以容纳各种数据类型的列表,这里用的是Java语言。 123456public record Empty() {}var 2022-11-02 程序设计杂谈 #设计模式 #函数式编程 #PLT
UnityWebRequest的一个小坑 最近在实习,主要的内容是Unity(WebGL),需求是能够从服务器(Proxy)获取数据后展示出来,应该是个蛮简单的任务吧。 Unity提供了一个叫UnityWebRequest的工具类,封装了常用的网络方法。按理来说使用Get方法就能够很容易得到结果了,但是官网没有怎么await长时间请求的案例,网上抄来的其他代码也不管用。 后来发现问题出在不应该用下载过程中的UnityWebRequest. 2022-10-21 实习回顾 #Unity #协程