LuaRocksO gerenciador de pacotespara módulos LuaHisham Muhammadh@hisham.hmhttp://www.luarocks.org
Plano●   Rápida Introdução    ●   Lua? LuaRocks?●   LuaRocks    ●   Conhecendo a ferramenta●   Evolução do projeto    ●   ...
Lua●   Linguagem “script” criada na PUC-Rio    ●   Dinâmica, extensível, bytecode+VM...●   Com algumas características pec...
A “cara” de Luafunction process(filename, fn, ...)   local f = io.open(filename)   local rets = {}   for line in f:lines()...
O que é LuaRocks●   Gerenciador de pacotes...    ●   similar a dpkg (apt-get), RPM, etc.    ●   similar a RubyGems, Python...
Por que LuaRocks?            (e RubyGems, Python Eggs, npm, CPAN, etc...)    Linguagens “script” costumam ter gerenciadore...
LuaRocks●   Tarefas de um gerenciador de módulos    ●   Instalar        –   ...e certificar-se que Lua encontrará o módulo...
LuaRocks e seu “ecossistema” Ferramentas de linha de comando Formato de regras para empacotamento Formato de arquivo para ...
FerramentasA parte que o usuário de um módulo vê:~$ wget http://lua.org/ftp/lua-5.1.4.tar.gz~$ tar zxvpf lua-5.1.4.tar.gz~...
Comandos do luarocks●   build                               ●   remove    para compilar                           para des...
Como criar um pacote    Um pacote em LuaRocks é um “rock”Ele é criado a partir de um arquivo “rockspec”
Rocks●   Um rock contém módulos e o rockspec    ●   Pode conter os binários ou os fontes●   Arquivo com nome no formato   ...
Rockspecs●   Um rockspec um arquivo texto    com regras que indicam:    ●   De onde baixar os fontes    ●   Quais as suas ...
A “cara” de um rockspecpackage = "LPeg"version = "0.9-1"source = {   url = "http://www.inf.puc-rio.br/~roberto/lpeg/lpeg-0...
Usando Lua como formato de dados●   Permite bastante expressividade, declarar    variáveis auxiliares, etc.●   O rockspec ...
Disponibilizando os rocks        Publicando online repositórios,         chamados de “rocks servers”       Podem ser geren...
Rocks server●   Um conjunto de pacotes .rock    disponíveis online é um “rocks server”    ●   Um conjunto de rocks instala...
Comandos do luarocks-admin●   make-manifest    para preparar um diretório para ser um repositório●   add    para adicionar...
Repositório público do LuaRocks.org●   A maioria dos desenvolvedores nunca lida com    a gerência de um rocks server●   Mó...
Atualmente●   LuaRocks está na versão 2.0.6●   Temos 157 projetos no repositório público    (573 rocks disponibilizados)  ...
Período de desenvolvimento●   0.1: agosto 2007                                 ●   1.0: setembro 2008●   0.2: outubro 2007...
Gênese●   Surgiu no contexto do Projeto Kepler    http://www.keplerproject.org    ●   Projeto criado pela Fábrica Digital ...
Fase 0.x: “release early, release often”●   0.1: agosto 2007                                 ●   Não havia uma cultura bem...
Fase 1.x: estabilizando●   1.0: setembro 2008               ●   Objetivos do design inicial atingidos    ●   1.0.1: março ...
Fase 2.x: redesign e continuidade●   1.0: setembro 2008               ●   Redesign das partes problemáticas    ●   1.0.1: ...
O futuro●   O feedback dos usuários aponta melhorias para o    formato rockspec    ●   mas quebrar compatibilidade é sempr...
Algumas lições aprendidas●   Compreender o contexto da comunidade onde    o projeto se insere    ●   Mesmo (e principalmen...
Programar em comunidade●   É preciso criar condições para que as pessoas possam    ajudar o projeto    ●   Documentação   ...
Obrigado!●   Perguntas?●   Contato:    http://luarocks.org/      Lista: https://lists.sourceforge.net/lists/listinfo/luaro...
Upcoming SlideShare
Loading in …5
×

LuaRocks - palestra Hack'n'Rio 2011

227 views
156 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
227
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

LuaRocks - palestra Hack'n'Rio 2011

  1. 1. LuaRocksO gerenciador de pacotespara módulos LuaHisham Muhammadh@hisham.hmhttp://www.luarocks.org
  2. 2. Plano● Rápida Introdução ● Lua? LuaRocks?● LuaRocks ● Conhecendo a ferramenta● Evolução do projeto ● Passeio “histórico” por esses 5 anos de LuaRocks ● Experiências sobre a evolução de um projeto de software livre
  3. 3. Lua● Linguagem “script” criada na PUC-Rio ● Dinâmica, extensível, bytecode+VM...● Com algumas características peculiares ● Minimalismo → tamanho e desempenho ● Projetada como linguagem de extensão para embutir em outros programas● Muito usada na indústria, especialmente jogos ● Adobe Photoshop Lightroom, Apache, nmap, Wireshark, VLC... ● Angry Birds, Company of Heroes, Civ 5, Garrys Mod, Crysis, Star Wars Battlefront, World of Warcraft...
  4. 4. A “cara” de Luafunction process(filename, fn, ...) local f = io.open(filename) local rets = {} for line in f:lines() do rets[#rets+1] = { fn(line, …) } end f:close() return retsendmatches = process("file.txt", string.find, "foo")for i, match in ipairs(matches) do print(i, table.concat(match), ", ")end
  5. 5. O que é LuaRocks● Gerenciador de pacotes... ● similar a dpkg (apt-get), RPM, etc. ● similar a RubyGems, Python Eggs, npm, CPAN, etc.● ...para módulos Lua ● módulos = bibliotecas para estender a linguagem
  6. 6. Por que LuaRocks? (e RubyGems, Python Eggs, npm, CPAN, etc...) Linguagens “script” costumam ter gerenciadores de módulos próprios por dois motivos:● muitos módulos ● CPAN: 23.866 pacotes ● Ubuntu: ~37.000 pacotes● portabilidade
  7. 7. LuaRocks● Tarefas de um gerenciador de módulos ● Instalar – ...e certificar-se que Lua encontrará o módulo ● Remover – ...e certificar-se que as coisas não explodam ● Verificar dependências – ...ao instalar e ao remover ● Compilar – ...porque módulos Lua podem ser escritos em Lua ou em C (ou qualquer outra linguagem, mas tipicamente C)
  8. 8. LuaRocks e seu “ecossistema” Ferramentas de linha de comando Formato de regras para empacotamento Formato de arquivo para os pacotes Servidor de módulos empacotados
  9. 9. FerramentasA parte que o usuário de um módulo vê:~$ wget http://lua.org/ftp/lua-5.1.4.tar.gz~$ tar zxvpf lua-5.1.4.tar.gz~$ cd lua-5.1.4; make linux; sudo make install; cd ..~$ wget http://luarocks.org/releases/luarocks-2.0.6.tar.gz~$ tar zxvpf luarocks-2.0.6.tar.gz~$ cd luarocks-2.0.6; ./configure; sudo make install; cd ..~$ sudo luarocks install luasocket~$ luaLua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio> require "socket"
  10. 10. Comandos do luarocks● build ● remove para compilar para desinstalar● install ● pack para usar binários para gerar um pacote● download ● path para só baixar para configurar o ambiente● list ● unpack para listar os pacotes instalados para quem quer desempacotar e mexer no conteúdo● show para mostrar informações de um ● make pacote instalado para testar, no desenvolvimento ● help sempre importante
  11. 11. Como criar um pacote Um pacote em LuaRocks é um “rock”Ele é criado a partir de um arquivo “rockspec”
  12. 12. Rocks● Um rock contém módulos e o rockspec ● Pode conter os binários ou os fontes● Arquivo com nome no formato pacote-versao-revisao.tipo.rock: ● Exemplos: luafilesystem-1.5.0-2.src.rock, lpeg-0.10-2.linux-x86.rock, lxsh-0.8.6-1.all.rock● Na verdade é um arquivo .zip, com conteúdo padronizado: ● Arquivos rockspec e rock_manifest na raiz ● Subdiretórios lua/, lib/, bin/...
  13. 13. Rockspecs● Um rockspec um arquivo texto com regras que indicam: ● De onde baixar os fontes ● Quais as suas dependências ● Como compilar ● Como instalar● Na verdade é um arquivo Lua ● Um dos talentos de Lua é servir como linguagem de descrição de dados
  14. 14. A “cara” de um rockspecpackage = "LPeg"version = "0.9-1"source = { url = "http://www.inf.puc-rio.br/~roberto/lpeg/lpeg-0.9.tar.gz", md5 = "84a4f5fb4b87b90bb1b7284ec6bb69bc"}description = { summary = "Parsing Expression Grammars For Lua", detailed = [[LPeg is a new pattern-matching library for Lua...]], homepage = "http://www.inf.puc-rio.br/~roberto/lpeg.html", license = "MIT/X11"}dependencies = { "lua >= 5.1"}build = { type = "builtin", modules = { lpeg = "lpeg.c", re = "re.lua" }, copy_directories = { "tests" }}
  15. 15. Usando Lua como formato de dados● Permite bastante expressividade, declarar variáveis auxiliares, etc.● O rockspec é carregado em um ambiente especial, sem acesso aos módulos padrão de Lua ● Você não consegue chamar io.open, os.execute e afins em um rockspec ● O pior que você poderia fazer é um while true do end e congelar a ferramenta de linha de comando
  16. 16. Disponibilizando os rocks Publicando online repositórios, chamados de “rocks servers” Podem ser gerenciados usando aferramenta de linha de comando luarocks-admin
  17. 17. Rocks server● Um conjunto de pacotes .rock disponíveis online é um “rocks server” ● Um conjunto de rocks instalados localmente é chamado de “rocks tree”● Na verdade, é só uma URL HTTP ● Pode-se usar qualquer servidor web ● Diretório contendo arquivos .rock e um arquivo manifest ● O manifest e um index.html são gerados pelo rodando luarocks-admin no diretório
  18. 18. Comandos do luarocks-admin● make-manifest para preparar um diretório para ser um repositório● add para adicionar pacotes a um repositório● remove para remover pacotes de um repositório● refresh-cache para atualizar a cache local de um repositório (bom para mirrors, backups)● help não pode faltar
  19. 19. Repositório público do LuaRocks.org● A maioria dos desenvolvedores nunca lida com a gerência de um rocks server● Módulos são disponibilizados no server público: http://luarocks.org/repositories/rocks/● Há também um repositório para versões “unstable”, que baixa fontes direto do Git/SVN/etc.: http://luarocks.org/repositories/rocks-scm/
  20. 20. Atualmente● LuaRocks está na versão 2.0.6● Temos 157 projetos no repositório público (573 rocks disponibilizados) ● É muito pouco perto dos 23.866 de Perl ● Mas já é ~4x mais do que os ~40 módulos Lua empacotados como .deb (Debian/Ubuntu) ● Para várias plataformas, simplesmente não havia um repositório unificado de módulos
  21. 21. Período de desenvolvimento● 0.1: agosto 2007 ● 1.0: setembro 2008● 0.2: outubro 2007● 0.3: dezembro 2007 ● 1.0.1: março 2009 ● 0.3.1: dezembro 2007 ● 2.0: outubro 2009 ● 0.3.2: dezembro 2007 ● 2.0.1: outubro 2009● 0.4: janeiro 2008 ● 2.0.2: abril 2010 ● 0.4.1: janeiro 2008 ● 0.4.2: fevereiro 2008 ● 2.0.3: setembro 2010 ● 0.4.3: março 2008 ● 2.0.4: dezembro 2010● 0.5: abril 2008 – 2.0.4.1: janeiro 2010 ● 0.5.1: abril 2008 ● 2.0.5: agosto 2011 ● 0.5.2: maio 2008 ● 2.0.6: outubro 2011● 0.6: junho 2008
  22. 22. Gênese● Surgiu no contexto do Projeto Kepler http://www.keplerproject.org ● Projeto criado pela Fábrica Digital e PUC-Rio em 2004 com o objetivo de criar uma plataforma para programação web usando Lua ● Financiamento via parceria empresa-universidade, FINEP, CNPq... ● Encerrado o projeto institucional, hoje os projetos de software livre surgidos ali são mantidos por voluntários como eu
  23. 23. Fase 0.x: “release early, release often”● 0.1: agosto 2007 ● Não havia uma cultura bem● 0.2: outubro 2007 estabelecida de módulos reusáveis● 0.3: dezembro 2007 em Lua ● 0.3.1: dezembro 2007 ● Lua existe desde 93-94, o sistema ● 0.3.2: dezembro 2007 de módulos só entrou em 2006● 0.4: janeiro 2008 ● Primeiras versões serviam para ● 0.4.1: janeiro 2008 atender ao projeto Kepler ● 0.4.2: fevereiro 2008 ● Popularidade dos módulos Kepler ● 0.4.3: março 2008 alavancaram o LuaRocks● 0.5: abril 2008 ● Com o tempo ganhamos usuários, e ● 0.5.1: abril 2008 com eles módulos e bug reports ● 0.5.2: maio 2008 ● E com os bug reports, releases● 0.6: junho 2008
  24. 24. Fase 1.x: estabilizando● 1.0: setembro 2008 ● Objetivos do design inicial atingidos ● 1.0.1: março 2009 ● Algumas decisões de design● 2.0: outubro 2009 serviam bem ao Kepler, mas iam ● 2.0.1: outubro 2009 contra a preferência da maioria da comunidade Lua ● 2.0.2: abril 2010 ● 2.0.3: setembro 2010 ● Alguns usuários compraram a ideia, outros não ● 2.0.4: dezembro 2010 – 2.0.4.1: janeiro 2010 ● Fim do financiamento institucional ● 2.0.5: agosto 2011 ● Deixa de ser um emprego, passa a ● 2.0.6: outubro 2011 trabalho voluntário ● E os releases rareiam ● ...mas o Lua Team enfim demonstra interesse no LuaRocks!
  25. 25. Fase 2.x: redesign e continuidade● 1.0: setembro 2008 ● Redesign das partes problemáticas ● 1.0.1: março 2009 ● Para entrar em sintonia com a● 2.0: outubro 2009 comunidade e funcionar out of the box com Lua padrão ● 2.0.1: outubro 2009 ● Aceitação melhorou bastante, ● 2.0.2: abril 2010 mas ainda há alguma resistência ● 2.0.3: setembro 2010 ● Base de usuários vem crescendo ● 2.0.4: dezembro 2010 – 2.0.4.1: janeiro 2010 ● Parceria com a distro “Lua for Windows” ● 2.0.5: agosto 2011 ● 2.0.6: outubro 2011 ● LuaRocks sendo usado em ambiente de produção ● E com isso trabalhos freelance aparecendo
  26. 26. O futuro● O feedback dos usuários aponta melhorias para o formato rockspec ● mas quebrar compatibilidade é sempre traumático● A maior falta sentida atualmente é de um serviço web para contribuição de módulos para o repositório público ● atualmente os módulos são enviados via mailing list ● potencial aberto para estabelecer um novo hub para a comunidade Lua, com a atual ausência do luaforge.net ● isto seria toda uma nova frente de trabalho
  27. 27. Algumas lições aprendidas● Compreender o contexto da comunidade onde o projeto se insere ● Mesmo (e principalmente!) quando se quer “mudá-la” um pouco● Todo projeto existe dentro de um contexto ● Experiência sentida também em projetos anteriores (GoboLinux, htop) ● Procure entender e se encaixar esse contexto, não para ser político, mas porque isso é necessário para que o software seja útil
  28. 28. Programar em comunidade● É preciso criar condições para que as pessoas possam ajudar o projeto ● Documentação – É chato mas é necessário – Para usuários (manual, help) e programadores (LuaDoc) ● “Suporte”: interação em listas, bug trackers, etc. ● Escolhas de design e implementação – LuaRocks teve seus erros e seus acertos● Você só ganha retorno depois de formar uma massa crítica de usuários – Mas depois que essa barreira é quebrada, o esforço “se paga”, na forma de bugfixes, features...
  29. 29. Obrigado!● Perguntas?● Contato: http://luarocks.org/ Lista: https://lists.sourceforge.net/lists/listinfo/luarocks-developers/ http://hisham.hm/ Email: h@hisham.hm

×