udev 入门:管理设备事件的 Linux 子系统
创建这样一个脚本,当指定的设备插入时触发你的计算机去做一个指定动作。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/09/221138aqmuwpuu5uxlw85w.jpg">Media</a>udev 是一个为你的计算机提供设备事件的 Linux 子系统。通俗来讲就是,当你的计算机上插入了像网卡、外置硬盘(包括 U 盘)、鼠标、键盘、游戏操纵杆和手柄、DVD-ROM 驱动器等等设备时,代码能够检测到它们。这样就能写出很多可能非常有用的实用程序,而它已经很好了,普通用户就可以写出脚本去做一些事情,比如当某个硬盘驱动器插入时,执行某个任务。这篇文章教你去如何写一个由一些 udev 事件触发的 <a href="https://linux.die.net/man/8/udev">udev</a> 脚本,比如插入了一个 U 盘。当你理解了 udev 的工作原理,你就可以用它去做各种事情,比如当一个游戏手柄连接后加载一个指定的驱动程序,或者当你用于备份的驱动器连接后,自动执行备份工作。一个初级的脚本使用 udev 的最佳方式是从一个小的代码块开始。不要指望从一开始就写出完整的脚本,而是从最简单的确认 udev 触发了某些指定的事件开始。对于你的脚本,依据你的目标,并不是在任何情况下都能保证你亲眼看到你的脚本运行结果的,因此需要在你的脚本日志中确认它成功触发了。而日志文件通常放在 /var 目录下,但那个目录通常是 root 用户的领地。对于测试目的,可以使用 /tmp&…
创建这样一个脚本,当指定的设备插入时触发你的计算机去做一个指定动作。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/09/221138aqmuwpuu5uxlw85w.jpg">Media</a>udev 是一个为你的计算机提供设备事件的 Linux 子系统。通俗来讲就是,当你的计算机上插入了像网卡、外置硬盘(包括 U 盘)、鼠标、键盘、游戏操纵杆和手柄、DVD-ROM 驱动器等等设备时,代码能够检测到它们。这样就能写出很多可能非常有用的实用程序,而它已经很好了,普通用户就可以写出脚本去做一些事情,比如当某个硬盘驱动器插入时,执行某个任务。这篇文章教你去如何写一个由一些 udev 事件触发的 <a href="https://linux.die.net/man/8/udev">udev</a> 脚本,比如插入了一个 U 盘。当你理解了 udev 的工作原理,你就可以用它去做各种事情,比如当一个游戏手柄连接后加载一个指定的驱动程序,或者当你用于备份的驱动器连接后,自动执行备份工作。一个初级的脚本使用 udev 的最佳方式是从一个小的代码块开始。不要指望从一开始就写出完整的脚本,而是从最简单的确认 udev 触发了某些指定的事件开始。对于你的脚本,依据你的目标,并不是在任何情况下都能保证你亲眼看到你的脚本运行结果的,因此需要在你的脚本日志中确认它成功触发了。而日志文件通常放在 /var 目录下,但那个目录通常是 root 用户的领地。对于测试目的,可以使用 /tmp&…
你和 Linux 极客只差一个 LFS:LFS 8.3 中文翻译版本发布!
不用羡慕那些说起这些就头头是道是 Linux 极客们,其实你和他们之间只是差一个 LFS 而已。Media
via https://linux.cn/article-8438-1.html
不用羡慕那些说起这些就头头是道是 Linux 极客们,其实你和他们之间只是差一个 LFS 而已。Media
via https://linux.cn/article-8438-1.html
你和 Linux 极客只差一个 LFS:LFS 8.3 中文翻译版本发布!
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201704/23/093951rv6hy3d1xhhedvxd.jpg">Media</a>很多同学都已经学习了 Linux ,可能已经在自己的机器上安装过 Linux,甚至都能搭建个简单的个人博客,也有可能编译部署过邮件服务器之类的软件,可是感觉仍然对 Linux 有点摸不着,颇有隔靴挠痒的感受。总是好奇 Linux 内核是怎么回事,究竟里面有点什么?总是好奇 Linux 是怎么启动起来的,那个什么 GRUB 怎么知道读取引导信息?总是好奇设备怎么就可以被当成文件操作,为什么可以从 <code>/proc</code> 读到进程的信息?总是好奇如何才能构建一个操作系统,从无到有的做成一个可引导的 Linux 启动盘?不用羡慕那些说起这些就头头是道是 Linux 极客们,其实你和他们之间只是差一个 LFS 而已。什么?请听我娓娓道来~LFS 是什么?<a href="http://www.linuxfromscratch.org/lfs/">LFS</a>(英文 Linux From Scratch 的缩写),中文释意为“从零开始构建的 Linux”。好吧!看起来很高大上 OTZ,可它到底是什么东西呢?感觉上它好像经常和 RedHat,Debain 这类发行版混在一起,那它应该也是个发行版吧!这样理解其实也没有什么不对,但比起发行版来,它其实更像一本书。书本只提供知识,它只教你做,不会帮你做。这才是 LFS 和别的发行版的本质区别。这本书可以教你如何亦步亦趋的从零开始搭建一个具体而微的 Linux 系统,没错,就是从零开始,是不是有一种上帝视角௚…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201704/23/093951rv6hy3d1xhhedvxd.jpg">Media</a>很多同学都已经学习了 Linux ,可能已经在自己的机器上安装过 Linux,甚至都能搭建个简单的个人博客,也有可能编译部署过邮件服务器之类的软件,可是感觉仍然对 Linux 有点摸不着,颇有隔靴挠痒的感受。总是好奇 Linux 内核是怎么回事,究竟里面有点什么?总是好奇 Linux 是怎么启动起来的,那个什么 GRUB 怎么知道读取引导信息?总是好奇设备怎么就可以被当成文件操作,为什么可以从 <code>/proc</code> 读到进程的信息?总是好奇如何才能构建一个操作系统,从无到有的做成一个可引导的 Linux 启动盘?不用羡慕那些说起这些就头头是道是 Linux 极客们,其实你和他们之间只是差一个 LFS 而已。什么?请听我娓娓道来~LFS 是什么?<a href="http://www.linuxfromscratch.org/lfs/">LFS</a>(英文 Linux From Scratch 的缩写),中文释意为“从零开始构建的 Linux”。好吧!看起来很高大上 OTZ,可它到底是什么东西呢?感觉上它好像经常和 RedHat,Debain 这类发行版混在一起,那它应该也是个发行版吧!这样理解其实也没有什么不对,但比起发行版来,它其实更像一本书。书本只提供知识,它只教你做,不会帮你做。这才是 LFS 和别的发行版的本质区别。这本书可以教你如何亦步亦趋的从零开始搭建一个具体而微的 Linux 系统,没错,就是从零开始,是不是有一种上帝视角௚…
NASA 在开放科学方面做了些什么
在这篇文章中我们主要讨论了 NASA 的积极努力,这些努力包括他们通过开源实践来促进科学研究的积极作用。Media
via https://linux.cn/article-10330-1.html
在这篇文章中我们主要讨论了 NASA 的积极努力,这些努力包括他们通过开源实践来促进科学研究的积极作用。Media
via https://linux.cn/article-10330-1.html
NASA 在开放科学方面做了些什么
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185529jeiwccc6k36ch6mf.jpg">Media</a>最近我们刚为开设了一个新的“<a href="https://itsfoss.com/category/science/">科学类</a>”的文章分类。其中发表的最新一篇文章名为:<a href="https://itsfoss.com/open-source-impact-on-science/">开源是怎样影响科学的</a>。在这篇文章中我们主要讨论了 <a href="https://www.nasa.gov/">NASA</a> 的积极努力,这些努力包括他们通过开源实践来促进科学研究的积极作用。NASA 是怎样使用开源手段促进科学研究的NASA 将他们的整个研究库对整个公共领域开放,这是一项<a href="https://futurism.com/free-science-nasa-just-opened-its-entire-research-library-to-the-public/">壮举</a>。没错!每个人都能访问他们的整个研究库,并能从他们的研究中获益。他们现已开放的资料可以大致分为以下三类:开源 NASA开放 API开放数据1、开源 NASA这里有一份 <a href="https://github.com/">GitHub</a> 的联合创始人之一和执行总裁 <a href="http://chriswanstrath.com/">Chris Wanstrath</a> 的采访,他向我们介绍道,一切都是从很多年前开始的。该项目名为 “<a href="http://code.nasa.gov">code.nasa.gov</a>”,截至本文发表为止,NASA 已经<a href="https://github.com/open-source">通过 GitHub 开源</a>了 365 个科学软件(LCTT 译注:本文原文发表于 2018/3/28,截止至本译文发布,已经有 454 个项目了)。对于一位热爱程序的开发者来说,即使一天研究一个软件,想把 NASA 的这些软件全部研究过来也要整整一年的时间。即使你不是一位开发者,你也可以在这个门户网站浏览这个壮观的软件合集。其中就有<a href="https://www.nasa.gov/mission_pages/apollo/missions/apollo11.html">阿波罗 11 号</a>的制导计算机的源代码。阿波罗 11 号空间飞行器<a href="https://www.space.com/16758-apollo-11-first-moon-landing.html">首次将两名人类带上月球</a>,分别是 <a href="https://www.jsc.nasa.gov/Bios/htmlbios/armstrong-na.html">Neil Armstrong</a> 和 <a href="https://www.jsc.nasa.gov/Bios/htmlbios/aldrin-b.html">Edwin Aldrin</a> 。如果你对 Edwin Aldrin 感兴趣,可以点击<a href="https://buzzaldrin.com/the-man/">这里</a>了解更多。NASA 开源代码促进会使用的开源代码许可它们采用了几种<a href="https://itsfoss.com/open-source-licenses-explained/">开源许可证</a>,其分类如下:<a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 许可证 2.0</a><a href="https://opensource.org/licenses/NASA-1.3">Nasa 开源许可证 3.0</a><a href="https://www.gnu.org/licenses/gpl.html">GPL v3</a><a href="https://en.wikipedia.org/wiki/MIT_License">MIT 许可证</a>2、开放 API开放 <a href="https://en.wikipedia.org/wiki/Application_programming_interface">API</a> 在推行开放科学中起到了很大作用。与<a href="https://opensource.org/">开源促进会</a>类似,对于 API,也有一个 <a href="https://www.openapis.org/">开放 API 促进会</a>。下面这张示意图可以告诉你 API 是怎样将应用程序和它的开发者连接起来的。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185529se9ihvzqa9uv9di9.jpg">Media</a>记得点击这个<a href="https://sproutsocial.com/insights/what-is-an-api/">链接</a>看看。链接内的文章使用了简单易懂的方法解读了 API ,文末总结了五大要点。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185530hibolbbiok4tx9l9.jpg">Media</a>这会让你感受到专有 API 和开放 API 会有多么大的不同。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185530r343o34ml6po5ekv.jpg">Media</a><a href="https://api.nasa.gov/">NASA 的 Open API</a> 主要针对应用程序开发者,旨在显著改善数据的可访问性,也包括图片内容在内。该网站有一个实时编辑器,可供你调用<a href="https://apod.nasa.gov/apod/astropix.html">每日天文一图(APOD)</a> 的 API。3、开放数据<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185531bta147c1p17cy3z1.jpg">Media</a>在<a href="https://itsfoss.com/open-source-impact-on-science/">我们发布的第一篇开放科学的文章</a>中,我们在“开放科学”段落下提到的三个国家 —— 法国、印度和美国的多种开放数据形式。NASA 有着类似的想法和行为。这种重要的意识形态已经被<a href="https://www.xbrl.org/the-standard/why/ten-countries-with-open-data/">多个国家</a>所接受。<a href="https://data.nasa.gov/">NASA 的开放数据门户</a>致力于开放,拥有不断增长的可供大众自由使用的开放数据。将数据集纳入到这个数据集对于任何研究活动来说都是必要且重要的。NASA 还在他们的门户网站上征集各方的数据需求,以一同收录在他们的数据库中。这一举措不仅是领先的、创新的,还顺应了<a href="https://en.wikipedia.org/wiki/Data_science">数据科学</a>、<a href="https://www.kdnuggets.com/2017/07/ai-deep-learning-explained-simply.html">AI 和深度学习</a>的趋势。下面的视频讲的是学者和学生们是怎样通过大量研究得出对数据科学的定义的。这个过程十分的激动人心。瑞尔森大学罗杰斯商学院的 <a href="https://www.ryerson.ca/tedrogersschool/bm/programs/real-estate-management/murtaza-haider/">Murtaza Haider 教授</a>在视频结尾中提到了开源的出现对数据科学的改变,尤其让是旧有的闭源方式逐渐变得开放。而这也确实成为了现实。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185531kly4h8gezbh5eh7c.jpg">Media</a>现在任何人都能在 NASA 上征集数据。正如前面的视频中所说,NASA 的举措很大程度上与征集和分析优化数据有关。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185532mnvmg520tivtl7zz.jpg">Media</a>你只需要免费注册即可。考虑到论坛上的公开讨论以及数据集在可能存在的每一类分析领域中的重要性,这一举措在未来会有非常积极的影响,对数据的统计…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185529jeiwccc6k36ch6mf.jpg">Media</a>最近我们刚为开设了一个新的“<a href="https://itsfoss.com/category/science/">科学类</a>”的文章分类。其中发表的最新一篇文章名为:<a href="https://itsfoss.com/open-source-impact-on-science/">开源是怎样影响科学的</a>。在这篇文章中我们主要讨论了 <a href="https://www.nasa.gov/">NASA</a> 的积极努力,这些努力包括他们通过开源实践来促进科学研究的积极作用。NASA 是怎样使用开源手段促进科学研究的NASA 将他们的整个研究库对整个公共领域开放,这是一项<a href="https://futurism.com/free-science-nasa-just-opened-its-entire-research-library-to-the-public/">壮举</a>。没错!每个人都能访问他们的整个研究库,并能从他们的研究中获益。他们现已开放的资料可以大致分为以下三类:开源 NASA开放 API开放数据1、开源 NASA这里有一份 <a href="https://github.com/">GitHub</a> 的联合创始人之一和执行总裁 <a href="http://chriswanstrath.com/">Chris Wanstrath</a> 的采访,他向我们介绍道,一切都是从很多年前开始的。该项目名为 “<a href="http://code.nasa.gov">code.nasa.gov</a>”,截至本文发表为止,NASA 已经<a href="https://github.com/open-source">通过 GitHub 开源</a>了 365 个科学软件(LCTT 译注:本文原文发表于 2018/3/28,截止至本译文发布,已经有 454 个项目了)。对于一位热爱程序的开发者来说,即使一天研究一个软件,想把 NASA 的这些软件全部研究过来也要整整一年的时间。即使你不是一位开发者,你也可以在这个门户网站浏览这个壮观的软件合集。其中就有<a href="https://www.nasa.gov/mission_pages/apollo/missions/apollo11.html">阿波罗 11 号</a>的制导计算机的源代码。阿波罗 11 号空间飞行器<a href="https://www.space.com/16758-apollo-11-first-moon-landing.html">首次将两名人类带上月球</a>,分别是 <a href="https://www.jsc.nasa.gov/Bios/htmlbios/armstrong-na.html">Neil Armstrong</a> 和 <a href="https://www.jsc.nasa.gov/Bios/htmlbios/aldrin-b.html">Edwin Aldrin</a> 。如果你对 Edwin Aldrin 感兴趣,可以点击<a href="https://buzzaldrin.com/the-man/">这里</a>了解更多。NASA 开源代码促进会使用的开源代码许可它们采用了几种<a href="https://itsfoss.com/open-source-licenses-explained/">开源许可证</a>,其分类如下:<a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 许可证 2.0</a><a href="https://opensource.org/licenses/NASA-1.3">Nasa 开源许可证 3.0</a><a href="https://www.gnu.org/licenses/gpl.html">GPL v3</a><a href="https://en.wikipedia.org/wiki/MIT_License">MIT 许可证</a>2、开放 API开放 <a href="https://en.wikipedia.org/wiki/Application_programming_interface">API</a> 在推行开放科学中起到了很大作用。与<a href="https://opensource.org/">开源促进会</a>类似,对于 API,也有一个 <a href="https://www.openapis.org/">开放 API 促进会</a>。下面这张示意图可以告诉你 API 是怎样将应用程序和它的开发者连接起来的。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185529se9ihvzqa9uv9di9.jpg">Media</a>记得点击这个<a href="https://sproutsocial.com/insights/what-is-an-api/">链接</a>看看。链接内的文章使用了简单易懂的方法解读了 API ,文末总结了五大要点。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185530hibolbbiok4tx9l9.jpg">Media</a>这会让你感受到专有 API 和开放 API 会有多么大的不同。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185530r343o34ml6po5ekv.jpg">Media</a><a href="https://api.nasa.gov/">NASA 的 Open API</a> 主要针对应用程序开发者,旨在显著改善数据的可访问性,也包括图片内容在内。该网站有一个实时编辑器,可供你调用<a href="https://apod.nasa.gov/apod/astropix.html">每日天文一图(APOD)</a> 的 API。3、开放数据<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185531bta147c1p17cy3z1.jpg">Media</a>在<a href="https://itsfoss.com/open-source-impact-on-science/">我们发布的第一篇开放科学的文章</a>中,我们在“开放科学”段落下提到的三个国家 —— 法国、印度和美国的多种开放数据形式。NASA 有着类似的想法和行为。这种重要的意识形态已经被<a href="https://www.xbrl.org/the-standard/why/ten-countries-with-open-data/">多个国家</a>所接受。<a href="https://data.nasa.gov/">NASA 的开放数据门户</a>致力于开放,拥有不断增长的可供大众自由使用的开放数据。将数据集纳入到这个数据集对于任何研究活动来说都是必要且重要的。NASA 还在他们的门户网站上征集各方的数据需求,以一同收录在他们的数据库中。这一举措不仅是领先的、创新的,还顺应了<a href="https://en.wikipedia.org/wiki/Data_science">数据科学</a>、<a href="https://www.kdnuggets.com/2017/07/ai-deep-learning-explained-simply.html">AI 和深度学习</a>的趋势。下面的视频讲的是学者和学生们是怎样通过大量研究得出对数据科学的定义的。这个过程十分的激动人心。瑞尔森大学罗杰斯商学院的 <a href="https://www.ryerson.ca/tedrogersschool/bm/programs/real-estate-management/murtaza-haider/">Murtaza Haider 教授</a>在视频结尾中提到了开源的出现对数据科学的改变,尤其让是旧有的闭源方式逐渐变得开放。而这也确实成为了现实。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185531kly4h8gezbh5eh7c.jpg">Media</a>现在任何人都能在 NASA 上征集数据。正如前面的视频中所说,NASA 的举措很大程度上与征集和分析优化数据有关。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/185532mnvmg520tivtl7zz.jpg">Media</a>你只需要免费注册即可。考虑到论坛上的公开讨论以及数据集在可能存在的每一类分析领域中的重要性,这一举措在未来会有非常积极的影响,对数据的统计…
一个免费、安全、跨平台的密码管理器
密码管理器就像一个存储库,你可以在其中存储不同账户的所有密码,并用一个主密码将其锁定。这样,你需要记住的就只剩下主密码了Media
via https://linux.cn/article-10331-1.html
密码管理器就像一个存储库,你可以在其中存储不同账户的所有密码,并用一个主密码将其锁定。这样,你需要记住的就只剩下主密码了Media
via https://linux.cn/article-10331-1.html
一个免费、安全、跨平台的密码管理器
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/222518d4m4elq47bv3e1s7.png">Media</a>在这个现代化的互联网时代,你一定在许多网站上有多个账户,它可能是个人或官方邮箱账户、社交或专业网络账户、GitHub 账户和电子商务账户等。因此,对于不同的账户,你应该设置多个不同的密码。我相信你应该已经意识到为多个账户设置相同的密码是件疯狂又危险的事情。如果攻击者设法破解了你的一个账户,那么他/她很可能尝试使用相同的密码访问你的其他账户。所以,<strong>强烈建议为不同的账户设置不同的密码</strong>。不过,记住好几个密码是很困难的。你可以把它们写在纸上,但那也不是一个有效的方法,你可能会在一段时间后失去它们。这时密码管理器就派上用场了。密码管理器就像一个存储库,你可以在其中存储不同账户的所有密码,并用一个主密码将其锁定。这样,你需要记住的就只剩下主密码了。之前我们介绍过一个叫 <a href="https://linux.cn/article-10211-1.html">KeeWeb</a> 的开源密码管理器,今天,我们将介绍另外一款密码管理器 ——— Buttercup。关于 ButtercupButtercup 是一个自由、开源、安全、跨平台的密码管理器,使用 <strong>NodeJS</strong> 编写。它可以帮助你将不同账户的所有登录凭证存储到加密存档中,该存档可以保存在本地系统或任何远程服务(如 DropBox、OwnCloud、NextCloud 和基于 WebDAV 的服务)中。它使用强大的 <strong>256 位…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/10/222518d4m4elq47bv3e1s7.png">Media</a>在这个现代化的互联网时代,你一定在许多网站上有多个账户,它可能是个人或官方邮箱账户、社交或专业网络账户、GitHub 账户和电子商务账户等。因此,对于不同的账户,你应该设置多个不同的密码。我相信你应该已经意识到为多个账户设置相同的密码是件疯狂又危险的事情。如果攻击者设法破解了你的一个账户,那么他/她很可能尝试使用相同的密码访问你的其他账户。所以,<strong>强烈建议为不同的账户设置不同的密码</strong>。不过,记住好几个密码是很困难的。你可以把它们写在纸上,但那也不是一个有效的方法,你可能会在一段时间后失去它们。这时密码管理器就派上用场了。密码管理器就像一个存储库,你可以在其中存储不同账户的所有密码,并用一个主密码将其锁定。这样,你需要记住的就只剩下主密码了。之前我们介绍过一个叫 <a href="https://linux.cn/article-10211-1.html">KeeWeb</a> 的开源密码管理器,今天,我们将介绍另外一款密码管理器 ——— Buttercup。关于 ButtercupButtercup 是一个自由、开源、安全、跨平台的密码管理器,使用 <strong>NodeJS</strong> 编写。它可以帮助你将不同账户的所有登录凭证存储到加密存档中,该存档可以保存在本地系统或任何远程服务(如 DropBox、OwnCloud、NextCloud 和基于 WebDAV 的服务)中。它使用强大的 <strong>256 位…
极客漫画:编程语言之战
Media这篇漫画生动的描绘了不同时期不同编程语言的“战争”。COBOL 是一种面向数据处理的、面向文件的、面向过程(POL)的高级编程语言,功能强大,但缺点是语法繁杂,代码冗长(看它肥的)。而 Java 当时还是个弱小的新生事物。后来,Java 慢慢发展壮大了,内存吃的越来越多了(都和 COBOL 一样又高又肥了),当 Java 准备再去打一架的时候,COBOL 提醒他注意身后想打他们两个的三个小娃娃(Scala、Kotlin、Go)。长江后浪推前浪。编程语言的发展很快,不停的会有功能更强的新“轮子”出现在我们眼前。而我们则需了解各个语言的优缺点,与时俱进地看待它们。via: http://turnoff.us/geek/programming-languages-battle/作者:Daniel Stori 译者:ItsLucas 点评:ItsLucas 校对:Bestony 合成:Bestony本文由 LCTT 原创编译,Linux中国 荣誉推出Media
via https://linux.cn/article-10332-1.html?utm_source=rss&utm_medium=rss
Media这篇漫画生动的描绘了不同时期不同编程语言的“战争”。COBOL 是一种面向数据处理的、面向文件的、面向过程(POL)的高级编程语言,功能强大,但缺点是语法繁杂,代码冗长(看它肥的)。而 Java 当时还是个弱小的新生事物。后来,Java 慢慢发展壮大了,内存吃的越来越多了(都和 COBOL 一样又高又肥了),当 Java 准备再去打一架的时候,COBOL 提醒他注意身后想打他们两个的三个小娃娃(Scala、Kotlin、Go)。长江后浪推前浪。编程语言的发展很快,不停的会有功能更强的新“轮子”出现在我们眼前。而我们则需了解各个语言的优缺点,与时俱进地看待它们。via: http://turnoff.us/geek/programming-languages-battle/作者:Daniel Stori 译者:ItsLucas 点评:ItsLucas 校对:Bestony 合成:Bestony本文由 LCTT 原创编译,Linux中国 荣誉推出Media
via https://linux.cn/article-10332-1.html?utm_source=rss&utm_medium=rss
感谢开源和自由软件维护者的 10 种方法
如何表达你的感激之情。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/124828or7o15f7srzb1bj1.png">Media</a>每天,我使用的那些高质量的软件 —— 开发和维护这些软件的人不需要我为之付款,他们尊重我的自由,并且慷慨地付出时间和精力。在这个感恩的季节,我鼓励那些也使用和欣赏开源和自由软件维护者工作的人表达你的感激之情。以下是十种方法:容易做到的1、发送电子邮件感谢开发人员。具体点说,告诉他们你使用他们的什么软件以及它是如何帮助了你。2、使用你最喜爱的社交媒体平台宣传它。3、写一篇关于你最喜欢的软件的博客文章。捐款4、如果你最喜欢的开源项目接受捐款,请汇款。5、如果你受雇于使用开源软件的公司,看你是否可以说服管理层赞助某些项目。6、尽你所能地捐款。社交动机能做的不可思议!花费时间7、帮助审查补丁。8、帮助分类 bug。9、回答 IRC、邮件列表或 <a href="https://meta.stackoverflow.com/">Stack Overflow</a> 中的问题。<strong>10、额外的:</strong>如果你像我一样,你在某个时候对开源社区的其他人说了一些严厉的话。承诺做得更好:用善良和开放沟通。感谢的最好方式是让开源社区成为人们能舒适沟通的地方。via: <a href="https://opensource.com/article/18/11/ways-give-thanks-open-source">https://opensource.com/article/18/11/ways-give-thanks-open-source</a>作者:<a href="https://opensource.com/users/moshez">Moshe Zadka</a> 选题:<a href="https://github.com/lujun9972">lujun9972</a> 译者:<a href="https://github.com/geekpi">geekpi</a> 校对:<a href="https://github.com/wxy">wxy</a>本文由 <a href="https://github.co…
如何表达你的感激之情。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/124828or7o15f7srzb1bj1.png">Media</a>每天,我使用的那些高质量的软件 —— 开发和维护这些软件的人不需要我为之付款,他们尊重我的自由,并且慷慨地付出时间和精力。在这个感恩的季节,我鼓励那些也使用和欣赏开源和自由软件维护者工作的人表达你的感激之情。以下是十种方法:容易做到的1、发送电子邮件感谢开发人员。具体点说,告诉他们你使用他们的什么软件以及它是如何帮助了你。2、使用你最喜爱的社交媒体平台宣传它。3、写一篇关于你最喜欢的软件的博客文章。捐款4、如果你最喜欢的开源项目接受捐款,请汇款。5、如果你受雇于使用开源软件的公司,看你是否可以说服管理层赞助某些项目。6、尽你所能地捐款。社交动机能做的不可思议!花费时间7、帮助审查补丁。8、帮助分类 bug。9、回答 IRC、邮件列表或 <a href="https://meta.stackoverflow.com/">Stack Overflow</a> 中的问题。<strong>10、额外的:</strong>如果你像我一样,你在某个时候对开源社区的其他人说了一些严厉的话。承诺做得更好:用善良和开放沟通。感谢的最好方式是让开源社区成为人们能舒适沟通的地方。via: <a href="https://opensource.com/article/18/11/ways-give-thanks-open-source">https://opensource.com/article/18/11/ways-give-thanks-open-source</a>作者:<a href="https://opensource.com/users/moshez">Moshe Zadka</a> 选题:<a href="https://github.com/lujun9972">lujun9972</a> 译者:<a href="https://github.com/geekpi">geekpi</a> 校对:<a href="https://github.com/wxy">wxy</a>本文由 <a href="https://github.co…
Emacs 系列(四):使用 Org 模式自动管理邮件及同步文档
“我真的很想让它在我所有的设备上同步。”“我能在 Org 模式中转发邮件吗?”Media
via https://linux.cn/article-10334-1.html
“我真的很想让它在我所有的设备上同步。”“我能在 Org 模式中转发邮件吗?”Media
via https://linux.cn/article-10334-1.html
Emacs 系列(四):使用 Org 模式自动管理邮件及同步文档
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/130456ogrygnavwfckr6wm.png">Media</a>这是 <a href="https://www.emacswiki.org/emacs/mu4e">Emacs 和 Org 模式系列</a>的第四篇。至今为止,你已经见识到了 Org 模式的强大和高效,如果你像我一样,你可能会想:“我真的很想让它在我所有的设备上同步。”或者是说:“我能在 Org 模式中转发邮件吗?”答案当然是肯定的,因为这就是 Emacs。同步由于 Org 模式只使用文本文件,所以使用任意工具都可以很容易地实现同步。我使用的是 git 的 git-remote-gcrypt。由于 git-remote-gcrypt 的一些限制,每台机器都倾向于推到自己的分支,并使用命令来控制。每台机器都会先合并其它所有的分支,然后再将合并后的结果推送到主干上。cron 作业可以实现将机器上的分支推送上去,而 elisp 会协调这一切 —— 确保在同步之前保存缓冲区,在同步之后从磁盘刷新缓冲区,等等。这篇文章的代码有点多,所以我将把它链接到 github 上,而不是写在这里。我有一个用来存放我所有的 Org 模式的文件的目录 $HOME/org,在 ~/org 目录下有个 <a href="https://github.com/jgoerzen/public-snippets/blob/master/emacs/org-tools/Makefile">Makefile</a> 文件来处理同步。该文件定义了以下目标:push: 添加、提交和推送到以主机命名的分支上fetch: 一个简单的 git fetch 操作sync: 添加、提交和拉取远程的修改,合并,并(假设合并成功)将其推送到以主机命名的分支和主干上现在,在我的用户 crontab 中有这个:<pre class="prettyprint linenums">*/15…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/130456ogrygnavwfckr6wm.png">Media</a>这是 <a href="https://www.emacswiki.org/emacs/mu4e">Emacs 和 Org 模式系列</a>的第四篇。至今为止,你已经见识到了 Org 模式的强大和高效,如果你像我一样,你可能会想:“我真的很想让它在我所有的设备上同步。”或者是说:“我能在 Org 模式中转发邮件吗?”答案当然是肯定的,因为这就是 Emacs。同步由于 Org 模式只使用文本文件,所以使用任意工具都可以很容易地实现同步。我使用的是 git 的 git-remote-gcrypt。由于 git-remote-gcrypt 的一些限制,每台机器都倾向于推到自己的分支,并使用命令来控制。每台机器都会先合并其它所有的分支,然后再将合并后的结果推送到主干上。cron 作业可以实现将机器上的分支推送上去,而 elisp 会协调这一切 —— 确保在同步之前保存缓冲区,在同步之后从磁盘刷新缓冲区,等等。这篇文章的代码有点多,所以我将把它链接到 github 上,而不是写在这里。我有一个用来存放我所有的 Org 模式的文件的目录 $HOME/org,在 ~/org 目录下有个 <a href="https://github.com/jgoerzen/public-snippets/blob/master/emacs/org-tools/Makefile">Makefile</a> 文件来处理同步。该文件定义了以下目标:push: 添加、提交和推送到以主机命名的分支上fetch: 一个简单的 git fetch 操作sync: 添加、提交和拉取远程的修改,合并,并(假设合并成功)将其推送到以主机命名的分支和主干上现在,在我的用户 crontab 中有这个:<pre class="prettyprint linenums">*/15…
在 Linux 命令行下进行时间管理
学习如何在命令行下用这些方法自己组织待办事项。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/213620q8a88wvc3zoj86jo.jpg">Media</a>关于如何在命令行下进行时间管理getting things done(GTD)有很多讨论。不知有多少文章在讲使用 ls 晦涩的选项、配合 Sed 和 Awk 的一些神奇的正则表达式,以及用 Perl 解析一大堆的文本。但这些都不是问题的重点。本文章是关于“<a href="https://www.scruminc.com/getting-done/">如何完成</a>”,在我们不需要图形桌面、网络浏览器或网络连接情况下,用命令行操作能实际完成事务的跟踪。为了达到这一点,我们将介绍四种跟踪待办事项的方式:纯文件文件、Todo.txt、TaskWarrior 和 Org 模式。简单纯文本<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/213638wwbr4qhhi0tkej2o.png">纯文本</a><em>我喜欢用 Vim,其实你也可以用 Nano。</em>最直接管理你的待办事项的方式就是用纯文本文件来编辑。只需要打开一个空文件,每一行添加一个任务。当任务完成后,删除这一行。简单有效,无论你用它做什么都没关系。不过这个方法也有两个缺点,一但你删除一行并保存了文件,它就是永远消失了。如果你想知道本周或者上周都做了哪些事情,就成了问题。使用简单文本文件很方便却也容易导致混乱。Todo.txt: 纯文件的升级版<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/213639ys6k5btpt5pbz2dd.png">todo.txt 截屏</a><em>整洁,有条理,易用</em>这就是我们要说的 <a href="http://todotxt.org/">Todo.txt</a> 文件格式和应用程序。安装很简单,可从 GitHub <a href="https://github.com/todotxt/todo.txt-cli/r…
学习如何在命令行下用这些方法自己组织待办事项。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/213620q8a88wvc3zoj86jo.jpg">Media</a>关于如何在命令行下进行时间管理getting things done(GTD)有很多讨论。不知有多少文章在讲使用 ls 晦涩的选项、配合 Sed 和 Awk 的一些神奇的正则表达式,以及用 Perl 解析一大堆的文本。但这些都不是问题的重点。本文章是关于“<a href="https://www.scruminc.com/getting-done/">如何完成</a>”,在我们不需要图形桌面、网络浏览器或网络连接情况下,用命令行操作能实际完成事务的跟踪。为了达到这一点,我们将介绍四种跟踪待办事项的方式:纯文件文件、Todo.txt、TaskWarrior 和 Org 模式。简单纯文本<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/213638wwbr4qhhi0tkej2o.png">纯文本</a><em>我喜欢用 Vim,其实你也可以用 Nano。</em>最直接管理你的待办事项的方式就是用纯文本文件来编辑。只需要打开一个空文件,每一行添加一个任务。当任务完成后,删除这一行。简单有效,无论你用它做什么都没关系。不过这个方法也有两个缺点,一但你删除一行并保存了文件,它就是永远消失了。如果你想知道本周或者上周都做了哪些事情,就成了问题。使用简单文本文件很方便却也容易导致混乱。Todo.txt: 纯文件的升级版<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/213639ys6k5btpt5pbz2dd.png">todo.txt 截屏</a><em>整洁,有条理,易用</em>这就是我们要说的 <a href="http://todotxt.org/">Todo.txt</a> 文件格式和应用程序。安装很简单,可从 GitHub <a href="https://github.com/todotxt/todo.txt-cli/r…
无服务器架构的三个意义
以及,对于无服务器Serverless架构,什么时候该用,什么时候不该用呢?<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/231112uodduz2774778cox.png">Media</a>如果将如今互联网体验中最方便实用的那一部分去掉,那么留下来的基本就是客户端-服务端client-server模式了。这一个模式在互联网建立初期就已经在使用了,直到目前都没有太大的变化,也就是说,这个模式仍然在为我们服务。那么,当人们谈论无服务器Serverless架构的时候,到底是指什么呢?其实,无服务器架构并不是说不使用服务器了。恰恰相反,客户端-服务端模式仍然在其中发挥着重要的作用。无服务器架构实际上指的是能够让开发者在不需要关心服务器上架、为操作系统打补丁、创建容器镜像这些工作的情况下,就能够完成编码、部署和创建应用这一整套流程的架构。无服务器架构的三个重要意义一些缺乏开发经验的人员现在要参与到开发工作中来了。无服务器架构能够让他们尽量只学习必要的工作内容,把更多的时间放在更具创造性的开发工作中。开发者不再需要重复造轮子。运行和维护服务器、为操作系统打补丁、创建容器等这一系列工作,都可以由更专业的无服务器架构提供商来完成。最现实的一点是,如果不使用无服务器架构,那么在服务器管理方面,总需要有一个作最终决策的人。当服务&#…
以及,对于无服务器Serverless架构,什么时候该用,什么时候不该用呢?<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/11/231112uodduz2774778cox.png">Media</a>如果将如今互联网体验中最方便实用的那一部分去掉,那么留下来的基本就是客户端-服务端client-server模式了。这一个模式在互联网建立初期就已经在使用了,直到目前都没有太大的变化,也就是说,这个模式仍然在为我们服务。那么,当人们谈论无服务器Serverless架构的时候,到底是指什么呢?其实,无服务器架构并不是说不使用服务器了。恰恰相反,客户端-服务端模式仍然在其中发挥着重要的作用。无服务器架构实际上指的是能够让开发者在不需要关心服务器上架、为操作系统打补丁、创建容器镜像这些工作的情况下,就能够完成编码、部署和创建应用这一整套流程的架构。无服务器架构的三个重要意义一些缺乏开发经验的人员现在要参与到开发工作中来了。无服务器架构能够让他们尽量只学习必要的工作内容,把更多的时间放在更具创造性的开发工作中。开发者不再需要重复造轮子。运行和维护服务器、为操作系统打补丁、创建容器等这一系列工作,都可以由更专业的无服务器架构提供商来完成。最现实的一点是,如果不使用无服务器架构,那么在服务器管理方面,总需要有一个作最终决策的人。当服务&#…
OpenSnitch:一个 Linux 上的应用程序防火墙
不能因为 Linux 比 Windows 更安全,就可以在 Linux 上放松警惕。Linux 上可以使用的防火墙很多,它们可以让你的 Linux 系统更安全。今天,我们将带你了解一个这样的防火墙工具,它就是 OpenSnitch。Media
via https://linux.cn/article-10337-1.html
不能因为 Linux 比 Windows 更安全,就可以在 Linux 上放松警惕。Linux 上可以使用的防火墙很多,它们可以让你的 Linux 系统更安全。今天,我们将带你了解一个这样的防火墙工具,它就是 OpenSnitch。Media
via https://linux.cn/article-10337-1.html
OpenSnitch:一个 Linux 上的应用程序防火墙
不能因为 Linux 比 Windows 更安全,就可以在 Linux 上放松警惕。Linux 上可以使用的防火墙很多,它们可以让你的 Linux 系统更安全。今天,我们将带你了解一个这样的防火墙工具,它就是 OpenSnitch。OpenSnitch 是什么?<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/12/130335rlrd1dnddla746ta.jpg">Linux firewall and security</a><a href="https://www.opensnitch.io/">OpenSnitch</a> 是从 Little Snitch 上移植过来的。而 Little Snitch 是专门为 Mac OS 设计的一款应用程序防火墙。OpenSnitch 是由 <a href="https://github.com/evilsocket">Simone Margaritelli</a> 设计,也称为 <a href="https://twitter.com/evilsocket">evilsocket</a>。OpenSnitch 所做的主要事情就是跟踪你机器上安装的应用程序所发起的互联网请求。OpenSnitch 允许你去创建规则以同意或阻止那个应用程序发起的互联网访问。当一个应用程序尝试去访问互联网而没有相应的访问规则存在时,就会出现一个对话框,这个对话框让你去选择允许还是阻止那个连接。你也可以决定这个新规则是应用到进程上、具体的 URL 上、域名上、单个实例上,以及本次会话还是永久有效。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/12/130341i3xyfxamj3x4xjzk.jpg">OpenSnitch firewall app in Linux</a><em>OpenSnatch 规则请求</em>你创建的所有规则都保存为 <a href="https://www.json.org/">JSON 文件</a>,如果以后需要修改它,就可以去修改这个文件。比如说,你错误地阻止了一个应用程序。OpenSnitch 也有一个漂亮的、一目了然的图形用户界面:是什么应用程序访问 web它们使用哪个 IP 地址属主用户是谁使用哪个端口如果你愿意,也可以将这些信息导出到一个 CSV 文&…
不能因为 Linux 比 Windows 更安全,就可以在 Linux 上放松警惕。Linux 上可以使用的防火墙很多,它们可以让你的 Linux 系统更安全。今天,我们将带你了解一个这样的防火墙工具,它就是 OpenSnitch。OpenSnitch 是什么?<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/12/130335rlrd1dnddla746ta.jpg">Linux firewall and security</a><a href="https://www.opensnitch.io/">OpenSnitch</a> 是从 Little Snitch 上移植过来的。而 Little Snitch 是专门为 Mac OS 设计的一款应用程序防火墙。OpenSnitch 是由 <a href="https://github.com/evilsocket">Simone Margaritelli</a> 设计,也称为 <a href="https://twitter.com/evilsocket">evilsocket</a>。OpenSnitch 所做的主要事情就是跟踪你机器上安装的应用程序所发起的互联网请求。OpenSnitch 允许你去创建规则以同意或阻止那个应用程序发起的互联网访问。当一个应用程序尝试去访问互联网而没有相应的访问规则存在时,就会出现一个对话框,这个对话框让你去选择允许还是阻止那个连接。你也可以决定这个新规则是应用到进程上、具体的 URL 上、域名上、单个实例上,以及本次会话还是永久有效。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/12/130341i3xyfxamj3x4xjzk.jpg">OpenSnitch firewall app in Linux</a><em>OpenSnatch 规则请求</em>你创建的所有规则都保存为 <a href="https://www.json.org/">JSON 文件</a>,如果以后需要修改它,就可以去修改这个文件。比如说,你错误地阻止了一个应用程序。OpenSnitch 也有一个漂亮的、一目了然的图形用户界面:是什么应用程序访问 web它们使用哪个 IP 地址属主用户是谁使用哪个端口如果你愿意,也可以将这些信息导出到一个 CSV 文&…
12 条实用的 zypper 命令范例
zypper 是 Suse Linux 系统的包和补丁管理器,你可以根据下面的 12 条附带输出示例的实用范例来学习 zypper 命令的使用。Media
via https://linux.cn/article-10338-1.html
zypper 是 Suse Linux 系统的包和补丁管理器,你可以根据下面的 12 条附带输出示例的实用范例来学习 zypper 命令的使用。Media
via https://linux.cn/article-10338-1.html
12 条实用的 zypper 命令范例
zypper 是 Suse Linux 系统的包和补丁管理器,你可以根据下面的 12 条附带输出示例的实用范例来学习 zypper 命令的使用。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/12/132928jmstt99so6s0tesp.jpg">Media</a>Suse Linux 使用 zypper 进行包管理,其是一个由 <a href="https://en.wikipedia.org/wiki/ZYpp">ZYpp 包管理引擎</a>提供的包管理系统。在此篇文章中我们将分享 12 条附带输出示例的实用 zypper 命令,能帮助你处理日常的系统管理任务。不带参数的 zypper 命令将列出所有可用的选项,这比参考详细的 man 手册要容易上手得多。<pre class="prettyprint linenums">root@kerneltalks # zypper 用法: zypper [--global-options] <command> [--command-options] [arguments] zypper <subcommand> [--command-options] [arguments] 全局选项: --help, -h 帮助 --version, -V 输出版本号 --promptids 输出 zypper 用户提示符列表 --config, -c <file> 使用指定的配置文件来替代默认的 --userdata <string> 在历史和插件中使用的用户自定义事务 id --quiet, -q 忽略正常输出,只打印错误信息 --verbose, -v 增加冗长程度 --color --no-color 是否启用彩色模式,如果 tty 支持的话 --no-abbrev, -A 表格中的文字不使用缩写 --table-style, -s 表格样式(整型) --non-interactive, -n 不询问任何选项,自动使用默认答案 --non-interactive-include-reboot-patches 针对带有重启标志的补丁,不使用交互模式 --xmlout, -x 切换至 XML 输出 --ignore-unknown, -i 忽略未知的包 --reposd-dir, -D <dir> 使用自定义仓库文件目录 --cache-dir, -C <dir> 为所有缓存启用可选路径 --raw-cache-dir <dir> 启用可选 raw 元数据缓存路径 --solv-cache-dir <dir> 启用可选 solv 文件缓存路径 --pkg-cache-dir <dir> 启用可选包缓存路径 仓库选项: --no-gpg-checks 忽略 GPG 检查失败并跳过 --gpg-auto-import-keys 自动信任并导入新仓库的签名密钥 --plus…
zypper 是 Suse Linux 系统的包和补丁管理器,你可以根据下面的 12 条附带输出示例的实用范例来学习 zypper 命令的使用。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/12/132928jmstt99so6s0tesp.jpg">Media</a>Suse Linux 使用 zypper 进行包管理,其是一个由 <a href="https://en.wikipedia.org/wiki/ZYpp">ZYpp 包管理引擎</a>提供的包管理系统。在此篇文章中我们将分享 12 条附带输出示例的实用 zypper 命令,能帮助你处理日常的系统管理任务。不带参数的 zypper 命令将列出所有可用的选项,这比参考详细的 man 手册要容易上手得多。<pre class="prettyprint linenums">root@kerneltalks # zypper 用法: zypper [--global-options] <command> [--command-options] [arguments] zypper <subcommand> [--command-options] [arguments] 全局选项: --help, -h 帮助 --version, -V 输出版本号 --promptids 输出 zypper 用户提示符列表 --config, -c <file> 使用指定的配置文件来替代默认的 --userdata <string> 在历史和插件中使用的用户自定义事务 id --quiet, -q 忽略正常输出,只打印错误信息 --verbose, -v 增加冗长程度 --color --no-color 是否启用彩色模式,如果 tty 支持的话 --no-abbrev, -A 表格中的文字不使用缩写 --table-style, -s 表格样式(整型) --non-interactive, -n 不询问任何选项,自动使用默认答案 --non-interactive-include-reboot-patches 针对带有重启标志的补丁,不使用交互模式 --xmlout, -x 切换至 XML 输出 --ignore-unknown, -i 忽略未知的包 --reposd-dir, -D <dir> 使用自定义仓库文件目录 --cache-dir, -C <dir> 为所有缓存启用可选路径 --raw-cache-dir <dir> 启用可选 raw 元数据缓存路径 --solv-cache-dir <dir> 启用可选 solv 文件缓存路径 --pkg-cache-dir <dir> 启用可选包缓存路径 仓库选项: --no-gpg-checks 忽略 GPG 检查失败并跳过 --gpg-auto-import-keys 自动信任并导入新仓库的签名密钥 --plus…
Cat 命令的源码历史
对于 cat,这个想法和程序本身都很古老。不准确地说,我的电脑上的 cat 来自 1969 年。Media
via https://linux.cn/article-10339-1.html
对于 cat,这个想法和程序本身都很古老。不准确地说,我的电脑上的 cat 来自 1969 年。Media
via https://linux.cn/article-10339-1.html