Archive for April, 2008

Introdução

 

O ms4w foi um pacote criado pelo pessoal da Maptools (www.maptools.org) para facilitar a vida de quem deseja instalar um servidor Web para “rodar” aplicativos que utilizem o mapserver como software de geração de mapas.

A vantagem de utilizar esse pacote é que já vem tudo pré configurado, isto é, todas as dependências do mapserver já vem instalada.

 

Fazendo os download’s necessários

 

            Para instalar o ms4w devemos realizar o download do mesmo e iremos também realizar o download de uma aplicação demo que também é distribuída no próprio site www.maptools .org.

            Portanto é necessário baixar os seguintes itens:

·        MS4W base package

http://maptools.org/dl/ms4w/ms4w_2.2.7.zip

 

·        PHP/Mapscript sample application

http://maptools.org/dl/ms4w/gmap_ms4w_ms5.zip

 

Instalando…

 

No primeiro momento é necessário descompactar o arquivo “ms4w_2.2.7.zip

Após descompactá-lo, será criada uma pasta com o nome de ms4w, recorte-a e cole-a na no C:\.

 

 

Feito essa etapa é necessário descompactarmos também a aplicação demo (arquivo “gmap_ms4w_ms5.zip”)

 

Igualmente ao arquivo anterior será criada uma pasta com o nome de “ms4w”, portanto não extraia os dois arquivos na mesma simultaneamente, com a seguinte estrutura de diretórios:

           

 

             Se você notar essa estrutura é parecida com a estrutura criada pelo primeiro arquivo:

          

Portanto agora devemos copiar os arquivos da aplicação, como observamos a estrutura é parecida portanto é só seguir a estrutura e copiar os arquivos necessários.

·        Da pasta da aplicação copiar todo o conteúdo do diretório “htdocs”, veja abaixo:

 

 

Para o caminho relativo do pacote “C:\ms4w\Apache\htdocs

 

·        Da pastada aplicação copiar o diretóriogmap”, veja abaixo:

 

Para o caminho relativo do pacote “C:\ms4w\apps

 

·        Da pasta da aplicação copiar todo o conteúdo do diretório “httpd.d”, veja abaixo:

 

Para o caminho relativo do pacote “C:\ms4w\apps\httpd.d

 

Inicializando o servidor Web e rodando a aplicação

 

Para inicializar o servidor Web devemos executar o arquivo de lote “apache-install.bat”, porem, como por padrão o apache vem configurado para “rodar” na porta 80, caso haja outro servidor ou serviço utilizando essa porta ele deve ser interrompido para que o apache possa ser executado corretamente, claro que, o esquema de portas do apache é configurável, mas isso não vem ao caso no momento.

Com o arquivo executado, nosso servidor Web devera estar pronto, para testá-lo basta abrir o internet explorer e digitar na barra de endereços http://localhost

E já deverá abrir uma página contendo informações referentes aos ao servidor e aos módulos já configurados no mesmo.

 

 

Um dos últimos itens é o item GMap(PHP Mapscript Sample Application) que foi a aplicação instalada por nós, veja abaixo:

 

 

Para visualizar a aplicação basta clicar sobre o link GMap Application, e você será redirecionado à pagina da mesma:

 

 

Conclusão

Bem este tutorial apenas mostra como instalar o pacote MS4W, não envolvendo assim nenhum desenvolvimento em cima do mapserver.

Espero ter ajudado com o mesmo, caso necessitem de mais algumas dicas basta postar aqui.

Um forte abraço a todos

Sem mais

            Rafael Sussel Decleva

Hoje tive que desenvolver um pequeno serviço que deveria ficar monitorando um determinado diretório e cada vez que esse diretório recebesse um arquivo novo eu deveria armazenar o nome de tal arquivo no banco de dados.

Apesar de ser um projeto muito simples, no começo eu ficava verificando quais arquivos estavam no diretório de tempos em tempos e a cada verificação eu comparava com uma lista já armazenada anteriormente.

Claro que o problema foi resolvido, porem ao conversam com o me camarada Heversom, ele disse que ao pesquisar sobre um outro problema na internet ele viu que havia uma implementação que ficava “escutando” um diretório e realizava algum evento caso houvesse alguma mudança no mesmo.

Fui lá estudar essa classe para ver o que ela teria a me oferecer para melhorar meu sistema.

O bacana é que ele nos traz diversos eventos dentre os quais podemos destacar 4 que são muito bacanas para se monitorar a pasta e ou arquivo em questão, são eles:

 

  • Changed -> Quando há uma alteração na pasta ou arquivo
  • Created -> Quando há criação de uma pasta ou arquivo
  • Renamed -> Quando um arquivo ou pasta é renomeado
  • Deleted -> Quando um arquivo ou pasta é apagado

 

Existe também uma série de atributos que devem, ou não serem “setados” para assim configurar a maneira com que essa nossa pasta/arquivos devem ser “monitorados”.

 

  • IncludeSubdirectories -> Se você deseja que o subdiretorios existentes na pasta que você deseja monitorar tambem sejam monitorados.
  • Filter -> Caso você deseje apenas monitorar algum tipo de arquivo, por exemplo arquivos do tipo *.exe;

 

Vamos ao que interessa, fiz uma implementação simples mostrando as funcionalidades desse objeto, nessa implementação ele ira apenas monitorar os arquivos do tipo texto “*.txt”.

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace WinAppFileSystemWatcherSample

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        //Declaro o nosso objeto;

        private System.IO.FileSystemWatcher fileSystemWatcher;

        //Declaro um delegate que será necessário para adionar itens na list box

        private delegate void adicionaItemNaListaHandler(string strVal);

 

        private void btnIniciar_Click(object sender, EventArgs e)

        {

            //Inicializo o objeto informando qual pasta será monitorada

            fileSystemWatcher = new System.IO.FileSystemWatcher(txtPath.Text);

            //Adiciono os Handler´s

            fileSystemWatcher.Changed += new System.IO.FileSystemEventHandler(fileSystemWatcher_Changed);

            fileSystemWatcher.Created += new System.IO.FileSystemEventHandler(fileSystemWatcher_Created);

            fileSystemWatcher.Deleted += new System.IO.FileSystemEventHandler(fileSystemWatcher_Deleted);

            fileSystemWatcher.Renamed += new System.IO.RenamedEventHandler(fileSystemWatcher_Renamed);

            //Aviso que desejo que seja monitorado tambem os subdiretórios

            fileSystemWatcher.IncludeSubdirectories = true;

            //Informo que apenas os arquivos do tipo texto “txt” devem ser monitorado

            fileSystemWatcher.Filter = “*.txt”;

 

            fileSystemWatcher.EnableRaisingEvents = true;

        }

 

        void fileSystemWatcher_Renamed(object sender, System.IO.RenamedEventArgs e)

        {

            //Adiciono na list box

            adicionaItemNaLista(“Alteração do nome do arquivo/pasta “ + e.Name);

        }

 

        void fileSystemWatcher_Created(object sender, System.IO.FileSystemEventArgs e)

        {

            //Adiciono na list box

            adicionaItemNaLista(“Criação do arquivo/pasta “ + e.Name);

        }

 

        void fileSystemWatcher_Changed(object sender, System.IO.FileSystemEventArgs e)

        {

            //Adiciono na list box

            adicionaItemNaLista(“Alteração do arquivo/pasta” + e.Name);

        }

 

        void fileSystemWatcher_Deleted(object sender, System.IO.FileSystemEventArgs e)

        {

            //Adiciono na list box

            adicionaItemNaLista(“Exclusão do arquivo/pasta “ + e.Name);

        }

 

        private void btnDiretorio_Click(object sender, EventArgs e)

        {

            //Apenas para chamar a caixinha de escolha de diretórios

            fbdDiretorio.ShowDialog();

            txtPath.Text = fbdDiretorio.SelectedPath;

        }

 

        //Esse método é necessário para inserir as mensagens na lista, visto que como

        //nosso objeto fileSystemWatcher atua como uma thread, diretamente nós não consegueriamos

        //acessar um objeto windows forms, fazendo se necessário o uso desse método.

        private void adicionaItemNaLista(string strVal)

        {

            if (lstMudancas.InvokeRequired)

                lstMudancas.Invoke(new adicionaItemNaListaHandler(adicionaItemNaLista), new object[] { strVal });

            else

                lstMudancas.Items.Add(strVal);

        }

    }

}

 

 

Veja abaixo algumas telas da aplicação em execução:

Aqui localizamos o diretório ao qual desejamos monitorar:

 

 

 

Devemos “clicar” sobre o botão “Iniciar Monitoramento”.

Agora criamos um arquivo do tipo texto “.txt” na nossa pasta monitorada, e o sistema já acusou essa nossa criação veja:

 

 

Veja agora que criamos um subdiretório, repare que a criação do mesmo não foi indicada na aplicação, apenas a criação de um novo arquivo dentro do mesmo, isso ocorreu pelo fato de termos adicionados um filtro pedindo que apenas os arquivos do tipo texto “.txt” sejam monitorados, veja :

 

 

Ao excluir o arquivo do nosso diretório monitorado, note que houve uma mensagem em nossa aplicação acusando essa exclusão:

 

 

E finalmente, o mesmo ocorre em caso de renomeação de arquivo veja:

 

 

Realmente a aplicação e a utilização do objeto FileSystemWatcher é muito simples, porem muito eficiente e funcional.

Abraços a todos

Sem mais

Rafael Sussel Decleva