当 Tubi 遇到 Ruby
有人说 Tubi 作为 RubyConf China 金牌赞助商,明明用极具吸引力的 Elixir 后端工程师岗位和高品质的 Elixir Meetup,“拐走了”一批又一批 Rubyist 投身于 Elixir 开发中,却依然让人想在 Tubi 展台前多停留一会儿。
为什么工程师、校友甚至 Ruby 社区颇具影响力的人物都愿意来为 Tubi 站台?为什么选择小众技术语言 Elixir 构建后端服务,并长期支持 Elixir 中国社区的建设?这是一个什么样的职场环境,让 RubyConf 现场观众惊叹每年有两次 Outing,还有着“有灵魂”的工作文化?
本文将从两个方面与你分享,Tubi 与 Ruby 的故事:
- Rubyist 眼中的 Tubi
- 加入 Tubi 的 Rubyist 后来怎么样了
- Tubi 与 Ruby 的故事。
Rubyist 眼中的 Tubi
初印象:是一个专业稳定的科技公司
“我是在 RubyConf 2023 第一次知道 Tubi 这家公司的,Tubi 给我的整体印象是一个专业稳定的科技公司。最让我印象深刻的是 Tubi 展台上的小电视,相比其他参展商更吸引眼球,也和流媒体公司的定位十分契合。Tubi 还介绍了 Elixir 在产品上的应用,细节处透露着技术范儿和开源精神。”
—— Rubyist 张一
技术选型很有魄力
“疫情期间,没有几家公司会为了员工健康而支持完全远程办公的,Tubi 这样做了,我也是那个时候知道 Tubi 的。
后来进一步了解到 Tubi 的技术栈基于 Elixir 和 Scala,在 Java、Python、Go 流行的大环境下选择这么小众甚至名字都没有听说过的语言是真的很有魄力,之后我也会经常在 Ruby、Elixir 技术活动上看到 Tubi 的身影,不遗余力地推广函数式编程语言。
这次在 RubyConf 上还收到了 Tubi 版红宝书 - Tubi 的技术博客合集,很技术范儿,这也真正体现了 Tubi 工程师团队‘对运用先进技术改变人们生活这一美好愿望充满无限激情’吧。希望 Tubi 赞助的 Elixir Meetup 以后能来上海,自己可以作为志愿者出一份力。”
—— Rubyist 小白
Tubi 让我看到了自由
“在与 Tubi 团队成员交流中,我深深感受到了 Tubi 独特的工程师文化,那就是自由!自由!还是自由!
‘自由’在 Tubi 不仅仅是一个词,更是一种工作的哲学。这里的工程师不会仅仅为了实现某个功能而妥协,他们对整个产品都负有责任。在 Tubi,开发者不仅是编写代码的人,他们也是产品的参与者和建议者,每个人都有权利为产品提出更好的建议。这真的让人太激动了。
读了 Tubi 在 RubyConf China 上分享的 Tubi 团队文化和技术博客,我还惊喜地发现:
第一,Tubi 特别强调一个核心价值观 —— 信任。在许多公司担心员工在家工作可能会‘偷懒’的时代下,Tubi 对其团队成员有着这样的信任,支持远程和在家工作,也相信他们会尽职尽责。这种‘信任’文化在当前竞争激烈、内卷严重的环境中显得尤为宝贵。
第二,Tubi 不是通过倒排期或强制性的目标来推动团队,而是通过建立合理的工作流程,来确保产品的正常交付和优质的用户体验。这种工作方式背后的核心理念是一种契约精神,团队成员之间互相信任,共同为一个目标努力,这样不仅高效,还非常人性化。”
—— Rubyist 韩先生
加入 Tubi 的 Rubyist 后来怎么样了
据说,Tubi Elixir 工程师团队中有一半曾是 Rubyist,他们转变为 Elixir 炼金术士的过程是什么样的?在 Tubi 做 Elixir 工程师,是一种什么体验?一起听听他们的心声吧。
Rubyist 迁移到 Elixir 可能更有优势
“在最初接触 Elixir 时,我注意到 Elixir 有很多地方是受到了 Ruby 的启发,因为 Elixir 之父 José Valim 之前是 Ruby on Rails 的作者之一,这在一定程度上降低了我学习 Elixir 需要做的心理建设和学习成本。
Ruby 和 Rails 最让我欣赏的部分就是对开发者体验和开发效率的关注,而 Elixir 在这两个方面的表现也是相当出色的。Elixir 最让我欣喜的还是项目在实际应用中所表现出的卓越性能和稳定性。在我看来,这可能使最终让我的团队从 Ruby 切换至 Elixir 为主开发语言的最关键的因素。
Ruby on Rails 在‘用很少的代码实现很多的功能’这件事上树立了行业标杆,一直被业界认为是快速启动一个 Web 项目的最佳技术选择。Elixir 的 Phoenix 框架在很大程度上受到了 Rails 的启发,近几年也开拓了一些新的领域,例如一出现就广受关注的 Phoenix LiveView,以及随后出现的其它语言框架。相比 Rails,Phoenix 的确让人感到有一点上手难度,但在我看来,这一点难度的增加所带来的效率提升,绝对值得!
对于已经熟练 Ruby on Rails 的开发者来说,适应 Elixir 和 Phoenix 的过程是非常顺畅的,这比起从其他语言迁移到 Elixir 来说可能有更显著的优势。”
—— Tubi Elixir 高级工程师 Horvo
“刚开始使用 Elixir 时,我感觉两种技术语言的语法比较像,写起来都很舒服,只不过 Elixir 是函数式语言,刚开始写需要有一点风格的转换,但是不会有太大的不适应。当我逐步了解到 Elixir / Erlang 背后强大的 OTP 生态,不禁赞叹 Elixir 真的别有洞天啊!”
—— Tubi Elixir 工程师,Tristen
Elixir 和 Tubi 带给我属于工程师的双倍快乐
“我在读书期间,业余时间开始学习 Ruby 和 Elixir;毕业第一份工作就选择了 Tubi,也直接投身到了 Elixir 的开发上,这份确信至今未变。事实证明,很多之前没有接触过 Elixir 的同事们都能快速适应新的开发生态,而且在 Tubi 可以遇到一群和 Elixir 一样优雅的小伙伴啊。”
—— Tubi Elixir 工程师,Tristen
“在 Tubi 写任何语言都会是非常开心的,Elixir 本身又带给我很多属于工程师的快乐,这两者叠加在一起就是双倍的喜悦。对于喜欢一门语言的开发者来说,最幸运的就是刚好有一家很棒的公司正在用这门语言(并且你还有机会在那里工作)。我很庆幸能有在 Tubi 写 Elixir 的机会。
Tubi 有很多需要解决高并发、高复杂度的业务场景,这些比较有挑战性的项目让我在技术上收获了很多宝贵经验。另外,在应对这些复杂、高并发、实时性强的需求时,Elixir 总会给我更多的信心,我因此可以分出更多精力到架构设计和代码质量上。”
—— Tubi Elixir 高级工程师 Horvo
Tubi 与 Ruby 的故事
2019 年中旬,Tubi 正在紧锣密鼓地筹备第一场 Elixir Meetup,为了让更多中国开发者有机会了解 Elixir 这门小众但表现惊艳的技术语言,我们在 Tubi 工程师的帮助下,与 Ruby China 建立了联系。
当时负责 Tubi 中国团队招聘的 Doris 分享道:“Ruby 社群非常开放和包容。虽然我们招聘的是 Elixir 后端工程师,但我还是受邀加入了 Ruby China 的几个群组,有机会去介绍 Tubi 及工作机会,并分享与 Elixir Meetup 相关的活动信息。这次参加 RubyConf China,我见到了许多一直以来帮助 Tubi 的网友,激动万分。”
在本次 RubyConf China 中,Tubi 第一位 Ruby 开发者也亲临现场。虽然他已经离开 Tubi,但仍然全力以赴地为我们提供支持。
人们常说 Rubyist 是一群为爱发电的人,这一点不假。或许正因为 Tubi 同事们和 Rubyist 有着共同的技术热情,才让我们有幸相遇并携手共进。
关注 Tubi,创造更多可能性
Tubi 中国团队热招岗位持续更新中,欢迎点击查看。让我们在 Tubi,一起为了“让人人都能免费享受高品质的视频内容”而高效工作,也有品质的生活!
相关文章:
当 Tubi 遇到 Ruby
有人说 Tubi 作为 RubyConf China 金牌赞助商,明明用极具吸引力的 Elixir 后端工程师岗位和高品质的 Elixir Meetup,“拐走了”一批又一批 Rubyist 投身于 Elixir 开发中,却依然让人想在 Tubi 展台前多停留一会儿。 为什么工程师、校友甚至 …...

【C++从0到王者】第二十四站:多态的底层原理
文章目录 前言一、虚函数表二、一道经典的例题三、深度剖析多态的条件之一:为什么必须是父类的指针或引用四、深度剖析多态的条件之二:为什么是虚函数的重写/覆盖?五、虚函数表的一些总结六、关于Func3的验证七、动态绑定与静态绑定八、总结 …...
Java从入门到精通24==》数据库、SQL基本语句、DDL语句
Java从入门到精通24》数据库、SQL基本语句、DDL语句 2023.8.27 文章目录 <center>Java从入门到精通24》数据库、SQL基本语句、DDL语句一、什么是数据库二、数据库的优缺点1、使用数据库的优点:2、使用数据库的缺点: 三、MySQL基本语句四、DDL语句 …...

学习ts(十)装饰器
定义 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,访问符,属性或参数上,是一种在不改变原类和使用继承的情况下,动态的扩展对象功能。 装饰器使用expression形式,其中expression必须…...

如何在 Opera 中启用DNS over HTTPS
DNS over HTTPS(基于HTTPS的DNS)是一种更安全的浏览方式,但大多数 Web 浏览器默认情况下不启用它。了解如何在 Opera 浏览器中启用该功能。 您可能不知道这一点,但您的网络浏览器并不像您希望的那样私密或安全。您会看到ÿ…...

STM32 F103C8T6学习笔记13:IIC通信—AHT10温湿度传感器模块
今日学习一下这款AHT10 温湿度传感器模块,给我的OLED手环添加上测温湿度的功能。 文章提供源码、测试工程下载、测试效果图。 目录 AHT10温湿度传感器: 特性: 连接方式: 适用场所范围: 程序设计: 设…...

QT基础使用:组件和代码关联(信号和槽)
自动关联 ui文件在设计环境下,能看到的组件可以使用鼠标右键选择“转到槽”就是开始组件和动作关联。 在自动关联这个过程中软件自动动作的部分 需要对前面头文件进行保存,才能使得声明的函数能够使用。为了方便,自动关联时先对所有文件…...

TCP最大连接数问题总结
最大TCP连接数量限制有:可用端口号数量、文件描述符数量、线程、内存、CPU等。每个TCP连接都需要以下资源,如图所示: 1、可用端口号限制 Q:一台主机可以有多少端口号?端口号与TCP连接?是否能修改&#x…...

【Docker】云原生利用Docker确保环境安全、部署的安全性、安全问题的主要表现和新兴技术产生
前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 云原生利用Docker确保环境安全、部署的…...
explain各个字段代表的意思
id:联表查询是每个表的读取顺序,数字越大越先被读取。相同就需要通过table字段判断select_type:查询类型或者是其他操作类型(PRIMARY、UNION、UNION RESULT等)table:正在访问哪个表partitions:匹…...

【已解决】Windows10 pip安装报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x98
环境:win10, Python3.9 在Pycharm安装YoloV5的依赖包时出现报错:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x98 出现 ‘gbk’ codec can’t decode… 的报错一般是因为读取文件出现编码问题导致没法读取文件,因此可以在报错…...

goland 中的调试器 -- Evaluate
今天一个好朋友 找到我,问我关于goland中Evaluate 小计算器的使用方式,说实话,我在此之前也没用过这个东西,然后我就找一些相关文档,但是这类文档少的可怜,所以我就稍微研究一下,找找材料&#…...
你知道公司内部维基到底有哪些功能吗
维基指的是一种协作工作的平台,也就是开源的编辑系统。员工可以在企业维基里面进行存储、共享和协作之类的操作,将企业内部员工的知识共享聚集在一起。今天looklook将会详细讲讲公司内部维基具体到底有哪些功能,供大家参考。 公司内部维基的功…...

netdata监控服务器主机(包括Docker容器)
效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…...

Mybatis学习|第一个Mybatis程序
1.创建一个数据库以及一个用户表,并插入三条数据用来测试 2.创建一个空的maven项目 在pom.xml中导入本次测试用到的三个依赖,mysql驱动、mybatis依赖、以及单元测试junit依赖 将这个 空的maven项目当成一个父项目,再创建一个空的maven子项目用…...

计算机网络MTU和MSS的区别
在计算机网络中,MTU代表最大传输单元(Maximum Transmission Unit),而MSS代表最大分节大小(Maximum Segment Size)。 1.MTU(最大传输单元): MTU是指在网络通信中&#x…...

redis学习笔记 - 进阶部分
文章目录 redis单线程如何处理并发的客户端,以及为何单线程快?redis的发展历程:redis单线程和多线程的体现:redis3.x单线程时代但性能很快的主要原因:redis4.x开始引入多线程:redis6/redis7引入多线程IO&am…...

SE5 - BM1684 人工智能边缘开发板入门指南 -- 模型转换、交叉编译、yolov5、目标追踪
介绍 我们属于SoC模式,即我们在x86主机上基于tpu-nntc和libsophon完成模型的编译量化与程序的交叉编译,部署时将编译好的程序拷贝至SoC平台(1684开发板/SE微服务器/SM模组)中执行。 注:以下都是在Ubuntu20.04系统上操…...

基于Java+SpringBoot+vue前后端分离英语知识应用网站设计实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
vue使用vue-router报错
报错1. app.js:172 Uncaught TypeError: vue_router__WEBPACK_IMPORTED_MODULE_0__.default is not a constructor at eval (index.js:4:1) at ./src/router/index.js (app.js:108:1) at webpack_require (app.js:169:33) at fn (app.js:442:21) at eval (main.js:7:71) at ./…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...