Codebits VI
Como já é  habitual, a semana a seguir ao Codebits é bastante caótica; este ano, por motivos profissionais, essa semana transformou-se rapidamente em quase três meses. Durante esse tempo, este post foi sendo escrito em quatro dispositivos, por três zonas do país, e esteve quase para não ser publicado. Como já estava quase pronto, cá está. So, back to the  point...

Quando acordei, já o recinto fervilhava com movimento, e as primeiras talks estavam a arrancar. Dei a primeira ronda como perdida e fui tentar tirar o aspecto de zombie mal nutrido – sem grande sucesso, diga-se de passagem.

Instalei-me (isto é, deixei-me cair em cima de um puff) para ver a Tools, tools, tools, de Paulo Gaspar. Tendo como tema as diferentes ferramentas necessárias à programação, com especial enfoque no webdev, Paulo Gaspar passou por quase tudo o que era humanamente possível; só fiquei ligeiramente desapontado com a não inclusão do Netbeans – posteriormente, foi-me justificado que nem sequer sabia que o Netbeans suportava outras coisas que não Java.

Esta talk foi interrompida, perto do final, por dois eventos mesmo à Codebits: primeiro, uma mais que merecida homenagem ao Celso Martinho, pai do Codebits, co-fundador do Sapo e all around geek. Tirando a imagem um bocadinho creepy de centenas de máscaras Celsianas ao som do por vezes hipnótico, mas sempre irritante, Nyan Cat, poucas pessoas em Portugal conseguiriam ter a admiração quase consensual duma comunidade da forma como Celso Martinho consegue.

Logo de seguida, no contexto da caça aos badges, o desafio I'll do anything for a badge, que consistia em tomar o palco principal e imitar a coreografia do Gangnam Style. Como a participação foi massiva (porquê , pergunto eu), foi necessário repetir o evento. Isto é, depois do Nyan Cat, duas vezes Gangnam Style. Às vezes ainda acordo com suores frios a pensar nisto...

Depois de Gangnam Style ter atingido mil milhões de visualizações no Youtube, passo a oportunidade de o linkar novamente.

A seguir ao almoço passei mais uma vez pelas equipas que vinha a acompanhar, dar aquele último impulso moral, e cirandei por várias outras equipas. Mais do que a inovação tecnológica, ou o brilhantismo das apresentações, há uma energia no ar, um misto impalpável de excitação, receio e alguma sobranceria fingida, protecção de última linha contra uma auto-estima destruída pelo cansaço e pelo génio que se encontra a cada metro percorrido.

As apresentações decorreram de forma fluida, o sistema de votação não deu o tilt como no ano passado, e até a collective intelligence do público se comportou bastante melhor, votando bastante em projectos com efectivo interesse prático. Por exemplo, o projecto mais votado pelo público, reconhecimento automático de linguagem gestual, é tudo o que um projecto Codebits (e, em última análise, qualquer projecto de startup) deve ser: aliar o poder da tecnologia à resolução de um problema real.

No final das apresentações, infelizmente, tive que iniciar a minha viagem de regresso. Parece que, a cada ano, conforme vou aumentando a hora de regresso, o evento arranja maneira de acabar mais tarde. Já não pude assistir à divulgação dos vencedores, entrega dos prémios e discurso de encerramento de Zeinal Brava.

Fica, como sempre, a sensação de maravilhamento com o que é possível atingir quando existe a motivação correcta – mesmo quando essa motivação está longe de ser monetária. Algo a aprender pelas empresas portuguesas (e pelos sindicatos, já agora).

Comentários Nenhum comentário Continuar a ler Continuar a ler »

Codebits VI

Inexplicavelmente, ontem esqueci-me de assinalar a The Art of Readable Code, de Pedro Morais, uma talk que devia ser obrigatória em qualquer nível de ensino relacionado com a programação. Muito boa talk.

Depois de uma noite mal dormida (como sempre no Codebits), arranquei logo de manhã para Fast relational web site construction with PHP, de Nelson Gomes. As minhas aspirações foram ligeiramente defraudadas, em parte pelo cansaço, em parte por ter extrapolado mais da descrição do que o que lá estava. Como dizem os namorados americanos nos filmes, it's not you, it's me.

O foco da talk foi quase em exclusivo no motor ORM Doctrine e no motor de templating Smarty, quando eu tinha esperado que fosse mais sobre motores de ORM e templating em geral e depois algumas considerações sobre estas em particular. Não havia rigorosamente nada na descrição que levasse a esta minha conclusão (acabei de verificar novamente) e não sei de onde a fui tirar. Não tenho grande interesse no Doctrine (usamos a nossa própria framework no trabalho) e conheço Smarty de trás para a frente (este site, por exemplo, usa-o). A talk é boa para iniciantes, ou para quem esteja no processo de escolher motores, mas não é o meu caso. O cansaço também não ajudou – fechei os olhos várias vezes.

À tarde, a Move fast & break things, do inenarrável Miguel Gonçalves, era imperdível. Como sempre, o dinanismo é esfuziantemente contagiante, o discurso motivacional é o correcto mas... a crowd é errada. Ele apanhou algum calor na parte de perguntas e respostas, porque esta rapaziada já é a que tem o mindset correcto (não estaríamos cá se não fosse esse o caso). Algumas pessoas levaram a mal o trabalhar mais, trabalhar melhor, o que é compreensível quando estamos a falar de pessoas que já estão em frente a um computador mais de 12 horas por dia. A esmagadora maioria percebeu que o problema não está em nós, e que o principal nem é a quantidade do trabalho, mas sim a motivação com que o fazes; não obstante, o discurso poderia ter sido ligeiramente adaptado, tendo em atenção as características muito específicas da audiência. No entanto, não deixa de ser sempre uma talk imperdível. E foi.

Depois de uma talk menos conseguida no ano passado, Diogo Antunes volta a estar em grande forma com It works on your computer but does it render fast enough. Como alguém que passou as últimas duas semanas a optimizar o rendering de um projecto profissional, estava especialmente ansioso por mais um truque ou outro que pudesse aplicar. Infelizmente, acabei por aprender que já estou a usar todos os truques aplicáveis, mas foi muito interessante ver explicado decentemente aquilo que tive que aprender, às vezes de forma incompleta, nas últimas semanas.

Com especial destaque para as operações de reflow e redraw dos motores de rendering dos browsers, esta talk é especialmente informativa e dada de forma quase irrepreensível (nota-se que o inglês não é a língua nativa).

No final desta talk ainda tive a oportunidade de debater os meus dilemas com o tal projecto profissional com o Diogo e com o sempre disponível André Luís, que só confirmaram o que eu já temia: há um limite para a optimização que um webdev pode fazer; há certos dispositivos que não estão preparados para certas cargas, ponto.

A fechar a tarde, The Yin-Yang of web authentication, de Nuno Loureiro, parte da equipa de segurança do Sapo, e João Poupino, da nova CloudPT. Alguns dos vectores de ataque foram novos para mim (os baseados em timings são especialmente assustadores) e alguns dos métodos de defesa também. Sem dúvida uma das talks com melhor taxa de material aprendido por minuto... ;)

Por exemplo, ao fim destes anos todos, aprendi que CAPTCHA, na realidade, é um acrónimo para Completely Automated Public Turing testes to tell Computers and Humans Apart. Wow.

O plano nocturno foi o sempre hilariante The Amazing Codebits Quiz Show. Eu não sei onde raio o Quiz Master vai buscar certas perguntas (e certas respostas) que não lembram ao demónio. Quanto é um ångström? A sério? Qual é o país com a maior bebida standard? Os países têm uma bebida standard?

Durante grande parte do dia e da noite, fui seguindo alguns projectos de malta conhecida e ajudando no que podia.

Um grupo de estudantes do Técnico resolveram fazer uma aplicação Android que funcionasse como um shout georeferenciado, o que é uma ideia interessante. Pormenor: nenhum deles sabia programar Android. Fui passando várias vezes por lá, a orientá-los pelos vários pitfalls que o Android SDK tem (a última foi aquele problema irritante de não se poder instalar a mesma app quando se muda o namespace).

O KTachyon, que é um programador competentíssimo e de certeza que não precisa da minha ajuda, está com uns colegas a fazer uma aplicação que junte os vários serviços de alojamento de ficheiros, Dropbox, Google Drive e agora o CloudPT. A meio da madrugada, a API do CloudPT estava a dar-lhe um bocado de luta e estivemos a debater durante um bocado o que poderia estar a correr mal. Eu fiquei sem saber muito bem, mas aparentemente ele conseguiu desbloquear a coisa.

O Killercode, que tem sempre ideias muito maradas envolvendo hardware (no ano passado era controlar a MeoBox com o Kinect) anda ali de volta de um Arduino controlado via bluetooth por um Android. Eu disse que era marado.

Passei algumas horas da madrugada com o KTachyon e alguns amigos a discutir um monte de coisas, desde o ainda aftershock da talk do Miguel Gonçalves, o estado do nosso país, o estado da nossa educação (entre os participantes, um professor de biologia, que, a meio da carreira, decide que afinal quer ser é programador - awsome!), dificuldades e oportunidades na nossa área, old school gaming e se os porcos têm ou não asas.

Estamos no último dia. Hoje é que é a doer para muitos participantes. Boa sorte a todos!

Comentários 2 comentários Continuar a ler Continuar a ler »

Codebits VI

RaspberryPiUltimakerDepois de mais um ano de preparação, um excruciante processo de selecção e, para muitos de nós, uma viagem mais ou menos longa, começou um novo Codebits. Não sei como é que conseguem, mas o geek level aumenta sempre. Se no ano passado a parada foi subida com a presença da LEGO, este ano conseguiram trazer não só uma presença oficial das impressoras 3D, através de Erik de Bruijn, da Ultimaker, como também do RaspberryPi, através de Rob Bishop, da RaspberryPi Foundation.

Mas começemos pelo princípio.

A keynote de abertura foi conduzida pelo Celso Martinho, como é habitual, cabendo a Abílio Martins, administrador da PT, a maior fatia, face à indisponibilidade de Zeinal Bava. Vários serviços apresentados (Meo Kanal no iOS – Android, para variar, é mato – API Meo Kanal, novas inovações dos Sapo Labs, mais Sapo Services), mas com uma recepção relativamente morna, no máximo.

CloudPT

Coube à Jonas dar a notícia que obteve a maior reacção da plateia: depois de apresentado o serviço CloudPT, com a disponibilização imediata do serviço para os participantes do Codebits – que, afinal, até nem era segredo desde há alguns dias – revela que, como early adopters do serviço, os 16 GB oferecidos pela plataforma seriam estendidos, para sempre e sem contrapartidas, para 50 GB. A reacção foi estrondosa. A aceitação do serviço, pelo que tenho visto por aqui e no Twitter, tem sido muito positiva. Infelizmente, a integração com Linux restringe-se ao Ubuntu, para já, e eu fiquei um bocado no gelo com o meu Kubuntu (teoricamente, podia puxar as 50 mil dependências do Gnome mas... prefiro não o fazer). Ainda não tive tempo para usar a interface web, que tem muito bom aspecto, por sinal.

A keynote derrapou no horário violentamente – já tinha começado atrasada, e só piorou – e as talks começaram de forma mais ou menos caótica, com muita gente ainda a tentar almoçar. De qualquer forma, ainda consegui apanhar a parte final de RaspberryPi: Past, Present and Future, por Rob Bishop.

Entre conhecer pessoas e discutir projectos com vários grupos, não podia perder Bits to business, how to sell your software, de Brian Suda, que, como é habitual, ofereceu uma talk fascinante, dinâmica e bem humorada sobre criação (e manutenção) de empresas tecnológicas, com temas tão díspares como o controle do tempo de trabalho útil e quando gastar dinheiro da empresa (antes de pagar os impostos, como qualquer contabilista saberá).

Ao final da tarde dirigi-me ao workshop do RaspberryPi. Tenho o meu encomendado, mas era conveniente ter alguém que soubesse o que está a fazer por perto na primeira vez que lhe metesse as unhas. Correu razoavelmente bem, embora a linguagem usada no workshop (Python) não seja exactamente das minhas linguagens preferidas.

Já tinha tido a oportunidade de conversar com o Rob Bishop sobre alguns projectos que tenho em mente para esta plataforma, mas durante a noite ainda os discuti também com Filipe Valpereiro, da InMotion, que, aliás, é quem os está a vender cá. As perspectivas são boas, sobretudo depois do Filipe ter revelado que está a contar comercializar o resto do hardware necessário (touch screens para ligar o Pi).

Indie Game – The MovieAo final da noite, foi projectado o documentário Indie Game – The Movie (vencedor do festival Sundance), que segue o antes, durante e depois de três jogos indie e dos seus developers. Não é um documento técnico, mas extremamente humano, com o enfoque na motivação das pessoas que o fazem, como os seus jogos reflectem as suas falhas e aspirações. Eu recomendo vivamente que comprem este filme – custa apenas $9,99 e está disponível na Amazon, Steam e iTunes por download (sem DRM) ou stream.

Durante as primeiras horas da madrugada cirandei por aí, a conversar sobre os projectos de vários grupos, fui atacado com nerf e fui finalmente arrochar umas horas.

O Codebits segue dentro de momentos.

Comentários Nenhum comentário Continuar a ler Continuar a ler »

Avisos:

  • As imagens constantes deste post não estão abrangidas pela licença Creative Commons 2.5 Portugal BY-NC-SA, revertendo, por isso, à licença por defeito em Portugal, que é de todos os direitos reservados. Esta opção é para evitar que estas imagens se transformem em futebol político, por improvável que isso seja;
  • Tirar fotografias a uma manifestação não é a mesma coisa do que participar na manifestação. Por princípio, sou contra manifestações: são a forma mais fraca de pressionar Governos, tendo, como tal, escassíssimos efeitos práticos, e normalmente acabam mal (à hora que escrevo isto, ainda há arremesso de objectos aos agentes da autoridade em frente ao Parlamento). Além disso, recuso-me terminantemente a ser instrumentalizado pela extrema-esquerda que, infelizmente, é normalmente quem aparece a "botar faladura";
  • A Praço do Município, em Vila Real, ficou muito mais composta do que o que aparece nas fotografias. Tive compromissos familiares que coincidiram com o grosso da manifestação, e não estava disponível para tirar fotografias. As fotografias representam apenas o início e o final. Pude, no entanto, continuar a observar de longe a praça e os manifestantes. Os primeiros números avançados eram de 1500 manifestantes e creio que esse número estará razoavelmente correcto.

17:0817:0917:1217:1217:1618:3018:31

Comentários 4 comentários Continuar a ler Continuar a ler »

LikeFriendsPronto, mais um projecto lançado, mais um making of para podermos partir para outra. Não vou voltar a passar pelas coisas do costume (sim, voltei a usar a Yii, voltei a usar SASS e Compass) e também não vou voltar a falar do jogo do galo, nem da racionalização matemática por trás do LikeFriends.

Vamos lá.

Fluxograma de estratégiaDurante o desenvolvimento do LikeFriends, fui fortemente coagido a desenvolver um passatempo pela beta-tester, que, incidentalmente, é também minha esposa. A escolha recaiu sobre o jogo do galo, e o código foi colocado no GitHub. Este post é uma tradução do README que acompanha o meu repositório TicTacToeJS, no GitHub.

Existem três maneiras de fazer uma AI de jogo imbatível:

  1. Processar cada jogada possível adiantadamente e jogar pela linha de maior sucesso a cada passo – isto é um método de força bruta;
  2. Implementar uma rede neuronal – isto vai começar bastante palerma, mas depois de alguns milhares de jogos deverá ser imbatível;
  3. Implementar uma solução heurística, fazendo-a jogar como um especialista humano.

O jogo do galo é um fortíssimo candidato a uma solução de força bruta: o número total de jogadas é de apenas 9!, ou 362.880; de facto, seriam muito menos, visto que a maioria das jogadas poderia ser obtida por rotação do tabuleiro de jogo. No entanto, não existe grande "I" nesta AI...

A solução por rede neuronal é bastante divertida, e é usada frequentemente em cenários complexos, desde que alguém tenha o tempo (ou os jogos automatizados) para treinar a rede. Aparte o código da rede neuronal em si (que poderia ser usada para paletes de outros problemas), esta solução seria a mais pequena ao nível do código.

A solução heurística é a mais difícil de implementar para a maioria dos jogos. Implica criar um conjunto de regras a seguir, para cada situação possível, da forma mais compacta possível. De novo, o jogo do galo é propício a este tipo de solução, porquanto apenas três jogadas, no máximo, podem ser problemáticas; a quarta e a eventual quinta jogada são feitas para ganhar ou para empatar.

Esta foi a solução que implementei.

LikeFriendsLancei (finalmente) esta semana o LikeFriends, o meu pequeno projecto de Verão. É um brinquedo social, engraçado como conceito, que apresenta dois rankings baseados nos likes e amigos do Facebook, um de amigos, outro de likes.

Eu podia dar motivações perfeitamente válidas como uma melhoria do ranking de amigos que o próprio Facebook faz (e mesmo esse está absurdamente escondido aqui, à direita – para se chegar lá, é preciso ir aos nossos likes e depois clicar em Sugestões, no topo) ou até como negócio; mas não: só encontrei o ranking (errado) do Facebook quando estava na fase de investigação deste projecto e o site do projecto não está, nem vai estar, monetizado.

Na verdade, fi-lo porque podia. Só isso. Há muito que queria experimentar umas coisas com métricas sociais, mas que fosse algo útil; ao mesmo tempo, andava a brincar com a API do Facebook e resolvi juntar as duas coisas. Ora, a única coisa que contém um espaço métrico no Facebook é a relação entre os likes e os utilizadores.

Afinal, que raio de ranking é aquele?

Versão TL;DR

Um ranking feito unicamente a partir dos likes que dois utilizadores partilham não é preciso.

Se eu tenho 50 likes e tenho 10 em comum com dois dos meus amigos, qual deles é o mais parecido comigo, o que tem 100 likes ou o que têm 500? Com um amigo que tem uma quantidade enorme de likes até seria de estranhar se não tivesse alguns em comum; por outro lado, se outro amigo tem tão poucos likes e mesmo assim tem alguns em comum comigo, quer dizer que, efectivamente, temos gostos muito mais semelhantes.

Aviso: a próxima secção inclui matemática!

Hoje em dia há hipsters para todos os gostos: há os culturais (cinema independente, fotografia lomo e tilt-shifting), há os tecnológicos e há os dos costumes (movimentos LGBT, vegetarianismo, ambientalistas).

Mas como distinguir o hipster dos não-hipsters? Os que adoptam o perfil clássico do hipster (se um hipster é clássico, ainda é hipster?) são fáceis: os óculos com armações de massa, a roupa estilo vintage, a atitude geral de laissez-faire, laissez-passer, excepto no tocante à sua causa. Os outros, são mais difíceis, e é preciso discutir com eles para o descobrir – nesse caso, já é tarde demais.

O hipster é um supra defensor da sua causa, que não admite ser comparado com os defensores normais. Não vale de nada eu ter amigos gay desde muito novo, e até me ter "atravessado", socialmente e não só, por um ou outro ao longo dos anos: se não vou ao Pride, sou um homofóbico como os outros; não vale de nada eu gastar muito mais na manutenção do meu carro por o ter escolhido por ter filtro de partículas: se não tenho um Prius, sou um assassino da natureza; não vale de nada eu ter um computador em casa com 8 núcleos e 12 GB de RAM: se não é um Apple, sou um info-excluído. Não vale de nada a entrada do meu apartamento parecer uma sucursal da Arca de Noé (agora já não, que os hamsters e os peixes foram-se – resta a tartaruga): se não tenho três gatos e dois cães (todos resgatados, claro), não tenho nenhum respeito pelos animais.

Hipster Conundrum
Hipster Conundrum @ DogHouseDiaries - Creative Commons BY-NC

Depois de alguns anos a ter tido o desprazer de entrar em discussões com estes hipsters camuflados, aqui ficam três dicas a usar assim que se apercebam que estão a (tentar) discutir com um:

Em casa, sozinho com as duas filhas, a mais velha de 7 anos, a mais nova de 10 meses. A esposa tem uma reunião até às tantas da noite. Depois de dar a sopa à mais nova e de mandar a mais velha tomar banho antes de jantarmos, sentei-me no sofá, com um olho no José Gomes Ferreira a zurzir nas PPP como se não houvesse amanhã, outro no parque, onde a mais nova balbuciava e batia com os peluches.

É nesta altura que a mais velha, tentando tirar partido da minha atenção já dividida, vem lançar a sua negociação.

— Sabes, pai, no Sábado vai haver um piquenique no parque... tem cavalos onde podemos andar, e barcos...

— Hmmm...

("...isto foi de tal maneira um conluio, que levou a que se favorecessem estes interesses todos...", dizia Gomes Ferreira).

— Podemos ir? – incentivada pela minha aparente distracção, faz a pergunta de chofre, pode ser que eu responda afirmativamente, só para abreviar a discussão.

— Tenho que falar com a mãe.

— Mas tu deixas?

— Sabes que eu e a mãe tomamos essas decisões em conjunto; depois dizemos-te.

— Mas se fosses tu a decidir, deixávas? – afinal, não tinha sido tão simples como parecia à primeira vista.

— Nunca seria eu a decidir uma coisa dessas sozinho, filha.

("...e a Procuradoria já vem tarde, porque já todos percebemos, há muito tempo...")

— E se a mãe não estivesse cá? Se tivesse ido para o Codebits, por exemplo... – e ri-se, nervosamente. A única pessoa que desaparece de casa sou eu, uma vez por ano, precisamente para ir ao Codebits. Eu estava a ver onde ela queria chegar: "afinal, quando não estás cá, a mãe tem de tomar as decisões sem ti". Falha: isso não é minimamente verdade.

— A mãe não me telefona, se tiver algum problema, quando não estou cá? Não falamos no Skype à noite, todos os dias que eu estou lá em baixo? Se fosse preciso tomar uma decisão a correr, que não é, eu também telefonava à mãe. – a mais nova agarra no sapato e interroga-se "ai é?", que é maneira dela perguntar "o que é?", e presta-se a responder com afinco, "atato", franze o sobrolho, "tapato", ainda não é isto, "tatato"; desiste e grita "ah ah ah ah ah", enquanto bate com as mãos nas pernas. Está-se a tornar difícil seguir os raciocínios de tanta gente e manter o meu coerente.

("...chama-se enriquecimento ilícito, que os nossos políticos não quiseram legislar.")

Sente-se encurralada, e tenta a última cartada: o cenário impiedosamente lógico, plausível e tétrico.

— Então imagina que a mãe não existia; tinhas mesmo que decidir: íamos?

Não digo nada por momentos. Um, dois, três, a maximizar o desconforto dela. A mais nova, sentindo a tensão, cala-se e olha para mim: tem um olhar misto, meio receoso, meio vitorioso, como quem sabe que vem aí uma resposta que tem tanto de sarcástico como de contundente, que vai arrumar a discussão, e que não é ela que está na berlinda. Até Gomes Ferreira faz uma pausa dramática, como se, lá em Lisboa, sentisse que precisava de ajudar este pai, cá em cima, em Vila Real.

— Se a mãe não existisse, tu estavas no colégio interno, e esta discussão nem sequer se colocava. – digo-o muito claramente, quase soletrando as palavras, com uma cara de pau inabalável. Fito-a durante um segundo, e volto a prestar atenção à televisão.

("Isto é dum cinismo e duma frieza atroz.")

A minha filha mais velha passa por várias emoções em menos de um segundo. Pelo canto do olho, vejo-a passar da confusão à incredulidade, depois ao receio, de seguida à sobranceria de quem sabe que isso seria impossível e finalmente ao desalento, ao aperceber-se que, por improvável que fosse esse o cenário, é hipotéticamente tão provável como o cenário colocado por ela. A discussão tinha acabado, e ela sabia que tinha perdido.

— Quando a mãe chegar, não te esqueças de discutir o assunto com ela, está bem?

Criança sensata.

— Não me esqueço, não te preocupes. E se fôssemos jantar?

Comentários Nenhum comentário Continuar a ler Continuar a ler »

SASSPara finalizar esta série sobre o mjamado.com, falta falar sobre o que é, para mim, a tecnologia mais útil que aprendi no último ano: SASS, um superset da linguagem CSS, juntamente com Compass, uma biblioteca de mixins para usar com SASS (mixins é o termo convencionado para referir o que não são mais que pequenas funções).

Não vou alongar-me sobre todas as vantagens do SASS (estão aí os links, é dar uma voltinha), mas vou focar quatro pontos que me são caros.

 Categorias
 Arquivo
 Projectos em Destaque
 Últimas Postas no Blog
 Últimos Comentários do Blog