quinta-feira, 17 de setembro de 2015

Listando módulos instalados

Listando módulos em Perl

Este curtíssimo artigo é de utilidade 'pública'! Sim, todo mundo que trabalha ou trabalhou com Perl em algum momento já precisou listar os módulos que estão instalados. Então vai a dica!

Primeiro, instale o módulo Module::Info

$ cpanm Module::Info 

Segundo, baixe o script clicando aqui Basicamente são dois 'loops':

  • O primeiro utiliza o módulo ExtUtils::Installed para listar os módulos 'não-core', embora ele possa trazer os módulos do Core também. A questão é que o módulo Module::CoreList é específico para isso, mas para dizer a verdade eu não sei porque o autor desse script usou os dois módulos. Meu chute é que ExtUtils::Installed possa criar alguma dificuldade para trazer os módulos do Core. Eu realmente não chequei isso, mas whatever! O que importa é o resultado!
  • O segundo loop traz, é claro, somente módulos do core, utilizando Module::CoreList e filtrando pragmas que possam vir a 'sujar' a lista de módulos. Depois utiliza uma instância do módulo Module::Info para extrair mais informações (como a versão do módulo, que está comentada,por exemplo).
O resultado, é claro, é uma lista de módulos.


 URI::Template
 URI::db
 URI::ws
 URL::Encode
 URL::Encode::XS
 UUID::Generator::PurePerl
 UUID::Object
 UUID::Tiny
 Unicode::Collate
 Unicode::Collate::CJK::Big5
 Unicode::Collate::CJK::GB2312
 Unicode::Collate::CJK::JISX0208
 Unicode::Collate::CJK::Korean
 Unicode::Collate::CJK::Pinyin
 Unicode::Collate::CJK::Stroke
 Unicode::Collate::CJK::Zhuyin
 Unicode::Collate::Locale
 Unicode::Normalize
 Unicode::Stringprep
 Unicode::UCD
 User::grent
 User::pwent
 Variable::Magic
 WWW::Correios::PrecoPrazo
 WWW::Curl
 WWW::Curl::UserAgent
 WWW::Facebook::API
 WWW::Mechanize::Cached
 WWW::Mechanize::Cached::GZip
 WWW::Mechanize::Firefox
 WWW::Mechanize::GZip
 WWW::Mechanize::PhantomJS
 WWW::Scripter
 WWW::Scripter::Plugin::JavaScript
 Want
 Web::Util::DBIC::Paging
 WebService::Amazon::Route53
 XML::Simple
 XML::Tiny
 XML::Writer
 XML::XML2JSON
 XML::XPathEngine

Claro que é possível melhorar esse script, adicionando um controle de opções, e aproveitando melhor os filtros dos módulos Module::CoreList e ExtUtils::Installed e Module::Info. Fiquem à vontade para melhorá-lo e publicar. Afinal, estamos falando de opensource por aqui!

That's all, folks!

quarta-feira, 15 de julho de 2015

Opengates

Estou iniciando um projeto que envolve dados abertos. Trata-se do Opengates. Opengates é uma plataforma alternativa ao CKAN, com características bem similares, porém feito em Perl(CKAN é feito em Python), usando Catalyst como backend e AngularJS como front.

O que esse treco vai fazer? Basicamente tudo o que o CKAN faz, mas sem as inconveniências do virtualenv do Python, e menos sofisticado, no sentido de que inicialmente não haverão muitos facilitadores, digamos assim. Lista de features para as versões 1.0.x

  • Permitir acesso a dados abertos organizados por instituições, empresas, grupos ou simples usuários
  • Restrição de acesso(somente na escrita) através de roles
  • Customização de conteúdo. Na verdade, o que importa mesmo é a API. Embora eu pretenda fornecer uma interface inicial e customizável, a idéia é que as pessoas possam consumir os dados através da API e sejam livres para mostrar isso da maneira que lhes convier melhor.
  • Documentação versionada
  • Visualização de dados online(CSV, TXT)

Tudo ainda está precário, porque comecei somente a alguns dias. Mas espero ter algo funcionando em breve! Pretendo continuar postando sobre as evoluções.

Bom, por enquanto é isso! Idéias serão bem-vindas!

Github - https://github.com/bang/Opengates

Cheers!

quinta-feira, 2 de julho de 2015

Vagrant para idiotas

Resolvi fazer um artigo para pessoas como eu, ou seja, para idiotas e preguiçosos não precisem ficar inferindo e 'caçando' coisas na internet sobre como lidar com o Vagrant.

Em primeiro lugar, uma breve introdução. O que é Vagrant? Vagrant é um toolkit que ajuda a gerenciar ambientes virtualizados. Por padrão, ele usa como backend, ou, como está na documentação do próprio Vagrant, como PROVIDER, o Virtualbox. Mais detalhes em https://www.vagrantup.com/

É eu sei! Virtualbox não é 'lá essas coisas', mas como material introdutório, acho que tá bom demais!

O que vamos precisar?

  • Linux - Eu uso Ubuntu. Se você não usa, mas usa Debian, ou seus 'filhotes' creio que tudo bem(embora não tenha testado o que está escrito mais pra baixo fora do Ubuntu)!
  • Vagrant - Me refiro ao pacote .deb disponível no repositório do Ubuntu(espero não ter que me explicar de novo), chamado(quem diria?!), vagrant
  • Virtualbox - Dois pacotes .deb: virtualbox e virtualbox-dkms

Só isso? Em teoria, SIM!

Baixando uma box inicial

Lista de boxes disponíveis no site do Vagrant: http://www.vagrantbox.es/

Já nessa página, tem três comandos que fazem o que tem que ser feito para você iniciar e acessar a VM através do Vagrant. Esqueça isso por enquanto! Você precisa configurar seu Vagrantfile.

De qualquer forma, use o wget ou qualquer outra coisa para fazer o download.

Criando o Vagrantfile

Estou supondo que você está em seu laptop com wifi. Se for isso, faça o seguinte:

Depois de fazer o download do seu box, faça

vagrant box add "NOME_DO_BOX" ARQUIVO_BOX.box

$vagrant box list

Se tudo deu certo, você deve ver o nome do box que você adicionou a lista do vagrant

$ vim Vagrantfile
Sim, eu permito que você use algo diferente do vim :P

Adicione essa linha:

$ config.vm.box = "NOME_DO_SEU_BOX_SEM_ESPACO"

Adicione essa linha(Deu certo pra mim via wi-fi)

$ config.vm.network :public_network 

Salve o arquivo

Finalmente! Subindo a VM com o Vagrant

Para inicializar o box faça:

$ vagrant init "NOME_DO_BOX"

$ vagrant up

Nesse momento, você terá que escolher a interface de rede que o Vagrant utilizará.

Se tudo deu certo, você está pronto para acessar a sua vm. Para isso faça:

$ vagrant ssh

Pronto! Você já aprendeu a usar vms do virtualbox com o Vagrant. A sugestão é que você versione suas 'boxes' e arrume algum serviço de storage + git para disponibilizar isso em qualquer lugar que tenha link de Internet disponível

Fui!