felipeNascimento.org(true);

Making the web a better place to live

Browsing Posts in Generic

Quero apresentar neste post, e em alguns mais que virão, como podemos criar uma aplicação completa a partir de não mais que 6 linhas utilizando o theWebMind.
Um de seus principais desafios é mostrar como podemos explorar muito mais de algumas de nossas capacidades, que são verdadeiros diferenciais contra as máquinas, ao mesmo tempo, sabendo extrair o que há de melhor nas máquinas, e que não temos sequer chance de concorrer. Sim, estou falando de criatividade, inovação, imaginação, versus habilidade matemática, lógica e performance ao se aplicar regras.
TheWebMind está em sua versão Pre-Alpha 2.0.0 e com certeza ainda ha muitas melhorias por vir, além de possíveis bugs a serem corrigidos.

Com o último release, uma das principais novidades é o módulo nativo Zend Models, que gera uma estrutura MVC utilizando o Zend Framework.

Caso ainda não conheça o Mind, como assim o chamamos, visite seu site oficial e veja a documentação.

Após ter baixado o último release do Mind e tê-lo movido para um diretório em seu ambiente de desenvolvimento PHP, por exemplo, https://localhost/thewebmind/, basta acessar tal endereço para vê-lo funcionando. Ao ser acessado pela primeira vez, o Mind tratará de criar um usuário padrão, que recomendamos que se altere a senha, e prepara o ambiente todo, mesmo que você nem perceba. A partir daí, ja estarás apto a sair usando o Mind.
Caso tenha tido algum problema nesta parte, visite a nossa FAQ e a página com detalhes sobre a instalação.

Sobre o sistema a ser desenvolvido:
Pensei no que preparar, de forma a mostrar de tudo um pouco, e por isto decidi fazer um sistema de posts, onde usuários pudessem criar posts, e outros usuários pudessem comentar os mesmos, além de dar uma nota de 1 a 5.

1º Passo, criando um projeto no Mind

Já logado na IDE do Mind, acesse o menu File, e então New Project. Um formulário será exibido solicitando algumas informações.
Note que não é necessário ter uma base de dados já funcionando para ir desenvolvendo o projeto, porém, ao se solicitar que o Mind gere os arquivos ou a base de dados, sim, neste momento será necessário a existência de um banco de dados já configurado. Aconselho a já cadastrar os dados para um banco de dados desde o início. Podemos ainda cadastrar duas bases de dados diferentes, uma para testes e outra pra produção.

2º Passo, escrevendo em WML

A sintaxe da linguagem WML é baseada no conceito NLP (Natural Language Processing), que consiste basicamente em ser semelhante a linguagem humana natural(Português, Inglês, Espanhol, etc), e ainda obedece ao conceito de programação discreta.
Caso precise de alguma ajuda nesta sintaxe, visite a documentação do Mind sobre WML.

O código que preparei para este protótipo foi o que segue:

Sabemos que todo login tem nome:caractere(60).
Também, o login tem idade:inteiro(). E login pode ter muitos post.
Sendo que cada post tem título:string(40, obrigatório).
E todo post tem descrição:texto().
Post pode ter muitos comentário.
Comentário tem mensagem:varchar(140).
Enquanto que todo o comentário
tem pontuação:inteiro(-1, {1=Ruim|2=Regular|3=Bom|4=Muito Bom|5=Ótimo}).

Para compreender o que foi escrito: apenas com estas 7 linhas de código conseguimos representar um problema relativamente complexo.
A instrução mais complexa é a ultima, onde especificamos que os comentarios terão uma pontuação, e que a mesma somente aceitará 5 opções de valores numericos. Apontamos -1 como tamanho do inteiro, para que o mesmo tenha um tamanho padrão, e então especificamos os valores válidos para este atributo e suas respectivas lábels. Para maiores detalhes, veja em na sessão de atributos na documentação do mind.

3º Rodando o projeto

Para rodar o projeto, o que atualizará o output do mesmo, será necessário ter o projeto já salvo com o código atual, e entao clicar no ícone Run project na barra de ferramentas sobre o editor do Mind, ou pelo menu Tools>Run/Simulate.
Neste momento, as saídas serão atualizadas tanto no painel de output, na parte inferior da tela, quanto na árvore contendo a estrutura do projeto, na lateral esquerda da IDE.
Confira algumas das saídas para este projeto:
Código DDL - criação da estrutura na base de dados

Diagrama ER para o projeto gerado

Árvore, representando a estrutura do projeto trabalhado

4º Gerando o projeto

Para gerar um projeto, use o menu Tools>Generate Project ou o ícone Generate Project sobre o editor do theWebMind.
Um wizard irá abrir com alguns passos a serem seguidos:

  1. Escolha o que planejas gerar. Nesta tela, selecione a opção que melhor se adapta. Escolheremos a segunda, para criar os arquivos, MAIS a base de dados no banco de dados que cadastramos como desenvolvimento.
  2. Na segunda tela, selecionaremos um módulo para ficar como responsável pelo código a ser gerado. Neste caso, selecionaremos o módulo ZendModels.
    – Note que há requisitos para usar este módulo, como htaccess ativo e a biblioteca library na raíz de seu servidor
  3. A terceira tela lhe oferecerá opções sobre o módulo selecionado ou detalhes do passo-a-passo. Neste caso, o ZendModels não tem nenhuma especificação extra, porém será perguntado se desejamos pular(skip) ou substituir (replace) as tabelas que já existirem no banco de dados. Como a base ainda está limpa, esta opção é indiferente neste momento.

Ao clicar em avançar, theWebMind irá automáticamente iniciar a gerar os arquivos e a interagir com a base de dados para criar as tabelas necessárias.
Ao término desta tarefa, lhe será oferecido um link, here que lhe levará aos arquivos gerados. Os mesmos também estão acessíveis em View>Temp Project Files.

6º Testando a aplicação gerada

Simplesmente fazendo isto, já temos um sistema pronto e funcionando de forma simples. Somente o que precisaremos fazer será editar as views para ter uma interface melhor adaptada à real necessidade.
Na modal onde vemos os códigos gerados, logo no topo da árvore que representa a estrutura de arquivos vemos um link com o nome do projto. Clicando nele seremos levados para onde a aplicação gerada esta rodando. Outra forma de chegarmos a estes arquivos paramovermos para outro servidor é atraves do endereço: <theWebMind root>/restrict/users/<user name>/temp/<project name>/root/

Publiquei o sistema gerado, sem nenhuma alteração, aqui, onde você poderá ver e testar como ficou o resultado.

Enfrentando possíveis problemas

Caso tenha tido algum problema ao gerar o mesmo sistema, verifique se o htaccess está aivo na configuração do seu server. Confirme também que a biblioteca do Zend Framework está no diretório raíz do seu servidor HTTP. O que enfrentamos também, foi que algumas configurações no apache limitam o htaccess, então teste removendo as linhas:

php_flag magic_quotes_gpc off
php_flag register_globals off

Enfim, tentei expressar neste post como podemos com apenas algumas poucas linhas, desenvolver uma aplicação já funcional com toda a estrutura e classes seguindo o padrão ZF.
Você encontra outro exemplo de aplicação gerada a partir do Mind no blog do Jaydson.
Espero ter um feedback sobre suas experiências a respeito do theWebMind.

Abraços a todos.

PHPClasses nomnee

No comments

Hey folks.
My PHP Class OFXParser is running to become one of the winers of the best 12 classes at PHPclasses.org.
Those who have interest, please, vote.
OFX is a XML based format for exchanging financial records between programs that manipulate this kind of information, like Intuit Quicken, Microsoft Money, Google Finance, etc..
This class provides a PHP solution to extract financial records from OFX files and also offering you a lot of methods to deal with these data.

To vote, visit: PHP Classes vote page

Well, we know how to remove an item from any Array in Javascript by using the splice method, but some times we want to remove an item by its value, not by its position.
The aparent solution is to run over the whole array and then find the element that maches with the value we want.
I prepared this small function in JavaScript to remove any item from a given Array by its value using a very optimized way with regular expressions. Notice that using regular expression was an option. Regular expression is a little bit heavier than running through the array using a extremely optimized “for”, then, it’s faster. Although, here goes this on line option to do this:

function removeItem(ar, item)
{
    return ar.join(';').
             replace(new RegExp("(^|;)"+item+"(;|$)"), ';').
             replace(/(^;)|(;$)/g, '').
             split(';');
}

This function is an one line function which returns the array already without the item that had the specified value.

I hope it helps you.

Absurd error using Internet Explorer

No comments

En:
Today, I fought with the following error in Internet Explorer: System Erro: -1072896658
I got curious, once it used to work prefectly in all the browsers, Internet epxlorer was blowing the error to me(ok, it is not a surprise at all)!
After a lot of tests and have searched all the web, I found out that our friend IE culdn’t build the Ajax object when it had come back if the charset of the current page was UTF-8. The solution? The absurdest one. I just had to change its charset to utf-8… yes, in lower-case.
Just the case changed the page itself.
I hope this post will help someone.


Pt:
Hoje me deparei com o seguinte erro no Internet Explorer: Erro de sistema: -1072896658 Fiquei curioso, uma vez que funcionava perfeitamente para todos os navegadores, exceto IE(o que não é nenhuma surpresa)! Apos muitos testes, e boas pesquisas na web, descobri que o IE nao conseguia construir o objeto ajax no seu retorno, caso o charset da página estivesse setado para UTF-8. A solução? Mais absurda que o problema, bastou setar o charset para utf-8. Sim, minúsculo, apenas. Espero que acabe ajudando alguem com isto, ja que me deu uma certa dor de cabeça.

jQuery at TargetTrust

1 comment

Jaydson e eu apresentamos uma palestra na TargetTrust nesa noite.
A palestra foi muito legal, e conseguimos prender bem a atenção dos quase 20 interessados.
Abaixo, encontramos os slides da palestra.
Vamos ver se não transformamos isso em um novo curso, focado em jQuery.