Mostrando postagens com marcador ubuntu. Mostrar todas as postagens
Mostrando postagens com marcador ubuntu. Mostrar todas as postagens

sexta-feira, 11 de julho de 2014

Aumentando o espaçamento no GNOME Terninal

Nenhum comentário:

Por padrão, o terminal do Ubuntu não tem nenhum espaçamento entre as bordas da janela e o conteúdo do terminal em si. Isso sempre me incomodou, mas encontrei uma maneira de resolver isso há pouco tempo atrás no Ask Ubuntu.

A biblioteca GTK 3 usa arquivos CSS para determinar a aparência dos aplicativos, permitindo controlar os temas usando apenas as configurações destes arquivos de estilo, quase como numa página HTML.

Tudo o que você precisa fazer é criar um arquivo de estilo ~/.config/gtk-3.0/gtk.css com o seguinte conteúdo:

TerminalScreen { -VteTerminal-inner-border: 3px 6px 3px 6px; }

Eu usei os valores acima, mas fica a seu critério modificar. Como em um CSS de página HTML, é possível atribuir valores para o espaçamento nas laterais, superior e inferior. Na imagem abaixo, veja a diferença entre a janela com espaçamento (acima) e sem espaçamento (abaixo).

segunda-feira, 7 de julho de 2014

Root no Razr i (sem desbloquear o bootloader)

Um comentário:

O Razr i não é exatamente um campeão de vendas, mas um desenvolvedor no XDA (jcase) deu uma atenção especial para o aparelho e desenvolveu um método habilitar root sem desbloquear o bootloader. Em outras palavras, você não precisa passar por aquele processo relativamente complicado da Motorola para conseguir destravar o aparelho e conseguir o acesso ao root.

O procedimento é bem simples, você apenas precisa dos arquivos deste link e do abd. Eu fiz usando Ubuntu, mas deve funcionar em qualquer sistema operacional. No terminal, use os seguintes comandos:

adb push su /data/local/tmp/
adb push rootme.sh /data/local/tmp/
adb push TwerkMyMoto.jar /data/local/tmp/
adb shell chmod 755 /data/local/tmp/rootme.sh
adb shell /data/local/tmp/rootme.sh
adb reboot
adb shell /data/local/tmp/rootme.sh

Depois disso, instale o SuperSU do Google Play e aproveite! Pode ficar tranquilo, o projeto é de código aberto e está no GitHub.

sexta-feira, 11 de janeiro de 2013

Django simple captcha no Ubuntu 12.10

Nenhum comentário:
Hoje eu estava desenvolvendo um projeto em Django que precisa de Captcha no cadastro de usuários. Já tenho familiaridade com o Simple Captcha, e resolvi usar novamente.

Esta aplicação Django tem uso bastante simples, mas eu não conseguia fazer a exibição das imagens corretamente. Eu usei a ferramenta virtualenv para montar meu ambiente de desenvolvimento, e as bibliotecas estavam instaladas lá via pip. A biblioteca PIL é uma dependência de Simple Captcha, justamente por permitir a criação de imagens por código. No meu formulário, ficou assim:

captcha = CaptchaField( label = 'Repita os caracteres a seguir')


Mas a exibição do formulário continha apenas o texto alternativo. O comando manage.py runserver mostrava um código 500 para a URL das imagens do captcha. Acessando a imagem da URL em si, pude verificar o seguinte erro:

The _imagingft C module is not installed

Um erro que já tinha me deparado antes, mas nunca registrei a solução. Essencialmente, a instalação via pip compila a bilioteca PIL, e o uso do Simple Captcha requer o suporte a Freetype2 no momento da compilação para poder gerar as imagens corretamente. Para corrigir isso no Ubuntu 12.10, basta colocar as referências certas antes da compilação:

# ln -s /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/
# ln -s /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/
# ln -s /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/

Depois, basta instalar a biblioteca PIL:

pip install pil

A mensagem final da compilação deverá mostrar algo como

    --------------------------------------------------------------------
    PIL 1.1.7 SETUP SUMMARY
    --------------------------------------------------------------------
    version       1.1.7
    platform      linux2 2.7.3 (default, Sep 26 2012, 21:51:14)
                  [GCC 4.7.2]
    --------------------------------------------------------------------
    *** TKINTER support not available
    --- JPEG support available
    --- ZLIB (PNG/ZIP) support available
    --- FREETYPE2 support available
    *** LITTLECMS support not available
    --------------------------------------------------------------------

E deverá funcionar! Encontrei a solução neste link.

terça-feira, 25 de outubro de 2011

Gnome shell no Ubuntu 11.10

Nenhum comentário:
O ambiente Gnome foi completamente reformulado na versão 3. Eu instalei o Ubuntu 11.10 assim logo após o lançamento e resolvi testar, além do Ubuntu Unity, o Gnome shell.

Estou achando o conceito bem interessante, mas adianto que é bem diferente da versão anterior. Um aspecto que senti falta em relação ao Unity é a integração dos menus dos aplicativos, no estilo Mac OS. Na verdade, a integração é da barra de título e do menu. Pode parecer bobagem, mas ganha-se um espaço legal com esta integração.

De qualquer forma, estou testando o Gnome shell, e ele está com um conceito mais parecido com aplicativos para navegador. Digo isso mais num sentido de prover o básico e permitir extensões com Javascript e CSS. Os temas e extensões podem ser feitos usando estes recursos. No Ubuntu 11.10, o gnome shell pode ser instalado pelo repositório, através do pacote gnome-shell. As extensões, entretanto, não fazem parte do repositório padrão e elas fazem bastante diferença no uso do shell.

Para instalar as extensões, você pode pode fazer a compilação ou usar um repositório que já distribui os pacotes compilados. Caso queira usar os pacotes, como eu, aí vai:

sudo add-apt-repository ppa:ricotz/testing

Para instalar as extensões, procure por gnome shell extension no Ubuntu Software Center. Os pacotes são baseados na versão estável mais nova disponível do Gnome (3.2), mas ainda são considerados como versões de teste, esteja atento.

Atualização: pode acontecer de uma das atualizações destes pacotes quebrar algumas aplicações, como o editor de configurações avançadas e o gerenciador de atualizações. Se acontecer com você (aconteceu comigo :P), será necessário fazer as atualizações via terminal antes de tudo voltar ao normal. Abra o terminal e digite sudo apt-get update && sudo apt-get upgrade e confirme as atualizações.

quarta-feira, 9 de junho de 2010

Fazendo o Empathy funcionar com o Facebook

22 comentários:
Acabei de descobrir uma resposta para algo que estava me incomodando: o Empathy não conectava na rede do Facebook. Fiquei procurando a resposta por um bom tempo, até encontrar este [1] bug. Era exatamente o meu problema; tudo estava bem configurado no Empathy, mas havia um erro de autenticação.

Entretanto, um dos comentários dava a resposta para o problema: fazer login no Facebook. Eu costumava fazer login no Facebook usando o meu email e não o meu usuário do Facebook. Daí, quando tento autenticar via Empathy, dá erro. A solução é simplesmente fazer logout no Facebook e fazer o login usando seu usuário [2] no Facebook. Depois disso, tudo funciona como deveria.

Logo, o problema deve ser com a autenticação do Facebook e não com o Empathy em si.

Atualização: sobre onde fazer seu usuário do Facebook.

Vá para a configuração da sua conta (Account Settings) e lá você deverá ver algo como Usuário ou Username. É lá que você estabelece seu usuário do Facebook.

[1] - https://bugs.launchpad.net/ubuntu/+source/empathy/+bug/542477
[2] - Ex.: se http://www.facebook.com/alexandre for a sua página, 'alexandre' é o seu usuário ;)

quarta-feira, 2 de dezembro de 2009

Ativando o Compiz no Ubuntu Karmic (placas Intel)

Nenhum comentário:
Desde a atualização que fiz para o Ubuntu Karmic Koala estava sem poder usar o Compiz. Bem, você pode até achar que o Compiz é só frescura de ambiente 3D no desktop, mas eu não acho. Para mim, usar o Compiz traz um ganho de usabilidade absurdo.

Depois de pesquisar em muitos fóruns (em particular esse ajudou bastante), desconfiei que o problema era a ativação do KLM com o novo driver de vídeo da Intel. Alterei 2 arquivos: xorg.conf e o menu.lst; o primeiro para forçar o uso do driver Intel (me ajudou a detectar o problema, na verdade) e o segundo para desabilitar o KLM.

Deixei a seção "Device" do xorg.conf assim:
Section "Device"
 Identifier "Configured Video Device"
 Driver  "intel"
 Screen  0
EndSection
No menu.lst do Grub, acrescentei o parâmetro "i915.modeset=0":
title       Ubuntu 9.10, kernel 2.6.31-15-generic (No KMS)
uuid        66342454-f778-42a6-a7fc-dc68f6faea10
kernel      /boot/vmlinuz-2.6.31-15-generic (...) i915.modeset=0
initrd      /boot/initrd.img-2.6.31-15-generic
quiet

Só para constar, minha placa de vídeo é uma Intel 945GM.

sábado, 3 de outubro de 2009

Brincando com o Django

2 comentários:
Esta semana estive brincando com o Django. Corrigindo: há algum tempo estou brincando com ele, pois estamos implementando o sistema administrativo da FEBRACE lá no LSI-NATE.

Enfim, o fato é que usamos Django para implementar o sistema de submissão de projetos, avaliação e outras partes internas de gerenciamento. Por motivos de políticas de acesso, em diversos momentos precisamos de campos exibidos com uma permissão de "somente leitura" dentro do sistema Admin.

Pesquisando um bocado por aí, conclui que deveria criar um campo específico para este fim e usar nos formulários conforme precisássemos. Aí vai a minha ideia:
  • Criar um arquivo "fields.py" (no meu caso, ele já existia)
  • Inserir o trecho de código a seguir
  • Usar os campos "ReadOnly" em formulários como qualquer outro Field do Django
from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe
class ReadOnlyWidget(forms.Widget):
    def render(self, name, value, attrs=None):
        if value is None: value = ''
        if value != '':
            # usa necessariamente Unicode
            value = force_unicode(value)
        return mark_safe(u'' % value)

class ReadOnlyField(forms.Field):
    widget = ReadOnlyWidget()

class ReadOnlyChoiceField(forms.ModelChoiceField):
    widget = forms.Select(attrs={'disabled':'true'})

O ReadOnlyField pode ser usado para campos "normais"; os que estabelecem relacionamento do tipo ForeignKey, devem usar o ReadOnlyChoiceField. O primeiro exibe o valor armazenado usando a tag HTML "label" e o segundo exibe um "select" desabilitado.

Faça bom proveito e deixe seus comentários!

terça-feira, 22 de setembro de 2009

redhat.com | Open Source World Map

Nenhum comentário:
Ao assistir a palestra do Maddog, voltou a minha mente um mapa. Sim, um mapa. Um mapa mundi, devo dizer; desses com divisão política, mesmo. O grande diferencial é a indicação da adoção de software livre pelo mundo afora.

O Brasil é considerado um país com alto índice no mapeamento: 12º na classificação geral e 3º no setor governamental. Olhando essa classificação, fica claro a grande discrepância no setor empresarial, ocupando a posição 43.

Não sei como está a evolução do mapeamento, mas creio que a participação tende a aumentar, mesmo com uma grande parte dos usuários pirateando sistemas Microsoft. Isso é meu palpite em função das iniciativas de Universidades, de eventos de grande porte como o FISL e do grande impulso do governo federal.

Confira você mesmo o tal do mapa produzido pela Red Hat.

sábado, 19 de setembro de 2009

Maddog vai à Poli

Nenhum comentário:
Ontem assisti uma palestra do Maddog na Poli. Não é a primeira vez que o vejo, mas sempre há algo novo a aprender na discussão sobre software livre. Digo isso pelo fato de a palestra ter sido basicamente sobre motivar pessoas a usar software livre em novos projetos e empreendimentos.

Esse é um assunto com o qual tenho uma familiaridade razoável. Aliás, software livre é o tema principal deste blogue. A parte mais interessante, inclusive, foi para quem o Maddog estava falando.

A palestra foi especialmente marcada para alunos do quinto ano do curso de Engenharia Elétrica (opção Sistemas Eletrônicos) cursando a disciplina de Projeto de Formatura. O convite foi feito pelo prof. Dr. Marcelo Zuffo, um dos coordenadores da disciplina.

Na seção de perguntas, ainda rolou um debate interessante sobre o papel de tecnologias e padrões livres em tempos de guerra. Uma discussão acalorada, mas bastante proveitosa.

sábado, 15 de agosto de 2009

Nokia 5310 Xpress Music no Ubuntu

2 comentários:
Há algum tempo atrás, comprei um Nokia 5310 XpressMusic. Escolhi esse modelo justamente por sua integração com o Ubuntu ser mais fácil (tinha apurado isso anteriormente, claro). Só para esclarecer, uso o Ubuntu Jaunty.

Pois bem, minha intenção era integrar o celular com o Rhythmbox via USB. Um 5310 normal funcionaria sem problemas, mas o que eu comprei é, na verdade, o Nokia 5310c2. Ao conectar o "normal", de uma amiga, o Ubuntu abria o Rhythmbox. Com o meu, apenas aparecia os arquivos do cartão de memória. Esta manhã resolvi dar um fim nessa história. As fotos abaixo ilustram a sutil diferença entre os modelos.

Nokia 5310 normal

Nokia 5310 c2

Ao procurar uma solução pela Internet, não obtive sucesso. Aparentemente, o meu modelo não é muito comum entre usuários Ubuntu. De qualquer modo, dei um jeito de hackear as coisas. O sistema funciona da seguinte forma: um dispositivo USB, ao ser conectado, aciona o HAL (Hardware Abstraction Layer). As configurações do HAL determinam o comportamento do sistema quando conectamos dispositivos USB. Para o caso específico de dispositivos de música (como MP3, IPod e celulares), o arquivo que guarda essas configurações é

/usr/share/hal/fdi/information/10freedesktop/10-usb-music-players.fdi


É um arquivo XML enorme, tem informações de um monte de dispositivos. Se você abrir este arquivo, deverá encontrar uma sessão marcada com
<!-- Nokia -->
que é exatamente onde ficam as informações dos celulares dessa marca (óbvio, né?). Aí tudo o que eu fiz foi acrescentar as linhas:


<!-- Nokia 5310 c2 Xpress Music -->
< match key="@storage.originating_device:usb.product_id" int="0x207">
< merge key="storage.model" type="string">5310c2</merge >
< addset key="portable_audio_player.access_method.protocols"
type="strlist" > storage < /addset >
< append key="portable_audio_player.output_formats"
type="strlist" > audio/aac < /append >
< append key="portable_audio_player.output_formats"
type="strlist" > audio/x-ms-wma < /append >
< append key="portable_audio_player.output_formats"
type="strlist" > audio/x-wav < /append >
< append key="portable_audio_player.audio_folders"
type="strlist" > Music/ < /append >
< /match >


De onde saiu a mágica? Bem, descobri o ID do produto (0x207) via "lsusb" e usei o mesmo conteúdo XML do Nokia 5310 normal. Simples. Agora, toda vez que conecto o celular, posso abrir o Rhythmbox para transferir músicas dentro do próprio Rhythmbox. Muito mais fácil do que transferir na mão.

Captura de tela: abrindo o Rhythmbox

A fonte de inspiração para a empreitada foi esta.

quinta-feira, 30 de abril de 2009

Catequese

Nenhum comentário:
Este semestre estou cursando duas disciplinas na pós-graduação; uma delas é Programação Paralela e Distribuída. A disciplina trata de modelos e padrões usados em Computação Paralela e Distribuída, além de questões de desempenho. A mim interessa mais Computação Distribuída, já que mais a ver com meu Mestrado.

Os exercícios dessa matéria devem ser feitos na plataforma GNU/Linux. Um de meus colegas de sala, que tinha quase nenhum contato com GNU/Linux, deu uma "pescoçada" no meu Ubuntu e achou bonito. Estranhei, mas expliquei para ele como tinha feito as modificações e de onde vinham os efeitos 3D do meu GNOME.

Captura de tela do meu ambiente GNOME
Duas semanas depois, o mesmo colega me contou que aposentou o Windows! Ele ficou impressionado com a estabilidade e o desempenho do sistema. Também, comparando com o Vista é até covardia... hehehe. E ele nem estava usando o Ubuntu Jaunty, mas depois de eu ter mencionado o boot em 20s e outras coisas, ele prometeu fazer a atualização. Como ele me falou depois, fui praticamente o guia para meu colega vir para o "mundo Ubuntu". Bacana, né?

sábado, 25 de abril de 2009

Ubuntu Jaunty: impressões

Nenhum comentário:
Essa semana fui obrigado a atualizar meu Ubuntu (do 8.10 para o 9.04) por conta de uma cagada que acho que fiz com o OpenOffice. Bem, baixei o CD e instalei via pendrive; o erro com o OpenOffice me levou a crer na formatação da partição "/" (root) como o mais seguro. A instalação não poderia ter sido mais simples: o novo instalador deu a opção de manter o Ubuntu 8.10 e o Windows, usando o espaço livre para instalar o Ubuntu Jaunty Jackalope. Como a rede sem fio foi detectada com facilidade, os pacotes de tradução foram baixados durante a instalação.

Depois de instalar e adicionar programas que uso com frequência, achei o desempenho do Compiz bem estranho. Os efeitos mais avançados, como o efeito de "queimar janelas" estava muito lento. Conversando com um colega de trabalho, confirmei a suspeita do driver de vídeo. A própria Canonical colocou isso nas notas de lançamento. Estou usando um HP Pavilion 2415us, com placa de vídeo Intel 945GM. Se você tiver o mesmo problema, tente instalar o driver de vídeo antigo. O desempenho ficou melhor que no Ubuntu 8.10! Dá pra acreditar?

No mais, está tudo muito interessante, começando pelo boot em aproximadamente 20s. O OpenOffice.org 3 também está funcionando perfeitamente dessa vez. As notificações do sistema estão bastante elegantes e a configuração de rede (via NetworkManager) está muito fácil e eficiente. Não precisei fazer configurações extras para as coisas funcionarem, fora a correção do vídeo (aliás, nem sei se conta essa, corrigi isso por querer usar os efeitos do Compiz). Interessante ver que o Ubuntu caminha para ser um sistema operacional eficaz para quem quer simplesmente instalar e sair usando. Um excelente sistema operacional, devo admitir!

sábado, 31 de janeiro de 2009

Repositório de código

Nenhum comentário:
Escrevi um plugin para o RhythmBox que atualiza sua mensagem de status do Pidgin há algum tempo atrás. Minha idéia era fazer algo parecido com o recurso "o que estou ouvindo" do MSN Messenger para o Rhythmbox com o Pidgin. Mas eu já tinha falado sobre isso.

A grande novidade é que criei um repositório público para o projeto, inspirado pelo Leandro e pela Nathy. Assim, as modificações que eu fizer no código ficam publicamente disponíveis. Qual a vantagem disso? Bem, se alguém quiser contribuir, é só mandar um patch, como qualquer projeto de software livre. Além disso, usar um repositório público é mais interessante que um repositório privado.

Ah! faltou o endereço do projeto no GitHub!

sábado, 6 de setembro de 2008

Mudando de sistema

Nenhum comentário:
Li hoje algo interessante no Life Hacker: uma pesquisa sobre o motivo dos leitores terem passado a usar GNU/Linux no lugar de outro sistema operacional. Para ser mais específico, gostei de um comentário que afirma que Ubuntu é mais simples que Windows. Um exemplo disso é o sistema de atualização do Windows: digno de piada... hehehehe

Se você não sabe do que estou falando, veja só: alguma vez você teve de atualizar o Windows (ou até instalar um programa novo) e precisou reiniciar o computador? Ridículo, não? Tudo bem, talvez eu esteja pegando pesado aqui... voltando a falar em simplicidade, eu me referia ao gerenciamento de atualizações usado no Ubuntu [1], que é centralizado. Ou seja, não importa se a atualização tem a ver com partes obscuras do sistema ou com o meu navegador de Internet ou com meu processador de texto, basta eu dizer que quero atualizar.

Outro ponto com o qual me identifiquei foi o de o GNU/Linux te deixa ter o ambiente tão rico quanto minha imaginação e habilidade permitirem. Bem legal.

Post original
em inglês.

[1] - Na verdade, esse sistema não é exclusividade do Ubuntu, já que é uma herança dos sistemas Debian.

quarta-feira, 2 de julho de 2008

Pidgin + RhythmBox

Nenhum comentário:
Continuei a incrementar meu pequeno plugin para usar as informações da música atual do RhythmBox como mensagem pessoal no Pidgin. Ele atualiza apenas do caso de o status do Pidgin ser "disponível". A mensagem pessoal é atualizada a cada música, a mensagem antiga é restaurada no caso de a música ser pausada.

Caso interesse, faça o download da nova versão.



I have written a RhythmBox that sets up current track information as your personal message in Pidgin. If your Pidgin status is "available" the message is changed; it also restores the old message in case the playback is paused.

You may download it here, it is a GPL software :)

domingo, 15 de junho de 2008

Matando o tempo

10 comentários:
Recebi uma reclamação ontem por não ter mais postado nada no blogue. A reclamação é justa, na verdade. Estive, entretanto, entretido com outra trapalhada (percebeu a aliteração? :P) : meu programa de tocar músicas no computador.

Uso quase exclusivamente Ubuntu, e vinha usando o Exaile como tocador de músicas, mas o projeto ainda não está no nível que eu gostaria. Resolvi parar no RhythmBox, que é o tocador nativo para ambientes GNOME. Experimentei alguns outros antes, como o Listen, GMusicBrowser e Amarok (que gostei mais, mas como precisa do KDE para rodar, não uso). Sempre havia um recurso que gostaria de usar mas não estava disponível. Um dia desses pensei: por que eu mesmo não adiciono as funcionalidades que desejo a um programa? E tenho feito isso mesmo!

Senti a falta de atualizar meu status do Pidgin automaticamente, usando as informações da música atual. O que fiz? Escrevi meu plugin para fazer o serviço, oras! Não é algo muito complexo, mas é um início. Escrevi em Python, e usei DBus, além das ligações do RhythmBox com Python, claro. Tive que caçar um bocado de detalhes a respeito do RhythmBox e do Pidgin, para entender como mandar informações de um lado para outro. No fim, não é algo realmente complicado, mas precisa entender o básico do DBus.

Para quem quiser se aventurar, vão alguns links:
Por fim, o link para download, sob licença GPL. Meu código foi inspirado no plugin IMStatus do Exaile. Para usar, você deve descompactar o conteúdo do arquivo na pasta "~./.gnome2/rhythmbox/plugins/imstatus/" e depois ativar em seu RhythmBox (testei na versão 0.11.2). Se tiver alguma sugestão ou crítica ou quiser reportar algum erro ou tiver alguma dúvida, deixe seu comentário :)

sábado, 3 de maio de 2008

Núcleo Linux

Um comentário:
Lendo um artigo no blog do Jonh Wendell, fui levado a ler sobre as estatísticas do desenvolvimento do Linux (em inglês), o núcleo dos sistemas operacionais GNU/Linux, como Ubuntu, Arch Linux, Fedora e outros.

Para quem não sabe, o núcleo é a parte do sistema operacional que gerencia, entre outros, a memória e o hardware. Para dar um exemplo, quando você aperta uma tecla do seu teclado, o núcleo é chamado para "interpretar" a tecla. Esse exemplo foi simples, mas o núcleo é uma das partes mais escabrosas de um sistema operacional.

Voltando: os números mais assustadores (para mim) ficam por conta do número de linhas adicionadas, apagadas e modificadas por dia: 3621, 1550 e 1425, respectivamente. Essa é a média dos últimos 2 anos e meio. Insano! E o detalhe: o código (incluindo documentação e scripts para compilação, mas esses são um percentual pequeno do total) está chegando à casa das 9 milhões de linhas! A última versão estável (2.6.24) tem simplesmente 1057 desenvolvedores e 186 empresas bancando o desenvolvimento. Daí a pujança do desenvolvimento.

O motivo de tantas empresas patrocinarem o desenvolvimento de software livre?
None of these companies are supporting Linux development as an act of charity; in each case, these companies find that improving the kernel helps them to be more competitive in their markets.
Minha tradução:
Nenhuma dessas empresas apóiam o desenvolvimento do Linux como um ato de caridade; em cada caso, essas empresas acreditam que a melhoria do núcleo [também chamado de kernel] as ajuda a ser mais competitiva em seus mercados.
Depois ainda dizem que software comercial é software proprietário. Recomendo a leitura na íntegra. Se você não estiver interessado em estatísticas de código, recomendo a leitura da conclusão, pelo menos.