自从小K 2017年12月3号“离家出走”迈出为期一年的「环中国行」的第一步到现在,除去中途回家过年的小半个月时间,行程已经 6 个月有余。某个晚上,iPhone Photo App 突然推送了一条“你有新的回忆”的通知,我顺势一划,要不怎么说大家都喜欢苹果产品呢,伴随着内置的 BGM ,一幅幅自己在全国各地的照片,一张张和路上朋友的合影,一幕幕回忆像潮水般涌上心头,一顿劈头盖脸的回忆杀让我文思如泉涌。虽然我原计划会在旅行结束之后把这一年的经历做成纪录片,

自从五月初辞职到现在,已有大半年没有上班的经历了,一直在准备人生规划中必做的一件事,在当初辞职时许下的愿景即将兑现的今天,感慨万千,终于要上路了,在转身回顾走过的脚印的同时,我觉得有必要停下来做个记号。 时间回到一年半前,那时正值毕业,金黄的阳光,碧绿的操场,悬挂着不同垂布的学士服,那是我对青春最后的记忆。我像一尾鱼群里的小鱼,随波逐流跟着浪潮的方向前进,即使有逆流而上的念头,但还是对抗不了滚滚向前的大势。 即使我和每个同龄人一样,都不想庸庸碌碌上班一辈子,也曾想过创业,也想过改变世界,但这些寝室里的豪言壮语都随着摆在眼前的房租、伙食费、买车买房的现实压力以及自身能力的问题成为了记忆里的幼稚证据,为了生存,

前面我写了一个系列共三篇的智能家居实践,用的是 Amazon Echo 实现语音控制,但是 Amazon Echo 用户群体太小而且这玩意并没有在中国上市,日常使用中也是各种水土不服,让很多朋友有心无力。然而,正如你早就看到的标题中说的那样,我们还有更容易获得的工具,那就是 Siri。 自从苹果推出了 HomeKit 以来,鉴于苹果庞大的用户量,不断开始有家电厂商开发出兼容 HomeKit 的家电。然而第一个吃螃蟹的人总是有代价的,这些电器的价格不是太贵就是中国买不到,所以使用

终于到了这一临门一脚了。前面了解了这么多基础知识,这一篇,我们终于可以完成这最后一步了 ———— 接入硬件。 理论上市面上所有能接入 Wifi 用手机控制的电器都能用 HomeAssistant 控制。 比如我的硬件列表有:Yeelight, 小米多功能网关, 米家智能插座, sonoff开关,还有 ESP8266 模拟 Wemo Switch,最后还有一个神器 BroadLink。 先来说说 Yeelight 怎么接入。 文档在这里,

这一篇我们要开始学习使用 HomeAssistant 了。在此之前,为了更方便地写代码,我们还需要做一些准备工作。 (一)开启 Samba 还记得上一节中我们使用的 FTP 软件吗?你可以在 /home/pi/hassbian-scripts 这个目录下找到一些已经预装好的脚本,如果没有,可以以 pi 的身份 clone 这个 repo : git clone

某天我像往常一样逛知乎,突然就看到了一篇文章,文章内容是“马克扎克伯格自己打造的智能家庭 AI — Javals”,我相信看过这篇文章或者知道这个报道的人肯定不少。我当时也没觉得我自己也能打造一个 AI 系统,因为小扎的一套完全从改装硬件电路到中央服务器都是自己实现,我没那么大本事,但我当时正好沉迷于效率软件 IFTTT、Workflow、Alfred,其中我发现 IFTTT 里面有很多 Applets 和硬件有关,这勾起了我的好奇心,我虽做不到小扎那样的工程,但能不能利用市面上现有的产品,打造一个类似的智能家居系统? 首先我觉得,

本文只用作技术交流,切莫干出格的事情,请使用者不忘初心。 事情的起因还是昨天虾神放出了这篇文章,外加上对 Pokemon 的强烈热爱,让我第一次有动力实现一次逆向。准确地说,只是第一次重签名。因为虾神把大部分事情都做完了,留给我们动手的只剩重签名这一步了。然而虽然仅仅只有一步,也让我这个逆向新人整整折腾了 5 个小时。不过收获嘛也不小,补了之前漏下的证书的那些事而且也入门一点逆向。 一. 重签名 .dylib 首先,我们 clone 好虾神的项目。你会看到这样的目录结构:

你还记得当初的梦想吗? 三天前,我突然这么问自己。缘于我去了一次学校,进行毕设答辩。 我突然才意识到,原来我还是个理论意义上的学生。九个月前的今天,我还在这里上学、下课、教室宿舍两点一线;如今,我竟然已经成了工作了九个月满脑子只有工作和代码的准毕业生了。 时间真是个可怕的东西。它让人麻木,磨平人的棱角,让人变成一模一样的工业品。仅仅是搬离学校这九个多月,我就已经变得这么世俗。我已经忘了当初在寝室许下的踏遍五大洲的誓言,我甚至发现和室友的微信对话也已经滑到了列表最下方。以前嘲笑工作了的人失去了年轻时的理想和抱负。现在看看自己,真是讽刺。 今早一睁眼,我发现手机上有一条未读消息,

最近工作陆续生产了一些方便开发的工具类,尽管最终没被收入使用,但不妨碍个人使用,故特此开一篇博文,也记录一些自己踩的坑。 UIGestureRecognizer+Block 简单来说,你可以这样使用 UIGestureRecognizer: [self.view addGestureRecognizer:[UITapGestureRecognizer gestureRecognizerWithActionBlock:^(id gestureRecognizer) { //... }]]; 不再需要繁琐地使用 selector 反射,也解决了代码分离的问题。 实现代码如下: static const int target_

已经被玩烂的题目,纯粹好玩,直接上代码吧。 定义树: class Tree { var key: Int var leftTree: Tree? var rightTree: Tree? init(key: Int) { self.key = key } } 非递归实现 思路:广度优先。从上往下,从左往右。