公司:流利说
Ansible 和 Cockpit 管理 Android 服务器
流利说 Android 部门管理着多台服务器支撑 日常 APK 打包和一些公共基础服务。
所有设备和服务统一采用 Ansible 管理部署,cockpit 作为日常监控,极大的简化了运维工作量。下文将描述 Ansible 配置过程,以 cockpit 和 gitlab-runner 为例,落地服务。
Delta Lake 在流利说数据接入中的架构和实践
为了消灭数据孤岛,企业往往会把各个组织的数据都接入到数据湖以提供统一的查询或分析。本文将介绍流利说当前数据接入的整个过程,其间遇到的挑战,以及 delta 在数据接入中产生的价值。
后端篇: 流利说 iOS App 支持 StoreKit 2
StoreKit 2 相对 StoreKit 1 从实际支付链路到代码设计都更加健壮,在 iOS 16 发布后,我们决定更新支持 StoreKit 2。
流利说基于 TensorFlow 的自适应系统实践
自适应学习是现在教育科技领域谈得比较多的一个概念,它的核心问题可以用一句话概括,即通过个性化的学习路径规划,提高学生的学习效率。为什么需要自适应学习?在传统的教学过程中,每个学生的学习路径是一致的,由于学生个人基础和学习能力的差异性,这种千人一面的做法对大部分学生来说其实比较低效。由此我们可以很自然地想到:如果我们能够根据学生的能力,去匹配合适的教学内容,就应该可以提高他们的学习效率。而这正是自适应系统希望达成的目标。
iOS 篇: 流利说 iOS App 支持 Apple In-App Purchase StoreKit 2
关于流利说 iOS App 支持 Apple In-App Purchase StoreKit 2 系列共两篇,分为 iOS 和后端服务篇。本文适用于 iOS 开发者,大致阅读时长 5 - 6 分钟。
Canvas从入门到实战
Canvas保姆级教程。
全面适配 Android12
2021 年 10 月 5 日 Google 发布 Android12 操作系统,安全性和隐私性大幅提升,本文主要介绍流利说各APP适配Android12操作系统的改动范围和实际情况。
少儿在线教育游戏化设计宝典
在线少儿教育的游戏化,已成为提升小朋友满意度和调动学习积极性的常用手段。本期我们请到少儿的交互设计师与大家聊聊, 流利说®️少儿英语如何打造出一个丰富有趣的游戏化课堂体验。
LTV在流利说业务的实践
LTV(Lifetime Value)是指用户整个生命周期所产生的价值。这一概念从上世纪80年代起就有提及,在市场营销领域发挥着重要作用。学术研究时对LTV的定义略有不同,有些定义是剔除成本项后的净利润,有些是指未来所有利润贴现后的净现值[1]。流利说在实际应用中会结合CAC(Customer Acquisition Cost,单个用户获取成本),计算出ROI(Return on Investment,投资回报率)进行分析,后续LTV是指单个用户贡献的所有收入,未剔除成本。
实时数仓架构在流利说的实践
流利说将实时数仓中 Flink 的版本往前推进了一大步,并随即带动了其他生态组件的引入或升级。
流利说APM性能平台大盘工程实践
本文主要介绍了流利说APM大盘搭建的工程实践以及演进过程中遇到的各类坑点。
近实时指标管理在流利说的实践
流利说离线数仓开发维护中,数仓工程师扮演了维护数仓公共层明细与维表的角色,更上层直接面向需求方的数据由分析师进行计算。不同于离线指标计算,实时指标在计算逻辑之外的部分更加复杂,这对分析师等不擅长开发而又希望进行灵活数据分析的角色很不友好。基于此背景,数仓开发了一套近实时指标管理系统。
分布式时序数据库在流利说的应用
随着越来越多的监控指标(机器,容器,服务网格,网关,业务等)产生,使用单个巨大的 Prometheus 来存储和提供查询无论从可用性还是性能都不能满足我们的要求,所以我们对此进行了类别维度的垂直切分,通过多个较小的 Prometheus 节点存储相应的数据。这种方式虽然解决了上面提到的部分问题,但是对于查询来说不够友好,查询具体指标时去找实例和类别指标之间的映射关系,降低了研发效率和幸福感。为了解决这个问题,我们把所有实例的指标通过 RemoteWrite 方式同步到云厂商提供的服务里作为统一操作界面。运行一段时间我们发现无论存储成本还是查询响应时间都不够理想,于是我们开始了分布式时序数据库自建的历程。
网格系统在屏幕设计中的应用
作为设计师,相信大家对「网格系统」这个词一定不陌生。它存在与于大大小小的设计项目中,是排列内容时的结构指南,为版面带来秩序和一致性,使得设计师可以高效地排布内容。
现代意义上的编排设计是在 20 世纪 20 至 30 年代早期设计理论和原则基础上建立起来的。第二次世界大战之后,瑞士设计师根据网格打造了全面性的设计方法论,将它与思想融会贯通,网格成为普及性语言的钥匙,平面设计中的网格系统得到发展和应用。在传统的平面设计中,文本、图片这些变量是可知的,通常不会改变。设计者依据确定的内容、可以预估的阅读距离( 阅读距离影响字体大小、列宽、行高)进行设计,他们可以确定他们设计的网格系统可以满足内容的特定布局需求,尽可能地利用版面中的资源来达到秩序和经济的最大可能性。
然而一本书不会突然成为一份报纸,当前接触最多的界面设计是基于二维屏幕的。数字产品通常是围绕动态数据构建的,设计师在设计时可能从未看到向用户展示的内容,真正像用户展示的内容隐藏在设计的框架里。并且为了保障好的浏览体验需要根据用户使用设备的不同进行不同尺寸的适配。这时应用传统的网格系统往往会感到不相容。所以对于 UI 设计师来说,了解网格变化和如何应用网格通常是必要的。
预训练语言模型在自动作文评分中的应用
本文介绍了AES领域的相关方法和问题,并针对预训练模型在AES领域的问题进行分析和改进,在流利说内部和外部数据数据上取得了较好的结果,也为长文本编码提供了一种有效的编码方式。
流利说告警排班系统的实践
对于一个警报而言,它可能是程序相关的警报, 也可能是程序运行环境的警报,对于程序来说,它的告警就应该发送给这个程序(app)相关的负责人,而对于运行环境来说,它的告警就应该发送给相关运维团队(team)。
每一个 app 或者 team 会对应有多个人员,假设这么多人都要一起同时接收告警,就会显得很不合理,而我们想要的是一段时间内某一个人接收相关 app 的告警,这样的排班机制会减少运维成本、沟通成本以提升效率。