为什么 Linux 用户应该试一试 Rust
在 Linux 系统上安装 Rust 编程语言可能是你近年来所做的最有价值的事情之一。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/26/090805l94nk97sz87e1yld.jpg">Media</a>Rust 是一种相当年轻和现代的编程语言,具有许多使其非常灵活而及其安全的功能。数据显示它正在变得非常受欢迎,连续三年(<a href="https://insights.stackoverflow.com/survey/2016#technology-most-loved-dreaded-and-wanted">2016</a>、<a href="https://insights.stackoverflow.com/survey/2017#technology-most-loved-dreaded-and-wanted-languages">2017</a> 和 <a href="https://insights.stackoverflow.com/survey/2018#technology-most-loved-dreaded-and-wanted-languages">2018</a>)在 Stack Overflow 开发者调查中获得“最受喜爱的编程语言”的第一名。Rust 也是开源语言的一种,它具有一系列特殊的功能,使得它可以适应许多不同的编程项目。 它最初源于 2006 年 Mozilla 员工的个人项目,几年后(2009 年)被 Mozilla 选为特别项目,然后在 2010 年宣布供公众使用。Rust 程序运行速度极快,可防止段错误,并能保证线程安全。这些属性使该语言极大地吸引了专注于应用程序安全性的开发人员。Rust 也是一种非常易读的语言,可用于从简单程序到非常大而复杂的项目。Rust 优点:内存安全 —— Rust 不会受到悬空指针、缓冲区溢出或其他与内存相关的错误的影响。它提供内存安全,无回收垃圾。通用 —— Rust 是适用于任何类型编程的语言快速 —— Rust 在性能上与 C / C++ 相当,但具有更好的安全功能。高效 —— Rust 是为了便于并发编程而构建的。面向项目 —— Rust 具有内置的依赖关系和构建管理系统 Cargo。得到很好的支持 —— Rust 有一个令人印#…
在 Linux 系统上安装 Rust 编程语言可能是你近年来所做的最有价值的事情之一。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/26/090805l94nk97sz87e1yld.jpg">Media</a>Rust 是一种相当年轻和现代的编程语言,具有许多使其非常灵活而及其安全的功能。数据显示它正在变得非常受欢迎,连续三年(<a href="https://insights.stackoverflow.com/survey/2016#technology-most-loved-dreaded-and-wanted">2016</a>、<a href="https://insights.stackoverflow.com/survey/2017#technology-most-loved-dreaded-and-wanted-languages">2017</a> 和 <a href="https://insights.stackoverflow.com/survey/2018#technology-most-loved-dreaded-and-wanted-languages">2018</a>)在 Stack Overflow 开发者调查中获得“最受喜爱的编程语言”的第一名。Rust 也是开源语言的一种,它具有一系列特殊的功能,使得它可以适应许多不同的编程项目。 它最初源于 2006 年 Mozilla 员工的个人项目,几年后(2009 年)被 Mozilla 选为特别项目,然后在 2010 年宣布供公众使用。Rust 程序运行速度极快,可防止段错误,并能保证线程安全。这些属性使该语言极大地吸引了专注于应用程序安全性的开发人员。Rust 也是一种非常易读的语言,可用于从简单程序到非常大而复杂的项目。Rust 优点:内存安全 —— Rust 不会受到悬空指针、缓冲区溢出或其他与内存相关的错误的影响。它提供内存安全,无回收垃圾。通用 —— Rust 是适用于任何类型编程的语言快速 —— Rust 在性能上与 C / C++ 相当,但具有更好的安全功能。高效 —— Rust 是为了便于并发编程而构建的。面向项目 —— Rust 具有内置的依赖关系和构建管理系统 Cargo。得到很好的支持 —— Rust 有一个令人印#…
使用 Lakka Linux 将你的旧 PC 变成复古游戏主机
如果你有一台吃灰的旧计算机,你可以用 Lakka Linux 将它变成像 PlayStation 那样的复古游戏主机。Media
via https://linux.cn/article-10158-1.html
如果你有一台吃灰的旧计算机,你可以用 Lakka Linux 将它变成像 PlayStation 那样的复古游戏主机。Media
via https://linux.cn/article-10158-1.html
使用 Lakka Linux 将你的旧 PC 变成复古游戏主机
如果你有一台吃灰的旧计算机,你可以用 Lakka Linux 将它变成像 PlayStation 那样的复古游戏主机。你可能已经了解<a href="https://itsfoss.com/lightweight-linux-beginners/">专门用于复活旧计算机的 Linux 发行版</a>。但是你知道有个 Linux 发行版专门是为了将旧电脑变成复古游戏主机创建的么?<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/26/095819b5enoa7zo8hwwhw7.jpg">Lakka is a Linux distribution specially for retrogaming</a>认识下 <a href="http://www.lakka.tv/">Lakka</a>,它是一个轻量级 Linux 发行版,可以将旧的或低端的计算机(如 Raspberry Pi)变成一个完整的复古游戏主机,当我说复古游戏主机时,我对主机部分很认真。如果你曾经使用过 Xbox 和 PlayStation,你就会知道典型的主机界面是什么样的。Lakka 提供类似的界面和类似的体验。我稍后会谈到“体验”。先看一下界面。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/26/095625eagrgrffrug44vfw.gif">Media</a><em>Lakka 复古游戏界面</em>Lakka:为复古游戏而生的 Linux 发行版Lakka 是 <a href="https://www.retroarch.com/">RetroArch</a> 和 <a href="https://www.libretro.com/">Libretro</a> 生态系统的官方 Linux 发行版。RetroArch 是复古游戏模拟器和游戏引擎的前端。你在上面的视频中看到的界面只是 RetroArch。如果你是只想玩复古游戏,只需在当前的 Linux 发行版中安装 RetroArch 即可。Lakka 提供了带有 Libretro 核心的 RetroArch。因此,你会获得一个预先配置完的操作系统,你可以安装或插入 live USB 并开始玩游戏。Lakka 是轻量级的,你可以将它安装在大多数老系统或单板计算机上,如 Raspberry Pi 上。它支持大量的模拟器。你只需要在系统上下载 ROM,Lakka…
如果你有一台吃灰的旧计算机,你可以用 Lakka Linux 将它变成像 PlayStation 那样的复古游戏主机。你可能已经了解<a href="https://itsfoss.com/lightweight-linux-beginners/">专门用于复活旧计算机的 Linux 发行版</a>。但是你知道有个 Linux 发行版专门是为了将旧电脑变成复古游戏主机创建的么?<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/26/095819b5enoa7zo8hwwhw7.jpg">Lakka is a Linux distribution specially for retrogaming</a>认识下 <a href="http://www.lakka.tv/">Lakka</a>,它是一个轻量级 Linux 发行版,可以将旧的或低端的计算机(如 Raspberry Pi)变成一个完整的复古游戏主机,当我说复古游戏主机时,我对主机部分很认真。如果你曾经使用过 Xbox 和 PlayStation,你就会知道典型的主机界面是什么样的。Lakka 提供类似的界面和类似的体验。我稍后会谈到“体验”。先看一下界面。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/26/095625eagrgrffrug44vfw.gif">Media</a><em>Lakka 复古游戏界面</em>Lakka:为复古游戏而生的 Linux 发行版Lakka 是 <a href="https://www.retroarch.com/">RetroArch</a> 和 <a href="https://www.libretro.com/">Libretro</a> 生态系统的官方 Linux 发行版。RetroArch 是复古游戏模拟器和游戏引擎的前端。你在上面的视频中看到的界面只是 RetroArch。如果你是只想玩复古游戏,只需在当前的 Linux 发行版中安装 RetroArch 即可。Lakka 提供了带有 Libretro 核心的 RetroArch。因此,你会获得一个预先配置完的操作系统,你可以安装或插入 live USB 并开始玩游戏。Lakka 是轻量级的,你可以将它安装在大多数老系统或单板计算机上,如 Raspberry Pi 上。它支持大量的模拟器。你只需要在系统上下载 ROM,Lakka…
使用 Argbash 来改进你的 Bash 脚本
Argbash 是一个代码生成器,它为你的脚本生成一个量身定制的解析库。与其他 bash 模块的通用代码不同,它生成你的脚本所需的最少代码。Media
via https://linux.cn/article-10159-1.html
Argbash 是一个代码生成器,它为你的脚本生成一个量身定制的解析库。与其他 bash 模块的通用代码不同,它生成你的脚本所需的最少代码。Media
via https://linux.cn/article-10159-1.html
使用 Argbash 来改进你的 Bash 脚本
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/27/092854nrvazffgzfnqaxfw.png">Media</a>你编写或维护过有意义的 bash 脚本吗?如果回答是,那么你可能希望它们以标准且健壮的方式接收命令行参数。Fedora 最近得到了<a href="https://argbash.readthedocs.io/">一个很好的附加组件</a>,它可以帮助你生成更好的脚本。不用担心,它不会花费你很多时间或精力。为什么需要 Argbash?Bash 是一种解释性的命令行语言,没有标准库。因此,如果你编写 bash 脚本并希望命令行界面符合 <a href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html">POSIX</a> 和 <a href="https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html">GNU CLI</a> 标准,那么你一般只有两种选择:直接编写为脚本量身定制的参数解析功能(可使用内置的 getopts)。使用外部 bash 模块。第一个选项看起来非常愚蠢,因为正确实现接口并非易事。但是,从 <a href="https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash">Stack Overflow</a> 到 <a href="http://wiki.bash-hackers.org/howto/getopts_tutorial">Bash Hackers</a> wiki 的各种站点上,它却被认为是最佳选择。第二个选项看起来更聪明,但使用模块有它自己的问题。最大的问题是你必须将其代码与脚本捆绑在一起。这可能意味着:要么,你将库作为单独的文件分发或者,在脚本的开头包含库代码有两个文件而不是一个是愚蠢的;但采用一个文件的话,会让一堆上千行的复杂代码污染了你的脚本。这是 Argbash <a href="https://argbash.readthedocs.io/">项目诞生</a>的主要原因。Argbash 是一个代码生成器,它为你的脚本生成一个量身定制的解析库。…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/27/092854nrvazffgzfnqaxfw.png">Media</a>你编写或维护过有意义的 bash 脚本吗?如果回答是,那么你可能希望它们以标准且健壮的方式接收命令行参数。Fedora 最近得到了<a href="https://argbash.readthedocs.io/">一个很好的附加组件</a>,它可以帮助你生成更好的脚本。不用担心,它不会花费你很多时间或精力。为什么需要 Argbash?Bash 是一种解释性的命令行语言,没有标准库。因此,如果你编写 bash 脚本并希望命令行界面符合 <a href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html">POSIX</a> 和 <a href="https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html">GNU CLI</a> 标准,那么你一般只有两种选择:直接编写为脚本量身定制的参数解析功能(可使用内置的 getopts)。使用外部 bash 模块。第一个选项看起来非常愚蠢,因为正确实现接口并非易事。但是,从 <a href="https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash">Stack Overflow</a> 到 <a href="http://wiki.bash-hackers.org/howto/getopts_tutorial">Bash Hackers</a> wiki 的各种站点上,它却被认为是最佳选择。第二个选项看起来更聪明,但使用模块有它自己的问题。最大的问题是你必须将其代码与脚本捆绑在一起。这可能意味着:要么,你将库作为单独的文件分发或者,在脚本的开头包含库代码有两个文件而不是一个是愚蠢的;但采用一个文件的话,会让一堆上千行的复杂代码污染了你的脚本。这是 Argbash <a href="https://argbash.readthedocs.io/">项目诞生</a>的主要原因。Argbash 是一个代码生成器,它为你的脚本生成一个量身定制的解析库。…
一窥你安装的 Linux 软件包
这些最有用的命令可以让你了解安装在你的 Debian 类的 Linux 系统上的包的情况。Media
via https://linux.cn/article-10160-1.html
这些最有用的命令可以让你了解安装在你的 Debian 类的 Linux 系统上的包的情况。Media
via https://linux.cn/article-10160-1.html
一窥你安装的 Linux 软件包
这些最有用的命令可以让你了解安装在你的 Debian 类的 Linux 系统上的包的情况。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/27/095619ks5en1rsgvguoojs.jpg">Media</a>你有没有想过你的 Linux 系统上安装了几千个软件包? 是的,我说的是“千”。 即使是相当一般的 Linux 系统也可能安装了上千个软件包。 有很多方法可以获得这些包到底是什么包的详细信息。首先,要在基于 Debian 的发行版(如 Ubuntu)上快速得到已安装的软件包数量,请使用 apt list --installed, 如下:<pre class="prettyprint linenums">$ apt list --installed | wc -l2067</pre>这个数字实际上多了一个,因为输出中包含了 “Listing …” 作为它的第一行。 这个命令会更准确:<pre class="prettyprint linenums">$ apt list --installed | grep -v "^Listing" | wc -l2066</pre>要获得所有这些包的详细信息,请按以下方式浏览列表:<pre class="prettyprint linenums">$ apt list --installed | moreListing...a11y-profile-manager-indicator/xenial,now 0.1.10-0ubuntu3 amd64 [installed]account-plugin-aim/xenial,now 3.12.11-0ubuntu3 amd64 [installed]account-plugin-facebook/xenial,xenial,now 0.12+16.04.20160126-0ubuntu1 all [installed]account-plugin-flickr/xenial,xenial,now 0.12+16.04.20160126-0ubuntu1 all [installed]account-plugin-google/xenial,xenial,now 0.12+16.04.20160126-0ubuntu1 all [installed]account-plugin-jabber/xenial,now 3.12.11-0ubuntu3 amd64 [installed]account-plugin-salut/xenial,now 3.12.11-0ubuntu3 amd64 [installed]</pre>这需要观察很多细节 —— 特别是让你的眼睛在所有 2000 多个文件中徘徊。 它包含包名称、版本等,以及更多但并不是以最易于我们人类解析的显示信息。 dpkg-query 使得描述更容易理解,但这些描述会塞满你的命令窗口,除非窗口非常宽。 因此,为了让此篇文章更容易阅读,下面的数据显示已经分成了左右两侧。左侧:<pre class="prettyprint linenums">$ dpkg-query -l | moreDesired=Unknown/Install/Remove/Purge/Hold| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)||/…
这些最有用的命令可以让你了解安装在你的 Debian 类的 Linux 系统上的包的情况。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/27/095619ks5en1rsgvguoojs.jpg">Media</a>你有没有想过你的 Linux 系统上安装了几千个软件包? 是的,我说的是“千”。 即使是相当一般的 Linux 系统也可能安装了上千个软件包。 有很多方法可以获得这些包到底是什么包的详细信息。首先,要在基于 Debian 的发行版(如 Ubuntu)上快速得到已安装的软件包数量,请使用 apt list --installed, 如下:<pre class="prettyprint linenums">$ apt list --installed | wc -l2067</pre>这个数字实际上多了一个,因为输出中包含了 “Listing …” 作为它的第一行。 这个命令会更准确:<pre class="prettyprint linenums">$ apt list --installed | grep -v "^Listing" | wc -l2066</pre>要获得所有这些包的详细信息,请按以下方式浏览列表:<pre class="prettyprint linenums">$ apt list --installed | moreListing...a11y-profile-manager-indicator/xenial,now 0.1.10-0ubuntu3 amd64 [installed]account-plugin-aim/xenial,now 3.12.11-0ubuntu3 amd64 [installed]account-plugin-facebook/xenial,xenial,now 0.12+16.04.20160126-0ubuntu1 all [installed]account-plugin-flickr/xenial,xenial,now 0.12+16.04.20160126-0ubuntu1 all [installed]account-plugin-google/xenial,xenial,now 0.12+16.04.20160126-0ubuntu1 all [installed]account-plugin-jabber/xenial,now 3.12.11-0ubuntu3 amd64 [installed]account-plugin-salut/xenial,now 3.12.11-0ubuntu3 amd64 [installed]</pre>这需要观察很多细节 —— 特别是让你的眼睛在所有 2000 多个文件中徘徊。 它包含包名称、版本等,以及更多但并不是以最易于我们人类解析的显示信息。 dpkg-query 使得描述更容易理解,但这些描述会塞满你的命令窗口,除非窗口非常宽。 因此,为了让此篇文章更容易阅读,下面的数据显示已经分成了左右两侧。左侧:<pre class="prettyprint linenums">$ dpkg-query -l | moreDesired=Unknown/Install/Remove/Purge/Hold| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)||/…
为什么 Python 这么慢?
对于一个类似的程序,Python 要比其它语言慢 2 到 10 倍不等,这其中的原因是什么?又有没有改善的方法呢?Media
via https://linux.cn/article-10161-1.html
对于一个类似的程序,Python 要比其它语言慢 2 到 10 倍不等,这其中的原因是什么?又有没有改善的方法呢?Media
via https://linux.cn/article-10161-1.html
为什么 Python 这么慢?
Python 现在越来越火,已经迅速扩张到包括 DevOps、数据科学、Web 开发、信息安全等各个领域当中。然而,相比起 Python 扩张的速度,Python 代码的运行速度就显得有点逊色了。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/27/114058v8793uq037m9007f.jpg">Media在代码运行速度方面,Java、C、C++、C# 和 Python 要如何进行比较呢?并没有一个放之四海而皆准的标准,因为具体结果很大程度上取决于运行的程序类型,而语言基准测试Computer Language Benchmarks Games可以作为<a href="http://algs4.cs.princeton.edu/faq/">衡量的一个方面。根据我这些年来进行语言基准测试的经验来看,Python 比很多语言运行起来都要慢。无论是使用 <a href="https://en.wikipedia.org/wiki/Just-in-time_compilation">JIT 编译器的 C#、Java,还是使用 <a href="https://en.wikipedia.org/wiki/Ahead-of-time_compilation">AOT 编译器的 C、C++,又或者是 JavaScript 这些解释型语言,Python 都<a href="https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/python.html">比它们运行得慢。注意:对于文中的 &ldquo<a href="https://dn-linuxcn.qbox.me/static/image/smiley/default/titter.gif">Mediaython” ,一般指 CPython 这个官方的实现。当然我也会在本文中提到其它语言的 Python 实现。我要回答的是这个问题:对于一个类似的程序,Python 要比其它语言慢 2 到 10 倍不等,这其中的原因是什么?又有没有改善的方法呢?主流的说法有这些:“是全局解释器锁Global Interpreter Lock(GIL)的原因”“是因为 Python 是解释型语言而不是编译型语言”“是因为 Python 是一种动态类型的语言”哪一个才是是影响 Python 运行效率的主要原因呢?是全局解释器锁的原因吗?现在很多计算机都配ã…
Python 现在越来越火,已经迅速扩张到包括 DevOps、数据科学、Web 开发、信息安全等各个领域当中。然而,相比起 Python 扩张的速度,Python 代码的运行速度就显得有点逊色了。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/27/114058v8793uq037m9007f.jpg">Media在代码运行速度方面,Java、C、C++、C# 和 Python 要如何进行比较呢?并没有一个放之四海而皆准的标准,因为具体结果很大程度上取决于运行的程序类型,而语言基准测试Computer Language Benchmarks Games可以作为<a href="http://algs4.cs.princeton.edu/faq/">衡量的一个方面。根据我这些年来进行语言基准测试的经验来看,Python 比很多语言运行起来都要慢。无论是使用 <a href="https://en.wikipedia.org/wiki/Just-in-time_compilation">JIT 编译器的 C#、Java,还是使用 <a href="https://en.wikipedia.org/wiki/Ahead-of-time_compilation">AOT 编译器的 C、C++,又或者是 JavaScript 这些解释型语言,Python 都<a href="https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/python.html">比它们运行得慢。注意:对于文中的 &ldquo<a href="https://dn-linuxcn.qbox.me/static/image/smiley/default/titter.gif">Mediaython” ,一般指 CPython 这个官方的实现。当然我也会在本文中提到其它语言的 Python 实现。我要回答的是这个问题:对于一个类似的程序,Python 要比其它语言慢 2 到 10 倍不等,这其中的原因是什么?又有没有改善的方法呢?主流的说法有这些:“是全局解释器锁Global Interpreter Lock(GIL)的原因”“是因为 Python 是解释型语言而不是编译型语言”“是因为 Python 是一种动态类型的语言”哪一个才是是影响 Python 运行效率的主要原因呢?是全局解释器锁的原因吗?现在很多计算机都配ã…
坚实的 React 基础:初学者指南
这篇文章针对的是那些希望理论与实践完美结合的观众。我会告诉你一些理论,以便你了解幕后发生的事情,然后我会向你展示如何编写一些 React.js 代码。Media
via https://linux.cn/article-10162-1.html
这篇文章针对的是那些希望理论与实践完美结合的观众。我会告诉你一些理论,以便你了解幕后发生的事情,然后我会向你展示如何编写一些 React.js 代码。Media
via https://linux.cn/article-10162-1.html
坚实的 React 基础:初学者指南
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/104728nzehe82q5h9b8fqj.png">Media</a>在过去的几个月里,我一直在使用 React 和 React-Native。我已经发布了两个作为产品的应用, <a href="https://kivenaa.com/">Kiven Aa</a>(React)和 <a href="https://play.google.com/store/apps/details?id=com.pollenchat.android">Pollen Chat</a>(React Native)。当我开始学习 React 时,我找了一些不仅仅是教我如何用 React 写应用的东西(一个博客,一个视频,一个课程,等等),我也想让它帮我做好面试准备。我发现的大部分资料都集中在某一单一方面上。所以,这篇文章针对的是那些希望理论与实践完美结合的观众。我会告诉你一些理论,以便你了解幕后发生的事情,然后我会向你展示如何编写一些 React.js 代码。如果你更喜欢视频形式,我在 [YouTube][<a href="https://youtu.be/WJ6PgzI16I4">https://youtu.be/WJ6PgzI16I4</a>] 上传了整个课程,请去看看。让我们开始……React.js 是一个用于构建用户界面的 JavaScript 库你可以构建各种单页应用程序。例如,你希望在用户界面上实时显示变化的聊天软件和电子商务门户。一切都是组件React 应用由组件组成,数量繁多且互相嵌套。你或许会问:”可什么是组件呢?“组件是可重用的代码段,它定义了某些功能在 UI 上的外观和行为。 比如,按钮就是一个组件。让我们看看下面的计算器,当你尝试计算 2 + 2 = 4 -1 = 3(简单的数学题)时,你会在 Google 上看到这个计算器。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/104744a002jj0m8gwkxw2m.png">Media</a><em>红色标记表示组件</em>如上图所示,这个计算器有…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/104728nzehe82q5h9b8fqj.png">Media</a>在过去的几个月里,我一直在使用 React 和 React-Native。我已经发布了两个作为产品的应用, <a href="https://kivenaa.com/">Kiven Aa</a>(React)和 <a href="https://play.google.com/store/apps/details?id=com.pollenchat.android">Pollen Chat</a>(React Native)。当我开始学习 React 时,我找了一些不仅仅是教我如何用 React 写应用的东西(一个博客,一个视频,一个课程,等等),我也想让它帮我做好面试准备。我发现的大部分资料都集中在某一单一方面上。所以,这篇文章针对的是那些希望理论与实践完美结合的观众。我会告诉你一些理论,以便你了解幕后发生的事情,然后我会向你展示如何编写一些 React.js 代码。如果你更喜欢视频形式,我在 [YouTube][<a href="https://youtu.be/WJ6PgzI16I4">https://youtu.be/WJ6PgzI16I4</a>] 上传了整个课程,请去看看。让我们开始……React.js 是一个用于构建用户界面的 JavaScript 库你可以构建各种单页应用程序。例如,你希望在用户界面上实时显示变化的聊天软件和电子商务门户。一切都是组件React 应用由组件组成,数量繁多且互相嵌套。你或许会问:”可什么是组件呢?“组件是可重用的代码段,它定义了某些功能在 UI 上的外观和行为。 比如,按钮就是一个组件。让我们看看下面的计算器,当你尝试计算 2 + 2 = 4 -1 = 3(简单的数学题)时,你会在 Google 上看到这个计算器。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/104744a002jj0m8gwkxw2m.png">Media</a><em>红色标记表示组件</em>如上图所示,这个计算器有…
面向系统管理员的容器手册
你所需了解的容器如何工作的知识。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/111518jruxxoukh0txu447.jpg">Media</a>现在人们严重过度使用了“容器”这个术语。另外,对不同的人来说,它可能会有不同的含义,这取决于上下文。传统的 Linux 容器只是系统上普通的进程。一组进程与另外一组进程是相互隔离的,实现方法包括:资源限制(控制组 [cgoups])、Linux 安全限制(文件权限,基于 Capability 的安全模块、SELinux、AppArmor、seccomp 等)还有名字空间(进程 ID、网络、挂载等)。如果你启动一台现代 Linux 操作系统,使用 <code>cat /proc/PID/cgroup</code> 命令就可以看到该进程是属于一个控制组的。还可以从 <code>/proc/PID/status</code> 文件中查看进程的 Capability 信息,从 <code>/proc/self/attr/current</code> 文件中查看进程的 SELinux 标签信息,从 <code>/proc/PID/ns</code> 目录下的文件查看进程所属的名字空间。因此,如果把容器定义为带有资源限制、Linux 安全限制和名字空间的进程,那么按照这个定义,Linux 操作系统上的每一个进程都在一个容器里。因此我们常说 <a href="https://www.redhat.com/en/blog/containers-are-linux">Linux 就是容器,容器就是 Linux</a>。而<strong>容器运行时</strong>是这样一种工具,它调整上述资源限制、安全限制和名字空间,并启动容器。Docker 引入了<strong>容器镜像</strong>的概念,镜像是一个普通的 TAR 包文件,包含了:<strong>rootfs(容器的根文件系统)</strong>:一个目录,看起来像是操作系统的普通根目录(<code>/</code>),例如,一个包含 <code>/usr</code>, <code>/var</code>…
你所需了解的容器如何工作的知识。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/111518jruxxoukh0txu447.jpg">Media</a>现在人们严重过度使用了“容器”这个术语。另外,对不同的人来说,它可能会有不同的含义,这取决于上下文。传统的 Linux 容器只是系统上普通的进程。一组进程与另外一组进程是相互隔离的,实现方法包括:资源限制(控制组 [cgoups])、Linux 安全限制(文件权限,基于 Capability 的安全模块、SELinux、AppArmor、seccomp 等)还有名字空间(进程 ID、网络、挂载等)。如果你启动一台现代 Linux 操作系统,使用 <code>cat /proc/PID/cgroup</code> 命令就可以看到该进程是属于一个控制组的。还可以从 <code>/proc/PID/status</code> 文件中查看进程的 Capability 信息,从 <code>/proc/self/attr/current</code> 文件中查看进程的 SELinux 标签信息,从 <code>/proc/PID/ns</code> 目录下的文件查看进程所属的名字空间。因此,如果把容器定义为带有资源限制、Linux 安全限制和名字空间的进程,那么按照这个定义,Linux 操作系统上的每一个进程都在一个容器里。因此我们常说 <a href="https://www.redhat.com/en/blog/containers-are-linux">Linux 就是容器,容器就是 Linux</a>。而<strong>容器运行时</strong>是这样一种工具,它调整上述资源限制、安全限制和名字空间,并启动容器。Docker 引入了<strong>容器镜像</strong>的概念,镜像是一个普通的 TAR 包文件,包含了:<strong>rootfs(容器的根文件系统)</strong>:一个目录,看起来像是操作系统的普通根目录(<code>/</code>),例如,一个包含 <code>/usr</code>, <code>/var</code>…
如何构建 RPM 包
节省跨多个主机安装文件和脚本的时间和精力。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/125431qw2n6p643hww4wzy.jpg">Media</a>自20多年前我开始使用 Linux 以来,我已经使用过基于 rpm 的软件包管理器在 Red Hat 和 Fedora Linux 系统上安装软件。我使用过 rpm 程序本身,还有 yum 和 dnf ,用于在我的 Linux 主机上安装和更新软件包,dnf 是 yum 的一个近亲。 yum 和 dnf 工具是 rpm 实用程序的包装器,它提供了其他功能,例如查找和安装包依赖项的功能。多年来,我创建了许多 Bash 脚本,其中一些脚本具有单独的配置文件,我希望在大多数新计算机和虚拟机上安装这些脚本。这也能解决安装所有这些软件包需要花费大量时间的难题,因此我决定通过创建一个 rpm 软件包来自动执行该过程,我可以将其复制到目标主机并将所有这些文件安装在适当的位置。虽然 rpm 工具以前用于构建 rpm 包,但该功能已被删除,并且创建了一个新工具来构建新的 rpm。当我开始这个项目时,我发现很少有关于创建 rpm 包的信息,但我找到了一本书,名为《Maximum RPM》,这本书才帮我弄明白了。这本书现在已经过时了,我发现的绝大多数信息都是如此。它也已经绝版,用过的副本也需要花费数百美元。<a href="http://ftp.rpm.org/max-rpm/">Maximum RPM</a> 的在线版本是免费提供的,并保持最新。该 <a href="http://rpm.org/index.html">RPM 网站</a>还有其他网站的链接,这些网站上有很多关于 rpm 的文档。其他的信息往往是简短…
节省跨多个主机安装文件和脚本的时间和精力。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/125431qw2n6p643hww4wzy.jpg">Media</a>自20多年前我开始使用 Linux 以来,我已经使用过基于 rpm 的软件包管理器在 Red Hat 和 Fedora Linux 系统上安装软件。我使用过 rpm 程序本身,还有 yum 和 dnf ,用于在我的 Linux 主机上安装和更新软件包,dnf 是 yum 的一个近亲。 yum 和 dnf 工具是 rpm 实用程序的包装器,它提供了其他功能,例如查找和安装包依赖项的功能。多年来,我创建了许多 Bash 脚本,其中一些脚本具有单独的配置文件,我希望在大多数新计算机和虚拟机上安装这些脚本。这也能解决安装所有这些软件包需要花费大量时间的难题,因此我决定通过创建一个 rpm 软件包来自动执行该过程,我可以将其复制到目标主机并将所有这些文件安装在适当的位置。虽然 rpm 工具以前用于构建 rpm 包,但该功能已被删除,并且创建了一个新工具来构建新的 rpm。当我开始这个项目时,我发现很少有关于创建 rpm 包的信息,但我找到了一本书,名为《Maximum RPM》,这本书才帮我弄明白了。这本书现在已经过时了,我发现的绝大多数信息都是如此。它也已经绝版,用过的副本也需要花费数百美元。<a href="http://ftp.rpm.org/max-rpm/">Maximum RPM</a> 的在线版本是免费提供的,并保持最新。该 <a href="http://rpm.org/index.html">RPM 网站</a>还有其他网站的链接,这些网站上有很多关于 rpm 的文档。其他的信息往往是简短…
24 个必备的 Linux 应用程序
我们会列举出那些在所有 Linux 发行版上你都会安装的最优秀的 Linux 应用程序。Media
via https://linux.cn/article-10165-1.html
我们会列举出那些在所有 Linux 发行版上你都会安装的最优秀的 Linux 应用程序。Media
via https://linux.cn/article-10165-1.html
24 个必备的 Linux 应用程序
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/190052elhoxx7rzl2lxr7r.png">Media</a>提要:Linux 上必备的应用程序是什么呢?这个答案具有主观性并取决于你使用 Linux 桌面的目的是什么。但确实存在一些必备的并且大部分 Linux 用户都会安装的应用程序。接下来我们会列举出那些在所有 Linux 发行版上你都会安装的最优秀的 Linux 应用程序。在 Linux 的世界中,所有东西都由你选择。你要选择一个发行版?你能找到一大把。你想要找到一个称心的音乐播放器?同样会有许多选择。但它们并非全部遵循相同的设计理念 —— 其中一些可能追求极致轻量化而另一些会提供数不清的特性。因此想要找到正中需求的应用程序会成为相当令人头疼的繁重任务。那就让我们来缓解你的头疼吧。对于 Linux 用户来说最优秀的自由软件接下来我将罗列一系列在不同应用场景下我偏爱的必备 Linux 自由软件。当然此处我并非在说它们是最好的,但确实是在特定类别下我尝试的一系列软件中最喜欢的。也同样欢迎你在评论区介绍你最喜欢的应用程序。同时我们也制作了关于此次应用清单的<a href="https://youtu.be/awawJnkUbWs">视频</a>。在 YouTube 上订阅我们的频道获取更多的 Linux 视频。网页浏览器<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/190103u62l9o9iy4ssae4o.jpg">网页浏览器</a><em>网页浏览器</em>Google Chrome<a href="https://www.google.com/chrome/browser">Google Chrome</a> 是一个强大并且功能完善的浏览器解决方案,它拥有完美的同步功能以及丰富&…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/190052elhoxx7rzl2lxr7r.png">Media</a>提要:Linux 上必备的应用程序是什么呢?这个答案具有主观性并取决于你使用 Linux 桌面的目的是什么。但确实存在一些必备的并且大部分 Linux 用户都会安装的应用程序。接下来我们会列举出那些在所有 Linux 发行版上你都会安装的最优秀的 Linux 应用程序。在 Linux 的世界中,所有东西都由你选择。你要选择一个发行版?你能找到一大把。你想要找到一个称心的音乐播放器?同样会有许多选择。但它们并非全部遵循相同的设计理念 —— 其中一些可能追求极致轻量化而另一些会提供数不清的特性。因此想要找到正中需求的应用程序会成为相当令人头疼的繁重任务。那就让我们来缓解你的头疼吧。对于 Linux 用户来说最优秀的自由软件接下来我将罗列一系列在不同应用场景下我偏爱的必备 Linux 自由软件。当然此处我并非在说它们是最好的,但确实是在特定类别下我尝试的一系列软件中最喜欢的。也同样欢迎你在评论区介绍你最喜欢的应用程序。同时我们也制作了关于此次应用清单的<a href="https://youtu.be/awawJnkUbWs">视频</a>。在 YouTube 上订阅我们的频道获取更多的 Linux 视频。网页浏览器<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/190103u62l9o9iy4ssae4o.jpg">网页浏览器</a><em>网页浏览器</em>Google Chrome<a href="https://www.google.com/chrome/browser">Google Chrome</a> 是一个强大并且功能完善的浏览器解决方案,它拥有完美的同步功能以及丰富&…
设计更快的网页(一):图片压缩
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/213800xzz7e7txh75t5hhl.jpg">Media</a>很多 Web 开发者都希望做出加载速度很快的网页。在移动设备浏览占比越来越大的背景下,使用响应式设计使得网站在小屏幕下看起来更漂亮只是其中一个方面。Browser Calories 可以展示网页的加载时间 —— 这不单单关系到用户,还会影响到通过加载速度来进行评级的搜索引擎。这个系列的文章介绍了如何使用 Fedora 提供的工具来给网页“瘦身”。准备工作在你开始缩减网页之前,你需要明确核心问题所在。为此,你可以使用 <a href="https://browserdiet.com/calories/">Browserdiet</a>. 这是一个浏览器插件,适用于 Firefox、Opera、 Chrome 和其它浏览器。它会对打开的网页进行性能分析,这样你就可以知道应该从哪里入手来缩减网页。然后,你需要一些用来处理的页面。下面的例子是针对 <a href="http://getfedora.org">getferoda.org</a> 的测试截图。一开始,它看起来非常简单,也符合响应式设计。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/213800fjped7j9c1p3ej15.jpg">Browser Diet - getfedora.org 的评分</a>然而,BroserDiet 的网页分析表明,这个网页需要加载 1.8MB 的文件。所以,我们现在有活干了!Web 优化网页中包含 281 KB 的 JavaScript 文件、203 KB 的 CSS 文件,还有 1.2 MB 的图片。我们先从最严重的问题 —— 图片开始入手。为了解决问题,你需要的工具集有 GIMP、ImageMagick 和 optipng. 你可以使用如下命令轻松安装它们:<pre class="prettyprint linenums">sudo dnf install gimp imagemagick optipng</pre>比如,我们先拿到这个 6.4 KB 的<a href="https://getfedora.org/static/images/cinnamon.png">文&#…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/213800xzz7e7txh75t5hhl.jpg">Media</a>很多 Web 开发者都希望做出加载速度很快的网页。在移动设备浏览占比越来越大的背景下,使用响应式设计使得网站在小屏幕下看起来更漂亮只是其中一个方面。Browser Calories 可以展示网页的加载时间 —— 这不单单关系到用户,还会影响到通过加载速度来进行评级的搜索引擎。这个系列的文章介绍了如何使用 Fedora 提供的工具来给网页“瘦身”。准备工作在你开始缩减网页之前,你需要明确核心问题所在。为此,你可以使用 <a href="https://browserdiet.com/calories/">Browserdiet</a>. 这是一个浏览器插件,适用于 Firefox、Opera、 Chrome 和其它浏览器。它会对打开的网页进行性能分析,这样你就可以知道应该从哪里入手来缩减网页。然后,你需要一些用来处理的页面。下面的例子是针对 <a href="http://getfedora.org">getferoda.org</a> 的测试截图。一开始,它看起来非常简单,也符合响应式设计。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/213800fjped7j9c1p3ej15.jpg">Browser Diet - getfedora.org 的评分</a>然而,BroserDiet 的网页分析表明,这个网页需要加载 1.8MB 的文件。所以,我们现在有活干了!Web 优化网页中包含 281 KB 的 JavaScript 文件、203 KB 的 CSS 文件,还有 1.2 MB 的图片。我们先从最严重的问题 —— 图片开始入手。为了解决问题,你需要的工具集有 GIMP、ImageMagick 和 optipng. 你可以使用如下命令轻松安装它们:<pre class="prettyprint linenums">sudo dnf install gimp imagemagick optipng</pre>比如,我们先拿到这个 6.4 KB 的<a href="https://getfedora.org/static/images/cinnamon.png">文&#…
使用开源同步工具 Syncthing 控制你的数据
决定如何存储和共享您的个人信息。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/221100kbn1vv61a3lt2b13.png">Media</a>如今,我们的一些最重要的财产 —— 从家人和朋友的照片和视频到财务和医疗文件 —— 都是数据。即便是云存储服务的迅猛发展,我们仍有对隐私和个人数据缺乏控制的担忧。从棱镜监控计划到谷歌<a href="https://gizmodo.com/google-says-it-doesnt-go-through-your-inbox-anymore-bu-1827299695">让 APP 开发者扫描你的个人邮件</a>,这些新闻的报道应该会让我们对我们个人信息的安全性有所顾虑。<a href="https://syncthing.net/">Syncthing</a> 可以让你放下心来。它是一款开源的点对点文件同步工具,可以运行在 Linux、Windows、Mac、Android 和其他(抱歉,没有iOS)。Syncthing 使用自定的协议,叫<a href="3">块交换协议</a>。简而言之,Syncting 能让你无需拥有服务器来跨设备同步数据。在这篇文章中,我将解释如何在 Linux 电脑和安卓手机之间安装和同步文件。LinuxSyncting 在大多数流行的发行版都能下载。Fedora 28 包含其最新版本。要在 Fedora 上安装 Syncthing,你能在软件中心搜索,或者执行以下命令:<pre class="prettyprint linenums">sudo dnf install syncthing syncthing-gtk</pre>一旦安装好后,打开它。你将会看到一个助手帮你配置 Syncthing。点击 “Next” 直到它要求配置 WebUI。最安全的选项是选择“Listen on localhost”。那将会禁止 Web 界面并且阻止未经授权的用户。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/221458enntztxnwoe9nnlm.png">Media</a><em>Syncthing 安装时的 WebUI 对话框</em>关闭对话框。现在 Syncthing 安装好了。现在可以分享文件夹,连接一台设…
决定如何存储和共享您的个人信息。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/221100kbn1vv61a3lt2b13.png">Media</a>如今,我们的一些最重要的财产 —— 从家人和朋友的照片和视频到财务和医疗文件 —— 都是数据。即便是云存储服务的迅猛发展,我们仍有对隐私和个人数据缺乏控制的担忧。从棱镜监控计划到谷歌<a href="https://gizmodo.com/google-says-it-doesnt-go-through-your-inbox-anymore-bu-1827299695">让 APP 开发者扫描你的个人邮件</a>,这些新闻的报道应该会让我们对我们个人信息的安全性有所顾虑。<a href="https://syncthing.net/">Syncthing</a> 可以让你放下心来。它是一款开源的点对点文件同步工具,可以运行在 Linux、Windows、Mac、Android 和其他(抱歉,没有iOS)。Syncthing 使用自定的协议,叫<a href="3">块交换协议</a>。简而言之,Syncting 能让你无需拥有服务器来跨设备同步数据。在这篇文章中,我将解释如何在 Linux 电脑和安卓手机之间安装和同步文件。LinuxSyncting 在大多数流行的发行版都能下载。Fedora 28 包含其最新版本。要在 Fedora 上安装 Syncthing,你能在软件中心搜索,或者执行以下命令:<pre class="prettyprint linenums">sudo dnf install syncthing syncthing-gtk</pre>一旦安装好后,打开它。你将会看到一个助手帮你配置 Syncthing。点击 “Next” 直到它要求配置 WebUI。最安全的选项是选择“Listen on localhost”。那将会禁止 Web 界面并且阻止未经授权的用户。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/28/221458enntztxnwoe9nnlm.png">Media</a><em>Syncthing 安装时的 WebUI 对话框</em>关闭对话框。现在 Syncthing 安装好了。现在可以分享文件夹,连接一台设…