big-endian and little-endian
大端序(Big Endian):高字节存储在低地址,低字节存储在高地址。
小端序(Little Endian):低字节存储在低地址,高字节存储在高地址。
高字节: 一个多字节数据中,数值较大的字节。比如一个16位的整数,它的高字节代表了数值的较高位部分。
低字节: 一个多字节数据中,数值较小的字节。比如一个16位的整数,它的低字节代表了数值的较低位部分。
高地址: 内存中数值较大的地址。
低地址: 内存中数值较小的地址。
以整数 300 为例。
1234567891011// 00000001 00101100var num uint16 = 0x012C// 可以用以下两个字节表示 // 00101100 00000001var num1, num2 uint8 = 0x01, 0x2C// big-endian// 低地址-高字节:0x01 高地址-低字节:0x2C// little-endian// 低地址-低字节:0x2C 高地址-高字节:0x01
Example1234567891011121314// 以解析 [3]byte 到一个 uint3 ...
miband6-heart-rate
前一阵子看 vtuber 感觉旁边显式的心跳插件挺好玩的。不过当时没找到手环最近找到了,就看了下
设备:小米手环6 (MI Smart Band 6)
关于这个心跳数据,看到了两种方案获取,一种是抓应用的包,一种是抓蓝牙的包。
这里我用的是用蓝牙获取数据。
获取小米手环 AuthKey
对于支持广播的设备,可以直接跳到下面
向小米手环请求随机数
接收到随机数后,使用该手环的 Auth Key 对随机数进行 AES 对称加密。
将加密后的信息发回给手环。
验证通过。
Android首先通过 freemyband 页面上的指引,下载魔改后的小米运动APP,打开与手环配对,然后在 /sdcard/freemyband 路径下获取手环的 AuthKey.
Rooted IPhone配对好后用 ssh 连接上,在 /var/mobile/Containers/Data/Application/<MiFit_App_UUID>/Documents 下面找到 HMDBDeviceInfoDataBaseV2.sqlite 这样的数据库,然后从 device_info ...
range-over-func
BackgroundDiscussion-54245: standard iterator interface
关于 Iterator 的提案,包括为什么现在提议这个,以及希望提供的功能。
Discussion-56413: user-defined iteration using range over func values
关于 for range 和 Push/Pull 函数相关 (这个讨论该看)
Discussion-56010: redefining for loop variable semantics
Loop 变量作用域,1.22 已经包含了
Discussion-43557: function values as iteratorsDiscussion-43557-comment
这两个更早点。也是 Iterator 相关。
Issue-61897: Iter pakcage
关于 1.23 新增的 iter 包及其相关功能。
Simple Summary大多数语言提供了一种标准化方法来使用迭代器接口迭代存储在容器中的值。Go 提供了与 map、slice、 ...
Manually build the docker image
I had built nginx with nginx-rtmp-module about serval years ago.Chrome decided to deprecated flash in that year, than the usual video stream and player can’t work anymore. (I don’t sure rtsp/rtmp or whatever, its a long time.)And recently I want build a docker image for the live server.This is the foreword.
Build nginx with nginx-rtmp-module in serverThis isn’t hard, follow the documentation, step and step, and succeed.
Build image by tiangoloI search to rtmp in dockerhub, this one’s repo h ...
HTTP Live Streaming -- ZH
From: rfc8216
说起来我之前一直把 m3u8 当成直播流的,类似于 flv 这种。突然发现这其实是个文本协议。
翻译对照
english
chinese
unbounded streams
无界流
Memo
备忘录
HTTP Live Streaming
HTTP 实时流传输
Media Playlist
媒体播放列表
Master Playlist
主播放列表
Variant Streams
变体流
resolution
分辨率
Program Association Table (PAT)
节目关联表
Program Map Table (PMT)
程序映射表
Service Description Table (SDT)
节目业务描述表
Media Initialization Section
媒体初始化部分
Movie Box (moov)
影片盒
Media Data Box (mdat)
媒体数据盒
Movie Fragment Box (moof)
影片片段盒
File Type Bo ...
daily
先总结一下上个月做了什么:
用 Tauri 集成了 IT-Tools
用 Rust 写了一个 STM32 的 LED 程序
电流不够,IO 口无法驱动我的小马达,因此短时间内应该不会再搞这块了
然后是自媒体这块,任重而道远,继续努力吧。
接下来就是我的感慨了。
上个月高考,中考都有,我一个侄女参加高考,一个侄子参加中考。听到这些真的很恍惚,我的高考也是十年前的事了。感觉人生真的很快,好像什么都没做,十年就过去了。
上半年,我因为一些原因在家学习,为高考做准备;我的一个在苏州打工的同学还在我生日的带我去嫖娼,真的是莫名其妙。这个时间我应该在老家的街头晃荡,和一个我兄弟喜欢的女的一起做兼职(发传单),现在想想不太对劲,为什么我兄弟喜欢的女人要和我一起做兼职。下半年就是去学校报道了,在那里认识了初恋,还有愿意教拳的学长,我问过他,要练多久才能有成果,他说我这练习时间估计要十年,我觉得太慢了,就慢慢没有用心练了,一晃到现在也十年了,我还是不会拳。
无聊的时候看着窗外下雨,滴滴答答,哗啦啦,想了好多事,时间怎么这么快啊。而且我这个岁数就开始走马灯,老了躺在床上会很无聊吧。
singleflight|ants|gnet
Singleflightsingliflight: 提供重复函数调用抑制机制
前两天有人单飞,然后说什么 singlefly (我听叉了),我寻思双飞我知道,单飞是啥
看了一下,还挺不错的
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118// copy from singleflight.go// ...// call is an in-flight or completed singleflight.Do calltype call struct { wg sync.WaitGroup // These fields are writte ...
runc-usage
runc 算是 runtime caller 的 参考实现 ,不过用的确实很多。
当然了,这是个底层工具,设计时也没考虑到终端用户,所以以下内容仅作为参考(乐子)看。
下载一个喜欢的镜像,比如 busybox
用 docker 是因为方便,其他的也行
1docker pull busybox
创建 bundle
1234567891011mkdir ~/mybusyboxcd ~/mybusybox# create the rootfs directorymkdir rootfs# export busybox via Docker into the rootfs directorydocker export $(docker create busybox) | tar -C rootfs -xvf -# create `config.json` by runcrunc spec
运行该容器 run
run 命令会处理容器的创建,启动和删除。
12# At ~/mybusyboxrunc run [container-id] # like 123456789, w ...
文字障
昨天在想这个,我记得概念是讲不同的人有不同的认知,对事物不同的理解,从而在沟通时会发生好像互相理解对方在说什么,实际上南辕北辙的情况。
不过查了一下没找到,相似的应该类似是 知见障 或 知识诅咒。
我应该还没造词的能力,可能是某个小说里不太常见的说法吧。
起因是最近面试不太顺利,常有一种 我说我拿两把西瓜刀从南天门砍到北天门,砍了三天三夜,眼都不眨;你问我眼睛干不干 的感觉。
情绪也还好,不至于直接说 不懂咱就跳过吧 ,也没到直接骂人的心情,就很难继续下去,只好沉默一下,嗯嗯啊啊的不知道说啥。
还碰到一个做 WEB3 的,给我的感觉是真信,也挺让我沉默的。
傻逼的共识也是共识
NFT,虚拟货币,这些概念其实和传销挺像的。
头部的不信,当这个是敛财工具
往下大概是半信半疑趋向不信的,运气好机灵点跟着捞点
中间一些或是运气,或是立起来的标杆
再往下是半信半疑趋向相信的,大概率失了钱
底部的深信不疑,被骗钱
这么一说其实和某颜色主义挺像的。
go-slice
看了 Rust 的智能指针我就在想 Go 中的 Slice 实现,因为一直记的是 append 超量会重新分配一个新底层数组,所以之前的 slice 地址会变,所以要 s = append(s, v) 。
结果和我记的有点误差,这个分配在栈上的 slice struct 地址是没变的,类似于实现了 Deref trait 直连到底层数组。
123456789101112131415161718192021222324252627282930313233343536373839404142434445func main() { arr := []int{1} arrp := &arr fmt.Printf("arrp = %p\n", arrp) fmt.Println(*arrp) fmt.Printf("arr pointer: %p\n\n", arr) arr = append(arr, 1, 2, 3) fmt.Printf("arrp = %p\n", arrp) fmt.Pri ...