复选框

2021-04-04 06:08:06

/复选框嗨xkcd访客!今天我们发布"复选框&#34 ;,我们2021年4月傻瓜'项目。我提出了这个原始概念,并建立了前端。后端和编辑器工具是由达瓦顿和凯文科特鲁隆制造的,内容由一系列令人难以置信在漫画和唯一的Randall Munroe中的令人惊叹的人。

今年是一个多泽。我们在今天导致的几个月中被宣传并报废了几个不同的想法。我们终于在3天前选择了今天的概念。需要做一些简单的事情是一个非常有用的限制,我们倾向于制作原始的想法,但深。我真的为自己结果感到骄傲!

如果你在JS代码,Comic.js,你' ll找到它'写在摩尔斯代码中!

" .-----。 - .. - ... ... ... ... - .-- ..----。 --- .. ......-- - 。 ----- -----

----- --- --- ...... --- ..-。 .. - - ... - ...... - ...... --- ...... ----- ......-。 ....-

-..-。 -....-。 - .- - - - ...... ----- - 。 - .-。 .---- .- .-。 -..- - 。 。 - .-。 -----

.-。 ...... - - - .-- -.- -.-。 - .- ..- ......--。 ...... - ...... - ...... - 中学。

- .-。 --- .. - .-。 -... - 。 ----- --- ... - ... ... - ...... - ...... - ... - - ...... - .--

...... ......----。 ----。 ---- - 。 .--。 .---- .--- ... - ...... --- .. - ..

< Snip>

- - .-- ...... - ...... - 。 .........-。 。 - 。 - ..-。 - ...和#34; .split(&#34 ;; d")。地图(莫尔塞.Run);

当你将代码粘贴到莫尔斯翻译时,不幸的是结果不是很有帮助:

最初,我希望忠实地将JS代码转换为莫尔斯和背部。当我开始实现这一点时,我注意到我的字符表没有包含卷曲支架字符。嗯,这将是一个问题。

我想到了向莫尔斯特表中添加新角色,但这似乎可能会变得繁琐,并且与其他更模糊的摩尔斯序列的重叠的风险我没有意识到。我的下一个想法是将8个点和破折号的序列解释为二进制字节,这似乎是一个非常好的解决方案,但有点冗长。我休息了思考这个,然后有一个想法:它很难用成字母和数字编码任意数据,所以像Base-36工作那样是什么?

现在我们达到了!随着对Base-36的略有增强,我拔入了优秀的基础X库,它接受要编码/解码二进制数据的任意字符列表。我把我们的56个角色摩尔斯特码表扔进了,我们开心了!

因此,JS代码实际上是两次编码:一次在Base-56中,然后在MORSE代码中。如果您计算UTF-8 - 当我需要向源添加表情符号时实际上发挥作用! - 它'跑过三层编码。 :)

在发起之前不久,我们发现了一个非常奇怪的错误:如果你试图发送信" e",你会看到预期的响应。即使我们专门处理" E&#34,服务器也没有识别输入。此外,两个" e" s,或任何其他字母组合,正常工作。

所以我们开始挖掘客户和后端,以查看正在发生的事情。我们采取了很大的痛苦,使这个项目的API在运输中使用莫尔斯电码。如果您看看网络检查员,请注意,请求的URL在其中有摩尔斯码:

Chromakode @ Atavist:〜$ Curl' https://xkcd.com/2445/morse/.../...._..' -v.

>获取/2445/morse/.../...._ .. http / 1.1

>

< http / 1.1 200确定

<内容类型:文本/ x-morse; charset = UTF-8

- ...... ......-- ......- .- .- .- .---。 ......--- .- .---- .---- .----。 -... -....- --- --- ... ----- ----- .---- - --- .-。 .----- ...... ...... ......-。 -... ----- ..-- .- / ....。 .- .- .- .. --- .-- / .- - 。 - - - ...... --- - ......-- / --- ... - - / - ....。 .-。 。 ...... -

字母" e"因为它发生的是,是摩尔斯代码中最简单的角色:它' s一个单一"。" - 因此,我们如何快速发现这种相对晦涩的错误。

回到手头的问题。我们注意到客户没有送莫尔斯" e"沿着。相反,漫画将请求好像什么都没有输入:空路径。进一步调查一步,我核实客户正在生成并请求正确的URL与莫尔斯字母" E"在里面!发生了什么事?

然后,发生了陌生人的事情。我将正确的URL复制并粘贴到我的浏览器中,然后按Enter键,并在我的眼前,它删除了"。"从URL的末尾并返回不同的结果。这立即在我的脑海中掀起了闹钟,认为这段时间结束时,以某种方式使其成为一个畸形的URL。当一个URL在句子结束时,它是否可以是生活质量特征,以纠正拼写错误?不,它没有加起来,因为它最初在JavaScript请求时最初失败,其中URL不是人为投入的上下文。

好的,下一个想法。有没有一个规格在某处描述了在一段时间内结束的网址?我的googling最终用我的用户&#34带领我到这个stackoverflow post; speedplane" (在撰写本文时有一票):

"作为其他答案已注意到,URL中允许期间允许,但您需要小心。如果在URL&#39的一部分中使用单个或双倍时段,则浏览器将其将其视为路径的变化,而且您可能无法获得所需的行为。"

显然,一个裸露的。或者..在URL中将被类似于Unix文件系统路径的浏览器解释:涉及当前和父目录。这似乎与相对URL特别相关。除了和#34; e",字母"我" (莫尔斯:" ..")也会受到影响。

我们通过在句点之前添加额外的分隔符来修复了此问题,使URL / _进行URL / _。和 /_...

如果您' reve you you more'我们' ll在https://github.com/xkcd上释放代码'准​​备好了解。你也可以"检查"从前几年开始漫画。 i' m部分到alto,我们的无限菜单系统。您可以在github.com/chromakode和@chroromakode上找到更多我的工作。