日期: 2021 年 3 月 25 日

iOS开发笔记–keyboard相关

*近一个项目有键盘相关的需求:自定义键盘与系统键盘切换。就将键盘相关的知识点顺了一遍。

一、UITextInputTraits 协议

该协议定义了一些与键盘输入相关的属性。所有支持键盘输入的对象都必须接受这个协议,目的是为了与文本输入管理系统正确地交互。

UITextField 和 UITextView ,UISearchBar都支持该协议。

@protocol UITextInputTraits <NSObject>

@optional

@property(nonatomic) UITextAutocapitalizationType autocapitalizationType;
// 定义输入文本的自动大写类型 default is UITextAutocapitalizationTypeSentences
@property(nonatomic) UITextAutocorrectionType autocorrectionType;
// 定义输入文本的自动更正类型 default is UITextAutocorrectionTypeDefault
@property(nonatomic) UITextSpellCheckingType spellCheckingType NS_AVAILABLE_IOS(5_0);
// 定义输入文本的拼写检查类型 default is UITextSpellCheckingTypeDefault;
@property(nonatomic) UIKeyboardType keyboardType;
// 定义键盘类型 default is UIKeyboardTypeDefault
@property(nonatomic) UIKeyboardAppearance keyboardAppearance;
// 定义键盘外貌类型 default is UIKeyboardAppearanceDefault
@property(nonatomic) UIReturnKeyType returnKeyType;

// 定义键盘returnKey的类型 default is UIReturnKeyDefault (See note under UIReturnKeyType enum)
@property(nonatomic) BOOL enablesReturnKeyAutomatically;
// default is NO (when YES, will automatically disable return key when text widget has zero-length contents, and will automatically enable when text widget has non-zero-length contents)
@property(nonatomic,getter=isSecureTextEntry) BOOL secureTextEntry;
// 输入文本是否加密 default is NO

@end

typedef NS_ENUM(NSInteger, UIKeyboardType) {
UIKeyboardTypeDefault, // Default type for the current input method.
UIKeyboardTypeASCIICapable,
// 字母键盘 Displays a keyboard which can enter ASCII characters, non-ASCII keyboards remain active
UIKeyboardTypeNumbersAndPunctuation, // Numbers and assorted punctuation.
UIKeyboardTypeURL, // A type optimized for URL entry (shows . / .com prominently).
UIKeyboardTypeNumberPad, // A number pad (0-9). Suitable for PIN entry.
UIKeyboardTypePhonePad, // A phone pad (1-9, *, 0, #, with letters under the numbers).
UIKeyboardTypeNamePhonePad, // A type optimized for entering a person’s name or phone number.
UIKeyboardTypeEmailAddress, // A type optimized for multiple email address entry (shows space @ . prominently).
#if __IPHONE_4_1 <= __IPHONE_OS_VERSION_MAX_ALLOWED
UIKeyboardTypeDecimalPad, // A number pad with a decimal point.
#endif
#if __IPHONE_5_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
UIKeyboardTypeTwitter, // A type optimized for twitter text entry (easy access to @ #)
#endif

UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, // Deprecated

};

这个属性决定了在输入文本中,是否支持拼写检查。

二、定制键盘

@interface UIResponder (UIResponderInputViewAdditions)

// Called and presented when object becomes first responder. Goes up the responder chain.
@property (readonly, retain) UIView *inputView NS_AVAILABLE_IOS(3_2);
//键盘视图,定制的键盘视图要赋值给该属性
@property (readonly, retain) UIView *inputAccessoryView NS_AVAILABLE_IOS(3_2);
//键盘辅助视图,即位于键盘视图上面一些额外的辅助性视图,可在上添加辅助功能键

// If called while object is first responder, reloads inputView and inputAccessoryView. Otherwise ignored.
– (void)reloadInputViews NS_AVAILABLE_IOS(3_2);

@end

UITextField 和 UITextView 都提供了以上方法。

%title插图%num
如上图所示,绿色视图为 inputAccessoryView。下面的是定制的键盘视图

示例代码如下

– (void)viewDidLoad
{
[super viewDidLoad];

self.numberTextField = [[UITextField alloc] initWithFrame:CGRectMake(20, 120, 280, 80)];
self.numberTextField.backgroundColor = [UIColor darkGrayColor];
self.numberTextField.delegate = self;
self.numberTextField.keyboardType = UIKeyboardTypeNamePhonePad;

self.numberTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
self.numberTextField.autocorrectionType = UITextAutocorrectionTypeNo;
self.numberTextField.spellCheckingType = UITextSpellCheckingTypeNo;
self.numberTextField.returnKeyType = UIReturnKeySearch;

_inputView = [[AZStockKeyboardView alloc] initWithFrame:CGRectMake(0, 0, rect.size.width, 216)];
_inputView.delegate = self;
self.numberTextField.inputView = _inputView;
UIView *accessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
accessoryView.backgroundColor = [UIColor greenColor];
self.numberTextField.inputAccessoryView = accessoryView;
[self.view addSubview:self.numberTextField];
}

切换系统键盘

– (void)customedKeyboardDidChange
{
self.numberTextField.inputView = nil;
[self.numberTextField reloadInputViews];
}

系统键盘切换定制键盘

– (void)systemKeyboardDidChange
{
self.numberTextField.inputView = _inputView;
[self.numberTextField reloadInputViews];
}

给定制的键盘添加系统键盘按键声音

1.定制键盘视图要继承UIView,接受 UIInputViewAudioFeedback 协议,并实现协议方法

@interface AZStockKeyboardView : UIView<UIInputViewAudioFeedback>
{

}

#pragma mark UIInputViewAudioFeedback protocol methods

– (BOOL)enableInputClicksWhenVisible
{
return YES;
}

2.在定制的键盘的按键响应的方法中,调用 [[UIDevice currentDevice] playInputClick]

– (void)numberButtonClicked:(id)sender
{
[[UIDevice currentDevice] playInputClick];
}

三、改造系统键盘

由于需要定制键盘和系统键盘互相切换,就需要将系统键盘的切换键盘的按键响应我们自己的切换键盘方法。

Apple官方并没有提供这种方法,目前可行的做法是将该按键用我们自己的创建的按键将其覆盖。

UITextEffectsWindow       //键盘所在window

UIPeripheralHostView      //键盘视图所在的父视图  定制的键盘视图,辅助视图都放在这个视图上面

UIKeyboardAutomatic      //键盘视图

UIKeyboardImpl               //自己按英文的意思理解的,键盘的实现视图

UIKeyboardLayoutStar     //自己按英文的意思理解的,键盘的布局视图

UIKBKeyplaneView          //

UIKBKeyView                   //根据description判断,是键盘的功能性按键的视图(除字母,数字之外,类似删除键,空格键等)

以上视图都有层级关系,从上到下,上面的视图是下面视图的父视图

完成覆盖按键的任务,需要获取 UIKeyboardAutomatic 视图,然后把定制的切换按键添加到该视图上

获取系统键盘视图
– (UIView *)getSystemKeyboardView
{
UIView *returnView = nil;

UIWindow *keyboardWindow = nil;
for (UIWindow *window in [[UIApplication sharedApplication] windows])
{
if (![NSStringFromClass([window class]) isEqualToString:NSStringFromClass([UIWindow class])])
{
keyboardWindow = window;
break;
}
}
if (keyboardWindow == nil)
return nil;

for (UIView *firstView in [keyboardWindow subviews])
{
if ([[firstView description] hasPrefix:@”<UIPeripheralHostView”])
{
for (UIView *secondView in [firstView subviews])
{
if ([[secondView description] hasPrefix:@”<UIKeyboardAutomatic”])
{
returnView = secondView;
}
}
}
}

return returnView;
}

监听键盘事件

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];

向键盘视图上覆盖按键

– (void)keyboardDidShow:(id)notification
{
_keyboardDefaultView = [self getSystemKeyboardView];
if (_keyboardDefaultView)
{
_switchNumButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_switchNumButton setTitle:@”123″ forState:UIControlStateNormal];
[_switchNumButton setBackgroundImage:[UIImage imageNamed:@”num.png”] forState:UIControlStateNormal];
_switchNumButton.frame = CGRectMake(1, 173, 78, 42);
[_switchNumButton addTarget:self action:@selector(changeCutomeButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[_keyboardDefaultView addSubview:_switchNumButton];
}
}

效果如下:

%title插图%num

注意:由于所有系统键盘都是所有程序共享的,所以在当前界面消失前,或者其他类型的输入视图调用键盘前,要将我们自己定制的按键移除。

否则,从其他应用调用该类型键盘,都可以看到我们定制的按键。

同时也应该在调用键盘前,即键盘弹出时,在用我们定制的按键覆盖之前加限定条件

– (void)keyboardDidShow:(id)notification
{
_keyboardDefaultView = [self getSystemKeyboardView];
if (_keyboardDefaultView && [_numberTextField isFirstResponder])
{
_switchNumButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_switchNumButton setTitle:@”123″ forState:UIControlStateNormal];
[_switchNumButton setBackgroundImage:[UIImage imageNamed:@”num.png”] forState:UIControlStateNormal];
_switchNumButton.frame = CGRectMake(1, 173, 78, 42);
[_switchNumButton addTarget:self action:@selector(changeCutomeButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[_keyboardDefaultView addSubview:_switchNumButton];
}
else
{
if (_switchNumButton) {
[_switchNumButton removeFromSuperview];
}
}
}

使用Python来做物联网

使用Python来做物联网,就是这么easy!

%title插图%num

搭建整套物联网系统的方法有很多,*近四处捣鼓,使用python + 阿里云搭建一套*简单的物联系统,可以将单片机上的数据通过阿里云传输到PC端。 一、基本结构 先看架构图 框架.png 二、设备端接入 物联网终端是用的ESP32,是一款自带蓝牙和Wifi的单片机。利用它可以直接接入互联网,无需其他模块。当然你可以将现在流行的NB-Iot模块来联网,不过需要自己写一下驱动程序。我买的模块是支持micropython开发的,在淘宝上可以搜索到,用起来很方便。有时间我会补上这一块的初步教程。 ESP32模块.jpg Micropython是可以在低端硬件上运行的python,可以使用python语言直接操作IO 和MCU的外设比如UART、I2C等,用起来非常方便,不要搭建复杂的开发环境,也不需要学习寄存器配置。作为一个对传统MCU开发非常熟悉的硬件工程师来说,感觉操作起来非常简单。目前Micropython已经支持很多硬件了,应该用比较广泛的STM32部分系列也被支持。Micropython也已经支持很多常用的库,比如蓝牙,telnet,mqtt等。下面这个链接是micropython的中文论坛。 www.micropython.org.cn/bbs/forum.p… ESP32 通过wifi 接入互联网,使用mqtt协议接入阿里云,将温度数据上传至阿里云。在云端通过消息订阅可以直接查看温度信息。在PC端使用python调用MQTT协议,接入到阿里云。但是PC端和ESP32在阿里云上是两个不同的设备,需要通过阿里云来转发信息,这样PC就可以拿到ESP32上传的数据了。 ESP32 上的代码如下: from umqtt.simple import MQTTClient import usocket as socket import time import wifi

wifi.connect()

#Demo_01 ProductKey = “”#使用你自己的 ClientId = “1234|securemode=3,signmethod=hmacsha1|” DeviceName = “Demo_01” DeviceSecret = “**********************”#使用你自己的

strBroker = ProductKey + “.iot-as-mqtt.cn-shanghai.aliyuncs.com” Brokerport = 1883

user_name = “Demo_01&”#使用你自己的 user_password = “*************************************”#使用你自己的

print(“clientid:”,ClientId,” “,”Broker:”,strBroker,” “,”User Name:”,user_name,” “,”Password:”,user_password,” “)

def connect(): client = MQTTClient(client_id = ClientId,server= strBroker,port=Brokerport,user=user_name, password=user_password,keepalive=60) #please make sure keepalive value is not 0

有几点需要说明: 1.代码中的wifi.connect()函数需要自己编写,网上能搜到类似的,也可以打赏私信我所要源码。 2.阿里云物联网平台的接入需要进行三元组认证,会根据一定的规则生成登录名和密码,这个网上信息还是比较全面的。 3.向阿里云物联网平台发布消息的格式一定要按照代码中所写,网上很多代码,但是对这一块的描述都不清楚。 Micropython使用的umqtt.simple库,一定要设置keepalive时间,否则无法连接。这一点我是摸索了好久,*终通过查看库的源码才发现的问题。 三、云端设置 在云端建立一个高级产品,并创建两个设备,以供ESP32 和PC连接。 device.JPG 需要在产品中定义一下功能。 device_define.JPG 云端和设备端都建立好了之后,可以查看设备运行状态看到数据上传 云端数据查看.JPG 这是查看数据记录得到的结果 云端数据记录.JPG 当你看到正确的数据之后,就说明你的成功接入物联网并上传了数据。 接下来就是*重要的部分——设置是使用规则引擎来进行数据转发,将设备demo_01的数据转发到demo_02。这一步的语法很重要,虽然有官网有详细教程,但是当时还是搞了好久才完全正确。 规则查询语句: SELECT items.IndoorTemperature.value as IndoorTemperature FROM “/sys/use-your-productkey-here/Demo_01/thing/event/property/post” WHERE items.IndoorTemperature.value > 0 四、PC端接入 PC 端使用python模拟MQTT设备登陆阿里云订阅消息就行了,只要装好python很快就可以实现,网上也有很多代码。代码的很大一部分就是在做三元组认证,可以将这部分稍微修改一下来计算ESP32 登陆时所需的 PC端python代码如下: # coding=utf-8 import datetime import time import hmac import hashlib import math

try: import paho.mqtt.client as mqtt except ImportError: print(“MQTT client not find. Please install as follow:”) print(“pip install paho-mqtt”)

#Demo_02 ProductKey = “*********”#使用你自己的 ClientId = “2234” # 自定义clientId DeviceName = “Demo_02” DeviceSecret =”**********************************8″#使用你自己的

us = math.modf(time.time())[0] ms = int(round(us * 1000)) timestamp = str(ms)

def calculation_sign(signmethod): data = “”.join((“clientId”, ClientId, “deviceName”, DeviceName, “productKey”, ProductKey, “timestamp”, timestamp))

strBroker = ProductKey + “.iot-as-mqtt.cn-shanghai.aliyuncs.com” port = 1883

client_id = “”.join((ClientId, “|securemode=3”, “,signmethod=”, “hmacsha1”, “,timestamp=”, timestamp, “|”)) username = “”.join((DeviceName, “&”, ProductKey)) password = calculation_sign(“hmacsha1”)

print(“=”*60) print(strBroker) print(“client_id:”, client_id) print(“username:”, username) print(“password:”, password) print(“=”*60)

def on_connect(client, userdata, flags, rc): print(“OnConnetc, rc: ” + str(rc))

def on_publish(client, msg, rc): if rc == 0: print(“publish success, msg = ” + msg)

def on_subscribe(mqttc, obj, mid, granted_qos): print(“Subscribed: ” + str(mid) + ” ” + str(granted_qos))

def on_log(mqttc, obj, level, string): print(“Log:” + string)

def on_message(mqttc, obj, msg): curtime = datetime.datetime.now() strcurtime = curtime.strftime(“%Y-%m-%d %H:%M:%S”) print(strcurtime + “: ” + msg.topic + ” ” + str(msg.qos) + ” ” + str(msg.payload)) on_exec(str(msg.payload))

def on_exec(strcmd): print(“Exec:”, strcmd) strExec = strcmd

if name == ‘main’: mqttc = mqtt.Client(client_id) mqttc.username_pw_set(username, password) mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish mqttc.on_subscribe = on_subscribe mqttc.on_log = on_log mqttc.connect(strBroker, port, 120) # mqttc.loop_start() time.sleep(1) temperature =27.55 mqttc.subscribe(“/sys/************/Demo_02/thing/service/property/set”, qos=1) # 换成自己的 #send_mseg = ‘{“pm_25″: %s,”area”:”%s”,”time”:”%s”}’ % (0, 0, datetime.datetime.now()) #send_mseg = ‘{“id”: “1234”, “version”: “1.0”,”params”: {“IndoorTemperature”: %s},”method”: “thing.event.property.post”}’%(temperature) send_mseg = ‘{“params”: {“IndoorTemperature”: %s},”method”: “thing.event.property.post”}’ % (temperature)

五、总结 工作之余了解了一下物联网的发展,看到有意思的东西打算学一下,刚好看到了microPython,震惊之余,决心做点小东西玩玩。 这套框架全部使用python实现,比我了解到的*大多数物联网方案要简单太多,虽然有些开发首先,但是用来实现一些简单设计应该是不成问题的,只要你会python,这套系统可以很快构建。当然python也是非常好学的,长期使用C语言的人根本不需要什么学习就可以上手。

探索网络虚拟世界的“藏宝图”!网络空间地图技术与市场分析

随着全球信息化的发展,网络已经覆盖人类生产和生活的诸多领域。特别是近年来,5G网络、大数据、人工智能(AI)、物联网等新兴信息技术迅速普及和推广,进一步推动物理空间的信息化和网络化。网络空间(Cyberspace)逐渐成为物理空间的全息映射,成为继“陆海空天”后的第五大疆域。2016年12月发布的《国家网络空间安全战略》指出,网络空间由互联网、通信网、计算机系统、自动化控制系统、数字设备及其承载的应用、服务和数据等组成。网络空间所承载的分布广阔、数量庞大的信息资产,蕴藏着无数“瑰宝”,正不断激发人类的探索欲望。

没有网络安全就没有国家安全。2016年4月19日,*总书记在“网络安全和信息化工作座谈会上的讲话”中强调,“感知网络安全态势是*基本、*基础的工作。要全面加强网络安全检查,摸清家底,认清风险,找出漏洞,通报结果,督促整改”。由于网络空间包含的信息量巨大,结构复杂,探索网络空间迫切需要一个与百度地图、高德地图类似的工具,将网络世界中的“一草一木”有效标识出来。基于网络空间地图提供的方向标,人们便可按图索骥,快速寻觅到“宝藏”。

%title插图%num

网络空间地图的概念和特点

网络空间地图是一种基于系列测绘技术, 反映网络空间中各种信息实体的地理位置、逻辑关系、通联结构及变化状态的可视化地图。狭义的网络空间地图主要基于IP地址或物理节点展示网络对象与地理坐标的对应关系,强调其物理空间的归属性;而广义上的网络空间地图则更加立体,具有多层次、多维度特点,可以将传输网、IP网、设备组成、系统服务、业务通联、安全动态乃至社交热点等跨越物理域、逻辑域、认知域的信息进行有机组织、分层叠加投射至地图之上。

那么,对于用户来说,什么是网络空间地图应该具备的优秀特质呢?类似物理空间地图效果,网络空间地图也应具备准确、高清的特点,能够准确标识出信息资产的地理属性、网络属性、应用属性乃至社会属性,拥有良好的人机接口,面向不同用户呈现信息资产的多维画像。此外,由于网络空间瞬息万变,信息资产*易受到外部条件的触发而发生改变。静态信息无法反映出信息资产的多变状态,有时甚至会造成对信息资产客观情况的扭曲,所以优秀的网络空间地图还应具物理空间地图所不具备的时效性和动态性,及时、客观地反映出信息资产的*新特征。

%title插图%num

网络空间地图依托的实现技术

人们主要通过网络空间测绘手段来得到网络空间地图。网络空间测绘的概念*初源自物理空间的地理测绘学,专门指对地理环境中实体对象的空间结构特征进行概括和抽象,并对其空间位置进行测量和绘制。网络空间测绘是地理测绘在网络空间的拓展,主要指的是对网络空间中各种信息资产的地理位置信息和网络信息进行主动或被动方式的探测、采集与分析,并以此来建立设备的相互关系索引,描绘网络逻辑连接关系,从而帮助用户掌握网络空间中各种信息资产的实时动态。

网络空间测绘使用到的技术通常包括网络探测扫描技术、协议分析技术、IP定位技术、拓扑测量技术、大数据分析与存储技术、网络可视化技术和漏洞扫描验证技术等。

(一)网络测量和协议分析技术

网络空间有约40亿IPv4地址空间和几乎无限多的IPv6地址空间,这些地址分布于全球各地,是网络通联和信息服务的基础,与IPv4/IPv6地址相对应的是域名地址,全球已注册域名超过3亿,并以每年超1千万的数量增长。如此庞大的IP地址空间和域名空间是网络空间组成节点的“门牌号”,需要大量探针基于这些“门牌号”去访问、识别和记录海量节点的信息要素。

网络探测和协议分析是探针的关键技术,其工作过程通常分为三个阶段:

一是利用已知地址集或通过地址推测算法,基于TCP/IP协议快速探测目标IP和端口服务的存活性;

二是基于协议特征或应用服务特征(指纹库),与目标端口服务进行尝试交互,识别服务类型和基本属性(例如,设备型号、操作系统类型、应用软件版本等);

三是基于协议深度交互,获取目标深层信息(例如,组件结构、漏洞信息、归属信息等)。

因此,网络探测和协议分析是获取网络空间信息资产的主要手段,其能力直接影响网络空间地图的全面性和准确性。

(二)漏洞扫描和验证技术

漏洞扫描和验证是基于漏洞特征或机理,主动开展信息采集和协议交互的漏洞识别技术,是发现威胁进而及时处置威胁的重要技术。对于新爆发的漏洞,传统漏洞扫描主要在更新规则策略后对指定资产开展一次全新的漏洞检查,这对于局域网或小范围的网络较为有效,但对国家范围或互联网范围的节点进行漏洞排查则过于缓慢。

网络空间地图对漏洞的检查充分利用了大数据能力,通过提前获取系统特征,在新漏洞爆发时先对历史数据进行快速比对,然后利用大量分布式节点对筛选出的可疑目标进行快速漏洞验证,可以确保在1-Day内大范围摸清漏洞的分布与影响。

(三)拓扑测量技术

网络拓扑即网络互联结构,如同地球上四通八达的交通图,需全面监测和有效掌握。全球互联网由一个个自治系统(Autonomous System,简称AS)连接而成,每个自治系统在全球有一个唯一编号(ASN),对应某个管理机构控制下的路由器和网络群组,即分支众多的路由节点和数量庞大的IP地址。这些AS自治域、路由节点、IP地址组成了全球互联Internet网络拓扑。

全球目前共分配17.6万多个AS自治系统号,遍布240个国家和地区。其中,中国所分配的AS自治系统号码数超过2800个。

网络空间拓扑测量主要基于Ping、Traceroute、SNMP、ARP、DNS和NETCONF等探测技术,以及公开信息采集和开源情报辅助等手段,对全球及指定国家、区域、网段进行拓扑探测和绘制,构建包括AS级、POP级、路由器级、IP接口级的网络拓扑,支撑实现对网络拓扑的分层、分区域显示。拓扑测量需要一定规模的分布式节点群对全球互联网开展持续监测,其中算法复杂,数据存储与运算量大,还有不少技术需不断深化。

(四)IP定位技术

世界各国的IP地址空间由全球互联网名称与数字地址分配机构(ICANN)进行分配,目前IPv4空间已于2011年分配完毕,而IPv6地址空间足够各国长期使用。受制于路由器部署位置、路由表的信息量和更新频率,*大多数情况下,各国的IP地址分配会与地理区域相关。

因此,采集IP地址与地理位置对应关系后,可基于IP地址查询其所对应位置,或基于地理区域查询包含的IP地址集合。IP定位库将网络空间地址与地理空间地址建立了关联,对统计、监管甚至网络犯罪侦查等应用领域非常重要,也是网络空间地图所依赖的重要资源库。

国内外有专门的厂商基于路由探测、情报分析等手段采集IP定位信息,并以数据服务方式提供用户使用。出于隐私考虑,这些IP定位信息精度相对较粗,很难达到街道级别,但可以适应大部分应用情况,例如,网络客户地理位置统计、城市内IP资产统计等。

更高精度的IP定位,需要基于主被动采集、WiFi热点采集、GPS关联、多点定位等多手段融合获得精准数据,应在法律允许范围内开展相关业务。

(五)知识图谱分析

多源网络空间资产数据的语义模型构建、语义数据采集和存储,在此基础上建立网络空间核心资产的知识图谱,形成基于知识图谱的网络空间资产指纹库;同时构建异构多源的网络空间资产数据上下文的标准化描述、语义建模及上下文语义查询和推理引擎,实现基于上下文语义的精确资产数据源搜索,定位和网络资产数据源的动态绑定机制。

核心在于对多模、多源异构数据和多维复杂关系的高效处理与可视化展示,将测绘数据和社会数据进行深度挖掘,通过数据融合分析,用数学模型直接表示的关联属性,融合成一张以关系为纽带的数据网络。通过对关系的挖掘与分析,能够找到隐藏在行为之下的关联,并进行直观的展示。

(六)大数据存储与分析技术

网络空间由海量节点组成,其信息量和处理模式是典型的大数据特点,网络空间地图对网络与节点的深层挖掘、关联分析、漏洞发现等都需要大数据加持。在存储方面,由于每日需存储数千万条探测数据,同时开展内容检索、深度挖掘与综合分析等复杂任务,这对数据的存储和管理构成较大挑战,为满足大容量、准实时、高吞吐等性能要求,需要在分布式存储、分布式检索等方面持续优化。

在大数据分析方面,为了找寻数据间的关联,需要对不同类型的数据内容进行检索、深度挖掘和综合分析。建模是大数据分析技术的核心工作,主要是选择和应用各种数学模型,同时对模型参数和输入变量进行校准调优,在生成*终的数据集后,用构建好的模型进行聚类分析。在对数据作进一步归类和统计的基础上,*终建立资源画像和资源间的关联关系,形成指纹信息库、地理信息库、威胁情报库和漏洞库等知识库。

(七)网络可视化技术

网络可视化技术可基于网络探测和大数据分析的结果,综合运用信息处理与图形图像展示手段,将网络空间中抽象化的信息资产和逻辑关系映射为网络空间的全息地图,在归类、统计、分层等基础上通过丰富的图形化手段直观展示网络空间的物理链路、逻辑拓扑、资产画像、流量内容、安全态势等多维度信息,为摸清资产分布、掌握漏洞信息、感知趋势变化、支撑指挥决策等提供重要手段。

%title插图%num

网络空间地图的应用场景

网络空间地图的使用比较广泛,大可以覆盖整个互联网,作为网络空间的“地形图”,服务于国家安全和相关监管部门,为互联网资产监测提供支撑;小可以深入企业内网,充当“建筑结构图”,以SaaS方式服务于广大有资产管理需求的企业组织,为IT资产的有效管理提供支持。具体来说,网络空间地图的应用场景包括以下多方面:

(一)网络战中的沙盘推演

在传统军事作战中,作战地图是分析地形地貌、判断敌我态势、实施兵力部署和辅助指挥作战的重要工具。当下,网络空间已成为新的军事竞技场,地图在网络空间作战中赋予了新的使命和意义。网络跨越国界联接世界各地,信息光速可达,网络攻击转瞬完成。

而要在网络空间形成一招制胜的攻击能力或构筑坚如铜墙铁壁的防御能力,则需要有全局的洞察能力和深层信息的刺探能力。网络空间地图是国家之间、组织之间开展网络攻防的态势底图,是构建陆海空天联合的立体作战视图的基础。网络中的信息中枢、关键设施、防御要隘、可用资源等都可通过网络空间地图系统深度感知和有效标识,为沙盘推演、排兵布阵、态势掌控、指挥作战提供重要支撑。

(二)互联网安全监管中的“挂图作战”

“挂图作战”是通过直观的图表形式来将计划的实施方案、工作流程和执行进度等内容呈现出来,用于指导计划具体实施过程的工作方式,是一种类似作战的快速响应行动方式。由于其具备直观性和客观性,方便任务进展跟踪,一些重大项目(例如,灾害防治、环保监测等)纷纷借鉴了这种工作方式,在趋势研判和指挥调度中成效显著。

近年来,随着信息化、网络化全面推广,网络监管和安全保障越来越重要,各地相关部门纷纷开始筹建用于互联网安全监管的“挂图作战”指挥平台。网络空间地图对全局资产的信息采集及对网络安全态势的展现效果与“挂图作战”思路不谋而合,这为其在互联网安全监管业务中的应用提供了广阔的舞台。

通过网络空间地图,资产标识、漏洞分布、安全影响一目了然,一旦爆发安全漏洞或攻击,监管方便能及时收到预警,看到相关目标和坐标,并据此迅速开展应急响应办法。

(三)关键基础设施保护与IT资产管理

IT资产是指计算设备、信息系统、网络、软件、虚拟计算平台以及相关硬件等。IT资产管理的核心是要跟踪、审计和监控IT资产全生命周期状态。不同于静态的物理资产,信息资产在整个生命周期中的状态通常在不断变化,仅依靠人工统计,显然跟不上信息资产的变化速度。

对于IT资产规模庞大且部署分散的组织,IT资产管理难度很大,特别是对国家关键基础设施的监管更是一个大的工程挑战。*优化利用和分配现有IT资产,方可*大限度地保护信息技术上的投资,而这种决策离不开高价值的战略情报。基于网络空间地图勾勒出的信息资产“全息”样貌,决策者就可以从全局视角把握资产属性、运行状态和发展趋势,减少资产管理决策活动的不确定性。

同时,网络空间地图还可以与相关安全系统做深度整合,在典型的IT资产生命周期中,充分发挥其对动态信息资产的跟踪效能,及时捕捉信息资产在全生命周期任一阶段出现的异常情况,辅助开展IT资产的脆弱性管理和风险控制,并*终实现IT资产的安全运营。

(四)物联网资产监控管理

物联网技术爆发已让万物互联成为现实。智能摄像头、车联网、充电桩、智能电表/水表开始遍布世界的各个角落。物联网资产监控管理首先要解决的是安全问题。物联网的部署特点和低功耗要求,使其安全较为薄弱,例如,连接内网的室外摄像头、地处偏僻位置的ATM机、客源稀少的自动贩卖机等,都可能成为黑客入侵整个系统的着力点,增大了信息被窃取的机会,甚至有业务瘫痪的风险。为此,运营者需要通过网络空间地图探测并持续更新所有物联网资产的准确清单,在此基础上,识别和解决与资产的安全漏洞。

此外,网络空间地图展现的物联网资产全网分布情况,也能给厂商制定市场竞争策略提供高价值的战略情报,从而有重点地选择市场投放区域。

(五)数字孪生及智慧城市感知与运营

作为一种实现信息化与城镇化深度融合的城市信息化高级形态,智慧城市基于城市的精细化和动态管理,*大提升了城市运营效率,改善了市民生活质量。智慧城市是由数据驱动的,其建设与运营依托通信网、IPv6网、物联网、云计算、大数据等新一代IT技术实现的泛在互联和全面感知。

网络空间地图可以成为智慧城市感知和运营的基础,其作用主要体现如下:

*,保证信息资产的能见度。智慧城市中不断增加的托管资产和物联网设备是管理难题,网络空间地图可以帮助识别环境中的所有资产,深入感知信息资产所处的IT环境状况,了解它们当前所处的生命周期阶段以及如何影响业务,管控风险,提升安全。

第二,有助于制定资产管理计划。网络空间地图可以提高智慧城市的运营效率,便于跟踪和展示IT资产,并为漏洞发现、威胁感知、事件响应、故障排除等问题提供解决方案支撑,管理者可以基于网络空间地图获取相关状态信息来推进资产管理计划。

第三,有助于保证合规性。网络空间地图可以监视网络中的硬件和软件组件,检查是否安装了未经授权的软件或硬件,帮助管理者为审核做好准备,从而有效降低法律风险。

第四,有助于控制IT成本。网络空间地图提供的资产数据有助于资产利用率分析和预算规划,帮助智慧城市*大限度地提高现有资产利用率,优化资产使用并控制IT资产采购支出。

%title插图%num

网络空间地图的市场应用前景

网络空间地图是构建数字世界的必备的基础技术能力,随着其被广泛应用到多种领域,未来将继续探索更多的可能性。那么,网络空间地图的市场空间究竟是怎样的?其成长潜力有多大?这实际上取决于智慧城市、IT管理、物联网以及网络安全等相关产业的投资规模和发展前景。

由于国内政策红利已得到释放,市场资金大量涌入智慧城市、IT运维管理、物联网和网络安全等新兴产业。有数据显示,2019年我国智慧城市市场规模估计已突破10万亿元,我国网络安全市场规模同期约为478亿元;2020年IT运维管理市场规模将达到2690亿元左右,物联网市场规模同期也将突破2万亿元。考虑到市场重叠因素,保守估计,目前新兴市场总体规模已超过10万亿元。

这些产业蕴含着巨大的IT资产管理和网络空间地图的市场机会,当前保守估计,网络空间地图至少已经存在3到5亿元的市场需求量。未来几年随着相关产业的全面崛起,网络空间地图市场将快速走向成熟,有望进一步被放大到数十亿元的规模。作为连接网络虚拟空间和物理空间的桥梁,网络空间地图的未来可期,潜力无限!

国行三星系统的推送和 hms mipush ov 比较如何

国行三星系统的推送和 hms mipush ov 比较如何?

三星针对国产应用的推送做的如何:

   2021-02-23 23:26:13 
 1 PMR   30 天前 。。。。。。 OS 要针对 APP 做推送? 反向操作 三星支持国内 UPA 常用应用基本上都接入 UPA oppo vivo mi oneplus 等基本都用 UPA 自主知识产权的 UI 还在走自己的路
2 JensenQian   30 天前 去年底好像三星支持了统一推送 https://www.bilibili.com/read/cv9161450/,不过现在的推送个人觉得走推送的推送的也基本上广告,而且 QQ 微信这种东西不走推送
3 Lin0936   30 天前 等 于 没 有
4 liuxey   30 天前 三星四年用户,除了微信开了自启动可以收到通知,其他 app 没一个能正常推送的 可能我使用的 app 都没接入这些推送平台吧。。
5 JensenQian   30 天前 @JensenQian #2 三星国内真的太小众了,国内比起华米 OV 的销量来说真的是 others,软件适配上慢着也真的没办法了, 关于三星国行推送通知的问题,你可以去看下三星自己的盖乐世社区的讨论
6 sue0917   30 天前 via Android 没推送等于没广告,还不满足吗
7 keymao   30 天前 @PMR 自主知识产权 UI 恰恰是*批接入 upa 的…. ov 紧随其后,之后才是 mi,lenovo 是*后一批 。 其实战狼软实力相当不错的 ,要明晰敌人的缺点,也要学习敌人的优点 ,不能片面的看待事物
8 james504   30 天前 三星没有推送,但有促销时会弹广告是真的。相比起国产各类 UI 来说那是没有广告很干净,但不好的地方是比如我常用的豆瓣或其他类 App 都不能通过禁止后台而收到通知,而像 outlook 等从 play 市场下载的又需要挂了科学上网才能有通知。个人喜好纯净的系统,索尼、pixel 、三星这些,宁愿不要广告而选择干净。
9 hantsy   30 天前 我用三星 10 年了。三星本来就有自己的推送服务。 三星*大的好处,可以杀掉进程,关闭所有的推送,让手机清静一下。 @sue0917 大部分可能特别喜欢支付宝,天猫,JD 的广告吧。 现在我除了 三星助手(日常任务,行程,快递都可以通过助理收到通知)等少数几个 APP,其它通知全部关闭,大部分程序加入深度睡眠。
10 Cheons   30 天前 via Android 营销广告,在使用前能不勾选的
11 S179276SP   30 天前 华为支持 QQ,算是大杀器,坐等支持微信。
12 alfchin   30 天前 via iPhone @liuxey 有接 FCM 的也能推。。。但是有时候不给自启动推不了
13 maplerecall   30 天前 via Android QQ 微信都没问题,应该是走的 APP 推送所以很及时,其他少数加了白名单也的正常推送,没加白名单的就和没装一样,只要不打开就永远不会有消息,挺舒服的。
14 ggmood   30 天前 幸好取消了三星的订单
15 skyyws   29 天前 手持 s10,QQ 和微信都没啥问题,其他 APP 只要没有后台运行,就收不到消息。。。感觉应该大部分都是走 APP 推送吧,用了快 2 年了,准备考虑再换回苹果了。。。
16 Cielsky   29 天前 via Android 就 hms 和 mipush 可以看看吧。

如何快速入门Python

如何快速入门Python

学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人*终能精通语言,成为执牛耳者,他们是金字塔的*顶层。虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如何开始入门 Python。只要方向对了,就不怕路远。

设定目标

当你决定入门 Python 时,需要一个清晰且短期内可实现的目标,比如通过学习找一份初级程序员工作,目标明确后,你需要了解企业对初级程序员有哪些技能要求,下面是我从拉勾网找的一个初级 Python 工程师的任职要求:

做 Python 开发除了熟悉语言本身之外,还需要掌握很多相关联的技能,好比打NBA,你不光要学如何投篮,还要练习力量、技战术等一整套东西。所以,一个普通 Python Web 开发工程师需要掌握的技能包括至少一个Web框架,比如:Django、Flask、Tornado,做业务系统离不开数据库的支撑,另外,还需要对Linux系统的基本操作和常用命令有所了解,因为以后你写到程序基本上都会运行在Linux平台上。

接下来我从这几个方面逐一介绍

Python3?

不少新手总是纠结是学 Python2 还是 Python3,就像手里同时有包子和馒头,不知道先吃哪个,这种纠结完全就是徒增烦恼,因为它们是同一种语言,只有少部分地方语法不兼容,尽管目前大部分公司还在用 Python2,但是 Python3 逐渐成为主流已是不争事实,毕竟后者性能方面更占有优势,官方也在力推Python3。所以毫不犹豫地选择 Python3 吧,*多花一天的时间能把 Python2 中特有的内容搞懂。

开发工具

工欲善其事必先利其器,做 Python 开发的 IDE(编辑器)层出不穷,我只推荐 Pycharm 和 Sublime,两个工具都可以免费使用,而且它们的学习成本非常低,网上找一篇教程看了基本就能上手,Vim、Emacs 这样的远古神器还是放以后再去了解吧。另外,今后你所遇到的 90% 的问题都有可能通过Google和StackOverflow来解决。

学习资源

网上入门资源琳琅满目,一本好书能为你指点迷津。快速了解 Python 可以看一下 Learn Python in Y minutes 这篇文章。但千万不要被标题所迷惑,一门语言不可能几分钟就能学会,看完之后应该会对Python 有个初步的印象,照着示例操作完之后,你就要选择一本合适入门的教程,《A Byte of Python》是一本值得推荐的书籍,来说说我推荐这本书的理由。

《A Byte of Python》的中文名叫《简明 Python 教程》,这本书的*新版已经是第10版,基于 Python3.5,所以不担心是否知识落后的问题,其次,这本书的厚度152页非常适合入门,涵盖了 Python 入门所有内容,相对那些五六百页的大部头书来说非常精简了,2个星期能啃完。

这本书看完之后,你应该能设计出简单程序出来。再推荐一本书《Python学习手册》作为进阶学习,内容相对要更深入,适合有一定编程基础的人阅读。

做Web开发,HTML、JS、CSS 是必须有所了解的,作为前端技能,不一定要深入了解,做到能写基本的HTML代码就够了,此外,你还需要了解 HTTP 协议(推荐《图解HTTP协议》)。目前比较主流的Web框架有 Django、Flask、Tornado,各自都有各自的特点,Django 文档丰富、Flask 短小精悍、Tornado 异步并发。这里推荐使用 Flask,推荐书目《Flask Web开发:基于Python的Web应用开发实战》

Linux 推荐《快乐的 Linux 命令行》,同样是一本非常经典的入门迷你书,没有太多理论,范围也不太宽

MySQL只推荐一本《MySQL必知必会》,不到250页的小册子,实践性很强,没有什么艰深晦涩的理论堆砌,看完这本书基本入门数据库了。

*后

只看书不会进步,思考和实践才有成长,自学编程是一个比较枯燥的过程,如果没有正向反馈,学习的积*性很容易被打压下来,所以你应该积*参与到相关的技术圈子中去,尝试去解答力所能及的新手问题,向圈子中的大牛们寻求帮助,善于总结自己所学到的东西,分享给更多的人

MCBE 服务器

开了个 MCBE 服务器,之前用的飞儿云(阿里云)的机子,一个月 62,小服务器都没什么人玩,不划算,吃不消。 有无推荐的,靠谱点的服务器供应商,穷学生就和朋友一起玩玩,配置要求不高。

CEBBCAT 159 天前 via Android
怎么把标题当 tag 用啊?
locoz 2
locoz 159 天前 via Android
给你开个虚拟机…?
DevHuaJi 3
DevHuaJi 159 天前
@locoz 啥意思
locoz 4
locoz 159 天前
@DevHuaJi #3 我家服务器闲置着,可以给你开个虚拟机跑服务端,出点电费就行了
DevHuaJi 5
DevHuaJi 158 天前
@locoz 可以啊
DevHuaJi 6
DevHuaJi 158 天前
@locoz 企鹅 2981144675 来 py 吗
goyiyi 7
goyiyi 158 天前 via Android
info2s 上看看,很多闲置的云服务器
DevHuaJi 8
DevHuaJi 158 天前 via Android
@goyiyi 看了下,对我来说还是有点贵了。不过谢谢哈
stranger75 9
stranger75 157 天前
可以看看套路云的香港轻量,24 一个月,1h1g30M 带宽,每月 1TB 流量
locoz 10
locoz 156 天前 via Android

@DevHuaJi #6 加你了

Stictonotus 156 天前
Minecraft 类服务器, 可以考虑试试国内 Minecraft 生态的特色,通过 QQ 售卖的 NAT VPS 。
这类 oneman idc 在 MC 圈里非常多,而且名字参差不齐,随便加一个 MC 开服之类的 QQ 群就能看到。
如果想要被坑或者想对服务器有更深刻的经验的话,可以试试购买这种服务器。

或者,你可以试试 MCBE 的面板服务器,本质上是 docker 的容器,外加一个类似于 cPanel 的管理面板。位置在国内的价格大概也就在 10-20rmb/mo 左右,共享 CPU,2GB~容器内存。非常适合基友服。
m2idk 12
m2idk 135 天前
你要用 Falixnodes 也可以,只是經常停機
登入方面應該要翻牆(Discord 登入法)

iOS开发 — 获取网络状态

之前用的根据状态栏获取的,iOS 13貌似不行了。。。

#import <Foundation/Foundation.h>
typedef enum {
NETWORK_TYPE_NONE = 0,
NETWORK_TYPE_WIFI,
NETWORK_TYPE_2G,
NETWORK_TYPE_3G,
NETWORK_TYPE_4G,
NETWORK_TYPE_5G, // 5G目前为猜测结果

} NETWORK_TYPE;

@interface BaseTooles : NSObject

+ (NETWORK_TYPE)SDKgetNetworkTypeFromStatusBar;
/*!
* 获取当前网络类型
* 通过statusBar的网络subview获取具体类型
*/
+ (NETWORK_TYPE)SDKgetNetworkTypeFromStatusBar{

NSArray *subviews;

if([[[UIApplication sharedApplication] valueForKeyPath:@”_statusBar”] isKindOfClass:NSClassFromString(@”UIStatusBar_Modern”)]) {
// iPhone X
subviews = [[[[[UIApplication sharedApplication] valueForKeyPath:@”_statusBar”] valueForKeyPath:@”_statusBar”] valueForKeyPath:@”foregroundView”] subviews];
} else{
subviews = [[[[UIApplication sharedApplication] valueForKeyPath:@”_statusBar”] valueForKeyPath:@”foregroundView”] subviews];
}

// NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@”statusBar”]valueForKey:@”foregroundView”] subviews];
NSNumber *dataNetworkItemView = nil;
for (id subview in subviews) {
if ([subview isKindOfClass:[NSClassFromString(@”UIStatusBarDataNetworkItemView”) class]]) {
dataNetworkItemView = subview;
break;
}
}
NETWORK_TYPE nettype = NETWORK_TYPE_NONE;
NSNumber *num = [dataNetworkItemView valueForKey:@”dataNetworkType”];
switch ([num intValue]) {
case 0:
nettype = NETWORK_TYPE_NONE;

break;
case 1:
nettype = NETWORK_TYPE_2G;

break;
case 2:
nettype = NETWORK_TYPE_3G;

break;
case 3:
nettype = NETWORK_TYPE_4G;

break;

default:
nettype = NETWORK_TYPE_WIFI;
break;
}

return nettype;
}

上市之后,青云存储平台QingStor也要“进军”云原生

3 月 16 日,北京青云科技股份有限公司(以下简称“青云科技”)登录科创板,昔日里频频出现在公众视野的云计算企业,终于作为“中国混合云*股”成功上市,股票代码 688316。

在国内迅速崛起的大大小小的云计算企业中,青云科技规模不算*大,却从公有云切入市场,旗帜鲜明地以“混合云”为卖点,在财报仍为亏损的状态下冲出重围成功上市。

%title插图%num

 

三年内有望实现盈利,是青云科技CEO黄允松对外界做出的承诺,他的底气来源于青云科技亏损的唯一来源是公有云业务,而私有云业务年增长率持续高位,以这个速度,三年内转亏为盈应该不是问题。

青云科技上市,明示了市场对于云计算未来空间的遐想。而在上市第三天,青云科技在媒体沟通会上即宣布,其旗下存储平台 QingStor 将迎来品牌及战略升级。

QingStor战略升级,将成独立、开放运营品牌

按照青云科技的设想,接下来的一年,QingStor 重点是要打造更强的商业服务能力,服务企业数字化转型。在过去,青云科技认为 QingStor 在技术上的积累已经足以支撑业务的运转,但技术实力仍然需要保持,除了原来北京和武汉的研发中心,今年年初还新增了成都研发中心。未来,QingStor还会加大技术投入,研发团队在人数上将有大幅增长。

除了保持技术*,QingStor 还要在商业、生态和落地上发力。对于品牌的定位,QingStor 的总结是三个词:专业、独立和开放。

专业不用多做解释,如今的 QingStor 在对象存储、文件存储、块存储和融合存储上都有完整的产品线;独立是指 QingStor 的运营方式,就是将 QingStor 作为一个独立运营的产品品牌,这是青云科技希望向外界传递的重要信息之一;开放则是指QingStor除了开源产品和开放政策之外,在市场策略上将比以前更加开放,要建立自己的“朋友圈”。

2021年新产品&新功能预告

除了大的战略定位,QingStor 产品和研发团队的负责人王煜还预告了 QingStor 将在 2021 年进行的重大新产品和功能发布,主要包括两个云原生块存储新产品/功能优化,和一个文件存储系统。

*,QingStor 将强化分布式块存储产品 NeonSAN 在超大规模云计算平台的底层支撑能力,推出全新的存储访问协议 NVMe Over Fabric。在 RDMA 网络互联上,QingStor 之前已经实现了在存储内部数据副本之间通过 RDMA 进行复制,今年则将允许客户端层也通过 RDMA 网络协议访问存储,以降低企业关键业务的存储网络延迟,使之能够挑战 FC-SAN 类似的传统访问协议,并探索大吞吐网卡支持,以及非易失内存 SCM 在软件架构中的应用等。第二是优化对超大规模集群的支持,NeonSAN 本身在数据层面的设计是 Share-nothing 架构,天然可以无线横向水平扩展,而在管理层今年会在控制平面做一个 partition 分区,允许大规模集群横向水平扩展。在特性和功能层面,NeonSAN 今年也会进行增强,比如同步备灾、一致性卷组、读写快照、跨存储池迁移等。在平台支持层面,NeonSAN 不仅服务于青云QingCloud云平台,还支持市面上主流的虚拟化和云计算平台,包括 VMware、OpenStack、Hyper-V 等,今年 QingStor 会关注这些平台的迭代升级,并进行同步匹配。

第二个今年上半年的重磅发布,一个是云原生分布式块存储产品,它基于 NeonSAN 架构,在此基础上进行全栈存储组件容器化改造,全面兼容市面上主流的 K8s 平台,包括青云的 KubeSphere,红帽的 OpenShift,Rancher 等。此次,这一产品还会全面接入容器平台监控运维体系,并将利用 K8s 平台本身 operator 自动化运维机制管理存储系统。开发者喜闻乐见的是,这是一款完全免费的产品,可以通过主流应用市场进行分发、下载,并支持企业级客户平滑迁移到企业版 NeonSAN。

第三款正式对外发布的产品,是已经在青云内部孵化多年的全新云原生分布式文件系统,它是采用 Rust 实现的插件式分布式文件系统。更重要的是,这个文件系统将完全开源,并采用社区开发和运营的模式。

%title插图%num

除此之外,今年QingStor 对象存储和文件存储产品也将在架构层面迎来全新升级,对象存储将升级至 4.0,文件存储升级至 3.0,底层存储引擎将完全替换成将要全新发布的分布式文件系统。也就是说,这款云原生分布式文件系统将成为下一代 QingStor 商业版本存储底层新一代的存储引擎。

*后,QingStor还会在今年发布一个厂商中立的数据服务框架,为上层提供统一的数据管理和操作接口,实现新功能和数据迁移、管理、数据备份等,加入框架后可以在各个厂商之间无缝进行数据迁移、数据管理、数据备份等。

%title插图%num

存储的机会在哪里?

除了品牌升级和重要产品发布预告之外,在沟通会上,QingStor还从市场和技术两个层面,分享了他们看到的未来与存储相关的机会所在,供读者朋友们参考。

在市场层面,QingStor认为存储的*个机会在于大量数据,数据量爆炸增长背后,存储解决方案会发生巨大的改变,包括数据湖、人工智能中大数据产生后的一些存储方式,以及备份归档等方面的市场需求增长将非常迅猛;

第二是细分场景,即用户对于数据的科学处理将使数据发挥更大的作用,第二存储、混合云存储、边缘存储将更加满足用户的细分场景需求;

第三是以云原生为代表的的全新模式,将迎来爆炸性增长,未来三年会看到以云原生为代表的全新存储模式有非常明显的市场机会。

而从技术层面上讲,QingStor 产品和研发团队的负责人王煜分享了他对于存储在 2021 年将出现的几个明显技术趋势的观察。

%title插图%num

他认为,存储将在 2021 年出现四大趋势,首先是存储池化。顾名思义,企业在过去几十年构建存储的方式是围绕业务,根据不同的应用和业务采购存储系统,但这样会导致底层存储系统冗杂,引起“数据孤岛”和管理难的问题。而现在企业倾向于围绕数据中心构建统一的存储资源池,为上层提供应对不同业务的服务,这对技术提出了更高的要求,比如高性能、高并发,并由此催生对于硬件性能、新的协议的要求,除此之外对于大规模水平扩展能力,以及多租户多隔离的要求也会相应提高。

第二个趋势是服务化,这会加速存储用户与服务提供方的解耦,所谓花多少钱买多少服务,开发者通过天然开放的API接口,可以简单地集成 SDK 在应用代码中调用相应的存储服务,实现存储功能,用户无需关系存储和扩容能力,按需付费,把企业采购存储资源变成采购服务,这是存储服务化的一个重要标志,可以*大地降低企业成本。

第三个趋势是云原生化,云原生的本质是应用系统*大化或全面地使用云平台提供的能力,与云计算相比,云原生除了提供 IaaS 和 PaaS 的服务之外,还提供了平台级的集群管理能力。实现云原生,应用系统架构需要改造,从单体应用变成容器部署。另一个实现云原生的手段是无状态化,让逻辑代码可以无限快速伸缩扩容,提升系统的承载能力。另外,数据库计算存储分离,也是在存储层解决数据保护问题的有效手段。

第四个趋势是数据价值化,也就是更好地利用数据,围绕存储本身将会出现很多新兴场景,比如第二存储、数据湖、数据统计、元数据检索等,形成完整的数据挖掘解决方案。

结语

2020 年,AWS 在云存储服务成为全球*可以被视为一个标志性事件,证明了如今云存储已经是一个市场足够大的盘子。而青云科技在上市后的第三天,就宣布了存储品牌 QingStor 的品牌升级和未来规划,从中足见其对于存储业务的重视,以及想要挖掘存储市场潜力的决心。

作为一家独立的云服务商,青云科技的上市本身也证明了市场对于国内云计算发展空间的认可,相信对于这家以自主创新、以混合云为亮点的企业来说,上市也只是一个新的起点,未来是否还能实现自我突破,更多的还是要思考上市的意义,以及经营模式是否已经做好了作战的准备。

————————————————

python类中函数调用

#类及函数的定义
Class A:
#构造函数:
def __init__(self,var1,var2):
self.var1 = var1
self.var2 = var2

def b(self,var1,var2):
return var1+var2

#类内函数调用:
var1=1
var2=2
#创建对象:
a = A(var1,var2);
#调用函数:
a.b(var1,var2)
首先每个类的构造函数名称相同(__init__(self[,形参表])),用于初始化成员变量。

调用类内函数,首先构造对象,然后用‘.’(点)调用。

数据库设计的 10 个*佳实践

以下为译文:

数据库是应用及计算机的核心元素,负责存储运行软件应用所需的一切重要数据。为了保障应用正常运行,总有一个甚至多个数据库在默默运作。我们可以把数据库视为信息仓库,以结构化的方式存储了大量的相关信息,并合理分类,方便搜索及使用。

因此,数据库设计成为软件开发中的重要一环,对于开发者来说,设计一个高效的数据库至关重要。那么,为什么数据库设计很重要,“好”的标准又是什么?本文将做以介绍。

%title插图%num

为什么数据库设计很重要?

用我们订购衬衫的在线商城网站举例。如今,从网站上订购衬衫的过程似乎很简单,但涉及了很多信息交换。例如:*次浏览网页时,系统会展示给你一系列信息,包含产品分类,所有可用商品、相应价格、可用尺码、颜色以及其他相关信息。网站会从存储数据的数据库中检索,当用户选中所需商品并继续操作购买时,网站会询问个人详细信息、送货地址、付款详细信息,并确认订单。目前在此过程中产生的新数据,如用户详细信息、订单详细信息、购买及付款都会在同一个数据库中添加及更新。

数据库设计很重要,因为对构建可伸缩且能够在高工作负载下运行的软件应用来说,它是至关重要的。设计数据库首先来说,选择数据库软件很关键。目前可用于构建应用的数据库软件有数百种可供选择,我们可以从一些*好的免费数据库软件中选择,之后便是设计符合要求的数据库了。下面列出了10个*优的数据库设计实践。

%title插图%num

数据库设计的10个*佳实践

将所有人的观点列入考量

要设计好的数据库,必须考虑所有相关利益者的观点。在构建数据库之前,先去收集信息,了解他们对数据库的期望以及对数据库的操作熟练度。这样就能得出数据库应当采用的技术水平,以及是否要就数据库的功能来训练用户。

选择符合需求的数据库类型

数据库有多种类型,选择正确类型则是数据库设计的关键。我们可以将数据库以两种方式分类。一是基于数据库用以定义和操作数据的查询语言。使用SQL的数据库是结构化数据*常用的类型。然而,由于NoSQL数据库的可伸缩性、灵活性和速度更优,它们更适合机器学习、网络分析以及物联网(IoT)使用。

第二种分类方式则是基于数据模型。这样分类会有四种类型:关系数据库、分层数据库、网络数据库以及面向对象的数据库。

研究数据库的不同类型,并针对应用需求作出选择,这是必要的初始步骤。

以一致的方式来定义与标记表和列

在定义数据项以及标记表与列时,遵从一致性原则非常重要,可以帮助我们更好地理解数据。命名表与列的*佳实践之一便是使用简单的名字来定义其包含的数据。比如:只需将包含用户名称的列标记为“CustomerName”(“用户名”)即可。

应当避免使用复数名(如CustomerNames)、缩写(如CN),并且名称中不得使用空格(如Customer Name)。如果坚持遵守这些规则,则将来的用户在使用数据库时会更容易。

规范化是关键

数据库的规范化指的是将数据库中的所有信息组织起来,避免数据重复和冗余。简单来说,规范化是将数据打散分配到多个较小的相关表中,而不是统统存在一个大表里。

将数据规范化是很好的数据库设计实践,有助于提高效率。但是请确保不要过度规范化,否则将会把数据分散到太多的小表中,反而造成混乱。

数据库设计的文档化很重要

事实上,文档化并非人见人爱,因为实在太烦了。但要记得,文档化对于良好的数据库设计至关重要,可以追踪所有的小细节。数据库设计应当附有指示说明、ER图、存储过程及所有其他相关的信息。文档还应当为编程者和终端用户提供足够信息量,确保他们能够理解并使用。

隐私是首要考量

很多时候,存储在数据库中的信息是加密信息,隐私就成了一个值得关注的问题。为了获得*大程度的安全性,我们应当对密码加密,使用身份验证来限制数据库的访问,并使用另一个服务器来存放数据库,而不是应用所在的服务器。这将确保你的数据不受攻击和隐私侵犯的威胁。

考虑长期需求

优秀的数据库设计应当具备可伸缩性,即:在使用量增加的情况下,仍然能承受较高的工作负载,并保障应用的运行。对工作量可能会有所改变的企业来说,在设计数据库时牢记此项至关重要。例如:如果一个电子商务网站预计当销售量增长时,访客会在一个月内急速增加,那么在设计数据库时应当将这一点列入考量,以便数据库可以响应迅速增长的访客,并保持在高工作负载的情况下运作。

代码以及使用预存程序

数据库设计中的常见错误之一,就是不使用预存程序。预存程序指的是,在操作数据时手边随时可用的提前预存代码串。例如,如果有个SQL查询是常用的操作指令,则将它提前写入预存程序,而不是在用的时候重新来写,就会让工作简单起来。一旦有了预存程序,就可以在需要时一步执行并载入这个SQL查询了。

编写大量预存程序是个吃力的工作,但如果花时间完成并用文档记录下来的话,对终端用户来说,使用数据库就更加轻松了。

在数据库建模和设计上投入时间

优秀数据库设计的专业技巧之一是在数据库建模和设计上投入时间和精力。开发者常见的错误就是忽略这一步以节省时间,将重点放在软件开发更重要的其他方面上。但是,数据库设计对于保障应用的功能来说非常关键。如果一味想节省时间,不仔细思考设计的话,未来就会需要花费更多时间来维护数据库,甚至重新设计。

测试设计

测试也是数据库设计很关键的步骤,而且经常会被疏忽对待,甚至完全跳过,只为了赶DDL。我们应当在发布项目前,花些时间来彻底测试数据库设计,以确保其满足了所有计划中的需求,且正常运行。

%title插图%num

结语

对于以数据为中心的项目来说,数据库设计*为重要,开发过程中我们也应当慎重对待。文中提到的数据库设计实践,如针对长期需求进行适当的计划,选择正确的数据库类型,使用一致性的名称与标签,数据规范化,数据库设计文档化,并提前测试,这些都是我们在设计优秀数据库时需要考虑的关键问题。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速