A segunda palestra foi do Elcio da Visie e do Tableless, o título fala de muitas coisas, mas o assunto da palestra foi um só Produtividade. E ele conseguiu mostrar o que queria.

Apesar de só fazer uma pequena demonstração de JQuery e de web.py a mensagem foi passada pois mostrou como desenvolvedores podem ser eficientes, se forem organizados e seguirem certos métodos.

A demostração do menu aninhando foi muito convincente, porém o que chamou mais atenção da platéia foi a demonstração de que com um toolbox correto a efeciência é enormemente maior. Infelizmente isso é negligenciado pela maioria, poucos desenvolvedores se preocupam com uma IDE, e se espantaram com a demonstração do que o editor vi é capaz. Muita gente acha estranho usarem a dupla vi/emacs (eu uso emacs por exemplo) que são editores que já tem seus 32 anos de existência. Está ai uma prova de que bom programas podem durar décadas.

Também foram citadas várias boas práticas, como usar controle de versão, testes unitários e tudo mais. Aposto que a apresentação abriu os olhos de vários desenvolvedores. E eu descobri que eu não sou o único chato que implica com coisas que todo mundo despreza, como programadores que digitam catando milho, hehe.

A primeira palestra, da Locaweb falaria sobre tendências. Mas não foi isso que aconteceu, e a palestra, me perdoem o trocadilho, foi bem tendenciosa.

O que aconteceu foi que as tendências apresentadas, foram tendências a 2 ou 3 anos atrás, praticamente todas hoje já são realidade. Por exemplo, OpenID já é usado largamente, e praticamente todo mundo tem um (apesar de não saber), pois as contas do Google são ids através do endereço do blogger/blogspot, e as do Yahoo idem. Se você não percebeu a comentar num blog hospedado no blogger/blogspot você tem a opção de usar o OpenID. A novidade pra mim foi saber da API do Live ID da Microsoft, patrocinadora do evento.

Outra tendência citada foi MVC, padrão arquitetural que está pra completar 30 anos. Isso mesmo, uma tendência de 30 anos. Mas tenho que ser justo, como padrão para desenvolvimento web é mais recente, porém já conheço o padrão e o utilizo a mais ou menos 3 anos. E pela quantidade de frameworks existentes, na wikipedia temos listados mais de 60 ou 70 frameworks. O que prova que o MVC já foi tendência, hoje é realidade, a única tendência que eu vejo nesse ponto, é que está quase pra sair o framework MVC da Microsoft, já está no Preview 2.

A tendência mais controversa é a tal da “Cloud Computing”, onde o foco da palestra foi para a parte de escalabilidade e a Amazon Elastic Computing Cloud, na qual foi dita uma inverdade, que esse serviço era cobrado por hora, e não é o caso.

Mas o foco da palestra foi a tendência Ruby on Rails, além já não ser tendência a algum tempo. O framework já era usado por muita gente que estava lá. E olha que o marketing da própria Locaweb avisou que temas que já tinham sido abortados não estariam nas palestras, e como exemplo de tema já abortado está lá Ruby on Rails. Duvida? Confira. E as gafes não pararam por aí, o palestrante não sabia a diferença entre Ruby (linguagem de programação) e Rails (framework), trocando a bolas inumeras vezes, fazendo parecer que Ruby e Rails eram uma coisa só, nem citando por exemplo outros frameworks pra Ruby, como o Merb. Não contente com essa tremenda confusão, ao explicar REST e MVC, mostrou o mesmo desconhecimento, achando que as duas coisas eram sinônimos. Isso pra mim isso mostrou uma falta de profissionalismo sem tamanho, pois uma das atitudes mais nocivas é ensinar de forma errada. Uma das razões de REST não ser um padrão de facto hoje é a falta de entendimento do que é esse padrão arquitetural, e o pior ainda, o desconhecimento de métodos do protocolo HTTP, desconhecimento que a Locaweb infelizmente fez questão de levar a frente essa confusão toda. E pra terminar com chave de outro e reforçar minha teoria de que foram tendências antigas, o palestrante falou que a versão 2.0 do Ruby on Rails foi lançada a um mês, mas foi lançada ano passado, acho que apresentação não era para 2008 e sim pra 2007.

Pelo menos a Locaweb reconheceu que o suporte que eles dão a Ruby on Rails é péssimo (a ponto de qualquer coisa mais complicada que um tutorial inicial não rodar bem) e prometeram melhorar.

E o último problema pra mim foi o mais interessante, já que matemática é a minha área, e o quinto problema era sobre matemática.

O problema era fatorar 1321317089447443, fácil. Era só procurar no Google que você acharia sites como esse, que fatoram o número.

Caso quisesse “aceitar o desafio”, seja lá o que isso signifique, e programar, também era simples, segue o código em javascript, em homenagem a quem acertou o desafio.

var factor = 3;
var number = 1321317089447443;
while (factor*factor <= number) { if (number % factor == 0) { console.log(factor); number /= factor; } else { factor += 2; } } if (number != 1) console.log(number); [/sourcecode]

Obs: console.log é uma função javascript disponível no firebug, caso queira usar numa página troque por um document.write. E antes que me corrijam, a variável factor é inicializada com 3, pois já sei que 2 não é fator pra esse caso (number não é par).

Eis que surge o quarto problema.

O problema estava lá, e não podiamos ver. De cara achei que tinha algo escondi com um display: none e desabilitei o css do Firefox. Mas não apareceu nada, aí não teve outro jeito, olhar o código fonte. E lá estava:

<!-- Qual o nome da cor de fundo do Livro de Mozilla? -->

Abri a página do Livro do Mozilla e habilitei o firebug e estava lá “background: maroon;”. Fácil demais.

 

Depois de ganhar os ingressos, o resto dos problemas foram diversão, então fomos para o terceiro problema.

Ao ver

5u0t6n013b3r4354bru0y114

Fui logo trocando os números pelas letras, e então tinha:

suotgnoleberaesabruoylla

Que diabos era isso? Confesso que demorei um pouco até sacar. Mas aquele ‘y’ ali me salvou, e eu vi o ‘you’ ao contrário, o ‘all’, enfim, estava tudo ao contrário.

allyourbasearebelongtous

Agora ficou fácil, “All your base are belong to us”, eis a resposta. Agora era esperar o próximo problema.

Ae, esse eu resolvi e ganhei os ingressos :D, está lá em Problema 2.

O problema era: Onde fica isso?

67 7A 69 70 3A 1F 8B 08 08 D0 11 1B 48 02 FF 65 00 CB 28 29 29 B0 D2 D7 CF 4D 2C 28 D6 4B CF CF 4F CF 49 D5 4B CE CF D5 4B 2A 02 0B D9 E7 E4 D8 EA 1A 19 E9 59 1A 1A 99 9B 98 EA E8 9A 18 EB 19 19 98 19 1B 02 00 29 22 3E 34 36 00 00 00

Primeiro chute de qualquer um, isso são bytes em hexadecimal. Mas não podia ser apenas uma string, dava pra perceber pelos 3 últimos bytes 0. Mas como não conhecia nenhum arquivo que o magic number começava com 67, era a primeira opção. E como estava com o Eclipse com as ferramentas de Java aberto, fui logo para o código (mas devia ter considerado usar uma linguagem de script, Groovy por exemplo seria mais adequado).

Primeira tentativa:

class Problem2 {
public static void main(String[] args) {
String[] input=”67 7A 69 70 3A 1F 8B 08 08 D0 11 1B 48 02 FF 65 00 CB 28 29 29 B0 D2 D7 CF 4D 2C 28 D6 4B CF CF 4F CF 49 D5 4B CE CF D5 4B 2A 02 0B D9 E7 E4 D8 EA 1A 19 E9 59 1A 1A 99 9B 98 EA E8 9A 18 EB 19 19 98 19 1B 02 00 29 22 3E 34 36 00 00 00″.split(” “);
byte[] output=new byte[input.length];

for (int i = 0; i < input.length; i++) { output[i] = (byte)Integer.parseInt(input[i], 16); System.out.print((char)output[i]); } } } [/sourcecode]

E como resultado:

gzip:??H?e … e alguns caracteres não representáveis.

Mas o gzip era a dica que eu precisava, então vamos para …

Segunda tentativa:

import java.io.ByteArrayInputStream;
import java.util.zip.GZIPInputStream;

class Problem2 {
public static void main(String[] args) throws Exception {
String[] input = “67 7A 69 70 3A 1F 8B 08 08 D0 11 1B 48 02 FF 65 00 CB 28 29 29 B0 D2 D7 CF 4D 2C 28 D6 4B CF CF 4F CF 49 D5 4B CE CF D5 4B 2A 02 0B D9 E7 E4 D8 EA 1A 19 E9 59 1A 1A 99 9B 98 EA E8 9A 18 EB 19 19 98 19 1B 02 00 29 22 3E 34 36 00 00 00″
.split(” “);
byte[] byteRepresentation = new byte[input.length];
byte[] output = new byte[input.length];
for (int i = 0; i < input.length; i++) { byteRepresentation[i] = (byte) Integer.parseInt(input[i], 16); } GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(byteRepresentation)); gis.read(output); for (int i = 0; i < output.length; i++) { System.out.print((char)output[i]); } gis.close(); } } [/sourcecode]

E o resultado foi:

Exception in thread "main" java.io.IOException: Not in GZIP format
	at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:137)
	at java.util.zip.GZIPInputStream.(GZIPInputStream.java:58)
	at java.util.zip.GZIPInputStream.(GZIPInputStream.java:68)
	at Problem2.main(a.java:14)

Droga, não funcionou o gzip, pesquisando um pouco vi que o gzip do começo não era nem header nem magic number do formato, então resolvi tirar esse pedaço e fui para a …

Terceira tentativa:

import java.io.ByteArrayInputStream;
import java.util.zip.GZIPInputStream;

class Problem2 {
public static void main(String[] args) throws Exception {
// Tirei os 5 primeiros bytes
String[] input = “1F 8B 08 08 D0 11 1B 48 02 FF 65 00 CB 28 29 29 B0 D2 D7 CF 4D 2C 28 D6 4B CF CF 4F CF 49 D5 4B CE CF D5 4B 2A 02 0B D9 E7 E4 D8 EA 1A 19 E9 59 1A 1A 99 9B 98 EA E8 9A 18 EB 19 19 98 19 1B 02 00 29 22 3E 34 36 00 00 00″
.split(” “);
byte[] byteRepresentation = new byte[input.length];
byte[] output = new byte[input.length];
for (int i = 0; i < input.length; i++) { byteRepresentation[i] = (byte) Integer.parseInt(input[i], 16); } GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(byteRepresentation)); gis.read(output); for (int i = 0; i < output.length; i++) { System.out.print((char)output[i]); } gis.close(); } } [/sourcecode]

E agora, finalmente.

http://maps.google.com.br/maps?ll=-22.912745,-43.20631

Onde era isso? Meu primeiro impulso foi responder, estação do metrô Estácio, mas em tempo lembrei que tinha um centro de convenções lá perto. E assim ganhei os ingressos.

A descrição do problema está em: Problema 1. Esse eu sinceramente não consegui resolver, e só fui entender o problema quando eu vi a solução, afinal, o que quer dizer

Eve solved a blew cocoon endorsed rent

Nada, afinal é um anagrama. Não consegui resolver esse, e nem lembrar o filme que tinha um monte de anagramas, acho que era “O bebê de Rosemary”, tenho que verificar no google, hehe.

Como, achei muito interessante a iniciativa do portal Tableless, que deu ingressos para o ELPI (que eu acabei ganhando um deles), resolvi comentar e explicar cada uma dos problemas para os ingressos do Rio de Janeiro.

Além disso nos próximos post um comentário sobre o que eu achei de cada uma das palestras.

Inauguração

23 abril, 2008

Esse blog vem de uma idéia antiga de ter um blog para falar de computação, matemática e outras teorias. Por algum tempo eu enrolei, mas hoje enfim, está inaugurado mais um blog.