upFRONT

作者:Various
嵌入式 Linux 联盟的诞生:2000 年 3 月 1 日

去年秋天,几家新兴的嵌入式 Linux 市场的公司与我联系,要求我帮助创建一个厂商中立的嵌入式 Linux 行业协会。最初,我利用我新建立的嵌入式 Linux 门户网站 (http://www.LinuxDevices.com/) 的资源,提议成立一个名为 “嵌入式 Linux 联盟” (ELC) 的组织。ELC 的想法迅速获得了势头。

接下来,我安排了 ELC 组织会议,于 3 月在芝加哥嵌入式系统会议上举行。目的是创建一个筹备委员会,为 ELC 提供资金并分担责任,直到它注册成立并选出合适的董事会。

3 月 1 日来临,ELC 组织会议吸引了超出预期的人群,几乎是预期人数的两倍。我们立即意识到 ELC 注定将成为嵌入式市场的主要力量。在会议的第一个小时内,认捐了超过 10 万美元的初始资金来资助该组织。此外,Lineo 捐赠了域名 embedded-linux.org。

一周后,ELC 的诞生通过新闻稿广播,该新闻稿获得了广泛的全球报道(请访问 http://www.embedded-linux.org/ 阅读)。该公告列出了筹备委员会成员,总结了该组织的目标,并包括了 Linus 的这份支持声明:“这个新的嵌入式 Linux 联盟表达了当前对在数千种专用嵌入式、移动和设备应用中使用 Linux 的浓厚兴趣。ELC 为推进 Linux 在嵌入式应用中日益增长的应用提供了一个宝贵的资源,Linux 在该领域可以提供巨大的好处。”

愿景和使命

尽管官方的愿景和使命声明将由即将选出的董事会制定,但我已在 LinuxDevices.com 上发布的 “ELC 宣言” 中以及在 ELC 组织会议上分发的宣言中表达了我对该主题的想法

  • 建议的愿景:嵌入式 Linux 联盟 (ELC) 将是一个非营利性、厂商中立的行业协会,其目标是在整个嵌入式、设备和应用计算市场中促进和推广嵌入式 Linux。成员将贡献会员费和努力,以换取所有人的市场机会增长。

  • 建议的使命:使 Linux 成为开发人员设计嵌入式系统的首选操作系统。

简而言之,通过创建和支持嵌入式 Linux 联盟,我们将最大程度地扩大 Linux 在庞大且极其多样化的嵌入式市场中的渗透深度和广度。

会员类别

我们目前计划设立三个会员类别:企业执行会员(每年 5,000 美元)、企业附属会员(每年 1,000 美元)和个人会员(每年 150 美元)。认识到有许多人为开源代码库做出了贡献,而开源代码库是 Linux 本身的基础,我还建议,对于为开源代码库做出重大贡献的个人,个人会员每年 150 美元的会员费应予免除。

活动

ELC 的活动可能沿着两条主要路线进行:技术和推广。个人会员很可能(尽管不是必须的)主要关注技术活动,而推广和营销活动可能更受企业会员的关注,并适当地由他们主要资助。

在推广方面,我预计我们将成立一个营销工作组,负责宣传嵌入式 Linux。最有可能的是,将有一个网站、公关、贸易展览、辅助材料和会员增长。

鉴于现有的开源开发过程在将 Linux(及其相关技术)发展到今天的水平上取得了巨大的成功,ELC 的技术作用不如宣传作用那么明确。尽管如此,技术委员会或特殊兴趣小组围绕多个 ELC 成员感兴趣的问题而联合起来当然是可能的。这些是否会转化为标准活动还有待观察。在任何情况下,现有的 Linux 和开源开发过程必须得到支持,而不是规避或破坏。

状态和更多信息

ELC 现在已在加利福尼亚州正式注册成立为非营利性行业协会,并且网站已开始运营。有关最新的 ELC 新闻和信息,或要获取会员申请表,请访问 http://www.embedded-linux.org/

—Rick Lehrbaum

Brian Behlendorf 访谈

upFRONT

Brian Behlendorf 是 Apache 项目背后的首席软件架构师之一,也是 SourceXchange 的发起人。该项目为程序员在编写开源软件时获得报酬提供了一种方法。因此,我们希望看到它成功。我们在三月底通过电子邮件与 Brian 进行了交谈,以了解事情的进展情况。

Margie: SourceXchange 最初是 O'Reilly 和 HP 的一个项目,然后分拆为 Collab.Net。此举背后的原因是什么?

Brian: 当我在 O'Reilly 工作时,我酝酿了这家公司背后的想法,并与那里的人们一起制定了商业计划,然后我们将其推销给几家投资公司。在选择了 Benchmark 之后,我们将公司分拆成自己的实体,当找到 CEO 时,我转任 CTO。

一直以来的计划是,我将在 ORA 从事一些想法,然后当有足够的兴趣时,我们会将它们分拆出来。兴趣比我们想象的要早得多。SourceXchange 是 Collab.Net 的一项服务,未来还会有更多。

Margie: O'Reilly 和 HP 仍然参与吗?

Brian: 是的。Tim O'Reilly 在我们的董事会中,我们与 ORA 有很多沟通。HP 仍然作为赞助商参与 SourceXchange,并且还参与了我们的一些其他产品。他们是我们的开源项目托管基础设施的第一个客户,他们的新网站 (http://www.e-speak.net/) 和开源项目就建立在该基础设施之上。

Margie: 事实证明,这一变化对项目有利吗?

Brian: 成为我们自己的公司帮助我们聘请了我们需要的人,并更深入地专注于将其作为一项业务,我们认为这对于长期发展是必要的。

Margie: 请确切地告诉我们 SourceXchange 是如何运作的。

Brian: 嗯,http://www.sourcexchange.com/ 网站对此进行了相当详细的介绍,所以我不会重复那里所说的内容。简短的答案是

赞助商提交 RFP(计划请求)-->开发人员提交关于该 RFP 的提案/投标-->赞助商选择提案。-->项目开始。-->开发人员朝着里程碑努力,然后上传他们的代码。-->赞助商审查并批准或不批准。-->如果他们不批准,开发人员继续工作,直到赞助商满意,或者直到同行评审员说里程碑已达到。-->重复,直到所有里程碑都获得批准并且项目完成。-->赞助商、开发人员和同行评审员互相评分。

重复。 =)

Margie: 实际上已经完成了多少个编程项目?哪些项目?

Brian: 两个——通用数据包记录器,由 Sparks.com 赞助,于 00 年 2 月 18 日完成;以及 Apache Web 服务器的测试套件框架,由 HP 赞助,于 99 年 11 月 20 日完成。有关详细信息,请参见 www.sourcexchange.com/ProjectBrowse?Button=Search&browse_status=Completed&browse_status=Archived

Margie: 目前完成的最大项目是什么?

Brian: 这两个项目都是 5,000 美元的美国项目,但现在系统中有些项目达到了 25,000 美元的美国范围。

Margie: 您个人最感兴趣的项目是哪个?

Brian: Apache 的测试套件对我来说相当有趣。目前,最有趣的项目可能是 Apache 2.0 相关的处理程序(侦听器模块),用于名为 BXXP 的协议,由 Invisible Worlds 赞助(项目编号 13)。我还有一个我个人非常满意的项目,一个基于 Java servlet 和 WebMacro 的浏览器,用于 UNIX mbox 格式的邮件存档,由 Collab.netproject 赞助(项目编号 11)。

Margie: SourceXchange 是否占用了您所有的时间,或者您仍然有时间进行一些编程?

Brian: Collab.Net 总体上,以及为 Apache 做所有的政治和后端工作,占用了我大部分时间。我已经很长时间没有进行认真的编程了,但仍然每周编写一些 Perl 脚本。

Margie: 显然,您仍然参与 Apache。那里发生了什么?

Brian: 很多——ApacheCon 刚刚完成,并且非常成功,有超过 1000 名与会者和一些很棒的会议。Apache 2.0 处于 alpha 阶段。XML 和 Jakarta 正在起飞。

Margie: 您是否觉得 SourceXchange 项目是成功的?(程序员实际上是否获得了报酬?)

Brian: 是的。目前系统中有超过 30 万美元用于开发人员,而这真的只是个开始。

Margie: 您是否认为这个项目将引领未来所有编程的完成方式?

Brian: 不,但它将是一个重要的组成部分。有时您愿意为了确定性和速度而牺牲质量和正确性,因此您需要内部开发人员。有时,您正在开发的软件出于专有原因需要在内部完成。我不会断言未来所有软件都将是免费的,尽管我认为大多数软件都会是免费的。

Margie: 您认为开源软件和 Linux 的未来会怎样?

Brian: 非常棒。进一步扩张。随着软件成为基础设施,它变得商品化,而开源软件由于其普遍性和低使用成本,是基础设施最稳定的状态。

Margie: 您还有什么要补充的吗?

Brian: 没什么;在过去的几年里,我做了很多宣传工作,现在觉得有必要将精力转向使 sXc 和其他 Collab.Net 项目取得成功,所以我最近变得更加安静了。

Margie: 最后,来一些个人类型的信息怎么样?

Brian: 我结婚快五年了,在旧金山有一栋房子,非常喜欢 DJ 环境音乐和 dub 音乐,使用 Sony Vaio C1-XS 作为我的笔记本电脑,开一辆 Jeep,并且喜欢精酿麦芽根汁啤酒。

Margie: 非常感谢您抽出时间回答我们的问题。--Marjorie Richardson

LJ 索引——2000 年 6 月
  1. 不在乎他们使用的工具是开源还是专有的 Linux 开发人员的百分比:87

  2. 被 75% 或更多开发人员评判为足够的工具类别数量(在 11 个类别中):2

  3. 主要使用命令行工具和实用程序的 Linux 开发人员的百分比:50

  4. 1998 年排名前 100 的金融机构在 Linux 上的支出:5000 万美元

  5. 预计 2003 年排名前 100 的金融机构在 Linux 上的支出:2 亿美元

  6. 上述两者之间的年增长率:32%

  7. Linas Vepstas 博士在 IBM 390 大型机上安装 Linux 所需的午餐时间数:1

  8. 可以由运行 VM 操作系统的 IBM 390 大型机管理的 Linux 机器数量:50,000

  9. Netcraft 在 2000 年 3 月调查的站点数量:13,106,190

  10. 在 Apache 上运行的站点的百分比:60.05

  11. 在 Apache 上运行的站点总数:7,870,864

  12. Apache 在最近一个月中的增长量:1,388,156

  13. 由 Microsoft IIS 提供的站点的百分比:20.9

  14. Microsoft 服务器份额百分比从上个月的损失:1

  15. LinuxWorld/Spring 新闻发布室中运行 Windows 的计算机数量:9

  16. LinuxWorld/Spring 新闻发布室中运行 MacOS 的计算机数量:1

  17. LinuxWorld/Spring 新闻发布室中运行 Linux 的计算机数量:0

  18. 在 LinuxWorld 上观察到的同时在屏幕上显示 Slashdot 的新闻发布室计算机数量:6 或 60%

  19. 每年被鲨鱼杀死的人数:10

  20. 每年被人类杀死的鲨鱼数量:60,000,000

来源
  • 1-3:《Linux Show》

  • 4-6:Evans Marketing Services

  • 7-8:IBM,Tower Group 研究(由 IBM 提供)

  • 9-14:Netcraft

  • 15-18:Doc Searls

  • 19-20:David Siegel

他们说

“关于 Linux,我要说的是:这是我第一次在正确的平台上看到 UNIX。”

—史蒂夫·鲍尔默,微软

“没有任何营销组织能够承受一个社区的影响,这个社区产生越来越多的有效倡导者。”

—Russ Pavlicek,康柏

“中国有机会在 Linux 世界中发挥重要作用……这当然可以让中国作为软件生产国在世界舞台上占有一席之地。”

—Dan Kusnetzky,国际数据公司

“我很高兴 IP 不是 IP。”

—Dan Lynch,在一次关于互联网和专利的会议上

怎么说?

Netcraft 在 4 月份报告称,在伦敦举行的上届 Linux Expo 上,超过一半的参展公司运行的是 Microsoft IIS Web 服务器(在 Windows 95、98 和 NT 上运行),而不是 Apache 或 Linux 上的其他一些合适的服务器。在其他有趣的差异中,Netcraft 指出以下几点

  • Compaq.com 最初运行的是 Solaris,直到足够多的康柏员工注意到,所以现在 compaq.com 运行的是 Tru64 UNIX。

  • linux.ora.com 运行的是 Solaris。

  • Windows 2000 的早期采用者包括 linuxbeacon.com、linuxanswers.co.uk、slashdot.org.uk 和 freshmeat.org。

(注意:最后两个是恶搞网站。)

其他项目

  • microsoft.eu.org 首页(另一个恶搞网站,位于 bero.exit.de/training/mcle.html)运行在 Linux 上。

  • linuxsucks.org 运行在 Linux 上。

  • yahoo.com 在 PalmOS 上运行 Apache。

  • Apple 的许多服务器运行在 Solaris、Linux、MacOS、Mac OSX(BSD 变体,仍在预发布阶段)和 AIX 的组合上——没有 Microsoft。

  • 虽然 dell.com 在 Linux 上运行 Apache,但其大多数其他站点都在 Windows NT4/98 上运行 IIS/4。

  • HP 运行 Linux、Solaris、HP-UX 和 NT4/98 的组合

  • IBM 主要使用 AIX,以及一些 Linux、NT4/98 和 OS/2。

  • 英特尔主要在 NT4/98 上运行 IIS/4(尽管非常个人的 pentium.net 在 Linux 上运行 Apache)。

自己检查一下——Netcraft 上的 “该站点运行什么?” 页面,http://www.netcraft.com/whats/

—Doc Searls

MANDRAKE MAGIC 继续

Mandrake 在 3 月份从 Tucows 下载的总量(以 MB 为单位衡量)中保持了第一的位置。尽管它比 1 月份的峰值下降了几个百分点,但它仍然占下载总量的三分之一以上。Red Hat 保持稳定,以 15% 位居第二。Corel 下滑了一个百分点,以 12% 位居第三。Phat Linux 下降了三个百分点,但仍以 10% 保持了第四的位置。Debian 和 SuSE 紧随其后,各占 5%。其余的在 3% 到 1% 之间。

upFRONT

Tucows 下载图表

热点

Linux 用户在 3 月和 4 月初都在谈论什么?以下是过去几周的一些热门新闻报道的抽样,如《Linux Journal》的在线新闻、注释和现场报道来源 “The Rookery” 中报道的那样(每日更新,可在我们的网站 https://linuxjournal.cn/ 上找到)

  • 联邦法院裁定微软违反了反垄断法,以及随后针对微软提起的集体诉讼。Bryan Pfaffenberger 的文章 “有罪!Linux 的下一步是什么?” (https://linuxjournal.cn/articles/currents/018.html) 也非常优雅地讨论了这一点。

  • 第六巡回法院的调查结果是,源代码是一种表达形式,也是一种功能性语言。

  • IBM 抛售 Red Hat 股票。这是怎么回事?

  • Caldera 的 IPO,令人失望还是现实,似乎取决于你与谁交谈。

  • W. R. Hambreck & Co. 给予 VA Linux “买入” 评级。

  • InterVideo 声称拥有 “适用于 Linux 操作系统的首个合法 DVD 软件解决方案。”

  • Linux 和 Windows 在嵌入式系统市场即将到来的对决。

愚蠢的编程技巧-->光栅条和控制台图形

大家好,欢迎再次来到另一集《愚蠢的编程技巧》!上个月,我希望你没有错过,我们做了一个有点复杂的东西,通过将正弦函数相互插入来制作正弦滚动器。该过程涉及大量的变量和函数,并且确实给处理器带来了负担。这个月,是时候从复杂的事情中放松一下了,但尽管如此,我们仍将做一些很酷的事情,并且它涉及正弦。

以前的演示场景制作者可能已经注意到本专栏的一个趋势:我们所做的很多事情都是从某种传统中传承下来的。3-D <\#224> la Quake 在哪里?填充的矢量图形在哪里?迷幻的迷幻效果在哪里?唉,你友好的作者错过了 PC 场景,转而短暂地冒险进入,嗯,其他一些东西,然后才发现 Linux,因此我们仍然相信演示应该有一个滚动文本,并且 2-D 是可以的。现在,我们在滚动文本方面做得比大多数人能忍受的还要多;然而,有一种传统与滚动文本一样普遍,甚至可能更容易:光栅条。

光栅图形基本上是位图图形(与矢量图形相反),因此光栅条是条形的位图图形。通常,我们用酷炫的阴影颜色绘制这些条形,使其看起来像水平管道或激光束,并且我们使它们在屏幕上上下弹跳,这看起来相当酷。这些条形的意义是什么?没有任何意义!嗯,实际上,有时是为了炫耀计算机的颜色;有时是为了划定屏幕的不同区域;有时只是为了添加一些有趣的和技术性的东西来观看。当调色板设置正确时,这些条形可以看起来像闪亮的金属管道,或者可能是辉煌的彩虹。您甚至可以在光栅条内滚动颜色,以获得各种时髦的效果。您可以将颜色滚动与条形的垂直位置同步,就好像经过的光栅条在屏幕上揭示了隐藏的颜色一样。您可以在条形内以多种方式循环颜色(将蓝色管道变成紫色、红色、橙色、黄色、绿色,然后再变回蓝色),或者您可以在屏幕上的几个光栅条之间传递颜色。

另一个聪明的技巧是在光栅条内部包含滚动文本。这有很多优点;首先,您不必担心确保背景在字母下方的黑色空间中正确显示,因为您正在用光栅颜色填充整个内容。您无需在使用光栅条写入之前清理区域,因为这些条形会覆盖最初存在的任何内容。而且,光栅条的颜色可以像高能激光束一样突出显示文本。

对我来说,在 Amiga 上的一个有影响力的演示是 Rigor Mortis 的 Acro 制作的 Hot Copper。它使用了几个不同颜色的大的光栅条,向上滚动屏幕,然后再向下掉落,以便显示几个不同速度和不同文本的滚动文本。在像我们今天所知的互联网出现之前,文字很少见,意义也更大;滚动文本就像在海滩上发现的瓶中信,来自遥远海岸的问候,来自你真正认识的人!文本是如何传播这么远的?谁在哪个聚会上将什么磁盘传递给了谁,它经历了多少个板子,多久才能到达你手中?如果 Amiga 模拟没有受到版权狂热者的如此困扰,我们将有更开放的时间来享受这些(Amiga ROM 仍然受版权保护,但至少演示不受版权保护)。唉,我离题了。

我们将制作六个条形,每个条形宽 320 像素,高 17 像素。每个条形将使用九种颜色,从顶部最暗到中间最亮,底部再次变暗(即每个条形中使用了八种颜色两次,中间有一个明亮的颜色)。这为我们的条形制作了闪亮的管道外观效果。为了纪念 Roy G. Biv,我们将有红色、橙色、黄色、绿色、蓝色和紫色条形,即使从逻辑上讲我们应该使用红色、黄色、绿色、青色、蓝色和紫色。当然,酷炫的 Commodore 程序员制作了彩虹条形,但它们对我们来说太酷了。不过,我们确实相当大胆;毕竟,我们正在使用 “runs-as-root-can-really-destroy-your-system” SVGAlib。让我们看一下我们的算法。

第一步是绘制条形。我们将制作六个数组来存储我们的六个不同的条形:redbar、orangebar、yellowbar、greenbar、bluebar 和 purplebar。我们可以动态分配内存,但为什么要麻烦呢,因为我们已经知道图形的大小了?嗯,这是为了防止我们更改图形大小,但这次让我们偷懒一下。首先,我们必须正确设置调色板,因此我们将制作九种红色阴影、九种橙色阴影、九种绿色阴影、九种蓝色阴影和九种紫色阴影。一个简单的循环即可解决此问题,总共渲染 54 种颜色,从调色板颜色 #192 开始,因为保存较早的调色板颜色以防我们添加其他内容是很好的。设置调色板后,我们用红色绘制红色条形,将其存储在 redbar 数组中,然后循环执行并对其他颜色执行相同的操作。当我们完成时,我们将有六个条形存储在内存中,随时可以按照我们的意愿进行位块传输!

第二步是在我们永无止境的快乐循环中在屏幕上绘制条形。我们将设置一个循环,该循环递增一个名为 X 的变量,这是必需的,因为我们的条形的垂直位置将基于 X 的正弦函数,每个条形稍微移动相位,以便我们获得波浪状效果(而不是让每个条形都堆叠在另一个条形的顶部)。我们将绘制条形,从紫色开始,然后朝红色方向绘制,将屏幕静止一段时间以进行垂直刷新(通常为 1/60 秒),然后清除屏幕并重复循环,直到有人退出。

唉,光栅条几乎没有实际价值;事实上,它们是典型的陈词滥调,但我真诚地希望我们可以将这种陈词滥调延续到 21 世纪及以后。也许我们应该将光栅条放入火箭飞船中,并将它们发送到银河系,作为我们文明的证据...

—Jason Kroll

列表。制作光栅条,raster.c
// gcc -Wall -O2 raster.c -lvgagl -lvga -lm
#include <vga.h>
#include <vgagl.h>
#include <math.h> /* sines! */
#include <stdlib.h> /* malloc */
#define GMODE G320x200x256
GraphicsContext *virtualscreen;
GraphicsContext *physicalscreen;
{
  char *redbox, *orangebox, *yellowbox;
  char *greenbox, *bluebox, *purplebox;
  char c, d; /* to keep track of color */
  short int x; /* a counter for our sine */
  vga_init(); /* start svgalib */
  gl_enableclipping(); /* just in case */
  vga_setmode(GMODE); /* set mode */
  gl_setcontextvga(GMODE);
  physicalscreen = gl_allocatecontext();
  gl_getcontext(physicalscreen);
  gl_setcontextvgavirtual(GMODE);
  virtualscreen = gl_allocatecontext();
  gl_getcontext(virtualscreen);
  /* Allocate the memory for our bars! */
  redbox = malloc(WIDTH*17*BYTESPERPIXEL);
  orangebox = malloc(WIDTH*17*BYTESPERPIXEL);
  yellowbox = malloc(WIDTH*17*BYTESPERPIXEL);
  greenbox = malloc(WIDTH*17*BYTESPERPIXEL);
  bluebox = malloc(WIDTH*17*BYTESPERPIXEL);
  purplebox = malloc(WIDTH*17*BYTESPERPIXEL);
  /* set up the palette! */
  c=0; /* red */
  for (d=1; d<10; d++)
    gl_setpalettecolor(191+c*9+d,
                       7*d, 0, 0);
  c=1; /* orange */
  for (d=1; d<10; d++)
    gl_setpalettecolor(191+c*9+d,
                       7*d, 3.5*d, 0);
  c=2; /* yellow */
  for (d=1; d<10; d++)
    gl_setpalettecolor(191+c*9+d,
                       7*d, 7*d, 0);
  c=3; /* green */
  for (d=1; d<10; d++)
    gl_setpalettecolor(191+c*9+d,
                       0, 7*d, 0);
  c=4; /* blue */
  for (d=1; d<10; d++)
    gl_setpalettecolor(191+c*9+d,
                       0, 0, 7*d);
  c=5; /* purple */
  for (d=1; d<10; d++)
    gl_setpalettecolor(191+c*9+d,
                       7*d, 0, 7*d);
  /* Now is when we draw the bars! */
  for (d=0; d<9; d++) {
    gl_hline(0,d,WIDTH-1,192+d);
    gl_hline(0,16-d,WIDTH-1,192+d);
    gl_hline(0,17+d,WIDTH-1,201+d);
    gl_hline(0,33-d,WIDTH-1,201+d);
    gl_hline(0,34+d,WIDTH-1,210+d);
    gl_hline(0,50-d,WIDTH-1,210+d);
    gl_hline(0,51+d,WIDTH-1,219+d);
    gl_hline(0,67-d,WIDTH-1,219+d);
    gl_hline(0,68+d,WIDTH-1,228+d);
    gl_hline(0,84-d,WIDTH-1,228+d);
    gl_hline(0,85+d,WIDTH-1,237+d);
    gl_hline(0,101-d,WIDTH-1,237+d);
  }
  /* copy the bars to our arrays */
  gl_getbox(0,0,WIDTH,17,redbox);
  gl_getbox(0,16,WIDTH,17,orangebox);
  gl_getbox(0,34,WIDTH,17,yellowbox);
  gl_getbox(0,51,WIDTH,17,greenbox);
  gl_getbox(0,68,WIDTH,17,bluebox);
  gl_getbox(0,85,WIDTH,17,purplebox);
  /* the main loop. This severely and
   * inefficiently burns CPU but we're
   * feeling sadistic on the chip today.
   * 12 raster bars is a lot, so comment
   * out a few if your computer grinds
   * to disastrous effect.
   */
  for (x=d=0; d==0; d=vga_getkey()) {
    x++;
    gl_putbox(0,40*sin((x+0)/24.0)+40,
              WIDTH, 17, purplebox);
    gl_putbox(0,40*sin((x+10)/24.0)+40,
              WIDTH, 17, bluebox);
    gl_putbox(0,40*sin((x+20)/24.0)+40,
              WIDTH, 17, greenbox);
    gl_putbox(0,40*sin((x+30)/24.0)+40,
              WIDTH, 17, yellowbox);
    gl_putbox(0,40*sin((x+40)/24.0)+40,
              WIDTH, 17, orangebox);
    gl_putbox(0,40*sin((x+50)/24.0)+40,
              WIDTH, 17, redbox);
    gl_putbox(0,-40*sin((x+0)/24.0)+144,
              WIDTH, 17, purplebox);
    gl_putbox(0,-40*sin((x+10)/24.0)+144,
              WIDTH, 17, bluebox);
    gl_putbox(0,-40*sin((x+20)/24.0)+144,
              WIDTH, 17, greenbox);
    gl_putbox(0,-40*sin((x+30)/24.0)+144,
              WIDTH, 17, yellowbox);
    gl_putbox(0,-40*sin((x+40)/24.0)+144,
              WIDTH, 17, orangebox);
    gl_putbox(0,-40*sin((x+50)/24.0)+144,
              WIDTH, 17, redbox);
    gl_copyscreen(physicalscreen);
    gl_clearscreen(0);
    vga_waitretrace();
  }
  return 0; /* it's almost a tradition! */
}
严格在线,https://linuxjournal.cn/

安装 Window Maker 作者:Michael Hammel 是一篇关于 Window Maker 窗口管理器入门基础知识的教程。它是本期中他的 “桌面艺术家指南,第 3 部分” 的极佳伴侣。

数据和电信:系统与应用 是 Derek Vadala 的书评。

加载 Disqus 评论