月度归档: 2021 年 3 月

开发者MAC电脑里的常见兵器

古人常以刀、枪、剑、戟、斧、钺、铲、叉、鞭、锏、锤、戈、镋、棍、槊、棒、矛、钯十八种兵器,样样精通,来形容一个人的武学技能get状态。在开发者的世界里,熟练掌握各种辅助工具,可以达到事半功倍,快速提高工作效率的效果。闲话不扯了,来看看究竟是什么。
道场

习武学道讲经论法总有个场所,这样容易把有意向来学习的人聚集起来,而且有助于信息的传播,精力的集中,技能的修炼,经验的交流和水平高下的切磋。工具的运用也是在一个特定的开发环境里才能发挥出比较好的效果。

我这里的开发环境(DOJO)是苹果公司Apple Inc.()2014年出的一款Mac Pro,具体配置如下:

MacBook Pro(Retina 显示屏,15 英寸,2014 年中)

处理器 2.2 GHz Intel Core i7

内存 16 GB 1600 MHz DDR3

图形卡 Intel Iris Pro 1536 MB

操作系统 OS X EI Capitan

这里描述的工具都是运行在这个硬件以及软件环境的,经过了2年多的开发经验/经历的靠谱验证,所以拿来分享给大家。

如果有朋友的研发环境和这里描述的不太一致,那么仅作参考吧,具体结合自己的情况。

为了方便检索,所以增加了工具分类。

开发*步是做什么?学习文档?画流程图?还是直接写代码?恩,先从学习文档开始吧。

文档查看

Dash

写代码的时候是不是有些API记不住,比如画椭圆该用哪个类?计算开平方用什么函数?怎么连接远程的mysql服务器检索数据?这个时候一般怎么办?问度娘?问谷歌?直接查看在线编程文档?

在国内问谷歌需要*,那么涉及到另外工具的使用。查看在线文档,如果记不住入口网址怎么办?放收藏里啊,如果入口改变了呢?还是需要问搜索引擎啊!那么问题来了,度娘乱贴小广告咋办?用Dash吧,一个APP搜罗了这个世界上几乎所有的编程语言文档,而且更新速度快。

软件主页以及下载地址:https://kapeli.com/dash

流程图设计
OmniGraffle有很多人推荐,不过笔者觉得这个软件太贵了,所以推荐了两款免费的软件流程设计工具。

XMind

主攻脑图(思维导图),流程图也支持,另外还有日程安排计划等额外的功能。

软件主页以及下载地址:http://www.xmind.net/

Gliffy Diagrams
并不是一个独立安装的APP,而是作为Chrome的插件,可以去Chrome的App Store下载安装,很轻量,运行速度快。

软件主页:https://www.gliffy.com/

文本编辑器
不仅限于代码编辑,一款好的编辑器会让你的编辑工作充满愉悦。

MacVim

为什么我一开始不推荐时下流行头牌Sublime呢?因为,我用vi/vim已经超过十年的时间了。当初在学校,vm/emacs二选一,我选择了更容易上手实践的vi,从此一直用它来查看/编译文本/代码。

软件主页以及下载地址:http://macvim-dev.github.io/macvim/

MacDown
一般代码查看和编辑用Vi就够了,剩下其他的文档,恩,现在大多数文章/文档采用的MarkDown语法编写,所以用一款MarkDown编辑器就够了。比如本文的编写,我用的MacDown编辑器,文章语法采用MarkDown语法。既然是MarkDown编辑器,那么有人会提到用Mou,笔者也试用过一段时间,遇到了一些问题,比如语法支持和界面显示,后来改用MacDown,觉得各方面都支持的不错,所以一直使用。

软件主页以及下载地址:http://macdown.uranusjr.com/

Sublime Text
如果你不是一路走着linux从事开发的话,估计很难对Vi/Emacs熟悉。那么,像note++或者ultraedit这类第三方编辑器会是你比较不错的选择。相比于集成开发环境IDE的笨重,运行慢和耗内存,选择一个轻量级的编辑器是在平时比较频繁的非常规查看/编辑代码/文档时一个不错的选择。那么,以前那些用第三方编辑器的用户都去哪儿了?应该就是这个Sublime Text了吧。

软件主页以及下载地址:http://www.sublimetext.com/

图片编辑器
写文章撸代码,除了文字的处理外,还需要有美图的点缀和衬托。更多时候,图是吸引流量和眼球的一种重要手段。

GIMP

为啥不用Adobe Photo Shop呢?太贵,太复杂。那么,好吧,这里笔者推荐用GIMP,PS该有的,它基本都有。

软件主页以及下载地址:http://www.gimp.org/

集成开发环境IDE
集成开发环境一般是集编辑,编译,链接,调试,版本管理和打包发布于一体的大型开发软件。它的特点是功能丰富,上手快,易操作。缺点也显而易见,笨重,运行速度慢,需要更多的CPU,内存资源。

Eclipse

老牌万金油型集成开发环境,上手快,支持几乎所有语言,但是近几年使用人数在下滑,逐渐转向Android Studio和IntelliJ IDEA了。

软件主页以及下载地址:http://www.eclipse.org

Android Studio
安卓程序猿专属开发环境。

软件主页以及下载地址:https://developer.android.com/studio/index.html

IntelliJ IDEA
Eclipse替代品,支持市面上大部分流行的开发语言和框架,上手快,界面更加人性化,现代集成开发环境的典范。

软件主页以及下载地址:https://www.jetbrains.com

Xcode
苹果公司官方唯一指定的Object-C与Swift集成开发环境。

软件主页以及下载地址:https://developer.apple.com/xcode/

分析调试类
APP写好了,安装到设备,但是从网络拉取图片显示失败了,怎么破?APP打安装包后想看下包里面到底有些啥?遇到这样的问题,这个的工具可以帮助你解决上面遇到的问题。

Wireshark

老牌网络抓包利器,各种平台都可以玩耍。

软件主页以及下载地址:https://www.wireshark.org/

tcpdump
这是一个命令行工具,可以看作是Wireshark的命令行版。

系统自带,无需额外安装。使用帮助

Charles

网络抓包利器加上代理功能,并支持自签名证书,所以可以用来在手机上抓取https的包。使用非常方便。付费软件,值得购买。

软件主页以及下载地址:https://www.charlesproxy.com/

JD-GUI
Java的class文件反编译神器,可以从二进制class文件查看它的Java源代码。

软件主页以及下载地址:http://jd.benow.ca/

JADX
JD-GUI的增强版,支持查看安卓apk/dex文件中反编译的Java源代码以及查看apk中其他文件的内容。

软件主页以及下载地址:https://github.com/skylot/jadx

版本管理
频繁的修改,反悔,记录需要管理,所以版本管理是必须的。

SourceTree

Atlassians出品的图形化版本管理工具,支持Git和Mercurial。

软件主页以及下载地:https://www.sourcetreeapp.com/

文件共享
从文件服务器(FTP, Samba etc.)下载资料或者上传文件到服务器上。

FileZilla

老牌Sourceforge开源文件传输软件。

软件主页以及下载地址:https://sourceforge.net/projects/filezilla/

证书管理
证书一般用于https加密,移动APP软件的安装文件签名。

Portecle

图像化管理证书的工具。

软件主页以及下载地址:https://sourceforge.net/projects/portecle/

截屏
截屏是强需求,没错。MAC下有截屏快捷键,只能截屏。一般用户截屏完毕后,不是马上发出去,而是做后期处理。

snip

截屏,编辑。

软件主页以及下载地址:http://snip.qq.com/

数据库
调试APP的时候,如果APP产生了数据,并且把数据保存在数据库(sqlite)中。如果想在开发主机上查看,可以用如下的工具。

Datum

查看sqlite数据库的内容。

软件主页以及下载地址:http://www.datumapps.com/

网络请求
有时候需要自己构造一个http网络请求(GET/POST),并查看输入输出的详细内容。简单的GET用浏览器可以代劳,复杂一点的需要浏览器安装插件支持。用如下的工具可以到达更好的效果。

wget

命令行工具。除了查看发送网络请求,查看结果外。另外一个用途是下载文件,特别是大文件,用浏览器下载经常会断线,而且断点续传做的不是太好。wget命令下载文件,支持断点续传,这个用起来不错。

curl

功能基本同wget,系统自带工具,无需安装。

rest-client

支持restful风格的网络请求构造,请求和结果相应。调试restful接口的好帮手。

软件主页以及下载地址:https://github.com/wiztools/rest-client

虚拟机&模拟器
我的电脑是MAC,可是招商银行的专业版没有MAC的客户端,肿么破?我想在MAC上看到安卓APP运行的情况,怎么办?安装一个虚拟机吧!

VirtualBox

老牌虚拟机软件,支持市面上几乎所有流行的操作系统。

软件主页以及下载地址:https://www.virtualbox.org/

genymotion
安卓模拟器,运行安卓APP如同在手机上一样的速度。

软件主页以及下载地址:https://www.genymotion.com/

MAC专用
有些工具是MAC系统专用的,比如用来管理苹果设备(iPad, iPhone, iMac, Mac etc.)配置文件的工具。

Apple Configurator

上App Store自行搜索下载安装。

使用帮助

服务端工具套件

有时候需要本地调试一些服务端提供的服务,或者是网站后台。这个时候一个开发/调试/模拟环境的选择变的重要了。还是那句不忘初衷的话,好的工具让你事半功倍!

Bitnami服务端套件

本地调试web服务器,nginx, mysql, php-fpm, etc.

软件主页以及下载地址:https://bitnami.com

Kitematic
Docker图形化管理工具。 软件主页以及下载地址:https://kitematic.com/

*利器
我要上谷歌搜索*新的Android开发文档和API,可是目前在国内用不了谷歌,怎么办?*吧!

ShadowsocksX

看标题,不多说,默默的下载,安装然后运行,配置,打开浏览器,访问谷歌,搜索Android就可以啦!

软件主页以及下载地址:https://sourceforge.net/projects/shadowsocksgui/

Lantern
如果上面那个不行,那么试试这个吧,不多说了。

软件主页以及下载地址:https://github.com/getlantern/lantern

iOS appstore审核被拒的各种原因以及相关条款

1. Terms and conditions(法律与条款)

1.1
As a developer of applications for the App Store you are bound by the terms of the Program License Agreement (PLA), Human Interface Guidelines (HIG), and any other licenses or contracts between you and Apple. The following rules and examples are intended to assist you in gaining acceptance for your App in the App Store, not to amend or remove provisions from any other agreement.(作为App Store的应用开发者,你必须接受如下条款:Program License Agreement (PLA),Human Interface Guidelines (HIG),以及任何你与apple签订的许可和合同。以下规则和示例是为了协助你的应用更快通过审核上架,而不是修正或取代之前的条款。)

 

2. Functionality(功能)

2.1
Apps that crash will be rejected(存在Crash(崩溃,死机)的应用会被拒。)

2.2
Apps that exhibit bugs will be rejected(存在明显bug的应用会被拒。)

2.3
Apps that do not perform as advertised by the developer will be rejected(不符合开发者描述的应用会被拒。)

2.4
Apps that include undocumented or hidden features inconsistent with the description of the App will be rejected(有未说明或隐藏特性或有悖描述的应用会被拒。)

2.5
Apps that use non-public APIs will be rejected(使用非公开API的应用会被拒。)

2.6
Apps that read or write data outside its designated container area will be rejected(试图读写非允许范围内的数据的应用会被拒。)

2.7
Apps that download code in any way or form will be rejected(试图以任何方式方法下载代码的应用会被拒。)

2.8
Apps that install or launch other executable code will be rejected(安装或运行其他可执行代码的应用会被拒。)

2.9
Apps that are “beta”, “demo”, “trial”, or “test” versions will be rejected(任何“beta”,“演示(demo)”,“试用(trial)”或“测试(test)”版本的应用会被拒。)

2.10
iPhone Apps must also run on iPad without modification, at iPhone resolution, and at 2X iPhone 3GS resolution(iPhone应用必须可以无条件运行在iPad上,支持普通iPhone分辨率和2倍iPhone 3GS分辨率。)

2.11
Apps that duplicate Apps already in the App Store may be rejected, particularly if there are many of them, such as fart, burp, flashlight, and Kama Sutra Apps.(任何与App Store中上架应用重复的应用会被拒,尤其是已经有了很多的:如放屁,打嗝,手电照明和爱经。)

2.12
Apps that are not very useful, unique, are simply web sites bundled as Apps, or do not provide any lasting entertainment value may be rejected(没有用处的应用,web页面简单组合的应用,或任何哗众取宠,不能提供娱乐价值的应用会被拒。)

2.13
Apps that are primarily marketing materials or advertisements will be rejected(纯粹用于市场推广或广告的应用会被拒。)

2.14
Apps that are intended to provide trick or fake functionality that are not clearly marked as such will be rejected(有意提供隐蔽或虚假功能,却又不能明显标示的应用会被拒。)

2.15
Apps larger than 50MB in size will not download over cellular networks (this is automatically prohibited by the App Store)(大于20MB的应用无法通过蜂窝网络下载安装(App Store自动处理)。)

2.16
Multitasking Apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.(多任务应用只允许在后台运行如下相应的服务:VoIP,音频播放,地理位置,任务记录,本地提醒等。)

2.17
Apps that browse the web must use the iOS WebKit framework and WebKit Javascript(应用只允许通过iOS WebKit框架和WebKit Javascript访问web页面。)

2.18
Apps that encourage excessive consumption of alcohol or illegal substances, or encourage minors to consume alcohol or smoke cigarettes, will be rejected(鼓励酗酒,使用违法药物,或诱导未成年人饮酒,吸烟的应用会被拒。)

2.19
Apps that provide incorrect diagnostic or other inaccurate device data will be rejected(提供错误的系统信息或设备数据的应用会被拒。)

2.20
Developers “spamming” the App Store with many versions of similar Apps will be removed from the iOS Developer Program(通过许多版本的类似应用对App Store造成干扰的开发者会被取消IDP身份。)

2.21
Apps that are simply a song or movie should be submitted to the iTunes store. Apps that are simply a book should be submitted to the iBookstore.(歌曲和电影应该提交到iTunes store。书籍应该提交到iBookstore。)

2.22
Apps that arbitrarily restrict which users may use the App, such as by location or carrier, may be rejected(随意通过位置或运营商来限制用户使用的应用会被拒。)

2.23
Apps must follow the iOS Data Storage Guidelines or they will be rejected(加入iCloud支持后,应用必须遵守iOS数据存储指南( iOS Data Storage Guidelines)否则将被拒。)

2.24
Apps that are offered in Newsstand must comply with schedules 1, 2 and 3 of the Developer Program License Agreement or they will be rejected(在Newsstand里提交的应用必须遵守Developer Program License Agreement的第1,2和3条,否则将被拒。)

 

2.25
Apps that display Apps other than your own for purchase or promotion in a manner similar to or confusing with the App Store will be rejected(与App Store类似的推荐或为其他应用做广告的应用将无法通过App Store审核。)

 

3. Metadata (name, descriptions, ratings, rankings, etc)(描述数据(名称,描述,评级,分类等))

3.1
Apps or metadata that mentions the name of any other mobile platform will be rejected(应用或者元数据中提到其他任意移动平台会被拒。)

3.2
Apps with placeholder text will be rejected(描述数据有未填写项,存留占位符文本会被拒。)

3.3
Apps with descriptions not relevant to the application content and functionality will be rejected(描述中提到与应用内容和功能无关信息会被拒。)

3.4
App names in iTunes Connect and as displayed on a device should be similar, so as not to cause confusion(应用在iTunes Connect与设备上显示的名称应该类似,否则会造成混淆。)

3.5
Small and large App icons should be similar, so as to not to cause confusion(不同尺寸的icon要一致,否则会造成混淆。)

3.6
Apps with App icons and screenshots that do not adhere to the 4+ age rating will be rejected(图标与截屏不符合4+年龄评级的应用会被拒。)

3.7
Apps with Category and Genre selections that are not appropriate for the App content will be rejected(应用的内容与所选分类和风格不符会被拒。)

3.8
Developers are responsible for assigning appropriate ratings to their Apps. Inappropriate ratings may be changed/deleted by Apple(开发者有责任把应用放到恰当的分级(Rating)。不恰当的评级可能会被Apple修改,甚至删除。)

3.9
Developers are responsible for assigning appropriate keywords for their Apps. Inappropriate keywords may be changed/deleted by Apple(开发者有责任给应用撰写恰当的关键词。不恰当的关键词可能会被Apple修改,甚至删除。)

3.10
Developers who attempt to manipulate or cheat the user reviews or chart ranking in the App Store with fake or paid reviews, or any other inappropriate methods will be removed from the iOS Developer Program(通过伪造,付费评价或其他非正规手段,获取App Store中较好的评价与星级的开发者会被取消IDP身份。)

3.11
Apps which recommend that users restart their iOS device prior to installation or launch may be rejected(任何提示需要用户重启iOS设备来安装或运行的应用会被拒。)

3.12
Apps should have all included URLs fully functional when you submit it for review, such as support and privacy policy URLs(应用在提交审核过程中,所有涉及到的URL都要处于正常运行状态,例如保密协议,相关支持页面等。)

4. Location(位置)

4.1
Apps that do not notify and obtain user consent before collecting, transmitting, or using location data will be rejected(未提示用户且获得用户允许之前收集,传输或使用位置数据的应用会被拒。)

4.2
Apps that use location-based APIs for automatic or autonomous control of vehicles, aircraft, or other devices will be rejected(使用location-based API来自动控制车辆,飞行器或其他设备的应用会被拒。)

4.3
Apps that use location-based APIs for dispatch, fleet management, or emergency services will be rejected(使用location-based API进行调度,队伍管理或应急服务的而应用会被拒。)

4.4
Location data can only be used when directly relevant to the features and services provided by the App to the user or to support approved advertising uses(位置数据只能用于应用提供的直接相关功能或服务,或者有授权的广告。)

5. Push notifications(提醒推送)

5.1
Apps that provide Push Notifications without using the Apple Push Notification (APN) API will be rejected(不使用Apple Push Notification(APN) API提供消息推送的应用会被拒。)

5.2
Apps that use the APN service without obtaining a Push Application ID from Apple will be rejected(使用APN服务却没从Apple获取一个Push Application ID的应用会被拒。)

5.3
Apps that send Push Notifications without first obtaining user consent will be rejected(在首次推送消息之前未取得的用户允许的应用会被拒。)

5.4
Apps that send sensitive personal or confidential information using Push Notifications will be rejected(使用提醒推送服务推送敏感的个人或机密信息的应用会被拒。)

5.5
Apps that use Push Notifications to send unsolicited messages, or for the purpose of phishing or spamming will be rejected(使用提醒推送发送主动消息,欺骗或干扰信息的应用会被拒。)

5.6
Apps cannot use Push Notifications to send advertising, promotions, or direct marketing of any kind(应用不可以使用提醒推送发送广告,活动或任何形式的直接推广信息。)

5.7
Apps cannot charge users for use of Push Notifications(应用不可以提供收费的提醒推送服务。)

5.8
Apps that excessively use the network capacity or bandwidth of the APN service or unduly burden a device with Push Notifications will be rejected(使用APN服务过度占用网络带宽或容量或通过提醒推送大量占用系统资源的应用会被拒。)

5.9
Apps that transmit viruses, files, computer code, or programs that may harm or disrupt the normal opera tion of the APN service will be rejected(传输病毒,文件,代码或程序,导致破坏或扰乱正常的APN服务操作的应用会被拒。)

 

6. Game Center(游戏中心)

6.1
Apps that display any Player ID to end users or any third party will be rejected(向终端用户或第三方展示Player ID的应用会被拒。)

6.2
Apps that use Player IDs for any use other than as approved by the Game Center terms will be rejected(Player ID被用于Game Center条款款意外的用途的应用会被拒。)

6.3
Developers that attempt to reverse lookup, trace, relate, associate, mine, harvest, or otherwise exploit Player IDs, alias, or other information obtained through the Game Center will be removed from the iOS Developer Program(试图通过Game Center反查,跟踪,描述,关联,发掘,收割,或利用Player ID,别名或其他信息的开发者会被取消IDP身份。)

6.4
Game Center information, such as Leaderboard scores, may only be used in Apps approved for use with the Game Center(Game Center信息,例如Leaderboard得分,只能通过Game Center用于应用中。)

6.5
Apps that use Game Center service to send unsolicited messages, or for the purpose of phishing or spamming will be rejected(使用Game Center发送主动消息,欺骗或干扰信息的应用会被拒。)

6.6
Apps that excessively use the network capacity or bandwidth of the Game Center will be rejected(使用Game Center过度占用网络带宽或容量的应用会被拒。)

6.7
Apps that transmit viruses, files, computer code, or programs that may harm or disrupt the normal operation of the Game Center service will be rejected(传输病毒,文件,代码或程序,导致破坏或扰乱正常的Game Center操作的应用会被拒。)

7. Advertising(广告)

7.1
Apps that artificially increase the number of impressions or click-throughs of ads will be rejected(人工刷广告浏览或点击率的应用会被拒。)

7.2
Apps that contain empty iAd banners will be rejected(带有空iAd banner广告的应用会被拒。)

7.3
Apps that are designed predominantly for the display of ads will be rejected(设计主要用来展示广告的应用会被拒。)

8. Trademarks and trade dress(商标权与商标外观)

8.1
Apps must comply with all terms and conditions explained in the Guidelines for Using Apple Trademarks and Copyrights and the Apple Trademark List(应用必须遵守Guidelines for Using Apple Trademarks and Copyrights 和Apple Trademark List中描述的所有条款和条件。)

8.2
Apps that suggest or infer that Apple is a source or supplier of the App, or that Apple endorses any particular representation regarding quality or functionality will be rejected(任何误导或暗示Apple为该应用来源或提供商,或Apple以任何形式认可其质量或功能的应用会被拒。)

8.3
Apps which appear confusingly similar to an existing Apple product or advertising theme will be rejected(外观与现有Apple产品或广告主题类似或混淆的应用会被拒)

8.4
Apps that misspell Apple product names in their App name (i.e., GPS for Iphone, iTunz) will be rejected(应用名称中出现错误的Apple产品拼写(如,GPS for IPhone, iTunz)的应用会被拒。)

8.5
Apps may not use protected third party material such as trademarks, copyrights, patents or violate 3rd party terms of use. Authorization to use such material must be provided upon request.(使用受保护的第三方资源(商标,版权,商业机密,以及其他私有内容),如果要求请提供一份文本形式的使用授权。)

9. Media content(媒体内容)

9.1
Apps that do not use the MediaPlayer framework to access media in the Music Library will be rejected(使用MediaPlayer框架以外的方法访问Music Library中媒体数据的应用会被拒。)

9.2
App user interfaces that mimic any iPod interface will be rejected(用户界面模仿任何iPod界面的应用会被拒。)

9.3
Audio streaming content over a cellular network may not use more than 5MB over 5 minutes(通过蜂窝网络传输的流媒体音频内容不得超过5MB或多余5分钟。)

9.4
Video streaming content over a cellular network longer than 10 minutes must use HTTP Live Streaming and include a baseline 64 kbps audio-only HTTP Live stream(通过蜂窝网络传输超过10分钟流媒体视频内容,必须使用HTTP Live Streaming,并包含一条基线64kbps的音频HTTP Live流。)

10. User interface(用户界面)

10.1
Apps must comply with all terms and conditions explained in the Apple iOS Human Interface Guidelines(应用必须遵守Apple iOS Human Interface Guidelines中的所有条款和条件。)

10.2
Apps that look similar to Apps bundled on the iPhone, including the App Store, iTunes Store, and iBookstore, will be rejected( 外观与iPhone自带应用(如:App Store,iTunes Store和iBookstore)相似的应用会被拒。)

10.3
Apps that do not use system provided items, such as buttons and icons, correctly and as described in the Apple iOS Human Interface Guidelines may be rejected(不按照Apple iOS Human Interface Guidelines中的描述正确使用系统控件比如按钮,图标等的应用会被拒。)

 

10.4
Apps that create alternate desktop/home screen environments or simulate multi-App widget experiences will be rejected(试图创建多桌面/主屏环境或模拟多Widget应用工具的应用会被拒。)

10.5
Apps that alter the functions of standard switches, such as the Volume Up/Down and Ring/Silent switches, will be rejected( 修改标准开关标准功能例如:音量增加/减少,响铃/震动的应用会被拒。)

10.6
Apple and our customers place a high value on simple, refined, creative, well thought through interfaces. They take more work but are worth it. Apple sets a high bar. If your user interface is complex or less than very good, it may be rejected(Apple和我们的用户都界面报以很高期望,希望他设计的超级简洁,精致,充满创造力,深思熟虑。做到这些确实会消耗很多精力,但是值得。Apple在这方面要求非常高。如果你的用户界面过于复杂,甚至仅仅是不够好,都可能被拒。)

11. Purchasing and currencies(购买与流通货币)

11.1
Apps that unlock or enable additional features or functionality with mechanisms other than the App Store will be rejected(通过App Store以外的渠道解锁或开启附加属性或功能的应用会被拒。)

11.2
Apps utilizing a system other than the In-App Purchase API (IAP) to purchase content, functionality, or services in an App will be rejected( 使用In App Purchase API (IAP)以外的系统提供购买内容,功能或服务的应用会被拒。)

11.3
Apps using IAP to purchase physical goods or goods and services used outside of the application will be rejected(使用IAP为与应用无关的实体商品或商品服务收费的应用会被拒。)

11.4
Apps that use IAP to purchase credits or other currencies must consume those credits within the application(应用使用IAP购买积分(Credit)或其他货币,必须在应用中消费。)

11.5
Apps that use IAP to purchase credits or other currencies that expire will be rejected(使用IAP购买的积分(Credit)或货币会过期的应用会被拒)

11.6
Content subscriptions using IAP must last a minimum of 7 days and be available to the user from all of their iOS devices( 使用IAP收费订阅的内容至少要在7天内有效,而且允许在所有iOS设备间共享。)

11.7
Apps that use IAP to purchase items must assign the correct Purchasability type(用到IAP收费项目的应用必须分派到正确的收费类目中。)

11.8
Apps that use IAP to purchase access to built-in capabilities provided by iOS, such as the camera or the gyroscope, will be rejected( 使用IAP向用户收费以获取iOS内建功能(如摄像头,陀螺仪)的应用会被拒。)

11.9
Apps containing “rental” content or services that expire after a limited time will be rejected( 包含“出租”内容或服务的应用,在一段时间实效的会被拒。)

11.10
Insurance applications must be free, in legal-compliance in the regions distributed, and cannot use IAP(保险类应用必须免费,遵守发布地区的法律,并且不允许使用IAP。)

11.11
In general, the more expensive your App, the more thoroughly we will review it(一般来说,越贵的应用审核就越仔细彻底。)

11.12
Apps offering subscriptions must do so using IAP, Apple will share the same 70/30 revenue split with developers for these purchases, as set forth in the Developer Program License Agreement.(提供收费订阅的应用必须使用IAP,Apple将会按照Developer Program License Agreement中约定的70/30的比例与开发者分账。)

11.13
Apps that link to external mechanisms for purchases or subscriptions to be used in the App, such as a “buy” button that goes to a web site to purchase a digital book, will be rejected(应用中如果提供了IAP以外的收费或订阅机制,如:“buy”按钮,跳转到一个购买电子书的web页面,会被拒。)

11.14
Apps can read or play approved content (specifically magazines, newspapers, books, audio, music, and video) that is subscribed to or purchased outside of the App, as long as there is no button or external link in the App to purchase the approved content. Apple will not receive any portion of the revenues for approved content that is subscribed to or purchased outside of the App( 应用可以阅读或播放任何在应用以外取得授权的内容(包括指定的杂志,报纸,书籍,音频,音乐和视频),只要在应用中不允许出现获取授权的收费链接或按钮。Apple不会对在应用外订阅或购买授权项目收取任何费用。)

11.15
Apps may only use auto renewing subscriptions for periodicals (newspapers, magazines), business Apps (enterprise, productivity, professional creative, cloud storage) and media Apps (video, audio, voice), or the App will be rejected.(应用只能自动更新订阅的期刊(报纸、杂志),自动更新商业应用(企业、生产力、专业创意、云存储)和媒体应用(视频、音频,声音)将被拒*。)

12. Scraping and aggregation(抓去与整合)

12.1
Applications that scrape any information from Apple sites (for example from apple.com, iTunes Store, App Store, iTunes Connect, Apple Developer Programs, etc) or create rankings using content from Apple sites and services will be rejected(从Apple的页面(如:apple.com, iTunes Store, App Store, iTunes Connect, Apple Developer Programs, 等)抓取内容,或利用Apple页面和服务中的内容进行排名的应用会被拒。)

12.2
Applications may use approved Apple RSS feeds such as the iTunes Store RSS feed( 应用可以使用授权的Apple RSS,例如iTunes Store RSS。)

 

12.3
Apps that are simply web clippings, content aggregators, or a collection of links, may be rejected(简单的web页面裁剪,内容整合或链接收集应用会被拒。)

13. Damage to device(损害设备)

13.1
Apps that encourage users to use an Apple Device in a way that may cause damage to the device will be rejected(任何怂恿用户做出可能损坏Apple设备的行为的应用会被拒。)

13.2
Apps that rapidly drain the device’s battery or generate excessive heat will be rejected(快速耗光设备电量或产生大量热量的应用会被拒。)

14. Personal attacks(人身攻击)

14.1
Any App that is defamatory, offensive, mean-spirited, or likely to place the targeted individual or group in harms way will be rejected( 任何涉嫌诽谤,侮辱,狭隘内容或打击个人或团体的应用会被拒。)

14.2
Professional political satirists and humorists are exempt from the ban on offensive or mean-spirited commentary(职业政治讽刺家和幽默作家不受该诽谤和狭隘条款约束。)

15. Violence(暴力)

15.1
Apps portraying realistic images of people or animals being killed or maimed, shot, stabbed, tortured or injured will be rejected(展示人或动物被杀戮,致残,枪击,针刺或其他伤害的真实图片的应用会被拒)

15.2
Apps that depict violence or abuse of children will be rejected(描述暴力或虐待儿童的应用会被拒。)

15.3
“Enemies” within the context of a game cannot solely target a specific race, culture, a real government or corporation, or any other real entity(游戏中的“敌人”不能单独的设定为某特定比赛,文化,真实的政府或组织,或者任何现实事物。)

15.4
Apps involving realistic depictions of weapons in such a way as to encourage illegal or reckless use of such weapons will be rejected(含有以鼓励非法或鲁莽使用的方式描述真实武器的应用会被拒。)

15.5
Apps that include games of Russian roulette will be rejected( 带有俄罗斯轮盘游戏的应用会被拒。)

16. Objectionable content(负面内容)

16.1
Apps that present excessively objectionable or crude content will be rejected(介绍过度三俗和粗鲁内容的应用会被拒。)

16.2
Apps that are primarily designed to upset or disgust users will be rejected(设计来惹怒或恶心用户的应用会被拒。)

17. Privacy(隐私)

17.1
Apps cannot transmit data about a user without obtaining the user’s prior permission and providing the user with access to information about how and where the data will be used(在未获得用户事先允许,或未告知用户信息将被如何,在哪里使用的情况下,应用不可以传输用户数据。)

17.2
Apps that require users to share personal information, such as email address and date of birth, in order to function will be rejected(要求用户提供个人信息,如邮箱地址,生日等,才能使用其功能的应用会被拒。)

17.3
Apps that target minors for data collection will be rejected(专门收集未成年人数据的应用会被拒。)

18. Pornography(色情)

18.1
Apps containing pornographic material, defined by Webster’s Dictionary as “explicit descriptions or displays of sexual organs or activities intended to stimulate erotic rather than aesthetic or emotional feelings”, will be rejected(含有韦氏词典中定义的色情素材(explicit descriptions or displays of sexual organs or activities intended to stimulate erotic rather than aesthetic or emotional feelings)的应用会被拒。)

18.2
Apps that contain user generated content that is frequently pornographic (ex “Chat Roulette” Apps) will be rejected(经常有用户提供色情内容(例如:Chat Roulette http://en.wikipedia.org/wiki/Chatroulette )的应用会被拒。)

19. Religion, culture, and ethnicity(信仰,文化和种族)

19.1
Apps containing references or commentary about a religious, cultural or ethnic group that are defamatory, offensive, mean-spirited or likely to expose the targeted group to harm or violence will be rejected(带有对一种信仰,文化或种族进行诽谤,侮辱,狭隘,或以他们为目标的暴力或伤害内容的应用会被拒。)

19.2
Apps may contain or quote religious text provided the quotes or translations are accurate and not misleading. Commentary should be educational or informative rather than inflammatory( 应用若带有或应用对一种信仰的文字描述,那么这个引用或翻译必须是精确,无歧义的。注释内容可以具有教育性,信息性,但不可以为煽动性。)

20. Contests, sweepstakes, lotteries, and raffles(竞赛,赌博,彩票和抽*)

20.1
Sweepstakes and contests must be sponsored by the developer/company of the App(赌博和竞赛必须是由应用开发者或所有公司发起资助的。)

20.2
Official rules for sweepstakes and contests, must be presented in the App and make it clear that Apple is not a sponsor or involved in the activity in any manner( 应用中必须展示赌博和竞赛的官方条款,并声明Apple不是资助者,并且在任何情况下与此事无关。)

20.3
It must be permissible by law for the developer to run a lottery App, and a lottery App must have all of the following characteristics: consideration, chance, and a prize(开发者必须经过法律允许才能上线一款抽*应用,而且抽*应用必须具备以下要素:报酬,机会,和*金。)

 

20.4
Apps that allow a user to directly purchase a lottery or raffle ticket in the App will be rejected(直接允许用户在应用中购买彩票或抽*的应用会被拒。)

21. Charities and contributions(慈善与捐助)

21.1
Apps that include the ability to make donations to recognized charitable organizations must be free(含有向已认证的慈善机构捐助功能的应用必须是免费的。)

21.2
The collection of donations must be done via a web site in Safari or an SMS(慈善募捐必须通过短信息或通过Safari访问web页面完成。)

22. Legal requirements(法律要求)

22.1
Apps must comply with all legal requirements in any location where they are made available to users. It is the developer’s obligation to understand and conform to all local laws(应用必须遵守所有发布地区当地法律。开发者有义务了解和遵守各地的法律。)

22.2
Apps that contain false, fraudulent or misleading representations or use names or icons similar to other Apps will be rejected( 任何带有虚假,欺诈和带有歧义的内容的应用会被拒。)

22.3
Apps that solicit, promote, or encourage criminal or clearly reckless behavior will be rejected( 任何召集,推销和股东犯罪和鲁莽行为的应用会被拒。)

22.4
Apps that enable illegal file sharing will be rejected(非法文件共享应用会被拒。)

22.5
Apps that are designed for use as illegal gambling aids, including card counters, will be rejected(任何设计用来非法赌博工具,包括算牌的应用会被拒。)

22.6
Apps that enable anonymous or prank phone calls or SMS/MMS messaging will be rejected( 提供知识拨打电话或知识发送短消息/彩信功能的应用会被拒。)

22.7
Developers who create Apps that surreptitiously attempt to discover user passwords or other private user data will be removed from the iOS Developer Program(任何开发暗中获取用户密码和私有数据的开发者会被取消IDP身份。)

22.8
Apps which contain DUI checkpoints that are not published by law enforcement agencies, or encourage and enable drunk driving, will be rejected(任何非法律执行部门发布的带有DUI检查点信息,或鼓励且协助酒后驾车的应用会被拒。)

idea自动部署至远程服务器

一、搭建服务器的tomcat环境
二、本地IDEA关联远程服务器
打开IDEA,按如下图配置:

%title插图%num

输入web server的名称

%title插图%num

这里是linux服务器,所以使用的是SFTP(SSH File Transfer Protocol)模式

%title插图%num

%title插图%num

上传本地工程包:这样,我们在本地修改某个java文件,直接提交该class即可,无需打war上传等繁琐的过程。

%title插图%num

python实现滑动验证

做自动化测试的时候,需要自动登录QQ邮箱,在网上找的都是基于selenium的:参考链接,但是代码在本地运行并没有取得满意的效果:滑动不成功!
而且每个滑动解锁的网页不同,编码和格式就不同,复用率太低了!举个例子:

button = browser.find_element_by_id(‘tcaptcha_drag_button’)
x, y = button.location.get(‘x’), button.location.get(‘y’)
print(“location:”,x,y)
%title插图%num
这段代码是获取滑动解锁按钮坐标的,但是返回的是(33,193),而不是根据桌面像素(1920,1080)应该得到的坐标。

查看网页源码发现,这个验证框:width:300px,height:230px,因此坐标是根据这个iframe框架得到的,所以后面的拖动按钮并滑动就会出现问题,(比如拖动一点点就会报错:超出(300,230)边界错误),而且总是拖不到右边,搞了好久都不行(部分原因是我前端基础不牢固)
还有一些其他问题我就不再说了,反正就是心态爆炸:不想用selenium搞滑动了!
我就换了一个方法,按钮的图片定位,然后实现滑动验证:图片定位具体可以参考:ac.find_template识别图片并定位

直接上代码吧:

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import paramiko
import pyautogui
import os
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from Auto_Test.base_action import match

def login_in():
browser = webdriver.Firefox()
browser.maximize_window()
browser.get(“https://mail.qq.com/”)
browser.switch_to.frame(“login_frame”)
browser.find_element_by_class_name(“inputstyle”).clear()
browser.find_element_by_class_name(“inputstyle”).send_keys(“xxxxx”)
browser.find_element_by_class_name(“inputstyle.password”).clear()
browser.find_element_by_class_name(“inputstyle.password”).send_keys(“xxxxx”)
browser.find_element_by_id(“login_button”).click()
browser.find_element_by_class_name(“login_button”).click()
time.sleep(2)
browser.switch_to.frame(“tcaptcha_iframe”)

time.sleep(3)
# 等待图片加载出来
WebDriverWait(browser, 5, 0.5).until(
EC.presence_of_element_located((By.ID, “tcaptcha_drag_button”)))
# button = browser.find_element_by_id(‘tcaptcha_drag_button’)
# x, y = button.location.get(‘x’), button.location.get(‘y’)
# print(“location:”,x,y)
lx,ly=match(“QQmail-slick”)
lz=[x for x in range(120,200,3)]
for i in lz:
pyautogui.moveTo(lx,ly)
pyautogui.dragRel(i,0,duration=2,button=’left’)
time.sleep(1)
pyautogui.moveRel(-i,0)

try:
alert = browser.find_element_by_id(‘guideText’).text
except Exception as e:
print(‘get alert error: %s’ % e)
alert = ”
if alert:
print(u’滑块位移需要调整: %s’ % alert)
sleep(3)
else:
print(‘滑块验证通过’)
browser.switch_to.parent_frame() # 验证成功后跳回*外层页面
break

from Auto_Test.base_action import match中的函数如下:

def match(target, show=True):
target_path = target.split(“-“)[0]
target_name = target.split(“-“)[1]
# 防止截全屏的页面没反应过来
time.sleep(1)
ttime_s = time.time()

global root_dir
appname = root_dir + ‘/APP_Action_Icons/’+target_path+”/”+target_name+’.png’
appname_2 = root_dir + ‘/APP_Action_Icons/’+target_path+”/”+target_name+’_2.png’
appname_3 = root_dir + ‘/APP_Action_Icons/’+target_path+”/”+target_name+’_3.png’
print(appname)
print(“root_dir =”, root_dir)

##根据桌面路径进行截屏
hwnd = win32gui.FindWindow(None, root_dir)
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
img = screen.grabWindow(hwnd).toImage()

##保存截屏
root_desk = root_dir + ‘/Screen_Shots/Test_Screen_shots/desktop.jpg’
img.save(root_desk)
##等待图片保存
time.sleep(0.5)
# 支持图片名为中英文名,也支持路径中英文
imsrc = cv2.imdecode(np.fromfile(root_desk, dtype=np.uint8), -1)
imobj = cv2.imdecode(np.fromfile(appname, dtype=np.uint8), -1)

##根踞名称匹配截图,只支持图片为英文名
# imsrc = ac.imread(root_desk)
# imobj = ac.imread(appname)

# 匹配图标位置
pos = ac.find_template(imsrc, imobj, 0.5,bgremove=True)
if pos == None and os.path.exists(appname_2):
print(“*张图标没匹配到,现匹配第二张:”, end=””)
print(appname_2)
imobj_2 = cv2.imdecode(np.fromfile(appname_2, dtype=np.uint8), -1)
# imobj_2 = ac.imread(appname_2)
pos = ac.find_template(imsrc, imobj_2, 0.5,bgremove=True)
if pos == None and os.path.exists(appname_3):
print(“第二张图标没匹配到,现匹配第三张:”, end=””)
print(appname_3)
imobj_3 = cv2.imdecode(np.fromfile(appname_3, dtype=np.uint8), -1)
# imobj_3 = ac.imread(appname_3)
pos = ac.find_template(imsrc, imobj_3, 0.5,bgremove=True)

# 如果第三张还未匹配到,用另一种方法重新截图
if pos == None:
print(“2秒后重新截全屏…”)
time.sleep(2)

##保存截屏
root_desk = root_dir + ‘/Screen_Shots/Test_Screen_shots/desktop_2.jpg’
img = ImageGrab.grab()
img.save(root_desk)
##等待图片保存
time.sleep(0.5)
# 支持图片名为中英文名,也支持路径中英文
imsrc = cv2.imdecode(np.fromfile(root_desk, dtype=np.uint8), -1)
imobj = cv2.imdecode(np.fromfile(appname, dtype=np.uint8), -1)

# 匹配图标位置
pos = ac.find_template(imsrc, imobj, 0.5,bgremove=True)
if pos == None and os.path.exists(appname_2):
print(“*张图标没匹配到,现匹配第二张:”, end=””)
print(appname_2)
imobj_2 = cv2.imdecode(np.fromfile(appname_2, dtype=np.uint8), -1)
pos = ac.find_template(imsrc, imobj_2, 0.5,bgremove=True)
if pos == None and os.path.exists(appname_3):
print(“第二张图标没匹配到,现匹配第三张:”, end=””)
print(appname_3)
imobj_3 = cv2.imdecode(np.fromfile(appname_3, dtype=np.uint8), -1)
pos = ac.find_template(imsrc, imobj_3, 0.5,bgremove=True)

if pos == None:
print(“*终没能匹配到:” + target)
else:
ttime_e = time.time()
__time = ttime_e – ttime_s

if show == True:
try:
show_and_save(root_desk, target, pos, __time)
except Exception as e:
print(“保存匹配结果show_and_save这里出错,错误原因为{}”.format(e))
print(pos)
point = pos[‘result’]
pyautogui.moveTo(point)
print(“匹配成功:{}”.format(target))
time.sleep(0.5)
print(pyautogui.position())
pyautogui.click(clicks=2)
return point

亲测有效,如果有问题,可以联系我,看到了就会*时间回复!
互相交流,互相学习,共同进步!

必须了解的服务器基础知识

1 双路等于双核么?
问题:常听说双路至强XX式服务器,*近又出现了双核至强,都是两个CPU,是不是双路等于双核?

答案:不是

无论服务器的单路、双路、四路乃至八路,其中的“路”都是指服务器物理CPU的数量,也就是服务器主板上CPU插槽的数量。

*近出现的双核处理器,是在一颗物理CPU内部封装了两个CPU核心,这样的好处在于能够让用户在成本增加不多的前提下,拥有更强劲的性能。而且能够比较显著的降低性能功耗比,这对企业用户节约使用成本也有积*的意义。

2 至强与奔腾的区别
问题:在不少服务器中,有拿至强作处理器的,也有拿奔腾4当作处理器的,除了用奔腾4处理器的服务器产品呢便宜些,至强与奔腾还有什么区别?

Intel 奔腾4 631 3.0GHz(盒)

Intel Xeon 3.2G(800MHz/2M/盒)

答案:服务器上用的至强处理器和普通的P4处理器其内核基本上是一样的。

区别之一是英特尔奔腾4处理器开始,便将奔腾4处理器归为个人处理器,用户不能以2颗奔腾4处理器来构架2路服务器系统,而开发出运算效能更高的至强处理器。至强处理器目前分为至强DP(*大支持双路处理)和至强MP(*大支持8路处理)。

区别之二就是二级缓存不同。至强的二级缓存是1MB~16MB,P4的二级缓存是512KB~1MB,而二级缓存的容量也是决定服务器处理效能的重要因素。

至强系列CPU多为604接口,而P4的CPU,多为478针或是775架构。

注:在X86架构下,服务器除了使用英特尔奔腾、至强系列处理器外,AMD也为服务器提供了专门的处理器-皓龙Opteron,*大可支持8路。

AMD Opteron皓龙 865(散)

3 服务器按照结构划分,有几种类型?
答案:目前按照外形结构划分,服务器可分为塔式、机架式、刀片式三种类型。

塔式服务器

一般的塔式服务器机箱和我们常用的PC机箱差不多,而大型的塔式机箱就要粗大很多,总的来说外形尺寸没有固定标准。

机架式服务器

机架式服务器是由于满足企业的密集部署,形成的以19英寸机架作为标准宽度的服务器类型,高度则从1U到数U。将服务器放置到机架上,并不仅仅有利于日常的维护及治理,也可能避免意想不到的故障。首先,放置服务器不占用过多空间。机架服务器整洁地排放在机架中,不会浪费空间。其次,连接线等也能够整洁地收放到机架里。电源线和LAN线等全都能在机柜中布好线,可以减少堆积在地面上的连接线,从而防止脚踢掉电线等事故的发生。

规定的尺寸是服务器的宽(48.26cm=19英寸)与高(4.445cm的倍数)。由于宽为19英寸,所以有时也将满足这一规定的机架称为“19英寸机架”。

刀片式服务器

刀片服务器是一种HAHD(High Availability High Density,高可用高密度)的低成本服务器平台,是专门为非凡应用行业和高密度计算机环境设计的,其中每一块“刀片”实际上就是一块系统母板,类似于一个个独立的服务器。在这种模式下,每一个母板运行自己的系统,服务于指定的不同用户群,相互之间没有关联。不过可以使用系统软件将这些母板集合成一个服务器集群。在集群模式下,所有的母板可以连接起来提供高速的网络环境,可以共享资源,为相同的用户群服务。

4 “U”是什么?
问题:平常说1U、2U服务器中的“U”是什么意思?是指服务器处理器个数么?

答案:“U”在服务器领域中特指机架式服务器厚度,是一种表示服务器外部尺寸的单位,是unit的缩略语,具体尺寸由作为业界团体的美国电子工业协会(EIA)决定。

之所以要规定服务器的尺寸,是为了使服务器保持适当的尺寸以便放在铁质或铝质机架上。机架上有固定服务器的螺孔,将它与服务器的螺孔对好,用螺丝加以固定。

厚度以4.445cm为基本单位。1U就是4.445cm,2U则是1U的2倍为8.89cm。也就是说,所谓“1U的机架式服务器”,就是外形满足EIA规格、厚度为4.445cm的产品。

5 服务器与工作站的区别是什么?
服务器是给工作站提供各种服务的,网络通信服务,文件共享服务,硬件共享服务,各种资源服务。工作站在获取服务器各种资源的同时也可以帮服务器分流计算等任务。

服务器和工作站都是高性能的计算机,只是相对而言服务器专注于数据吞吐能力,所以支持的外设(硬盘、I/O插槽等)更多;而工作站则专注于图形处理能力,所以外设则相对少一些,但采用非凡为图形处理设计的架构,采用高档显示卡,支持3D图像处理。工作站主要应用在各种设计、多媒体制作领域。

Python模块导入规范

Python模块导入规范

文章目录
模块导入的规范
import语句’
rom… import...语句
模块导入的规范
模块是类或函数的集合,用于实现某个功能。模块的导入和Java 中包的导入的概念很相似都使用import语句。在Python中,如果需要在程序中调用标准库或其他第三方库的类时,需要先使用import或from. … import. …语句导入相关的模块。

import语句’
使用import语句导入sys模块,并打印相关内容的方法
代码

# 规范导入方式
import sys
print(sys.path)
print(sys.argv)

第⒉行代码使用import语句导入了sys模块,sys模块是处理系统环境的函数的集合。
第3行代码输出Python 环境下的查找路径的集合,Python默认情况下会查找sys. path返回的目录列表。列表是Python内置的数据结构,定义了一组数据,通常用来作为参数或返回值。
第4行代码的sys. argv是存储输入参数的列表。默认情况下,argv自带的参数是文件名
运行结果

rom… import….语句
代码

# 不规范导入方式
from sys import path
from sys import argv
print(path)
print(argv)

第5行、第6行代码直接调用path、argv列表的内容,没有模块名的限定,这种写法不够规范。如果程序比较复杂,导入了很多模块,阅读程序的人并不了解path、argv来自哪个模块。而sys. path、sys. argv的写法可以清楚地知道path、argv来自sys模块。

手写NMS算法

手写NMS算法

在网上看了几个NMS算法的实现,要么照抄faster的,要么就写的乱七八糟的,还是自己按单步实现一下。也建议想认真学习的小伙伴都尽量手撕一遍,同时写博客也尽量严谨些,写之前尽量做一些测试,不要误导别人。
NMS原理:
NMS是非*大值抑制。在目标检测中,推理阶段会预测出很多框,而这些框很多是重叠的,毕竟网络看到图像上那个有目标的区域都差不多,它就认为是一个东西给你预测出来,特别是基于anchor的目标检测算法,大量的anchor会推送出巨多的目标框,这时候就需要用nms把一些置信度不是*高的Bbox滤去,这就是NMS。
算法步骤:
S1:以置信度排序(置信度高的自然认为*是需要的目标)
S2:置信度*高的框为基准,和剩下的所有框计算IoU
S3:如果IoU大于一定阈值则滤去(两个框有交叠)
S4:重复S2,S3
代码:

import numpy as np

### 模拟参数 ###
boxes = np.array([[100,100,210,210,0.72],
[250,250,420,420,0.8],
[220,220,320,330,0.92],
[100,100,210,210,0.72],
[230,240,325,330,0.81],
[220,230,315,340,0.9]],dtype = np.float)

### 定义函数 ###
def nms(dets, threshold):
### 用切片取出x1, y1, x2, y2及置信度 ###
x1 = dets[:,0]
y1 = dets[:,1]
x2 = dets[:,2]
y2 = dets[:,3]
scores = dets[:,4]
keep = [] ### 需要保留框的索引 ###
index = scores.argsort()[::-1] ### 按置信度排序,index为一维列表,保留原始的索引 ###
while len(index) > 0: ### 直到索引列表长度为0时停止 ###
id = index[0] ### 置信度*大的总在indexp[0]处 ###
keep.append(id) ### 把置信度*大的保留 ###
index = np.delete(index,0,axis=0) ### 已经保留了 就从index列表中删除 ###
delete = [] ### 保留要从index里删除的索引 ###
### 剩余的Bbox和置信度*大的逐个计算IoU ###
for i in range(len(index)):
j = index[i]
xx1=max(x1[id],x1[j])
yy1=max(y1[id],y1[j])
xx2=min(x2[id],x2[j])
yy2=min(y2[id],y2[j])
w=max(0,xx2-xx1+1)
h=max(0,yy2-yy1+1)
interface=w*h
area = (x2[id] – x1[id]) * (y2[id] – y1[id]) + (x2[j] – x1[j]) * (y2[j] – y1[j]) – interface
overlap=interface/area
if overlap>=threshold: ### 记录IoU大于阈值的Bbox的位置 ###
delete.append(i)
### 如果IoU大于阈值就从index列表里删除 ###
index = np.delete(index,delete,axis=0)
return keep
keep = nms(boxes, 0.7)
print(keep)

图解云服务模型的演进

%title插图%num

一.表层模型
早在2008年,Microsoft等公司(在此之前还有Amazon、Google)就在探索云服务了。推出Azure时,Microsoft提出了这样的模型图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r7dhmivq-1579522673130)(https://dachou.github.io/assets/20180928-cloud-service-models-20081119.png)]

用来解释PaaS模型与当时人们所熟知的本地部署(on-premises)、外包托管(outsourced hosting)之间的差异

具体的:

本地部署:需要拥有(购买)硬件并维护数据

外包托管:可以直接用主机托管或托管服务器

PaaS:使用云架构,不但资源托管还支持弹性扩展

实际上,这种基于订阅的收入模型可能会蚕食Microsoft当时已有的许多基于许可证的产品。但从宏观上看,规模经济(economies of scale)才是云服务模型*重要的价值

在微观经济学中,规模经济是指企业由于经营规模而获得的成本优势,单位产出成本随着规模的扩大而降低:

In microeconomics, economies of scale are the cost advantages that enterprises obtain due to their scale of operation (typically measured by amount of output produced), with cost per unit of output decreasing with increasing scale.

简单来讲,规模经济就是随着规模的扩大而更高效地做事:

The simple meaning of economies of scale is doing things more efficiently with increasing size.

在云计算中体现在资源集中管理(Resource pooling)上,从而产生规模效应:

云计算的规模经济体现在两个方面,一是使得用户终端成本降低,二是拥有更高的利用率,因而被认为可能产生良好经济效益。

一方面用户不需要购买存储器或服务器、而是通过购买服务来获得(相应功能),降低成本的投入和管理费用。另一方面云服务的提供实际上就是大量的用户在共享一个服务的资源,利用率更高。

由云服务供应商集中管理软硬件资源,并提供维护、按需计费、弹性扩展等服务,用户不再需要全权控制上上下下的N层资源栈,即可部署自己的应用程序(PaaS)

二.资源栈模型
上图仅从表层去描述了PaaS与外包托管和本地部署之间的主要差异,缺乏具象的对比,因此需要一种能够突出差异并传达其价值,同时还能说明差异程度的可视化模型:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BZpuHfCP-1579522673137)(https://dachou.github.io/assets/20180928-cloud-service-models-20090526.png)]

先根据人们所熟知的本地IT环境抽象出9层资源栈,作为统一上下文,再将云服务模型映射到这个上下文中,并突出差异。之所以用层次结构来描述,是因为:

体现了某种程度的关注点分离

表现出栈中各层之间具有一些直接依赖关系和设计/操作抽象

具体的:

本地部署:正如我们所理解的那样,完全控制整个资源栈,拥有并管理这些资源

IaaS:不再全权控制所有资源,下5层托管给基础设施供应商

PaaS:除Application之外的层都交由供应商管理了,我们只需要关注自己的应用程序

三.类比模型
也有一些类比模型,例如披萨、汽车等,但都不如资源栈模型贴切,因为在做类比时会丢失一些上下文信息,比如层间依赖和关注点分离

以汽车模型为例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WCzBSzAU-1579522673140)(https://dachou.github.io/assets/20180928-cloud-service-models-20090526-analogy.png)]

这种类比的关键点是:

本地部署:就像拥有自己的车,可以随时去任何想去的地方(完全控制)。车的型号、外观、颜色、装饰等都可以自选,但要自己负责维护

IaaS:像是租车服务,仍然可以随时想去哪就去哪。虽然在车的选择上有一些限制,但不必自己维护,拿到钥匙就能出发

PaaS:就像公共交通,可以根据发车时间表按既定路线去往已通车的地方,虽然存在这样一些限制,但易于使用,而且能按使用量付费(得益于规模经济)

从本质上来讲,这种类比所表达的还是*初控制与规模经济之间的权衡,但在视觉上更容易理解,而且有助于展开讨论和传播

四.资源栈模型扩展
9层资源栈模型出现之后,又对其视觉呈现做了一些修改(将3D的部分扁平化,减少颜色数量,去掉复杂形状),得到了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V30uKvux-1579522673154)(https://dachou.github.io/assets/20180928-cloud-service-models-20091027.png)]

接着有人提出SaaS也应该加进来,于是有了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SA22l5hA-1579522673158)(https://dachou.github.io/assets/20180928-cloud-service-models-20100115.png)]

为了让SaaS与PaaS的差异更明显(直接加的话,仅一层Application的区别),对资源栈本身做了一些调整:

Security & Integration层被删掉了,因为所有层都存在安全问题,作为单独一层没什么意义

在Applications层下面添上Data层

Databases, Servers, Server HardWare层分别改为Middleware、O/S和Server层

这样,云环境(IaaS、PaaS、SaaS)之间都是2层差异,云环境与本地环境之间有5层差异,表明云环境与本地环境间的差异更大

之后为了表意更准确,又做了一些修缮,

O/S改为Operating System

On-Premises改为Traditional IT,因为本地部署包括私有云环境,要区分开

对IaaS中的managed by线做了轻微调整(延伸出一部分到Operating System层),表示IaaS中的O/S层是共同维护的,云供应商提供基础了VM镜像,但用户还需要维护其补丁和更新
————————————————

原文链接:https://blog.csdn.net/ayqy_jiajie/article/details/104055930

Processing on Android开发之旅

*近对可视化数据开始感兴趣,其中用到了一种叫做Processing的语言。
Processing是一种比较新的语言。曾经被作为“Java的替代语言”被众人关注。究其原理,是利用了Java作为整体语言的解释器,再通过一些技术手段能够让Processing语言的代码经过一些简短的修饰,变成Java源代码,再通过Java进行编译。

因为语法结构非常简洁,所以Processing被广泛用于艺术与交互类应用程序之中。Processing常用的有两个函数:setup()和draw()。setup()函数类似于其他各种语言的main函数,就是程序的入口,在程序初始化之后会被执行一次。draw()函数是一个定时回调函数(每秒执行60次)。搭配这两个函数将会很容易制作出一些包含迭代、交互、动画等等的程序。

由于Processing与Java几乎无异,所以在Java中也非常用以实现Processing的代码。但毕竟从Processing到Java原本需要一个修饰的过程,所以说在Android项目中使用Processing的内容还是有一些问题需要注意。

*点就是作为一个Android平台的专业开发者,我们所利用的更多的是Processing的架构、丰富的函数以及setup和draw函数的这种思想,而不是Processing的全部语法。

第二点就是在Processing中一部分原生函数都需要经过程序员的一些转化。具体的转化方法可以在这两个地方查询:

1:http://wiki.processing.org/w/Android

2:http://processing.googlecode.com/svn/trunk/processing/build/javadoc/core/index.html

(注:第二条中的Javadoc是针对纯Java环境而不是Android环境所编写的。所以继承关系可能会有一些问题。所以建议大家直接查看源代码)

说了这么多,Processing on Android到底有何优势呢?那我就通过一个实例为大家展示如何在Android中利用Processing进行开发。相信大家耐心看完之后一定会明白的!

*步是下载Processing

下载地址:http://www.processing.org/

笔者所使用的是Mac OS Lion with Android SDK r16,其他系统的操作也类似。

第二步、在Eclipse中新建项目。

%title插图%num
大家可以从截图中看到,我并没有使用向导创建Activity。具体什么原因可以在后面看到。

注意:Processing目前似乎只支持2.2(API Level 8)以上的版本。

第三步,将Processing-core包导入项目。

%title插图%num
将图中android-core.zip直接修改后缀成.jar,得到的就是Processing-core包。

第四步,编写“PApplet”

PApplet是所有Processing的入口程序。用户所编写的程序需要继承自这个PApplet类。并且需要自己编写setup()和draw()这两个函数以共回调。

程序的内容如下:

package cn.Friskit;

import processing.core.*;
public class ProcessingRun extends PApplet{
public void setup(){
strokeWeight(5);
}
public void draw(){
line(mouseX,mouseY,pmouseX,pmouseY);
}
}
上面这一段程序实现的功能类似于电子白板。通过手指在设备上的拖动进行绘画。
在传统的Android平台上想要实现类似的功能可是非常麻烦的!但是在Processing框架里头只用到了几行实际代码就能达到同样的效果。可见Processing对于交互与动画等方面的先天优势。。。

第五步,注册Activity

很明显,想要让系统运行这个程序,还需要将这个ProcessingRun在AndroidManifest.xml中注册。也就是在<Application>节点中添加以下内容:

<activity android:name=”.ProcessingTest”>
<intent-filter>
<action android:name=”android.intent.action.MAIN”/>
<category android:name=”android.intent.category.LAUNCHER”/>
</intent-filter>
</activity>

细心的读者肯定会为,这里添加的明明是一个Activity。但我们的ProcessingRun只是一个继承自PApplet的类。

在这里我们就需要剖析以下PApplet的结构了。

从Android版Processing中我们可以查到这些代码:

再通过分析PApplet的源代码能共很容易的发现,其实PApplet就是一个封装了很多功能的Activity。Processing也实现了OnCreate等等的函数为后续使用搭建了一个良好的框架。

所以说将一个继承自PApplet的类当成Activity注册到AndroidManifest.xml中也是没有问题的。

*后执行一下,效果跟咱们想象的差不多。

%title插图%num

好了,这次的Processing on Android开发之旅就先写到这里。

现在Processing对Android的支持还不如对原生Java的支持好。甚至还没有已经成型的文档。但是我们可以通过阅读源代码来了解Processing究竟是如何工作的。好了,就先说这么多了,期待下一次的研究吧!

Activity与Intent的作用

Intent的基本作用:

一个Intent对象包含了一组信息

1,Component name

2,Action

3,Data

4,Category

5,Extras

6,Flags

*个 Activity: Android02Activity

%title插图%num

%title插图%num

Android02Activity的布局文件

%title插图%num

*后要在AndroidManifest.xml文件中注册 Activity

%title插图%num

不然会报异常:

%title插图%num

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