Hegwin.Me

溯洄从之,道阻且长。溯游从之,宛在水中央。

Ruby Conf China 2023 参会笔记 Day 1

Takeaways from Ruby Conf China 2023 Day 1

上周末(2023年8月19-20日),Ruby Conf China 在上海成功举办。这也算是 Covid-19 以来,第一次在线下举办Ruby Conf —— 大家等待了三年之久。非常奇妙的是,会场就是三年前为 Ruby Conf 2021 订下的会场(明天广场 JW 万豪);那次由于疫情问题,不得不改为线上会议。酒店方面还是比较厚道,三年后并没有在会场和餐食方面涨价。顺便一说,万豪轩的自助餐真的很不错。

我打算用两篇文章,简单记录下我在 Ruby Conf 上的学习心得。

Ruby-Conf-China-2023-Day-1.jpg

主题演讲

by Matz

历史:

Ruby 是一种为兴趣而生的语言。

产品(包括编程语言)的命名很重要,因为它反映了产品的本质。

Ruby 之所以流行起来,要归功于利益追求者(Benifit Seekers)和社区。

营销(Marketing)对于让人们了解一款软件有多好非常重要。

兼容性:

  • 社区在 Ruby 1.8 和 1.9 之间分裂了大约 5 年
  • 其他语言可能存在更长的分裂期
  • 性能提升足以鼓励用户升级

领导力与远见:通过实践使未来发生(例如,是否使用静态类型)

玩转 AST,打造自己的代码分析和代码重写工具

by 黄志敏

Ruby 源代码 → AST

  1. 分词: Ripper
  2. 解析: Parser / RubyParser
  3. 编译

利用 AST 的工具示例:

用例:

使用 Synvert 查询和更改 AST 节点的示例:

# 将 "email_and_active(email, true)" 转换为 "email: email, active: true"
helper_method :dynamic_finder_too_hash do |prefix|
  # ...
end
if_gem 'rails', ">= 3.0"

within_files Synvert::ALL_RUBY_FILES + Synvert::ALL_RAKE_FILES do
  # find_all_by_email_and_active(email, true) => where(email: email, active: true)
  find_node '.send[message=~/^find_all_by_/]' do
  hash_params = dynamic_finder_too_hash('find_all_by_')
  if hash_params
    replace :message, with: 'where'
    replace :arguments, with: hash_params
  end
end

Rails ActionCable 的性能压测与实战经验分享

by 李亚飞 (ShowMeBug)

问题:我们能支持多少在线用户?

ActionCable 组件: WebSocket, Channel, Connection

监测:

  • websocket: Jmeter, Artillery
  • server: atop, netstat, puma state, nginx log,isostat
  • Alternative: AnyCable - 提升了初始连接速率,但消化速率没有上升;适合于⼤量链接,但⽆需很强消化QPS的场景

性能: It handles 70 QPS with 4-Core and 8G Mem, namely 20k DAU

通常的瓶颈:

  • SSD: 3000 IOps
  • Middle-leveled DB: 20k TPS
  • Redis: 50k TPS
  • IO latency: 0.1 ms(write) - 1ms (local DB) - 10ms (Redis R/W)

Rails 应用安全与 rack - security

by 李玮

如何确保应用程序安全

  • 通过培训提高安全意识,避免网络钓鱼和社交工程
  • 通过攻击面(ASM)了解网络资产的安全性
  • 通过 BAS(漏洞和攻击模拟)持续评估有效性
  • 采纳建议

OWASP归纳的安全问题:

  • 2021 年的前三名: 访问控制破坏、加密失败、注入
  • 注入不再是最严重的问题(2017 年曾经是第一名),因为人们持续关注和修复
  • 新问题: SSRF(服务器端请求伪造)

Rails 强项

  • 防注入
  • 避免 XSS
  • 凭证/加密
  • 安全认证
  • 约定大于配置

Rails 弱项

  • 第三方 gem 的安全性
  • RESTful - 易于遍历数据并暴露数据库结构
  • 用完整的对象去 render view,存在不必要的数据

常用工具:

加固 Rails 应用程序

  • 浏览器端环境验证
  • 客户端-服务器双向验证
  • 动态混淆,防止请求伪造和窃听
  • 动态令牌
  • 应不干扰现有应用程序(例如,使用 Rack 中间件)

浅析领域驱动设计在极狐 (GitLab) 的技术实践

by 袁晓峰 (GitLab)

DDD的典型架构:

  1. Presentation
  2. Application
  3. Domain
  4. Infra

将 DDD(的教条)强加于 Rails 的影响:

  1. 与官方 Rails 不兼容,不易升级
  2. 代码质量差
  3. 学习曲线,造成人力资源浪费

在Rails中更实用的方法:

  1. 不区分Presentation和Application
  2. Contoller可直接访问Model
  3. Service作为领域模型
  4. 丰富的领域模型,而不是胖模型
    1. 使用 Concern
    2. 委托给 Plain Ruby Object

Conversational Al 赋能下一代互联网应用

by 王若愚 (Workstream)

背景介绍

  • 对话式人工智能重塑人机交互:从图形用户界面(GUI)到自然语言用户界面(LUI)
  • GPT 的瓶颈:幻觉(Hallucianation)、难以测试/质量保证、数据隐私

中型企业的落地方案

  • 从一个痛点或特定场景入手
  • 人工智能代理作为大脑 + 应用程序接口作为四肢
  • 聊天: 识别用户意图,利用提取的参数调用现有 API

挑战

  • 权限 - 用户可能会询问他无权访问的信息
  • 安全性 - 提示注入/攻击

    Prompt-hack.png

< Back