Entendendo um pouco a API Google Maps
O Google dispensa comentários com todas as inovações que ele faz. Hoje falaremos um pouco sobre a API do Google Maps. API (Application Programming Interface ou Interface de Programação de Aplicativos) é a forma que temos de nos comunicar com as funções pré-programadas definidas pelo fornecedor, no caso, Google. Esta API permite a criação de mapas com locais definidos, controle de zoom, tipos de mapa, geração de rotas, pesquisa por estabelecimentos, e muitas coisas mais.
Como começar
A primeira coisa que devemos fazer é acessar o link da página inicial da API, ler e aceitar o contrato, digitar a url do site que deseja usar a API e clicar no botão “Gerar chave da API”. (veja a figura 1)

Figura 1: Aceitando o contrato
Após isso, caso ainda não esteja logado com a sua “Google Account”, o Google pedirá para efetuar o login, nesse passo você obterá a chave para usar a API somente na url que digitou o site. Caso queira usar a API em outro site, deverá repetir esse processo para cada site que quiser. (Veja a figura 2)

Figura 2: Chave gerada
Agora que já temos a chave, podemos usar a API no site. O Google disponibiliza alguns exemplos, para trabalhar com JavaScript, Flash, Serviço, etc..
Neste artigo abordaremos o uso da API para JavaScript e para isso devemos adicionar o seguinte script dentro do bloco head do HTML, no local “SUA_CHAVE”, você deve colocar a chave que o Google gerou para o site, veja o campo Your key is na figura 2.
<script src="http://maps.google.com/maps?file=api&v=2&sensor=true&key=SUA_CHAVE" type="text/javascript">
</script>
O código de base para começar o aprendizado está abaixo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Aprendendo a Usar a API Google Maps | Paulo Fernandes </title>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/>
<script src="http://maps.google.com/maps?file=api&v=2&sensor=true&
key=ABQIAAAAAaVFxs6kNq7gWY59qf5XMxSec6s_uUscdbTyPSy8oWl8zYzqFRRanjFebOU60thMmEQQDEPx3A3y5Q"
type="text/javascript"></script>
<script type="text/javascript">
var map = null;
var geocoder = null;
function inicializa() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("mapa_base"));
map.setCenter(new GLatLng(-22.9035393, -43.2095869), 13);
geocoder = new GClientGeocoder();
}
}
</script>
</head>
<body onload="inicializa()" onunload="GUnload()">
<div id="mapa_base" style="width: 500px; height: 300px"></div>
</body>
</html>
Este código não está difícil de entender, explicaremos as partes mais importantes:
- No onload(), a função inicializa() verifica se o navegador do usuário é compatível com a API Google Maps, caso positivo, o método captura uma div com id igual a “mapa_base” e define o mapa centralizado. O local padrão que escolhi foi a cidade do Rio de Janeiro, que é representada pelas seguintes coordenadas de latitude e longitude -22.9035393, -43.2095869, respectivamente. O número seguinte, 13, representa o zoom no mapa, quanto menor esse número, menor o zoom.
- No onunload(), a função GUnload() serve para limpar as estruturas internas e liberar a memória.
Para mais informações sobre os métodos, acesse a documentação em português, através deste link. Essa documentação está interessante, e será a base para o artigo.
Exemplos simples
Neste link podemos analisar diversos exemplos do poder desta API.
Para o artigo, colocaremos alguns exemplos interessantes para inserir um mapa personalizado no site.
- Descobrir qual a latitude e longitude do endereço: Isso é útil quando se pretende definir algum local como default ao entrar no site. Para isso faremos um formulário onde você digita o endereço e o mapa é carregado no endereço e exibe o posicionamento de latitude e longitude. O código JavaScript é esse:
function mostraEndereco(){
var endereco = document.getElementById("endereco").value;
if ( geocoder ) {
geocoder.getLatLng(endereco,
function(point){
if ( !point ) {
alert(endereco + " não encontrado");
} else {
map.setCenter(point, 13);
var marca = new GMarker(point);
map.addOverlay(marca);
marca.openInfoWindowHtml( endereco + "<br />" + point.toString() );
}
}
);
} else {
alert("GeoCoder não identificado");
}
}
E no HTML:
<form id="form_mapa" action="#" method="get">
<input type="text" name="endereco" id="endereco" size="50" value="São Paulo" />
<input type="button" name="enviar" id="enviar" value="Mostrar Latitude/Longitude" onclick="mostraEndereco()"/>
</form>
- Definindo um evento: Para definir um evento precisamos utilizar o objeto GEvent. Seguindo a mesma linha do código, definiremos um evento, que será disparado toda vez que o marcador for clicado, fazendo com que a posição geográfica seja exibida. Devemos colocar esse evento na função mostrarEndereco(), pois é nela que definimos o marcador.
GEvent.addListener(marca, "click", function() {
marca.openInfoWindowHtml( endereco + "<br />" + point.toString() );
});
- Adicionando zoom no mapa: Para adicionar o controle de zoom, devemos adicionar um controle ao mapa, através do método addControl() e a esse controle devemos adicionar o controle do mapa, o mais correto é adicionar isso na função de inicialização: inicializa(), a linha completa que deve ser inserida é esta:
map.addControl( new GSmallMapControl() );
- Adicionando forma de visualização: Podemos definir um controle para que o usuário possa ver o endereço na forma de mapa, híbrido ou satélite. Para isso devemos seguir a mesma linha de raciocínio para inserir o zoom, que seria adicionar um controle.
map.addControl( new GMapTypeControl() );
Exemplo avançado
Para mostrar algo avançado, que tal traçar a rota do ponto A ao ponto B? Para isso precisaremos que o usuário digite os valores dos pontos A e B. Para traçar a rota, vamos reescrever todo o exemplo, simplificando as configurações.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Aprendendo a Usar a API Google Maps - Obter Rota | Paulo Fernandes </title>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/>
<script
src="http://maps.google.com/maps?file=api&v=2&sensor=true&
key=ABQIAAAAAaVFxs6kNq7gWY59qf5XMxSec6s_uUscdbTyPSy8oWl8zYzqFRRanjFebOU60thMmEQQDEPx3A3y5Q"
type="text/javascript"></script>
<script type="text/javascript">
var map = null;
var geocoder = null;
var from;
var to;
var directionsPanel = null;
var directions = null;
function inicializa() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("mapa_base"));
map.setCenter(new GLatLng(-22.5489433, -46.6388182), 7);
geocoder = new GClientGeocoder();
map.addControl( new GSmallMapControl() );
map.addControl( new GMapTypeControl() );
directionsPanel = document.getElementById("route");
directions = new GDirections(map, directionsPanel);
}
}
function gerarRota(){
from = document.getElementById("partida").value;
to = document.getElementById("destino").value;
if ( geocoder ) {
geocoder.getLatLng(from,
function(point){
if ( !point ) {
alert(from + " não encontrado");
}
}
);
geocoder.getLatLng(to,
function(point){
if ( !point ) {
alert(to + " não encontrado");
}
}
);
var string = "from: " + from + " to: "+to;
directions.clear();
directions.load(string);
GEvent.addListener(directions, "error", erroGetRoute);
} else {
alert("GeoCoder não identificado");
}
}
function erroGetRoute(){
alert("Não foi possivel traçar a rota de: " + from + " para: " + to );
}
</script>
</head>
<body onload="inicializa()" onunload="GUnload()">
<form id="form_mapa" action="#" method="get">
<label for="partida">Partida</label>
<input type="text" name="partida" id="partida" value="São Paulo" size="50" />
<br />
<label for="destino">Destino</label>
<input type="text" name="destino" id="destino" value="Rio de Janeiro" size="50" />
<br />
<input type="button" name="enviar" id="enviar" value="Obter Rota" onclick="gerarRota()"/>
</form>
<div id="mapa_base" style="width: 800px; height: 500px;"></div>
<div id="route" style="width: 300px; height: 500px; position: absolute; right: 0; top: 0;"></div>
</body>
</html>
Para mostrar a rota, tivemos que criar uma nova div com o id igual à “route”, é neste local que exibiremos o passo a passo da rota traçada. Essa captura do local foi feita nesta linha directionsPanel = document.getElementById(“route”); Para traçar a rota, devemos instanciar o objeto GDirections e informar para ele carregar a rota através do método directions.load(string);
No método load devemos passar os dois endereços escritos por extenso, antes o endereço de partida devemos atribuir from: e antes do endereço de destino to: , ficando a string completa from: São Paulo to: Rio de Janeiro, por exemplo.
Caso algum dos dois endereços não seja encontrado, o código exibirá um alert informando que a rota não pode ser traçada.
Conclusão
Com este artigo pudemos perceber o poder que a API nos dá, ela nos fornece outras diversas possibilidades que podem ser vistas na documentação oficial. O objetivo do artigo foi introduzir os principais conceitos e o que se pode utilizar no site de sua empresa, por exemplo.
Algo que devemos tomar cuidado é na declaração das variáveis, pois o local onde ela é declarada pode fazer com que a API se porte de forma indesejada. Por exemplo, quando declaramos uma marca, se a tivemos declarado fora da função a cada novo endereço, a marca anterior seria perdida, mas repare que a informação de latitude e longitude é perdida, mantendo somente a ultima. Faça o teste, declare a variável fora do método, acredito que achará bem interessante.
Pode ser que exista outra forma de fazer o que demonstramos ou até que o que foi demonstrado esteja errado, mesmo que aparentemente funcionando.
Fonte: Imasters
Escopo e variáveis super poderosas
Variáveis globais são aquelas definidas na raiz do script, fora de qualquer outro escopo, e que não existem dentro de uma função ou método, da mesma forma que variáveis criadas em um desses escopos deixarão de existir fora dele.
As variáveis superglobais, entretanto, podem ser acessadas em qualquer escopo, e são elas $GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $_REQUEST e $_SESSION. Acontece que não é possível definir uma outra variável como superglobal (ao menos não sem o uso da Runkit), e aí a confusão começa.
A partir de um escopo, para declarar que uma variável pertence ao escopo global, utiliza-se a keyword global dentro desse escopo, mesmo que a variável ainda não tenha sido definida, quando nesse caso passará a existir se definida pela função.
<?php
$chamadas = 0;
function carregar(){
global $chamadas, $artista;
$chamadas++;
$artista = "Whitesnake";
}
carregar();
echo $artista, " - ", $chamadas; // Whitesnake - 1
?>
Contudo, são inúmeras as vezes que observei o uso incorreto do global, fora de qualquer escopo, com o objetivo de tornar a variável uma superglobal. Mas na realidade, além de constatar o óbvio declarando que uma variável global pertence ao próprio escopo global, isso simplesmente não funciona e obriga o desenvolvedor a utilizar a keyword global novamente dentro do escopo onde deseja ter o acesso.
O diagrama acima evidencia as superglobais na direita, acessíveis de qualquer lugar, as variáveis ao fundo limitadas aos seus respectivos escopos e, compondo a linha de frente, as variáveis globais, existentes ao longo do script e que podem ser utilizadas em um determinado escopo com o uso da keyword global. Então mesmo que você chame sua variável de Docinho, ela não vai se tornar uma superglobal.
Outra maneira de utilizar variáveis globais é pela superglobal $GLOBALS, uma array associativa com referência às variáveis no escopo global.
É importante observar ainda que, de uma forma geral, variáveis globais são uma causa comum de problemas, já que você não sabe se o valor é realmente o que você espera que seja. Um método simples de evitar isso é passar as variáveis necessárias como parâmetro para a função ou objeto que vai utilizá-las.
Eu só consegui perceber o problema de confiar em variáveis globais com a ajuda da minha mãe. Certa vez ela deixou um pudim delicioso na geladeira, e na manhã seguinte colocou uma travessa de peixe na prateleira de baixo. Pronto, o pudim ficou com gosto de sardinha o resto da semana. E foi assim que eu aprendi que devo separar minhas variáveis em lugares seguros, evitando que fatores externos acabem estragando tudo sem que eu sequer perceba.
E pra ficar claro, o que foi abordado nada tem a ver com o uso da diretiva register_globals que, quando ativada, define o conteúdo de $_ENV, $_GET, $_POST, $_COOKIE e $_SERVER como variáveis globais. Então $_POST['nome'] também passa a existir como $nome, $_GET['pagina'] também como $pagina, e assim por diante. Este terrível fenômeno está desativado por padrão desde a versão 4.2 e será removido por completo no PHP 6.
Referências
- Escopo de variáveis
- Superglobais predefinidas
- (Não) Utilizando a diretiva Register Globals
- Ferramenta case utilizada no diagrama de escopo de variáveis
Fonte: Imasters
Como personalizar o meu blog
Olá novamente, a pedido de várias famílias, mostro-vos agora um artigo no seguimento do “como criar o meu blog”, sobre como personalizar e melhorar o vosso blog (ou qualquer outro blog que utilize a plataforma WordPress 2.7).

Primeiro, vamos escolher uns plugins úteis e fazer download dos mesmos (cliquem nos nomes para ir para os sites e fazer download da última versão):
- Akismet: plugin super útil para evitar comentários de spam, já vem instalado por defeito
- Subscribe To Comments: plugin muito útil que possibilita os autores de comentários serem notificados caso haja algum comentário após o deles
- WordPress.com Stats: plugin útil a nível administrativo, pois permite que as estatísticas do seu blog fiquem e sejam registadas na base de dados do WordPress
- WP-PostViews: este plugin podem não o considerar útil, mas pessoalmente acho interessante as pessoas poderem ver quantas visualizações já teve um dado artigo.
E pronto, temos aqui uma lista que já dá algum trabalho e serve para melhorar o seu blog ![]()
Para aceder à página de administração dos plugins, faça login na administração e clique no menu do lado esquerdo em “Plugins”.
Vamos proceder à instalação e activação dos plugins.
- Akismet
Quanto a este plugin, basta activá-lo (pois já vem instalado por defeito), mas para tal terá de obter uma chave API no site do WordPress, pode fazê-lo aqui:

(screenshot do akismet com api key – CapturaEcra-3.png)
Já está a funcionar, convém ver pelo menos uma vez por semana o Akismet, para confirmar que nenhum comentário “verdadeiro” foi lá parar sem querer ![]()
- Subscribe To Comments (e outros plugins no geral)
Agora vou explicar como se procede para instalar e activar o plugin Subscribe To Comments, mas esta explicação serve para todos os outros plugins no geral.
Clique, no menu do lado esquerdo, em “Plugins → Novo Plugin”, e de seguida escolha o seu plugin em formato .zip no centro, clicando de seguida em “Instalar Agora” para o instalar automaticamente.
Depois, se instalado com sucesso, deverá aparecer uma página semelhante à que está em baixo, onde deve clicar em “Activar Plugin”.
E já está. Muito simples, não? ![]()
Alguns plugins, como o WP-PostViews podem necessitar de alterações nos templates para se poderem visualizar resultados.
Para instalar templates, o procedimento é diferente, pois não tem instalação automática, simplesmente tem de fazer upload da pasta descompactada para wp-content/themes/ e depois poderá seleccioná-lo no menu do lado esquerdo em “Apresentação”.
Para fazer upload da pasta, terá de ter uma conta de FTP, mas se já seguiu o primeiro artigo “como criar o meu blog”, não precisa de preocupar pois já a tem.
- Podem ver e fazer download de mais plugins aqui:
- Podem ver e fazer download de mais templates aqui:
- Podem e deve visitar também o site da comunidade portuguesa do WordPress, onde encontrará sugestões e traduções para Português de alguns dos plugins mais usados aqui:
Podem sugerir mais plugins, templates e sites que considerem úteis para as pessoas experimentarem.
Como criar o meu blog
Hoje vou-vos dar aqui um guia “passo-a-passo” sobre como criar o vosso blog de uma forma fácil, gratuita e rápida, usando o WordPress e os serviços de Alojamento Web da WebLive Hosting, da WebLive (empresa da qual sou CEO), mas poder-se-á utilizar este tutorial em qualquer outro serviço que ofereça Alojamento Gratuito com PHP e MySQL, compreendendo que o nome dos menus e mesmo os passos poderão ser diferentes.

Para começar, deverá encomendar um Plano de Alojamento (o Coal é gratuito e tem como limite apenas 10MB de Espaço em Disco, tudo o resto é Ilimitado), indo até http://www.weblivehosting.net e clicando no Plano “Coal”.
E se não tiver um domínio e/ou não quiser registar um, pode registar um subdomínio do tipo oseunome.myweblive.net
De seguida, a sua encomenda será analisada (para se confirmar que é “real”) e depois de aprovada pode fazer login no painel de controlo (ispCP), onde pode gerir o seu alojamento.
Neste momento, pode começar a fazer download do Wordpress em Português. Para isso, deverá fazer download da última versão aqui.
Agora deverá criar uma conta FTP para poder fazer upload do Wordpress.
Para tal, após fazer login no ispCP, clique em “Contas de FTP” e depois do lado esquerdo “Adicionar utilizador FTP”, preencha o username e uma password, depois clique em “Adicionar”.
Vamos agora criar uma Base de Dados MySQL e um utilizador, para o vosso blog.
Tal pode ser feito no ispCP, clicando em “Gerir SQL” e depois do lado esquerdo “Adicionar base de dados”, preenchendo com um nome à sua escolha, como por exemplo, “blog” (sem aspas).
De seguida, crie um utilizador para a sua recentemente criada base de dados, clicando em “Gerir SQL” e depois do lado direito, na linha da Base de Dados, em “Adicionar utilizador SQL”, preencha um nome (preferencialmente o mesmo que o da base de dados) e escolha uma password. Irá precisar destes dados ao instalar o Wordpress, por isso não se esqueça de os apontar em algum lado ou simplesmente não os esqueça.
Agora, já deve ter terminado de fazer o download do Wordpress, descompacte-o e agora terá de copiar o ficheiro wp-config-sample.php e colá-lo no mesmo local, mudando depois o nome do novo ficheiro para wp-config.php.
Abra este ficheiro wp-config.php com um editor de texto (por exemplo notepad ou gedit) e adicione os seus dados da base de dados, entre as linhas 19 e 25.

Já pode fazer upload das pastas e ficheiros (pode usar, por exemplo, o FileZilla ou qualquer outro cliente de FTP) dentro do mesmo para o directório “htdocs” (pode eliminar os conteúdos deste directório, mas não o próprio directório!), que é o directório “lido” quando acede a oseunome.myweblive.net, ou, se preferir que o seu blog esteja em oseunome.myweblive.net/blog/, crie um directório “blog” dentro do directório “htdocs”
Após terminar o upload dos ficheiros e pastas, vá até ao url onde instalou o seu blog, por exemplo: http://oseunome.myweblive.net/blog/ e siga os passos indicados no ecrã.
Não se esqueça que o nome e utilizador da Base de Dados MySQL que criou, são precedidos por um número e um “underscore” ( _ ), que consegue ver no ispCP, em “Gerir SQL”.
Wordpress – Ecrã instalação
Agora já tem o seu blog e está pronto a utilizá-lo (se precisar de apagar algum directório, pode usar o FileZilla também para o apagar).
NOTA2: em alternativa ao FileZilla, pode usar o Gestor de FTP online em http://admin.webliveserver.net/ftp/ ou https://admin.webliveserver.net/ftp/, mas será bastante mais demorado a fazer upload dos ficheiros.
Que comecem os blogs!
Encomendar: www.weblivehosting.net
Gerir Alojamento: admin.webliveserver.net
Wordpress: pt.wordpress.org
Filezilla: filezilla-project.org
Sete maneiras de melhorar o desenvolvimento de software
Para se concretizarem, os projetos de software exigem investimentos, apoio, cuidados, trabalho árduo e dedicação. Uma boa prática de gerenciamento de entrega garante que, depois de criado, o software possa ser implementado com êxito, atendendo às necessidades da área que o solicitou e, ainda, de outras unidades que queiram utilizá-lo no futuro.
Na lista de clientes que confirmam essa premissa está uma grande empresa britânica de telecomunicações. A companhia decidiu mudar de fornecedor na hora de realizar uma reengenharia dos sistemas para gestão da área de billing (bilhetagem) e da emissão de contas. A companhia tinha de implementar as mudanças em três meses ou poderia perder centenas de milhões de libras, inclusive com queda no valor das ações. Outra questão era que, na época, os processos para desenvolvimento de software eram ruins e o gerenciamento de entrega extremamente problemático.
A empresa de telecomunicações chamou uma empresa especializada para ajudá-la a entregar o software no prazo e recuperar um processo falho de gerenciamento das mudanças. Com isso, em três meses, fez os lançamentos pendentes e conseguiu realizar a reformulação de dois aplicativos. Mais importante, estabeleceu um processo de gerenciamento de entregas simples e direto para assegurar que futuras liberações aconteçam no devido tempo e com a qualidade exigida.
A seguir, segue um detalhamento de todo o processo, inclusive, com os erros cometidos.
1. Entender o estado atual do gerenciamento de entregas.
Você não pode começar a consertar alguma coisa sem entender o que ela é e qual o problema. O primeiro passo para aprimorar o sistema de gerenciamento das entregas do nosso cliente foi criar um panorama detalhado do processos antigos. Para começar, a empresa realizou várias sessões explanatórias com pessoas-chave envolvidas no processo de software.
Nas reuniões, o fornecedor descobriu que o ponto de partida era muito ruim: ainda havia software a espera de liberação, depois de dois meses em que ele estava pronto.
Os ambientes de teste eram limitados, sem gerenciamento e, portanto, desatualizados e impossíveis de usar. Pior ainda, melhorar novos ambientes e renovar os existentes era um processo relativamente lento.
Em média, um teste manual de software demorava três meses. E boa parte deles acabava sendo abandonado, o que reduzia a qualidade das soluções entregues.
De um modo geral, o engajamento da equipe de desenvolvimento era muito baixo. Como os profissionais nunca tinham sido ajudados a fornecer software de boa qualidade, regularmente, estavam desestimulados.
2. Estabelecer um ciclo regular de liberações.
Quando obtivemos um panorama geral do estado atual do processo, começamos a definir um ciclo regular de liberações.
Se a equipe de engenharia é o coração do projeto, o ciclo de liberações é seu batimento cardíaco. Para determinar a freqüência de liberações para produção, foi preciso descobrir de quanto teste não funcional precisaríamos e quanto tempo demoraria. Este projeto exigiu teste de regressão, desempenho e integração.
Estabelecer um ciclo de liberações é vital porque:
• Cria uma oportunidade de discutir a fundo os testes não funcionais de que o software possa precisar.
• Anuncia um cronograma de entrega das porções da funcionalidade que as partes interessadas poderão obter. Se elas souberem que haverá liberação de funcionalidade regularmente, podem continuar concordando em relação ao resultado final esperado.
• Cria uma rotina que todas as equipes podem seguir (inclusive marketing e engenharia).
• Dá aos clientes a confiança de que podem pedir algo e receber o que pediram.
O ciclo de liberações tem de ser o mais exato possível, não um número inatingível que você inventou durante o almoço. Antes de anunciá-lo, teste-o. Não há nada pior para um processo de liberações já falho do que mais datas ilusórias!
Sugerimos um ciclo semanal. Este plano, porém, mostrou-se inviável, já que o ambiente de banco de dados do cliente não podia ser renovado com suficiente rapidez. Então tentamos ciclos quinzenais. Não houve objeção imediata dos participantes, mas as duas primeiras tentativas fracassaram! Tornou-se viável depois que superamos alguns gargalos do ambiente e automatizamos alguns testes.
Por fim, estabelecemos um ciclo em que, a cada duas semanas, o código da equipe de engenharia, pronto para produção, era encaminhado para teste no sistema. Quinze dias depois, liberamos este código para produção.
Lembre-se: seu ciclo de liberações não diz respeito a quando seu cliente quer a liberação, mas quando você pode realizá-la com o nível desejado de qualidade. Nossos clientes apoiaram nosso ciclo de liberações porque nós os chamamos para ajudar a determiná-lo. A opinião dos clientes é apenas um dos fatores levados em conta para estabelecer a regularidade das liberações.
3. Adotar processos leves. Testá-los no início e revisá-los regularmente.
Se existe um princípio norteador da engenharia (ou reengenharia) de um processo, este princípio é desenvolver um pouco, analisar os resultados e fazer um pouco mais. Repita esta abordagem cíclica até alcançar os resultados desejados.
Processos leves são aqueles que não exigem aprovações longas e burocráticas ou reuniões intermináveis para obter consenso. Normalmente, demandam apenas o nível mínimo aceitável de inputs e outputs. O que lhes falta em volume e burocracia é compensado com resposta a mudanças e adoção popular!
Subjacente a esta abordagem há o problema espinhoso da documentação. Você precisa registrar o que fez e como fez. Do contrário, o que vai revisar e como vai melhorar?
Não é o tipo de documentação volumosa que ameaça as florestas tropicais ou dá sono nos leitores. É a documentação que as pessoas (técnicas ou não) podem ler e seguir.
A equipe de engenharia escolheu uma ferramenta comercial para documentar seu trabalho colaborativo. Os engenheiros usaram o software para elaborar uma documentação mínima, porém eficaz, do que estavam concordando em criar em cada ciclo de trabalho. Registraram o que e como tinham criado e o que era necessário para que entrasse em funcionamento. Vimos o valor desta abordagem e a implementamos — assim como a ferramenta – para o restante dos envolvidos no processo.
Inicialmente, sugerimos uma seqüência de tarefas para liberar o software que recebemos das equipes de engenharia, abrangendo o modo como recebemos a entrega por parte do sistema de gerenciamento de controle de origem, que nomes os pacotes teriam e como cada elemento (código executável, scripts de banco de dados etc.) funcionaria em quais plataformas. Depois fizemos um teste simulado utilizando código fictício para cada elemento. Testamos nossa seqüência documentando o que e como fizemos. Isso formou a base das instruções de instalação.
Em seguida, as pessoas que iriam implementar o release real fizeram outro teste simulado usando apenas a nossa documentação. Elas estenderam, corrigiram e aprimoraram nossas instruções. O processo se tornou mais abrangente e todos colaboraram com a documentação. O processo foi adotado de maneira mais ampla e com mais qualidade, já que todos ajudaram a defini-lo.
Revisamos o processo depois de cada liberação. Examinamos a documentação e identificamos mudanças feitas durante a liberação. A cada vez, verificamos como a documentação poderia ser aprimorada e incorporamos os aprimoramentos ao processo.
4. Estabelecer uma infra-estrutura de liberações no início.
A infra-estrutura de liberações é tudo aquilo que precisa existir para que o software seja implementado e as pessoas possam utilizá-lo. Seu compromisso com o cliente não é somente criar um software excelente, mas que ele esteja disponível para ser acessado e utilizado.
Para obter um bom processo de liberação, é crucial que você descubra o que precisa estar implantando para disponibilizar ao cliente antes da equipe de engenharia acabar de criar o software.
A infra-estrutura de liberações cobre hardware, storage, conexões de rede, banda larga, licenças de software, perfis dos usuários e permissões de acesso. Recursos humanos e habilidades também fazem parte da infra-estrutura de liberações. Se você precisa que um software especializado seja instalado e configurado, por exemplo, não é uma atitude inteligente excluir do seu plano de infra-estrutura a disponibilidade das habilidades envolvidas ou o custo de obtê-las.
Quando estiver em busca do hardware necessários ou das habilidades que faltam (por exemplo, para configurar redes seguras), é vital descobrir gargalos ocultos o mais cedo possível. Você precisa resolvê-los antes que eles atrasem a entrega do software.
Não é coisa simples. Nós nos esforçamos para implantar nossa infra-estrutura de liberações assim que iniciamos o projeto. Depois de seis semanas, ainda estávamos esperando memória e hard drives especiais para os servidores de teste!
5. Automatizar e padronizar o máximo possível.
A automação permite que você execute tarefas repetitivas sem comprometer recursos humanos valiosos. A padronização garante que inputs e outputs da automação sejam consistentes o tempo todo.
Antes do nosso envolvimento com o projeto, as equipes de engenharia produziam manualmente um pacote implementável. Não havia garantia de que um novo pacote seria igual ao anterior. Na realidade, nem havia garantia de que era o software que as equipes andavam desenvolvendo e se funcionaria! Muitas vezes, a equipe técnica levava dias para criar um pacote com os recursos que estavam sendo entregues em uma estrutura que pudesse ser implementada.
Formulamos imediatamente uma estrutura e critérios de aceitação para o pacote implementável que as equipes estavam nos entregando e as ajudamos a padronizar o empacotamento. Isso ativou a implementação de processos automatizados para criar o software nesta estrutura consistente para cada ponto da liberação.
De repente, o empacotamento do software para liberação deixou de ser um problema. Sua executabilidade estava garantida, já que tínhamos automatizado a verificação dos critérios de aceitação — por exemplo, testar o código antes da entrega e implementar o teste para assegurar que a implementação real poderia ser feita. Como resultado, conseguimos empacotar, versionar, testar e implementar código acabado com um único comando em pouquíssimo tempo.
Mas a automação não parou por aí. A cada ciclo de desenvolvimento, tínhamos que fazer ainda mais testes de regressão. Os testes de regressão existentes levavam três semanas para serem executados manualmente e, por isso, as liberações nunca eram bem testadas.
No nosso recém-criado ciclo de liberações, tínhamos que realizar testes de regressão, desempenho e integração em duas semanas para podermos colocar em produção. Podíamos superar a questão de ter diferentes tipos de teste utilizando ambientes separados para cada um. Mas como encaixar três meses de testes de regressão em um período de duas semanas?!
Iniciamos um exercício de priorização. O cliente identificou os testes de regressão mais prioritários, o mínimo que aceitaria como prova de que a antiga funcionalidade ainda executava. Depois partimos para automatizar este conjunto. Testes de aceitação subseqüentes também se tornaram automatizados, assegurando que poderíamos fazer testes de regressão em cada liberação em algumas horas em vez de dias.
6. Estabelecer expectativas positivas.
Se a liberação de software é importante para você, não faça segredo disso. Nossas equipes reforçaram o compromisso de liberar o software quando sabiam que era importante.
Endossamos esta importância ao estabelecer que o gerente de liberações designado presumiria que o software estaria pronto na data que as equipes concordaram que ele estaria pronto. Fizemos o gerente de programa (na realidade, nosso cliente) explicar para as equipes por que esta liberação era importante. (No fim das contas, o motivo era não perder muito dinheiro!)
Pedimos que o software fornecido pelas equipes de engenharia seguisse um padrão (versionado, testado, documentado e empacotado). Estabelecemos que solicitaríamos este empacotamento padrão para cada ciclo de liberação. Tivemos de explicar por que queríamos o software desta maneira (nosso processo automatizado se tornava mais fácil e consistente) e incorporamos o feedback da equipe ao processo.
Estabelecer expectativas positivas é uma ótima maneira de empoderar todos os envolvidos no processo. Não nos foi delegada nenhuma autoridade executiva e, portanto, não receávamos sansões ou demissões. Tínhamos o poder da expectativa positiva para fazer as pessoas aderirem e nos ajudarem a melhorar o processo de liberação. Elas tomaram decisões-chave (que nunca tinham se sentido capazes de tomar antes) porque “Mike e Tym precisam deste software na quinta-feira e nós dissemos que o entregaríamos”.
7. Investir em pessoas.
Não importa o quanto você gaste em hardware, software e processos imaginativos — sem o comprometimento dos membros da equipe você não alcançará um sucesso sustentável na liberação do seu software.Talvez você nem mesmo tenha um software para liberar!
Provavelmente você pensou que falaríamos em arregimentar as pessoas certas e recompensá-las bem ou que discorreríamos sobre as ferramentas e qualificações necessárias para o trabalho. A verdade é que você sabe que precisa ter as pessoas certas nas equipes (a definição de “certas” varia de uma empresa para outra), você deve recompensá-las adequadamente pelo valor que agregam e, sim, você deve assegurar que elas tenham as ferramentas e qualificações necessárias.
Nossa pressuposição básica é de que as pessoas estão inerentemente interessadas em fazer um bom trabalho. Se você quiser que os membros das suas equipes se importem com seu produto e com a realização de um bom trabalho, antes você precisa demonstrar que se importa com o que é importante para elas. Desde o começo do projeto, criamos um ótimo relacionamento com todos os membros das equipes, baseado em compreensão e respeito mútuo. Demonstramos que éramos flexíveis em termos de desafios pessoais e fizemos o que estava ao nosso alcance para ajudar. Comprar almoço, pegar alguma coisa para beber, organizar treinamento, aconselhar, ouvir problemas, fazer o papel do advogado do diabo… fizemos o que era necessário para que cada indivíduo se sentisse valorizado e um elemento vital do processo.
No nosso primeiro contato com o projeto, detectamos um sentimento geral de apatia. Alguns funcionários fixos mais antigos estavam simplesmente à espera de um pacote de dispensa de pessoal; outros não eram chamados para nada porque nunca tinham feito nada certo. Nos dedicamos a criar um bom relacionamento e despertar um auto-julgamento positivo para que as pessoas voltassem a se importar em adicionar valor pessoal ao processo.
O gerenciamento de liberações é uma parte muito importante de qualquer projeto de software e, freqüentemente, não recebe a atenção que merece. Poderíamos compartilhar muitas outras dicas e observações excelentes sobre nossa experiência de fortalecer o processo de liberações desta empresa de telecomunicações de médio porte. Mas estas são as sete mais importantes para nós neste caso específico, embora suponhamos que sejam idéias muito boas para qualquer situação.
Um bom gerenciamento de liberações exige trabalho árduo, determinação e ótima comunicação. Mas o mais importante é a habilidade de revisar, aprender e adaptar melhorias.
A Web requer muito mais do que apenas publicidade
O mundo da publicidade está sendo virado do avesso pelas mudanças aceleradas na comunicação. Isto não é novidade, afinal, a internet foi e é o grande catalizador da maioria das mudanças que vemos e de que participamos no dia-a-dia. Rapidamente, agências de publicidade estão buscando espaço nesta competição on line, criando novos departamentos, sintetizando em caráter de urgência a necessidade de seus clientes em marcar presença no mundo virtual. Mas a pergunta que se faz é: será que o consumidor está absorvendo isso?
Somos alvos de uma enxurrada de campanhas, apelos cada vez mais sedutores que em sua maioria são difíceis de marcar nossa memória. Fazem o Branding do momento, mas depois dão lugar a outros apelos mais enfáticos ainda e das formas menos convencionais que possamos imaginar. Quem vence nessa guerra? A resposta é: Aquele que consegue envolver o público por todos os lados, do “on line” ao “off line” e vice-versa, utilizando a integração como chave.
Walter Longo, mentor de Estratégia e Inovação do Grupo Newcomm, diz que “A grande tendência é a transformação das agências de maneira a atuar com igual peso em cada uma das áreas do tripé publicidade, entretenimento e interatividade“. E o prazo para essa adaptação é emergencial. Ainda segundo Longo, a reestruturação é a única forma de dar longevidade às agências – que terão que dominar diversas novas áreas para atender os clientes com eficiência.
Ações inteligentes, que conseguem marcar presença na mente do consumidor, são mais eficazes quando participam do cotidiano. Nascem nesse espaço físico, mas tocam no digital e vice-versa. Não separam um conteúdo para uma determinada mídia e alocam outro para as demais, mas são tão flexíveis que fazem com que o meio se torne obsoleto e a mensagem sim, evidente.
É hora de profissionais de Comunicação reverem conceitos e respirarem para poder mergulhar bem fundo, porque o mar está a cada momento mais navegável. O consumidor já “pescou” isso.
















