Blog

  • Intranets – Como deixá-la mais atraente?

    Olá leitores. Vamos conversar um pouco sobre alguns problemas comuns em Intranets e como torná-las mais atraentes para os seus usuários.

    A Intranet está pronta, mas os acessos não são os esperados?

    A Intranet está implantada, já sofreu as primeiras manutenções e está sendo acompanhada pelo suporte técnico e manutenção. Está indo tudo bem? Mas parece que alguns indicadores nos alertam que os acessos ainda estão bem aquém do esperado. O que está havendo? Falta propaganda? Será boicote de algum setor? O design é fraco? O que está faltando para que os funcionários a tenham ao seu lado no dia-a-dia e aproveitar todos os seus beneficios?

    Talvez ela esteja precisando de alguns atrativos para chamar atenção dos funcionários, mas como resolver isto?

    Já tratamos em outro texto (1) da importância da Intranet como ferramenta colaborativa, da forma que ela pode modificar a cultura da empresa e da sua importância para alavancar negócios. Então como mudar este cenário?

    A Intranet tem como seu principal papel o de estreitar as relações entre os empregados e a empresa, quando age de forma eficaz como uma ferramenta que une a informação, acessada de forma rápida e simples e os seus principais usuários.

    Ela não é de uma única área e sim de todos. Mas lógico que deverá existir uma área responsável pela manutenção, monitoramento, centralizando as mudanças, reclamações, sugestões, enfim a responsável pelo seu bom desempenho junto aos funcionários. Só que todos devem saber disto, jamais devem pensar que a Intranet é da área de Informática ou mesmo do Marketing.

    Caso existam computadores em locais estratégicos espalhados pela empresa, eles estão bem localizados? Existe propaganda divulgando a Intranet? Existem empregados que fazem o papel de “instrutores” ou “divulgadores”? E os micros dos funcionários estão permitindo acessos sem problemas? São relatados problemas de acesso, tempo de resposta, travamento da máquina?

    Não podemos esquecer também as dicas de usabilidade, dos padrões que estão cada vez mais nos cercando no mundo WEB. Os funcionários estão adaptados aos computadores? Estão plenamente familiarizados com teclas, termos, mecanismo de acesso aos dados? Ícones mais comuns? A empresa, num esforço comum, deve fazer com que seja “quebrado o gelo” e os funcionários possam usufruir ao máximo o que esta poderosa ferramenta traz.

    Dicas para torná-la mais atraente.

    Que tal revisar o design, as áreas envolvidas, o conteúdo, os termos utilizados, a regularidade das atualizações, o tempo de resposta, a facilidade de se achar determinados assuntos, etc.. E analisar todos os registros que chegam sobre sugestões, reclamações, etc. Isto é o que alguns chamam de “ouro em pó”.

    De posse de todas estas informações poderemos traçar algum plano, alguma estratégia. Aí vão algumas dicas:

    01 – Interação com os funcionários

    Checar constantemente como esta a relação dos empregados com a Intranet, quer seja por acessos, quer seja por pesquisas, etc. Eles devem estar sempre sintonizados com a empresa, via Intranet. Sem a participação efetiva deles ela não sobrevive.

    02 – Manutenção do conteúdo.

    Este é um dos mais importantes desafios. É necessário manter o conteúdo atualizado, mas a que custo? Triste acessar mensagens com datas ultrapassadas (um “banner” informando sobre uma promoção interna que se encerrou há mais de um mês) e/ou conteúdos (“mensagem do presidente Sr. Fulano” só que ele já se aposentou há meses). E informação errada então nem pensar (ramal do setor de férias trocado, direcionando as pessoas para o setor de demissão, horrível esta hein?). Os lideres dos setores envolvidos tem grande importância nesta hora, nada de deixar pra amanhã uma atualização importante, “calma o mundo não acaba amanhã!” nem pensar, tem que fazer, vamos fazer! Tem que haver comprometimento.

    03 – Periodicamente revise o design.

    Não existe design eterno, reveja os padrões, pesquise as novidades do mercado, obtenha informações sobre a facilidade de acesso.

    04 – Analise os problemas que são reportados.

    Não somente resolva problemas, pense mais na frente, pense em como evita-los, crie estatísticas. Como se diz aprenda com os erros.

    05 – Alinhamento com a estratégia da empresa.

    Verifique se a Intranet esta na mesma direção das estratégias da empresa.

    06 – Os assuntos disponibilizados devem ser realmente interessantes.

    O que não falta é assunto, mas todos são realmente relevantes? Estão de acordo com que a empresa tem divulgado? Podemos tratar de assuntos específicos de uma área, mas também devemos ter assuntos da empresa como um todo e se possível até do mercado. E por que não comentar as ações corporativas?

    07 – Estatísticas podem ser obtidas através do uso da Intranet.

    Use enquetes para saber mais dos seus funcionários, não só para assuntos da empresa, mas também qual a sua opinião sobre a empresa,sobre o país, sobre o mercado que a empresa atua. Faça até concursos com votação pela Intranet, tudo muito democrático. Divulgue o que mudou depois de uma sugestão de um funcionário.

    Conclusão

    O uso adequado e eficaz da Intranet pode dar um diferencial para a empresa. Vamos chamar os empregados para participar, uma chamada franca, leal, honesta, pois ella é uma ferramenta essencialmente colaborativa, que esta sempre em evolução e precisa da participação ativa e intensa de seus usuários.

    Atenção especial na gestão de pessoas, pois elas não como as máquinas. Vamos atentar também aos focos de resistências e enfrentá-los. Desde o início de um projeto de Intranet precisamos estar preparados para o envolvimento adequado dos funcionários, trabalhando em conjunto, para posteriormente tratarem a Intranet como uma ferramenta comum do seu dia-a-dia.

    Até a próxima!

  • Incentivo e Recursos Financeiros para Empresas de Software no Brasil: Atual Estágio e Perspectivas para 2007.

    Inúmeras incertezas envolvem o empresário de TI, quando da necessidade de capitalizar seu negócio e tomar dinheiro no escopo de desenvolver seus fatores de produção ou ampliar seus mercados. Muitas linhas de crédito para informática, hoje disponíveis no mercado, podem de inicio sensibilizar o empreendedor com taxas aparentemente atraentes, entretanto, é preciso cautela e estudo detalhando antes de contratar qualquer financiamento deste porte, mormente em se considerando o elevado custo de um projeto, que pode não ser aprovado.

    Evidencia-se que, um dos óbices a alavancagem do setor de TI no Brasil, seja a parca oferta de créditos e incentivos no setor, sobretudo às pequenas empresas, responsáveis por 80 das 70 mil empresas de TI existentes no Brasil.(1) Maior do que a falta de crédito, é sem dúvida, a falta de informações e planejamento estratégico, por parte das Empresas de TI, no que cerne às linhas e incentivos disponíveis no País.

    I – Incentivos fiscais e as empresas de software

    É preciso reconhecer a evolução, ainda que modesta, dos incentivos e recursos destinados ao setor de Tecnologia da Informação no Brasil. Inicialmente, tivemos a Lei 7.232/1984, que estabelecia reserva de marcado para o setor, depois, a Lei 8.248/1991, que acabou com a reserva de mercado e diminuiu o percentual do IPI (Imposto sobre Produtos Industrializados) às empresas que investissem 5 de seu faturamento global em Pesquisa e Desenvolvimento (PD). Mais adiante, em 2001, a lei 8.248/1991 foi reeditada e se transformou na Lei 10.176/2001, que manteve os mesmos aspectos da antiga lei, porém agora, com a previsão de que parte dos investimentos em PD fossem direcionados para as regiões Norte, Nordeste e Centro-Oeste.

    A lei 10.176/2001 também criou o Fundo Setorial de Informática, hoje Fundo Setorial para Tecnologia da Informação, responsável pela promoção de projetos estratégicos de pesquisa e desenvolvimento em tecnologia da informação, inclusive em segurança da informação (2)

    Já no final do 2004, foi sancionada a Lei 11.077/2004, que revogou a lei 10.176 e trouxe significativas mudanças no cenário mercadológico da Tecnologia da Informação, dentre as quais, vale ressaltar, a previsão de incidência de 5 destinados a PD, apenas sobre o faturamento dos produtos incentivados, e não sobre o faturamento total da empresa. Referido mandamento, estendeu a renúncia fiscal até 2019.

    Outro ponto que merece destaque é a distinção, feita pela nova Lei, para fins de percentual de desconto no IPI, das empresas que aqui fabricam ou que fabricam no exterior seus produtos. Assim temos o seguinte cenário:

    a) Produtos não fabricados aqui:

    • Região Sul e Sudeste: Redução de 80 do IPI
    • Região Norte, Nordeste e Centro-Oeste: Redução de 95 do IPI

    b) Produtos fabricados e desenvolvidos no Brasil:

    • Região Sul e Sudeste: Redução de 95 do IPI
    • Região Norte, Nordeste e Centro-Oeste: Isenta de pagamento

    Merece destaque também, o parcelamento trazido pela nova lei, às empresas que não tinham aplicado o percentual mínimo em PD até 31 de dezembro de 2003: 48 meses, com taxas de juros iguais à TJLP.

    Entretanto, grande problema residia quando da aprovação de tal direito junto ao Ministério da Ciência e Tecnologia (3), eis que a empresa pretendente ficava à mercê da análise não criteriosa de técnicos que avaliavam os requisitos mínimos de PPB (4), bem como e se o desenvolvimento apresentado era considerado PD. Mais, ainda persistia a dúvida se a Lei de Informática protegia as empresas de Software, ou era uma lei nitidamente desenvolvida para os investimentos em Hardware (5)

    Com efeito, somente recentemente, em setembro de 2006, a Lei 11.077 de 2004 foi regulamentada, por meio de um decreto assinado pelo presidente Luiz Inácio Lula da Silva, número 5906/2006 (6), abolindo de vez com pontos obscuros da Legislação e prorrogando os incentivos até 2009. Neste sentido, nos termos do decreto:

    Art. 1 As empresas que invistam em atividades de pesquisa e desenvolvimento em tecnologias da informação poderão pleitear isenção ou redução do Imposto sobre Produtos Industrializados – IPI para bens de informática e automação, nos termos previstos neste Decreto. Art. 2 Para fins do disposto neste Decreto, consideram-se bens e serviços de informática e automação: (…) III – programas para computadores, máquinas, equipamentos e dispositivos de tratamento da informação e respectiva documentação técnica associada (software);

    Em tal cenário proveitoso, em virtude do advento da recente regulamentação, estima-se que os investimentos no setor de TI ultrapassarão R 1 bilhão em 2007.(7) Daí decorre a necessidade das empresas se estruturarem e buscarem, através de consultoria especializada, superar os tramites administrativos impostos pela Lei, em busca de tal benefício fiscal. Deverá, para pleitear-se o aludido direito, ser apresentada Proposta de Projeto, nos moldes do Decreto n. 3800/2001, consoante roteiro determinado pelo MCT.(8) É invariável, para o sucesso da obtenção do benefício, que os documentos sejam elaborados nos arquétipos legais, e que haja um constante acompanhamento de todas as etapas do processo.

    II – Recursos financeiros e crédito

    Se ardiloso é o caminho das empresas de Software, para a obtenção dos conhecidos incentivos fiscais, não menos percalços encontra quando busca dinheiro no mercado, visando o crescimento corporativo e o mercado externo.

    Além de encontrar poucas linhas sólidas disponíveis, o empreendedor do Software ainda é condicionado a fatores que obstam o seu crescimento, dentre os quais a burocracia para elaboração do projeto de viabilidade, a exigência dos bancos do popular acordo de reciprocidade(9) e a demora na liberação dos recursos.

    Em meio a produtos duvidosos colocados no mercado, uma linha de crédito nos parece mais lúcida e interessante ao empresariado de TI, até mesmo pelo preço do dinheiro praticado: O Programa para o desenvolvimento da Indústria Nacional no Software, o PROSOFT (10), criado em 1997 pelo BNDES.

    O PROSOFT, até o momento pouco difundido entre o setor, é composto por três mecanismos de crédito, a saber:

    1. Prosoft Empresa: Dedicado ao desenvolvimento de software nacional e melhora da qualidade das produtoras do país.
    2. Prosoft Exportação: Destinado ao incentivo de vendas externas de programas.
    3. Prosoft Comercialização: Destinado à aquisição de Software.

    No PROSOFT Empresa, o valor financiado se situa é a partir de R 400.000,00 (quatrocentos mil reais), e a taxa de juros é composta pelo custo financeiro (TJLP1), mais a remuneração do BNDES, que varia de 1(um) a 3 (três) por cento, dependendo do porte da empresa. O prazo é determinado em função da capacidade de pagamento da empresa ou do empreendimento.

    No PROSOFT Exportação, o BNDES financia até 100 do valor da exportação, excluída a Comissão de Agente Comercial e eventuais pré-pagamentos. Nesta modalidade de crédito, por envolver agentes financeiros (11), a taxa de juros é composta pelo: Custo Financeiro, mais Remuneração do BNDES, mais Remuneração da Instituição Financeira Credenciada. Em tal cenário, a Remuneração do BNDES pode variar, de acordo com o porte da empresa, de 1 (um) a 2 (dois) por cento ao ano, e a remuneração do Agente Financeiro, de 4 (quatro) por cento ao ano até a livre negociação, em caso de empresas de Software de grande porte.

    O prazo para o PROSOFT Exportação é de até 18 meses, não podendo o último embarque ultrapassar o prazo de 12 meses e a liquidação da operação, 6 meses.

    Por fim, na modalidade Comercialização do PROSOFT, o BNDES também financia 100 dos itens financiáveis, tendo o mesmo uma remuneração de 1 (um) por cento ao ano e a instituição financeira credenciada, de até 4 (quatro) por cento ao ano. O prazo é de até 36 meses, incluída a carência de até 12 meses.

    De tal arte que, embora ambas as linhas do PROSOFT exijam algumas garantias, constata-se que atualmente, no mercado, não exista financiamento tão acessível, seguro e interessante às empresas de Software do País, inclusive para formação do capital de giro. Em dezembro de 2006, foi realizado um financiamento record desde a criação do PROSOFT (1997), no importe de 100 milhões de dólares, para a multinacional IBM (12)

    Apesar da boa intenção governamental, é preciso que se repense o PROSOFT, sobretudo à atender as necessidades das pequenas e médias empresas, que por vezes, se encontram sem condições sequer, de iniciar um projeto de financiamento junto ao órgão do governo.

    III – Perspectivas e considerações finais

    Evidencia-se, lamentavelmente, que o Software no Brasil, desde a sua proteção e tutela jurídica, aos incentivos fiscais e linhas de crédito, não tem merecido do Governo Federal a atenção necessária, o que invariavelmente, culmina com a estagnação do setor, que poderia contribuir muito mais com o progresso nacional, no que diz respeito a PD.

    No que atine a tutela jurídica, uma reflexão faz jus a análise: Interessante fosse que, ao invés da tutela jurídica aos direitos do autor, fosse o software também tutelado pelo regime jurídico da propriedade industrial, dado o interesse nacional mais defendido em tal matéria.

    Ademais, referindo-nos aos aspectos tributários do Software, outros incentivos deveriam ser criados, o que favoreceria as empresas de Software na continua batalha contra os produtos contrafeitos. Neste diapasão, é de fundamental relevância a meditação sobre Projeto de Emenda Constitucional número 517/2006 (13) que concede imunidade tributária à produção e comercialização de programas de computador, de autoria do Deputado Marcondes Gadelha, em tramite no Congresso Nacional.

    Referentemente a linhas de crédito, e tendo por certo a ascensão do Software Livre (14), presenciaremos o surgimento de novos incentivos fiscais para desenvolvimentos que utilizem softwares open source, onde neste sentido já constatamos movimentos no Congresso Nacional (15).

    A este respeito, cumpre destacar o Projeto de Lei 6685/2006, que concede preferência no financiamento de equipamentos de telecomunicações que utilizem software livre.

    Impossível não salientar, também, o previsto no Projeto de Lei 3684/04, do deputado Carlos Eduardo Cadoca (PMDB-PE), que tramita na Comissão de Ciência e Tecnologia/Comunicação e Informática, ou seja, a concessão de linhas de crédito produtivo por instituições federais e seus agentes financeiros com juros reduzidos, sempre que os recursos financeiros forem destinados exclusivamente para a criação ou atualização de programas de computador livres; e o beneficiário estiver devidamente registrado como empresa de desenvolvimento de programas de informática há pelo menos um ano na junta comercial da localidade em que opera. (16)

    Destarte, percebe-se que os incentivos ao Software proprietário e livre crescerão em 2007, entretanto, é fato também que serão necessários maiores investimentos e esforços no setor: Não é por acaso que a Índia é hoje o maior centro de desenvolvimento offshore de software do mundo, faturando 18 bilhões de dólares com softwares e serviços (dados da FrostSullivan)! Estamos falando de incentivos eficientes e planejados, no setor de software e serviços.

    A respeito da falta de incentivos no Brasil e dos programas de estímulo desenvolvidos na Índia, são as considerações de Cássio Dreyfuss, vice-presidente do Gartner no Brasil e de Haritha Ramachandran, analista sênior da FrostSullivan, concedidas à repórter Daniela Moreira do IDG Brasil (17), onde, respectivamente: Nunca seremos páreo para competir com eles, porque o governo indiano iniciou esse processo há 20 anos. Nosso governo nunca fez nada pelo setor, as empresas se viram praticamente sozinhas e O governo apóia a indústria por meio de parques de software, isenção de impostos por prazos determinados e descontos nas contribuições sociais

    Neste sentido, embora sejamos um dos países mais criativos em termos de softwares e serviços de TI do mundo, embora sejamos o 12 maior do mundo em termos mercado nacional de Software, ainda temos muito a crescer, notadamente no que diz respeito à exportação de sistemas.

    Apenas 1,2 da produção local de software é destinada a exportação, ou seja, temos muito a explorar neste mercado, e isto depende de uma conjunção de esforços da iniciativa privada, mas principalmente, do Governo, na concessão novos créditos e incentivos, notadamente na redução da cavalar carga tributária média incidente sobre softwares e serviços, hoje em torno de 31,8 no Brasil! (18)

    IV – Notas:

    1 http://computerworld.uol.com.br/mercado/2006/

    2 http://ftp.mct.gov.br/Temas/info/Dsi/CATI/CTINFO/Fundo.htm As empresas de desenvolvimento ou produção de bens e serviços de informática e automação deverão investir, anualmente, em atividades de pesquisa e desenvolvimento em tecnologia da informação a serem realizadas no País, no mínimo cinco por cento de seu faturamento, conforme projeto elaborado pelas próprias empresas.Dos cinco por cento acima especificado, as empresas deverão depositar trimestralmente, zero vírgula cinco por cento – sob a forma de recursos financeiros – no Fundo Nacional de Desenvolvimento Científico e Tecnológico – FNDCT, criado pelo Decreto-Lei n 719, de 31 de julho de 1969, e restabelecido pela Lei n 8.172, de 18 de janeiro de 1991.

    3 http://www.mct.gov.br/index.php/content/view/2189.html Área destina a Legislação de Informática.

    4 http://www.desenvolvimento.gov.br/sitio/sti/proAcao/IncInov Empresa/ IncIndBensAutomacao.php Conjunto mínimo de operações, no estabelecimento fabril, que caracteriza a efetiva industrialização de determinado produto.

    5 – http://www.fenainfo.org.br/noticias.asp Artigo A Lei Geral do Software, de Leonardo Humberto Bucker. (…) Esta futura Lei Geral, como bem diz o presidente da Fenainfo, Maurício Laval Pina de Sousa Mugnaini, resgata uma lacuna enorme e antiga: a ausência de uma legislação específica sobre o setor de serviços de informática. Maurício lembra que nunca tivemos uma lei que tratasse do software e muito menos dos serviços de informática. A propalada Lei da Informática é puramente uma Lei que trata de equipamentos, uma Lei do Hardware poderíamos chamar assim, e a chamada Lei do Software, desde sua primeira versão, trata apenas da comercialização e dos direitos autorais e nada mais. O deputado Júlio Semeghini (PSDB-SP), indiscutivelmente o paladino do nosso setor na Câmara, lembra sempre que nós nunca havíamos provocado o Congresso no sentido de termos um diploma legal compatível com a importância do setor. Coordenando a Frente Parlamentar da Informática, ele agora se orgulha de liderar, no parlamento, a frente parlamentar de um setor que amadureceu politicamente e está influenciando decisivamente em todas as grandes questões que o afetam…

    6 http://www.mct.gov.br/index.php/content/view/39448.html e http://www.mct.gov.br/index.php/content/view/ 39657.html

    7 http://idgnow.uol.com.br/mercado/2006/09/27/idgnoticia.2006-09-27.5216740955/IDGNoticia_view A regulamentação da Lei de Informática deverá trazer ao mercado nacional um aumento nos investimentos feitos pelas empresas do setor, que poderão atingir R 1 bilhão a partir de 2007, segundo estimativa do ministro da Ciência e Tecnologia, Sérgio Rezende.

    8 http://www.mct.gov.br/index.php/content/view/10928.html Anexo à Portaria MCT/MDIC No 253, de 28 de Junho de 2001.

    9 http://clipping.planejamento.gov.br/Noticias.asp?NOTCod=84691 Reciprocidade é o banco exigir coisas que não estão previstas no contrato. Por exemplo: o empresário toma um financiamento de R 100 e ele (o banco) exige que R 40 fiquem parados no banco. E, com isso, a instituição pode levar sua taxa, direta e indireta, até onde quiser. Ouvimos falar de valores entre 40 e 60. Isso é uma loucura.

    10 http://www.bndes.gov.br/programas/industriais/progsoft.asp

    11 http://www.bndes.gov.br/produtos/instituicoes/aglamina.asp

    12 http://idgnow.uol.com.br/computacao_corporativa/2006/12/21/idgnoticia.2006-12-21.4043824754/ IDGNoticia_view – O BNDES anunciou hoje um financiamento recorde de 100 milhões de dólares para a multinacional IBM, no âmbito do Programa para o Desenvolvimento da Indústria Nacional de Software e Serviços Correlatos (Prosoft). Foi a maior quantia já liberada em uma única operação do programa, desde sua criação, em 1997.

    13 http://www.camara.gov.br/sileg/prop_detalhe.asp?id=316987

    14 – O termo Software Livre se refere aos softwares que são fornecidos aos seus usuários com a liberdade de executar, estudar, modificar e repassar (com ou sem alterações) sem que, para isso, os usuários tenham que pedir permissão ao autor do programa.

    15 http://www.softwarelivreparana.org.br/modules/news/article.php?storyid=1135 Uma comissão da Câmara dos Deputados votará na terça-feira (4) projeto de lei que prevê financiamento preferencial à produção de equipamentos de telecom que usem software livre…

    16 http://www.serpro.gov.br/noticiasSERPRO/20040720_10

    17 http://idgnow.uol.com.br/computacao_corporativa/2006/12/06/idgnoticia.2006-12-06.4506273869/ IDGNoticiaPrint_view

    18 http://computerworld.uol.com.br/governo/2006/10/02/idgnoticia.2006-10-02.6241765770/IDGNoticia _view

    Blog de José Milagre

  • Paginação e Ordenação com Ajax

    Olá amigos. Nosso objetivo neste artigo será estudar AJAX com aplicação de XML, PHP e DOM. Teremos um arquivo para paginação de resultados de consulta de banco de dados. Um modelo que procurei na internet, mas não encontrei.

    Mas vamos ao que interessa! Nesse exemplo estou usando sete arquivos. Gosto muito da boa prática de programação por módulo.

    Os arquivos são:

    Index.php (Onde será mostrada nossa listagem);
    Listagem.php (Responsável por fazer a consulta no banco de dados e gerar o arquivo XML de retorno);
    Includes/conexão.php (Faz a conexão com o banco de dados);
    Includes/paginação.php (Responsável pelo processo de paginação);
    Includes/útil.js (Contem algumas utilidades);
    Includes/ajax.js (script para o ajax);
    Includes/funcoes.js (O mais importante, contêm todas as funcionalidades para o ajax);
    Sql.txt (Arquivo extra – Script do banco de dados).

    Vou detalhar os arquivos:

    index.php

    <HTML>
    <HEAD>
     <TITLE>Documento PHP</TITLE>
     <SCRIPT type="text/javascript" src='includes/ajax.js'> </SCRIPT>
     <SCRIPT type="text/javascript" src='includes/funcoes.js'> </SCRIPT>
     <SCRIPT type="text/javascript" src='includes/util.js'> </SCRIPT>
    </HEAD>
    <BODY onLoad="javascript:listar(1)">
    <h2>Paginação e Ordenação com Ajax (XML e JavaScript)</h2>
    <div id="carregando" style="font:Verdana; color:#FFFFFF; background-color:#DD0000; width:180px;">
      Carregando...
    </div>
    <br>
      <table border="0">
        <tr>
    	  <td>Resgistro por página?</td>
    	  <td>
    	    Ordernar por?
    	  </td>
    	</tr>
      <form>
    	<tr>
    	  <td>	
    	    <select id="regPag" onChange="javascript:listar(1);">
    	      <option value="1">01 registro  por página</option>
    	      <option value="2">02 registros por página</option>
    	      <option value="3">03 registros por página</option>
    	      <option value="4">04 registros por página</option>
    	      <option value="5">05 registros por página</option>
    	      <option value="6">06 registros por página</option>
    	      <option value="7">07 registros por página</option>
    	      <option value="8">08 registros por página</option>
    	      <option value="9">09 registros por página</option>
    	      <option value="10" selected="selected">10 registros por página</option>
    	      <option value="20">20 registros por página</option>
    	      <option value="30">30 registros por página</option>
    	      <option value="50">50 registros por página</option>
    	    </select>
    	  </td>
    	  <td>
    	    <select id="ordenacao" onChange="javascript:listar(1);">
    	      <option value="1" selected="selected">ID Ascendente</option>
    	      <option value="2">ID Descendente</option>
    	      <option value="3">NOME Ascendente</option>
    	      <option value="4">NOME Descendente</option>
    	    </select>
    	  </td>
    	</tr>
      </form>
      </table>  
      <br>
      <table id="tabelaPrincipal" border="1" cellpadding="0" cellspacing="0">
        <tr>
          
        </tr>
      </table>
      <table id="tabelaPaginas" border="0" width="200" cellpadding="0" cellspacing="0">
        <tr align="center">
          <td>  <a style="display:none" id="pri" href="">Primeiro</a>   </td>
    	  <td>  <a style="display:none" id="ant" href="">Anterior</a>   </td>
    	  <td>  <a style="display:none" id="pro" href="">Proximo </a>   </td>
    	  <td>  <a style="display:none" id="ult" href="">Ultimo  </a>   </td>
        </tr>
      </table>
    </BODY>
    </HTML>

    Linhas (4 a 6) – Importação dos arquivos necessários para o funcionamento.
    Linhas (10 a 12) – Div onde irá aparecer a mensagem “Carregando…”.
    Linhas (24 a 38) – Um campo select para a escolha da qtd de registro por página.
    Linhas (41 a 46) – Um campo select para a escolha do tipo de ordenação.
    Linhas (52 a 56) – Tabela onde irá ser exibido os registros.
    Linhas (57 a 64) – Tabela onde irá ser exibido os texto “Primeiro Anterior Proximo e Ultimo”, para a paginação.

    listagem.php

    <?
       //include do arquivo conexao.php para coneção com o BD
       include("includes/conexao.php");
       //SQL para a pesquisa no BD
       $sql = "select ID, NOME from cidades where ID <= 30";
       
       if($ordenacao == 1){
         $sql = $sql." order by ID";
       }else if ($ordenacao == 2){
         $sql = $sql." order by ID DESC";
       }else if ($ordenacao == 3){
         $sql = $sql." order by NOME";
       }else if ($ordenacao == 4){
         $sql = $sql." order by NOME DESC";
       }
       //Include do arquivo paginacao.php Responsável pelo processamento da paginação
       include("includes/paginacao.php");
       //$limite contem a quantidade de registro por página definido no index.php pelo usuário
       $qtd = mysql_num_rows($limite);
       // Inicio da montagem do XML
       Header("Content-type: text/xml");   
       $xml  = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
       $xml .= "<cidades>\n";               
    
       while(list($id,$nome) = mysql_fetch_row($limite)) {  
    	  $xml .= "<cidade>\n";     
          $xml .= "<id>".$id."</id>\n";                  
          $xml .= "<nome>".$nome."</nome>\n";         
          $xml .= "</cidade>\n";    
       }                
       
       $xml.= "<totalReg>$totalRegistros</totalReg>";
       $xml.= "<pagAtual>$pagAtual</pagAtual>";
       $xml.= "<numPag>$numPaginas</numPag>";
       $xml.= "<ordenacao>$ordenacao</ordenacao>";
       $xml.= "</cidades>\n";
       //Fim da montagem do XML
       
       //Exibição do XML, isso não ficará visível para o usuário
       echo $xml;
    ?>

    Nesse arquivo temos a consulta no banco e a geração do arquivo XML que será preciso para ser exibido no index.php

    conexao.php

    <?
       $conn = @mysql_connect("localhost", "root", "");
    
       if (!$conn)
         die("Erro ao conectar com MySQL: " . mysql_error());
    
       if (!mysql_select_db("ajax", $conn))
         die("Erro ao selecionar o banco: " . mysql_error());
    
    ?>

    Nesse arquivo não tem nenhum mistério.

    paginacao.php

    <?
       // Números de Registros por página
    	$registrosPorPagina = $regPorPag; 
    	
    	if(empty($registrosPorPagina)){
    	  $registrosPorPagina = 5;
    	}
    
    	// Validação para não exibir a página 0
    	if (empty($pagina)):    $pagAtual = 1; 	else:    $pagAtual = $pagina; endif;
    
    	// Retorna os "$registrosPorPagina" até o número passado por "$pagina"
    	$inicio = $pagAtual - 1; 
    	$inicio = $inicio * $registrosPorPagina; 
    
    	// Pesquisa da página atual
    	$limite = mysql_query("$sql LIMIT $inicio,$registrosPorPagina"); 
    
    	// Número total de registros da tabela
    	$totalRegistros = mysql_num_rows(mysql_query("$sql")); 
    
    	// verifica o número total de páginas 
    	$numPaginas = $totalRegistros / $registrosPorPagina;
    ?>

    util.js

    //Receberá um elemento e substituirá todo o texto desse elemento pelo texto fornecido
    function substituirTexto(elemento, texto) {
      if (elemento != null) {
    	//usado para limpar todos os filho existente do elemento
        limparTexto(elemento);
        //<!-- Usamos para criar um novo nó texto e depois o acrescentamos aos nós filhos do elemento
    	var newNode = document.createTextNode(texto);
        elemento.appendChild(newNode);
    	//-->
      }
    }
    
    //Removerá todos os nós filhos do elemento que vc informar
    function limparTexto(elemento) {
      if (elemento != null) {
        if (elemento.childNodes) {
          for (var i = 0; i < elemento.childNodes.length; i++) {
            var childNode = elemento.childNodes[i];
           //removerá toidos os nós filhos.
    		elemento.removeChild(childNode);
          }
        }
      }
    }
    
    

    ajax.js

     //Inicio da verificação se o navegador suporta AJAX
       function ObjAjax() {
    	  try {
    		//Usado por algumas versões do IE
    		 ajax = new ActiveXObject("Microsoft.XMLHTTP");
          } 
          catch(e) {
             try {
                //Usado pela maioria das versões do IE
    			ajax = new ActiveXObject("Msxml2.XMLHTTP");
             }
    	     catch(ex) {
                try {
                   //Funciona no Safari, FireFox, Mozila, Opera e 
    			   //a maioria dos navegadores que não são Microsoft
    			   ajax = new XMLHttpRequest();
                }
    	        catch(exc) {
                   //Navegador sem suporte a AJAX
    			   alert("Navegador não suporta AJAX");
                   ajax = null;
                }
             }
          }
       }
       //Fim da Verificação

    Criar o objeto a ser utilizado o AJAX.

    funcoes.js

    //Função responsavel por fazer a listagem dos registros.
       function listar(pagina){
         //criar o objAjax
    	 ObjAjax();
    	 if(ajax) {
    	   //Pego a quantidade de resgistro por página definido pelo usuário no index. 
    	   var qtdRegPorPag = document.getElementById('regPag').value;
    	   //Pego o tipo de ordenação definido pelo usuário no index.
    	   var ordenacao = document.getElementById('ordenacao').value;
    	   
    	   //Definir URL para onde devemos fazer a listagem passando a página que queremos.
    	   //Definir Parametros onde devemos passar junto a url a pagina atual, qtd de registro por página, ordenação e
    	   //dummy uma variavel criada para evitar que o IE guarde em cache a navegação com isso essa variavel "nunca" será igual.
    	   var url = "http://localhost/ajax/listagem.php";
    	   var parametros = "?pagina="+pagina+"®PorPag="+qtdRegPorPag+"&ordenacao="+ordenacao+'&milisegundos='+new Date().getTime(); 
    	   ajax.open("GET", url+parametros, true);
    	   //Enquanto o processa a listagem mostra para o usuário a mensagem "carregando".
    	   var divCarregando = document.getElementById("carregando");
    	   divCarregando.style.display = 'block';
    	   //invoco a função paginar
    	   ajax.onreadystatechange = paginar;
           ajax.send(null);
    	 }
       }

    Esse trecho acima utiliza o objeto AJAX para enviar para o servidor assincronicamente. Isso está explicito na linha 16 (3º parâmetro).

    function paginar(){
    	 //Verifico se o servidor concluiu a solicitação.
    	 if (ajax.readyState == 4) { 
    	   //Informa o código de status do Servidor. "200" = OK
    	   if(ajax.status == 200){
    	    //valor guarda a resposta do servidor, que nesse caso é o XML gerado pelo arquivo listagem.php
    		 var valor = ajax.responseXML;
    		 
    	     var pagAtual = valor.getElementsByTagName("pagAtual")[0].firstChild.nodeValue;//pagAtual = página atual
    	     var totalReg = valor.getElementsByTagName("totalReg")[0].firstChild.nodeValue;//totalReg = qtd total de registro do SQL
    	     var numPag   = Math.ceil(valor.getElementsByTagName("numPag")[0].firstChild.nodeValue);// numPag = qtd de páginas
    	   
    	     if (totalReg == 0){
    		   //caso entre aqui é pq não existe registro o banco, com isso eu "desabilito" os dois select,
    		   //exibo a mensagem "Nenhum registro encontrado" e
    		   //apago todo o conteúdo da tabela que exibi os registros.
    	       document.getElementById('ordenacao').disabled = true;
    		   document.getElementById('regPag').disabled = true;
    		   divCarregando = document.getElementById("carregando");
    	       substituirTexto(divCarregando, "Nenhum registro encontrado");
    		   if(document.getElementById('tabelaPrincipal').rows.length>1){
    		     document.getElementById('tabelaPrincipal').deleteRow(0);
    		     document.getElementById('tabelaPrincipal').deleteRow(0);
    		   }
    
    }else{
               //caso entre aqui é pq existe registro o banco, com isso eu "habilito" os dois select.
    		   document.getElementById('ordenacao').disabled = false;
    		   document.getElementById('regPag').disabled = false;
    		   //dataArray = guarda uma matriz com todas informações do xml que pertencer a tag <estado></estado>
    		   var dataArray   = valor.getElementsByTagName("cidade");
    	       //Utilizado para Limpar a tabela que será usada para mostrar os resgistros
    	       while(document.getElementById('tabelaPrincipal').rows.length>0){
    		     document.getElementById('tabelaPrincipal').deleteRow(0);
    	       }
    	       
    		   //definição do tamanho das tabelas:
    		   //  "tabelaPrincipal" que é usada para mostrar os resgistros
    		   //  "tabelaPaginas" que usada para paginar.
    	       document.getElementById("tabelaPaginas").width="320";
    	       document.getElementById("tabelaPrincipal").width="320";
    	   
    	       //Inicio da escrita da tebela com o resultado
    		   
    		   //isso gera uma linha com duas colunas e com conteúdo ID e NOME respectivamente
    	       var x=document.getElementById('tabelaPrincipal').insertRow(0);
               var y=x.insertCell(0);
               var z=x.insertCell(1);
               substituirTexto(y, 'ID');
    	       substituirTexto(z, 'NOME');
               
               //Início do processo da paginação propriamente dita
               //quarda a página anterior
    		   var anterior = (pagAtual - 1); 
    		   //guarda a página posterior
    	       var proximo  = (Number(pagAtual) + 1);
    		
    	       if ((totalReg % dataArray.length!=0)){
    		     while(totalReg % dataArray.length!=0){
    		       totalReg++;
    		     }
    	       }
    		
    	       if (pagAtual > 1) {
    		     //Exibi o texto com o link Primeiro e Anterior, caso a pagina atual seja > 1
    			 document.getElementById("pri").style.display = 'block';
    		     document.getElementById("ant").style.display = 'block';
    		     document.getElementById("pri").href="javascript:listar(1)";
    		     document.getElementById("ant").href="javascript:listar("+anterior+")";
    	       } else { 
    		     //Esconde o texto com o link Primeiro e Anterior, caso a página atual seja < 1
    			 document.getElementById("pri").style.display = 'none';
    		     document.getElementById("ant").style.display = 'none';
    		     document.getElementById("pri").href="javascript:listar(1)";
    		     document.getElementById("ant").href="javascript:listar("+anterior+")";
    	       }
    
    	       if (pagAtual < numPag) {
    		     //Exibi o texto com o link Proximo e Ultimo, caso a pagina atual seja < qtd total de páginas
    			 document.getElementById("pro").style.display = 'block';
    		     document.getElementById("ult").style.display = 'block';
    		     document.getElementById("pro").href="javascript:listar("+proximo+")";
    		     document.getElementById("ult").href="javascript:listar("+numPag+")";
    	       } else {
    		     //Esconde o texto com o link Proximo e Ultimo, caso a pagina atual seja >= qtd total de páginas
    			 document.getElementById("pro").style.display = 'none';
    		     document.getElementById("ult").style.display = 'none';
    		     document.getElementById("pro").href="javascript:listar("+proximo+")";
    		     document.getElementById("ult").href="javascript:listar("+numPag+")";
    	       } 
               //Laço para ir exibindo os resgistro linha a linha
    	       for(var i = 0 ; i < dataArray.length ; i++) {
                 var item = dataArray[i];
    		     //contéudo dos campos no arquivo XML
    		     var id   =  item.getElementsByTagName("id")[0].firstChild.nodeValue;
    		     var nome =  item.getElementsByTagName("nome")[0].firstChild.nodeValue;
    		     
    			 //será exibido sempre no fim da tabela
    			 var posicaoFimTabela = document.getElementById('tabelaPrincipal').rows.length;
    	         var x=document.getElementById('tabelaPrincipal').insertRow(posicaoFimTabela)
                 var y=x.insertCell(0);
                 var z=x.insertCell(1);
                 y.width = 30;
    			 y.align = 'center';
    			 substituirTexto(y, id);
    			 z.width = 290;
    		     substituirTexto(z, nome);
    	       }
    		   // Fim do processo da paginação propriamente dita
    		   
    		   //LimparTexto = função usado para limpar o texto e usada tb para a função substituirTexto
    	       var divCarregando = document.getElementById("carregando");
    	       divCarregando.style.display = 'none';
    	     }
    	   }
    	 }
       }

    Acima está o principal trecho, é responsável pela paginação do resultado.

    *sql.txt*
    
    CREATE TABLE `cidades` (
      `ID` int(10) unsigned NOT NULL auto_increment,
      `NOME` varchar(50) default NULL,
      PRIMARY KEY  (`ID`)
    ) TYPE=MyISAM AUTO_INCREMENT=1 ;
    
    INSERT INTO `cidades` (`ID`, `NOME`) VALUES
    (1, 'Recife'),
    (2, 'Olinda'),
    (3, 'São Paulo'),
    (4, 'Maceió'),
    (5, 'João Pessoa'),
    (6, 'Natal'),
    (7, 'Rio de Janeiro'),
    (8, 'Teresina'),
    (9, 'Salvador'),
    (10, 'Fortaleza'),
    (11, 'São Luiz'),
    (12, 'Osasco'),
    (13, 'Manaus'),
    (14, 'Paulista'),
    (15, 'Jaboatão dos Guararapes'),
    (16, 'Caruaru'),
    (17, 'cidade 17'),
    (18, 'cidade 18'),
    (19, 'cidade 19'),
    (20, 'cidade 20'),
    (21, 'cidade 21'),
    (22, 'cidade 22'),
    (23, 'cidade 23'),
    (24, 'cidade 24'),
    (25, 'cidade 25'),
    (26, 'cidade 26'),
    (27, 'cidade 27'),
    (28, 'cidade 28'),
    (29, 'cidade 29'),
    (30, 'cidade 30')

    Observações

    Existem algumas melhorias que podem ser feitas como, por exemplo: pode-se substituir o campo select com as quantidades de registro por página por uma caixa de texto para o usuário ficar livre de escolher quantos registro por página ele quer, porém não esquecer de validar a entrada de dados do mesmo.

    Essa é minha primeira matéria no iMasters e espero que seja apenas a primeira de muitas. Um grande abraço a todos e até a próxima.

    Faça o download do arquivo.

  • Pare de brigar com o relógio – parte II

    No artigo Pare de Brigar com o Relógio – Parte 01, comecei a falar sobre técnicas de gerenciamento do tempo. Apresentei algumas dicas e levantamos algumas questões que devem ser levadas em consideração para saber se estamos gerenciando bem o nosso tempo.

    Vou continuar apresentando algumas dicas que podem nos ajudar a gerenciar melhor nosso tempo. Nesta coluna será abordado o seguinte tópico: Aprenda a delegar tarefas. Nas próximas colunas desta série vou tratar, entre outras, das seguintes técnicas:

    • Utilizando a tecnologia a nosso favor;
    • Organizando reuniões mais produtivas;
    • Comunicação eficiente;
    • Otimizando o tempo em viagens de negócio;
    • Rede de contatos mais eficiente.

    Delegar Tarefas: Como fazer dar certo? Ao delegar uma tarefa, estamos transmitindo para outra pessoa atividades e compromissos que estão sob nossa responsabilidade. Normalmente o chefe transfere para um ou mais subordinados, uma ou mais atividades. Para que possamos delegar tarefas com sucesso devemos levar alguns fatores em consideração. De nada adianta delegar tarefas para ter mais tempo para outros trabalhos se o tempo gasto para acompanhar as atividades for maior do que o tempo economizado com a transferência das tarefas para outras pessoas. É a boa e velha relação custo x benefício. Pode parecer óbvio, mas é bastante comum a figura do chefe que transfere uma tarefa e quer acompanhar seu andamento bem de perto, nos mínimos detalhes. Esta postura acaba sobrecarregando o chefe e faz com que o subordinado pense que não merece confiança. Confira, a seguir, dez pontos que devem ser levados em consideração na hora de delegar tarefas.

    1.Conheça bem as pessoas com quem trabalha e para quem vai delegar tarefas. Transferir atividades implica em confiança e conhecimento. Você encarregaria aquele funcionário que nunca cumpre prazos de terminar um relatório de grande importância que você não pode concluir porque está em uma operação de emergência?

    2.Evite delegar tarefas que sejam de sua inteira responsabilidade ou aquelas que você simplesmente não gosta de fazer e quer passar para que alguém faça. Por exemplo, nem todo mundo é apaixonado por redigir relatórios, mas se o relatório for de sua responsabilidade não é correto nem ético delegá-lo a outra pessoa apenas para se livrar da tarefa incômoda.

    3.Seja claro e objetivo ao delegar uma tarefa. É fundamental que você seja claro em suas diretivas e expectativas em relação ao trabalho que está sendo delegado. Compare os dois exemplos a seguir:

    3.1. “Preciso que você faça um relatório sobre a situação da empresa em relação aos recursos de Informática. Você vai fazendo e à medida que surgirem dúvidas, entre em contato comigo”.

    3.2. “Preciso que você faça um relatório sobre todos os tipos de software utilizados pela empresa. O relatório deve ser dividido por unidade de negócio, com a relação completa de todos os programas usados e o número de usuários que utiliza cada programa. Você pode iniciar o trabalho fazendo um levantamento das licenças de software que dispomos. Esta informação pode ser obtida no setor financeiro. Na próxima quarta-feira teremos uma reunião às 9 h, na qual irei repassar todos os detalhes sobre este relatório. Em caso de dúvida não hesite em entrar em contato por e-mail ou telefone. Gostaria que você concluísse o relatório em 30 dias e me enviasse, via e-mail, uma descrição semanal do andamento das atividades. O objetivo deste levantamento é fazer a padronização dos nossos sistemas de Informática”.

    4.Observe que a definição do item 3.2 é bem mais clara. Descreve o conteúdo do relatório, define prazos, marca uma reunião para apresentação de mais detalhes, dá um ponto de partida, estabelece as formas de contato e, principalmente, o objetivo da tarefa. Já a definição do item 3.1 é muito vaga. Quando o subordinado recebe definições vagas ele inicia o trabalha de acordo com o que entendeu. Depois apresenta o trabalho para o chefe, que por sua vez diz que não era aquilo que queria. o funcionário altera o trabalho e novamente o chefe diz que não está bom. Então por que o chefe não diz de uma vez, de maneira clara e precisa, o que exatamente quer, ao invés de gastar tempo precioso dizendo o que não quer? Isto evita o stress de repetições desnecessárias, bem como o desgaste no relacionamento de trabalho.

    5.Outro fator fundamental é estabelecer prazos realísticos. Não adianta sobrecarregar sua equipe com prazos irreais. É necessário definir um prazo para a realização da tarefa, mas é igualmente importante que este prazo seja realístico. Caso contrário, você vai submeter sua equipe a uma pressão enorme, o que vai resultar em um trabalho feito de qualquer jeito, apenas para cumprir prazos, ou a tarefa não vai ser executada.

    6.Não se esqueça de que a responsabilidade das tarefas continua sendo sua. Se a pessoa para quem você delegou uma tarefa, não a cumpre ou o faz insatisfatoriamente, a responsabilidade é sua. Talvez você não tenha escolhido a pessoa correta, não tenha sido claro em suas diretivas, não tenha acompanhado devidamente o andamento da tarefa ou tenha definido prazos não factíveis.

    7.Não resolva problemas que não são seus. Por exemplo: um de seus subordinados tem dificuldades de redação e você acaba fazendo a redação dos relatórios que são de responsabilidade dele. Esta, evidentemente, não é a postura correta. Providencie um treinamento em redação de texto e redação comercial, incentive o aprendizado, enfim, ofereça as condições necessárias para que a pessoa possa realizar suas tarefas com eficiência. Dessa forma, além de incentivar o funcionário, você não fica sobrecarregado.

    8.Coloque os recursos necessários à disposição para que a pessoa responsável possa executar a tarefa. Muitas vezes simplesmente delegamos uma tarefa, sem nos preocuparmos se a pessoa tem acesso aos recursos necessários, quer sejam recursos de informática, humanos, financeiros ou de capacitação profissional.

    9.Estabeleça uma comunicação clara e precisa com os seus subordinados. Ao delegar a tarefa defina a comunicação de tal maneira que o subordinado receba instruções somente de uma pessoa. Isto evita orientações conflitantes e mantém um ponto único de contato. Deixe claro a importância da tarefa e as conseqüências do não cumprimento do prazo estipulado.

    10.Talvez o mais importante seja você se convencer da importância de delegar tarefas. Muitos chefes preferem continuar sobrecarregados, executando uma grande quantidade de trabalho. O que a empresa espera de você como gerente/executivo é um trabalho criativo na busca de novas soluções e resoluções de problemas ligados ao negócio da empresa, ou seja: resultados. Você não conseguirá desenvolver um trabalho deste nível se gastar a maior parte do seu tempo em tarefas operacionais que poderiam ser delegadas.

    Conclusão

    Delegar tarefas com eficiência é uma das melhores maneiras para poupar tempo, desde que observados alguns princípios básicos. Em primeiro lugar você deve estar convencido da necessidade de delegar tarefas. Para saber se você está atuando com eficiência, responda às seguintes perguntas:

    Você sempre fica com a impressão de que faria melhor se tivesse feito você mesmo?

    Você gosta que os outros fiquem com a imagem de que você é uma pessoa super ocupada, sobrecarregada de trabalho?

    • Você resiste em delegar tarefas e somente o faz em último caso ou em emergências?
    • Você somente delega as tarefas que não gosta de fazer, reservando para si os trabalhos que mais gosta?
    • Você se preocupa com o fato de que um subordinado possa realizar uma tarefa melhor ou de forma mais rápida que você?

    Se você respondeu SIM a alguma dessas perguntas, é chegada a hora de revisar seus conceitos a respeito de delegação de tarefas. Até o próximo mês, com a terceira coluna sobre gerenciamento de tempo.

    Obrigado e até a próxima.

  • A história do tempo dos buscadores

    A Internet, a Web e os mecanismos de busca – que atualmente são tratados quase como sinônimos – tornaram o acesso à informação mais simples e próxima da vida das pessoas.

    Antes da existência de buscadores como o Google e antes mesmo do nascimento da World Wide Web (rede de alcance mundial), ferramentas para localização de informações já haviam sido desenvolvidas e hoje formam os alicerces dessas facilidades.

    Em 1990, a grande dificuldade na busca e recuperação de dados motivou os estudantes canadenses Alan Emtage e Bill Heelan a criar a primeira ferramenta de busca. O Archie, como foi batizado, indexa nomes e descrições de arquivos e foi projetado para buscá-los em redes de acesso público em um servidor FTP (Protocolo de Transferência de Arquivos).

    Com a finalidade de efetuar a busca e a recuperação de documentos e serviços na Internet, em 1991, foi lançado o Gopher Internet Protocol, por Paul Lindner e Mark P. McCahill da Universidade de Minnesotta. Esse novo protocolo tinha como principal inovação a procura de arquivos dispostos na forma de menus. Um ano depois foi desenvolvido o Veronica, sigla para Very Easy Rodent-Oriented Net-wide Index to Computerized Archives, ferramenta para vasculhar palavras-chave nos títulos dos documentos, em servidores Gopher, ao mesmo tempo.

    Com o advento da Web, e em conseqüência de seu crescimento acelerado, começam a ser desenvolvidos os primeiros mecanismos de busca e, em 1993, surge a primeira ferramenta específica para pesquisa de suas páginas. Criada por Matthew Gray, ela foi chamada de Wandex, um robô de computador que contava servidores ativos. No mesmo ano, apareceu o similar Aliweb, uma das primeiras tentativas de criar motores de busca por palavras-chave, mas que causou o retardamento do sistema devido aos inúmeros acessos.

    Considerado a primeira ferramenta a permitir a busca por qualquer palavra, em qualquer página da WWW, o WebCrawler utilizou-se de robôs para localizar documentos na Web, indexar e extrair a informação dos documentos. Mas foi o Lycos que, no mesmo ano de 1994, se popularizou e se tornou uma das ferramentas de busca mais utilizadas naquela década.

    Após o sucesso do Lycos, várias empresas passaram a seguir o preceito de oferecer serviços eficientes, de forma organizada e de acesso rápido. Entre elas, Northern Light, Infoseek, Excite e AltaVista competiam com o Yahoo!, um diretório que surgiu em 1994 e conquistou os usuários, no decorrer do tempo, ao fornecer uma indexação de páginas por meio da sua categorização e descrição de cara endereço.

    Ironicamente, quatro anos depois, incentivados por David Filo, fundador do Yahoo!, dois jovens deram continuidade a um ousado projeto de criar uma ferramenta que possuísse a habilidade de rastrear os links na web, alcançando dados relevantes em grandes volumes de informações. Estava nascendo o Google, um buscador idealizado pelos fundadores Larry Page e Sergey Brin, que, com seus recursos e velocidade, tornou-se o maior portal de buscas da web e líder mundial do mercado. Utilizando de seu Page Rank (critérios para determinar a relevância dos assuntos dos sites, anexando as páginas mais procuradas em primeiro lugar na listagem), no ano de 2000, atingiu o número de um bilhão de sites em seu índice.

    Em 2004, a Microsoft lança o seu novo MSN Search (hoje, Live Search) e se junta aos gigantes Google e Yahoo! no grupo dos mais utilizados mecanismos de busca que agora, além de páginas, também fazem a procura de imagens, notícias, grupos de discussão etc.

    Desde então, o mercado de buscas on-line se tornou cada vez mais lucrativo e competitivo. Querendo inovar, outros tipos de ferramentas vêem sendo elaborados e colocados à prova. Alguns se destacam, como o A9, programa de busca da empresa de comércio eletrônico Amazon.com, que junta vários tipos de arquivos diferentes em uma mesma busca – simultaneamente na Web e dentro dos livros disponíveis em seu catálogo.

    Já o ChaCha.com aposta em um serviço com suporte humano, em tempo real, por intermédio de um chat para auxiliar seus usuários a encontrar o que precisam.

    O Brasil entra na disputa com dois portais. O Ontoweb é um buscador de informações governamentais de mídia eletrônica, primeiro no mundo a juntar engenharia de ontologias, semânticas, estruturas valorativas e técnicas de inteligência artificial para refinar os resultados. Já o Buscas.com.br, a ser lançado em 2007, aposta na regionalização da informação, permitindo uma melhor e maior apuração feita pelo próprio usuário, aprimorando sua experiência com mecanismos de buscas. Além disso, reunirá, em um único endereço na Web, inúmeros sites de buscas agrupados por países, possibilitando a localização do que deseja em diversos idiomas.

    Os atuais líderes, também apresentam seus experimentos. O Google com seu SearchMash oferece buscas personalizáveis com resultados do próprio mecanismo e de outros sites como o Wikipédia, por exemplo. Enquanto a Microsoft, por meio do Start, procura aperfeiçoar um serviço de página personalizada, bastante semelhante à que o líder do mercado já utiliza. Além disso, disponibilizou um curioso serviço protagonizado pela falastrona bibliotecária virtual Ms. Dewey, que faz de tudo para chamar a atenção do usuário.

    A evolução dos mecanismos de busca tem sido bastante expressiva, transformando a Web cada vez mais em um serviço de informação de cobertura universal, gerando usuários ávidos por melhores e consistentes dados, e é isso que o futuro aponta, uma busca intuitiva e precisa.

  • Introdução ao XAJAX

    Olá Pessoal. Não venho aqui para falar sobre o que é AJAX (acho que estamos saturados disso correto?), e sim sobre como utilizá-lo na prática. Vamos utilizar um Framework chamado XAJAX, www.xajaxproject.org. Existem inúmeros Frameworks para se trabalhar com AJAX que irão facilitar o desenvolvimento de seus softwares, mas tem alguns pontos que fazem deste Framework um dos melhores.

    O que é o XAJAX?

    XAJAX é uma classe open source em PHP que permite a vocês criar facilmente poderosas aplicações web em HTML, CSS, JAVASCRIPT e PHP utilizando AJAX. Aplicações que fazem uso do XAJAX podem fazer chamadas a funções escritas em PHP e atualizar o conteúdo de páginas, obterem acesso a um banco de dados etc, sem recarregar a página atual.

    Como instalar o XAJAX?

    A versão atual do XAJAX é a 0.2.4 (estável). Já está em desenvolvimento a versão beta 2, que irá provavelmente substituir a versão 0.2.x, na versão 0.5 do XAJAX onde foram feitas melhorias, e a melhor delas é a inclusão de suporte a plugins, como script.aculo.us por exemplo que teremos oportunidade de estudar. Iremos utilizar a versão 0.5 beta 2 que encontra-se disponível para download. Faça o download do arquivo, crie uma pasta chamada library dentro de seu servidor web e descompacte os arquivos do XAJAX dentro da pata library (a pasta pode ter qualquer outro nome, esse é o que eu costumo usar).

    A estrutura de pastas deverá ficar como da imagem abaixo.

    Ao utilizar o XAJAX em ambiente de produção as pastas examples e tests podem ser apagadas, pois as mesmas são só exemplos, e alguns bem interessantes.

    Ao primeiro exemplo

    Junto (e não dentro) da pasta library crie um arquivo chamado form.php, neste arquivo iremos cria um formulário para validar se os campos Nome e E-Mail estão preenchidos, utilizando o XAJAX sem recarregar a página. Clique na imagem abaixo e veja o código do arquivo form.php:

    form.php

    <?php
    require "./library/xajax/xajax_core/xajax.inc.php";
    require "./library/validacoes.php";
    ?>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>INTRODUÇÃO AO XAJAX</title>
    <?php $ajax->printJavascript('./library/xajax/'); ?>
    </head>
    <body>
    <form id="form" name="form" method="post" action="">
      <table width="300" border="0" 
      		align="center" cellpadding="1" cellspacing="1">
        <tr>
          <td colspan="2"><p>INTRODUÇÃO AO XAJAX</p><p>Validado o formulário </p></td>
        </tr>
        <tr>
          <td width="73"> </td>
          <td width="220"><label id="resultado"></label></td>
        </tr>
        <tr>
          <td align="right">Nome:</td>
          <td><input name="nome" type="text" id="nome" 
    	  					size="25" maxlength="50" /></td>
        </tr>
        <tr>
          <td align="right">E-Mail:</td>
          <td><input name="email" type="text" id="email" 
    	  					size="25" maxlength="75" /></td>
        </tr>
        <tr>
          <td> </td>
          <td><input name="btn" type="button" value="Validar" onClick="xajax_validaForm(document.getElementById('nome').value, document.getElementById('email').value);"/></td>
        </tr>
      </table>
    </form>
    </body>
    </html>
    Linhas 2 e 3
    • Na linha 2 é feita a inclusão da class library do XAJAX que iremos trabalhar e na linha 3 o arquivo(validacoes.php) onde iremos escrever a função de validação deste formulário;
    Linha 9
    • A função printJavascript() é a responsável pela saída dos dados de forma asincrona e é tem que ficar obrigatoriamente entre as tags do arquivo. O único parametro necessário a essa função é o diretório onde estão os arquivos do XAJAX;

    As linhas a seguir são do formulário, observem que todos os elementos utilizados na validação tem o parametro ID em sua tag.

    Linha 21
    • Dentro da celula é criado um label com id=”resultado” para que a resposta da validação seja impressa dentro deste label;
    Linhas 35 e 36
    • Nestas linhas criamos um botão, observe que seu type é type=”button” para que ele não submita a página, e ele ainda tem a tag onclick com uma função que irá chamar a validação dos campos. Dentro da função xajax_validaForm() passamos os valores dos campos nome e email.

    validacoes.php

    <?php
    $ajax = new xajax();
    
    // Registra as funções no javascript
    $ajax->registerFunction("validaForm");
    
    ####################################################
    #### FUNÇÕES JAVASCRIPT REGISTRADAS PELO XAJAX	####
    ####################################################
    
    function validaForm($nome = false, $email = false){
    	
    	// Instancia o objeto XAJAX response com
    	// codificação padrão ISO-8859-1
    	$objResponse = new xajaxResponse('ISO-8859-1');
    	
    	// Inicializa a variável de resultado
    	$res = "";
    	
    	// Verifica os campos e atribui strings a $res
    	if($nome == false)
    		$res .= "Preencha o campo nome<br />\n";
    	if($email == false)
    		$res .= "Preencha o campo e-mail\n";
    	
    	// Verifica $res
    	if(empty($res))
    		$res = "<font color=green>Formulário preenchido com sucesso!</font>";
    	else
    		$res = "<font color=red>".$res."</font>";
    	
    	// Atribui a variável $res ao label resultado
    	$objResponse->assign('resultado', 'innerHTML', $res);
    	
    	// Retorna a resposta de XML gerada pelo
    	// objeto do xajaxResponse
    	return $objResponse;
    }
    
    // Manda o ajax processar os pedidos acima
    $ajax->processRequest();
    ?>

    Linha 2 – Instânciamos o objeto xajax();

    Linha 5 – Registramos uma função, a qual podemos chama-lá com JavaScript (função chamada no botão do arquivo form.php). A única coisa que devemos observar é que sempre que formos chamar alguma função em nosso HTML sempre deveremos colocar “xajax_ ” antes do nome da função;

    Linha 11 – Criamos a função validaForm() com os parametros $nome e $email;

    Linha 15 – Instânciamos o objeto xajaxResponde() com parametro ‘ISO-8859-1’, para que não precisemos ficar utilizando as funções de codificação(utf8_encode() e utf8_decode()) de caracteres do PHP;

    Linhas 18 a 31 – Aqui simplesmente checamos se os campos foram preenchidos e configuramos a resposta que será impressa na tela;

    Linha 34 – De todas, a mais interessante. O método $objResponse->assign() tem 3 parametros, o 1º (‘resultado’) é o ID do objeto que ele irá atribuir os dados que serão especificados nos parametros 2º (como seré atribuido) e 3º parametro (o que será atribuido), em nosso exemplo a varável $res;

    Linha 38 – O objeto $objResponse retorna com a resposta de tudo que lhe foi atribuido;

    Linha 42 – Aqui o Ajax processa tudo e pronto!

    Agora é só testar.

    Muitos podem até dizer que é muito mais fácil fazer isso utilizando javascript ou mesmo vbscript, eu concordo, mais a ideia aqui é somente exemplificar o uso do metodo assign() e de muitos outros que iremos conhecer numa próxima vez.

    Faça aqui o download do exemplo acima.

    Obrigado a todos e boa semana.

  • Publicidade Offline X Publicidade Online

    Vivemos a era da mobilidade e da interatividade, correto? Você já parou para pensar se a nossa publicidade acompanhou esta evolução?

    Apesar do título deste artigo, não vou falar sobre as diferenças e/ou as vantagens de uma sobre a outra. Por que dependendo de que lado está o profissional de marketing, uma vai ser SEMPRE melhor do que a outra.

    Vou falar somente de evolução da Publicidade. E porque não vou falar sobre um ou outro modelo ? Simples. Porque a publicidade online DEVE ser uma evolução, ou melhor, um complemento da publicidade offline.

    Para que a publicidade online gere resultados satisfatórios para as empresas que investem nesta modalidade, é preciso tomar alguns cuidados pois, apesar de ser uma evolução, existem detalhes que diferem muito da Publicidade off-line.

    Vamos pegar alguns exemplos práticos:

    Liquidações:

    Existem centenas de campanhas de liquidações em curso no Brasil e todas estas campanhas são baseadas numa campanha publicitária no formato offline. Existe muita pouca ação efetiva no ambiente WEB.

    No RS, mais precisamente em Porto Alegre, existe o “Liquida Porto Alegre”, campanha que existe a 11 anos, com enorme sucesso de vendas, pois é realizada em fevereiro, um mês que tradicionalmente era fraco antes da criação desta liquidação. Em 1995, ano que surgiu esta liquidação, o uso da mídia tradicional como jornais, rádios e TV, além de outdoors e panfletos eram as únicas formas de divulgação da campanha.

    E hoje, 2007?

    Passaram-se 11 anos desde a 1ª campanha criada para o Liquida Porto Alegre e, acredite se quiser, a forma de divulgação continua a mesma, ou seja, mesmo com o surgimento da internet neste período, o investimento em publicidade continua sendo feito no mesmo tipo de veículo da década passada.

    E a Publicidade online?

    Não adiante “tentar” explicar para empresários, profissionais de marketing e publicitários que a Publicidade online pode ser segmentada de acordo com o perfil do cliente.

    Não adianta justificar com pesquisas sérias de mercado que o investimento em Publicidade online possui uma taxa de dispersão extremamente reduzida.

    Não adianta provar com cases reais que o correto na Publicidade é atingir o público-certo e com a informação que ele deseja receber no formato mais interativo possível.

    O investimento continua indo para a Publicidade offline.

    Alguém vai dizer: Mas dá resultado!

    Claro que dá, porque a verba para este tipo de publicidade é ENORME. E se forem analisar o ROI – Retorno sobre o Investimento -, com certeza muitos publicitários teriam dificuldades de justificar este investimento. Principalmente se houver uma comparação com o investimento feito na mídia on-line.

    Mas a cultura empresarial no Brasil é baseada naquilo que se consegue ENXERGAR E TOCAR.

    E a Publicidade online não se toca e não tem cheiro… E as vezes o empresário só olha os e-mails no final do dia….ou pior, só responde 24 ou 48 horas depois. Isso quando responde….

    Porque isto acontece?

    Simples. Existe um fator muito importante para que a Publicidade online seja deixada de lado neste tipo de ação.

    Falta de conhecimento do QUÊ pode ser utilizado neste tipo de campanha. Hoje a Publicidade online está extremamente amadurecida nos mercados americano e principalmente japonês. Lá, o investimento em Publicidade online alcança índices excelentes e com potencial de crescimento ainda maior.

    Poucos dias atrás recebemos a visita de uma grande agência japonesa interessada num intercambio de experiências e eles ficaram surpresos com o pouco investimento em mídia online no Brasil. No Japão, as grandes agências de Publicidade já possuem departamentos inteiros especializados neste tipo de planejamento, assim como algumas no Brasil.

    Ah! Planejamento de Marketing Digital! Não confundir Planejamento de Marketing com Plano de Mídia.

    Isto é assunto para o artigo da semana que vem. Mas voltemos ao tema principal deste artigo. E aqui no Brasil?

    Aqui a Publicidade online como Link Patrocinado, por exemplo, ainda é MUITO, mas MUITO BARATA.

    Pense bem: Suponhamos que sua empresa venda TV de Plasma. Você pagaria pela visita de um potencial cliente somente R$0,15, R$0,30 ou R$0,50?

    Em países que a Publicidade online está muito adiantada, este valor é no mínimo 10 X maior. Portanto a conclusão lógica é que o investimento feito em Publicidade online no Brasil é muito baixo e com excelentes resultados.

    Mas não pensem que esta maravilha vai durar para sempre. Em breve os valores deste tipo de Publicidade online irão aumentar consideravelmente.

    E quanto custa um anúncio no formato tradicional? Milhares e milhares de reais…

    O que se deve avaliar neste tipo de planejamento não é QUANTO vai custar e sim QUEM vai se interessar e dar retorno. O cálculo deste investimento deve levar em conta todos estes %.

    E a Publicidade online é insuperável neste quesito. Desde que seja bem planejada e que os profissionais de marketing envolvidos entendam do que estão fazendo. E existe uma diferença enorme entre usuários experientes de internet e profissionais com conhecimento de internet.

    Depois de 10, 15, 20 campanhas desenvolvidas, este profissional vai entender o que é preciso fazer. E o cliente terá o resultado desejado.

    Lançamento de produto

    Há pouco tempo atrás, um grande datacenter no Brasil lançou uma campanha para divulgar seus produtos. Esta empresa nunca tinha feito um trabalho de Publicidade e contratou uma agência de marketing tradicional para desenvolver este trabalho.

    Estranhei o fato de toda a publicidade de uma empresa que oferece serviços somente no ambiente WEB ser feita exclusivamente na rua. Principalmente através de outdoors espalhados por toda a cidade. Fiquei imaginando para quem era esta campanha.

    A campanha não foi feita no ambiente WEB para tentar impactar o potencial cliente quando ele estiver utilizando a internet. A campanha foi feita para quando milhares de pessoas estiverem na rua, passeando, namorando, fazendo compras, etc…

    Será que, neste exato momento, o empresário vai lembrar ao ver este outdoor que ele precisa trocar de provedor?

    Pense nisso, quando sua agência apresentar aquele Plano de Mídia com ações somente offline. Dinossauros são muito bonitos na tela da TV ou no cinema.

    Falei em dinossauro porque? Eu queria, na verdade, falar sobre Plano de Mídia. Mas não um Plano de Mídia do século passado.

  • Calcule a Idade Corretamente em Java

    Algum dia você vai precisar deste código!

    Em algum momento de sua vida como programador, seu sistema terá como Requisito Funcional o cálculo da idade baseado em uma data fornecida. Este micro artigo têm como objetivo apresentar uma solução pronta para o uso Ready to Use!

    Pré-Requisitos:

    1. Java SE 5 (1.5) plenamente instalado e configurado
    2. NetBeans 5.5 ou a IDE de sua Preferência

    Calculando a idade usando como parâmetro uma String

    Ao executar o código abaixo a resposta no console terá que ser 29

    Listagem 01. Classe Main.

    package artigo1;
    
    public class Main {
    
        public static void main(String args){
            Utils util = new Utils();
            System.out.println(util.calculaIdade("20-08-1977","dd-MM-yyyy"));
        }
    }

    Detalhe: conforme você verificou este método precisa de dois parâmetros:1) a data fornecida para o cálculo da idade. 2) o formato de data que você está utilizando ex: MM-dd-yyyy ou MM-yyyy-dd e etc… Acrescento ainda que este método é generalizado, isto é, pode usar qualquer formato de data e ele devolverá a idade correta.

    A Listagem 02 abaixo apresenta a classe útil referenciada acima:

    • package artigo1;
    • import java.util.Date;
    • import java.text.DateFormat;
    • import java.text.SimpleDateFormat;
    • import java.util.Calendar;
    • import java.util.GregorianCalendar;
    • import java.io.*;
    public class Utils {
    
        //Calcula a Idade baseado em String. Exemplo: calculaIdade("20/08/1977","dd/MM/yyyy");
        public static int calculaIdade(String dataNasc, String pattern){
            DateFormat sdf = new SimpleDateFormat(pattern);
            Date dataNascInput = null;
            try {
                dataNascInput= sdf.parse(dataNasc);
            } catch (Exception e) {}
            
            Calendar dateOfBirth = new GregorianCalendar();
            dateOfBirth.setTime(dataNascInput);
            
            // Cria um objeto calendar com a data atual
            Calendar today = Calendar.getInstance();
            
           // Obtém a idade baseado no ano
            int age = today.get(Calendar.YEAR) - dateOfBirth.get(Calendar.YEAR);
            
            dateOfBirth.add(Calendar.YEAR, age);
            
            if (today.before(dateOfBirth)) {
                age--;
            }
            return age;
            
        }
    }

    Calculando a idade usando como parâmetro um java.util.Date

    A Código abaixo apresenta o mesmo método com apenas uma diferença, pode ser utilizado um objeto do tipo java.util.Date para calcular a idade.

    Listagem 3:

       //Calcula a Idade baseado em java.util.Date
        public static int calculaIdade(java.util.Date dataNasc){
            Calendar dateOfBirth = new GregorianCalendar();
            dateOfBirth.setTime(dataNasc);
            
            // Cria um objeto calendar com a data atual
            Calendar today = Calendar.getInstance();
            
            // Obtém a idade baseado no ano
            int age = today.get(Calendar.YEAR) - dateOfBirth.get(Calendar.YEAR);
            
            dateOfBirth.add(Calendar.YEAR, age);
            
            //se a data de hoje é antes da data de Nascimento, então diminui 1(um)
            if (today.before(dateOfBirth)) {
                age--;
            }
            return age;
            
        }

    Até a próxima.

    Para Baixar o Código-Fonte Deste Artigo Clique Aqui. Ou http://br.geocities.com/consubr/artigos/Artigo1_Calcula_Idade.zip

    OBS: Este artigo, bem como o código-fonte, é de livre divulgação desde que citada a fonte.

  • Enquete utilizando Flash + PHP

    Nesse meu primeiro artigo para o iMasters, vou demonstrar como é possível integrarmos o Flash com uma tecnologia server-side como PHP para criarmos um sistema de votação on-line.

    O Flash por si só, não possui a funcionalidade de executar comandos no servidor. Sem falar em Flash Remoting (o que é mais recomendado), o Flash se comunica com o servidor através de um middleware, que nada mais é do que uma linguagem intermediária que fi**cará responsável em executar tarefas no servidor (Consultar bancos de dados por exemplo).

    Inicialmente criamos os arquivos PHP no servidor. Serão dois arquivos. Um responsável por ler os resultados da enquete e outro responsável por executar a votação.

    Arquivo “le.php”

    $conexao = mysql_connect("localhost","root","12345") or die ("Erro na conexão"); 
    mysql_select_db("testes"); 
    $enquete = 1; 
    $query = mysql_query("select opcao, count(opcao) as qtd from enquete where codenquete = " . $enquete . " group by opcao") or die ("erro=sim&msg=Erro na consulta: " . mysql_error()); 
    echo "erro=nao"; 
    while($registro = mysql_fetch_array($query)){ 
    echo "&opcao_" . $registro["opcao"] . "=" . $registro["qtd"]; 
    } 
    ?>

    O output desse arquivo é algo parecido com: erro=nao&opcao_1=10&opcao_2=7&opcao_3=4

    Arquivo “vota.php”

    $conexao = mysql_connect("localhost","root","12345") or die ("Erro na conexão"); 
    mysql_select_db("testes"); 
    $enquete = 1; 
    $insere = mysql_query("insert into enquete (codenquete,opcao) values (1," . $HTTP_POST_VARS["opcao"] . ")") or die ("erro=sim&msg=Erro na gravação: " . mysql_error() . "&opcao=" . $HTTP_POST_VARS["opcao"]); 
    echo "erro=nao&msg=dados gravados"; 
    ?>

    Bom, basicamente o Flash irá executar o arquivo PHP no servidor em segundo plano (sem recarregar a página) e irá esperar um output amigável (do tipo variavel=valor&variavel2=valor2).

    Vamos ao Flash

    No Flash criei para esse exemplo, um arquivo com a seguinte estrutura:

    O Layout é o seguinte:

    O código no Flash é :

    System.useCodePage = true; 
    /*Definimos os valores de cada radioButton*/ 
    op1_rb.setData(1); 
    op2_rb.setData(2); 
    op3_rb.setData(3);
    
    function leVotacao(){ 
        //Criamos o objeto LoadVars 
        var enquete = new LoadVars(); 
        //Callback executado quando terminar de carregar os dados 
        enquete.onLoad = function(){ 
            //A variável "erro" é definida no arquivo PHP 
            if(this.erro == "nao"){ 
                //Calculamos o total de votos
                    var total = Number(this.opcao_1) + Number(this.opcao_2) + Number(this.opcao_3); 
                    //Definimos o _xscale de cada barra com o percentual relativo 
                    barra1.b_mc._xscale = this.opcao_1/total*100; 
                    barra2.b_mc._xscale = this.opcao_2/total*100; 
    barra3.b_mc._xscale = this.opcao_3/total*100; 
    //Mostramos o total de votos 
    msg_txt.text = "Total de votos: " + total; 
    }else{ 
    //Mensagem de erro é exibida caso não consiga ler os dados
    msg_txt.text = "Erro !"; 
    } 
    } 
    msg_txt.text = "Atualizando ..."; 
    //Carregamos os dados a partir do php 
    enquete.load(urlserv + "le.php?" + (new Date().getTime())); 
    [c]/* usando o getTime fazemos com que nunca seja carregado um resultado que 
    esteja no cach do browser*/[/c] 
    } 
    //Atualizamos o gráfico
    leVotacao(); 
    function votar(){ 
    var voto = new LoadVars(); 
    var resp = new LoadVars(); 
    /* 
    Definimos a variável "opcao" em nosso objeto da classe LoadVars. 
    Essa variável será enviada para o PHP usando o método POST pelo 
    método sendAndLoad. 
    */
    voto.opcao = opcao_rb.getData(); 
    resp.onLoad = function(){ 
    if(this.erro == "nao"){ 
    //Caso a votação ocorra com sucesso 
    //Atualizamos a votação 
    leVotacao(); 
    }else{ 
    //Senão mensagem de erro é exibida 
    msg_txt.text = "Erro na votação"; 
    }  
    } 
    msg_txt.text = "Votando ..."; 
    /* 
    O método sendAndLoad envia as variáveis definidas no objeto que envia (voto) 
    para o arquivo PHP no servidor usando o método POST ou GET. 
    O resultado dessa operação é "enviado" para o objeto "resp" da mesma classe 
    LoadVars. Esse objeto deve possuir um callback "onLoad" para que saibamos 
    o momento em que o servidor terminou de executar os procedimentos de votação. 
    */
    voto.sendAndLoad("vota.php",resp,"POST"); 
    } 
    //Definimos o botão "votar_btn" para que execute a função "votar" quando for liberado.
    votar_btn.onRelease = votar;

    Devo lembrá-lo que para que este exemplo funcione corretamente, é necessário que você execute através de um servidor web que suporte o PHP com um servidor de banco de dados MySql. O banco de dados usado nesse exemplo tem o nome testes e a tabela usada tem o nome enquete com o seguinte layout:

    Espero ter ajudado com este artigo de como criar uma enquete usando Flash + PHP com banco de dados MySql.

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

  • Aumentando e Controlando Servidores com o FSRM

    Um dos maiores problemas que tenho encontrado nos clientes é a quantidade de arquivo não produtivo nos servidores de arquivos. Cheguei a ver um servidor com mais de 20GB de música mp3, sem contar os filmes e fotos. Todo esse conteúdo, além de consumir recursos físicos como servidores, consome tempo dos colaboradores e dos administradores, podendo ainda levar a empresa a ser multada por possuir arquivos que ferem a propriedade intelectual.

    Nessa série vou explicar como podemos utilizar o FSRM para aumentar a produtividade e o controle sobre os servidores de arquivos.

    File Server Resource Manager

    O FSRM (File Server Resource Manager) é um conjunto de ferramentas disponível apenas no Windows Server 2003 R2 que possibilita os administradores controlar e gerenciar a quantidade e os tipos de arquivos que são armazenados nos servidores. Com ele podemos estabelecer quotas por pastas, configurar os tipos de arquivos que podem ser gravados e gerar relatórios sobre a forma como está sendo utilizado o espaço em disco.

    Instalando o File Server Resource Manager

    1. Abra o Control Panel;
    2. Em Add or Remove Programs, clique Add/Remove Windows Components;
    3. Em Windows Components Wizard, selecione Management and Monitoring Tools e então clique Details;
    4. Clique File Server Resource Manager;
    5. Clique OK, depois em Next, e então clique em Finish.

    Bloqueando o armazenado de Audio e Video

    Para bloquearmos a gravação de arquivos de áudio e vídeo em um determinado diretório

    1. Click com o botão direito em File Screens, e click em Create file screen.
    2. Em File screen path, escreva o endereço local do diretório ou utilize o botão Browse. Selecione o modelo Block Áudio and Vídeo Files, click Create.
    3. Tente copiar um arquivo

    Abraços! Até a próxima matéria.