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:141946

评论

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

GhatGPT在信息安全方面的应用

HummerCloud

ChatGPT

活动预告 | GAIDC 全球人工智能开发者先锋大会

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

微服务拆分治理最佳实践

京东科技开发者

数据库 微服务 京东云 京东技术 安全接口

直播预告 | 企业如何轻松完成数据治理?火山引擎DataLeap给你一份实战攻略!

字节跳动数据平台

数据库 大数据 数据治理 数据实践

AI for Science系列(二):基于AI框架的CFD工具组件!赛桨v1.0 Beta API介绍以及典型案例分享!

飞桨PaddlePaddle

深度学习 paddle API 飞桨

长安链入选“2022科创中国”开源创新榜

科技热闻

搜索EE场景排序链路升级

京东科技开发者

模型 搜索 EE 企业号 2 月 PK 榜 Explore & Exploit

AI for Science系列(三):赛桨PaddleScience底层核心框架技术创新详解

飞桨PaddlePaddle

人工智能 paddle 飞桨 框架技术

软件测试/测试开发 | App测试时常用的adb命令你都掌握了哪些呢?

测试人

android 软件测试 自动化测试 测试开发 adb

MySql基础-笔记6 -排序、分组、连接的使用、NULL值处理

MySQL 数据库

风险洞察之事件总线的探索与演进

京东科技开发者

京东云 事件总线 京东技术 数据管道 风险洞察

Gluten 首次开源技术沙龙成功举办,更多新能力值得期待

Kyligence

开源技术 Gluten

活动回顾丨研发效能度量线下沙龙圆满举办

Kyligence

数据分析 Kyligence Zen

案例介绍:使用A-Ops性能热点火焰图进行性能诊断

openEuler

Linux 操作系统 openEuler 性能测评 A-Ops

MASA MAUI Plugin (八)Android相册多选照片(Intent 方式)

MASA技术团队

.net blazor MAUI MASA Blazor

10分钟学会使用 Loki 日志聚合系统

北京好雨科技有限公司

Kubernetes 云原生 rainbond 企业号 2 月 PK 榜

使用 NGINX 在 Kubernetes 中对 TCP 和 UDP 流量进行负载均衡

NGINX开源社区

nginx Kuber udp tpc 企业号 2 月 PK 榜

乌卡时代的云成本管理:从0到1了解FinOps

SEAL安全

云服务 FinOps 企业号 2 月 PK 榜

程序员的终点不一定是技术!

这我可不懂

低代码 项目经理 低代码平台

单元测试利器——手把手教你使用Mockito

京东科技开发者

单元测试 Mockito 京东云 安全测试 京东技术

软件测试 | 霍格沃兹线下班开课啦!

测吧(北京)科技有限公司

测试

项目终于用上了低代码,才知道为什么真香了!

引迈信息

项目管理 低代码

MySQL审计插件-MariaDB Audit Plugin

GreatSQL

:MySQL 数据库 maria greatsql greatsql社区

AI for Science系列(一) :飞桨加速CFD(计算流体力学)原理与实践

飞桨PaddlePaddle

paddle 算法 飞桨 框架技术

MySql基础-笔记11-临时表、复制表、元数据、序列使用

MySQL 数据库

中科协发布2022“科创中国”开源创新榜 OceanBase开源社区入选

OceanBase 数据库

数据库 oceanbase

推荐系统[二]:召回算法超详细讲解[召回模型演化过程、召回模型主流常见算法(DeepMF_TDM_Airbnb Embedding_Item2vec等)、召回路径简介、多路召回融合]

汀丶人工智能

自然语言处理 深度学习 推荐系统 搜索算法 召回算法

MySql基础-笔记9 -ALTER命令

MySQL 数据库

MySql基础-笔记10-索引

MySQL 数据库

本周 2 场直播预告!Intel 高级工程师带你探索开源机密计算社区 CCZoo | 第 65 期

OpenAnolis小助手

云计算 运维 直播 intel 龙蜥大讲堂

飞桨全量支持业内AI科学计算工具——DeepXDE!

飞桨PaddlePaddle

人工智能 深度学习 开源

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