Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Strategic standardization

Strategic standardization

This keynote takes a look at standardization and the effects it may have when applied in a chain of multiple layers. It then connects to how Rails uses conventions and the new Ruby LSP add-on API, which is trying to standardize editor integrations.

Vinicius Stock

April 08, 2025
Tweet

More Decks by Vinicius Stock

Other Decks in Programming

Transcript

  1. Checkout Maçã fuji……………….…….$0.50 Maçã gala……………….……$0.60 Banana.………….……………$0.80 Alface (2)…………..….…….$1.50 ——————————————-————- $2.90

    Arroz…….……………….……$1.30 Feijão.…………….……………$1.50 Cenoura……………..….…….$0.70 ——————————————-————- $3.50 Repolho…….…………………$0.70 Tomate.…………….…………$0.90 Massa………………..….…….$1.20 Suco de laranja.…….…….$1.10 Suco de maçã.……….…….$1.10 ——————————————-————- $3.90 Uva (2).…….…………………$1.50 Leite (3)..………….…………$2.30 Batata………………..….…….$1.50 ——————————————-————- $5.30
  2. Controle 03/04/1952 Maçã gala (70) Maçã fuji (43) Banana (18)

    Alface (41) … Chega o momento de auditar a loja Checkout
  3. Código de barras # db/schema.rb create_table "checkouts" do |t| end

    create_table "checkout_entries" do |t| t.bigint "product_id" t.bigint "checkout_id" t.integer "quantity" end
  4. Análise de dados recentes e históricos Código de barras Cash

    tracking Alertas de inventário Pedido de estoque (semi-)automatizado Self checkout
  5. E fi ciência através de sistemas Código de barras Os

    sistemas foram criados baseados na padronização do código de barras
  6. Código de barras Se cada loja usasse um identi fi

    cador diferente, parte dos esforços seriam gastos em compatibilidade
  7. O container A partir de 1967, a carga e descarga

    passou por transformações signi fi cativas Padronização do container Sources: https://en.wikipedia.org/wiki/Breakbulk_cargo https://en.wikipedia.org/wiki/Containerization
  8. O container Redução de custos entre 80-90% Sources: https://en.wikipedia.org/wiki/Breakbulk_cargo https://en.wikipedia.org/wiki/Containerization

    Diminuiu o tempo que navios fi cam nos portos Minimizou o tamanho das equipes Otimizou o armazenamento
  9. O container A tecnologia necessária pra carga e descarga já

    existia A padronização das dimensões do container
  10. O valor não está no código de barras ou no

    container (no padrão escolhido) mas sim no ato de padronizar
  11. bin src con fi g test log products payments app

    db_models route_actions jobs models controllers structure.json
  12. { "components": { "products": { "models": "src/products/models", "controllers": "src/products/controllers" },

    "payments": { "models": "src/payments/db_models", "controllers": "src/payments/db_actions", "jobs": "src/payments/jobs" } } } Padronização no Ruby
  13. Padronização no Ruby bin app con fi g db lib

    test log models controllers jobs
  14. Padronização no Ruby # db/schema.rb # . . . create_table

    "users" do |t| t.string "name" end class User; end user.name user.name = "Vini"
  15. class UsersController < ApplicationController before_action :set_user, only: [:show] def index

    @users = User.where( . . . ) end def show; end private def set_user @user = User.find(params[:id]) end end
  16. Teclado QWERTY Sources: Image: iPhone screenshot https://en.wikipedia.org/wiki/QWERTY Koichi Yasuoka* and

    Motoko Yasuoka†, “On the Prehistory of QWERTY” - ZINBUN 2009/2010 No.42 *Institute for Research in Humanities, Kyoto University †Faculty of Foreign Studies, Kyoto University of Foreign Studies
  17. Quebrando padrões Maior qualidade ou benefícios nem sempre são su

    fi cientes pra quebrar um padrão existente
  18. Ruby LSP Queríamos features especí fi cas pra gems mas

    colocar tudo na Ruby LSP não daria certo Como permitir que gems adicionem funcionalidade?
  19. Ruby LSP add-ons API para outras gems contribuir funcionalidade para

    a Ruby LSP Projetos também podem ter add-ons privados Carregados automaticamente https://shopify.github.io/ruby-lsp/add-ons.html
  20. Ruby LSP add-ons Não é necessário criar um plugin pro

    editor Não é necessário implementar um language server Não é necessário implementar ferramentas de static analysis https://shopify.github.io/ruby-lsp/add-ons.html
  21. Fundação do language server Request/response cycle Incoming and outgoing message

    queues Worker pool Basic LSP interface Indexing + static analysis tooling Implementação das funcionalidades Integrações API
  22. Ruby LSP RuboCop Standard Reek Brakeman Rake Fabrication Action Policy

    Rspec Rails Rubyfmt Tapioca Shoulda Model context protocol (MCP)
  23. Comandos do terminal # Rake TEST="test/foo_test.rb" bundle exec rake test

    # Minitest / Test Unit bundle exec ruby -Itest test/foo_test.rb # RSpec bundle exec rspec spec/foo_spec.rb
  24. Comandos do terminal # A ação é sempre a mesma.

    # Não interessa qual é o framework ruby test test/foo_test.rb
  25. Instalação do Ruby # rbenv ~/.rbenv/versions # asdf ~/.asdf/installs/ruby #

    ruby-install / chruby ~/.rubies # RubyInstaller C:\Ruby33-x64
  26. Instalação de gems # Padrão ~/.gem/ruby/3.3.0 # chruby ~/.gem/ruby/3.3.2 #

    rvm ~/.rvm/gems/ruby-3.3.2@gemset_name # Bundler BUNDLE_PATH
  27. Executáveis de gems # Adiciona ao PATH. Executáveis são #

    invocados diretamente ~/.gem/ruby/3.3.0/bin # Utiliza shims. As shims são invocadas # pra ativar o ambiente do Ruby e então # invocam os executáveis definidos pelas # gems ~/.rbenv/shims/bin/ruby-lsp
  28. Descobrir onde estão instaladas as dependências de um projeto hoje

    requer: Integração com o version manager do usuário Integração com o Bundler Ou que a ferramenta só seja executada no shell
  29. Instalação de Ruby e gems # Ruby ~/.rubies/ruby-3.3.2 # Gems

    ~/…/project_path/vendor/bundle # Executáveis ruby run rubocop = > ~/…/project_path/vendor/bundle/bin/rubocop
  30. Padronização não é uniformidade total A existência do código de

    barras, não diminui a variedade de lojas A existência do container, não diminui a variedade de produtos transportados
  31. Padronizar as ferramentas de desenvolvimento não vai nos impedir de

    criar mais opções Integrações mais robustas Mais funcionalidades