壹拾肆
https://www.kaaaaai.cn/icon.png
有些安排是多余的 这片空旷对我有益
2023-01-18T06:05:21.141Z
https://www.kaaaaai.cn/
Kaaaaai
Hexo
2023 年终总结丨惠存这一年
https://www.kaaaaai.cn/2023-year-end-review.html
2023-01-16T05:24:52.000Z
2023-01-18T06:05:21.141Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>去年没写年终总结,今年发生了很多事,觉得应该抽点时间,回顾记录,以重新出发。</p>
<p>仍旧是过的很快的一年,好像工作后的每一年都过得很快,书上说人之所以觉得成年后的日子过得快,是因为对很多事没有新鲜感了,没接触新的东西,没有记忆点,日复一日,所以很快。我觉得,对了一半。另一半也许因为年岁渐长,人们喜欢追忆,过去的时间也许也并没有比现在过得更慢,只是过去的日子被人们的反复咀嚼,每一天的长度都被放到无止境大,所以看起来就好像过去的日子变得更有份量。长者逝世的那几天尤其印象深刻,互联网上很多人在回忆长者的年代,我想他们又何尝不是回忆那个热情洋溢年代的自己。</p>
翻译:Why use dependency injection
https://www.kaaaaai.cn/translation-why-use-dependency-injection.html
2021-02-22T01:37:05.000Z
2021-02-22T08:25:58.000Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>原文来自:<a href="https://github.com/uber/needle/blob/master/WHY_DI.md">Why use dependency injection</a></p>
<p>第一次翻译,如有问题还请留言指出。<br>E-mail:<a href="mailto:root@kaaaaai.cn">root@kaaaaai.cn</a></p>
是时候维护一个属于自己的开源库了
https://www.kaaaaai.cn/its-time-to-build-an-open-source-library.html
2020-11-21T01:37:05.000Z
2022-07-07T10:32:25.136Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>使用 GitHub 很久,除了无脑 star、fork 大神们的仓库、输出一些学习代码以外,对于 GitHub 本身的贡献似乎寥寥。<a href="https://archiveprogram.github.com/arctic-vault/"><strong>Arctic Code Vault Contributor</strong></a> 的勋章我受之有愧。如果你也有和我类似的想法,那么,是时候可以尝试一下维护一个自己的开源库了。</p>
<p>维护一个开源库,听起来很简单,但是真正要开始动手,似乎颇有些千头万绪,无从下手。那让我们来捋一捋,首先我们碰到的第一个问题可能是:我们可以去维护一个怎样的开源库?</p>
iOS 端豆瓣开源许可提到的库
https://www.kaaaaai.cn/ios-douban-open-source-license-mentioned-in-the-library.html
2020-10-31T03:24:52.000Z
2022-04-26T01:51:43.289Z
<p>在网上看到一篇<a href="https://juejin.im/post/6844903749949865991">豆瓣开源许可-android</a>的文章,列举了一些 <code>Android</code> 端豆瓣开源许可中所提到的第三方框架,出于好奇心理在网上搜索了一下想看下有没有 <code>iOS</code> 版本。结果是没有的,于是索性就自己动手整理了一份:</p>
推荐几个播客节目
https://www.kaaaaai.cn/recommend-a-few-podcasts.html
2020-10-26T05:24:52.000Z
2022-03-30T03:22:20.186Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>因为最近有点用眼过度,所以在空闲时间想找一件尽量可以不用到眼睛又能涨知识的事情做。我先想到的其实是听书和听线上的付费课程。</p>
<p><strong>听书</strong>不太习惯,原因是许多原本通过看书看到的书面语,从看到变为听到,在从声音转换成画面的这个过渡里,总会有因为追不上朗读者稳定而平均的朗读速度而造成的空白。有时思绪想在某些段落稍作停留,有时又因为对当前段落的后续发展有了预见性的推测,想快点赶往下一章节,总之因为听书的方式相比较看书,缺乏一种主动可控的速度变换,而经常有一种错位的感觉。</p>
iOS 自动化打包上传 AppleStore、fir.im,并发邮件通知测试人员
https://www.kaaaaai.cn/ios-automated-packaging-complicated-by-mail.html
2020-10-19T03:24:52.000Z
2022-04-25T09:10:56.299Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><img data-src="https://i.loli.net/2020/10/19/XKmLbdSTGNoWYZl.png" alt="workflow"></p>
<p>从上图可以看出使用自动化出包,可以优化掉好几个需要人工介入的步骤,优化开发流程,节省开发者的时间。</p>
业余剪辑自我修养
https://www.kaaaaai.cn/amateur-clipsself-improvement.html
2020-10-02T01:24:52.000Z
2020-10-25T13:31:55.000Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>陆陆续续的剪了不少视频,在过程中也有一点收获,遂做个笔记,也做分享。</p>
<h2 id="剪辑软件的选择"><a href="#剪辑软件的选择" class="headerlink" title="剪辑软件的选择"></a>剪辑软件的选择</h2>
Swift - 权限请求封装
https://www.kaaaaai.cn/swift-permission-request-tools.html
2020-09-12T02:24:52.000Z
2022-04-02T01:50:12.888Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>注意到工程里面关于权限请求这块的逻辑没有很好地管理起来,一些是用 OC 的工具类,一些是用 Swift 代码在一些 <code>ViewController</code> 里面单独调用,不能复用,就想封装一个 Swift 版关于权限请求的工具类,虽然这个需求在 GitHub 上搜索也有很多现成的轮子,但使用起来感觉太重,而且有些久不维护,Swift 版本更新的又快,有些接口就不好使了,索性就自己封装一个。</p>
<p>一开始的思路也是想通过枚举来创建不同权限字段,通过静态方法来实现请求,但是蓝牙权限和定位权限需要实例化对象,设置代理。当使用 <code>static</code> 关键字来创建蓝牙和定位对象,当应用内有其他的业务也要使用蓝牙和定位对象时,代理响应就会有点问题。后面索性就用单例方法创建一个整体的权限管理对象,然后创建类方法,在类方法中自己调用自己。</p>
iOS - HMAC 加密算法和一个 MD5 加密的问题
https://www.kaaaaai.cn/ios-hmac-encryption-and-an-md5-problem.html
2020-09-06T02:24:52.000Z
2020-09-12T03:54:35.000Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="最近阅读"><a href="#最近阅读" class="headerlink" title="最近阅读"></a>最近阅读</h2><ul>
<li><a href="https://swift.gg/2016/06/17/when-to-use-mutating-functions-in-swift-structs/">Swift 结构体何时使用 mutating 函数</a></li>
<li><a href="https://juejin.im/post/6862898534857834510">2020 年疫情之下 iOS 面试题总结篇</a></li>
<li><a href="https://blog.csdn.net/tianhai110/article/details/6339565">UML类图几种关系的总结</a></li>
</ul>
iOS - 一些蓝牙问题的解决
https://www.kaaaaai.cn/ios-some-question-about-bluetooth.html
2020-08-15T02:24:52.000Z
2020-08-15T04:44:19.000Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="最近阅读"><a href="#最近阅读" class="headerlink" title="最近阅读"></a>最近阅读</h2><ul>
<li><a href="https://stackoverflow.com/questions/44030213/whats-the-swift-best-practice-for-reusable-uialertcontroller-configuration-via-e">通过枚举在 Swift 中实现 UIAlertController 的复用性</a></li>
<li><a href="https://mp.weixin.qq.com/s/FShd9WAMQdWU9Mp6eZR4rA">一文看破Swift枚举本质</a> </li>
<li><a href="https://www.cnblogs.com/onepixel/articles/7674659.html">十大经典排序算法(动图演示)</a></li>
<li><a href="https://daily.zhihu.com/story/9726758">为什么人会变成「工作狂」?这算不算一种上瘾行为?</a></li>
</ul>
Swift - 顶部弹出框封装
https://www.kaaaaai.cn/swift-toppop-upboxencapsulation.html
2020-08-04T05:24:52.000Z
2022-04-26T01:51:43.360Z
<p>抽空把项目里的顶部弹出框封装了一下。</p>
被光放弃的人
https://www.kaaaaai.cn/a-person-abandoned-by-the-light.html
2020-07-18T02:13:52.000Z
2022-07-07T06:09:15.090Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>看科幻小说常常会感到一种作为人类的自卑感,对于宇宙来说,我们只是其中数以亿计星球中的一个,即使拥有灿烂的文化和恢弘的历史,也一粒尘埃反射出的微弱光芒。</p>
<p>而作为个体,虽然每个人都有自己引以为傲的事情,经历过的人和事、在事件中的感受,我们也因为这些而变得与众不同。然而目光宇宙,时间、空间,都能比量出我们的不值一提。甚至可能只是一场灾难,我们日常曾以为很深刻的痛苦也会立马失去他原来的分量。</p>
OC - 多代理的实现
https://www.kaaaaai.cn/oc-multi-delegate-implementation.html
2020-07-16T05:24:52.000Z
2020-11-05T02:18:20.000Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="一、背景"><a href="#一、背景" class="headerlink" title="一、背景"></a>一、背景</h2><p>迭代项目的时候碰到一个问题, 原因是负责的内容有一项是封装各大 AI 开放平台的 SDK 集成到一个 SDK 里,然后输出统一的接口,目的是为了可以在不同的 AI 中快速切换并使用。但由于之前输出给了兄弟公司使用,他们在一个音乐 SDK 中用语音 SDK 实现语音点歌的功能。然后当我的主应用同时使用两个 SDK 时,由于音乐 SDK 中实现了语音 SDK 的代理,所以我在上层再初始化语音 SDK 设置代理就不起作用。</p>
我的 AIO-notion 工作流搭建
https://www.kaaaaai.cn/about-my-notion-workflow.html
2020-06-07T05:24:52.000Z
2022-04-26T01:51:43.000Z
<p><img data-src="https://i.loli.net/2020/06/07/cSgrjKnkbB41AxI.jpg" alt="cSgrjKnkbB41AxI"></p>
解决使用 GitPage 重定向多次问题
https://www.kaaaaai.cn/web-resolve-recirculation-errors.html
2020-05-30T09:24:52.000Z
2022-04-02T02:03:35.566Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="问题表现"><a href="#问题表现" class="headerlink" title="问题表现"></a>问题表现</h2><p>博客网站更换了 DNS 解析的服务商,访问出现以下问题。<br><img data-src="https://s2.loli.net/2022/04/02/QRqexU16yVaWFuY.jpg" alt="03oBxi-20200530"></p>
Swift - ?和!的学习
https://www.kaaaaai.cn/swift-optional-and-unwrapping-learning.html
2020-04-24T09:24:52.000Z
2020-11-21T02:09:49.000Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p> 最近在优化一个项目的过程,过程中发现之前开发时由于刚接触 <code>Swift</code> 的原因,在 <code>Swift</code> 中的类里使用了很多 <code>OC</code> 的写法,比如字典数组对象会习惯性用 <code>NSDictionary</code>、<code>NSArray</code>来初始化,而不是用 <code>[KeyType: ValueType]()</code> 或是 <code>[SomeType]()</code> 这种类型来实例化变量。虽然在使用上没有什么问题,但看起来多少有点。。。不优雅。<br> 当我把大部分类型都修改成 <code>Swift</code> 中的写法后(部分未修改是因为使用 <code>String</code> 类型来给文本做截取和富文本定义,实在不如 <code>NSString</code> 顺手,这种不顺手让我不由想起 Stack Overflow 上看到的一个评论:I thougt i already getting along well with Swift.)发现,原来一些变量是否为空的判断中,使用 <code>Swift</code> 里的 <code>optional</code> 类型会方便很多。<br> 比如解析一个 json 数据,如果层级多而且里面每个元素都是不确定的,那么可能就需要每个层级都判一次空。而如果使用 ? 来设置当前对象为可选值,只需要在最后一层实际使用到对象值时,判一次空就 OK 了。<br> 对于 ? 和 ! 的区别和总结,网上有很多文章,在这里就不重复造轮子了。下面就对这个 <code>optional</code> 的自己两个疑问做个记录。
</p>
<h2 id="和-!-是表示两种不同的类型吗,一种是可以为空,一种不可以为空?"><a href="#和-!-是表示两种不同的类型吗,一种是可以为空,一种不可以为空?" class="headerlink" title="? 和 ! 是表示两种不同的类型吗,一种是可以为空,一种不可以为空?"></a>? 和 ! 是表示两种不同的类型吗,一种是可以为空,一种不可以为空?</h2>
《文学回忆录》读书笔记
https://www.kaaaaai.cn/literary-memoirs-reading-notes.html
2020-04-18T05:00:52.000Z
2020-11-05T02:21:02.000Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="《文学回忆录》"><a href="#《文学回忆录》" class="headerlink" title="《文学回忆录》"></a>《文学回忆录》</h2><div align="right"> [木心](https://book.douban.com/subject/20440644/) </div>
iOS - UITableview 阴影圆角共存
https://www.kaaaaai.cn/ios-uitableview-shadow-rounded-corners-coexist.html
2020-04-11T02:24:52.000Z
2020-11-22T01:44:11.000Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>给 <code>UITableView</code> 同时设置圆角和阴影时发现在视图上只会显示圆角,原因是因为当我们设置 <code>masksToBounds</code> 为 <code>YES</code> 允许圆角剪裁时,圆角以外的阴影也会一并被剪裁掉。在网上找了一下解决方法,<a href="https://www.jianshu.com/p/48b1a601febf">ios阴影圆角共存</a> 这篇文章提供了一个思路,就是把圆角和阴影放在不同的两个控件上实现,然后叠加到一块。基本思路是正确的,但实际操作发现在最后插入作为阴影层的 <code>CALayer</code>,调用的方法可能会照成层级有点混乱的问题。下面展示一下我解决这个问题的方法和用 Swift 实现的代码。</p>
上帝会掷几次骰子
https://www.kaaaaai.cn/god-will-rolls-the-dice-several-times.html
2020-04-04T02:13:52.000Z
2022-04-26T01:52:33.000Z
<p> 看了一本图说量子物理学史的书,《上帝的骰子》,书名来自于爱因斯坦的一句话:上帝不会掷骰子。去年也有一本书很火叫《量子物理史話:上帝掷骰子嗎?》,不说大家为什么都一窝蜂的抓着骰子不放,从这些现象我们可以看出,量子的不确定性的迷人魅力让许多人趋之如骛。<br>
社畜都爱 GTD
https://www.kaaaaai.cn/everyone-love-gtd.html
2020-03-22T02:24:52.000Z
2022-03-26T02:55:37.791Z
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><img data-src="https://s1.ax1x.com/2020/03/21/8hSBZR.jpg"></p>
<p> 用了很久 GTD 工具,才知道它的全拼是 Getting Things done(把事情做好),而不是 Get to do(快去做)。虽然意思差不多,但是情绪上好像一个是在昂首挺胸向前迈进,另一个是无可奈何负重前行。看过关于很多关于时间管理的文章,每个作者侧重点和方向不同,都给我带来一定的收获。虽然在用心程度,耕耘深度都不如写文章的大佬们,但还是想写一下自己从接触到使用那么久以来的心得。<br> 看到题目“社畜都爱 GTD”,可能有朋友就会跳出来这样反驳:我承认我是个社畜,但我不爱 GTD,我甚至不知道 GTD。或是这样反驳:我每天从八百平方米的卧室起来,在高大的落地窗前喝咖啡欣赏清晨的阳光,我不是个社畜,但我也爱 GTD 啊。虽然后面的杠法难度有点高,但这两个争议对于我的题目来说也确实存在,不过不去钻牛角尖,通过这两个争议我们可以延伸出两个问题:</p>