Ubuntu 8.10 (Intrepid Ibex)

Galera, há 10 dias saiu o novo Ubuntu (8.10) para a alegria da comunidade free! Hoje o instalei, retirando a versão 8.04, e gostei do que ví. A performance com o meu processador Pentium 4 HT melhorou bombasticamente! Os pacotes estão bem mais atualizados... É show mesmo!

Confere esse post do Ubuntu Linux PT e faça já o download do Intrepid!

O Ibex terá o foco na conectividade. Como tivemos uma release muito estável (LTS), o Ibex provavelmente será um pouco mais instável para algumas pessoas mas terá maiores inovações. Quem sabe com um tema totalmente diferente das versões passadas.

Este tópico pretende unificar as mensagens sobre a nova versão do Ubuntu, desde o lançamento do primeiro alfa até a liberação da versão final.

Novidades
  • Login mais rápido depois de tela do GDM.
  • Melhoria na integração com o Flash.
  • Suporte nativo às redes 3G.
  • Conta de convidado para logins rápidos de outros usuários.
  • Limpeza de arquivo não utilizados.
  • Download automático de drivers de impressoras.
  • Seletor de fontes.
  • Mais rápida instalação via DVD.
  • Novo instalador gráfico.
SemanaDataNota
Junho 2008
712 JunhoAlpha 1
Julho 2008
1003 JulhoAlpha 2
1110 JulhoUbuntu 8.04.1 (proposed)
1324 JulhoAlpha 3
Agosto 2008
1614 AgostoAlpha 4[/b]
Setembro 2008
1904 SetembroAlpha 5
2118 SetembroAlpha 6
Outubro 2008
2302 OutubroBetaRelease
2623 OutubroReleaseCandidate<-- Versão atual
2730 OutubroFinalRelease Ubuntu 8.10

Adicionando Fontes Diferentes no Ubuntu

Recentemente precisei de algumas fontes diferentes, mais "elaboradas", e daí surgiu a questão: "Como modificar as fontes do Ubuntu?".

Para nossa alegria essa uma tarefa muuuuuuuuuito fácil. Aliás, mais fácil que no Windows, acredite!
Tudo o que você tem que fazer é baixar as fontes que você mais gostar (inclusive, o site www.netfontes.com.br tem muitas fontes legais e totalmente gratuitas) extrair todas para uma pasta qualquer que conterá apenas elas (para extrair no Ubuntu é só selecionar uma vez só todos os arquivos compactados, clicar com o botão direito do mouse sobre algum deles e mandar "Extrair Aqui") e então, copie essa pasta e cole no diretório de fontes do Ubuntu (e na maioria das distribuições linux), ou seja, "/usr/share/fonts"... E pronto! Agora é só abrir um programa de edição de texto para testar as suas novas fontes!
O Ubuntu 8.04 já reconhece automaticamente todas as fontes que forem incluídas nesse diretório, sem a necessidade de fazer a instalação delas. Contudo, pode ser que em versões anteriores dele você tenha que rodar o Defoma (programa dos repositórios Debian para gerencimento de fontes) para atualizar a lista de fontes, mas isso só se você copiar as fontes para o diretório e ele não reconhecer automaticamente. No Ubuntu 8.04, como já falei, não tem erro!
Divirta-se!

Photoshop no Linux Promovido pela Google?

Em notícia recentemente publicada, falou-se sobre o apoio e interesse que que a Google tem em rodar Photoshop CS3 em Linux, via emulador Wine.
De onde vem esse interesse?
A Google possui o Picasa, um editor de imagens de uso livre, que, em tese, poderia ser considerado um concorrente do Photoshop. Se não tecnicamente, ao menos, mercadologicamente. Apesar disso, todos os que trabalham profissionalmente com o Photoshop (eu, inclusive), sabem o quanto é difícil qualquer programa se equiparar em termos qualitativos à esta ferramenta, naturalmente líder de mercado, uma liderança, em tese, pouco contestada pelos utilizadores e pela comunidade profissional de designers, arte-finalistas e operadores de computação gráfica. O que se vê, na verdade, é quase uma "seita" de "photoshopers", ansiosamente aguardando novas versões, plugins; compartilhando em diversos forúns e comunidades espalhadas pela web seus brushes, patterns, configurações de regulagens de selective colors, curves, etc...
O Picasa, creio, não tentará se equiparar ao Photoshop. Então, qual seria o motivo desse repentino interesse da Google? Qual o interesse da numa ferramenta concorrente da Adobe? Com certeza, eu não conheço o motivo preciso, mas analisarei algumas possibilidades.
Com a (nem tão) recente compra da Macromedia, a Adobe se tornou um quase monopólio de ferramentas e soluções web, as mais populares e utilizadas do mercado. Vejo esse interesse da Google como uma possível aproximação com o "império do software proprietário para web" da Adobe, no melhor espírito "se não pode com eles, alie-se a eles", ou seja, é melhor estar por perto de quem, em tese, está ganhando o jogo, do que lutando contra.
Já vi muitos amigos de profissão dizerem que "no dia em que o Photoshop rodar em Linux, migro para esta plataforma e abandono o Windows de vez". É provável que a Google esteja de olho nisso, que tenha consciência de que uma conquista deste porte (rodar Photoshop CS3 no Linux) será acompanhada de uma grande celebração no setor, neste cenário, o "pai" da façanha ganhará ainda mais simpatia da comunidade web.
Cabe ressaltar que rodar Photoshop utilizando um emulador não faz com que o aplicativo se torne livre, muito pelo contrário. O usuário precisa ter uma cópia (para Windows) para instalar o programa em ambiente Linux, utilizando uma solução wine, um dos mais celebrados emuladores para Linux da atualidade. Então, qual a diferença? Isto é o que se tem hoje. Porém, com a entrada da Google na "jogada", tudo pode mudar.
É verdadeiramente improvável que a Adobe irá abrir alguma API relativa ao Photoshop, mas, como disse, com um parceiro novo desse porte, o wine dará grandes saltos qualitativos, trazendo uma solução de emulação melhor e estável.
Muitos na comunidade do software livre enxergam, com ressalvas, a tática anunciada pela Google. Por qual razão o investimento será feito em emulação de Photoshop e não no gimp, conhecida ferramenta de edição bitmap desenvolvida para ambiente Linux? Se é pouco provável que a API do Photoshop será liberada, o que acontecerá no futuro, como retorno do investimento neste seguimento?
Com certeza, são questionamento pertinentes, que mexem com o mercado.
O fato é: a Google não dá "ponto sem nó", então podemos esperar mudanças consideráveis.
E você, o que acha?

Via http://imasters.uol.com.br

Sincronizando Arquivos no Ubuntu

Minha busca por um aplicativo que fizesse sincronia de arquivos bilateralmente entre dispositivos móveis de armazenamento (pendrive, cartões de memória, etc) e o computador, no Ubuntu, ou até mesmo entre dois desses dispositivos, ou ainda entre dois diretórios numa mesma máquina, ou mesmo em dois locais de rede, e por aí vai, rsrsrs, acabou quando encontrei o Grsync. Esse software é, na verdade, uma interface visual em GTK+2 para o utilitário Rsync (que opera por comandos, em modo texto), com capacidades avançadas de sincronia e backup.
Para instalar o Grsync no Ubuntu, acesse no menu: "Aplicações > Adicionar/Remover", pesquise por Grsync e marque para instalação imediata. Se preferir, entre no terminal e digite o comando # sudo apt-get install grsync para instalá-lo. Lembrando que, para tal, você deverá estar logado na Internet.

Após a instalação execute-o. No meu Ubuntu (Hardy Heron) o atalho para o programa foi parar no menu "Aplicações > Internet". Pode ser que contigo seja assim também. Para executá-lo do terminal digite # grsync.

Com o Grsync aberto é só definir os diretórios ou dispositivos de armazenamento a serem sincronizados e estabelecer algumas regras marcando as opções disponíveis na interface. Se desejar algum recurso "extra", que não tenha sido implementado na interface, antes ou depois de executar a sincronia, você pode inserir isso em forma de comandos pela aba "Extra Options" nos campos respectivos.

No primeiro botão Browse (source), informe o diretório ou drive que será copiado para o destino que será definido no segundo botão Browse, onde você informará o local onde a cópia será salva.
Se você quiser sincronizar os dois locais, afim de que tenham o mesmo conteúdo, clique no botão Switch logo após o os botões Browse's; isso fará com que o destino passe a ser a fonte e a fonte passe a ser o destino.
Relaciono as opções de sincronia mais úteis, a saber:

Delete on destination - apaga todo o conteúdo no local de destino que não tiver cópia no local de origem, ou seja, garante que os dois locais terão, absolutamente, o mesmo conteúdo.

Skip newer - faz com que os arquivos mais antigos contidos no local de origem não sobrescrevam os arquivos mais novos contidos no local de destino.

Windows compatibility - evita erros de escrita nos arquivos e pastas que serão copiados entre partição Linux para uma partição Windows (NTFS, Fat32, Fat16), aumentando assim, a compatibilidade entre os sistemas de arquivos. A maioria dos pendrives, por exemplo, utiliza Fat32 como sistema de arquivos.

Compress file data - comprime o conteúdo a ser copiado afim de compactá-lo. Mais útil quando a intenção é manter cópias de segurança, para evitar despêndios de espaço em disco.
Only update existing files - apenas atualiza os arquivos do local de destino com as versões mais novas dos mesmos arquivos no local de origem.
Escolha as opções que lhe aprouver e clique em Executar para realizar a sincronia ou backup.
Caso queira definir mais de um esquema de sincronia você poderá criar novas "sessions", logo no topo da interface.

Sincronize sua mente com o que há de melhor no mundo livre!

Computação Rima com Desmotivação

Um professor e um aluno, ambos da Universidade de Brasília, mantiveram por e-mail o seguinte diálogo, cuja publicação o aluno consentiu sob anonimato:

Aluno: Gostaria de ouvir comentário do Sr. a respeito do seguinte.

Desde que entrei na UnB venho ouvindo de alguns professores da computação que seus alunos estão cada vez menos empenhados em suas disciplinas, que cada vez mais os alunos só se enteressam em tirar um MM e conseguir os créditos. Ouvi uma história de um professor que se frustrou de tal forma com a picaretice de seus alunos que não consegue mais olhar nos olhos dos alunos quando ministra suas aulas, e por ai vai.

Eu como aluno percebo o desinteresse dos colegas em relação a UnB. Esse fato, somado à frustação dos professores, estão me preocupando, pois parece que esse quadro tende a piorar, então eu fico me questionando. Será que tal aumento na picaretagem por parte dos alunos só tem afetado a computação, pois computação é um curso da moda e muitas pessoas que entram procurando perspectiva profissonal e podem se desiludir ao longo do percurso?

Será que isso é um ciclo e dentre em pouco nós os alunos voltaremos a levar a sério a computação? Será que é só culpa dos alunos ou existe algum fator que vem desestimulando a grande maioria dos estudantes? Obviamente a respota não é simples, provavelmente será uma combinação desses fatores somados a outros ainda, mas eu tenho duas teorias ainda não amadurecidas.

A primeira se refere a grande pressão que o sistema vem exercendo sobre os alunos de modo que esses prefiram empenhar-se em arrumar um estágio para, com sua remuneração, atender ao apelos consumistas cada vez mais fortes, o que os leva a simplesmente tentar conseguir um MM na UnB pois o estágio exige mais atenção.

A segunda teoria é mais paranoica mas tendo a crer que seja a mais correta. Imagino que exita um subconsiente coletivo que diz "pra que levar a sério essa UnB se os grandes ícones da sociedade fazem tudo pela metade, dão um jeitinho pra se dar bem em tudo e f***-se os outros, roubam na cara dura e saem livres e com toda a moral, pra que eu vou me esforçar se as intistuições estão falidas, agente tenta, tenta se esforça pra mudar as coisas, deposita nossa confiança nas pessoas e elas nos traem"...

Pode ser loucura minha, mas acho que existe uma frustação, um falta de fé no sistema como um todo, o que leva as pessoas a não se empenharem, pois sabem, inconscientemente, que não vão ter uma contrapartida justa por parte do sistema, ou seja "para q vou contribuir com uma sociedade que não valoriza o meu esforço?"

Não sei se me fiz entender, o que eu quero é saber quais as causas dessa falta de interesse e qual a solução, se existir? Obrigado por sua atenção.

Professor: Acho que suas duas teorias se aplicam, e que ambas se conectam pelo relativismo moral hoje imperante. A esse estado de coisas, cada um reage com o que construiu para si desde o berço. Inclusive e principalmente professores, por tenderem ao idealismo, pela profissão que escolheram.

Minha reação a esse estado de coisas foi tornar-me ativista (software livre, cidadania na era digital, etc.). Pode parecer uma atitude farisaica ou pueril para quem já tem emprego fixo, mas é o que dita a minha consciência. Talvez um dos motivos inconscientes de eu ter escolhido essa minha profissão, e esse emprego, foi o de poder assim preservá-la.

Doutra feita, racionalizar esse estado de coisas, acomodar-se a ele ou revoltar-se a êsmo seria, para mim, uma atitude moralmente imatura. Como professor de uma Instituição Pública de ensino superior sou pago também para pensar. E penso que, enquanto o relativismo moral e a hipocrisia resultante podem cooptar, podem também servir de combustível para as próximas lutas sociais. Daí, ao "clamar no deserto" da sala de aula, expondo a dimensão ética nas atividades profissionais para cuja formação me dedico, estou agindo como um professor que é também ativista social.

Na intercessão desses dois papéis um dos pais da democracia moderna, um dos homens que mais contribuiu para o senso de indignação e revolta que fomentou a revolução francesa, Montesquieu, na sua obra "o Espírito das leis" explicava: Num estado democrático de Direito, há que haver uma instância a mais, a Virtude.

Independente de leis, não se pode esperar justiça de homens que desprezam a Virtude. A busca do saber (no sentido de sofia e de episteme, não de doxa) [no nosso caso, saber não apenas como a criptografia pode ser bem ou mal utilizada, mas principalmente, os próprios valores morais com os quais se julga o que é bom e o que é mau uso dela] é uma virtude; subjugar-se ao relativismo moral, correndo o professor atrás só de salário e estabilidade, e o aluno atrás só de canudo e rodas de pôquer, jogadas no chão dos corredores da escola ou no cassino da mão-de-obra semi-acabada, não me parece que seja.

Guiar a conduta pela bússola auto-enganosa da estabilidade financeira pode parecer uma atitude realista, porém, ao mesmo tempo que uma tal estratégia pode ser localmente vantajosa, ela é também globalmente desastrosa. É uma armadilha de radicalismo ideológico encetada pelo fundamentalismo neoliberal. Leva a uma forma de conduta competitiva que hoje parece vencedora, mas que amanhã pode se tornar fardo ou grilhão, em momentos de ruptura social, ruptura que essa própria exacerbação individual, complacente e hedonista, cataliza. Platão dizia que a maior força escravizadora é a concupiscência.

E a História isso mostra, ciclicamente validando Platão, sem nenhum indício para crermos que dessa vez seja diferente. A evolução tecnológica precipita essas rupturas, como com os gregos, cuja sociedade de início foi a que melhor soube usar a primeira tecnologia revolucionária de TI, o alfabeto. E sem tampouco indícios para desprezarmos a distância que nos separa da próxima ruptura. A sociedade grega condenou à morte Sócrates, formalmente pelo crime de "perversão da juventude", para pouco depois sucumbir ao domínio do jovem Alexandre, que aprendera arte militar com Aristóteles para se formar herdeiro da Macedônia, nação que os gregos consideravam "bárbara".

Assim, cabe refletir: quem é que está cada vez mais aprisionado hoje? Os chefes do PCC, encarcerados pelo Estado, em presídios de segurança cada vez mais "máxima"? ou quem corre cada vez mais atrás da sua estabilidade financeira ou do poder, enredados pelo medo, nos labirintos de incertezas desse caos? No cenário global, troque atores e lugares pelos da hora e refaça mentalmente a pergunta. Talvez em tempos como esse, a estabilidade financeira não seja lá nenhum santo graal. Ou, em linguagem mais conhecida de desmotivados consumistas, nenhuma brastemp.

Ciberética e Guerra Cognitiva

A ética na nova geração de hackers, na verdade, não falta: o que ocorre é que ela é outra, diferente da anterior, mais própria aos novos meios de capitalizar assimetrias informacionais com a Internet. Devido a este salto evolutivo, hierarquias abaladas em seu poder de gerar e explorar assimetrias informacionais estão, com o perdão da palavra, ciber-aterrorizadas. Reagem para preservar a velha ordem, querem a neo-contra Reforma em nome do princípio da infalibilidade. Não mais do Santo Papa, agora das leis de mercado, cuja regulamentação querem ditar casuística e prontamente. Sua batalha da hora é em defesa do monopólio da nomeação do terror, que legitima o neo-imperialismo hobbesiano. Jack Valenti, então presidente da associação dos estúdios de hollywood (MPAA), declara que sua cruzada contra quem copia ilegalmente DVDs é a "nossa guerra contra o terror". Nessa neo-contra Reforma, a mídia funciona como retaguarda. Seu principal teatro de operações são os parlamentos, os sentimentos e pensamentos da magistratura.

Pode parecer paranóia conspiracionista mas, enquanto falo, os autos-de-fé e as fogueiras da neo-Inquisição estão sendo preparados. Desta vez contra idéias tidas como ameaça à ordem político-econômica. Não mais à ordem sacro-eclesiástica, porém com o mesmo inconfesso alvo: o controle da geração e difusão do conhecimento.

Preparados com mensagens subliminares, como o documentário da CBS no "History Channel"; com conchavos políticos, como nos bastidores do conselho de ministros da União Européia, para revisão sorrateira da diretiva votada pelo parlamento sobre patenteabilidade de idéias úteis à escrita de softwares [12]; com tropas e suprimentos, na corrida insana às patentes de idéias, e na esotérica radicalização normativa da propriedade imaterial [13]; e com missões exploratórias, como no cerco kafkiano para rapto jurídico de direitos sobre a propriedade de softwares licenciados ao livre conhecimento e usufruto, no caso SCO [14].

Quem precisa achar inimigos em qualquer parte, lançando ameaças e intimidações em nome da liberdade, certamente os terá. Quem, no Direito, se refugiar em Kelsen para lavar as mãos, terá a sua vez, ao mais tardar na história. Liberdade, como dizia Cecília Meirelles, não há quem defina e não há quem não entenda. De minha parte, entendo que a liberdade do capital se antagoniza cada vez mais com a do Espírito humano.

Se aceitarmos o alerta de Bohr e os conselhos de Sun Tsu, o desafio de que fala o primeiro começa na tarefa de conhecer a ameaça comum, que nos zumbe. Devemos ser humildes e tenazes diante da tentação de pensarmos, em meio ao zumbido, que esta tarefa é vicária, impossível ou já cumprida. O mundo está mudando sempre mais rápido, a nuvem de bits é amorfa e o seu sentido singular é inexpressável, mas é aonde pode estar a nova rota da liberdade humana, interditada pela do capital.

Por fim, resta indagar o que me conecta ao autor do alerta na abertura, que me trouxe até aqui. Bohr se sentiu envolvido por ter ensinado à humanidade como pode a física quântica; e eu, por ensinar a meus alunos como pode o software.

Trago, para encerrar, uma mensagem de outro físico, talvez o maior cosmologista vivo, anunciada quando lhe restava o movimento de apenas um único dedo. Na verdade, esse recado de Stephen Hawking é o mesmo recado do oráculo de Delfos a Sócrates: "o maior inimigo do conhecimento não é a ignorância, mas a ilusão do conhecimento". Peço licença para acrescentar, a essa classe de inimigos do conhecimento, a interdição pelos fariseus.

Prof. Pedro Antonio Dourado
Via http://www.cic.unb.br/~pedro/sd.php

RMVB no Linux com Real Player 11 GOLD

Pois bem, para abrir aqueles vídeos todos de animes que você baixou ou outros alheios de conteúdo diverso, geralmente todos em RMVB, você precisará fazer algumas configurações e ajustes em qualquer Sistema Operacional para rodar satisfatoriamente. Apresento aqui a forma mais simples de se poder assistir seus RMVB's no seu Linux sem dor de cabeça.
Muitos usam o Kaffeine ou Xine para abrir esse tipo de arquivo, mas para isso é preciso algumas configurações bem minuciosas e com algumas diferenças entre as distribuições, por isso eu gosto de usar mesmo é o Real Player 11, específico para tal. Dessa forma, é só instalar o Real Player e assistir seus vídeos, em qualquer distribuição Linux.
Para baixar o Real Player (que está na versão 11), entre na página de download do site da Real para Linux e baixe o executável binário (.bin) clicando no botão de download ou o pacote RPM, se sua distribuição for extendida de Red Hat (aconselhável baixar sempre a versão binária, para poder instalar em qualquer distribuição Linux).
Para o pacote RPM não tem segredos, é só clicar duas vezes sobre o executável e instalar normalmente, mas para o pacote binário (.bin) vamos discorrer sobre sua execução...
Mova o binário que você baixou para a pasta principal do usuário que iniciou a sessão (exemplo, /home/lindoelio/ - isso, porque em algumas distros o binário não se executa estando dentro de um esquema de diretório mais longo). Abra o terminal de comandos (pressionando ALT+F2 e digitando XTerm, uma opção) e inicie sessão como superusuário digitando sudo su ou sudo -s e informando corretamente a senha. Estando agora como root, dentro do diretório para onde moveu o binário dê permissão de execução a ele, fazendo:
# chmod +x RealPlayer11GOLD.bin
E, então execute-o:
# ./RealPlayer11GOLD.bin
O processo vai correr e lhe será perguntado o diretório de instalação (eu prefiro sempre confirmar a instalação no diretório /opt que o instalador sugere), confirme com ENTER e depois com F e ENTER.
Pronto! RealPlayer11 instaldo no seu Linux. Agora vá até o menu de aplicações e procure o atalho de menu para o RealPlayer, execute e prossiga o assistente de configuração avançando as telas até a conclusão (bem rápida, por sinal).

Prestigie livremente seus vídeos preferidos!

Abrindo arquivos .cdr (Corel Draw) no Inkscape for Windows

Atendendo a pedidos, senti-me no dever de escrever esse post.
Atualmente, não uso mais Windows para absolutamente nada em minha vida. Nem sei mais como é ouvir aquele beep - "... ocorreu uma falha ao iniciar o processo...", entre outros.
No Linux, assim que se instala o uniconvertor o Inkscape, versão 0.46, já é capaz de trabalhar nativamente os arquivos .cdr e vários outros extras sem qualquer configuração e instalação adicionais. Mas, voltando ao "lado negro da força", como diria um amigo meu, vamos admitir que essa não é uma tarefa fácil quando se fala em Windows. Como alusão a um grande paradoxo, no brinquedinho do tio Bill não é tão simples; na verdade, não é nada simples, rsrsrs. Mas nada que um pouco de paciência não resolva; e cá entre nós, "paciência" é o que os usuários de Windows mais devem buscar.
Para tal, você precisará adicionar alguns arquivos sobre python e uniconvertor que você deve baixar apartir desse link: http://launchpadlibrarian.net/13891678/python-uniconverter.7z
Descompacte para o diretório python do Inkscape e adicione o diretório de scripts python para o diretório raiz do seu Windows.

Então, você precisará do uniconv-ext.py e da versão atualizada do cdr_input.inx. Coloque-as, novamente, no diretório de extensões do Inkscape e, nesse último, mude a linha entre as tags "dependency" e "/dependency" de uniconv para uniconv.cmd (adicionando a extensão .cmd)

Ainda no arquivo cdr_input.inx remova a declaração:
xmlns = "http://www.inkscape.org/namespace/inkscape/extension" (pois ainda não é suportada na versão 0.46 do Inkscape)

Agora abra o arquivo uniconv.cmd, localizado dentro do diretório de scripts do python que, por sua vez, está dentro do diretório do Inkscape, e edite a linha:
@python -c "import uniconvertor" "%1" "%2"
Para:
@python -c "import uniconvertor" %1 %2
(note que foram retiradas as aspas que envolviam os números 1 e 2...)

Normalmente, ao final de todo o processo seu esquema de diretório deverá estar parecido com esse: "C:\Arquivos de Programas\Inkscape\python\Scripts\".

Após seguir estes passos reinicie seu Inkscape (ou seu PC se preferir, como costume do Windows) e teste a edição de qualquer arquivo .cdr. Deverá funcionar.

Nota: Para instalar o Inkscape no Windows será necessário a instalação da biblioteca de interfaces GTK+, disponível aqui.

Mudem do lado negro da força para a luz! Viva o Linux!

Torpedos SMS Gratuitamente Para Várias Operadoras

Que tal enviar torpedos SMS para celulares de várias operadoras do país sem pagar nenhum centavo por isso e sem ter que ficar perdendo a paciência com a digitação imbecil num teclado de celular?
Não é nenhuma novidade, mas acredito que em uma hora ou em outra seja útil para todos!
Então, para quem ainda não conhece, lhes apresento o jSMS, um software multiplataforma de código aberto desenvolvido em Java, com catálogo de contatos e histórico de envios, além de uma lista bem atualizada de operadoras de telefonia celular. Você poderá enviar mensagens sem se preocupar com limite de envio ou com valores...

Segue os links para download, segundo o seu Sistema Operacional:

- Pacote ".deb" (Distribuições Linux derivadas do Debian, como por exemplo, Ubuntu, Mint e Kurumin) : http://jsms.com.br/download/jsms_3.01_all.deb
- Pacote ".jar" (executável multiplataforma genérico): http://jsms.com.br/download/jSMS-301.jar
- Pacote ".rpm" (Distribuições Linux derivadas do Red-Hat, como por exemplo, Fedora, Mandriva e OpenSuse) : http://jsms.com.br/download/jsms-3.01-2.noarch.rpm
- Pacote ".dmg" (MacOS X da Apple)": http://jsms.com.br/download/jSMS%203.01.dmg
- Pacote ".exe" (Windows): http://jsms.com.br/download/jSMS-301.exe- Código Fonte: http://jsms.com.br/download/jSMS-301-src.jar

Quem quiser sabe maiores detalhes sobre o projeto, acesse o site http://jsms.com.br

Comunique-se livremente!

MSN no Linux com Audio e Vídeo

Há tempos eu era decepcionado com os programas de chat para MSN existentes para Linux, apesar de saber que isso nunca foi culpa da comunidade livre e sim da amarração infernal daquela empresinha que nem preciso dizer o nome...
Felizmente eu disse "era decepcionado" porque fui apresentado ao melhor programa para MSN do mundo livre, o Mercury Messenger! Desenvolvido com a tecnologia Java, ele possui recursos de audio e vídeo, customização de interface através de skins e temas, visualização dos famosos Winks em flash, todos os emoticons originais do MSN Messenger, personalização de nickname bem mais completa, seleção de plano de fundos nas janelas, multiplos acessos de contas de MSN, leitura de RSS integrada, e mais!!!
Com certeza é o mais completo para a plataforma Linux, sem dizer que é multiplataforma por rodar sob uma Java Virtual Machine!
Existem muitos programas para se teclar no MSN no Linux, destacando-se: PidGin, Kopete, Emessene e aMSN, mas nenhum deles chegam perto do Mercury apesar de ser um projeto novo.

Para fazer o download do Mercury Messenger e ser tão feliz teclando pelo MSN no Linux quanto como era no Windows, acesse a página do projeto (http://www.mercury.im/) e na guia "Download" escolha o seu pacote de instalação segundo o Sistema Operacional que estiver usando (lembrando que pode ser instalado no Windows e no MacOS também).
Para o Ubuntu tem uma dica de como adicionar os repositórios do projeto logo abaixo da página, ainda na guia "Download". Recomendo que faça isso, assim poderá manter seu Mercury Messenger atualizado automaticamente. Como sempre, os usuários do Ubuntu sai na frente! Rsrsrs...
Se quiser ver um vídeo demonstrativo do Mercury no Ubuntu, acesse http://www.youtube.com/watch?v=rspuUPBC-fA (é de um usuário intusiasta, mas dá pra ter uma noção, rsrs)

Teclem, falem e vejam uns aos outros à vontade! E se souber como, ajude a melhorar!

Convertendo Vídeos para AMV (mp4) no Linux

Comprei um aparelho mp4 pela Internet para me deliciar com músicas e vídeos num mesmo aparelho enquanto viajo para a faculdade todos os dias... Porém, na minha ignorância, tive um choque quando percebi que nenhum formato de vídeo (os mais famosos) rodavam no bichinho, apenas um tal de AMV, que eu nunca tinha escutado sobre ele... Então peguei o CD que o acampanhara, mas o software disponível (AMVConvert) só roda no Windows (como toda porcaria) e nem com o Wine não quis funcionar... Digitei algumas linhas de comando aqui e outras alí mas não obtive sucesso na conversão dos vídeos, até descobrir um modesto programinha open-source para Linux, em GTK+2, que usa o ffmpeg para converter diversos formatos, inclusive o FLV (para quem gosta de baixar vídeos do youtube e afins), coisa que o concorrente que só roda no Windows não faz (pelo menos na versão que veio junto ao aparelho), e se chama Bytessence...
Atualmente, o projeto foi dividido e podemos encontrar o Bytessence AMV Converter e o Bytessence MPx Converter. Aliás, pelo o que a equipe desenvolvedora recomenda, a versão Bytessence AMV Converter foi descontinuada e portanto o Bytessence MPx Converter seria a melhor opção. Mas, particularmente não gostei do MPx porque não consegui grandes resultados, não entendi o porque, e ainda uso o Bytessence AMV Converter...
Então a dica é: teste os dois!
O primeiro passo é garantir de que você possui o ffmpeg instalado corretamente no seu sistema, pois ele é pre-requisito para que os conversores funcionem (uma vez que esses são apenas interfaces para o ffmpeg)...
Para baixar gratuitamente o Bytessence AMV Converter e o Bytessence MPx Converter, acesse o site http://www.bytessence.com ou clique nos links de download:
- AMV: http://www.bytessence.com/download/bamvc/BAMVC_LIN_1.1.zip
- MPx: http://www.bytessence.com/download/bmpxconverter/MPxConverter_L.tar.gz

Com o download concluído, basta descompactar o pacote e acessar a pasta para executar o Bytessence; não é necessário instalar. Sendo assim, mova essa pasta para um lugar seguro (recomendo o diretório /opt) e então crie um link para acessar o executável. Lembrando que você deverá dar permissão de execução para esse como programa. No Ubuntu, basta clicar sobre o executável e na guia Permissões marcar a permissão de execução como programa. Se quiser fazer pelo terminal é só digitar # sudo chmod +x e o nome do arquivo, desde que se esteja dentro do diretório do mesmo e então, para executar, # ./amv_ou_mpx...

No blog Virus_cg tem disponível um pacote .deb para instalação do Bytessence AMV Converter, porém, necessita-se criar também o link para acessar o programa instalado, mas aí está o link para download: http://www.adrive.com/public/d6e553e343eff78b89bac14231fc80be3e2b355be023e81cc15a0fb263d5f1e3.html

Veja os screenshots...

Bytessence AMV Converter 1.1

Bytessence MPx Converter 1.0

Barra de Atalhos 3D no Ubuntu 8.04

Assim como diz aquela música do Skank: "... Quem não sonhou ser um jogador de futebol?" (claro, para quem gosta de futebol), eu também pergunto: "Quem não sonhou ter um Mac OSX da Apple? (com certeza é um sonho de todo informata e intusiastas)...

No fantástico mundo de Bob do linux podemos brincar de parecer Mac com uma infinidade de temas para o desktop, e convenientemente, com uma barra de atalhos que consegue fantasiar o dock do Mac OSX, inclusive, com recursos em 3 dimensões e totalmente configurável...

Então vamos aprender a instalar no nosso Ubuntu Bob o Cairo-Dock (uma barra de atalhos animada com vários temas e plugins). Para isso vamos ter que baixar os pacotes .deb (existem também em outros pacotes para outras distros), já que não é possível encontrar o Cairo-Dock nos repositórios do Ubuntu 8.04... Então acesse a página http://developer.berlios.de/project/showfiles.php?group_id=8724 e baixe os seguintes pacotes:

- cairo-dock-plug-ins_(versao).deb
- cairo-dock_(versao).deb

Lembrando que deve respeitar a arquitetura do seu SO (32 ou 64 bits)...

Para instalar, clique normalmente nos pacotes .deb baixados para instalar, sendo que primeiro deverá executar a instalação do cairo-dock, propriamente dito, depois dos plug-ins, e depois do getlibs; automaticamente serão baixadas as dependências que porventura lhe faltem no sistema... Para fazer isso no terminal, execute :

# sudo apt-get -y install libglitz-glx1 libglitz1
# cd /onde/salvei/os/pacotes/do/cairo
# sudo dpkg -i cairo-dock*.deb
# sudo apt-get install -f

O Cairo-Dock precisa do suporte ao compositing e o Ubuntu 8.04 possui esse suporte no metacity, sem a necessidade de estar rodando o Compiz para executar corretamente o Cairo-Dock, ao contrário das versões anteriores e de outras distros; porém é preciso ativar esse suporte; contudo, é só executar o seguinte comando no terminal:

# sudo gconftool-2 --type bool --set "/apps/metacity/general/compositing_manager" "true"

Agora é só acessar o Cairo-Dock e configurar a exibição da barra pelo lançador no menu "Aplicações > Ferramentas do Sistema > Cairo-Dock"...
Escolha o tema do MacOSX (conforme prometemos no título do post, rsrs) na guia Themes e habilite as opções “Use the new theme’s behaviours” e “Use the new theme’s lauchers” para não manter as caracteristicas de temas anteriores...

ubuntuparadise-cairodock-selecionar-tema.png

Além disso você poderá configurar onde vai aparecer a barra, se ela vai se esconder quando abrir uma janela, se vai ficar sempre visível, e outras várias possibilidades.

Finalizando, para manter o Cairo-Dock carregado sempre que iniciar o sistema, acesse o lançador no menu "Sistema > Preferencias > Sessões", e adicione a inicialização do Cairo-Dock clicando no botão “Adicionar” e preenchendo os campos nome e comando com o termo cairo-dock (exatamente como está escrito).

Imagine! Invente!

Refinando os pacotes Java no Ubuntu 8.04

Que maravilhosa surpresa ao sentir o conforto do meu pc no gerenciamento de memória do Firefox em sua nova versão (3.0 - não tão nova assim). E o que dizer da união do Ubuntu 8.04 com esse Firefox então? - São cachorros grandes nessa briga!
Como nem tudo são flores, mesmo se falando do Ubuntu (rsrsrsrs), logo notei alguns conflitos da versão do pacote java com a renderização das páginas, e o pior, não consegui mais acessar minha conta no Banco do Brasil, como sempre fiz... Claro que fiquei com raiva... Foi como se tivesse sido desafiado, rsrsrsrs... Entrei no Synaptic e descobri que os cujos da Canonical mudaram os pacotes java dos repositórios; e até hoje me pergunto o por que...
O que fiz?
Com o Synaptic aberto, desmarquei todos os pacotes que se referiam ao icedtea e gcj, e de quebras os pacotes do OpenJDK, e tão somente marquei para instalação os oficiais pacotes da sun:
- sun-java6-bin
- sun-java6-jre

- sun-java6-plugin

- e, de quebra, sun-java6-jdk
Então esperei até concluir o download e pronto!
Reiniciei o Firefox 3 e lá estava o bom e velho java applet da sun rodando perfeitamente...
Aconselho a todos a fazerem isso, inclusive aos desenvolvedores java, porque há fortes relatos de que esses pacotes intrusos nos repositórios do Ubuntu estão lerdando as aplicações java e causando bugs alheios...
Dá-lhe!

Exibindo, Gravando e Recuperando Imagens em Banco de Dados com JAVA

Após quase três dias de tentativas consegui realizar o que o título deste post promete com total equilibrio... E só então, depois de pronto, percebi o quanto é facil fazer isso, rsrsrsrs (se tivesse descoberto antes, talves tivesse dado menos patadas nas pessoas e teria ajudado alguns idosos a atravessarem a rua ao invés de empurrá-los, rsrsrs, brincadeira)...
Neste post, usando swing, para aplicações desktop, vamos aprender a selecionar um arquivo de imagem alocado numa pasta do sistema, com iteração do JFileChooser (responsável por obter o path do arquivo no filesystem), visualiza-lo num JPanel adicionado no formulário, trasformar essa imagem num array de bytes, jogar esse array de bytes num campo do banco de dados do tipo BLOB ou LONGBLOB (ou ByteA, caso esteja usando PostgreSQL) e então recuperar o array de bytes transformando-o em imagem novamente para a visualização quando requerida...
Primeiro, criamos uma classe para subscrever o método paitComponet() do JPanel setando a imagem a ser pintada (essa classe foi contribuição do amigo ViniGodoy do fórum do GUJ. Apenas acrescentei duas funcionalidades, criando um cálculo para redimensionamento da imagem, respeitando o aspect ratio da mesma, comparado às dimensões do JPanel)...

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.TexturePaint;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class ImagePanel extends JPanel {
private BufferedImage image = null;
// Abaixo você define como a imagem será pintada no JPanel...
// Nesse caso, o padrão é o redimensionamento da imagem calculando
// o ASPECT RATIO da mesma e centralizando-a no JPanel...
private FillType fillType = FillType.ASPECT_RATIO_CENTER;

public ImagePanel(BufferedImage img) {
setImage(img);
}

public ImagePanel(File imgSrc) throws IOException {
this(ImageIO.read(imgSrc));
}

public ImagePanel(String fileName) throws IOException {
this(new File(fileName));
}

public final void setImage(BufferedImage img) {
if (img == null) JOptionPane.showMessageDialog(null,
"Sem imagem para processar!");
this.image = img;
invalidate();
}

public void setImage(File img) throws IOException {
setImage(ImageIO.read(img));
}

public void setImage(String fileName) throws IOException {
setImage(new File(fileName));
}

public BufferedImage getImage() {
return image;
}

protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
fillType.drawImage(this, g2d, image);
g2d.dispose();
}

public FillType getFillType() {
return fillType;
}

public void setFillType(FillType fillType) {
if (fillType == null) JOptionPane.showMessageDialog(null,"Saída inválida!");
this.fillType = fillType;
invalidate();
}

public static enum FillType {
// redimensiona a imagem para a dimensão do JPanel...
RESIZE {
public void drawImage(
JPanel panel, Graphics2D g2d, BufferedImage image) {
g2d.drawImage(image, 0, 0, panel.getWidth(), panel.getHeight(), null);
}
},
// mantém o tamanho natural da imagem e a centraliza no JPanel...
CENTER {
public void drawImage(
JPanel panel, Graphics2D g2d, BufferedImage image) {
int left = (panel.getHeight() - image.getHeight()) / 2;
int top = (panel.getWidth() - image.getWidth()) / 2;
g2d.drawImage(image, top, left, null);
}
},
// caso a imagem seja menor que o JPanel, a coloca lado a lado...
SIDE_BY_SIDE {
public void drawImage(
JPanel panel, Graphics2D g2d, BufferedImage image) {
Paint p = new TexturePaint(
image, new Rectangle2D.Float(
0, 0, image.getWidth(), image.getHeight()));
g2d.setPaint(p);
g2d.fillRect(0, 0, panel.getWidth(), panel.getHeight());
}
},
// calcula o aspect ratio da imagem e a pinta no JPanel no eixo (0,0)...
ASPECT_RATIO {
public void drawImage(
JPanel panel, Graphics2D g2d, BufferedImage image) {
int larguraImg = image.getWidth();
int alturaImg = image.getHeight();
int largura = 0, altura = 0;
double aspectoImg =
(double) larguraImg / (double) alturaImg;
double aspectoPanel =
(double) panel.getWidth() / (double) panel.getHeight();

if (larguraImg > panel.getWidth() || alturaImg > panel.getHeight()) {
if (aspectoImg == aspectoPanel) {
largura = panel.getWidth();
altura = panel.getHeight();
}
if (aspectoImg > aspectoPanel) {
largura = panel.getWidth();
altura = (largura * alturaImg) / larguraImg;
}
if (aspectoImg <> altura = panel.getHeight();
largura = (altura * larguraImg) / alturaImg;
}
}
else {
largura = image.getWidth();
altura = image.getHeight();
}
g2d.drawImage(image, 0, 0, largura, altura, null);
}
},
// calcula o aspect ratio da imagem e a pinta no JPanel, centralizando-a...
ASPECT_RATIO_CENTER {
public void drawImage(
JPanel panel, Graphics2D g2d, BufferedImage image) {
int larguraImg = image.getWidth();
int alturaImg = image.getHeight();
int largura = 0, altura = 0;
double aspectoImg =
(double) larguraImg / (double) alturaImg;
double aspectoPanel =
(double) panel.getWidth() / (double) panel.getHeight();

if (larguraImg > panel.getWidth() || alturaImg > panel.getHeight()) {
if (aspectoImg == aspectoPanel) {
largura = panel.getWidth();
altura = panel.getHeight();
}
if (aspectoImg > aspectoPanel) {
largura = panel.getWidth();
altura = (largura * alturaImg) / larguraImg;
}
if (aspectoImg <> altura = panel.getHeight();
largura = (altura * larguraImg) / alturaImg;
}
}
else {
largura = image.getWidth();
altura = image.getHeight();
}
int left = (panel.getHeight() - altura) / 2;
int top = (panel.getWidth() - largura) / 2;

g2d.drawImage(image, top, left, largura, altura, null);
}
};

public abstract void drawImage(
JPanel panel, Graphics2D g2d, BufferedImage image);
}
}

Agora vamos implementar o procura do arquivo de imagem no filesystem e a visualização no JPanel. Para isso, vamos usar o JFileChooser (com a dica de como eu adicionei um preview ao JFileChooser para pré-visualizar as imagens enquanto procura a desejada, facilitando a procura).
Criaremos uma classe responsável por pré-visualizar os arquivos de imagem dentro do JFileChooser, a saber...

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFileChooser;

public class ImageFileChooser extends JComponent implements
PropertyChangeListener {
ImageIcon painelImagem = null;
File arquivo = null;

public ImageFileChooser(JFileChooser fc) {
setPreferredSize(new Dimension(170,230));
fc.addPropertyChangeListener(this);
}

public void loadImage() {
if (arquivo == null) {
painelImagem = null;
return;
}
ImageIcon img = new ImageIcon(arquivo.getPath());
if (img != null) {
if (img.getIconWidth() > 170) {
painelImagem = new ImageIcon(
img.getImage().getScaledInstance(170, -1, Image.SCALE_DEFAULT));
}
else painelImagem = img;
}
}

public void propertyChange(PropertyChangeEvent e) {
boolean atualizar = false;
String propriedades = e.getPropertyName();
if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(propriedades)) {
arquivo = null;
atualizar = true;
}
else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(propriedades)) {
arquiv0 = (File) e.getNewValue();
atualizar = true;
}
if (atualizar) {
painelImagem = null;
if (isShowing()) {
loadImage();
repaint();
}
}
}

protected void paintComponent(Graphics g) {
if (painelImagem == null) loadImage();
else {
int x = getWidth()/2 - painelImagem.getIconWidth()/2;
int y = getHeight()/2 - painelImagem.getIconHeight()/2;
if (y < y =" 0; }
}
}

No evento ActionPerformed do botão de "procurar" a imgem, inicie o JFileChooser...

// instancie os seguintes tipos depois de importar as bibliotecas...
private ImageFileChooser imagePrev = null;
private JFileChooser fc = new JFileChooser();
private ImagePanel quadroImagem = null;
private BufferedImage img;
//(...)
private void btnProcurarActionPerformed(java.awt.event.ActionEvent evt) {
if (imagePrev == null) imagePrev = new ImageFileChooser(fc);
// adiciona a nova funcionalidade de preview...
fc.setAccessory(imagePrev);
if (fc.showOpenDialog(this) == JFileChooser.CANCEL_OPTION) return;
try{
// cria um objeto do tipo BufferedImage do arquivo selecionado...
img = ImageIO.read(new File(fc.getSelectedFile().getAbsolutePath()));
// inicia o processo para reescrever o método paintComponent do JPanel...
if (quadroImagem == null) quadroImagem = new ImagePanel(img);
quadroImagem.setImage(img);
painelImagem.add(quadroImagem);
painelImagem.repaint();
painelImagem.validate();
}
catch (IOException e) {
JOptionPane.showMessageDialog(this, "Não foi possível ler a imagem!");
}
}

Pronto! Imagem visualizada no JPanel com sucesso!
E então vamos transformar essa imagem selecionada em um array de bytes (um monte de bytes que compõe o arquivo) e gravá-lo no banco de dados, implementando um método de persistência com PreparedStatement...

private void incluirRegistro() {
try {
conexao.conectar();
PreparedSatement pstmt = conexao.con.prepareStatement(
"Insert into Imagens (Imagem_Img) Values (?)");
// já temos a imagem transformada numa BufferedImage, então é só convertê-la
// em array de bytes (tipo JPG)...
ByteArrayOutputStream bytesImg = new ByteArrayOutputStream();
ImageIO.write((BufferedImage)img, "jpg", bytesImg);
bytesImg.flush();
byte[] byteArray = bytesImg.toByteArray();
bytesImg.close();
// agora é só jogar no banco de dados...
pstmt.setBytes(1, byteArray);
pstmt.executeUpdate();
pstmt.close();
}
catch (IOException ex) {
Logger.getLogger(Logomarcas.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(this, "Não foi possível processar a imagem!");
}
catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "Falha na inclusão do registro!");
}
finally {
conexao.desconectar();
}
}

Ótimo! Já que geramos uma BufferedImage para trabalharmos com a imagem selecionada do filesystem então vamos gerar outra para visualizarmos a imagem selecionada no banco de dados (gravada como array de bytes)...

private void visualizarRegistroSelecionado() {
// você pode implementar qualquer forma para identificar o registro na tabela,
// porém vamos simplificar aqui fixando o ID 20, considerando ID como
// chave primária da tabela de imagens...
try {
conexao.conectar();
Statement stmt = conexao.con.createStatement();
ResultSet rs = stmt.executeQuery("Select * from Imagens where ID = 20");
if (rs.next()) {
// recuperamos o array de bytes convertendo-o numa BufferedImage (img)...
img = ImageIO.read(new ByteArrayInputStream(rs.getBytes("Imagem_Img")));
// e então adicionamos essa BufferedImage para ser pintada no JPanel de visualização...
if (quadroImagem == null) quadroImagem = new ImagePanel(img);
quadroImagem.setImage(img);
painelImagem.add(quadroImagem);
painelImagem.repaint();
painelImagem.validate();
}
rs.close();
stmt.close();
}
catch (IOException ex) {
Logger.getLogger(Logomarcas.class.getName()).log(Level.SEVERE, null, ex);
}
catch (SQLException e){
e.printStackTrace();
}
finally {
conexao.desconectar();
}
}

Abrindo arquivos .cdr (Corel Draw) no Inkscape

Preciso confessar um pecado...
"Sempre praguejei o linux por não abrir arquivos .cdr, nativos do Corel Draw!"
Foi aí, então, que resolvi fazer uma última tentativa de abrir um arquivo .cdr o qual precisava muito ao menos visualizar... Dei uma googlada, como costume de todos os internautas, e achei uma notícia maravilhosa! A nova versão do Inkscape (programa livre para desenhos vetoriais, no estilo Corel Draw) pode abrir arquivos .cdr e trabalhar com eles como formato nativo, ou seja, você não vai precisar importar nem exportar para que o Corel Draw volte a reconhecer o arquivo nativamente... Tudo isso graças a um novo utilitário chamado UniConvertor, capaz de integrar ao Inkscape as funcionalidades necessárias para editar diversos tipos de arquivos extendidos do Corel Draw desde a versão 7 até a recente X4, e ainda abrirá arquivos do Adobe Illustrator com base PostScript...
Então vamos instalar!
Primeiro certifique-se de que seu Inkscape esteja devidamente instalado... Caso não esteja, existem pacotes do Inkscape em praticamente todos os tipos de pacote linux, e você poderá ainda encontrá-lo facilmente nos repositórios das principais distros...
E então baixe o UniConvertor do site do projeto clicando aqui, com preferência para a última versão, e instale-o normalmente... Enquanto escrevo este post ele se encontra na versão 1.1.2, com pacotes de instalação em RPM e .EXE (para a versão do Inkscape for Windows)...
Depois da instalação não notará qualquer mudança expressiva no sistema, porém agora seu Inkscape poderá abrir arquivos .cdr e outros proprietários nativamente! Sem maior segredo! Só iniciar o Inkscape e trabalhar com a nova gama de arquivos!
Usem e abusem!