luarocks - palestra hack'n'rio 2011

Download LuaRocks - palestra Hack'n'Rio 2011

If you can't read please download the document

Upload: hisham-muhammad

Post on 29-Jun-2015

109 views

Category:

Technology


2 download

TRANSCRIPT

  • 1. LuaRocksO gerenciador de pacotespara mdulos LuaHisham [email protected]://www.luarocks.org

2. Plano Rpida Introduo Lua? LuaRocks? LuaRocks Conhecendo a ferramenta Evoluo do projeto Passeio histrico por esses 5 anos de LuaRocks Experincias sobre a evoluo de um projeto desoftware livre 3. Lua Linguagem script criada na PUC-Rio Dinmica, extensvel, bytecode+VM... Com algumas caractersticas peculiaresMinimalismo tamanho e desempenho Projetada como linguagem de extenso paraembutir em outros programas Muito usada na indstria, especialmente jogos Adobe Photoshop Lightroom, Apache, nmap, Wireshark, VLC... Angry Birds, Company of Heroes, Civ 5, Garrys Mod, Crysis, StarWars Battlefront, World of Warcraft... 4. A cara de Luafunction process(filename, fn, ...) local f = io.open(filename) local rets = {} for line in f:lines() dorets[#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. O que LuaRocks Gerenciador de pacotes... similar a dpkg (apt-get), RPM, etc. similar a RubyGems, Python Eggs,npm, CPAN, etc. ...para mdulos Lua mdulos = bibliotecas para estender alinguagem 6. Por que LuaRocks?(e RubyGems, Python Eggs, npm, CPAN, etc...)Linguagens script costumam ter gerenciadores demdulos prprios por dois motivos: muitos mdulos CPAN: 23.866 pacotes Ubuntu: ~37.000 pacotes portabilidade 7. LuaRocks Tarefas de um gerenciador de mdulos Instalar ...e certificar-se que Lua encontrar o mdulo Remover ...e certificar-se que as coisas no explodam Verificar dependncias ...ao instalar e ao remover Compilar ...porque mdulos Lua podem ser escritosem 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 mdulos empacotados 9. FerramentasA parte que o usurio de um mdulo 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. Comandos do luarocks build removepara compilar para desinstalar install packpara usar binriospara gerar um pacote download pathpara s baixarpara configurar o ambiente list unpackpara listar os pacotes instalados para quem quer desempacotar emexer no contedo showpara mostrar informaes de um makepacote instaladopara testar, no desenvolvimento helpsempre importante 11. Como criar um pacoteUm pacote em LuaRocks um rockEle criado a partir de um arquivo rockspec 12. Rocks Um rock contm mdulos e o rockspec Pode conter os binrios ou os fontes Arquivo com nome no formatopacote-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 contedopadronizado: Arquivos rockspec e rock_manifest na raiz Subdiretrios lua/, lib/, bin/... 13. Rockspecs Um rockspec um arquivo textocom regras que indicam: De onde baixar os fontes Quais as suas dependncias Como compilar Como instalar Na verdade um arquivo Lua Um dos talentos de Lua servir como linguagemde descrio de dados 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. Usando Lua como formato de dados Permite bastante expressividade, declararvariveis auxiliares, etc. O rockspec carregado em um ambienteespecial, sem acesso aos mdulos padro deLua Voc no consegue chamar io.open, os.executee afins em um rockspec O pior que voc poderia fazer umwhile true do ende congelar a ferramenta de linha de comando 16. Disponibilizando os rocksPublicando online repositrios, chamados de rocks servers Podem ser gerenciados usando aferramenta de linha de comando luarocks-admin 17. Rocks server Um conjunto de pacotes .rockdisponveis 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 Diretrio contendo arquivos .rock e um arquivomanifest O manifest e um index.html so gerados pelorodando luarocks-admin no diretrio 18. Comandos do luarocks-admin make-manifestpara preparar um diretrio para ser um repositrio addpara adicionar pacotes a um repositrio removepara remover pacotes de um repositrio refresh-cachepara atualizar a cache local de um repositrio(bom para mirrors, backups) helpno pode faltar 19. Repositrio pblico do LuaRocks.org A maioria dos desenvolvedores nunca lida coma gerncia de um rocks server Mdulos so disponibilizados no server pblico:http://luarocks.org/repositories/rocks/ H tambm um repositrio para versesunstable, que baixa fontes direto doGit/SVN/etc.:http://luarocks.org/repositories/rocks-scm/ 20. Atualmente LuaRocks est na verso 2.0.6 Temos 157 projetos no repositrio pblico(573 rocks disponibilizados) muito pouco perto dos 23.866 de Perl Mas j ~4x mais do que os ~40 mdulos Luaempacotados como .deb (Debian/Ubuntu) Para vrias plataformas, simplesmenteno havia um repositrio unificado de mdulos 21. Perodo de desenvolvimento 0.1: agosto 2007 1.0: setembro 2008 0.2: outubro 2007 0.3: dezembro 2007 1.0.1: maro 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: maro 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. Gnese Surgiu no contexto do Projeto Keplerhttp://www.keplerproject.org Projeto criado pela Fbrica Digital e PUC-Rio em 2004 com oobjetivo de criar uma plataforma para programao web usandoLua Financiamento via parceria empresa-universidade, FINEP,CNPq... Encerrado o projeto institucional, hoje os projetos de softwarelivre surgidos ali so mantidos por voluntrios como eu 23. Fase 0.x: release early, release often 0.1: agosto 2007 No havia uma cultura bem 0.2: outubro 2007estabelecida de mdulos reusveis 0.3: dezembro 2007 em Lua 0.3.1: dezembro 2007 Lua existe desde 93-94, o sistema 0.3.2: dezembro 2007de mdulos s entrou em 2006 0.4: janeiro 2008 Primeiras verses serviam para 0.4.1: janeiro 2008 atender ao projeto Kepler 0.4.2: fevereiro 2008 Popularidade dos mdulos Kepler 0.4.3: maro 2008 alavancaram o LuaRocks 0.5: abril 2008 Com o tempo ganhamos usurios, e 0.5.1: abril 2008 com eles mdulos 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: maro 2009 Algumas decises de design 2.0: outubro 2009serviam bem ao Kepler, mas iam 2.0.1: outubro 2009contra a preferncia da maioria da comunidade Lua 2.0.2: abril 2010 2.0.3: setembro 2010 Alguns usurios compraram a ideia, outros no 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 voluntrio 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 problemticas 1.0.1: maro 2009 Para entrar em sintonia com a 2.0: outubro 2009comunidade e funcionar out of the box com Lua padro 2.0.1: outubro 2009 Aceitao melhorou bastante, 2.0.2: abril 2010 mas ainda h alguma resistncia 2.0.3: setembro 2010 Base de usurios 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 produo E com isso trabalhos freelance aparecendo 26. O futuro O feedback dos usurios aponta melhorias para oformato rockspec mas quebrar compatibilidade sempre traumtico A maior falta sentida atualmente de um servio webpara contribuio de mdulos para o repositriopblico atualmente os mdulos so enviados via mailing list potencial aberto para estabelecer um novo hub para acomunidade Lua, com a atual ausncia do luaforge.net isto seria toda uma nova frente de trabalho 27. Algumas lies aprendidas Compreender o contexto da comunidade ondeo projeto se insere Mesmo (e principalmente!) quando se quermud-la um pouco Todo projeto existe dentro de um contexto Experincia sentida tambm em projetos anteriores(GoboLinux, htop) Procure entender e se encaixar esse contexto,no para ser poltico, mas porque isso necessriopara que o software seja til 28. Programar em comunidade preciso criar condies para que as pessoas possamajudar o projeto Documentao chato mas necessrio Para usurios (manual, help) e programadores (LuaDoc) Suporte: interao em listas, bug trackers, etc. Escolhas de design e implementao LuaRocks teve seus erros e seus acertos Voc s ganha retorno depois de formar uma massacrtica de usurios Mas depois que essa barreira quebrada, o esforo 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: [email protected]