segunda-feira, 23 de junho de 2014

12 CARACTERÍSTICAS FUNDAMENTAIS PARA ENTENDER O KANBAN

  1. O principal objetivo é transformar o trabalho em andamento visível para toda equipe.

  2. O Kanban é baseado na ideia onde atividades em andamento devem ser limitadas.

  3. Um novo item só deve ser iniciado caso o limite da equipe permita.

  4. Um sinal visual indica que o novo trabalho pode ou não ser iniciado conforme o limite acordado para cada fase.

  5. O Kanban não é um processo e nem descreve papeis e fases para serem seguidos.

  6. O Kanban é uma abordagem para mudança gerencial do projeto.

  7. O Kanban é um conceito para introduzir alterações em um ciclo de desenvolvimento de software.

  8. Dá transparência ao processo e seu fluxo, expõe gargalos, filas, variabilidade e desperdícios.

  9. Tudo que impacta no desempenho da equipe de produção e para entrega de valor, fica explícito no modelo Kanban.

  10. O nome Kanban surgiu dos sistemas de cartão usados nas indústrias de produção.

  11. Característica importante do modelo Kanban é o conceito de "puxar tarefa" quando há capacidade de processá-la.

  12. Os requisitos são adicionados a lista de backlog e "puxados" pelos membros que liberam suas atividades correntes e se tornam disponíveis para iniciar uma nova tarefa.

Leia mais em: Kanban: o ágil adaptativo - Revista Engenharia de Software Magazine 45 http://www.devmedia.com.br/kanban-o-agil-adaptativo-revista-engenharia-de-software-magazine-45/23560#ixzz35TCX5IbE

sexta-feira, 22 de março de 2013

Grails dbconsole - Console SQL para o Banco de Dados Nativo do Grails 2


Pode ser muito útil acessar o console sql do h2 durante o desenvolvimento de uma aplicação Grails. Eu não sabia, mas, sim é possível através do dbconsole.


Rodando a aplicação em localhost:8080/nomeAplicativo 
Basta digitar no browser localhost:8080/nomeAplicativo/dbconsole 

Preencha JDBC URL utilizando a configuração presente no arquivo do projeto DataSource.groovy

Neste caso: jdbc:h2:mem:devDb e você vai ver todos os objetos de domínio. E poderá não somente fazer consultas sql, como também os comandos drop table, create table, insert, update, delete.
dbconsole


quarta-feira, 20 de março de 2013

Dica Grails - GGTS

Para mudar a porta do servidor web do Grails basta passar o parâmetro -Dserver.port=XXXX

Por exemplo: grails -Dserver.port=8090 run-app

quarta-feira, 16 de janeiro de 2013

Micro Projeto Grails: MangueJobs, mural de empregos

Atualização 10/02/2015
O site esta no momento fora do ar. O CoudBees.com aonde ficava hospedado tirou do ar pois a conta era gratuita somente para projetos em desenvolvimento e como eu parei de atualizar o código eles tiraram do ar.

Olá. Nos últimos dias trabalhei neste pequeno projeto Grails que chamo de MangueJobs. É um mural de empregos das cidades de Macaé, Campos e Região. Inicialmente faço uma busca nos feeds públicos de algumas páginas e grupos do Facebook. Depois, faço uma validação da mensagem antes de exibi-la no mural.

O endereço para visitar é empregos.mangue2.com

Ambiente Utilizado


  • IDE Groovy/Grails Tool Suite 3.0.0
  • Grails 2.0.4
  • JDK 1.7.0
  • Hospedado no CloudBees.com


Plugins


  • facebook-sdk version 0.4.6


Características


  • O Projeto não utilizada banco de dados.


Arquivos Criados


  • MuralController.groovy
  • mural/index.gsp
  • src/groovy/Anuncio.groovy
  • webapp/css/custom.css


Arquivos Modificados


  • layouts/main.gsp
  • conf/Config.groovy
  • conf/UrlMapping.groovy
  • webapp/css/main.css


Andamento

Depois de criado o projeto, instalei, configurei e testei o plugin facebook-sdk. Para o teste é necessário ter um Id e um Secret fornecidos pelo Facebook. Bastou incluir o código abaixo no arquivo: Config.groovy

//Facebook SDK Plugin grails.plugin.facebooksdk.app.id = IDDOAPP grails.plugin.facebooksdk.app.permissions = [] // Ex. ['email','user_photos'] grails.plugin.facebooksdk.app.secret = SECRETDOAPP ...

O passo seguinte foi criar o MuralController.groovy. Adicionei o FacebookContext do plugin e declarei um mapa com os grupos e outro com as páginas.

FacebookContext facebookContext def grupos = ["RECRUTA CAMPOS RJ":"332054513537019","RECRUTA EMPREGOS MACAÉ RJ":"299476493497382","EMPREGOS CARATINGA MG - MACAÉ RJ":"181172948674195"]  def paginas = ["EMPREGOS CAMPOS MACAÉ OFFSHORE":"352431094785650","EMPREGOS TI RJ":"EmpregosTiRj", "EMPREGA MACAÉ":"EmpregaMacae"]

A busca dos anúncios é feita através de um método que retorna um Set<Anuncio> a partir do retorno do método facebookCliente.fetchConnection().

def appAccessToken = facebookContext.app.getToken(true)def facebookClient = new FacebookGraphClient(appAccessToken) Set<Anuncio> lista = new TreeSet<Anuncio>(); def myFeed = facebookClient.fetchConnection(idObjeto+"/feed")

Como os anúncios são exibidos fora do Facebook, sem o contato de quem escreveu, somente os anúncios que contém ao menos um email no corpo do texto são considerados válidos. E como as vezes as pessoas publicam o mesmo anúncio em dois ou mais grupos, implementei o método compareTo(Object o) na classe Anuncio.groovy.

@Override public int compareTo(Object o) { if(this.is(o)) return 0 if(this.mensagem.equals(o.mensagem)){ return 0 }else{ if(this.mensagem.compareTo(o.mensagem)>0){ return 1; }else{ return -1; } } return 0; }

Outro passo foi criar um método para ordenar a lista e no def index() um tratamento para paginação e ordenação. Ajustei o main.gsp e o main.css e criei a mural/index.gsp e custom.css.

No index.gsp incluí a Tag de comentários do Facebook.

Por último ajustei o UrlMappings.groovy para apontar direto para o MuralController

 static mappings = {
  "/$controller/$action?/$id?"{
   constraints {
    // apply constraints here
   }
  }

  "/"(controller:"mural",action:"index")
  "500"(view:'/error')
 }


Fico muito contente em poder compartilhar. Caso queiram mais detalhes sobre a implementação é só deixar um comentário com a dúvida.

quarta-feira, 26 de setembro de 2012

Alterar cor da ilustração com o KineticJS

Continuando o estudo do KineticJS criei um novo teste. Consegui uma ilustração free de um Pato em SVG. Extrai os dados do Path de cada uma das partes utilizando o Inkskape e recriei o desenho utilizando o objeto Path do KineticJS. O resultado é um desenho para colorir bastante interessante.


Este é o link do http://kineticjs.com/ com a ajuda deste plugin foi bastante fácil. Utilizei o Color Picker, chamado de Rudimentary jQuery color picker, o demo dele está aqui.

Veja qual o resultado deste teste:




segunda-feira, 24 de setembro de 2012

HTML5 Canvas, alterar a cor ao clicar

Conforme o título desta postagem o meu objetivo será alterar a cor de um objeto desenhado em um Canvas do HTML5 após realizar um click sobre ele. Para isso irei utilizar o HTML5 Canvas, javascript/jquery e algum plugin do tipo Color Picker em Jquery que irei escolher nos próximos dias. Como ponto de partida encontrei este site http://www.pageresource.com/html5/canvas-interactive-tutorial/ ele ensina os fundamentos necessários sobre o CANVAS.

Para melhorar ainda mais a brincadeira encontrei uma biblioteca fantástica chamada kineticjs. Este é o link http://kineticjs.com/ com a ajuda deste plugin foi bastante fácil. Consegui criar um Canva com um círculo e coloquei também um Color Picker, chamado de Rudimentary jQuery color picker, o demo dele está aqui. O teste funciona exatamente como eu queria. Clique em uma cor para selecioná-la e depois clique no circulo que ele irá mudar para a cor selecionada.

Veja qual o resultado do meu teste:


segunda-feira, 17 de setembro de 2012

Como usar a API do Grooveshark



A API do Grooveshark oferece dois tipos de acesso:

  • Acesso enxuto
  • Acesso completo


O acesso enxuto é muito fácil de conseguir e é instantâneo, basta cadastrar seu email que a chave é enviada.

Em um email assim:

"Your new Tinysong API Key.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

É este que irei utilizar.Para ter o acesso completo, segundo informação contida no site é necessário enviar uma mensagem para a equipe do Grooveshark explicando os objetivos e funcionalidades do seu aplicativo.

Vamos chamar o acesso enxuto, com o mesmo nome dado pela equipe Grooveshark: Tinysong API Key

É muito simples. Possui 3 métodos: a, b e s

O endereço para solicitar a API Key é http://tinysong.com/api

Neste mesmo endereço se encontra a documentação dos três métodos.

Segue o modelo geral para acionar os métodos
http://tinysong.com/method/query?format=json&key=APIKey

/a/
Este método retorna um único link. O Tinysong executa uma busca de música e artista concatenados e retorna o primeiro resultado encontrado.

Exemplo
http://tinysong.com/a/Fernandinho+Vento+Impetuoso?format=json&key=APIKey
Retorno
"http:\/\/tinysong.com\/17i3E"
Se não encontrar a música, retorna um set vazio, [] deste jeito será retornado

/b/
Este método faz a mesma busca do /a/ porém retorna informações adicionais sobre o link.

Exemplo
http://tinysong.com/b/Fernandinho+Vento+Impetuoso?format=json&key=APIKey
Retorno
{
"Url":"http:\/\/tinysong.com\/17i3E",
"SongID":36921568,
"SongName":"Vento Impetuoso",
"ArtistID":655665,
"ArtistName":"Fernandinho",
"AlbumID":8261801,
"AlbumName":"Teus Sonhos"
}

/s/
Este método faz o que os outros métodos fazem, porem exibe resultados multiplos com saída similar ao /b/. Se você deseja limitar o número de resultados, pasta adicionar o parametro 'limit' na url. Valor mínimo um e máximo trinta e dois. O Default é cinco.

Exemplo
http://tinysong.com/s/Beethoven?format=json&limit=3&key=APIKey

Retorno
[

{"Url":"http:\/\/tinysong.com\/17mCG",
"SongID":36921712,
"SongName":"Um Dia Em Tua Casa",
"ArtistID":655665,
"ArtistName":"Fernandinho",
"AlbumID":8261801,
"AlbumName":"Teus Sonhos"},

{"Url":"http:\/\/tinysong.com\/17iy2",
"SongID":36921686,
"SongName":"Mil Cairao",
"ArtistID":655665,
"ArtistName":"Fernandinho",
"AlbumID":8261801,
"AlbumName":"Teus Sonhos"},

{"Url":"http:\/\/tinysong.com\/17mB2",
"SongID":36921658,
"SongName":"Agindo Deus",
"ArtistID":655665,
"ArtistName":"Fernandinho",
"AlbumID":8261801,
"AlbumName":"Teus Sonhos"},

{"Url":"http:\/\/tinysong.com\/17gU2",
"SongID":36921629,
"SongName":"O Hino",
"ArtistID":655665,
"ArtistName":"Fernandinho",
"AlbumID":8261801,
"AlbumName":"Teus Sonhos"}
]

Como observado ó retorno é no formato JSON. É possível utilizar um widget flash para exibir o player em sua aplicação. Em breve colocarei o exemplo.