软件开发随记之二 —— 软件界面的Web化

本文探讨了传统GUI程序的局限性和挑战,介绍了Web程序如何以其跨平台的优势和简便的开发方式逐渐成为主流,并展望了未来智能设备界面的发展趋势。

 

(一)

 

我们已经习惯了这样的软件使用模式——点击一个可执行文件(或者快捷方式),然后弹出一个窗口(全屏界面可以认为是一个特殊的窗口),上面堆砌了复杂的操作元素——菜单,按钮,滚动条,文本输入框……让一个不会电脑的人来接触这些,可能会让他们无所适从,但是,我们自己对如何使用它早已轻车熟路,对于大部分的软件,看看界面,基本就知道怎么用了,无需看帮助文档。Windows程序如此,Linux上的图形程序也如此。

 

(二)

 

基于GUI(Graphical User Interface,图形用户接口)的程序,使用起来方便,开发起来却不是一件容易的事情。如何制定软件界面风格,提高用户亲和力,让用户感觉易于使用,是一门结合工程和艺术的跨学科的学问,这里也不多讲。仅仅考虑用代码实现软件的界面这个纯工程的问题,所要花费的工夫有时也让人望而却步。虽然有很多现成的图形应用程序开发框架,但是,简单的使用它们并不能达到所想要的效果,想要深入挖掘这些框架的潜力,又会发现花了如此多的时间,到头来还是得被框架设计者牵着鼻子走,并不能用它们来完全表达我们的创意。很多时候,GUI的开发耗费太多时间,但成效很不明显。且还有一个特点:跨平台的能力不强。

 

曾经,我们都理所当然地想到,所有的电脑必定有一个显示器,软件的界面显示在显示器上。但是,如今的智能设备越来越多,比如,手机,家用路由器,家用网络存储系统(NAS之类的东东)。每一个设备中都有CPU,都有内存,完全可以当一台小电脑了。是不是它们都需要一个显示器呢?手机有自己的LCD屏,可是,家用路由器和家用NAS,接一个显示器完全是多此一举,我们用怎样的办法来灵活控制它呢?Telnet也许是一个办法,但是一般用户完全不知道Telnet是怎么回事。有什么办法来提供方便使用的GUI接口呢?

 

前面两类问题,都可以通过Web程序来解决。

 

(三)

 

基于Web的程序在互联网大兴的时代,生逢其时。统一的标准让Web程序可以适应不同的操作系统和浏览器平台,轻松解决跨平台能力。虽然微软的IE还在兴风作浪,自己搞一些特例独行的东西,但是,Web标准化是无法逆转的大趋势。简单的HTML语法,让界面开发人员上手起来也轻松自如。Javascript再复杂,也比乱七八糟的C++界面代码容易理解。虽然Web程序的整体开发并不简单,但是单从GUI来看,它让人们摆脱了很多繁琐的负担。以往,我们往往会为图形的渲染,背景的设定写出非常复杂的代码,现在我们都可以用简单的脚本实现,把复杂的重复的工作都交给浏览器去完成吧!

 

以往,我们常常会把Web程序和商业运营的网站,比如Google,网易,淘宝等联系起来。实际上,就是在家里的设备中运行的程序,比如路由器和NAS,甚至智能家电(拥有智能芯片的电冰箱,电饭煲等等)其界面也可以完全Web化。只要设备都联网,通过一个IP地址,在浏览器就可以轻松地访问它们。通过浏览器里面呈现出来的GUI,很轻松地进行各种设置。另外,因为联网,我们甚至可以在世界给地对它们进行控制。比如,假如哪一天我发达了,跑到马尔代夫去度假,可以一边在沙滩上晒太阳,一边用手机来访问家里的NAS,打开Transmission这个BT下载软件,用来下最新的1080p电影。

 

Web程序目前不能代替所有的应用程序,但是,Web的确能够完成大部分的事情,要不,Google怎么会推出完全基于浏览器的Chrome OS呢?

开发相关随记包含多个方面: - **软件开发**:在增加和设计较为庞大的程序时,要考虑程序结构设计,如解耦、层与层接口、模块之间关系、参数、ram、flash、运行速度等。还可学习了解aoutosar的分层结构。新的项目需在较短时间完成从零编码到交付[^1]。 - **IsaacLab开发**:遇到在spring - damping模型下,调大限制和刚度、damping参数后出现异常情况,几十个episode插入后不在孔周围晃,此现象与预期不符,需进一步理顺[^2]。 - **Chrome扩展程序开发**:Map是新的数据类型,可在JavaScript中用于存储键值对实现快速查找,还给出了本地缓存工具的代码实现,同时列举了一些相关学习参考资料,如ReqBin在线API测试工具、Chrome插件开发攻略等[^3]。 ```javascript let data = new Map([ ['Alice', 25], ['Bob', 30], ['Charlie', 35], ['David', 40] ]); console.log(data.get('Alice')); // 25 var myLocalStorageTool = { set: function(key, value) { localStorage.setItem(key, value); }, get: function(key) { return localStorage.getItem(key); }, remove: function(key) { localStorage.removeItem(key); }, removeAll: function() { localStorage.clear(); }, toJsonString: function(jsData) { return JSON.stringify(jsData); }, toJsData: function(jsonString) { return JSON.parse(jsonString); } }; ``` - **X86平台开发**:对于intel的X86平台,intel提供完整数据手册和丰富资源,不同卷册有不同内容,如vol 1是整体介绍,vol 2是CPU部分寄存器说明等,还有PDG、硬件设计指南、散热文档、产线可制造性文档等可供参考[^4]。 - **通用开发问题**:client的定时器是通用功能,但依赖cocos2d的Scheduler类,导致移植到server端困难,使用C++标准库实现可避免该问题[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值