Podcasts de Tecnologia e Programação

Uma das minhas fontes de aprendizagem e entretenimento passa por ouvir alguns podcasts de excelente qualidade. Caso estejam interessados, aqui ficam algumas recomendações:

This Week In Tech

This Week in Tech

Provavelmente o mais famoso podcast sobre tecnologia, This Week in Tech (TWIT) é um programa semanal que consiste num painel liderado por Leo Laporte. Em cada episódio é feita uma análise dos acontecimentos tecnológicos da semana com opiniões informadas e interessantes. É um podcast bem humorado que proporciona bastantes momentos divertidos e o mais “leve” dos que compõem esta lista.

Security Now

Security Now

Para quem tem interesse no mundo da segurança informática, Steve Gibson não deverá ser um nome estranho: este senhor foi responsável pelo primeiro anti-spyware e pelo conhecido software de recuperação de discos rígidos SpinRite. Há dois tipos de episódios que são intercalados semanalmente: perguntas de ouvintes e aprofundamento de um tópico em específico. Este podcast é uma excelente fonte de informação e o Steve faz um trabalho notável ao explicar pormenores por trás de assuntos bastante complexos como criptografia e vulnerabilidades de segurança.

Herding Code

Herding Code

O mundo do Open Source está minado de frameworks e bibliotecas e por vezes é difícil mantermo-nos actualizados, bem como sabermos o que realmente nos interessa. Em cada episódio um autor é convidado a divulgar e explicar em que consiste o seu projecto perante um painel com alguns programadores de renome, que conduzem a entrevista. Apesar de muitas vezes o assunto me ser totalmente alheio, é interessante estar a par do que se faz actualmente e quais são as tecnologias que estão na moda.

This Developer's Life

This Developer’s Life

O meu favorito de todos é, sem dúvida, o This Developer’s Life. Em vez de se focar no aspecto técnico, foca-se nas experiências e vivências de programadores. Em cada episódio Rob Conery e Scott Hanselman dão-nos a conhecer narrativas de várias pessoas ligadas à tecnologia sobre um tema em específico. Estas participações são acompanhadas por música bastante alternativa que dá uma aura especial ao programa. É como se fossemos transportados para um mundo diferente e que nos envolve completamente nestas histórias de vida. Um podcast inspirador.

Hanselminutes

Hanselminutes

Também apresentada por Scott Hanselman, uma figura prominente no mundo das tecnologias Microsoft, este podcast consegue ser o mais generalista no que toca a assuntos directamente relacionados com programação. Apesar de também ter episódios semelhantes aos do Herding Code, centrados em projectos no mundo do Open Source, muitos dos episódios são sobre assuntos variados: boas práticas de desenvolvimento, padrões, entrevistas a personalidades, tecnologias, etc. Recomendo esta pela constante capacidade do Scott de produzir conteúdo de qualidade e de interesse.

Software Engineering Radio

Software Engineering Radio

O SE-Radio destaca-se dos outros por ser exclusivamente dedicado à informação (e não ao entretenimento) sobre os mais variados tópicos da engenharia de software. Tudo o que possam imaginar sobre técnicas de desenvolvimento de software provavelmente já foi analisado pelos senhores responsáveis por este podcast. Este podcast semanal já conta com 175 episódios de elevada qualidade, dura há mais de 5 anos e tem como objectivo ser uma fonte duradoura de conhecimento para todos os programadores profissionais. Sem dúvida a não perder caso queiram aprender mais sobre esta arte, que é o desenvolvimento de software.

Caso conheçam mais podcasts interessantes, por favor indiquem-nos nos comentários 🙂

Codebits IV (2010)

Codebits Banner

Pela primeira vez participei numa edição do Sapo Codebits. Para quem não conhece, o Codebits é em evento para geeks com concursos, palestras, animação e, extremamente importante, comida grátis. Esta 4ª edição ocorreu no Pavilhão Atlântico, contou com 750 participantes (mas mais de 1500 candidatos) e durou 3 dias.

Nos cerca de 2 meses que antecederam o evento participei numa série de desafios que estiveram disponíveis no site oficial. Quem ficasse no top 16 entrava directamente no “Amazing Codebits Quiz Show”, cujo prémio final era uma Xbox 360. De todos, apenas não consegui resolver o primeiro (até hoje não sei a resposta!) e acabei por ficar em 6º lugar, graças a um belo trabalho de equipa com o Luís Nabais (que ficou em 5º).

Dia 1

Ao chegar ao evento foi-me entregue um kit com uns freebies engraçados, como uma t-shirt, pasta e escova de dentes, uma capa para portátil, uma manta, um termo e uma pulseira/pen usb. Também gostei bastante dos autocolantes temáticos com os quais decorei o meu portátil durante uns tempos.

O evento abriu com “el capitan” Zeinal Bava e a revelação do Meo Jogos. Fiquei bastante impressionado com o serviço que será, sem sombra de dúvida, aliciante para muitas familias. A possibilidade de ter uma biblioteca de jogos ao nosso dispor  instantaneamente e sem ter que comprar uma consola é muito interessante. A tecnologia por trás do serviço também me impressionou bastante.

Codebits 2010Codebits 2010

Após o almoço (saladinha do Mac) fui a 2 ou 3 palestras e acabei por encontrar o Luís Teófilo que tinha proposto o projecto “Expert Guitar for Noobs”. O projecto consistia em utilizar um comando do Guitar Hero 3 para tocar acordes/notas reais. O objectivo era ligar o comando ao computador, tratar os inputs dos botões e gerar notas em MIDI de acordo com um mapeamento feito anteriormente. O comando apenas tem 5 botões, mas seria possível ter à nossa disposição 31 acordes/notas através da combinação de vários botões.

Pedi-lhe para me juntar ao projecto, ele aceitou e começámos logo a trabalhar. Acabei por não ver a palestra sobre o Spacebits, mas foi por uma boa causa. Escolhemos logo as bibliotecas e começámos a tratar o input da guitarra.

No final do dia foi um dos momentos mais hilariantes de todo o evento: o Presentation Karaoke. Cada participante tinha que apresentar um tema sobre o qual não tinha qualquer conhecimento anterior. Era usada uma apresentação aleatória e o participante tinha que se safar e apresentar, de alguma maneira, o conteúdo da mesma. Uns foram mais engraçados que outros, mas no geral foi muito bom.

Dia 2

Acabei por ir dormir a casa mas acordei cedo para ver a apresentação do Bruno Pedro sobre OAuth. O Bruno já me tinha dado formação em PHP na Caixa mágica e, para além disso, tenho em mãos um trabalho para a cadeira de Segurança sobre OAuth, pelo que não podia perder esta sessão. Foi bastante esclarecedora e deu-me uma ideia da estrutura que deveria seguir no meu trabalho.

O resto da tarde foi passada a trabalhar no projecto. Eu fiquei encarregue da parte dos MIDIs e interface gráfico, enquanto que o Luís Teófilo continuou a afinar o funcionamento do comando. Foi bastante difícil colocar a guitarra a tocar as notas de uma maneira fluída, principalmente o fading entre diferentes notas.

No final do dia participei no Quiz Show com o Luís Nabais e acabámos por ficar pelo caminho. Ainda não me perdoei de me ter enganado no significado de RTCP, mas as cadeiras de Redes já lá vão longe. Ficámos em 2º lugar com 4 pontos enquanto que a equipa vencedora ficou com 8.
IMG_8683IMG_8590
Para além disto, no segundo dia também houveram Nuclear Tacos. A malta da organização mandou vir umas malaguetas assustadoras e  fizeram uns tacos que deixaram muito boa gente à beira de um ataque. Acabei por não provar, pode ser que na próxima edição ganhe coragem.

Dia 3

Dei-me novamente ao luxo de ir dormir a casa, visto que o projecto estava bastante adiantado. Durante a noite o meu colega arranjou uma alternativa ao MIDI que trouxe uma qualidade de som bastante melhor. Bastaram mais uns pormenores e estávamos prontos para apresentar.

Também foi necessário apresentar a nossa ideia a um juri que ia fazer uma pré-selecção. Aqui começaram as coisas a correr mal… Pensámos que era apenas uma maneira de distinguir os projectos que estavam em condições de apresentar dos que ficaram a meio gás. Descrevemos e demonstrámos o nosso trabalho finalizado e deram-nos a entender que iriamos apresentar. Aliás, não vimos razão que os levassem a excluir o nosso projecto, visto que fizemos tudo aquilo que tinhamos definido (e até mais do que estava previsto).

Codebits 2010 - Day TwoCodebits 2010-232Codebits 2010 - Day Two

Passado uma hora começaram a anunciar no Twitter oficial os projectos que iam apresentar no palco principal. Iamos ficando cada vez mais nervosos à medida que os tweets iam passando e o nosso projecto não aparecia. Por fim, disseram que não tinham escolhido mais nenhum projecto.

Ficámos de fora e ficámos de rastos. Três dias a trabalhar num projecto e a faltar a palestras para o completar, para depois nos deixarem de parte e não nos darem sequer 90 segundos para o mostrar. Não estávamos sequer a pensar nos prémios (nem sabia quais eram), apenas queriamos mostrar o que tinhamos feito.

Conformei-me e fui-me sentar no palco principal para ver as apresentações dos outros grupos, quando reparei que o meu colega estava a falar com a organização. Fui até lá e eles concordaram em deixar-nos apresentar. Tal como nós, vários grupos mostraram a sua indignação e acabaram por ser aceites.

Vimos as apresentações dos projectos até chegar à nossa vez. O Luís praticou mais um pouco e testámos o software para ver se estava tudo a funcionar (há que ter cuidado com o Murphy). Não estava muito nervoso antes de entrar em palco, apesar de irmos apresentar para cerca de 600 pessoas. Para mim só importava mostrar o projecto ao resto do pessoal. No fim, a reacção do público foi extremamente positiva! Para além das palmas, reparei que tínhamos cerca 100 votos positivos e apenas 10 negativos no ecrã gigante. Tinha sido mais que suficiente e já podia sair do Codebits feliz.




Passado algum tempo começaram a cerimónia de entrega de prémios. Os 10 primeiros projectos iriam receber um “pack” que seria cada vez mais recheado à medida que se caminhasse para o 1º lugar. Quando anunciaram o 6º lugar fiquei petrificado: “Expert Guitar for Noobs!”. Como não tinhamos sido pré-seleccionados, não achei que tivéssemos qualquer hipótese de ficar nos primeiros lugares. Acabámos por ganhar um Macbook Air, um Mac Mini, um iPod nano, um Magic Tackpad, 2 poufs, 5 livros da O’Reilly, um saquinho com o pó que usaram para fazer os Nuclear Tacos e um pequeno (grande) troféu. A divisão dos prémios foi relativamente fácil: eu fiquei com o Macbook Air, um pouf e um livro, enquanto que o Luís ficou com o resto. A divisão do troféu é que foi mais complicada. Atirarámos uma moeda ao ar e eu acabei por ser o sortudo.

Resumindo e Concluindo

O evento estava muito bem organizado e fizeram um excelente trabalho com a decoração. Os gráficos espalhados por todo o recinto deram um ambiente muito próprio à Sala Tejo do Pavilhão Atlântico. Era como se entrássemos noutro mundo.

Destaque negativo para a maneira que escolheram para seleccionar os projectos. Compreendo que tenham tido que fazer alguns cortes devido ao elevado número de projecto (cerca de 100), mas um projecto que é excluído e acaba por ficar em 6º lugar é um claro indício que a selecção não foi conduzida da melhor maneira.

Destaque positivo para a zona de Retro Computing que trouxe alguma nostalgia. Para além disso, a variedade e qualidade das palestras foi bastante elevada e, apesar de não ter tido oportunidade de ver algumas delas ao vivo (principalmente as do Celso Martinho e do Mário Valente), poderei fazê-lo online visto que foram gravadas na íntegra.

Este é, sem dúvida, um evento obrigatório para qualquer pessoa que tenha um grande interesse por informática, os denominados geeks. Parabéns à organização e contem comigo para o ano que vem!

Primeiros passos com o Git

Git LogoO Git é um sistema de controlo de versões usado para gerir o desenvolvimento de software. Parte do mesmo principio que o Subversion, em que alterações do código são gravadas incrementalmente, gerando assim um histórico de toda a aplicação. Um sistema destes (quer seja Subversion, Mercurial, Git ou outro qualquer) é essencial para quem desenvolve em equipa, tornando possível voltar atrás nas modificações e gerir eficazmente a alteração concorrente do código.

A grande diferença que separa o Git do Subversion é ser um sistema distribuído em vez de centralizado. O Subversion conta apenas com um repositório num servidor, enquanto que cada utilizador do Git tem um repositório local, para além de um repositório central. Assim, é possível fazer e gravar as alterações mais rapidamente “offline” e fazer o push para o repositório central mais tarde, obtendo mais eficiência e uma maior organização. Os pushes são menos frequentes mas continuamos com um sistema de versões local, onde podemos ir fazendo commit das alterações. Outra vantagem é um sistema de branches mais eficaz que encoraja os utilizadores a usar e abusar desta funcionalidade.

Esta ferramenta já existe há algum tempo mas apenas agora comecei a dar os meus primeiros passos com ela. Até hoje só tinha usado o Subversion num projecto académico e gostei bastante. A minha instalação do Git foi em Windows.

Basicamente temos uma shell ao nosso dispor com bastantes comandos do Linux a funcionar tal como seria de esperar. Também há um interface gráfico para quem não se sentir à vontade com a linha de comandos, apesar de não ter a mesma flexibilidade ou rapidez de uso.

Quem usar o Notepad++ pode alterar o editor default (o Vim!) com este comando:

git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Podem adaptar este comando a qualquer programa que queiram usar para fazer edições de texto. Normalmente estas edições são feitas aquando de um commit.

Agora que está tudo configurado, podemos experimentar alguns comandos.

Criar um Projecto e Repositório

Neste exemplo vou partir criar um projecto de raiz, mas podia-se aplicar o mesmo conceito para um que já tivesse alguns ficheiros.
MiKe@MIKE-PC ~
$ mkdir project1

MiKe@MIKE-PC ~
$ cd project1

MiKe@MIKE-PC ~/project1
$ git init
Initialized empty Git repository in c:/Users/MiKe/project1/.git/

MiKe@MIKE-PC ~/project1 (master)
$ touch readme file1 file2

MiKe@MIKE-PC ~/project1 (master)
$ ls
readme file1 file2

MiKe@MIKE-PC ~/project1 (master)
$ git add .

MiKe@MIKE-PC ~/project1 (master)
$ git status
# On branch master
#
# Initial commit
#
# Changes to be commited:
# (user "git rm --cached ..." to unstage)
#
# new file: file1
# new file: file2
# new file: readme
#

Com esta série de comandos criámos a pasta do projecto, criámos o repositório com git init, colocámos 3 ficheiros novos e adicionámos todos os ficheiros ao repositório (o ponto em git add . adiciona todos os ficheiros da pasta). O git status mostra-nos o estado actual do repositório.

Alterações e Commits

MiKe@MIKE-PC ~/project1 (master)
$ echo 'hello' > readme

MiKe@MIKE-PC ~/project1 (master)
$ git status
# On branch master
#
# Initial commit
#
# Changes to be commited:
# (user "git rm --cached ..." to unstage)
#
# new file: file1
# new file: file2
# new file: readme
#
# Changed but not updated:
# (use "git add ..." to update what will be commited)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: readme
#

MiKe@MIKE-PC ~/project1 (master)
$ git commit -am 'first commit'
[master (root-commit) f734740] first commit
1 files changed, 1 insertions(+), 0 deletions (-)
create mode 100644 file1
create mode 100644 file2
create mode 100644 readme

Inserimos texto num dos ficheiros e podemos ver que esta alteração está por guardar através do git status. Se o commit for feito com o -m podemos inserir a descrição através da própria linha de comandos. Caso seja um commit importante devemos perder algum tempo a colocar uma descrição decente através de um editor de texto, de modo a podermos navegar o histórico das alterações com algum contexto.

Branches, Merges e Checkouts

Um branch deve ser criado cada vez que mudamos de contexto: cada programador na equipa deve trabalhar no seu branch, cada nova feature a ser implementada deve ter o seu branch e até se decidirmos caçar um bug devemos criar um branch. Isto permite separar a alteração de código por contextos tornando a nossa vida mais fácil se mais tarde quisermos saber qual foi o branch que introduziu um bug.

MiKe@MIKE-PC ~/project1 (master)
$ git branch new-feature

MiKe@MIKE-PC ~/project1 (master)
$ git branch
* master
new-feature

MiKe@MIKE-PC ~/project1 (master)
$ git checkout new-feature
Switched to branch new-feature

MiKe@MIKE-PC ~/project1 (new-feature)
$ echo 'new feature!' > file1

MiKe@MIKE-PC ~/project1 (new-feature)
$ less file1
new feature!

MiKe@MIKE-PC ~/project1 (new-feature)
$ git commit -am 'new feature added to file1'
1 files changed, 1 insertion(+), 0 deletions(-)

Mudámos de contexto para adicionarmos uma feature nova. Inserimos texto num ficheiro e fizemos commit apenas no branch new feature. Estas alterações não passam para o branch master:
MiKe@MIKE-PC ~/project1 (new-feature)
$ git checkout master
Switched to branch master

MiKe@MIKE-PC ~/project1 (master)
$ less file1

Como podemos observar, as alterações não se manifestam no branch principal. Caso estejamos contentes com as alterações que fizémos, podemos unir os 2 branches com um merge:
MiKe@MIKE-PC ~/project1 (master)
$ git merge new-feature
Updating f734740..789f572
Fast-forward
file1| 1 +
1 files changed, 1 insertion(+), 0 deletions(-)

MiKe@MIKE-PC ~/project1 (master)
$ less file1
new feature!

Se não houverem conflitos entre os 2 branches podemos dar por terminado o o processo de merge.

Não vou aprofundar mais as funcionalidades para já, visto que ainda estou a começar a usar o Git. Deixo alguns links úteis para quem esteja na mesma situação que eu:

ZCE: Certificação Zend PHP5

Zend Certified EngineerA Zend, para quem não conhece, intitula-se “The PHP Company“. São os autores da Zend Framework e alguns dos seus empregados são os criadores originais da linguagem de scripting PHP. Como parte dos seus serviços, a Zend oferece certificações tanto em PHP como na Zend Framework.

Este verão frequentei uma formação de PHP organizada pela Caixa Mágica Software: a PHP Summer School. Uma das componentes da formação era a preparação e oferta de um voucher para nos podermos tornar um ZCE – Zend Certified Engineer.

Quando a formação acabou, comecei a pensar na certificação e nas suas vantagens. Seria enriquecedora para o curriculum, apesar de haver muitas opiniões negativas em relação a estes pedaços de papel. Não tenho a noção do valor de uma certificação no mercado de trabalho português, e só por ter uma não significa que seja melhor que alguém que não a tenha: existem programadores muito bons que não pensam sequer nestes assuntos. A maior parte das vezes os projectos passados falam por si.
Encarei a situação como um desafio e, como não gosto de perder, achei que era melhor preparar-me bem.

O ESTUDO

Existem algumas referências no que toca ao estudo para esta certificação. Após alguma pesquisa, encontrei um livro que prometia preparar o candidato para enfrentar o exame: “php|architect’s Zend PHP5 Certification Study Guide” . São cerca de 250 páginas que cobrem todo um leque de assuntos como funções, programação orientada a objectos, design patterns, streams, XML, segurança, etc. Achei o livro bem estruturado e bastante rico em termos de conteúdo. Os assuntos são abordados de uma forma objectiva, sucinta e direccionada para os conteúdos que constam na prova.

Após a leitura do livro, há sempre a dúvida: “Será que estou pronto?”. Existem algumas maneiras de saber, umas melhores e outras piores. A primeira que tentei foi um outro livro com perguntas similares à do exame, “The Zend PHP Certification Practice Test Book“. O meu conselho é o seguinte: fujam! Apesar do livro ter uma grande quantidade de perguntas com um grande grau de semelhança às do exame, algumas respostas não estão correctas e podem influenciar pela negativa a aprendizagem de certos conceitos base.

A alternativa que arranjei foi a compra de um pack de 5 exames no site da Zend. Perdi o amor a 17€ e tive a hipótese de testar em primeira mão o meu conhecimento. Penso que o preço é comparativamente baixo à perspectiva de ter que repetir o exame de certificação: 125€. Acabei por fazer apenas 4, visto que muitas das perguntas se repetem de exame para exame. Recomendo esta abordagem, apesar de se poder encontrar muitas das perguntas que estão nestes exames com algum google-fu. A mais valia de usar os testes oficiais é que no fim podemos ver quais são as nossas áreas mais fracas para podermos intensificar o estudo das mesmas.

O EXAME

O próximo passo foi marcar o exame num dos centros Pearson Vue em Lisboa. A escolha acabou por recair pela Rumos, devido à proximidade com o ISCTE. Foi uma experiência tranquila: entrar, fazer o exame e sair. 70 perguntas de 3 tipos: resposta múltipla, resposta única e resposta por extenso.
Na minha opinião, há determinadas perguntas que são ridículas. Um bom programador não precisa de saber de cor todas as funções de uma linguagem, ou o 4º argumento de uma determinada função. Não é necessário ser-se um dicionário de funções para se ser eficaz e competente, pelo que penso que estas perguntas só constam do exame para inflacionar a dificuldade do mesmo e dar credibilidade à certificação. Por outro lado, concordo totalmente com a existência de outras que abordam boas práticas, generalidades e alguns casos específicos da sintaxe e comportamento da linguagem. Também achei que o grau de dificuldade era ligeiramente superior ao dos testes de treino.

A RETROSPECÇÃO

Após ter passado na certificação, tive algum tempo para pensar no que mudou desde que decidi tomar este caminho. O mais importante foi, sem sombra de dúvida, o que aprendi durante o estudo. Sinto-me muito mais confiante e mais produtivo em relação a programação em PHP. Também considero que será uma boa adição ao meu curriculum, principalmente nesta fase inicial em que a maioria da experiência é académica, fortalecendo as minhas competências profissionais.

Se estão a pensar em fazer esta certificação, o conselho que vos deixo é que estudem até estarem confiantes de que vão passar. Penso que não vale a pena o risco de fazer a certificação sem um estudo sólido. O livro que mencionei é um excelente guia de estudo, mas há certas perguntas nos exames que abordam conteúdo que não é apresentado directamente, pelo que não é suficiente. Se tiverem oportunidade, façam um ou dois testes para praticar. É o melhor benchmark que se pode ter.

PrestaShop: inserir imagens de categorias a partir dos produtos

Surgiu a necessidade de inserir imagens nas cerca de 750 categorias de uma loja PrestaShop. Obviamente que não era possível fazê-lo à mão, por isso fiz um pequeno script que percorre todas as categorias e usa uma imagem de um produto dentro dessa categoria (ou sub-categoria).

Assim, todas as categorias terão uma imagem relevante, evitando aparecer a imagem por defeito em todas as páginas. Se estiverem numa situação semelhante à minha, podem usar este script.

Instruções de uso:

  • Descomprimir o arquivo (ou copiar o script para um ficheiro chamado category_image.php)
  • Alterar, se necessário, a variável db_prefix
  • Colocar o ficheiro category_image.php na pasta principal da vossa loja
  • Executar o ficheiro através do browser (exemplo: http://example.com/category_image.php )

Se tudo correr bem, aparecerá uma mensagem a indicar quantas imagens de categoria foram alteradas.

Continuar a ler PrestaShop: inserir imagens de categorias a partir dos produtos