Blog

  • ASP.NET 2.0 – Criando urls pra web 2.0

    Artigo recomendado para Visual Studio 2005 SP1

    A Web 2.0 está modificando completamente a forma com a qual estávamos acostumados a divulgar nossas páginas. Antigamente fazíamos um cadastro com palavras chaves nos principais portais de busca de contéudo, agora os mesmos passaram a indexar completamente todo conteúdo favorecendo as páginas com muitas referências. Os novos motores de busca varrem todos os links relacionados e mesmo que você não cadastre seu site, ele pode ser indexado porque alguém inseriu seu link no site dele. Essa dinâmica está envolvendo novas tecnologias e comportamentos como o uso do AJAX. A proposta desse artigo é modificar as urls tradicionais de sua aplicação que passam parâmetros para novas urls que já incluem no caminho da mesma.

    Isso fará com que seu site seja visualizado mais vezes pelos motores de busca por que ele vão entender que o site possui várias paginas ‘Url virtuais’ conforme Tabela 01.

    Url Original: http://localhost/meusite/produtos.aspx?Codigo=75

    Url Modificada: http://localhost/meusite/produtos/75

    Tabela 01: Modificando urls tradicionais.

    Na prática o que estaremos fazendo é enganar os motores de busca usando o httpmodules do asp.net para tratar uma url que não existe em nosso site (http://localhost/meusite/produtos/75) e responder com outra url internamente com a informação solicitada. Com isso uma pagina com 100 parâmetros se comporta como se fosse 100 paginas. Esse truque pode ser usado para diversas outras finalidades inclusive para urls temporárias exclusivas para um usuário logado.

    Para iniciar nosso artigo, crie um projeto > C# > ASP.NET Web Application (WebRewrite) e adicione um novo arquivo: Projeto > Add > New Item > Class com o nome de ProfessionalComputing.goUrl.cs.

    O objetivo desse arquivo é codificar a classe goUrl que implementa a interface IHttpModule para interceptar todas as requisições que chegarem a aplicação e repassar para uma classe personalizada com objetivo de fazer o reWrite internamente caso necessário. Para essa classe daremos o nome de VerificaUrl. Nesse momento inicie a codificação da classe goUrl conforme listagem 1.

    ProfessionalComputing.goUrl.cs

    using System;

    using System.Data;

    using System.Configuration;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

    namespace ProfessionalComputing

    {

    public class goUrl:IHttpModule

    {

    public virtual void Init(HttpApplication app)

    {

    app.BeginRequest += new EventHandler(this.Rewrite_BeginRequest);

    }

    public void Rewrite_BeginRequest(object s, EventArgs e)

    {

    try

    {

    ProfessionalComputing.Util.VerificaUrl.CheckUrl(((HttpApplication)s));

    }

    catch (Exception exception1)

    {//

    throw new Exception(“Falha tratando url”);

    }

    }

    #region IHttpModule Members

    public virtual void Dispose()

    {

    }

    #endregion

    }

    }

    Listagem 01 – Implementando classe goUrl baseada no IHttpModule

    Agora que você acabou de construir a classe goUrl o funcionamento dela será muito simples. Ela vai interceptar as requisições de urls em nossa aplicação e para cada requisição que chegar vai executar nossa segunda classe chamada VerificaUrl que contém o método CheckUrl. Responsável pela reescrita da url. Nesse momento adicione um novo arquivo tipo classe e coloque o nome ProfessionalComputing.Util.VerificaUrl.cs codificando conforme a listagem 02.

    
    ProfessionalComputing.Util.VerificaUrl.csx
    
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    namespace ProfessionalComputing.Util
    {
    public class VerificaUrl
    {
    public static void CheckUrl(HttpApplication app)
    
    {
    string origem = app.Request.Path.ToString().ToLower();
    string urlsite = app.Request.ApplicationPath;
    if (origem.IndexOf("produto") > -1)
    {
    string[] parametros = origem.Split('/');
    string codigo = parametros[2]; // você pode obtem na string origem
    app.Context.RewritePath(urlsite + "_Produto.aspx?Codigo=" + codigo);
    
    }
    }
    }
    }
    

    Listagem 02 – Implementando a classe VerificaUrl.

    Conforme você pode observar na listagem 02 nesse simples exemplo o processo é muito simples de ser implementado. Bastar obter a url de origem, verificar se você vai tratar a mesma e caso positivo fazer o ReWritePath() para o novo caminho.

    Após implementar as classes, o próximo passo é modificar o web.config para que possamos adicionar referência a mesma conforme listagem 03, insira o código dentro do bloco <system.web>.

    System.Web

    <httpModules>

    <add type=”ProfessionalComputing.goUrl,WebRewrite” name=”goUrl” />

    </httpModules>

    Listagem 03 – Alterando web.config para suportar novo httpmodules.

    Na listagem 03 estamos adicionando referência a classe goUrl e ao assembly que ela se encontra (bin\WebRewrite.dll). É o nome da aplicação web que chamamos de WebRewrite.

    Com essa implementação basta executar sua aplicação e digitar a url desejada, conforme esse exercício: se digitar a url: http://localhost:1759/produto/10 vai carregar internamente a url: http://localhost:1759/_Produto.aspx?Codigo=10 conforme figura 01. Para o usuário final ou site de busca o acesso é transparente.

  • Uma solução simples para pequenas redes locais

    Linux e Windows trabalhando juntos para solucionar problemas de pequenos laboratórios.

    Com certeza ninguém quer subutilizar ou desperdiçar recursos adquiridos, além do mais quando esses recursos são de alto investimento como os de tecnologia.

    A própria tecnologia que muitas vezes é desperdiçada, também oferece mecanismos de controle e fiscalização que evitam esse desperdício.

    Um exemplo prático desse mecanismo seria a integração de serviços através de pelo menos dois servidores: um servidor Linux de qualquer distribuição e outro servidor Windows Server 2000 ou 2003, este último recomendado por possuir mais recursos.

    Neste cenário o servidor Linux funciona como um firewall, um proxy, além de fazer o serviço de NAT. Já o servidor Windows faz o controle e a configuração do ambiente das máquinas Windows clientes e a distribuição de configuração de IPs para as máquinas clientes através do serviço de DHCP.

    Configurando o Servidor Linux

    Para aplicar as configurações abaixo citadas, considera-se que o leitor já tenha uma máquina com uma distribuição do Linux qualquer instalada, juntamente com os pacotes necessários para o funcionamento dos seguintes serviços named , squid e iptables , além da instalação física das duas placas de redes.

    A configuração dos endereços IP s (Internet Protocol) em duas placas de rede torna-se necessária, pois um endereço de rede fará a ligação com a rede interna e o outro a ligação com a rede externa, como por exemplo, a Internet. (Um exemplo de configuração de placas de rede está no apêndice 1).

    O serviço de DNS é necessário para o correto funcionamento da Internet dentro da empresa. Esse serviço deve ser configurado tanto no servidor Linux como no servidor Windows. No o Linux deve-se atentar para que o serviço escolhido seja compatível com o BIND 8 , pois o Active Directory do Windows faz essa exigência. (Um exemplo de configuração do serviço de DNS do Linux está no apêndice 2)

    O Linux fornece as ferramentas de filtragem de tráfego necessárias para se criar um firewall simples, combinando as capacidades de roteamento do Linux com os recursos de filtragem do iptables pode-se criar um roteador de filtragem. O Linux tem suporte ao recurso de NAT o que possibilita que todo o tráfego da rede internet em direção a Internet possa ser roteado através do servidor Linux, utilizando apenas um endereço IP válido para todo acesso de internet da empresa .(Um exemplo de configuração do serviço de DNS do Linux está no apêndice 3)

    Originalmente o serviço de proxy tem como papel principal a otimização do desempenho do link de Internet, já que esse serviço pode ser configurado para funcionar como um cache das páginas de Internet acessadas, necessitando assim que o servidor de Internet busque apenas uma página, apenas uma vez e nas subseqentes requisições da mesma página, o descarregamento no navegador seria feito através do servidor de proxy utilizando a rede local e não o link de Internet, otimizando assim o tempo de acesso a páginas frequentemente acessadas.

    Mas o servidor de proxy Squid além da função de servidor de cache pode funcionar também como um filtro de IPs, permitindo ou não acessos a páginas da web, possibilitando assim uma auditoria de acessos, já que o proxy tem capacidade de armazenar em log todas as conexões feitas através do mesmo. (Um exemplo de configuração do squid.conf está no apêndice 4)

    Configurando o Windows Server

    O servidor Windows permite que uma série de configurações de ambiente de trabalho dos clientes seja feita de maneira centralizada, definindo desde o papel de parede da estação de trabalho até aos softwares que o usuário tem ou não acesso. Além disso, neste cenário que está sendo montado o servidor Windows pode atuar como servidor de DHCP garantindo automaticamente dessa forma que todas as estações tenham a configuração de servidores DNS e default gateway corretamente configurados.

    A opção pelo Windows 2003 como controlador de domínio se dá pelo fato de que hoje ainda temos em maioria, máquinas desktop (máquina do usuário) utilizando o Windows com Sistema Operacional, e por isso sua integração com o servidor Windows Server é nativa, possibilitando com isso o uso de várias ferramentas de administração criadas pela Microsoft e que hoje ajudam o administrador de redes nas questões de centralização, padronização e segurança.

    Um domínio representa uma partição lógica de um sistema de serviço de diretórios, em nosso caso o Active Directory da Microsoft. Nesse serviço existe um banco de dados de todos os objetos usados em um ambiente de rede, tais como usuários, computadores, impressoras, pastas compartilhadas, etc.

    Para configurar o Windows Server como um controlador de domínio leia o apêndice 5.

    Um domínio é representado por um nome DNS. Um serviço de DNS é um sistema de gerenciamento de nomes hierárquico e distribuído operando segundo duas definições:

    • Examinar e atualizar seu banco de dados.
    • Resolver nomes de servidores em endereços de rede (IPs).

    O servidor DNS traduz nomes para os endereços IP e endereços IP para nomes respectivos, e permitindo a localização de hosts em um domínio determinado.

    Sua implementação completa é no portal de treinamentos da Microsoft no Brasil, o TechNetBrasil.

    Por último é aconselhável se implementar um servidor de DHCP (Dynamic Host Configuration Protocol) que é um serviço que oferece de maneira dinâmica a configuração TCP/IP dos clientes de rede, configurando endereços IP de clientes, o nosso gateway linux e os servidores DNS criados.

    O DHCP oferece três tipos de alocação de endereços IP:

    • Alocação manual – Onde existe uma tabela de associação entre o Endereço MAC do cliente (que será comparado através do pacote broadcast recebido) e o endereço IP (e restantes dados) a fornecer. Esta associação é feita manualmente pelo administrador de rede; por conseguinte, apenas os clientes cujo MAC consta nesta lista poderão receber configurações desse servidor;
    • Alocação automática – Onde o cliente obtém um endereço de um espaço de endereços possíveis, especificado pelo administrador. Geralmente não existe vínculo entre os vários MAC’s habilitados a esse espaço de endereços;
    • Alocação dinâmica – O único método que dispõe a re-utilização dinâmica dos endereços. O administrador disponibiliza um espaço de endereços possíveis, e cada cliente terá o software TCP/IP da sua interface de rede configurados para requisitar um endereço por DHCP assim que a máquina arranque. A alocação utiliza um mecanismo de aluguel do endereço, caracterizado por um tempo de vida. Após a máquina se desligar, o tempo de vida naturalmente irá expirar, e da próxima vez que o cliente se ligue, o endereço provavelmente será outro.

    O Cliente envia pacote broadcast para a rede pedindo um endereço IP, o servidor DHCP captura este pacote e respondendo ao cliente com um pacote contendo o endereço IP e outros parâmetros de configuração, com por exemplo , máscara e quem é o DNS, etc… O DHCP usa o conceito de aluguel.O endereço IP é oferecido a um cliente é válido durante um certo período de tempo. Chamamos esse período de tempo de concessão. O tempo de concessão é um valor configurável.

    Apêndice 1 – Configurando as placas de rede no Linux

    O servidor linux atua neste cenário como responsável pelo acesso à Internet de todos as estações de trabalho. Após configurada fisicamente, a interface precisa receber um endereço IP para ser identificada na rede e se comunicar com outros computadores, além de outros parâmetros como o endereço de broadcast e a máscara de rede. Nossa rede local é identificada por 192.168.1.0 com máscara 255.255.255.0. Nosso endereço de acesso à Internet é 200.222.70.17 com máscara 255.255.255.240. Todas as estações farão o acesso à Internet através desse endereço.

    O comando usado para fazer isso é o ifconfig (interface configure).

    Para configurar a primeira interface de rede Ethernet (eth0) com o endereço 192.168.1.1, máscara de rede 255.255.255.0, devemos usar o comando:

    ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up

    O endereço de broadcast é calculado automaticamente usando a máscara adicionada como parâmetro.

    Para configurar a segunda interface de rede Ethernet (eth1) com o endereço 200.222.70.18, máscara de rede 255.255.255.240, devemos usar o comando:

    ifconfig eth1 200.222.70.18 netmask 255.255.255.240 up

    O endereço de broadcast é calculado automaticamente usando a máscara adicionada como parâmetro.

    Agora basta adicionar o endereço de nosso gateway na tabela de roteamento do servidor linux, para isso usa-se o comando route.

    route add default gw 200.222.70.17

    DICA – Você pode criar um script com essas configurações, ou escreve-las no arquivo rc.local para que o linux as configure automaticamente sempre que for iniciado.Existem outras maneiras de configurar uma placa de rede, mas os caminhos e arquivos de configuração variam conforme a distribuição, por isso optei por um tipo de configuração aceito por todas as distribuições linux.

    Apêndice 2 – Configurando o Linux o serviço de DNS do linux

    Existem alguns arquivos que devem ser configurados para o correto funcionamento do serviço de DNS dentro do linux. O etc/resolv.conf é o arquivo de configuração principal do código do resolvedor de nomes. Seu formato é um arquivo texto simples com um parâmetro por linha e o endereço de servidores DNS externos são especificados nele. Existem três palavras chaves normalmente usadas que são:

    domain

    Especifica o nome do domínio local.

    search

    Especifica uma lista de nomes de domínio alternativos ao procurar por um computador, separados por espaços. A linha search pode conter no máximo 6 domínios ou 256 caracteres.

    nameserver

    Especifica o endereço IP de um servidor de nomes de domínio para resolução de nomes. Pode ser usado várias vezes.

    Exemplo:

    domain dominio.com.br

    search dominio.com.br dominio.com

    nameserver 200.222.70.18

    Para o funcionamento da Internet, deve-se configurar um servidor de nomes somente para cache, o que possibilita ao Linux encontrar as respostas às pesquisas de nomes e endereços, guardando as respostas para a próxima em que sejam necessárias. Inicialmente é necessário apenas ter-se um arquivo /etc/named.conf que é gerado após a instalação do BIND. Esse arquivo é lido quando o servidor de nomes for inicializado.

    Um exemplo de um arquivo named.conf:
    // generated by named-bootconf.pl
    // secret must be the same as in /etc/rndc.conf
    
    key "key" {
    algorithm hmac-md5;
    secret
    "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
    };
    
    controls {
    inet 127.0.0.1 allow { any; } keys { "key"; };
    
    };
    options {
    directory "/var/named";
    pid-file "/var/run/named/named.pid"; // Put pid file in working dir
    
    // query-source address * port 53;
    
    };
    
    // a caching only nameserver config
    // 
    
    zone "." {
    type hint;
    file "named.ca";
    };
    
    zone "0.0.127.in-addr.arpa" {
    type master;
    file "named.local";
    };

    Apêndice 3 – Configurando as regras de firewall do Linux

    Para uma correta configuração do firewall deve-se ter em mente alguns conceitos principais como as três regras de filtragem em cada categoria de tráfico, que são elas INPUT (tráfego entrante é testado antes de ser ou não aceito) OUTPUT (tráfego de saída é testado antes de ser enviado) e FORWARD (tráfego que está sendo encaminhado pelo sistema Linux é testado). Essas regras são compostas de um filtro contra o qual os pacotes são comparados e uma ação configurada é tomada. Essa ação pode ser padrão ou uma regra definida pelo usuário que basicamente podem ser aceitar ou rejeitar o pacote.

    Regras de firewall com iptables
    ! /bin/sh
    
     Por João Cláudio - joao.claudio25globo.com
    
     Script básico para configuração de firewalls:
    
    
    
    Limpando as regras
    
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    
     Zerando todas as regras
    
    iptables -F
    
     Zerando (Flush) no NAT
    iptables -t nat -F
    
     Zerando (Flush) as regras personalizadas
    
    iptables -X 
    
    Iniciando regras do firewall
    Rejeitando qualquer tráfego entrante e encaminhado pelo Linux
    
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    
    Aceitando qualquer tráfego de saída
    
    iptables -P OUTPUT ACCEPT
    
    Criando variáveis para as placas de rede
    
    NET=192.168.1.1
    NT2=200.222.70.43
    
    Abrindo portas para conexões internas
    
    IPT -A OUTPUT -p tcp -s NET -d 0/0 --destination-port 1024:65535 -j ACCEPT
    IPT -A OUTPUT -p tcp -s NET -d 0/0 --destination-port 1024:65535 -j ACCEPT
    
    Virando os serviços FTP, SMTP, POP, DNS, HTTP, HTTPS, SQUID
    
    iptables -A INPUT -p tcp -s 0/0 -d NET --destination-port 20 -j ACCEPT
    iptables -A INPUT -p tcp -s 0/0 -d NET --destination-port 21 -j ACCEPT
    iptables -A INPUT -p tcp -s 0/0 -d NET --destination-port 25 -j ACCEPT
    iptables -A INPUT -p tcp -s 0/0 -d NET --destination-port 53 -j ACCEPT
    iptables -A INPUT -p tcp -s 0/0 -d NET --destination-port 53 -j ACCEPT
    iptables -A INPUT -p tcp -s 0/0 -d NET --destination-port 110 -j ACCEPT
    iptables -A INPUT -p tcp -s 0/0 -d NET --destination-port 443 -j ACCEPT
    iptables -A INPUT -p tcp -s 0/0 -d NET --destination-port 3128 -j ACCEPT
    
    Mascarando endereços e definindo gateway
    
    /sbin/modprobe iptable_nat
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -A FORWARD -j ACCEPT
    
    Definindo proxy transparente
    
    iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

    Dicas

    Através do firewall podemos criar regras para bloquear acesso a serviços com o MSN, Yahoo Message, ICQ, orkut e outros ou de fechar ainda mais o firewall por medida de segurança. Isso vai depender do objetivo pelo qual se está configurando as regras de firewall.

    Exemplos:
    Bloqueando orkut
    IPT -A INPUT -d www.orkut.com -p tcp --dport 443 -j DROP
    IPT -A FORWARD -d www.orkut.com -p tcp --dport 443 -j DROP
    IPT -A INPUT -d orkut.com -p tcp --dport 443 -j DROP
    IPT -A FORWARD -d orkut.com -p tcp --dport 443 -j DROP
    
    Bloqueando o kproxy
    
    IPT -A INPUT -d www.kproxy.com -j DROP
    IPT -A FORWARD -d www.kproxy.com -j DROP
    IPT -A INPUT -d proxy.com -p tcp -j DROP
    IPT -A FORWARD -d proxy.com -p tcp -j DROP
    
    Fechando conexões ICMP
    
    IPT -A INPUT -p icmp -s 0/0 -d NET --icmp-type echo-request -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NET --icmp-type host-unreachable -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NET --icmp-type redirect -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NET --icmp-type timestamp-request -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NET --icmp-type timestamp-reply -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NET --icmp-type address-mask-request -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NET --icmp-type address-mask-reply -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NET --icmp-type source-quench -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type destination-unreachable -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type echo-request -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type host-unreachable -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type redirect -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type timestamp-request -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type timestamp-reply -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type address-mask-request -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type address-mask-reply -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type source-quench -j DROP
    IPT -A INPUT -p icmp -s 0/0 -d NT2 --icmp-type destination-unreachable -j DROP
    
    [c]Liberando ICMP para fora
    [/c]
    IPT -A OUTPUT -p icmp -s NET -d 0/0 -j ACCEPT
    
    Bloqueando Multicasting
    
    IPT -A INPUT -s 224.0.0.0/8 -d 0/0 -j DROP
    IPT -A INPUT -s 0/0 -d 224.0.0.0/8 -j DROP
    IPT -A OUTPUT -s 224.0.0.0/8 -d 0/0 -j DROP
    IPT -A OUTPUT -s 0/0 -d 224.0.0.0/8 -j DROP
    
    Bloqueando pacotes com Stuffed Routing
    
    IPT -A INPUT -s 255.255.255.255 -j DROP
    IPT -A INPUT -s 0.0.0.0 -j DROP
    IPT -A INPUT -s 255.255.255.255 -j DROP
    IPT -A INPUT -s 0.0.0.0 -j DROP
    
    Liberando Caixa Economica
    for ip in CAIXA
    do
    IPT -t nat -A PREROUTING -p tcp -d ip -j ACCEPT
    IPT -A FORWARD -p tcp -d ip -j ACCEPT
    done

    Apêndice 4 – Configurando o squid

    O arquivo squid.conf, normalmente localizado em /etc/squid ou /usr/local/squid/etc é responsável por todas as configurações do proxy. É dentro deste arquivo que criamos as listas de acessos e configuramos o serviço.

    http_port 3128
    acl QUERY urlpath_regex cgi-bin \?
    no_cache deny QUERY
    
    acl all src 0.0.0.0/0.0.0.0
    acl manager proto cache_object
    acl localhost src 127.0.0.1/255.255.255.255
    acl SSL_ports port 443 563
    acl Safe_ports port 80  http
    acl Safe_ports port 21  ftp
    acl Safe_ports port 443 563  https, snews
    acl Safe_ports port 70  gopher
    acl Safe_ports port 210  wais
    acl Safe_ports port 1025-65535  unregistered ports
    acl Safe_ports port 280  http-mgmt
    acl Safe_ports port 488  gss-http
    acl Safe_ports port 591  filemaker
    acl Safe_ports port 777  multiling http
    acl CONNECT method CONNECT
    
    Bloqueia ou libera um placa de rede
    
    acl placa arp 00:13:D3:1C:45:68
    
    Arquivo com palavrars liberadas (exemplo computa)
    
    acl noporn dstdomain "/etc/squid/noporn"
    
    Arquivo com extensões bloqueadas
    
    acl extentions url_regex "/etc/squid/extentions"
    
    Arquivo com URLS bloqueadas (exemplo computa)
    
    acl urls url_regex "/etc/squid/urls"
    
    Arquivo com palavrars liberadas (exemplo puta)
    
    acl porn dstdom_regex "/etc/squid/porn"
    
    Faz-se mister a criação de um arquivo de palavras não bloqueadas, pq no caso de você por exemplo bloquear a palavra puta, as palavras computação e computador também ficariam bloquadas.
    
    http_access allow manager localhost
    http_access deny manager
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    
    http_access allow all placa
    http_access allow all noporn
    http_access deny all extentions
    http_access deny all urls
    http_access deny all porn
    http_access allow all
    
    visible_hostname hostname_do_seu_servidor
    
    httpd_accel_host virtual
    httpd_accel_port 80
    httpd_accel_with_proxy on
    httpd_accel_uses_host_header on

    Você ainda pode configurar o squid para uma integração com o Active Directory

    Para isso siga os passos deste artigo:

    Escrito pelo colega Leonel Cesar Batista, já testado e ao implementei em um Windows 2003 e vi que funciona.

    Apêndice 5 – Configurando o controlador de domínio

    Para configurar o Windows 2003 como controlador de domínio, devemos iniciar o assistente de instalação DCPROMO.EXE através da ferramenta “executar” do windows.

    O assistente será iniciado através de uma tela de boas-vindas “Welcome”, clique em Next. Na tela de compatibilidade com outros sistemas clique em Next. Tenha em mente que o DC (controladores de domínio) executando WS (Windows Server) 2003 requerem uma comunicação segura e por isso seus clientes devem oferecer suporte a assinaturas SMB. Clientes Windows 95 necessitam do Active Directory Client para dar suporte a esse tipo de assinatura, assim como cliente Windows NT 4 precisam do Service Pack 2.

    Na próxima tela teremos as opções de controladores de domínio possíveis, como estamos criando o domínio agora devemos escolher a opção Criar um novo domínio em uma nova floresta. Para cria-lo devemos entrar com o nome DNS para o novo domínio, em nosso caso meudominio.com.br, e clique em Next.

    Em Domain Netbios, aceite o nome sugerido (MEUDOMINIO) e clique em Next.

    Na tela Database and Log Folders, aceite o padrão e clique em Next.

    Aceite o caminho para a pasta SYSVOL e clique em Next.

    Na tela Permissions, selecione o nível de compatilibidade com aplicações. Aqui temos uma questão de segurança. O nível ideal é o Compatível apenas com Windows 2000 e Windows 2003, mas se você tiver executando computadores com Windows NT 4, mantenha a opção padrão selecionada. Clique em Next. Na tela Directory Services restores Mode Administrator Password defina a senha para o modo de restauração do AD e clique em Next.

    Um resumo então é mostrado clique em Next, aguarde e em seguida em Finish.

    Depois de reiniciada a máquina você terá um controlador de domínio de sua rede funcionando. Agora você pode criar usuários, pastas compartilhadas e políticas de grupos de forma centralizada. Basta agora que você vá em cada cliente e que configure o mesmo para fazer logon no domínio que você criou.

    Apêndice 6 – Configurando o serviço de DHCP

    Para configurar esse serviço ,clique em Start, Administrative Tools e em “Manage your Server”. Logo depois clique em “Add or Remove a Role”.

    Depois disso, o Configure Your server Wizard é iniciado, clique em Next. Esse componente faz uma série de verificações sobre o que está ou não instalado no servidor. E somente depois desse processo é que o mesmo habilita a opção “Configuration Options” que nos permite configurar o servidor. Clique em “Custom configurations” e em seguida em “Next”.

    Depois em “Server Role”, selecione a função de “DHCP Server” e clique em “Next”. Ele exibe um resumo, clique novamente em “Next”.

    O Windows 2003 começa a instalar os componentes e somente depois habilita a tela para a configuração do DHCP.

    Na primeira tela denominada “New Scope Wizard” é uma simples tela de apresentação, clique em Next.

    A tela “Scope Name”, possibilita definirmos um nome a nossa configuração de escopo (o intervalo de IPs que será distribuído). Escolha um nome para o escopo e clique em Next.

    Em “IP Address Range”, temos que informar o intervalo/quantidade de endereços IPs que iremos distribuir. Para isso, devemos colocar o primeiro endereço a ser atribuído e o último da faixa de endereços que desejamos disponibilizar. No nosso caso, colocaremos como endereço inicial 192.168.1.1 e como final 192.168.1.254 . (Isso nos dará 254 endereços IPs disponíveis para alocação nos nossos computadores clientes, ou seja a faixa que eu configurei poderia atender a uma rede que tem até 254 computadores.) E depois clicamos em “Next”:

    Depois em “Add Exclusions” podemos informar os endereços Ips que serão excluidos da faixa que informamos na etapa anterior. Em nosso caso, iremos exluir os dez primeiros endereços para que sejam utilizados pelos nossos atuais e futuros servidores. Em Start Ip Address digite 192.168.1.1 e End IP Address digite 192.168.1.10 Então clique em “Next”.

    Em “Lease Duration” podemos informar quanto tempo durará o “Lease” (aluguel) dos endereços IPs alocados. Matenha a opção padrão e clique em Next.

    Agora faremos uma série de outras configurações opcionais.

    Selecione a opção “Yes, I want to configure these options now” e clique em “Next”:

    Em “Router (Default Gateway)”, digite o endereço do nosso roteador, que no nosso caso será 192.168.1.1 . Clique em “Next”:

    Depois em “Domain Name and DNS Servers” colocamos o nome de nosso domínio (meudominio.com.br), o nome de nosso primeiro servidor DNS (o nome do servidor windows), seu enreço IP, no caso 192.168.1.2, é clique em “Add”. Repita o processo para o DNS do linux e clique em “Next”.

    Em “WINS Servers” deixe em branco e clique em Next.

    E por último em “Activate Scope” escolha a opção “Yes, I want to activate this scope now”. E depois é só clicar em “Next”, e logo em seguida em Finish.

    Referências Bibliográficas

    HUNT, Craig. Linux Servidores de Rede. Rio de Janeiro: Ciência Moderna Ltda., 2004.

    RUEST, Nelson; RUEST, Danielle. Windows Server 2003. Rio de Janeiro: Ciência Moderna Ltda., 2003.

    Obrigado e até a próxima!

  • E-mail marketing em HTML

    Este artigo é quase uma continuação do artigo anterior, intitulado Boas Práticas de E-mail Marketing. Após sua publicação, recebi algumas dúvidas quanto ao que seria, exatamente, um e-mail marketing em HTML. Por isso, primeiro, vamos definir o que é um e-mail sem formatação e um e-mail em HTML.

    E-mail sem formatação é o tipo de e-mail a que estamos mais habituados: mensagens em texto puro que não requisita nenhuma informação do servidor (imagens, por exemplo) para ser elaborado. Você simplesmente escreve na tela de edição de mensagens e envia o e-mail. Ele chega para o destinatário também na forma de texto e sua aparência pode variar conforme a configuração da aplicação de e-mail de quem o recebeu.

    E-mail em HTML é aquele que apresenta elementos da linguagem de hipertexto, como links e imagens que são exibidas diretamente no corpo do e-mail, sem estar em anexo à mensagem. Podemos exemplificar com aquelas enxurradas de e-mail que recebemos com promoção de assinatura de revistas, oferta de livros, aparelhos eletrônicos etc. Você abre a mensagem e, no corpo, pode ver imagens e textos diagramados de uma forma diferenciada, como se fosse um planfleto ou mesmo uma página da Web. É possível, ainda, utilizar CSS para formatar a aparência dos elementos.

    Ao trabalhar com e-mail marketing, a grande maioria das empresas opta pelo e-mail em HTML, que confere maior liberdade de criação e a mensagem é, visualmente, mais atraente. É possível exibir logotipos, fotos de produtos, textos em fontes diferenciadas e distribuir os elementos da forma desejada na tela. Tudo isso sendo exibido diretamente no corpo da mensagem, e não como um anexo. Arquivos anexos aumentam sensivelmente o tamanho do e-mail, além de poderem ser barrados por algumas aplicações de e-mail, mesmo que sejam apenas imagens. Ao inserir imagens em um e-mail HTML, não inserimos o arquivo da imagem propriamente dito, mas sim, a tag HTML de imagem <img>, que fará referência ao arquivo do servidor. Portanto, para que você possa desenvolver um e-mail marketing em HTML utilizando todos os recursos visuais possíveis, é necessário possuir acesso a um disco virtual ou servidor web (se você possui um site ou domínio), que armazenará os arquivos de imagens.

    Vamos ver, na prática, como construir um e-mail marketing em HTML. Como exemplo, vou criar um cartão que convide os usuários a visitarem o site do iMasters. Para isso, vou utilizar um software gráfico qualquer que me permita criar uma imagem. Utilizando o Adobe Illustrator (mas poderia ser também o Corel Draw, o Photoshop ou qualquer outro a que você esteja familiarizado), criei esta arte:

    Para que um e-mail marketing seja visualizado corretamente na aplicação de email do cliente, pode-se trabalhar com: (X)HTML, CSS, JPEG, GIF estático e GIF animado. As aplicações de e-mail não interpretam conteúdo dinâmico (asp, php), flash ou javascript. Sobre o formato de imagem PNG, houve uma grande melhora nas novas versões de navegadores e de clientes de e-mail, que passaram a suportá-lo. Algumas versões mais antigas não conseguem exibir este formato, portanto, se não qusier arriscar, fique com o JPEG e o GIF.

    Para que minha arte seja visualizada corretamente num e-mail, a transformei em imagem. Meu software permite que eu salve uma cópia otimizada para a web, ou seja, com 72 DPI de resolução e cores RGB, com a possibilidade de definir sua qualidade. Utilizei o formato GIF que, por possuir “apenas” 256 cores, mantém o tamanho do arquivo reduzido. E para que todos aqueles que receberem meu e-mail possam visualizar a imagem, preciso enviá-la para a Internet, armazenando o arquivo em um disco virtual ou dentro do servidor onde meu site está hospedado. É o mesmo processo de enviar os arquivos de um site para a web, de modo a disponibilizá-lo online. Neste caso, vou utilizar o porta-arquivos do Yahoo, que é gratuito e basta ter uma conta no Yahoo para usar. Seguindo as instruções do porta-arquivos, fiz o upload de minha imagem, cujo endereço depois de enviada ao disco virtual é http://us.f13.yahoofs.com/bc/45b0d469_114f2/bc/convite.gif?bfnpx3FBIy93hbLi. Se você clicar neste link poderá visualizar minha imagem. Para saber o endereço de sua imagem na Internet, basta clicar com o botão direito sobre o link do nome do arquivo e clicar na opção Copiar atalho ou Copy Link Location, isso, após enviá-la para o disco virtual, claro. Guarde este endereço.

    Agora, vamos começar a construção do e-mail. Vou utilizar o Outlook Express, que me permite inserir código HTML na edição de mensagens. O Microsoft Outlook não oferece esta opção. Para enviar uma mensagem de e-mail a partir do Outlook Express, é preciso que você tenha uma conta de e-mail configurada com seus respectivos POP3 e SMTP (endereços do servidor por onde as informações irão trafegar e chegar até os destinatários). Se você tem uma conta no Gmail, pode configurar seu programa de e-mail para receber e enviar mensagens. Para ver as instruções, acesse sua conta do Gmail e, no canto superior direito da tela, clique em Configurações e na aba Encaminhamento e POP. Nesta aba, há um link de instruções no item 3.

    Outlook configurado, vamos compor a mensagem. Clique no botão Criar E-mail. Nesta tela de composição de mensagens que foi criada, veja que, na parte inferior da janela, existem 3 abas: Editar, Origem e Visualizar. Se você não vê nenhuma aba, clique em Exibir > Editar código-fonte para que elas apareçam. Para inserir nosso código HTML, vamos usar a aba Origem. Note que, nesta aba, já existe a estrutura básica de um documento HTML:

    Vou acrescentar códigos para inserir a imagem de meu convite, deixá-lo centralizado na tela e com um link para o site do iMasters. O código abaixo já está com a tag chamando a imagem do disco virtual e com o link. Se quiser, copie este código e cole-o na aba Editar do Outlook Express, substituindo aquela estrutura básica exibida acima.

    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML><HEAD>
    <META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
    <META content="MSHTML 6.00.2900.3020" name=GENERATOR>
    <STYLE></STYLE>
    </HEAD>
    <BODY bgColor=#ffffff>
    
    <DIV style="text-align:center"> 
    
    <a href="http://www.imasters.com.br" title="Este link abre o site do iMasters em uma janela de seu navegador">
    <img src="http://us.f13.yahoofs.com/bc/45b0d469_114f2/bc/convite.gif?bfflPsFBmgNmhbLi" alt="Visite o iMasters!">
    </a>
    
    </DIV>
    
    </BODY></HTML>
    

    Depois, ao clicar na aba Editar, podemos ver a imagem exibida diretamente no corpo da mensagem, da forma como o usuário visualizará em seu e-mail. Este procedimento de inserir uma imagem através de código HTML no e-mail faz com que o tamanho da mensagem seja reduzido. Note que meu arquivo GIF original tem 30,1 Kb, mas ao inserir apenas a tag HTML chamando a imagem que está no disco virtual, minha mensagem fica com apenas 2 Kb, porque é composta apenas de código. Assim, você pode enviar a mensagem para diversos destinatários sem sobrecarregar o servidor, já que a imagem será carregada no momento em que o usuário abrir. E, assim, eu visualizo a imagem, que está sendo “baixada” lá do disco virtual:

    Se você não tem familiaridade com a linguagem HTML, pode desenvolver sua mensagem em um editor como o Microsoft Frontpage ou o Dreamweaver. Eles têm interface amigável e, ao longo do desenvolvimento, geram o código do que foi criado através de simples cliques em botões. Selecione o código, copie e cole na aba Origem do Outlook Express.

    E está pronto nosso e-mail em HTML! Basta inserir os destinatários na mensagem e enviar. Este foi um exemplo simples de e-mail formatado em HTML. Você pode construir layouts mais complexos e que utilizem outros recursos do HTML e do CSS. Apenas lembre-se das recomendações para o desenvolvimento de um bom e-mail marketing. Se você pretende enviar a mensagem para muitas pessoas, considere trabalhar com ferramentas próprias para e-mail marketing – que não o Outlook -, pois elas trazem também recursos para medir o impacto de sua campanha nos usuários: quantos abriram a mensagem, quantos clicaram, quais e-mails falharam etc.

    Recapitulando, para o desenvolvimento do e-mail marketing, temos:

    • um arquivo da arte original (neste caso, em Illustraor);
    • um arquivo GIF da arte (gerado a partir do Illustrator mesmo);
    • o envio da imagem para a Internet (disco virtual do Yahoo);
    • a construção do código HTML utilizando o endereço da imagem na Web;
    • inserção do código HTML no aplicativo de e-mail;
    • envio da mensagem;

    Espero que tenha ficado claro, mas, quaisquer dúvidas, estou à disposição!

    Boa sorte e sucesso!

  • Criando mensagens para os usuários

    É sempre assim. Basta a Microsoft fazer a revisão do layout dos seus produtos e todos os clientes começam a pedir nossos sistemas neste mesmo perfil achando que montar o layout de uma aplicação pode ser feito rapidamente.

    Algumas novas funcionalidades são muito interessantes, como aquele pequeno aviso de novo e-mail do Outlook. Discreto e ao mesmo tempo informativo ele pode ser muito útil em vários momentos do nosso sistema. Para termos um processo semelhante podemos usar uma função presente na API do Windows chamada SetLayeredWindowAttributes que permite alterar a transparência de uma form, dando o efeito aparecer/desaparecer semelhante ao do Outlook.

    Observe o fonte para criarmos este efeito:

    alerta=CREATEOBJECT("alerta")
    alerta.mensagem("O backup foi realizado com sucesso.")
    
    DEFINE CLASS alerta AS form
    	Height = 120
    	Width = 375
    	ShowWindow = 2
    	BorderStyle = 0
    	Caption = ""
    	TitleBar = 0
    	AlwaysOnTop = .T.
    	BackColor = RGB(14,173,241)
    	Name = "alerta"
    
    	ADD OBJECT edtmensagem AS editbox WITH ;
    		FontSize = 20, ;
    		Alignment = 2, ;
    		BackStyle = 0, ;
    		BorderStyle = 0, ;
    		Height = 103, ;
    		Left = 2, ;
    		ScrollBars = 0, ;
    		Top = 3, ;
    		Width = 370, ;
    		IntegralHeight = .T., ;
    		Name = "edtmensagem"
    
    
    	PROCEDURE visualizar
    		PARAMETERS m.lnAção as Integer 
    		LOCAL m.lnInicio as Integer, m.lnFim as Integer, m.lnStep as Integer 
    		m.lnInicio=IIF(m.lnAção=1,10,255)
    		m.lnFim=IIF(m.lnAção=1,255,0)
    		m.lnStep=IIF(m.lnAção=1,10,-10)
    		FOR m.loop1=m.lnInicio TO m.lnFim STEP m.lnStep
    			INKEY(.01,"H")
    			_Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, m.loop1, 2)
    		ENDFOR
    	ENDPROC
    
    
    	PROCEDURE mensagem
    		PARAMETERS m.lcmensagem
    		thisform.edtmensagem.Value=m.lcmensagem
    		thisform.Visible=.t.
    		_Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, 10, 2)
    		thisform.visualizar(1)
    		INKEY(2)
    		thisform.visualizar(0)
    		_Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, 0, 2)
    		thisform.Visible=.f.
    	ENDPROC
    
    
    	PROCEDURE Init
    		zoom window alerta max
    		m.lnHeight=this.Height
    		m.lnWitdh=this.Width 
    		zoom window alerta normal
    		this.left=m.lnWitdh-375-10
    		this.top=m.lnHeight-120+20
    		DECLARE SetWindowLong In Win32Api AS _Sol_SetWindowLong Integer, Integer, Integer
    		DECLARE SetLayeredWindowAttributes In Win32Api AS _Sol_SetLayeredWindowAttributes Integer, String, Integer, Integer
    		_Sol_SetWindowLong(THISFORM.hWnd, -20, 0x00080000)
    		_Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, 0, 2)
    	ENDPROC
    
    
    ENDDEFINE

    Note que o mais importante pode ser encontrado no procedimento visualizar que contém o código necessário para o efeito proposto.

    A forma com que você desejar programar este processo pode ser das mais variadas, mas uma das melhores é criar um pequeno executável que passe como parâmetro a informação que deseja informar ao usuário, pois assim o trabalho normal do software não será interrompido, caso contrário, pela falta de execução simultânea do VFP, o usuário não poderia utilizar nada até a mensagem ser apagada.

    Bom divertimento.

  • Capturando a saída de uma aplicação Console

    Olá pessoal, tudo bem? Como capturar o resultado do processamento de uma aplicação console em sua aplicação Windows no VB 2005 Express?

    Boa pergunta , garoto!

    Para poder realizar esta tarefa, você deve usar a propriedade StartInfo da classe Process para redirecionar a saída de uma aplicação console para o seu código. A saída redirecionada irá aparecer como sendo um objeto StreamReader padrão , dai em diante você realizar o tratamento padrão.

    Um componente Process fornece acesso ao processo que esta sendo executado em um computador. Uma thread é a unidade básica na qual o sistema operacional aloca o tempo de processamento e pode executar qualquer parte de código de um processo, incluindo partes que estão sendo executadas por outra thread.

    O componente Process é uma ferramenta útil para iniciar, parar, controlar e monitorar aplicações, e, através dele você pode obter uma lista dos processos que estão rodando ou pode também iniciar um novo processo.

    Vamos mostrar isto na prática. Capturaremos a saída do processamento da execução do comando ipconfig.exe.

    O comando ipconfig mostra as configurações de rede da sua máquina local fornecendo informações como ip, mascara de rede , etc.

    Abra o Visual Basic 2005 Express e crie uma nova aplicação do tipo Windows Forms chamada saidaConsole.

    No formulário padrão form1.vb inclua os seguintes controles:

    • Um ListBox chamado lstSaidaDados
    • Um CheckBox chamado chkIncluirTudo e defina sua propriedade Text para : “Use “/Tudo” para obter todos os detalhes”
    • Um Button chamado btnAcionarProcesso. Defina sua propriedade Text para: Processar

    O leiaute final do formulário do projeto deverá ser igual ao da figura abaixo:

    Inclua o seguinte código no evento Click do botão de comando :

    Private Sub btnAcionarProcesso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAcionarProcesso.Click
    ' ----- Carrega a saida do comando ipconfig.exe para o controle ListBox.
    Dim ipConfig As Process
    Dim umaLinha As String
    Dim linhaPartes() As String
    
    ' ----- Remove qualquer item existente na listbox
    lstSaidaDados.Items.Clear()
    
    ' ----- Constroi e executa o comando
    ipConfig = New Process()
    ipConfig.StartInfo.FileName = "ipconfig.exe"
    
    'verifica se vai exibir todos os detalhes
    If (chkIncluirTudo.Checked = True) Then ipConfig.StartInfo.Arguments = "/All"
    
    'inicia o processo
    ipConfig.StartInfo.UseShellExecute = False
    ipConfig.StartInfo.RedirectStandardOutput = True
    ipConfig.StartInfo.CreateNoWindow = True
    ipConfig.Start()
    
    ' ----- Processa cada linha de entrada
    Do While Not ipConfig.StandardOutput.EndOfStream
       ' ----- Ignora linhas em branco.
         umaLinha = ipConfig.StandardOutput.ReadLine()
    
         If (Trim(umaLinha) = "") Then Continue Do
    
        ' ----- Cabeçalho não possui espaços em branco
         If (umaLinha = umaLinha.TrimStart) Or (InStr(umaLinha, ":") = 0) Then
             lstSaidaDados.Items.Add(umaLinha.Trim)
        Else
           ' ----- Uma linha de detalhe. O formato é:
           ' Titulo ... : Dados
           linhaPartes = umaLinha.Trim.Split(":"c)
           linhaPartes(0) = Replace(linhaPartes(0), ". ", "")
           linhaPartes(1) = linhaPartes(1).Trim
           lstSaidaDados.Items.Add(vbTab & linhaPartes(0) & ":" & linhaPartes(1))
        End If
    Loop
    
    ipConfig.WaitForExit()
    ipConfig.Dispose()
    
    End Sub

    Executando o projeto e marcando a opção para exibir todos os detalhes o resultado obtido pode ser visto na figura abaixo:

    Alguns programas de linha de comando, como dir.exe, não são realmente programas, mas comandos embutidos no processador Command. Para estes programas você vai precisar usar a instrução cmd.exe para o processo filename e passar o comando atual como um argumento com a opção /c.

    Exemplo:

    ipConfig.StartInfo.FileName = "cmd.exe"
    ipConfig.StartInfo.Arguments = "/c dir c:\temp"

    Nestes casos não podemos evitar que a janela de comando Dos apareça momentaneamente durante o processamento do programa cmd.exe.

    Faça download do projeto completo aqui.

    Até o próximo artigo!

  • Pare de Brigar com o Relógio – Parte 01

    Muitos leitores entraram em contato, via e-mail, pedindo que eu falasse um pouco mais sobre como gerenciar melhor o tempo, de tal forma que tenhamos mais tempo para atividades de lazer. É exatamente disso que trato nesta série de artigos: Como fazer do tempo um aliado e não um inimigo? Este é o primeiro de uma série de artigos com dicas sobre como gerenciar melhor o tempo.

    Algumas pessoas associam técnicas de gerenciamento de tempo a hábitos de pessoas extremamente metódicas, do tipo que têm hora marcada para tomar um cafezinho, hora marcada para tudo. Não é exatamente isso. Para utilizar o nosso tempo de uma maneira eficiente, basta um pouco de planejamento e organização. Nada que iniba a nossa criatividade ou nos torne profissionais sem iniciativa.

    Conforme veremos neste artigo, gerenciar melhor o nosso tempo exige apenas um pouco de disciplina, vontade de melhorar e metas bem definidas.

    Antes de tudo: metas bem definidas:

    Muitas vezes ouço a seguinte pergunta: “Porque profissionais com o mesmo nível de competência técnica não alcançam os mesmos resultados, ou o sucesso?” São muitos os motivos, desde a falta de habilidades em lidar com as emoções (a fundamental Inteligência Emocional), passando por questões muito pessoais. Mas um dos principais motivos é que alguns profissionais simplesmente não tem metas claras, bem definidas, quer seja na vida profissional quanto na vida pessoal. Simplesmente vão levando a vida e seja o que Deus quiser.

    Você poderá dizer: “Ah Júlio, esse negócio de plano, planejamento, metas é muito chato, não faz diferença nenhuma!”. Aí eu gosto de responder com algumas perguntas, digamos, bem “marotas”:

    • Você moraria em um prédio de 40 andares, o qual foi construído sem o projeto de engenheiros, sem plantas, sem planejamento das fundações e sem que tenham sido feitos cálculos estruturais?
    • Você voaria em um avião que foi construído sem um cuidadoso projeto e que não tenha sido exaustivamente testado?

    Essas são apenas algumas questões para salientar a importância de termos metas bem definidas. Se você não sabe onde quer chegar, pouco importa onde você está. Ou usando um velho ditado popular: “De que adianta correr se você está no caminho errado?” Eu complementaria com o seguinte: “E se você não tem um projeto de vida bem definido, com metas bem especificadas, como saber se você está no caminho certo??”. Pode parecer elementar, mas o fato é que muitas pessoas simplesmente correm, apressadas pela vida, sem saber se estão na direção correta, pelo simples fato de não saber com clareza aonde querem chegar.

    Um ponto que eu acho importante é que os seus objetivos/metas tem que estar por escrito. Só na sua cabeça não serve. Eu sugiro que você escreva as suas metas em uma folha de papel e releia de vez em quando. A seguir descrevo como eu faço com a minha lista de objetivos. É apenas uma sugestão, cada pessoa deve usar o método com o qual se sentir mais à vontade. Mas o fundamental é: A LISTA DE OBJETIVOS E METAS TEM QUE ESTAR POR ESCRITO:

    • Fiz uma lista dos meus objetivos de vida no curto, médio e longo prazo.
    • Em seguida comecei a priorizar as informações que eu leio, os meus estudos e todas as minhas ações.
    • Tudo o que não estiver alinhado com os meus objetivos, ou seja, o que não me ajudasse a alcançá-los eu simplesmente deixo de lado ou arquivo para referência futura. Não faz sentido eu utilizar o meu tempo com ações que não estão na direção do meu projeto de vida.
    • Ainda havendo mais coisas para estudar do que tempo disponível, ou mais trabalho para fazer do que o tempo disponível, eu estudo/trabalho primeiro no que está alinhado com os objetivos de curto prazo, em seguida, se houver tempo com os objetivos de médio prazo e assim por diante.
    • Trimestralmente eu faço uma revisão desta lista de objetivos e dos resultados alcançados. Com isso eu foco os meus estudos e o meu trabalho na ação, ou seja, naquilo que será aplicado na busca dos objetivos traçados. Por exemplo, não adiante eu estudar um assunto agora, se só vou utilizar daqui a 6 meses ou ou um ano.

    Nota: Para mim curto prazo é três meses, médio prazo até dois anos e longo prazo cinco anos.

    Metas definidas é hora de saber se você está utilizando bem o seu tempo?

    O primeiro passo é sabermos se estamos ou não utilizando bem o nosso tempo. A melhor maneira de descobrirmos é fazendo algumas perguntas, como as listadas a seguir:

    • Tenho a sensação de que nunca consigo terminar todas as tarefas planejadas no tempo previsto?
    • Fico alternando entre uma tarefa e outra, sem concluir nem uma nem outra?
    • Sou constantemente interrompido enquanto estou executando meu trabalho?
    • Gasto mais tempo do que deveria falando ao telefone ou lendo e-mails; ou nem sequer sei quanto tempo gasto com estas atividades?
    • Minha lista de tarefas parece interminável?
    • Não consigo classificar e priorizar tarefas?
    • Sempre deixo a conclusão de minhas tarefas para a última hora? (não vale a desculpa que é costume do brasileiro ou que você trabalha melhor sob pressão)
    • Interrompo seguidamente (digamos umas dez vezes por dia) minhas atividades para tomar um cafezinho? Pode ser sinal de ansiedade, causada pela sensação de não ter tempo para concluir tudo o que tem que ser feito.
    • Constantemente deixo de estar com a minha família ou de realizar alguma atividade de lazer para concluir tarefas relacionadas ao trabalho? Veja novamente o artigo: “Como construir uma carreira de sucesso”.

    Esta não é uma lista definitiva, mas se você respondeu sim para algumas (digamos três ou mais) destas perguntas, é provável que você não esteja utilizando o tempo de uma maneira adequada. Na seqüência, apresento algumas dicas que podem ajudar o amigo leitor.

    A seguir coloco uma lista que consta no excelente livro “O Mais Completo Guia Sobre Gerenciamento do Tempo”, Jeff Davidson, editora Futura., mais alguns comentários meus. Na lista temos fatos que são indicativos de que você está sem controle sobre a forma como utiliza o seu tempo:

    • Você sai de casa para o trabalho sempre apressado, com a sensação de estar atrasado, muitas vezes sem sequer tomar café?
    • Você lembra a última vez que teve um almoço agradável, calmo e sem pressa?
    • Você lembra a última vez que não se irritou com o motorista do carro a sua frente, porque ele estava andando muito devagar?
    • Você está fora de forma, não faz exercícios físicos a séculos e não consegue imaginar um horário na sua agenda para encaixar atividades físicas?
    • E se achou, durante a atividade física fica o tempo todo pensando que deveria estar fazendo alguma tarefa relacionada ao trabalho?
    • Você há muito tempo não sai com amigos para jantar, dançar e se divertir; ou quando sai sente-se culpado pelo tempo “que está perdendo”?

    Releia novamente a lista anterior, pare e reflita um pouco.

    Algumas dicas básicas para um melhor gerenciamento do tempo?

    A seguir coloco algumas recomendações básicas para que você possa gerenciar melhor o seu tempo. Nas próximas colunas, vou detalhar os itens apresentados nesse tópico.

    Em primeiro lugar, organize-se. Esta história de que “a minha mesa de trabalho está bagunçada, mas é assim mesmo, pois eu acho as coisas mais facilmente na minha bagunça do que em uma mesa toda arrumadinha”, não cola.

    Precisamos organizar o nosso local de trabalho de maneira adequada. Iniciando pela disposição dos móveis e pela organização da mesa de trabalho.Ai vão algumas dicar para melhorar o seu local de trabalho e poupar tempo:

    Organize suas gavetas e seus arquivos. Organize a papelada de maneira racional, de preferência dividida por assuntos, projetos, data ou por uma combinação destes critérios. Papéis relativos a assuntos já encerrados, caso necessário, devem ser arquivados e, caso contrário, jogados no lixo. Mantenha ao alcance da mão apenas os documentos relativos a tarefas das quais você esteja tratando.

    O acúmulo de papéis ou a falta de organização destes faz com que percamos um tempo precioso toda vez que precisamos localizar alguma coisa. Vamos lá. Pensou em fazer isso outra hora? Que nada. Mãos à obra. É hora de fazer a tão esperada organização na sua escrivaninha e nos seus arquivos.

    • Mantenha o material de escritório junto. Guarde lápis, canetas, colas, fita durex, régua, etc, sempre em um único local, de preferência ao alcance das mãos e jure de pés juntos que irá colocar o material de volta no lugar, após utilizá-lo. E, principalmente, cumpra o seu juramento.
    • Ao ler um documento, destaque as partes principais. Isto facilita na hora de uma leitura rápida, caso precise ler o documento novamente mais adiante. O mesmo vale para reportagens de interesse para o seu trabalho. Faça anotações sobre a matéria e arquive-as junto com uma cópia da reportagem. Essas anotações podem ser de grande valor (e poupar muito tempo) futuramente. Não vai dizer que você não arquiva reportagens que considera importantes ou relevantes?

    Conclusão:

    Nessa primeira coluna apenas levantamos a questão do gerenciamento do tempo, apresentamos a importância de ter metas bem definidas, vimos alguns sintomas que são indicativos de que você está perdendo o controle do seu tempo e finalizamos com algumas dicas elementares (porém muitas vezes esquecidas) para ajudá-lo a gerenciar melhor o seu tempo. Nas próximas colunas iremos detalhar um pouco mais esse assunto.

    Disponibilizei em meu site pessoal, uma página com dicas de livros sobre Gerenciamento de Tempo e eficácia profissional. Você pode acessar a lista de livros no seguinte endereço:

    http://www.juliobattisti.com.br/livrosdeadministracaodotempo.asp

    Um abraço e até a próxima.

  • Bloqueio ao furto de conteúdo web

    Considerando-se os atuais e existentes recursos tecnológicos referentes a TI apenas consegue-se inibir e dificultar o copiar e colar dos conteúdos baseados em páginas web independentes de qual for o navegador (browser) utilizado.

    Não existem 100% de segurança. O gap entre lançamentos de novas tecnologias e produtos e sua respectiva segurança é de no mínimo seis meses. Tal qual o mundo real onde, para nos proteger, dificultamos o acesso o quanto podemos de forma que algum alheio oportunista não se sinta tentado a invadir e subtrair nossa integridade e nossos pertences, no mundo virtual é a mesma coisa. As empresas buscam cada vez mais proteger o seu maior ativo; a informação.

    A tecnologia também é utilizada para dificultar e inibir não somente o acesso ao furto de conteúdo web, mas de todo e qualquer tipo de informação corporativa. Vide a figura abaixo onde em uma simples janela de publicação de comentários de internautas sobre uma matéria de O Globo é mostrada uma mensagem pop-up que informa sobre o detentor do poder sobre os direitos do material e também a proibição sobre possíveis cortes e colagens e divulgações não autorizados. Esta mensagem aparece quando o internauta tenta copiar o conteúdo da página em foco.

    Trata-se de uma técnica de dificultar e demonstrar ao oportunista que ele não será bem sucedido em seu intuito de furtar o conteúdo. Notem bem, apenas dificulta e não impossibilita.

    Aviso dado, o gatuno pode continuar em seu intuito ilícito e nefasto, por sua conta e risco. Pois nada impede que um usuário que tenha um pouco mais de conhecimento imprima esta página web para arquivo e/ou a transforme em imagem (foto) e aplique sobre a mesma uma tecnologia chamada OCR – Optical Recognized Character. Ou ainda, Reconhecimento ótico de caracteres.

    Com esta tecnologia de OCR, que possui miseravelmente uns 15 anos de existência na difundida entre usuários finais e está cada vez mais poderosa, consegue-se em questão de minutos transformar o texto de uma foto em um documento editável em qualquer programa como o Word. O próprio Microsoft Office contempla uma ferramenta de OCR embutida em uma de suas versões.

    Há muito que qualquer scanner é vendido com software de OCR integrado ao seu pacote. Idem para os multifuncionais tão na moda atualmente. Portanto além de ser largamente difundido, o OCR também é de baixo custo e pode ser gratuitamente utilizado quando baixado de páginas repositórias de programas freeware.

    Outro meio de se subtrair conteúdo web é através de programas que se conectam as páginas da internet e “sugam” todo o conteúdo lá publicado. Não só textos e sim fotos, tabelas, formatações, estruturas e até mesmo senhas e nomes de usuários (caso o programador e o analista não tenham tido o devido cuidado) e tudo o mais que existir sob um domínio web.

    Muitos desenvolvedores costumam utilizar o mesmo domínio para publicar a atual homepage em utilização pela empresa e também para armazenar e testar futuros projetos, novidades e versões desta mesma homepage. Daí o software “ripador” de conteúdo pode conseguir subtrair tudo.

    Conclui-se então que é praticamente chover no molhado ao tentar impedir esta ação de cut and paste tão somente sob o foco da TI. Mecanismos jurídicos como atas notoriais devem ser utilizados de forma a preservar o copyright.

  • Cuidados ao projetar processos de cadastramento

    Preencher cadastros faz parte da vida da internet. Nosso dever é considerar sempre o usuário e desenvolver fluxos de cadastro transparentes, que transmitam confiança e não o deixem abandonar o processo.

    Processos de cadastramento são cada vez mais necessários e comuns no dia-a-dia de qualquer usuário de serviços através da internet. Não é por menos que surgiu e se popularizou a idéia de que ninguém preenche formulários extensos. Gostar ninguém gosta mesmo, convenhamos. Ainda que fosse com papel e caneta seria tão entediante quanto online.

    Entretanto, os fatores comportamentais podem ser influenciados através de atitudes simples e uma política de desenvolvimento centrada no usuário, deixando o processo de cadastro a ser executado transparente e muito claro antes de ser iniciado. Para isso, algumas metodologias de trabalho colaboram muito para aumentar a credibilidade de um site.

    O primeiro ponto a ser considerado é mostrar de onde começar. Um ponto de partida é um recurso simbólico que dá segurança ao usuário. Sendo experiente ou iniciante, a simples sensação de que se algo der errado é possível voltar e recomeçar gera uma motivação para iniciar um cadastro, seja ele uma compra com cartão de crédito ou uma assinatura gratuita de uma newsletter. Lembre-se: pensar como usuário iniciante é o primeiro passo para saber o que este tipo de público deseja.

    Também é importante considerar quais os passos deverão ser seguidos ou quantas etapas devem ser completadas. Prover marcadores a cada etapa – como por exemplo números que mudam de cor indicando quantos passos foram superados – é uma forma simples de comunicar o caminho das pedras.

    É relevante ressaltar que é melhor ter 3 etapas com 15 itens (ou tarefas) a serem cumpridos em cada etapa do que 6 etapas com 7 itens cada. Em ambos os casos existiriam 45 informações a serem fornecidas, mas a sensação ao vencer cada etapa é muito mais estimulante quando se sabe que existem apenas mais duas iguais a atual do que saber que ainda faltam 3 e ainda se está preenchendo a etapa 4. Não há dúvidas de que o condensamento e a setorização de informações ajudam a deixar o processo mais transparente.

    Linguagem não-técnica

    As etapas da navegação, nomes dos links e conteúdo em si devem ser todos fáceis de ler e entender. Evitar o uso de jargão ou termos específicos que só são conhecidos por iniciados é a melhor maneira de garantir que o entendimento será amplo. Para o título de um botão, prefira “Enviar” ao invés de “Processar Cadastro”, por exemplo.

    Visão interna e visão externa

    Organize o processo pela ótica do usuário, do consumidor daquele produto ou serviço. É sempre melhor usar palavras e processos como eles são vistos pelas pessoas. Por exemplo: a indústria automobilística prefere vender carros “compactos” do que “hacthbacks”. Além de usar um termo em português, facilita o entendimento do conceito do carro fugindo da denominação usada por designers, engenheiros e jornalistas da área.

    Fique atento ao sinalizar links e botões ativos, demarcando mais uma vez o que o usuário já fez, qual a próxima etapa e como chegará ao final. Se no meio do processo for necessário, por exemplo, validar um e-mail através de uma confirmação via senha, é extremamente útil avisar o usuário antes do início, de forma que ele possa checar se terá acesso a esta conta de e-mail imediatamente e prosseguir com o cadastro após confirmar que aquele e-mail existe e é válido.

    Sem o aviso, a probabilidade de que muitos cadastros fossem abandonados pela metade seria bem maior. Mais uma vez, a comunicação do processo se mostra indispensável.

    Por último, mas não menos importante, é a atitude básica e simples de testar incessantemente. A grande vantagem da web é permitir a realização de testes rápidos, baratos e com pessoas diferentes em tempo real. As respostas rápidas dadas por usuários de diferentes perfis podem trazer percepções (insights) muito valiosos.

    Para pequenos testes, pode-se convidar qualquer usuário e não se faz necessário um laboratório de usabilidade ou uma sala isolada, até mesmo por telefone pode-se testar um processo de cadastro.

    Quanto mais os sites se tornam especializados e reúnem comunidades em torno de suas temáticas, mais os cadastros se tornam relevantes para conhecer, estudar e prover soluções para estes públicos. No entanto, a falta de observação de medidas simples tem levado muitos clientes a duvidarem de que os usuários de dispõe a fornecer suas informações, sem nem desconfiar de que o desenvolvimento às pressas pode ser um dos vilões da estória.

    Consideremos mais o usuário, afinal.

  • O jogo SUDOKU

    A vida de um desenvolvedor não é nada fácil , frequentemente lidando com prazos, códigos, otimizações, modelagens, codificação, etc.

    Para dar uma pausa e permitir uma distração, que tal um jogo de cruzadas com números?

    Para não confirmar o velho ditado que diz : “Cada de ferreiro , espeto de pau…” , estou apresentando aqui um jogo baseado no já famoso Sudoku feito no Visual Basic 2003 e migrado para o VB 2005.

    O jogo é de autoria de Michael Champion a quem cabe todos os méritos. A você cabe o código fonte e os momentos de distração com o jogo.

    É claro que você ficará tentado a incrementar o jogo usando sua habilidade, pois fique a vontade, mas só depois de relaxar um pouco, Ok?

    A seguir a imagem do projeto e da tela principal do projeto em execução exibindo um jogo, que possui 3 níveis de dificuldade.

    Se você ainda não conhece o jogo acho que vai gostar, e, com o tempo e prática, se tornar um mestre no Sudoku…

    Pegue o projeto completo aqui.

    Até breve e bom divertimento.

  • Instalando facilmente um poderoso CMS

    Olá pessoal. Esse é o meu primeiro artigo publicado no iMasters e espero que seja válido para todos. Trataremos aqui da instalação do Joomla e de outras coisas importantes que devemos saber para começar a trabalhar com ele.

    Vamos começar.

    1 – Fazer o download do:

    Easy PHP (ou qualquer outro software que se possa utilizar PHP, MYSQL e APACHE );

    Joomla

    Baixar easy php

    2 – Instalação do Easy PHP. (Uma instalação como qualquer outra)

    3 – Com Easy PHP instalado, entre na pasta Arquivos de Programas, EasyPHP 1-8, WWW, você deve descompactar o joomla dentro dessa pasta (aconselho a criar uma pasta joomla e descompactar dentro da mesma).

    4 – Não esqueça de ligar o EasyPHP (é bom lembrar que as vezes ele tá na bandeja do sistema, porém o Apache não está funcionando. Logo, quando iniciar o Easy PHP, dê um duplo clique e veja se estão verdes os dois led’s, tanto a do Mysql quanto a do Apache.)

    A visualização ficará da seguinte forma:

    Correto

    Errado

    Se o led do Apache estiver vermelho, dê um clique em cima do nome Apache e selecione a opção iniciar.

    5 – Vamos à instalação:

    5.1 – No seu navegar acesse http://localhost/pastadojoomla

    Deverá aparecer a seguinte tela no seu navegador:

    Nesta tela, o Joomla verifica permissões de pastas e as configurações do seu servidor:

    Obs: Quando você for instalar o Joomla no seu servidor remoto, provavelmente as permissões nas pastas não estão de acordo com a que o Joomla precisa para avançar na instalação. Se for esse o caso, vá até o gerenciador de conteúdo ou ftp do seu site e coloque as permissões necessárias.

    5.2 – Passamos para o próximo passo:

    Esta tela está descrito a licença GPL, é a licença para o uso do Mambo.

    5.3 Agora vem a parte que o pessoal tem mais dificuldade:

    5.3.1 – Local onde o servidor está normalmente é Localhost, no nosso caso também será localhost.

    Não se preocupe, pois no próximo passo ensinarei como criar o banco de dados.

    5.3.2 – Nome de usuário do Banco de Dados, por padrão o usuário do Easy PHP é root.

    5.3.3 – Senha do Mysql, por padrão a senha que no Easy PHP é em branco, por isso esse campo você poderá deixar em branco.

    5.3.4 – Nome do banco de dados, em nível de exemplo você poderá preencher esse campo com o nome joomla. (mais a frente vou explicar de onde vem esse campo).

    5.3.5 – Esse campo não é bom editar, mas ele coloca o sufixo das tabelas no Jomla, de uma forma que, se você tiver mais de um programa usando o banco de dados, fica fácil a visualização das tabelas que são utilizadas pelo Joomla.

    5.3.6 – Esse campo, você pode marcar caso já tenha instalado algum joomla no seu DB e queira sobrepor a as tabelas.

    5.3.7 – Sobrescreverá o backup das tabelas do Joomla.

    5.3.8 – Esse campo é bom deixar marcado pois ele irá instalar dados de exemplos. Dessa forma é mais fácil você saber de onde vem cada componente do Joomla.

    Antes de clicar em próximo, vamos criar o banco de dados.

    5.4 – Acesso no seu navegador o seguinte endereço: http://localhost/mysql/

    Para quem não conhece, esse é o PHPMyAdmin. O que iremos fazer será um único comando: digitar onde está marcado com uma seta o nome do banco de dados e dar enter.

    Com isso ele criará o nosso Data Base, que no passo 5.3.4 colocamos o nome de joomla. Por isso, caso você coloque outro nome, não esqueça de mudar no passo 5.3.4.

    Caso queira, no iMasters você encontra vários artigos sobre o PHPMyAdmin.

    5.5 – Colocar o nome no site.

    Neste campo você deverá colocar o nome do seu site.

    5.6 – No passo 3 você deverá informar somente os campos 5.6.3 e 5.6.4.

    Os outros dois campos são a url que você deverá acessar o site e o caminho da instalação do mambo no servidor.

    O campo 5.6.3 você deverá colocar o e-mail principal do sistema.

    O campo 5.6.4 você deverá colocar a senha que você utilizará para acessar o Painel de administração do seu site.

    5.7 – Se tudo ocorrer bem aparecerá a seguinte tela pra você:

    Pronto. O Joomla ta instalado e funcionando a única coisa a fazer agora é:

    Remover a pasta Installation que está dentro da pasta raiz do sistema.

    Para acessar o seu site, clique em Ver Site e, para acessar o Painel de Administração, clique em Administração ou digite no seu navegador: http://localhost/nomedapasta/administrator/

    Bom, é isso! Espero que seja útil! E se faltar alguma coisa, por favor avise para possíveis correções.

    Mais informações você pode encontrar em.

    http://www.joomla.org

    http://www.joomla.com.br

    http://www.joomlaminas.org