UpFront

作者:Various

UpFront

diff -u: 内核开发的新变化

稳定内核的努力 再次失控。在过去,Linus Torvalds 有一个可爱的 x.偶数 和 x.奇数 版本编号方案,其中偶数版本是稳定系列的一部分,将持续六个月或一年左右,而奇数版本是开发系列的一部分,将持续大致相同的时间。在稳定系列期间,只会接受错误修复;在开发系列期间,也可以添加新功能。随着时间的推移,这让许多人希望自己死了,因为稳定系列的持续时间很长,这意味着很多人不得不坐等开发系列的再次开放。

随着 2.6 内核的发布,Linus 放弃了稳定系列的概念,这也给那些不再有任何真正可以依赖的内核版本的人们带来了一些严重的不确定性。经历了一些曲折之后,Greg Kroah-Hartman 和其他人开始 fork 出各种 2.6 版本,他们将这些版本作为自己的“稳定系列”进行维护,同时 Linus 也在进行 2.6 版本的发布计划。世界停止了绝望的摇摆,每个人都松了一口气。

Greg 和他的同事们选择将哪些 2.6 内核 fork 成新的稳定系列,主要是基于什么对他们最有利。从外部来看,这似乎是一个相当武断和不可预测的过程,这逐渐给非常特定的一群用户——发行版维护者——带来了痛苦和折磨。任何维护 Linux 发行版,或开发基于 Linux 的手机或其他嵌入式设备的人,都非常想知道哪些内核将拥有自己的稳定系列,这样他们就可以将所有辛勤工作都基于该内核。但是,由于无法预测,这些人开始在组织工作、做出市场预测等方面遇到问题。他们开始恳求 Greg 为他们各自依赖的特定内核版本启动一个新的稳定系列——或者至少让哪些内核会获得稳定系列变得更可预测。

Greg 和其他稳定系列的人如果不投入大量额外的工作就无法满足这一点,因此最近,Greg 基本上决定放弃整个项目。

他宣布,从现在开始,他将不再维护长期稳定的内核树。相反,他将为每个内核发布几个稳定版本,直到 Linus 发布下一个开发内核版本,届时 Greg 将开始为该版本发布稳定版本,依此类推。Greg 说,这样一来,人们就不太可能沉迷于超级老旧和过时的内核,而是专注于当下更新、更好、更快、更强大和更漂亮的内核。

现有的稳定树,特别是 2.6.27、2.6.34 和 2.6.35,不会消失。相反,他已将它们移交给其他人,这些人将根据自己的意愿维护它们。据推测,可能会找到其他维护人员来继续未来内核的稳定补丁系列。

Willy Tarreau 将接管 2.6.27 内核,他说他计划将其作为 2.4 内核新的“超稳定”替代品。他的目的是让剩下的 2.4 用户最终有动力升级到 2.6 内核。

Paul Gortmaker 将接管 2.6.34 树,主要是为了他的雇主 Wind River,该公司有产品依赖于该内核。

并且,Andi Kleen 将接管 2.6.35 树,也主要是为了他的雇主 Intel,该公司计划发布基于该系列的自己的发行版。

所以,这就是现状。目前尚不清楚未来的稳定系列将如何产生,或者谁将负责它们,或者它们将如何维护。但是,如果当前情况有任何迹象表明,发行版维护者可能会开始指派他们的工程师成为稳定树维护者。也许这就是事物长期以来的发展方向。

非 Linux 开源软件

对于 Linux 用户来说,文件解压缩工具就像apt-getyum一样唾手可得。对于想要解压 ZIP 文件以外文件的 Windows 用户来说,这意味着安装第三方应用程序。这可能意味着为像 WinRAR 这样的程序付费,或者可能意味着安装像 7-Zip 这样的程序。

7-Zip 将解压缩(和压缩!)您在互联网上遇到的几乎任何压缩文件。当然,它支持其原生的 .7z 文件格式,但它不会强迫您使用这种相当不常见(但很棒)的文件格式。它很好地集成到右键单击上下文菜单中,并且基本上是 Windows 用户永远需要的唯一压缩程序。在 www.7-zip.org 免费下载。

UpFront

使用 Maxima 进行高等微积分

我们在 2011 年 2 月号中介绍了 Maxima,它用于进行代数运算和重新排列一些方程。但这些并不是 Maxima 的全部技巧。本月,我将介绍 Maxima 如何帮助解决微分方程,但我将省略一些中间结果以节省一些空间。

许多科学都涉及弄清楚系统如何随时间变化以及是什么导致了这些变化。当您开始关注变化,尤其是变化率时,这本质上就是微积分。微积分和变化率也与图表上直线的斜率相关联。当您绘制数据并找到描述数据的方程时,您可以通过对方程求导来找到直线的斜率。让我们看一下一个下落的物体,看看理论对此有何说法。

您应该首先了解如何获得导数。假设您有方程

(%i1) f(x):= 2 + x^2;
                                          2
(%o1)                        f(x) := 2 + x

您可以通过调用函数 diff 来找到一阶导数,给出要微分的方程以及要微分的变量。所以,您会写

(%i2) answer:diff(f(x),x);
(%o2)                          2x

Maxima 也可以对表达式进行微分。如果您有几个方程,您可以推导出它们的比率,如下所示

(%i3) g(x):= x^(1/2);
(%i4) ratio_diff:diff(g(x)/f(x),x);
                                        3/2
                     1               2 x
(%o4)        ----------------- - -----------
                         2          2    2
             2 sqrt(x) (x + 1)    (x + 1)

这可能有点混乱,不太好用,因此您可能需要将其重构为更简洁的形式

(%i5) factor(ratio_diff);
                                2
                             3 x - 1
(%o5)               - ------------------
                                  2    2
                      2 sqrt(x) (x + 1)

Maxima 还可以处理三角函数,但是有很多恒等式可以用来帮助简化包含三角函数的方程。默认情况下,除非您明确说明,否则 Maxima 不会尝试应用这些恒等式,而是使用特殊函数。例如,假设您有以下方程

(%i6) diff(sin(x)/(1 + cos(x)),x);
                                2
                             sin (x)       cos(x)
(%o6)                   ------------- + ----------
                                    2   cos(x) + 1
                        (cos(x) + 1)
(%i7) factor(%);
                            2         2
                         sin (x) + cos (x) + cos(x)
(%o7)                    --------------------------
                                          2
                              (cos(x) + 1)

这仍然不是很简单。如果您然后应用函数 trigsimp,您可以强制 Maxima 应用三角简化规则到方程,看看您会得到什么

(%i8) trigsimp(%);
                             1
(%o8)                   ----------
                        cos(x) + 1

您应该了解一些关于 Maxima 如何处理三角函数的重要的注意事项。首先是sin(x)^(-1)是正弦的倒数,而不是反正弦。要获得反正弦,您可以使用asin(x)。另一个是另一个三角简化函数,trigreduce。此函数用于通过使用多倍角公式来降低三角函数的幂。例如

(%i9) trigsimp(cos(x)^2 + 2*sin(x)^2);
                          2
(%o9)                  sin (x) + 1
(%i10) trigreduce(cos(x)^2 + 2*sin(x)^2);
                   cos(2 x) + 1      1   cos(2 x)
(%o10)             ------------ + 2 (- - --------)
                         2           2       2

这可能看起来并不比您从 trigsimp 得到的结果更简单,但它是一种更容易与其他函数(如积分)一起使用的方程形式。

Maxima 可以在求导时应用链式法则。假设您有方程

(%i11) f(x):= x^3);
                                3
(%o11)                 f(x) := x
(%i12) depends(x,u)$
(%i13) diff(f(x),u);
                         2 dx
(%o13)                3 x  --
                           du

%i12行的代码中使用了新函数,depends。这是一种告诉 Maxima x 是 u 的函数的方法,而无需显式定义描述这种关系 的函数。如果您稍后决定要为这种关系定义一个实际方程,您可以使用

(%i14) remove([x,u],dependency);
(%o14)                     done
(%i15) x:sin(u);
(%o15)                   sin(u)
(%i16) diff(f(x),u);
                               2
(%o16)             3 cos(u) sin (u)

与此类似,Maxima 可以处理隐式微分。假设您有方程 x^2 + y^2 = 25,并且您想找到 dy/dx。您需要使用我刚才提到的 depends 函数来处理这个问题

(%i17) eqn := x^2 + y^2 = 25;
                    2   2
(%o17)             y + x = 25
(%i18) depends(y,x);
(%o18)              [y(x)]
(%i19) deriv_of_eqn:diff(eqn,x);
                        dy
(%o19)              2 y -- + 2 x = 0
                        dx
(%i20) solve(deriv_of_eqn,'diff(y,x));
                       dy     x
(%o20)                [-- = - -]
                       dx     y

微积分的另一面是积分。在 Maxima 中执行积分的基本函数称为integrate。此函数可以执行定积分和不定积分。不定积分是您可能在学校学到的积分的符号形式。例如

(%i21) integrate(x^2,x);
                           3
                          x
(%o21)                    -
                          3

定积分实际上是在一个区间上求值的。这种形式的积分可以可视化为由您正在积分的方程定义的曲线下的面积。要进行定积分,只需添加两个参数,给出区间的起点和终点

(%i22) integrate(x^2,x,0,1);
                          1
(%o22)                    -
                          3

将所有这些技术放在一起,您可以求解给定变量的微分方程——例如,求解 dy/dx = f(x) 中的 y。您可以通过执行所有必需的代数和微积分来完成此操作,但您实际上不需要这样做。Maxima 具有非常强大的函数,ode2,它可以在一步内完成。从您的方程开始

(%i23) eq: 'diff(y,x) = sqrt(1/x^2 - 1/x^3);
                      dy        1    1
(%o23)                -- = sqrt(-- - --)
                      dx         2    3
                                x    x
(%i24) ode2(eq,y,x);
                                                     2
                          2                  2 sqrt(x - x)
(%o24)    y = log(2 sqrt(x - x) + 2 x - 1) - ------------- + %c
                                                   x

这个函数调用完成积分和求解步骤,并为您提供微分方程的最终答案。

假设您正在做一个实验,掉落一枚硬币并计时它需要多长时间才能落下。您如何知道您测量的时间是否有意义?让我们从最基本的定律开始:力 = 质量 * 加速度。

硬币的质量是一个常数,所以暂时忽略它。力是由于重力引起的力,将硬币拉向地面,加速度描述了硬币由于这种力而产生的运动。重力引起的力是一个常数,至少在地球上是这样,它与质量呈线性关系,因此您可以将力定义为

(%i1) force: mass * g;
(%o1)                g mass

加速度也是一个常数,因为质量和力都是常数。加速度只是速度的变化率,速度是位置的变化率,因此您可以将其设置为

(%i2) depends(y,t);
(%o2)                [y(t)]
(%i3) acceleration: 'diff('diff(y,t),t);
                       2
                      d y
(%o3)                 ---
                        2
                      dt

将它们放在一起,您得到

(%i4) eq_of_motion: force = mass * acceleration;
                                        2
                                       d y
(%o4)                    g mass = mass ---
                                         2
                                       dt
(%i5) solve(eq_of_motion, y);
                            2
                           d y
(%o5)                     [--- = g]
                             2
                           dt

您可以立即看到物体下落的速度根本不取决于质量。伽利略是对的!下一步是进行一些积分,看看您最终会得到什么

(%i6) integrate(%,t);
                 dy
(%o6)           [-- = g t + %c1]
                 dt

在这一步,您将能够找到时间 t 的速度 (dy/dt)。附加项%c1是一个积分常数。在这种情况下,您可以看到它代表您的便士的初始速度。再进行一轮积分得到这个

(%i7) integrate(%,t);
                   /            2
                   [ dy      g t
(%o7)            [I  -- dt = ---- + %c1 t + %c2]
                   ] dt       2
                   /

现在您可以找到您的硬币在任何时间 t 的位置 y。再次,引入了一个新的积分常数,%c2。在这种情况下,您可以看到这代表了您的硬币的起始高度。但那不是您要测量的。您要测量的是硬币掉落给定距离所需的时间。所以您需要做一些重新排列。因为您正在掉落您的硬币,所以您知道起始速度为 0(即,%c1=0)。您可以稍微重写一下,使其更清晰

(%i8) eqn: y = (g * t^2)/2 + y0;
                                 2
                              g t
(%o8)                y = y0 + ----
                               2
(%i9) solve(eqn,t);
                             y   y0                    y   y0
(%o9)    [t = - sqrt(2) sqrt(- - --), t = sqrt(2) sqrt(- - --)]
                             g   g                     g   g

就这样。您现在有了一个方程,用于计算给定高度硬币掉落的时间。有了这个理论关系,您可以检查一下重力在您的本地实验室中是否正常工作。如果不是,您应该立即联系诺贝尔委员会。

这只是 Maxima 在处理微积分和微分方程方面的能力的冰山一角,但希望本文能为您提供一个起点。祝您积分愉快。

Pint-Size PPA 入门

Linux 中的软件包管理非常棒,但不幸的是,它也有一些缺点。诚然,大多数发行版都保持更新您的所有软件,而不仅仅是像 Apple 和 Microsoft 那样的系统软件。缺点是软件包并不总是最新版本。存储库中有什么,您就得到什么。另一个令人沮丧的事情是,您要安装的软件根本不在发行版存储库中。

通常,可以添加软件包,即使它们不在存储库中。对于基于 Red Hat 的系统,这些是 RPM 文件。对于基于 Debian 的系统,它们是 DEB 文件。不幸的是,以这种方式安装应用程序不会在可用时为您提供升级;您需要自己保持更新。大多数软件包管理系统也具有添加第三方存储库的功能,但是这些存储库并不总是包含您想要的软件包。

Canonical 在较新版本的 Ubuntu 中具有一项功能,该功能允许两全其美。它们被称为 PPA(个人软件包存档)。开发人员无需分发 .deb 文件,只需分发他们的 PPA 即可。使用 PPA,软件会自动更新,并在第一时间安装。虽然安装 PPA 有望变得更简单,但在短期内,它们仍然很容易安装。您只需要找到正确的 PPA 结构,通常由支持该想法的开发人员提供。例如,要安装 Mozilla Daily Build PPA,只需键入

sudo apt-add-repository ppa:ubuntu-mozilla-daily/ppa

总有一天,在 Linux 中安装第三方应用程序将像在 Windows 和 Macintosh 中一样容易。但是,借助 PPA 存储库之类的想法,您的软件将保持更新。而且,这听起来对我来说 P-P-Perfect。

UpFront

拥抱绿色,与棕色同行!

Recompute 的人们已将“走向绿色”的概念提升到一个全新的水平。他们用可回收纸板制作了电脑机箱。我们有幸采访了 Recompute 的 Brenden Macaluso,并试驾了他们的一台计算机。这是我们的发现

  • 纸板箱内的计算机实际上功能齐全。虽然它们不是超快的游戏机,但计算机选项不仅仅是一堆低端 Atom 机器。

  • 机箱感觉很坚固。我们对使用纸板制成的电脑机箱感到担忧,但它一点也不感觉脆弱。

  • 虽然纸板机箱并没有使计算机内部组件更易于回收,但它确实使回收这些内部组件变得更容易。它们实际上可以撕裂出来。

对于 Recompute 的想法,许多人持怀疑态度。有些人认为纸板机箱是一种噱头,有些人认为用棕色牛皮纸包裹的计算机是火灾隐患。如果您对 Recompute 计算机有疑问,请查看网站上的常见问题解答:www.recomputepc.com。有关我的完整视频评测,请查看我们的网站:www.linuxjournal.com/video/review-recompute-pc

UpFront

抛弃 Dropbox,选择 SparkleShare!

我们在 Linux Journal 非常喜欢 Dropbox。它是跨平台的,提供体面的免费服务,并且通常“开箱即用”。但它也有一些问题。Dropbox 是专有的。Dropbox 将您的数据副本存储在自己的数据存储库中。Dropbox 的大小有限,特别是对于其免费帐户而言。

进入 SparkleShare。SparkleShare 是一个开源项目,允许您在自己的服务器上启动类似 Dropbox 的服务。这是一个非常新的项目,需要时间才能成熟,但 beta 版很有希望。此外,由于您自己运行服务器,因此您可以存储的数据量没有限制。它也是跨平台的,并具有与其专有兄弟产品提供的某些相同的共享功能。

www.sparkleshare.org 查看 SparkleShare 的早期阶段,如果您是程序员,请考虑做出贡献。我很高兴能有一个我可以自己托管的 Dropbox 的稳定替代品。

UpFront

他们说过

我正在为一个 386(486) AT 克隆机做一个(免费的)操作系统(只是一个爱好,不会像 gnu 那样大而专业)。

—Linus Torvalds

我有一个像小行星一样大的自我。

—Linus Torvalds

您是否渴望回到男人们是男人并且编写自己的设备驱动程序的日子?

—Linus Torvalds 和 David Diamond

如果您需要超过 3 级的缩进,那么您反正都完蛋了,应该修复您的程序。

—Linus Torvalds

有些人告诉我,他们认为一只肥企鹅并不能真正体现 Linux 的优雅,这只是告诉我他们从未见过一只愤怒的企鹅以超过 100 英里的时速向他们冲来。如果他们见过,他们就会对他们说的话更加小心。

—Linus Torvalds

LinuxJournal.com

本月,Linux Journal 专注于我最喜欢的主题:Web 开发。我们在这期杂志的页面中汇编了大量精彩的信息,我期待着和你们一起学习一两件事。

随着 Drupal 7 的最新发布,我很高兴再次将注意力集中在对 LinuxJournal.com 进行重大改进上,我希望您不时查看以了解在线上的新内容。新的 Drupal 主要版本是一个很好的借口,可以查看我们网站上可能需要改进的地方,以及添加新功能以改善我们读者的整体体验。凭借 Drupal 7 中的众多改进,我迫不及待地想开始打造 LinuxJournal.com 的最佳版本。

Web 开发最佳实践在不断发展,我们都在努力保持最新甚至领先于潮流。Linux Journal 和 LinuxJournal.com 是保持跟上 Web 技术趋势所需的知识的两个重要来源。在线加入我们 www.linuxjournal.com/tag/web-development,在一个地方找到大量信息。在评论队列中见?

加载 Disqus 评论