Sketch 插件整理
Sketch measure标记尺寸 快捷键:Ctrl + Cmd + B Runner快速查找组件 快捷键:Cmd + ‘ Auto-Layout组件位置 安装好之后,选中一个对象,Auto Layout就会出现在inspector的右下角
MacOS 10.12 终端命令行下使用Shadowsocks
Shadowsocks-NG有一个新的Shadowsocks的客户端叫 Shadowsocks-NG 解决了一个长久以来的痛点,Shadowsocks没有HTTP代理,导致我们需要使用polipo等软件进行协议转换 现在其在1087端口提供了http代理服务(http代理代理设置选项),我们可以通过在命令行直接设置代理,来使用SS服务了 #开启代理export http_proxy=127.0.0.1:1087export https_proxy=127.0.0.1:1087#关闭代理unset http_proxyunset https_proxy 配置一个别名方便启动 vim ~/.bash_profile#orvim ~/.zshrc 在文件内加入 #Custom Add not Systemalias proxy-on='export http_proxy=127.0.0.1:1087;export https_proxy=$http_proxy'alias proxy-off='unset http_proxy;unset https_...
Swift Dictionary数据结构
Dictionary是除了Array之外的另一种非常重要的数据结构,它用于把某种形式的key,关联到某种形式的value。我们来看一个例子。 定义Dictionary假设我们要定义一个数据结构,用来保存用户在泊学对某个视频的观看情况。可以这样: 假设我们要定义一个数据结构,用来保存用户在泊学对某个视频的观看情况。可以这样:enum RecordType { case bool(Bool) case number(Int) case text(String)}let record11: [String: RecordType] = [ "uid": .number(11), "exp": .number(100), "favourite": .bool(true), "title": .text("Dictionary basics")] 在上面代码里,我们用[KeyType: ValueType]的形式来定义一个Di...
Swift:Array
Swift官方API文档 对任何一门现代化编程语言来说,集合类型都是非常重要的组成部分。这一类数据类型的设计,很大程度上决定了开发者对某种编程语言的使用体验以及代码执行效率。因此,Swift在集合类型的设计和实现上,进行了诸多的考量,让它兼具易用性、高性能以及扩展性。 但是这样做也是有代价的,在Swift里,集合是个复杂的类型家族,它是由多个protocol形成的,因此当我们想深入其中一探究竟的时候,并不那么容易。 最简单也最常用的一个集合类型:Array。 创建一个ArrayArray表示一组有序(ordered)的数据集合,所谓有序,并不是指大小排序,而是指Array中的元素有先后的位置关系,稍后我们会看到,这个位置关系可以用来访问Array中的元素。在此之前,先来看了解如何定义Array对象。首先,我们可以通过下面三种方法定义一个空的Array: var array1: Array<Int> = Array<Int>()var array2: [Int] = []var array3 = array2 在上面的代码中,前两种使用了type ann...
Swift中String
忘了String是字符数组在Swift里,String已经彻底不再是一个集合类型。而是一个提供了从多个维度展现一个Unicode视图的类型。你可以得到它的多个Characters,可以看到它的UTF-8 / UTF-16 / Unicode scalar值等等。 String和NSString处理Unicode时的差异unicode长度是可变的,我们将看到unicode另外一个可变的特性,即组成同一个字符的code unit组合也是可变的。而区分String和NSString的一个重要方式,就是它们对unicode的这个特性的处理方式,是不同的。为了理解这个事情,我们从unicode grapheme clusters说起。 Unicode grapheme clusters首先,我们定义一个字符串: let cafe = "Caf\u{00e9}" 返回 Café Swift里,我们可以使用\u{}这样的方式使用unicode scalar定义unicode字符。 对于单词Café中的最后一个字符来说,它的un...
Vapor 用于处理异步事件的非阻塞架构
Vapor中使用Future和Promise几乎任何一个有可能带来请求延迟的操作,Vapor都会采用Future来处理,例如: 返回渲染过的页面,会用Future<View>; 返回HTTP状态码,会用Future<HTTPStatus>; 返回HTTP请求,会用Future<Response>; 在Vapor里,只要返回来自Model中的内容,它就一定是一个Future<T> 修改EpisodeVapor中的做法。为了表示某个在未来会返回的值,我们要使用Future<T>来表示。例如,在未来会得到一个Int就是Future<Int>,在未来会得到一个String,就是Future<String>,以此类推。 因此,对于上一节的/episodes/id这个API,如果Episode对象是通过数据库查询而来,我们最先要修改的,是遵从protocol Parameter时实现的resolveParameter,它返回的,应该是一个Future<Episode?>...
API测试中Github工具
Api测试工具Paw 自动化工具: Apifox Mock框架Java 框架: MocoNode.Js框架: Yapi 抓包工具Charles
Vapor 通过URL返回自定义类型
自定义参数类型首先,在Sources/App/Models中,我们新建一个文件Episode.swift,在这里,定义一个类型Episode,表示数据库中的视频对象: struct Episode { var id: Int var desc: String init(id: String) { if let eid = Int(id) { self.id = eid self.desc = "Description of episode \(self.id)" } else { self.id = 0 self.desc = "Invalid episode" } }} 定义路由/routers router.get("episodes", ...
Jmeter性能测试
启动Jmeter 终端下,直接输入jmeter命令,启动Jmeter CLI模式对于负载测试,您必须在此模式下运行JMeter(不含GUI),才能从中获得最佳结果。为此,请使用以下命令选项: jmeter -n -t [脚本文件] -l [报告文件] -e -o [报告路径] jmeter -n -t Script.jmx -Jconcurrent_number=50 -Jduration=120 -Jcycles=-1 -l report.jtl -e -o C:\Users\Test\ 字段 说明 -n 这指定JMeter要在cli模式下运行 -t [包含测试计划的JMX文件的名称]。 -l 记录测试结果的 jtl 文件名称 -j [JMeter运行日志文件的名称]。 -r 指定所有远程服务器中运行测试(所有) -R [远程服务器列表]在指定的远程服务器中运行测试(指定) -g 生成测试报表(CSV) -e 生成测试报表(HTML) -o 生成测试报表(HTML) 文件夹不得存在或为空 ...
设计HTTP API的最佳实践
HTTP 请求方法当客户端向服务器发起HTTP请求的时候,请求的Header中会有一个字段叫Request Method,也叫做HTTP verb,不同的HTTP verbs表达了不同的HTTP请求意图,而我们常用的,有下面这几种: GET:表示客户端需要请求服务器的某个资源。简单来说,就是当我们需要给用户显示某些保存在服务器上的内容时,都会向服务器发起GET请求 POST:表示向服务器提交数据,例如用户注册时填写的信息、登录时填写的用户名/密码等。简单来说,就是当我们需要根据用户输入在服务器上创建新记录的时候,都会向服务器发起POST请求 PUT:表示根据用户提供的内容,修改服务器上的特定资源;PUT请求修改要求提供的数据是全量的,例如当我们修改某条数据库记录时,使用PUT请求,应该包含这条记录的所有字段,这种修改更像是覆盖 PATCH:使用PATCH请求提交的内容则是有针对性的,只要提供需要的部分就好了 DELETE: 请求服务器删除指定的页面 CONNECT: HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 OPTIONS: 允许客户...



