关于推动可追溯代码来源的计划

关于推动可追溯代码来源的计划

image

缘由

在互联网上,很多技术博客和文章引入代码段来帮助读者理解技术思路或记录对某个大型模块的原理分析和理解。然而,由于版本管理和技术变化,很多历史文章在读者读到精髓时,发现引入的代码块没有来源信息,导致不能对这个思路进行完整的了解,影响了读者的学习效果。

和ChatGpt 在关于这个问题上,做了一番详细的讨论,由此萌发了让我推动代码可溯源的动力。

在博客或文章中引入代码块但没有引入代码的来源可能导致以下问题:

  • 缺乏参考和引用:不提供代码的来源将使读者难以查找和验证代码的准确性和可靠性。读者可能无法判断代码的作者、代码的版本或其他相关信息。
  • 侵权问题:如果你从其他来源复制了代码但没有引用或提及原始作者或代码来源,这可能构成侵权行为,违反了知识产权法律和道德规范。
  • 可信度和可复现性问题:提供代码的来源可以增强博客或文章的可信度。读者可以参考原始来源来验证代码,并获得更多的上下文信息。此外,如果读者想要在自己的环境中复现代码,代码的来源可以提供必要的指导和依赖信息。

为了解决这些问题,建议在博客或文章中引入代码块时,尽量提供代码的来源信息。这可以通过添加注释、链接到代码仓库或引用出处等方式来实现。这样可以提供更完整的信息,增加文章的可信度,同时尊重代码作者的权益。

差异

传统的Markdown语法

传统的Markdown语法中,并没有内置的方式来指定代码块的高亮行数。通常,Markdown的代码块只是用于展示代码,而不支持精确指定高亮行数的功能。
然而,一些扩展的Markdown解析器或编辑器可能提供了自定义的语法或插件,以支持在代码块中指定高亮行数。这些扩展可以根据不同的工具和插件而有所不同。
以下是一些常见的Markdown扩展和工具,它们可能提供了在代码块中指定高亮行数的功能:

  • GitHub Flavored Markdown (GFM)
    GFM支持在代码块中使用类似{highlight}的语法来指定高亮行。例如:
```java {highlight=[1,3-5,7]}  
public class HelloWorld {  
public static void main(String[] args) {  
System.out.println("Hello, world!");  // 第1行、第3到第5行、第7行高亮  
}  
}
  • Markdown Extra
    Markdown Extra是一种扩展的Markdown语法,支持类似GFM的高亮行语法。具体语法可能因工具而异,请查阅Markdown Extra的文档以了解详细信息。
  • VS Code和其他编辑器插件
    某些编辑器(如VS Code)提供了Markdown插件,可以使用特定的语法来指定高亮行。这些插件通常使用自定义的语法或标记来实现,具体的语法和用法可以查阅插件的文档。
    请注意,这些功能的可用性和具体的语法取决于你所使用的Markdown解析器、编辑器或扩展。建议查阅相关工具的文档以了解是否支持在代码块中指定高亮行数,并找到相应的语法或插件来满足你的需求。
  • Github
    • Github Markdown
      有人对此有一些建议 Allow to highlight lines in a code block (github flavored markdown) #42489

    • Github permalink
      github提供一种可以支持高亮以及版本信息的永久链接,给这个项目提供了思路,通过 Shift 可以多选行数,然后右击选择 permalink(永久链接).
      image

      OomAdjuster.java#L3127-L3129

新的标准定义

和 ChatGpt 讨论如何设计新的标准过程中,对于新的标准定义,它也持续为了输出了想法:

  • 设计一个引入链接的代码块
    可以考虑以下格式:
```java [链接名](链接地址)
// 代码内容
```

这样就可以在代码块中添加一个链接,链接名将显示为可点击的文本,点击后会跳转到指定的链接地址。

  • 代码块中同时指定起始行和高亮行数
    你可以考虑以下格式:
```java {起始行号}-{结束行号} {高亮行号1} {高亮行号2} ...
代码内容

例如,如果你想指定起始行为第3行,高亮第4行和第5行的Java代码块,可以使用以下格式:

```java {3-} {4 5}
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, world!");  // 第4行高亮System.out.println("Welcome!");       // 第5行高亮}
}

在上述示例中,起始行号为3,结束行号为空,表示从第3行到代码块结束的所有行。高亮行号1和高亮行号2分别表示第4行和第5行。

请注意,这只是一种示例设计,具体的实现方式可能因你使用的Markdown解析器或编辑器而有所不同。建议查阅你所使用的工具的文档,以了解是否支持在代码块中同时指定起始行和高亮行,并查找相应的语法或插件来实现你的需求。

实现

完整定义

```语言 {起始行-结束行} {高亮起始行-高亮结束行} (LINK)
// 代码内容
  • 例子
    • 完整写法
    ```java {3125-3131} {3126-3130} (https://github.com/10cl/fwkdev/blob/android-13.0.0_r52/dev/src/frameworks/base/services/core/java/com/android/server/am/OomAdjuster.java#L3125-L3131)// Use current adjustment when freezing, set adjustment when unfreezing.if (state.getCurAdj() >= ProcessList.CACHED_APP_MIN_ADJ && !opt.isFrozen()&& !opt.shouldNotFreeze()) {mCachedAppOptimizer.freezeAppAsyncLSP(app);} else if (state.getSetAdj() < ProcessList.CACHED_APP_MIN_ADJ) {mCachedAppOptimizer.unfreezeAppLSP(app, oomAdjReason);}}
    ```
    
    • 效果
      image

通过点击 view raw 即可直达代码来源以及对于的版本信息。

页面效果见: source.toscl.com

兼容的选择

考虑到很多 markdown 解析工具,对新的标准支持有一定的工作量以及兼容性问题,通过原有的 markdown 格式,也能实现代码块的可追溯,
这里也鼓励这种新的方式来写代码块。

  • 写法
    ```java// Use current adjustment when freezing, set adjustment when unfreezing.if (state.getCurAdj() >= ProcessList.CACHED_APP_MIN_ADJ && !opt.isFrozen()&& !opt.shouldNotFreeze()) {mCachedAppOptimizer.freezeAppAsyncLSP(app);} else if (state.getSetAdj() < ProcessList.CACHED_APP_MIN_ADJ) {mCachedAppOptimizer.unfreezeAppLSP(app, oomAdjReason);}}
    ```
    [OomAdjuster.java#L3125-L3131](https://github.com/10cl/fwkdev/blob/android-13.0.0_r52/dev/src/frameworks/base/services/core/java/com/android/server/am/OomAdjuster.java#L3125-L3131)
    
  • 效果
            // Use current adjustment when freezing, set adjustment when unfreezing.if (state.getCurAdj() >= ProcessList.CACHED_APP_MIN_ADJ && !opt.isFrozen()&& !opt.shouldNotFreeze()) {mCachedAppOptimizer.freezeAppAsyncLSP(app);} else if (state.getSetAdj() < ProcessList.CACHED_APP_MIN_ADJ) {mCachedAppOptimizer.unfreezeAppLSP(app, oomAdjReason);}}
    
    OomAdjuster.java#L3125-L3131

一键引用

因为我个人长期在和 AOSP 这套大型源码打交道,用这个方式如果手动来写,难免有点困难,所以专门开发了一款插件用来一键复制指定代码块的 Markdown 样式:

MarkdownQuote是JetBrains插件,可以帮助你在IDE中高效地复制代码围栏,更多细节请参阅SourceCodeTrace项目。

目前这个插件已经上架到 Jetbrains IDE 市场,可以直接在 IDE中: File -> Settings -> Plugins -> 搜索 “MarkdownQuote” 安装体验。

解析的支持

因为是新的样式,还需要有解析的支持,我差不多使用了10年的 Sublime,比较热衷于使用这款轻量级的编辑器,管理了很多文字上的工作,所以准备在 Sublime 上尝试。
Sublime 上基于 pymdownx 有一款 MarkdownPreview 插件,我在这个上面改了一版解析的流程,但是作为网站的显示,中间还需要一些工作要做,暂时没法上线。

vuepress 是比较便捷的在线网站生成框架,基于 markdown-it 生成 markdown样式,因此,基于这个框架上,写了一款插件,并上架到了 NPM:
markdown-it-quote是一个用于markdown-it的插件,支持多种代码围栏功能。

目前所有开发的功能均是开源的形式,旨在推广代码的可溯源。

SourceCodeTrace 的意义

SourceCodeTrace(源代码追溯)这个组织名称可以传达以下含义:

  • 源代码的追溯性:强调追踪代码的来源、历史和演化过程,以确保代码的可信度和可追溯性。这可以包括引入代码的来源、版本控制、修改历史等方面。
  • 代码来源的追踪:关注追踪代码的来源,确保代码的原始作者得到适当的认可和归属。这可以涉及到代码的引用、引入作者信息、遵守开源许可证等方面。
  • 代码溯源:强调代码的起源,可以追溯到特定的项目、库、团队或个人。这有助于了解代码的背景、用途和背后的设计思想。
    通过选择 “SourceCodeTrace” 作为组织名称,你传达了一个关于追溯源代码的重要性的信息。这个组织可以致力于推动代码块来源的设计和实践,提倡代码的可信度、来源可追溯性以及对原始作者的尊重和认可。这有助于建立一个注重代码可靠性和知识产权的开发和协作环境。

Logo的设计

image

描述SourceCodeTrace组织的可能的logo设计方案:
Logo设计:

  • 标志:使用一个简洁而有力的标志来代表SourceCodeTrace。可以尝试结合代码和追踪的元素,如拼图、箭头或放大镜等,以展示源代码的追溯和追踪的概念。
  • 字体:选择现代、清晰的字体,使组织名称"SourceCodeTrace"易于辨识。
  • 颜色:选择与代码相关的色彩,如深蓝、绿色或灰色,以传达专业性、可靠性和技术性。可以使用渐变色或不同色调来增加视觉吸引力。
    示例设计描述: SourceCodeTrace的logo设计是一个简洁而现代的标志。标志的核心元素是一个由拼图和箭头组成的图形,形象地代表了对源代码的追溯和追踪。箭头的指向表示SourceCodeTrace组织致力于引导和推动代码块来源的设计。字体使用了清晰而简单的无衬线字体,以突出组织名称"SourceCodeTrace"。颜色方面,我们选择了深蓝色作为主要色调,结合浅蓝色渐变效果,以传达专业性和可靠性。

请注意,这只是一个示例设计描述,你可以根据自己的喜好和需求进行调整和修改。当设计Logo时,确保它与你的组织价值观和宣传目标相一致,并尽量保持简洁、易识别和具有独特性。最重要的是,确保Logo能够在不同尺寸和背景下保持清晰可见。如果需要进一步的设计或修改,可以咨询专业的图形设计师或使用在线Logo设计工具来实现你的想法。

如何推广这样的组织

要推广你的组织和传播组织的思想,你可以采取以下策略:

  • 建立一个网站或在线平台:创建一个专门的网站或在线平台,介绍你的组织、宗旨和使命。在网站上提供关于代码块来源设计的信息、最佳实践、指南和资源,以便开发者和社区成员参考和学习。
    • SourceCodeTrace
  • 社交媒体宣传:利用社交媒体平台,如Twitter、LinkedIn、Facebook等,建立组织的社交媒体账号。定期发布有关代码块来源的相关内容,包括观点分享、实用技巧、行业新闻、事件和活动等,吸引关注者并扩大影响力。
    • (微博、Twitter)
  • 写博客或技术文章:撰写关于代码块来源设计的博客文章或技术文章,并在个人博客、技术平台或开发者社区上发布。通过分享见解、经验和最佳实践,吸引读者的关注并传播组织的思想。
    -(通过该新的标准写源码分析相关的博文,比如先以AOSP这套大的源码做分析)
  • 参与技术社区和活动:积极参与技术社区、开发者论坛和相关行业活动。参与讨论、回答问题、分享经验,并提到你的组织和推动代码块来源的思想。建立个人和组织的声誉和影响力。
    • (在平台共享观点,答疑解惑)
  • 合作和合作伙伴关系:与其他组织、社区或个人建立合作伙伴关系,共同推广代码块来源的设计和实践。合作可以包括共同举办活动、合作撰写文章或开发工具,共同传播组织的思想。
  • 教育和培训:提供关于代码块来源设计和最佳实践的教育和培训。可以组织在线研讨会、工作坊、培训课程等,向开发者和技术社区传授相关知识和技能。
    • (做一些视频介绍一些源码的解析)
  • 开源项目和工具:开发开源项目或工具,以促进代码块来源的设计和实践。通过开源项目的使用和贡献,推动组织的思想并获得更多的曝光和支持。
    • (JetBrains IDE 插件、sublime 插件、 vuepress 插件)
      以上策略可以相互结合,根据你的资源和目标受众来制定推广计划。持续不断地提供有价值的内容、积极参与社区和建立良好的合作关系,将有助于扩大你的组织的影响力和传播你的思想。

推动的意义

推动代码块来源的设计和传播相关的思想是有意义的。以下是一些原因:

  • 提高代码可信度:指定代码块的来源可以增加代码的可信度。当读者知道代码的来源并能追溯其历史和演化过程时,他们更有信心使用和参考这些代码。
  • 保护知识产权:通过推广代码块来源的设计,强调了对代码作者和原始来源的尊重和认可。这有助于保护知识产权,鼓励开发者遵守开源许可证和版权规定。
  • 促进合作和共享:明确代码块的来源可以促进开发者之间的合作和共享。开发者可以更容易地找到和引用他人的代码,从而推动知识交流和协作。
  • 提高代码可维护性:了解代码块的来源有助于提高代码的可维护性。当需要对代码进行修改、修复漏洞或添加新功能时,了解代码的来源可以更好地理解其设计意图和依赖关系。
  • 社区建设和贡献:推动代码块来源的设计可以为技术社区的建设和贡献做出贡献。通过分享最佳实践、提供工具和资源,促进开发者之间的交流和共同成长。
    虽然推广代码块来源的设计可能需要一定的努力和时间,但它对于提高代码质量、知识保护和社区建设都具有重要意义。通过传播这个思想,你可以为开发者和技术社区带来积极的影响,并促进更加可靠和可持续的软件开发实践。

如果你有更好的建议,请在 Github ISSUE 给我提供更详细的建议, 谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16580.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue实现ChatGPT逐字输出打字效果

文章目录 前言一、效果二、Springboot后端1.封装请求OpenAI接口的客户端2.对话处理3.对话请求接口 二.Vue前端 前言 在调用OpenAI GPT接口时&#xff0c;如果不使用流式&#xff08;stream:true&#xff09;参数&#xff0c;接口会等待所有数据生成完成后一次返回。这个等待时…

分享收集的ChatGPT专题学习资料~

Datawhale分享 作者&#xff1a;Coggle数据科学 ChatGPT是未来的技术趋势&#xff0c;也拥有非常多的干货的分享&#xff0c;如解析ChatGPT的原理&#xff0c;或者ChatGPT使用指南。 本文将分享整理的干货学习资料&#xff0c;和最新的学习活动。领取方式见文末。 专题学习资料…

关于GPT4.0和6款AI工具

下面6个非常实用的AI工具强烈推荐给大家 1.ChatGPT: 上线两个月&#xff0c;用户数量达到1亿&#xff0c;ChatGPT不但能够写文案&#xff0c;剧本&#xff0c;企划等多种任务&#xff0c;还具有编写和调试计算机程序的能力等诸多功能&#xff0c;它具有3.5,4.0两个版本供账户使…

记录一次使用 Ubuntu 编译 Wakaama 踩坑过程

1. 背景 公司项目需要使用 LwM2M 协议&#xff0c;由于是个相对冷门的小众协议&#xff0c;客户端模拟器几乎没有&#xff0c;只有 Eclipse Wakaama 相对来说功能齐全、易用&#xff0c;但是这个软件没有编译好的程序包&#xff0c;只能从 Github 拉取源码手动编译运行。 不知道…

【人工智能】科大讯飞API接口调用(第一集)

前言 这学期有一门人工智能教育课程&#xff0c;恰巧又有这么一个实践&#xff0c;要求进行人工智能接口调用 于是首选了科大讯飞&#xff0c;下面是详细过程记录 科大讯飞接口调用 以下是流程以及实现细节描述 调用流程 第一步 来到科大讯飞开放平台 http://www.xfyun.…

14个适用于Eclipse IDE的有用(免费)插件

在线Eclipse市场上有1,667个可用的插件和解决方案&#xff01; 在您阅读本文时&#xff0c;可能还有更多。 如果您在官方市场之外冒险&#xff0c;您会发现数百种其他开发的插件都可以与Eclipse IDE兼容。 听起来像是经典的第一世界问题。 太多的插件可供选择。 您将永远不需要…

问答系统(QA)调研

引言 智能问答系统广泛用于回答人们以自然语言形式提出的问题&#xff0c;经典应用场景包括&#xff1a;智能语音交互、在线客服、知识获取、情感类聊天等。根据QA任务&#xff0c;可以将QA大致分为5大类&#xff0c;分别为&#xff1a; 文本问答&#xff08;text-based QA&am…

ChatGPT与码农的机会

之前博客中已经写了很多有关AI在博客编写方面的优势与对未来博客的编写方面的思考。这篇文档我继续分享我在开发中的一个案例和相关的感想。 事件还原 我发现ChatGPT也可以帮助我编写OData&#xff0c;于是我也利用GPT帮助我编程。 OData如何将filter与apply字段联合使用&am…

ChatGPT:竟然精通ENVI IDL、ArcGIS等软件!

目录 01 使用途径 02 使用 01 使用途径 我试了很多网站&#xff0c;包括注册登录、插件、镜像网站&#xff0c;微信机器人&#xff0c;QQ机器人&#xff0c;但是目前这些或多或少都由于OpenAI的限制无法正常使用。所以总的来说需要科学上网并且需要国外手机号&#xff0c;这有…

matplotlib——1. 常用功能汇总

文章目录 1.IDE里的1.1 显示模式&#xff08;plt.ion()和plt.ioff()&#xff09;1.2 backend说明 2. jupyter里的&#xff08;主要是和iwidgets组件结合交互式&#xff09;3 通用的3.0 根据颜色名称获取对应rgb值&#xff08;0~255&#xff09;3.1 cmap3.1.1 cmap绘制CMYK四个通…

大模型综述来了!一文带你理清全球AI巨头的大模型进化史

夕小瑶科技说 原创 作者 | 小戏&#xff0c;Python 如果自己是一个大模型的小白&#xff0c;第一眼看到 GPT、PaLm、LLaMA 这些单词的怪异组合会作何感想&#xff1f;假如再往深里入门&#xff0c;又看到 BERT、BART、RoBERTa、ELMo 这些奇奇怪怪的词一个接一个蹦出来&#x…

Maven依赖传递失效问题解决

Maven依赖传递失效问题解决 背景介绍问题描述解决方式 记一次非常规问题解决: maven依赖传递关联(传递)失效 背景介绍 首先maven工程结构大致是这样 (注意maven仓库 是本地仓库-公司中央仓库-远程仓库, 可能对理解遇到的问题原因和为何那样解决有些帮助): <groupId>com…

利用chatGPT搭配plantUML生成UML图

是不是感觉自己画uml图繁琐复杂没思路&#xff0c;画出来的uml图太简单&#xff1f;那就快来试试利用chatGPT搭配plantUML生成UML图&#xff0c;一键生成&#xff0c;自己调试解放双手&#xff0c;开拓思维&#xff0c;快来试试吧&#xff01; 在chatGPT中生成plantUML代码 如果…

谷歌发文批评苹果:实在是 “拖大家后腿”

1992 年 12 月 3 日&#xff0c;世界上第一条 SMS 消息成功发送&#xff0c;如今已经过去 30 周年。在这个关键节点&#xff0c;谷歌再度发文赞美 RCS 短信标准&#xff0c;并批评苹果迟迟不采用该标。 RCS 全称 Rich Communication Suite - 富媒体通信标准&#xff0c;属于高…

库克「豪赌」MR:七年磨一剑,不行也得行

苹果MR是一款在重重阻力之下、由库克强行拍板推向市场的产品。 作者&#xff1a;常嘉帅 “你们看懂了吗&#xff08;Are you getting it&#xff09;?”乔布斯这样问&#xff0c;“一台音乐播放器&#xff0c;一部手机&#xff0c;和一部互联网通讯设备。” 乔布斯以他魅力十足…

我问了10个博客专家好友,原来他们都在用这些高效率软件

大家好&#xff0c;我是记得诚。 在CSDN上我认识了很多大佬级别的博客专家&#xff0c;最近询问了我的10个博客专家好友&#xff0c;向他们取经&#xff0c;扒出了他们珍藏的高效率软件&#xff0c;很多软件我用完之后&#xff0c;当场发出了OMG的尖叫&#xff0c;我重度使用了…

何同学采访苹果CEO库克上热搜,网友表示自愧不如

昨日&#xff0c;22岁B站知名UP主“老师好我叫何同学”采访了苹果CEO蒂姆-库克&#xff0c;登上微博热搜榜&#xff0c;引起了网友们的热议。 何同学是北京邮电大学学霸&#xff0c;22岁的大学生&#xff0c;出于兴趣的原因在B站注册账号发布数码产品的测评视频&#xff0c;他做…

“AI教父”李开复筹办新公司,掘金 AI 2.0 三个大方向

图片&#xff1a;由无界AI画图工具生成 3月19日&#xff0c;创新工场董事长兼CEO李开复在朋友圈宣布&#xff0c;正在筹组一个名为“Project Al 2.0”的新公司&#xff0c;一个旨在探索AI2.0的创新项目。 图片&#xff1a;李开复在朋友圈紧急“摇人”PK chatGPT 目前&#xff0…

谁能真正替代你? AI编码工具深度对比 (chatGPT/Copilot/Cursor/New Bing)

写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了&#xff0c;作为一个被裹挟在AI时代浪潮中的程序员&#xff0c;在这几个月里我也是异常兴奋和焦虑。甚至都兴奋的不想拖更了。不仅仅兴奋于AI对于我们生产力的全面提升&#xff0c;也焦虑于Copilot等AI辅助编码工具&…

【ChatGPT】《ChatGPT 算法原理与实战》1: 引言:从 CNN、RNN 到 Transformers 架构、自注意力机制(图文+数学公式+代码实例详解)

文章目录 1: 引言:从 CNN、RNN 到 Transformers自然语言处理的挑战传统方法的限制Recurrent neural networks | 循环神经网络How RNN works : RNN 的工作原理RNN 的数学模型最新研究发展:RNN、LSTM等Transformers的出现GPT和ChatGPT2: 基本概念编码器解码器训练 Transformer …