3. swift & kotlin 的 Optional

swift

swift 中的 Optional 定义是这样的

let str : String? = nil

拆开就是这样拆开

print(str!)

同时语言级别提供几个语法糖,比如可以这样

if let myStr = str {
    // 这里就不用解开了,相当于 let 给你解开了
    print(myStr.count)
}

实际上的实现呢是通过系统官方的一个 Optional 类来实现的,加上 ? 号只是方便定义而已,比如一开始的代码也可以这样写

let str : Optional<String> = "112"

有没有发现这个和 Java 的 Optional 巨相识

后面的操作其实也就是隐式调用这个类的方法而已,不展开了,具体自己看源码。

kotlin

回到 kotlin 这里,kotlin 其实也有类似的定义,也不能说类似,几乎差不多,但是更强大

定义:

val str: String? = "11"
if (str != null){
    // 注意这里是不需要像swift那么麻烦的,需要赋值,这里kt会自动推断,不需要自己拆包
    print(str.lenght)
}

拆包:

// 嗯,kt 的拆包是两个叹号,比 swift 多一个
println(str!!.length)

高级组合拳:
kotlin 可以使用各种作用域函数进行快速的操作,这点比 swift 要强很多

根据 kotlin 的源码实现,其实 swift 其实也是可以实现这样的方法的,但是官方就是没有,我觉得很诡异

// 通过这个方式,就能直接把一个可选的值变成非空的it,然后进行操作,这边要比 swfit 强
str?.let{ println(it) }

而且这样的快速操作方法,kotlin 有五个,分别是 let,run,with,applyalso

takeIftakeUnless 不属于这个类别

typescript作为前端的希望,不好意思,它没有这个东西😀

继续阅读“3. swift & kotlin 的 Optional”

本地搭建代理代理 v2ray 协议猜想

用途

因为每个人配置v2ray 其实比较麻烦,如果每个人直接使用 proxy-switchyomega 这个插件就会简单很多。目标是实现所有人简单的上网。

部署条件

  1. 需要有公网IP
  2. 内网需要有一台机器跑 v2ray 和 nginx

拓扑图

描述

  1. 用户通过 proxy-switchyomega 设置 https 代理
  2. 本地由 caddy 或者 nginx接受到代理,直接代理到本地的 v2ray 上的 http 协议

一定是要 https 代理,这样才能保护数据和账号密码
本地代理可以增加路径认证,因为https是抓不到路径的,所以路径上加账号密码即可

Gitlab Ci 的 CI_DEBUG_TRACE

这个东西的作用是在 GitlabCi 的日志输出界面输出更多用于方便调试的日志。

官方建议是写在 .gitlab.yml 上, 如下

variable:
    CI_DEBUG_TRACE: true

这样就会导致一个问题,每次当你想要调试的时候,你都要提交一个代码把这个东西打开,这样有点蛋疼。
后面我发现https://gitlab.com/{namespace}/{project}/-/settings/ci_cd 这个地方的也是可以设置Variable的。实验了以下,这个地方也是有效的,只要在这里

填上这个 CI_DEBUG_TRACE就能直接显示所有调试内容了,这样做就不需要每次都提交代码才能显示调试的内容。

这货有个小缺点,就是所有的 ci/cd 都会生效

使用 Docker Swarm 搭建 WordPress

起因

我曾经把 wordpress 搭建在 Vultr 上,但是因为众所周知的原因,这个地方访问越来越慢。再后来我选择了新浪云,新浪云的确够便宜,也很不错,但是要备案,还有评论功能估计要阉割,想想还是算了,找个香港的主机搭建 wordpress 即可。

购买主机

我这里选择的是阿里云的轻量应用服务器,这个主机的好处就是便宜,够用。
比如我选择的香港的主机,一个月只需要 24 块钱,一核心一G内存,网速为 30Mbps,磁盘空间 25GB,月流量 1TB。

配置如下图

初始化 docker 环境

虽然上面有一件安装wordpress的功能,但是我不推荐,因为配置都太老了

最终我选择的是 ubuntu18.04 系统,直接用下面的命令即可完成安装 docker 并且初始化 docker swarm

curl -o- -L https://gist.githubusercontent.com/hangox/e679464f35dc2a78920e6249a21d7958/raw/c5541e38979dca1e3e1e9704ad171ed2f0556fa1/ubunut-install-docker.sh | bash

继续阅读“使用 Docker Swarm 搭建 WordPress”

组一台 i9-9900K 黑苹果的经验与总结

因为我的技术栈扩展的原因,导致我原本的 i5-7500 的台式机越来越不够用,决定攒一台速度比较快的黑苹果。

这篇文章主要是说了我在组这台电脑上的硬件和软件上的经验,希望可以帮到大家,毕竟也是很多前辈的文章才让我知道怎么做的。

放个图先

继续阅读“组一台 i9-9900K 黑苹果的经验与总结”

Android Studio 4.1 Canary 版本发布

主要开始支持 Jetpack Compose

支持 Jetpack Compose

Jetpack Compose工具包提供了一种构建应用程序UI的现代化方法。该工具包还带来了Kotlin的所有优势,例如帮助您编写与Java完全可互操作的简洁且惯用的代码。

为了获得使用Jetpack Compose进行开发的最佳体验,您应该使用最新版本的Android Studio 4.1。这是因为当您使用Android Studio通过Jetpack Compose开发应用程序时,您可以受益于智能编辑器功能,例如 New Project 模板和立即预览 Compose UI 的功能。

要了解更多信息并开始使用,请转到Jetpack Compose概述

断言在Debug版本的 App 中可以开启

现在,在部署应用程序的调试版本时,将启用Java代码中的断言。由于Android运行时不支持在运行时启用断言(即,将等效的-ea-enableassertions标志传递给Java VM),因此应用程序中的断言以前没有任何作用。

现在,当您使用Android Gradle插件4.1.0-alpha01及更高版本构建和部署应用程序的调试版本时,内置编译器(D8)会重写代码以在编译时启用断言,因此您始终使断言检查处于活动状态。

注意:此功能目前仅支持以Java编程语言编写的应用程序。对Kotlin的支持即将推出。

4.1预览版的已知问题

本部分介绍了Android Studio 4.1 Preview中的当前已知问题。

CPU Profiler中的超时错误

当您选择示例Java方法跟踪Java方法 配置时,您可能会在Android Studio CPU Profiler中遇到“无法停止录制”错误。这些通常是超时错误,尤其是在idea.log文件中看到以下错误消息时:

Wait for ART trace file timed out

与采样方法相比,超时错误对跟踪方法的影响更大,而对较短记录的影响则更长。作为临时的解决方法,尝试较短的记录以查看错误是否消失可能会有所帮助。

如果您在Profiler中遇到超时问题,请提交一个错误 ,其中包括设备的型号/型号以及来自idea.loglogcat的所有相关条目 。

IDE中的Git版本控制错误

Android Studio 4.1 Canary 1 的 Git 认证身份功能不能工作,任何需要认证的操作都不能进行,比如 push/pull,并将在以后的版本中修复。

解决方法是从命令行使用Git。

参考

原文在这里