domingo, 13 de setembro de 2009

Redimensionando Image no java

Esses dias eu precisei alterar a escala de algumas dezenas de imagens JPG.

Pra fugir do trabalho braçal de entrar uma a uma, procurei na Internê alguma coisa que me ajudasse, ligado a classe Image do Java, e achei algo parecido com isso aqui logo abaixo.

Essa receita de bolo lê o arquivo original, cria um buffer com a escala desejada da imagem, "redesenha" e grava a imagem na escala nova. Simples, mais ou menos rápido e sem muitas complicações!

// Pode ser um item de um array de nomes de arquivos de um diretorio
File meuArquivo = new File(nomeOrigem);

// O novo arquivo tem tamanho de 523 x 393
Image arquivoNovo = ImageIO.read(meuArquivo)
.getScaledInstance(523, 393,Image.SCALE_SMOOTH);


BufferedImage bim = new BufferedImage(523, 393, BufferedImage.TYPE_INT_RGB);

bim.createGraphics().drawImage(arquivoNovo, 0, 0, null);

FileOutputStream fos = new FileOutputStream(nomeDestino);

ImageIO.write(bim, "jpg", fos);

fos.close();


quinta-feira, 25 de junho de 2009

Thriller

"Darkness falls across the land
The midnight hour is close at hand
Creatures crawl in search of blood
To terrorize y'all's neighborhood
And whosoever shall be found
Without the soul for getting down
Must stand and face the hounds of hell
And rot inside a corpse's shell..."

Tosco. Mas sensacional.

Que merda.

:(


domingo, 14 de junho de 2009

Mudança de ares

Boas!

Pois bem, depois de mais de 2 anos e meio, vamos mudar de ares e montar a barraca em outro lugar. Vou trabalhar mais, em um lugar mais agitado, com mais incêndios e remuneração semelhante.

Louco? Pode ser. Vou me arrepender? Com certeza, em 15 dias estarei nervoso dirigindo na marginal xingando tudo e todos.

Mas e daí? A monotonia é como um vicio: o periodo de desintoxicação é complicado, triste, mas necessário.

Outro dia estava dizendo que parecia um cachorro São Bernardo vivendo em uma varanda de um pequeno apartamento. O São Bernardo pode ser bem alimentado e cuidado, mas continua sendo um cachorro grande com pouco espaço.

Depois de 10 anos de profissão, o espaço ganha uma determinada importância. Na minha concepção, pelo menos. Eu sei que muita gente por ai não faz a menor questão de se incomodar com a varanda e vive muito bem assim. Só posso ter inveja. As moléculas da minha consciência são instáveis demais para isso. (entenda-se: não consigo me conformar em só apertar os mesmos parafusos dia a pós dia, mesmo que isso me dê um bom retorno financeiro).

Li em algum lugar que quando você percebe que sua presença não faz a menor diferença, é hora de mudar. E para o meu trabalho não fazia diferença fazia semanas, meses.

É isso. Tô triste pra burro de deixar muitas pessoas legais. Mas quem disse que isso é uma despedida? Não é tão fácil assim se livrar de um andreense chato! :)

Já escrevo pouco aqui, e provavelmente escreverei menos ainda. Agora a presença no twitter talvez seja mais constante, pensar em 140 caracteres é menos complicado! :)

Até!


PS. Não passem vontade, visitem o site deliciando.com.br e mandem emails com seus pedidos. Volta e meia teremos novidades por lá! :D

domingo, 31 de maio de 2009

Falando em Java 2009 - eu fui também, mas...

Boas!

Uma semana depois, deixo aqui minhas impressões sobre o FJ09.

Na verdade, isso aqui é uma cópia do que está escrito lá no tópico do GUJ, que aliás passa mais informações de como foi o evento. Mas vamos lá.

Eu achei o evento como um todo nota 7,25... ou seja, mais ou menos.

Em relação a parte estrutural, nota 9,5. Estava muito boa - um local grande, de fácil acesso pelo metrô. A comida estava ótima e em boa quantidade pra todo mundo, apesar do pequeno tumulto para pegar. Tradução simultânea, boa quantidade de brindes, e o brinde final muito cobiçado. Além do coquetel de encerramento. No meu entendimento, isso tudo aí faz parte do retorno por ser um evento pago. Assim, os R$ 90 tiveram um bom retorno. Mas...

As palestras deixaram um pouco a desejar. Nota 5. Deu a impressão em alguns momentos que uma pessoa fez a palestra e outra escreveu o titulo, porque os assuntos não estavam conectados. A palestra de Seam/WebBeans foi a que eu mais gostei, a mais dinâmica de todas. A de VRaptor 3 foi que a menos me interessou, achei muito code-based - mas depois cheguei a conclusão que não tinha como ser muito diferente. A que mais me decepcionou foi a "Para onde vai a plataforma Java", esperava mais assunto.

Além de tudo, houve também problemas com tempo, mas isso acaba meio que sendo normal (mas não deveria).

E a propósito, a expressão "eventos são grande coffe-breaks cercados por palestas", e suas variantes, são copyrighted by eu mesmo. Os meus advogados entrarão em contato com os representantes da empresa para as devidas providências. :)

Até!


sexta-feira, 22 de maio de 2009

Guerrilha SOA

Boas!

Domingo tem a edição 2009 do Falando em Java, e enquanto não chega, vale a pena ver essa palestra no InfoQ do Alexandre Gomes, sobre SOA:

http://www.infoq.com/br/presentations/guerrilha-soa

Isso porque domingo o próprio Jim Webber vai ser o keynote speaker e vai falar justamente sobre Guerrilha SOA.

Pela palestra do Alexandre, que leva o mesmo nome não por acaso, parece uma abordagem interessante de um assunto que, convenhamos, normalmente é pedante!!!.

Até lá!



PS. Em tempo, valeu pelo link, X1! :)

domingo, 17 de maio de 2009

OpenTDC 2009 - eu fui!

Boas!

Hoje foi OpenTDC 2009, e, bem, como disse o Cláudio Teixeira, tem que ser nerd mesmo pra estar num domingo de sol vendo palestra de gente feia - e o "gente feia" eu que digo mesmo :D.

Gente feia mas com muita informação pra passar. Vamos lá.

Bem, domingão de manhã com frio é meio dificil inicializar, então cheguei um pouco atrasado e já estava rolando a palestra de Robótica Open-Source, na verdade um bate papo recheado a vídeos com o Paulo Santos e o Vinicius Senger. Eu não vi desde o começo, mas do que eu peguei, achei apenas razoável. Vídeos com robozinhos e explicações de que "dá pra fazer isso e aquilo" com o Arduino. Legalzinho.

Veio o coffe-break, simples mas em boa quantidade para todo mundo. Como eu já disse, eventos assim na verdade são coffe-breaks onde por um acaso tem palestras ao redor. :)

Depois veio a palestra do Vinicius e do Spock, sobre Arquiteturas, com JSF Seam e Spring. Eu gostei bastante principalmente a primeira parte do Vinicius, que fez um discurso sobre complexidade desnecessária e opiniões radicais. Particularmente, me senti em casa quando ele disse que as pessoas estão complicando demais coisas simples, arquiteturando (?) demais projetos em que não há necessidade disso. E aí quem começa agora com Java acha tudo muito complicado, e acaba desistindo e investindo noutra linguagem. É o que eu tenho pensado já faz um tempo, as pessoas estão complicando demais, dando voltas demais, colocando camadas demais em tudo. Uma chatice.

Almoço no Burger King, e aí uma nota mental: não pegar um Whopper Duplo se você tiver alguma coisa pra fazer depois. É bom, MUITO bom, mas pesa demais!

A palestra depois do almoço veio com aquela coisa, "putz, vai dar mó sono". Que nada, e aí não sei se proposital ou não, mas o Claudio
Teixeira fez uma apresentação bem descontraída sobre Agile, e deu pra dar umas boas risadas e ficar acordado. Agile já é um assunto bem difundido e discutido, mas houve alguns bons detalhes sobre XP e Scrum que foram aproveitados. Sempre tem alguma coisa pra pegar, principalmente desses caras que estão no mercado a um bocado de tempo apanhando. E Loan pra mim foi novidade, conhecia apenas pelo nome. Foi só a introdução da tarde, porque depois veio a palestra de...

Java e TV Digital, com Dimas Oliveira.

Eu nunca tinho visto ou ouvido falar do sujeito. No final da palestra, meu cumprimento para ele foi assim: "você entende muito do assunto, sua palestra foi bem legal, mas você é chato!". E ele concordou, "sou chato mesmo, mas a chatice faz parte do processo". Eu também acho isso, melhor ser chato e ter alguma coisa pra passar, do que ser sorridente, simpático e vazio. O Dimas fez uma palestra sobre um assunto bem interessante e, aparentemente, que saiu do forno praticamente a pouco tempo e tende a gerar um bom mercado pelos próximos 3, 4 anos.

Pra falar a verdade, eu não saberia resumir muito bem o assunto sem cometer alguma gafe. Preciso olhar novamente os slides e usar um pouco o Google pra evoluir as idéias. Mas houve uma explicação sobre os padrões, sobre especificação, sobre o Ginga e sobre a gente mesmo. A idéia foi mais ou menos assim, "o mercado tá servindo isso (desenvolvimento para a TV Digital) de bandeja pra vocês, e aí, vamos investir?". Deu vontade.

Depois de outro coffe-break bem servido (apesar do
Whopper ainda se manifestar), veio o painel sobre as tecnologias RIA, JavaFX (Mauricio Leal), Flex (Rafael "entrei para as estatísticas" Nunes) e GWT (Eder Magalhães). Dos três, o que eu não conhecia era o GWT, mas talvez tenha sido pouco tempo para apresentar tanto assunto. Eu conheço muito pouco sobre desenvolvimento de interfaces, mas principalmente o GWT me passou uma impressão de "putz, como é fácil fazer isso hoje em dia". JavaFX eu já tinha brincado um pouco, e tinha visto recentemente uma palestra com bastante discussão sobre Flex, com o sr. Batata! :) Os três mandaram bem, fim do evento e da tarde de um domingo frio, com tempo limitado, queria o quê, velhinho? Só pra quem é bom.

Enfim, a impressão geral é que foi um evento muito bom, principalmente por ser gratuito. Superou as espectativas, hoje de manhã eu estava achando que depois do almoço estaria em casa se estivesse chato. Mas tudo foi muito bem.

Parabéns aos organizadores! E domingo que vem tem mais!

Até


sábado, 2 de maio de 2009

O exemplo da Amazon

Ando em um surto de mal atendimento nos últimos meses. De todo tipo.

Banco, Telefônica, cartão, Telefônica, Eletropaulo, Telefônica, Submarino, Speedy, etc e tal. Um inferno astral ligado a overdose de atendimento de nível 1.

Certo. Então, mês passado fiz minha primeira compra na Amazon, um livro chamado "The Pragmatic Programmer". A Amazon te oferece três tipos de entrega, em resumo, uma rápida, uma mais ou menos rápida e a padrão, a tal "Standard International Shipping". Escolhi essa última, não tinha pressa para ter o livro e era mais barata. Pois bem, pacote enviado dia 20 de Março, previsão de entrega dia 24 de Abril.

Dia 26 de Abril e meu livro ainda não tinha chegado. Pensei, "até lá?". Mandei um email via site com meu inglês macarrônico perguntando aonde estava minha entrega e, pasmem: uma resposta quilométrica chegou em menos de 12 horas (conforme o próprio site promete), com uma série de explicações sobre o procedimento de entrega, pedidos de desculpas (até exagerados), e solicitando que eu aguardasse até dia 12 de Maio, pois caso eles enviassem outra vez o pedido, poderia chegar dois, e eu teria dor de cabeça para devolver um deles.

Agora o mais inacreditável: sem eu pedir ou reclamar, no email eles informam que iriam reembolsar os quase 10 dólares do frete, para compensar o problema. Não acreditei.

Dois dias depois, estava lá no site a indicação de refund, a devolução no meu cartão dos quase 10 dólares.

O livro chegou 5 dias atrasado, e enviei outro email para confirmar a entrega e sugerindo que eles cobrassem novamente o valor do frete, afinal um atraso de 5 dias em 35 não era algo de outro mundo, e além do que, o atendimento deles tinha sido muito bom. De novo, outro email de resposta em menos de 12 horas, agradecendo pelo meu aviso, e de novo reportando que o reembolso ficaria pela incoveniência.

Foi minha primeira compra na Amazon, e a impressão que ficou foi muito boa. Pode até ser que eles façam caca nas próximas, ou que outras pessoas tenham lá as suas reclamações sobre a empresa.

Mas de qualquer forma, ESSE atendimento foi muito bom. E deveria servir de exemplo para o povo do "nivel 1 de atendimento" das empresas que atuam por aqui.

Até!

sexta-feira, 1 de maio de 2009

Torero e as comemorações

Eu tinha prometido pra mim mesmo escrever bem menos sobre o Santo André aqui, tem gente melhor pra isso e, além do quê, nem começou o Brasileiro ainda.

Mas isso é impagável. O Torero andou perguntando aos frequentadores do seu blog como eles comemoram os títulos e, bem, coloquei lá o que eu já fiz, de boa.

E hoje...

Blog do Torero - O dia mais feliz do ano

http://blogdotorero.blog.uol.com.br/arch2009-05-01_2009-05-31.html#2009_05-01_09_32_10-10024933-0

"... Mas há vários jeitos de comemorar o dia mais feliz do ano.

Um dos mais comuns é a incontinência verbal. Tem gente que grita, fala besteira e até xinga o narrador da tevê, como o André Barbosa. Quando seu Santo André ganhou a Copa do Brasil, ele disse que comemorou xingando, “mas xingando MUITO o Galvão Bueno, que estava fazendo uma narração claramente flamenguista. Fiquei xingando e fazendo gestos a la Cristian pra TV, que morreria de vergonha se tivesse alguma!”... "


O texto todo é bacana, visite o blog do Torero para ler tudo, vale a pena!

Até

quinta-feira, 30 de abril de 2009

Open TDC 2009

Olha, mais um evento legal!

O Open TDC (the developers conference) é um evento organizado pela Globalcode, e será realizado dia 17 de maio, domingo.

Corra que as inscrições são limitadas, afinal, é um evento de alto nível e gratuito.

O quê? Open TDC 2009
Quando? 17/05/2009, domingão o dia todo
Quanto? De graça!
Onde? Universidade Anhembi Morumbi - Campus Vila Olímpia

Abraço!

segunda-feira, 27 de abril de 2009

JMS: um pouco sobre alguma coisa a respeito!

Boas!

Onde trabalho, uma vez por semana algum funcionário/consultor/estagiário sempre (ou quase sempre) apresenta uma palestra sobre algum assunto de interesse técnico. Um esquema para diluir o conhecimentos entre os profissionais de TI. Um salve para o criador!

Enfim, a algumas semanas tive o prazer de falar sobre TDD, e a alguns dias foi minha vez de falar sobre JMS, mesmo sem quase domínio algum do assunto.

O bom dessas palestras é que você acaba sendo um pouco forçado a se aprofundar no tema, e, bem, literalmente me enfiei na fila. Como não tenho paciência para fazer apresentações bem acabadas como o Casca e o Sakurai, então vai no "teclador" mesmo um resumão sobre JMS, o assunto mais fresco na memória.

JMS, ou Java Message Service, é uma API para troca de mensagens entre aplicações baseadas na J2EE. JMS serve basicamente para largar alguma coisa lá rodando e ir fazer outra coisa. Algo como deixar aquele download de 700MB rolando na sua conexão de 128k: você larga e vai assistir TV.

Em tudo que é artigo sobre JMS vão falar sobre point-to-point e publish-subscribe, os tais paradigmas. No primeiro, a mensagem é enviada apenas para UM consumidor, através de uma fila (Queue). No segundo, um tópico (Topic) é publicado e vários assinantes -subscribers- podem consumir a mensagem. Em ambos os casos, quem gera a mensagem é chamado de produtor (Producer). Quem recebe é chamado de consumidor (Consumer).

Mas espera um pouco, o que é a tal da "mensagem"? Tecnicamente, qualquer sequencia de bytes serializável. Um texto, um objeto qualquer, um stream de primitivos, bytes a esmo.

Outro termo que aparece o tempo todo é MOM - Message-Oriented Middleware. O MOM é o serviço central de mensagens, na prática, o software que você está usando para administração dos canais. Existem MOMs para todos os gostos, JBoss MQ, IBm MQSeries, BEA Weblogic, and so on.


Exemplo de código de um Queue Producer. Os códigos estão mal formatados porque não sei ainda como formata código decentemente aqui, mas vá lá.

...
InitialContext ctx = new InitialContext(...);

Queue queue = (Queue) ctx.lookup("queue/MyQueue");

QueueConnectionFactory factory =
(QueueConnectionFactory) ctx.lookup("ConnectionFactory");


QueueConnection cnn = factory.createQueueConnection();

QueueSession sess =
cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);


/* Objeto que implementa Message: BytesMessage, MapMessage, ObjectMessage, StreamMessage, TextMessage */
TextMessage msg = sess.createTextMessage("Mensagem 1!!");

QueueSender sender = sess.createSender(queue); sender.send(msg);
...



Exemplo de código de Topic Producer :

...
InitialContext ctx = new InitialContext(...);

Topic topic = (Topic) ctx.lookup("topic/MyTopic1");

TopicConnectionFactory factory =
(TopicConnectionFactory) ctx.lookup("ConnectionFactory");


TopicConnection cnn = factory.createTopicConnection();

TopicSession sess =
cnn.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);

TextMessage msg = sess.createTextMessage("Uma mensagem");

TopicPublisher sender = sess.createPublisher(topic);

sender.send(msg);
...


A estrutura de ambos seguem um mesmo padrão: localizar o destino (fila/tópico), localizar uma fábrica de conexões, criar uma conexão, criar uma sessão e, com a sessão e o destino "em mãos", enviar a mensagem! Como é um padrão, você pode criar algum método utilitário (algumas pessoas acham pecado usar o termo "método utilitário", mas é isso aí mesmo), numa classe tipo ServiceAlgumaCoisaLocator.


Para falar de Consumer, vamos ver um pouco sobre MDB (Message-Driven Beans). Um MDB é um bean que permite processar mensagens de forma assíncrona, e funciona como um message listener (implementa javax.jms.MessageListener).

Os clientes não acessam MDBs diretamente, e se parece muito com um Session bean: não pode conter estado, as instâncias são equivalentes, e o contêiner pode gerenciar um pool de MDBs.

Trecho de código exemplo de MDB (EJB 3.0):

@MessageDriven(
activationConfig =
{ @ActivationConfigProperty(
propertyName = "destinationType",

propertyValue = "javax.jms.Queue"),

@ActivationConfigProperty(
propertyName = "destination",

propertyValue= "queue/MyQueue")

})


public class TesteMessage1 implements MessageListener {
public TesteMessage1() { }

public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
System.out.println(((TextMessage)message).getText());
}

}
catch (JMSException e) { ... }
}
}


Em relação ao JMS, algumas vantagens:

- Escalabilidade: na teoria (como tudo), é só aumentar os servidores, não precisa mexer nos componentes;
- Comunicação assincrona: componentes podem fazer outras tarefas enquanto largam algum trabalho na fila;
- Desacoplamento: todas as partes trabalham com a mesma interface; não é preocupação dos componentes a qualidade do serviço e sim do MOM;
- Flexibilidade: tudo que circula é mensagem, se os componentes entendem, o resto não importa.


E algumas desvantagens:

- Camadas adicionais para repasse de mensagens;
- Centralização pode levar a falhas no sistema todo!
- O consumidor precisa do instanceof pra identificar o tipo da mensagem. Éca! :)


Isso aí, foi só uma pequena pincelada sobre JMS! Quando estiver com paciência, escrevo sobre a palestra de TDD, que é um assunto bala também!

Um agradecimento pra todos que me deram dicas sobre o assunto!

Até!

terça-feira, 14 de abril de 2009

Falando em Java 2009

Ôpa, evento a vista!

Confesso que faz tempo que não vou em evento nenhum. Teve uma época que frequentei alguns, até conheci várias pessoas interessantes que converso até hoje, mas sei lá, por um tempo perdi o entusiasmo sobre palestras e discussões sobre o mais do mesmo.

Mas como esse ano meu lado IT Specialist voltou a tona (aliás, anda bem agitado), eu já me inscrevi no dito cujo. A trupe do evento é muito boa, e normalmente os coffe-breaks também são.

(tenho uma teoria de que eventos são pagos por causa dos coffe-breaks, com palestras gratuitas ao redor)

O que está esperando? R$ 95 a inscrição, mas tem uma mamata pra ex-alunos e empresas!

O Falando em Java 2009 ocorrerá no dia 24 de maio (Domingo) no Espaço Hakka São Paulo.

Até!

domingo, 12 de abril de 2009

e: A História de um Número

"O número governa o Universo" (Lema dos Pitagóricos)


e: A História de um Número - Eli Maor
ISBN: 9788501058478
Editora Record

Acabei de "ler" esse livro, e confesso que comprei pela capa e pelo título. Ou então vi alguma indicação em algum site sobre matemática, não sei ao certo.

Ando numa fase voltada a minha raiz exata - minha formação de Bacharel em Matemática às vezes vem à tona. Gosto de ciência "pura", e acho que cada dia mais a dita "educação" aqui no Brasil - ou no Brasil ao meu alcance ao menos - está ficando cada vez mais longe das ciências puras.


Enfim, o livro é bem interessante, mas sem ilusões, se você não gosta de Matemática vai aproveitar menos de 50% da obra. Se você gosta e não entende muito vai aproveitar um pouco mais. Se você entende bastante, vai se divertir. Eu estou ali na casa dos que entendem uns 70%.

O autor conta a história da constante matemática 'e'. De carona, bastante da história da matemática, desde os antepassados gregos até meados de 1900. E aí que está o ponto interessante, ele explica como os pesquisadores chegaram a certas conclusões, porque existe limite, derivada, e exemplos práticos de onde usar essas "coisas".

No curso de matemática (pelo menos os que participei), os professores explicam muito pouco os porquês das coisas, e nisso esse livro é legal, até para aqueles que vão entender 50% ou menos. Eu acho interessante estudar a história dos caras, de onde surgiram as ideias e teorias, mesmo que não entenda bulhufas dos x´s, y´s e números transcendentais (que não tem nada de místicos, são números que transcendem - vão além - do reino dos números algébricos[p.247]).

Boa leitura. E, bem, boas contas!

quinta-feira, 22 de janeiro de 2009

O Pulso (titãs) no charges.com.br

Estava no meio de um monte de boletos, contas e tributos, sorteando qual podia pagar, e ouvindo Arnaldo Antunes no acústico do Titãs... do meio desse círculo de Dante, saiu uma idéia, que deu nisso aí:

http://charges.uol.com.br/2009/01/22/brasileiro-canta-o-pulso/

É, o Maurício Ricardo lê mesmo os emails! Vou guardar de lembrança, afinal "apareci na internéte, manhê
êê..."

:)


terça-feira, 13 de janeiro de 2009

As telas e a lâmpada

Não gosto de "fazer tela".

Não tenho a menor inspiração para bolar layouts, trabalhar com cores, fontes, mensagens e tudo mais.

Mas admito: "fazer tela" está na mira dos programadeiros antenados. Admiro quem pega aquele monte de tag, parâmetro, javascript síncrono e assíncrono, todas aquelas coisas originárias de algumas da luas de Saturno, e consegue transformar em alguma coisa funcional, leve e bonita.

O duro é chegar no bonito, leve, e pior, funcional. Não parece fácil.

Enfim, o que eu sempre gostei foi de algoritmos. Passos para executar alguma coisa. Recebe x, bate no liquidificador e devolve y.

Não sei como ensinam isso hoje nas escolas técnicas ou (pseudo)cursos superiores, mas eu aprendi escrevendo passos para trocar uma lâmpada, abrir uma porta, escrever uma carta.


Passos para trocar uma lâmpada:

- enquanto a lâmpada queimada não estiver desrosqueada (?) totalmente:
-- gire a lâmpada no sentido anti-horário

- pegue uma lâmpada nova
- coloque-a no soquete
- enquanto a lâmpada não estiver totalmente rosqueada:
-- gire a lâmpada no sentido horário


Alguns podem dizer que o algoritmo está muito simplório, que é necessário verificar a voltagem da lâmpada, que é preciso subir e descer da escada, que não prevê ligar para a companhia de energia elétrica para saber se na verdade o problema não está em uma turbina de Itaipu que caiu de produção e causou um becaute em toda a região!!!

Calma. O assunto não é especificação, casos de uso nem domínio do cliente. Um dia a gente chega lá.

Gosto desse tema, talvez seja mais desenvolvido aqui. Quem sabe a gente chega em conceitos de OO, padrões de desenvolvimento, etc e tals?

Enquanto isso, dá uma olhada no que o Sakurai escreveu sobre o algoritmo Bubble Sort!

Até!