We must travel in the direction of our fear.

Hipo 2.6
Hipo

Hipo 2.6

2020年过了一个漫长的春节,新冠病毒仍在肆掠,自然谈不上高兴…… 终于还是把拖了很久的Hipo,更新到了2.6.0的版本 2.5.0的版本是2017.10.10的时候 时光荏苒啊,iOS发生了很多的变化,swift 到了5.1,iOS到了iOS13,有了Swift Combine,SwiftUI…… 个人生活也有了大的变化,从武汉到了深圳,到了腾讯,2020还有个更大的惊喜👶…… 最后,Hipo 2.6.0 只是做了技术上的升级(最低兼容到iOS12,使用了CloudKit新的API),以及bug fix。 后续,可以尝试尝试 SwiftUI和Combine。 再续。

Swift 5.1
Swift

Swift 5.1

又是一篇迟来的文章。主要是译自: What’s new in Swift 5.1。 阅读之前可以查看我之前总结的Swift 3 到Swift 5的新特性。 Swift5.1支持了SwiftUI, 可以看出本次的更新更多了是为了更好的“声明”UI。 改进自动生成的struct初始化方法 swift早期版本中支持了自动生成struct的初始化方法 struct User { var name: String var loginCount: Int = 0 } let piper = User(name: "Piper Chapman", loginCount: 0) Swift 5.1改进了初始化方法,如果属性有了初始值,初始化的时候可以省略。 let gloria = User(name: "Gloria

[译]Swift中的原子属性装饰器
翻译

[译]Swift中的原子属性装饰器

Swift中实现原子属性装饰器 来一篇快文,Property Wrappers我姑且叫它“属性装饰器”,是Swift 5.1中新增的最关键的功能,本文不深入解释,先了解的可以查看Swift 社区SE-0258提议。 原子、非原子属性 Objective-C中的属性默认都是原子的(atomic)。原子的意思是,它支持在不同线程安全的读写。非原子的属性,自然就无法确保这些,但是它的优势是可以快速读取属性。 原子的属性,在不同的线程中不一定是同义的(synonymous) 要实现一个原子属性,可以通过锁来实现,在Swift中通过不同的Apple框架的锁都可以实现这点: 通过Property Wrappers来定义一个原子的属性装饰器 在此使用NSLock 来实现原子属性。 @propertyWrapper struct Atomic<Value> { private var value: Value private let lock = NSLock() init(wrappedValue value: Value) { self.value

[译]Swift中的空字符串
Swift

[译]Swift中的空字符串

Swift 一个特色就是有很多的语法糖,初学可能觉得hold不住,实际用的时候倒是挺便利。 基于对此的喜爱,简单转译一篇短文,Empty Strings in Swift。 isEmpty属性 Swift中String是字符的结合,遵循Collection协议。因此会有isEmpty的属性,来判断字符串是否为空。 var isEmpty: Bool {get} Collection.swift的具体实现是: public var isEmpty: Bool { return startIndex == endIndex } "Hello".isEmpty // false "".isEmpty // true 不要使用count是否为0的方式来判断,这样会遍历整个字符串,性能差。 如何判断空白字符串 有时候的需求是判断字符串是否是空白字符串,因为设计字符编码的问题,通常不好实现。 " " // space "\t\r\

Swift 3到5.1新特性整理
Swift

Swift 3到5.1新特性整理

Hipo 2.0 重写从Swift 1的版本写到2的版本,后续Hipo功能稳定,更新慢了很多……,Swift本身却在长足的发展,5.0都已经发布了,本文对Swift 3.0 到Swift 5.1 的更新点做个总结。 为了方便阅读,准备从新到旧的总结。 下面所有的东西,都是来自hackingwithswift.com。 Swift 5.1 Swift 5.1的更新比较迟,单独成篇Swift 5.1的变化。 Swift 5.0 Swift 5.0 最重要的自然是ABI Stability, 对此可以看这篇 Swift ABI 稳定对我们到底意味着什么 。 当然还有其他的更新。 Result类型 SE-0235提议的实现。用来在复杂对象中的错误处理。 Result类型有两个带泛型的枚举成员success和failure,而且failure的泛型必须遵循Swift的Error类型。 常规的使用

纯粹到让人流泪

纯粹到让人流泪

很庆幸能够在火车上看到这个故事。 《幸福的拉扎罗》一部古典,安静,魔幻而又纯粹到让人流泪的电影。 或许是和《圣经》中的故事重合,或许就是取材于此……男主从始至终的温柔,善良,单纯确实温暖到救赎。 被骗为佃农的时候,生活很清苦,原始,但至少女孩们还有欢歌和笑语。被解救后,来到现代化的大都市,只能干些坑蒙拐骗的营生。 从被蒙蔽中解救,来到了开化之地,却又被夺去双手。 文明的地方,熙熙攘攘,没有了阳光,寒冬中,众生更需要被救赎。 而我此刻行色匆匆,奔向的地方,又有什么不同。

推荐电影:《罪人》
电影

推荐电影:《罪人》

有的电影炫画面,有的电影炫结构,甚至可以炫一些更直接的元素,恐怖,色情……但是抛开电影诸多表现形式,我想故事性,或者说如何讲好一个故事,还是判断一个好电影的最主要标准。 《变形金刚》机械越来越高级,故事很扯淡,评分一路走低。 昆丁的电影结构故事俱佳,再配以独特的导演气质,好片不少,《邪不压正》很是炫技,即便是同样的姜味,故事上稍微弱了点,评分差《让子弹飞》不少。 王家卫的电影,看似没故事,恰恰光影与演员的表演便是做好,最让人迷离的故事。 即便是《影》,水墨,八卦,三国,武打……诸多很炫的元素去烹饪那个,很俗套,也不见得高明的权谋故事,评分自然配不上国师。 《罪人》一个场景,一个演员,一个好的故事。 说实话类似的电影不少,《活埋》,《狙击电话亭》,都是不错的电影,都是通过固定单一的场景,去渲染画面外一个更大的,更惊悚,更big picture的场景。

新加坡小游
人生

新加坡小游

周末机票便宜,就随性和同事来了趟新加坡三日游。很小的城市,很漂亮,也很安静。 对中文很友好,随处可见的中国元素,吃的也大多很中国菜,各色的人种,包容,礼貌,有秩序。 然后再加上一点点清教徒的感觉。这就是新加坡给我最多的感受了…… 新加坡的街道很干净,车子不多,也就显得很安静新加坡动物园,人像模式下的两只猴🐒

Flutter中的状态管理
Flutter

Flutter中的状态管理

Flutter作为出自Google的一个跨平台(iOS,Android)应用开发方案。布局方式上和React或者说React Native非常相似——组件(Widget)化。写起来非常的高效,却有着React Native所不具有的优势: 一套代码到处运行,原生渲染,原生调用,不需要像RN需要桥接。 前端应用除去布局部分,就属状态管理最复杂难搞了。官方文档中只是提及了最基础的部分,因此本文中着重讨论这部分。 下面基本上转述自Google I/O '18上视频Build reactive mobile apps with Flutter,内容较水,推荐大家看视频就够了😄 setSate 是的你没看错,就是和React中一模一样的setStae。Flutter将组件分为StatefulWidget,StatelessWidget,自然有状态的组件使用继承Flutter将组件为StatefulWidget。flutter create app开箱中代码就是实例了setSate class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(

【译】Swift Delegation
Swift

【译】Swift Delegation

Delegation委托是Apple iOS开发中很常见的一种模式,不过在之前开发Hipo中更多算是照猫画虎,这次来一篇Apple iBooks中《The Swift Programming Language ( Swift 4.2 beta)》中Protocol -- Delegation的译文。 委托(Delegation)是一种设计模式,能够让类或者结构体将自己一部分责任移交(或者称之为委托delegate)给另一个类型实例。该设计模式首先定义一个协议(protocol)描述被委托的责任,然后由受托者保证委托功能的实现。委托设计模式能够用来响应特定的动作或者从其他来源接受数据而不需要知道对方的类型。 下面例子为骰子积分榜类游戏定义了两个协议 protocol DiceGame { var dice: Dice { get } func play() } protocol DiceGameDelegate: AnyObject { func gameDidStart(_ game: DiceGame) func game(_ game: DiceGame, didStartNewTurnWithDiceRoll: Int) func

Swift macOS开发与Core Data,CloudKit开篇
Swift

Swift macOS开发与Core Data,CloudKit开篇

坚持总是最难的,立了很多flag,最终却仍是什么都没有做成。 喏,这不,又是一个flag。 喜欢将自己称之为创造者,也很庆幸能用自己的既能创造点东西出来,花花世界可爱的技术太多了,就连单单写个App就有着各种要花缭乱的法子,webview的,混合的,原生的……,谁不想用最小的力气写出最好的作品呢。 迷失了自己。 选一条hard way吧。 系列文章可能包含什么? Swift语言相关,工作中使用Typescript, React,RxJs,越来喜欢强类型语言,Swift作为一种现代的,安全的,强类型语言,值得再复习它的的语法。 可能会GitHub开源一个横跨,iOS,iPad,macOS 使用Core Data本地存储数据,CloudKit网络同步的TODO App。 可能会探索下RxSwift,工作中RxJs不要太爽。

《妖猫传》《三块广告牌》和产品
电影

《妖猫传》《三块广告牌》和产品

毫无疑问,我是不喜欢《妖猫传》的,塑料感的大唐盛世,配合形如秦昊所演人物般猥琐的剧情。这就是我对《妖猫传》的所有感受。 无心插柳,之后看了《三块广告牌》这个电影,摄影不美,主演不美,至于绝对精彩的女主,更加……放张图片你们感受下 甚至所讲的故事,也不美,不是你们赞美的“玉环之后,再无盛唐”,更不是什么人猫绝世爱恋故事…… 但是我超爱这个故事,更改爱这样讲故事,就爱这种长在生活中温突突黑色幽默。 一直很喜欢做一些“东西”,也就是俗称的产品吧,但是回顾2017年,无论个人还是工作中,的的确确失败的一年,什么值得称道的东西都没有造出来…… 想想,也喜欢这种慢慢长出来的产品,内聚,让你会心一笑,不去创造什么盛大词汇点缀的东西,反而似乎有了点方向,压力少了,动力倒是多了。 善! 再分割,相比我还是更喜欢《卧虎藏龙》《聂隐娘》中的古代…… 2018.10.

2017,家,流水的一年

2017,家,流水的一年

2017年流水似的过去了…… 所幸赶在2018年元旦前搬进了新家,精装的房子,打包的装修,之前设想的种种基本都没有实施,还是懒的原因…… 博客也终于升级到了1.x的版本。 $ docker pull ghost $ docker run -d --name name -p 3001:2368 -v /path/to/ghost/blog:/var/lib/ghost/content -e url=http://your.blog -e NODE_ENV=production ghost:1-alpine //更改下nginx的监听端口,restart就OK😄 //将之前hicc.me博客中外链http图片全部迁移到https后,博客也升级到了https //顺便letsencrypt的https升级更方便了,几乎一键,大赞👍,https://certbot.eff.

银翼杀手
电影

银翼杀手

很是喜欢科幻类的东西,很是喜欢《银翼杀手》这两部电影。 看第一部《银翼杀手》还是在2011年,迷茫焦灼的大学时代,时光荏苒,至今看第二部已然是7年后了,依然迷茫与焦灼。 很爱这种,橘红色迷雾笼罩,极简而又极权,极宗教,中西混杂的建筑群体。拥挤而又孤寂的人群中,最具人情味的是一个人人可以买到的AI产品…… 仿生人会梦见电子羊吗?没有灵魂的复制人可以做出最有人性的牺牲,或许这才是人类成神的时代。