Solo  当前访客:9 开始使用

Lute 实现后记

CommonMark 规范实现难点 Markdown 解析没有“报错”一说:无论是词法分析还是语法分析阶段,都不可能出现 error 退出。换句话说,对于编程语言而已,其在设计时就是准结构化的,甚至为了解析方便而特设语法(比如 golang 数据类型后置、模板中的表达式使用前缀表达式等),而 CM 则是为兼容各种写法、将各种写法规范化而设计的,所以规则非常多,目的是为了兼容而不是报错。 整体解析方面比较难的是计算缩进宽度。缩进在 Markdown 中主要用于缩进代码块、列表项对齐。因为列表项作为块容器是可以容纳任何元素的(包括块级元素和行级元素),所以当列表项出现子块时缩进就要根据列表的定义来计算。比如要考虑列表标记宽度,标记后到第一个非空字符的空格数等。最麻烦的是块引用嵌套列表的场景,因为块引用也是一种块容器。 除了缩进,还有个比较难的是“延续”判断。比如换行以后需要判断是否需要延续之前的行所在的节点。不同节点类型有不同的打断规则,最麻烦的也还是列表项和块引用,因为它们是块容器,可能出现的状态有点多。 最后还有个难点是判断列表是紧凑模式还是松散模式。因为列表是块级容器,所以需要考虑嵌....

CommonMark 规范要点解读

为什么需要 Markdown 规范 CommonMark 规范开篇就提到了这个问题,并列举了十多个例子来说明制定一个 Markdown 规范的必要性。 由于没有明确的规范,Markdown 解析渲染会有很大差异。因此用户经常会发现在一个系统(例如 GitHub)上渲染正常的文档在另一个系统上渲染不正常。更糟糕的是由于 Markdown 中不存在“语法错误”,所以无法立即发现这类问题。 在 Markdown 处理上“模糊的正确”是不可取的。所以 CommonMark 规范的目的就是消除二义性,制定统一明确的 Markdown 解析渲染规则。 作者阵容 CommonMark 规范的主创 John MacFarlane(jgm)是加州大学伯克利分校的哲学教授,他在文本标记语言领域有一个很出名的项目 Pandoc(用于在各种文本标记语言之间互转格式)。他用多种编程语言实现过 Markdown 引擎,在 Markdown 处理方面他可以称得上行家中的行家。 该规范的其他参与者包括: David Greenspan, 来自 Meteor Vicent Marti, 来自 GitHub Nei.......

我为什么要用中文写项目文档

English Please 最近 B3log 开源社区下的项目 BND1 以及 30s2 被外国友人 hobolance3 贴了两条建议: English Please - BND4 English Please - 30s5 这两个项目都是中文写的 README。他建议把中文换成英文,这样对外国友人更友好,也能为项目获得更多关注。 What is the problem with Chinese README's What we want How this will help you 结尾引用了 Richard Stallman 的名言: Sharing knowledge is the most fundamental act of friendship. Because it is a way you can give something without loosing something. hobolance 也给其他一些中文项目提过该建议,大部分处理是被直接关闭。因为这些项目和 BND、30s 一样都是面向国内用户的,比如 UnblockNeteaseMusic....

创业的第二个夏天

如果你是第一次看这个系列的文章,可从第一篇《创业的第一个春天》1 看起。 这个夏天我开始做一些自己一直想做的事情了。 星火 做一个真正意义上的社区,这是我最近几年来最想做的一件事,通过星火已经建立了雏形。想法、认知以及如何做尽皆分享于《写在星火初版发布之际》2。 目前星火暂时只作为一个 side project,以后时间多起来的话我会把更多精力放在上面。不必纠结于理想和现实之间的选择,相信只要足够努力就一定都能实现。 Lute 千呼万唤始出来,犹抱琵琶半遮面。转轴拨弦三两声,未成曲调先有情。 7 月份整整一个月基本都在闭关修炼 Markdown 程序员之道,这条道就是做一款实现《CommonMark 规范》3 的 Markdown 引擎。在第一次学用 Markdown 时就有此想法了,今年年初的时候终于付诸于实践,建立了项目仓库开始探索,但进展一直断断续续。 年初雄心壮志,年中饱受摧残,期间重写了一遍又一遍,最终还是靠抄官方的参考实现4 做了一版,算是渡劫失败吧。其中的曲折后面会单独写一篇分享给那些正在准备渡劫飞升的道友,祝好运 🙏 Beyond 有一首歌叫《勇闯新世界》5,挺.......

写在星火初版发布之际

对黑客派的不满 一直以来我对黑客派都不是很满意,最近两年不满感日趋加重。不满并不是来自于功能或者界面,因为功能或者界面是可以不断调整、打磨和改进的。 对黑客派的不满主要来自于它对“社区”的实现方式是中心化的。随着我对“社区”一词的逐步理解、实践和思考,我越发感到中心化的社区实现方式是有问题的,因为这样的话黑客派其实并不是一个真正的社区,倒更像是一个开放了注册的个人博客,使用社区来形容它有挂羊头卖狗肉之嫌。 在意识到这是确实存在的一个问题后,我尝试性地做了一个修正方案,即通过“贡献系统”来实现社区自治,从而将中心化集权尽量进行分散,将一些管理权交给对黑客派有较多贡献的用户。虽然目前看来这个方案还算奏效,但却没有从根本上解决问题,因为根本问题还是来自于对社区的定义。这就好像“抽象泄露原则”所描述的那样,越是要在更高级抽象的层面解决问题,就越容易产生更多的新问题,最终,底层的基础问题将暴露无遗,浮沙高楼。 现在黑客派已经木已成舟,再怎么修整也是舟,成不了飞船了。不过即使如此,我也不会放弃的黑客派的,后面会继续尽最大努力进行调整,尽量弥补遗憾。 再识社区 社区究竟是什么?从数据、服务和系统的角....

如何限制 docker run 容器执行时长?

需求背景 有的时候我们需要跑一些不一定安全(不受信任)的程序时,可以通过 docker 实现资源隔离,其执行时长也需要控制,如果执行时间太长就终止运行。 Docker 本身是否支持超时控制 从 2013 年开始每隔一段时间都有人呼吁 docker 官方来实现这个特性,但官方并不打算实现。 具体讨论细节请看 https://github.com/moby/moby/issues/1905 。 错误的方案 以上讨论中以及其他地方陆续有人提出“外围”解决方案,其中有两种常见的错误方案值得我们注意。 kill docker run timeout 3 docker run ... untrusted_program docker run 本身是一个 docker client 派生的进程,使用 kill docker run 进程来终止容器进程运行(比如通过 Linux 命令 timeout 或者类似发送 kill 到 docker run 进程)的方案都可能会有问题,导致容器进程无法终止。主要原因是: docker run 这个进程不一定能及时响应信号,即使响应了信号,也不一定能传到容器......

IPFS 数据链接与内容寻址

本文翻译自 IPFS 社区教程 ProtoSchool。ProtoSchool 是一个可以交互式学习 IPFS 编程的网站,涉及代码的部分大家可到该网站上直接运行测试! 本文将介绍如何在对等节点上创建和获取可验证的数据链接。 LESSION 1 - 创建节点并返回内容标识符(CID) 在本教程中,我们将探索 IPFS DAG API,它允许我们将数据对象存储在 IPFS 中,你可以在 IPFS 中存储一些令人兴奋的东西,比如你最喜欢的小猫的 GIF。 你可以将数据对象作为参数传入 ipfs.dag.put 方法来创建新节点,该方法返回新创建的节点的内容标识符(CID)。 ipfs.dag.put({ hello: 'world' }) CID 是 IPFS 中从其内容生成的数据地址。每当有人将相同的 {hello:'world'} 数据放入 IPFS 时,他们将获得与你获得的相同的 CID。 如果他们改为输入 {hell0:'w0rld'},则 CID 会有所不同。 如下示例代码将创建 { test: 1 } 节点并返回其 CID: const run = async () =&....

IPFS 去中心化数据结构(四)

本文翻译自 IPFS 社区教程 ProtoSchool。ProtoSchool 是一个可以交互式学习 IPFS 编程的网站,涉及代码的部分大家可到该网站上直接运行测试! 本文接上篇 IPFS 去中心化数据结构(三)。 LESSION 5 - 默克尔树和有向无环图(DAG) 正如我们所讨论的,去中心化的 Web 依赖于链接的数据结构。让我们来探索一下它们的样子。 默克尔树 默克尔树即“哈希树”,是一种树形数据结构,其中每个节点都是哈希值。 +--------+ | | +---------+ root +---------+ | | | | | +----+---+ | | | | +----v-----+ +-----v----+ +-----v----+ | | | | | | | node A | | node B | | node C | | | | | | | +----------+ +-----+----+ +-----+----+ | | +-----v----+ +-----v----+ | | | | | node D | | node E +-------+ |......

IPFS 去中心化数据结构(三)

本文翻译自 IPFS 社区教程 ProtoSchool。ProtoSchool 是一个可以交互式学习 IPFS 编程的网站,涉及代码的部分大家可到该网站上直接运行测试! 本文接上篇 IPFS 去中心化数据结构(二)。 LESSION 4 - 内容标识符(CID) 之前我们通过可爱的照片举例让讨论不那么无趣,但实际上内容寻址可用于所有不同类型的文件和数据,JSON 对象、学术论文还有视频。要使加密哈希工作,我们需要知道我们正在使用的是哪种数据格式并使用适当的工具。 数据结构解码 CID 是内容寻址的特定方式。它是 IPFS 的规范之一,IPFS 是一种去中心化的 Web 协议,我们将在后面的教程中讨论,它具有非常广泛的含义。 CID 是包含加密哈希的单个标识符,并包含了编码解码器("codec")相关所需的信息。编解码器以某些格式编码和解码数据。 +-------+------------------------------+ | Codec | Multihash | +-------+------------------------------+ 许多格式和协议都是使用内容寻址的......

IPFS 去中心化数据结构(二)

本文翻译自 IPFS 社区教程 ProtoSchool。ProtoSchool 是一个可以交互式学习 IPFS 编程的网站,涉及代码的部分大家可到该网站上直接运行测试! 本文接上篇 IPFS 去中心化数据结构(一)。 LESSION 3 - 通过加密哈希进行内容寻址 正如我们之前说的,中心化的 Web 依赖于中央机构来托管我们的数据,并使用 URL 作为地址来进行访问。但位置寻址不是唯一的选择。在去中心化的 Web 上,我们可以托管彼此的数据,并且通过一种特殊的链接方式让我们彼此间访问数据更可信和安全。 加密哈希 加密哈希是去中心化数据结构中最重要的工具函数。它打开了新链接形式的大门,我们称之为内容寻址,这样我们才能在没有中央机构的去中心化环境中链接数据。 哈希可以用于任何大小的数据,并为该数据返回单个固定大小的“哈希值”。 哈希值是一个看起来像 gobbledygook 的字符串,你可以将其视为数据的名称。它可能是这样的: zdpuAsHkamdCQgrDrNSwJVgjMkQWoLxdrccxV6qe9htipNein 说实话,由内容衍生的名字目前对人类来说并不友好(beagle.....

IPFS 去中心化数据结构(一)

本文翻译自 IPFS 社区教程 ProtoSchool。ProtoSchool 是一个可以交互式学习 IPFS 编程的网站,涉及代码的部分大家可到该网站上直接运行测试! 去中心化的(Decentralized) Web 依赖于其独特的数据结构以及链接策略。让我们来一起学习一下哈希(hashing)、内容寻址(content addressing)、有向无环图(DAG) 以及默克尔树(Merkle Trees)! LESSION 1 - 数据结构 在进入具体代码之前,让我们先花点时间看看去中心化 Web 的概念。课程 1 暂时不会涉及代码,让你可以可以更快熟悉一些关键术语和概念。 让我们开始吧! 数据结构 无论你是否是程序员,你每天都被数据结构所包围。列表、词典和目录都有助于我们组织信息并考虑各种数据之间的关系。 数据结构 - 维基: 在计算机科学中,数据结构是一种数据组织,管理和存储格式,可以实现高效的访问和修改。 更确切地说,数据结构是数据值的集合,描述它们之间的关系,以及可以应用于数据的功能或操作。 在编程中,数据结构无处不在。将数据组织成变量以便在程序中使用它们的方式涉及数.......

创业的第二个春天

如果你是第一次看这个系列的文章,可从第一篇创业的第一个春天看起。 一年过去了,计划没有变化快,而变化就是没有变化。 暂停小圆桌项目 “小圆桌”是一款面向企业的 SaaS 社区服务,之前的计划是 6 月份上线。陆续开发了一些后,我们决定暂停继续开发了。暂停开发的主要原因是我们对预期市场的不确定,或者说缺乏信心。 为了验证市场,我们开始提供 Sym 商业版云服务。因为对于客户来说并不关心云服务是如何搭建运维的,客户只关心提供的服务效果。所以我们决定先提供 Sym 商业版云服务来验证市场,如果有一定数量的企业选择云服务版的社区,那就可以说明面向企业的 SaaS 社区是有市场的,那时候再重新启动小圆桌项目。 很多成功的商业是预先判断市场、超前时代的。可惜我没有那样的能力和实力,只能就眼目前的情况来做出一些短期选择。如果我和 V 还在上班而不是自己创业,小圆桌作为一个 side project 的话是绝对要去实现上线的,因为我觉得真的值得一试。 暂停对个人出售 Sym 商业版 之前 Sym 商业版是对个人出售的,并且价格仅是对企业售价的 5 折。直到上个月我发现了一件令我非常沮丧的事情,就是有.....
小而美的 Java 博客系统 Solo
Golang 在线 IDE Wide
黑客与画家的社区 Sym
浏览次数: 3379360
文章总数: 401
评论总数: 1,855
RSS
翻译
开始使用