Submeti uma palestra sobre WEB2 e Ajax a um coordenador do FLISOL 2007 a ser realizado no dia 28 de Abril (aqui em Fortaleza será na FIC), estou aguardando uma resposta para informar o horário da palestra.

Essa palestra será mais ou menos um resumo do curso de AJAX avançado que pretendo ministrar agora em Maio na Faculdade Lourenço Filho pela Célual JAVA.

Durante essa semana que se inicia eu atualizo esse post com as informações detalhadas, mas reservem o próximo sábado para discutirmos sobre AJAX no FLISOL e juntem as moedas para um curso mais aprofundado no próximo mês… ah! e vai ser super barato, na verdade de graça, apenas com uma ajuda de custo de R$55,00 reais, graças à Célula Java - FLF! :)

[update 1]

Confirmado, minhas palestras foram aprovadas e são no período da tarde

http://www.psl-ce.softwarelivre.org/flisol/index.php/FLISOL_2007#Programa.C3.A7.C3.A3o

Preparem para discutir sobre ajax, javascript, melhores práticas e o escambau :) ….

[/update 1] 

O projeto "Computador para todos" é um fracasso, aliás nasceu fracassado. Melhor, qualquer iniciativa governamental seja de comunistas moderados (partido dos supostos trabalhadores) ou ex-comunistas (partido dos sociais-demoniocratas) tende a ser fracasso, sempre vi o projeto como uma besteira sem tamanho e que ia resultar em dinheiro desviado (profissionalismo dos nossos políticos). Por essência (por ser anarquista) não acredito que iniciativa de estado resulte em algo concreto para a comunidade, mas deixarei de lado o lado filosófico e vamos avaliar o estrago.

Recentemente foram divulgadas pesquisas que o óbvio aconteceu, compradores das carroças financiadas pelo estado trocaram a distro linux obscura por um mídia pirata do MS-Windows (default). Isso gerou uma confusão enorme como sempre e threads desnecessárias onde pessoas se atacam e conclusões precipitadas coibem as ações (ou pelo menos tentam).

O problema é que precisamos da popularização da informação. O acesso a grande rede é um passo fundamental para sairmos da idade das trevas que o Brasil vive para um mundo um pouco melhor. Crianças moldarem seus conhecimentos não pela mídia tradicional (já desgastada que temos com informações lineares sobre os mesmos assuntos se dividindo entre os amigos e os inimigos) mas criando um ambiente crítico onde elas bebem o conhecimento da fonte original e ultrapassam as fronteiras da escola.

Exemplo: quando Israel bombardear uma vila supostamente indefesa no sul do Líbano ao invés de esperar pelo Jornal tradicional de papel que sairá amanhã com conteudo mal traduzido de uma agência qualquer, aquela criança no centro-sul do Ceará a partir de uma fazenda já recebe a atualização da noticia no seu agregador de feeds do NYTimes e do Al Jazeera. Lê a opinião dos dois lados no conflito, tira suas conclusões e expõe sua crítica no dia seguinte aos professores para receber um embasamento maduro sobre esses assuntos. Claro que isso é um sonho, precisamos criar esse sonho.

Voltando ao assunto, os erros foram muitos, mas vou me concentrar  nos mais importantes: maquinas obsoletas, falta de estratégia de divulgação e distro errada.

Como fazia Jack The Ripper, vamos por parte:

  •  Máquinas obsoletas;

O mais importante em um pc usável não é o processador (influe), mas sim a memória, um PC com um processador menor mas com 512 de RAM é o mínimo aceitável, 1G seria o ideal. Diminui o processador se for o caso e aumenta a memória RAM, alías não consigo entender porque ainda se vende 128M, para que? manter o legado? que diabos roda em 128M?

Se querem salvar esse projeto o mínimo aceitável é 512M de RAM. 

Placa de vídeo é importante, nada daquelas rídiculas onboard de 16M pelo amor de algum deus. 

Esses dois itens já seriam suficientes pelo menos para dar uma "dignidade" ao projeto. 

Vi nesses dias uns pcs à venda pelo projeto em um grande varegista aqui em minha cidade com drives de disquete. Tirem a mer#@ do drive de disquete, o valor que economizará com isso dá para substituir o leitor de cd  e fornecer uma gravadora de cd ou pelo menos um pen-drive junto, isso custa barato, e o governo poderia comprar e distribuir pen-drivers com material promocional (em grande quantidade um pen-drive de 1G custa 5 dólares).

E as regras para as montadoras? Não há? Esse projeto corre o risco de ser um salvamento de sucatas, empresas picaretas que vão empurrar peças encostas pela isenção.

  • Estratégia de divulgação;

O povão só ouviu falar sobre o projeto, informações somente tiveram o pessoal especializado (que não é o foco), se querem popularizar a coisa tem que passar na grande mídia (leia-se criar um personagem na novela das 8 comprando o pc popular).

A Petrobrás gasta milhões de reais em propaganda sendo que ela não tem concorrência, porque não se faz uma propaganda maciça sobre o projeto na grande mídia com esse dinheiro? Ano após ano o governo seja de qual for o partido gasta nosso dinheiro se jactando sobre algo que não faz, enquanto projetos importantes ficam a ver navios à deriva de sua própria sorte.

Porque não ofereceram isenção fiscal para empresas de treinamentos formarem turmas especificas para o projeto?

Aliás as empresas só criam cursos para os programas mainstream, cursos são de MSWord e não "Editor de textos".

Uma política de criação de cultura em volta do projeto facilita a adoção do linux pela população leiga. 

  • Distro escolhida.

Nunca tinha ouvido falar em Metasys até semana passada, não tenho nada contra mas não queiram popularizar o linux com ela. Não da forma que está vindo. Como trabalho no setor público e sei que 99,9[dízima a perder de vista]9% das licitações são negociadas na surdina deveríamos investigar por quem e porque foi escolhido essa distro.

Onde está o XGL? duvido que alguem queira trocar o linux todo configuradinho com XGL num ubuntu abrindo qualquer tranqueira por uma midia pirata de um WinXP. 

Olhe que nem uso ubuntu, eu uso o debian-cdd-br, mas não vejo problema algum dos pcs do projeto virem com essa distro.

Temos que ver que o foco das pessoas é o usuário leigo, principalmente aquele que nunca teve contato com um computador, esse pessoal usa o computador como meio e não como fim (como nós).

Vão querer acessar o msn (eca, mas é a realidade), criar contas no orkut, navegar, abrir os anexos em formato MSOffice sem pensar duas vezes, jogar, e o que mais se puder imaginar… mas não só isso, os efeitos de última geração, o que meu vizinho-faz-vou-querer-fazer-tambem, usar a camera do meu tio estribado, comprar um iPobre para ouvir meus sertanejos no busão, entre outras coisas bacanas o linux faz da mesma forma senão melhor.

Se a distro não for uma popular com amplo suporte da comunidade o negócio não vai pra frente. Ninguem melhor para esse perfil hoje do que o Ubuntu (mais uma vez enfatizo que não a uso).

Enfim, a discussão é grande mas as ações precisam sair do papel, precisamos desse projeto por mais errado que tenha sido concebido. Que atitude tomaremos para impor a cultura livre de forma satisfatória?

Iniciarei uma série de artigos mostrando na prática como criar um sistema usando o framework Yahoo! YUI.

Nesse primeiro artigo usarei os templates "Grids CSS" para criar a(s) página(s) sem se preocupar com css (já iniciando dentro dos padrões web) e definirei os menus da aplicação usando os componentes de Menu do yui. Os modelos do framework são importantes principalmente se você não tem prática ou desconhece sobre Web Standards.

O framework

Primeiro vamos baixar e adicionar ao projeto as bibliotecas e templates do Framework. A pasta build contém as bibliotecas e folhas de estilo e a pasta examples contém modelos de usabilidade do framework.

Criando o modelo

Vamos criar uma página que será o front da aplicação. Crie um index.html e escolheremos um dos templates já disponibilizados. 

O próprio Yahoo! recomenda o uso do modo Strict mostrando que se comprometem com os padrões. Indicam no Getting Started a seguinte assinatura doctype:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!– layouts require "Standards Mode" rendering,  hich the 401-strict doctype triggers –>

Precisamos acrescentar a referência para os arquivos css do yui:

<link type="text/css" rel="stylesheet" href="js/yui/build/reset/reset.css" />
<link type="text/css" rel="stylesheet" href="js/yui/build/fonts/fonts.css" />
<link type="text/css" rel="stylesheet" href="js/yui/build/grids/grids.css" />

Definindo o esboço da página

Para usar o Grid CSS espera-se que exista a seguinte estrutura, onde os elementos já sao definicos como:

<div id="doc">
 <div id="hd"></div> <!– header –>
 <div id="bd"></div> <!– body –>
 <div id="ft"></div> <!– footer –>
</div> 

Dividindo a página em 3 regiões: hd (Cabeçalho), bd (Corpo) e ft (Rodapé).

Escolhendo o template 

 

Após criar-mos as marcações exigidas pelo Grids CSS escolheremos um dos templates definidos para controlar as regiões de conteúdo.

Esses templates controlam duas regiões de conteúdo pré-definidas pelo framework denominadas em região "primária" e "secundária" (ou sidebar)  como na imagem ao lado.

 

O Grids CSS provê 7 templates onde 6 deles especificam a estrutura de conteúdo em  região "principal" e "barra lateral". o Sétimo template define um layout sem a barra lateral onde a região principal ocupa toda a extensão da página.

A imagem ao lado exibe os templates com suas respectivas identificações.

Utilizarei o "yui-t2" nessa série. 

Esse template escolhido está mais próximo de um sistema padrão com boa largura (180px) para a região lateral onde ficarão os menus e 550px para a região de conteúdo.

Especificando o template

Acrescente no div "doc" a referência ao "class" do modelo escolhido.

<div id="doc" class="yui-t2">

 A página ficará assim:

… 

<body>
<div id=
"doc" class="yui-t2">
   <div id=
"hd"></div> <!– header –>
   <div id="bd"></div> <!– body –>
   <div id="ft"></div> <!– footer –>
</div>
</body>

… 

Definindo o conteúdo

Escolhemos um modelo que tem duas regiões de conteúdo. Vou acrescentar duas regiões definindo a área de menus e de conteúdo principal no corpo da aplicação:

<div id="doc" class="yui-t2">
  <div id="hd"></div>
   <div id="bd">
     <div id="menu" class="yui-b"></div>
     <div id="conteudo" class="yui-main"></div>
   </div>
   <div id="ft"></div>
</div>

Observe que a disposição não tem importancia porque a ordem dos elementos que definem as regiões de conteúdo é controlada no css que determina que o estilo "yui-main"(o principal) será à direita (no caso do nosso template escolhido).

Acrescentarei  na região do conteúdo principal (yui-main) mais duas regiões. Uma será para apresentar os formulários em cima da coluna "main" e os grids resultantes das ações dessess formulários na região de baixo, ficando assim: 

<div id="doc" class="yui-t2">
  <div id="hd"></div>
  <div id="bd">
   <div id="menu" class="yui-b"></div>
   <div id="conteudo" class="yui-main">
       <div class="yui-b">
         <div id="formulario" class="yui-g"></div>
         <div id="grid" class="yui-g"></div>
      </div>
   </div>
  </div>
  <div id="ft"></div>
</div>

Adicionando os Menus

Importarei os componentes usados para criar os menus dinâmicos. Acrescente:

<!– Dependências –>
<link type="text/css" rel="stylesheet" href="js/yui/build/menu/assets/menu.css" />
<script type="text/javascript" src="js/yui/build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="js/yui/build/event/event.js"></script>
<script type="text/javascript" src="js/yui/build/dom/dom.js"></script>
<script type="text/javascript" src="js/yui/build/container/container_core.js"></script>
<!– Componente –>
<script type="text/javascript" src="js/yui/build/menu/menu.js"></script>

Escolhi usar um modelo de menu clássico, para isso definimos a estrutura deles:

<div id="bd">
    <!– Menu –>
   <div id="menu" class="yui-b">
      <div id="basicmenu" class="yuimenu">
         <div class="bd">
             <ul>
               <li class="yuimenuitem first-of-type">Documentos
                  <div id="doc_menu" class="yuimenu">
                     <div class="bd">
                        <ul>
                        <li class="yuimenuitem"><a href="#">Novo Documento</a></li>
                        <li class="yuimenuitem"><a href="#">Pesquisa</a></li>
                        </ul>
                     </div>
                   </div>
                </li>
               <li class="yuimenuitem">Processo</li>
               <li class="yuimenuitem">Sair</li>
            </ul>
          </div>
      </div>
   </div>
   <!– Fim Menu –>
</div> 

Modifiquei alguns estilos padrões criando um outro arquivo css com as seguintes definições(aconselho a não alterar diretamente nos arquivos do framework, crie um outro arquivo de css e acrescente suas customizações porque no caso de um upgrade do framework você não as perde) :

div.yui-b p {
    margin:0 0 .5em 0;
    color:#999;
}
           
div.yui-b p strong {
    font-weight:bold;
    color:#000;
}
           
div.yui-b p em {
   color:#000;
}           
           
h1 {
   padding:.25em .5em;
   background-color:#ccc;
}

div.yuimenu {
    position:absolute;
   visibility:hidden;
   border:0px;
}

div.yuimenu li a {
   color: #3333FF;
}

#basicmenu {
    position:static;
    visibility:visible;
}
#bd{
   height:400px;
   /*background-color: #0059A5;*/
   width: 760px;
   margin-top: -13px;
}
          
#doc {
   width:760px;
}
          
.yui-b{
   width: 550px;
}
.yui-main{
   width: 550px;
}
.yui-g{
   width: 550px;
}

Instanciando o componente Menu

Acrescente os componentes:

<script type="text/javascript" src="js/yui/build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="js/yui/build/event/event.js"></script>

Adicione um evento para carregar os menus ao carregar a página.

YAHOO.util.Event.addListener(window, "load", YAHOO.example.onWindowLoad);

A função YAHOO.example.onWindowLoad é um Listener para o evento "load" do objeto window.

Definiremos o objeto Menu na função YAHOO.example.onWindowLoad

/**
 * @id YAHOO.example.onWindowLoad
 * @classDescription Instancia Menus
 * @param {Object} p_oEvent
 */

YAHOO.example.onWindowLoad = function(p_oEvent) {
    function hideSubmenus() {
        if(oMenu.activeItem) {
            var oSubmenu = oMenu.activeItem.cfg.getProperty("submenu");
            if(oSubmenu) {
                oSubmenu.hide();
            }
        }
    }

    function cancelTimer() {
        if(nTimeoutId) {
            window.clearTimeout(nTimeoutId);
        }
    }
   
    function onSubmenuMouseOut(p_sType, p_aArguments, p_oMenu) {
        cancelTimer();
        nTimeoutId = window.setTimeout(hideSubmenus, 100);
    }

    var nTimeoutId;
    var oMenu = new YAHOO.widget.Menu("basicmenu", { position: "static" });
    oMenu.render();
    var doc = oMenu.getItem(0).cfg.getProperty("submenu");
    oMenu.mouseOverEvent.subscribe(cancelTimer);
    doc.mouseOverEvent.subscribe(cancelTimer);
    doc.mouseOutEvent.subscribe(onSubmenuMouseOut, doc, true);

    YAHOO.util.Event.addListener(document, "click", hideSubmenus);
}

Criei funções para controlar o aspecto de "tirar o mouse sobre um Menu" para ele se recolher porque por padrão isso não acontece e é chato.

Definindo a estrutura dinâmica

No próximo artigo mostrarei como fazer um cadastro com upload de arquivos, por enquanto ficamos com esse exemplo já chamando um formulário no menu documento -> Novo Documento.

Links interessantes para exemplos feitos com o framework Ajax do Yahoo!

 

 

Utilidades e componentes

 http://developer.yahoo.com/yui/

 

 

Site do desenvolvedor do framework, Dustin Diaz

http://www.dustindiaz.com/

Site com contribuição do Dustin

http://www.thinkvitamin.com/

15 coisas legais para se fazer com a YUI

http://www.thinkvitamin.com/features/javascript/15-things-you-can-do-with-yahoo-ui

Treeview com DnD

https://secure0.forward-comp.co.uk/yui/cv/test.html

Exemplos diversos

http://www.thinkvitamin.com/misc/yui-demos/demo-04.html
http://www.thinkvitamin.com/misc/yui-demos/demo-06.html
http://www.thinkvitamin.com/misc/yui-demos/demo-09.html
http://www.dustindiaz.com/sweet-titles/

Esse é o mais bacana

http://www.thinkvitamin.com/misc/yui-demos/demo-13.html

Espero iniciar uma série de artigos cobrindo o framework já que estamos adotando nos novos projetos, coisas interessantíssimas estão saindo, mas muito experimental, assim que tiver coisa pronta eu posto.

 

* Atualização - [19-09-2006] 

Blog do projeto, vale assinar para acompanhar a evolução do framework

http://www.yuiblog.com/ 

Blog do Jack Slocum com material interessante e extensions

http://jackslocum.com/yui/index.php 

Alem é claro de especializados em ajax como o Ajaxian

http://ajaxian.com/by/topic/yahoo/ 

 

* Atualização - [24-09-2006]

Nate Koechley (Membro da equipe que criou o YUI) 

http://nate.koechley.com/blog/

Bill Scott (Evangelista YUI)

http://looksgoodworkswell.blogspot.com/ 

 

*Atualização - [26-09-2006]

A pedidos:  a lista de discussão sobre o YUI

http://tech.groups.yahoo.com/group/ydn-javascript/ 

Mais exemplos 

http://yuiblog.com/sandbox/yui/ 

 

* Atualização - [29-09-2006]

Sistema de CRM feito com YUI

http://www.sugarcrm.com/crm/demo/45-community-preview.html 

* Atualização - [10-10-2006]

Editor de texto que está sendo construído com YUI, acompanhem a evolução

http://blog.davglass.com/files/yui/editor/ 

Mais efeitos com YUI

http://blog.davglass.com/files/yui/effects/ 

Comentários para o sistema de conteúdo muito usado em blogs, o Wordpress.

http://www.milfont.org/blog/archives/83 

O framework da adobe denominado Spry tem efeitos interessantes que merecem uma atenção, é mais um framework para somar no desenvolvimento com Ajax.

« Previous PageNext Page »