精华内容
参与话题
问答
  • 嵌入式应用软件架构设计

    万次阅读 多人点赞 2017-08-09 18:02:33
    要做到嵌入式应用的代码逻辑清晰,且避免重复的造轮子,没有好的应用架构怎么行。 如果没有好的架构,移植将会是一件很痛苦的事情。 如果没有好的架构,复用是最大的难题,没法更大限度的复用原有的代码。 如果...

    要做到嵌入式应用的代码逻辑清晰,且避免重复的造轮子,没有好的应用架构怎么行。
    如果没有好的架构,移植将会是一件很痛苦的事情。

    如果没有好的架构,复用是最大的难题,没法更大限度的复用原有的代码。

    如果没有好的架构,一旦驱动改了,所有的地方都要改,费时费力且很容易出错。

    如果没有好的架构,应用层中穿插着硬件驱动层的代码,看着会是一片混乱,逻辑不清,代码维护起来会很困难。

    这里总结下我的嵌入式程序设计思路,分享出来与大家共同探讨,同时也欢迎提出不同意见。
    现在的小朋友都爱玩搭积木的游戏,一个模块一个模块的拼装起来,快速组成各种不同的模型。现在的产品设计也很少从零开始。大都复用现有成熟的模块,专注于某个擅长领域。

    我的嵌入式应用架构思路来源与此,即功能模块设计与分层。

    把API分为驱动层和应用层API,而不是所有程序都调用驱动层API。(整个应用中都调用驱动层API会导致应用中驱动调用随处可见,无法移植和最大限度的复用)

    先把一个应用进行功能模块划分,并对整体结构进行分层,然后设计出功能独立的各个模块(如算法模块,文件库模块,通信库模块),在模块之上开放公共接口。

    驱动层提供出公共接口供上层调用。各个功能模块可以独立编译(如算法模块纯ANSI C,可在任意平台复用),或者调用驱动层接口(文件库模块调用了驱动读写Flash),总而言之,言而总之,封装出各个功能独立的可复用的功能模块。

    总体分 硬件驱动层-->功能模块层-->应用接口层-->业务逻辑层-->应用层

    总体结构示意框图:

    应用层,为程序的总体的运行框架,组织调用业务逻辑。可以用某种嵌入式操作系统实现几种任务 。如定时任务,卡处理任务,菜单任务,通信任务。
    业务逻辑层,如CPU卡处理,交通部卡处理,银联卡处理,M1卡处理,通信记录上传,黑名单下载,票价参数下载等。
    应用接口层,提供公共的api接口供应用接口供上层调用。这些接口也可由下层的功能模块开放出来,应用接口层负责汇总。
    功能模块层,可以封装不同的功能模块。如算法库,文件库,通信库,银联库,向上提供应用接口层的接口,向下调用驱动接口。
    硬件驱动层,由各个驱动模块组成,向上提供统一的接口。

    遵循一些约定,
    1.每个模块提供出的接口要统一,后续只能增,不能改原来的接口。
    2.模块与模块之间相互独立,互不影响,不能相互调用,只能调用它下层的接口。
    3.由模块构成层,层与层之间不能跨级调用。如在应用层中不能看到直接调用驱动层的代码。

    4.模块中又可以继续分层,如接口层,驱动层,硬件层。

     

    如果驱动变动了,或者换不同平台,只需更改驱动层,应用层不受影响。
    如果功能模块变动了,只需升级功能功能模块,其他的模块不受影响,应用层也不受影响。


    按照这种逻辑设计好之后,主要的工作就是在业务逻辑层。应用层则为程序的总体流程和框架,主要调用业务逻辑层实现不同的功能。

    我们现在的代码结构,基本是按这个思路来的。

    硬件驱动层-->功能模块层-->应用接口层-->业务逻辑层-->应用层。

    看看以下两种风格的代码,你更喜欢哪个。

    另一种风格:

    同样是保存参数,非要拆成 AlgCRC16  ,WritePraFlash( (unsigned char *)&NetPra , NETPRA_ADDR , sizeof(_NetPra) )两步吗?

    还有AH_Para_Verify这个,在应用层中真是多余啊,检测失败又从Flash读取。关于参数,一开机就应该检测合法性了。

    既然都是要保存参数,就应该做个封装,如上图所示,把系统用到的不同参数做个规划。应用层调用APP_Open_UseFile 或者APP_Read_UseFile,

    而不是直接的去读写Flash。

    来看看赫赫有名的谷歌的android架构,虽然很复杂,但从框图上看,也像是搭积木,各个功能模块独立,层次分明。最低层建立在linux Kernel基础上,然后是各个组件库libraries,再往上是应用框架和应用。

    以NC_FileLib,文件库模块为例,如果要用在其他平台,如EH0918手持机设备,只需要移植几个硬件层接口即可。

    NC_FileSys文件库,跟硬件相关的接口在Hook文件夹,
    重新实现以下几个函数即可:
    void HW_FRAM_Init( void )
    unsigned int HW_FRAM_Read( unsigned int    addr,unsigned int    size,unsigned char    *buffer)
    unsigned int HW_FRAM_Write( unsigned int    addr, unsigned int    size,unsigned char    *buffer )
    //擦除FLASH一页 (FLASH擦除的最小单元)
    unsigned int HW_Flash_PageErase( unsigned int page )
    unsigned int HW_Flash_Read( unsigned int addr, unsigned int size, unsigned char *buffer )
    unsigned int HW_Flash_NotEraseWrite( unsigned int addr, unsigned int size, unsigned char *buffer )
    //擦除FLASH一页 (FLASH擦除的最小单元)
    unsigned int HW_Flash_PageErase( unsigned int page )

     

    按照以上模块化设计思想,很容易实现一模拟pos机。

    以开发一个智能pos应用为例:
    一个智能pos涉及到的功能模块有:
    读写卡功能,保存与读取消费记录,查找保存黑名单,界面显示,菜单显示,通信下载参数上传记录等。

    以下为移植功能模块到电脑上,自己做的一个模拟Pos工具:
    在电脑上实现一模拟pos(只是功能上的实现,完成刷卡消费,记录存储,记录上传,黑名单,票价下载等功能。界面为Dos窗口。后续如果用QT把界面也做出来,就是一功能齐全的模拟POS机,不过得把荒废多年的C++重新拾起来了。可以继续完善做一个上位机模拟pos,改变编译器在上位机仿真调试并交叉编译后运行在真实POS上)。
    用到的功能模块有 文件存储模块,卡处理模块,算法模块,银联库模块。我把这些模块移植到电脑上。
    关于卡处理模块的实现,由于电脑上没读卡头,于是用外接读卡器。把读卡器串口接电脑上。电脑上做一读写卡服务,提供TCP接口的读写卡接口。
    移植文件库,嵌入式程序中是操作的flash,在电脑上把文件库中用到的接口用读写文件的形式替换。
    移植算法库,算法库都是c写的,直接用gcc在windows平台重新编译即可。
    实现效果:

    第7项,模拟POS与银联通信:

    POSP模拟器为模拟银联后台的一个工具。运行bus,exe进行签到,下载IC卡参数与公钥并保存至电脑上,

    第5项,银联卡消费:

    读卡器通过串口接到电脑上,电脑上运行读写卡服务tcpserver.exe,,提供读写卡APDU指令接口。利用之前做的小工具远程读卡器。

    有时候为了测试卡片消费,不能每次都重新编译进来吧,这时候可以利用LUA脚本。选择第11项。把需要测试卡片的指令写进LUA脚本,然后执行,

    如图所示:

    执行结果:

    封装的功能模块,即各种库如下:
    liblua.a         执行lua脚本使用
    libblkfile.a    黑名单查找与存储
    libmaycalc.a 算法库,如SHA,DES算法
    libmycard.a  卡库,提供操作卡片的APDU
    libmyfile.a    文件库,提供文件存储与读取
    libmycom.a  通信库,提供socket通信
    libmyup.a     银联库,银联卡处理逻辑与银联后台通信业务

    其中,libmyblkfile库的makefile文件如下:
    ########################################
    #makefile
    ########################################
    BINARY= libmyblkfile
    CC= gcc
    LD= ld
    CFLAGS= -std=c99 -g
    LDSCRIPT=
    LDFLAGS= -Llib
    OBJS= AH_BlackList.o AH_BlkDirFileLib.o APP_Blacklist.o
    #CFLAGS=-std=c99
    .PHONY: clean
    all:images
    images: $(BINARY).a
    $(OBJS):%.o:%.c
            $(CC) -c $(CFLAGS) $< -o $@
    %.a: $(OBJS)
            ar crv $(*).a $(OBJS)
            cp libmyblkfile.a ../
    clean:
            rm -f *.o

    主程序的makefile文件如下:
    ########################################
    #makefile
    ########################################
    #编译指定子目录
    SUBDIRS := .\\lib\\NC_Com\
                       .\\lib\\NC_FileSys\
               .\\lib\\NC_BlkFile\
               .\\lib\\NC_Card\\NC_Card_Lib\
               .\\lib\\NC_UPCash\\NC_UPCash_Lib
    define make_subdir
    @ for subdir in $(SUBDIRS) ; do \
    ( cd $$subdir && make $1) \
    done;
    endef
    #编译主程序
    BINARY  := ./bin/bus
    OBJ_DIR := ./obj/
    CC= gcc
    LD= ld
    CFLAGS= -std=c99 -Wall -g
    LDSCRIPT= -lmycom -lws2_32 -liconv -lmyfile  -lmycard -lmyup -lmycalc -lmyblkfile -llua
    LDFLAGS= -Llib
    SRC  = $(wildcard *.c)
    DIR  = $(notdir $(SRC))
    OBJS = $(patsubst %.c,$(OBJ_DIR)%.o,$(DIR))
    #OBJS=  main.o myutils.o  inirw.o  cmdpboc.o cputest.o bustcp.o ansrec.o m1cmd.o m1api.o m1test.o upcash.o myother.o getsys.o
    #CFLAGS=-std=c99
    #@echo Building lib...
    #$(call make_subdir)
    .PHONY: clean lib
    all:  prebuild  $(BINARY).exe
    prebuild:
            @echo Building app...
    $(BINARY).exe : $(OBJS)
            @echo Generating ...
            $(CC) -o $(BINARY).exe $(OBJS) $(LDFLAGS) $(LDSCRIPT)
            @echo OK!
    $(OBJ_DIR)%.o : %.c
            $(CC) -c $(CFLAGS) $< -o  $@
    lib:
            @echo Building lib...
            $(call make_subdir)
    clean:
            rm -f $(OBJ_DIR)*.o
            @echo Removed!

    各个功能模块,又可以进一步细分为子模块。
    拿通信库举例:
    嵌入式设备都需要支持各种不同的通讯模块。比如硬件设备有A701、A801、B502等,通讯模块有GL868、MG323、MC8630、N710、ZIGBEE等,这些设备分别支持全部或部分通讯模块。
    整体架构分为如下:

    驱动大致分为三层:
    1、接口层:为用户提供统一的接口,比如:Connect、TxData、RxData、Disconnect等。
    2、驱动层:向接口层暴露统一的接口,这些接口用于完成实际的连接断开和数据收发等,比如:DevConnect、DevTxData、RxData、Disconnect等。该层只会和支持的通讯模块相关,不会直接访问任何硬件功能,包括串口通讯、GPIO控制全部通过底层的设备层实现。
    3、设备层:向驱动层提供统一的接口,这些接口通过访问物理硬件来实现和模块的通讯,比如:XXXPowerOn、SerialSend、SerialReceive等,并定义该设备支持哪些模块。
    三层之间通过标准的接口进行互相访问。
    1、接口层对外接口(用户操作通讯模块使用的API):
    uint32_t Com_Dev_Start(void);
    //设备重新上电,并和网络建立连接
    uint32_t Com_Dev_Restart(void);
    //设备断网断电
    uint32_t Com_Dev_Stop(void);
    //连接远端服务器
    uint32_t Com_Dev_Connect(uint8_t *ip, uint16_t port, uint32_t timeout, uint32_t channel);
    //断开连接
    uint32_t Com_Dev_Disconnect(uint32_t channel);
    //发送数据
    uint32_t Com_Dev_TxData(uint8_t *buf, uint32_t len, uint32_t timeout, uint32_t channel);
    //接收数据
    uint32_t Com_Dev_RxData(uint8_t *buf, uint32_t *rxlen, uint32_t len, uint32_t timeout, uint32_t channel);
    //获取信号质量
    uint32_t Com_Dev_GetSQ(uint8_t *csq);
    2、驱动层对接口层的接口(对接口层屏蔽各通讯模块的差异):
    struct ComDevFunc{
             uint32_t (*start)(ComDevDesc *dev);
             uint32_t (*restart)(ComDevDesc *dev);
             uint32_t (*stop)(ComDevDesc *dev);
             uint32_t (*connect)(ComDevDesc *dev, uint8_t *ip, uint16_t port, uint32_t timeout, uint32_t channel);
             uint32_t (*disconnect)(ComDevDesc *dev, uint32_t channel);
             uint32_t (*txData)(ComDevDesc *dev, uint8_t *buf, uint32_t len, uint32_t timeout, uint32_t channel);
             uint32_t (*rxData)(ComDevDesc *dev, uint8_t *buf, uint32_t *rxlen, uint32_t len, uint32_t timeout, uint32_t channel);
             uint32_t (*getVer)(ComDevDesc *dev, uint8_t *buf, uint32_t versize);
             uint32_t (*getCSQ)(ComDevDesc *dev, uint8_t *csq);
    };
    3、设备层对驱动层提供的接口(屏蔽串口号、GPIO引脚等平台相关的内容):
    int Com_PortOpen(uint32_t baud);
    int Com_PortClose(void);
    int Com_PortSend(uint8_t *buf, int len);
    int Com_PortRecv(uint8_t *buf, int len, int timeout);
    int Com_PortGetLen(void);
    int Com_PortFlush(void);
    //具体硬件相关函数,在Model_XXXXX.h中实现
    //仅需实现平台支持的模块即可
    void COM_GL868Power(int state);
    void COM_MC8332Power(int state);
    void COM_MG323Power(int state);
    void COM_EMV3081Power(int state);
    void COM_CC2530Power(int state);
    void COM_N710Power(int state);
    2.   目录结构
    │  ComAPI.c              -----通讯库API实现
    │  ComAPI.h              -----通讯库API声明(接口层API)
    │  ComDevs.c                                -----供驱动使用的公共定义和工具函数
    │  ComDevs.h                                -----供驱动使用的公共定义和工具函数(驱动层API)
    │  Readme.txt

    ├─Devices                -----存放各种模块的驱动程序
    │      Dev_CDMA_MC8332.c
    │      Dev_CDMA_MC8332.h
    │      Dev_GPRS_GL868.C
    │      Dev_GPRS_GL868.h
    │      Dev_WIFI_EMV3081.c
    │      Dev_WIFI_EMV3081.h

    └─Models                                          -----存放适配各种设备型号的目录
            Model.h          -----设备层API
            Model_A701.c
            Model_B502.c
    3.   支持新模块的方法
    比如A701设备要新增支持SUPER123模块
    1、在Devices目录中增加一个文件Dev_6G_SUPER123.c并实现ComDevFunc结构中定义的各函数
    2、在设备文件Model_A701.c中增加电源控制函数COM_SUPER123Power。
    3、在设备文件Model_A701.c中添加驱动函数到gComFuncs数组中。
    4.   适配新设备的方法
    1、在Models目录新增加一个文件Model_XXXX.c
    2、实现串口通讯函数(Com_PortXXXX系列,参考Model.h中的定义)
    3、实现支持的通讯模块的上下电函数COM_XXXXPower(int state);
    4、实现gComFuncs数组,其中引用所有支持模块的驱动函数。
    5.   对部分系统函数的引用
    对于部分系统相关函数,比如延时、调试信息的打印等,全部提供默认实现,并将默认实现声明为弱函数。这样当用户需要进行自定义的时候可以进行自定义,如果不需要可以直接忽略不会造成编译错误。
    这样的函数有如下三个:
    void Com_Hook_Printf(char* fmt, ...);
    void Com_Hook_PrintHex(uint8_t* buf, int len);
    //重定义延时功能,如果使用操作系统的话可以充分利用操作系统的调度特性,避免死等造成的浪费
    void Com_Hook_DelayMs(uint32_t ms);
    6.   驱动中普遍使用的功能
    对于部分编写通讯模块驱动常用的功能,模块中提供了一系列的辅助函数,避免重复劳动

     

    -------------------------------------------------------------------------------------------

    成功不是追求别人眼中的最好,而是把自己能做的事情做得最好。

    每个人都应该有梦想,这才是生命的意义。

    做事情贵在坚持,只有这份坚持,才实践了意义。

    处处留心皆学问,爱学习,爱思考。

    在这里分享学习,分享感悟,共同进步。

    凝聚学习的圈子,思考的圈子。

    扫码关注个人微信公众号:aazhen1987

    凝聚学习和思考的圈子。

    --------------------------------------------------------------------------------------------

    展开全文
  • 一个奇鸽船新体验又叫一只奇鸽,跟之前火热的多功用助手是相同的软件。都是集成了许多实用功用的工具箱,这些运用功用日常用的少,可是关键时刻仍是得用,所以一款各种小东西的集合东西仍是 很有必要的。软件的功用...

    一个奇鸽船新体验又叫一只奇鸽,跟之前火热的多功用助手是相同的软件。都是集成了许多实用功用的工具箱,这些运用功用日常用的少,可是关键时刻仍是得用,所以一款各种小东西的集合东西仍是 很有必要的。软件的功用没有细心数过,毕竟太多了,这里就不一一详细介绍了。例如提取APK、闪照破解、网易云音乐启动图替换、身份证信息查询、外卖头盔头像等。

    软件跟多功能助手APP各有千秋,除了一些基础功用更有解封助手、手机吃鸡语音包、网址获取源代码、特殊文字生成器、网盘高级搜索、QQ刷屏文字、微博动态生成、半透明图制作、王者荣耀重复名,软件在更新升级中会有功能的下架以及新功能的增加,请以软件内实际功能为准。

    相似多功能助手

    它的官网:00houqq.cn

    展开全文
  • 在kevin的专栏看到从个人软件到企业软件一文,主要从技术的角度对企业软件的特点进行了全面的说明,是一篇实在的好文,小结中“建立以用户... 我们首先设定一下立场:从软件应用对象、目标及用户角度去探讨,而不是

      在kevin的专栏看到从个人软件到企业软件一文,主要从技术的角度对企业软件的特点进行了全面的说明,是一篇实在的好文,小结中“建立以用户为中心,站在用户的角度看问题的习惯”这个建议更是金玉良言,但作为软件开发者,能真正做好这个要点的非常之少。沿着这个思路,我们可以对“企业应用和个人应用的区别”这个问题得出另一层面的认识。

      我们首先设定一下立场:从软件的应用对象、目标及用户角度去探讨,而不是软件开发者或技术特征的角度。

    什么是企业应用?什么是个人应用?

      简单地从字面上理解,似乎个人软件就是供个别用户使用的软件,企业软件是供“企业”[注1]使用的软件。

      这就涉及到软件的用户是谁。拿“用户满意”来说,一套综合管理软件,企业管理者认为好,但80%的实际操作者认为不好,这算做“用户满意”还是“不满意”呢?一个即时信息(IM)软件,大部分时候我们认为那是十分私人的、个体化的东西,但如果一个企业为他的员工配了这种软件,它是否就又变成企业应用了?

      单从谁是用户的角度,不足以辨明企业应用和个人应用的真正区别。更接近实质性的方法,是从它的功能目标上去区分,即它的目标是满足个体用户的需要,还是企业(组织)的需要?换言之,企业应用软件是用来满足企业需求或目标的软件,个人应用软件是满足个人需求或目标的软件。即时一个软件的基本功能相似,也可以因上面不同的目标或需求分别做成“企业应用”或“个人应用”。

      再拿即时信息(IM)软件来说,作为个人用途,我们不需要乃至排斥任何的第三方干预或监管机制。注册,增删朋友,收发什么东西,什么时候使用等等,完全随自己意而决定。但当你站在组织的立场上,为你的机构选择IM软件,尽管最终是要配给每个具体员工(个体)去用,但你必定从你的组织的立场和诉求出发,此时,刚刚提到的不需要或拒斥的要素,都是你必须考虑的重要方面。此时你可能发现,选择某一个市面流行的面向个人IM给你的员工使用很可能不能满足你所代表的组织的业务或管理的需求,你可能需要选择那些专为企业应用而设计的IM。

    企业应用与个人应用的区别

      弄清了以上问题,再进一步讨论,企业应用和个人应用的区别到底在哪里?或许你会想到,企业应用是“多用户”的,个人应用是单用户的。这的确是很接近本质的一个区别,甚至可以作为区分二者的一种简单的标志。但我们还能更进一步。

      企业应用的拥有者、管理者(决定用不用和怎样用的人)、和具体的使用者,甚至还应该包括“维护支持者”,是分得清清楚楚的不同对象,而且是不同层次上的对象(既有组织,也有个人),对于软件供应商而言,它们都属于“用户”的范畴。企业应用通常必须首先满足管理者的要求,其次才是狭义的用户——实际操作者。

      从应用环境角度看,企业应用工作在一个群体协作的环境中。企业应用的具体操作者不仅是多重的,还是动态的,用户之间还必须是关联或协作的,是开放、动态的群体协作工作环境,这需要许多实质性的功能支持,而不仅仅是多用户系统的并发或冲突防止策略。另一方面,企业应用不仅面对作业者群体,还需要支持管理者、组织(部门)间、上下级间、个人与组织、内部与外部组织/个人的多层次多方位的协作关系。

      从群体协同工作、管理乃至企业机构自身的需求角度所提出的需求,通常在个人应用中根本不会出现。由此这样展开,我们可以找到许多个人用户无需具备的特征,其中最关键的是以下列出的三个方面。在与个人应用的区别上,其它特征,例如“伸缩性”,“安全性”,“可靠性”,“高负荷”等等,相对这三个方面都是非本质的。

    • 组织目标:组织(企业)的目标是高度复杂的目标,它可以分解为复杂的有机构成的功能结构或子目标,同时它可以包括许多个体层面上的互相关联的目标,因此与个体应用的目标相比,完全是不同层次上的事物。组织目标总是首先表现为业务目标,而不是具体的软件功能。
    • 协同作业:企业应用不仅需要支持开放、动态作业者群体的协同作业,同时还要支持个人、组织、内部、外部等多层次上的复杂协作。
    • 可管理性:在单个用户的自我管理之外,企业应用从部署、应用方案、运行的过程与结果、操作的历史、操作者权限与状态等方面都需要提供专门的管理功能,必须具有足够好的“可管理性”,而这种可管理性的实现常常比单纯的业务功能更加复杂。

      通过以上分析我们再去看一些技术的特点,可以发现,正因为企业应用具有上述个人应用不具备的特征,才使得它们“常常”要依赖于分布式计算、并行计算、负载平衡、数据冗余、事务处理、对象池,乃至SOA等等复杂的技术。

    [注1] 这里的“企业”是泛指的:可能是商业的,也可能是非商业的,例如政府机构,民间团体。英文中常见的enterprise一词有类似的意思。

     标签:信息技术, 应用, 软件, 工程, 需求, 分析, 企业, 个人, 区别

    (任何应用、传播请保持原署名及出处。商业机构或营利性使用,需取得作者许可)
    作者:Flyingrobot, 2007年7月5日, 企业应用探索日志, http://blog.csdn.net/flyingrobot

    展开全文
  • 企业应用软件商怎么渡劫

    千次阅读 2014-03-01 16:27:57
    企业应用软件商怎么渡劫云这个概念从2006年由Google提出,Google的信息爬取爬虫、内容存储、内容索引、搜索运算,无时不刻的让我们感觉到云计算和云存储的强大性。传闻Google已经拥有一百万台服务器,这么密集的...
    企业应用软件商怎么渡劫


    云这个概念从2006年由Google提出,Google的信息爬取爬虫、内容存储、内容索引、搜索运算,无时不刻的让我们感觉到云计算和云存储的强大性。传闻Google已经拥有一百万台服务器,这么密集的服务器,需要的电力/通风/散热、高集成安装放置、数据传输/服务器分布式协同运算、监控运行/硬件损坏/替换,这得多高的技术要求。所以听说Google自己研发服务器主板为了更高密集放置,自己设计机房为了全自动化运维/机器人替换损件,用海水循环制冷散热/用潮汐来产生电力,自己研发新的数据传输协议/自己研发铺建新的数据传输缆线介质,自己研发操作系统研发数据库研发开发语言研发中间件并且开源,而且还把这些从基础硬件/网络/存储/软件都开放出来供大家分享使用,这就是云的起源。


    后来Amazon为了搞开放商家平台,为了商家的数据/图片的存储,为了销售数字化的电子书/音乐/数字电影的存储和传输,所以Amazon也发展了云计算/云存储业务。


    但2013年才应该是中国云计算元年,这已经距离2006年过去了7年了。2013年,国际巨头Oracle整个公司全方向转云/大力收购大力研发云/并且加大对云的销售业绩要求和提成激励,IBM云进入中国、微软云进入中国、Amazon云进入中国,SAP大力推广私有云HANA高性能软硬一体化的数据仓库/商业智能。中国各大巨头如华为、联想等也加入国际开源OpenStack云组织,中国互联网巨头BAT/360都进入云市场,并且去年掀起一股消费云大战那就是网盘/相册,从免费赠送100G竞争到了免费赠送10个T。在企业应用云,金蝶的主打中端产品K3也演变成K3 Cloud,是全新研发的一代产品,完全基于云来设计而非过去K3的改造。用友也研发了云应用管理平台Cloud Service Platform。东软也在2014年初宣布以后在主力行业推进云,东软扎的行业可都是政府、事业性等对安全对私有敏感的组织(如国土资源、电信、电力、公安、税务、审计、社保等等)。2013年最让人震惊的还是Amazon与美国中情局签订云服务的提供,这可是安全保密极高的美国安全军方,对于对云有安全担忧的人们无疑是一剂强心剂。


    云虽然在IaaS 网络虚拟化/存储虚拟化方面还有许多技术深化、在关系型数据存取领域还缺乏重磅分布式产品、在开发语言领域Golang还不成熟、在应用引擎研发方面还不丰富不稳定不强大、在运维服务管理方面还响应不足/解决问题不足、解决方案在开源界还尚不成熟,但,这是IT行业,3年一小变,5年一大变。所以从2013年算起,2017年将是中国云计算爆发的一年。


    科技的进步是相对比较快的,但应用落地普及往往受客户进步的影响,客户走不动你就很难动。但纵观中国企业信息化20年,很多重大阶段的升级往往不是受客户驱动,而是受巨头推动。Oracle已经决定云优先,也就是销售组织侧重云、销售业绩份额偏重云、销售提成激励偏重云,所以Oracle的销售先给客户推荐云讲解云营销云。


    巨头的推动力量是巨大的,就如同中国金融业一直很封闭的自己玩,现在BAT年底一轮利率热、理财基金热,短期聚集了万亿资金。这让保守金融业从未有过的震惊。怎么世界变成这样的玩法了?老百姓难道疯了?纷纷举办内部研讨会、给媒体吹风给老百姓吹风宣传风险担忧漏洞,但却仍然势不可挡。就如同中国电信业,过去三大巨头,现在虚拟运营商纷纷获得牌照应用花样眼花缭乱。就如同中国出租车业,几十年没什么变动,去年第四季度打车软件补贴大战互联网巨头砸10亿真金白银,顿时出租车业天翻地覆。再比如中国如家之于中国宾馆业,携程之于中国民航机票销售业一样。这就是巨头的资本力量+媒体传播营销力量+消费者流量入口力量+地推力量+信息数据收集/应用研发力量。这就是巨头的砝码。


    中国企业客户应用科技是一向保守的,但这几年京东、阿里攻城略地,让线下制造商、分销商、零售商纷纷压力巨大,有的关店,有的多渠道销售,有的转型主力线上。这都是生死痛苦蜕变。谁能料到线上发展这么快,而且革命了线下,让线下无路可走。现在这些互联网巨头又在准备革命服务业,先从餐饮团购、电影院/KTV/美容院/度假村/游乐园开始。传统巨头惊了,什么叫互联网思维,怎么转?联想、万科、华为、海尔纷纷在探讨、领队参观学习。


    而云计算也是如此。不仅互联网巨头们业务应用一体化变革整个行业的商业模式与业务流程,而且人家利用云存储获得了整个闭环业务链条的全社会的业务数据,这对重组、优化、配置社会资源,让社会资源更加高效率高价值非常有利。


    我们做传统应用软件的目的不就是为了企业资源配置、组合更加高效率高价值么?我们局限在某个企业内部信息收集、某个企业内部资源的整合优化。而人家互联网一上手就是整个社会资源,我们的某个具体客户就是人家社会资源中的一份子。我们是小圈,人家是大圈。


    企业经营讲究的是根据市场动态来决定自己的战略战术决策,所以最关键的信息反而是企业外/社会内的信息,而非企业内部的信息收集利用。所以我们做传统企业应用软件一开始就低了一维。


    有句夸张的话就是未来每个企业都是电子商务企业,每个企业都会成为一个软件企业要充分利用软件信息技术来为自己经营而引领并支撑。虽说这个未来可能还不确定有多远,可能一些企业如媒体、出版、金融、旅游、机票/火车票、宾馆、打车、餐饮、休闲娱乐、购物、数码、家电、教育、医疗、农业养殖种植都被充分颠覆了,更多的行业也正在被逐步颠覆重新想象。但中国仍然太大,中国企业太多,中国三教九流的水平层次太杂。这么多的颠覆,仍然是大量企业在权钱寻租交易、跑马圈地、暴力营销、逐水草而居。所以中国传统企业软件也很多层次很多路仍然可行。


    但云这个坎怎么迈?


    我过去反思过传统企业软件的核心竞争力,有人讲应该是渠道销售与服务能力,有人讲应该是产品研发品质,有人讲应该是整个业务价值链的整合管理,有人讲是品牌溢价议价能力、有人讲是软件内嵌灵魂思想模型引领指导能力、有人讲是客户需求快速探知与满足。


    我觉得这都对。但就是没人讲中国传统企业应用软件的核心在于技术。


    你看看云。你要满足海量用户的运行和数据存储,这比给一家家企业安装部署软硬件要高门槛的多。大量传统企业应用软件商,只要客户的数据大点人多点,IT系统就不稳定/性能慢。虽说中国传统企业应用软件都研发自己的所谓企业应用平台,但结果就这现状。


    那在云时代怎么应对?所以必然要把自己所谓的企业应用平台经过裁剪,放置到现在专业的云提供商那里。


    企业应用平台其实内在分很多层,最底层应该是技术平台。过去搭建企业应用平台,如在微软技术体系内,微软提供了报表服务引擎、工作流服务引擎、消息队列引擎、服务接口管理引擎、数据ORM存取引擎、事务引擎、日志记录、异常跟踪监控等等。再往上是真正的企业应用基础,如单点登录门户、组织权限管理、主数据管理、基础业务参数开关维护。再往上走是新模块可视化设计工具/典型功能代码框架、定制开发工具/补丁打包发布工具/补丁升级工具、实施安装部署工具/数据初始化工具、运维检查监控优化工具/技术支持工具。


    所以说,专业的云提供商会替代了企业应用平台中的技术平台部分。你看云提供商提供的文档存取数据库、图片存储数据库、视频存储、KV数据存储、语音识别引擎、图片识别引擎、消息队列引擎、地图引擎,这些高难度技术都是中国传统企业应用软件商干不了的。所以只能干脆利用人家的引擎。


    未来,能做企业应用平台的寥寥无几,全被高技术门槛打死了,不像现在各种OA、BPM、快速开发平台等等各种李逵李鬼都纷纷宣称自己是平台。


    彻彻底底扯下技术遮羞布的中国传统企业应用软件商,放到云上面大大自动化简化实施/运维/支持,在这种未来现状下,什么是中国传统企业应用软件商的核心竞争力呢?在这种局面下我们不妨再问自己一下这个问题。客户需求快速探知与满足能力?软件内嵌灵魂思想模型引领指导能力?品牌溢价议价?产品研发品质?渠道销售服务?业务价值链的整合管理能力?


    到底哪个能力是第一呢?有人说当然是客户需求快速探知与满足能力?这是生意的本质根源啊。但你做了什么能够做到这一点呢?有人说是业务价值链整合管理能力?那你又做了什么能够做到这一点呢?我们不妨多问问我们自己。
    展开全文
  • abb PC SDK应用软件开发

    2017-11-02 04:41:08
    要做一个基于abb机器人的PC应用软件,但现在对于怎么编写控制abb软件毫无头绪,作为一名小白,请各位大神给点指导,最好有一些实例可以看看!
  • 系统软件和应用软件的划分

    千次阅读 2018-11-30 15:10:13
    什么是应用软件和系统软件   软件是计算机的灵魂,没有软件的计算机就如同没有磁带的录音机和没有录像带的录像机一样,与废铁没什么差别。使用不同的计算机软件,计算机可以完成许许多多不同的工作。它使计算机...
  • 如何区分系统软件和应用软件

    千次阅读 2015-03-13 10:56:53
    系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。...
  • 应用软件生产线 软件现代化生产的基础

    万次阅读 多人点赞 2011-08-22 20:18:24
    作者:纪青君 2011、8、22 摘要:软件生产线 软件寿命 可发展的软件 软件生命 随需而变  1 引言  随着计算机的诞生和发展,计算机软件软件开发技术也在不断发展,但就目前软件的生产方式而论,软件生产依然...
  • HPC应用软件介绍

    千次阅读 2011-10-08 11:14:37
    Author: Simon Luo E-Mail: xcluo.mr@gmail.com MSN: lx_9986@hotmail.com Date: 12 Oct, 2011 Keywords: HPC Application 1. COMSOL
  • 应用软件设计简介

    千次阅读 2006-08-03 09:40:00
    Series 60 2.0 :C++应用软件设计简介 术语定义 本文将使用下列术语和缩略语。 API: 应用编程接口 AVKON UIKON 和Symbian OS 应用框架的Series 60 扩展和更改 IDE: 集成开发环境 GUI: 图形用户...
  • 应用软件开发作为一个行业已经有了30多年的发展历史,但是也许是软件之复杂,也许是软件之无形,目前依然处于一种原始的手工作坊式生产方式,需要依靠大量的人力去开发,质量难于保障,使用和运维成本高昂。...
  • PDA应用软件开发特点

    千次阅读 2018-05-28 17:45:07
    在PDA设备应用推广过程中,提供适合企业应用场景的应用软件开发成为其中重要的一个环节。因此,对于PDA生产厂家以及PDA代理来说,如何开发符合客户要求的应用软件成为其是否能快速推广PDA的制约因素。在PDA设备应用...
  • 内容提要 本书纵观了软件开发在不同发展阶段的特点,揭示了当今在很多大型应用软件设计、开发过程中采用的一种部署模式,引出了一种称之为“脚本驱动的应用软件”的开发方法。结合以实例,本书还介绍了XML解析、...
  • 当今十大备份应用软件

    万次阅读 2011-12-15 16:41:56
    现在市场上有太多的备份应用软件,到底哪一款才是最好的呢? 实际上,这是一个见仁见智的问题。以下是笔者推荐的一些比较好的备份应用软件,排名不分先后。 1、赛门铁克的Backup Exec和NetBackup 451 Group的...
  • 免费Linux CAD应用软件

    万次阅读 2012-11-27 09:58:58
    相信很多同学都会说linux下没有CAD软件.3DMax.那你觉的它真的就没有这些软件呢.是没有同一个公司出的同样的一式的软件.那么他就没有更到人代替软件吗?然而不是.只是你不了解外面的世界还有那么多的精彩,那下面给你...
  • Windows mobile专区应用软件

    千次阅读 2005-01-26 17:10:00
    Windows mobile专区应用软件
  • Basic4android 是目前最简单、最强大的Android平台快速应用开发工具。 - 包含开发优秀实用安卓软件所需的所以功能 - 编译为安卓平台本地代码,没有额外的运行库和依赖库 - 拥有超过4万开发者社区,帮助初学者尽快...
  • 手里一个16GB的Ipad 1代,10寸的屏,电池等都很耐用,曾经的经典平板,然而却因为苹果对IOS 5这些低版本不再支持,所以下载应用成了大问题! 当时想着给京东回收吧,谁知他娘的才给130,这简直是糟蹋东西,一气之下...
  • 高性能计算专业应用软件大观

    万次阅读 2019-01-04 09:58:39
    谈到高性能计算,很多人都会想到那些每秒可以运行百万亿次、千万亿次计算的超级计算机,如最近炒得很火爆的“天河一号”、“曙光6000“等,但很少有人会想到上面跑的... 但对于应用单位来说,跟自己关系更加密切...
  • 手机应用软件测试经验总结

    千次阅读 2011-10-13 14:38:48
    相应的,越来越多的手机应用软件也伴随着手机功能的多样化应运而生。面对种类众多的手机应用软件,该如何进行测试,测试时又需要重点关注什么呢?本文档结合本人在产品手机项目测试过程中的经验,浅谈下手机应用软件...
  • 老子的软件之道 - 道篇 26 应用软件的根基

    万次阅读 多人点赞 2011-11-19 21:47:52
    摘要:老子哲学 道德经 软件哲学、软件之道 参阅:序 消灭人狼 软件的十大命题 编程规则  圣人曰:重为轻根,静为躁君。是以君子终日行不离轻重。虽有荣观燕处超然。奈何万乘之主而以身轻天下。轻则失根,躁则...
  • surface pro4应用软件安装

    千次阅读 2016-05-10 15:47:41
    安装Chrome:在mac下用以下链接下载离线安装版的Chrome,并拷贝到SP4,执行安装。http://www.google.cn/chrome/browser/desktop/index.html?standalone=1&platform=win64 安装SS for Windows软件
  • 这是原地址 http://robbin.javaeye.com/blog/225037 我对该问题的看法: 中国的企业应用软件领域恶性循环的根源是什么? 是中国经济领域的国有企业寡头垄断,挤压民营企业生存空间,国进民退造成的。 1、软件...
  • 推荐两款mac管理应用软件

    千次阅读 2019-04-27 19:59:25
    写在前面,大多用MacBook的人都有一个烦恼,就是软件之间的管理,应用生成的缓冲文件怎样删除,还有软件的卸载等等。。。 1.Dr.cleaner Dr Cleaner for mac是趋势科技推出,Mac OS平台上唯一一款集系统优化、垃圾...
  • 在这里分享几款常见的、强大的、实用的mac卸载软件应用软件,可以彻底清除App,无残留,清理优化你的电脑。 如果你还在发愁如何删除卸载软件后的残留,还在想怎么彻底卸载mac上的软件,不如试试以下几款软件,可以省...
  • 一、Mac OS X下应该如何卸载软件  Mac OS X的软件安装方式有很多种,而软件卸载的情况也...该软件是以什么形式(dmg,pkg,软件安装盘,单一应用或是其他方式)安装的? 2。软件的安装盘或系统里有没有卸载软件? 3
  • 嵌入式应用软件开发的步骤流程

    千次阅读 2018-12-11 21:03:55
    嵌入式软件工程师能根据项目管理和工程技术的实际要求,按照系统总体设计规格进行软、硬件实际,编写系统开发规格说明书等相应的...相关文章:《手机app移动应用软件开发为何越加旺盛?》 同时在这样一个技术日进千...
  • 以复合应用软件推动业务创新

    千次阅读 2006-10-17 19:11:00
    高速带宽的网络,开放的标准,面对对象的技术,终于让软件组件化进入了一个新时代,SOA的时代,而复合应用软件(Composite Applications)就是这次软件组件化进化的一个里程碑。什么是复合应用软件?它并非是一种新...

空空如也

1 2 3 4 5 ... 20
收藏数 228,394
精华内容 91,357
关键字:

应用软件