Posts de July, 2011

[Andrews Medina] haskell para pythonistas

Wednesday, July 27th, 2011

No FISL 12 que aconteceu nos dias 29 de junho a 02 de julho de 2011 eu apresentei uma palestra relâmpago cujo o tema foi: “haskell para pythonistas”. A palestra ficou legal, mas 5 minutos é bem pouco para um assunto como esse, então resolvi começar a fazer um “guia” de haskell para desenvolvedores python e esse post é o primeiro dessa série.

Primeiramente, eu não sou um programador haskell fluente, eu apenas utilizei haskell para pequenas brincadeiras, entre elas, resolver algum problemas do projecteuler.net. Mas, já consegui ver várias semelhanças e diferenças entre haskell e python.

paradigma funcional

Diferente de python que é multiparadigma, haskell é puramente funcional. Em linguagens imperativas você passa para o computador uma sequência de tarefas para serem executadas, em uma linguagem puramente funcional você não diz o que fazer mas sim como fazer.

Por exemplo, o fatorial de um número é o produto de todos os números de 1 até esse número. Em haskell a implementação do fatorial seria:


fatorial numero = product [1..numero]

Outro exemplo, seria a sequência de fibonacci. O valor do item de fibonacci com posição 0, deve retornar 0. A posição 1 deve retornar 1 e da posição 2 em diante deve retornar a soma dos valores dos dois itens anteriores na sequência. A implementação em python que é uma linguagem imperativa seria:


def fibonacci(numero):
   if numero == 0:
       return 0
   elif numero == 1:
       return 1
   else:
       return fibonacci(numero - 1) + fibonacci(numero - 2)

Já em haskell:


fibonacci 0 = 0
fibonacci 1 = 1
fibonacci numero = fibonacci(numero - 1) + fibonacci(numero - 2)

lazy evaluation

Haskell só executará o resultado e os parâmetros de uma função quando eles forem necessários. Com esse recurso é possível criar funções que retornem sequências infinitas como a de fibonacci onde é executado apenas os valores necessários:


fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

tipagem estática

Uma das características que haskell tem que difere de python é ter tipagem estática, mas ela tem inferência de tipos, ou seja, o compilador associa implicitamente o tipo da variável conforme o valor dela, assim, não é preciso declarar o tipo de uma váriavel. Por exemplo:


Prelude> let numero  = 10
Prelude> :t numero
numero :: Integer

list comprehensions

List comprehensions é a capacidade de gerar uma lista a partir de outra lista, assim como python, haskell também tem list comprehensions. Por exemplo em python, se eu quiser gerar uma lista com apenas os números ímpares contidos em outra lista:


>>> [numero for numero in [1, 2, 3, 4, 5, 6] if numero % 2]
[1, 3, 5]

A mesma solução usando list comprehensions em haskell:


Prelude> [numero | numero <- [1, 2, 3, 4, 5, 6], odd numero]
[1,3,5]

A diferença de list comprehension em haskell é que é possivel fazer list comprehensions compostas:


Prelude> [numero1 * numero2 | numero1 <- [1, 2, 3, 4], numero2 <- [1, 2, 3, 4]]
[1,2,3,4,2,4,6,8,3,6,9,12,4,8,12,16]

como começar

Para quem está interessado em começar uma aventura no mundo das linguagens funcionais com haskell, eu indico a instalação do ghc (http://hackage.haskell.org/platform/) que é um compilador para haskell e a leitura do learn you a haskell (http://learnyouahaskell.com), que na minha opinião é um dos melhores livros para quem quer começar a programar em haskell.

[Flávio Ribeiro] Time to move on

Friday, July 22nd, 2011

Hey there, here I am, after one year without posting anything. During this time away from here, a lot of things have happened in my life.

To summarize, I’ve finished my bachelor degree at IFPB in João Pessoa and changed city twice. The first move was to Campina Grande, to start a masters degree in Computer Science at UFCG, but i’ve completely failed. It seems that I cannot stand more time in classrooms, at least this year.

Then, I’ve moved to Rio de Janeiro, where I’ve started working at Globo.com. I’m here for about 20 days and I’m really enjoying :) . I’m still looking for a place to live, getting used to (strange, not saying ugly) cariocas accent and workin’ a lot. I hope to spend a good time here.

Wish me luck!

[Rafael Carício] Implementando uma Toy Programming Language

Sunday, July 17th, 2011

Tudo que uma linguagem de programação precisa é de uma estrutura de loop, expressões, listas e funções. Concordam?

[update] - algumas linguagens não tem nenhuma estrutura de loop. Como Haskell que usa pattern matching pra resolver o problema de estruturas de controle e recursão para loops.

Estou implementando uma linguagem sem nome (ainda usando um nome temporário), e estou pensando em implementar o básico que uma linguagem moderna precisa. Estou implementando para aprimorar meus próprios conhecimentos sobre programação e relembrar coisas que aprendi na época da faculdade. Aqui vai um exemplo da sintaxe da linguagem que estou implementando:

Tudo na linguagem é função, expressão, lista e valor. Inclusive o “if”. Que nela é uma função que é definida na propria linguagem:

E usado desta foma:

O “*” informa ao interpretador que estou querendo referenciar a variável “k” no escopo dinâmico (escopo onde a função está sendo executada) e não no escopo local interno da função, onde modificações a esta variável não fariam diferença para o escopo onde a função foi chamada (caso exista uma variável com o mesmo nome).
Na linguagem existe também apenas uma estrutura de loop que é o “while”. E funciona da seguinte forma:

Com o “while” eu posso definir como é minha estrutura de “for”. Assim:

E usar da seguinte forma:

Assim o valor de “a” é [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]. E outra coisa interessante que posso definir é a função “map”, que ficaria da seguinte forma:

Nesta linguagem o comportamento do “map” é o mesmo do “for each” pois uma função SEMPRE retorna um valor nem que ele seja “Null”.
Com o essas funções previamente definidas, podemos implementar uma função de “filter” e ficaria assim:

Os “_” underlines nestas funções servem para não conflitar com nome das variáveis do escopo onde o programador vai usar.

Quem quiser saber mais sobre este projeto pode acompanhar pelo github. Aceito reclamações, xingamentos, elogios e etc.

https://github.com/rafaelcaricio/unamed

[Emerson Macedo] Node.JS Knockout 2011

Thursday, July 14th, 2011

Foi anunciado nessa madrugada a abertura para registro dos times para o Node.JS Knockout 2011. Já é a segunda edição, já que em 2010 aconteceu a primeira. Pra quem não sabe, o esse evento é uma espécie de competição/maratona, onde as equipes tem 48 horas para desenvolver uma aplicação do zero que depois será julgada e rankeada. Os melhores recebem premiações. Esse evento é semelhante ao famoso Rails Rumble, que já acontece desde 2008.

Apesar da premiação, esse tipo de evento motiva mais pelo fato de criar uma aplicação em 48 horas, com total ownership do que está sendo feito. Outro ponto importante desse tipo de competição é que os membros do time precisam ser muito pragmáticos. Firulas desnecessárias de interface, como arredondar bordas em browsers que não dão suporte a isso (i.e Internet Explorer) não tem vez nesse tipo de projeto. Aprender a cortar escopo e gerênciar tempo são outros desafios que importantes.

Até o dia 20/08 estão abertas as inscrições e a competição acontece entre os dias 27 e 29, também de agosto.

Aproveite e veja se percebe alguma coisa legal na página do evento. Existe uma forma de interagir bem legal :)

Até lá !!!

[Emerson Macedo] Node.JS Knockout 2011

Thursday, July 14th, 2011

Foi anunciado nessa madrugada a abertura para registro dos times para o Node.JS Knockout 2011. Já é a segunda edição, já que em 2010 aconteceu a primeira. Pra quem não sabe, o esse evento é uma espécie de competição/maratona, onde as equipes tem 48 horas para desenvolver uma aplicação do zero que depois será julgada e rankeada. Os melhores recebem premiações. Esse evento é semelhante ao famoso Rails Rumble, que já acontece desde 2008.

Apesar da premiação, esse tipo de evento motiva mais pelo fato de criar uma aplicação em 48 horas, com total ownership do que está sendo feito. Outro ponto importante desse tipo de competição é que os membros do time precisam ser muito pragmáticos. Firulas desnecessárias de interface, como arredondar bordas em browsers que não dão suporte a isso (i.e Internet Explorer) não tem vez nesse tipo de projeto. Aprender a cortar escopo e gerênciar tempo são outros desafios que importantes.

Até o dia 20/08 estão abertas as inscrições e a competição acontece entre os dias 27 e 29, também de agosto.

Aproveite e veja se percebe alguma coisa legal na página do evento. Existe uma forma de interagir bem legal :)

Até lá !!!

[Emerson Macedo] Node.JS Knockout 2011

Thursday, July 14th, 2011

Foi anunciado nessa madrugada a abertura para registro dos times para o Node.JS Knockout 2011. Já é a segunda edição, já que em 2010 aconteceu a primeira. Pra quem não sabe, o esse evento é uma espécie de competição/maratona, onde as equipes tem 48 horas para desenvolver uma aplicação do zero que depois será julgada e rankeada. Os melhores recebem premiações. Esse evento é semelhante ao famoso Rails Rumble, que já acontece desde 2008.

Apesar da premiação, esse tipo de evento motiva mais pelo fato de criar uma aplicação em 48 horas, com total ownership do que está sendo feito. Outro ponto importante desse tipo de competição é que os membros do time precisam ser muito pragmáticos. Firulas desnecessárias de interface, como arredondar bordas em browsers que não dão suporte a isso (i.e Internet Explorer) não tem vez nesse tipo de projeto. Aprender a cortar escopo e gerênciar tempo são outros desafios que importantes.

Até o dia 20/08 estão abertas as inscrições e a competição acontece entre os dias 27 e 29, também de agosto.

Aproveite e veja se percebe alguma coisa legal na página do evento. Existe uma forma de interagir bem legal :)

Até lá !!!

[Emerson Macedo] Node.JS Knockout 2011

Thursday, July 14th, 2011

Foi anunciado nessa madrugada a abertura para registro dos times para o Node.JS Knockout 2011. Já é a segunda edição, já que em 2010 aconteceu a primeira. Pra quem não sabe, o esse evento é uma espécie de competição/maratona, onde as equipes tem 48 horas para desenvolver uma aplicação do zero que depois será julgada e rankeada. Os melhores recebem premiações. Esse evento é semelhante ao famoso Rails Rumble, que já acontece desde 2008.

Apesar da premiação, esse tipo de evento motiva mais pelo fato de criar uma aplicação em 48 horas, com total ownership do que está sendo feito. Outro ponto importante desse tipo de competição é que os membros do time precisam ser muito pragmáticos. Firulas desnecessárias de interface, como arredondar bordas em browsers que não dão suporte a isso (i.e Internet Explorer) não tem vez nesse tipo de projeto. Aprender a cortar escopo e gerênciar tempo são outros desafios que importantes.

Até o dia 20/08 estão abertas as inscrições e a competição acontece entre os dias 27 e 29, também de agosto.

Aproveite e veja se percebe alguma coisa legal na página do evento. Existe uma forma de interagir bem legal :)

Até lá !!!

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

[Francisco Souza] QConSP 2011: eu vou, e vou palestrar!

Monday, July 11th, 2011

Em Setembro vai rolar a segunda edição da QConSP, versão brasileira do principal evento de arquitetos e desenvolvedores do mundo. O evento é organizado pelo InfoQ Brasil em parceria com a Caelum. No ano passado o evento bombou, e tenho certeza que este ano não será diferente.

Marcarei presença apresentando, junto ao Andrews Medina, a palestra “Os complicados testes de interfaces e componentes web”, na trilha “O browser como plataforma”. Na palestra, apresentaremos algumas técnicas para testar interfaces web, seja de forma integrada ou de forma unitária (componentes isolados), usando ferramentas como Splinter e Jasmine.

Além da nossa palestra, o evento também contará com apresentações de feras como Guilherme Silveira, Jim Webber, Evan Weaver e outros. A QConSP 2011 vai acontecer nos dias 10 e 11 de Setembro, no Centro Fecomercio de Eventos, em São Paulo. Ainda da tempo de se inscrever!

Nos vemos lá! :)

[Emerson Macedo] FISL12 - Slides da apresentação sobre Javascript

Wednesday, July 6th, 2011

No último sabado, estive no FISL12, fazendo uma apresentação sobre Javascript. O objetivo da minha apresentação foi ajudar a despertar na comunidade brasileira uma cultura de escrever um código Javascript melhor. Muitos desenvolvedores não tem idéia que Javascript é uma linguagem Orientada a Objetos além de Funcional. Nessa apresentação eu falo da parte O.O, fundamentando os conceitos e mostrando exemplos. Seguem os slides:

Javascript Orientado a Objetos - Fisl12

View more presentations from Emerson Macedo

[Emerson Macedo] FISL12 - Slides da apresentação sobre Javascript

Wednesday, July 6th, 2011

No último sabado, estive no FISL12, fazendo uma apresentação sobre Javascript. O objetivo da minha apresentação foi ajudar a despertar na comunidade brasileira uma cultura de escrever um código Javascript melhor. Muitos desenvolvedores não tem idéia que Javascript é uma linguagem Orientada a Objetos além de Funcional. Nessa apresentação eu falo da parte O.O, fundamentando os conceitos e mostrando exemplos. Seguem os slides:

Javascript Orientado a Objetos - Fisl12

View more presentations from Emerson Macedo