diff --git a/translated/talk/20180306 Try, learn, modify- The new IT leader-s code.md b/published/20180306 Try, learn, modify- The new IT leader-s code.md
similarity index 72%
rename from translated/talk/20180306 Try, learn, modify- The new IT leader-s code.md
rename to published/20180306 Try, learn, modify- The new IT leader-s code.md
index ce65693a2b..7ecf178a6f 100644
--- a/translated/talk/20180306 Try, learn, modify- The new IT leader-s code.md
+++ b/published/20180306 Try, learn, modify- The new IT leader-s code.md
@@ -1,11 +1,13 @@
-尝试,学习,修改:新 IT 领导者的代码
+尝试、学习、修改:新 IT 领导者的代码
=====
+> 随着创新步伐的增加, 长期规划变得越来越困难。让我们重新思考一下我们对变化的反应方式。
+

-几乎每一天,新的技术发展都在威胁破坏,甚至是那些最复杂,最完善的商业计划。组织经常发现自己正在努力适应新的环境,这导致了他们对未来规划的转变。
+几乎每一天,新的技术发展都可能会动摇那些甚至最复杂、最完善的商业计划。组织经常发现自己需要不断努力适应新的环境,这导致了他们对未来规划的转变。
-根据 CompTIA 2017 年的[研究][1],目前只有 34% 的公司正在制定超过 12 个月的 IT 架构计划。从长期计划转变的一个原因是:商业环境变化如此之快,以至于几乎不可能进一步规划未来。[CIO.com 说道][1]“如果你的公司正视图制定一项将持续五到十年的计划,那就忘了它。”
+根据 CompTIA 2017 年的[研究][1],目前只有 34% 的公司正在制定超过 12 个月的 IT 架构计划。从长期计划转变的一个原因是:商业环境变化如此之快,以至于几乎不可能进一步规划未来。[CIO.com 说道][1],“如果你的公司正视图制定一项将持续五到十年的计划,那就忘了它。”
我听过来自世界各地无数客户和合作伙伴的类似声明:技术创新正以一种前所未有的速度发生着。
@@ -13,21 +15,21 @@
### 计划是怎么死的
-正如我在 Open Organization(开源组织)中写的那样,传统经营组织针对工业经济进行了优化。他们采用等级结构和严格规定的流程,以实现地位竞争优势。要取得成功,他们必须确定他们想要实现的战略地位。然后,他们必须制定并规划实现目标的计划,并以最有效的方式执行这些计划,通过协调活动和推动合规性。
+正如我在《开放式组织》中写的那样,传统经营组织针对工业经济进行了优化。他们采用等级结构和严格规定的流程,以实现地位竞争优势。要取得成功,他们必须确定他们想要实现的战略地位。然后,他们必须制定并规划实现目标的计划,并以最有效的方式执行这些计划,通过协调活动和推动合规性。
-管理层的职责是优化这一过程:计划,规定,执行。包括:让我们想象一个有竞争力的优势地位;让我们来配置组织以最终到达那里;然后让我们通过确保组织的所有方面都遵守规定来推动执行。这就是我所说的“机械管理”,对于不同时期来说它都是一个出色的解决方案。
+管理层的职责是优化这一过程:计划、规定、执行。包括:让我们想象一个有竞争力的优势地位;让我们来配置组织以最终达成目标;然后让我们通过确保组织的所有方面都遵守规定来推动执行。这就是我所说的“机械管理”,对于不同时期来说它都是一个出色的解决方案。
-在当今动荡不定的世界中,我们预测和定义战略位置的能力正在下降,因为变化的速度,新变量的引入速度正在加速。传统的,长期的,战略性规划和执行不像以前那么有效。
+在当今动荡不定的世界中,我们预测和定义战略位置的能力正在下降,因为变化的速度,新变量的引入速度正在加速。传统的、长期的、战略性规划和执行不像以前那么有效。
如果长期规划变得如此困难,那么规定必要的行为就更具有挑战性。并且衡量对计划的合规性几乎是不可能的。
-这一切都极大地影响了人们的工作方式。与过去传统经营组织中的工人不同,他们为自己能够重复行动而感到自豪,几乎没有变化和舒适的确定性 -- 今天的工人在充满模糊性的环境中运作。他们的工作需要更大的创造力,直觉和批判性判断 -- 有更大的要求是背离过去的“正常”,适应当今的新情况。
+这一切都极大地影响了人们的工作方式。与过去传统经营组织中的工人不同,他们为自己能够重复行动而感到自豪,几乎没有变化和舒适的确定性 —— 今天的工人在充满模糊性的环境中运作。他们的工作需要更大的创造力、直觉和批判性判断 —— 更多的需要背离过去的“常规”,以适应当今的新情况。
以这种新方式工作对于价值创造变得更加重要。我们的管理系统必须专注于构建结构,系统和流程,以帮助创建积极主动的工人,他们能够以快速和敏捷的方式进行创新和行动。
-我们需要提出一个不同的解决方案来优化组织,以适应不同的经济时代,从自下而上而不是自上而下开始。我们需要替换过去的三步骤 -- 计划,规定,执行,以一种更适应当今动荡天气的方法来取得成功 -- 尝试,学习,修改。
+我们需要提出一个不同的解决方案来优化组织,以适应不同的经济时代,从自下而上而不是自上而下开始。我们需要替换过去的三步骤 —— 计划、规定、执行,以一种更适应当今动荡天气的方法来取得成功 —— 尝试、学习、修改。
-### 尝试,学习,修改
+### 尝试、学习、修改
因为环境变化如此之快,而且几乎没有任何预警,并且因为我们需要采取的步骤不再提前计划,我们需要培养鼓励创造性尝试和错误的环境,而不是坚持对五年计划的忠诚。以下是以这种方式开始工作的一些暗示:
@@ -46,7 +48,7 @@ via: https://opensource.com/open-organization/18/3/try-learn-modify
作者:[Jim Whitehurst][a]
译者:[MjSeven](https://github.com/MjSeven)
-校对:[校对者ID](https://github.com/校对者ID)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/published/20180510 Splicing the Cloud Native Stack, One Floor at a Time.md b/published/20180510 Splicing the Cloud Native Stack, One Floor at a Time.md
new file mode 100644
index 0000000000..97ddf08956
--- /dev/null
+++ b/published/20180510 Splicing the Cloud Native Stack, One Floor at a Time.md
@@ -0,0 +1,223 @@
+逐层拼接云原生栈
+======
+
+> 看着我们在纽约的办公大楼,我们发现了一种观察不断变化的云原生领域的完美方式。
+
+在 Packet,我们的工作价值(基础设施自动化)是非常基础的。因此,我们花费大量的时间来研究我们之上所有生态系统中的参与者和趋势 —— 以及之下的极少数!
+
+当你在任何生态系统的汪洋大海中徜徉时,很容易困惑或迷失方向。我知道这是事实,因为当我去年进入 Packet 工作时,从 Bryn Mawr 获得的英语学位,并没有让我完全得到一个 [Kubernetes][Kubernetes] 的认证。:)
+
+由于它超快的演进和巨大的影响,云原生生态系统打破了先例。似乎每眨一次眼睛,之前全新的技术(更不用说所有相关的理念了)就变得有意义……或至少有趣了。和其他许多人一样,我依据无处不在的 [CNCF][CNCF] 的 “[云原生蓝图][1]” 作为我去了解这个空间的参考标准。尽管如此,如果有一个定义这个生态系统的元素,那它一定是贡献和引领它们的人。
+
+所以,在 12 月份一个很冷的下午,当我们走回办公室时,我们偶然发现了一个给投资人解释“云原生”的创新方式,当我们谈到从 [Aporeto][Aporeto] 中区分 [Cilium][Cilium] 的细微差别时,以及为什么从 [CoreDNS][CoreDNS] 和 [Spiffe][Spiffe] 到 [Digital Rebar][Digital Rebar] 和 [Fission][Fission] 的所有这些都这么有趣时,他的眼里充满了兴趣。
+
+在新世贸中心的影子里向我们位于 13 层的狭窄办公室望去,我们突然想到一个把我们带到那个神奇世界的好主意:为什么不把它画出来呢?(LCTT 译注:“rabbit hole” 有多种含义,此处采用“爱丽丝梦游仙境”中的“兔子洞”含义。)
+
+![][2]
+
+于是,我们开始了把云原生栈逐层拼接起来的旅程。让我们一起探索它,给你一个“仅限今日有效”的福利。(LCTT 译注:意即云原生领域变化很快,可能本文/本图中所述很快过时。)
+
+[查看高清大图][3](25Mb)或给我们发邮件索取副本。
+
+### 从最底层开始
+
+当我们开始下笔的时候,我们希望首先亮出的是我们每天都在打交道的那一部分:硬件,但我们知道那对用户却是基本上不可见的。就像任何投资于下一个伟大的(通常是私有的)东西的秘密实验室一样,我们认为地下室是其最好的地点。
+
+从大家公认的像 Intel、AMD 和华为(传言他们雇佣的工程师接近 80000 名)这样的巨头,到像 [Mellanox][Mellanox] 这样的细分市场参与者,硬件生态系统现在非常火。事实上,随着数十亿美元投入去攻克新的 offload(LCTT 译注:offload 泛指以前由软件及 CPU 来完成的工作,现在通过硬件来完成,以提升速度并降低 CPU 负载的做法)、GPU、定制协处理器,我们可能正在进入硬件的黄金时代。
+
+著名的软件先驱[艾伦·凯][Alan Kay](Alan Kay)在 25 年前说过:“真正认真对待软件的人应该自己创造硬件”。说得不错,Alan!
+
+### 云即资本
+
+就像我们的 CEO Zac Smith 多次跟我说的:一切都是钱的事。不仅要制造它,还要消费它!在云中,数十亿美元的投入才能让数据中心出现计算机,这样才能让开发者消费它。换句话说(根本没云,它只是别人的电脑而已):
+
+![][4]
+
+我们认为,对于“银行”(即能让云运转起来的借款人或投资人)来说最好的位置就是一楼。因此我们将大堂改造成银行家的咖啡馆,以便为所有的创业者提供幸运之轮。
+
+![][5]
+
+### 连通和动力
+
+如果金钱是润滑油,那么消耗大量燃料的引擎就是数据中心供应商和连接它们的网络。我们称他们为“连通”和“动力”。
+
+从像 [Equinix][Equinix] 这样处于核心地位的接入商的和像 [Vapor.io][Vapor.io] 这样的接入新贵,到 [Verizon][Verizon]、[Crown Castle][Crown Castle] 和其它接入商铺设在地下(或海底)的“管道”,这是我们所有的栈都依赖但很少有人能看到的一部分。
+
+因为我们花费大量的时间去研究数据中心和连通性,需要注意的一件事情是,这一部分的变化非常快,尤其是在 5G 正式商用时,某些负载开始不再那么依赖中心化的基础设施了。
+
+边缘计算即将到来!:-)
+
+![][6]
+
+### 嗨,它就是基础设施!
+
+居于“连通”和“动力”之上的这一层,我们爱称为“处理器层”。这是奇迹发生的地方 —— 我们将来自下层的创新和实物投资转变成一个 API 终端的某些东西。
+
+由于这是纽约的一个大楼,我们让在这里的云供应商处于纽约的中心。这就是为什么你会看到([Digital Ocean][Digital Ocean] 系的)鲨鱼 Sammy 和对 “meet me” 房间里面的 Google 标志的致意的原因了。
+
+正如你所见,这个场景是非常写实的。它是由多层机架堆叠起来的。尽管我们爱 EWR1 的设备经理(Michael Pedrazzini),我们努力去尽可能减少这种体力劳动。毕竟布线专业的博士学位是很难拿到的。
+
+![][7]
+
+### 供给
+
+再上一层,在基础设施层之上是供给层。这是我们最喜欢的地方之一,它以前被我们称为配置管理。但是现在到处都是一开始就是不可变基础设施和自动化:[Terraform][Terraform]、[Ansible][Ansible]、[Quay.io][Quay.io] 等等类似的东西。你可以看出软件是按它的方式来工作的,对吗?
+
+Kelsey Hightower 最近写道“呆在无聊的基础设施中是一个让人兴奋的时刻”,我不认为这说的是物理部分(虽然我们认为它非常让人兴奋),但是由于软件持续侵入到栈的所有层,那必将是一个疯狂的旅程。
+
+![][8]
+
+### 操作系统
+
+供应就绪后,我们来到操作系统层。在这里你可以看到我们打趣一些我们最喜欢的同事:注意上面 Brian Redbeard 那超众的瑜珈姿势。:)
+
+Packet 为客户提供了 11 种主要的操作系统可供选择,包括一些你在图中看到的:[Ubuntu][Ubuntu]、[CoreOS][CoreOS]、[FreeBSD][FreeBSD]、[Suse][Suse]、和各种 [Red Hat][Red Hat] 系的发行版。我们看到越来越多的人们在这一层上加入了他们自己的看法:从定制内核和用于不可变部署的黄金镜像(LCCT 注:golden image 指定型的镜像或模板,一般是经过一些定制,并做快照和版本控制,由此可拷贝出大量与此镜像一致的开发、测试或部署环境,也有人称作 master image),到像 [NixOS][NixOS] 和 [LinuxKit][LinuxKit] 这样的项目。
+
+![][9]
+
+### 运行时
+
+为了有趣些,我们将运行时放在了体育馆内,并为 CoreOS 赞助的 [rkt][rkt] 和 [Docker][Docker] 的容器化举行了一次比赛。而无论如何赢家都是 CNCF!
+
+我们认为快速演进的存储生态系统应该是一些可上锁的储物柜。关于存储部分有趣的地方在于许多的新玩家尝试去解决持久性的挑战问题,以及性能和灵活性问题。就像他们说的:存储很简单。
+
+![][10]
+
+### 编排
+
+在过去的这一年里,编排层全是 Kubernetes 了,因此我们选取了其中一位著名的布道者(Kelsey Hightower),并在这个古怪的会议场景中给他一个特写。在我们的团队中有一些 [Nomad][Nomad](LCTT 译注:一个管理机器集群并在集群上运行应用程序的工具)的忠实粉丝,并且如果抛开 Docker 和它的工具集的影响,就无从谈起云原生。
+
+虽然负载编排应用程序在我们栈中的地位非常高,我们看到的各种各样的证据表明,这些强大的工具开始去深入到栈中,以帮助用户利用 GPU 和其它特定硬件的优势。请继续关注 —— 我们正处于容器化革命的早期阶段!
+
+![][11]
+
+### 平台
+
+这是栈中我们喜欢的层之一,因为每个平台都有如此多的工具帮助用户去完成他们想要做的事情(顺便说一下,不是去运行容器,而是运行应用程序)。从 [Rancher][Rancher] 和 [Kontena][Kontena],到 [Tectonic][Tectonic] 和 [Redshift][Redshift] 都是像 [Cycle.io][Cycle.io] 和 [Flynn.io][Flynn.io] 一样是完全不同的方法 —— 我们看到这些项目如何以不同的方式为用户提供服务,总是激动不已。
+
+关键点:这些平台是帮助用户转化云原生生态系统中各种各样的快速变化的部分。很高兴能看到他们各自带来的东西!
+
+![][12]
+
+### 安全
+
+当说到安全时,今年真是很忙的一年!我们尝试去展示一些很著名的攻击,并说明随着工作负载变得更加分散和更加可迁移(当然,同时攻击者也变得更加智能),这些各式各样的工具是如何去帮助保护我们的。
+
+我们看到一个用于不可信环境(如 Aporeto)和低级安全(Cilium)的强大动作,以及尝试在网络级别上的像 [Tigera][Tigera] 这样的可信方法。不管你的方法如何,记住这一点:安全无止境。:0
+
+![][13]
+
+### 应用程序
+
+如何去表示海量的、无限的应用程序生态系统?在这个案例中,很容易:我们在纽约,选我们最喜欢的。;) 从 [Postgres][Postgres] “房间里的大象” 和 [Timescale][Timescale] 时钟,到鬼鬼祟祟的 [ScyllaDB][ScyllaDB] 垃圾桶和那个悠闲的 [Travis][Travis] 哥们 —— 我们把这个片子拼到一起很有趣。
+
+让我们感到很惊奇的一件事情是:很少有人注意到那个复印屁股的家伙。我想现在复印机已经不常见了吧?
+
+![][14]
+
+### 可观测性
+
+由于我们的工作负载开始到处移动,规模也越来越大,这里没有一件事情能够像一个非常好用的 [Grafana][Grafana] 仪表盘、或方便的 [Datadog][Datadog] 代理让人更加欣慰了。由于复杂度的提升,[SRE][SRE] 时代开始越来越多地依赖监控告警和其它智能事件去帮我们感知发生的事件,出现越来越多的自我修复的基础设施和应用程序。
+
+在未来的几个月或几年中,我们将看到什么样的面孔进入这一领域……或许是一些人工智能、区块链、机器学习支撑的仪表盘?:-)
+
+![][15]
+
+### 流量管理
+
+人们往往认为互联网“只是能工作而已”,但事实上,我们很惊讶于它居然能如此工作。我的意思是,就这些大规模的、不同的网络间的松散连接 —— 你不是在开玩笑吧?
+
+能够把所有的这些独立的网络拼接到一起的一个原因是流量管理、DNS 和类似的东西。随着规模越来越大,这些让互联网变得更快、更安全、同时更具弹性。我们尤其高兴的是看到像 [Fly.io][Fly.io] 和 [NS1][NS1] 这样的新贵与优秀的老牌玩家进行竞争,最后的结果是整个生态系统都得以提升。让竞争来的更激烈吧!
+
+![][16]
+
+### 用户
+
+如果没有非常棒的用户,技术栈还有什么用呢?确实,他们享受了大量的创新,但在云原生的世界里,他们所做的远不止消费这么简单:他们也创造并贡献了很多。从像 Kubernetes 这样的大量的贡献者到越来越多的(但同样重要)更多方面,而我们都是其中的非常棒的一份子。
+
+在我们屋顶上有许多悠闲的用户,比如 [Ticketmaster][Ticketmaster] 和[《纽约时报》][New York Times],而不仅仅是新贵:这些组织拥抱了部署和管理应用程序的方法的变革,并且他们的用户正在享受变革带来的回报。
+
+![][17]
+
+### 同样重要的,成熟的监管!
+
+在以前的生态系统中,基金会扮演了一个非常被动的“幕后”角色。而 CNCF 不是!他们的目标(构建一个健壮的云原生生态系统),勇立潮流之先 —— 他们不仅已迎头赶上还一路领先。
+
+从坚实的治理和经过深思熟虑的项目组,到提出像 CNCF 这样的蓝图,CNCF 横跨云 CI、Kubernetes 认证、和讲师团 —— CNCF 已不再是 “仅仅” 受欢迎的 [KubeCon + CloudNativeCon][KCCNC] 了。
+
+--------------------------------------------------------------------------------
+
+via: https://www.packet.net/blog/splicing-the-cloud-native-stack/
+
+作者:[Zoe Allen][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[qhwdw](https://github.com/qhwdw)
+校对:[wxy](https://github.com/wxy), [pityonline](https://github.com/pityonline)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.packet.net/about/zoe-allen/
+[1]: https://landscape.cncf.io/landscape=cloud
+[2]: https://assets.packet.net/media/images/PIFg-30.vesey.street.ny.jpg
+[3]: https://www.dropbox.com/s/ujxk3mw6qyhmway/Packet_Cloud_Native_Building_Stack.jpg?dl=0
+[4]: https://assets.packet.net/media/images/3vVx-there.is.no.cloud.jpg
+[5]: https://assets.packet.net/media/images/X0b9-the.bank.jpg
+[6]: https://assets.packet.net/media/images/2Etm-ping.and.power.jpg
+[7]: https://assets.packet.net/media/images/C800-infrastructure.jpg
+[8]: https://assets.packet.net/media/images/0V4O-provisioning.jpg
+[9]: https://assets.packet.net/media/images/eMYp-operating.system.jpg
+[10]: https://assets.packet.net/media/images/9BII-run.time.jpg
+[11]: https://assets.packet.net/media/images/njak-orchestration.jpg
+[12]: https://assets.packet.net/media/images/1QUS-platforms.jpg
+[13]: https://assets.packet.net/media/images/TeS9-security.jpg
+[14]: https://assets.packet.net/media/images/SFgF-apps.jpg
+[15]: https://assets.packet.net/media/images/SXoj-observability.jpg
+[16]: https://assets.packet.net/media/images/tKhf-traffic.management.jpg
+[17]: https://assets.packet.net/media/images/7cpe-users.jpg
+[Kubernetes]: https://kubernetes.io/
+[CNCF]: https://www.cncf.io/
+[Aporeto]: https://www.aporeto.com/
+[Cilium]: https://cilium.io/
+[CoreDNS]: https://coredns.io/
+[Spiffe]: https://spiffe.io/
+[Digital Rebar]: http://rebar.digital/
+[Fission]: https://fission.io/
+[Mellanox]: http://www.mellanox.com/
+[Alan Kay]: https://en.wikipedia.org/wiki/Alan_Kay
+[Equinix]: https://www.equinix.com/
+[Vapor.io]: https://www.vapor.io/
+[Verizon]: https://www.verizon.com/
+[Crown Castle]: http://www.crowncastle.com/
+[Digital Ocean]: https://www.digitalocean.com/
+[Terraform]: https://www.terraform.io/
+[Ansible]: https://www.ansible.com/
+[Quay.io]: https://quay.io/
+[Ubuntu]: https://www.ubuntu.com/
+[CoreOS]: https://coreos.com/
+[FreeBSD]: https://www.freebsd.org/
+[Suse]: https://www.suse.com/
+[Red Hat]: https://www.redhat.com/
+[NixOS]: https://nixos.org/
+[LinuxKit]: https://github.com/linuxkit/linuxkit
+[rkt]: https://coreos.com/rkt/
+[Docker]: https://www.docker.com/
+[Nomad]: https://www.nomadproject.io/
+[Rancher]: https://rancher.com/
+[Kontena]: https://kontena.io/
+[Tectonic]: https://coreos.com/tectonic/
+[Redshift]: https://aws.amazon.com/redshift/
+[Cycle.io]: https://cycle.io/
+[Flynn.io]: https://flynn.io/
+[Tigera]: https://www.tigera.io/
+[Postgres]: https://www.postgresql.org/
+[Timescale]: https://www.timescale.com/
+[ScyllaDB]: https://www.scylladb.com/
+[Travis]: https://travis-ci.com/
+[Grafana]: https://grafana.com/
+[Datadog]: https://www.datadoghq.com/
+[SRE]: https://en.wikipedia.org/wiki/Site_Reliability_Engineering
+[Fly.io]: https://fly.io/
+[NS1]: https://ns1.com/
+[Ticketmaster]: https://www.ticketmaster.com/
+[New York Times]: https://www.nytimes.com/
+[KCCNC]: https://www.cncf.io/community/kubecon-cloudnativecon-events/
diff --git a/published/20180607 Find If A Package Is Available For Your Linux Distribution.md b/published/20180607 Find If A Package Is Available For Your Linux Distribution.md
new file mode 100644
index 0000000000..1f1e33ac3e
--- /dev/null
+++ b/published/20180607 Find If A Package Is Available For Your Linux Distribution.md
@@ -0,0 +1,154 @@
+
+如何确定你的Linux发行版中有没有某个软件包
+======
+
+
+
+
+有时,你可能会想知道如何在你的 Linux 发行版上寻找一个特定的软件包。或者,你仅仅只是想知道安装在你的 Linux 上的软件包有什么版本。如果这就是你想知道的信息,你今天走运了。我正好知道一个小工具能帮你抓到上述信息,下面隆重推荐—— Whohas:这是一个命令行工具,它能一次查询好几个软件包列表,以检查的你软件包是否存在。目前,whohas 支持 Arch、Debian、Fedora、Gentoo、Mandriva、openSUSE、Slackware、Source Mage、Ubuntu、FreeBSD、NetBSD、OpenBSD(LCTT 译注:*BSD 不是 Linux)、Fink、MacPorts 和 Cygwin。使用这个小工具,软件包的维护者能轻而易举从别的 Linux 发行版里找到 ebuilds、 pkgbuilds 等等类似的包定义文件。
+
+Whohas 是用 Perl 语言开发的自由、开源的工具。
+
+### 在你的 Linux 中寻找一个特定的包
+
+#### 安装 Whohas
+
+Whohas 在 Debian、Ubuntu、Linux Mint 的默认软件仓库里提供。如果你正在使用某种基于 DEB 的系统,你可以用如下命令安装:
+
+```
+$ sudo apt-get install whohas
+```
+
+对基于 Arch 的系统,[AUR][1] 里就有提供 whohas。你能使用任何的 AUR 助手程序来安装。
+
+使用 [Packer][2]:
+
+```
+$ packer -S whohas
+```
+
+或使用[Trizen][3]:
+
+```
+$ trizen -S whohas
+```
+
+使用[Yay][4]:
+
+```
+$ yay -S whohas
+```
+
+使用 [Yaourt][5]:
+
+```
+$ yaourt -S whohas
+```
+
+在别的 Linux 发行版上,从[这里][6]下载源代码并手工编译安装。
+
+#### 使用方法
+
+Whohas 的主要目标是想让你知道:
+
+* 哪个 Linux 发布版提供了用户依赖的包。
+* 对于各个 Linux 发行版,指定的软件包是什么版本,或者在这个 Linux 发行版的各个不同版本上,指定的软件包是什么版本。
+
+让我们试试看上面的的功能,比如说,哪个 Linux 发行版里有 vim 这个软件?我们可以运行如下命令:
+
+```
+$ whohas vim
+```
+
+
+这个命令将会显示所有包含可安装的 vim 的 Linux 发行版的信息,包括包的大小,仓库地址和下载URL。
+
+![][8]
+
+你甚至可以通过管道将输出的结果按照发行版的字母排序,只需加入 `sort` 命令即可。
+
+```
+$ whohas vim | sort
+```
+
+请注意上述命令将会显示所有以 vim 开头的软件包,包括 vim-spell、vimcommander、vimpager 等等。你可以继续使用 Linux 的 `grep` 命令在 “vim” 的前后加上空格来缩小你的搜索范围,直到满意为止。
+
+```
+$ whohas vim | sort | grep " vim"
+$ whohas vim | sort | grep "vim "
+$ whohas vim | sort | grep " vim "
+```
+
+所有将空格放在包名字前面的搜索将会显示以包名字结尾的包。所有将空格放在包名字后面的搜索将会显示以包名字开头的包。前后都有空格将会严格匹配。
+
+又或者,你就使用 `--strict` 来严格限制结果。
+
+```
+$ whohas --strict vim
+```
+
+有时,你想知道一个包在不在一个特定的 Linux 发行版里。例如,你想知道 vim 是否在 Arch Linux 里,请运行:
+
+```
+$ whohas vim | grep "^Arch"
+```
+
+(LCTT译注:在结果里搜索以 Arch 开头的 Linux)
+
+Linux 发行版的命名缩写为:'archlinux'、'cygwin'、'debian'、'fedora'、 'fink'、'freebsd'、'gentoo'、'mandriva'、'macports'、'netbsd'、'openbsd'、'opensuse'、'slackware'、'sourcemage' 和 'ubuntu'。
+
+你也可以用 `-d` 选项来得到同样的结果。
+
+```
+$ whohas -d archlinux vim
+```
+
+这个命令将在仅仅 Arch Linux 发行版下搜索 vim 包。
+
+如果要在多个 Linux 发行版下搜索,如 'archlinux'、'ubuntu',请使用如下命令。
+
+```
+$ whohas -d archlinux,ubuntu vim
+```
+
+
+你甚至可以用 `whohas` 来查找哪个发行版有 whohas 包。
+
+```
+$ whohas whohas
+```
+
+更详细的信息,请参照手册。
+
+```
+$ man whohas
+```
+
+#### 最后的话
+
+当然,任何一个 Linux 发行版的包管理器都能轻松的在对应的软件仓库里找到自己管理的包。不过,whohas 帮你整合并比较了在不同的 Linux 发行版下指定的软件包信息,这样你能轻易的跨平台之间进行比较。试一下 whohas,你一定不会失望的。
+
+好了,今天就到这里吧,希望前面讲的对你有用,下次我还会带来更多好东西!!
+
+欧耶!
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/find-if-a-package-is-available-for-your-linux-distribution/
+
+作者:[SK][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[DavidChenLiang](https://github.com/davidchenliang)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.ostechnix.com/author/sk/
+[1]:https://aur.archlinux.org/packages/whohas/
+[2]:https://www.ostechnix.com/install-packer-arch-linux-2/
+[3]:https://www.ostechnix.com/trizen-lightweight-aur-package-manager-arch-based-systems/
+[4]:https://www.ostechnix.com/yay-found-yet-another-reliable-aur-helper/
+[5]:https://www.ostechnix.com/install-yaourt-arch-linux/
+[6]:http://www.philippwesche.org/200811/whohas/intro.html
+[7]:data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
+[8]:http://www.ostechnix.com/wp-content/uploads/2018/06/whohas-1.png
diff --git a/translated/talk/20180710 How I Fully Quit Google And You Can Too.md b/published/20180710 How I Fully Quit Google And You Can Too.md
similarity index 86%
rename from translated/talk/20180710 How I Fully Quit Google And You Can Too.md
rename to published/20180710 How I Fully Quit Google And You Can Too.md
index 24a49b81e4..cc4fcd03a0 100644
--- a/translated/talk/20180710 How I Fully Quit Google And You Can Too.md
+++ b/published/20180710 How I Fully Quit Google And You Can Too.md
@@ -1,11 +1,11 @@
逃离 Google,重获自由(与君共勉)
======
-原名:How I Fully Quit Google (And You Can, Too)
-
> 寻求挣脱科技巨头的一次开创性尝试
-在过去的六个月里,难以想象我到底经历了些什么。艰难的、时间密集的、启发性的探索,为的只是完全摒弃一家公司 —— Google(谷歌)—— 的产品。本该是件简简单单的任务,但真要去做,花费在研究和测试上的又何止几个小时。但我成功了。现在,我已经不需要 Google 了,作为西方世界中极其少数的群体中的一份子,不再使用世界上最有价值的两家科技公司的产品(是的,我也不用 [Facebook(脸书)][6])。
+
+
+在过去的六个月里,难以想象我到底经历了些什么。艰难的、耗时的、开创性的探索,为的只是完全摒弃一家公司 —— Google(谷歌)—— 的产品。本该是件简简单单的任务,但真要去做,花费在研究和测试上的又何止几个小时。但我成功了。现在,我已经不需要 Google 了,作为西方世界中极其少数的群体中的一份子,不再使用世界上最有价值的两家科技公司的产品(是的,我也不用 [Facebook(脸书)][6])。
本篇指南将向你展示我逃离 Google 生态的始末。以及根据本人的研究和个人需求,选择的替代方案。我不是技术方面的专家,或者说程序员,但作为记者,我的工作要求我对安全和隐私的问题保持警惕。
@@ -17,17 +17,17 @@
Google 很快就从仅提供检索服务转向提供其它服务,其中许多都是我欣然拥抱的服务。早在 2005 年,当时你们可能还只能[通过邀请][7]加入 Gmail 的时候,我就已经是早期使用者了。Gmail 采用了线程对话、归档、标签,毫无疑问是我使用过的最好的电子邮件服务。当 Google 在 2006 年推出其日历工具时,那种对操作的改进绝对是革命性的。针对不同日历使用不同的颜色进行编排、检索事件、以及发送可共享的邀请,操作极其简单。2007 年推出的 Google Docs 同样令人惊叹。在我的第一份全职工作期间,我还促成我们团队使用支持多人同时编辑的 Google 电子表格、文档和演示文稿来完成日常工作。
-和许多人样,我也是 Google 开疆拓土过程中的受害者。从搜索(引擎)到电子邮件、文档、分析、再到照片,许多其它服务都建立在彼此之上,相互勾连。Google 从一家发布实用产品的公司转变成诱困用户公司,与此同时将整个互联网转变为牟利和数据采集的机器。Google 在我们的数字生活中几乎无处不在,这种程度的存在远非其他公司可以比拟。与之相比使用其他科技巨头的产品想要抽身就相对容易。对于 Apple(苹果),你要么身处 iWorld 之中,要么是局外人。亚马逊亦是如此,甚至连 Facebook 也不过是拥有少数的几个平台,不用(Facebook)更多的是[心理挑战][8],实际上并没有多么困难。
+和许多人一样,我也是 Google 开疆拓土过程中的受害者。从搜索(引擎)到电子邮件、文档、分析、再到照片,许多其它服务都建立在彼此之上,相互勾连。Google 从一家发布实用产品的公司转变成诱困用户的公司,与此同时将整个互联网转变为牟利和数据采集的机器。Google 在我们的数字生活中几乎无处不在,这种程度的存在远非其他公司可以比拟。与之相比使用其他科技巨头的产品想要抽身就相对容易。对于 Apple(苹果),你要么身处 iWorld 之中,要么是局外人。亚马逊亦是如此,甚至连 Facebook 也不过是拥有少数的几个平台,不用(Facebook)更多的是[心理挑战][8],实际上并没有多么困难。
-然而,Google 无处不在。无论是笔记本电脑、智能手机或者平板电脑,我猜其中至少会有那么一个 Google 的应用程序。Google 就是搜索(引擎)、地图、电子邮件、浏览器和大多数智能手机操作系统的代名词。甚至还有些应用有赖于其提供的“[服务][9]”和分析,比方说 Uber 便需要采用 Google Maps 来运营其乘车服务。
+然而,Google 无处不在。无论是笔记本电脑、智能手机或者平板电脑,我猜其中至少会有那么一个 Google 的应用程序。Google 就是搜索(引擎)、地图、电子邮件、浏览器和大多数智能手机操作系统的代名词。甚至还有些应用有赖于其提供的“[服务][9]”和分析,比方说 Uber 便需要采用 Google 地图来运营其乘车服务。
Google 现在俨然已是许多语言中的单词,但彰显其超然全球统治地位的方面显然不止于此。可以说只要你不是极其注重个人隐私,那其庞大而成套的工具几乎没有多少众所周知或广泛使用的替代品。这恰好也是大家选择 Google 的原因,在很多方面能更好的替代现有的产品。但现在,使我们的难以割舍的主要原因其实是 Google 已经成为了默认选择,或者说由于其主导地位导致替代品无法对我们构成足够的吸引。
-事实上,替代方案是存在的,这些年自 Edward Snowden(爱德华·斯诺登)披露 Google 涉事 [Prism(棱镜)][10]以来,又陆续涌现了许多替代品。我从去年年底开始着手这个项目。经过六个月的研究、测评以及大量的尝试和失败,我终于找到了所有我正在使用的 Google 产品对应的注重个人隐私的替代品。令我感到吃惊的是,其中的一些替代品比 Google 的做的还要好。
+事实上,替代方案是存在的,这些年自爱德华·斯诺登披露 Google 涉事 [棱镜][10]以来,又陆续涌现了许多替代品。我从去年年底开始着手这个项目。经过六个月的研究、测评以及大量的尝试和失败,我终于找到了所有我正在使用的 Google 产品对应的注重个人隐私的替代品。令我感到吃惊的是,其中的一些替代品比 Google 的做的还要好。
### 一些注意事项
-过程中需要面临的几个挑战之一便是,大多数的替代方案,特别是那些注重隐私空间的开源替代方案,确实对用户不太友好。我不是技术人员,但是自己有一个网站,了解如何管理 Wordpress,可以排除一些基本的故障,但我用不来命令行,也做不来任何需要编码的事。
+这个过程中需要面临的几个挑战之一便是,大多数的替代方案,特别是那些注重隐私空间的开源替代方案,确实对用户不太友好。我不是技术人员,但是自己有一个网站,了解如何管理 Wordpress,可以排除一些基本的故障,但我用不来命令行,也做不来任何需要编码的事。
提供的这些替代方案中的大多数,即便不能完整替代 Google 产品的功能,但至少可以轻松上手。不过有些还是需要你有自己的 Web 主机或服务器的。
@@ -39,7 +39,7 @@ Google 现在俨然已是许多语言中的单词,但彰显其超然全球统
[DuckDuckGo][12] 和 [startpage][13] 都是以保护个人隐私为中心的搜索引擎,不收集任何搜索数据。我用这两个搜索引擎来负责之前用 Google 搜索的所有需求。
-其它的替代方案:实际上并不多,Google 坐拥全球 74% 的市场份额时,剩下的那些主要是因为中国的封锁。不过还有 Ask.com,以及 Bing……
+其它的替代方案:实际上并不多,Google 坐拥全球 74% 的市场份额时,剩下的那些主要是因为中国的原因。不过还有 Ask.com,以及 Bing……
#### Chrome
@@ -129,11 +129,11 @@ Google 现在俨然已是许多语言中的单词,但彰显其超然全球统
有些确实更好!Jitsi Meet 运行更顺畅,需要的带宽更少,并且比 Hangouts 跨平台支持好。Firefox 比 Chrome 更稳定,占用的内存更少。Fastmail 的日历具有更好的时区集成。
-还有些旗鼓相当。ProtonMail 具有 Gmail 的大部分功能,但缺少一些好用的集成,例如我之前使用的 Boomerang 邮件日程功能。还缺少联系人界面,但我正在使用 Nextcloud。说到 Nextcloud,它非常适合托管文件,联系人,还包含了一个漂亮的笔记工具(以及诸多其它插件)。但它没有 Google Docs 丰富的多人编辑功能。在我的预算中,还没有找到可行的替代方案。虽然还有 Collabora Office,但这需要升级我的服务器,这对我来说不能算切实可行。
+还有些旗鼓相当。ProtonMail 具有 Gmail 的大部分功能,但缺少一些好用的集成,例如我之前使用的 Boomerang 邮件日程功能。还缺少联系人界面,但我正在使用 Nextcloud。说到 Nextcloud,它非常适合托管文件、联系人,还包含了一个漂亮的笔记工具(以及诸多其它插件)。但它没有 Google Docs 丰富的多人编辑功能。在我的预算中,还没有找到可行的替代方案。虽然还有 Collabora Office,但这需要升级我的服务器,这对我来说不能算切实可行。
一些取决于位置。在一些国家(如印度尼西亚),MAPS.ME 实际上比 Google 地图更好用,而在另一些国家(包括美国)就差了许多。
-还有些要求用户牺牲一些特性或功能。Piwic 是一个穷人的 Google Analytics,缺乏前者的许多详细报告和搜索功能。DuckDuckGo 适用于一般搜索,但是在特定的搜索方面还存在问题,当我搜索非英文内容时,它和 startpage 时常都会检索失败。
+还有些要求用户牺牲一些特性或功能。Piwic 是一个穷人版的 Google Analytics,缺乏前者的许多详细报告和搜索功能。DuckDuckGo 适用于一般搜索,但是在特定的搜索方面还存在问题,当我搜索非英文内容时,它和 startpage 时常都会检索失败。
### 最后,我不再心念 Google
@@ -141,7 +141,7 @@ Google 现在俨然已是许多语言中的单词,但彰显其超然全球统
如果我们别无选择,只能使用 Google 的产品,那我们便失去了作为消费者的最后一丝力量。
-我希望 Google,Facebook,Apple 和其他科技巨头在对待用户时不要这么理所当然,不要试图强迫我们进入其无所不包的生态系统。我也期待新选手能够出现并与之竞争,就像以前一样,Google 的新搜索工具可以与当时的行业巨头 Altavista 和 Yahoo 竞争,或者说 Facebook 的社交网络能够与 MySpace 和 Friendster 竞争。Google 给出了更好的搜索方案,使互联网变得更加美好。有选择是个好事,可移植也是。
+我希望 Google、Facebook、Apple 和其他科技巨头在对待用户时不要这么理所当然,不要试图强迫我们进入其无所不包的生态系统。我也期待新选手能够出现并与之竞争,就像以前一样,Google 的新搜索工具可以与当时的行业巨头 Altavista 和 Yahoo 竞争,或者说 Facebook 的社交网络能够与 MySpace 和 Friendster 竞争。Google 给出了更好的搜索方案,使互联网变得更加美好。有选择是个好事,可移植也是。
如今,我们很少有人哪怕只是尝试其它产品,因为我们已经习惯了 Google。我们不再更改邮箱地址,因为这太难了。我们甚至不尝试使用 Facebook 以外的替代品,因为我们所有的朋友都在 Facebook 上。这些我明白。
diff --git a/translated/talk/20180730 Open Source Networking Jobs- A Hotbed of Innovation and Opportunities.md b/published/20180730 Open Source Networking Jobs- A Hotbed of Innovation and Opportunities.md
similarity index 63%
rename from translated/talk/20180730 Open Source Networking Jobs- A Hotbed of Innovation and Opportunities.md
rename to published/20180730 Open Source Networking Jobs- A Hotbed of Innovation and Opportunities.md
index 41a512d282..42f67043cd 100644
--- a/translated/talk/20180730 Open Source Networking Jobs- A Hotbed of Innovation and Opportunities.md
+++ b/published/20180730 Open Source Networking Jobs- A Hotbed of Innovation and Opportunities.md
@@ -1,25 +1,27 @@
-开源网络工作: 创新与机遇的温床
+开源网络方面的职位:创新与机遇的温床
======
+> 诸如容器、边缘计算这样的技术焦点领域大红大紫,对在这一领域能够整合、协作、创新的开发者和系统管理员们的需求在日益增进。
+

随着全球经济更加靠近数字化未来,每个垂直行业的公司和组织都在紧抓如何进一步在业务与运营上整合与部署技术。虽然 IT 企业在很大程度上遥遥领先,但是他们的经验与教训已经应用在了各行各业。尽管全国失业率为 4.1%,但整个科技专业人员的整体的失业率在 4 月份为 1.9%,开源工作的未来看起来尤其光明。我在开源网络领域工作,并且目睹着创新和机遇正在改变世界交流的方式。
-曾经是个发展缓慢的行业,现在由网络运营商、供应商、系统集成商和开发者所组成的网络生态系统正在采用开源软件,并且正在向商用硬件上运行的虚拟化和软件定义网络上转移。事实上,接近 70% 的全球移动用户由[低频网络][1]运营商成员所代表。该网络运营商成员致力于协调构成开放网络栈和相邻技术的项目。
+它曾经是个发展缓慢的行业,现在由网络运营商、供应商、系统集成商和开发者所组成的网络生态系统正在采用开源软件,并且正在向商用硬件上运行的虚拟化和软件定义网络上转移。事实上,接近 70% 的全球移动用户由[低频网络][1]运营商成员所占据。该网络运营商成员致力于协调构成开放网络栈和相邻技术的项目。
### 技能需求
这一领域的开发者和系统管理员采用云原生和 DevOps 的方法开发新的使用案例,应对最紧迫的行业挑战。诸如容器、边缘计算等焦点领域大红大紫,并且在这一领域能够整合、协作、创新的开发者和系统管理员们的需求在日益增进。
-开源软件与 Linux 使这一切成为可能,根据最近出版的[ 2018开源软件工作报告][2],高达 80% 的招聘经理寻找会 Linux 技能的应聘者,**而 46% 希望在网络领域招聘人才,可以说“网络技术”在他们的招聘决策中起到了至关重要的作用。**
+开源软件与 Linux 使这一切成为可能,根据最近出版的 [2018开源软件工作报告][2],高达 80% 的招聘经理寻找会 Linux 技能的应聘者,**而 46% 希望在网络领域招聘人才,可以说“网络技术”在他们的招聘决策中起到了至关重要的作用。**
-开发人员相当抢手,72% 的招聘经理都在找他们,其次是 DevOps 开发者(59%),工程师(57%)和系统管理员(49%)。报告同时指出,对容器技能需求的惊人的增长符合了我们在网络领域所见到的,即创建云本地虚拟功能(CNFs)和在[ XCI倡议 ][3]的 OPNFV 中持续集成/持续部署方法的增长。
+开发人员相当抢手,72% 的招聘经理都在找他们,其次是 DevOps 开发者(59%),工程师(57%)和系统管理员(49%)。报告同时指出,对容器技能需求的惊人的增长符合我们在网络领域所见到的,即云本地虚拟功能(CNF)的创建和持续集成/持续部署方式的激增,就如在 OPNFV 中的 [XCI 倡议][3] 一样。
### 开始吧
-对于求职者来说,好消息是有着大量的关于开源软件的内容,包括免费的[Linux 入门课程][4]。好的工作需要有多项证书,因此我鼓励你探索更多领域,去寻求培训的机会。计算机网络方面,在[OPNFV][5]上查看最新的培训课程或者是[ONAP][6]项目,也可以选择这门[开源网络技术简介][7]课程。
+对于求职者来说,好消息是有着大量的关于开源软件的内容,包括免费的 [Linux 入门课程][4]。好的工作需要有多项证书,因此我鼓励你探索更多领域,去寻求培训的机会。计算机网络方面,在 [OPNFV][5] 上查看最新的培训课程或者是 [ONAP][6] 项目,也可以选择这门[开源网络技术简介][7]课程。
-如果你还没有做好这些,下载 [2018开源软件工作报告][2] 以获得更多见解,在广阔的开放源码技术世界中规划你的课程,去寻找另一边等待你的令人兴奋的职业!
+如果你还没有做好这些,下载 [2018 开源软件工作报告][2] 以获得更多见解,在广阔的开放源码技术世界中规划你的课程,去寻找另一边等待你的令人兴奋的职业!
点击这里[下载完整的开源软件工作报告][8]并且[了解更多关于 Linux 的认证][9]。
@@ -29,8 +31,8 @@ via: https://www.linux.com/blog/os-jobs-report/2018/7/open-source-networking-job
作者:[Brandon Wick][a]
选题:[lujun9972](https://github.com/lujun9972)
-译者:[译者ID](https://github.com/LuuMing)
-校对:[校对者ID](https://github.com/校对者ID)
+译者:[LuuMing](https://github.com/LuuMing)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/translated/tech/20180810 Image creation applications for Fedora.md b/published/20180810 Image creation applications for Fedora.md
similarity index 70%
rename from translated/tech/20180810 Image creation applications for Fedora.md
rename to published/20180810 Image creation applications for Fedora.md
index 967e2eef01..113c367ba9 100644
--- a/translated/tech/20180810 Image creation applications for Fedora.md
+++ b/published/20180810 Image creation applications for Fedora.md
@@ -3,32 +3,32 @@ Fedora 下的图像创建程序

-感觉有创意吗?Fedora 有很多程序可以帮助你的创造力。从数字绘图、矢量到像素艺术,每个人都可以在这个周末得到创意。本文重点介绍了 Fedora 下创建很棒图像的程序。
+有了创意吗?Fedora 有很多程序可以帮助你的创造力。从数字绘图、矢量到像素艺术,每个人都可以在这个周末发挥创意。本文重点介绍了 Fedora 下创建很棒图像的程序。
### 矢量图形:Inkscape
-[Inkscape][1] 是一个众所周知受人喜爱的开源矢量图形编辑器。SVG 是 Inkscape 的主要文件格式,因此你所有的图形都可以伸缩!Inkscape 已存在多年,所以有一个坚实的社区和[大量的教程和其他资源][2]用于入门。
+[Inkscape][1] 是一个众所周知的、受人喜爱的开源矢量图形编辑器。SVG 是 Inkscape 的主要文件格式,因此你所有的图形都可以任意伸缩!Inkscape 已存在多年,所以有一个坚实的社区和用于入门的[大量教程和其他资源][2]。
作为矢量图形编辑器,Inkscape 更适合于简单的插图(例如简单的漫画风格)。然而,使用矢量模糊,一些艺术家创造了一些[令人惊奇的矢量图][3]。
![][4]
从 Fedora Workstation 中的软件应用安装 Inkscape,或在终端中使用以下命令:
+
```
sudo dnf install inkscape
-
```
### 数字绘图:Krita 和 Mypaint
-[Krita][5] 是一个流行的图像创建程序,用于数字绘图、光栅插图和纹理。此外,Krita 是一个活跃的项目,拥有一个充满活力的社区 - 所以[有很多教程用于入门] [6]。Krita 有多个画笔引擎,带弹出调色板的 UI,用于创建无缝图案的环绕模式、滤镜、图层等等。
+[Krita][5] 是一个流行的图像创建程序,用于数字绘图、光栅插图和纹理。此外,Krita 是一个活跃的项目,拥有一个充满活力的社区 —— 所以[有用于入门的很多教程][6]。Krita 有多个画笔引擎、带有弹出调色板的 UI、用于创建无缝图案的环绕模式、滤镜、图层等等。
![][7]
从 Fedora Workstation 中的软件应用安装 Krita,或在终端中使用以下命令:
+
```
sudo dnf install krita
-
```
[Mypaint][8] 是另一款适用于 Fedora 令人惊奇的数字绘图程序。像 Krita 一样,它有多个画笔和使用图层的能力。
@@ -36,14 +36,14 @@ sudo dnf install krita
![][9]
从 Fedora Workstation 中的软件应用安装 Mypaint,或在终端中使用以下命令:
+
```
sudo dnf install mypaint
-
```
### 像素艺术:Libresprite
-[Libresprite][10] 是一个专为创建像素艺术和像素动画而设计的程序。它支持一系列颜色模式并可导出为多种格式(包括动画 GIF)。此外,Libresprite 还有用于创建像素艺术的绘图工具:多边形工具、轮廓和着色工具。
+[Libresprite][10] 是一个专为创建像素艺术和像素动画而设计的程序。它支持一系列颜色模式,并可导出为多种格式(包括动画 GIF)。此外,Libresprite 还有用于创建像素艺术的绘图工具:多边形工具、轮廓和着色工具。
![][11]
@@ -57,7 +57,7 @@ via: https://fedoramagazine.org/image-creation-applications-fedora/
作者:[Ryan Lerch][a]
选题:[lujun9972](https://github.com/lujun9972)
译者:[geekpi](https://github.com/geekpi)
-校对:[校对者ID](https://github.com/校对者ID)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/published/20180815 How the L1 Terminal Fault vulnerability affects Linux systems.md b/published/20180815 How the L1 Terminal Fault vulnerability affects Linux systems.md
new file mode 100644
index 0000000000..54cad9f239
--- /dev/null
+++ b/published/20180815 How the L1 Terminal Fault vulnerability affects Linux systems.md
@@ -0,0 +1,69 @@
+L1 终端错误漏洞(L1TF)如何影响 Linux 系统
+======
+
+> L1 终端错误(L1TF)影响英特尔处理器和 Linux 操作系统。让我们了解一下这个漏洞是什么,以及 Linux 用户需要为它做点什么。
+
+
+
+昨天(LCTT 译注:本文发表于 2018/8/15)在英特尔、微软和红帽的安全建议中宣布,一个新发现的漏洞英特尔处理器(还有 Linux)的漏洞称为 L1TF 或 “L1 终端错误”,引起了 Linux 用户和管理员的注意。究竟什么是这个漏洞,谁应该担心它?
+
+### L1TF、 L1 Terminal Fault 和 Foreshadow
+
+处理器漏洞被称作 L1TF、L1 Terminal Fault 和 Foreshadow。研究人员在 1 月份发现了这个问题并向英特尔报告称其为 “Foreshadow”。它类似于过去发现的漏洞(例如 Spectre)。
+
+此漏洞是特定于英特尔的。其他处理器不受影响。与其他一些漏洞一样,它之所以存在,是因为设计时为了优化内核处理速度,但允许其他进程访问数据。
+
+**[另请阅读:[22 个必要的 Linux 安全命令][1]]**
+
+已为此问题分配了三个 CVE:
+
+ * CVE-2018-3615:英特尔软件保护扩展(英特尔 SGX)
+ * CVE-2018-3620:操作系统和系统管理模式(SMM)
+ * CVE-2018-3646:虚拟化的影响
+
+英特尔发言人就此问题发表了这一声明:
+
+> “L1 Terminal Fault 通过今年早些时候发布的微代码更新得到解决,再加上从今天开始提供的操作系统和虚拟机管理程序软件的相应更新。我们在网上提供了更多信息,并继续鼓励每个人更新操作系统,因为这是得到保护的最佳方式之一。我们要感谢 imec-DistriNet、KU Leuven、以色列理工学院,密歇根大学,阿德莱德大学和 Data61 的研究人员以及我们的行业合作伙伴,他们帮助我们识别和解决了这个问题。“
+
+### L1TF 会影响你的 Linux 系统吗?
+
+简短的回答是“可能不会”。如果你因为在今年 1 月爆出的 [Spectre 和 Meltdown 漏洞][2]修补过系统,那你应该是安全的。与 Spectre 和 Meltdown 一样,英特尔声称真实世界中还没有系统受到影响的报告或者检测到。他们还表示,这些变化不太可能在单个系统上产生明显的性能影响,但它们可能对使用虚拟化操作系统的数据中心产生大的影响。
+
+即使如此,仍然推荐频繁地打补丁。要检查你当前的内核版本,使用 `uname -r` 命令:
+
+```
+$ uname -r
+4.18.0-041800-generic
+```
+
+### 更多资源
+
+请查看如下资源以了解 L1TF 的更多细节,以及为什么会出现这个漏洞:
+
+- [L1TF explained in ~3 minutes (Red Hat)][5]
+- [L1TF explained in under 11 minutes (Red Hat)][6]
+- [Technical deep dive][7]
+- [Red Hat explanation of L1TF][8]
+- [Ubuntu updates for L1TF][9]
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3298157/linux/linux-and-l1tf.html
+
+作者:[Sandra Henry-Stocker][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
+[1]: https://www.networkworld.com/article/3272286/open-source-tools/22-essential-security-commands-for-linux.html
+[2]: https://www.networkworld.com/article/3245813/security/meltdown-and-spectre-exploits-cutting-through-the-fud.html
+[3]: https://www.facebook.com/NetworkWorld/
+[4]: https://www.linkedin.com/company/network-world
+[5]: https://www.youtube.com/watch?v=kBOsVt0iXE4&feature=youtu.be
+[6]: https://www.youtube.com/watch?v=kqg8_KH2OIQ
+[7]: https://www.redhat.com/en/blog/deeper-look-l1-terminal-fault-aka-foreshadow
+[8]: https://access.redhat.com/security/vulnerabilities/L1TF
+[9]: https://blog.ubuntu.com/2018/08/14/ubuntu-updates-for-l1-terminal-fault-vulnerabilities
diff --git a/translated/tech/20180819 How to define and use functions in Linux Shell Script.md b/published/20180819 How to define and use functions in Linux Shell Script.md
similarity index 98%
rename from translated/tech/20180819 How to define and use functions in Linux Shell Script.md
rename to published/20180819 How to define and use functions in Linux Shell Script.md
index 1c800018fa..daa4547134 100644
--- a/translated/tech/20180819 How to define and use functions in Linux Shell Script.md
+++ b/published/20180819 How to define and use functions in Linux Shell Script.md
@@ -106,7 +106,7 @@ function func_return_value {
}
```
-上面的函数向调用者返回 10。让我们执行这个函数:
+上面的函数向调用者返回 `10`。让我们执行这个函数:
```
$ func_return_value
@@ -119,7 +119,7 @@ $ echo "Value returned by function is: $?"
Value returned by function is: 10
```
-**提示**:在 Bash 中使用 `$?` 去获取函数的返回值
+**提示**:在 Bash 中使用 `$?` 去获取函数的返回值。
### 函数技巧
diff --git a/sources/talk/20180826 How to Install and Use FreeDOS on VirtualBox.md b/sources/talk/20180826 How to Install and Use FreeDOS on VirtualBox.md
new file mode 100644
index 0000000000..8ba7db5139
--- /dev/null
+++ b/sources/talk/20180826 How to Install and Use FreeDOS on VirtualBox.md
@@ -0,0 +1,154 @@
+How to Install and Use FreeDOS on VirtualBox
+======
+This step-by-step guide shows you how to install FreeDOS on VirtualBox in Linux.
+
+### Installing FreeDOS on VirtualBox in Linux
+
+
+
+In November of 2017, I [interviewed Jim Hall][1] about the history behind the [FreeDOS project][2]. Today, I’m going to tell you how to install and use FreeDOS. Please note: I will be using [VirtualBox][3] 5.2.14 on [Solus][4].
+
+Note: I used Solus as the host operating system for this tutorial because it is very easy to setup. One thing you should keep in mind is that Solus’ Software Center contains two versions of VirtualBox: `virtualbox` and `virtualbox-current`. Solus gives you the option to use the linux-lts kernel and the linux-current kernel. `virtualbox`is modified for linux-lts and `virtualbox-current` is for linux-current.
+
+#### Step 1 – Create New Virtual Machine
+
+![][5]
+
+Once you open VirtualBox, press the “New” button to create a new virtual machine. You can name it whatever you want, I just use “FreeDOS”. You can use the label to specify what version of FreeDOS you are installing. You also need to select the type and version of the operating system you will be installing. Select “Other” and “DOS”.
+
+#### Step 2 – Select Memory Size
+
+![][6]
+
+The next dialog box will ask you how much of the host computer’s memory you want to make available to FreeDOS. The default is 32MB. Don’t change it. Back in the day, this would be a huge amount of RAM for a DOS machine. If you need to, you can increase it later by right-clicking on the virtual machine you created for FreeDOS and selecting Settings -> System.
+
+![][7]
+
+#### Step 3 – Create Virtual Hard Disk
+
+![][8]
+
+Next, you will be asked to create a virtual hard drive where FreeDOS and its files will be stored. Since you haven’t created one yet, just click “Create”.
+
+The next dialog box will ask you what hard disk file type you want to use. This default (VirtualBox Disk Image) works just fine. Click “Next”.
+
+The next question you will encounter is how you want the virtual disk to act. Do you want it to start small and gradually grow to its full size as you create files and install programs? Then choose dynamically allocated. If you prefer that the virtual hard drive (vhd) is created at full size, then choose fixed size. Dynamically allocated is nice if you don’t plan to use the whole vhd or if you don’t have very much free space on your hard drive. (Keep in mind that while the size of a dynamically allocated vhd increases as you add files, it will not drop when you remove files.) I prefer dynamically allocated, but you can choose the option that serves your needs best and click “Next”.
+
+![][9]
+
+Now, you can choose the size and location of the vhd. 500 MB should be plenty of space. Remember most of the programs you will be using will be text-based, thus fairly small. Once you make your adjustments, click Create,
+
+#### Step 4 – Attach .iso file
+
+Before we continue, you will need to [download][10] the FreeDOS .iso file. You will need to choose the CDROM “standard” installer.
+
+![][11]
+
+Once the file has been downloaded, return to VirtualBox. Select your virtual machine and open the settings. You can do this by either right-clicking on the virtual machine and selecting “Settings” or highlight the virtual machine and click the “Settings” button.
+
+Now, click the “Storage” tab. Under “Storage Devices”, select the CD icon. (It should say “Empty” next to it.) In the “Attributes” panel on the right, click on the CD icon and select the location of the .iso file you just downloaded.
+
+Note: Typically, after you install an operating system on VirtualBox you can delete the original .iso file. Not with FreeDOS. You need the .iso file if you want to install applications via the FreeDOS package manager. I generally keep the ,iso file attached the virtual machine in case I want to install something. If you do that, you have to make sure that you tell FreeDOS you want to boot from the hard drive each time you boot it up because it defaults to the attached CD/iso. If you forget to attach the .iso, don’t worry. You can do so by selecting “Devices” on the top of your FreeDOS virtual machine window. The .iso files are listed under “Optical Drives”.
+
+#### Step 5 – Install FreeDOS
+
+![][12]
+
+Now that we’ve completed all of the preparations, let’s install FreeDOS.
+
+First, you need to be aware of a bug in the most recent version of VirtualBox. If you start the virtual machine that we just created and select “Install to harddisk” when the FreeDOS welcome screen appears, you will see an unending, scrolling mass of machine code. I’ve only run into this issue recently and it affects both the Linux and Windows versions of VirtualBox. (I know first hand.)
+
+To get around this, you need to make a simple edit. When you see the FreeDOS welcome screen, press Tab. (Make sure that the “Install to harddrive” option is selected.) Type the word `raw` after “fdboot.img” and hit Enter. The FreeDOS installer will then start.
+
+![][13]
+
+The first part of the installer will handle formatting your virtual drive. Once formatting is completed, the installer will reboot. When the FreeDOS welcome screen appears again, you will have to re-enter the `raw` comment you used earlier.
+
+Make sure that you select “Yes” on all of the questions in the installer. One important question that doesn’t have a “Yes” or “No” answer is: “What FreeDOS packages do you want to install?. The two options are “Base packages” or “Full installation”. Base packages are for those who want a DOS experience most like the original MS-DOS. The Full installation includes a bunch of tools and utilities to improve DOS.
+
+At the end of the installation, you will be given the option to reboot or stay on DOS. Select “reboot”.
+
+#### Step 6 – Setup Networking
+
+Unlike the original DOS, FreeDOS can access the internet. You can install new packages and update the ones already you have installed. In order to use networking, you need to install several applications in FreeDOS.
+
+![][14]
+
+First, boot into your newly created FreeDOS virtual machine. At the FreeDOS selection screen, select “Boot from System harddrive”.
+
+![][15]
+
+Now, to access the FreeDOS package manager, type `fdimples`. You can navigate around the package manager with the arrow keys and select categories or packages with the space bar. From the “Networking” category, you need to select `fdnet`. The FreeDOS Project also recommends installing `mtcp` and `wget`. Hit “Tab” several times until “OK” is selected and press “Enter”. Once the installation is complete, type `reboot` and hit enter. After the system reboots, boot to your system drive. If the network installation was successful, you will see several new messages at the terminal listing your network information.
+
+![][16]
+
+##### Note
+
+Sometimes the default VirtualBox setup doesn’t work. If that happens, close your FreeDOS VirtualBox window. Right-click your virtual machine from the main VirtualBox screen and select “Settings”. The default VirtualBox network setting is “NAT”. Change it to “Bridged Adapter” and retry installing the FreeDOS packages. It should work now.
+
+#### Step 7 – Basic Usage of FreeDOS
+
+##### Commons Commands
+
+Now that you have installed FreeDOS, let’s look at a few basic commands. If you have ever used the Command Prompt on Windows, you will be familiar with some of these commands.
+
+ * `DIR`– display the contents of the current directory
+ * `CD` – change the directory you are currently in
+ * `COPY OLD.TXT NEW.TXT`– copy files
+ * `TYPE TEST.TXT` – display content of file
+ * `DEL TEST.TXT` – delete file
+ * `XCOPY DIR NEWDIR` – copy directory and all of its contents
+ * `EDIT TEST.TXT`– edit a file
+ * `MKDIR NEWDIR` – create a new directory
+ * `CLS` – clear the screen
+
+
+
+You can find more basic DOS commands on the web or the [handy cheat sheet][17] created by Jim Hall.
+
+##### Running a Program
+
+Running program on FreeDos is fairly easy. When you install an application with the `fdimples` package manager, be sure to note where the .EXE file of the application is located. This is shown in the application’s details. To run the application, you generally need to navigate to the application folder and type the application’s name.
+
+For example, FreeDOS has an editor named `FED` that you can install. After installing it, all you need to do is navigate to `C:\FED` and type `FED`.
+
+Sometimes a program, such as Pico, is stored in the `\bin` folder. These programs can be called up from any folder.
+
+Games usually have an .EXE program or two that you have to run before you can play the game. These setup file usually fix sound, video, or control issues.
+
+If you run into problems that this tutorial didn’t cover, don’t forget to visit the [home of FreeDOS][2]. They have a wiki and several other support options.
+
+Have you ever used FreeDOS? What tutorials would you like to see in the future? Please let us know in the comments below.
+
+If you found this article interesting, please take a minute to share it on social media, Hacker News or [Reddit][18].
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-freedos/
+
+作者:[John Paul][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/john/
+[1]:https://itsfoss.com/interview-freedos-jim-hall/
+[2]:http://www.freedos.org/
+[3]:https://www.virtualbox.org/
+[4]:https://solus-project.com/home/
+[5]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-1.jpg
+[6]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-2.jpg
+[7]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-3.jpg
+[8]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-4.jpg
+[9]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-6.jpg
+[10]:http://www.freedos.org/download/
+[11]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-7.jpg
+[12]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-8.png
+[13]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-9.png
+[14]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-10.png
+[15]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-11.png
+[16]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/freedos-tutorial-12.png
+[17]:https://opensource.com/article/18/6/freedos-commands-cheat-sheet
+[18]:http://reddit.com/r/linuxusersgroup
diff --git a/sources/talk/20180828 15 command-line aliases to save you time.md b/sources/talk/20180828 15 command-line aliases to save you time.md
new file mode 100644
index 0000000000..f357896293
--- /dev/null
+++ b/sources/talk/20180828 15 command-line aliases to save you time.md
@@ -0,0 +1,104 @@
+15 command-line aliases to save you time
+======
+
+
+
+Linux command-line aliases are great for helping you work more efficiently. Better still, some are included by default in your installed Linux distro.
+
+This is an example of a command-line alias in Fedora 27:
+
+
+
+The command `alias` shows the list of existing aliases. Setting an alias is as simple as typing:
+
+`alias new_name="command"`
+
+Here are 15 command-line aliases that will save you time:
+
+1. To install any utility/application:
+
+`alias install="sudo yum install -y"`
+
+Here, `sudo` and `-y` are optional as per user’s preferences:
+
+
+![install alias.png][2]
+
+2. To update the system:
+
+`alias update="sudo yum update -y"`
+
+3. To upgrade the system:
+
+`alias upgrade="sudo yum upgrade -y"`
+
+4. To change to the root user:
+
+`alias root="sudo su -"`
+
+5. To change to "user," where "user" is set as your username:
+
+`alias user="su user"`
+
+6. To display the list of all available ports, their status, and IP:
+
+`alias myip="ip -br -c a"`
+
+7. To `ssh` to the server `myserver`:
+
+`alias myserver="ssh user@my_server_ip”`
+
+8. To list all processes in the system:
+
+`alias process="ps -aux"`
+
+9. To check the status of any system service:
+
+`alias sstatus="sudo systemctl status"`
+
+10. To restart any system service:
+
+`alias srestart="sudo systemctl restart"`
+
+11. To kill any process by its name:
+
+`alias kill="sudo pkill"`
+
+![kill process alias.png][4]
+
+12. To display the total used and free memory of the system:
+
+`alias mem="free -h"`
+
+13. To display the CPU architecture, number of CPUs, threads, etc. of the system:
+
+`alias cpu="lscpu"`
+
+14. To display the total disk size of the system:
+
+`alias disk="df -h"`
+
+15. To display the current system Linux distro (for CentOS, Fedora, and Red Hat):
+
+`alias os="cat /etc/redhat-release"`
+
+![system_details alias.png][6]
+
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/18/8/time-saving-command-line-aliases
+
+作者:[Aarchit Modi][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[译者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/architmodi
+[2]:https://opensource.com/sites/default/files/uploads/install.png (install alias.png)
+[4]:https://opensource.com/sites/default/files/uploads/kill.png (kill process alias.png)
+[6]:https://opensource.com/sites/default/files/uploads/system_details.png (system_details alias.png)
diff --git a/sources/tech/20180131 What I Learned from Programming Interviews.md b/sources/tech/20180131 What I Learned from Programming Interviews.md
deleted file mode 100644
index 71c98a4744..0000000000
--- a/sources/tech/20180131 What I Learned from Programming Interviews.md
+++ /dev/null
@@ -1,142 +0,0 @@
-Translating by DavidChenLiang
-
-What I Learned from Programming Interviews
-============================================================
-
-
-Whiteboard programming interviews
-
-In 2017, I went to the [Grace Hopper Celebration][1] of women in computing. It’s the largest gathering of this kind, with 17,000 women attending last year.
-
-This conference has a huge career fair where companies interview attendees. Some even get offers. Walking around the area, I noticed that some people looked stressed and worried. I overheard conversations, and some talked about how they didn’t do well in the interview.
-
-I approached a group of people that I overheard and gave them advice. I considered some of the advice I gave to be basic, such as “it’s okay to think of the naive solution first.” But people were surprised by most of the advice I gave them.
-
-I wanted to help more people with this. I gathered a list of tips that worked for me and published a [podcast episode][2] about them. They’re also the topic of this post.
-
-I’ve had many programming interviews both for internships and full-time jobs. When I was in college studying Computer Science, there was a career fair every fall semester where the first round of interviews took place. I have failed at the first and final rounds of interviews. After each interview, I reflected on what I could’ve done better and had mock up interviews with friends who gave me feedback.
-
-Whether we find a job through a job portal, networking, or university recruiting, part of the process involves doing a technical interview.
-
-In recent years we’ve seen different interview formats emerge:
-
-* Pair programming with an engineer
-
-* Online quiz and online coding
-
-* Whiteboard interviews
-
-I’ll focus on the whiteboard interview because it’s the one that I have experienced. I’ve had many interviews. Some of them have gone well, while others haven’t.
-
-### What I did wrong
-
-First, I want to go over the things I did wrong in my interviews. This helps see the problems and what to improve.
-
-When an interviewer gave me a technical problem, I immediately went to the whiteboard and started trying to solve it. _Without saying a word._
-
-I made two mistakes here:
-
-#### Not clarifying information that is crucial to solve a problem
-
-For example, are we only working with numbers or also strings? Are we supporting multiple data types? If you don’t ask questions before you start working on a question, your interviewer can get the impression that you won’t ask questions before you start working on a project at their company. This is an important skill to have in the workplace. It is not like school anymore. You don’t get an assignment with all the steps detailed for you. You have to find out what those are and define them.
-
-#### Thinking without writing or communicating
-
-Often times I stood there thinking without writing. When I was doing a mock interview with a friend, he told me that he knew I was thinking because we had worked together. To a stranger, it can seem that I’m clueless, or that I’m thinking. It is also important not to rush on a solution right away. Take some time to brainstorm ideas. Sometimes the interviewer will gladly participate in this. After all, that’s how it is at work meetings.
-
-### Coming up with a solution
-
-Before you begin writing code, it helps if you come up with the algorithm first. Don’t start writing code and hope that you’ll solve the problem as you write.
-
-This is what has worked for me:
-
-1. Brainstorm
-
-2. Coding
-
-3. Error handling
-
-4. Testing
-
-#### 1\. Brainstorm
-
-For me, it helps to visualize first what the problem is through a series of examples. If it’s a problem related to trees, I would start with the null case, one node, two nodes, three nodes. This can help you generalize a solution.
-
-On the whiteboard, write down a list of the things the algorithm needs to do. This way, you can find bugs and issues before writing any code. Just keep track of the time. I made a mistake once where I spent too much time asking clarifying questions and brainstorming, and I barely had time to write the code. The downside of this is that your interviewer doesn’t get to see how you code. You can also come off as if you’re trying to avoid the coding portion. It helps to wear a wrist watch, or if there’s a clock in the room, look at it occasionally. Sometimes the interviewer will tell you, “I think we have the necessary information, let’s start coding it.”
-
-#### 2\. Coding and code walkthrough
-
-If you don’t have the solution right away, it always helps to point out the obvious naive solution. While you’re explaining this, you should be thinking of how to improve it. When you state the obvious, indicate why it is not the best solution. For this it helps to be familiar with big O notation. It is okay to go over 2–3 solutions first. The interviewer sometimes guides you by saying, “Can we do better?” This can sometimes mean they are looking for a more efficient solution.
-
-#### 3\. Error handling
-
-While you’re coding, point out that you’re leaving a code comment for error handling. Once an interviewer said, “That’s a good point. How would you handle it? Would you throw an exception? Or return a specific value?” This can make for a good short discussion about code quality. Mention a few error cases. Other times, the interviewer might say that you can assume that the parameters you’re getting already passed a validation. However, it is still important to bring this up to show that you are aware of error cases and quality.
-
-#### 4\. Testing
-
-After you have finished coding the solution, re-use the examples from brainstorming to walk through your code and make sure it works. For example you can say, “Let’s go over the example of a tree with one node, two nodes.”
-
-After you finish this, the interviewer sometimes asks you how you would test your code, and what your test cases would be. I recommend that you organize your test cases in different categories.
-
-Some examples are:
-
-1. Performance
-
-2. Error cases
-
-3. Positive expected cases
-
-For performance, think about extreme quantities. For example, if the problem is about lists, mention that you would have a case with a large list and a really small list. If it’s about numbers, you’ll test the maximum integer number and the smallest. I recommend reading about testing software to get more ideas. My favorite book on this is [How We Test Software at Microsoft][3].
-
-For error cases, think about what is expected to fail and list those.
-
-For positive expected cases, it helps to think of what the user requirements are. What are the cases that this solution is meant to solve? Those are the positive test cases.
-
-### “Do you have any questions for me?”
-
-Almost always there will be a few minutes dedicated at the end for you to ask questions. I recommend that you write down the questions you would ask your interviewer before the interview. Don’t say, “I don’t have any questions.” Even if you feel the interview didn’t go well, or you’re not super passionate about the company, there’s always something you can ask. It can be about what the person likes and hates most about his or her job. Or it can be something related to the person’s work, or technologies and practices used at the company. Don’t feel discouraged to ask something even if you feel you didn’t do well.
-
-### Applying for a job
-
-As for searching and applying for a job, I’ve been told that you should only apply to a place that you would be truly passionate to work for. They say pick a company that you love, or a product that you enjoy using, and see if you can work there.
-
-I don’t recommend that you always do this. You can rule out many good options this way, especially if you’re looking for an internship or an entry-level job.
-
-You can focus on other goals instead. What do I want to get more experience in? Is it cloud computing, web development, or artificial intelligence? When you talk to companies at the career fair, find out if their job openings are in this area. You might find a really good position at a company or a non-profit that wasn’t in your list.
-
-#### Switching teams
-
-After a year and a half at my first team, I decided that it was time to explore something different. I found a team I liked and had 4 rounds of interviews. I didn’t do well.
-
-I didn’t practice anything, not even simply writing on a whiteboard. My logic had been, if I have been working at the company for almost 2 years, why would I need to practice? I was wrong about this. I struggled to write a solution on the whiteboard. Things like my writing being too small and running out of space by not starting at the top left all contributed to not passing.
-
-I hadn’t brushed up on data structures and algorithms. If I had, I would’ve been more confident. Even if you’ve been working at a company as a Software Engineer, before you do a round of interviews with another team, I strongly recommend you go through practice problems on a whiteboard.
-
-As for finding a team, if you are looking to switch teams at your company, it helps to talk informally with members of that team. For this, I found that almost everyone is willing to have lunch with you. People are mostly available at noon too, so there is low risk of lack of availability and meeting conflicts. This is an informal way to find out what the team is working on, and see what the personalities of your potential team members are like. You can learn many things from lunch meetings that can help you in the formal interviews.
-
-It is important to know that at the end of the day, you are interviewing for a specific team. Even if you do really well, you might not get an offer because you are not a culture fit. That’s part of why I try to meet different people in the team first, but this is not always possible. Don’t get discouraged by a rejection, keep your options open, and practice.
-
-This content is from the [“Programming interviews”][4] episode on [The Women in Tech Show: Technical Interviews with Prominent Women in Tech][5].
-
---------------------------------------------------------------------------------
-
-作者简介:
-
-Software Engineer II at Microsoft Research, opinions are my own, host of www.thewomenintechshow.com
-
-------------
-
-via: https://medium.freecodecamp.org/what-i-learned-from-programming-interviews-29ba49c9b851
-
-作者:[Edaena Salinas ][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://medium.freecodecamp.org/@edaenas
-[1]:https://anitab.org/event/2017-grace-hopper-celebration-women-computing/
-[2]:https://thewomenintechshow.com/2017/12/18/programming-interviews/
-[3]:https://www.amazon.com/How-We-Test-Software-Microsoft/dp/0735624259
-[4]:https://thewomenintechshow.com/2017/12/18/programming-interviews/
-[5]:https://thewomenintechshow.com/
diff --git a/sources/tech/20180529 How To Add Additional IP (Secondary IP) In Ubuntu System.md b/sources/tech/20180529 How To Add Additional IP (Secondary IP) In Ubuntu System.md
index 71905dd868..e826025021 100644
--- a/sources/tech/20180529 How To Add Additional IP (Secondary IP) In Ubuntu System.md
+++ b/sources/tech/20180529 How To Add Additional IP (Secondary IP) In Ubuntu System.md
@@ -1,3 +1,6 @@
+Translating by MjSeven
+
+
How To Add Additional IP (Secondary IP) In Ubuntu System
======
Linux admin should be aware of this because it’s a routine task. Many of you wondering why we need to add more than one IP address in server? why we need add this to single network card? am i right?
diff --git a/sources/tech/20180717 Getting started with Etcher.io.md b/sources/tech/20180717 Getting started with Etcher.io.md
deleted file mode 100644
index 45c0b3f830..0000000000
--- a/sources/tech/20180717 Getting started with Etcher.io.md
+++ /dev/null
@@ -1,97 +0,0 @@
-translating---geekpi
-
-Getting started with Etcher.io
-======
-
-
-
-Bootable USB drives are a great way to try out a new Linux distribution to see if you like it before you install. While some Linux distributions, like [Fedora][1], make it easy to create bootable media, most others provide the ISOs or image files and leave the media creation decisions up to the user. There's always the option to use `dd` to create media on the command line—but let's face it, even for the most experienced user, that's still a pain. There are other utilities—like UnetBootIn, Disk Utility on MacOS, and Win32DiskImager on Windows—that create bootable USBs.
-
-### Installing Etcher
-
-About 18 months ago, I came upon [Etcher.io][2] , a great open source project that allows easy and foolproof media creation on Linux, Windows, or MacOS. Etcher.io has become my "go-to" application for creating bootable media for Linux. I can easily download ISO or IMG files and burn them to flash drives and SD cards. It's an open source project licensed under [Apache 2.0][3] , and the [source code][4] is available on GitHub.
-
-Go to the [Etcher.io][5] website and click on the download link for your operating system—32- or 64-bit Linux, 32- or 64-bit Windows, or MacOS.
-
-
-
-Etcher provides great instructions in its GitHub repository for adding Etcher to your collection of Linux utilities.
-
-If you are on Debian or Ubuntu, add the Etcher Debian repository:
-```
-$echo "deb https://dl.bintray.com/resin-io/debian stable etcher" | sudo tee
-
-/etc/apt/sources.list.d/etcher.list
-
-
-
-Trust Bintray.com GPG key
-
-$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61
-
-```
-
-Then update your system and install:
-```
-$ sudo apt-get update
-
-$ sudo apt-get install etcher-electron
-
-```
-
-If you are using Fedora or Red Hat Enterprise Linux, add the Etcher RPM repository:
-```
-$ sudo wget https://bintray.com/resin-io/redhat/rpm -O /etc/yum.repos.d/bintray-
-
-resin-io-redhat.repo
-
-```
-
-Update and install using either:
-```
-$ sudo yum install -y etcher-electron
-
-```
-
-or:
-```
-$ sudo dnf install -y etcher-electron
-
-```
-
-### Creating bootable drives
-
-In addition to creating bootable images for Ubuntu, EndlessOS, and other flavors of Linux, I have used Etcher to [create SD card images][6] for the Raspberry Pi. Here's how to create bootable media.
-
-First, download to your computer the ISO or image you want to use. Then, launch Etcher and insert your USB or SD card into the computer.
-
-
-
-Click on **Select Image**. In this example, I want to create a bootable USB drive to install Ubermix on a new computer. Once I have selected my Ubermix image file and inserted my USB drive into the computer, Etcher.io "sees" the drive, and I can begin the process of installing Ubermix on my USB.
-
-
-
-Once I click on **Flash** , the installation process begins. The time required depends on the image's size. After the image is installed on the drive, the software verifies the installation; at the end, a banner announces my media creation is complete.
-
-If you need [help with Etcher][7], contact the community through its [Discourse][8] forum. Etcher is very easy to use, and it has replaced all my other media creation tools because none of them do the job as easily or as well as Etcher.
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/18/7/getting-started-etcherio
-
-作者:[Don Watkins][a]
-选题:[lujun9972](https://github.com/lujun9972)
-译者:[译者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/don-watkins
-[1]:https://getfedora.org/en_GB/workstation/download/
-[2]:http://etcher.io
-[3]:https://github.com/resin-io/etcher/blob/master/LICENSE
-[4]:https://github.com/resin-io/etcher
-[5]:https://etcher.io/
-[6]:https://www.raspberrypi.org/magpi/pi-sd-etcher/
-[7]:https://github.com/resin-io/etcher/blob/master/SUPPORT.md
-[8]:https://forums.resin.io/c/etcher
diff --git a/sources/tech/20180720 How to Install 2048 Game in Ubuntu and Other Linux Distributions.md b/sources/tech/20180720 How to Install 2048 Game in Ubuntu and Other Linux Distributions.md
deleted file mode 100644
index 14a74b0b7c..0000000000
--- a/sources/tech/20180720 How to Install 2048 Game in Ubuntu and Other Linux Distributions.md
+++ /dev/null
@@ -1,92 +0,0 @@
-translating---geekpi
-
-How to Install 2048 Game in Ubuntu and Other Linux Distributions
-======
-**Popular mobile puzzle game 2048 can also be played on Ubuntu and Linux distributions. Heck! You can even play 2048 in Linux terminal. Don’t blame me if your productivity goes down because of this addictive game.**
-
-Back in 2014, 2048 was one of the most popular games on iOS and Android. This highly addictive game got so popular that it got a [browser version][1], desktop version as well as a terminal version on Linux.
-
-
-
-This tiny game is played by moving the tiles up and down, left and right. The aim of this puzzle game is to reach 2048 by combining tiles with matching number. So 2+2 becomes 4, 4+4 becomes 16 and so on. It may sound simple and boring but trust me its hell of an addictive game.
-
-### Play 2048 in Linux [GUI]
-
-There are several implementations of 2048 game available in Ubuntu and other Linux. You can simply search for it in the Software Center and you’ll find a few of them there.
-
-There is a [Qt-based][2] 2048 game that you can install on Ubuntu and other Debian and Ubuntu-based Linux distributions. You can install it using the command below:
-```
-sudo apt install 2048-qt
-
-```
-
-Once installed, you can find the game in the menu and start it. You can move the numbers using the arrow keys. Your highest score is saved as well.
-
-![2048 Game in Ubuntu Linux][3]
-
-### Play 2048 in Linux terminal
-
-The popularity of 2048 brought it to the terminal. If this surprises you, you should know that there are plenty of [awesome terminal games in Linux][4] and 2048 is certainly one of them.
-
-Now, there are a few ways you can play 2048 in Linux terminal. I’ll mention two of them here.
-
-#### 1\. term2058 Snap application
-
-There is a [snap application][5] called [term2048][6] that you can install in any [Snap supported Linux distribution][7].
-
-If you have Snap enabled, just use this command to install term2048:
-```
-sudo snap install term2048
-
-```
-
-Ubuntu users can also find this game in the Software Center and install it from there.
-
-![2048 Terminal Game in Linux][8]
-
-Once installed, you can use the command term2048 to run the game. It looks something like this:
-
-![2048 Terminal game][9]
-
-You can move using the arrow keys.
-
-#### 2\. Bash script for 2048 terminal game
-
-This game is actually a shell script which you can run in any Linux terminal. Download the game/script from Github:
-
-[Download Bash2048][10]
-
-Extract the downloaded file. Go in the extracted directory and you’ll see a shell script named 2048.sh. Just run the shell script. The game will start immediately. You can move the tiles using the arrow keys.
-
-![Linux Terminal game 2048][11]
-
-#### What games do you play on Linux?
-
-If you like playing games in Linux terminal, you should also try the [classic Snake game in Linux terminal][12].
-
-Which games do you regularly play in Linux? Do you also play games in terminal? If yes, which is your favorite terminal game?
-
---------------------------------------------------------------------------------
-
-via: https://itsfoss.com/2048-game/
-
-作者:[Abhishek Prakash][a]
-选题:[lujun9972](https://github.com/lujun9972)
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://itsfoss.com/author/abhishek/
-[1]:http://gabrielecirulli.github.io/2048/
-[2]:https://www.qt.io/
-[3]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/2048-qt-ubuntu.jpeg
-[4]:https://itsfoss.com/best-command-line-games-linux/
-[5]:https://itsfoss.com/use-snap-packages-ubuntu-16-04/
-[6]:https://snapcraft.io/term2048
-[7]:https://itsfoss.com/install-snap-linux/
-[8]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/term2048-game.png
-[9]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/term2048.jpg
-[10]:https://github.com/mydzor/bash2048
-[11]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/07/2048-bash-terminal.png
-[12]:https://itsfoss.com/nsnake-play-classic-snake-game-linux-terminal/ (nSnake: Play The Classic Snake Game In Linux Terminal)
diff --git a/sources/tech/20180730 How to use VS Code for your Python projects.md b/sources/tech/20180730 How to use VS Code for your Python projects.md
deleted file mode 100644
index bd08c9ce69..0000000000
--- a/sources/tech/20180730 How to use VS Code for your Python projects.md
+++ /dev/null
@@ -1,160 +0,0 @@
-How to use VS Code for your Python projects
-======
-
-
-Visual Studio Code, or VS Code, is an open source code editor that also includes tools for building and debugging an application. With the Python extension enabled, vscode becomes a great working environment for any Python developer. This article shows you which extensions are useful, and how to configure VS Code to get the most out of it.
-
-If you don’t have it installed, check out our previous article, [Using Visual Studio Code on Fedora][1]:
-
-[Using Visual Studio Code on Fedora ](https://fedoramagazine.org/using-visual-studio-code-fedora/)
-
-### Install the VS Code Python extension
-
-First, to make VS Code Python friendly, install the Python extension from the marketplace.
-
-![][2]
-
-Once the Python extension installed, you can now configure the Python extension.
-
-VS Code manages its configuration inside JSON files. Two files are used:
-
- * One for the global settings that applies to all projects
- * One for project specific settings
-
-
-
-Press **Ctrl+,** (comma) to open the global settings.
-
-#### Setup the Python Path
-
-You can configure VS Code to automatically select the best Python interpreter for each of your projects. To do this, configure the python.pythonPath key in the global settings.
-```
-// Place your settings in this file to overwrite default and user settings.
-{
- "python.pythonPath":"${workspaceRoot}/.venv/bin/python",
-}
-
-```
-
-This sets VS Code to use the Python interpreter located in the project root directory under the .venv virtual environment directory.
-
-#### Use environment variables
-
-By default, VS Code uses environment variables defined in the project root directory in a .env file. This is useful to set environment variables like:
-```
-PYTHONWARNINGS="once"
-
-```
-
-That setting ensures that warnings are displayed when your program is running.
-
-To change this default, set the python.envFile configuration key as follows:
-```
-"python.envFile": "${workspaceFolder}/.env",
-
-```
-
-### Code Linting
-
-The Python extension also supports different code linters (pep8, flake8, pylint). To enable your favorite linter, or the one used by the project you’re working on, you need to set a few configuration items.
-
-By default pylint is enabled. But for this example, configure flake8:
-```
-"python.linting.pylintEnabled": false,
-"python.linting.flake8Path": "${workspaceRoot}/.venv/bin/flake8",
-"python.linting.flake8Enabled": true,
-"python.linting.flake8Args": ["--max-line-length=90"],
-
-```
-
-After enabling the linter, your code is underlined to show where it doesn’t meet criteria enforced by the linter. Note that for this example to work, you need to install flake8 in the virtual environment of the project.
-
-![][3]
-
-### Code Formatting
-
-VS Code also lets you configure automatic code formatting. The extension currently supports autopep8, black and yapf. Here’s how to configure black.
-```
-"python.formatting.provider": "black",
-"python.formatting.blackPath": "${workspaceRoot}/.venv/bin/black"
-"python.formatting.blackArgs": ["--line-length=90"],
-"editor.formatOnSave": true,
-
-```
-
-If you don’t want the editor to format your file on save, set the option to false and use **Ctrl+Shift+I** to format the current document. Note that for this example to work, you need to install black in the virtual environment of the project.
-
-### Running Tasks
-
-Another great feature of VS Code is that it can run tasks. These tasks are also defined in a JSON file saved in the project root directory.
-
-#### Run a development flask server
-
-In this example, you’ll create a task to run a Flask development server. Create a new Build using the basic template that can run an external command:
-
-![][4]
-
-Edit the tasks.json file as follows to create a new task that runs the Flask development server:
-```
-{
- // See https://go.microsoft.com/fwlink/?LinkId=733558
- // for the documentation about the tasks.json format
- "version": "2.0.0",
- "tasks": [
- {
-
- "label": "Run Debug Server",
- "type": "shell",
- "command": "${workspaceRoot}/.venv/bin/flask run -h 0.0.0.0 -p 5000",
- "group": {
- "kind": "build",
- "isDefault": true
- }
- }
- ]
-}
-
-```
-
-The Flask development server uses an environment variable to get the entrypoint of the application. Use the .env file to declare these variables. For example:
-```
-FLASK_APP=wsgi.py
-FLASK_DEBUG=True
-
-```
-
-Now you can execute the task using **Ctrl+Shift+B**.
-
-### Unit tests
-
-VS Code also has the unit test runners pytest, unittest, and nosetest integrated out of the box. After you enable a test runner, VS Code discovers the unit tests and letsyou to run them individually, by test suite, or simply all the tests.
-
-For example, to enable pytest:
-```
-"python.unitTest.pyTestEnabled": true,
-"python.unitTest.pyTestPath": "${workspaceRoot}/.venv/bin/pytest",
-
-```
-
-Note that for this example to work, you need to install pytest in the virtual environment of the project.
-
-![][5]
-
-
---------------------------------------------------------------------------------
-
-via: https://fedoramagazine.org/vscode-python-howto/
-
-作者:[Clément Verna][a]
-选题:[lujun9972](https://github.com/lujun9972)
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://fedoramagazine.org
-[1]:https://fedoramagazine.org/using-visual-studio-code-fedora/
-[2]:https://fedoramagazine.org/wp-content/uploads/2018/07/Peek-2018-07-27-09-44.gif
-[3]:https://fedoramagazine.org/wp-content/uploads/2018/07/Peek-2018-07-27-12-05.gif
-[4]:https://fedoramagazine.org/wp-content/uploads/2018/07/Peek-2018-07-27-13-26.gif
-[5]:https://fedoramagazine.org/wp-content/uploads/2018/07/Peek-2018-07-27-15-33.gif
diff --git a/sources/tech/20180803 10 Popular Windows Apps That Are Also Available on Linux.md b/sources/tech/20180803 10 Popular Windows Apps That Are Also Available on Linux.md
index d2b667b706..e48ef211a7 100644
--- a/sources/tech/20180803 10 Popular Windows Apps That Are Also Available on Linux.md
+++ b/sources/tech/20180803 10 Popular Windows Apps That Are Also Available on Linux.md
@@ -1,3 +1,5 @@
+translating----geekpi
+
10 Popular Windows Apps That Are Also Available on Linux
======
diff --git a/sources/tech/20180803 Why I still love Alpine for email at the Linux terminal.md b/sources/tech/20180803 Why I still love Alpine for email at the Linux terminal.md
deleted file mode 100644
index 7fa1bbc2c7..0000000000
--- a/sources/tech/20180803 Why I still love Alpine for email at the Linux terminal.md
+++ /dev/null
@@ -1,77 +0,0 @@
-translating---geekpi
-
-Why I still love Alpine for email at the Linux terminal
-======
-
-
-
-Maybe you can relate to this story: You try out a program and really love it. Over the years, new programs are developed that can do the same things and more, maybe even better. You try them out, and they are great too—but you keep coming back to the first program.
-
-That is the story of my relationship with [Alpine Mail][1]. So I decided to write a little article praising my de facto favorite mail program.
-
-![alpine_main_menu.png][3]
-
-The main menu screen of the Alpine email client
-
-In the mid-90's, I discovered the [GNU/Linux][4] operating system. Because I had never seen a Unix-like system before, I read a lot of documentation and books and tried a lot of programs to find my way through this fascinating OS.
-
-After a while, [Pine][5] became my favorite mail client, followed by its successor, Alpine. I found it intuitive and easy to use—you can always see the possible commands or options at the bottom, so navigation is easy to learn quickly, and Alpine comes with very good help.
-
-Getting started is easy.
-
-Most distributions include Alpine. It can be installed via the package manager: Just press **S** (or navigate the bar to the setup line) and you will be directed to the categories you can configure. At the bottom, you can use the shortcut keys for commands you can do right away. For commands that don’t fit in there, press **O** (`Other Commands`).
-
-Press **C** to enter the configuration dialog. When you scroll down the list, it becomes clear that you can make Alpine behave as you want. If you have only one mail account, simply navigate the bar to the line you want to change, press **C** (`Change Value`), and type in the values:
-
-![alpine_setup_configuration.png][7]
-
-The Alpine setup configuration screen
-
-Note how the SNMP and IMAP servers are entered, as this is not the same as in mail clients with assistants and pre-filled fields. If you just enter the server/SSL/user like this:
-
-`imap.myprovider.com:993/ssl/user=max@example.com`
-
-Alpine will ask you if "Inbox" should be used (yes) and put curly brackets around the server part. When you're done, press **E** (`Exit Setup`) and commit your changes by pressing **Y** (yes). Back in the main menu, you can then move to the folder list and the Inbox to see if you have mail (you will be prompted for your password). You can now navigate using **`>`** and **`<`**.
-
-![navigating_the_message_index.png][9]
-
-Navigating the message index in Alpine
-
-To compose an email, simply navigate to the corresponding menu entry and write. Note that the options at the bottom change depending on the line you are on. **`^T`** ( **Ctrl** \+ **T** ) can stand for `To Addressbook` or `To Files`. To attach files, just navigate to `Attchmt:` and press either **Ctrl** \+ **T** to go to a file browser, or **Ctrl** \+ **J** to enter a path.
-
-Send the mail with `^X`.
-
-![composing_an_email_in_alpine.png][11]
-
-Composing an email in Alpine
-
-### Why Alpine?
-
-Of course, every user's personal preferences and needs are different. If you need a more "office-like" solution, an app like Evolution or Thunderbird might be a better choice.
-
-But for me, Alpine (and Pine) are dinosaurs in the software world. You can manage your mail in a comfortable way—no more and no less. It is available for many operating systems (even [Termux for Android][12]). And because the configuration is stored in a plain text file (`.pinerc`), you can simply copy it to a device and it works.
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/18/8/love-alpine
-
-作者:[Heiko Ossowski][a]
-选题:[lujun9972](https://github.com/lujun9972)
-译者:[译者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/hossow
-[1]:https://en.wikipedia.org/wiki/Alpine_(email_client)
-[2]:/file/405641
-[3]:https://opensource.com/sites/default/files/uploads/alpine_main_menu.png (alpine_main_menu.png)
-[4]:https://www.gnu.org/gnu/linux-and-gnu.en.html
-[5]:https://en.wikipedia.org/wiki/Pine_(email_client)
-[6]:/file/405646
-[7]:https://opensource.com/sites/default/files/uploads/alpine_setup_configuration.png (alpine_setup_configuration.png)
-[8]:/file/405651
-[9]:https://opensource.com/sites/default/files/uploads/navigating_the_message_index.png (navigating_the_message_index.png)
-[10]:/file/405656
-[11]:https://opensource.com/sites/default/files/uploads/composing_an_email_in_alpine.png (composing_an_email_in_alpine.png)
-[12]:https://termux.com/
diff --git a/sources/tech/20180808 5 applications to manage your to-do list on Fedora.md b/sources/tech/20180808 5 applications to manage your to-do list on Fedora.md
index 58b01c56c4..aac9ce192f 100644
--- a/sources/tech/20180808 5 applications to manage your to-do list on Fedora.md
+++ b/sources/tech/20180808 5 applications to manage your to-do list on Fedora.md
@@ -1,3 +1,5 @@
+translating---geekpi
+
5 applications to manage your to-do list on Fedora
======
diff --git a/sources/tech/20180808 5 open source role-playing games for Linux.md b/sources/tech/20180808 5 open source role-playing games for Linux.md
deleted file mode 100644
index 6b3681a3d7..0000000000
--- a/sources/tech/20180808 5 open source role-playing games for Linux.md
+++ /dev/null
@@ -1,106 +0,0 @@
-translated by hopefully2333
-
-5 open source role-playing games for Linux
-======
-
-
-
-Gaming has traditionally been one of Linux's weak points. That has changed somewhat in recent years thanks to Steam, GOG, and other efforts to bring commercial games to multiple operating systems, but those games are often not open source. Sure, the games can be played on an open source operating system, but that is not good enough for an open source purist.
-
-So, can someone who only uses free and open source software find games that are polished enough to present a solid gaming experience without compromising their open source ideals? Absolutely. While open source games are unlikely ever to rival some of the AAA commercial games developed with massive budgets, there are plenty of open source games, in many genres, that are fun to play and can be installed from the repositories of most major Linux distributions. Even if a particular game is not packaged for a particular distribution, it is usually easy to download the game from the project's website in order to install and play it.
-
-This article looks at role-playing games. I have already written about [arcade-style games][1], [board & card games][2], [puzzle games][3], and [racing & flying games][4]. In the final article in this series, I plan to cover strategy and simulation games.
-
-### Endless Sky
-
-
-
-[Endless Sky][5] is an open source clone of the [Escape Velocity][6] series from Ambrosia Software. Players captain a spaceship and travel between worlds delivering trade goods or passengers, taking on other missions along the way, or they can turn to piracy and steal from cargo ships. The game lets the player decide how they want to experience the game, and the extremely large map of solar systems is theirs to explore as they see fit. Endless Sky is one of those games that defies normal genre classifications, but this action, role-playing, space simulation, trading game is well worth checking out.
-
-To install Endless Sky, run the following command:
-
-On Fedora: `dnf install endless-sky`
-
-On Debian/Ubuntu: `apt install endless-sky`
-
-### FreeDink
-
-
-
-[FreeDink][7] is the open source version of [Dink Smallwood][8], an action role-playing game released by RTSoft in 1997. Dink Smallwood became freeware in 1999, and the source code was released in 2003. In 2008 the game's data files, minus a few sound files, were also released under an open license. FreeDink replaces those sound files with alternatives to provide a complete game. Gameplay is similar to Nintendo's [The Legend of Zelda][9] series. The player's character, the eponymous Dink Smallwood, explores an over-world map filled with hidden items and caves as he moves from one quest to another. Due to its age, FreeDink is not going to stand up to modern commercial games, but it is still a fun game with an amusing story. The game can be expanded by using [D-Mods][10], which are add-on modules that provide additional quests, but the D-Mods do vary greatly in complexity, quality, and age-appropriateness; the main game is suitable for teenagers, but some of the add-ons are for adult audiences.
-
-To install FreeDink, run the following command:
-
-On Fedora: `dnf install freedink`
-
-On Debian/Ubuntu: `apt install freedink`
-
-### ManaPlus
-
-
-
-Technically not a game in itself, [ManaPlus][11] is a client for accessing various massive multi-player online role-playing games. [The Mana World][12] and [Evol Online][13] are the two of the open source games available, but other servers are out there. The games feature 2D sprite graphics reminiscent of Super Nintendo games. While none of the games supported by ManaPlus are as popular as some of the commercial alternatives, they do have interesting worlds and at least a few players are online most of the time. Players are unlikely to run into massive groups of other players, but there are usually enough people around to make the games [MMORPG][14]s, not single-player games that require a connection to a server. The Mana World and Evol Online developers have joined together for future development, but for now, The Mana World's legacy server and Evol Online offer different experiences.
-
-To install ManaPlus, run the following command:
-
-On Fedora: `dnf install manaplus`
-
-On Debian/Ubuntu: `apt install manaplus`
-
-### Minetest
-
-
-
-Explore and build in an open-ended world with [Minetest][15], a clone of Minecraft. Just like the game it is based on, Minetest provides an open-ended world where players can explore and build whatever they wish. Minetest provides a wide variety of block types and tools, making it a good alternative to Minecraft for anyone wanting a more open alternative. Beyond what comes with the basic game, Minetest can be extended with [add-on modules][16], which add even more options.
-
-To install Minetest, run the following command:
-
-On Fedora: `dnf install minetest`
-
-On Debian/Ubuntu: `apt install minetest`
-
-### NetHack
-
-
-
-[NetHack][17] is a classic [Roguelike][18] role-playing game. Players explore a multi-level dungeon as one of several different character races, classes, and alignments. The object of the game is to retrieve the Amulet of Yendor. Players begin on the first level of the dungeon and try to work their way towards the bottom, with each level being randomly generated, which makes for a unique game experience each time. While this game features either ASCII graphics or basic tile graphics, the depth of game-play more than makes up for the primitive graphics. Players who want less primitive graphics might want to check out [Vulture for NetHack][19], which offers better graphics along with sound effects and background music.
-
-To install NetHack, run the following command:
-
-On Fedora: `dnf install nethack`
-
-On Debian/Ubuntu: `apt install nethack-x11 or apt install nethack-console`
-
-Did I miss one of your favorite open source role-playing games? Share it in the comments below.
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/18/8/role-playing-games-linux
-
-作者:[Joshua Allen Holm][a]
-选题:[lujun9972](https://github.com/lujun9972)
-译者:[译者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/holmja
-[1]:https://opensource.com/article/18/1/arcade-games-linux
-[2]:https://opensource.com/article/18/3/card-board-games-linux
-[3]:https://opensource.com/article/18/6/puzzle-games-linux
-[4]:https://opensource.com/article/18/7/racing-flying-games-linux
-[5]:https://endless-sky.github.io/
-[6]:https://en.wikipedia.org/wiki/Escape_Velocity_(video_game)
-[7]:http://www.gnu.org/software/freedink/
-[8]:http://www.rtsoft.com/pages/dink.php
-[9]:https://en.wikipedia.org/wiki/The_Legend_of_Zelda
-[10]:http://www.dinknetwork.com/files/category_dmod/
-[11]:http://manaplus.org/
-[12]:http://www.themanaworld.org/
-[13]:http://evolonline.org/
-[14]:https://en.wikipedia.org/wiki/Massively_multiplayer_online_role-playing_game
-[15]:https://www.minetest.net/
-[16]:https://wiki.minetest.net/Mods
-[17]:https://www.nethack.org/
-[18]:https://en.wikipedia.org/wiki/Roguelike
-[19]:http://www.darkarts.co.za/vulture-for-nethack
diff --git a/sources/tech/20180810 6 Reasons Why Linux Users Switch to BSD.md b/sources/tech/20180810 6 Reasons Why Linux Users Switch to BSD.md
index 50b6361b4b..6cedde1c0b 100644
--- a/sources/tech/20180810 6 Reasons Why Linux Users Switch to BSD.md
+++ b/sources/tech/20180810 6 Reasons Why Linux Users Switch to BSD.md
@@ -1,3 +1,4 @@
+LuuMing translating
6 Reasons Why Linux Users Switch to BSD
======
Thus far I have written several articles about [BSD][1] for It’s FOSS. There is always at least one person in the comments asking “Why bother with BSD?” I figure that the best way to respond was to write an article on the topic.
diff --git a/sources/tech/20180813 MPV Player- A Minimalist Video Player for Linux.md b/sources/tech/20180813 MPV Player- A Minimalist Video Player for Linux.md
deleted file mode 100644
index 93724445b9..0000000000
--- a/sources/tech/20180813 MPV Player- A Minimalist Video Player for Linux.md
+++ /dev/null
@@ -1,112 +0,0 @@
-MPV Player: A Minimalist Video Player for Linux
-======
-MPV is an open source, cross platform video player that comes with a minimalist GUI and feature rich command line version.
-
-VLC is probably the best video player for Linux or any other operating system. I have been using VLC for years and it is still my favorite.
-
-However, lately, I am more inclined towards minimalist applications with a clean UI. This is how came across MPV. I loved it so much that I added it in the list of [best Ubuntu applications][1].
-
-[MPV][2] is an open source video player available for Linux, Windows, macOS, BSD and Android. It is actually a fork of [MPlayer][3].
-
-The graphical user interface is sleek and minimalist.
-
-![MPV Player Interface in Linux][4]
-MPV Player
-
-### MPV Features
-
-MPV has all the features required from a standard video player. You can play a variety of videos and control the playback with usual shortcuts.
-
- * Minimalist GUI with only the necessary controls.
- * Video codecs support.
- * High quality video output and GPU video decoding.
- * Supports subtitles.
- * Can play YouTube and other streaming videos through the command line.
- * CLI version of MPV can be embedded in web and other applications.
-
-
-
-Though MPV player has a minimal UI with limited options, don’t underestimate its capabilities. Its main power lies in the command line version.
-
-Just type the command mpv –list-options and you’ll see that it provides 447 different kind of options. But this article is not about utilizing the advanced settings of MPV. Let’s see how good it is as a regular desktop video player.
-
-### Installing MPV in Linux
-
-MPV is a popular application and it should be found in the default repositories of most Linux distributions. Just look for it in the Software Center application.
-
-I can confirm that it is available in Ubuntu’s Software Center. You can install it from there or simply use the following command:
-```
-sudo apt install mpv
-
-```
-
-You can find installation instructions for other platforms on [MPV website][5].
-
-### Using MPV Video Player
-
-Once installed, you can open a video file with MPV by right-clicking and choosing MPV.
-
-![MPV Player Interface][6]
-MPV Player Interface
-
-The interface has only a control panel that is only visible when you hover your mouse on the player. As you can see, the control panel provides you the option to pause/play, change track, change audio track, subtitles and switch to full screen.
-
-MPV’s default size depends upon the quality of video you are playing. For a 240p video, the application video will be small while as 1080p video will result in almost full screen app window size on a Full-HD screen. You can always double click on the player to make it full screen irrespective of the video size.
-
-#### The subtitle struggle
-
-If your video has a subtitle file, MPV will [automatically play subtitles][7] and you can choose to disable it. However, if you want to use an external subtitle file, it’s not that available directly from the player.
-
-You can rename the additional subtitle file exactly the same as the name of the video file and keep it in the same folder as the video file. MPV should now play your subtitles.
-
-An easier option to play external subtitles is to simply drag and drop into the player.
-
-#### Playing YouTube and other online video content
-
-To play online videos, you’ll have to use the command line version of MPV.
-
-Open a terminal and use it in the following fashion:
-```
-mpv
-
-```
-
-![Playing YouTube videos on Linux desktop using MPV][8]
-Playing YouTube videos with MPV
-
-I didn’t find playing YouTube videos in MPV player a pleasant experience. It kept on buffering and that was utter frustrating.
-
-#### Should you use MPV player?
-
-That depends on you. If you like to experiment with applications, you should give MPV a go. Otherwise, the default video player and VLC are always good enough.
-
-Earlier when I wrote about [Sayonara][9], I wasn’t sure if people would like an obscure music player over the popular ones but it was loved by It’s FOSS readers.
-
-Try MPV and see if it is something you would like to use as your default video player.
-
-If you liked MPV but want slightly more features on the graphical interface, I suggest using [GNOME MPV Player][10].
-
-Have you used MPV video player? How was your experience with it? What you liked or disliked about it? Do share your views in the comments below.
-
---------------------------------------------------------------------------------
-
-via: https://itsfoss.com/mpv-video-player/
-
-作者:[Abhishek Prakash][a]
-选题:[lujun9972](https://github.com/lujun9972)
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://itsfoss.com/author/abhishek/
-[1]:https://itsfoss.com/best-ubuntu-apps/
-[2]:https://mpv.io/
-[3]:http://www.mplayerhq.hu/design7/news.html
-[4]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/08/mpv-player.jpg
-[5]:https://mpv.io/installation/
-[6]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/08/mpv-player-interface.png
-[7]:https://itsfoss.com/how-to-play-movie-with-subtitles-on-samsung-tv-via-usb/
-[8]:https://4bds6hergc-flywheel.netdna-ssl.com/wp-content/uploads/2018/08/play-youtube-videos-on-mpv-player.jpeg
-[9]:https://itsfoss.com/sayonara-music-player/
-[10]:https://gnome-mpv.github.io/
diff --git a/sources/tech/20180821 A Collection Of More Useful Unix Utilities.md b/sources/tech/20180821 A Collection Of More Useful Unix Utilities.md
deleted file mode 100644
index 9e472e624e..0000000000
--- a/sources/tech/20180821 A Collection Of More Useful Unix Utilities.md
+++ /dev/null
@@ -1,323 +0,0 @@
-pinewall translating
-
-A Collection Of More Useful Unix Utilities
-======
-
-
-
-We all know about **GNU core utilities** that comes pre-installed with all Unix-like operating systems. These are the basic file, shell and text manipulation utilities of the GNU operating system. The GNU core utilities contains the commands, such as cat, ls, rm, mkdir, rmdir, touch, tail, wc and many more, for performing the day-to-day operations. Among these utilities, there are also some other useful collection of Unix utilities which are not included by default in the Unix-like operating systems. Meet **moreutilis** , a growing collection of more useful Unix utilities. The moreutils can be installed on GNU/Linux, and various Unix flavours such as FreeBSD, openBSD and Mac OS.
-
-
-As of writing this guide, Moreutils provides the following utilities:
-
- * **chronic** – Runs a command quietly unless it fails.
- * **combine** – Combine the lines in two files using boolean operations.
- * **errno** – Look up errno names and descriptions.
- * **ifdata** – Get network interface info without parsing ifconfig output.
- * **ifne** – Run a program if the standard input is not empty.
- * **isutf8** – Check if a file or standard input is utf-8.
- * **lckdo** – Execute a program with a lock held.
- * **mispipe** – Pipe two commands, returning the exit status of the first.
- * **parallel** – Run multiple jobs at once.
- * **pee** – tee standard input to pipes.
- * **sponge** – Soak up standard input and write to a file.
- * **ts** – timestamp standard input.
- * **vidir** – Edit a directory in your text editor.
- * **vipe** – Insert a text editor into a pipe.
- * **zrun** – Automatically uncompress arguments to command.
-
-
-
-### Install moreutils on Linux
-
-The moreutils is packaged to many Linux distributions, so you can install it using the distribution’s package manager.
-
-On **Arch Linux** and derivatives such as **Antergos** , **Manjaro Linux** , run the following command to install moreutils.
-```
-$ sudo pacman -S moreutils
-
-```
-
-On **Fedora** :
-```
-$ sudo dnf install moreutils
-
-```
-
-On **RHEL** , **CentOS** , **Scientific Linux** :
-```
-$ sudo yum install epel-release
-
-$ sudo yum install moreutils
-
-```
-
-On **Debian** , **Ubuntu** , **Linux Mint** :
-```
-$ sudo apt-get install moreutils
-
-```
-
-### Moreutils – A Collection Of More Useful Unix Utilities
-
-Let us see the usage details of some moreutils tools.
-
-##### The “Combine” utility
-
-As the name implies, the **Combine** utility of moreutils package combines the sets of lines from two files using boolean operations such as “and”, “not”, “or”, “xor”.
-
- * **and** – Outputs lines that are in file1 if they are also present in file2.
- * **not** – Outputs lines that are in file1 but not in file2.
- * **or** – Outputs lines that are in file1 or file2.
- * **xor** – Outputs lines that are in either file1 or file2, but not in both files.
-
-
-
-Let me show you an example, so you can understand what exactly this utility will do . I have two files namely **file1** and **file2**. Here is the contents of the those two files.
-```
-$ cat file1
-is
-was
-were
-where
-there
-
-$ cat file2
-is
-were
-there
-
-```
-
-Now, let me combine them using “and” boolean operation.
-```
-$ combine file1 and file2
-is
-were
-there
-
-```
-
-As you see in the above example, the “and” Boolean operator outputs lines that are in file1 if they are also present in file2. To put this more clearly, it displays the common lines(Ex. is, were, there) which are present in both files.
-
-Let us now use “not” operator and see the result.
-```
-$ combine file1 not file2
-was
-where
-
-```
-
-As you see in the above output, the “not” operator displays the lines that are only in file1, but not in file2.
-
-##### The “ifdata” utility
-
-The “ifdata” utility can be used to check for the existence of a network interface, to get information about the network interface, such as its IP address. Unlike the built-in commands such as “ifconfig” or “ip”, ifdata has simple to parse output that is designed to be easily used by a shell script.
-
-To display IP address details of a network interface, say wlp9s0, run:
-```
-$ ifdata -p wlp9s0
-192.168.43.192 255.255.255.0 192.168.43.255 1500
-
-```
-
-To display the netmask only, run:
-```
-$ ifdata -pn wlp9s0
-255.255.255.0
-
-```
-
-To check hardware address of a NIC:
-```
-$ ifdata -ph wlp9s0
-A0:15:46:90:12:3E
-
-```
-
-To check if a NIC exists or not, use “-pe” flag.
-```
-$ ifdata -pe wlp9s0
-yes
-
-```
-
-##### The “Pee” command
-
-It is somewhat similar to “tee” command.
-
-Let us see an example of “tee” command usage.
-```
-$ echo "Welcome to OSTechNIx" | tee file1 file2
-Welcome to OSTechNIx
-
-```
-
-The above command will create two files namely **file1** and **file2**. Then, append the line “Welcome to OSTechNix” on both files. And finally prints the message “Welcome to OSTechNix” in your Terminal.
-
-The “Pee” command performs a similar function, but slightly differs from “tee” command. Look at the following command:
-```
-$ echo "Welcome to OSTechNIx" | pee cat cat
-Welcome to OSTechNIx
-Welcome to OSTechNIx
-
-```
-
-As you see in the above output, the two instances of “cat” command receives the output from “echo” command and displays them twice in the Terminal.
-
-##### The “Sponge” utility
-
-This is yet another useful utility from moreutils package. **Sponge** reads standard input and writes it out to the specified file. Unlike a shell redirect, sponge soaks up all its input before writing the output file.
-
-Have a look at the contents of following text file.
-```
-$ cat file1
-I
-You
-Me
-We
-Us
-
-```
-
-As you see, the file contains some random lines, particularly “not” in alphabetical order. You want to sort the contents in alphabetical order. What would you do?
-```
-$ sort file1 > file1_sorted
-
-```
-
-Correct, isn’t it? Of course! As you see in the above command, I have sorted the contents of the **file1** in alphabetical order and saved them in a new file called **“file1_sorted”**. But, You can do the same without creating a new (i.e file1_sorted) using “sponge” command as shown below.
-```
-$ sort file1 | sponge file1
-
-```
-
-Now, check if the contents are sorted in alphabetical order.
-```
-$ cat file1
-I
-Me
-Us
-We
-You
-
-```
-
-See? we don’t need to create a new file. It’s very useful in scripting. And the good thing is sponge preserves the permissions of the output file if it already exists.
-
-##### The “ts” utility
-
-As the name says, “ts” command adds a timestamp to the beginning of each line of input.
-
-Look at the following command’s output:
-```
-$ ping -c 2 localhost
-PING localhost(localhost.localdomain (::1)) 56 data bytes
-64 bytes from localhost.localdomain (::1): icmp_seq=1 ttl=64 time=0.055 ms
-64 bytes from localhost.localdomain (::1): icmp_seq=2 ttl=64 time=0.079 ms
-
---- localhost ping statistics ---
-2 packets transmitted, 2 received, 0% packet loss, time 1018ms
-rtt min/avg/max/mdev = 0.055/0.067/0.079/0.012 ms
-
-```
-
-Now, run the same command with “ts” utlity as shown below.
-```
-$ ping -c 2 localhost | ts
-Aug 21 13:32:28 PING localhost(localhost (::1)) 56 data bytes
-Aug 21 13:32:28 64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.063 ms
-Aug 21 13:32:28 64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.113 ms
-Aug 21 13:32:28
-Aug 21 13:32:28 --- localhost ping statistics ---
-Aug 21 13:32:28 2 packets transmitted, 2 received, 0% packet loss, time 4ms
-Aug 21 13:32:28 rtt min/avg/max/mdev = 0.063/0.088/0.113/0.025 ms
-
-```
-
-As you see in the above output, ts adds a timestamp at the beginning of each line. Here is another example.
-```
-$ ls -l | ts
-Aug 21 13:34:25 total 120
-Aug 21 13:34:25 drwxr-xr-x 2 sk users 12288 Aug 20 20:05 Desktop
-Aug 21 13:34:25 drwxr-xr-x 2 sk users 4096 Aug 10 18:44 Documents
-Aug 21 13:34:25 drwxr-xr-x 24 sk users 12288 Aug 21 13:06 Downloads
-[...]
-
-```
-
-##### The “Vidir” utility
-
-The “Vidir” utility allows you to edit the contents of a specified directory in **vi** editor (Or, whatever you have in **$EDITOR** ). If no directory is specified, it will edit your current working directory.
-
-The following command edits the contents of the directory called “Desktop”.
-```
-$ vidir Desktop/
-
-```
-
-![vidir][2]
-
-The above command will open the specified directory in your **vi** editor. Each item in the editing directory will contain a number. You can now edit the files as the way you do in vi editor. Say for example, delete lines to remove files from the directory, or edit filenames to rename files.
-
-You can edit the sub directories as well. The following command edits the current working directory along with its sub-directories.
-```
-$ find | vidir -
-
-```
-
-Please note the “-” at the end of the command. If “-” is specified as the directory to edit, it reads a list of filenames from stdin and displays those for editing.
-
-If you want to edit only the files in the current working directory, you can use the following command:
-```
-$ find -type f | vidir -
-
-```
-
-Want to edit a specific file types, say .PNG files? then you would use:
-```
-$ vidir *.png
-
-```
-
-This command edits only the .png files in the current directory.
-
-##### The “Vipe” Utility
-
-The “vipe” command allows you to run your default editor in the middle of a Unix pipeline and edit the data that is being piped between programs.
-
-The following command opens the vi editor (my default editor, of course) and allows you to edit the input of the “echo” command (i.e Welcome To OSTechNix) and displays the final result.
-```
-$ echo "Welcome to OSTechNIx" | vipe
-Hello World
-
-```
-
-As you see in the above output, I passed the input “Welcome to OSTechNix” to vi editor and edited them as “Hello World” and displayed the final output.
-
-And, that’s all for now. I have covered only few utilities. The “moreutils” has more useful utilities. I already have mentioned the currently included utilities in moreutils package in the introductory section. You can read the man pages for greater detail on the above commands. Say for example, to know more about “vidir” command, run:
-```
-$ man vidir
-
-```
-
-Hope this helps. I will be soon here with another interesting and useful guide. If you find our articles helpful, please share them on your social, professional networks and support OSTechNix.
-
-Cheers!
-
-
-
---------------------------------------------------------------------------------
-
-via: https://www.ostechnix.com/moreutils-collection-useful-unix-utilities/
-
-作者:[SK][a]
-选题:[lujun9972](https://github.com/lujun9972)
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://www.ostechnix.com/author/sk/
-[1]:data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
-[2]:http://www.ostechnix.com/wp-content/uploads/2017/08/sk@sk_001-1.png
diff --git a/sources/tech/20180821 How I recorded user behaviour on my competitor-s websites.md b/sources/tech/20180821 How I recorded user behaviour on my competitor-s websites.md
new file mode 100644
index 0000000000..b4729d730e
--- /dev/null
+++ b/sources/tech/20180821 How I recorded user behaviour on my competitor-s websites.md
@@ -0,0 +1,117 @@
+How I recorded user behaviour on my competitor’s websites
+======
+
+### Update
+
+Google’s team has tracked down my test site, most likely using the source code I shared and de-indexed the whole domain.
+
+Last time [I publicly exposed a flaw][1], Google issued a [manual penalty][2] and devalued a single offending page. This time, there is no notice in Search Console. The site is completely removed from their index without any notification.
+
+I’ve received a lot of criticism in the way I’ve handled this. Many are suggesting the right way is to approach Google directly with security flaws like this instead of writing about it publicly. Others are suggesting I acted unethically, or even illegally by running this test. I think it should be obvious that if I intended to exploit this method I wouldn’t write about it. With so much risk and so little gain, is this even worth doing in practice? Of course not. I’d be more concerned about those who do unethical things and don’t write about it.
+
+### My wish list:
+
+a) Manipulating the back button in Chrome shouldn’t be possible in 2018
+b) Websites that employ this tactic should be detected and penalised by Google’s algorithms
+c) If still found in Google’s results, such pages should be labelled with “this page may be harmful” notice.
+
+### Here’s what I did:
+
+ 1. User lands on my page (referrer: google)
+ 2. When they hit “back” button in Chrome, JS sends them to my copy of SERP
+ 3. Click on any competitor takes them to my mirror of competitor’s site (noindex)
+ 4. Now I generate heatmaps, scrollmaps, records screen interactions and typing.
+
+![][3]
+
+![script][4]
+![][5]
+![][6]
+
+Interestingly, only about 50% of users found anything suspicious, partly due to the fact that I used https on all my pages, which is one of the main [trust factors on the web][7].
+
+Many users are just happy to see the “padlock” in their browser.
+
+At this point I was able to:
+
+ * Generate heatmaps (clicks, moves, scroll depth)
+ * Record actual sessions (mouse movement, clicks, typing)
+
+
+
+I gasped when I realised I can actually **capture all form submissions and send them to my own email**.
+
+Note: I never actually tried that.
+
+Yikes!
+
+### Wouldn’t a website doing this be penalised?
+
+You would think so.
+
+I had this implemented for a **very brief period of time** (and for ethical reasons took it down almost immediately, realising that this may cause trouble). After that I changed the topic of the page completely and moved the test to one of my disposable domains where **remained** for five years and ranked really well, though for completely different search terms with rather low search volumes. Its new purpose was to mess with conspiracy theory people.
+
+### Alternative Technique
+
+You don’t have to spoof Google SERPs to generate competitor’s heatmaps, you can simply A/B test your landing page VS your clone of theirs through paid traffic (e.g. social media). Is the A/B testing version of this ethically OK? I don’t know, but it may get you in legal trouble depending on where you live.
+
+### What did I learn?
+
+Users seldom read home page “fluff” and often look for things like testimonials, case studies, pricing levels and staff profiles / company information in search for credibility and trust. One of my upcoming tests will be to combine home page with “about us”, “testimonials”, “case studies” and “packages”. This would give users all they really want on a single page.
+
+### Reader Suggestions
+
+“I would’ve thrown in an exit pop-up to let users know what they’d just been subjected to.”
+
+
+### From Hacker News
+
+> Howdy, former Matasano pentester here.
+> FWIW, I would probably have done something similar to them before I’d worked in the security industry. It’s an easy mistake to make, because it’s one you make by default: intellectual curiosity doesn’t absolve you from legal judgement, and people on the internet tend to flip out if you do something illegal and say anything but “You’re right, I was mistaken. I’ve learned my lesson.”
+>
+> To the author: The reason you pattern-matched into the blackhat category instead of whitehat/grayhat (grayhat?) category is that in the security industry, whenever we discover a vuln, we PoC it and then write it up in the report and tell them immediately. The report typically includes background info, reproduction steps, and recommended actions. The whole thing is typically clinical and detached.
+>
+> Most notably, the PoC is usually as simple as possible. alert(1) suffices to demonstrate XSS, for example, rather than implementing a fully-working cookie swipe. The latter is more fun, but the former is more impactful.
+>
+> One interesting idea would’ve been to create a fake competitor — e.g. “VirtualBagel: Just download your bagels and enjoy.” Once it’s ranking on Google, run this same experiment and see if you could rank higher.
+>
+> That experiment would demonstrate two things: (1) the history vulnerability exists, and (2) it’s possible for someone to clone a competitor and outrank them with this vulnerability, thereby raising it from sev:low to sev:hi.
+>
+> So to be clear, the crux of the issue was running the exploit on a live site without their blessing.
+>
+> But again, don’t worry too much. I would have made similar errors without formal training. It’s easy for everyone to say “Oh well it’s obvious,” but when you feel like you have good intent, it’s not obvious at all.
+>
+> I remind everyone that RTM once ran afoul of the law due to similar intellectual curiosity. (In fairness, his experiment exploded half the internet, but still.)
+
+Source:
+
+
+### About the author
+
+[Dan Petrovic][9]
+
+Dan Petrovic, the managing director of DEJAN, is Australia’s best-known name in the field of search engine optimisation. Dan is a web author, innovator and a highly regarded search industry event speaker.
+
+
+--------------------------------------------------------------------------------
+
+via: https://dejanseo.com.au/competitor-hack/
+
+作者:[Dan Petrovic][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://dejanseo.com.au/dan-petrovic/
+[1]:https://dejanseo.com.au/hijack/
+[2]:https://dejanseo.com.au/google-against-content-scrapers/
+[3]:https://dejanseo.com.au/wp-content/uploads/2018/08/step-1.png
+[4]:https://dejanseo.com.au/wp-content/uploads/2018/08/script.gif
+[5]:https://dejanseo.com.au/wp-content/uploads/2018/08/step-2.png
+[6]:https://dejanseo.com.au/wp-content/uploads/2018/08/step-3.png
+[7]:https://dejanseo.com.au/trust/
+[8]:https://secure.gravatar.com/avatar/9068275e6d3863b7dc11f7dff0974ced?s=100&d=mm&r=g
+[9]:https://dejanseo.com.au/dan-petrovic/ (Dan Petrovic)
+[10]:https://dejanseo.com.au/author/admin/ (More posts by Dan Petrovic)
diff --git a/sources/tech/20180822 What is a Makefile and how does it work.md b/sources/tech/20180822 What is a Makefile and how does it work.md
new file mode 100644
index 0000000000..cf168cc44d
--- /dev/null
+++ b/sources/tech/20180822 What is a Makefile and how does it work.md
@@ -0,0 +1,322 @@
+What is a Makefile and how does it work?
+======
+
+
+If you want to run or update a task when certain files are updated, the `make` utility can come in handy. The `make` utility requires a file, `Makefile` (or `makefile`), which defines set of tasks to be executed. You may have used `make` to compile a program from source code. Most open source projects use `make` to compile a final executable binary, which can then be installed using `make install`.
+
+In this article, we'll explore `make` and `Makefile` using basic and advanced examples. Before you start, ensure that `make` is installed in your system.
+
+### Basic examples
+
+Let's start by printing the classic "Hello World" on the terminal. Create a empty directory `myproject` containing a file `Makefile` with this content:
+```
+say_hello:
+
+ echo "Hello World"
+
+```
+
+Now run the file by typing `make` inside the directory `myproject`. The output will be:
+```
+$ make
+
+echo "Hello World"
+
+Hello World
+
+```
+
+In the example above, `say_hello` behaves like a function name, as in any programming language. This is called the target. The prerequisites or dependencies follow the target. For the sake of simplicity, we have not defined any prerequisites in this example. The command `echo "Hello World"` is called the recipe. The recipe uses prerequisites to make a target. The target, prerequisites, and recipes together make a rule.
+
+To summarize, below is the syntax of a typical rule:
+```
+target: prerequisites
+
+ recipe
+
+```
+
+As an example, a target might be a binary file that depends on prerequisites (source files). On the other hand, a prerequisite can also be a target that depends on other dependencies:
+```
+final_target: sub_target final_target.c
+
+ Recipe_to_create_final_target
+
+
+
+sub_target: sub_target.c
+
+ Recipe_to_create_sub_target
+
+```
+
+It is not necessary for the target to be a file; it could be just a name for the recipe, as in our example. We call these "phony targets."
+
+Going back to the example above, when `make` was executed, the entire command `echo "Hello World"` was displayed, followed by actual command output. We often don't want that. To suppress echoing the actual command, we need to start `echo` with `@`:
+```
+say_hello:
+
+ @echo "Hello World"
+
+```
+
+Now try to run `make` again. The output should display only this:
+```
+$ make
+
+Hello World
+
+```
+
+Let's add a few more phony targets: `generate` and `clean` to the `Makefile`:
+```
+say_hello:
+ @echo "Hello World"
+
+generate:
+ @echo "Creating empty text files..."
+ touch file-{1..10}.txt
+
+clean:
+ @echo "Cleaning up..."
+ rm *.txt
+```
+
+If we try to run `make` after the changes, only the target `say_hello` will be executed. That's because only the first target in the makefile is the default target. Often called the default goal, this is the reason you will see `all` as the first target in most projects. It is the responsibility of `all` to call other targets. We can override this behavior using a special phony target called `.DEFAULT_GOAL`.
+
+Let's include that at the beginning of our makefile:
+```
+.DEFAULT_GOAL := generate
+```
+
+This will run the target `generate` as the default:
+```
+$ make
+Creating empty text files...
+touch file-{1..10}.txt
+```
+
+As the name suggests, the phony target `.DEFAULT_GOAL` can run only one target at a time. This is why most makefiles include `all` as a target that can call as many targets as needed.
+
+Let's include the phony target `all` and remove `.DEFAULT_GOAL`:
+```
+all: say_hello generate
+
+say_hello:
+ @echo "Hello World"
+
+generate:
+ @echo "Creating empty text files..."
+ touch file-{1..10}.txt
+
+clean:
+ @echo "Cleaning up..."
+ rm *.txt
+```
+
+Before running `make`, let's include another special phony target, `.PHONY`, where we define all the targets that are not files. `make` will run its recipe regardless of whether a file with that name exists or what its last modification time is. Here is the complete makefile:
+```
+.PHONY: all say_hello generate clean
+
+all: say_hello generate
+
+say_hello:
+ @echo "Hello World"
+
+generate:
+ @echo "Creating empty text files..."
+ touch file-{1..10}.txt
+
+clean:
+ @echo "Cleaning up..."
+ rm *.txt
+```
+
+The `make` should call `say_hello` and `generate`:
+```
+$ make
+Hello World
+Creating empty text files...
+touch file-{1..10}.txt
+```
+
+It is a good practice not to call `clean` in `all` or put it as the first target. `clean` should be called manually when cleaning is needed as a first argument to `make`:
+```
+$ make clean
+Cleaning up...
+rm *.txt
+```
+
+Now that you have an idea of how a basic makefile works and how to write a simple makefile, let's look at some more advanced examples.
+
+### Advanced examples
+
+#### Variables
+
+In the above example, most target and prerequisite values are hard-coded, but in real projects, these are replaced with variables and patterns.
+
+The simplest way to define a variable in a makefile is to use the `=` operator. For example, to assign the command `gcc` to a variable `CC`:
+```
+CC = gcc
+```
+
+This is also called a recursive expanded variable, and it is used in a rule as shown below:
+```
+hello: hello.c
+ ${CC} hello.c -o hello
+```
+
+As you may have guessed, the recipe expands as below when it is passed to the terminal:
+```
+gcc hello.c -o hello
+```
+
+Both `${CC}` and `$(CC)` are valid references to call `gcc`. But if one tries to reassign a variable to itself, it will cause an infinite loop. Let's verify this:
+```
+CC = gcc
+CC = ${CC}
+
+all:
+ @echo ${CC}
+```
+
+Running `make` will result in:
+```
+$ make
+Makefile:8: *** Recursive variable 'CC' references itself (eventually). Stop.
+```
+
+To avoid this scenario, we can use the `:=` operator (this is also called the simply expanded variable). We should have no problem running the makefile below:
+```
+CC := gcc
+CC := ${CC}
+
+all:
+ @echo ${CC}
+```
+
+#### Patterns and functions
+
+The following makefile can compile all C programs by using variables, patterns, and functions. Let's explore it line by line:
+```
+# Usage:
+# make # compile all binary
+# make clean # remove ALL binaries and objects
+
+.PHONY = all clean
+
+CC = gcc # compiler to use
+
+LINKERFLAG = -lm
+
+SRCS := $(wildcard *.c)
+BINS := $(SRCS:%.c=%)
+
+all: ${BINS}
+
+%: %.o
+ @echo "Checking.."
+ ${CC} ${LINKERFLAG} $< -o $@
+
+%.o: %.c
+ @echo "Creating object.."
+ ${CC} -c $<
+
+clean:
+ @echo "Cleaning up..."
+ rm -rvf *.o ${BINS}
+```
+
+ * Lines starting with `#` are comments.
+
+ * Line `.PHONY = all clean` defines phony targets `all` and `clean`.
+
+ * Variable `LINKERFLAG` defines flags to be used with `gcc` in a recipe.
+
+ * `SRCS := $(wildcard *.c)`: `$(wildcard pattern)` is one of the functions for filenames. In this case, all files with the `.c` extension will be stored in a variable `SRCS`.
+
+ * `BINS := $(SRCS:%.c=%)`: This is called as substitution reference. In this case, if `SRCS` has values `'foo.c bar.c'`, `BINS` will have `'foo bar'`.
+
+ * Line `all: ${BINS}`: The phony target `all` calls values in`${BINS}` as individual targets.
+
+ * Rule:
+```
+%: %.o
+ @echo "Checking.."
+ ${CC} ${LINKERFLAG} $< -o $@
+```
+
+Let's look at an example to understand this rule. Suppose `foo` is one of the values in `${BINS}`. Then `%` will match `foo`(`%` can match any target name). Below is the rule in its expanded form:
+```
+foo: foo.o
+ @echo "Checking.."
+ gcc -lm foo.o -o foo
+
+```
+
+As shown, `%` is replaced by `foo`. `$<` is replaced by `foo.o`. `$<` is patterned to match prerequisites and `$@` matches the target. This rule will be called for every value in `${BINS}`
+
+ * Rule:
+```
+%.o: %.c
+ @echo "Creating object.."
+ ${CC} -c $<
+```
+
+Every prerequisite in the previous rule is considered a target for this rule. Below is the rule in its expanded form:
+```
+foo.o: foo.c
+ @echo "Creating object.."
+ gcc -c foo.c
+```
+
+ * Finally, we remove all binaries and object files in target `clean`.
+
+
+
+
+Below is the rewrite of the above makefile, assuming it is placed in the directory having a single file `foo.c:`
+```
+# Usage:
+# make # compile all binary
+# make clean # remove ALL binaries and objects
+
+.PHONY = all clean
+
+CC = gcc # compiler to use
+
+LINKERFLAG = -lm
+
+SRCS := foo.c
+BINS := foo
+
+all: foo
+
+foo: foo.o
+ @echo "Checking.."
+ gcc -lm foo.o -o foo
+
+foo.o: foo.c
+ @echo "Creating object.."
+ gcc -c foo.c
+
+clean:
+ @echo "Cleaning up..."
+ rm -rvf foo.o foo
+```
+
+For more on makefiles, refer to the [GNU Make manual][1], which offers a complete reference and examples.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/18/8/what-how-makefile
+
+作者:[Sachin Patil][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[译者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/psachin
+[1]:https://www.gnu.org/software/make/manual/make.pdf
diff --git a/sources/tech/20180823 An introduction to pipes and named pipes in Linux.md b/sources/tech/20180823 An introduction to pipes and named pipes in Linux.md
new file mode 100644
index 0000000000..ab6a8cf932
--- /dev/null
+++ b/sources/tech/20180823 An introduction to pipes and named pipes in Linux.md
@@ -0,0 +1,60 @@
+translating---geekpi
+
+An introduction to pipes and named pipes in Linux
+======
+
+
+
+In Linux, the `pipe` command lets you sends the output of one command to another. Piping, as the term suggests, can redirect the standard output, input, or error of one process to another for further processing.
+
+The syntax for the `pipe` or `unnamed pipe` command is the `|` character between any two commands:
+
+`Command-1 | Command-2 | …| Command-N`
+
+Here, the pipe cannot be accessed via another session; it is created temporarily to accommodate the execution of `Command-1` and redirect the standard output. It is deleted after successful execution.
+
+
+
+In the example above, contents.txt contains a list of all files in a particular directory—specifically, the output of the ls -al command. We first grep the filenames with the "file" keyword from contents.txt by piping (as shown), so the output of the cat command is provided as the input for the grep command. Next, we add piping to execute the awk command, which displays the 9th column from the filtered output from the grep command. We can also count the number of rows in contents.txt using the wc -l command.
+
+A named pipe can last until as long as the system is up and running or until it is deleted. It is a special file that follows the [FIFO][1] (first in, first out) mechanism. It can be used just like a normal file; i.e., you can write to it, read from it, and open or close it. To create a named pipe, the command is:
+```
+mkfifo
+
+```
+
+This creates a named pipe file that can be used even over multiple shell sessions.
+
+Another way to create a FIFO named pipe is to use this command:
+```
+mknod p
+
+```
+
+To redirect a standard output of any command to another process, use the `>` symbol. To redirect a standard input of any command, use the `<` symbol.
+
+
+
+As shown above, the output of the `ls -al` command is redirected to `contents.txt` and inserted in the file. Similarly, the input for the `tail` command is provided as `contents.txt` via the `<` symbol.
+
+
+
+
+
+Here, we have created a named pipe, `my-named-pipe`, and redirected the output of the `ls -al` command into the named pipe. We can the open a new shell session and `cat` the contents of the named pipe, which shows the output of the `ls -al` command, as previously supplied. Notice the size of the named pipe is zero and it has a designation of "p".
+
+So, next time you're working with commands at the Linux terminal and find yourself moving data between commands, hopefully a pipe will make the process quick and easy.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/18/8/introduction-pipes-linux
+
+作者:[Archit Modi][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[译者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/architmodi
+[1]:https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)
diff --git a/sources/tech/20180823 Getting started with Sensu monitoring.md b/sources/tech/20180823 Getting started with Sensu monitoring.md
new file mode 100644
index 0000000000..7d0a65e306
--- /dev/null
+++ b/sources/tech/20180823 Getting started with Sensu monitoring.md
@@ -0,0 +1,290 @@
+Getting started with Sensu monitoring
+======
+
+
+Sensu is an open source infrastructure and application monitoring solution that monitors servers, services, and application health, and sends alerts and notifications with third-party integration. Written in Ruby, Sensu can use either [RabbitMQ][1] or [Redis][2] to handle messages. It uses Redis to store data.
+
+If you want to monitor your cloud infrastructure in a simple and efficient manner, Sensu is a good option. It can be integrated with many of the modern DevOps stacks your organization may already be using, such as [Slack][3], [HipChat][4], or [IRC][5], and it can even send mobile/pager alerts with [PagerDuty][6].
+
+Sensu's [modular architecture][7] means every component can be installed on the same server or on completely separate machines.
+
+### Architecture
+
+Sensu's main communication mechanism is the Transport. Every Sensu component must connect to the Transport in order to send messages to each other. Transport can use either RabbitMQ (recommended in production) or Redis.
+
+Sensu Server processes event data and takes action. It registers clients and processes check results and monitoring events using filters, mutators, and handlers. The server publishes check definitions to the clients and the Sensu API provides a RESTful API, providing access to monitoring data and core functionality.
+
+[Sensu Client][8] executes checks either scheduled by Sensu Server or local checks definitions. Sensu uses a data store (Redis) to keep all the persistent data. Finally, [Uchiwa][9] is the web interface to communicate with Sensu API.
+
+![sensu_system.png][11]
+
+### Installing Sensu
+
+#### Prerequisites
+
+ * One Linux installation to act as the server node (I used CentOS 7 for this article)
+
+ * One or more Linux machines to monitor (clients)
+
+
+
+
+#### Server side
+
+Sensu requires Redis to be installed. To install Redis, enable the EPEL repository:
+```
+$ sudo yum install epel-release -y
+
+```
+
+Then install Redis:
+```
+$ sudo yum install redis -y
+
+```
+
+Modify `/etc/redis.conf` to disable protected mode, listen on every interface, and set a password:
+```
+$ sudo sed -i 's/^protected-mode yes/protected-mode no/g' /etc/redis.conf
+
+$ sudo sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis.conf
+
+$ sudo sed -i 's/^# requirepass foobared/requirepass password123/g' /etc/redis.conf
+
+```
+
+Enable and start Redis service:
+```
+$ sudo systemctl enable redis
+$ sudo systemctl start redis
+```
+
+Redis is now installed and ready to be used by Sensu.
+
+Now let’s install Sensu.
+
+First, configure the Sensu repository and install the packages:
+```
+$ sudo tee /etc/yum.repos.d/sensu.repo << EOF
+[sensu]
+name=sensu
+baseurl=https://sensu.global.ssl.fastly.net/yum/\$releasever/\$basearch/
+gpgcheck=0
+enabled=1
+EOF
+
+$ sudo yum install sensu uchiwa -y
+```
+
+Let’s create the bare minimum configuration files for Sensu:
+```
+$ sudo tee /etc/sensu/conf.d/api.json << EOF
+{
+ "api": {
+ "host": "127.0.0.1",
+ "port": 4567
+ }
+}
+EOF
+```
+
+Next, configure `sensu-api` to listen on localhost, with Port 4567:
+```
+$ sudo tee /etc/sensu/conf.d/redis.json << EOF
+{
+ "redis": {
+ "host": "",
+ "port": 6379,
+ "password": "password123"
+ }
+}
+EOF
+
+
+$ sudo tee /etc/sensu/conf.d/transport.json << EOF
+{
+ "transport": {
+ "name": "redis"
+ }
+}
+EOF
+```
+
+In these two files, we configure Sensu to use Redis as the transport mechanism and the address where Redis will listen. Clients need to connect directly to the transport mechanism. These two files will be required on each client machine.
+```
+$ sudo tee /etc/sensu/uchiwa.json << EOF
+{
+ "sensu": [
+ {
+ "name": "sensu",
+ "host": "127.0.0.1",
+ "port": 4567
+ }
+ ],
+ "uchiwa": {
+ "host": "0.0.0.0",
+ "port": 3000
+ }
+}
+EOF
+```
+
+In this file, we configure Uchiwa to listen on every interface (0.0.0.0) on Port 3000. We also configure Uchiwa to use `sensu-api` (already configured).
+
+For security reasons, change the owner of the configuration files you just created:
+```
+$ sudo chown -R sensu:sensu /etc/sensu
+```
+
+Enable and start the Sensu services:
+```
+$ sudo systemctl enable sensu-server sensu-api sensu-client
+$ sudo systemctl start sensu-server sensu-api sensu-client
+$ sudo systemctl enable uchiwa
+$ sudo systemctl start uchiwa
+```
+
+Try accessing the Uchiwa website: http://:3000
+
+For production environments, it’s recommended to run a cluster of RabbitMQ as the Transport instead of Redis (a Redis cluster can be used in production too), and to run more than one instance of Sensu Server and API for load balancing and high availability.
+
+Sensu is now installed. Now let’s configure the clients.
+
+#### Client side
+
+To add a new client, you will need to enable Sensu repository on the client machines by creating the file `/etc/yum.repos.d/sensu.repo`.
+```
+$ sudo tee /etc/yum.repos.d/sensu.repo << EOF
+[sensu]
+name=sensu
+baseurl=https://sensu.global.ssl.fastly.net/yum/\$releasever/\$basearch/
+gpgcheck=0
+enabled=1
+EOF
+```
+
+With the repository enabled, install the package Sensu:
+```
+$ sudo yum install sensu -y
+```
+
+To configure `sensu-client`, create the same `redis.json` and `transport.json` created in the server machine, as well as the `client.json` configuration file:
+```
+$ sudo tee /etc/sensu/conf.d/client.json << EOF
+{
+ "client": {
+ "name": "rhel-client",
+ "environment": "development",
+ "subscriptions": [
+ "frontend"
+ ]
+ }
+}
+EOF
+```
+
+In the name field, specify a name to identify this client (typically the hostname). The environment field can help you filter, and subscription defines which monitoring checks will be executed by the client.
+
+Finally, enable and start the services and check in Uchiwa, as the new client will register automatically:
+```
+$ sudo systemctl enable sensu-client
+$ sudo systemctl start sensu-client
+```
+
+### Sensu checks
+
+Sensu checks have two components: a plugin and a definition.
+
+Sensu is compatible with the [Nagios check plugin specification][12], so any check for Nagios can be used without modification. Checks are executable files and are run by the Sensu client.
+
+Check definitions let Sensu know how, where, and when to run the plugin.
+
+#### Client side
+
+Let’s install one check plugin on the client machine. Remember, this plugin will be executed on the clients.
+
+Enable EPEL and install `nagios-plugins-http` :
+```
+$ sudo yum install -y epel-release
+$ sudo yum install -y nagios-plugins-http
+```
+
+Now let’s explore the plugin by executing it manually. Try checking the status of a web server running on the client machine. It should fail as we don’t have a web server running:
+```
+$ /usr/lib64/nagios/plugins/check_http -I 127.0.0.1
+connect to address 127.0.0.1 and port 80: Connection refused
+HTTP CRITICAL - Unable to open TCP socket
+```
+
+It failed, as expected. Check the return code of the execution:
+```
+$ echo $?
+2
+
+```
+
+The Nagios check plugin specification defines four return codes for the plugin execution:
+
+| **Plugin return code** | **State** |
+|------------------------|-----------|
+| 0 | OK |
+| 1 | WARNING |
+| 2 | CRITICAL |
+| 3 | UNKNOWN |
+
+With this information, we can now create the check definition on the server.
+
+#### Server side
+
+On the server machine, create the file `/etc/sensu/conf.d/check_http.json`:
+```
+{
+ "checks": {
+ "check_http": {
+ "command": "/usr/lib64/nagios/plugins/check_http -I 127.0.0.1",
+ "interval": 10,
+ "subscribers": [
+ "frontend"
+ ]
+ }
+ }
+}
+```
+
+In the command field, use the command we tested before. `Interval` will tell Sensu how frequently, in seconds, this check should be executed. Finally, `subscribers` will define the clients where the check will be executed.
+
+Restart both sensu-api and sensu-server and confirm that the new check is available in Uchiwa.
+```
+$ sudo systemctl restart sensu-api sensu-server
+```
+
+### What’s next?
+
+Sensu is a powerful tool, and this article covers just a glimpse of what it can do. See the [documentation][13] to learn more, and visit the Sensu site to learn more about the [Sensu community][14].
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/18/8/getting-started-sensu-monitoring-solution
+
+作者:[Michael Zamot][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[译者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/mzamot
+[1]:https://www.rabbitmq.com/
+[2]:https://redis.io/topics/config
+[3]:https://slack.com/
+[4]:https://en.wikipedia.org/wiki/HipChat
+[5]:http://www.irc.org/
+[6]:https://www.pagerduty.com/
+[7]:https://docs.sensu.io/sensu-core/1.4/overview/architecture/
+[8]:https://docs.sensu.io/sensu-core/1.4/installation/install-sensu-client/
+[9]:https://uchiwa.io/#/
+[10]:/file/406576
+[11]:https://opensource.com/sites/default/files/uploads/sensu_system.png (sensu_system.png)
+[12]:https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/pluginapi.html
+[13]:https://docs.sensu.io/
+[14]:https://sensu.io/community
diff --git a/sources/tech/20180823 How To Easily And Safely Manage Cron Jobs In Linux.md b/sources/tech/20180823 How To Easily And Safely Manage Cron Jobs In Linux.md
new file mode 100644
index 0000000000..aa4ec0a655
--- /dev/null
+++ b/sources/tech/20180823 How To Easily And Safely Manage Cron Jobs In Linux.md
@@ -0,0 +1,131 @@
+How To Easily And Safely Manage Cron Jobs In Linux
+======
+
+
+
+When it comes to schedule tasks in Linux, which utility comes to your mind first? Yeah, you guessed it right. **Cron!** The cron utility helps you to schedule commands/tasks at specific time in Unix-like operating systems. We already published a [**beginners guides to Cron jobs**][1]. I have a few years experience in Linux, so setting up cron jobs is no big deal for me. But, it is not piece of cake for newbies. The noobs may unknowingly do small mistakes while editing plain text crontab and bring down all cron jobs. Just in case, if you think you might mess up with your cron jobs, there is a good alternative way. Say hello to **Crontab UI** , a web-based tool to easily and safely manage cron jobs in Unix-like operating systems.
+
+You don’t need to manually edit the crontab file to create, delete and manage cron jobs. Everything can be done via a web browser with a couple mouse clicks. Crontab UI allows you to easily create, edit, pause, delete, backup cron jobs, and even import, export and deploy jobs on other machines without much hassle. Error log, mailing and hooks support also possible. It is free, open source and written using NodeJS.
+
+### Installing Crontab UI
+
+Installing Crontab UI is just a one-liner command. Make sure you have installed NPM. If you haven’t install npm yet, refer the following link.
+
+Next, run the following command to install Crontab UI.
+```
+$ npm install -g crontab-ui
+
+```
+
+It’s that simple. Let us go ahead and see how to manage cron jobs using Crontab UI.
+
+### Easily And Safely Manage Cron Jobs In Linux
+
+To launch Crontab UI, simply run:
+```
+$ crontab-ui
+
+```
+
+You will see the following output:
+```
+Node version: 10.8.0
+Crontab UI is running at http://127.0.0.1:8000
+
+```
+
+Now, open your web browser and navigate to ****. Make sure the port no 8000 is allowed in your firewall/router.
+
+Please note that you can only access Crontab UI web dashboard within the local system itself.
+
+If you want to run Crontab UI with your system’s IP and custom port (so you can access it from any remote system in the network), use the following command instead:
+```
+$ HOST=0.0.0.0 PORT=9000 crontab-ui
+Node version: 10.8.0
+Crontab UI is running at http://0.0.0.0:9000
+
+```
+
+Now, Crontab UI can be accessed from the any system in the nework using URL – **http:// :9000**.
+
+This is how Crontab UI dashboard looks like.
+
+
+
+As you can see in the above screenshot, Crontab UI dashbaord is very simply. All options are self-explanatory.
+
+To exit Crontab UI, press **CTRL+C**.
+
+**Create, edit, run, stop, delete a cron job**
+
+To create a new cron job, click on “New” button. Enter your cron job details and click Save.
+
+ 1. Name the cron job. It is optional.
+ 2. The full command you want to run.
+ 3. Choose schedule time. You can either choose the quick schedule time, (such as Startup, Hourly, Daily, Weekly, Monthly, Yearly) or set the exact time to run the command. After you choosing the schedule time, the syntax of the cron job will be shown in **Jobs** field.
+ 4. Choose whether you want to enable error logging for the particular job.
+
+
+
+Here is my sample cron job.
+
+
+
+As you can see, I have setup a cron job to clear pacman cache at every month.
+
+Similarly, you can create any number of jobs as you want. You will see all cron jobs in the dashboard.
+
+
+
+If you wanted to change any parameter in a cron job, just click on the **Edit** button below the job and modify the parameters as you wish. To run a job immediately, click on the button that says **Run**. To stop a job, click **Stop** button. You can view the log details of any job by clicking on the **Log** button. If the job is no longer required, simply press **Delete** button.
+
+**Backup cron jobs**
+
+To backup all cron jobs, press the Backup from main dashboard and choose OK to confirm the backup.
+
+
+
+You can use this backup in case you messed with the contents of the crontab file.
+
+**Import/Export cron jobs to other systems**
+
+Another notable feature of Crontab UI is you can import, export and deploy cron jobs to other systems. If you have multiple systems on your network that requires the same cron jobs, just press **Export** button and choose the location to save the file. All contents of crontab file will be saved in a file named **crontab.db**.
+
+Here is the contents of the crontab.db file.
+```
+$ cat Downloads/crontab.db
+{"name":"Remove Pacman Cache","command":"rm -rf /var/cache/pacman","schedule":"@monthly","stopped":false,"timestamp":"Thu Aug 23 2018 10:34:19 GMT+0000 (Coordinated Universal Time)","logging":"true","mailing":{},"created":1535020459093,"_id":"lcVc1nSdaceqS1ut"}
+
+```
+
+Then you can transfer the entire crontab.db file to some other system and import its to the new system. You don’t need to manually create cron jobs in all systems. Just create them in one system and export and import all of them to every system on the network.
+
+**Get the contents from or save to existing crontab file**
+
+There are chances that you might have already created some cron jobs using **crontab** command. If so, you can retrieve contents of the existing crontab file by click on the **“Get from crontab”** button in main dashboard.
+
+
+
+Similarly, you can save the newly created jobs using Crontab UI utility to existing crontab file in your system. To do so, just click **Save to crontab** option in the dashboard.
+
+See? Managing cron jobs is not that complicated. Any newbie user can easily maintain any number of jobs without much hassle using Crontab UI. Give it a try and let us know what do you think about this tool. I am all ears!
+
+And, that’s all for now. Hope this was useful. More good stuffs to come. Stay tuned!
+
+Cheers!
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/how-to-easily-and-safely-manage-cron-jobs-in-linux/
+
+作者:[SK][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.ostechnix.com/author/sk/
+[1]:https://www.ostechnix.com/a-beginners-guide-to-cron-jobs/
diff --git a/sources/tech/20180823 How to publish a WordPress blog to a static GitLab Pages site.md b/sources/tech/20180823 How to publish a WordPress blog to a static GitLab Pages site.md
new file mode 100644
index 0000000000..5e91bf0708
--- /dev/null
+++ b/sources/tech/20180823 How to publish a WordPress blog to a static GitLab Pages site.md
@@ -0,0 +1,90 @@
+How to publish a WordPress blog to a static GitLab Pages site
+======
+
+
+
+A long time ago, I set up a WordPress blog for a family member. There are lots of options these days, but back then there were few decent choices if you needed a web-based CMS with a WYSIWYG editor. An unfortunate side effect of things working well is that the blog has generated a lot of content over time. That means I was also regularly updating WordPress to protect against the exploits that are constantly popping up.
+
+So I decided to convince the family member that switching to [Hugo][1] would be relatively easy, and the blog could then be hosted on [GitLab][2]. But trying to extract all that content and convert it to [Markdown][3] turned into a huge hassle. There were automated scripts that got me 95% there, but nothing worked perfectly. Manually updating all the posts was not something I wanted to do, so eventually, I gave up trying to move the blog.
+
+Recently, I started thinking about this again and realized there was a solution I hadn't considered: I could continue maintaining the WordPress server but set it up to publish a static mirror and serve that with [GitLab Pages][4] (or [GitHub Pages][5] if you like). This would allow me to automate [Let's Encrypt][6] certificate renewals as well as eliminate the security concerns associated with hosting a WordPress site. This would, however, mean comments would stop working, but that feels like a minor loss in this case because the blog did not garner many comments.
+
+Here's the solution I came up with, which so far seems to be working well:
+
+ * Host WordPress site at URL that is not linked to or from anywhere else to reduce the odds of it being exploited. In this example, we'll use (even though this site is actually built with Pelican).
+ * [Set up hosting on GitLab Pages][7] for the public URL .
+ * Add a [cron job][8] that determines when the last-built date differs between the two URLs; if the build dates differ, mirror the WordPress version.
+ * After mirroring with `wget`, update all links from "private" version to "public" version.
+ * Do a `git push` to publish the new content.
+
+
+
+These are the two scripts I use:
+
+`check-diff.sh` (called by cron every 15 minutes)
+```
+#!/bin/bash
+
+ORIGINDATE="$(curl -v --silent http://private.localconspiracy.com/feed/ 2>&1|grep lastBuildDate)"
+PUBDATE="$(curl -v --silent https://www.localconspiracy.com/feed/ 2>&1|grep lastBuildDate)"
+
+if [ "$ORIGINDATE" != "$PUBDATE" ]
+then
+ /home/doc/repos/localconspiracy/mirror.sh
+fi
+```
+
+`mirror.sh:`
+```
+#!/bin/sh
+
+cd /home/doc/repos/localconspiracy
+
+wget \
+--mirror \
+--convert-links \
+--adjust-extension \
+--page-requisites \
+--retry-connrefused \
+--exclude-directories=comments \
+--execute robots=off \
+http://private.localconspiracy.com
+
+git rm -rf public/*
+mv private.localconspiracy.com/* public/.
+rmdir private.localconspiracy.com
+find ./public/ -type f -exec sed -i -e 's|http://private.localconspiracy|https://www.localconspiracy|g' {} \;
+find ./public/ -type f -exec sed -i -e 's|http://www.localconspiracy|https://www.localconspiracy|g' {} \;
+git add public/*
+git commit -m "new snapshot"
+git push origin master
+```
+
+That's it! Now, when the blog is changed, within 15 minutes the site is mirrored to a static version and pushed up to the repo where it will be reflected in GitLab pages.
+
+This concept could be extended a little further if you wanted to [run WordPress locally][9]. In that case, you would not need a server to host your WordPress blog; you could just run it on your local machine. In that scenario, there's no chance of your blog getting exploited. As long as you can run `wget` against it locally, you could use the approach outlined above to have a WordPress site hosted on GitLab Pages.
+
+_This article was originally posted at[Local Conspiracy][10]. Reposted with permission._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/18/8/publish-wordpress-static-gitlab-pages-site
+
+作者:[Christopher Aedo][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[译者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/docaedo
+[1]:https://gohugo.io/
+[2]:https://gitlab.com/
+[3]:https://en.wikipedia.org/wiki/Markdown
+[4]:https://docs.gitlab.com/ee/user/project/pages/
+[5]:https://pages.github.com/
+[6]:https://letsencrypt.org/
+[7]:https://about.gitlab.com/2016/04/07/gitlab-pages-setup/
+[8]:https://en.wikipedia.org/wiki/Cron
+[9]:https://codex.wordpress.org/Installing_WordPress_Locally_on_Your_Mac_With_MAMP
+[10]:https://localconspiracy.com/2018/08/wp-on-gitlab.html
diff --git a/sources/tech/20180824 5 cool music player apps.md b/sources/tech/20180824 5 cool music player apps.md
new file mode 100644
index 0000000000..3a8d90400c
--- /dev/null
+++ b/sources/tech/20180824 5 cool music player apps.md
@@ -0,0 +1,108 @@
+5 cool music player apps
+======
+
+
+Do you like music? Then Fedora may have just what you’re looking for. This article introduces different music player apps that run on Fedora. You’re covered whether you have an extensive music library, a small one, or none at all. Here are four graphical application and one terminal-based music player that will have you jamming.
+
+### Quod Libet
+
+Quod Libet is a complete manager for your large audio library. If you have an extensive audio library that you would like not just listen to, but also manage, Quod Libet might a be a good choice for you.
+
+![][1]
+
+Quod Libet can import music from multiple locations on your disk, and allows you to edit tags of the audio files — so everything is under your control. As a bonus, there are various plugins available for anything from a simple equalizer to a [last.fm][2] sync. You can also search and play music directly from [Soundcloud][3].
+
+Quod Libet works great on HiDPI screens, and is available as an RPM in Fedora or on [Flathub][4] in case you run [Silverblue][5]. Install it using Gnome Software or the command line:
+```
+$ sudo dnf install quodlibet
+
+```
+
+### Audacious
+
+If you like a simple music player that could even look like the legendary Winamp, Audacious might be a good choice for you.
+
+![][6]
+
+Audacious probably won’t manage all your music at once, but it works great if you like to organize your music as files. You can also export and import playlists without reorganizing the music files themselves.
+
+As a bonus, you can make it look likeWinamp. To make it look the same as on the screenshot above, go to Settings / Appearance, select Winamp Classic Interface at the top, and choose the Refugee skin right below. And Bob’s your uncle!
+
+Audacious is available as an RPM in Fedora, and can be installed using the Gnome Software app or the following command on the terminal:
+```
+$ sudo dnf install audacious
+
+```
+
+### Lollypop
+
+Lollypop is a music player that provides great integration with GNOME. If you enjoy how GNOME looks, and would like a music player that’s nicely integrated, Lollypop could be for you.
+
+![][7]
+
+Apart from nice visual integration with the GNOME Shell, it woks nicely on HiDPI screens, and supports a dark theme.
+
+As a bonus, Lollypop has an integrated cover art downloader, and a so-called Party Mode (the note button at the top-right corner) that selects and plays music automatically for you. It also integrates with online services such as [last.fm][2] or [libre.fm][8].
+
+Available as both an RPM in Fedora or a [Flathub][4] for your [Silverblue][5] workstation, install it using the Gnome Software app or using the terminal:
+```
+$ sudo dnf install lollypop
+
+```
+
+### Gradio
+
+What if you don’t own any music, but still like to listen to it? Or you just simply love radio? Then Gradio is here for you.
+
+![][9]
+
+Gradio is a simple radio player that allows you to search and play internet radio stations. You can find them by country, language, or simply using search. As a bonus, it’s visually integrated into GNOME Shell, works great with HiDPI screens, and has an option for a dark theme.
+
+Gradio is available on [Flathub][4] which works with both Fedora Workstation and [Silverblue][5]. Install it using the Gnome Software app.
+
+### sox
+
+Do you like using the terminal instead, and listening to some music while you work? You don’t have to leave the terminal thanks to sox.
+
+![][10]
+
+sox is a very simple, terminal-based music player. All you need to do is to run a command such as:
+```
+$ play file.mp3
+
+```
+
+…and sox will play it for you. Apart from individual audio files, sox also supports playlists in the m3u format.
+
+As a bonus, because sox is a terminal-based application, you can run it over ssh. Do you have a home server with speakers attached to it? Or do you want to play music from a different computer? Try using it together with [tmux][11], so you can keep listening even when the session closes.
+
+sox is available in Fedora as an RPM. Install it by running:
+```
+$ sudo dnf install sox
+
+```
+
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/5-cool-music-player-apps/
+
+作者:[Adam Šamalík][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://fedoramagazine.org/author/asamalik/
+[1]:https://fedoramagazine.org/wp-content/uploads/2018/08/qodlibet-300x217.png
+[2]:https://last.fm
+[3]:https://soundcloud.com/
+[4]:https://flathub.org/home
+[5]:https://teamsilverblue.org/
+[6]:https://fedoramagazine.org/wp-content/uploads/2018/08/audacious-300x136.png
+[7]:https://fedoramagazine.org/wp-content/uploads/2018/08/lollypop-300x172.png
+[8]:https://libre.fm
+[9]:https://fedoramagazine.org/wp-content/uploads/2018/08/gradio.png
+[10]:https://fedoramagazine.org/wp-content/uploads/2018/08/sox-300x179.png
+[11]:https://fedoramagazine.org/use-tmux-more-powerful-terminal/
diff --git a/sources/tech/20180824 Add free books to your eReader- Formatting tips.md b/sources/tech/20180824 Add free books to your eReader- Formatting tips.md
new file mode 100644
index 0000000000..bbafc0023d
--- /dev/null
+++ b/sources/tech/20180824 Add free books to your eReader- Formatting tips.md
@@ -0,0 +1,183 @@
+Add free books to your eReader: Formatting tips
+======
+
+
+
+In my recent article, [A handy way to add free books to your eReader][1], I explained how to convert the plaintext indexes at [Project Gutenberg][2] to HTML and then EPUBs. But as one commenter noted, there is a problem in older indexes, where individual books are not always separated by an extra newline character.
+
+I saw quite vividly the extent of the problem when I was working on the index for 2007, where you see things like this:
+```
+Audio: The General Epistle of James 22931
+Audio: The Epistle to the Hebrews 22930
+Audio: The Epistle of Philemon 22929
+
+Sacrifice, by Stephen French Whitman 22928
+The Atlantic Monthly, Volume 18, No. 105, July 1866, by Various 22927
+The Continental Monthly, Vol. 6, No 3, September 1864, by Various 22926
+
+The Story of Young Abraham Lincoln, by Wayne Whipple 22925
+Pathfinder, by Alan Douglas 22924
+ [Subtitle: or, The Missing Tenderfoot]
+Pieni helmivyo, by Various 22923
+ [Subtitle: Suomen runoja koulunuorisolle]
+ [Editor: J. Waananen] [Language: Finnish]
+The Posy Ring, by Various 22922
+```
+
+My first reaction was, "Well, how bad can it be to just add newlines where needed?" The answer: "Really bad." After days of working this way and stopping only when the cramps in my hand became too annoying, I decided to revisit the problem. I thought I might need to do multiple Find-Replace passes, maybe keyed on things like `[Language: Finnish] `or maybe just the `]` bracket, but this seemed almost as laborious as the manual method.
+
+Then I noticed a particular feature: For most instances where a newline was needed, a newline character was immediately followed by the capital letter of the next title. For lines where there was still more information about the book, the newline was followed by spaces. So I tried this: In the Find text box in [KWrite][3] (remember, we’re using regex), I put:
+```
+(\n[A-Z])
+
+```
+
+and in Replace, I put:
+```
+\n\1
+
+```
+
+For every match inside the parentheses, I added a preceding newline, retaining whatever the capital letter was. This worked extremely well. The few instances where it failed involved book titles beginning with a number or with quotes. I fixed these manually, but I could have put this:
+```
+(\n[0-9])
+
+```
+
+In Find and run Replace All again. Later, I also tried it with the quotes—this requires a backslash, like this:
+```
+(\n\”) and (\n\’)
+
+```
+
+One side effect is that a number of the listings were separated by three newline characters. Not an issue for XHTML, but easily fixed by putting in Find:
+```
+\n\n\n
+
+```
+
+and in Replace:
+```
+\n\n
+
+```
+
+To review the process with the new features:
+
+ 1. Remove the preamble and other text you don’t want
+ 2. Add extra newlines with the method shown above
+ 3. Convert three consecutive newlines to two (optional)
+ 4. Add the appropriate HTML tags at the beginning and end
+ 5. Create the links based on finding `(\d\d\d\d\d)`, replacing with `\1`
+ 6. Add paragraph tags by finding `\n\n` and replacing with `
\n\n`
+ 7. Add a `
` just before the `
+GutIndexes
+
+
+
+` tag at the end
+ 8. Fix the headers, preceding each with `
` – the older indexes have only a single header
+ 9. Save the file with an `.xhtml` suffix, then import to [Sigil][4] to make your EPUB.
+
+
+
+The next issue that comes up is when the eBook numbers include only four digits. This is a problem since there are many four-digit numbers in the listings, many of which are dates. The answer comes from modifying our strategy in point 5 in the above listing.
+
+In Find, put:
+
+`(\d\d\d\d)\n`
+
+and in Replace, put:
+
+`\1\n`
+
+Notice that the `\n` is outside the parentheses; therefore, we need to add it at the end of the new replacement. Now we see another problem resulting from this new method: Some of the eBook numbers are followed by C (copyrighted). So we need to do another pass in Find:
+
+`(\d\d\d\d)C\n`
+
+and in Replace:
+
+`\1C\n`
+
+I noticed that as of the 2002 index, the lack of extra newlines between listings was no longer a problem, and this continued all the way to the very first index, so steps 2 and 3 became unnecessary.
+
+I’ve now taken the process all the way to the beginning, GUTINDEX.1996, and this process works all the way. At one point three-digit eBook numbers appear, so you must begin to Find:
+
+`(\d\d\d)\n` and then `(\d\d\d)C\n`
+
+Then later:
+
+`(\d\d)\n` and then `(\d\d)C\n`
+
+And finally:
+
+`(\d)\n`
+
+The only glitch was in one book, eBook number 2, where the date "1798" was snagged by the three-digit search. At this point, I now have eBooks of the entire Gutenberg catalog, not counting new books presently being added.
+
+### Troubleshooting and a bonus
+
+I strongly advise you to test your XHTML files by trying to load them in a browser. Your browser should tell you if your XHTML is not properly formatted, in which case the file won’t show in your browser window. Two particular problems I found, having initially ignored my own advice, resulting from improper characters. I copied the link specification tags from my first article. If you do that, you will find that the typewriter quotes are substituted with typographic (curly) quotes. Fixing this was just a matter of doing a Find/Replace.
+
+Second, there are a number of ampersands (&) in the listings, and these need to be replaced by & for the browser to make sense of them. Some recent listings also use the Unicode non-breaking space, and these should be replaced with a regular space. (Hint: Copy one, put it in Find, put a regular space in Replace, then Replace All)
+
+Finally, there may be some accented characters lurking, and the browser feedback should help locate them. Example: Ibáñez needed to be Ibáñez.
+
+And now the bonus: Once your XHTML is well-formed, you can use your browser to comb Project Gutenberg just like on your e-reader. I also found that [Calibre][5] would not make the links properly until the quotes were fixed.
+
+Finally, here is a template for a separate web page you can place on your system to easily link to each year’s listing on your system. Make sure you fix the locations for your personal directory structure and filenames. Also, make sure all these quotes are typewriter quotes, not curly quotes.
+```
+
+
+
+
+