SlideShare uma empresa Scribd logo
1 de 29
LuaRocks
O gerenciador de pacotes
para módulos Lua

Hisham Muhammad
h@hisham.hm

http://www.luarocks.org
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
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, Garry's Mod, Crysis, Star
        Wars Battlefront, World of Warcraft...
A “cara” de Lua
function 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 rets
end

matches = process("file.txt", string.find, "foo")
for i, match in ipairs(matches) do
   print(i, table.concat(match), ", ")
end
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
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
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)
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
Ferramentas
A 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
~$ lua
Lua 5.1.4   Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require "socket"
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
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
    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/...
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
A “cara” de um rockspec
package = "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" }
}
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
Disponibilizando os rocks

        Publicando online repositórios,
         chamados de “rocks servers”



       Podem ser gerenciados usando a
ferramenta de linha de comando luarocks-admin
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
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
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/
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
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
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
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
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!
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
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
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
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...
Obrigado!
●   Perguntas?

●   Contato:
    http://luarocks.org/
      Lista: https://lists.sourceforge.net/lists/listinfo/luarocks-developers/

    http://hisham.hm/
      Email: h@hisham.hm

Mais conteúdo relacionado

Mais procurados

Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga NevesDesenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga NevesTchelinux
 
Linux Containers: do que são feitos? de onde vem? quem os alimenta?
Linux Containers: do que são feitos? de onde vem? quem os alimenta?Linux Containers: do que são feitos? de onde vem? quem os alimenta?
Linux Containers: do que são feitos? de onde vem? quem os alimenta?Marcos Paulo de Souza
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoTobias Sette
 
Qt tchelinux-2010
Qt tchelinux-2010Qt tchelinux-2010
Qt tchelinux-2010Wagner Reck
 
12 factor app. Melhor com Docker
12 factor app. Melhor com Docker12 factor app. Melhor com Docker
12 factor app. Melhor com DockerWellington Silva
 
São paulo docker meetup #2
São paulo docker meetup #2São paulo docker meetup #2
São paulo docker meetup #2Azuki
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoSérgio Lima
 
Apresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaApresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaGPrimola
 
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Felipe Silveira
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemPetronio Candido
 
Criando pacotes para o Arch Linux
Criando pacotes para o Arch LinuxCriando pacotes para o Arch Linux
Criando pacotes para o Arch Linuxhdoria
 

Mais procurados (20)

Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Docker
DockerDocker
Docker
 
Docker compose
Docker composeDocker compose
Docker compose
 
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga NevesDesenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
 
Linux Containers: do que são feitos? de onde vem? quem os alimenta?
Linux Containers: do que são feitos? de onde vem? quem os alimenta?Linux Containers: do que são feitos? de onde vem? quem os alimenta?
Linux Containers: do que são feitos? de onde vem? quem os alimenta?
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de uso
 
Qt tchelinux-2010
Qt tchelinux-2010Qt tchelinux-2010
Qt tchelinux-2010
 
12 factor app. Melhor com Docker
12 factor app. Melhor com Docker12 factor app. Melhor com Docker
12 factor app. Melhor com Docker
 
São paulo docker meetup #2
São paulo docker meetup #2São paulo docker meetup #2
São paulo docker meetup #2
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimento
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
Apresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaApresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno Cotta
 
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da Linguagem
 
Criando pacotes para o Arch Linux
Criando pacotes para o Arch LinuxCriando pacotes para o Arch Linux
Criando pacotes para o Arch Linux
 

Semelhante a LuaRocks - palestra Hack'n'Rio 2011

Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: IntroduçãoJugVale
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson Lima
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engineHudson Brendon
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com JenkinsAécio Pires
 
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...Tchelinux
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldThiago Soares
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerAécio Pires
 
Luarocks 2.0 - talk at Lua Workshop 2009
Luarocks 2.0 - talk at Lua Workshop 2009Luarocks 2.0 - talk at Lua Workshop 2009
Luarocks 2.0 - talk at Lua Workshop 2009Hisham Muhammad
 
Apresentação lazarus flisol
Apresentação lazarus flisolApresentação lazarus flisol
Apresentação lazarus flisolCícero Rocha
 
Tutorial Setup projeto JADE e ROS
Tutorial Setup projeto JADE e ROSTutorial Setup projeto JADE e ROS
Tutorial Setup projeto JADE e ROSPedro Nakibar
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaGabriel Molter
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Embarcados
 

Semelhante a LuaRocks - palestra Hack'n'Rio 2011 (20)

Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: Introdução
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engine
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com Jenkins
 
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
Inovações no mundo das distribuições Linux - Victor Hugo Aguiar Pacce - Tchel...
 
Arch Linux
Arch LinuxArch Linux
Arch Linux
 
Iniciando com docker
Iniciando com dockerIniciando com docker
Iniciando com docker
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorld
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com Docker
 
Luarocks 2.0 - talk at Lua Workshop 2009
Luarocks 2.0 - talk at Lua Workshop 2009Luarocks 2.0 - talk at Lua Workshop 2009
Luarocks 2.0 - talk at Lua Workshop 2009
 
Apresentação lazarus flisol
Apresentação lazarus flisolApresentação lazarus flisol
Apresentação lazarus flisol
 
Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
Tutorial Setup projeto JADE e ROS
Tutorial Setup projeto JADE e ROSTutorial Setup projeto JADE e ROS
Tutorial Setup projeto JADE e ROS
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e Prática
 
O que é docker?
O que é docker?O que é docker?
O que é docker?
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
 

LuaRocks - palestra Hack'n'Rio 2011

  • 1. LuaRocks O gerenciador de pacotes para módulos Lua Hisham Muhammad h@hisham.hm http://www.luarocks.org
  • 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. 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, Garry's Mod, Crysis, Star Wars Battlefront, World of Warcraft...
  • 4. A “cara” de Lua function 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 rets end matches = process("file.txt", string.find, "foo") for i, match in ipairs(matches) do print(i, table.concat(match), ", ") end
  • 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. 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. 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. 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. Ferramentas A 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 ~$ lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > require "socket"
  • 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. Como criar um pacote Um pacote em LuaRocks é um “rock” Ele é criado a partir de um arquivo “rockspec”
  • 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. 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. A “cara” de um rockspec package = "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. 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. Disponibilizando os rocks Publicando online repositórios, chamados de “rocks servers” Podem ser gerenciados usando a ferramenta de linha de comando luarocks-admin
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Obrigado! ● Perguntas? ● Contato: http://luarocks.org/ Lista: https://lists.sourceforge.net/lists/listinfo/luarocks-developers/ http://hisham.hm/ Email: h@hisham.hm