mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-25 23:11:02 +08:00
Merge remote-tracking branch 'LCTT/master'
This commit is contained in:
commit
3af3040dd6
99
published/20191223 10 articles to learn Linux your way.md
Normal file
99
published/20191223 10 articles to learn Linux your way.md
Normal file
@ -0,0 +1,99 @@
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "messon007"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-12035-1.html"
|
||||
[#]: subject: "10 articles to learn Linux your way"
|
||||
[#]: via: "https://opensource.com/article/19/12/learn-linux"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
|
||||
10 篇关于 Linux 的好文章
|
||||
=======
|
||||
|
||||
> 2019 年对于 Linux 来说是个好年份,让我们一起来回顾一下这十篇关于 Linux 的好文章。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202003/25/115447rrjfuufccumf0oz6.jpg)
|
||||
|
||||
2019 年对于 Linux 来说是个好年份,显然这里的 “Linux” 一词有更多含义: 内核? 桌面? 或是生态? 在此次回顾年度 Linux 好文中,我在选择十大好文时有意采取了更开放的视角。下面就是十大好文(无先后次序之分)。
|
||||
|
||||
### 《Linux 权限入门指南》
|
||||
|
||||
Bryant Son 的《[Linux 权限入门指南][2]》向新用户介绍了文件权限的概念,通过图形和图表的方式来说明每个要点。通常很难以视觉的方式来解释纯粹基于文本的概念,而本文则对可视方式学习的人非常友好。 Bryant 在讲述时也很专注主题。关于文件权限的任何阐述都可能引出几个相关主题(例如所有权和访问控制列表等),但是本文致力于解释一件事并很好地解释它。
|
||||
|
||||
### 《为什么我从 Mac 换到了 Linux》
|
||||
|
||||
Matthew Broberg 在《[为什么我从 Mac 换到了 Linux][3]》中清楚而客观的介绍了他从 MacOS 切换到 Linux 的经历。通常切换平台是很困难的,因此记录决定切换的背后考虑非常重要。我认为 Matt 的文章带有几个目的,但对我来说最重要的两个目的是:通过解答他的问题并提供潜在的解决方案,他请 Linux 社区的人们来支持他;这对于其他正在考虑采用 Linux 的人来说是一个很好的参考。
|
||||
|
||||
### 《在 Linux 上定位 WiFi 速度慢的问题》
|
||||
|
||||
《[在 Linux 上定位 WiFi 速度慢的问题][4]》这篇文章中,David Clinton 对每个人都可能遇到的问题进行了分析,并提供了怎么样一步步解决的思路。这是“偶然的 Linux”技巧的一个很好的例子,但它不仅可以帮助经常遇到问题的人,而且可以向非 Linux 用户展示如何在其他平台上进行问题定位。
|
||||
|
||||
### 《一个非技术人员对 GNOME 项目使用 GitLab 的感受》
|
||||
|
||||
Molly de Blanc 所写的《[一个非技术人员对 GNOME 项目使用 GitLab 的感受][5]》深层次地揭示了开源界的一个典范(GNOME 桌面)如何使用开源界的另一个典范(Git)进行开发。听到一个开放源代码项目对于任何需要做的事情默认为开放源代码解决方案,这总是让我感到振奋。无论如何,这种情况并不常见,然而对于 GNOME 来说,这是项目本身的重要且受欢迎的部分。
|
||||
|
||||
### 《详解 Linux 中的虚拟文件系统》
|
||||
|
||||
Alison Chaiken 在《[详解 Linux 中的虚拟文件系统][6]》中巧妙地解释了对许多用户来说都很难理解的东西。理解文件系统是什么、虚拟文件系统和真实的文件系统是一回事,但从定义上讲,*虚拟的*其实并不是真正的文件系统。Linux 以一种普通用户也能从中受益的方式提供了它们,Alison 的文章以一种易于理解的方式对其进行了阐述。另外,Alison 在文章的后半部分更深入地介绍了如何使用 `bcc` 脚本查看她刚刚讲的虚拟文件系统的相关内容。
|
||||
|
||||
### 《理解文件路径并学会使用它们》
|
||||
|
||||
我认为《[理解文件路径并学会使用它们][7]》很重要,因为这是大多数用户(在任何平台上)似乎都没有学过的概念。这是一个奇怪的现象,因为现在比以往任何时候,人们都越来越多地看到*文件路徑*:几乎所有的互联网网址都包含一个文件路径,该路径告诉你你在域中的确切位置。我常常在想为什么计算机教育不是从互联网开始的,互联网是目前最熟悉的应用程序,并且可以说是使用最频繁的超级计算机,完全可以用它来解释我们每天使用的设备。(我想如果这些设备运行 Linux 会有所帮助,但是我们正在努力。)
|
||||
|
||||
### 《Linux 下的进程间通信:共享存储》
|
||||
|
||||
Marty Kalin 的《[Linux 下的进程间通信:共享存储][8]》从 Linux 的开发者视角解释了 IPC 以及如何在代码中使用它。虽然我只是列入了这篇文章,不过它实际上是一个三篇文章的系列,而它是同类文章中阐述的最好的。很少有文档能够解释 Linux 怎样处理 IPC,更不用说 IPC 是什么,为什么它很重要,或者在编程时该如何使用它。通常这是你在大学读书时关注的话题。现在,你可以在这里阅读所有内容。
|
||||
|
||||
### 《在 Linux 上用 strace 来理解系统调用》
|
||||
|
||||
Gaurav Kamathe 的《[在 Linux 上用 strace 来理解系统调用][9]》具有很强的技术性,我希望我所见过的有关 `strace` 的每次会议演讲都是如此。这是对一个复杂但非常有用的命令的清晰演示。令我惊讶的是,我读了本文才发现自己一直使用的命令不是这个命令,而是 `ltrace`(可以用来查看命令调用了哪些函数)。本文包含了丰富的信息,是开发人员和测试人员的快捷参考手册。
|
||||
|
||||
### 《Linux 桌面发展旅程》
|
||||
|
||||
Jim Hall 的《[Linux 桌面发展旅程][10]》是对 Linux 桌面历史的一次视觉之旅。从 [TWM][11] 开始,经历了 [FVWM][12]、[GNOME][13]、[KDE][14] 等薪火相传。如果你是 Linux 的新手,那么这将是一个出自那个年代的人的有趣的历史课(有截图可以证明这一点)。如果你已经使用 Linux 多年,那么这肯定会唤醒你的记忆。最后,可以肯定的是:仍然可以找到 20 年前屏幕快照的人都是神一样的数据档案管理员。
|
||||
|
||||
### 《用 Linux 创建你自己的视频流服务器》
|
||||
|
||||
Aaron J. Prisk 的 《[用 Linux 创建你自己的视频流服务器][15]》消除了大多数人对我们视为理所当然的服务的误解。由于 YouTube 和 Twitch 之类服务的存在,许多人认为这是向世界广播视频的唯一方式。当然,人们过去常常以为 Windows 和 Mac 是计算机的唯一入口,值得庆幸的是,最终证明这是严重的误解。在本文中,Aaron 建立了一个视频流服务器,甚至还顺便讨论了一下 [OBS][16],以便你可以创建视频。这是一个有趣的周末项目还是新职业的开始?你自己决定。
|
||||
|
||||
### 《塑造 Linux 历史的 10 个时刻》
|
||||
|
||||
Alan Formy-Duval 撰写的《[塑造 Linux 历史的 10 个时刻][17]》试图完成一项艰巨的任务,即从 Linux 的历史中选出 10 件有代表性的事情。当然,这是很难的,因为有如此多重要的时刻,所以我想看看 Alan 是如何通过自己的经历来选择它。例如,什么时候开始意识到 Linux 必然可以发展下去?—— 当 Alan 意识到他维护的所有系统都在运行 Linux 时。用这种方式来解释历史是很美的,因为每个人的重要时刻都会有所不同。 关于 Linux 没有权威性列表,关于 Linux 的文章也没有,关于开源也没有。你可以创建你自己的列表,也可以使你自己成为列表的一部分。
|
||||
|
||||
(LCTT 译注:这里推荐了 11 篇,我数了好几遍,没眼花……)
|
||||
|
||||
### 你想从何学起?
|
||||
|
||||
你还想知道 Linux 的什么内容?请在评论区告诉我们或来文讲述你的 Linux 经验。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/12/learn-linux
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[messon007](https://github.com/messon007)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_Penguin_Image_520x292_12324207_0714_mm_v1a.png?itok=p7cWyQv9 "Penguins gathered together in the Artic"
|
||||
[2]: https://linux.cn/article-11056-1.html
|
||||
[3]: https://linux.cn/article-11586-1.html
|
||||
[4]: http://opensource.com/article/19/4/troubleshooting-wifi-linux
|
||||
[5]: https://linux.cn/article-11806-1.html
|
||||
[6]: https://linux.cn/article-10884-1.html
|
||||
[7]: https://opensource.com/article/19/8/understanding-file-paths-linux
|
||||
[8]: https://linux.cn/article-10826-1.html
|
||||
[9]: https://linux.cn/article-11545-1.html
|
||||
[10]: https://opensource.com/article/19/8/how-linux-desktop-grown
|
||||
[11]: https://github.com/freedesktop/twm
|
||||
[12]: http://www.fvwm.org/
|
||||
[13]: http://gnome.org
|
||||
[14]: http://kde.org
|
||||
[15]: https://opensource.com/article/19/1/basic-live-video-streaming-server
|
||||
[16]: https://opensource.com/life/15/12/real-time-linux-video-editing-with-obs-studio
|
||||
[17]: https://opensource.com/article/19/4/top-moments-linux-history
|
||||
[18]: https://opensource.com/how-submit-article
|
@ -0,0 +1,61 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (hkurj)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-12034-1.html)
|
||||
[#]: subject: (2020 Will Be a Year of Hindsight for SD-WAN)
|
||||
[#]: via: (https://www.networkworld.com/article/3531315/2020-will-be-a-year-of-hindsight-for-sd-wan.html)
|
||||
[#]: author: (Zeus Kerravala https://www.networkworld.com/author/Zeus-Kerravala/)
|
||||
|
||||
2020 年将是 SD-WAN 的回顾之年
|
||||
======
|
||||
|
||||
![](https://images.idgesg.net/images/article/2020/03/istock-1127447341-100834720-large.jpg)
|
||||
|
||||
对于软件定义的广域网(SD-WAN),“过去看起来困难的选择,知道了这些选择的结果后,现在看起来就很清晰了” 这一说法再合适不过了。总结过去的几年:云计算和数字化转型促使公司重新评估传统的 WAN 技术,该技术不再能够满足其不断增长的业务需求。从那时起,SD-WAN 成为一种有前途的新技术。
|
||||
|
||||
SD-WAN 旨在解决物理设备的流量管理问题,并支持从云进行基于软件的配置。许多最初的 SD-WAN 部署都因希望取代昂贵的多协议标签交换 (MPLS) 而得到推动。公司希望它可以神奇地解决他们所有的网络问题。但是在实践中,基本的 SD-WAN 解决方案远没有实现这一愿景。
|
||||
|
||||
快速发展到现在,围绕 SD-WAN 的炒作已经尘埃落定,并且早期的实施工作已经过去。现在是时候回顾一下我们在 2019 年学到的东西以及在 2020 年要改进的地方。所以,让我们开始吧。
|
||||
|
||||
### 1、这与节省成本无关
|
||||
|
||||
大多数公司选择 SD-WAN 作为 MPLS 的替代品,因为它可以降低 WAN 成本。但是,[节省的成本][1]会因 SD-WAN 的不同而异,因此不应将其用作部署该技术的主要驱动力。无论公司需要什么,公司都应该专注于提高网络敏捷性,例如实现更快的站点部署和减少配置时间。SD-WAN 的主要驱动力是使网络更高效。如果成功实现那么成本也会随之降低。
|
||||
|
||||
### 2、WAN 优化是必要的
|
||||
|
||||
说到效率,[WAN 优化][2]提高了应用程序和数据流量的性能。通过应用协议加速、重复数据消除、压缩和缓存等技术,WAN 优化可以增加带宽、减少延迟并减轻数据包丢失。最初的想法是 SD-WAN 可以完成对 WAN 优化的需求,但是我们现在知道某些应用程序需要更多的性能支持。这些技术相互补充,而不是相互替代。它们应该用来解决不同的问题。
|
||||
|
||||
### 3、安全性不应该事后考虑
|
||||
|
||||
SD-WAN 具有许多优点,其中之一就是使用宽带互联网快速发送企业应用程序流量。但是这种方法也带来了安全风险,因为它使用户及其本地网络暴露于不受信任的公共互联网中。从一开始,安全性就应该成为 SD-WAN 实施的一部分,而不是在事后。公司可以通过使用[安全的云托管][3]之类的服务,将安全性放在分支机构附近,从而实现所需的应用程序性能和保护。
|
||||
|
||||
### 4、可见性对于 SD-WAN 成功至关重要
|
||||
|
||||
在应用程序和数据流量中具有[可见性][4],这使网络管理不再需要猜测。最好的起点是部署前阶段,在此阶段,公司可以在实施 SD-WAN 之前评估其现有功能以及缺少的功能。可见性以日常监控和警报的形式在部署后继续发挥重要作用。了解网络中正在发生的情况的公司会更好地准备应对性能问题,并可以利用这些知识来避免将来出现问题。
|
||||
|
||||
### 5、无线广域网尚未准备就绪
|
||||
|
||||
SD-WAN 可通过包括宽带和 4G/LTE 无线在内的任何传输将用户连接到应用程序。这就是[移动互联][5]越来越多地集成到 SD-WAN 解决方案中的原因。尽管公司渴望将 4G 用作潜在的传输替代方案(尤其是在偏远地区),但由此带来的按使用付费 4G 服务成本却很高。此外,由于延迟和带宽限制,4G 可能会出现问题。最好的方法是等待服务提供商部署具有更好的价格选择的 5G。今年我们将看到 5G 的推出,并更加关注无线 SD-WAN。
|
||||
|
||||
请务必观看以下 SD-WAN 视频系列:[你应该知道的所有关于 SD-WAN 的知识][6]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.networkworld.com/article/3531315/2020-will-be-a-year-of-hindsight-for-sd-wan.html
|
||||
|
||||
作者:[Zeus Kerravala][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[hkurj](https://github.com/hkurj)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.networkworld.com/author/Zeus-Kerravala/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://blog.silver-peak.com/to-maximize-the-value-of-sd-wan-look-past-hardware-savings
|
||||
[2]: https://blog.silver-peak.com/sd-wan-vs-wan-optimization
|
||||
[3]: https://blog.silver-peak.com/sd-wans-enable-scalable-local-internet-breakout-but-pose-security-risk
|
||||
[4]: https://blog.silver-peak.com/know-the-true-business-drivers-for-sd-wan
|
||||
[5]: https://blog.silver-peak.com/mobility-and-sd-wan-part-1-sd-wan-with-4g-lte-is-a-reality
|
||||
[6]: https://www.silver-peak.com/everything-you-need-to-know-about-sd-wan
|
@ -1,5 +1,5 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
|
@ -1,5 +1,5 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
|
@ -1,87 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (caiichenr)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Why your Python code should be flat and sparse)
|
||||
[#]: via: (https://opensource.com/article/19/12/zen-python-flat-sparse)
|
||||
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
|
||||
|
||||
Why your Python code should be flat and sparse
|
||||
======
|
||||
This is part of a special series about the Zen of Python focusing on the
|
||||
fifth and sixth principles: flatness and sparseness.
|
||||
![Digital creative of a browser on the internet][1]
|
||||
|
||||
The [Zen of Python][2] is called that for a reason. It was never supposed to provide easy-to-follow guidelines for programming. The rules are specified tersely and are designed to engage the reader in deep thought.
|
||||
|
||||
In order to properly appreciate the Zen of Python, you must read it and then meditate upon the meanings. If the Zen was designed to be a set of clear rules, it would be a fault that it has rules that contradict each other. However, as a tool to help you meditate on the best solution, contradictions are powerful.
|
||||
|
||||
### Flat is better than nested.
|
||||
|
||||
Nowhere is the pressure to be "flat" more obvious than in Python's strong insistence on indentation. Other languages will often introduce an implementation that "cheats" on the nested structure by reducing indentation requirements. To appreciate this point, let's take a look at JavaScript.
|
||||
|
||||
JavaScript is natively async, which means that programmers write code in JavaScript using a lot of callbacks.
|
||||
|
||||
|
||||
```
|
||||
a(function(resultsFromA) {
|
||||
b(resultsFromA, function(resultsfromB) {
|
||||
c(resultsFromC, function(resultsFromC) {
|
||||
console.log(resultsFromC)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ignoring the code, observe the pattern and the way indentation leads to a right-most point. This distinctive "arrow" shape is tough on the eye to quickly walk through the code, so it's seen as undesirable and even nicknamed "callback hell." However, in JavaScript, it is possible to "cheat" and not have indentation reflect nesting.
|
||||
|
||||
|
||||
```
|
||||
a(function(resultsFromA) {
|
||||
b(resultsFromA,
|
||||
function(resultsfromB) {
|
||||
c(resultsFromC,
|
||||
function(resultsFromC) {
|
||||
console.log(resultsFromC)
|
||||
}}}
|
||||
```
|
||||
|
||||
Python affords no such options to cheat: every nesting level in the program must be reflected in the indentation level. So deep nesting in Python _looks_ deeply nested. That makes "callback hell" was a worse problem in Python than in JavaScript: nesting callbacks mean indenting with no options to "cheat" with braces.
|
||||
|
||||
This challenge, in combination with the Zen principle, has led to an elegant solution by a library I worked on. In the [Twisted][3] framework, we came up with the _deferred_ abstraction, which would later inspire the popular JavaScript _promise_ abstraction. In this way, Python's unwavering commitment to clear code forces Python developers to discover new, powerful abstractions.
|
||||
|
||||
|
||||
```
|
||||
future_value = future_result()
|
||||
future_value.addCallback(a)
|
||||
future_value.addCallback(b)
|
||||
future_value.addCallback(c)
|
||||
```
|
||||
|
||||
(This might look familiar to modern JavaScript programmers: Promises were heavily influenced by Twisted's deferreds.)
|
||||
|
||||
### Sparse is better than dense.
|
||||
|
||||
The easiest way to make something less dense is to introduce nesting. This habit is why the principle of sparseness follows the previous one: after we have reduced nesting as much as possible, we are often left with _dense_ code or data structures. Density, in this sense, is jamming too much information into a small amount of code, making it difficult to decipher when something goes wrong.
|
||||
|
||||
Reducing that denseness requires creative thinking, and there are no simple solutions. The Zen of Python does not offer simple solutions. All it offers are ways to find what can be improved in the code, without always giving guidance for "how."
|
||||
|
||||
Take a walk. Take a shower. Smell the flowers. Sit in a lotus position and think hard, until finally, inspiration strikes. When you are finally enlightened, it is time to write the code.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/12/zen-python-flat-sparse
|
||||
|
||||
作者:[Moshe Zadka][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/moshez
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_web_internet_website.png?itok=g5B_Bw62 (Digital creative of a browser on the internet)
|
||||
[2]: https://www.python.org/dev/peps/pep-0020/
|
||||
[3]: https://twistedmatrix.com/trac/
|
@ -1,110 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (4 Markdown tools for the Linux command line)
|
||||
[#]: via: (https://opensource.com/article/20/3/markdown-apps-linux-command-line)
|
||||
[#]: author: (Scott Nesbitt https://opensource.com/users/scottnesbitt)
|
||||
|
||||
4 Markdown tools for the Linux command line
|
||||
======
|
||||
Command-line Markdown tools are fast, powerful, and flexible. Here are
|
||||
four utilities to try.
|
||||
![A person working.][1]
|
||||
|
||||
When it comes to working with files formatted with [Markdown][2], command-line tools rule the roost. They're light, fast, powerful, and flexible, and most of them follow the Unix philosophy of doing one thing well.
|
||||
|
||||
Take a look at four utilities that can help you work more efficiently with Markdown files at the command line.
|
||||
|
||||
### mdless
|
||||
|
||||
If you've hung around the Linux command line for a while, you're probably familiar with a text-file viewer called [less][3]. Sure, you can use less to view Markdown files—but the result is a tad dull. How can you view Markdown files with a bit of pizzazz in a terminal window? By using [mdless][4].
|
||||
|
||||
![mdless][5]
|
||||
|
||||
You can move around using the arrow keys on your keyboard, and mdless packs quite a good search function.
|
||||
|
||||
Not only does mdless display text, but it also renders formatting like headings, bold, and italics. It can also display tables and do syntax highlighting of code blocks. You can also [customize][6] the look and feel of mdless by creating one or more theme files.
|
||||
|
||||
### Markdown lint tool
|
||||
|
||||
When you're typing quickly, you make mistakes. If you miss a bit of formatting when using Markdown (or any other markup language), it can cause problems when you convert your file to another format.
|
||||
|
||||
Coders often use tools called _linters_ to check for correct syntax. You can do the same for Markdown using the [Markdown lint tool][7].
|
||||
|
||||
When you run this tool over a file that's formatted with Markdown, it checks the formatting against a [set of rules][8]. Those rules govern the structure of a document, including the order of header levels, incorrect indentation and spacing, problems with code blocks, the existence of HTML in a file, and more.
|
||||
|
||||
![Markdown lint tool][9]
|
||||
|
||||
The rules can be a bit strict. But running the Markdown lint tool over a file before converting it to another format can prevent the grief that comes from bad or inconsistent formatting.
|
||||
|
||||
### mdmerge
|
||||
|
||||
Combining files of any kind can be a pain. Take, for example, an eBook I'm pulling together. It's a collection of essays that were first published in my [weekly email letter][10]. Those essays were in individual files, and being the masochist that I am, I combined them in a messy, manual way.
|
||||
|
||||
I wish I'd known about [mdmerge][11] before I started that project. It would have saved me a lot of time and energy.
|
||||
|
||||
mdmerge, as you've probably guessed from its name, combines two or more Markdown files into a single file. You don't need to type the names of the files at the command line. Instead, you can add them to a file called **book.txt** and use that as an input file for mdmerge.
|
||||
|
||||
That's not all mdmerge can do. You can add a reference to another document—either one formatted with Markdown or a piece of source code—and pull it into your main document. That enables you to create [master documents][12] that you can tailor to specific audiences.
|
||||
|
||||
mdmerge isn't one of those utilities you'll use all the time. When you need it, you'll be glad it's on your hard drive.
|
||||
|
||||
### bashblog
|
||||
|
||||
[bashblog][13] isn't strictly a tool for working with Markdown. It takes files that are formatted using Markdown and uses them to build a simple blog or website. Think of bashblog as a [static site generator][14], but one that doesn't have a bunch of fragile dependencies. Just about everything you need is in a shell script weighing just under 50KB.
|
||||
|
||||
To use bashblog, all you need is a Markdown processor installed on your computer. From there, you edit the shell script to add information about your blog—for example, its title, your name, your social media links, and the like. Then run the script. A new post opens in your default text editor. Start typing.
|
||||
|
||||
After you save a post, you can publish it or save it as a draft. If you choose to publish the post, bashblog generates your blog, posts and all, as a set of HTML files that you can upload to a web server.
|
||||
|
||||
Out of the box, your blog is bland but serviceable. You can edit the site's CSS file to give it a look and feel all your own.
|
||||
|
||||
![bashblog][15]
|
||||
|
||||
### What about Pandoc?
|
||||
|
||||
Sure, Pandoc is a very powerful tool for converting files formatted with Markdown to other markup languages. But there's more to working with Markdown at the command line than Pandoc.
|
||||
|
||||
If you need a Pandoc fix, check out these articles that we've published on Opensource.com:
|
||||
|
||||
* [Convert files at the command line with Pandoc][16]
|
||||
* [Turn your book into a website and an ePub using Pandoc][17]
|
||||
* [How to use Pandoc to produce a research paper][18]
|
||||
* [Convert Markdown files to word processor docs using Pandoc][19]
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/20/3/markdown-apps-linux-command-line
|
||||
|
||||
作者:[Scott Nesbitt][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/scottnesbitt
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003784_02_os.comcareers_os_rh2x.png?itok=jbRfXinl (A person working.)
|
||||
[2]: https://opensource.com/article/19/9/introduction-markdown
|
||||
[3]: https://opensource.com/article/18/4/using-less-view-text-files-command-line
|
||||
[4]: https://github.com/ttscoff/mdless
|
||||
[5]: https://opensource.com/sites/default/files/uploads/mdless.png (mdless)
|
||||
[6]: https://github.com/ttscoff/mdless#customization
|
||||
[7]: https://github.com/markdownlint/markdownlint
|
||||
[8]: https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
|
||||
[9]: https://opensource.com/sites/default/files/uploads/mdl.png (Markdown lint tool)
|
||||
[10]: https://buttondown.email/weeklymusings
|
||||
[11]: https://github.com/JeNeSuisPasDave/MarkdownTools
|
||||
[12]: https://help.libreoffice.org/6.2/en-US/text/swriter/guide/globaldoc.html
|
||||
[13]: https://github.com/cfenollosa/bashblog
|
||||
[14]: https://en.wikipedia.org/wiki/Web_template_system#Static_site_generators
|
||||
[15]: https://opensource.com/sites/default/files/uploads/bashblog.png (bashblog)
|
||||
[16]: https://opensource.com/article/18/9/intro-pandoc
|
||||
[17]: https://opensource.com/article/18/10/book-to-website-epub-using-pandoc
|
||||
[18]: https://opensource.com/article/18/9/pandoc-research-paper
|
||||
[19]: https://opensource.com/article/19/5/convert-markdown-to-word-pandoc
|
@ -1,5 +1,5 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: translator: (tinyeyeser )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
|
@ -1,63 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (hkurj)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (2020 Will Be a Year of Hindsight for SD-WAN)
|
||||
[#]: via: (https://www.networkworld.com/article/3531315/2020-will-be-a-year-of-hindsight-for-sd-wan.html)
|
||||
[#]: author: (Zeus Kerravala https://www.networkworld.com/author/Zeus-Kerravala/)
|
||||
|
||||
2020年将会着眼于SD-WAN
|
||||
======
|
||||
|
||||
对于软件定义的广域网(SD-WAN),“过去看起来困难的选择,知道了这些选择的结果后,现在看起来就很清晰了” 这一说法再合适不过了。总结过去的几年:云计算和数字化转型促使公司重新评估传统的WAN技术,该技术不再能够满足其不断增长的业务需求。从那时起,SD-WAN成为一种有前途的新技术。
|
||||
|
||||
SD-WAN旨在解决物理设备的流量管理问题,并支持从云进行基于软件的配置。替换昂贵的多协议标签交换(MPLS)的愿望推动了许多最初的SD-WAN部署。公司希望它可以神奇地解决他们所有的网络问题。但是在实践中,基本的SD-WAN解决方案远没有实现这一愿景。
|
||||
|
||||
快速发展到现在,围绕SD-WAN的炒作已经尘埃落定,并且早期的实施工作已经过去。现在是时候回顾一下我们在2019年学到的东西以及在2020年要改进的地方。所以,让我们开始吧。
|
||||
|
||||
|
||||
### **1\. 这与节省成本无关**
|
||||
|
||||
大多数公司选择SD-WAN作为MPLS的替代品,因为它可以降低WAN成本。但是,[节省的成本] [1]会随SD-WAN的不同而异,因此不应将其用作部署该技术的主要驱动力。无论公司需要什么,公司都应该专注于提高网络敏捷性,例如实现更快的站点部署和减少配置时间。 SD-WAN的主要驱动力是使网络更高效。如果成功实现那么成本也会随之降低。
|
||||
|
||||
|
||||
### **2\. WAN优化是必要的**
|
||||
|
||||
说到效率,[WAN优化] [2]提高了应用程序和数据流量的性能。通过应用协议加速,重复数据删除,压缩和缓存等技术,WAN优化可以增加带宽,减少等待时间并减轻数据包丢失。最初的想法是SD-WAN可以完成对WAN优化的需求,但是我们现在知道某些应用程序需要额外的性能。这些技术相互补充,而不是相互替代。它们应该用来解决不同的问题。
|
||||
|
||||
|
||||
### **3\. 安全性不应该事后考虑。**
|
||||
|
||||
SD-WAN具有许多优点,其中之一就是使用宽带互联网快速发送企业应用程序流量。但是这种方法也带来了安全风险,因为它使用户及其本地网络暴露于不受信任的公共互联网中。从一开始,安全性就应该成为SD-WAN实施的一部分,而不是在事后。公司可以通过使用[安全的云托管] [3]之类的服务,将安全性放在分支机构附近,从而实现所需的应用程序性能和保护。
|
||||
|
||||
|
||||
### **4\. 可见性对于SD-WAN成功至关重要**
|
||||
|
||||
在应用程序和数据流量中具有[可见性] [4],这使网络管理不再需要猜测。最好的起点是部署前阶段,在此阶段,公司可以评估其现有功能以及在实施SD-WAN之前缺少的功能。可见的日常监视和警报形式显示在部署后继续发挥重要作用。了解网络中正在发生什么情况的公司会更好地准备应对性能问题,并可以利用这些知识来避免将来出现问题。
|
||||
|
||||
### **5\. 无线广域网尚未准备就绪**
|
||||
|
||||
SD-WAN可通过任何传输将用户连接到应用程序,包括宽带和4G / LTE(Long Term Evolution)无线。这就是[移动互联] [5]越来越多地集成到SD-WAN解决方案中的原因。尽管公司渴望将4G用作潜在的传输替代方案(尤其是在偏远地区),但按使用付费4G服务所产生的成本却很高。此外,由于延迟和带宽限制,4G可能会出现问题。最好的方法是等待服务提供商以更好的价格选择部署5G。今年将是我们看到5G推出并更加关注无线SD-WAN的一年。
|
||||
|
||||
请务必观看以下SD-WAN视频系列:[你应该知道的所有关于SD-WAN的知识] [6]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.networkworld.com/article/3531315/2020-will-be-a-year-of-hindsight-for-sd-wan.html
|
||||
|
||||
作者:[Zeus Kerravala][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/hkurj)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.networkworld.com/author/Zeus-Kerravala/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://blog.silver-peak.com/to-maximize-the-value-of-sd-wan-look-past-hardware-savings
|
||||
[2]: https://blog.silver-peak.com/sd-wan-vs-wan-optimization
|
||||
[3]: https://blog.silver-peak.com/sd-wans-enable-scalable-local-internet-breakout-but-pose-security-risk
|
||||
[4]: https://blog.silver-peak.com/know-the-true-business-drivers-for-sd-wan
|
||||
[5]: https://blog.silver-peak.com/mobility-and-sd-wan-part-1-sd-wan-with-4g-lte-is-a-reality
|
||||
[6]: https://www.silver-peak.com/everything-you-need-to-know-about-sd-wan
|
@ -1,96 +0,0 @@
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "messon007"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: subject: "10 articles to learn Linux your way"
|
||||
[#]: via: "https://opensource.com/article/19/12/learn-linux"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
|
||||
2019年关于Linux的10大好文
|
||||
=======
|
||||
|
||||
2019年对于Linux来说是个好年份,一起来回顾一下2019年opensource.com上关于Linux的十大好文。
|
||||
![Penguins gathered together in the Artic][1]
|
||||
|
||||
2019年,"Linux"一词有了更多含义: 内核? 桌面? 或是生态? 在此次回顾年度Linux好文中,我在选择十大好文时有意采取了更开放的视角。下面就是十大好文(无先后次序之分)。
|
||||
|
||||
### Linux权限初学者指南
|
||||
|
||||
Bryant Son的[_Linux权限初学者指南_][2]通过图和表的方式向新用户介绍了文件权限的概念。 通常很难通过可视的方式来解释纯粹以文本为基础的概念,本文则对可视学习者非常友好。 Bryant在讲述时也很聚焦。关于文件权限的任何阐述都可能引出几个相关主题(例如所有权和访问控制列表等),但是本文致力于解释一件事并很好地解释它。
|
||||
|
||||
### 为什么我从Mac切换到了Linux
|
||||
|
||||
Matthew Broberg在[_为什么我从Mac切换到了Linux_][3]中清楚而客观的介绍了他从MacOS切换到Linux的经历。 通常切换平台是很困难的,因此记录决定切换的背后考虑非常重要。我认为Matt的文章有几个目的,但对我来说最重要的两个目的是:他邀请Linux社区通过解答他的问题并提供潜在的解决方案来支持他;对于其他正在考虑采用Linux的人来说是一个很好的参考。
|
||||
|
||||
### 在Linux上定位WiFi速度慢的问题
|
||||
|
||||
在[_在Linux上定位WiFi速度慢的问题_][4]中,David Clinton对所有平台上都可能遇到的问题进行了分析,并提供了怎么样一步步解决的思路。 这是“偶然的Linux”技巧的一个很好的例子,但它不仅可以帮助经常遇到问题的人,而且可以向非Linux用户展示如何在其他平台上进行问题定位。
|
||||
|
||||
### GNOME是如何使用Git的
|
||||
|
||||
Molly de Blanc所写的[_GNOME是如何使用Git的_][5]深层次地揭示了开源界的一个典范(GNOME桌面)如何使用开源界的另一个典范(Git)进行开发。 听到一个开源项目无论在哪方面都能满足一个开源解决方案的需求,且成为默认选择,这总是让我感到振奋。无论你信不信,这种情况并不常见,然而对于GNOME来说,这是项目本身的重要且受欢迎的部分。
|
||||
|
||||
### Linux的虚拟文件系统:为什么需要它们以及其运行机制
|
||||
|
||||
Alison Chaiken在[_Linux的虚拟文件系统: 为什么需要它们以及其运行机制_][6]中巧妙地解释了对许多用户来说都很难理解的东西。理解文件系统是什么,做什么是一回事,但从定义上讲,_虚拟的_并不是真正的文件系统。Linux以一种普通用户也能从中受益的方式提供了它们,Alison的文章以一种易于理解的方式对其进行了阐述。另外,Alison在文章的后半部分更深入地介绍了如何使用bcc脚本查看她讲的VFS相关内容。
|
||||
|
||||
### 理解文件路径并学会使用它们
|
||||
|
||||
我认为完成[_理解文件路径并学会使用它们_][7]很重要,因为这是大多数用户(在任何平台上)似乎都没有学过的概念。 这是一个奇怪的现象,因为现在比以往任何时候,人们都越来越多地看到_文件路徑_:几乎所有的互联网网址都包含一个文件路径,该路径告诉您您在域中的确切位置。互联网是目前最熟悉的应用程序,并且可以说是使用最频繁的超级计算机。我常常在想为什么计算机教育不是从互联网开始的,完全可以用它来解释我们每天使用的设备。(我想如果这些设备运行Linux会有所帮助,但是我们正在努力。)
|
||||
|
||||
### Linux的进程间通信
|
||||
|
||||
Marty Kalin的[_Linux的进程间通信:共享存储_][8]从Linux的开发者视角解释了IPC以及如何在代码中使用它。 我之所以喜欢这篇文章是因为它实际上是一个三部分的系列,但这是同类文章中最好的阐述。很少有文档能够解释Linux怎样处理IPC,更不用说IPC是什么,为什么它很重要,或者在编程时该如何使用它。通常这是您在大学读书时关注的话题。 现在,您可以在这里阅读所有内容。
|
||||
|
||||
### 通过strace来理解Linux的系统调用
|
||||
|
||||
Gaurav Kamathe的[_通过strace来理解Linux的系统调用_][9]具有很强的技术性,我希望我所见过的有关**strace**的每次会议演讲都是如此。 这是对一个复杂但非常有用的命令的清晰演示。令我惊讶的是,我读了本文才发现自己一直使用的命令不是系统调用命令,而是**ltrace**(可以查看命令调用了哪些函数)。本文包含了丰富的信息,是开发人员和测试人员的快捷参考手册。
|
||||
|
||||
### Linux桌面是如何发展起来的
|
||||
|
||||
Jim Hall的[_Linux桌面是如何发展起来的_][10]是对Linux桌面历史的一次视觉之旅。从[TWM][11]开始,经历了[FVWM][12],[GNOME][13],[KDE][14]等。 如果您是Linux的新手,那么这将是一个出自那个年代人的有趣的历史课(有截图可以证明这一点)。 如果您已经使用Linux多年,那么这肯定会唤醒您的记忆。 最后,可以肯定的是:仍然可以找到20年前屏幕快照的人都是神一样的数据档案管理员。
|
||||
|
||||
### 用Linux创建您自己的视频流服务器
|
||||
|
||||
AaronJ. Prisk的[_用Linux创建您自己的视频流服务器_][15]消除了大多数人对我们习以为常的服务的误解。 由于YouTube和Twitch之类服务的存在,许多人认为这是向世界广播视频的唯一方式。当然,人们过去常常以为Windows和Mac是计算机的唯一入口,值得庆幸的是,最终证明这是严重的误解。 在本文中,Aaron建立了一个视频流服务器,而且讲述了[OBS][16]的使用,以便您可以创建视频。这是一个有趣的周末项目还是新职业的开始? 你自己决定。
|
||||
|
||||
### 塑造Linux历史的10个时刻
|
||||
|
||||
Alan Formy-Duval撰写的[_塑造Linux历史的10个时刻_][17]试图完成一项艰巨的任务,即从Linux的历史中选出10件有代表性的事情。当然,这是很难的,因为有如此多重要的时刻,所以我喜欢看Alan如何通过自己的经历来选择它。 例如,什么时候开始意识到Linux必然可以发展下去? 当Alan意识到他维护的所有系统都在运行Linux。用这种方式来解释历史是很美的,因为每个人的重要时刻都会有所不同。 没有关于Linux的权威性列表,也没有关于Linux的文章,也没有关于开源的列表。 您创建您自己的列表,使您自己成为它的一部分。
|
||||
|
||||
### 你想从何学起?
|
||||
|
||||
还想知道Linux的什么内容?请在评论区告诉我们或者向Opensource.com来文讲述您的Linux经验。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/12/learn-linux
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[messon007](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_Penguin_Image_520x292_12324207_0714_mm_v1a.png?itok=p7cWyQv9 "Penguins gathered together in the Artic"
|
||||
[2]: https://opensource.com/article/19/6/understanding-linux-permissions
|
||||
[3]: https://opensource.com/article/19/10/why-switch-mac-linux
|
||||
[4]: http://opensource.com/article/19/4/troubleshooting-wifi-linux
|
||||
[5]: https://opensource.com/article/19/10/how-gnome-uses-git
|
||||
[6]: https://opensource.com/article/19/3/virtual-filesystems-linux
|
||||
[7]: https://opensource.com/article/19/8/understanding-file-paths-linux
|
||||
[8]: https://opensource.com/article/19/4/interprocess-communication-linux-storage
|
||||
[9]: https://opensource.com/article/19/2/linux-backup-solutions
|
||||
[10]: https://opensource.com/article/19/8/how-linux-desktop-grown
|
||||
[11]: https://github.com/freedesktop/twm
|
||||
[12]: http://www.fvwm.org/
|
||||
[13]: http://gnome.org
|
||||
[14]: http://kde.org
|
||||
[15]: https://opensource.com/article/19/1/basic-live-video-streaming-server
|
||||
[16]: https://opensource.com/life/15/12/real-time-linux-video-editing-with-obs-studio
|
||||
[17]: https://opensource.com/article/19/4/top-moments-linux-history
|
||||
[18]: https://opensource.com/how-submit-article
|
@ -0,0 +1,86 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (caiichenr)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Why your Python code should be flat and sparse)
|
||||
[#]: via: (https://opensource.com/article/19/12/zen-python-flat-sparse)
|
||||
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
|
||||
|
||||
为何你的 Python 代码应是扁平与稀疏的
|
||||
======
|
||||
本文是 Python 之禅特别系列当中的一篇,此篇着眼于其中第五与第六条原则:扁平与稀疏。
|
||||
![Digital creative of a browser on the internet][1]
|
||||
|
||||
[Python之禅][2] 得名如此,正是由于它那简明扼要的规则被设计出的意图在于让读者进行深入地思考,而绝不单是为编程提供一份易于遵守的指南。
|
||||
|
||||
读后不去三思其意,断然难以体会 Python 之禅的妙处。倘若 Python 之禅仅仅罗列出一组清晰的法则,那法则之间的矛盾只能算作一种错误。然而用作引导读者去为最优方案沉思的工具,矛盾却是绝佳的。
|
||||
|
||||
### 扁平胜过嵌套 Flat is better than nested.
|
||||
|
||||
迫于对缩进的强硬要求,Python 对“扁平化”的需求显然远超它者。其余编程语言为了缓解对缩进的需求,通常会在嵌套结构里加入一种“欺诈”的手段。用以说明此点,不妨一同看看JavaScript。
|
||||
|
||||
JavaScript 是原生异步的,这意味着程序员用 JavaScript 写的代码会用到大量的回调函数。
|
||||
|
||||
|
||||
```
|
||||
a(function(resultsFromA) {
|
||||
b(resultsFromA, function(resultsfromB) {
|
||||
c(resultsFromC, function(resultsFromC) {
|
||||
console.log(resultsFromC)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
忽略这段代码的具体内容,只去观察这段代码的形状与缩进带来极右点的方式。这种独特的“箭头”图形在我们扫看代码时格外扎眼,这种写法也因此被视作不可取,甚至得到了“回调地狱”的绰号。不过,在 JavaScript 中,这种反映嵌套关系的缩进可以通过“欺诈”来回避。
|
||||
|
||||
|
||||
```
|
||||
a(function(resultsFromA) {
|
||||
b(resultsFromA,
|
||||
function(resultsfromB) {
|
||||
c(resultsFromC,
|
||||
function(resultsFromC) {
|
||||
console.log(resultsFromC)
|
||||
}}}
|
||||
```
|
||||
|
||||
Python 并没有提供这种欺诈手段:每一级嵌套在代码中都如实的对应着一层缩进。因此,Python 深层的嵌套关系在_视觉_上也一定是深层嵌套的。这使得“回调地狱”的问题对于 Python 而言要比在 JavaScript 中严重得多:嵌套的回调函数必定带来缩进,而绝无使用花括号来“欺诈”的可能。
|
||||
|
||||
这项挑战与 Python 之禅的指导原则相结合后,在我参与的库中催生出了一个优雅的解决方案。我们在 [Twisted][3] 框架里提出了 _deferred_ 抽象,日后 JavaScript 中流行的 _promise_ 抽象亦是受其启发而生。正是由于 Python 对整洁代码的坚守,方能推动 Python 开发者去发掘新的,强力的抽象。
|
||||
|
||||
|
||||
```
|
||||
future_value = future_result()
|
||||
future_value.addCallback(a)
|
||||
future_value.addCallback(b)
|
||||
future_value.addCallback(c)
|
||||
```
|
||||
|
||||
(现代 JavaScript 程序员也许会觉得这段代码十分眼熟:Promises 着实受到了 Twisted 里 deferreds 抽象的深远影响。)
|
||||
|
||||
### 稀疏胜过密集 Sparse is better than dense.
|
||||
|
||||
最易降低代码密集程度的方法是引入嵌套。这种习惯也正是有关稀疏的原则要随着前一条提出的原因:在竭尽所能地降低代码密集性之后,我们往往会遗留下_密集_的代码或数据结构。此处的密集,是指塞进过量信息的小段代码,它们会导致错误发生后的解析变得困难。
|
||||
|
||||
这种密集性唯有通过创造性的思考方可改善,此外别无捷径。Python 之禅并不为我们提供简单的解决方案,它只会指明改善代码的方向,而非提供“如何”去做的向导。
|
||||
|
||||
起身走走,泡个热水澡,抑或是闻闻花香。盘坐冥思,直至灵感袭来。当你终于得到启发,便是动身写代码之时。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/12/zen-python-flat-sparse
|
||||
|
||||
作者:[Moshe Zadka][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[caiichenr](https://github.com/caiichenr)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/moshez
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_web_internet_website.png?itok=g5B_Bw62 (Digital creative of a browser on the internet)
|
||||
[2]: https://www.python.org/dev/peps/pep-0020/
|
||||
[3]: https://twistedmatrix.com/trac/
|
@ -0,0 +1,109 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (4 Markdown tools for the Linux command line)
|
||||
[#]: via: (https://opensource.com/article/20/3/markdown-apps-linux-command-line)
|
||||
[#]: author: (Scott Nesbitt https://opensource.com/users/scottnesbitt)
|
||||
|
||||
4 个 Linux 命令行下的 Markdown 工具
|
||||
======
|
||||
命令行 Markdown 工具快速、强大、灵活。以下是 4 个值得试一下的工具。
|
||||
![A person working.][1]
|
||||
|
||||
在处理 [Markdown][2] 格式的文件时,命令行工具会占据主导地位。它们轻巧、快速、强大、灵活,它们大多数都遵循 Unix 哲学只做好一件事。
|
||||
|
||||
看一下这四个程序,它们可以帮助你在命令行中更有效地处理 Markdown 文件。
|
||||
|
||||
### mdless
|
||||
|
||||
如果你使用过一段时间的 Linux 命令行,那么你可能对名为 [less][3] 的文本查看器很熟悉。当然,你可以使用 less 查看 Markdown 文件,但结果有点枯燥。如何在终端中查看 Markdown 文件效果更好一点?来使用 [mdless][4]。
|
||||
|
||||
![mdless][5]
|
||||
|
||||
你可以使用键盘上的箭头键四处移动,并且 mdless 提供了很好的搜索功能。
|
||||
|
||||
mdless 不仅会显示文本,而且还会渲染标题、粗体和斜体等格式。它还可以显示表格并语法高亮代码块。你还可以创建一个或多个主题文件来[定制][6] mdless 的外观。
|
||||
|
||||
### Markdown lint 工具
|
||||
|
||||
你在快速输入时会犯错误。如果你在使用 Markdown(或其他任何标记语言)时丢失了一些格式,那么在将文件转换为另一种格式时可能会有问题。
|
||||
|
||||
程序员通常使用名为 _linter_ 的工具来检查语法是否正确。你可以使用 [Markdown lint 工具][7]对 Markdown 执行相同的操作。
|
||||
|
||||
在你对 Markdown 文件运行该工具时,它会根据[规则集][8]检查格式。这些规则控制着文档的结构,包括标题级别的顺序、不正确的缩进和间距、代码块问题、文件中存在 HTML 等等。
|
||||
|
||||
![Markdown lint tool][9]
|
||||
|
||||
规则可能有点严格。但是,在将文件转换为其他格式之前对文件运行 Markdown lint 工具可以防止由于格式错误或不一致引起的麻烦。
|
||||
|
||||
### mdmerge
|
||||
|
||||
合并任何类型的文件可能会很痛苦。例如,我在整理一本电子书。它是一篇文章集,最初发布在我的[每周邮件][10]中。这些文章都放在单独的文件中,作为受虐狂,我以凌乱,手动的方式将它们组合在一起。
|
||||
|
||||
我希望在开始项目之前就了解了 [mdmerge][11]。这样我可以节省很多时间和精力。
|
||||
|
||||
mdmerge,你可能已经从名称中猜到了它的作用,它将两个或多个 Markdown 文件合并为一个文件。你无需在命令行中输入文件名。相反,你可以将它们添加到名为 book.txt 的文件中,并将其用作 mdmerge 的输入文件。
|
||||
|
||||
这并不是 mdmerge 能做的一切。你可以添加对另一个文档的引用(使用 Markdown 格式引用或一段源代码),然后将其放入主文档中。这样一来,你就可以创建针对特定受众定制的[主文档] [12]。
|
||||
|
||||
mdmerge 不会是你一直使用的程序之一。当你需要时,你会很高兴硬盘上有它。
|
||||
|
||||
### bashblog
|
||||
|
||||
[bashblog][13] 并不是严格上的 Markdown 工具。它获取 Markdown 文件,并使用它们来构建简单的博客或网站。你可以将 bashblog 视为[静态站点生成器][14],但是它没有很多脆弱的依赖关系。一切几乎都在一个不到 50KB 的 shell 脚本中。
|
||||
|
||||
要使用 bashblog,只需在计算机上安装 Markdown 处理器即可。在此,你可以编辑 Shell 脚本添加有关博客的信息,例如标题、名字、社交媒体链接等。然后运行脚本。之后会在默认文本编辑器中新建一篇文章。开始输入。
|
||||
|
||||
保存文章后,你可以发布它或将其另存为草稿。如果你选择发布文章,那么 bashblog 会将你的博客、文章和所有内容生成为一组 HTML 文件,你可以将它们上传到 Web 服务器。
|
||||
|
||||
它开箱即用,你的博客会平淡无奇,但可以使用。你可以根据自己喜好编辑站点的 CSS 文件来改变外观。
|
||||
|
||||
![bashblog][15]
|
||||
|
||||
### Pandoc 如何?
|
||||
|
||||
当然,Panddoc 是一个非常强大的工具,可以将 Markdown 文件转换为其他标记语言。但是,在命令行上使用 Markdown 要比 Pandoc 多。
|
||||
|
||||
如果你需要 Pandoc 修复,请查看我们在 Opensource.com 上发布的文章:
|
||||
|
||||
* [使用 Pandoc 在命令行中转换文件][16]
|
||||
* [使用 Pandoc 将你的书变成网站和 ePub] [17]
|
||||
* [如何使用 Pandoc 生成论文] [18]
|
||||
* [使用 Pandoc 将 Markdown 文件转换为 word 文档] [19]
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/20/3/markdown-apps-linux-command-line
|
||||
|
||||
作者:[Scott Nesbitt][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/scottnesbitt
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003784_02_os.comcareers_os_rh2x.png?itok=jbRfXinl (A person working.)
|
||||
[2]: https://opensource.com/article/19/9/introduction-markdown
|
||||
[3]: https://opensource.com/article/18/4/using-less-view-text-files-command-line
|
||||
[4]: https://github.com/ttscoff/mdless
|
||||
[5]: https://opensource.com/sites/default/files/uploads/mdless.png (mdless)
|
||||
[6]: https://github.com/ttscoff/mdless#customization
|
||||
[7]: https://github.com/markdownlint/markdownlint
|
||||
[8]: https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
|
||||
[9]: https://opensource.com/sites/default/files/uploads/mdl.png (Markdown lint tool)
|
||||
[10]: https://buttondown.email/weeklymusings
|
||||
[11]: https://github.com/JeNeSuisPasDave/MarkdownTools
|
||||
[12]: https://help.libreoffice.org/6.2/en-US/text/swriter/guide/globaldoc.html
|
||||
[13]: https://github.com/cfenollosa/bashblog
|
||||
[14]: https://en.wikipedia.org/wiki/Web_template_system#Static_site_generators
|
||||
[15]: https://opensource.com/sites/default/files/uploads/bashblog.png (bashblog)
|
||||
[16]: https://opensource.com/article/18/9/intro-pandoc
|
||||
[17]: https://opensource.com/article/18/10/book-to-website-epub-using-pandoc
|
||||
[18]: https://opensource.com/article/18/9/pandoc-research-paper
|
||||
[19]: https://opensource.com/article/19/5/convert-markdown-to-word-pandoc
|
Loading…
Reference in New Issue
Block a user