Docker 初探
Docker 常用命令与参数精讲
Mario Bros. Clock 复刻
Mario Bros. Clock 复刻
Project | Repo | Flash Online
Setup
Board: esp-wroom-32
RGB Matrix: Waveshare HUB75E 64×64
IDE: 在线烧写 / Arduino IDE v2.3.4
Drivers: CP210x VCP Drivers
数据线
Records
Mario Bros. Clock
接线时参考项目接线说明及微雪点阵屏线序。连接电脑后点亮 esp,然后安装 CP 210x 驱动以检测到 esp wroom 32. 在线烧写即可。
最终效果,难评。本地编译后重新烧写,问题依旧。
微雪例程
参考微雪官方文档设置 Arduino IDE,但其并不面向 esp wroom 32,因此参考本文进行调整。最后需要根据接线图改一下引脚定义,以及将 64×32 改到 64×64。编译时报错
1Compilation error: unknown type name 'i2s_dev_t'
与工程师沟通后降 Board Manager 版本为 v2.0. ...
Makefile 入门(二)
Makefile 小记
CXXFLAGS
编译 Memtis/silo benchmark 时,一个宏定义一直找不到
123macros.h:32:2: error: #error "no CONFIG_H set" 32 | #error "no CONFIG_H set" | ^~~~~
检查 Makefile,CONFIG_H 有定义且路径正确,并且已经通过 CXXFLAGS += -DCONFIG_H=\"$(CONFIG_H)\" 传递给编译器,十分奇怪。
打印调试输出。
12$(info CXXFLAGS are $(CXXFLAGS))# CXXFLAGS are -Wno-error=deprecated-declarations
这下明白了,我执行的 make 命令为 make CXXFLAGS+="-Wno-error=deprecated-declarations",Makefile 中定义的 CXXFLAGS 被覆盖。把命令行参数去掉后再打印 CXXFLAGS,与 ...
HTML5 + CSS3 入门(一)
CSS
Common
外边距:垂直方向
外边距合并 ( margin collapsing ) 主要适用于块级元素。具体来说,当两个或多个块级元素的垂直外边距相邻时,它们的外边距会合并为其中较大的一个。
合并是连锁的,即
12345678910<style> .ht0 { margin: 10px auto; }</style><body> <div class="ht0"></div> <div class="ht0"></div> ...</body>
最终合成的 margin 仍为 10px.
外边距合并不会发生在行内元素、浮动元素(float)、绝对定位元素(position: absolute 或 position: fixed)、表格元素 (table) 上,etc.
e.g.
1234567891011121314151617<!-- body-margin=8px --><styl ...
HTML5 + CSS3 入门(二)
Notes
垂直距离问题
12345678910<style> * { margin: 0; padding: 0; box-sizing: border-box; } li { list-style: none; }</style>
display
代码片段 1
代码片段 2
<img><div>
<img style="display:block;"><div>
网页 1 中,img 与 div 之间多出一小段垂直距离
由于 <img> 元素默认是内联元素(inline),而 <div> 元素是块级元素(block),内联元素遵循文本流,会受到文字间距等影响,因此在默认情况下,即使 <img> 和 <div> 都各占一行,它们之间可能会存在一些默认间距或对齐方式上的差异,导致看起来有一小段垂直距离
弹性盒子
自动宽度设置
讨论 Flex 布局中, ...
博客大修记录 (2025)
Hexo 维护记录 (2025)
前言
自前年兴冲冲地折腾好了 Hexo + Buftterfly 后便陷入长达一年半的虚无期。无他,一者发现搭博客「也就那么回事」,二者,此类框架要写好文章才能渲染,且没有第三方博客平台一键发布的便利。[1] 近来被推荐在简历附上个人博客,于是借此机会重新修整,作文以记之。
框架 | 主题
略有过时的 Hexo + Bufferfly,但初见一图流的惊艳让它始终是我的白月光,框架选型时没犹豫地闭眼冲了。插件系统提供了高度自由的定制空间,只是时间过去已久,没能记下魔改博客的每一步。时至今日,倒也没那么重要了。
Twikoo 评论
当初部署时的一个小坑。Vereel 部署时,如果使用 Gitlab 为仓库,则 Twikoo 必须扔在 Personal Projects 下,否则跟你要会员。
之前发现 Twikoo 挂了,检查后发现 i) 当时绑定的域名没在续费;ii) MongoDB 因为太久不活跃,把数据库关了。
按照站长的教程[2]重新盘了一遍。定期发一些评论吧。
SSL
见 OHTTPS 相关文章。
图床
对象存储使用七牛云。上传接口 ...
存算一体 - 综述
存算一体:综述
Related Notes
No.240801 ~ 240802
Introduction
内存瓶颈
冯·诺伊曼架构下,存算分离,访存带宽低,时延长,功耗高。在处理数据密集型算法时,大量能耗和信号延迟损失在频繁的数据搬运和内存访问上,即所谓存储墙瓶颈。同时,计算与访存性能发展严重失衡。(Fig. 1.)
Fig. 1(a). Comparation between von Neumann and CiM Architecture.
Fig. 1(b). The bandwidth is increasing very slowly.
同时,大数据和 AI 技术的兴起,对流式数据传输提出了高要求,其性能受存算分离架构的数据搬移影响最为严重。希望采用忆阻器等新兴介质,实现原位存储和计算,减小能耗和延时,消除传统架构下的内存瓶颈问题。
忆阻器
包括磁效应忆阻器、相变效应忆阻器和阻变效应忆阻器等。
Magnetoresistive RAM (MRAM)
磁效应忆阻器通过调整电子自旋,利用磁道磁阻效应实现电阻状态改变,达到存储信息的目的。其结构包含有 3 层, ...
PMDK 开发工具包
DevEnv
Installing PMDK[1]
PMDK 是一系列包的总称,随着英特尔傲腾业务的终止,这些包逐渐不再被维护。Debian 12 软件仓库中目前只剩 libpmem ( 低级操作 )、libpmemblk 等主要包,或者手动从 Github 自行安装。
12$ apt search pmem$ apt-get install <library>
e.g. libpmem[2]
123Runtime: libpmem1Dev : libpmem-devDebug : libpmem1-debug
不装 dev 会导致编写程序时没有头文件
Installing NDCTL[3]
The ndctl utility is used to manage the libnvdimm (non-volatile memory device) sub-system in the Linux Kernel.
1$ apt install ndctl daxctl
Installing IPMCTL[4]
ipmctl is an open sourc ...
MIPS - A Deep Dive
主要讲讲 MIPS32 的内存架构。
论文复现 - Memtis(一)
环境准备
Memtis - ASPLOS’23
前置 | 基本概念
Setting tiered memory systems with Intel DCPMM
打算使用 Optane 内存模式以在物理机器上运行实验。
1sudo ndctl create-namespace -f -e namespace0.0 --mode=devdax
Reconfigures a namespace with devdax mode:
-f: Allow the operation to continue on enabled namespaces
-e: Reconfigure existing namespace configuration
--mode: Define the namespace mode - fsdax, devdax, sector, and raw
Reconfigures a dax device with system-ram mode (KMEM DAX).
1sudo daxctl reconfigure-device dax0.0 --mode ...
论文复现 - Memtis(二)
实验复现
Memtis - ASPLOS’23
前置 | Linux
cgroup [1] [2] [3]
kthread [4]
taskset
Benchmarks 验证运行
依照原文实验,配置了除 SPEC CPU 2017 以外的所有测试集。
gapbs
对 benchmark/bench.mk 做少许修改,手动下载解压。[5]
liblinear
v2.45 没有了,现版本 v2.47。对 datasets.mk 做少许修改,kdd 需要手动下载。[6]
graph500
v3.0.0 和 vmitosis-workloads/graph500 均无法使用,单独安装 v2.1.4.[7]
Benchmark Specification - Graph 500
btree
123# change the number of elements and lookup requestsvim btree/btree.c# see line 61
XSBench
Programming Model: openmp-threading
This is the ...
PMDK Getting Started
Persistent Memory Documentation
Getting Started Guide
PMDK Introduction
Tuned and validated on both Linux and Windows, the libraries build on the Direct Access (DAX) feature which allows applications to directly access persistent memory as memory-mapped files[1].
*Raw Device Access: 裸设备访问
**注意这里 PMDK 没有经过 NVDIMM Driver
The ‘Persistent Memory’ area describes the fastest possible access (? why faster than with a cache) because the application I/O bypasses existing filesystem page caches and go ...
SetupTools(一)
Setuptools(一)
基于一个简单项目对 Setuptools 进行讲解。最后,项目还使用 Electron-Builder 将 Web 应用封装为桌面应用。
项目结构
123456789101112131415161718192021cli/- .streamlit/ - config.toml- hooks/ - hook_streamlit.py- pages/ - 1_PageOne.py - 2_PageTwo.py- Index.py- run_index.py- run_index.specpack/- main.js- main.bat- package.json- package-lock.json- resources/ - run_index.exe- static/ - icon/
构建
见 SetupTools(二).
RuskDesk 配置记录
RustDesk
现在 RayLink 时好时坏,苦于没有能用的远程软件,遂尝试 RustDesk 自建中继服务器。
安装及配置
教程移步 ☞
Server
首先在服务器面板和 ufw 分别放行端口。可能是以前装 Hexon 时装了 pm2,所以直接采用 pm2 部署。从 .pub 文件获取 Key,本地需要填写。
Client
填写云服务器 IP 和 Key[1],没改默认端口,至此已经可以运行。
体验
释怀地似了,比 RustDesk 更卡。给服务器测个速看看。
speedtest
librespeed/speedtest | Tutor | Repo
顺手修了下宝塔,查看配置使用 bt 14,原来端口后面还有一小串路由,加上才能访问。添加网站后测速如下。
下行是正常的,只能是封端口或者流量特征检测之类。
修复
恼火。突然发现 PicUploader 一直 401,首先怀疑是在宝塔弄测速时把 Nginx 碰坏了,检查了一个多小时,一无所获。把测速网站整个删光并重启 Nginx,清除浏览器数据。无效。
换用 Edge 和 Chrome (无痕),均正常。怀疑又 ...
SSL 证书自动更新及部署
SSL 证书自动化更新 / 部署
Backgrounds
OHTTPS Dachboard | OHTTPS 文档
腾讯云附赠的一年 SSL 证书到期了,再续便是 90 天有效期,十分麻烦。偶然得知 OHTTPS 服务可支持主流云服务商及多种平台 SSL 免费证书的自动化申请 / 更新及部署,一探究竟,记之此文。
笔者去年主要给四个三级域名申请了证书 ( 因为腾讯云不给泛解析证书 ),其中三个位于自己的轻量服务器,一个绑定七牛云 CDN.
Solutions
注册账号后申请了 Let’s Encrypt 的泛解析证书,向 DNS 解析添加一条 CNAME 便完成。
参考 OHTTPS 教程 进行自动化证书更新 / 部署,更新周期设为最长 75 天。七牛云节点容易配置,服务器节点则稍费工夫,通过创建 SSH 节点完成。
SSH 节点部署
前置
建议创建专门用于证书部署的用户。
1234# 新建cert用户useradd -m cert# 设置cert用户登录密码passwd cert
权限控制
1sudo sudoer
进入 NANO 后在文件末尾添加
1cert AL ...
StackEdit 美化
StackEdit 美化
终于完成了一直惦记的美化。虽有瑕疵,仍完成了目标。
Overview
先上图。
美化
Stylish 存在隐私问题,平替 Stylus (forked from Stylish). 对前缀 https://stackedit_io 应用如下样式[1]。
123456789101112131415161718192021222324a { text-decoration: none;}code { font-family: "JetBrainsMono Nerd Font","Roboto Mono","Lucida Sans Typewriter","Lucida Console","monaco","Courrier,monospace","楷体" !important;}code * { font-family: "JetBrai ...
可视化面板 Streamlit 的使用及配置
Streamlit 可视化
API 整理
文件上传
st.file_uploader
区别于文件接口,该 API 返回的是字节字符串,即 b'???' 形式。这导致无法直接处理。
解决方案是在 Parser 类中加一层转换,同时进行乱码处理
1file = io.TextIOWrapper(raw_file, encoding='utf-8', errors='ignore')
此时就可以使用 file.readlines() 等常用 API 进行处理了。
按钮
st.button(name)
点击事件可通过 if 触发
12if st.button(): ...
复选框
st.checkbox
下拉框
st.selectbox
下拉框 (多选)
st.multiselect
e.g. 将表格首列条目作为备选列表
12df = pandas.read_excel()channels = st.multiselect(MSG, df[df.columns[0]].tolist(), ["first_elem"])
...
记一次反向代理路径问题
记一次反向代理路径问题
Desc
由于实验在云端环境进行,启动 Gradio 后需通过端口转发访问。初此启动发现 css 不能加载,按钮事件也有问题。F12 检查 Network 发现两个 404:
Name
Request URL
info
https://<forward-ip-port>/info
theme.css
https://<forward-ip-port>/theme.css
观察其他 url 发现,完整的代理路径为 https://<forward-ip-port>/codeserver-forward/<ID>/proxy/<proxy>/,其后才是 /info、/theme.css 等。正是这多出的一段路径导致请求失败。
其中,css 问题容易解决,修改网页 HTML,将 theme.css 的 <link> 标签替换正确 url 即可。检查控制台报错,未能请求 info 数据则是按钮事件失效的元凶。继续根据输出定位,知 info 由 index.js 请求:
1 ...
Typora 美化
Typora 配置
修改 ~/AppData/Roaming/Typora/themes/github.css
12345678910111213141516171819202122232425262728293031/* 在 themes/ 下放置图片目录 */:root { --side-bar-bg-color: #fafafa; --control-text-color: #777;+ background-image: url(./image/backgrounds/your_bg.jpg);+ background-size: cover;+ opacity: 0.81;}/* 所有 font-family 中添加 'Times New Roman','宋体' */html {- font-size: 14px;+ font-size: 18px;}a { color: #4183C4;+ text-decoration: none;}h1, ...
VitePress 初体验
VitePress 试用
一直希望部署一个与 MyNote 匹配的静态 CMS,应该至少满足以下需求
能够自动生成目录结构
支持隐藏文章
[Optional] 目录导航应该是易用的,最好能提供类似一般文件管理器的层次和缩进
偶然发现 VitePress,记录试用过程。
运行
首先说明一下,VitePress 按照官方教程启动 Demo 并不困难,但是仅仅是一面打印了文本的白屏。笔者图省事,把目光放向了 VitePress 教程本身,其同样采用了 VitePress 主题并已经过完整配置,遂克隆其仓库。以下记录启动过程。
使用 nvm[1] 进行 Node.js 版本管理。先安装了最新的 Node.js 和 pnpm,启动 VitePress 数个报错。首先在 tsconfig 禁用严格检查 "strict": false,后参考仓库 CI 文件,降低版本[2]如下。
Node.js v16.20.2
pnpm v7.0.0
根据 Node.js 和 pnpm 版本对应关系,指定版本 @7.0.0 安装。部署命令和本地 build 命令稍有不同。
1234 ...


