kiwi浏览器的启动广告 怎么去掉?
昨天还好好的,没有广告,今天突然就出现了。 自带浏览器,x 浏览器都没有受影响。 广告内容有 淘宝 JD PDD 等 如下。
*近 3 天也没有更新过插件 只安装过 ourplay fortnite epic-games
尝试:卸载上述软件和 kiwi,并重装*新版 kiwi(apkpure)。 结果:无效
手机:mi mix2s ,MIUI 10 9.9.3 开发版
感受科技之美
昨天还好好的,没有广告,今天突然就出现了。 自带浏览器,x 浏览器都没有受影响。 广告内容有 淘宝 JD PDD 等 如下。
*近 3 天也没有更新过插件 只安装过 ourplay fortnite epic-games
尝试:卸载上述软件和 kiwi,并重装*新版 kiwi(apkpure)。 结果:无效
手机:mi mix2s ,MIUI 10 9.9.3 开发版
好久没有写过博客啦,今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心*新如何注册应用,申请证书以及下载配置概要文件,相信很多刚开始接触ios的人会很想了解一下。(ps:网上看了一下虽然有很多讲述推送的好教程,我也是看着一步步学会的,但是这些教程的时间都是去年或者更早时期的,对引导新手来说不是很合适)
*部分
首先*步当然是介绍一下苹果的推送机制(APNS)咯(ps:其实每一篇教程都有),先来看一张苹果官方对其推送做出解释的概要图。
Provider是给你手机应用发出推送消息的服务器,而APNS(Apple Push Notification Service)则是苹果消息推送服务器。你本地的服务器当需要给应用推送一条消息的时候,先要将消息发出到苹果推送服务器,然后再由苹果推送服务器将消息发到安装了该应用的手机。
接下来再看一张解释图:
根据上图的逻辑我来给大家解释一下:
1.你的IOS应用需要去注册APNS消息推送功能。
2.当苹果APNS推送服收到来自你应用的注册消息就会返回一串device token给你(很重要)
3.将应用收到的device Token传给你本地的Push服务器。
4.当你需要为应用推送消息的时候,你本地的推送服务器会将消息,以及Device Token打包发送到苹果的APNS服
5.APNS再将消息推送给目的iphone
第二部分
1.从证书颁发机构颁发证书
打开你mac的钥匙串访问: 然后点击钥匙串访问
随后它会弹出一个窗口用户电子邮件信息就填写你苹果开发者账号的名称即可(应该是一个邮件名称),点击保存到磁盘的选
项,点击继续,显示如下:
点击存储,文件名为:CertificateSigningRequest.certSigningRequest 随后将他放在一个文件夹中我们取名push吧!
第三部分
访问苹果开发者网址:https://developer.apple.com/
选中MemberCenter选项,进入登陆页面,用你的苹果开发者账号登陆,过一会网页就会自动跳转到下图。
点击红色所选部分内容进行下一步的操作。
选择Certificates选项,设置证书,如图所示先解释一下:
Development选项的作用顾名思义就是用来作为开发使用的证书,Production选项则是用来发布产品使用的,名称很陌生是不是,之
前的开发者网页是没有这一选项的,可能是苹果把他修改了,用这个名称更加能让人理解吧(字面上解释就是产品么)。两个选项生
成证书的步骤是一样的,现在我们使用开发者的选项进行证书的制作,步骤如下:选择Development选项
点击上面的加号选项,
选择APNS选项(开发么当然是在沙盒环境下了,模拟真实情况),然后Continue
这个AppID我们在下一部分讲如何生成,现在我用的是已经生成好的一个应用ID,继续Continue
这边就要选择在钥匙串访问环节下载下来的CertificateSigningRequest.certSigningRequest文件了,选择并生成:
点击下载,得到aps_development .cer,保存到push文件中去。
新建一个AppID,选择网页上的AppIDs,然后点击右上角的 “加号”
App的取名只要按照苹果要求的就可以了
然后BundleID是比较重要的,在提交审核以及测试(苹果的TestFlight)和付费环节都需要用到,也只需按照苹果要求来写就好了。
接下来就是对你的应用需要使用苹果的哪些服务进行选择就行了,例如广告,游戏中心,推送,付费等等情况。
*后选择“Submit”选项,在下一个界面中选择“done”选项,这样我们设置AppID的步骤我们就完成了。
这个配置概要文件分为两种,一种是为开发使用的,还有一种则是为发布到appStore上面。
创建发布版的ProvisioningProfile与开发版的流程相同,点击Development然后点击右上角的加号
会进入选择何种配置概要文件的界面:
我们现在时测试,所以选择“IOS App Development”的选项,在下面的Distribution发布选项中有两个选择,“App Store”以及
“Ad hoc”,你可以根据下面的描述选择你发布所需的选项。点击Continue进入下一步。
选择你上一步创建的AppID,点击Continue 进行下一步
选择你的开发者账号,Continue进行下一步
在这一步上选择你的设备(你只有在这一步上勾选了你的设备,你才能在设备上用这个签名进行调试)。关于如何将你的设备号添加
进去也是非常简单的,选择左侧的”Devices”,然后点击右上角的加号,在随后出来的页面上添加你设备的UUID(在XCode中可以查
看到)以及name( 可以随便取,自己看的懂就行)然后Register一下,照着流程走到*后一步就完成了。
好咱们继续回到上面的Provisioning Profile配置环节,当你选好了你的设备后点击“Continue”进入下一页,
输入一个文件名(*好是起的能看懂是干嘛的,当然也可以随便起),点击“Generate”进入下一个页面,在这个页面中就会有一个下
载按钮让你下载这个文件,我们把它下载下来放在Push文件夹中。
好了,前期的准备工作都已经做完了,现在让我们开始推送吧!(吼吼)
首先双击我们生成的 “aps_development .cer” 文件,进入钥匙串访问,找到我们的专用秘钥(根据在第二部分中从证书机构颁发证书操作中填写的常用名)
我在第二部分填写的是“silicon”,由于换了一台mac之前安装的没有了,之前没有截图,所以随便找了个图给大家看一下,凭大家的聪明才智应该不难理解吧。
然后右击导出,会弹出如下所示的图。
将他存储到push文件夹中,命名为“push.p12”,在这一步中导出会让你输入密码并验证,你可以自定义一个密码,例如abc123
现在push文件夹中应该有几个文件“aps_development .cer” ,”push.p12″,“CertificateSigningRequest.certSigningRequest”以及
刚才下下来的配置概要文件。
接下来我们打开终端将他们生成.pem文件
1.把aps_development .cer文件生成.pcm文件,cd到push文件夹下
2.把push.p12文件生成为.pem文件
上边输入的密码则是你导出证书所设的密码,即abc123.接着还会让你输入.pem文件的密码,还是使用abc123好了,防止混淆。
这样我们在push文件夹中就又得到了两个文件,PushChatCert.pem和PushChatKey.pem。
3.把PushChatCert.pem和PushChatKey.pem合并为一个pem文件,
在push文件夹中又多了一个ck.pem文件,以上我们把需要使用的文件都准备好了
接下来就要测试一下啦,是不是很激动~
为了测试证书工作的状况,我们可以使用“telnet gateway.sandbox.push.apple.com 2195”来检测一下,如果显示下图则表示成功了。
然后,我们使用我们生成的证书和私钥来设置一个安全的链接去链接苹果服务器
在终端输入如下命令:openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
需要输入密码(abc123 我们刚才所设置的)。
然后他会返回一系列的数据,这里我就粘贴一部分啦:
CONNECTED(00000003)
depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority – L1C
verify error:num=20:unable to get local issuer certificate
verify return:0
—
Certificate chain
。。。。。(省略)
。。。。。(省略)
。。。。。(省略)
Start Time: 1416389389
Timeout : 300 (sec)
Verify return code: 0 (ok)
—
测试就到这里啦。。。
1.建立推送项目
//
// AppDelegate.m
// TestPushNotifiy
//
// Created by silicon on 14-10-30.
// Copyright (c) 2014年 silicon. All rights reserved.
//
#import “AppDelegate.h”
@implementation AppDelegate
@synthesize mainView = _mainView;
– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
{
//IOS8
//创建UIUserNotificationSettings,并设置消息的显示类类型
UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:nil];
[application registerUserNotificationSettings:notiSettings];
} else{ // ios7
[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert)];
}
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
self.mainView = [[MainViewController alloc] initWithNibName:@”MainViewController” bundle:nil];
self.window.rootViewController = self.mainView;
return YES;
}
– (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken{
NSLog(@”—Token–%@”, pToken);
}
– (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@”userInfo == %@”,userInfo);
NSString *message = [[userInfo objectForKey:@”aps”]objectForKey:@”alert”];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@”提示” message:message delegate:self cancelButtonTitle:@”取消” otherButtonTitles:@”确定”, nil];
[alert show];
}
– (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
NSLog(@”Regist fail%@”,error);
}
– (void)applicationWillResignActive:(UIApplication *)application
{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
– (void)applicationDidEnterBackground:(UIApplication *)application
{
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
– (void)applicationWillEnterForeground:(UIApplication *)application
{
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
– (void)applicationDidBecomeActive:(UIApplication *)application
{
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
– (void)applicationWillTerminate:(UIApplication *)application
{
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end
在appdelegate.m中加入以上代码,
if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
{
//IOS8
//创建UIUserNotificationSettings,并设置消息的显示类类型
UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:nil];
[application registerUserNotificationSettings:notiSettings];
} else{ // ios7
[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert)];
}
由于ios8的推送跟ios7及以下的不一样,所以需要加判断来注册消息推送。
函数:
– (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken{
NSLog(@”—Token–%@”, pToken);
}
会接收来自苹果服务器给你返回的deviceToken,然后你需要将它添加到你本地的推送服务器上。(很重要,决定你的设备能不能接收到推送消息)。
– (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@”userInfo == %@”,userInfo);
NSString *message = [[userInfo objectForKey:@”aps”]objectForKey:@”alert”];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@”提示” message:message delegate:self cancelButtonTitle:@”取消” otherButtonTitles:@”确定”, nil];
[alert show];
}
这个函数则是当设备接收到来自苹果推送服务器的消息时触发的,用来显示推送消息。
– (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
NSLog(@”Regist fail%@”,error);
}
当注册失败时,触发此函数。
2.PHP服务端
将simplepush.php这个推送脚本也放在push文件夹中
<?php
// ??????????deviceToken???????????????
$deviceToken = ‘c95f661371b085e2517b4c12cc76293522775e5fd9bb1dea17dd80fe85583b41’;
// Put your private key’s passphrase here:
$passphrase = ‘abc123’;
// Put your alert message here:
$message = ‘My first push test!’;
$ctx = stream_context_create();
stream_context_set_option($ctx, ‘ssl’, ‘local_cert’, ‘ck.pem’);
stream_context_set_option($ctx, ‘ssl’, ‘passphrase’, $passphrase);
// Open a connection to the APNS server
//??????????
//$fp = stream_socket_client(?ssl://gateway.push.apple.com:2195?, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);
//?????????????appstore??????
$fp = stream_socket_client(
‘ssl://gateway.sandbox.push.apple.com:2195’, $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit(“Failed to connect: $err $errstr” . PHP_EOL);
echo ‘Connected to APNS’ . PHP_EOL;
// Create the payload body
$body[‘aps’] = array(
‘alert’ => $message,
‘sound’ => ‘default’
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack(‘n’, 32) . pack(‘H*’, $deviceToken) . pack(‘n’, strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo ‘Message not delivered’ . PHP_EOL;
else
echo ‘Message successfully delivered’ . PHP_EOL;
// Close the connection to the server
fclose($fp);
?>
deviceToken填写你接收到的token,passPhrase则填写你的ck.pem设置的密码。
此刻就是见证奇迹的时候了,使用终端进入到push文件夹,在终端输入 php simplepush.php
若显示以上提示则表示推送成功了。附上一张成功图。
推送就到这边吧!
可能有很多企业用户会觉得在企业内部部署公有云平台不如私有云平台可靠,有这种想法和观点的用户不在少数,尤其是对于一些规模较大的企业用户来说,在选用云计算平台的过程当中,往往觉得没有一个合适可靠的公有云平台。
放眼全球市场我们不难发现,在美国以及欧洲市场上,公有云服务已经大范围普及,很多企业级用户都在使用亚马逊AWS,微软Azure和Rackspace等云计算厂商所提供的公有云服务,上述的云服务也在近几年逐步的落地中国,在国内市场上生根发芽。
那么对于企业用户来说,为什么还会觉得公有云不靠谱?公有云服务落地国内在技术和服务层面究竟面临着怎样的问题呢?
基础设施建设是重中之重
在美国和欧洲,机房是资本密集型的生意,就好像房地产生意,Equinix,Coresite等是比较大的几家。机房是一种功能性的房地产,对抗震,制冷,电力等等都有不同的需求。Data center数据中心的建设和维护有严格的标准和认证,比如常听到的Tier4 data center,即对不同层级和水准的机房数据中心都拥有一套严格的认证体系。
此外,还有管理方面的诸多认证,比如SAS 70, ISO 27000,甚至环境保护方面的认证LEED Certification。大楼按照机房的要求建好以后欢迎租用。可以是整层,可以半层,甚至几个机柜都可以。公有云服务的提供商就按照自己的要求标准去看市场,很容易找到合适的Data Center。
在国内的机房建设方面目前往往是属于垄断的生意,只有一些少数有资源的企业才能够获得经营的资质,目前国内的*大部分机房都是运营商来建设和制造的,在整体建设方面我们不难发现,很多国内的数据中心机房往往找不到通过管理认证的数据中心,很多数据中心机房的安全措施进行的并不到位和彻底。
网络环境错综复杂
对于国外的网络环境来说,很多国家都具有强制性的要求,尤其是对于运营商们来说,在有限的网络资源和地域资源上去进行有效的网络环境建设,是非常重要的。今年的行情,1Gbps左右的带宽,自己没有骨干网,到处和人家peering凑起来的接入商,大概1美元/Mbps。Tier 1的ISP,拥有全国骨干网的几家,价格在3-5美元/Mbps。而拥有大量内容的客户,比如Facebook, Google, Netflix,以及云存储和CDN服务商们,可以得到大量免费的带宽,只有小部分需要购买。
在机房和机房之间的通信也是自由的,现在很多的数据中心机房采用的都是光纤通信的方式,以亚马逊AWS为例,其EC2推出了在同一个地区运行两个以上独立运行机房的运行模式,应用架构可以平行部署在两个机房里,但两个机房又是光纤直连的,媲美同一个机房的内网速度。所以用户完 全可以零成本的做到多个机房的部署,不怕单一机房的故障。
回归到国内市场,有一些业界专家曾经表示,因为北京市场上的BGP价格在100美元/Mbps。在台湾,中华电信一家独大,政府给的网间互连指导价是5美元/Mbps。在香港,HKIX里只要有ISP执照,就可以免费的和HKIX交换流量,和香港的所有运营商免费互联。
这种现状给全国的线上业务带来无尽的麻烦。几乎全部上规模的互联网业务都需要在两家运营商里复制两个以一样的系统,然后用load balancing的技术把电信的流量给电信的机房,联通的给联通。这种重复的建设不知道给运营商贡献了多少收入,以及制造了多少传说中的GDP,但也很大程度上提高了互联网领域的门槛,限制了创新。
当前,云计算服务在海外市场的资源管控方面基本上是没有限制的,越来越多的企业用户在不断提升产品以及资源运营能力的过程当中,从IaaS基础架构层面开始做起,通过整合开源的架构,同时结合诸如像Windows、SAP的软件服务,面对来自各个行业云计算用户的不同需求也就显得游刃有余了,这点是值得国内的云计算服务厂商们去学习的。
一、LNM+Python Djiango +uwsgi +redis 部署Python项目
(一)导入项目以及项目文件修改
上传压缩文件以及数据库到/opt (注意要把数据库建成sql文件上传)
然后解压上传项目文件
进入核心目录(两次cd mybbs) 注意:自己的项目名
进入设置文件(vim settings)
进入根目录下面,配置文件(注意:配置文件的信息要与自己的项目一致)
vim /etc/nginx/conf.d/py.conf
server {
listen 80;
server_name 10.0.0.100;
client_max_body_size 100M;
location /static {
alias /code/BBS/static/;
}
location /media {
alias /code/BBS/media;
}
location / {
index index.html;
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
uwsgi_param UWSGI_SCRIPT BBS.wsgi;
uwsgi_param UWSGI_CHDIR /code/BBS;
}
(二)数据库的操作
/etc/init.d/mysqld restart 启动数据库
systemctl start mysqld
systemctl restart mysqld 重启数据库
netstat -tulnp |grep 3306 查看数据库是否启动
注意:如果还是进不去就用数据库登录的账户名和密码
grant all on *.* to root@’10.0.0.%’ identified by ‘123’; mysql -uroot -p123
1
进入数据库以后腰创建一个bbs用户:
5.8版本下创建和授予权限可以一起,用户不在自动创建
5.7下要先创建用户,后授予权限
grant select,update,delete ,insert on bbs.* to bbs@’10.0.0.%’ identified by ‘123’;
mysql -ubbs -p123 -h10.0.0.100 bbs用户登录
drop database bbs; 删除数据库里面的表
create database bbs charset utf8mb4; 再创建一个bbs数据库,注意编码格式要和数据库文件的编码格式一致
use bbs; 使用创建库
use bbs; 导入指定目录下的项目数据库
show tables; 查看导入结果
二MySQL用户操作
用户定义 : USERNAME@‘白名单’
白名单:主机域IP地址
root@‘localhost’ 只允许本机的root用户进行访问
root@‘10.0.0.110’ 只允许root用户通过10.0.0.110地址进行访问
root@‘10.0.0.%’ 允许10.0.0.N网段的root用户进行访问
root@‘10.0.0.0/255.255.240.0’
root@‘10.0.0.5%’ 允许10.0.0.5N ip地址的root用户进行访问
root@‘%’ 允许所有root用户进行访问
1.权限操作介绍
grant all 除root用户外的*高权限
grant selent,update,insert 生产环境下,通常的项目权限
将del操作,替换成update操作 – 使用状态链,1,0表示可否可视
注意:也就是新创建一个新的字段,在查询的时候根据这个新的字段进行查询,需要定期清理字段的固定属性
grant select,update,delete ,insert on bbs.* to bbs@’10.0.0.%’ identified by ‘123’;
bbs.*库的增删改查权限,给予bbs@’10.0.0.%’ 进行链接,并创建用户(创建用户并授权操作,仅限mysql5.7版本);密码为123
1
2
三.Nginx的配置
查看nginx是否启动:systemctl status nginx
启动nginx:systemctl restart nginx
在项目的一层目录下面配置:
vim /etc/nginx/conf.d/py.conf
server {
listen 80;
server_name 10.0.0.100;
client_max_body_size 100M;
location /static {
alias /opt/mybbs/static/;
}
location /media {
alias /opt/mybbs/media;
}
location / {
index index.html;
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
uwsgi_param UWSGI_SCRIPT mybbs.wsgi;
uwsgi_param UWSGI_CHDIR /opt/mybbs;
}
*后启动uginx即可:uwsgi –ini uwsgi.ini &
注意:文件uwsgi.ini文件目录
四 uwsgi的配置
在项目的一层目录下面配置:
ps -ef |grep uwsgi 查看所有uwsgi的进程
kill -9 ps -ef |grep uwsgi|awk {‘print $2’} 强制杀死已有uwsgi进程
vim uwsgi.ini 在项目目录内生成配置文件
[uwsgi]
socket = 127.0.0.1:9090
master = true
workers = 2
reload-mercy = 10
vacuum = true
max-requests = 1000
limit-as = 512
buffer-size = 30000
uwsgi –ini /opt/mybbs/uwsgi.ini & 后台启动uwsgi进程,注意配置文件路径
systemctl restart nginx 重启nginx
本文是在美国和中国的互联网和云服务领域有近10年经验的专业人士Lillian Shao应PingWest邀请撰写的文章。从专业的角度解析了为什么在美国和世界很多地区已经大范围普及、对创业者帮助甚大的“公有云”服务,在中国却很难落地的各个维度原因。
以下是全文内容:
经常会听到大家询问为什么在中国没有可靠的公有云服务。国际上成熟的云服务比如亚马逊AWS,微软Azure和Rackspace等移植到中国固然是难上加难,可是,国内土生土长的阿里云和盛大云等,即使没有政策上面的限制,也面临很多基础设施方面的问题。我一直坚信中国有全世界*聪明*有才华的工程师,技术上给些时间,不会有任何差距。但巧妇难为无米之炊,在中国建立“公有云”服务恐怕是世界上难度*大的。下面列出了这样一些我观察到的不同。
机房基础设施
在美国和欧洲,机房是资本密集型的生意,就好像房地产生意,Equinix,Coresite等是比较大的几家。机房是一种功能性的房地产,对抗震,制冷,电力等等都有不同的需求。Data center数据中心的建设和维护有严格的标准和认证,比如常听到的Tier4 data center,即对不同层级和水准的机房数据中心都拥有一套严格的认证体系。
此外,还有管理方面的诸多认证,比如SAS 70, ISO 27000,甚至环境保护方面的认证LEED Certification。大楼按照机房的要求建好以后欢迎租用。可以是整层,可以半层,甚至几个机柜都可以。公有云服务的提供商就按照自己的要求标准去看市场,很容易找到合适的Data Center。
找不到也没关系,云服务公司有能力按照自己的标准建设机房,因为只需要买地,盖房子,申请电就可以,大大小小的网络运营商们会抢着把光缆拉进来的。所有机房都有meet me room,ISP(互联网基础设施服务商)都把光缆接进去互联。而且考虑在风能,水电便宜,地广人稀的地方建设机房。当地政府也会非常的欢迎。此外,国外的机房普遍比较新。IDC说机房的平均寿命是9年,Gartner则说7年的Data center已经过于老化。
在中国,机房首先是垄断的生意,只有少数有资源的公司才能经营。首推国有电信运营商。中国的机房可能95%以上是电信运营商建设的。上面我还没有说到网络,下面可以展开再说,这里我们只讨论基础设施的部分。运营商们可以硬件上建成看起来还像样的机房,管理上基本没有通过任何标准的认证。事实上造成一种现状,就是中国市场上基本找不过通过管理认证的数据中心。如果实地考察这些数据中心,可以看到的安全措施都往往执行不到位。比如一层层的门不是自动关闭,有时候一直敞开,属于不同客户的机柜进去后可以随意打开。还听说过有的机房工作人员忍不住在室内抽烟。
也许你受够了运营商,想找像美国那样独立运营的数据中心,选择真的不多,质量更良莠不齐。我看过北京东方广场地下室的机房,机房从安全上考虑实际上根本不可以建在地下室。但这家机房有众多世界500强客户。我还看过首都机场附近的机房,从安全上考虑机房也根本不应该靠近机场。上个月,北京某家独立数据中心因为断电,导致亚马逊和凡客等多个网站中断数个小时的服务。但没有办法,即便是亚马逊中国,也必须降低标准才能在中国找到数据中心,这种情况只能是*好的选择了。题外话是,亚马逊中国建立了把国内内容定期备份到亚马逊海外的云服务AWS上的机制,所以是各个网站里*快恢复服务的。在中国,线上业务对运维的挑战恐怕是全世界*大的。
世纪互联算是国内为数不多通过ISO认证的独立运营的数据中心。但在网络的互联上他们也非常依赖于运营商。看他的网站上说BGP(边界网关协议)的带宽全网400多Gbps。这个可能就是全球某个一线互联网公司的日常流量而已。而且,它们的机柜也一直处于供不应求的状况。中国互联网的发展速度非常快,互联网机房基本成为稀缺资源,即使这样那样的问题,仍然是供不应求的。
自建机房?这在中国目前还没有听说成为可能我指的是真的像Google、 Facebook那样从外到内的自建。只是若干年前听说某家国内的云服务公司要在祁连山利用风能的地方的建IDC,*后没有结果,而力荐这个项目的人也离开公司回美国了。
可能有人说:中国那么多互联网公司,在这样的机房条件下不都在提供服务吗?我们也诞生了那么多好的互联网公司啊。问题是对于云服务提供商来说,是把服务建设在机房里提供给开发者,再面向*终用户服务的。开发者自己的机房坏了,可以骂机房,云服务提供商的机房断电了,自己是千夫所指,骂谁都没有用。而且有实力做公有云服务的都是big name的公司,大家爱惜羽毛,要做都要做高标准的。
————————————————
原文链接:https://blog.csdn.net/libin_1/article/details/8277685
公有云对各种规模的企业如何接受IT服务产生了重大影响。*代、第二代、第三代公有云先后出现,让我们来回顾云的演变,并展望未来。
*代公有云
弹性和自助服务是2006年出现的*代公有云的巨大优势。开发人员可以自己快速创建一个新的应用程序,并且花费很少。如果应用程序吸引了更多需求,他们可以自动扩展服务。为公有云开发的*组工作负载是消费者应用程序,如Netflix和Dropbox。
使用内部部署的数据中心很难实现弹性和自助服务。这是因为开发人员必须规划好计算资源以及扩展。IT必须分配现有基础设施或征用新的基础设施,这意味着大量的资本支出和前期成本。完成请求通常可能需要几个月。自然而然的,这些挑战使得更多开发人员采用按需的公有云服务,因为可扩展性和速度意味着应用程序成功的机会更大。
第二代公有云
有些企业对是否迁移到*代公有云犹豫不决。它们*大的担忧与安全和数据主权有关。但是,随着时间的推移,企业希望实现更低的资本支出、更快的价值实现和更高的业务敏捷性,它们就越来越关注公有云。凭借在权利管理、治理和系统监控方面多年的经验,公有云提供商在2011年大大缓解了企业对安全的担忧。
企业已经意识到要自己实现公有云提供商所提供的安全流程、人员和监控工具有多么复杂。随着安全功能不断发展,大多数CIO现在都认为公有云提供商可以比内部资源更好地保护企业信息资产,这就意味着企业采用公有云的快速增长。
在此期间,许多基础设施供应商尝试使用OpenStack和CloudStack等工具提供自助服务、计量和弹性功能。然而,事实证明,内部私有云基础设施与提供数百种服务的公有云相比,价格和功能略逊一筹。
一系列令人印象深刻的云服务目前很受欢迎,包括为第1代和第2代公有云构建的交钥匙、多租户服务,例如Azure SQL数据库和Amazon EMR。企业对“信息技术即服务”概念的兴趣增加,对私有云的兴趣也在增加。但许多精明的CIO开始意识到,运营自己的数据中心或者外包给二级服务提供商都不会真正达到他们对业务的期望。
第三代出现了
第三代公有云在2016年出现。即使是*大的企业也在努力运营两三个数据中心,一个共识形成——运营内部数据中心对大多数公司的发展和增长并不具有多大的战略意义。数据中心需要连接到昂贵的10-100Mbps租用线路,所需的人员成本高昂,这些都阻碍了对宝贵IT资源的更多战略性使用。
因此,CIO们不仅开始认真考虑管理所有基础设施所涉及的总体成本,而且更重要的是,他们看到了内部部署的本地基础设施的一些不足。企业迁移到公有云的速度比任何人预期的都要快。
例如,当你将内部部署的数据中心与Microsoft Azure进行比较时,发现借助Azure,每个企业都可以即时访问全球50多个地区,而所有这些地区都连接着30-40Gbps的互联网骨干网。这在内部部署是不可能的,全球分布式架构为企业提供了令人兴奋的新机会。
*代云解决方案(如Azure SQL数据库)和传统的内部部署解决方案(如Oracle数据库)并没有充分利用全球分布式架构。这就是它们无法提供良好服务的原因。它们陷在无法轻松扩展的旧架构里,无法跟上基于现代架构的第三代公有云解决方案。
目前有一些解决方案可以有效利用这种现代化的全球分布式架构。其中一个是Microsoft的新数据库服务,名为Azure CosmosDB。它是一个全球分布的多模式数据库,具有低延迟和全球扩展能力。这就是企业实现敏捷性所需要的——速度和可扩展性。
*代VDI解决方案与旧的Oracle数据库非常相似,都是内部部署的。它们的部署和故障排除非常复杂,购买和维护成本高昂,并且在生产环境中的表现令人失望。而且,这些解决方案吞噬了IT资源并阻碍了企业的发展。
第二代VDI解决方案更好,但这些解决方案没有利用公有云的全球分布式架构。
第三代VDI解决方案从一开始就构建为支持多租户、交钥匙和大规模。现在,第三代VDI客户可以在几分钟内在世界上的任何云区域部署虚拟桌面和应用程序,然后可以几乎无限扩展。这是全新的功能,由全球分布式架构独特支持,使企业能够实现前所未有的灵活性,为企业发展带来令人兴奋的新机遇。
原文链接:
https://www.itproportal.com/features/private-v-public-cloud-can-the-private-cloud-keep-up/
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
前不久,前财政部长楼继伟在中国经济50人论坛研讨会上,分析“双循环战略”中,“国内大循环”的堵点时表示:“基础设施适度超前是必要的,但有些方面过度超前,抬高了用户成本或不可持续的公共部门债务。现有5G技术很不成熟,数千亿级的投资已经布下,而且运营成本*高,找不到应用场景,今后消化成本是难题。” 此事引发了热烈的讨论,楼继伟部长被称为公开发对5G建设*人。那么5G到底是新基建的热点机会,还是个坑呢?
首先从目前财务状况来看,4G网络覆盖全面完成和网络优化也基本完成,运营商进入投资回收期,2019年中国移动收入为7459亿元,折旧及税前利润为2960亿元,折旧摊销为1828.18亿元,净利润为1066亿元,为了改善财务报表,将4G无线资产的折旧由5年改为7年,证明4G网络这么金额巨大的折旧摊销,中国移动都有点吃不消,会影响每年的净利润情况,所以4G的回收周期被迫拉长,如果我们现在大规模上马5G,将带来巨大的财务压力,经营情况*好的中国移动尚且如此,其它几大运营商可想而知。
从投资成本角度考虑,5G需要更密集的覆盖,目前我国城镇化率高,土地更贵,新建基站面临高成本的问题,有俄罗运营商就发声5G在20年内很难回本。
从运营成本角度来看,更密集的基站,更快的速率,意味着更高的能耗,运营商工作的网友提供了数据,5G每年将要用掉4200亿元的电费,这是三大运营商年收入的三分之一。
从应用场景来看,目前4G基本满足现有移动互联网的需求,当然在云游戏,云VR,万物互联时代5G将是更好的选择,但是目前来看这些应用场景还没有特别成熟的商业模式,所以5G的应用,也需要相应的应用场景的成熟。
综上,5G建设将给运营商带来沉重的财务和运营负担,从运营商正常的商业角度来看他们大规模建设5G的积*性应该不会太强。
从国家整体战屡来看,5G是拉动我国ICT上下游产业发展*佳抓手,我国企业在5G领域积累了大量专利技术,5G的蓬勃发展,能够促进我国在通信技术领域的*优势,但是只有成功的商业模式才能助推产业持续的成长,没有正常的投资回报,高投资、高成本、高补贴的模式很难持续。
所以,5G的产业政策与方向将考验我国信息产业决策层的智慧和勇气,我们拭目以待。
Python中如何求列表list的平均数
Python中如何求列表list的平均数
当列表list中只包含数字时,如何求取它的平均数:
from numpy import *
a = [52,69,35,65,89,15,34]
b = mean(a)
print(b)
运行结果:
51.285714285714285
python–RGB转HSV
RGB:颜色空间相对简单,也*为普遍,就分为三个颜色通道,分别为红色,绿色,蓝色这三种基本色调的值,然后将这三个颜色融合在一起,也就成为一种颜色。
HSV:是个六棱锥模型,这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。
为什么使用HSV去判断色差:
用RGB比较颜色之间的相似度时,往往一个通道的一点改变,会导致*后融合在一起的颜色发生巨大变化,而如果三个通道的同时改变,却只会使*后的明暗发生变化,色调并不会产生巨大变化。
RGB TO HSV
def rgb2hsv(r, g, b):
r, g, b = r/255.0, g/255.0, b/255.0
mx = max(r, g, b)
mn = min(r, g, b)
df = mx-mn
if mx == mn:
h = 0
elif mx == r:
h = (60 * ((g-b)/df) + 360) % 360
elif mx == g:
h = (60 * ((b-r)/df) + 120) % 360
elif mx == b:
h = (60 * ((r-g)/df) + 240) % 360
if mx == 0:
s = 0
else:
s = df/mx
v = mx
return h, s, v
计算HSV的距离
def HSVDistance(hsv_1,hsv_2):
H_1,S_1,V_1 = hsv_1
H_2,S_2,V_2 = hsv_2
R=100
angle=30
h = R * math.cos(angle / 180 * math.pi)
r = R * math.sin(angle / 180 * math.pi)
x1 = r * V_1 * S_1 * math.cos(H_1 / 180 * math.pi);
y1 = r * V_1 * S_1 * math.sin(H_1 / 180 * math.pi);
z1 = h * (1 – V_1);
x2 = r * V_2 * S_2 * math.cos(H_2 / 180 * math.pi);
y2 = r * V_2 * S_2 * math.sin(H_2 / 180 * math.pi);
z2 = h * (1 – V_2);
dx = x1 – x2;
dy = y1 – y2;
dz = z1 – z2;
return math.sqrt(dx * dx + dy * dy + dz * dz)
HSV To RGB
def hsv2rgb(h, s, v):
h = float(h)
s = float(s)
v = float(v)
h60 = h / 60.0
h60f = math.floor(h60)
hi = int(h60f) % 6
f = h60 – h60f
p = v * (1 – s)
q = v * (1 – f * s)
t = v * (1 – (1 – f) * s)
r, g, b = 0, 0, 0
if hi == 0: r, g, b = v, t, p
elif hi == 1: r, g, b = q, v, p
elif hi == 2: r, g, b = p, v, t
elif hi == 3: r, g, b = p, q, v
elif hi == 4: r, g, b = t, p, v
elif hi == 5: r, g, b = v, p, q
r, g, b = int(r * 255), int(g * 255), int(b * 255)
return r, g, b
友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速 |