plainify

你真的需要Apple TV吗?不如自制一个Android TV!

没有一个树莓派能逃离吃灰的命运。 去年我写了一篇《树莓派家用指北》,介绍了树莓派是如何作为家庭服务器改善我的生活的,指路链接 👇 https://mp.weixin.qq.com/s/JZR2gFnIFoYDG7Z9HwsS3A 今天我们的主角依旧是我的那个树莓派,只是以另一种形式在我的家里发光发热——电视盒子。 看到这可能有人会好奇,这个树莓派用作电视盒子后,原先的家庭服务器怎么办?事实上我之所以把这个树莓派做成电视盒子,第一个原因是我搬家了,需要重新升级规划下家里的软件系统,第二是我用 NAS 替代了原先的树莓派用作家庭服务器(有机会的话以后讲一下)。 所以为了不让这个“理财产品”就这么吃灰下去,我一直积极探索可能的用处,终于,我发现了一个最适合他的场景——Android TV。 为什么会想到 Android TV? 搬家之后,新屋子里有一个电视 + 办宽带送的中国移动的电视盒子,第一次打开它的时候,卡顿的系统、上古的 UI、繁杂的广告让我不禁感叹,这真的是 2022 年的东西吗? 心想那要不买一个 Apple TV 吧?可再看看价格,不免囊中羞涩,算了算了,还是留点老婆本吧。况且 Apple TV 这么好的盒子用在一个只有 1080P 的电视里属实是有些浪费了。 既然用不了苹果的电视服务,用安卓的总可以吧。 于是我又去搜索了一些国内的电视盒子,什么小米的、当贝的、荣耀的,横向比较了一下,不是性能孱弱(通常都是 2GB+32GB)就是广告遍地,而且还不能看海外电视。当然了,最关键的是还要多花一笔钱,想了想还是放弃了。 既然国内的安卓盒子不行,为什么不试试原生的 Android TV 呢?2022 年了,原生的 Android TV 应该有不少的发展了吧。 抱着试一试的心态,我打开了 Android 开发者的官网,发现 2022 年的 Android TV 无论是 UI 还是体验,都比以前有了长足进步,现在就差一个载体,而我刚好有这个最好的载体——树莓派。 行动起来 本文不是一个教学贴,因此不会手把手的记录整个流程,简单介绍一些我在自制这一过程中的关键点以及可能出现的问题。参考的帖子:https://konstakang.com/devices/rpi4/LineageOS18-ATV/ 准备工作 你需要准备的东西有: 一个树莓派 3B/4B,至少有 2GB RAM,建议 32GB+ 的 SD 卡(我的是 8GB RAM + 256GB ROM) 一根 mini HDMI 转 HDMI/DP/VGA 数据线(根据你家的电视接口定) 树莓派风扇(如果有最好,毕竟是 24 小时不关机的,散热还是有必要的) 我选择的是 konstakang 提供的 LineageOS 18....

准备开一个新系列

该图片由Free-Photos在Pixabay上发布 我从今年年初正式运营我的公众号到现在也有小半年了,说来也惭愧,一个运营了将近半年的公众号到现在连1000人也没有,虽然我在去年年底给自己定的目标就是今年公众号人数达到1000人,但是这个数字和其他的公众号对比多少还是显得寒碜,期间我也考虑过怎么吸引读者,但是实在也没想出什么有效的方法。近期也发了一些不温不火的文章,但总是没办法保持持续更新,现在更是能做到一周一更就很不错了。一方面是因为自己最近这段时间毕业季确实太忙了,另一方面也是因为自己技术确实不强,很多时候也不知道可以写什么。我之前想过写系列文章,也做了尝试👉《AI 绘画系列》,虽然阅读量没有多少,但毕竟是自己写的,觉得只要自己努力去做了,收获多少会有一些的。 于是我又心血来潮,想开(挖)一个新的系列(坑)了。我决定在公众号上发布Leetcode的题解(虽然我知道有很多人的博客里面都有)。我在今年年初立了一个flag,就是在Leetcode上刷满400题,前段时间因为要做毕业设计和写毕业论文耽搁了一阵,前天重新登录网站发现自己才做了200多道。 做题期间我也整理了一些题解,想着这些题解既然搁着也是搁着,倒不如拿出来放进公众号里,当然我更希望大家也可以把你们题解分享出来,说不定哪天有兴趣了,或者业务代码写的太累了,花个十来分钟做做算法题也未尝不可。 不知道是不是因为我的公众号没有文章留言功能,总觉得和读者之间的互动性几乎为0,越来越觉得自己的公众号变成了"自嗨号"。我起初做这个公众号的目的就是希望和大家一起交流进步,然而现在却事与愿违,所以在这篇文章末尾我会发起一个关于是否建读者群的投票,希望大家可以多多支持🙏

分享一些实用的免费在线网站

该图片由Coffee Bean在Pixabay上发布 受到公众号「曾少贤」的启发,自己也整理了一些我在生活中经常使用到的在线网站,涉及的领域有图片、设计、文档、编程、学习等方面,这里分享出来,希望可以对大家所有帮助。话不多说,我们开始吧 😄 免费图片库 Pixabay 地址: https://pixabay.com/zh/ 首当其冲的自然是 Pixabay 了,我几乎每篇文章的题图都是在这个网站发现的。这是一个免费的图片网站,图片质量高,数量多,种类繁杂,最最关键的是它免费。 在线抠图/换背景 地址: https://www.gaoding.com/koutu 有时候我们需要将图片的设置成透明的,虽然使用 PS 等工具可以实现,但是操作起来总是有些难度,无意中发现这个网站,只需画几笔,3 秒就能稿定透明背景。 在线图片压缩网站 地址: https://zhitu.isux.us/ 很多人都会推荐 TinyPNG,但是 TinyPNG 的限制太多了,使用起来很 XX,直到我发现了「智图」,可以选择图片格式和压缩品质。 在线文件转换网站 地址: https://www.aconvert.com/cn/ 我们经常会碰到转换文件的需求,很多人会在电脑上下载一个格式工厂之类的软件,然而一个网站就可以了。Aconvert.com 可以在线转换各类PDF,文档,电子书,图像,图标,视频,音频和压缩文件,非常方便。 微信公众号格式化工具 地址: http://blog.didispace.com/tools/online-markdown/ 公众号排版是一个很头疼的事情,尤其对我这样一个直男来说,排一次版的时间可能跟写一篇文章的时间差不多,好在我发现了这个工具,可以轻松的将 Markdown 文件转换成微信公众号可用的 HTML 格式。对于比较懒的公众号主来说是不可或缺的神器。 绿豆堂中文字体免费下载 地址: http://www.lvdoutang.com/zh/0/0/1/1.html 在开发过程中,我们可能会使用到多种字体,仅靠系统自带的一些字体无法满足我们的需求,这时候就需要寻找一些字体了,这个网站有很多好看的免费字体,足够日常使用了。 草料二维码 地址: https://cli.im/url 这个就不多说了,生成二维码用的。 二维码梦工厂 地址: http://qrdream.com/ 单说二维码肯定是不够的,现在的年轻人都追求二维码的美观,仅靠草料二维码内置的美化器是不够的,这里推荐一个「二维码梦工厂」,里面有很多非常好看的二维码模版可供选择。 在线 Logo 制作器 地址: https://www.designevo.com/ 对于没有学过设计的程序员来说,如何给自己的个人网站(博客)上添加一个好看的 Logo 是一件很困难的事情,然而有了这个网站后我们就可以自己作出一个好看的 Logo 了。我相信很多人都用过那些所谓的”免费“Logo 生成器,在花了很长时间制作好 Logo 准备下载的时候网站却提示你要付费,让你顿时有一种受到欺骗的感觉。好在这个网站在做好 Logo 后会给你几个选择,如果你想要高质量的 Logo,需要付费购买。如果你对 Logo 的质量要求不高,这个网站还是个很不错的选择。...

刚上大学?过来人给你提些建议

本文是我大四保研之后学校老师让我去给当时的新生做的分享的内容,偏口语化,现在过去也有将近一年时间了,有些学弟学妹给我发消息说很感谢当时的分享,如今正好又到了新生入学的时候,我也开启了新的征程,就当是过来人给的建议了。以下是当时的分享内容。 很高兴收到王老师的邀请来到这和学弟学妹做一个有关自己这几年大学经历的分享。首先我先自我介绍下,我叫XXX,来自15级软件工程。 不知不觉你们都已经在大学度过3个多月了,不知道你们现在对大学都有一个什么样的认识,我当时来的时候特别的迷茫,因为刚从高三那个紧绷的环境过来,宛如一匹脱缰的野马,自由但是没有方向,说实话我很羡慕你们在这个阶段可以有学长和学姐引导,我刚来的时候只有一个告诉我上大学只要不挂科就ok的学长,而且当时我还奉为人生信条。 今天我来不是跟你们说要你们好好学习之类的,因为那没什么用,自助者天助,我今天来是想把我从入学到现在所遇到的一些困扰来和你们分享,相信对你们应该会有所帮助。 第一,大学的目的是什么? 我问问你们,你们觉得大学的目的是什么?我以一个同龄人且是过来人的身份告诉你们,在我眼里,大学4年,如果你能明白自己就行想要怎么活,你的人生想怎么过,你最想要得到的是什么,就足够了。 有的人大学不学习只玩游戏,有的人大学不玩游戏只学习,有的人大学什么不做只恋爱,有的人大学就要找个白金男。 很正常,你可以说玩游戏是浪费生命怎么的,也可以觉得天天逃课的都是傻逼,也可以觉得去学生会做事的就是浪费时间。如果你就是喜欢玩游戏,并且认为自己能够为止奋斗一生那么就去做吧,其他人怎么评论又如何,难道只有拿奖学金是牛逼的? 如果你认为人生就应该平平淡淡娶妻生子 ,乖乖念书然后去找工作一步一步过有什么不好?比起那些会为玩游戏而抛弃一切的我更鄙视那些什么都想做什么都要做,结果机会给他了又开始说这个不会那个不会的人。找到那个最美的自己,然后为之不断奋斗,这是我在大学的最大体会。 第二,你对学校失望吗? 扪心自问下,你们来到这也有3个月了,你们对这个学校失望吗?我刚来的时候对这个学校真的是非常非常失望,论面积不如我的高中;论地理位置,夹在南京和扬州中间,尴尬;那图书馆,随便找个别人家的大学都比我们气派,就更别说学校的食堂、宿舍了。你问我失不失望,失望呀,可是我不能对我自己失望啊。一只站在树上的鸟儿,从来不会害怕树枝断裂,因为它相信的不是树枝,而是它自己的翅膀。与其每天担心未来,不如努力现在。自己努力做到最好,那么人与环境均为一流。 第三,我需要合群吗? 我需要合群吗?这个问题我在大一的时候反复的问我自己,我需要合群吗?那个时候的我为了合群,我积极参加了社团活动,去不断的认识新的人,这种状态我一直持续到了大二下,当然我并不是说参加活动,广泛交友是坏事,只是后来我在想,这是我想要的吗?人们往往把合群看作一种能力,却忽略了独处也是一种能力,并且在一定意义上是比合群更为重要的一种能力。低质量的社交不如高质量的独处。为何会有芸芸众生这个词,说到底就是因为群体的智商往往都是低下的。现在回头看看我独来独往的大三一年,真的觉得没必要为了随大流在不重要的人身上浪费时间。君子之交淡如水,用陪伴、时间和玩乐次数磨出来的朋友大多是酒肉朋友,配得上知音二字的朋友不会拖着你浪费时间。如果不是本身性格孤僻封闭,而是对生活有明确目标、计划和安排的话,不要因为旁人或集体打乱自己的节奏,想想是理想重要还是所谓的“合群”重要。朝夕相处共同生活不等于真正的朋友,真正的朋友就算远在天边,很久没有联系,他们也永远在那里。想要学会与别人相处,就要先学会和自己相处。 第四,为了不让我的大学荒废,我应该做什么? 其实这个问题你们去知乎上搜索是会有很多回答的,你们可以自己结束之后去搜搜,我来这并不是来教育你们的,更不是来教你如何成为一个优秀的大学生,因为我自认我并不优秀,我只想以一个同龄人以及过来人的经验告诉你们,大学期间,需要做些什么。 明确自己想要的是什么? 刚进大学,你们很多人都才从紧张繁重的高中学习跳出来,带着一些稚嫩的孩子气,那种初生牛犊的韧劲儿,无论对什么都充满着无限的好奇和憧憬,你们这个时候就像一张白纸一样,可以任意的去涂鸦出属于你自己的那抹斑斓,我认为大一就应该是一个不断尝试的时候,这个时期我建议你们尽可能多的尝试,不要有任何的顾忌与犹豫,敢于犯错,因为什么都才刚刚拉开序幕。我为什么说让你们多去试试呢,因为你们在尝试的时候是对自己的一个重新探索的过程,以前的你们,只有一个目标,那就是高考。但是现在正值青春年少,为何不多去尝试一些之前没有接触的新鲜事物,只有你积极的探索了之后你才知道你自己想要的是什么,而且越早行动,就越早知道自己的目标,就可以更好的去为了那个目标去奋斗了。 为了自己的追求,全力以赴 当然每个人想要的可能都不太一样,比如说我想在大学谈个恋爱,我想认识一帮好基友,我想成为一个更好的人,等等等等。想要的东西不分大小,不分主次,更重要的是你愿不愿意为了你想要的去全力以赴,这就是我想说的第二点。假如说,你喜欢一个女孩子,但是自己不敢去追求,那你只能眼看着她被别的男生追走,又或者你想认识一帮好基友,但是自己整天在宿舍打游戏,如果是这样的话,想要的再多又有什么用呢?重要的是,你愿不愿意为了你想要的全力以赴。也许你付出了不一定会有结果,但是你不付出,就一定没结果。 永远不要在学习上懈怠 我相信在座的很多人都听别人说过到了大学就轻松了,只要考试不挂科就可以了,但是真的是这样的吗?拿我自己举例吧,我大一大二两年就是以60分万岁为信条的,这样的后果就是我大一大二的成绩一般,大三一年为了保研花在争取加分项上的精力要比其他保研的人多很多。你们可以想象下我大三一年,我要忙学生会的工作,社联和本创都是我负责,还要学技术,做项目,参加比赛,写论文,复习考试,后期还要准备简历,准备复试,联系学校和导师。大三那一年我几乎没有早于凌晨一点半睡觉的。现在看来,我的努力都有了回报,但是回头看看,如果我大一和大二的时候不那么放纵自己,多花点时间在学习上,我的大三就可以稍微轻松点不是吗?所以如果在座的各位和我当时一样有60分万岁的想法,我劝你们趁早结束这种想法,因为出来混迟早是要还的,你今天欠下的东西,未来必然会以某种你不喜欢的形式出现。 结识一些志同道合的朋友 刚才我在合群的问题上提到了享受一个人的乐趣,但并不代表优秀的社交圈就没有用处。见贤思齐焉,见不贤而内自省也。一个好的交际圈真的很重要,我很庆幸我在大学期间认识了很多优秀的人。举个例子,我有一个学长叫XXX,保研浙大的,楼下的海报上还有他的名字,我大一的时候经常跟在他后面写代码的,关系还算不错。大二快结束的时候,他拜托我帮他打印一份文件给老师签字,因为那个时候他已经在东区了,我收到文件打开之后发现是他申请浙江大学夏令营的导师推荐信和他的个人简历,真的,我当时很震惊,我们学校的学生竟然可以申请浙江大学的研究生,而且他和我说他已经和浙大那边的教授联系好了对面也愿意接收了。我相信在座的各位每个人都跟我一样,心中都有一个名校梦,这件事情对我触动最大的地方就是他让我的名校梦死灰复燃了,那一瞬间我觉得我这辈子还是有机会去我想去的大学,也是从那时候开始,我才意识到接下来的一年我该做什么了。现在看来如果不是他让我帮的那个忙,我可能后来也不会有去南大的想法了。当然还有和我一起开发果核的那两个人,我很庆幸可以和他们一起把我们的想法付诸实践。 不要害怕展示自己 如果你对自己的实力表示自信,那就不要错过展示自己的机会。举个例子,今年7、8月是保研的夏令营期间,那段时间全国各个想保研的学生都会给名校投递简历,我也不例外。但是南大、复旦这样的名校的计算机类的专业基本上是不会在夏令营期间收我们这样学校的学生的,所以在我被刷了之后心里很不平衡,因为我自认我的能力并不比那些211/985的人差,于是我就在7月底,南大的夏令营已经结束之后,自己联系了导师并且私下去和导师面谈,也正是那次的面谈,导师决定给我一个机会参加南大9月的复试,后来复试通过我也就被录取了。试想一下,如果7月底我没有主动和老师联系然后去面谈,那我仍然会因为本科学校的原因被拒绝,然后再一次让我的名校梦化为泡影。 谈一场单纯并且完整的恋爱 大学里的爱情,相比高中更加成熟,相比工作以后更加单纯。你们的爱情可以不用担心每个月的房租、不用去管未来会是什么样子。通过大学这个平台,相识、相知、相爱,从第一次见面,第一次约会吃饭、第一次一起上自习、第一次一起翘课去看电影、为了爱情而疯狂,尽管很多人批判现在大学的恋情已经变了味,但我仍然相信,大部分情况下,大学生的爱情是澄澈而纯洁的。 在恋爱中,两个人相互交换彼此的思想,学会为对方考虑,学会担当和责任感,两个人之间的交流、争吵、矛盾、谅解,也是一个重新认识自己并让自己获得成长的过程。更何况,大家以后基本都是做IT的,工作之后就很难有机会接触异性了不是吗? 世界那么大,多出去看看 上大学的时候,你有大把大把的课外时间,还有着学生证这样一件神器,在很多旅游景点,可以享受半价的优惠。这样一件利器不用简直太可惜了,况且工作以后你需要考虑生活、家庭、工作,很难像大学那样有一次纯粹的旅游。 多出去看看世界,去自己喜欢的的地方,感受每个地方不同的历史和文化,不仅把它当作是旅游,同时也是提升自己见识的好机会。俗话说得好,“读万卷书,不如行万里路”,这个道理是没毛病的。 最后 最后,希望各位学弟学妹们在不影响自身学业的情况下,可以为了自己想做的事全力以赴,让自己的大学不留下遗憾。

利用 Python 破解 ZIP 或 RAR 文件密码

我们经常会从网络上下载一些带密码的压缩包,想要获取里面的内容,往往就要给提供商支付一些费用。想要白嫖其中的内容,常见的做法是百度搜索一些压缩包密码破解软件,但后果相信体验过的人都知道。本文将会利用 Python 破解压缩包的密码,这里以 ZIP/RAR 为例。 本文源码可在微信公众号「01 二进制」后台留言「破解压缩包」获得 破解原理 其实原理很简单,一句话概括就是「大力出奇迹」,Python 有两个压缩文件库:zipfile 和 rarfile,这两个库提供的解压缩方法 extractall() 可以指定密码,这样的话首先生成一个密码字典(手动或用程序),然后依次尝试其中的密码,如果能够正常解压缩则表示密码正确。 实验环境 本文采取的虚拟环境为 Pipenv,有关 Pipenv 的详细介绍可以参考我的这篇文章 👉《Python 管理哪家强?》 库 zipfile:Python 标准库,使用时直接导入即可 rarfile:Python 第三方库,使用时需要安装,API 文档(https://rarfile.readthedocs.io/en/latest/api.html) 利用 Pipenv 安装 rarfile pipenv install rarfile 最后,再将一个带有密码的压缩包放入实验环境中即可。 编码 知道原理后,编码就会非常简单了 准备密码本 「密码本」其实就是一个包含了所有可能密码的文件,用户可以手动录入,也可以用程序录入。文末还会有一个介绍。 读取压缩文件 # 根据文件扩展名,使用不同的库 if filename.endswith('.zip'): fp = zipfile.ZipFile(filename) elif filename.endswith('.rar'): fp = rarfile.RarFile(filename) 尝试解压 先尝试不用密码解压缩,如果成功则表示压缩文件没有密码 fp.extractall(desPath) fp.close() print('No password') return 暴力破解 try: # 读取密码本文件 fpPwd = open('pwd....

利用Python让你的命令行像坤坤一样会打篮球

该图片由F. Muhammad在Pixabay上发布 完整代码可在公众号:「01二进制」后台回复:「蔡xx篮球」获取 前言 承接上文,作为一个经常逛b站的肥宅,近期b站上除了流行"品如”素材的视频,更多的莫过于蔡xx打球视频的了,有模仿的,有对比的,有手绘的,更过分的是竟然有人在命令行输出了他的打球视频,地址在:https://www.bilibili.com/video/av47306085?from=search&seid=11282891256876390136,不过视频中的动画好像是用某个软件生成的txt文件,看到这我就在想既然都可以用txt输出了,为啥不能用python在命令行中输出呢?说到这我便开始搜索资料,然后制作了下面一段视频: 代码是我在网上查询资料后自己修改的,本着学习和分享的精神,今天我来分享下上面这段视频的制作过程。 原理 既然要开始做东西,首要的问题就是想好要怎么做,大家都知道视频是由一系列图片一帧一帧组成的,因此视频转字符动画最基本的便是图片转字符画。 在这里简单的说一下图片转字符画的原理:首先将图片转为灰度图,每个像素都只有亮度信息(用 0~255 表示)。然后我们构建一个有限字符集合,其中的每一个字符都与一段亮度范围对应,我们便可以根据此对应关系以及像素的亮度信息把每一个像素用对应的字符表示,这样字符画就形成了。 Tips:如果对"灰度图像"这个概念不太理解的可以查阅百度百科 计算一张图片的灰度图像的方法如下(来自百度百科): 所以我们要做的就只是让字符画在命令行里面动起来就可以了。 Tips:图片转字符画可以参考:https://www.shiyanlou.com/courses/370 准备 环境和工具: vscode Mac OS python 3.7 这次实验使用到的核心的库是opencv-python,关于opencv上篇文章已经简单介绍过了,这里不多阐述了,只要知道这是一个和计算机视觉有关的库就可以了。 Tips:这里分享一个我觉得还不错的opencv-python的中文文档:https://www.kancloud.cn/aollo/aolloopencv/269602 实验 实验开始前我们需要安装opencv-python的包: pip install opencv-python 读取视频 def genCharVideo(self, filepath): self.charVideo = [] # 用opencv读取视频 cap = cv2.VideoCapture(filepath) self.timeInterval = round(1 / cap.get(5), 3) nf = int(cap.get(7)) print('Generate char video, please wait...') for i in pyprind....

plainify

双十一我在写什么代码?我加入淘宝的第一次双十一

看到标题大家可能还会有些诧异,这不是才刚刚国庆吗,怎么都开始写双十一的文章了。的确,虽然国庆还没有过完,但今年淘宝的双十一活动已经开始了。 我的上一篇文章是在 9 月 12 日发布的,直至今日一直没有更新的主要原因就是这半个月全身心的投入到这次双十一项目的研发中了。这半个月一个字总结下来就是 「累」,不仅仅是身体上的累,更有心理上的累。 短短半个月的时间,几十个令人无语的需求,没完没了大大小小的会议以及根本写不完的代码在前半个月疯狂摧残着我,不知多少个夜晚回到家已是第二天,一觉醒来继续重复着昨日的行为,总是会让我怀疑在这里工作的意义。 不过好在 10 月 1 日 0 点,这次的活动平稳上线了。虽然还有很多功能之后才会陆续上线,但连续半个月的连轴转总算是有暂缓脚步的迹象了,我也终于可以趁着这个国庆假期简单分享一下我来淘宝的第一个双十一了。 双十一活动 2009 年 11 月 11 日,是淘宝的第一个双十一,自那时起,每年的 11 月 11 日变成淘宝的一个固定节日(当然现在各种平台都会凑一下双十一的热度)。不过那一年我还小,我第一次听说双十一是在大学的时候,那个时候对一些电子产品感兴趣,双十一会有很大的优惠力度,不过可能是我的购物习惯导致的,蹲点抢购我一般是不会参与的。但是第二天我总还是会关注一下公开披露的数据,比如交易峰值,QPS 这些,毕竟是专业所致。去年实习因为个人原因没参与到双十一就离职回学校了,今年 7 月正式加入淘宝后,我迎来了自己的第一个双十一。 我所在的部门今年的双十一活动名为 「双十一种草机」,目前这个活动已经上线了,手机淘宝扫描上方二维码即可体验。其需要解决的问题痛点是 「想参与双十一,但是又不知道买什么」 。看到这可能有的人就要说了,整这么多花里胡哨的干嘛,直接像 PDD 一样,百亿补贴直接减免不就行了吗? 额,对于这点,我只能说,我就是一个写代码的,领导说要做啥那就做啥。至于为什么不直接像 PDD 一样直接减免如下图所示 👇 功能开发 我负责的功能是种草机活动的干预模块,其实要做的事情并不是很复杂,在不同时间段运营人员会根据当前情况对种草推荐/结果做一些紧跟时事的干预,比如增加某些优质内容的曝光量,或者拉黑某个劣质明星及其相关内容,一些敏感词过滤等等,大致流程如下图所示。 运营在某一个干预后台上可以进行一些配置的填写,前端同学负责搭建这个后台的页面,服务端同学需要将运营填写的配置数据落库,然后在前台履约的时候拿出这些数据。乍一看,确实没什么难点,不就是一个简单的 CRUD 功能吗?难不成阿里的双十一就这么简单吗? 后台数据落库 为了使整个干预模块形成一个闭环,我们需要从 后台数据落库 和 前台数据履约 两个角度去考虑实现运营干预。 对后台数据落库而言,的确就是配置数据的 CRUD,但难点在于对配置 数据的抽象。运营的配置需求千变万化,究竟是以何种方案实现成为了一个难点。如果每一类配置都作为一张表,那未来这个数据库将会出现 “数据表爆炸” 的情况,而且配置与配置之间并不是独立的,是有可能存在某种关联关系的,因此数据表的设计必须能够做到针对此类需求的通用性、易扩展。 其实本来写到这里的时候我是准备了一张简化后的数据模型图,但考虑到数据安全的问题,这里就用文字简单说明了,下一部分的前台履约同样。 可以说明的是,对于干预配置,设计的核心理念是 「一切都是配置」。在设计中,我们将一份运营配置分为两类属性:基础属性和表单属性。基础属性很好理解,如 ID、名称、操作人员、投放人群、投放时间等这些每个配置都会考虑到的东西。表单属性即运营后台呈现出来的需要运营填写的奇奇怪怪的属性,例如拉黑配置中的黑名单词,指定搜索词的头像等。 对于运营配置的基本属性以 树形结构 存储数据,通过 ParentId 指定配置之间的父子关系,通过 Group 指定配置类别,再通过唯一主键明确一个配置。采用树形结构存储将会天然支持此类运营配置的业务需求,理解起来也会更加自然。...

唔,突然就年中大促了啊

唔,突然就年中大促了啊 5月26日晚8点,618第一波预售活动正式开始,虽然各家都在紧锣密鼓的准备这个年中大促,但说到底活动的玩法、套路营销手段都是市场部等业务方制定的,作为技术人,究竟在大促活动中承担一个什么样的角色?以及大促活动究竟能带来什么改变,确是值得我好好考虑下的。 大促状态下的业务与技术 对于电商业务,既然有大促活动,肯定就会有日常状态,那么大促和日常究竟有什么区别? 相较于日常零碎的需求,大促的需求会更成体系,理想状态下,日常的需求基本上是各个产品经理在自己的盘口里反复横跳。搜索类的产品日常情况下只会提搜索相关的需求,推荐类的产品只会提推荐相关的需求。一旦到了大促,就需要各个盘口相互合作,以内容业务为例,往往是供给、用增、消费、搜索、公私域等盘口的联动,这时日常可能需要2-3个人日的需求就会变成可能需要40-50人日的团队作战。 由于业务需求更成体系,对于技术来说,就需要让整个迭代流程更加合理,无论是方案设计还是人力分配,这就很考验技术PM的经验与能力了。几乎所有的大促需求的时间是倒排的(大促开启时间是确定的),开发时间是十分有限的,因此一开始就要做足准备,可能涉及的上下游通知清楚,模块的边界划分事先明确,临时方案与通用方案的抉择,这些都是和日常态的区别。 也正是因为这些区别的存在,对技术也有着和日常不一样的要求。 全局意识 刚才说了因为需求更成体系,所以技术设计方案的时候也要更加合理。而想让方案更加合理就需要技术能真正的理解整个活动的玩法是什么样的。甚至可以说,技术应该要做到比业务更加了解业务(毕竟写代码的是技术不是业务)。只有做到这一点,才能真的站在更高的维度去看整个需求,才能知道如何规划系统,如何对齐资源,如何梳理上下游依赖关系,哪里可能会有坑,风险会在哪。 更加高效 对于一个技术团队来说,一个很重要的指标是效率。如何提高整个团队的效率是每个领导者需要关注的问题。现阶段我也只是一个大头兵,如何提高团队效率暂时不是我的命题。但有一点是确定的,只有团队里每个人更加高效了,整个团队才会更加高效。因此,如何在技术开发中变得高效就是每个技术人应该探索的命题了。 工具 首先是工具的使用。这里的工具不单单是开发工具,也包含一些效率工具。对于人类社会来说,生产工具的进步标志着生产力水平的提升。生产力最终是通过生产工具在人的作用下转换为产品的。这是生产过程必不可少的一环。 落实到每个人头上,最直观的表现就是一个好的工具可以给你节约非常多的时间。你现在还会使用netbeans去开发Java吗? 在这次618大促的开发过程中,有几个工具极大的提高了我的工作效率。滴答清单的子任务、语雀的小记、mindnode的脑图等。开发工具就更多了,首当其冲的肯定是idea,排查问题的Arthas,以及一众集团内部的工具与平台。 熟练的基本技能 正所谓技多不压身,多一项技能,在关键时刻往往会救你一命。 不熟悉git命令,怎么快速解决冲突?不熟悉jstack命令,如何快速定位问题?arthas命令不会用,怎么抓包排查问题? 为什么会出现OOM?为什么机器的线程数飙升?为什么机器会被限流?频繁ygc和fgc会给整个系统带来什么后果?在准备面试背八股文的时候大家都烂熟于心,但只有真的在现实场景下遇到才会意识到这些平时记得八股文是真的有用。 在掌握了一些技能与工具之后,如何沉淀出排查问题的方法论就是一个值得深究的命题了。哪些问题可以用什么工具排查,可以用什么方案解决,这些就要靠平时的积累了。记得多请教周围的师兄。 时间的合理分配 这就要说到另一个需要好好探索的命题了。如果单位时间内能做的事情已经到上限了,如何让一段时间里做到更多的事情?也即如何实现全局的最优解? 对于这种情况,我们可以将一些计算机科学的理论落实到实际生活中。 我们通常不喜欢被打断做事的节奏,此时如果把人比作一个计算机,那就是一个单核的计算机,这时你要做的就是不要频繁的切换上下文。 同样的,如果你只能做到单线程,做什么改进才能提高效率?一个很好的参考就是NodeJS的异步I/O模型。 有了这个输入,不妨考虑一下怎么把消息队列的生产者/消费者模型运用到人际交往中。 自1945第一台计算机诞生以来,为了让计算机拥有更高的效率,每年有无数的人才前赴后继投入到计算机科学的发展中,在更快更强上,计算机是多少天才智慧的结晶,可谓是提高效率最好的参照物。 更加健壮 代码 虽然做科研的一直流传着“凡是能靠怼硬件拿到结果的,就别做程序优化”的言论,但到了工业界,还是需要考虑成本的。无论多复杂的系统,都是靠一行行代码实现的,因此如何让系统更加健壮、稳定,最原子化的代码健壮一定是必不可少的。为了让VSCode拥有最高的运行效率,其开发团队几乎没有使用什么开发框架。虽然在现实场景下,我们的业务代码可能并不需要这么高的效率,但是清晰的逻辑、边缘case的全覆盖仍是我们该考虑的问题。 将代码写得像诗一样优雅应该是每一个技术人追求的目标。 架构 代码写的优雅,执行的高效,下一步就应该就是如何让架构变得更加合理了。 虽然“没有什么是靠增加一个中间层解决不了的”,但增加了一个中间层,虽然减少了耦合,却也意外的引入了一个不稳定因素,尽可能减少无用的依赖,合理的选择中间件,减少系统潜在的风险,DDD似乎是一个比较好的选择。 但是「没有银弹」也告诉我们没有一种单纯的技术或管理上的进步,能够独立地承诺在10年内大幅度地提高软件的生产率、可靠性和简洁性。因此架构的抉择本质上是一种取舍的艺术。 监控/预警 不存在没有bug的系统,只有还没发现的bug。如何做好监控与预警,如何实现问题的溯源、现场复原、快速响应在大促中尤为重要。 如果涉及权益、资产,对账监控怎么做?面对灰产、盗刷,怎么快速报警?面对大促时的尖刺流量,技术如何快速响应?真的出现问题,是止血还是启动应急预案?这些都应该是在大促开始前就要考虑清楚的问题,只有这样才能临危不乱。 (当然最好就别出现危险情况,325警告⚠️) 前台体验 对于一个toC的业务,就算真的系统出问题了,也不应该让用户感知。 以抽奖这个场景为例,如果抽奖QPS过高,导致服务端限流了(或者其他的什么原因导致服务请求失败),是告诉用户「前方道路拥挤」合适还是「很遗憾,未中奖」合适?答案不言而喻。 这里说一些题外话,从2021年开始,仿佛刮来了一股用户体验的风,各个头部产品都开始卷体验了,虽然这对于消费者来说确实是一件好事,但也从侧面反映了一些问题。如果不是真的没有东西可以卷了,谁会没事做去卷用户体验?(不过看起来天猫还是没学到教训,这次的活动又是复杂的很……) 更加乐观 做大促,真的会让人抑郁。尤其是在如今这种大裁员的背景下,外面人心惶惶,内部歌舞升平,似乎互联网马上就要完蛋似的。可说到底,大家追求的不过是碎银几两,乐观面对总好过日日碎念。

大学生该不该接私活?

之前有说过要开一个新的系列的,那个系列最新的一篇已经是快一周前了,可能会有人奇怪我干嘛去了,为啥一直没有更新(也有可能是我想的太多)。其实我这周的主要就做了两件事,做毕设和复联4。不过这毕设不是我的毕设,而是我接的其他人的毕设,这也是我写这篇文章的原因。我想从我个人的经历看看我们大学生究竟该不该接私活(临时加需求真是太痛苦了)? 这是一个纠结的话题 其实这个话题特别的纠结,为啥呢?原因有二,其一是因为现在还是大学生,学业仍然是第一要素,如果把心思过多的放在这些和学习无关的事情上,对之后的升学可能会有影响。其二就是因为穷,尤其是作为一个大学萌新,从高中的牢笼解脱,女生有那么好看的衣服想穿,男生有那么多游戏装备想买,但是每个月生活费就那么点,你说着不着急? 但是急能怎么办?急就有钱了?肯定不会啊,所以也就有了校园兼职这一说。就我个人而言,我从大一开始就接触了一些兼职,我去过物流中心搬过快递一晚上100、做过家教一小时30、送过外卖一单5块,卖过电话卡(记不得一单多少了,但是那一天赚了600,现在大三软工的学弟只要是移动卡的多半是我当初帮他们办的),当然还有些临时的,零零散散的做了好多,但是单论价钱的话都没有接一个私活来的多。 从实例出发 举个我自己的例子,我之前接过一个私活,是一家材料厂,为了应付上面检查,要有一个出入库的管理软件(app+后台),让我两天内做完,最后那老板给了我3000,其实这玩意大家也都知道,无非就是增删改查,而且目的也就是为了应付检查,所以不需要考虑太多,能跑就行。我当时也就加了一晚上班就做出来了。而且难度不大,会安卓+随便一种后台就足以应付了,你说这钱赚的是不是很舒服? 但现实真的这么美好吗?我再举个例子,我大三的时候,手头正缺钱(因为当时准备保研发期刊是需要money的),一个认识的人找到我问我能不能做毕业设计,我当时看了下他的开题报告觉得没什么问题就接了,顺便包论文,东西在他中期答辩前就弄完给他了,当时还觉得这两千块钱赚的真舒服。结果后来那个人找到了我,说他老师觉得他完成的工作太简单了,任务量不够,要加些内容(都是些乱七八糟的想法),否则不给我尾款(先给了500定金的),那个时候论文我已经写了一半了,碍着那钱我心想忍忍就算了,结果后来论文又说不合格,得改,那大半个月真的是前前后后几乎啥事没做全去忙他那个傻X玩意了。 从经济学入手 有了上面两个例子,你觉得我们大学生要不要接私活呢?在回答之前我先说一个经济学的知识,叫做比较优势理论,是我之前看薛兆丰的经济学看到的,他的核心是:自己跟自己比,总有效率比较高、成本比较低的生产项目,专注这种生产项目然后跟别人进行交换,整个社会的财富就能够增加,而个人的财富也能够增加。假设盖茨家有块草坪,他自己打理需要2小时,请隔壁王大爷打理需要3小时,那你觉得盖茨是会自己打理草坪还是请王大爷打理呢?那肯定是请人打理了(除非他自己想体验生活),因为这两小时他都不知道可以赚多少钱了。 该不该接私活? 这么看来,你翘课去做外包,接私活好像也没什么不对,毕竟上一节课就要花23块钱。但真的是这样吗?对我们大学生来说财富二字难道可以狭义的理解为money吗?当然不是,你的财富除了你能掌握的金钱,还有就是你的精力和时间(我这几天没怎么更新公众号也是因为最近接了一个毕设)。我的好朋友🐔哥前两天也写了一篇关于接外包的文章:《怎么接外包?该不该接外包?几次踩坑后的思考》,他提到了收入分为两种形式:主动收入和被动收入。主动收入可以理解为,我给老板打工,老板给我发工资,我追着钱跑。被动收入可以理解为我花一些时间后,钱就会追着我跑,因此也就被形象的称为"睡后收入"。最简单的,我写完了这篇文章,开了赞赏,就去睡觉了,你早晨起来看到觉得写得还不错,给我赞赏了2块钱,等我起床发现自己余额多了两块,这就是"睡后收入"了。 所以作为一个即将毕业的且踩了些坑的大四老狗,我对大学生要不要接私活这个问题的看法是NO,除非自己真的是非常缺钱并且时间相对充裕的情况,否则不如好好培养自己"睡后收入”的能力。 其他赚钱的方式? 如果你觉得你的编程能力足够优秀,而且也不想浪费这个优势,我建议你可以试试去参加各类学科竞赛,中国最不缺的就是各种比赛,如果你觉得你足够优秀那么水几个比赛,拿几个奖金自然也是不在话下了,再加上有的学校老师会报销一些研究经费以及竞赛奖励(这些钱估摸着得有大几千,虽然也不多,但是对于一个普通的大学生来说也是一笔不小的财富)。 如果你想到了好玩的点子,做成app,万一火了,其实大学的学费都能供给了,大学里面很多有钱的学生,他们很多都是自己在大学之前写app赚钱的,现在时下流行,代码经验同样可以为日后生活积累。 当然如果想赚钱其实还有更好的办法,那就是好好学习,然后收割各种奖学金,比如国家奖学金、励志奖学金、学校的人民奖学金、一些企业的奖学金。我周围就有一个同学,年年奖学金拿到手软(拿到的钱都是以w为单位),好生羡慕😂。 一点建议 虽然上面说了那么多 ,但是你仍然有可能会手痒想接外包(毕竟贫穷使人接活),那么作为一个负责任的博主,我就结合自己的经历提点建议吧。 不接熟人的私活 不接没有详细需求的活 不接屁事多的甲方的活 不接没有现成解决方案的活 不接要写论文的毕设 会后台的前提下去学着做app 最后 身为未来码农的你在上学的时候还不找女朋友?难不成等着工作之后国家分配吗?

大模型让你焦虑了吗?

之所以会起这个标题,源自于前段时间笔者的亲身经历,上个月我利用ZhipuAI结合开发了一个阅读PDF的AI小工具,还没开始正式使用,突然发现KimiChat已经支持20万字的超长文本输入,意味着你可以直接塞入一整套知识库进去。再回头看看自己写的那个工具,才越发觉得所做的一些努力不值一提。 这不禁引发我的思考,移动互联网时代,个人开发者以极低的成本(一台电脑,一部手机)开发出独立作品的场景,在如今的大模型的时代变得不再现实。那个年代,代码稀少,因此程序员的薪资才水涨船高。可生成式AI的出现,让代码生成的成本变得更低,代码在这个时代变得越来越不值钱。 你问我焦虑不焦虑,那肯定是焦虑的,真的很焦虑。尤其在对比了国内外的现况后,变得愈发焦虑了。似乎海外一直在高歌猛进,Google、Meta、OpenAI等大公司军备竞赛,NVIDIA股票节节攀升,各种开源工具应接不暇。反观这里,仍然一直发布着各项评测结果遥遥领先,但实际效果一般的大模型,颇有一种被世界甩在身后的感觉。 笔者常年在互联网上划水,算是比较先接触AIGC和大模型的,期间也陆陆续续写过一些文章。从一年多的使用来看,大模型真的很强,强到帮我写代码,根据大纲编辑文字,给我提供各种思路和解决方案。但同时大模型也很弱,弱到我问他鲁迅和周树人是什么关系都会瞎说。这种矛盾带来的割裂感让我陷入了深思。技术,尤其是像生成式AI这样突破性的技术,始终带有双刃剑的特质。其一面能够无限放大人类的创造力,简化日常工作,提升效率;另一面则是误导信息、扩张偏见,让你无法分辨究竟什么是真,什么是假。因为大模型对于输出错误答案和输出正确答案同等自信,以至于在某种程度上反而增加了人类获取真实信息的成本。 大模型时代的开源 借着这个话题,探讨一下如今这个时代大模型开源是否还有意义。 首先,开源作为一种协作模式,是鼓励开发者共享知识和资源,这样可以加速技术的迭代和创新,同时也降低了参与门槛,使得更多的企业和个人能够参与到AI大模型的研发和应用中来,颇有一种众人拾柴火焰高的意思在里面。但是现在,我们发现各种性能卓越的大模型都是闭源产品,无论是GPT4,还是Gemma,都是大公司的产品。OpenAI在成立之初,是希望让AI服务于每个人,但是现在越来越多的人调侃他们变成了CloseAI。 闭源可以保护商业模式,聚集人才和算力资源,反观开源社区的很多成员都是个人开发者,没有足够的算力支持,所以观察GitHub可以发现一个规律,大公司不断发布自己最新最强的大模型,个人开发者不断的发布自己的各种调用大模型API的应用和工具。 也许未来开源社区会成为反哺这些大模型公司生态重要的一环。 大模型之于我们 这几天腾讯新闻有两篇文章值得看一看。分别是《朱啸虎讲了一个中国现实主义AIGC故事》和《月之暗面杨植麟复盘大模型创业这一年:向延绵而未知的雪山前进》 这两篇文章介绍了中国科技界对大模型的态度分裂成两股阵营,一方认为应该追求更大更强的AI能力,另一方认为应该将足够的AI能力投入可以快速变现的商业场景中。 其实,杨植麟和朱啸虎并不是对立的。在中国也可以做大模型,但是要基于两个真相。第一,阿里这类云计算厂家会砸钱,反正大模型买我的算力,甚至投资款都用算力支付,云计算规模上去还可以打价格战,一石多鸟,空手套白狼。第二,大模型作为基础设施,中国肯定要自主可控,不管好不好,肯定要有。 这些机会,属于杨植麟这样的,和杨立昆一起发过paper的天之骄子。而普通人做AI,多听听朱啸虎说的,不要挑战高大上的科研,一定要做应用,一定要想办法快赚钱,养活自己。 套用《一代宗师》的台词 —— 今天我们不比武功,比想法。 那么未来AI的走向会是什么样的呢? 悲观的预测,这轮AI是元宇宙,泡沫破裂,英伟达成为思科。又或者这轮美国的AI,成了中国的5G,的确遥遥领先,但是烧了那么多钱,却找不到爆款应用。中性的预测,这轮AI是互联网。前期技术曲线陡峭,后期变得平缓,中国能慢慢赶上来。再次印证,美国擅长底层技术,中国擅长应用落地。最乐观的预测,这轮AI是AGI,scaling law带来的强人工智能,是黑客帝国,是人类被全面超越和奴役的开始。 但是不管怎么样,我们都不应该焦虑,饭是一口一口吃的,路也是一步一步走的,我们注定不是会引领世界的一批人,因此让自己站在巨人的肩膀上才是我们要做的。历史课本上说人类进化的重要标志是学会使用工具,现如今大模型是进入信息时代以来,人类最伟大的工具,你能够直接调用人类千年以来积累的知识与技能,这些足以让你变得十分强大。