NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

针对 Gopher 代码,我有一些小建议

  • 2019-11-13
  • 本文字数:1642 字

    阅读完需:约 5 分钟

针对 Gopher 代码,我有一些小建议

这篇文章主要是想阐述一下, 针对 Gopher, 我有哪些经验及实践,尤其是那些我不是很喜欢的,以及那些因为要遵循惯例而受制约的事情等等。


第一个出场的是“i”项目类型,即 information(信息)类的内容。该类型有别于其它 Gopher 类型,它并不代表一种资源,仅仅用于显示,这就使得,Gopher 菜单交互在规定的特殊场景下变得复杂。令人尴尬的是,Gopher 面对这个问题只字不提,虽然说有人想处理这些错误也不是什么坏事,不过他们认为这件事情毫无意义。正是这种没有约束的滥用,使得系统层面的约束就显得尤为重要;我曾见过一个完全由项目类型构成的文件,而 sans 却是单个的,这就是滥用的极致。这样做不仅易读性差,而且浪费了信息传递和处理的时间。我第一次看到这个的时候感到极其困惑,由此更是生出厌恶之感。此类型令人震撼的用法是那些空白,因此为了阐明原因,仅用于表示控件。


与这种不喜欢相关的,是我一直遵循的惯例,非常希望我的 Gopher 能够保持。如果我写文章时需要其他的资源,像图片或者程序文件,甚至一篇文章的不同版本,文章会以菜单的形式呈现,包括他的每一个条目,也包括文章本身。最近比较不错的一个例子就是我的 2019-06-23 的这篇文章,他是以程序和元数据作为主线,后面是文章的几个不同的版本。让我觉得惊奇的是,当我告诉别人这种方法时,遇到了一些很有意思的评述,我本以为这是一个很基本的方法,但是别人却夸我很聪明,能想到这一点。其实在我最开始学习 Gopher 的时候就马上想到了,并考虑着如何写到我的文章中等等。


其次就是“URL:” 约定 Gopher 选择器引用 HTML 文件。这个并不像“i”类那么糟糕,因为对于那些不是特别懂它的客户来说,他们会有明确的行为规范,并且相互之间能够形成解耦。然而,这依然很差。不难想象,一个菜单项是否按照某种约定,链接到两个不同的资源,任何一种选择都各有利弊。此外,它完全与标准文档相反,那些文档中特别说明了选择器字符串不应该具有任何特殊含义;因此,如果希望它在客户端正常运行,便会禁止使用以“url:”开头的选择器。有人觉得这并不是什么问题,如果可以接受的话,它可以被更长久地使用下去。人们会很轻易地认为,以不同内容开始的选择器都是有特殊含义的;这就是问题所在。


我的建议是,如果没有充分理由,一般来说尽量避免链接到 HTML 文件上。我链接纯粹是因为这篇文章的其他几个版本已经完成了。尽管有些不规范,但使用“h”项目类型也是相当不错的,因为可以预见它的行为是合乎逻辑的,虽然我很想知道有多少客户端准备接收文本传输或者直接的 HTML 文件方式。由于 HTML 下载后可验证,并具有指定的项目类型,所以我将其视为不做任何修改的直接下载,就跟“i”项目类型一样。与此相关的是,由于 Gopher URL 规范的缘故,人们认为 Gopher 选择器是以“/”开头的,并且对于 Gopher 选择器使用的是换行符,而不是回车和换行符对,这两个换行符同样很差,他们太常见了,服务器应该对此进行谴责。


第三个是“caps.txt”选择器协议。拥有可用于某些事情的恒定资源,无疑是有积极意义的,这类似于主菜单的空选择器,但我觉得这种协议缺乏美感。首先是选择器本身;为什么它应该用一个通用的文件命名来表示;一个好的选择器应该具备一个能力,就是可以避免不必要的缩写,并且不会使用任何特定通信存储的方法。其次,它是一种由 POSIX 标记的格式,因此显得很难看;它包含注释工具;gopher 菜单不支持注释;它是一种“key=value”格式;Gopher 没有这种格式;它仅仅是一种从 POSIX 到 Gopher 的特殊格式的转换。除此之外,它还有一些不必要的工具,可以将选择器作为 POSIX 文件名进行详细的处理;这是完全没有必要的;如果一个 Gopher hole 理员配合地提供“caps.txt”资源,那么就可以轻松地优化选择器和其他类似的服务器,相反,就会很困难。它还有其他琐碎的细节。总之,我觉得这违背了 Gopher 的精神。我见过的另一个选择是“robots.txt”,反对它的理由是,所有 WWW 的谬论都不应该出现在 Gopher 中。


原文链接:


http://verisimilitudes.net/2019-07-07


2019-11-13 11:141943

评论

发布
暂无评论
发现更多内容

如何用python优雅的写论文

张鹤羽

28天写作 3月日更

事务消息应用场景、实现原理与项目实战(附全部源码)

中间件兴趣圈

RocketMQ 实战 消息中间件 事务消息

越来越受欢迎的Vue想学么,90后小姐姐今儿来教你

华为云开发者联盟

算法 Vue 大前端 框架 组件

进步

lenka

3月日更

Python 数据类型

HoneyMoose

Node.js 模块化你所需要知道的事

vivo互联网技术

大前端 nodejs Node

LeetCode题解:518. 零钱兑换 II,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

优雅编程 | javascript代码优化的15个小知识

devpoint

ES6 JS代码优化 JS迭代

【动态规划/总结必看】从一道入门题与你分享关于 DP 的分析技巧 ...

宫水三叶的刷题日记

面试 算法 LeetCode

如何在 Python 中清屏

HoneyMoose

3-8 工作日志

技术骨干

Wireshark数据包分析学习笔记Day5

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

vm

梅花鹿鹿

28天写作 3月日更

《接口测试入门》 学习笔记

骆俊

七日更 3月日更

面试被吊打系列 - Redis原理

数据库 架构 面试

线上MySQL读写分离,出现写完读不到问题如何解决

程序员历小冰

MySQL 读写分离

准备参加软考的小伙伴注意了!

IT蜗壳-Tango

IT蜗壳 3月日更

Java8 Stream 数据流,大数据量下的性能效率怎么样?

xcbeyond

Java java8 Stream<T> 3月日更

今日随想

Nydia

算法喜刷刷

Kylin

算法 3月日更 21天挑战

(28DW-S8-Day17) 讲故事能力

mtfelix

28天写作 讲故事能力 复述能力

正则表达式.04 - 引用

insight

正则表达式 3月日更

不一样的软件们——GitHub 热点速览 v.21.10

HelloGitHub

数据库 GitHub 开源

鼎昂量化交易系统APP开发|鼎昂炒币机器人软件开发

系统开发

雪花算法,到底是个啥?

架构精进之路

算法 七日更 3月日更

冰河公开了进大厂的核心技能,服了!

冰河

程序员 面试 大厂技能 硬核技能图谱

Elasticsearch Dynamic Mapping

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

CR量化交易APP开发|CR炒币机器人软件系统开发

系统开发

更新60篇的复盘:持续书写,见证文字的力量

boshi

写作 七日更

《精通比特币》学习笔记(第五章)

棉花糖

区块链 读书笔记 3月日更

币神量化交易系统开发|币神量化交易APP软件开发

系统开发

针对 Gopher 代码,我有一些小建议_编程语言_unknown_InfoQ精选文章