首页 文章 精选 留言 我的

精选列表

搜索[多租户],共10000篇文章
优秀的个人博客,低调大师

物联网多应用刺激32位MCU迅猛增长

物联网的发展趋势与MCU市场的关系密不可分,无论是连接用的小型节点、收集与记录数据的传感器中枢,主要都以MCU平台为基础。IHS早前预估针对连网汽车、可穿戴设备、建筑物自动化以及其他有关物联网应用的MCU市场预计将以11%的CAGR成长,2019年时达到28亿美元的市场规模。嵌入式主板 AI在机器智能学习发展的突破中催生了ASIC芯片需求,也衍生了IP、SSD、MCU的大商机。其中,机器人、工业应用、机器视觉、听觉等需求增加使模拟数据的产出也明显提升,利用MCU与传感器来得到外界信息的解决方案需求也将随之上扬。 意法半导体(ST)MCU市场部相关人士表示现在大部分人工智能都是在处理器或服务器级别的计算设备上实现的,MCU以前都是做一些相对简单的实时性应用,数据处理应用比较少。随着MCU制造工艺的变化使其与CPU之间的界限也开始变得模糊,MCU性能的提升使其可以多做一些算法,也能辅助人工智能的开发。ST推出的Cortex-M7内核高性能的MCU可以辅助大数据处理计算系统,也可以满足对实时性要求比较高的应用。比如在人工智能的一些神经网络引擎,已经可以在MCU上实现,可以帮助用户实现诸如场景识别等算法;另一方面,MCU所能提供的低功耗运行,将为消费类电子的AI算法应用带来更佳的用户体验。 传统的联网方式在中高端MCU产品中都已经有了,MCU集成无线连接技术已经成为了趋势,Wi-Fi、蓝牙、LoRa、NB-IoT都会集成到MCU的方案里,未来我们会根据具体的需求和应用场景决定集成的连接技术供客户选择,同时也将加快产品的开发速度以满足市场的需求。 除了联网功能,高效的传感器接口、各种功能和集成也是关键。有业内人士表示,将各种功能集成到MCU中有许多益处,包括更低的解决方案成本、更小的占板面积和更高的功能集成度,进而可产生更高的性能和更低的能耗。 内核和工艺限制MCU性能的提升,与CPU需要把所有程序都放到内存运行不同,MCU是将程序放到片上Flash进行读取和执行,Flash的工艺包括读取速度都影响MCU性能的提升。不过随着新的IP技术的出现,比如ART加速器在MCU内部的广泛应用,这些限制性能的瓶颈已经被突破。功耗方面,之前MCU普遍采用180nm甚至更高制程工艺,现在市面有推出的量产MCU基于40nm工艺,新的工艺不仅能降低功耗,也能对性能提升有所帮助。 从性能规划上来看,无论是50MHz、100MHz还是高性能400MHz、500MHz的系列都会有低功耗的产品。目的就是尽量在不降低性能和减少功能的前提下做到功耗最低,让客户有更好的选择。当然,要达到这个目标除了硬件方面的优化,软件方面也需要进行优化。因此不仅需要MCU厂商去努力,也需要方案厂商等的共同努力。另外,MCU的性价比在不断提升,与专用芯片的性价比越来越接近,这有利于MCU在物联网市场的推广。 随着32位MCU 开发应用的成本逐渐降低,在消费电子、通讯产品、工业、医疗等领域已经得到了广泛的应用,32位MCU出货量急起直追,但仍未超越8位MCU。其中很重要的原因就是8位MCU性能的持续提升以及本身的价格优势。 为了满足物联网智能家居、智能汽车、智能制造以及可穿戴设备、人工智能等众多应用的需求,MCU的连网性能、丰富的接口、更多的集成必不可少,性能、功耗、安全性的提升同样不容忽视。在人工智能、智能汽车等智能化应用的推动下,继全球领先的MCU企业之后大部分MCU企业都已经全面进军32位MCU领域,32位MCU将迎来更大幅度的增长。

优秀的个人博客,低调大师

OpenStack nova-network 支持多vlan技术实现片段代码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 #-*-encoding:utf-8-*- # #Copyright2012RedHat,Inc # #Author:EoghanGlynn<eglynn@redhat.com> # #LicensedundertheApacheLicense,Version2.0(the"License");youmay #notusethisfileexceptincompliancewiththeLicense.Youmayobtain #acopyoftheLicenseat # #http://www.apache.org/licenses/LICENSE-2.0 # #Unlessrequiredbyapplicablelaworagreedtoinwriting,software #distributedundertheLicenseisdistributedonan"ASIS"BASIS,WITHOUT #WARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.Seethe #Licenseforthespecificlanguagegoverningpermissionsandlimitations #undertheLicense. """ImplementationofInspectorabstractionforlibvirt.""" import libvirt import os,sys,time import traceback from lxml import etree from oslo.config import cfg from nova.openstack.common import logaslogging from nova import utils libvirt = None LOG = logging.getLogger(__name__) libvirt_opts = [ cfg.StrOpt( 'libvirt_type' , default = 'kvm' , help = 'Libvirtdomaintype(validoptionsare:' 'kvm,lxc,qemu,uml,xen)' ), cfg.StrOpt( 'libvirt_uri' , default = '', help = 'OverridethedefaultlibvirtURI' '(whichisdependentonlibvirt_type)' ), cfg.StrOpt( 'network_script_path' , default = '/etc/sysconfig/network-scripts/' , help = 'Centos6.6systemnetworkconfigpath' ), ] CONF = cfg.CONF CONF.register_opts(libvirt_opts) class LibvirtNetwork( object ): per_type_uris = dict (uml = 'uml:///system' ,xen = 'xen:///' ,lxc = 'lxc:///' ) def __init__( self ): self .uri = self ._get_uri() self .connection = None def _get_uri( self ): return CONF.libvirt_uri or self .per_type_uris.get(CONF.libvirt_type, 'qemu:///system' ) def _get_connection( self ): if not self .connection or not self ._test_connection(): global libvirt if libvirt is None : libvirt = __import__ ( 'libvirt' ) LOG.debug( 'Connectingtolibvirt:%s' , self .uri) self .connection = libvirt.openReadOnly( self .uri) return self .connection def _test_connection( self ): try : self .connection.getCapabilities() return True except libvirt.libvirtErrorase: print '*' * 100 if (e.get_error_code() = = libvirt.VIR_ERR_SYSTEM_ERROR and e.get_error_domain() in (libvirt.VIR_FROM_REMOTE, libvirt.VIR_FROM_RPC)): LOG.debug( 'Connectiontolibvirtbroke' ) return False raise def _lookup_by_name( self ,instance_name): try : return self ._get_connection().lookupByName(instance_name) except Exceptionasex: if not libvirt or not isinstance (ex,libvirt.libvirtError): LOG.error(ex) error_code = ex.get_error_code() msg = ( "Errorfromlibvirtwhilelookingup%(instance_name)s:" "[ErrorCode%(error_code)s]" "%(ex)s" % { 'instance_name' :instance_name, 'error_code' :error_code, 'ex' :ex}) LOG.error(msg) def get_vnic_name( self ,instance_name): domain = self ._lookup_by_name(instance_name) tree = etree.fromstring(domain.XMLDesc( 0 )) for iface in tree.findall( 'devices/interface' ): target = iface.find( 'target' ) if target is not None : vnic_name = target.get( 'dev' ) else : continue mac = iface.find( 'mac' ) if mac is not None : mac_address = mac.get( 'address' ) else : continue fref = iface.find( 'filterref' ) if fref is not None : fref = fref.get( 'filter' ) return vnic_name #Addwilliam,Bridgesupportsmultiplevlantechnology def bridge_multiple_vlan( self ,instance): network_info = dict () try : new_source_dev = instance[ 'hostname' ].split( '.' )[ - 1 ] if not new_source_dev: new_source_dev = 'br100' if 'vlan' not in new_source_dev: new_source_dev = 'br100' network_info[ 'vlan_name' ] = new_source_dev network_info[ 'instances_name' ] = instance[ 'name' ] #network_info['vnet_name']=self.get_vnic_name(instance['name']) network_info[ 'bond_name' ] = os.listdir( '/proc/net/bonding' )[ 0 ] network_info[ 'bond_dev' ] = '%s.%s' % (network_info[ 'bond_name' ],new_source_dev.split( 'vlan' )[ - 1 ]) network_info[ 'vlan_id' ] = new_source_dev.split( 'vlan' )[ - 1 ] check_result = self .check_bridge_vlan(network_info[ 'vlan_name' ],network_info[ 'bond_dev' ]) if not check_result: self .add_bridge_vlan(network_info) else : LOG.info( "Addwilliam,%sisexists,soisnotcreate" % network_info[ 'vlan_name' ]) except : LOG.error(traceback.format_exc()) def add_bridge_vlan( self ,network_info): utils.execute( "vconfig" , "add" ,network_info[ 'bond_name' ],network_info[ 'vlan_id' ],run_as_root = True ) LOG.info( "Addwilliam,utils.exeuctevconfigadd%s%s" % (network_info[ 'bond_name' ],network_info[ 'vlan_id' ])) utils.execute( "ifconfig" ,network_info[ 'bond_dev' ], "up" ,run_as_root = True ) LOG.info( "Addwilliam,utils.executeifconfig%sup" % (network_info[ 'bond_dev' ])) utils.execute( "brctl" , "addbr" ,network_info[ 'vlan_name' ],run_as_root = True ) LOG.info( "Addwilliam,utils.executebrctladdbr%s" % (network_info[ 'vlan_name' ])) utils.execute( "brctl" , "addif" ,network_info[ 'vlan_name' ],network_info[ 'bond_dev' ],run_as_root = True ) LOG.info( "Addwilliam,utils.executebrctladdif%s%s" % (network_info[ 'vlan_name' ],network_info[ 'bond_dev' ])) utils.execute( "ifconfig" ,network_info[ 'vlan_name' ], "up" ,run_as_root = True ) LOG.info("") #utils.execute("brctl","addif",network_info['vlan_name'],network_info['vnet_name'],run_as_root=True) bond_script = "%s/ifcfg-%s" % (CONF.network_script_path,network_info[ 'bond_dev' ]) vlan_script = "%s/ifcfg-%s" % (CONF.network_script_path,network_info[ 'vlan_name' ]) utils.execute( "chmod" , "777" ,CONF.network_script_path,run_as_root = True ) fp = open (bond_script, 'w' ) fp.write( "DEVICE=%s\n" % network_info[ 'bond_dev' ]) fp.write( "ONBOOT=yes\n" ) fp.write( "NM_CONTROLLED=no\n" ) fp.write( "BOOTPROTO=static\n" ) fp.write( "VLAN=yes\n" ) fp.close() fp = open (vlan_script, 'w' ) fp.write( "DEVICE=%s\n" % network_info[ 'vlan_name' ]) fp.write( "BOOTPROTO=static\n" ) fp.write( "ONBOOT=yes\n" ) fp.write( "TYPE=Bridge\n" ) fp.close() utils.execute( "chmod" , "755" ,CONF.network_script_path,run_as_root = True ) def check_bridge_vlan( self ,vlan_dev,bond_dev): vlan_list = bond_list = list () vlan = bond = False vlan_info = os.popen( "brctlshow|grepvlan|awk'{print$1}'" ).readlines() for i in vlan_info: vlan_list.append(i.strip()) bond_info = os.popen( "ifconfig|grepbond0|awk'{print$1}'" ).readlines() for i in bond_info: bond_list.append(i.strip()) if vlan_dev in vlan_list: vlan = True if bond_dev in bond_list: bond = True if vlan and bond: return True else : return False if __name__ = = "__main__" : instance = {u 'vm_state' :u 'building' ,u 'internal_id' : None ,u 'availability_zone' :u 'nova' ,u 'terminated_at' : None ,u 'ephemeral_gb' : 100 ,u 'instance_type_id' : 26 ,u 'user_data' : None ,u 'cleaned' : 0 ,u 'vm_mode' : None ,u 'deleted_at' : None ,u 'reservation_id' :u 'r-z2zsdcvl' ,u 'id' : 299 ,u 'security_groups' :[{u 'project_id' :u '50fd5d79ab184c399cdc22da78b8a7bc' ,u 'user_id' :u '373ddabe004846ebba268d7e88d13e16' ,u 'name' :u 'default' ,u 'deleted' : 0 ,u 'created_at' :u '2014-09-30T07:49:38.000000' ,u 'updated_at' : None ,u 'rules' :[],u 'deleted_at' : None ,u 'id' : 1 ,u 'description' :u 'default' }],u 'disable_terminate' : False ,u 'root_device_name' :u '/dev/vda' ,u 'user_id' :u '373ddabe004846ebba268d7e88d13e16' ,u 'uuid' :u 'c4cf7bc1-72bd-4523-bab0-fdd0f837fb46' ,u 'default_swap_device' : None ,u 'info_cache' :{u 'instance_uuid' :u 'c4cf7bc1-72bd-4523-bab0-fdd0f837fb46' ,u 'deleted' : 0 ,u 'created_at' :u '2015-04-16T03:36:51.000000' ,u 'updated_at' :u '2015-04-16T03:36:52.000000' ,u 'network_info' :u '[{"ovs_interfaceid":null,"network":{"bridge":"br100","subnets":[{"ips":[{"meta":{},"version":4,"type":"fixed","floating_ips":[],"address":"192.168.221.164"}],"version":4,"meta":{"dhcp_server":"192.168.221.11"},"dns":[{"meta":{},"version":4,"type":"dns","address":"192.168.252.25"},{"meta":{},"version":4,"type":"dns","address":"192.168.252.24"}],"routes":[],"cidr":"192.168.220.0/19","gateway":{"meta":{},"version":4,"type":"gateway","address":"192.168.192.1"}},{"ips":[],"version":null,"meta":{"dhcp_server":"192.168.221.11"},"dns":[],"routes":[],"cidr":null,"gateway":{"meta":{},"version":null,"type":"gateway","address":null}}],"meta":{"tenant_id":"50fd5d79ab184c399cdc22da78b8a7bc","multi_host":true,"should_create_bridge":true,"should_create_vlan":true,"bridge_interface":"bond0"},"id":"4a8546f2-3919-445a-9f87-b938491d41a5","label":"publics"},"devname":null,"qbh_params":null,"meta":{},"address":"fa:16:3e:c5:be:93","type":"bridge","id":"a7a69211-6aeb-4b54-9a20-803b96df73bf","qbg_params":null}]' ,u 'deleted_at' : None ,u 'id' : 299 },u 'hostname' :u 'gg-esc-web.vlan203' ,u 'launched_on' :u 'localhost' ,u 'display_description' :u 'gg-esc-web.vlan201' ,u 'key_data' : None ,u 'deleted' : 0 ,u 'scheduled_at' :u '2015-04-16T03:36:51.000000' ,u 'power_state' : 0 ,u 'default_ephemeral_device' : None ,u 'progress' : 0 ,u 'project_id' :u '50fd5d79ab184c399cdc22da78b8a7bc' ,u 'launched_at' : None ,u 'config_drive' :u' ',u' node ':u' localhost ',u' ramdisk_id ':u' ',u' access_ip_v6 ':None,u' access_ip_v4 ':None,u' kernel_id ':u' ',u' key_name ':None,u' updated_at ':u' 2015 - 04 - 16T03 : 36 : 52.727467 ',u' host ':u' localhost ',u' display_name ':u' gg - esc - web.vlan201 ',u' system_metadata ':[{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' windows ',u' key ':u' image_os_type ',u' deleted_at ':None,u' id ':4889},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 8192 ',u' key ':u' instance_type_memory_mb ',u' deleted_at ':None,u' id ':4890},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 0 ',u' key ':u' instance_type_swap ',u' deleted_at ':None,u' id ':4891},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':None,u' key ':u' instance_type_vcpu_weight ',u' deleted_at ':None,u' id ':4892},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 60 ',u' key ':u' instance_type_root_gb ',u' deleted_at ':None,u' id ':4893},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 26 ',u' key ':u' instance_type_id ',u' deleted_at ':None,u' id ':4894},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' windows - 16 - 8G - 100G ',u' key ':u' instance_type_name ',u' deleted_at ':None,u' id ':4895},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 100 ',u' key ':u' instance_type_ephemeral_gb ',u' deleted_at ':None,u' id ':4896},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 1 ',u' key ':u' instance_type_rxtx_factor ',u' deleted_at ':None,u' id ':4897},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' qcow2 ',u' key ':u' image_disk_format ',u' deleted_at ':None,u' id ':4898},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 74c9f78a - 06d6 - 432d - 8051 - 4eeecf8ebff7 ',u' key ':u' instance_type_flavorid ',u' deleted_at ':None,u' id ':4899},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' ovf ',u' key ':u' image_container_format ',u' deleted_at ':None,u' id ':4900},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 16 ',u' key ':u' instance_type_vcpus ',u' deleted_at ':None,u' id ':4901},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 0 ',u' key ':u' image_min_ram ',u' deleted_at ':None,u' id ':4902},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 60 ',u' key ':u' image_min_disk ',u' deleted_at ':None,u' id ':4903},{u' instance_uuid ':u' c4cf7bc1 - 72bd - 4523 - bab0 - fdd0f837fb46 ',u' deleted ':0,u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' updated_at ':None,u' value ':u' 406c0425 - b8d3 - 4607 - beff - 8fa529b46b7a ',u' key ':u' image_base_image_ref ',u' deleted_at ':None,u' id ':4904}],u' task_state ':u' spawning ',u' shutdown_terminate ':False,u' cell_name ':None,u' root_gb ':60,u' locked ':False,u' name ':u' instance - 0000012b ',u' created_at ':u' 2015 - 04 - 16T03 : 36 : 51.000000 ',u' locked_by ':None,u' launch_index ':0,u' memory_mb ':8192,u' vcpus ':16,u' image_ref ':u' 406c0425 - b8d3 - 4607 - beff - 8fa529b46b7a ',u' architecture ':None,u' auto_disk_config ':False,u' os_type ':u' windows ',u' metadata':[]} sc = LibvirtNetwork() sc.bridge_multiple_vlan(instance) 本文转自 swq499809608 51CTO博客,原文链接:http://blog.51cto.com/swq499809608/1633811

优秀的个人博客,低调大师

物联网技术泡沫多 期望与现实不匹配

目前的情况来看,物联网技术即使含有太多泡沫、期望与现实不匹配、达不到完全的契合,但是我们依然可以寄希望于物联网能够带给我们更极致的生活体验。 如今谈到物联网,我们不免会想到技术、标准化和服务,这也是当下热度很高的几个词。 关于技术,我们可以联想到全球最具权威的IT研究与顾问咨询公司——Gartner公司。关注物联网行业的人也许在去年见过一篇报道《Gartner技术成熟度曲线:物联网登顶2014》。 从这两幅图的对比中,我们可以看到IoT由原来的位置上升到顶端,短短一年内速度如此迅速,可见目前IoT的发展之快。这么看来,IoT市场从安定下来到最后达到稳定期可以比我们预期的时间来得短。另一方面,大数据与云计算已经趋于稳定的成熟期,而IoT沿着这两个技术的发展路径紧随其后,可以看出IoT的发展一定程度上依赖于这两个技术的发展。 虽然上面所提的是一篇过时了的报道,但是我只是想由此引出其中所涉及到的关键点:技术周期。对于物联网来说,已经过了诞生的躁动期,而今正处在过高期望的峰值期并即将迎来泡沫化的狂热期,之所以这么说是因为现在大家确实对物联网的期望太高了,期待这一项新技术能够解决社会上所有的问题、希望它就是万能的。市面上比比皆是的智能手机、智能手环、智能电视等,许多企业一有新产品可以发布,就想拿着“智能”当定语。从这些小细节其实就能看出所谓的过高的期待!但是,另一方面,包括企业与个人也逐步认识到这是不可能的,技术事实上只能解决部分问题。“一落千丈”虽然是个贬义词,但是从Gartner技术成熟曲线来看它却有着积极意义,因为它预示着该项技术即将迎来稳步爬升的光明期以及更久之后的成熟阶段。 在大会上也提出,对于物联网的各项指标,目前在各行各业里面的各个企业都想建立自己的一套标准,都有野心将自己的标准最大化甚至全球化。但是,无论哪个企业又都不愿意“委屈”自己去迎合他人所建立起来的标准。之前,高通Technologies市场营销高级总监Michelle Lyden-Li表示:“物联网生态系统的发展真正障碍并不在技术,而在于系统的互操作性,实现互操作性的关键是实现标准化,尤其是协议的标准化。只有遵循统一的标准协议,不同终端才能彼此发现、连接和对话”。所以说无法将协议、平台等标准化成了物联网快速发展路上的一块绊脚石!这就好像在玩拼图游戏,每个人手中只握着小块图片,需要大家齐心协力的合作才能以最快的速度将真正的拼图拼完整。但是,笔者认为实现小图拼成大图的概率接近于0,企业之间想要达到最好的合作状态几乎是不可能的,无论如何努力还是只能是在一定程度上优化如今割裂的状态。 以目前的情况来看,物联网技术即使含有太多泡沫、期望与现实不匹配、达不到完全的契合,但是我们依然可以寄希望于物联网能够带给我们更极致的生活体验。毕竟,各个大企业小企业都致力于将自己的产品真正的转化成服务。举个例子,京东已然不仅仅只是一个电商平台,人类已经不再满足于它所能提供的某件商品,而是随着这件商品顾客所能享受到的服务,所谓的服务就,比如说是上门安装、售后服务等全套服务,所以说京东能在原本商家与消费者就能完成的交易链上,依然屹立不倒,甚至是日益蓬勃发展的关键原因就是其提供人真正需要的服务。 另一个同样以人为核心提供人性化的服务的例子就是麦当劳与肯德基,也许你就像我一样虽然不只一次进出于这两个场所,但是从来未留意到一些细节,必须要等到他人提醒后才恍然大悟。这其中一个细节就是当我们进入这两个场所时需要拉门而离开时则是推门,为什么说这是以服务为核心的细节呢?因为考虑离开时的你是“满载而归”的,没办法伸手拉门但是推开的话你只需要用身体就可做到。 这种颠覆了以前人处在整个产业链条末端、被动接受企业提供的服务的模式,如今已经是一种围绕人性,以人为核心来生产、设计产品并且提供一整套服务的模式。 但是,事实上这种颠覆在很多方面表现为被扭曲了的颠覆。可以这么理解,智能手机是手机行业发展的必然趋势,是因为消费者有这样的需求,企业在这基础上设计并提供相应的一个产品。而其他很多智能单品的出现则是相反的一个过程,它是企业想要生产智能产品,然后消费者只能被动地接受,但又不能否认这不是以满足人的需求而出现的,只不过将少数人的需求强加给所有人。举个例子来说,你现在想去商场买电视但是你买不到普通电视,你所看到的全部是智能电视,而这正是因为如今的企业热衷于向消费者提供所谓的智能产品,并不是消费者有这样一种需求。虽说有点接近于“胁迫”消费者接受产品。但是呢,如果这种“胁迫”建立在提供一个更加便捷的、可通过统一的平台连接上网络、可提供比原本更贴心的服务的前提下,那么消费者当然也乐意享受这种“胁迫”的。 原本看似不在同一个维度的三个词-----技术、标准化和服务,但是通过以上的论述,反而将它们紧密地联系起来,可以将它们看成是某种“团聚”,让它们成为IoT行业发展的三个不容忽略的点:技术是基础,标准化是关键,而服务则是比产品本身的更吸引人的亮点。 作者:何妍 来源:51CTO

优秀的个人博客,低调大师

大数据产业迎多政策支持 产业迎来爆发期

记者从国家发改委等部门获悉,决策层将出台政策“组合拳”,支持大数据产业发展,其中包括构建国家大数据平台、编制大数据产业规划等。 政府数据统一开放平台2018年建成 作为战略新兴产业重要分支之一,大数据产业正迎来政策层面的诸多支持。其中,《促进大数据发展行动纲要》已在2015年印发。 “2016数博会已升格为国家级盛会。除此之外,近日工信部信息化和软件服务业司司长谢少锋透露,正在制定大数据产业‘十三五’发展规划,预计在今年下半年发布。”分析人士刘阳说,决策层对大数据的政策助力会越来越多。 记者也从国家发改委等部门了解到,决策层对于支持大数据产业将有一系列的“组合拳”,包括国家大数据平台、大数据产业规划、大数据产业链细化政策以及数据可视化的技术攻关等。 “2017年底前,我国将构建跨部门的政府数据共享交换平台;2018年底前,建成国家政府数据统一开放平台。”国家发改委相关人士对记者表示,国家大数据平台是由国家主导、服务全国的大数据平台,是国家重要基础信息设施。 据悉,该平台包括数据共享交换、数据开放等基础支撑平台以及数据汇聚分析等应用平台。 大数据产业迎来爆发期 “中国大数据应用市场快速增长,2015年市场规模46亿元,同比增长133%。2016年有望突破百亿规模。”刘阳分析认为,大数据产业正迎来爆发期。 记者也注意到,一些企业的发展印证了大数据产业进入快速发展阶段的事实。以挂牌新三板的数据堂为例,其2015年度实现营业收入6814.53万元,同比增长270.86%;净利润580.60万元,同比增长249.31%。 事实上,大数据已经渗透到每一个行业和业务职能领域,物联网、云计算、移动互联网、车联网、手机、平板电脑、PC以及遍布各个角落的各种各样的传感器,无一不是大数据来源或者承载的方式。 “大数据将对国家治理模式、企业的决策、组织和业务流程、个人生活方式等产生巨大的影响。”刘阳说,信息技术发展到现阶段,未来的很多行业都是和大数据结合做解决方案,大数据产业的爆发将是必然趋势。 本文转自d1net(转载)

优秀的个人博客,低调大师

我国物联网技术在多领域渐露锋芒

物联网概念自被提出至今,一直被全球业界公认为将是继互联网之后的下一场信息技术革命。作为信息产业大国之一,我国很早就开始了对物联网的研究,近年来,随着技术的成熟和消费市场的扩大,我国物联网技术已经在城市管理、生产作业、居民生活等诸多领域渐露锋芒。 全球信息产业研究机构国际数据公司(IDC)预测,到2020年,全球接入物联网的设备数量将达到281亿台,物联网产业规模将高达7.1万亿美元。 “互联网加强了人与人之间的信息沟通,物联网则加强了人与物、物与物之间的信息沟通,促进了各行业、部门之间的信息开放共享,对推动新一轮产业变革、实现绿色可持续发展具有重要意义”。工信部科技司高技术处副处长李伟在近日举行的中国通信行业物联网大会上说,中国政府高度重视物联网产业,已经发布一系列政策文件推动其快速发展。 随着经济的飞速发展,我国城镇化步伐大大加快,大量农村人口向城市转移,但与此同时,人口膨胀、土地资源紧张、交通拥堵、环境污染、治安恶化等问题接踵而至,传统的城市管理模式难以为继。破解这些难题、实现城市可持续健康发展的办法就是运用物联网技术,让城市“智慧”起来,进行精细化管理,最大限度地利用各类资源。 中兴通讯公司在智慧城市建设中一直居于领跑地位。该公司政府行业首席技术官张军介绍说,中兴的智慧城市解决方案运用具有自主知识产权的物联网、云计算、大数据技术,在总系统下有智慧政务、平安城市、智慧交通、智慧环保等10余个可以互联互通的子系统,通过遍布城市各个角落的传感器将大数据搜集汇总,并自动处理分析,供决策部门参考。 据悉,采用这一智慧城市解决方案后,各政府部门将拥有统一的数据共享平台,部门之间的藩篱将被打破,多部门联合、科学决策的效率大大提高;交通管理部门可以24小时不间断获悉城市所有路段的车流量,以及所有地铁站的人流量,精准把握拥堵的地点、时段,以制定细致的应对方案;环保部门可以实时监测水、空气质量,甚至污染源成分,以对症下药;医院实现医疗信息共享,患者在不同医院就诊,医生可以上网查阅其医疗健康档案库,获得其身体健康状况、就诊历史等所有信息,避免重复性工作;公民使用一张“市民卡”,可以享受社保、医保、公积金、水电气缴费、图书借阅、存贷款、教育、公司注册等众多功能…… 截至目前,中兴通讯的智慧城市解决方案已经在全球40多个国家、超过140个城市落地,获得了各地政府、企业和市民的认可。 不仅是中兴通讯,作为三大电信运营商之一,中国电信公司也紧紧抓住全国各地大力建设高新技术产业园的机会,研发并推广“智慧园区”解决方案。 中国电信公司北京研究院研究员黄鹏表示,如今的园区早已不是单纯的办公场所,通过采用物联网等新技术,越来越多的园区基础设施具备了信息自动采集能力,大大促进了生产、生活的改善。 他介绍说,中国电信公司的“智慧园区”解决方案包括了智能环境、智能停车、智能共享单车、智能管理、智能楼宇和智能安防六大功能。 例如,智能环境方面的智能垃圾桶可以自己“感知”储存的垃圾量,当垃圾达到一定量时,就会自动压缩垃圾,如果垃圾多到不能继续压缩,垃圾桶就会发信息通知环卫工人。据悉,一台这样的智能垃圾桶的垃圾储存量是相同体积普通垃圾桶的8倍!不仅如此,智能垃圾桶还是大数据搜集装置,可以把垃圾重量数据实时传给控制中心,使操作人员了解哪些区域、时段产生垃圾最多,从而调整垃圾桶、环卫工人的数量和位置。 再如,在智能楼宇方面,物联网系统可以根据电、水、气的消耗量数据,自动制定最佳节能方案;根据环境监测数据,自动调节灯光亮度、空调和暖器温度,决定是否启用空气净化器等;此外,它还可以自动检测楼内主要设备的运行状态、使用寿命等,如果发现设备可能出现故障,会自动报警,通知维修人员。 物联网不仅被应用于城市、园区,也走进了寻常百姓家中。作为国内三大白色家电巨头之一,海尔最先推出了智慧冰箱。据海尔云厨商务运营副总裁方卫民介绍,智慧冰箱可以自动检测食材新鲜程度、识别变质食物;可以根据食材种类判断是否营养均衡,提醒用户补充缺少的食物类型;可以根据冰箱里储存的食材编制多种多样的烹饪方案,供用户参考;可以根据外部环境自动调节冰箱的温度、湿度,最大限度地帮助食物保鲜;此外,冰箱门还被制作成触屏显示器,用户可以方便快捷地上电商网站购买食品。 标准不统一、不同企业生产的设备无法互联互通向来是制约各国物联网产业发展的瓶颈。为此,我国在多年前就已成立国家物联网基础标准工作组和多个物联网应用标准工作组,不断研究、制定各项标准,不但使中国的物联网标准化达到世界领先水平,而且让我国成为国际物联网标准制定的主导方之一。 本文转自d1net(转载)

优秀的个人博客,低调大师

阿里云推荐码w67xx0优惠多

阿里云官方推荐码 w67xx0 永久有效。任何人都可以使用,不限使用人数。 阿里云服务器是目前最可靠,最稳定的云服务器,自推出以来,一直受到广大站长的喜爱。以其价格便宜,扩展性高,并且云服务器的内存,cpu,带宽,可根据自已的网站情况,可随时自由配置,所以说阿里云服务器是一款性价比特别高的云服务器。目前阿里云服务器有国内节点,香港节点,韩国节点,新加坡节点,美国节点。如果你的域名已经备案,可选择国内节点,如果域名没有备案可选择香港节点,新加坡节点,韩国节点及美国节点。总体来说,香港节点的速度很快,和国内节点没什么区别。美国的节点可能要慢点。(香港,韩国,新加坡,美国不需备案,开通即可使用) 下面介绍下阿里云服务器的购买流程及阿里云推荐码 w67xx0的使用方法(注意:阿里云可能会改版,改版后的图片可能和下面的图片有差异,但购买流程都差不多,阿里云官方推荐码 w67xx0 是永久有效的) 首先打开阿里云官网 会看到如下图片(购买阿里云服务器需要先注册阿里云的账号) 点击最上方的产品选项 ,会看到有个云服务器ECS 点击云服务器ECS,就会看到如下图 点击立即购买,就会看到如下图 大部分选项,我们保持默认就行了。 1.其中的地域选项,如果你的域名备案了,可选择国内的华东,华北,华南地区。如果域名没有备案,可选择香港,新加坡,美国(只要不是国内的地域,不需要备案,开通即可使用) 2.网络类型,我们选择经典网络即可。 3.其中的实例规格,默认的是1核2GB,其实我们刚开始做网站,流量不会很大,可以选择1核1GB(也能节省很多钱),就能完全满足需要,如果到时候不能满足需要,可自行配置升级到1核2GB,很简单也很方便。当然如果你有钱的话,可选择默认的1核2GB 4.带宽选择默认的1MB就行了,如果到时候,网站流量大了,可以随时升级带宽,很方便的。 5.公共镜像(就是让你选择阿里云服务器的操作系统),我们一般都是选择windows server,版本随便选一个就行了,使用上都差不多的,记得要选中文哦。 6.然后到下面设置密码,就是登陆云服务器的密码 7.实例名称,你自已随便起个名字吧,这个无所谓的。 8.最后是选择购买时长,一般建议选择一年以上,因为阿里云只对首次购买的用户,有优惠。购买一年,只需付十个月的费用, 在加上使用阿里云的推荐码 w67xx0 ,能够优惠很多钱的。只有首次购买有优惠,以后无论是购买还是续费,都没有优惠。所以购买的时长,尽量选择时间长一点的。阿里云服务器是马云的产业,所以大家不用担心,服务器不稳定,更不用担心跑路,哈哈。阿里云的服务器还是最放心的。 一切选择好了之后,右下角有个立即购买的按钮,点击立即购买,就转到了购买页面,如下图 下面最关键的一步,右下角有个使用推荐码 ,将其勾选上,并将这个六位数的推荐码 w67xx0填写上。即可在原价的基础上再优惠 ,能省很多钱哦。然后点击去支付即可,到支付页面,你即可看到节省了很多钱。购买一年的阿里云服务器国内节点,只需要几百元即可。如果是香港的节点,要贵点,香港的一年需要一千多元,比国内的要贵。不过香港的不需要备案,开通即可使用。经测试,香港节点和国内节点,速度都差不多的。 好了,就到这里了,其实很简单的。阿里云官方推荐码 w67xx0 送给有需要的站长朋友,永久有效。

优秀的个人博客,低调大师

docker(8):使用alpinelinux 构建 golang http 看看能有多小

1,alpine linux 非常小 首先 alpine 非常的小,安装上了bash 之后也才 5mb。 golang 不需要其他的依赖,想看看是不是能在 alpine 上面跑呢。 搭建一个golang的环境,而不是把golang的环境放到alpine上面。 2,首先在centos 搭建golang环境 https://golang.org/doc/install 下载然后解压缩: tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz 设置环境变量: export PATH=$PATH:/usr/local/go/bin export GOPATH=/data/go 假设gopath 在/data/go目录下面。 编写http.go package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) http.ListenAndServe("0.0.0.0:8080", nil) } 非常简单。 go build http.go ./http 3,编写docker build vi Dockerfile FROM docker.io/alpine:latest MAINTAINER demo <juest a demo> RUN apk add --update curl bash && \ rm -rf /var/cache/apk/* WORKDIR /data ONBUILD COPY http /data EXPOSE 8080 ENTRYPOINT ["/data/http"] 创建了一个最小的docker镜像环境。然后把源设置成清华的。并且安装了curl和 bash 工具。 4,启动 demo/go-http 1.0 b180c236066d 11 seconds ago 9.555 MB 一共就只有 10mb的容器,非常的小呢。 但是但是现实还是残酷的。由于alpine太精简了。造成golang没有起来。 看了一个内核linux 是启动不了 golang的。 最终的dockerfile: FROM docker.io/golang:latest MAINTAINER demo <juest a demo> RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories RUN apk add --update curl bash && \ rm -rf /var/cache/apk/* WORKDIR /data ONBUILD COPY http /data EXPOSE 8080 ENTRYPOINT ["/data/http"] 还是用到了docker官方的golang环境,才能启动。 否则报错 No such file or directory 可执行文件都找不到。容器无法启动。 5,总结 本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53615757 未经博主允许不得转载。 博主地址是:http://blog.csdn.net/freewebsys 最终golang 在一个官方的环境下启动了。 没有弄明白golang到底需要啥环境。 最终大小为 679.6 MB 还以为 10mb 就能解决问题呢。看来是一个不错的探索。 其他环境也可以研究下。

优秀的个人博客,低调大师

iOS开发 落地消息多的处理办法(仅供参考)

1.首先要知道一点,你的消息储存是用数据库储存的! 看了一下微信和qq的消息处理,一般情况下第三方(亲加,容云,环信都会有本地的数据库)处理过的! 但是我发现,最近一个需求要求开发@”消息已读“@”消息送达“的处理,和UI显示。 我想了各种办法,GCD线程异步,带来的会有另外的一个问题,多线程访问同一个资源,be locked。或者说你在接收到消息的时候开一个线程,接到消息的时候开一个线程。一般情况下是没有问题的。但是重新一个账号登陆的时候就会有以前你读过和没有读过的消息!(如果你们购买了,app和网页消息同步的时候)! 解决办法: 后台开一个永驻线程(有崩溃主线程中也不受到影响),而且也不会多个线程访问同一个路径下的数据库 @property (nonatomic, strong) NSThread *thread; /***开启一个永驻线程**/ - (void)threadRunloopPoint:(id)__unused object{ NSLog(@"%@",NSStringFromSelector(_cmd)); @autoreleasepool { [[NSThread currentThread] setName:@"changzhuThread"]; NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; //// 这里主要是监听某个 port,目的是让这个 Thread 不会回收 [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; [runLoop run]; } } - (NSThread *)thread{ if(!_thread){ _thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadRunloopPoint:) object:nil]; [_thread start]; } return _thread; } //接收到已读消息回执的代理 - (void)NotificationCenterReadMessage:(NSNotification *)notification{ ReadMessageTime * readMark = [[ReadMessageTime alloc]init];//已读回执消息对象(自己建立) readMark.cType = [notification.userInfo objectForKey:@"cType"]; readMark.messageTime = [notification.userInfo objectForKey:@"messageTime"]; readMark.tId = [notification.userInfo objectForKey:@"tId"]; [self performSelector:@selector(insertReadMessageTime:) onThread:self.thread withObject:readMark waitUntilDone:NO modes:@[NSDefaultRunLoopMode]]; } - (void)insertReadMessageTime:(id)readMark{ [[[MyFMDB alloc]init] insertReadMessageTime:readMark]; }

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册