打印一个 9 页的乐谱时,我先是用了普通的 A4 双面打印、左侧订书针装订的方案,但这样很不适合快速翻页和平整地放在谱架上。和 AI 讨论了一番后才意识到更好的方案是用骑缝钉,也就是把几张横放的 A3 纸在中央钉起来/缝起来,然后对折,形成一本小册子。这样重做后得到的效果真不错!我觉得别的很多东西我也应该这样打印。
(这需要用复杂的方法重新排列原本的页,但一般软件都支持帮你重排成这样打印。另一个小的不便是这样最适合 4 的整数倍页,打印 9 或 13 页的内容会导致最后有空白页。)
(这需要用复杂的方法重新排列原本的页,但一般软件都支持帮你重排成这样打印。另一个小的不便是这样最适合 4 的整数倍页,打印 9 或 13 页的内容会导致最后有空白页。)
👍2
@taoky42 问了我一个我也遇到过很多次的问题:CSS 怎么在 inline layout 中让一个小图片和旁边的文本垂直居中对齐?vertical-align: middle 会把图片的中央对齐到周围文字的 x height 中央,而这个属性目前没有值能对齐到 cap height 中央或者汉字中央。
一个方法是把图片前后的文字分别包进 span 标签,让文字和图片是平级节点,然后在所有平级节点上指定 vertical-align: middle。但这样会把文字基线全都搞乱,还需要把文字分别包起来,并不是好主意。
最终我发现了这篇(排版非常漂亮的!)博客 https://blog.kizu.dev/cap-height-align/ 其中说的第一种方法我觉得就足够好了:
vertical-align: middle;
margin-block-start: calc(1ex - 1cap);
我做了一些测试确认它在图片和文字有各种尺寸关系、不同尺寸文字混排、不同 line height 等情况下都有正确的效果,非常不错。我能想到的注意事项:
1. 如果 cap height 中央和汉字中央不一致,它只能对齐到前者。我看了一遍相关 CSS 单位,后者好像做不到,但我的经验是很多字体中这二者基本是一致的。
2. 只适用于 inline layout,如果在 flex layout 等情况下已经用别的方案实现了对齐,重复使用这个会破坏对齐。
(如果不要求 inline layout,也就是说不需要图片和文字混合在一起换行,那就简单多了。例如要对齐一个按钮上的图标和文字,别用这个方法,用 flex。)
一个方法是把图片前后的文字分别包进 span 标签,让文字和图片是平级节点,然后在所有平级节点上指定 vertical-align: middle。但这样会把文字基线全都搞乱,还需要把文字分别包起来,并不是好主意。
最终我发现了这篇(排版非常漂亮的!)博客 https://blog.kizu.dev/cap-height-align/ 其中说的第一种方法我觉得就足够好了:
vertical-align: middle;
margin-block-start: calc(1ex - 1cap);
我做了一些测试确认它在图片和文字有各种尺寸关系、不同尺寸文字混排、不同 line height 等情况下都有正确的效果,非常不错。我能想到的注意事项:
1. 如果 cap height 中央和汉字中央不一致,它只能对齐到前者。我看了一遍相关 CSS 单位,后者好像做不到,但我的经验是很多字体中这二者基本是一致的。
2. 只适用于 inline layout,如果在 flex layout 等情况下已经用别的方案实现了对齐,重复使用这个会破坏对齐。
(如果不要求 inline layout,也就是说不需要图片和文字混合在一起换行,那就简单多了。例如要对齐一个按钮上的图标和文字,别用这个方法,用 flex。)
👍2
最近在读朋友推荐的 The Complete Musician (Steven G. Laitz, 4th edition) 这本书,感觉真不错啊,讲得非常清晰和有道理,并且在我看来节奏适中,向想要学习乐理的人推荐。唯一的问题是中文翻译我听说问题很大,只推荐看原版。
Z-Library 有,录音等额外资源在 https://global.oup.com/us/companion.websites/9780199347094/stu/ (书上写的 URL 好像失效了)。
书很厚,我目前也只看了前 5 章,但只看前面一些部分我感觉就已经非常有收获了,像是睁开了以前一直闭着的眼睛😂立刻就在很多我熟悉的曲子中看出学到的知识了。
Z-Library 有,录音等额外资源在 https://global.oup.com/us/companion.websites/9780199347094/stu/ (书上写的 URL 好像失效了)。
书很厚,我目前也只看了前 5 章,但只看前面一些部分我感觉就已经非常有收获了,像是睁开了以前一直闭着的眼睛😂立刻就在很多我熟悉的曲子中看出学到的知识了。
👍12
This media is not supported in your browser
VIEW IN TELEGRAM
这两天狠狠玩了一下 TIS-100,终于把 TIS-100 SEGMENT MAP 部分全通了,还把一些比较简单的关卡仔细优化了一下,发现比 9 年前的自己能看出更多优化机会了。
好久没有这种纯粹的写底层代码的乐趣了😂虽然后面几关是真难,并且这个每节点最多 15 条指令的限制真是要了命了,写了一堆 write-only 的代码。
好久没有这种纯粹的写底层代码的乐趣了😂虽然后面几关是真难,并且这个每节点最多 15 条指令的限制真是要了命了,写了一堆 write-only 的代码。
👍3
今天随便注意到的 iOS 居中对齐错误。图 1:拨号键盘。图 2:电话中的拨号键盘。图 3:电话中点右上角 ⓘ 打开的界面。(我就说这个拨号键盘为什么总看着难受)
相关: https://tonsky.me/blog/centering/
相关: https://tonsky.me/blog/centering/
👍4
翻以前的消息时偶然看到这个幻灯片,是一个课程的大作业(大概是调研并给大家讲一个编程语言特性)。现在看到仍然有一种“我当年做过这么好看的幻灯片啊”的感觉(虽然内容上现在看来非常幼齿),突然就想怀旧一下。
这个幻灯片我是模仿当时很喜欢的一个幻灯片做的,Scott Wlaschin 的 Functional Design Patterns。说来有趣,我完全是由于巧合看到它的,而它是我入门函数式编程以及最终喜欢上 Haskell 的重要原因。我的一个学设计的朋友因为 design patterns 关键词偶然看到了这个,并且因为形式上很优秀而被吸引了,但看了几页后逐渐觉得不太对😂她发给了我,我看了后觉得“哦哦哦真妙啊”,反复学习过很多遍。
或许我的这个模仿品也没有那么好,只是同样的风格会让我一看就回想起看 Functional Design Patterns 那个幻灯片的体验吧,而那个体验真是美妙。
我对制作幻灯片的兴趣应该主要来自于两个因素,首先我确实一直喜欢做用户界面和用户交互设计,我也因此学习了一些排版、字体、CSS 等知识,以幻灯片的形式呈现信息和这个兴趣方向是一致的。其次,高中时我在朋友的大力推荐下买了许岑的幻灯片制作教程(2014 年左右吧,尝试搜了一会没找到精确是什么时候发布的,总之现在网上随便就能免费看),感觉他的一些思想很有启发性。
这个幻灯片我是模仿当时很喜欢的一个幻灯片做的,Scott Wlaschin 的 Functional Design Patterns。说来有趣,我完全是由于巧合看到它的,而它是我入门函数式编程以及最终喜欢上 Haskell 的重要原因。我的一个学设计的朋友因为 design patterns 关键词偶然看到了这个,并且因为形式上很优秀而被吸引了,但看了几页后逐渐觉得不太对😂她发给了我,我看了后觉得“哦哦哦真妙啊”,反复学习过很多遍。
或许我的这个模仿品也没有那么好,只是同样的风格会让我一看就回想起看 Functional Design Patterns 那个幻灯片的体验吧,而那个体验真是美妙。
我对制作幻灯片的兴趣应该主要来自于两个因素,首先我确实一直喜欢做用户界面和用户交互设计,我也因此学习了一些排版、字体、CSS 等知识,以幻灯片的形式呈现信息和这个兴趣方向是一致的。其次,高中时我在朋友的大力推荐下买了许岑的幻灯片制作教程(2014 年左右吧,尝试搜了一会没找到精确是什么时候发布的,总之现在网上随便就能免费看),感觉他的一些思想很有启发性。
1👍11
Functional Design Patterns.pdf
4.3 MB
Scott Wlaschin 的 Functional Design Patterns。演讲视频和其他信息
https://github.com/SmartHypercube/codename
安利一种为各种东西生成随机代号的方案,TLDR:两位字母加两位数字,例如 DH-09、MP-91。
我用这个方案为自己的各种项目命名很久了,上一个版本是生成 4 个随机音节,例如 gedukube、toputise。虽然熵更高并且更易读,但使用中感觉随机生成的音节挺怪异的,也没那么容易记忆,因此改成了这个方案。这个方案在使用中没发现什么问题,我现在就很熟练大概 5 个在做的项目的代号。
为什么要用代号命名项目:
- 可以快速开始尝试各种创意,不会在“叫什么”这一步被卡住
- 快速探索的过程中想法经常会变,慢慢就和最开始的想法不一致了,用描述性的名字命名的话容易过时,而目录名、docker image 名等不好改
- 想法也可能分叉,从一个探索产生几个非常相似的项目,代号可以区分任何你想区分的东西
- 代号可以被用于目录名、变量名等,不用担心和关键字或者其他名字冲突,也可以被可靠地全文搜索找出所有出现的位置
- 代号泄露时不泄露语义信息
- 这个具体方案(两字母+两数字)在任何语言中都方便作为变量名、包名,并且我发现见到几次后更容易先记住字母部分,在还没记住数字部分时,也可以输入字母部分后自动补全
安利一种为各种东西生成随机代号的方案,TLDR:两位字母加两位数字,例如 DH-09、MP-91。
我用这个方案为自己的各种项目命名很久了,上一个版本是生成 4 个随机音节,例如 gedukube、toputise。虽然熵更高并且更易读,但使用中感觉随机生成的音节挺怪异的,也没那么容易记忆,因此改成了这个方案。这个方案在使用中没发现什么问题,我现在就很熟练大概 5 个在做的项目的代号。
为什么要用代号命名项目:
- 可以快速开始尝试各种创意,不会在“叫什么”这一步被卡住
- 快速探索的过程中想法经常会变,慢慢就和最开始的想法不一致了,用描述性的名字命名的话容易过时,而目录名、docker image 名等不好改
- 想法也可能分叉,从一个探索产生几个非常相似的项目,代号可以区分任何你想区分的东西
- 代号可以被用于目录名、变量名等,不用担心和关键字或者其他名字冲突,也可以被可靠地全文搜索找出所有出现的位置
- 代号泄露时不泄露语义信息
- 这个具体方案(两字母+两数字)在任何语言中都方便作为变量名、包名,并且我发现见到几次后更容易先记住字母部分,在还没记住数字部分时,也可以输入字母部分后自动补全
GitHub
GitHub - SmartHypercube/codename: Generates random codenames for your projects.
Generates random codenames for your projects. Contribute to SmartHypercube/codename development by creating an account on GitHub.
👍2
老罗说他搞的这个泡面口感和煮面一样,作为一个喜欢吃面的陕西人想检查一下。本来是比较怀疑的,但检查后我认为确实和煮面很接近,挺不错的。还比不上一些做得很好的煮面,但也超过一些做得不好的了,并且和一般的泡面口感很不同。面条口感以外的方面我觉得一般般,不好不坏。
图片顺序是山野红酸汤面、烧汁雪花牛肉面、海味龙虾汤面。
图片顺序是山野红酸汤面、烧汁雪花牛肉面、海味龙虾汤面。
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
在玩 https://store.steampowered.com/app/1970460/Garden_Galaxy/ ,一个用随机刷出的各种物品建花园的游戏,很休闲
👍3
WTF!GitHub 悄悄[1]改成了再也不会自动 watch 新创建的仓库了(曾经有个开关)。
很好,我迟早要因为忘了 watch 而收不到别人发的 issue / pr 通知了。
[1]: 2025-04-15 在博客发了个通知[2][4],2025-05-23 改了[3],妈的这么快,而且没有任何邮件通知。
[2]: https://github.blog/changelog/2025-04-14-sunset-notice-for-automatic-watching-of-repositories-and-teams/
[3]: https://github.blog/changelog/2025-05-22-sunset-of-automatic-watching-of-repositories-and-teams/
[4]: https://xkcd.com/1208/
很好,我迟早要因为忘了 watch 而收不到别人发的 issue / pr 通知了。
[1]: 2025-04-15 在博客发了个通知[2][4],2025-05-23 改了[3],妈的这么快,而且没有任何邮件通知。
[2]: https://github.blog/changelog/2025-04-14-sunset-notice-for-automatic-watching-of-repositories-and-teams/
[3]: https://github.blog/changelog/2025-05-22-sunset-of-automatic-watching-of-repositories-and-teams/
[4]: https://xkcd.com/1208/
👍1
玩桌游的时候总是怀疑我没把牌洗好,尤其是好几张特殊的牌聚在一起出现时。于是做了个能把随机排列转换成容易手工操作的步骤的工具: https://shuffle-helper.0x01.me/ 。
(有比手工执行 n 次“从第 x 叠取出第 y 张”更简单的方案吗?我也想了一些别的方案,比如限制每一步的格式都是“把第 x 叠的顶部 y 张挪到第 z 叠顶部”,这样每一步执行需要的时间应该会短一点点,因为从牌堆中间抽出一张比拿顶部的更难。但这个方案想实现随机排列需要的平均步骤数应该会更高。)
(给定一个排列,从一叠开始,每一步都是“把第 x 叠的顶部 y 张挪到第 z 叠顶部”,经过若干步后变为给定排列的一叠,最少需要多少步?我怀疑这是个 NPC 问题😂)
(有比手工执行 n 次“从第 x 叠取出第 y 张”更简单的方案吗?我也想了一些别的方案,比如限制每一步的格式都是“把第 x 叠的顶部 y 张挪到第 z 叠顶部”,这样每一步执行需要的时间应该会短一点点,因为从牌堆中间抽出一张比拿顶部的更难。但这个方案想实现随机排列需要的平均步骤数应该会更高。)
(给定一个排列,从一叠开始,每一步都是“把第 x 叠的顶部 y 张挪到第 z 叠顶部”,经过若干步后变为给定排列的一叠,最少需要多少步?我怀疑这是个 NPC 问题😂)
👍1