Archive for ‘Boas Práticas’

6 de junho de 2011

Aplicação de Metodologias Ágeis em micro equipes – Parte 1

por adlerparnas

Salve pessoal!

Depois de muito tempo longe, estou eu aqui outra vez! Dessa vez, vim falar sobre meu tema do TCC da pós-graduação que estou fazendo, Engenharia de Software Centrada em Metodologias Ágeis.

Durante meus estudos sobre metodologias ágeis, pude verificar que as  metodologias mais utilizadas, contam com equipes de 5 a 9 pessoas, onde cada um possui um papel, e estão alocados em um único projeto.

Olhando para as empresas em que trabalhei, verifiquei que nenhuma delas poderia aplicar as metodologias por completo, pois tinham no máximo cinco integrantes na equipe e, os mesmo, tinham que trabalhar em todos os projetos da empresa.

Comparando os cenários estudados e os cenários onde as equipes são de no máximo cinco pessoas e multi-projetos: Como podemos conciliar a aplicação de metodologias ágeis em micro-equipes alocadas em mais de um projeto?

Este é o tema central do artigo que vou submeter como TCC da pós. Pretendo postar, alguns artigos descrevendo o progresso de meus estudos. Gostaria da ajuda de todos vocês para que possamos criar um bom material sobre o assunto levantado.

Anúncios
12 de outubro de 2010

Adicionando eventos a elementos dinâmicos com jQuery

por adlerparnas

Fala galera! Hoje venho falar de um recurso que o jQuery possui que salva vidas 😀

Quantas vezes criamos elementos HTML utilizando Javascript e ainda precisamos adicionar funções para os eventos a esses elementos? Quem gosta de RIA utilizando Javascript sabe disso.

Digamos que temos um menu e que os cliques são tratados por uma função “trataClick”. Nosso arquivo HTML e Javascript ficaria assim:

arquivo.html

<html>
 <header>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"><!--mce:0--></script>
<script src="scripts.js" type="text/javascript"><!--mce:1--></script>
</header>
 <body>
 <ul id="main_menu">
<li><a href="#item1">Item 1</a></li>
<li><a href="#item2">Item 2</a></li>
<li><a href="#item3">Item 3</a></li>
<li><a href="#item4">Item 4</a></li>
 </ul>
 </body>
</html>

scripts.js

//função que trata os cliques no menu
function trataClick(){
alert(this);
}

$(function(){
$('#main_menu a').click(trataClick);
});

Tudo funcionando! Mas e se  tivessemos que adicionar novos itens ao menu? Você teria que adicionar a função ao evento click dos novos elemento. Digamos que nosso menu seja construido via AJAX:

$.ajax({
url: "meuController.php",
type: 'POST'
success: function(data){
//removendo todos os filhos do menu
$('#main_menu').find('li').remove();
//incluindo novos itens no menu
$('#main_menu').append(data);
//adicionando a função aos novos elementos
$('#main_menu a').click(trataClick);
},
error: function(){
alert("Não foi possível recuperar o menu");
}
});

Aqui vem o pulo do gato! 😀 A biblioteca jQuery possui uma função “live” que atribui o evento a todos os elementos que estão na página mesmo os que são criados depois da chamada, livrando-nos da obrigação de adcionar a função ao evento toda vez que novos elementos são criados.

$('#main_menu a').live('click', function(){alert('clicou')});

É isso ai pessoal! Espero que essa dica seja útil pra vocês quanto é pra min. Espero comentários e caso tenha dito algo errado sintam-se à vontade para me corrigir. Abraços e até a próxima dica.

26 de julho de 2010

PHPUnit no CodeIgniter com CIUnit

por adlerparnas

Fala Pessoal!

Meu nome é Adler Parnas e hoje vou falar da instalação do PHPUnit no CodeIgniter utilizando a biblioteca CIUnit. Não tenho o objetivo de explicar o funcionamento nem a utilização do CodeIgniter nem o PHPUnit.

O PHPUnit é um Framework para automatização de testes unitários,  muito utilizado para Desenvolvimento Baseado em Testes. O CIUnit é uma série de códigos em PHP para a integrar o PHPUnit ao CodeIgniter para que você possa realizar testes de seus Models, Controllers e Helpers de uma maneira bem mais fácil.

A instalação do PHPUnit pode ser feita através do PEAR. Para quem não possui o PEAR intalado basta seguir o tutorial no site oficial da PEAR, pra quem usar WAMP + Windows 7 pode ler esta explicação que escrevi.

O CIUnit pode ser baixado no site do oficial do projeto que possui um tutorial muito fácil de ser acompanhado. Apesar de seguir os passos como é dito no site oficial, tive problemas ao executar os teste. Fuçando nos códigos do CIUnit e nas mensagens de erros geradas, descobri que o mapeamento do CIUnit para a pasta de bibliotecas do CodeIgniter está errado.

No arquivo: system\application\libraries\fooStack\fooBase\index.php:


// existe a seguinte atribuição
$application_folder = "../../application";

// o correto seria
$application_folder = "/application";

Um outro arquivo com problemas é o \system\application\tests\CIUnit.php que possui um código comentado que deve ser descomentado:

########################################
# descomente estas linha abaixpo         #
########################################

// $CI->load->library('fooStack/Spyc');
// CIUnit::$spyc = &$CI->spyc;
$CI->load->library('fooStack/Fixture');
CIUnit::$fixture = &$CI->fixture;

É isso ai pessoal! Espero que esta dica seja útil a vocês e caso tenha dito algo errado me corrijam.

14 de julho de 2010

Nunca mais você vai usar as variáveis $_GET e $_POST

por adlerparnas

Olá! Pessoal!

Meu nome é Adler Parnas e hoje vou falar de um técnica para acessar, validar e filtrar dados das variáveis $_POST e $_GET no PHP.

Caminhando na minha jornada rumo a Certificação PHP, me deparei com um artigo na PHP Architect, que exemplificava a utilização das funções filter_input e filter_input_array. Tais funções foram inseridas no PHP a partir da versão 5.2 e são uma ótima forma para tratar dados das variáveis $_GET e $_POST deixando seu código mais legível e seguro.

Como é falado no artigo original, é incrível a quantidade de sites/sistemas em PHP com falhas de segurança por  não tratar a entrada de dados pelo usuário. Existe também o tempo gasto para escrever códigos de tratamento dos dados de entrada.

Veja como seu código fica mais limpo e claro utilizando a função filter_input para tratar um parâmetro via GET:


<?php

$user_name = filter_input(INPUT_GET, 'user_name', FILTER_SANATIZE_STRING);

?>

Na página de documentação do PHP, também existe um exemplo utilizando a função filter_input_array, onde é criado um array com as opções de validação do POST esperado pelo programa.

<?php
error_reporting(E_ALL | E_STRICT);

/* data actually came from POST
$_POST = array(
   'product_id'    => 'libgd<script>',
   'component'   => '10',
   'versions'       => '2.0.33',
   'testscalar'    => array('2', '23', '10', '12'),
   'testarray'     => '2',
);
*/
/**
 * Arry com as opções de validação
 */
$args = array(
   'product_id'     => FILTER_SANITIZE_ENCODED,
    'component'   => array(
                                    'filter'    => FILTER_VALIDATE_INT,
                                    'flags'     => FILTER_REQUIRE_ARRAY,
                                    'options'   => array('min_range' => 1, 'max_range' => 10)
    ),
    'versions'     => FILTER_SANITIZE_ENCODED,
    'doesnotexist' => FILTER_VALIDATE_INT,
    'testscalar'   => array(
                                    'filter' => FILTER_VALIDATE_INT,
                                    'flags'  => FILTER_REQUIRE_SCALAR,
    ),
    'testarray'    => array(
                                    'filter' => FILTER_VALIDATE_INT,
                                    'flags'  => FILTER_REQUIRE_ARRAY,
    )
);

$myinputs = filter_input_array(INPUT_POST, $args);

var_dump($myinputs);
?>

O resultado deste tratamento seria:

array
   'product_id'     => string 'libgd%3Cscript%3E' (length=17)
   'component'    => boolean false
   'versions'        => string '2.0.33' (length=6)
   'doesnotexist'  => null
   'testscalar'     => boolean false
   'testarray'      => boolean false

Existem vários tipos de filtros que podem ser utilizados, sendo eles divididos em “dois grupos”, SANATIZE e VALIDATE. Os filtros dos tipo SANATIZE limpam os dados da variável, já os filtros do tipo VALIDATE, retornam FALSE caso o dados não passe pelo filtro.

As funções filter_input e filter_input_array não tratam todos os tipos de dados e nem vão deixar seu programa 100% seguro, mas já é uma boa parte da segurança realizada de forma elegante.

É isso ai galera! Espero que essa dica seja útil a todos vocês e caso tenha dito algo errado, favor me corrijam.

Fontes: