close
分类
生活

TCL/雷鸟电视安装当贝桌面等第三方软件

介绍两种 TCL / 雷鸟电视安装第三方软件的方法。一种是通过自带应用商店里面的“应用管家”,配合小程序推送 apk 直接安装,这样基本的第三方软件都可以安装。

另一种是通过 adb 命令,先禁用系统服务,再安装被系统禁止的第三方软件,比如当贝桌面。

分类
安卓

一加 ACE 2 Pro 从 Root 到回锁记录

起因

可能在很久以前,在系统设置里设过 未成年模式 的家长控制密码;前几天刚升级推送的 15.0.0.850 系统,闲来无事又进入到设置里逛,结果不小心开启了未成年模式。

正当我感觉没啥意思(因为未成年模式会限制大部分应用不可用,可用的软件也有使用时间限制),想要退出未成年模式时,我发现它有个家长控制密码。而这个密码,我已经没有印象了……

试遍了能想到的所有 6 位数字组合也没试出来;还有个找回密码的问答,问题是我的其中一位老师的名字,也从小学老师试到了大学老师都没找回密码,只好问问系统客服了。

客服说,只能进恢复模式清除数据,格式化手机才可以退出未成年模式了!!!!!!

这破系统也太蠢了吧!?!为什么开启未成年模式时不验证密码?一旦开启,又忘记密码,就只能格式化所有数据了!!

好在相册有自动备份到 Nas, 微信聊天记录趁现在还能打开微信,赶紧立马备份到电脑版上去(好在使用时间限制到了后,聊天记录备份的网络传输还没断)

想了下,反正要清除数据,要不再试下把手机 Root 了吧, 赶紧打开很久以前 Star 的 KernelSU 项目,看看现在 Root 的流程是怎样的。

分类
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++ 中方法重写的功能~