2018年9月

序幕

很久以前,在一个遥远的星系……一份题为“比特币:点对点电子现金系统”的神秘白皮书以笔名 中本聪 Satoshi Nakamoto 发布。该文件用他们自己的话说, “不依赖于信任的电子交易系统” a system for electronic transactions without relying on trust <br/>

时间是 2008 年 11 月,我们所说的遥远的星系就是互联网。这是比特币历史的开端。直到今天,没有人确切知道中本聪是谁。我们所知道的是,第一个开源比特币客户端于 2009 年 1 月发布,在接下来的几年中,中本聪积累了大约 100 万比特币,然后在 2010 年中期完全从比特币世界中消失。直到今天,他(或他们)庞大的比特币财富仍未受到影响,分布在几个已知的比特币账户中。截至 2017 年中期,这些比特币总价值约为 40 亿美元。

比特币的历史

2009 年推出的比特币是区块链技术的第一次真实应用。在接下来的五年里,区块链的历史几乎与比特币的历史同义。以下是此期间的粗略时间表:

以太坊的历史

2014 年是区块链历史上一个重要里程碑。在此之前,区块链技术的应用仅限于加密货币。尽管比特币协议已在该领域证明了自己,但它缺乏开发区块链应用程序所需的脚本语言,以拓展到加密货币外的应用领域。

Vitalik Buterin 多年来一直是比特币的重要发烧友,并且在 2012 年他 18 岁时已经共同创立了《 比特币杂志 Bitcoin Magazine 》!在他想更新原始比特币协议未获比特币社区同意后,Vitalik 就聚集了一个超级程序员团队,开发一个全新的区块链协议,其中包含所谓的 智能合约 smart contract ,允许程序员在其区块链中构建称作合约的脚本,并在满足某些条件时执行。Vitalik 将他的新区块链命名为 以太坊 Ethereum

在以太坊区块链上使用智能合约需要小额支付以太币,即以太坊的加密货币。这些小额支付称为“ 燃料 gas ”,并奖励给“挖出了”包含该交易的数据块的计算机节点。智能合约的使用案例非常多样化,很可能在未来许多年中我们不会完全理解它的用处(就像 90 年代初期互联网刚兴起时,我们不知道 Facebook、YouTube 和 Skype 将怎样改变世界)。

一个有助于描述智能合约有用性的简单例子是去中心化彩票。在下面的示例中,开发了具有以下功能的智能合约并将其存储在以太坊区块链中:

  • 任何人可以发送以太币给智能合约。
  • 每 24 小时,智能合约随机选择一个贡献地址,并将合约中的所有以太币返回到该地址。
  • 你贡献的以太币越多,获胜的机会就越高。
  • 由于智能合约存储在以太坊区块链中,其内容是公开的,任何人都可以检查它以确保它不包含任何错误或蹊跷的逻辑。没有人(甚至是开发者)能够动存储在智能合约上的资金。从理论上讲,这样的彩票运营支出最小(只有燃料成本和创建者在智能合约中内置的其他费用)。这种彩票相比传统彩票,优势显著:
  • 由于运营支出减少,获胜的几率可以大大提高。
  • 整个系统是完全透明的,每个参与者将能够在参与彩票之前准确计算他们获胜的机会。
  • 由于它是完全去中心化的,区块链彩票将不会面临破产以及许多其他外部风险因素。
  • 支付是保证和即时的。
  • 参与者是 伪匿名 pseudo-anonymous 的。

自 2014 年推出以来,以太坊区块链经历了一个显著的增长期,现在成为仅次于比特币的区块链。以下时间表显示了 2014 年以后比特币相关事件的历史。

未来会怎样

现在你已经了解了区块链的历史,让我们简单预测一下它的未来。如前所述,与传统的会计和记录保存方法相比,区块链应用程序的去中心化性质提供了显著的优势。在过去的 12 个月中,区块链技术向主流认可迈出了重要一步,数百家蓝筹公司在其基础设施上投入巨资(参见 Finextra)。几乎所有主要的咨询公司都公开宣称他们看好区块链技术对一系列行业的潜在影响(埃森哲路透社德勤普华永道),一些分析机构预测价格在未来十年价格会大幅上涨(NewsBTCCNBCMoney Morning)。虽然我们并没有拥有预测的水晶球,而且区块链的大规模使用肯定存在很多障碍,但这种技术的未来似乎比以往更加光明。

你喜欢这篇博文吗?我们是否错过了任何重要的区块链里程碑?您对区块链的未来有何看法?我们很乐意在下面的留言板上收到您的来信!我们的下一篇博文将为您提供我们称之为区块链生态系统的概述。希望能在那里见到你!


via: https://www.myblockchainblog.com/blog/a-brief-history-of-blockchain

作者:Vegard Nordahl & Meghana Rao 选题:jasminepeng 译者:jasminepeng 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Adobe 将于 2020 年终止对 Flash 媒体播放器的支持,但仍有很多人们希望访问的 Flash 视频。这里有两个开源的替代品或许可以帮到你。

2017 年 7 月,Adobe 为 Flash Media Player 敲响了丧钟,宣布将在 2020 年终止对曾经无处不在的在线视频播放器的支持。但事实上,在一系列损害了其声誉的零日攻击后,Flash 的份额在过去的 8 年一直在下跌。苹果公司在 2010 年宣布它不会支持这项技术后,其未来趋于黯淡,并且在谷歌停止在 Chrome 浏览器中默认启用 Flash(支持 HTML5)后,它的消亡在 2016 年进一步加速。

即便如此,Adobe 仍然每月发布该软件的更新,截至 2018 年 8 月,它在网站的使用率从 2011 年的 28.5% 下降到仅 4.4%。还有更多证据表明 Flash 的下滑:谷歌工程总监 Parisa Tabriz 说通过浏览器访问 Flash 内容的 Chrome 用户数量从 2014 年的 80% 下降到 2018 年的 8%。

尽管如今很少有视频创作者以 Flash 格式发布,但仍有很多人们希望在未来几年内访问的 Flash 视频。鉴于官方支持的日期已经屈指可数,开源软件创建者有很好的机会涉足 Adobe Flash 媒体播放器的替代品。这其中两个应用是 Lightspark 和 GNU Gnash。它们都不是完美的替代品,但来自贡献者的帮助可以使它们成为可行的替代品。

Lightspark

Lightspark 是 Linux 上的 Flash Player 替代品。虽然它仍处于 alpha 状态,但自从 Adobe 在 2017 宣布废弃 Adobe 以来,开发速度已经加快。据其网站称,Lightspark 实现了 60% 的 Flash API,可在许多流行网站包括 BBC 新闻、Google Play 音乐和亚马逊音乐上使用

Lightspark 是用 C++/C 编写的,并在 LGPLv3 下许可。该项目列出了 41 个贡献者,并正在积极征求错误报告和其他贡献。有关更多信息,请查看其 GitHub 仓库

GNU Gnash

GNU Gnash 是一个用于 GNU/Linux 操作系统,包括 Ubuntu、Fedora 和 Debian 的 Flash Player。它作为独立软件和插件可用于 Firefox 和 Konqueror 浏览器中。

Gnash 的主要缺点是它不支持最新版本的 Flash 文件 —— 它支持大多数 Flash SWF v7 功能,一些 v8 和 v9 功能,不支持 v10 文件。它处于测试阶段,由于它在 GNU GPLv3 或更高版本下许可,因此你可以帮助实现它的现代化。访问其项目页面获取更多信息。

想要创建 Flash 吗?

仅因为大多数人都不会发布 Flash 视频,但这并不意味着永远不需要创建 SWF 文件。如果你发现自己需要,这两个开源工具可能会有所帮助:

  • Motion-Twin ActionScript 2 编译器(MTASC):一个命令行编译器,它可以在没有 Adobe Animate(Adobe 当前的视频创建软件)的情况下生成 SWF 文件。
  • Ming:用 C 编写的可以生成 SWF 文件的库。它还包含一些可用于处理 Flash 的程序

via: https://opensource.com/alternatives/flash-media-player

作者:Opensource.com 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

ZFS filesystem

今天,我们来谈论一下 ZFS,一个先进的文件系统。我们将讨论 ZFS 从何而来,它是什么,以及为什么它在科技界和企业界如此受欢迎。

虽然我是一个美国人,但我更喜欢读成 ZedFS 而不是 ZeeFS,因为前者听起来更酷一些。你可以根据你的个人喜好来发音。

注意:在这篇文章中,你将会看到 ZFS 被提到很多次。当我在谈论特性和安装的时候,我所指的是 OpenZFS 。自从 甲骨文 Oracle 公司放弃 OpenSolaris 项目之后,ZFS(由甲骨文公司开发)和 OpenZFS 已经走向了不同的发展道路。

ZFS 的历史

Z 文件系统 Z File System (ZFS)是由 Matthew Ahrens 和 Jeff Bonwick 在 2001 年开发的。ZFS 是作为 太阳微系统 Sun MicroSystem 公司的 OpenSolaris 的下一代文件系统而设计的。在 2008 年,ZFS 被移植到了 FreeBSD 。同一年,一个移植 ZFS 到 Linux 的项目也启动了。然而,由于 ZFS 是 通用开发和发布许可证 Common Development and Distribution License (CDDL)许可的,它和 GNU 通用公共许可证 不兼容,因此不能将它迁移到 Linux 内核中。为了解决这个问题,绝大多数 Linux 发行版提供了一些方法来安装 ZFS 。

在甲骨文公司收购太阳微系统公司之后不久,OpenSolaris 就闭源了,这使得 ZFS 的之后的开发也变成闭源的了。许多 ZFS 开发者对这件事情非常不满。三分之二的 ZFS 核心开发者,包括 Ahrens 和 Bonwick,因为这个决定而离开了甲骨文公司。他们加入了其它公司,并于 2013 年 9 月创立了 OpenZFS 这一项目。该项目引领着 ZFS 的开源开发。

让我们回到上面提到的许可证问题上。既然 OpenZFS 项目已经和 Oracle 公司分离开了,有人可能好奇他们为什么不使用和 GPL 兼容的许可证,这样就可以把它加入到 Linux 内核中了。根据 OpenZFS 官网 的介绍,更改许可证需要联系所有为当前 OpenZFS 实现贡献过代码的人(包括初始的公共 ZFS 代码以及 OpenSolaris 代码),并得到他们的许可才行。这几乎是不可能的(因为一些贡献者可能已经去世了或者很难找到),因此他们决定保留原来的许可证。

ZFS 是什么,它有什么特性?

正如前面所说过的,ZFS 是一个先进的文件系统。因此,它有一些有趣的特性。比如:

  • 存储池
  • 写时拷贝
  • 快照
  • 数据完整性验证和自动修复
  • RAID-Z
  • 最大单个文件大小为 16 EB(1 EB = 1024 PB)
  • 最大 256 千万亿(256*10 15 )的 ZB(1 ZB = 1024 EB)的存储

让我们来深入了解一下其中一些特性。

存储池

与大多数文件系统不同,ZFS 结合了文件系统和卷管理器的特性。这意味着,它与其他文件系统不同,ZFS 可以创建跨越一系列硬盘或池的文件系统。不仅如此,你还可以通过添加硬盘来增大池的存储容量。ZFS 可以进行分区和格式化

Pooled storage in ZFS

ZFS 存储池

写时拷贝

写时拷贝 Copy-on-write 是另一个有趣并且很酷的特性。在大多数文件系统上,当数据被重写时,它将永久丢失。而在 ZFS 中,新数据会写到不同的块。写完成之后,更新文件系统元数据信息,使之指向新的数据块(LCTT 译注:更新之后,原数据块成为磁盘上的垃圾,需要有对应的垃圾回收机制)。这确保了如果在写新数据的时候系统崩溃(或者发生其它事,比如突然断电),那么原数据将会保存下来。这也意味着,在系统发生崩溃之后,不需要运行 fsck 来检查和修复文件系统。

快照

写时拷贝使得 ZFS 有了另一个特性: 快照 snapshots 。ZFS 使用快照来跟踪文件系统中的更改。快照包含文件系统的原始版本(文件系统的一个只读版本),实时文件系统则包含了自从快照创建之后的任何更改。没有使用额外的空间。因为新数据将会写到实时文件系统新分配的块上。如果一个文件被删除了,那么它在快照中的索引也会被删除。所以,快照主要是用来跟踪文件的更改,而不是文件的增加和创建。

快照可以挂载成只读的,以用来恢复一个文件的过去版本。实时文件系统也可以回滚到之前的快照。回滚之后,自从快照创建之后的所有更改将会丢失。

数据完整性验证和自动修复

当向 ZFS 写入新数据时,会创建该数据的校验和。在读取数据的时候,使用校验和进行验证。如果前后校验和不匹配,那么就说明检测到了错误,然后,ZFS 会尝试自动修正错误。

RAID-Z

ZFS 不需要任何额外软件或硬件就可以处理 RAID(磁盘阵列)。毫不奇怪,因为 ZFS 有自己的 RAID 实现:RAID-Z 。RAID-Z 是 RAID-5 的一个变种,不过它克服了 RAID-5 的写漏洞:意外重启之后,数据和校验信息会变得不同步(LCTT 译注:RAID-5 的条带在正写入数据时,如果这时候电源中断,那么奇偶校验数据将跟该部分数据不同步,因此前边的写无效;RAID-Z 用了 “可变宽的 RAID 条带” 技术,因此所有的写都是全条带写入)。为了使用基本级别的 RAID-Z(RAID-Z1),你需要至少三块磁盘,其中两块用来存储数据,另外一块用来存储奇偶校验信息。而 RAID-Z2 需要至少两块磁盘存储数据以及两块磁盘存储校验信息。RAID-Z3 需要至少两块磁盘存储数据以及三块磁盘存储校验信息。另外,只能向 RAID-Z 池中加入偶数倍的磁盘,而不能是奇数倍的。

巨大的存储潜力

创建 ZFS 的时候,它是作为最后一个文件系统而设计的 。那时候,大多数文件系统都是 64 位的,ZFS 的创建者决定直接跳到 128 位,等到将来再来证明这是对的。这意味着 ZFS 的容量大小是 32 位或 64 位文件系统的 1600 亿亿倍。事实上,Jeff Bonwick(其中一个创建者)说:“完全填满一个 128 位的存储池所需要的能量,从字面上讲,比煮沸海洋需要的还多。”

如何安装 ZFS?

如果你想立刻使用 ZFS(开箱即用),那么你需要安装 FreeBSD 或一个使用 illumos 内核的操作系统illumos 是 OpenSolaris 内核的一个克隆版本。

事实上,支持 ZFS 是一些有经验的 Linux 用户选择 BSD 的主要原因

如果你想在 Linux 上尝试 ZFS,那么只能在存储文件系统上使用。据我所知,没有任何 Linux 发行版可以在根目录上安装 ZFS,实现开箱即用。如果你对在 Linux 上尝试 ZFS 感兴趣,那么 ZFS on Linux 项目 上有大量的教程可以指导你怎么做。

附加说明

这篇文章论述了 ZFS 的优点。现在,让我来告诉你一个关于 ZFS 很现实的问题。使用 RAID-Z 会很贵,因为你需要购买大量的磁盘来增大存储空间。

你已经使用过 ZFS 了吗?你的使用经验是什么样的?请在下面的评论中告诉我们。

如果你觉得这篇文章有趣,请花一分钟的时间把它分享到社交媒体、极客新闻或 Reddit


via: https://itsfoss.com/what-is-zfs/

作者:John Paul 选题:lujun9972 译者:ucasFL 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在 2017 年,我参加了 ‘计算机行业中的女性’ 的Grace Hopper 庆祝活动。这个活动是这类科技活动中最大的一个。共有 17,000 名女性IT工作者参加。

这个会议有个大型的配套招聘会,会上有招聘公司来面试会议参加者。有些人甚至现场拿到 offer。我在现场晃荡了一下,注意到一些应聘者看上去非常紧张忧虑。我还隐隐听到应聘者之间的谈话,其中一些人谈到在面试中做的并不好。

我走近我听到谈话的那群人并和她们聊了起来并给了一些面试上的小建议。我想我的建议还是比较偏基本的,如“(在面试时)一开始给出个能工作的解决方案也还说的过去”之类的,但是当她们听到我的一些其他的建议时还是颇为吃惊。

为了能更多的帮到像她们一样的小白面试者,我收集了一些过去对我有用的小点子,这些小点子我已经发表在了 prodcast episode 上。它们也是这篇文章的主题。

为了实习生职位和全职工作,我做过很多次的面试。当我还在大学主修计算机科学时,学校每个秋季学期都有招聘会,第一轮招聘会在校园里举行。(我在第一和最后一轮都搞砸过。)不过,每次面试后,我都会反思哪些方面我能做的更好,我还会和朋友们做模拟面试,这样我就能从他们那儿得到更多的面试反馈。

不管我们怎么样找工作: 工作中介、网络,或者学校招聘,他们的招聘流程中都会涉及到技术面试:

近年来,我注意到了一些新的不同的面试形式出现了:

  • 与招聘方的一位工程师结对编程
  • 网络在线测试及在线编码
  • 白板编程(LCTT 译注: 这种形式应该不新了)

我将重点谈谈白板面试,这种形式我经历的最多。我有过很多次面试,有些挺不错的,有些被我搞砸了。

我做错的地方

首先,我想回顾一下我做的不好的地方。知错能改,善莫大焉。

当面试者提出一个要我解决的问题时, 我立即马上立刻开始在白板上写代码,什么都不问。

这里我犯了两个错误:

没有澄清对解决问题有关键作用的信息

比如,我们是否只用处理数字或者字符串?我们要支持多种数据类型吗?如果你在开始解题前不去问这些问题的话,你的面试官会有一种不好的印象:这个人在我们公司的话,他不会在开始项目工作之前不问清楚到底要做什么。而这恰恰是在工作场合很重要的一个工作习惯。公司可不像学校,你在开始工作前可不会得到写有所有详细步骤的作业说明。你得靠自己找到这些步骤并自己定义他们。

只会默默思考,不去记录想法或和面试官沟通

在面试中,很多时候我也会傻傻站在那思考,什么都不写。我和一个朋友模拟面试的时候,他告诉我因为他曾经和我一起工作过所以他知道我在思考,但是如果他是个陌生的面试官的话,他会觉得我正站在那冥思苦想,毫无头绪。不要急匆匆的直奔解题而去是很重要的。花点时间多想想各种解题的可能性。有时候面试官会乐意和你一起探索解题的步骤。不管怎样,这就是在一家公司开工作会议的的普遍方式,大家各抒己见,一起讨论如何解决问题。

想到一个解题方法

在你开始写代码之前,如果你能总结一下要使用到的算法就太棒了。不要上来就写代码并认为你的代码肯定能解决问题。

这是对我管用的步骤:

  1. 头脑风暴
  2. 写代码
  3. 处理错误路径
  4. 测试

1、 头脑风暴

对我来说,我会首先通过一些例子来视觉化我要解决的问题。比如说如果这个问题和数据结构中的树有关,我就会从树底层的空节点开始思考,如何处理一个节点的情况呢?两个节点呢?三个节点呢?这能帮助你从具体例子里抽象出你的解决方案。

在白板上先写下你的算法要做的事情列表。这样做,你往往能在开始写代码前就发现 bug 和缺陷(不过你可得掌握好时间)。我犯过的一个错误是我花了过多的时间在澄清问题和头脑风暴上,最后几乎没有留下时间给我写代码。你的面试官可能没有机会看你在白板上写下代码,这可太糟了。你可以带块手表,或者房间有钟的话,你也可以抬头看看时间。有些时候面试者会提醒你你已经得到了所有的信息(这时你就不要再问别的了),“我想我们已经把所有需要的信息都澄清了,让我们写代码实现吧”。

2、 开始写代码,一气呵成

如果你还没有得到问题的完美解决方法,从最原始的解法开始总是可以的。当你在向面试官解释最显而易见的解法时,你要想想怎么去完善它,并指明这种做法是最原始的,未加优化的。(请熟悉算法中的 O() 的概念,这对面试非常有用。)在向面试者提交前请仔细检查你的解决方案两三遍。面试者有时会给你些提示, “还有更好的方法吗?”,这句话的意思是面试官提示你有更优化的解决方案。

3、 错误处理

当你在编码时,对你想做错误处理的代码行做个注释。当面试者说,“很好,这里你想到了错误处理。你想怎么处理呢?抛出异常还是返回错误码?”,这将给你个机会去引出关于代码质量的一番讨论。当然,这种地方提出几个就够了。有时,面试者为了节省编码的时间,会告诉你可以假设外界输入的参数都已经通过了校验。不管怎样,你都要展现你对错误处理和编码质量的重要性的认识。

4、 测试

在编码完成后,用你在前面头脑风暴中写的用例来在你脑子里“跑”一下你的代码,确定万无一失。例如你可以说,“让我用前面写下的树的例子来跑一下我的代码,如果是一个节点是什么结果,如果是两个节点是什么结果……”

在你结束之后,面试者有时会问你你将会怎么测试你的代码,你会涉及什么样的测试用例。我建议你用下面不同的分类来组织你的错误用例:

一些分类可以为:

  1. 性能
  2. 错误用例
  3. 期望的正常用例

对于性能测试,要考虑极端数量下的情况。例如,如果问题是关于列表的,你可以说你将会使用一个非常大的列表以及的非常小的列表来测试。如果和数字有关,你将会测试系统中的最大整数和最小整数。我建议读一些有关软件测试的书来得到更多的知识。在这个领域我最喜欢的书是 《我们在微软如何测试软件》。

对于错误用例,想一下什么是期望的错误情况并一一写下。

对于正向期望用例,想想用户需求是什么?你的解决方案要解决什么问题?这些都可以成为正向期望用例。

“你还有什么要问我的吗?”

面试最后总是会留几分钟给你问问题。我建议你在面试前写下你想问的问题。千万别说,“我没什么问题了”,就算你觉得面试砸了或者你对这间公司不怎么感兴趣,你总有些东西可以问问。你甚至可以问面试者他最喜欢自己的工作什么,最讨厌自己的工作什么。或者你可以问问面试官的工作具体是什么,在用什么技术和实践。不要因为觉得自己在面试中做的不好而心灰意冷,不想问什么问题。

申请一份工作

关于找工作和申请工作,有人曾经告诉我,你应该去找你真正有激情工作的地方。去找一家你喜欢的公司,或者你喜欢使用的产品,看看你能不能去那儿工作。

我个人并不推荐你用上述的方法去找工作。你会排除很多很好的公司,特别是你是在找实习工作或者入门级的职位时。

你也可以集中在其他的一些目标上。如:我想从这个工作里得到哪方面的更多经验?这个工作是关于云计算?Web 开发?或是人工智能?当在招聘会上与招聘公司沟通时,看看他们的工作单位有没有在这些领域的。你可能会在一家并非在你的想去公司列表上的公司(或非盈利机构)里找到你想找的职位。

换组

在这家公司里的第一个组里呆了一年半以后,我觉得是时候去探索一下不同的东西了。我找到了一个我喜欢的组并进行了 4 轮面试。结果我搞砸了。

我什么都没有准备,甚至都没在白板上练练手。我当时的逻辑是,如果我都已经在一家公司干了快 2 年了,我还需要练什么?我完全错了,我在接下去的白板面试中跌跌撞撞。我的板书写得太小,而且因为没有从最左上角开始写代码,我的代码大大超出了一个白板的空间,这些都导致了白板面试失败。

我在面试前也没有刷过数据结构和算法题。如果我做了的话,我将会在面试中更有信心。就算你已经在一家公司担任了软件工程师,在你去另外一个组面试前,我强烈建议你在一块白板上演练一下如何写代码。

对于换项目组这件事,如果你是在公司内部换组的话,事先能同那个组的人非正式聊聊会很有帮助。对于这一点,我发现几乎每个人都很乐于和你一起吃个午饭。人一般都会在中午有空,约不到人或者别人正好有会议冲突的风险会很低。这是一种非正式的途径来了解你想去的组正在干什么,以及这个组成员个性是怎么样的。相信我,你能从一次午餐中得到很多信息,这可会对你的正式面试帮助不小。

非常重要的一点是,你在面试一个特定的组时,就算你在面试中做的很好,因为文化不契合的原因,你也很可能拿不到 offer。这也是为什么我一开始就想去见见组里不同的人的原因(有时这也不太可能),我希望你不要被一次拒绝所击倒,请保持开放的心态,选择新的机会,并多多练习。

以上内容选自 《The Women in Tech Show: Technical Interviews with Prominent Women in Tech》的 “编程面试”章节,


作者简介:

微软研究院 Software Engineer II, www.thewomenintechshow.com 站长,所有观点都只代表本人意见。


via: https://medium.freecodecamp.org/what-i-learned-from-programming-interviews-29ba49c9b851

作者:Edaena Salinas 译者:DavidChenLiang 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

用 Apache HTTP 服务器的 mod\_rewrite 功能创建你自己的短链接。

很久以前,人们开始在 Twitter 上分享链接。140 个字符的限制意味着 URL 可能消耗一条推文的大部分(或全部),因此人们使用 URL 缩短服务。最终,Twitter 加入了一个内置的 URL 缩短服务(t.co)。

字符数现在不重要了,但还有其他原因要缩短链接。首先,缩短服务可以提供分析功能 —— 你可以看到你分享的链接的受欢迎程度。它还简化了制作易于记忆的 URL。例如,bit.ly/INtravelhttps://www.in.gov/ai/appfiles/dhs-countyMap/dhsCountyMap.html更容易记住。如果你想预先共享一个链接,但还不知道最终地址,这时 URL 缩短服务可以派上用场。。

与任何技术一样,URL 缩短服务并非都是正面的。通过屏蔽最终地址,缩短的链接可用于指向恶意或冒犯性内容。但是,如果你仔细上网,URL 缩短服务是一个有用的工具。

我们之前在网站上发布过缩短服务的文章,但也许你想要运行一些由简单的文本文件支持的缩短服务。在本文中,我们将展示如何使用 Apache HTTP 服务器的 mod\_rewrite 功能来设置自己的 URL 缩短服务。如果你不熟悉 Apache HTTP 服务器,请查看 David Both 关于安装和配置它的文章。

创建一个 VirtualHost

在本教程中,我假设你购买了一个很酷的域名,你将它专门用于 URL 缩短服务。例如,我的网站是 funnelfiasco.com,所以我买了 funnelfias.co 用于我的 URL 缩短服务(好吧,它不是很短,但它可以满足我的虚荣心)。如果你不将缩短服务作为单独的域运行,请跳到下一部分。

第一步是设置将用于 URL 缩短服务的 VirtualHost。有关 VirtualHost 的更多信息,请参阅 David Both 的文章。这步只需要几行:

    <VirtualHost *:80>
        ServerName funnelfias.co
    </VirtualHost>

创建重写规则

此服务使用 HTTPD 的重写引擎来重写 URL。如果你在上面的部分中创建了 VirtualHost,则下面的配置跳到你的 VirtualHost 部分。否则跳到服务器的 VirtualHost 或主 HTTPD 配置。

    RewriteEngine on
    RewriteMap shortlinks txt:/data/web/shortlink/links.txt
    RewriteRule ^/(.+)$ ${shortlinks:$1} [R=temp,L]

第一行只是启用重写引擎。第二行在文本文件构建短链接的映射。上面的路径只是一个例子。你需要使用系统上使用有效路径(确保它可由运行 HTTPD 的用户帐户读取)。最后一行重写 URL。在此例中,它接受任何字符并在重写映射中查找它们。你可能希望重写时使用特定的字符串。例如,如果你希望所有缩短的链接都是 “slX”(其中 X 是数字),则将上面的 (.+) 替换为 (sl\d+)

我在这里使用了临时重定向(HTTP 302)。这能让我稍后更新目标 URL。如果希望短链接始终指向同一目标,则可以使用永久重定向(HTTP 301)。用 permanent 替换第三行的 temp

构建你的映射

编辑配置文件 RewriteMap 行中的指定文件。格式是空格分隔的键值存储。在每一行上放一个链接:

    osdc https://opensource.com/users/bcotton
    twitter https://twitter.com/funnelfiasco
    swody1 https://www.spc.noaa.gov/products/outlook/day1otlk.html

重启 HTTPD

最后一步是重启 HTTPD 进程。这是通过 systemctl restart httpd 或类似命令完成的(命令和守护进程名称可能因发行版而不同)。你的链接缩短服务现已启动并运行。当你准备编辑映射时,无需重新启动 Web 服务器。你所要做的就是保存文件,Web 服务器将获取到差异。

未来的工作

此示例为你提供了基本的 URL 缩短服务。如果你想将开发自己的管理接口作为学习项目,它可以作为一个很好的起点。或者你可以使用它分享容易记住的链接到那些容易忘记的 URL。


via: https://opensource.com/article/18/7/apache-url-shortener

作者:Ben Cotton 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Cloud Commander 是一个基于 web 的文件管理程序,它允许你通过任何计算机、移动端或平板电脑的浏览器查看、访问或管理系统文件或文件夹。它有两个简单而又经典的面板,并且会像你设备的显示尺寸一样自动转换大小。它也拥有两款内置的叫做 DwordEdward 的文本编辑器,它们支持语法高亮,并带有一个支持系统命令行的控制台。因此,您可以随时随地编辑文件。Cloud Commander 服务器是一款在 Linux、Windows、Mac OS X 运行的跨平台应用,而且该应用客户端可以在任何一款浏览器上运行。它是用 JavaScript/Node.Js 写的,并使用 MIT 许可证。

在这个简易教程中,让我们看一看如何在 Ubuntu 18.04 LTS 服务器上安装 Cloud Commander。

前提条件

像我之前提到的,是用 Node.js 写的。所以为了安装 Cloud Commander,我们需要首先安装 Node.js。要执行安装,参考下面的指南。

安装 Cloud Commander

在安装 Node.js 之后,运行下列命令安装 Cloud Commander:

$ npm i cloudcmd -g

祝贺!Cloud Commander 已经安装好了。让我们往下继续看看 Cloud Commander 的基本使用。

开始使用 Cloud Commander

运行以下命令启动 Cloud Commander:

$ cloudcmd

输出示例:

url: http://localhost:8000

现在,打开你的浏览器并转到链接:http://localhost:8000http://IP-address:8000

从现在开始,您可以直接在本地系统或远程系统或移动设备,平板电脑等Web浏览器中创建,删除,查看,管理文件或文件夹。

如你所见上面的截图,Clouder Commander 有两个面板,十个热键 (F1F10),还有控制台。

每个热键执行的都是一个任务。

  • F1 – 帮助
  • F2 – 重命名文件/文件夹
  • F3 – 查看文件/文件夹
  • F4 – 编辑文件
  • F5 – 复制文件/文件夹
  • F6 – 移动文件/文件夹
  • F7 – 创建新目录
  • F8 – 删除文件/文件夹
  • F9 – 打开菜单
  • F10 – 打开设置

Cloud Commmander 控制台

点击控制台图标。这即将打开系统默认的命令行界面。

在此控制台中,您可以执行各种管理任务,例如安装软件包、删除软件包、更新系统等。您甚至可以关闭或重新引导系统。 因此,Cloud Commander 不仅仅是一个文件管理器,还具有远程管理工具的功能。

创建文件/文件夹

要创建新的文件或文件夹就右键单击任意空位置并找到 “New - >File or Directory”。

查看文件

你可以查看图片,查看音视频文件。

上传文件

另一个很酷的特性是我们可以从任何系统或设备简单地上传一个文件到 Cloud Commander 系统。

要上传文件,右键单击 Cloud Commander 面板的任意空白处,并且单击“Upload”选项。

选择你想要上传的文件。

另外,你也可以上传来自像 Google 云盘、Dropbox、Amazon 云盘、Facebook、Twitter、Gmail、GitHub、Picasa、Instagram 还有很多的云服务上的文件。

要从云端上传文件, 右键单击面板的任意空白处,并且右键单击面板任意空白处并选择“Upload from Cloud”。

选择任意一个你选择的网络服务,例如谷歌云盘。点击“Connect to Google drive”按钮。

下一步,用 Cloud Commander 验证你的谷歌云端硬盘,从谷歌云端硬盘选择文件并点击“Upload”。

更新 Cloud Commander

要更新到最新的可用版本,执行下面的命令:

$ npm update cloudcmd -g

总结

据我测试,它运行很好。在我的 Ubuntu 服务器测试期间,我没有遇到任何问题。此外,Cloud Commander 不仅是基于 Web 的文件管理器,还可以充当执行大多数 Linux 管理任务的远程管理工具。 您可以创建文件/文件夹、重命名、删除、编辑和查看它们。此外,您可以像在终端中在本地系统中那样安装、更新、升级和删除任何软件包。当然,您甚至可以从 Cloud Commander 控制台本身关闭或重启系统。 还有什么需要的吗? 尝试一下,你会发现它很有用。

目前为止就这样吧。 我将很快在这里发表另一篇有趣的文章。 在此之前,请继续关注我们。

祝贺!


via: https://www.ostechnix.com/cloud-commander-a-web-file-manager-with-console-and-editor/

作者:SK 选题:lujun9972 译者:fuzheng1998 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出