Peace For All – Re: Factor
摘要
一篇博客文章,演示如何使用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)上。
相似文章
@csaba_kissi: 为编码者和创客提供的开源免费应用 http://text-effects.colorion.co - 使用AI提示的CSS文本效果 http…
精选的57个纯CSS文本动画集合,免费提供,包含可直接复制粘贴的CSS代码片段,以及可选的AI提示,用于重现每个效果。
@pablostanley:制作了一个像素艺术工具,每个像素都是代码而非位图。尝试一下 → http://newt.sh
由 @pablostanley 创建的像素艺术工具,每个像素通过代码而非光栅图形来表示。
#つぶやきGLSL float i,e,R,s;vec3 q,p,d=vec3((FC.xy-.5*r)/r.y,.6);for(q.z--;i++<97.;i>86.){o.rgb+=hsv(.08,-e,e/5e1)+.003;p=q…
一条由用户 @YoheiNishitsuji 发布的推文,分享了一个紧凑的GLSL着色器程序(分形/光线步进实现)
@FinanceYF5: 这是这个视频里的幻灯片,如果你想自己看一遍的话: https://thariqs.github.io/cc-video-editing-deck/…
本演示文稿解释了Fable如何使用Claude Code编辑其自己的发布视频,并提供了带有幻灯片的逐步指南。
@FinanceYF5: 给Fable 5一句话:写一个单文件HTML,做一个逼真的随风飘动的美国国旗。 它直接甩出644行代码,旗面的褶皱、光影、抖动的节奏全对了,一次成型,没有来回改。 这种效果放几年前,得找专门做粒子特效的人调半天。
Fable 5模型根据一句话描述生成644行单文件HTML,实现逼真的美国国旗飘动效果,包括褶皱、光影和抖动节奏,一次成型无需修改,展现了AI在复杂代码生成上的能力。