Obrigado ASKSoftware!

0

Olá pessoal, após um longo tempo sem postar estou de volta com algumas novidades, algumas novidades profissionais que vou compartilhar aqui no blog e outras pessoais, quem me acompanha no facebook já deve ter reparado Alegre. A principal novidade é que após 1 ano e 8 meses eu deixei de trabalhar na asksoftware e voltei a trabalhar com o pessoal da Harpia Ventures, sendo mais específico com o pessoal do place to ask. Quem me acompanha sabe que em 2009 eu trabalhei na harpia ventures com o pessoal do Evenka.

Falando do tempo em que fiquei no asksoftware certamente não vou conseguir descrever tudo que aprendi lá. Desde as pessoas incríveis que tive a chance de conhecer até todas as tecnologias que aprendi. Muito do meu aprendizado pode ser visto aqui no blog, entre as tecnologias que usamos nos diversos projetos estão: ASP.NET MVC (1,2 e 3), Entity Framework 4, TFS. Hg,XML, XSL além de praticar um monte de coisas que acredito como TDD, agilidade e build contínuo.
Eu só tenho a agradecer pela oportunidade e pela confiança que a equipe depositou em mim, espero em breve ter a oportunidade de participar de outros projetos com a galera.

258205_164184013644858_159670080762918_377194_547019_o

Falando do futuro aqui na Harpia ventures vou continuar com um trabalho semelhante com o exercido da Harpia Ventures, com exceção do tipo de software que estamos construindo que é uma aplicação social pra internet e não um software corporativo intranet. Os primeiros conhecimentos que vou ter que adquirir/praticar aqui são otimização/escalabilidade e segurança, então já sabem que vem post no blog sobre isso ai, vou começar com o livro Ultra-Fast ASP.NET, indicação da galera aqui. Por enquanto é isso pessoal, até,

DevDay #BH Sucesso Total

1

Olá pessoal, no ultimo sábado(27-08) tive a honra de participar do #devday. Eu já tinha confirmado minha ida ao evento um mês antes, no entanto surgiu a oportunidade de participar fornecendo uma lightning action. Quero agradecer ao pessoal de BH que foi super. receptivo e bem legal, um prazer rever amigos e conhecer pessoalmente muitos outros.Eu e RodrigoVidal gostamos tanto que até perdemos o voo, o evento foi excelente.

Conteúdo

A agenda já prometia um grande evento, tivemos de tudo! destaco as lightning actions que foram bem dinâmicas e legais. gostei bastante da apresentação sobre NoSql apresentada pelo gibran, gostei bastante também da talk sobre qualidade de codificação apresentada pelo Glauber. Entre as palestras teve tudo que gostaria de ouvir, a primeira que destaco foi a apresentação sobre a importância do front-end e as novidades do rails 3.1, eu gosto de Rails e já esperava uma apresentação bem focada no framework e no mundo Ruby, no entanto fui surpreendido por uma excelente palestra totalmente focada em desenvolvimento de front-end web. O Daniel Lopes mostrou como olhar de maneira profissional o front-end e de quebra deixou vários assuntos pendentes de estudo. Ainda tivemos as palestras sobre falhas de segurança e a palestra chocante do Rodrigo Vidal sobre programação funcional. O Rodrigo vidal explodiu a cabeça do pessoal, falando bem sobre programação funcional. A apresentação envolveu matemática, compiladores,linguagens e tudo mais que programadores gostam de ouvir, sensacional. Ainda tivemos o Giovanni bassi falando sobre CoffeeScript, mostrou bem como está fácil usar a tecnologia com o ambiente de desenvolvimento .NET, nota 10.

Minha Lightining action

Eu falei rapidinho como está sendo o processo de mudança e adoção de melhorias no dia-a-dia da asksoftware, foi uma apresentação rápida e bem pragmática. aqui estão meus slides

 

Happy Hour e comunidade
O happy hour foi sensacional, rolou até tarde no assacabrasa. O pessoal discutiu muito sobre tudo e pouco sobre software, é legal ver a comunidade ainda mais próxima e conversando sobre muitas coisas além de desenvolvimento.. quem foi ao devday e não foi no hh perdeu metade do evento Smiley piscando

Para saber mais
Você pode saber mais sobre o evento buscando a hashtag #devday que por sinal foi TT em Belo Horizonte, você ainda pode acompanhar o blog do Douglas Aguiar

Eu confio no suporte, o suporte confia em Dev?

0

Olá pessoal, estava pensando em colocar agile no titulo desse post pois afinal de contas parece que quase tudo que é legal hoje com relação a equipes e comportamento profissional é relacionado á agilidade certo? Eu não concordo com isso, então vamos falar sobre o assunto(confiança) independente sobre o que a equipe acredita ou pratica.
O assunto voltou à tona(já falei muito sobre esse assunto com o sidney filho) e durante um #HH com o pessoal da ASKSoftware conversando com um profissional do suporte, ele me falava como acreditava no software que estamos desenvolvendo e ainda como acreditava que a equipe está fazendo um bom trabalho e que fica feliz em trabalhar na empresa e com a equipe que trabalha. Isso já era o suficiente para me fazer pensar, afinal de contas não tenho a mesma certeza que a equipe de desenvolvimento acredita no software que está sendo criado quanto o profissional do suporte em questão.

A conversa continuou e ele ainda me disse que quando presta suporte que envolve possíveis problemas ele sempre parte do princípio que as outras equipes, implantação e desenvolvimento, fizeram um ótimo trabalho e da melhor maneira possível. Ficar sabendo disso me deixou muito feliz em saber da confiança depositada por esse profissional no que estava sendo feito por todas as outras equipes. Imediatamente após o sentimento de felicidade e satisfação teve início um momento de reflexão, eu faço o meu trabalho da melhor maneira para só assim ser merecedor da confiança de outras pessoas?

Enquanto eu refletia sobre o merecimento da confiança de outros colegas de trabalho, comecei a pensar se todos os membros da minha equipe também fazem por onde, para só fazermos parte de uma equipe merecedora de confiança. Durante a semana em que rolou esse HH o pessoal de desenvolvimento discutiu bastante sobre transparência entre os membros da equipe. Como já falei aqui em posts anteriores estamos adotando práticas ágeis e acredito que já passamos por boa parte da curva de aprendizado, o ponto é que agora acreditamos que devemos evoluir para um ponto onde as pessoas precisam ser transparentes e confiarem que cada pessoa faz o seu melhor.

Essa semana vou falar sobre a conversa que rolou no HH com o “cara” do suporte e propor uma reflexão sobre o assunto. É isso pessoal, espero que o post sirva de reflexão para as pessoas que ainda acreditam que podem fazer a diferença.

Commom Lisp–Project Euler #1

2

Olá pessoal, seguindo a série de posts sobre commom lisp e a série de resoluções de problemas do projecteuler.net que os amigos Rodrigo Vidal, Elemar Junior e Juan Lopes estão fazendo aqui está minha contribuição do problema #1 em commom lisp.Vamos ao código:

A solução é bem menos elegante que a solução proposta pelo mestre Elemar em Haskell mesmo assim vamos analisar a solução.

Algoritmo

O algoritmo usado envolveu declarar uma função que recebe os limites, inferior e superior, e calcula os números cujo módulo de 3 ou 5 é igual a 0. Ao final da verificação de itens dentro do intervalo uma função que soma todos os valores resultantes foi aplicada.

Código
linha 2: o comando label foi usado para definir uma função que retorne uma lista com os números entre, inclusive, os  limites passados como parâmetro.

O loop for

Olhando bem para o uso do comando loop ele é um pouco diferente do restante do código lisp não é? afinal de contas um monte de palavras soltas não é normal em commom lisp. O comando loop é uma macro que permite diversas combinações de uso, olhe mais aqui.

linha 3: uma função múltiplo-de-3-ou-5 é definida, na função foi usado o comando (mod x y ) para verificar o módulo de um determinado número x por y.

linha 4: É onde o problema é realmente resolvido. Lendo o código da esquerda para direita temos o seguinte: uma função redutora que faz uso do redutor de soma “+” é usada para reduzir uma lista gerada pela função mapcar. A função mapcar aplicou a função ‘múltiplo-de-3-ou-5 na lista gerada pela função intervalo.

É isso pessoal, em breve vou  compartilhar mais soluções de problemas do ProjectEuler em lisp.

Números perfeitos em commom lisp

1

Olá pessoal, continuando a série de posts sobre Lisp hoje vamos ver uma possível resolução do problema números perfeitos. O problema foi escolhido na lista de  1001 algoritmos para implementar antes de morrer.

Resolução do problema

O problema foi resolvido usando TDD, então vamos começar pelos testes e códigos que fazem os testes passarem. O problema foi dividido em dois pequenos problemas, o primeiro deles é encontrar os divisores de um número, vamos ver os testes e solução:

Explicando o código
A primeira função diferente á a função labels, essa função deve ser usada para declarar funções internas a função a qual a função labels é chamada

Como usar:

 

Contextualização:
a função listar-divisores recebe apenas o número alvo como parâmetro, dentro da função uma função chamada  listar-divisores com dois parâmetros(numero divisores) é definida. O objetivo da função é percorrer todos os números até o número alvo(candidato a´número perfeito) e identificar se o número corrente é divisor do número alvo, caso seja o número será adicionado na lista. a função é executada enquanto o número for maior que 0

Condicional usando if
Commom lisp oferece diversos mecanismos condicionais, entre eles o if, o comando é bem simples, segue um exemplo que pode ser executado no REPL

Usando listas
Lisp fornece funções para trabalhar com lisp, algumas funções utilizadas foram:

São tão simples, que não é necessário comentar certo? Com esse código conseguimos fazer os testes passarem, então vamos definir mais testes e implementar mais uma função que deve finalizar o problema

O teste define que a função numero-perfeito deve retornar ‘(t) ou nil caso o numero seja perfeito  ou não.

Contextualização:
A implementação ficou simples, a grande jogada é usar a função reduce, o resultado da função definida anteriormente é uma lista de divisores, para fazer isso é necessário somar todos os itens da lista e comparar com o numero-alvo, caso seja igual o número é perfeito.

Reduce

o símbolo ‘+ é a função agregadora que será aplicada na lista dos divisores 

Pronto! Agora, todos os testes estão passando.

Conclusão
É isso pessoal, espero que tenham gostado. Estou escolhendo problemas simples para abordar a sintaxe de commom lisp. É sempre bom lembrar que provavelmente na linguagem em que você desenvolve na maior parte do tempo também é possível pensar de uma maneira um pouco mais funcional.

Quer aprender mais sobre commom lisp e/ou programação funcional?
http://lisp-br.org/
http://rodrigovidal.net/

Download do código de exemplo
https://bitbucket.org/higorcesar/exemploslisp

Sugestão para próximos posts
Ainda existem diversos assuntos para serem abordados, gostaria da sugestão de vocês para o próximo post sobre lisp/ programação funcional, os assuntos em pauta são:

  • Map/Reduce
  • Escalabilidade de software desenvolvido com base na programação funcional
  • Orientação a objetos em commom lisp CLOS

Percepção da geração de valor

0

Olá pessoal, o assunto do post será a percepção pelas partes envolvidas em projetos de software sobre a geração de valor. O post será baseado na experiência que estou tendo durante a adoção de agile na equipe em que trabalho, logo muita baboseira ou concepções não corretas de acordo com as literaturas podem surgir.

Desenvolvedor Herói

O IgorMusardo fez a tradução e falou um pouco sobre o assunto aqui, no post ele a tentativa de alguns desenvolvedores de salvar o projeto/Sprint/release com atos heroicos, quer exemplos?

  • Nos últimos dias de um Sprint mal sucedido o desenvolvedor começa a trabalhar 3 horas a mais por dia na tentativa de salvar o Sprint.
  • Após um dia inteiro corrigindo bugs e revendo implementações em javascript o desenvolvedor não vai embora enquanto não corrigir o ultimo bug no I.E 6
  • Após uma review desastrosa o desenvolvedor decide virar a noite resolvendo bugs

Ahh isso que você está falando é dedicação/perseverança/paixão! Fique calmo, também não sou o desenvolvedor experiente em lidar com a vontade de ver as coisas funcionando e ver o Sprint falhando de maneira absurda. Desde que iniciei com desenvolvimento até os dias atuais encarei as tarefas de tal maneira, afinal de contas missão dada é missão cumprida. No início da carreira não existia hora extra suficiente, trabalhava o quanto fosse preciso por mais que as vezes estivesse tão cansado que até era “destrutivo”.

Horas extras não sustentáveis a longo prazo
Todos estão cansados de saber, afinal de contas já leram isso no programador pragmático e na metade das bibliografias sobre agilidade. O complicado é na hora que o bicho pega conseguir encaras os fatos com frieza e respeitar os limites

Porque você não vai salvar o projeto?
Quanto maior o projeto menor será o efeito de suas noite sem sono e fins de semana de programação. Quando um projeto precisa de 20 horas/desenvolvedor semanais a mais para ser entregue no prazo é sinal que existe um problema, Se é necessário um herói para fechar todos os Sprint isso certamente é um problema.Você realmente acredita que consegue salvar um projeto de 6 meses com uma dezena de pessoas envolvidas somente com suas 10 horas extras semanais? Você pode até tentar..

E dai que você é um herói? ninguém sabe disso
Pode até ser possível que com dedicação e força de vontade você consiga salvar um Sprint ou até um release. Digamos que você trabalhou durante o final de semana refartando uns códigos e tornou o desenvolvimento do Sprint mais fácil, a questão é: quem se importa? vejamos um exemplo:

O desenvolvedor A refatorou um código tenso na segunda pela noite e acabou trabalhando até as 23 horas, no próximo dia o desenvolvedor está cansado pela manha e se atrasou para o daily scrum. Os desenvolvedor B e C não olham o servidor de código fonte e nem fazem ideia de um commit as 23 horas, sendo assim logo consideram que o desenvolvedor A está “desmotivado’. A percepção de valor gerada pelo desenvolvedor A é zero, nem seus amigos de trabalho reconhecem o valor e quem dirá seu gestor ou ainda o Cliente.

Eu sou herói por vocação, gosto de programar e resolver problemas
Esse ponto é defendido por alguns desenvolvedores, eu até já defendi essa ideia trocando um tuites com o igormusardo e já foi fruto de discussões também com o Juan lopes. São dois pontos diferentes, são eles:

  1. Vicio em resolver problemas
    solução: Frequentar dojos, resolver problemas como treino em programação, participar de competições
  2. Gosto muito de programação
    solução: Desenvolver novos projetos, dedicar tempo ao estudo e aprimoramento, abrir seu próprio negócio.

Reflexão:Estou mesmo gerando valor?

Todos os pontos aqui abordados são voltados a reflexão sobre o valor gerado por atos heroicos durante o desenvolvimento. Existem diversos outros pontos que não foram tocados como por exemplo família e dinheiro. É importante que um ritmo sustentável seja mantido, afinal de contas do que adianta só apagar incêndios e não atacar o problema de uma maneira adequada que propicie a todos os envolvidos a percepção adequada de valor.

FizzBuzz em commom lisp

0

Olá pessoal, continuando a série sobre lisp será exibido uma solução do problema fizzbuzz.O ambiente usado foi o GCL rodando no ubuntu 10.04.Esse exemplo foi desenvolvido usando TDD, durante uma busca rapida descobri vários frameworks de testes para Commom Lisp(CL) e sem pensar muito usei o lisp-unit que é baseado no Junit. Vamos começar o código partindo dos casos de teste.

Casos de Teste

1-Deve retornar número recebido quando número igual a 1

para fazer ocódigo acima funcionar foi necessário definir uma função chamada fizz-buzz.

2-Deve retornar número recebido quando número é igual a 2

Solução parcial:

3-Deve retornar fizz quando  numéro é igual a 3


Solução parcial:

 

4- Deve retornar buzz quando número é igual a 5

Solução parcial:

 

5-Deve retornar fizzbuzz quando número é igual a 15

Solução parcial:

 

Neste ponto já temos o núcleo do problema resolvido. Agora vamos apenas criar uma função que recebe uma lista de números

6- Deve retornar uma lista contendo 12fizz4buzzfizz7 quando recebe 1234567


solução:

 

Condições com o COND
Na solução foi usado um comando condicional capaz de avaliar uma lista de clausulas formadas por duas partes denominadas condição e resultado, segue a estrutura básica do comando:

Equivalência e operador AND
A sintaxe de lisp para comparações é simples, apenas uma função cujo nome é o operador igual, então temos:

a solução ainda usou o operador &, segue sua forma em lisp:

MAPCAR, aplicando uma função em elementos de uma lista
mapcar é uma função que espera o nome de uma função como parâmetro e uma lista de valores. A função mapcar aplica a função passada como argumento em cada item da lista, e no final da execução monta uma lista com os resultados.

É isso pessoal, a série continua com mais problemas resolvidos em lisp.

download código fonte

Iniciando com Lisp

0

Olá pessoal, desde o início da minha ainda breve carreira acredito que uma linguagem não é melhor ou pior que outra. Acredito que um programador profissional e apaixonado vai querer usar mais que um framework ou linguagem, já falei muito disso aqui. Seguindo essa linha de pensamento já estudei algumas linguagens famosas como Ruby, PHP e Python, a linguagem do momento é Lisp e pra ser mais exato commom lisp.

lisp

Lisp

Lisp é uma família de linguagens de programação concebida por John McCarthy em 1958. Num célebre artigo, ele mostra que é possível usar exclusivamente funções matemáticas como estruturas de dados elementares (o que é possível a partir do momento em que há um mecanismo formal para manipular funções: o Cálculo Lambda de Alonzo Church). Durante os anos de 1970 e 1980, Lisp se tornou a principal linguagem da comunidade de inteligência artificial, tendo sido pioneiro em aplicações como administração automática de armazenamento, linguagens interpretadas e programação funcional.

Wikipedia

Por que Lisp?
Lisp é uma linguagem funcional, que influencia implementação de diversas linguagens de programação e ainda possui uma sintaxe “complicada” que uma vez vencida a barreira torna o caminho do aprendizado de linguagens e paradigmas mais fácil.

 

Paralelismo
Antes de explicar a escolha da linguagem vou explicar a escolha do paradigma. Lisp é excelente para representar o paradigma funcional, a linguagem foi concebida tendo como base as definições e princípios desse paradigma. Hoje parte das linguagens apresentam características e recursos funcionais, quem é do “mundo .NET” já viu isso com LINQ e F#.A cada dia as soluções de software precisam aproveitar melhor a capacidade de processamento do hardware multi-core e os princípios propostos no paradigma funcional são excelentes para trabalhar com paralelismo.

 

Sintaxe Críptica
Entre as linguagens historicamente mais difundidas lisp é uma das linguagens com sintaxe mais complexa, Logo uma vez familiarizado com Lisp é possível obter conhecimento em paradigmas funcionais e de quebra se torna mais fácil aprender linguagens derivadas e influenciadas por lisp.


Não vou me alongar falando sobre benefícios e razões para aprender lisp, vamos ao código. Vou usar o Repl disponível aqui. Vamos começar pelo Olá mundo.

 

 

A função usada para definir uma função em lisp é defun, você precisa passar três parâmetros, o nome da função, parâmetros e corpo da função. A função defun é usada dentro de (), assim como muitos comandos em lisp.Sendo assim temos a seguinte estrutura:

Estrutura do método defun
Nome da função: ola-mundo
Parâmetros: nenhum
Corpo da função: ‘(Ola mundo)

 

Padrão de nomenclatura de funções

O padrão de nomenclatura de funções compostas em lisp é usar um hífen para separar as partes do nome, nada de Cases diferenciados ou underline.

Simbolos no lugar de texto
Programadores lisp evitam o uso de texto e na maior parte do tempo usam simbolos. O exemplo de código acima define um símbolo ‘(Ola mundo).

Ola mundo no estilo funcional
A função ola-mundo retorna um valor e não escreve dados na tela, a função retorna um símbolo e não possui side-effect. O código pode ser chamado inúmeras vezes que o resultado será o mesmo, essa é uma característica do paradigma funcional

 

Por hoje é só pessoal, esse post marca um novo rumo no quesito conteúdo do meu blog, iniciando por esse post esse blog deixa de ser um blog que so fala de linguagens do mundo .NET.Espero misturar posts semanais do mundo .NET e de outras linguagens, espero que gostem.

Evento: WebCamps no Rio de Janeiro

0

Olá pessoal, em algumas semanas teremos mais um evento promovido pela comunidade de software do RJ, no dia 28/05/2011 vai acontecer o webcamps no instituto infnet.

O foco do evento será ologo-webcamps desenvolvimento de aplicações web com o framework .NET, entre as tecnologias que serão abordadas estão: ASP.NET MVC, HTML 5, RESTFul Services e Entity Framework.

O evento será gratuito,basta se inscrever aqui e aparecer no dia 28/05.  Se você já frequentou os eventos de comunidades do Rio de Janeiro sabe que que o #HappyHour é obrigatório.

A motivação pra organizar o evento surgiu da participação de algumas pessoas da comunidade de desenvolvimento do RJ no evento que aconteceu em março em são paulo e teve a presença do Phil Haack(PM do ASP.NET MVC).A edição de são paulo foi excelente, muito aprendizado e networking, então o pessoal decidiu trazer o evento para nosso estado. quer saber mais como foi a edição de SP? leia aqui.

 

Agenda

Inscrição

Contato

EF 4.1: Mapear uma tabela para várias entidades

0

Olá pessoal, desta vez vamos ver como mapear uma tabela em várias entidades, uso como base e inspiração esse post aqui. A técnica é bem valiosa nos cenários de uso do EF em sistemas legados, hoje eu estou trabalhando a maior parte na migração de um sistema asp para .NET 4, o grande problema é que o banco de dados é legado e realizado de uma maneira que não ajuda o desenvolvimento baseado em OO( não existe coesão e separação de conceitos) então essa funcionalidade ajuda a diminuir o gap entre o domínio e banco de dados.

1- Modelo de dados

TabelaPessoa

2-Entidade de mapeamento
Vamos separar o endereço em uma entidade separada para tentarmos aumentar a coesão e caminhar em busca de um modelo mais simples e delineado.Então ficamos com as duas entidades abaixo:

3- Configuração do mapeamento
Você pode reparar que foi necessário definir uma coluna e configurar a chave primária na entidade endereço e ainda foi configurado um relacionamento com as duas pontas obrigatórias.

4-Exemplo

É isso pessoal, em breve vou falar mais sobre algumas configurações de relacionamentos com foco em modelo rico e OO.

Download do exemplo

Go to Top