diesel Diesel 动态添加 filter 使用 into_boxed e.g. let mut qs = files_dsl::files .offset(offset) .limit(limit) .order(ordering.order()) .select(File::as_select()).into_boxed(); if and_tags.len() > 0 { qs = qs.filter(files:
diesel Diesel Postgres array string 筛选 实现 array string (e.g. tags) 的方案如下: * 或逻辑,即只要有一个 tag 符合即可,使用:overlaps_with,如:files::tags.overlaps_with(tags.clone()) * 与逻辑,即需要数据拥有全部的 tags, 使用: contains * 非逻辑,即排除某些 tag,使用 overlaps_with(tags.
rust Actix-web + diesel 实现 MySQL 数据库连接池 首先,需要给 diesel 添加 c2d2 feature: diesel = { version = "2.1.0", features = ["mysql", "r2d2"] } 然后创建 AppState 结构体: use diesel::{MysqlConnection, r2d2::{Pool, ConnectionManager}}; #[derive(Clone)] pub struct AppState { pub pool: Pool
rust diesel cannot infer type of the type parameter `U` declared on the method Use load:: to specify the type. fn count_packages() -> i64 { let conn = &mut establish_connection("mysql://root:cpchain@127.0.0.1:3306/cpchain"); let found = packages.filter(name.eq("name")).filter(
golang Golang 字符串是否存在于数组中 基本原理,使用 sort 库,先对数组排序,再二分搜索进行确认。 func assert(actual, expect bool, t *testing.T) { if actual != expect { t.Fatalf("Expect %v, but got %v", expect, actual) } } func TestSearchInArray(t *testing.T) { assert(In(
技术 国内 Ubuntu 20.04 安装kubeadm 命令如下: sudo apt-get update && apt-get install -y apt-transport-https ca-certificates curl # 更换镜像 curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://mirrors.aliyun.com/kubernetes/apt/
javascript Javascript 过滤数组 使用 filter 可从数组中快速找出符合条件的元素组成新元素。示例如下: [1,2,3].filter(i => i > 2) > [3] 其中, i => i>2 为简化的 Lambda 表达式,等价于: i => { return i > 2 }
golang Golang SHA256 及将哈希值转化为字符串 Golang 做 SHA256 哈希,以及将哈希值转化为字符串,如下: import ( "crypto/sha256" "fmt" "testing" ) func TestSHA256(t *testing.T) { b := sha256.Sum256([]byte("Hello world")) // 转化为字符串 s := fmt.Sprintf("%x", b) fmt.Println(s) }
terraform 在 ubuntu 上安装 Terraform 在 ubuntu 上安装 Terrform,执行以下命令: curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - sudo apt-add-repository "deb [arch=$(dpkg --print-architecture)] https://apt.releases.hashicorp.com $(lsb_release -cs) main" sudo
Docker 查看及清理 docker 容器日志 docker 容器日志太大,导致磁盘占用过高,需定时清理(也可提前限制容器日志大小)。一般情况下,容器日志位于 /var/lib/docker/containers//-json.log。 可编写脚本如下 vim check-docker-logs: #!/bin/sh echo "======== start clean========" logs=$(find /var/lib/docker/containers/ -name *-json.log) for log in
golang Golang Hex 字符串转 big.Int 如下,先创建一个 big.Int,再设置其值为16进制的字符串: package main import ( "fmt" "math/big" ) func main() { s := "a" i := new(big.Int) i.SetString(s, 16) fmt.Println(i) // 10 } 请注意,十六进制字符串不要以 0x 开头。
spring-boot Spring Boot 生成图片验证码 基本原理就是用Java画张指定大小的图片,在图片上随机摆上若干个数字或字母,数字或字母要有一定的倾斜和位移,要变一下字体和颜色,再画几条干扰线,然后就可以返回给客户端了。 创建文件 CaptchaUtil.java,代码如下: // Write your package import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import
MySQL MySQL查看表的数量 SQL 语句如下,指定好表名即可: SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = '' GROUP BY table_schema;
openebs OpenEBS Pod 无法挂载 volume OpenEBS 突然出现 Pod 无法挂载的情况,检查 ctrl 和所有 rep 的日志,出现:Registeration Failed , UUID is nil 等错误。 排查后发现,是因为 jiva 的镜像版本不一致。 虽然 ctrl 和 rep 指定的镜像都是 openebs/jiva:ci,但这个镜像是会升级的。在官方镜像升级后,如果集群中 ctrl Pod
ubuntu Ubuntu 将用户加入 sudo 权限 添加sudo权限,假设用户名为 ubuntu sudo usermod -G sudo ubuntu 添加root权限 如果需要让此用户有root权限,执行命令: sudo chmod +w /etc/sudoers sudo vim /etc/sudoers 修改文件如下: # User privilege specification root ALL=(ALL) ALL ubuntu ALL=(ALL) ALL 保存退出,
ubuntu Ubuntu 磁盘扩容 查看磁盘信息 df -h 查看物理分区、逻辑卷信息 fdisk -l 查看组卷信息 sudo vgdisplay sudo lvdisplay sudo pvdisplay 扩展lvm卷 sudo lvextend --extents +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv 重新计算磁盘大小 sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 再次查看磁盘信息 sudo df -h
kubernetes Kubernetes 强制删除 Pod 添加参数 --grace-period=0 --force,示例如下: kubectl delete pod -n default alpine-test-85d77cc67b-c9m7l --grace-period=0 --force
Docker Docker login 命令行报错 在 ubuntu 上使用 sudo docker login -u -p 登录时,报错: WARNING! Using --password via the CLI is insecure. Use --password-stdin. Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot
kubernetes Kubernetes 中 Deployment 与 StatefulSet 的区别 Deployments 和 ReplicationControllers 表示“无状态”使用,且相对较轻量级一点。所谓的“状态”也就是数据持久化存储,一般情况下,二者的 Pod 在重启后,数据就丢失了。 StatefulSets 表示会进行存储状态,且使用 volumeClaimTemplates/claims 来申请存储空间,在重启后,数据也会保存。 所以,如果应用是有状态的,那么就部署成 StatefulSet;如果是无状态的,或者说,数据是交给后端系统(如数据库、申请的PV)来保存的,
fabric-java-sdk fabric-java-sdk中获取区块哈希 fabric-java-sdk 中没有 getBlockHash 这一方法,我们需要自己计算区块哈希,代码如下: String currentHash = Hex.encodeHexString(SDKUtils.calculateBlockHash(this.client, blockInfo.getBlockNumber(), blockInfo.getPreviousHash(), blockInfo.getDataHash()));
fabric-java-sdk fabric-java-sdk中blockInfo.getDataHash二进制转字符串 fabric-java-sdk中blockInfo.getDataHash二进制转字符串(byte[] 转 string),如下,使用 Hex.encodeHexString Hex.encodeHexString(blockInfo.getDataHash); Hex.encodeHexString(blockInfo.getPreviousHash);
spring-boot 在 spring-boot打包出来的 jar 包中中执行其它的main.class 需通过以下命令执行 java -cp your.jar -Dloader.main=your.package.Main org.springframework.boot.loader.PropertiesLauncher 如果直接执行 java -cp your.jar your.package.Main 会报错误: Error: Could not find or load main class ...
Java 如何比较Java两个Long对象相等 Long a = 30000L; Long b = 30000L; // 使用equals或者.longValue比较 a.equals(b); a.longValue() == b.longValue();