Peace For All – Re: Factor

Lobsters Hottest 工具

摘要

一篇博客文章,演示如何使用Factor编程语言和Raylib图形库创建动画'♥PEACE♥FOR♥ALL'文本显示,灵感来自T恤上的一个混淆bash脚本。

<p><a href="https://lobste.rs/s/sy980q/peace_for_all_re_factor">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/09 09:36

# 和平全人类 – Re: 因子 来源:https://re.factorcode.org/2026/07/peace-for-all.html 我大概容易受到 *极客狙击*(https://xkcd.com/356/)的影响,这常常让我沿着有趣的 *兔子洞*(https://www.merriam-webster.com/dictionary/rabbit%20hole)越走越深。今天就是这样一个日子。我偶然发现了一篇 *有趣的文章*(https://tris.sherliker.net/blog/obfuscated-self-evaluating-bash-script-by-cdn-akamai-being-supplied-to-consumers-via-retail-stores/),讲的是一件在售 T 恤上的 *混淆 Bash 代码*(https://en.wikipedia.org/wiki/Bash_(Unix_shell)):> 这段混淆代码实际上是一个彩蛋,它通过优衣库门店以一件非常棒的 T 恤形式提供,该 T 恤由 Akamai 设计,用于支持他们的 *Peace for All 活动*(https://www.uniqlo.com/nl/en/special-feature/peace-for-all)。 当我读到作者使用 *OCR*(https://en.wikipedia.org/wiki/Optical_character_recognition)将印刷文本转换成字符串,然后通过 `base64 --decode` 来查看最终程序时,我强烈地怀念起以前小心翼翼地从 *电脑杂志*(https://en.wikipedia.org/wiki/Type-in_program)上键入程序、以便能在本地运行的日子——那是我们当时唯一的选择。 Raylib(https://re.factorcode.org/2025/05/raylib.html)是一个制作彩色动画的绝佳工具,而且 *Factor*(https://factorcode.org/)对其支持得很好。我觉得展示如何用 Raylib 编写一个类似的程序会很有趣! 首先,我们为消息、字体大小、文字颜色以及计算出的可见文本行数定义一些常量:```CONSTANT: message $[ "♥PEACE♥FOR♥ALL" ] CONSTANT: width 800 CONSTANT: height 600 CONSTANT: font-size 24 CONSTANT: freq 0.2 ! 颜色从青色渐变到橙色 CONSTANT: color-start S{ Color f 0 255 255 255 } CONSTANT: color-end S{ Color f 255 135 0 255 } : rows ( -- n ) height font-size /i ;```默认字体不包含心形符号,所以我们需要手动绘制一个:```:: draw-heart ( x y color -- ) font-size :> s x s 0.30 * + >integer y s 0.32 * + >integer s 0.22 * color draw-circle x s 0.70 * + >integer y s 0.32 * + >integer s 0.22 * color draw-circle x s 0.50 * + y s 0.95 * + x s 0.92 * + y s 0.42 * + x s 0.08 * + y s 0.42 * + color draw-triangle ;```否则,我们根据“ tick ”来决定字符的绘制,`x` 方向按照 *正弦波*(https://en.wikipedia.org/wiki/Sine_wave)水平移动,并且颜色在我们设定的范围内变化:```: wave-x ( tick -- x ) freq * sin width 4 /i * width 2 /i + round >integer 0 width font-size - clamp ; : wave-color ( tick -- color ) [ color-start color-end ] dip rows mod rows /f color-lerp ; :: draw-glyph ( tick row -- ) tick wave-x :> x row font-size * :> y tick message nth :> ch tick wave-color :> color ch CHAR: ♥ = [ x y glyph color draw-heart ] [ ch 1string x y font-size color draw-text ] if ;```现在我们可以定义一个*渲染函数*,在每一 tick 中调用它,为每一行绘制一个字符:```: render ( tick -- ) begin-drawing BLACK clear-background rows [ [ + ] keep draw-glyph ] with each end-drawing ;```然后是一个简单的循环:打开窗口,每帧增加 tick 并渲染:```: open-peace-window ( -- ) width height "♥ PEACE FOR ALL ♥" init-window 30 set-target-fps ; : peace-for-all ( -- ) open-peace-window 0 [ window-should-close ] [ [ 1 + ] [ render ] bi ] until drop close-window ;```效果看起来相当不错! 相关代码在我的 *GitHub*(https://github.com/mrjbq7/re-factor/blob/master/peace-for-all/peace-for-all.factor)上。

相似文章

@FinanceYF5: 给Fable 5一句话:写一个单文件HTML,做一个逼真的随风飘动的美国国旗。 它直接甩出644行代码,旗面的褶皱、光影、抖动的节奏全对了,一次成型,没有来回改。 这种效果放几年前,得找专门做粒子特效的人调半天。

X AI KOLs Timeline

Fable 5模型根据一句话描述生成644行单文件HTML,实现逼真的美国国旗飘动效果,包括褶皱、光影和抖动节奏,一次成型无需修改,展现了AI在复杂代码生成上的能力。