Xcode插件的实现-JSON格式化
背景:开发中经常遇到需要格式化JSON字符串的情况,每次都是百度在线格式化解析好不方便,某天看到APP Store里有Xcode关于这个的插件,卖的老贵了,哈哈哈,于是就想自己也弄一个,先调研一下JSON格式化的实现原理,然后再看看Xcode插件的实现,最后还可以写个Mac版,给自己大大的赞😄
用搬瓦工搭建ss
因为工作的原因会经常使用Google搜索,最初一直是买的VPN,或者蓝灯,后来发现有时候下载东西的时候速度特别慢。然后想自己好歹也是个技术,要自己动手丰衣足食。 前年开始用搬瓦工搭建ss,19.9$一年,当时记得操作好麻烦,还求助了别人。然后去年续费,我感觉自己搭建的还蛮不错,自己用,看视频比较少,也不访问违法网站,速度也可以接受。 今年收到邮件说,不能续费了。。。。因为当时买的是openVZ,不支持续费了。要迁移到新的KVM。郁闷了好久。但还是要用啊。前阵子黑五的时候,就又买了个29.9$一年的,打算看看视频。买了之后,再次搭建,我发现,特别简单,不到十几分钟就搞定了。想想我还有上次搭建的阴影,也是够了。 至于为什么突然想弄一个关于这个的文章,一呢是老是会有人问我借账号用,不给用吧,不好意思,给用吧,又怕他们访问什么网站,把我的给封了。二来,是我想保存一下自己的操作流程,这样网上找不到的时候,自己还有个备份。 下面的内容都是转载的,但是我自己试过了,我的新SS就是按照步骤搭建的 转载搬瓦工 VPS 搭建 Shadowsocks (SS) 科学上网图文教程 | SS多用户配置...
昨日见闻
本来应该昨晚写日记的,但是晚上是在太冷,完全不想动,但昨天遇到的事情又确实想要记录,所以今天补录到博客里。 昨天去参加互联网周末的杭州余杭长乐林场活动。 计划永远赶不上变化,提前预留足够的时间还是好的因为要早上7:20集合,所以我定了3个闹钟;6:00起床,6:30出门,7:00上地铁。早上5点多起来去了个厕所,然后就等闹钟响,结果等我醒来才发现已经6:10分了,6:00的闹钟没响,因为我设置的就寝时间的问题。然后爬起来洗漱之后,出门已经是6:45了,路上买了个煎饼,到地铁站还不到7:00,然而地铁刚刚出发,下一班诡异的地铁空的,不开门,然后等我上车已经7:05了;不过好在我留的时间还算足够,没有吃到。 保持平常心我其实特别不喜欢自我介绍,因为容易紧张,而且不知道说什么。但由于参加的单身活动,所以自我介绍又是少不了的。我当时就感觉或许我不应该出来,又要搞砸了——整段垮掉。。。领队开了个好头,给了个模版,介绍自己名字、职业、哪里的人、兴趣爱好的话,美剧也算。就想自己要说什么,知道自己要说什么之后,再想怎么说。然后我开始试着调整,反正又没人认识,怕什么,而且又不是一定要在这次活动...
在Swift中使用error来控制流程
此文是翻译原文链接:Using errors as control flow in Swift app和项目里管理控制流会对代码的执行速度,代码的调试复杂度有重大的影响。代码的控制流本质上是函数和声明的执行顺序,及代码执行路径。 尽管Swift提供了很多工具定义控制流——例如if, else, while 及 optional;这周,我们来看一下,如何通过Swift编译时错误来抛出和处理model,来让控制流程更容易管理。 抛出可空的值可选值,作为Swift的重要特征,处理空的数据时可被合法的忽略;它也经常被用作给定函数的来源样板在控制流程中。 下面,重写了从app中bundle加载、调整图片的方法。由于每一步操作都返回了可空的图片,不得不写多个guard语句,告诉函数哪里可以退出: 12345678910111213func loadImage(named name: String, tintedWith color: UIColor, resizedTo size: CGSize) -> UIIma...
关于沟通2
选择积极自信的沟通方式与他人沟通,摒弃攻击性、退让性以及消极性的沟通 沟通时尽量采用第一人称 避免沟通到几个障碍:唱反调、泼凉水、回答“绝”句 巧妙的运用感官系统来和他人建立和谐关系 理性到回应他人到语言攻击 A. 小王,我今天没时间,你必须在下午下班前帮我把这个文件送到分公司B. 小王,我本来不想麻烦你,但是我有个文件要送到分公司,而我又没时间,所以。。。当然,如果你没时间,那就算了C. 小王,我有个文件要在下午下班前送到分公司,而我恰好没时间,如果你能帮我,我会非常感谢你。这是个很重要紧急到文件D. 小王,我想你肯定不是那种忘恩负义的人,我经常帮你,这次你得帮帮我了,把这个文件送到分公司去 提出请求四步法: 提出请求前的准备工作 开场白(简单明了的话和真诚的态度) 帮忙的理由,确认请求的结果 结束请求,表示感谢
Swift代码中的嵌套命名法
Swift代码中的嵌套命名法Swift支持与其他类型嵌套命名,尽管它还没有专用的命名关键词。下面我们来看看,如何使用类型嵌套来优化我们代码的结构。 大多数Swift开发者习惯于用类型在结构上的实际名字累命名。例如:PostTextFormatterOption(一个Text Formatter类型的用于format Posts的Option)。这可能是因为我们在Objective-C & C中,养成的别无选择的可怕命名习惯,被我们带到了Swift里。 下面我们用上面提到的类型作为例子,来看下Post、PostTextFormatter以及PostTextFormatterOption的实现: 123456789101112131415161718192021222324252627struct Post { let id: Int let author: User let title: String let text: String}class PostTextFormatter { private le...
使用@autoclosure来设计Swift API
使用@autoclosure来设计Swift API此文是翻译原文链接:Using @autoclosure when designing Swift APIs Swift @autoclosure 属性用于在闭包中定义一个“被包裹”的参数。主要用于延迟执行一段(潜在的耗时、占资源大)代码到真正需要的时候,而不是在参数传递时就执行。 在Swift标准库中就有一个例子,Assert函数的使用。由于asserts仅仅在debug模式下触发,所以没必要在release模式下执行代码。这时就用到了@autoclosure: 1234567891011func assert(_ expression: @autoclosure() -> Bool, _ message: @autoclosure() -> String) { guard isDebug else { return } // Inside assert we can refer to expression as a norma...
简单的Swift函数的依赖注入
简单的Swift函数的依赖注入本文是翻译,原文链接:Simple Swift dependency injection with functions 依赖注入是一种很好的解耦代码的手段,使代码变得易于测试。比起来对象自己创建自己的依赖,从外部注入,使得我们可以设置不同的场景————例如在生产中 vs 在测试中。 在Swift中,大多数时候,我们用协议来实现依赖注入。例如,我们写一个简单的卡片游戏,用Randomizer(随机性发生器)画一个随机的卡片,如下所示: 12345678910111213141516class CardGame { private let deck: Deck private let randomizer: Randomizer init(deck: Dec, randomizer: Randomizer = DefaultRandomizer()) { self.deck = deck self.randomizer = randomizer } func dr...
在Swift中使用构建者模式
在Swift中使用构建者模式和编程中其他的抽象和模式一样,构建者模式的目的是减少以保持可变状态——从而使对象更简单、且更容易预测。对象变得“少状态”,就会容易测试和调试——因为他们逻辑只存在单纯的输入输出。 尽管构建者模式在java中十分常见,然而在苹果平台上却很少遇到(至少和构建对象不同)。这周,我们来看一下,构建者
关于沟通
关于沟通的反思中午回去休息的时候,突然发现自己上午说话好难听。 事情是,测试说我和安卓有个地方计算的不一样,然后要给我提Bug,然后我电脑当时正卡,本来就心情不太好,然后一听要给我提Bug,立马就炸了; 这个地方,最开始过需求的时候,产品都没有提到有这个东西;然后测试写测试用例的时候,提出来了,产品去确认了两三次才知道有这个东西,然后通知开发做,但是具体算的逻辑根本就没有说。 所以我立马就给怼回去了,让给产品提Bug,做个需求变更再做。早上晨会的时候,产品说自己说过,然后就吵起来了。事实是产品文档没写,也没说过这个东西,安卓做的时候,问测试要的另一个东西才这么早,也没告诉我。 我当时真的就炸了,感觉血液往脑袋上涌,就差动手了。 中午吃过去趴床上休息的时候,想想,发现自己完全能不生气,不嘲讽,好好的沟通,然后选择了一种让所有人都不舒服的方式;这固然是习惯使然,另一方面也是自己缺乏正确的沟通的表现。 沟通这个问题,我很早就注意到,知道正确的是什么,但是每次话脱口而出,然后就一发不可收拾。到最后,所有人都记得,我脾气不好,然后评其他东西的时候,就没人愿意帮。然后...