🐟 Blog

Written by i@yujinyan.me.
Web, JVM, Android. Kotlin enthusiast.

The Mythical Man-Month

February 28, 2022
The Mythical Man-month gives several insights on software engineering and project management. Some content feels outdated, but many…

Kotlin 协程与 Retrofit

April 29, 2021
Retrofit 2.6.0 支持用 Kotlin suspend 函数定义接口。 本文介绍如何通过自定义 Retrofit Call Adapter 和 Converter 打造最舒适的协程使用体验。 Call Adapter…

初识 Kotlin Flow

April 23, 2021
从 Sequence 说起 Sequence 是 Kotlin 提供的 Lazy List 实现。比如下面使用 Sequence 实现的 Fibonacci 数列: 终端操作符(terminal operator) 我们在 Sequence builder…

Notes on RabbitMQ with Spring Boot

March 17, 2021
Introduction Suppose our application organizes asynchronous domain logic inside DomainEventListener ’s like the following code snippet…

Analysis of Jetpack DataStore

March 09, 2021
Introduction Recently a friend helped migrate Android's SharedPreferences to Tencent's MMKV for their app at work. He also compared how…

谈谈 Kotlin 协程的 Context 和 Scope

February 11, 2021
引子 开启 Kotlin 协程需要在 CoroutineScope 上调用 launch 或者 async 这些方法。这些定义在 CoroutineScope 上的扩展方法叫作 coroutine builder。 除了 suspend…

理解 Kotlin 的 suspend 函数

January 24, 2021
suspend 是回调(Callback) 理解 suspend 其实不需要纠结神奇的「挂起」是什么意思或者拘泥于线程是怎么切换的。实际上 suspend 的背后是大家非常熟悉的回调。 假设 postItem…

Domain Modeling Made Functional 读书笔记

June 25, 2020
本书以 F# 编程语言作为载体。F# 是 .net 平台上函数式风格的编程语言。作者对使用到的语言特性都有讲解。因此这本书作为函数式编程的入门读物似乎也非常不错。 领域驱动设计 As a developer, you may think that your job is to…

一种判断代码是否优雅的方式

March 10, 2020
我们在评价代码的时候会说这个代码「优雅」或者说「不优雅」,这里面包含了方方面面的东西。 《代码整洁之道》 、 《代码大全》 很多书都有详细的介绍。在 review…

God objects, Kotlin to the rescue

March 07, 2020
In our Laravel backend project, there is a User class, which is among one of the first classes created. Over the years, it has accumulated…

MacBook Pro 一周体验记

April 03, 2019
硬件 工业设计 不得不说 MBP 的一体化机身和金属材质带来的高档感很难在 Windows 阵营中找到。Dell 对标 MBP 的高端货 XPS 系列上次去实体店观察了一下有些令人失望,屏幕和 C…

📚 MOOCs Bookmark

July 09, 2018
Guide Teach Yourself Computer Science is a motivating and invaluable resource for self-taught programmers. Coursera, Udacity, edX courses…

为何 JS 的 map 中不能使用 String.prototype.trim?

June 02, 2018
假设有一个元素为字符串的数组 [' some ', ' strings '] ,我们需要清除字符串中前后空白字符,首先想到: 进一步优化,考虑将 map 中包裹的函数去掉,直接使用 String.prototype.trim。然而问题出现了: map…

JavaScript this 新解

May 19, 2018
本文尝试从一个新的视角解释 JavaScript 中 this 关键字的工作机制:我们假设箭头函数(arrow functions)是真正的函数,而普通的函数只是一种特殊的语法构造(language construct)。我认为这种解释可以使 this…

客户端自定义域名解析

May 12, 2018
在客户端接口调试的过程中,有时会希望切换不同的环境进行测试。客户端如果更改请求地址需要重新编译比较麻烦,可以尝试修改域名解析,将请求转发到不同的服务器。这一思路在服务端或者客户端都可以实现。 服务端方案 CoreDNS 是一款 Go 编写的 DNS…

对 PHP 的一些吐槽

March 17, 2018
最早开始写后台接口的时候,曾看到有观点认为包括 Laravel 在内的框架不适合写大型项目。随着使用框架一段时间有了一些体会,做一些总结。 总体而言,和 Python…

在 Laravel 中优雅地定义常量

December 16, 2017
在业务开发中有一些需要统一维护的字符串,比如 Redis 的键,接口错误码等。直接在代码中裸写字符串显然是非常糟糕的,因此比较理想的解决方案是将这些变量统一放在一个文件中,方便维护。 一般在 Laravel…

谈谈 flatMap

November 25, 2017
引例 在 Swift 中可以通过 flatMap 过滤掉 nil ⚠️ 更新 Swift 4.1 废弃了 flatMap 这种用法,改成了 compactMap ,见 Introduce Sequence.compactMap(…

CSS 居中小结

February 28, 2016
水平居中 水平居中行内元素(inline element) 在父级块级元素中使用 text-align: center 。 水平居中块级元素(block element) 在该元素上使用 margin: auto 前提:该元素定义了 width…
© 2022 yujinyan.me