BLCL的博客小馆

归档 · 2020📢📢📢 阿里云双十一,2核2G3M的服务器,99元一年,新老用户续费同享!!

首页

关于

归档

loading..

使用 OpenResty 无痛优化图片体积(AVIF / WebP)

图片体积优化计划两年半之前,我第一次了解到 WebP 可以有效减少图片体积的时候,有一瞬间产生了“把网站中所有资源替换成 WebP”的冲动,但当我打开 caniuse 的时候,发现 Safari 迟迟不支持,况且网站中涉及到图片的地方实在是太多,修改代码不太现实。我当时搜了一些资料,是关于让 Nginx 针对浏览器提供的 Accept 头来分别提供不同格式的文件。这个方法确实有,然而我实在是太懒了,以至于写一段命令将所有图片转个格式都不想写,并且想到以后所有图片都要提供两个版本,实在是太麻烦了!于是这个计划就被搁置了。后来我更多的接触了 OpenResty,这是一个集成了 Lua 的 Nginx,可以利用 Lua 脚本来方便的做一些扩展。我还摸索出了如何利用 Lua FFI 调用 OpenCC API 无..

更多
loading..
Generative artistryFlutter教程

Flutter 绘制图形 Circle Packing

本文讲解使用 Flutter 实现 Generative Artistry 教程里面的第六个图形 Circle Packing(圆形填充)前言懒癌发作,好久没写博客了…本文讲解使用 Flutter 实现 Generative Artistry 教程里面的第六个图形 Circle Packing(圆形填充)。实现这个图形的思路大致是:创建一个圆。判断这个圆是否与其他圆发生碰撞。没有则不断增大圆的半径,再次进行碰撞检测,直至最大半径。绘制更多的圆形,重复以上。初始化照旧创建一个 CirclePacking 控件以及 CirclePackingPainter。12345678910111213141516class CirclePacking extends StatelessWidget { @overri..

更多

golang switch的用法

最近一直在写go, switch说实话用的不算多。但是今天用了下发现go的switch可真不太一样啊。 无需break 该代码只会匹配到 case 0 ,go会帮你隐式break掉。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 func main() { i := 0 switch i { case 0: fmt.Println("0000000000") fmt.Println("0") case 1: fmt.Println("1111111111") fmt.Println("1") c..

更多

golang select的用法

golang的select与channel配合使用。它用于等待一个或者多个channel的输出。本篇我们重点讲下select的用法。 golang中的select语句格式如下: 1 2 3 4 5 6 7 8 select { case <-ch1: // 如果从 ch1 信道成功接收数据,则执行该分支代码 case ch2 <- 1: // 如果成功向 ch2 信道成功发送数据,则执行该分支代码 default: // 如果上面都没有成功,则进入 default 分支处理流程 } 可以看到select的语法结构有点类似于switch,但又有些不同。 select里的case后面并不带判断条件,而是一个信道的..

更多
loading..
Python乱七八糟记账Beancountfava

开始使用 Beancount

使用 Beancount 记账已经有将近两个月了,简单写一写我都做了什么。 注:本文只是一个流水账,并不是一个 Beancount 使用教程,如果想详细了解 Beancount 的话,可以参考下面提到的那些文章。 一些背景 Beancount 是什么 如上文所说,Beancount 是一个记账工具,更准确些来讲,是一个复式记账工具。但直到我写这篇文章的时候才发现官方将其定义为“一种复式记账计算机语言”。 简单来讲,它可以让你以纯文本方式记账,并通过一种类 SQL 的语言来对交易进行查询。记账文件还可以配合 Git 进行版本控制。 此外,Beancount 官方提供了一个名叫 fava 的图形化管理工具,它基于 Web,能够提供比原生页面更加丰富的内容,一般记账所需要的信息一目了然。想体验的同学可以在..

更多