比人工智能更可怕的代码

企业动态
字节与原子之间的障碍正在逐渐消失,归功于物联网的迅猛发展,如今程序员已经不再被局限于虚拟世界当中。如今,我们能够超越向磁盘写入1与0的传统作法:我们可以切实通过编写代码告诉设备如何掠夺、剪切、扭曲或者变更原子形态。现在,我们的软件能够开启灯光、变更室内外观、驾驶汽车以及移动墙壁等等。

每家初创企业都在谈论如何改变世界

但其中大部分根本不会讨论世界本身或者说存在于其中的物理事物

很多企业只是单纯打算交换数据库中的数据包与位置——虽然这一切也很重要

但字节本身并没有意义

 

毕竟这个世界是由原子组成

 

字节与原子之间的障碍正在逐渐消失,归功于物联网的迅猛发展,如今程序员已经不再被局限于虚拟世界当中。如今,我们能够超越向磁盘写入1与0的传统作法:我们可以切实通过编写代码告诉设备如何掠夺、剪切、扭曲或者变更原子形态。现在,我们的软件能够开启灯光、变更室内外观、驾驶汽车以及移动墙壁等等。

Basic

[[172107]]

作为经典编程语言之一,Basic以部分简单硬件控制器为基础直接推动了早期微型计算机革命。那些制作出ESP8266控制器主板的技术人员使用的正是Basic语言,因为正如他们所言,这是“一款简单但却非常强大的语言,允许大家在无需计算机科学学位的前提下实现令人惊叹的成果。”

其中包含所有经典结构,包括一些古董级成果:goto。不过其中也包含一部分用于提取网络页面或者发送电子邮件的新命令。但必须承认,在使用Basic时我们的大部分时间都将被用于调整接口以收集需要被发送至互联网的数据。

要获取更多相关信息,大家可以参阅ESP8266社区或者该语言的专门网站。

X10

[[172108]]

X10是首款允许程序员摆脱虚拟世界并触及真实世界的工具。X10从来不是一种复杂或者难于理解的协议,这可能是因为其诞生时间为1975年——比沃兹尼亚茨与乔布斯推出Apple I还早一年。尽管已经相当老迈,但X10仍然具备极高人气,因为目前还有着大量低成本设备对其提供支持。

该协议只提供一部分主要消息收发功能。大家可以向开关发送几个字节,并借此实现开关开、闭以及亮度调节。就这么多。除此之外,大家可以利用其它一些选项轮询远程开关并嵌入更多数据,但其大部分功能似乎仍是打开与关闭之类的简单操作。这些数据包可上行至家庭环境下的120伏供电线路,且必须通过由X10制造的FireCracker等独立设备来生成。

包括Flipit与Bottle Rocket在内的多种软件项目致力于简化与FireCracker的协作流程。当然,大家也可以直接选择最为原始的解决方案——X10,该公司自1978年就一直在推出家庭功能控件。

Zigbee、Z-Wave以及更多

[[172109]]

X10与Insteon所触及的还仅仅是表面。另有多种解决方案能够将信号发送至设备——一部分通过供电线路,也有一部分以无线形式传输。Zigbee与Z-Wave都属于设备间的低功耗无线通信标准,尤其适用于需要在企业或者家庭环境中相互通信的低功耗嵌入式传感器及处理器。

举例来说,Zigbee最近刚刚发布公告,宣称开始在超市中实验温度传感器以实现农产品监测,从而确保部分水果与蔬菜处于最佳保存环境。Z-Wave则在其官方网站中介绍了一款能够通过无线按钮帮助年老或者体弱用户遭遇困境时进行呼救的“家庭尊严”设备。目前这类应用方案已有数百种,其每次执行只需发送数比特数据即可完成任务。

Zigbee与Z-Wave并非惟一的执行标准。这份日渐庞大的名单中还包括Panstamp、AMX、KNX、Lutron以及更多。其中一部分属于利基型方案:以AMX为例,其专注于音响设备以强化会议室效果。Panstamp则面向遍布于世界每个角落的小型无线控制器。它们都拥有自己的格式,但却可以通过编程方式实现交互。标准间的竞争可能令程序员们感到困惑,不过这毕竟要比不存在标准好得多。

XBMC、Freebox以及更多

[[172110]]

如果说有人能够坐在沙发上边看着白痴电视节目边改变世界确实有些夸张,但可以肯定的是,数字化图像、视频以及音频确实打破了传统娱乐方式的束缚。以XBMC、Freebox以及VLC为代表的各类协议与框架原本被设计将填鸭式视频提供给躲在沙发中的无聊人士,但其如今也能够为整栋房屋乃至建筑物做出贡献。

这些视听设备从表面上看似乎与改变世界没有任何关系,因为它们在很大程度上只是在处理数字化内容文件——不过必须强调的是,随着平板显示器的普及程度越来越高,它们的作用也在逐步凸显。举例来说,时代广场周边的建筑物就能够根据屏幕上的显示内容不断变更外观。更多屏幕意味着数字化内容绝仅仅是大家手机上的显示素材,这同时也是一种转变建筑物或者室内效果的有效途径。

PostScript

[[172111]]

很多人并不理解在PDF文件内存储数据或者将文本页面内容发送至打印机时所使用的数据结构的复杂性水平。事实上,PostScript文件中的数据并非简单的数字排列,而是一整套由字母、线条、数字以及图形构建而成的页面勾勒体系。该语言能够沿直线或者贝塞尔曲线移动笔划,而后对生成的图形进行填充。各种字体也不单纯属于位图,而是复杂曲线的集合,从而轻松以亚像素精度进行缩放或者位移。

该语言本身属于上世纪七十年代的神器,其基于堆栈的语法能够显著降低括号的使用频率。任何曾经使用过惠普计算器的朋友都会在PostScript中找到熟悉的感觉。该语言由图灵设计完成,而人们则通过编写PostScript代码进行复杂的分形计算及其它古怪的任务——哦,当然还有开发病毒。

时至今日,该语言的人气往往略逊于SVG,这是因为此种XML变体能够在Web之上得到广泛支持。不过二者的底层结构非常相似,而且代码转换也非常简单。这两款语言都能够通过PSToEdit等多种软件包被转换为其它代码格式,从而驱动激光切割机以及铣床设备。

OBD-II

[[172112]]

多年以来,汽车只不过是由油箱、活塞、齿轮组外加后轮曲轴共同构成的简单机械。然而如今的汽车已经成为大量计算机制构建而成的复杂网络,只不过恰好还是配备四条轮胎。ODB-II标准是人类与汽车进行互动,并借此了解当前车辆运转状况的重要接口。

大部分游走于计算机与汽车之间的代码都属于纯粹的信息。举例来说,我们可以向传动轮端口发送部分字节,从而由其返回当前时速信息。类似的代码还可以实现RPM、引擎效率乃至数十种其它指标的查询。像Torque这样的多数基础应用都需要通过OBD-II端口对车辆进行追踪。

这类应用在业余赛车手以及汽车爱好者群体中极具人气,但它们也完全能够服务于普通民众。ArduinoOBD库就是一种很好的选项,可以帮助大家将自己的计算机与车辆相对接。

G

[[172113]]

计算机数字控制,简称CNC,最初于上世纪五十年代出现在铣机设备之上,而工程师们随后很快开发出G语言——专门用于操控切割工具的移动方式。整个流程在初次接触时可能有点反直觉的意味,因为从代码控制角度出发,其实现的是从当前材料上切掉某些部分而非添加某些部分。不过一旦我们习惯了立足于最终结果逆向审视设计思路,大家就可以想象出如何移动切割刀并去除不需要的部分。

大部分编码工作涉及选定坐标系,同时安排切割刀移动到特定位置。这些设备往往能够“插补”并计算直线或者圆的中位点,从而简化简单形状的创建方式。不过对于复杂的形状,我们仍然需要采取一些特定规划。

随着多年以来各家制造商向其中添加强化元素,G语言的性质也出现了显著变化。很多目前被广泛使用的现代化宏以及面向对象层都会经过编译为原始G代码并发送至设备当中。

目前,G语言的一类变体将用于驱动多种3D打印机。虽然变体与本体所使用的具体代码有所区别,但其核心语言却从未发生改变。

STL

[[172114]]

这种用于描述3D对象的标准格式已经成为3D打印领域的通用语言。在线商店通过交付STL文件出售虚拟对象,大家可以对其进行编辑或者直接发送至3D打印机。

这种语言本身可以说相当基础。文件的大部分内容为用于覆盖物体表面的刻面三角形角部三维坐标。虽然该格式似乎能够支持更为复杂的多边形,但文件本身倾向于使用传统三角形。另外,尽管与构建3D对象的基本要求有所冲突,但这种文件格式本身并不强制要求三角形完全覆盖对象或者定义所述表面的每个部分。

STL文件能够容纳点或者二进制版本的ASCII表达内容,不过大多数文件都选择使用二进制版本——因为其更为紧凑。

Python

[[172115]]

 

Python语言在生物实验室、社交科学中始终牢牢占据人气榜首,甚至在Raspberry Pi社区中被称为“官方语言”。后面这种说法有点夸张,因为Raspberry Pi单片机通常直接引导Linux,而大多数Linux代码库也都能够运行在该单片之上,不过需要直接面向ARM(v6或者7)架构进行编译。

不过,Python仍然拥有诸多既有优势。它作为一种高级语言拥有简洁的语法与相当宽松的数据传递规则。程序员们并不需要深陷抽象的泥潭,例如面对复杂的指针规则。相反,他们只需要编写一套指令集以处理数字,并利用这些值以指示Raspberry Pi进行哪些操作。

Raspberry Pi社区提供丰富的说明文档以帮助大家从零开始学习Python。

Processing

[[172116]]

机器人与真实世界当中充满了使用Arduino语言——属于C与C++子集——的单片机。不过很多程序员希望事件能够更为简单,这也是该语言Processing这一名称的由来。这是一套经过简化的Java子集,保留了相当一部分较为粗放的类细节规则,同时添加了部分标准方法以帮助获取结果及切换开关。Java程序员们可能会对Processing在陈旧AWT Applet以及Frame上的表现非常满意,不过大多数人只是单纯希望编写几个循环并变更代码。

Processing代码通常运行在主机计算机之上,并由其向Arduino发送指令——Arduino则运行Firmata等本地解释器。开发工作立足于主机设备,不过具体任务则在Arduino之上完成。

Processing亦在移动应用开发场景中发挥着巨大作用,并凭借着利用JavaScript编写而成的Processing衍生版本而在Web应用开发领域站稳了脚跟。卡恩学院目前正使用其进行计算机编程授课。

文章转载自微信公众号“一斑”(ID: yiban51CTO)

责任编辑:赵宁宁 来源: 一斑
相关推荐

2022-08-22 14:44:02

人工智能量子计算算法

2018-08-14 20:20:25

人工智能大数据机器人

2021-07-18 22:43:39

数据安全人工智能网络安全

2021-02-23 22:15:54

人工智能科技算法

2023-05-08 16:54:56

人工智能智能建筑

2022-04-01 11:30:34

数字系统人工智能智能建筑

2018-01-31 15:05:49

人工智能无人车货币系统

2022-11-11 12:09:38

2022-06-20 11:05:58

通用人工智能机器人

2018-08-17 15:17:56

人工智能层次极端

2022-11-14 14:40:02

2022-01-13 06:59:40

人工智能无代码IT

2023-10-17 10:20:23

2022-02-25 15:59:20

人工智能

2023-05-05 14:02:59

人工智能聊天机器人

2022-10-19 07:04:12

​人工智能云服务Alaas

2020-08-31 15:15:20

人工智能算法AI

2020-02-10 20:16:04

程序员AI人工智能

2021-07-26 14:45:45

人工智能台风气候

2022-07-29 15:47:25

人工智能AI
点赞
收藏

51CTO技术栈公众号