分类 Uni 相关 下的文章

2024.8.9 开发小记

今天打开LagrangeCoreApi的代码,花了点时间看懂之前的代码,然后进行了小修小补。结果最后发现昨晚能运行的功能今天坏掉了。一路Debug无果,最后发现git设置还有问题。干脆删掉了代码,从昨天的版本再来。
闹麻了..

LagrangeCoreApi 开发小记

public static class ControllerBaseExtension
{
    public static IActionResult Success(this ControllerBase controller) =>
        new ApiResponse<int>(200);

    public static IActionResult Success(this ControllerBase controller, string msg) =>
        new ApiResponse<int>(200, msg);

    public static IActionResult Success<T>(this ControllerBase controller, T data) =>
        new ApiResponse<T>(200, "", data);

    public static IActionResult Success<T>(
        this ControllerBase controller,
        string msg,
        T? data
    ) => new ApiResponse<T>(200, msg, data);

    public static IActionResult Fail(this ControllerBase controller) =>
        new ApiResponse<int>(500);

    public static IActionResult Fail(this ControllerBase controller, string msg) =>
        new ApiResponse<int>(500, msg);
}

之前写这段代码时遇到一个问题,如果想要使用一个参数,发送string类型的data,但msg留空。在全用范型方法的情况下是做不到的。当时把这个问题暂时搁置了。但后续使用方法时,由于忘记填写范型类型导致报错,让我想出了如上的方法。如果有范型则最后一个参数为data。否则没有data数据。后续可能会用object和null代替。

第二,Lagrange.Core现在有官方的Api地址,可以不用自己设置sign服务了
https://sign.lagrangecore.org/api/sign
Thanks for 外国热心网友 for Provision of Azure Servlet
Built-in SignServer is now provided, Enjoy!

第三,VS的git真的难用。点了半天后上网搜了git命令直接解决了。建议只把VS的git作为一个可视化工具。

Hackathon 活动后记

上周六到周日(2024.5.25-2024.5.26) Uni和木犀联合举办了一年一度的HackDay活动。
理论上,这个活动是武汉高校联盟都能来的,而且原计划和冰岩联合,在华科举办,但因为未知原因,在街道口附近自习室举办。
先说结论,Hackathon绝对是一次特别的经历。
首先是从未有过的团队协作的经验,这方面主要有三点,你必须不断的帮小组成员解决困难和让小组成员解决你的困难,必须多次讨论确定最终作品的结果(这其中有时间和技术的取舍,也包括对剩余san值的取舍),必须不断面对git pull失败和merge冲突相关问题。实际上,想法和代码迭代速度之快,导致几乎每一次提交代码都需要处理冲突问题,平常很难有这样的机会。
与小组成员的讨论变得相当关键,在理智近乎消失的同时,必须尽早,尽量详细的确定未来作品的方向。这个过程实际上是一个Social的过程。实际上,我感觉这次活动中起到协调的作用,找到了整个项目在设计的创意和技术的能力的中间点,(同时劝住了执着的设计和鼓舞了想摆的技术,我好NB)避免大部分无效沟通。
技术是比赛中的限制,但不会是瓶颈。简单的技术与有趣的创意能搭配出足够出色的结果。实际上,写代码的四个人中,有三个人没有事先学过自己需要的技术栈(指pygame)(还有一个一直想在代码C的设计,只可惜能力不够(并无谴责意思,只是表达事实))现在想来,我写的很多代码最终也被替换,只有制谱器和一些代码的算法被保留下来。
足够特殊的经历,推荐每个产品/设计/技术亲自参加一次。
一个必须要说的事是,通宵写代码真的有点难,建议中途小睡一觉,或者可以和小组成员接力一下。开空调有点冷,记得带好御寒的衣服或毯子。

关于acme.sh 手动自签名证书的一个小坑

服务器使用acme.sh做自签名证书,nginx的配置是将证书放在某个子文件夹下,为了方便,使用了符号链接。链接到我的个人主目录。
上周六发现服务器证书过期了,于是进行更新,更了两次没更好,检查nginx下的文件内容也可以正常读取,以为是什么时间问题,没管。
周一突然又想起来,测试,发现还是没有证书。开始进一步的检查。
首先确定了符号链接,没问题,尝试重新配置,发现账号密码在电脑里,遂作罢。
突然在想,会不会是权限问题,检查符号链接,好吧,是777。
突然又想到原文件的权限问题,检查,好家伙key文件是600,其他都是666。
怪不得之前在浏览器上还能看见fullchain文件,这还能不一致的。
更新权限,sudo nginx -s reload,还是不行。
sudo service nginx force-reload 解决问题

C#命名规范 for Uni

C#命名规范

该文是作者对微软文档的见解,更多详细信息请参照原文档

标识符 (变量)

· 标识符必须以字母或下划线(_)开头

· 标识符可以包含 Unicode 字母字符、十进制数字字符、Unicode 连接字符、Unicode 组合字符或 Unicode 格式字符。

· 你可以在关键字前加'@',声明一个与关键字相同的变量,例如:@if 是变量 if。我个人不太建议这么做。

命名约定

在介绍命名约定之前,我将先介绍Pascal Case 和 Camel Case

Pascle Case

形如 DataChecker, ValueCoordinate 之类的命名。将单词间空格删去,所有首字母大写,即是Pascle Case

Camel Case

Camel Case,又称驼峰法,与Pascal Case及其类似,只是第一个字母不在大写,例如dataChecker, valueCoordinate

True 命名约定

public interface IMyInterface               //接口使用I作为开头,其余部分使用Pascle命名法
{
    public void MyMethod();                 //方法使用Pascle命名法
}

public class MyAttribute : Attribute { }    //特性使用Attribute结尾,其余部分使用Pascle命名法

public class MyClass : IMyInterface
{
    private readonly int _myVal = 256;      //私有变量以_开头,其余部分使用Camel命名法

    public void MyMethod()
    {
        const int MyVal = 1024;             //常量使用Pascle命名法
        int localVar = MyVal+_myVal;        //局部变量使用Camel命名法
    }

    public int AnotherMethod(int firstParameter) => firstParameter+_myVal;    //方法参数使用Camel命名法
}

在充分理解以上约定的基础上,清晰胜于简洁