Codebits V (2011)

Codebits V Header

Mais um ano, mais um Codebits. Na minha estreia do ano passado fiquei viciado neste evento organizado a pensar na comunidade tecnológica (vulgos geeks). Aqui juntam-se centenas de participantes para 3 dias de programação, concursos, talks e convívio. As minhas expectativas estavam bastante altas, mas alegro-me em dizer que foram superadas.

Ao chegar ao Pavilhão Atlântico, fomos brindados com um welcome pack cheio de goodies. Fiquei surpreendido ao encontrar, entre eles, uma Yubikey! Para além disso, haviam alguns componentes de arduino, uma mala muito discreta e prática, um voucher para um e-book da O’Reilly, um sigg, uma t-shirt, and on, and on, and on… Após descermos as escadas começamos a ver a luminescência verde, a cortina de fumo com o logo do Sapo, os palcos, os puffs, as mesas… Ao entrar no Codebits, entramos noutro mundo.

O dia começou com as habituais keynotes. O Celso Martinho e o Zeinal Bava deram-nos as boas vindas com discursos particularmente interessantes. Ver o CEO da PT a dirigir-se de maneira impecável para aquele público alvo tão específico, falando sobre a sua carreira e sobre as escolhas que tomou ao longo da mesma, foi algo que não estava à espera. Esperava ouvir propaganda empresarial, mas saí de lá com uma lição de vida. CEOs out there, take notes! É assim que se cativa quem está a ouvir.

Após o almoço começámos a dar os primeiros toques no projecto. Depois de ter usado uma guitarra do Guitar Hero para tocar músicas reais na edição passada, este ano mantivémos o tema musical. A ideia era utilizar o Kinect da Microsoft para criar uma bateria virtual, sem nunca termos programado a sério em C#, XNA ou com o Kinect. Tinhamos cerca de 48h para aprender tudo e ter um produto acabado. Ficámos na mesma mesa que pessoal porreiro de Mafra, que também tinham um projecto relacionado com o Kinect e nos deram alguma ajuda preciosa.

Cortina de fumo Codebits VA night of coding

Entre os primeiros stresses com o Visual Studio e algumas falhas de energia na nossa mesa, eu e o Carlos Lima decidimos ajudar o Luís Nabais na sua quest de sair do Codebits com um puff. Para isso, desenhámos um QR-code à mão em ponto grande no white board da nossa mesa. Foi engraçado ver muita gente a aproximar-se com o telemóvel para descodificar o QR-code e ir parar à página do Luís, onde ele fazia um choradinho por um puff. Até o Celso Martinho passou por lá para ver do que se tratava! Também achámos piada que a zona da PT Inovação também apareceu com uns QR-codes desenhados à mão, posteriormente.

Mais uma vez assisti ao Presentation Karaoke, onde um grupo de participantes tem que pegar em apresentações completamente disparatadas e inesperadas e apresentá-las como se as tivessem feito. Desde zombies, gatinhos e assassinos em série, viu-se de tudo. Deu para mandar umas belas gargalhadas em algumas das apresentações.

Depois de uma noite bem dormida em casa, voltámos ao ataque no nosso projecto. Estava tão focado em avançar que não fui ver nenhuma talk. Na próxima edição do Codebits não volto a cometer este erro. Apesar de todas serem gravadas e estarem disponíveis online, estar lá ao vivo é bastante melhor.

Pela segunda vez participei no “The Amazing Quiz Show”. É o “Quem Quer Ser Milionário” para informáticos, com perguntas do género “qual é o código hexadecimal da cor fuschia” ou “qual é o significado do código HTTP 305”. Estávamos na liderança até à última pergunta da nossa eliminatória, quando fomos ultrapassados numa pergunta sobre o jogo Second Life (#fail). Tivemos também a oportunidade de ver o episódio piloto da série “Capitão Falcão”, que é a coisa mais awesome que eu alguma vez vi na minha vida. Em principio irá estrear em televisão em breve.

Capitão FalcãoUm cocktail cientifico

A segunda noite já foi passada no recinto, tendo ficado com a equipa a programar até as 5h. Nessa altura já estávamos de rastos e fomos descansar 2 ou 3 horas para aguentar o último dia. Utilizámos a manhã para finalizar os preparativos e a aplicação ficou pronta quando faltavam apenas 2 horas para o início da sessão de apresentação. Devido ao alto risco de apresentarmos uma demonstração ao vivo, gravámos um vídeo que acabou por ser útil: a aplicação “explodiu” quando estávamos em cima do palco… O resultado final teve muito menos impacto do que o que pretendíamos, e o nosso projecto acabou por passar bastante despercebido. Mesmo que tivéssemos conseguido fazer a demonstração, não sei se teríamos hipótese de estar entre os finalistas. Haviam muitos projectos interessantes e cujas apresentações arrebataram o público.

Apesar de não termos pontuado, saí satisfeito do evento. Aprendemos tecnologias novas e convivemos com pessoal fixe num ambiente totalmente geek. O Codebits é um local onde se junta muito talento, e de forma a estarmos entre os melhores é necessário uma ideia, uma execução, e uma apresentação brilhantes. Agora temos um ano para pensar numa ideia para voltar à corrida aos prémios.

Queria agradecer ao Carlos Lima, à Teresa Futscher e ao Luís Teófilo por se terem dedicado ao projecto. Graças a vocês ficámos com uma aplicação terminada em 48h e aprendemos a lidar com tecnologias muito porreiras. Também queria agradecer ao Professor Miguel Dias e à ADETTI-IUL por nos terem cedido um Kinect. Sem ele não teríamos podido executar a nossa visão.

Até Novembro de 2012, Codebits!

Quatro livros até ao fim do ano

Reparei há uns meses que não andava a despender tempo nenhum com literatura. Sempre gostei de ler, mas com a excepção de alguns livros técnicos no início da faculdade, costumava optar por obras relativamente light. Estava na altura de tomar a iniciativa e ver se aprendia uma coisinha ou duas. Infelizmente entre o trabalho e a faculdade não sobra muito tempo, pelo que me desafiei a ler (apenas) quatro livros durante este ano. Aqui ficam os escolhidos:

The Pragmatic Programmer – From Journeyman to Master

Andrew Hunt e David Thomas

The Pragmatic ProgrammerO “The Pragmatic Programmer” foi recomendado por uma miríade de programadores no Stack Overflow, e foi por essa razão que o escolhi. Apesar de já ter alguns anos, aborda os principais assuntos relacionados com o desenvolvimento de código e manteve-se surpreendentemente actual. Está dividido em pequenas tranches, cada uma abordando uma boa prática de programação. Foi um dos melhores livros que já tive o prazer de ler, e tenho a certeza que o irei reler muitas mais vezes. Os bons conselhos são tantos que é difícil interiorizar toda a informação apenas numa passagem. É um livro para redescobrir, mudar hábitos, e recomendar a todos os que tenham uma paixão pela arte de programar e queiram passar de prosa a poesia com o código que escrevem.

Evolutionary Robotics – The Biology, Intelligence, and Technology of Self-Organizing Machines

Stefano Nolfi e Dario Floreano

Evolutionary Robotics

Este livro apresenta uma análise em profundidade do trabalho mais relevante na área da Robótica Evolucionária até à data de publicação (2000). Também dá uma excelente visão geral dos processos envolvidos no desenvolvimento de metodologias evolucionárias, particularmente as que utilizam robótica ou simulação de agentes. A abordagem de auto-organização do comportamento tem várias vantagens relativamente às tradicionais soluções codificadas “à mão”, vantagens essas que são exploradas nos primeiros capítulos.

Na minha opinião, este livro é uma óptima introdução a este enorme mundo, com muitos exemplos de como desenhar e realizar experiências. Fiquei surpreendido com a quantidade de possibilidades que podem ser exploradas e investigadas, desde arquitecturas reactivas, a co-evolução, aprendizagem durante a vida, e mudanças de morfologia. Este livro é uma referência e recomendo a quem tenha interesse na área de Aprendizagem Automática e Robótica.

Code Complete: A Practical Handbook of Software Construction

Steve McConnell

Code Complete

Mais um livro que descobri através das recomendações do Stack Overflow. Na realidade, é mais uma bíblia que um livro, com quase 1000 páginas. Não posso falar muito sobre este visto que é o que está a ficar para o fim, por ser tão intimidante.  Aqui fica uma quote do Joel Spolsky: “The encyclopedia of good programming practice, Code Complete focuses on individual craftsmanship — all the things that add up to what we instinctively call “writing clean code.” This is the kind of book that has 50 pages just talking about code layout and whitespace“. Para quem conhece os meus hábitos de programação e já “sofreu” com isso (sou extremamente picuinhas) dirá que é um livro adequado a mim 🙂

97 Things Every Software Architect Should Know

Rebecca Parsonns

97 Things Every Software Architect Should Know

Este livro foi parte do espólio do Codebits 2010. Contém uma compilação de conselhos de muitos arquitectos de software sobre os mais variados tópicos relacionados com esta profissão. É relativamente pequeno, quando comparado com qualquer um dos outros. Ainda por cima cada secção tem 2 páginas e inclui uma pequena biografia de cada autor, pelo que se torna numa leitura bastante leve que pode ser feita aos poucos. Mesmo que só tenhamos 5 minutos para ler, dá para avançar sem ficar com capítulos a meio. Este livro está disponível online gratuitamente aqui. Se quiserem ver uma ou duas secções, posso recomendar (até onde li) a Stand Up! e a Don’t put your resume ahead of the requirements.

Se tiverem que escolher apenas um livro de programação, certifiquem-se que esse livro é o “The Pragmatic Programmer”. Caso queiram ver mais livros interessantes deixo aqui o link para a pergunta no Stack Overflow com dezenas de recomendações. Recomendo também o Good Reads para gerirem os vossos livros e a vossa wishlist.

Web scraping fácil com phpQuery

Suponho que uma grande maioria dos programadores já tiveram que fazer scraping a um website. Eu, pelo menos, já o tive que fazer várias vezes. Recentemente tive que exportar imagens e informação de um catálogo online e escolhi o PHP para o fazer. Uma das primeiras tentações é tentar extrair informação com substrings e outros hacks “fáceis”.

Quando começamos a ver a loucura que é utilizar abordagem, tentamos tirar partido da estrutura do DOM com bibliotecas que façam o parse de uma forma mais estruturada. Mesmo assim, a tarefa pode ser bastante desafiante e estas bibliotecas por vezes introduzem obstáculos que são difíceis de ultrapassar. Ao tentar resolver este problema, deparei-me com o phpQuery. A grande vantagem de usar esta biblioteca é que podemos aplicar os nossos conhecimentos de jQuery, visto que a sintaxe é idêntica.

Deixo aqui um exemplo que extrai o preço, ID, link e imagem dos templates no site TemplateMonster. O texto é exportado em CSV para o ecrã do browser. A parte de extrair as imagens apenas funciona para os templates de PrestaShop. Disclaimer: não sou grande “espingarda” a trabalhar com jQuery, por isso se tiverem alguma dica para tornar as queries mais bonitas, digam 🙂

Mann–Whitney U com a ferramenta de estatísticas R

Por vezes é necessário comparar 2 data sets independentes para saber qual é o maior. Um algoritmo muito utilizado para isto é o Mann–Whitney U (também conhecido por Mann–Whitney-Wilcoxon). Neste post deixo um script que utiliza 2 ficheiros, cada um com um data set, e que os compara utilizando este algoritmo. Para isto é necessário recorrer a um script que é executado com o R.

Primeiro, um sample de um dos ficheiros de input:

O script está preparado para receber um valor por cada linha e deverão haver 2 destes ficheiros. Depois basta criar o ficheiro wilcox.r que recebe 2 argumentos e os compara utilizando o Mann-Whitney U:

O script deverá ser executado com o seguinte comando, no terminal:

O resultado, caso seja inferior a 0.05, indica que os valores do primeiro ficheiro são maiores que os do segundo ficheiro. Quanto mais perto de 1, menor os valores do primeiro ficheiro são. Quanto mais perto de 0.5, mais os valores são equivalentes.

Aumento do vocabulário

Já há cerca de ano e meio que estava relativamente estagnado na monotonia do Java, PHP, HTML e CSS. No entanto, trabalhei recentemente num projecto que me permitiu aumentar os meus conhecimentos de linguagens para a web, mais específicamente Javascript.

Há muito que evitava o contacto com o JS, apesar de ter que recorrer com frequência a scripts pré-feitos. A linguagem em si é sintacticamente parecida a Java apesar de ter a liberdade de ser dynamically-typed, tal como o PHP. Isto traz beneficios como uma menor quantidade de código necessário, mas também pode tornar o script mais confuso de ler e manter.

Em simultâneo com o Javascript, peguei também no jQuery. Fiquei completamente siderado com a facilidade de manipulação do DOM que esta biblioteca nos proporciona. A sintaxe do jQuery é bastante diferente do Javascript “normal”, torna-se quase uma Domain Specific Language.

Começar a utilizar estas duas ferramentas foi ligeiramente complicado, sentimo-nos à deriva no meio de um oceano. Por um lado estamos a aprender uma linguagem nova e não sabemos bem por onde começar nem como resolver problemas concretos, por outro estamos a utilizar uma biblioteca enorme com muitos anos de desenvolvimento em cima. No entanto, isto também tem as suas vantagens. Qualquer que fosse a minha duvida, era só perguntar ao meu fiel companheiro e acabava 80% das vezes no Stack Overflow com a resposta certa.

Com o Javascript e o jQuery criei com mais uns amigos um site para concorrermos ao concurso do Sapo Mapas. Ainda faltam uns retoques mas vamos submetê-lo no final da próxima semana. Ficámos muito satisfeitos com o resultado final. Fingers crossed!

Por fim, tive também contacto com uma linguagem de programação da Microsoft: F#. Já tinha ouvido falar bastante da linguagem, mas nunca a tinha experimentado. Tive oportunidade de participar num workshop no Zoomin Fest 2011 em que fomos apresentados à sintaxe e fizemos alguns exercícios. Gostei bastante da experiência e o workshop foi bem conduzido. Do paradigma funcional já tive contacto com Scheme e Prolog, pelo que havia pouca manobra para surpresas. No entanto, o F# tem alguns elementos engraçados como o match que nos permite ter uma espécie de switch case e algumas funções para lidar com listas que dão muito jeito e reduzem bastante o código que tem que ser escrito.

Destas três linguagens (na verdade são duas linguagens e uma biblioteca), penso que irei dar bastante uso apenas ao Javascript e  jQuery. O F# ficará pela pequena experiência no workshop.