Javascript e Cookies

January 25th, 2008 by flaviocrispim

Para gravar dados do computador do usuário os sites usam cookies e exitem muitas funções já prontas na internet que fazem o trabalho que gravar um cookie ou para obter o valor gravado em um cookie.

Quase todos os exemplos que encontrei na internet, divide o trabalho em duas funções diferentes, em geral, algo como: setCookie e getCookie.

Cada uma destas funções tem os seus próprios parâmetros, a função setCookie, por exemplo precisa receber o nome do cookie a ser gravado, o valor e a data de validade.

O meu trabalho foi unificar as funções em uma única, tentei fazer um trabalho um pouco mais elegante do que usar split, substring e charAt, assim: RegExp.

A função unificada funciona tanto para gravar um valor quanto para obter o valor de um cookie. A idéia básica é: quando o parâmetro valor for usado, este será gravado no cookie, caso contrário deseja-se obter o valor atual.

/**
* Set/Retrieve a cookie
* To get a cookie to call: cookie(‘COOKIE_NAME’);
* To set/update a cookie call: cookie(‘COOKIE_NAME’, ‘COOKIE_VALUE’, ”);
* Expire time:
* – ‘1d’ to indicate expire in one day
* – ‘1h’ to indicate expire in one hour
* – ‘1m’ to indicate expire in one minute
* – defaults to one day.
*/
function cookie(name, value, expire){
if(name && value){
var cookie = [name, '=', value];
if(expire){
var e = {_m:60*1000, _h:60*60*1000, _d:24*60*60*1000, _:60*60*1000};
var params = /(\d*)(\w*)/.exec(expire);
var d = new Date();
d.setTime(d.getTime()+(params[1]*e['_'+params[2].toLowerCase()]));
cookie.push(‘; expires=’+d.toGMTString()+’; path=/’);
}
return document.cookie = escape(cookie.join(”));
}else if(name){
var reg = new RegExp(‘(‘+name+’=)(\\d*[^;]*)’).exec(unescape(document.cookie));
return reg?reg[2]:undefined;
}
return false;
}

JSP versus PHP? Não PHP no Tomcat. =P

January 19th, 2008 by flaviocrispim

Sou especialista em desenvolvimento de aplicações web, usando tecnologia J2EE.

PHP? Bem tenho um contrato de vários meses com um provedor e na prática, java é bem caro de se manter neste quesito para aplicações web, já PHP consome poucos recursos e todo provedor ofereçe suporte sem custos adicionais.

Ótima oportunidade de conhecer outra tecnologia, tenho algumas idéias de pequenos projetos, mas e para desenvolver e manter com o menor custo possível precisarei aprender RoR ou PHP, que são as tecnologias disponiveis por padrão no meu provedor.

Porque PHP? Encontrei mais referências, tem uma comunidade maior e bastante ativa e porque pretendo entender um pouco mais do wordpress (escrito em PHP), Ruby on Rails, fica para a próxima.

Por mais ridículo que pareça, decidi sem nenhum motivo em especial pesquisar se seria possível escrever uma aplicação PHP e usar o Tomcat como servidor. (aeuaue)

Funciona sim, mas como não passo de newbie em PHP, não sei se funciona plenamente a ponto de poder rodar um Bugzilla ou um Wordpress.

Receita

Ingredientes:
Modo de Preparo do Ambiente:
  • Primeiro Instale a JVM e em seguida descompacte o zip do PHP5 no diretório que desejar, sugiro c:\PHP;
  • Instalar o Tomcat, basicamente descompacte-o, ou no caso de arquivo ‘.msi’ use o wizard;
  • Criar a variável de ambiente JAVA_HOME apontando para o diretório do…      … java;
  • PHP_HOME para…         … c:\PHP;
  • CATALINA_HOME – para o diretório onde estão os arquivos do Tomcat;
  • Incluir na variável de ambiente PATH os caminhos: %CATALINA_HOME%\bin;%PHP_HOME%;%JAVA_HOME%\bin
  • Fechar todas as janelas de comando que estão abertas. ;)
Modo de preparo do PHP no Tomcat
  • No diretório c:\PHP existe um arquivo: ‘php.ini-dist’, faça uma cópia dele com o nome… ‘php.ini’;
  • Edite o arquivo php.ini e procure por ‘extension=php_java.dll’, verifique se a linha existe e se não está comentada, caso não exista… crie.

O arquivo zip PECL serve para alguma coisa sim. Existem alguns arquivos que precisam ser extraídos para a pasta raiz do PHP e um último arquivo que deverá ser usado como biblioteca no Tomcat.

  • No zip PECL extraia os arquivos: php5servlet.dll, php_java.jar e php_java.dll para o diretório c:\PHP;
  • No diretório webapps do tomcat, crie um diretório que servirá como raiz da aplicação PHP, exemplo phpdubsoup;
  • No diretório Raiz da aplicação crie também o diretório WEB-INF, dentro do WEB-INF crie o diretório classes, ainda no diretório WEB-INF crie um arquivo web.xml, contendo:

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!DOCTYPE web-app PUBLIC
  “-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”
  “http://java.sun.com/dtd/web-app_2_3.dtd”>
<web-app>
<servlet>
    <servlet-name>php</servlet-name>
        <servlet-class>net.php.servlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>php-formatter</servlet-name>
        <servlet-class>net.php.formatter</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>php</servlet-name>
        <url-pattern>*.php</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>php-formatter</servlet-name>
        <url-pattern>*.phps</url-pattern>
    </servlet-mapping>
</web-app>

  • No arquivo PECL extraia o arquivo phpsrvlt.jar e extraia o conteúdo deste arquivo jar para o diretório WEB-INF/classes da aplicação phpdubsoup;

O conteúdo do arquivo jar contém os servlets declarados no web.xml, mas na versão usada necessita de uma pequena correção nos arquivos properties, para referenciar corretamente a biblioteca ‘php5servlet.dll’

  • Editar os arquivos: ‘reflect.properties’ e ’servlet.properties’ que se encontram em: phpdubsoup/WEB-INF/classes/net/php. A variável library deve ser igual ao nome da biblioteca, assim:

library=php5servlet

  • Na raiz da aplicação phpdubsoup, criar um arquivo chamado test.php, contendo:

<?php phpinfo(); ?>

  • Abrir uma linha de comando, e digitar startup, para iniciar o tomcat.
Modo do Consumo

phpdubsoup2.PNG

Pronto! PHP rodando dentro do Tomcat. Não é a configuração que irei usar no meu site, mas é assim que darei meus primeiros passos nessa linguagem.

Referência: http://blog.taragana.com/index.php/archive/running-php-5x-on-windows-using-tomcat-4x-or-5x/

JavaScript Math. Signum

January 11th, 2008 by flaviocrispim

Esta função tem como objetivo indicar para um dado número, se o número está mais próximo do infinito negativo ou se está mais próximo do infinito positivo, exemplo:

signum(+321658) = 1
signum(-1452) = -1
signum(0) = 0

Esta função não existe no objeto Math. A idéia básica da construção desta função consiste em dividir o parâmetro de entrada por ele mesmo, e assim teremos 1 (exceto para x=0).

x/x = 1
-1/-1 = 1

O próximo passo, precisamos obter o resultado numérico ‘1′, mas desta vez, sem mudar o sinal, então dividimos o número por seu módulo:

-10 / |-10| = -10 / 10 = -1
15 / | 15 | = 15 / 15 = 1

Agora só ficou faltando e excessão de zero, por causa da divisão por zero, que é o nosso caso de excessão, então a função ficou assim:

Math.signum = function signum(x){
return (x/Math.abs(x))||x;
}

Tyger

December 15th, 2007 by flaviocrispim

No último post escrevi sobre um curta-metragem de nome “Terminus” e corrigindo a injustiça não posso deixar de mencionar este curta-metragem do Guilherme Marcondes.

A inspiração veio do poema de Willian Blake e de mesmo nome. O cenário é a cidade de São Paulo, a metamorfose é o resultado. Com uma mescla de técnicas, juntando cenas reais, boneco animado e adicionando animação, o resultado é um dos filmes mais bonitos do youtube.

O boneco é perfeito, as animações se parecem como grifitis vivos e por último, uma trilha sonora muito legal, a parte de ser uma produção brasileira, a interpretação e ilustração do poema de Blake resultou num lindo filme, parabéns a todos os envolvidos.

Produção: Guilherme Marcondes

Terminus

December 15th, 2007 by flaviocrispim

Ontem recebi um link de um vídeo do YouTube e resolvi postar algo sobre os vídeos que tenho vista nestes últimos tempos. O link que recebi foi do curta Terminus é um filme abstrato daqueles que não se consegue explicar porque se gosta. Adorei e cada vez que tento explicar do que se trata o filme mais sinto dificuldade em explicar.

O Cômico, o bizarro, o louco e o pesadelo estão todos misturados num ambiente anos 70, com trilha sonora progressiva realizado em 8 minutos, belo filme.

“After inadvertently offending a strange entity that accosts him on his way to work, a 1970s businessman quickly finds himself in the midst if a bizarre predicament.
What follows is a rapid descent into madness, a journey both eerie and darkly humorous.
The exact nature of the businessman’s tormentor is purposefully ambiguous, lending itself to a variety of interpretations.
Is ‘Terminus’ a surreal critique of human alienation in the modern urban environment? or is the protagonist’s struggle an internal one, his mysterious stalker a manifestation of his repressed subconscious mind?
Either way, ‘Terminus’s innovative visual effects and distinctively vintage atmosphere make it a highly engrossing experience.”

Produção: SPY Films

Workflow

December 8th, 2007 by flaviocrispim

É um confiável conjunto de padrões de atividade que podem ser repetidos por uma organização simétrica de recursos, regras, informações, fluxo de informações. Agrupados em um processo de trabalho que pode ser documentado e ensinado.

Seqüência de passos necessários para que se possa atingir a automatização de um processo de negócio, de acordo com um conjunto de regras definidas.

Conceitos

Workflows podem ser relacionados com vários conceitos nos campos que estudam a natureza do trabalho. O termo workflow é mais comumente utilizado na indústria, onde pode possui significados especializados:

Processos: processo é uma noção mais específica do que um workflow, e pode ser aplicado tanto a processos físicos quanto biológicos, por exemplo. No contexto dos conceitos relacionados ao trabalho, um processo pode se distinguir de um workflow pelo fato de possui mais bem definidas as razões, as entradas e as saídas. Enquanto a noção de workflow pode ser aplicada sistematicamente para qualquer padrão de atividade.

Planejamento e Scheduling: Um plano é a descrição da lógica necessária e o parcialmente ordenado de um conjunto de atividades requeridas para atingir um determinado objetivo dadas as condições.

O Workflow pode ser visto como uma realização dos mecanismos requeridos para executar o mesmo plano várias vezes.

Motivação

Workflow é considerado um fenômeno moderno. Embora existam vários exemplos de organização racional nas realizações históricas de povos antigos, como a construção das pirâmides, a idéia de separar o trabalho de quem estuda a natureza de como o trabalho será realizado e que organizaria este trabalho de uma forma melhor, é uma idéia moderna que muitos a atribuem ao filósofo escocês Adam Smith, através a obra publicado no século XVIII: The Wealth of Nations.

Smith se opunha aos conceitos da economia mercantilista, economia este que previa o acúmulo de reservas em metais preciosos como base para sucesso econômico da sociedade. Para Smith a essência era o trabalho, e que a divisão de trabalho teria um grande aumento na produção.

Um exemplo usado por Adam Smith foi a fabricação de pinos. Um trabalhador poderia fazer somente 20 pinos por dia. Mas se dez pessoas dividisssem os quase 80 passos necessários para fazer um pino, eles poderiam fazer um total de 48.000 pinos em um dia.

Características e fenômenos

Criação do Modelo: Problemas do Workflow podem ser modelados e analizados usando gráficos.

Medição: Muitos conceitos usados para mensurar os sistemas de agendamento em operações de pesquisa são úteis para mensurar workflows gerais.

Componentes de workflow

Um workflow geralmente é descrito usando uma técnica de diagramação formal ou informal, mostrando os fluxos entre os passos do processamento. Um único passo de processamento ou componentes de um workflow podem definidos em três tipos básicos de parametros:

Descrição de entrada: a informação, material ou energia necessaria para completar o passo.

Regras de mudança, algoritmos, que podem realizados por atribuições humanas ou máquinas, ou uma combinação.

Descrição de saída: a informação, material ou energia produzida pelo passo e que prove a entrada para o próximo passo.

Os componentes só poderão ser plugados um ao outro se a saída de primeiro componente possuir a entrada mínima necessária para o próximo componente. Desta forma, a parte essencial da descrição de um componente foca somente na entrada e saída e que são descritos em termos de tipo de dados e a semântica dos dados (significado).

Os algoritmos e as regras somente precisarão ser incluídas quando existir muitas alternativas ou caminhos para tranformar um tipo de entrada em um tipo de saída.

Quando os componentes não são serviços locais e são chamados através de uma rede, como através de Webservices, caracteristicas como QoS, disponibilidade e etc precisam ser consideradas.

Workflow Application

Uma programa workflow é onde vários programas, componentes e pessoas devem se envolver no processamento das informações para completar uma instância de um processo. Um exemplo seria considerar uma ordem de compra que se move atraves de vários departamentos para autorização e uma eventual compra. As ordens podem ser tratadas como mensagens, que são colocadas em várias filas para processamento. Um processo workflow envolve constantes mudanças e correções. Componentes novos poderiam ser introduzidos na operação sem nenhuma alteração de código.

Existem duas formas de construir aplicações workflow:

Liguagem workflow – linguagem própria, define todas as iterações homem-máquina e de software.

Biblioteca (API) – bibliotecas ou interfaces para abstrair somente a coordenação do trabalho.

Linguagem Workflow

É uma linguagem própria e dedicada que descreve todo o fluxo do workflow. Desde descrever as entradas e saídas de cada ponto no workflow, como também todos os fluxos alternativos do negócio. Geralmente as linguagens workflow possuem uma notação gráfica ou xml. Para cada ponto do workflow é possível configurar uma lista de Handlers para cada mudança do trabalho.

Algumas linguagens de workflow são:

  • XPDL
  • YAWL
  • SCUFL
  • Wf-XML

Biblioteca (API)

Forma onde uma aplicação de workflow é desenvolvida usando linguagem de programação em conjunto com bibliotecas que capturam a abstração de coordenar a coordenação das tarefas do sistema.

Exemplos:

  • Windows Workflow Foundation
  • Workflow OSID

Também é possível usar linguagens desenvolvidas para BPM (Business Process Modeling) para construir workflows. Contudo, para atingir o objetivo de especificar um workflow, as notações precisam ser ajustadas para capturar o tráfego de informações, definição de rotinas entre outros.

O principal problema de usar notação BPM é que este foi criado com a intenção de capturar os processos de negócio em um alto nível de abstração, ao contrário de disso, os Workflows considera um nível de detalhes alto o suficiente para possibilitar sua execução.

Referências:
Wikipedia – Adam Smith
Wikipedia – Workflow
Workflow Patterns

Template para criação de projeto com o Maven2

December 6th, 2007 by flaviocrispim

Para criar um projeto novo usando o Maven é bem rápido, bastam alguns passos para que o projeto esteja pronto e configurado com a sua IDE preferida.

Neste post vou descrever o passo-a-passo para a criação de um projeto WAR. Os passos de execução podem precisar de pequenos ajustes para que seja executado no seu ambiente de desenvolvimento.

As características do meu projeto são: Projeto Web, Struts, jUnit.

O Maven tem a capacidade de resolver todas as dependências do projeto a partir do arquivo pom.xml e desta forma fará o download de todas as dependências, no meu caso todos os Jar´s do Strut´s e do jUnit, bem como todas suas dependências, automaticamente.

Para realizar esta tarefa o Maven pode precisar acessar seu repositório padrão, e para tanto uma conexão com a internet é necessária. Como no meu ambiente de trabalho as conexões com a internet são realizadas através de Proxy HTTP, então um passo adicional precisa ser realizado para indicar ao Maven que suas requisições utilize o Proxy configurado, e fornecendo usuário e senha, caso existam.

Não vou descrever o processo de instalação do Maven, que é bem simples. Considero que para continuar você possui o Maven2 instalado e que o diretório $MAVEN_HOME/bin esteja no PATH da máquina.

1. Proxy HTTP (Opcional)

Editar o arquivo $MAVEN_HOME/conf/settings.xml

<settings>
    …
    <proxies>
        <proxy>
            <id>optional</id>
            <active>true</active>
            <protocol>http</protocol>
            <username></username>
            <password></password>
            <host>proxy.mycomp.com</host>
            <port>8080</port>
            <nonProxyHosts>mycomp.com, localhost</nonProxyHosts>
        </proxy>
    </proxies>
    …
</settings>

2. Criando o template do projeto

Neste passo vou criar o diretório que servirá como raiz do meu projeto, seguindo uma estrutura definida qualquer:

  • #cd $USER_HOME/projetos
  • /export/home/fsantos/projetos# mkdir –p testewar/modules
  • /export/home/fsantos/projetos# cd testewar/modules
  • …/testewar/modules# mvn archetype:create -DgroupId=com.mycompany
    -DartifactId=portal -DarchetypeArtifactId=maven-archetype-webapp

Em promeiro lugar foram criados três diretórios, dois deles foram criados explicitamente pelo comando mkdir –p testewar/modules e o terceiro diretório foi criado pelo maven e o nome deste diretório será o artifactId da aplicação, que neste caso é portal.

3. Criando o workspace
  • /export/home/fsantos/projetos/testewar# mkdir –p workspaces/eclipse_33
  • /export/home/fsantos/projetos/testewar# cd workspaces/eclipse_33
  • /export/home/fsantos/projetos/testewar/workspaces/eclipse_33# pwd
    /export/home/fsantos/projetos/testewar/workspaces/eclipse_33
    (Copiar este path)

Executar o eclipse, no meu caso é o Eclipse 3.3 e indicar o path “/export/home/fsantos/projetos/testewar/workspaces/eclipse_33″ como o caminho para o workspace.

Quando o eclipse termina de carregar terá sido criado o diretório “.metadata”,
deixo o eclipse de lado por enquando e minimizo.

4. Criando os arquivos de configuração de projeto do Eclipse
  • #cd $USER_HOME/projetos/testewar/modules/portal

  • …/projetos/testewar/modules/portal# mvn -Dwtpversion=1.5 eclipse:eclipse

Ao final deste, uma estrutura de diretórios foi criada usando a arquétipo padrão do Maven. Os arquivos .classpath e .project estão prontos e com as dependências já relacionadas.

5. Configurando o projeto no Eclipse

Com o Eclipse rodando, preciso importar o projeto já criado, estes passos serão necessários:

  1. File -> Import…
  2. Import -> General -> Existing Projects into Workspace
    1. Botão Next
  3. Select root directory:
    1. Browse…
    2. Apontar para o diretório portal
  4. Botão Finish

O projeto será importado mas falta indicar o caminho do repositório do Maven para que o Eclipse possa compilar os fontes:

  1. Window -> Preferences…
  2. Na janela Preferences: buscar por Classpath variables
  3. Adicionar a variável M2_REPO com o valor $USER_HOME/.m2/repository
  4. Clicar Botão Ok
6. Adicionando Struts

Para adicionar struts no meu projeto preciso apenas editar o arquivo: $USER_HOME/projetos/testewar/modules/portal/pom.xml

<project xmlns=”http://maven.apache.org/POM/4.0.0″
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd”>
    …
    <dependencies>
        …
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts-core</artifactId>
            <version>1.3.8</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        …
    </dependencies>
    …
</project>

Agora as dependências com o Struts e com o jUnit já estão relacionadas e a partir de agora qualquer comando do Maven executado, o download das bibliotecas será realizado, exemplo:

  • /export/home/fsantos/projetos/testewar/modules/portal# mvn compile

Como as dependências com as bibliotecas foram adicionadas depois da criação dos arquivos do projeto (Tópico 5), o que foi feito de proppósito para tornar claro como adicionar uma dependencia a um projeto já pronto. Será necessário executar:

  • …/projetos/testewar/modules/portal# mvn eclipse:eclipse
7. Comandos do úteis (Goals)
mvn clean Limpa os diretórios de bibliotecas e de arquivos compilados
mvn compile Compila projeto
mvn eclipse:eclipse Atualiza lista de bibliotecas referenciadas pelo Eclipse
mvn install Adiciona arquivo war no repositório local do Maven
mvn deploy Adiciona arquivo war no servidor de artefatos do Maven
mvn package Gera arquivo war
mvn verify Verifica as dependências
mvn war:war Gera arquivo WAR no diretório target
mvn war:inplace Gera WAR ‘explodido’ no diretório ’src/main/webapp’, de modo que possa realizar o deploy deste usando configuração do Tomcat
.
Desvantagem: diretórios criados: ‘WEB-INF/classes’ e ‘WEB-INF/lib’ não são removidos quando é executado comando mvn clean

about


This is the about me section, you will prob. want to edit this. If you want to change the image you may do so by changing the avatar.jpg located in the NewZen images directory.

search

navigation

archives

categories