Archive for category Desenvolvimento

Instalando e configurando o Apache, PHP e Mysql

[1] instale o apache
[2] descompacte a pasta do php no local desejado
[3] na pasta da instalação do apache procure o seguinte arquivo: pastadoapache\conf\httpd.conf
[4] no final do arquivo adicione as seguintes linhas:

LoadModule php5_module “dir_do_php/php5apache2_2.dll”
AddType application/x-httpd-php .php
PHPIniDir “dir_do_php/”

[4] troque o seguinte texto:

<IfModule dir_module>
DirectoryIndex index.html
</IfModule>

por:

<IfModule dir_module>
DirectoryIndex index.html index.htm index.php
</IfModule>

[5] dentro da raiz do php existe um arquivo como o nome libmysql.dll, cole-o dentro da pasta system32
[6] salve e feche o arquivo.
[7] abra o arquivo raiz_php/php.ini
[8] no texto:

extension_dir = “./”

substitua por:

extension_dir = raiz_do_php/ext/”

[9] no codigo:

;extension=php_mysql.dll
;extension=php_gd2.dll

substitua por:

extension=php_mysql.dll
extension=php_gd2.dll

(apenas tirando o comentário)

pronto, seu php mysql e apache estão configurados.

TwitterFacebookPlurkDeliciousRead It LaterInstapaperLinkedInShare

, , , , ,

1 Comentário

Redcar: Uma alternativa multiplataforma ao TextMate

A poucos dias estou utilizando efetivamente o TextMate como editor. Brinquei com ele algum tempo atrás, mas havia abandonado e agora resolvi adotá-lo de vez após pegar algumas dicas com o Saulo Arruda. Sem dúvida é um grande editor que facilita bastante, principalmente pelos famosos bundles.

Com o uso constante foram aparecendo as reais vantagens (e eventualmente algumas desvantagens), e como não poderia deixar de ser, mostrei para algumas pessoas os recursos que estava utilizando.

Hoje pela manhã um colega de trabalho, que utiliza plataforma linux e buscava uma alternativa ao TextMate, me mostrou um editor bastante interessante. Chama-se redcar.

Em meio a tantas opções de editores, o que me chamou a atenção é que ele possui suporte aos bundles do TextMate. Fizemos alguns testes rápidos e ambos se comportam de maneira semelhante.

É desenvolvido em Ruby e roda em multiplataformas sobre o JRuby além de open-source.

Não conheço outro editor que possua suporte aos bundles e que alguém utilize, então fica a dica para utilizarem, testarem e avaliar se vale a pena.

Abraços

TwitterFacebookPlurkDeliciousRead It LaterInstapaperLinkedInShare

, , , , , , ,

Nenhum comentário.

Regex – como identificar tags html

Resolvi fazer a minha estréia aqui!

Comecei a fazer algumas experiências utilizando BDD no cakephp e de cara tive uma grande limitação do framework de teste nativo do cake (simpletest). O problema é ele não ter um método “have_tag” (como em ROR) razoavelmente bom, o que me fez ter que escrever um método para sobrepô-lo. Escrevi rapidamente um método que fazia a verificação de uma tag html no código, porém eu precisava especificar todos os parâmetros dessa tag e em ordem, hoje depois de muito batalhar com expressão regular, consegui fazer um método que, pelos meus testes, funciona 100% como eu queria.

    function assertTags($pattern, $subject, $message) {
        //escaping reserved characters
        $replaceFrom = array("[", "]", "{", "}", "/", "(", ")");
        $replaceTo = array("\[", "\]", "\{", "\}", "\/", "\(", "\)");
        $pattern = str_replace($replaceFrom, $replaceTo, $pattern);

        //treat as a string
        if (!is_array($pattern)) $this->assertTrue(
                preg_match("/".$pattern."/i", $subject), $message);
        //treat as an array
        else {
            //the type of the tag is the first position of the array
            $key = array_shift($pattern);

            //create the pattern with the rest of the parameters of the array
            $pattern = "/<".$key." (?=[^>]*".
                join(")(?=[^>]*", $pattern).").*>/i";
            preg_match($pattern, $subject, $matches);

            //verify if it returns any match
            return $this->assertTrue(!empty($matches), $message);
        }
    }

Vou explicar como a expressão regular, que é o “coração” do método, funciona:
Input:
array('input', 'type="text"', 'name="data[title]"', 'id="title"');
Pattern:
/<input />]*type="text")(?=[^>]*name="data\[title\]")(?=[^>]*id="title").*>/i

1. /<input />
Procuro todas as tags que começam com o elemento que foi passado na primeira posição do array (<input />

2. (?=[^>]*type=”text”)
Segue a explicação que eu achei sobre o operador lookahead(?=):

A lookahead matches only if the preceeding subexpression is followed by the pattern, but the pattern is not part of the match. The subexpression is the part of the regular expression which will be matched.

(?=pattern) matches only if there is a following pattern in input.
(?!pattern) matches only if there is not a following pattern in input.

E.g: /Win(?=98)/ matches ‘Win’ only if ‘Win’ is followed by ’98′.

http://www.evolt.org/regexp_in_javascript

Basicamente eu vou procurar a string type=”text” DESDE QUE ([^>]) não contenha o char de fechamento de tag (>)

2. (?=[^>]*name=”data\[title\]“)(?=[^>]*id=”title”)
Faço a mesma coisa para os parâmetros name e id (no caso do name eu escapo os colchetes utilizando \[ e \])

3. .*>/i
Indico que no fim posso ter qualquer string seguida de um “>”

Referências:

  • regexpal: ótimo testador de expressão regular;
  • Manual do TextMate: Um ótimo tutorial sobre a sintaxe de expressão regular
  • Evolt: Tutorial sobre o uso de expressões regulares em javascript
TwitterFacebookPlurkDeliciousRead It LaterInstapaperLinkedInShare

, , , , ,

Nenhum comentário.

Como nós aplicamos Scrum em Projetos de Manutenção

Prosseguindo com os posts do blog, vamos entrar em um tema mais técnico.

Acredito que várias pessoas tem o mesmo que problemas que nós estamos tendo para a implantação do Scrum na empresa em que trabalho: – E os Projetos de Manutenção?

Antes que eu comece a descer a ladeira, preciso que vocês entendam a nossa situação. Somo uma empresa de desenvolvimento de softwares sob medida para nossos clientes, logo, não temos praticamente nenhum “Produto de Prateleira”, e geralmente depois da entrega do software, fechamos um banco de horas de manutenção e implementação de novas funcionalidades. E exatamente nesses projetos que estamos utilizando o Scrum da maneira que vou descrever.

Procurando algumas referencias, encontrei pouco material, e o que encontrei geralmente se aplicava a apenas um projeto. Desenvolvemos o nosso método baseado nesse 2 links: Kanban for support and operations e Applying Agile/Scrum practices in Maintenance projects

No PDF, Kanban for support and operations, eles recomendam que se utilize um Kanban que possa ser facilmente alterado a ordem dos projetos, visto que os projetos devem ser ordenados por Prioridade da esquerda para a direta horizontalmente (sendo o mais prioritário na esquerda), o fluxo das atividades e tarefas deve ser feito de baixo para cima, iniciando com o Backlog e no topo deve estar o Pronto.

Os Sprints desses projetos são semanais. Inicialmente estamos presos a desenvolvedores que conhecem o projeto para poder mexer nele, mas a idéia é que com o tempo, toda a equipe de manutenção seja capaz de resolver qualquer pendência de qualquer um dos projetos de manutenção, logo, quem estiver disponível atende.

Tomamos por Pronto tudo que é publicado em ambiente de produção. E se, por acaso, a tarefa voltar devido a algum bug, é cadastrada uma nova tarefa.

Abaixo tem algumas imagens do nosso Kanban de Manutenção.


Essa foto foi tirada no dia que desenhamos o Kanban


Essa foto, foi tirada antes da reunião de retrospectiva, após uma semana de trabalho. Após a reunião retiramos todos post-it’s que estava Prontos e Preparamos para a nova semana.

Notem que houve uma alteração no kanban, precisamos criar uma nova fase que em nenhuma das referencias é citada. Como nos projetos, por vezes, dependem do aprovação do Project Owner (PO), estava poluindo muito o kanban manter os post-it’s na fase de iniciado, enquanto o cliente não aprovava. Então criamos uma fase desenvolvido, para os Scrums Masters poderem saber o que deve ser cobrado do PO.

Bom, acho que isso já deve dar um rumo para quem está tendo o mesmo problema que nós tivemos.
Se você tem alguma experiência, compartilhe conosco nos comentários.

TwitterFacebookPlurkDeliciousRead It LaterInstapaperLinkedInShare

, , , , ,

9 Comentários