今年的总结比去年更丰富一些,在各方面都有了长足的进步。
工作
明年就是在公司的第五年了。在过去的一年中,除了按部就班的完成各项需求外,还主动做了些有价值的事情:
- 继续推进项目 Swift 化。在我一整年的代码中,没有产生任何新的 OC 文件,并且用 Swift 重构了大量旧的 OC 代码。如果遇到需要 OC 调用新代码的地方,全部使用 Swift 编写桥接文件。虽然这样会累一点,但是项目未来的收益会很大。
- 搭建打包环境。分离了开发到测试的打包环节,也支持测试包的简单管理,属于流程上的优化。现在需要打包给测试时,只需要将代码推到指定的 git 分支即可,测试那边一键打包正式 / 测试环境的安装包,并自动分类保存安装包、生成二维码,解放双手、节约时间。
我们团队的技术环境非常自由,允许使用新技术来提高开发效率,这点我非常喜欢。每过一年回头看,代码都有新的蜕变,这样不断迭代,在面对未来的需求时就能够灵活应对。
学习
在工作之余,我主要把精力放在了现有技术栈之外的学习上,把“T”型的一横拉的更长。
相比去年,代码量翻了2倍多,共1385次提交。从 contributions 中就可以看出,今年是疯狂 coding 的一年。按时间排序,一共产出了以下几个项目。
Weibo 是一个简单的 Laravel Web 项目。主要用来学习 Laravel 框架及其相关开发环境:
- PHP - PHP: Hypertext Preprocessor
- Laravel - The PHP Framework For Web Artisans
- Homestead - GitHub - laravel/homestead
- VirtualBox - Oracle VM VirtualBox
- Vagrant - Vagrant by HashiCorp
- Composer - Composer
- Heroku - Cloud Application Platform | Heroku
- Bootstrap - Bootstrap · The most popular HTML, CSS, and JS library in the world
- npm - npm | build amazing things
- Yarn - Yarn
- Sass - Sass: Syntactically Awesome Style Sheets
- MySQL - MySQL
- PostgreSQL - PostgreSQL: The world's most advanced open source database
- Gravatar - Gravatar - Globally Recognized Avatars
- Carbon - GitHub - briannesbitt/Carbon: A simple PHP API extension for DateTime.
BBS
BBS 是一个相对复杂的 Laravel 项目。有完整的用户系统、注册模块、帖子系统等常用的功能,以及一个后台管理系统。
相比 Weibo,这个项目有更复杂的 UI 界面、逻辑交互与数据管理,采用了前后端分离的开发架构。通过这个项目,我进一步学习了 Web 开发中角色权限、数据监控、计划队列任务、自定义 Artisan / Trait / 中间件、安全防御、线上部署以及后台管理等技术。
当然,也学习了很多强大的框架:
- Yarn - Yarn
- MySQL - MySQL
- Simditor - Simditor
- Composer - Composer
- Vagrant - Vagrant by HashiCorp
- Font Awesome - Font Awesome
- JWT - JSON Web Tokens - jwt.io
- npm - npm | build amazing things
- VirtualBox - Oracle VM VirtualBox
- PHP - PHP: Hypertext Preprocessor
- Socialite Providers - Socialite Providers
- Homestead - GitHub - laravel/homestead
- whoops! - whoops! - php errors for cool kids
- Heroku - Cloud Application Platform | Heroku
- Laravel - The PHP Framework For Web Artisans
- Sass - Sass: Syntactically Awesome Style Sheets
- Gravatar - Gravatar - Globally Recognized Avatars
- Intervention Image - Intervention Image - Introduction
- Captcha - GitHub - Gregwar/Captcha: PHP Captcha library
- Laravel Active Archives - Laravel Active Archives - Hieu Le
- Guzzle - Guzzle, PHP HTTP client — Guzzle Documentation
- Carbon - Carbon - A simple PHP API extension for DateTime
- Purifier - GitHub - mewebstudio/Purifier: HTMLPurifier for Laravel 5
- pinyin - GitHub - overtrue/pinyin: 基于词库的中文转拼音优质解决方案
- AWS - AWS 云服务-专业的大数据和云计算服务以及云解决方案提供商
- Fractal - Fractal - Output complex, flexible, AJAX/RESTful data structures
- laravel-ide-helper - GitHub - barryvdh/laravel-ide-helper: Laravel IDE Helper
- Doctrine - Database Abstraction Layer - Doctrine: PHP Open Source Project
- PostgreSQL - PostgreSQL: The world's most advanced open source database
- Symfony - Symfony, High Performance PHP Framework for Web Development
- Bootstrap - Bootstrap · The most popular HTML, CSS, and JS library in the world
- easy-sms - GitHub - overtrue/easy-sms: 一款满足你的多种发送需求的短信发送组件
- api - GitHub - dingo/api: A RESTful API package for the Laravel and Lumen frameworks
- administrator - GitHub - summerblue/administrator: a fork from Frozennode/Administrator
- Predis - GitHub - nrk/predis: Flexible and feature-complete Redis client for PHP and HHVM
- jwt-auth - GitHub - tymondesigns/jwt-auth: 🔐 JSON Web Token Authentication for Laravel & Lumen
- sudo-su - GitHub - viacreative/sudo-su: Laravel package to easily login as other users during development
- laravel-query-logger - GitHub - overtrue/laravel-query-logger: A dev tool to log all queries for laravel application
- dingo-serializer-switch - GitHub - liyu001989/dingo-serializer-switch: A middleware to switch fractal serializers in dingo
- laravel-permission - A package to add roles and permissions to Laravel - Freek Van der Herten's blog on PHP, Laravel and JavaScript
- jpush-api-php-client - GitHub - jpush/jpush-api-php-client: JPush's officially supported PHP client library for accessing JPush APIs. 极光推送官方支持的 PHP 版本服务器端 SDK
一个 Flutter App
今年是 Flutter 技术井喷的一年。Google 将 Flutter 和 Dart 语言推进了一大步,开发者们积极相应,产生了许多优秀的 App、框架、技术文章。
我也紧跟技术潮流,在去年入门了 Flutter 之后,今年直接用 Flutter 写了一个完整的 App。这个 App 是商业化的,就不过多描述了。在开发的过程中免不了面对各式各样的坑,还好都一一解决了。为了实现 App 的功能,还开发了一个 Flutter 的 SNS 插件,算是一个额外小收获。
总的来说,目前为止 Flutter 并没有 Google “吹”得那么神,从性能、交互、原生的还原程度、社区等各方面都是如此,开发效率和配套工具也还可以做得更好。但是从跨平台开发的角度来说,横向比较之下,Flutter 还是最好的工具,没有之一。
一个 PHP 服务端
为了支持 Flutter App,我用 PHP 和之前学习的 Laravel 技术做了 App 的服务端。同时也选购了云服务器、部署服务、注册域名、完成备案、申请了 App 上架相关的资质等等,这些工作虽然也有很多的学问,但不涉及太多编程技术,就不细说了。
SwiftUI-Tutorials
在 WWDC 2019 上,Apple 推出了一个全新的现代化的 UI 界面编码框架 SwiftUI
以及响应式编程框架 Combine
。我非常赞叹于它们结合后给开发效率带来的提升,我认为这就是未来构建 Apple 系 App 的方向。所以在官方发布了相关英文教程后,我第一时间进行翻译,产生了这个项目 SwiftUI-Tutorials 。
与此同时,我也创建了一个“SwiftUI 技术”微信群,如果你也在使用 Swift,或者在学习 SwiftUI,也可能遇到了棘手的开发问题,欢迎加我好友,我会拉你进群,扩充学习队伍,一起解决实际问题。
某个神秘 App
一个年轻女性都会非常喜爱的神秘 App,已上架,嘿嘿。
WLM3U
在开发神秘 App 的过程中诞生了 WLM3U 。它是一个用 Swift 实现的 M3U 工具。主要是用来下载 M3U 格式的视频文件,同时提供了计算切片文件大小、视频切片合成、本地播放等辅助功能。
《Swift 少儿编程》
今年我开设了一个少儿编程线上培训,主要面向小学、初中阶段的孩子,作为他们的编程启蒙课程。开课之初并没有找到合适的教材,于是我决定从零开始自己编写。经过总结概念、编写样例、埋设问题、画配图、设计作业等等,逐渐产生了这本《Swift 少儿编程》。随着后续课程的推进,这本书也会不断追加内容,期待完成的那一天。
在这个过程中,我学会了如何使用 gitbook 等电子书编写工具,以及一些专业的写作方式。
SwiftUI-Calculator
SwiftUI-Calculator 是一个用 SwiftUI 编写的计算器 Demo。
SwiftUI-PokeMaster
SwiftUI-Calculator 是一个用 SwiftUI 编写的完整 App。它包含了 App 中常见的样式、交互、数据操作、网络请求等功能。
今年读的书籍和文档
-
《The Swift Programming Language (Swift 5.1)》 - Apple
Swift 编程语言的官方文档。从 Swift 2.2 开始,每次有新版本发布,我都会从头看一遍,每次阅读都会有新的收获。
-
《Dart documentation》 - Google
为了学习 Flutter 而阅读了 Dart 语言的官方文档。主要目的是为了熟悉基本用法和语言特性,但是如果不经常写的话,也许不久就会忘光了。
-
《Laravel documentation》 - Taylor Otwell
Laravel 的官方文档。不熟悉 PHP 的话阅读起来还是有点麻烦的,好在示例比较多,而且都是针对实际开发遇到的问题所设计的解决方案,所以有很多最佳实践,跟着做就对了,总体还是不错的。
-
《Flutter Documentation》 - Google
为了开发 App 而学习了 Flutter 的官方文档。这份文档的质量不是很好,读完后还需要自行去找一些示例才能更好的理解框架的用法,但是只是入门的话还是可以的。
-
《SwiftUI 和 Combine 编程》 - 王巍
喵神的付费书籍。在 SwiftUI 刚公布之后没多久就编写完成的一本相对系统的教程,论速度应该是国内第一。相比官方文档,这本书从实际开发角度出发,包含了一些更“接地气”的开发技巧,整体难度偏低,属于入门书籍。
-
《SwiftUI Views Quick Start》 - Mark Moeykens
Big Mountain Studio 的 SwiftUI 系列中的第一本,全书黑金配色十分炫酷。书里列举了很多常见需求的最佳写法,代码十分优雅,以后遇到类似的场景直接粘贴就好了。
总的来说,今年印象最深的是独立完成了一个跨平台 App 的前后端开发,体验了一把全栈工程师的感觉。这次经历不仅给我的编码能力带来了全面的提升,更是让我站在一个更高的角度去审视整个 App 的诞生过程。从产生一个 idea,进行市场调研、竞品分析;到产品设计、视觉交互;然后技术选型、接口设计、编写文档;最后进行前端开发、后台开发,全程负责。在这个过程中,我对创造一个 App 这件事有了更深刻的认识和总结,可以算是职业生涯中的一次小质变。
吐槽一下,当时开发的工作是交叉进行的,所以我经常会写一会 Dart,再去写一会 PHP,然后写一会 Swift,再写一点 Java,最后又回去写 Dart ... 频繁切换思路让我十分痛苦,经常写着写着就不知道在干嘛了,要么就是串到另外一个语言去了,整个过程就是这种感觉——
娱乐
旅行
今年太忙了,只在春天的时候去了趟日本看樱花。
满开的樱花
公园里的旗帜
日常
路边井盖的设计
像某部电影的画面
人们的祈福
电影
挑几个值得纪念的:
流浪地球 - 郭帆
国产硬科幻电影,世界观、特效、音乐是加分项,演员、剪辑、故事逻辑略减分。电影片尾音乐《开启新征程》特别好评,已被我收藏,配合地球从书页文字间穿梭的动画,画龙点睛。
我的打分:8.0
“道路千万条,安全第一条。行车不规范,亲人两行泪。”
好莱坞往事 - 昆汀·塔伦蒂诺
导演昆汀的圆梦之作。小李子是落魄的演员,布拉德·皮特是潇洒的牛仔,我觉得布拉德·皮特在剧中帅过了小李子两个档位。两个影帝共同饰演导演理想中的自己,昆汀:“牛逼!”。
我的打分:8.5
“刚才是我看到过最好的演技。”
波西米亚狂想曲 - 布莱恩·辛厄
讲述传奇摇滚乐队皇后以及主唱弗雷迪·莫库里的光辉经历,结尾的 Live 非常赞。
我的打分:8.0
“We are the champions - my friends
And we'll keep on fighting
Till the end
We are the champions
We are the champions
No time for losers
'Cause we are the champions of the World“
复仇者联盟4:终局之战 - 安东尼·罗素, 乔·罗素
因为第三部把期待值抬的太高了,这一部没有突破,剧情又落回俗套,所以我觉得不好看。梗倒是出了不少。
我的打分:7.0
“我要向你复仇!”
“我真不认识你啊”
千与千寻 - 宫崎骏
这部作品我从小到大不知看了多少遍了,今年终于在国内上映,我给了满分,这才是电影该有的样子。
宫崎骏今年79岁了,还在坚持创作新的作品。铃木敏夫曾透漏他会支持宫崎骏到最后,但不知道这部作品还能不能完成,这话外之音...不敢想,太心疼了。
我的打分:10.0
“名字一旦被夺走,就再也找不到回家的路了。”
双子杀手 - 李安
李安导演尝试电影新技术的作品,该片以每秒120高帧率、4K、3D的罕见高规格拍摄,影院画面十分细腻流畅,非其他任何动作片能比。虽然有威尔·史密斯贡献演技,但全片也仅有这些看点了。
我的打分:7.5
“我是最厉害的”
...
“然而你并不是最厉害的”
天气之子 - 新海诚
新海诚继《你的名字》之后时隔3年的新作,依然是唯美到极致的画面和音乐,主题曲《愛にできることはまだあるかい》与插曲《グランドエスケープ》被我收藏,但故事没有太多新意。我觉得新海诚最好看的电影是《言叶之庭》。
我的打分:8.5
“现在开始天晴了!”
利刃出鞘
精致的本格推理电影。现在这种类型的电影真的不多了,也没有出现过非常优秀的剧本,且看且珍惜。
我的打分:8.0
“你吃屎,你吃,你吃,你也吃。”
游戏
也挑几个值得纪念的:
尖塔奇兵 - Mega Crit Games
Roguelike + 卡牌。有鲜明的职业特色和丰富的构筑选择,属于玩起来就停不下的好游戏,目前是我 steam 游玩时间最长的。
我的打分:8.5
隐形守护者 - New One Studio
一款真人影像(图片)游戏,玩家扮演的主角要机智地扮演好“谍中谍”,面对一个个艰难的选择则是玩家要考虑的问题。
这款游戏让我真切的领悟到新中国的建立是多么的艰难,它诠释了什么是好的爱国主义教育,比单薄的文字记载更让人感同身受。
我的打分:8.0
只狼 影逝二度 - FromSoftware
制作人宫崎英高“魂”系列的最新作品,拿到了“2019年度最佳游戏”的殊荣。
它完美的继承了“魂”类游戏的优点,同时又做到了变革(跳)。游戏本身的美术和音乐水准也非常高,网上有海量的文章去考究游戏中的场景、道具、剧情、世界观等等,随着对游戏了解的深入,你会越发觉得这是一款不可多得的艺术品。
当然,这游戏的难度也流着宫崎老贼的血,它是我游戏生涯中玩过最难的动作游戏,但同时也非常爽快。唯一不足的是流程略短,如果后续能开发出高质量的 DLC,便可挑战《血源》的地位,有望成为 PS4 时代最好的游戏。
我的打分:9.5
八方旅人 - Square Enix x Acquire
Square Enix 推出的传统 JRPG。游戏的美术风格被命名为“HD-2D”,可以看到 3D 建模的城市与像素风格的人物、怪物结合在一起,加上动态光影、景深等现代画面表现技术,使得风格非常新奇讨好。
游戏叙事也相当出色,八个主角刻画的十分生动。每个角色之间看似没有太多交集,但随着游戏进度的不断推进,你将逐渐揭开故事的真相,发现每个人命运之间背后的联系。
我的打分:8.5
赤痕:夜之仪式 - ArtPlay
恶魔城之父-五十岚孝司的重启之作,游戏中包含恶魔城系列中经典的倒城、古堡、特殊技能、真空刃等设计元素,同时又为 Metroidvania Game 树立了新标杆。
老玩家在刚进城听到 BGM 响起来的一瞬间一定会赞叹:“这味儿对了”。
我的打分:8.5
火焰纹章 风花雪月 - Intelligent Systems
《火焰纹章》系列在 Switch 上的首款正统续作,简化的战斗系统加上了养成要素,相当于前作《火焰纹章 if》的升级版。各方面中规中矩,缺点是后期重复度略高,玩法单一。
我的打分:8.0
死亡搁浅 - Kojima Productions
小岛秀夫在离开 Konami 之后的首部作品,是近几年最吊人胃口的游戏。有索尼在背后撑腰,游戏阵容堪称华丽。技术监制请到了业界知名技术大拿、PS4 的首席架构师 Mark Cerny。演员则是请到了诺曼·瑞杜斯(《行尸走肉》弩哥)、麦德斯·米科尔森(《汉尼拔》)、吉尔莫·德尔·托罗(《环太平洋》导演)、玛格丽特·库里(《死亡笔记》、《好莱坞往事》)等好莱坞大咖。
小岛秀夫在游戏中依然采用大量他拿手的电影化叙事手法,营造出了克苏鲁风格的科幻氛围。音乐也是顶尖水平,空灵的旋律配合冰岛空旷的大地和石峰,给人极致放空的享受。游戏原声《BB's Theme》、《Bones》、《Don't Be So Serious》、《I'll Keep Coming》被我收藏。其中《I'll Keep Coming》是我今年收听次数最多的歌曲。
我的打分:9.0
宝可梦 剑 - Game Freak
Switch 平台首部宝可梦正统续作,从系列第一代《口袋妖怪:黄》玩到现在,以后也会继续玩下去。
我的打分:8.0
生活
今年又搬家了。这是来北京以后第六次搬家,原因是房东嫌房租太低,不想租了。这个房子40多平,房东跟中介要每月12000的纯收益,中介自然也很难办,事情就黄了。新租的房子和现在的一样,14平的卧室,租金从每月4000涨到了每月5000,我心里苦啊。在北京,有房和没房的生活难度差太多了。
5月份参加了机核的北京核聚变,得到了《只狼》总监的合影和签名海报!感谢机核。
宫崎英高“背后的男人” - 北尾泰大
在核聚变上的收获
10月参加了《天气之子》的首映典礼,近距离接触到了新海诚导演。
就是这个有点猥琐的大叔
我在茫茫人海中,猜猜在哪
今年,养的两只猫又大了一岁,都很健康,只是越来越胖了,放几张猫咪们今年的照片:
买了新窝,高兴!
扭...
构图不错
帅气的特写,被我拿去做头像了
总结
今年在技术学习上投入了非常多的时间和精力,每天下班学习到第二天,周末除了做事也在学习,时间排满,感觉身体都被掏空,太累了。
从来没在12点前睡过
留给娱乐的时间大幅减少,今年好多想看的电影都没看,想玩的游戏也没玩,遗憾。有时实在太忙了,脑子就会冒出“只要我不睡觉,明天就不会到来”、“一天能有240小时就好了...可能也不够”之类奇怪的想法。
明年我有更多要学习的东西和要做的事,所以一定会更忙。但如果有机会,还是希望可以抽时间去一次冰岛,《权力的游戏》和《死亡搁浅》都是在冰岛取景,孙燕姿有支 MV 也是在冰岛拍摄,太美了,我很喜欢。
2019 的感受 “慌慌张张,匆匆忙忙”
2020 希望能 “不卑不亢,不慌不忙”