分类
Go

造一个 Go 语言错误库的轮子

go get code.gopub.tech/errors

Show me the code:

import (
    "testing"

    "code.gopub.tech/errors"
)

func TestPrint(t *testing.T) {
    err1 := errors.New("err1")
    err2 := errors.New("err2")
    err := errors.Errorf("prefix: %w, %w", err1, err2)
    fmt.Printf("%+v\n", err)
}
/* Output 输出:
prefix: err1, err2
(1) attached stack trace
 │ -- stack trace:
 │ example_test.TestPrint
 │ 	/path/to/new_errors_test.go:65
 │ [...repeated from below...]
Next: (2) prefix: err1, err2
Next: (3) err1
 │ err2
 ├─ Wraps: (4) attached stack trace
 │  │ -- stack trace:
 │  │ example_test.TestPrint
 │  │ 	/path/to/new_errors_test.go:63
 │  │ [...repeated from below...]
 │ Next: (5) err1
 └─ Wraps: (6) attached stack trace
    │ -- stack trace:
    │ example_test.TestPrint
    │ 	/path/to/new_errors_test.go:64
    │ testing.tRunner
    │ 	/usr/local/go/src/testing/testing.go:1576
    │ runtime.goexit
    │ 	/usr/local/go/src/runtime/asm_amd64.s:1598
   Next: (7) err2
Error types: (1) *errors.withStack (2) *errors.withNewMessage (3) *errors.joinError (4) *errors.withStack (5) *errors.errorString (6) *errors.withStack (7) *errors.errorString

*/
分类
代码

将网易云音乐网页版歌词显示到 Mac 菜单栏

0. 需求来源

网易云音乐的 Mac 客户端,无法将播放记录同步到 Last.fm, 而且也不太想下载客户端。所以想听歌的时候一般都用网页版,还可以配合 Web Scrobbler 追踪播放记录。 (使用过程中还顺便提交了 两个 PR. )

但是网页版歌词无法在菜单栏上显示,只能在当前网页显示。所以搜了一圈找到一个 SwiftBar 开源工具,可以自定义菜单栏。 (后来发现也可以在播放条右边找到画中画歌词按钮,可以开启一个画中画功能。搜了一下原理大概是不断将歌词绘制到一个 cavans 上,然后新建一个 video 元素,可以不 append 到页面中,直接通过 requestPictureInPicture 打开画中画。此为后话,有兴趣的可以深入了解。)

下面记录一下具体步骤。

分类
代码

AskChatGPT 油猴插件

网站恢复未备份,请移步:

https://mp.weixin.qq.com/s/DKzCQA7_HcyqVhESBWjj_A

分类
代码

一文搞懂语言标签(zh-CN 与 zh-Hans 是什么关系)

先给出标题中问题的答案:zh-CN=中文(中国),zh-Hans=简体中文。

  • 当要强调 在中国使用的 中文时,用 zh-CN, 区别于 zh-SG=中文(新加坡) / zh-HK =中文(香港)/ zh-MO =中文(澳门)/ zh-TW=中文(中国台湾)。
  • 当只需要区别简繁体时,可以仅用 zh-Hans 与 zh-Hant 表示。Hans 是汉语简体的含义:汉的拼音 Han + 简体(Simplified),Hant 中的 t 则是繁体(Traditional)的意思。
  • 当然,需要更进一步区别时,也可以同时附加 书写格式+地区 表示:zh-Hans-CN=简体中文(中国),zh-Hans-SG=简体中文(新加坡)。

这里我们已经引入了语言、书写格式、地区的区别。实际上,一种语言可以用 BCP 47 (RFC 5646) 规范中的 语言标签 来表示,通常语言标签形式是:language-extlang-script-region-variant-extension-privateuse,用这个格式甚至可以表示出「用拼音拼写的普通话(zh-cmn-Latn-pinyin)」、「简体字书写的文言文(zh-lzh-Hans)」、「在香港地区使用的繁体字书写的粤语(zh-yue-Hant-HK)」等各种情况。下面我们来简要看下语言标签及各个 子标签 的含义。

分类
Go

Go 程序如何做国际化

本文介绍了在 Go 语言编程中,使用 github.com/youthlin/t 软件包实现国际化的方式,其兼容 GNU gettext 工具链。最简示例如下所示:

package main
​
import (
    "fmt"
    "github.com/youthlin/t"
)
​
func main() {
    t.Load("./lang")
    fmt.Println(t.T("Hello, World"))
}
分类
代码

任意网站注入自定义 CSS 样式

需求来源

有些网站的广告元素很容易找,想直接把它 display:none 掉,或者把某些带背景图像的元素隐藏或更换背景图片。
然后找到了一个 Chrome 插件 Stylus 也能用但感觉没有必要单独装一个插件,还很复杂的样子。
想着油猴脚本应该有很多类似的,结果搜了一下都是针对特定网站的(比如百度/B站/知乎美化),于是就自己写了这个油猴插件。

效果图

分类
Go

Go Stream 仿照 Java8 的流造的轮子

Java 8 的 Stream 接口处理集合数据转换特别好用,之前写过《自己实现 Java8 的 Stream 流(串行版)》,现在工作语言主要使用 Go 了,所以用 Go 也实现了一遍,可以使用 go get github.com/youthlin/stream 引入。先看个使用示例吧:

// example_test.go

func ExampleStream_Filter() {
	stream.Of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9).
		Filter(func(e types.T) bool {
			// 没有范型只能通过 e.(int) 的形式强制转换
			return e.(int)%3 == 0
		}).
		ForEach(func(e types.T) {
			fmt.Println(e)
		})
	// Output:
	// 0
	// 3
	// 6
	// 9
}
func ExampleStream_Map() {
	stream.IntRange(0, 5).
		Map(func(t types.T) types.R {
			return fmt.Sprintf("<%d>", t)
		}).
		ForEach(func(t types.T) {
			fmt.Printf("%v", t)
		})
	// Output:
	// <0><1><2><3><4>
}
分类
Go

Go 中的 Options 模式

Functional Options Pattern(函数式选项模式)可用于传递不同选项配置到方法中,而且每次新增选项时,可以不改变接口保持兼容。还可以用来实现类似 Java/C++ 中方法重写的功能~

分类
Java

CompletableFuture

Java 8 的 CompletableFuture

创建

  • 创建一个已完成的
  • 类似 guava 的 SettableFuture, 先创建一个空的,再在合适的地方完成它
  • 异步计算或运行
分类
代码 安卓

Dora.js – Android 上的内容型编程平台,学习 JavaScript 开发!

最近刷酷安发现一个很酷的软件:Dora.js

官方介绍

Dora.js 是 Android 上的一个内容型编程平台,提供了强大且简单的一套扩展框架,让你可以轻松写出诸如提供视频、图片、漫画、音乐、图书、文章等的扩展,打造属于自己的内容中心。

简单来说,你可以把它当做一个可以安装许多扩展的 App。

如果你想学习 JavaScript,Dora.js 可以给你提供非常大的帮助。

Dora.js 使用 V8 作为脚本引擎,提供完善的 Node.js 运行时:

  • 支持 npm 依赖包
  • 虚拟文件路径让文件访问更轻松、更安全

Dora.js 包含一个强大的代码编辑器:

  • 支持代码高亮,多种字体、配色可选
  • 支持智能补全、签名提示
  • 提供 VSCode 插件
  • 提供多种快捷工具使手机上编程成为一件容易事
  • 取经自 “纯纯写作” 的优秀编辑器体验

注意:Dora.js 目前还处于不稳定阶段,很多能力还很简陋,你在使用过程中还有几大概率出现闪退现象。

下载地址:https://www.coolapk.com/apk/com.linroid.dora