GTD – Getting Things Done
Posted by Felipe J. R. Vieira in Diversos on 15 de maio de 2011
Há algum tempo venho procurando metodologias de organização pessoal. Passei pelo uso de post it, agendas, definição de prioridades e outras coisas mais. Ainda não encontrei uma que me agradasse e me tornasse mais eficiente. Só que agora acho que estou chegando perto, encontrei uma metodologia chamada Getting Things Done (GTD) que em sua teoria parecesse-me muito interessante.
O GTD tem como princípio a criação de uma lista de tarefas que são específicas a um contexto, ao invés de dar ênfase à priorização das atividades. O intuito é tornar fácil e divertido o arquivamento, busca e recuperação de todas as informações relacionadas às tarefas que você precisa fazer. O GTD está dividido em cinco atividades básicas.
- Coletar – Tirar todas as ideias da cabeça e colocar no papel. Como se fosse uma caixa de entrada;
- Processar – Pegar as ideias coletadas e processá-las. Existem três níveis: as que devem ser desconsideradas, as que são interessantes, mas não são importantes e, por último, as importantes. Esta última é dividida em três classificações;
- São extensas e complexas – torna-se um projeto;
- Podem ser resolvidas em até 2 minutos. Faça!
- São fáceis mais demora mais que 2 minutos. Adie ou delegue.
- Organizar – Nesta etapa deve-se classificar as ações e definir os contextos;
- Classificar as ações e colocá-las nos seus devidos projetos,
- Contexto é onde será executada “no telefone, no computador, em casa…”
Organizar inclui também definir datas e horas para as ações, também deve ser definidas as lista das próximas ações e uma lista de tarefas que devem ser entregue por quem foi delegado para fazê-las
- Revisar – Revisar semanalmente tudo que foi anotado. Desta forma sempre terá em mente o que tem para fazer, diminuindo o risco de esquecer de algumas tarefas;
- Execução – Realização das tarefas.
Uma ferramenta que auxilia a utilização desta metodologia é o Thinking Rock, que atende várias questões propostas pela metodologia.
Site da Ferramenta: http://www.trgtd.com.au/
Este foi um artigo simples sobre esta metodologia. Ainda sou iniciante no GTD, mas quero me aprofundar nela. Assim que concluir meu trabalho de conclusão de curso, comprarei a versão brasileira do livro Getting Things Done, chamada de A Arte de Fazer Acontecer. E aí trarei mais informações sobre a metodologia e sobre meu avanço com a utilização dela.
Tenham uma boa semana!
Mais Informações:
http://www.germinar.pt/gtd-em-20min/
http://fatorw.com/resenhas/getting-things-done/
Utilização da Gestão do Conhecimento nas Metodologias Ageis para Melhoria da Qualidade de Software
Posted by Felipe J. R. Vieira in Engenharia de Software on 5 de julho de 2010
Um dia Steve Jobs disse: Não se liga os pontos olhando para frente, mas sim, olhando para trás.
Hoje, com a construção deste trabalho, entendo muito bem o significado dessa frase. Desde do início da minha vida universitária, venho falando e apresentando trabalhos sobre gestão do conhecimento, Web 2.0, depois metodologias ágeis e colaboração. Agora, depois de três anos e meio de curso, observo como a interação entre estes quatro pontos formam uma interessante linha para a melhoria da qualidade de software, demonstrada neste pequeno artigo.
Muito ainda se pode falar e fazer com este tema, e quem sabe mais a frente, aqui nesse blog, apareçam mais artigos que complementem este.
Até mais… Ah, queria agradecer a Diego Armando e Roberto Pizzi que sempre estão fazendo trabalhos comigo, com aquele bom e velho espírito de equipe.
Resumo
As metodologias ágeis vieram com a proposta de flexibilizar a alegadamente engessada metodologia de desenvolvimento de software tradicional, focando nos indivíduos em detrimento de demasiados registros. Isso cria, e com razão, a ideia de que as metodologias ágeis não capturam o conhecimento gerado, fator imprescindível à qualidade do software. Iniciativas nesse sentido, como a XP (eXtreme Programming), vêm ganhando espaço em cenários marcados por estarem voltados quase inteiramente aos clientes. Este trabalho procura preencher essa lacuna com a utilização da Gestão do Conhecimento, disciplina que está em crescimento. Esta disciplina tem como objeto de estudo técnicas de obtenção, armazenamento e distribuição de conhecimento, o que tende a funcionar suprindo a suposta deficiência das metodologias ágeis, que não burocratizam a maioria das formalidades. Como ferramentas para auxílio nesse esforço, este trabalho ilustra a utilização da Web 2.0, que possibilita registrar artefatos e mesmo as interações entre integrantes de forma mais espontânea.
Apresentação em Slides
Trabalho Final
Relatório da Avaliação da Interface do Portal UFS
Posted by Felipe J. R. Vieira in Interface Humano Computador on 17 de janeiro de 2010
Hum… Segundo post do ano. Este trabalho foi desenvolvido durante as aulas de Interface Humano Computador, matéria interessante, que busca facilitar a compreensão dos usuários em relação à aplicação. Pois como dizia o professor desta disciplina, relembrar é mais fácil que reaprender, e devido a isto temos que nos preocupar em reduzir ao máximo a carga mental destes usuários.
Para aplicar este conhecimento foi proposto a realização de avaliações de interfaces, no nosso caso o Portal da UFS, e identificar problemas e boas soluções referentes a usabilidade. Neste trabalho fomos um pouco além, avaliando também os padrões Web e a acessibilidade.
Resumo
Este artigo, elaborado como forma de avaliação da matéria Interface Humano Computador, tem como objetivo mostrar como foi realizada a avaliação da interface do Portal UFS e seus principais resultados, seguindo os princípios de usabilidade, padrões Web e acessibilidade.
Apresentação em Slides
Trabalho Final
Tecnologias de Informação e Comunicação no Suporte aos Sistemas de Informação na Visão Hierárquica Informacional DIKW
Posted by Felipe J. R. Vieira in Sistemas de Informação, Tecnologias on 12 de janeiro de 2010
É, depois de algum tempo, muito tempo, volto a postar algum material novo. Este trabalho foi desenvolvido durante as aulas de Sistemas de Informação da graduação, juntamente com Diego Armando e Roberto Pizzi. Organizar esse material de uma forma clara e com significado, buscando harmonizar as dezenas de tecnologias, exigiu muito esforço de todos do grupo, mas, no fim, acredito que foi um bom trabalho.
Resumo
Tornou-se conhecimento de que a informação é um dos bens mais valiosos – se não o mais valioso – de uma organização, embora desde tempos imemoriáveis o ser humano já tenha ciência de que “conhecimento é poder”. Este documento busca ilustrar o uso de sistemas de informação para a ascensão ao conhecimento, através das tranformações dos insumos, dado e informação, para melhorar a qualidade da organização como um todo.
Apresentação em Slides
Trabalho Final
Projeto de Pesquisa e as Primeiras Apresentações
Posted by Felipe J. R. Vieira in Tecnologias on 19 de setembro de 2009
Quando iniciei meus estudos na universidade, comecei a gostar da área acadêmica, de pesquisar e lecionar. Sempre que eu ia perguntar a algum professor como faria para entrar nesta área, eles falavam que era interessante entrar em uma iniciação científica para entender como se dá o processo de pesquisa, e também, ganhar alguns pontos para seleção de mestrado, de acordo com a universidade pretendida.
Depois de muito esforço, tentando adiantar o curso e conciliar os estudos com o trabalho, consegui entrar em um grupo de pesquisa, e sinceramente, estou muito feliz por isto. O meu projeto de pesquisa tem como tema: Computação inteligente no desenvolvimento de serviços Web de suporte às atividades acadêmicas e administrativas da UFS. E como plano de trabalho: Serviço Web para geração otimizada da grade horários de disciplinas de um curso universitário.
Já ocorreram alguns reuniários, mistura de reunião com seminário [definição dada pelo meu orientador] =D, e disponibilizarei, aqui, os slides. Nas próximas vezes as apresentações estarão aqui assim que forem ocorrendo.
Apresentação em Slides – (28/08/2009)
Boa semana para todos e até o próximo post.
Tipos de chave do projeto conceitual de banco de dados
Posted by Felipe J. R. Vieira in Banco de Dados on 5 de setembro de 2009
Quando estamos modelando uma entidade de um banco de dados temos que definir a chave primária. Esta é selecionada dentre um conjunto de chaves candidatas, que são identificadas através das super-chaves. Sem contar também que temos chaves estrangeiras que vem de outras entidades.
Estes diversos conceitos sobre chaves acabam confundindo a cabeça de quem está começando a trabalhar nesta área, e até mesmos os veteranos, que por trabalharem a muito tempo, acabam abstraindo estes conhecimentos básicos. Para esclarecer esta confusão será conceituado e exemplificado os tipos de chave.
Conceitos
Super-chaves: é um conjunto de atributos que podem identificar como único um registro da tabela.
Chave candidata: são as possíveis chaves encontradas com menos atributos dentre as super-chaves.
Chave primária: é a chave escolhida, de acordo com o contexto, dentre as chaves candidatas que irá identificar como único o registro da tabela.
Chave estrangeira: é a chave primária de outra entidade que faz parte dos atributos da entidade que está sendo modelada.
Exemplo
Entidade: Estudante(Matricula, Nome, RG)
Super-chaves: Matricula; RG; Matricula, Nome; Matricula, RG; RG, Nome; Matricula, Nome, RG.
Chaves candidatas: Matricula; RG
Chave primária: Matricula
Chave estrangeira: nesta situação não temos chave estrangeria, mas se quisermos relacionar a entidade estudante com uma entidade curso, por exemplo, a entidade estudante terá entre seus atributos a chave primária de curso. Assim criaremos um relacionamento entre as duas entidades.
Importância de um processo de software
Posted by Felipe J. R. Vieira in Engenharia de Software on 8 de maio de 2009
Há algum tempo não posto nada. Provas, trabalhos e um pouco de preguiça são os responsáveis por isto, mas farei o possível para mudar esta situação. Neste texto de hoje reunir a resposta de duas questões da prova de engenharia de software que fiz. A primeira trata-se do que é um processo de software e suas vantangens, e a segunda, das características em comum dos processos de desenvolvimento ágeis.
Importância de um processo de software
Para desenvolver software de qualidade, temos que responder algumas questões: o que queremos fazer, como iremos fazer e quando iremos fazer, só após responder estas perguntas é que estamos prontos para colocar “a mão na massa”, partir para a implementação e depois implantar e manter este software. E como faremos isto? O processo de software é a solução, ele que define como estas etapas devem ser realizadas, descrevendo-as, sendo um guia para o desenvolvimento do software.
Numa empresa nós possuímos pessoas, ferramentas e processos, as duas primeiras podem ser substituídas por motivos diversos, no entanto se não tivermos processos, podemos ocasionar a ruína desta organização nestas substituições.
Os processos trazem a padronização da forma como a empresa faz software, retira o conhecimento do sistema do analista, desenvolvedor, entre outros e o disponibiliza para a empresa de forma geral, facilitando o aprendizado de novos membros na equipe, a localização de falhas, entre outros casos.
Para o desenvolvimento dos processos existem modelos, frameworks que facilitam toda fase de produção, um desses é o modelo evolucionário espiral, que tem como um de seus representantes os modelos ágeis.
Os processos ágeis são focados no desenvolvimento, na entrega do software, para isto sacrificam um pouco da documentação, documenta-se o necessário. São projetos para grupos de poucas pessoas e privilegiam ao máximo a comunicação, a interação entre os envolvidos no projeto, reuniões diárias e o conhecimento de todas as etapas do software por todos é regra nos processos ágeis. Temos também a integração do cliente no desenvolvimento do software e a entrega de código funcional em iterações de tempo fixo. As dificuldades que eles apresentam estão na dimensão de prazos e custos da aplicação como um todo.
Desenvolver um processo de software é fundamental, tanto para uma grande organização, quanto para uma pequena empresa, e até mesmo para a utilização em projetos individuais que nos dedicamos a realizar por diversão. Evidentemente que neste último caso, não necessitamos de padrões muito rígidos, cheio de etapas e artefatos. A escolha por uma metodologia mais flúida é a opção mais interessante. Acostumar-se a isso faz com que estranhemos menos na hora de sermos contratados por uma empresa ou quando aceitamos desenvolver sistemas para outras pessoas.
Características do RUP
Posted by Felipe J. R. Vieira in Engenharia de Software on 29 de março de 2009
E vamos lá a mais um post sobre engenharia de software, desta vez nos adentraremos nas características do RUP. A cada aula que tenho de engenharia de software me interesso mais e percebo a importância desta área, tida por muitos como chata e desnecessária, mas fundamental para o progresso da informática.
Características do RUP
Muito se é debatido sobre como desenvolver software de qualidade e quais seriam as melhores práticas para se atingir este objetivo. Para isto muitas metodologias foram criadas, entre elas o RUP, Rational Unified Process, que, como seu nome diz é um processo unificado, conjunto das melhores práticas no desenvolvimento de software para uma grande faixa de projetos e organizações. Suas principais características estão em desenvolver de forma iterativa e incremental, desenvolver centrado na arquitetura, direcionar à solução de riscos, orientar por caso de uso, buscar o engajamento dos usuários, gerenciar cuidadosamente requisitos, controlar as mudanças, modelar o software visualmente, verificar continuamente a qualidade e ser configurável. Neste texto serão apresentadas as vantagens do RUP, proporcionadas por suas principais características.
A primeira característica a ser tratada é o desenvolvimento iterativo e incremental. Quando utilizamos modelos cascatas, sofremos o grande risco de atacar o problema de forma equivocada e só perceber isto após muito tempo de desenvolvimento do projeto, isto ocasionaria prejuízos, seriam tempo e dinheiro investidos de forma errada. Já, com uma modelagem iterativa, diminuímos muito este risco, como ocorre sempre contato com o usuário, temos certeza de focarmos o ponto correto, sem contar o fato de conseguirmos reduzir o problema em partes menores e nos centrarmos em resolver um problema de cada vez. É importante lembrar que a cada iteração incrementa-se mais funcionalidades ao produto, agregando valor e mostrando ao cliente o empenho no desenvolvimento do seu software.
A definição de uma arquitetura nas primeiras iterações é fundamental, pois é sobre ela que toda a aplicação será desenvolvida e sua definição possibilita o desenvolvimento em paralelo, reutilização de componentes e maior consistência da aplicação. Após esta definição, devemos nos preocupar com as soluções de maior risco, os pontos mais importantes do sistema, pois observando primeiramente elas, descobrimos necessidades e possíveis inviabilidades do projeto, podendo assim, renegociar funcionalidades se for preciso.
O RUP é orientado a casos de uso, esta é uma das formas pela qual representamos o comportamento executado por um sistema, é por isso que temos um ou mais casos de uso a cada iteração, pois é uma das formas que norteiam o desenvolvimento do software, mostrando o que temos que atender a cada uma das iterações. Para o RUP é fundamental que a cada iteração seja entregue uma versão executável da aplicação, e esta deve estar de acordo com os requisitos apresentados pelos casos de uso, este fundamento faz com que consiguamos um maior engajamento do usuário, já que o motivo do desenvolvimento é solucionar um problema relatado por ele e temos que possuir sempre este feedback, pois ele é o maior interessado no desenvolvimento.
A cada etapa, percebe-se que a maioria das características derivam do desenvolvimento iterativo, a utilização dele nos possibilita outras duas vantagens, a gerencia cuidadosa de requisitos e o controle das mudanças, como o ambiente é altamente mutável, temos que nos previnir em relação a estas mudanças e a cada iteração temos a possibilidade de analisar se os requisitos ainda são válidos. Outros fatores importantes a ser ressaltados são a modelagem visual, normalmente utilizando UML, que possibilita um entendimento mais rápido e menos ambíguo do que se deve ser feito, a qualidade, que é um processo contínuo do desenvolvimento e que os modelos são bases flexíveis para o desenvolvimento, podendo ser configurado para atender as necessidades do ambiente.
Com estas características percebemos as boas práticas proposta pelo RUP, práticas necessárias para o bom desenvolvimento de software, para maior confiabilidade na área pelos usuários que contratam serviços de TIC, para redução de riscos e custos nos projetos de desenvolvimento de software.
Engenharia de Software – Primeira atividade
Posted by Felipe J. R. Vieira in Engenharia de Software on 12 de março de 2009
É, as aulas começaram. Já estou com diversas atividades para fazer, isto é bom, aprender coisas novas, vislumbrar novas tecnologias, entender processos e também ter material para postar aqui.
A primeira atividade foi fazer uma ficha de leitura do primeiro capítulo do livro de Engenharia de Software de Sommerville, que colocarei aqui na íntegra.
Ficha de Leitura
Dados Bibliográficos
Sommerville, Ian. Engenharia de Software. São Paulo: Addison Wesley, 2003. 6ª Edição. 1º Capítulo.
Resumo
É importante ressaltar que software não é apenas o programa, mas também toda a documentação associada e os dados de configuração necessários para fazer com que esses programas operem corretamente. A engenharia de software se ocupa de todo este material para a produção de software, desde os estágios iniciais de especificação do sistema até a manutenção depois que ele entrou em operação.
Mesmo a engenharia de software sendo uma área bem delimitada, existem muitas dúvidas entre as diferenças desta com a ciência da computação. A ciência da computação define teorias e os métodos básicos referentes aos computadores e sistemas de software, enquanto a engenharia de software se dedica aos problemas práticos da produção de software. Outra área que deve ser diferenciada é a engenharia de sistemas que se ocupa de todos os aspectos do desenvolvimento e da evolução de sistemas complexos, em que o software desempenha papel principal.
Como já foi trato, o objetivo da engenharia de software é construir um produto de software com boa relação custo-benefício, para isto é necessário um conjunto de atividades e resultados associados, conhecido como processo de software. Há quatro atividades de processo fundamentais comuns a todos os processos de software: especificação, desenvolvimento, validação e evolução do software. Podemos ter uma descrição simplificada de um processo de software, que é apresentada a partir de uma perspectiva específica, chamado de modelo de processo de software, existe diversos modelos gerais de desenvolvimento de software: modelo em cascata, desenvolvimento evoluiconário, transformação formal e desenvolvimento orientado a reuso. O modelo influi muito no custo, por exemplo o modelo em cascata consome maiores recursos na parte de integração e teste, enquanto o desenvolvimento evolucionário o maior custo está na parte de desenvolvimento.
Para facilitar a produção de software de boa qualidade, temos métodos de engenharia de software e ferramentas CASE (engenharia de software com o auxílio de computador). Mas o que seriam software de boa qualidade? Aqueles que refletem seu comportamento quando em funcionamento, a estrutura e a organização do programa fonte e também a documentação associada. Evidentemente que temos outros fatores de acordo com o objetivo da aplicação.
Além do desafio de produzir software de qualidade, os engenheiros de software tem alguns outros obstáculos, como fazer manutenção em software legado, programa antigo que realiza funções muito importantes e foi desenvolvido em uma época em que a utilização da engenharia de software era pouco difundida. A grande heterogeneidade dos ambientes computacionais, tendo a necessidade de construir aplicações bastante flexíveis. E outro problema é o desafio de construir aplicações que se adequem de forma ideal aos ambientes organizacionais extremante mutáveis.
Um ponto importante, que não podemos deixar de esquecer, é a responsabilidade e ética profissional dos engenheiros de software. Para esses profissionais é necessário manter a confidencialidade com empregadores ou clientes, aceitar atividades apenas quando forem competentes para realizá-las, respeitar as leis de propriedade intelectual, não empregar suas habilidades técnicas para o mau uso dos computadores.
Comentários
Para estudantes “iniciantes” em computação é muito importante para desfazer certas práticas erradas, como a utilização de abordagens informais, o não planejamento das atividades e tirar a visão equivocada de: – vamos desenvolver um “programinha”. Projetar é necessário, tanto para qualidade, quanto para agilidade e eficiência dos software desenvolvidos.
E algo extremantemente imprescindível, é a abordagem sobre responsabilidade profissional e ética. Como vivemos em uma sociedade da informação, onde milhões de dados trafegam a cada segundo, nós, futuros profissionais na área de TIC, temos que nos preocupar com nossa importância para a sociedade e respeitar os princípios éticos existentes.
Uma abordagem usando algoritmos genéticos em Agentes Inteligentes para Jogos
Posted by Felipe J. R. Vieira in Inteligência Artificial on 15 de fevereiro de 2009
Atividade desenvolvida nas aulas de Tópicos Especiais em Inteligência Artificial, este foi o trabalho final da matéria, e, além disto, foi submetido ao Simpósio Brasileiro de Games [SBGAMES 2008] e aceito na track de computação como Technical Poster, para minha felicidade, primeiro trabalho aceito em um evento, a gente nunca esquece =D. Espero dar continuidade a este projeto e concluir o FightManager.
Até Breve!!!
P.S.: Agradecimentos ao professor Christiano que me apoiou muito e se esforçou para este projeto ser realizado.
Resumo
É consenso que a tomada de decisões bem como o comportamento assumido pelos personagens em um jogo é uma das áreas mais discutidas em Inteligência Artificial aplicada a jogos. Este artigo tem como objetivo propor o uso de algoritmos genéticos na criação de agentes inteligentes em jogos, sendo este o passo inicial para aplicações mais complexas, bem como apresentar o FightManager, aplicação desenvolvida durante as pesquisas como estudo de caso.
Poster
Trabalho Final


