quinta-feira, 10 de maio de 2012

Apache + PHP + .htc

Salve galera,

Na construção de um site, precisei usar alguns recursos avançados de css3. Dito isso, contarei brevemente minha historinha triste. Eu estava bem belo e feliz construindo o site e testando no firefox (normal), após deixar ele do com a cara que eu queria, como todo bom desenvolvedor, comecei a fazer os testes em resoluções diferentes e com navegadores diferentes. Como era de se esperar, e não é novidade pra ninguém, tentem adivinhar em qual deu incompatibilidade?! Alguém? Se alguém "chutou" Internet Explorer, está redondamente certo.

O efeito que eu estava aplicando é como esse, que podemos gerar no site http://css3pie.com/, para arredondar os cantos de uma div e colocar sombra, dando um efeito bacana.

Como tudo tem uma solução, descobri que tem uma gambiarra um pack de arquivos que adicionamos no servidor para funcionar no nosso amigo IE =)

Mas como nada é tão simples quanto deveria, temos que adicionar uma configuração no nosso servidor Apache, para ele reconhecer a extensão .htc, e ai sim corrigir o bug para o IE.

Primeiro temo que baixar o arquivo em:

http://cloud.github.com/downloads/lojjic/PIE/PIE-1.0beta5.zip

Depois temos que colocar o arquivo PIE.htc dentro da pasta onde temos nossos arquivos css.

O próximo passo é configurar o servidor para reconhecer esse arquivo:

No Slackware edite o arquivo /etc/httpd/mime.types, e adiciona a seguinte linha:

text/x-component .htc

No CentOS, edite o arquivo /etc/apache/conf/httpd.conf

AddType text/x-component .htc


Agora só reinicie o Apache e parta para o abraço!
Para testar, podemos usar o código gerado no site http://css3pie.com/.

Ex.:

 

.cssClass{

border: 1px solid #696;
padding: 60px 0;
text-align: center; width: 200px;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
-webkit-box-shadow: #666 0px 2px 3px;
-moz-box-shadow: #666 0px 2px 3px;
box-shadow: #666 0px 2px 3px;
background: #EEFF99;
background: -webkit-gradient(linear, 0 0, 0 bottom, from(#EEFF99), to(#66EE33));
background: -webkit-linear-gradient(#EEFF99, #66EE33);
background: -moz-linear-gradient(#EEFF99, #66EE33);
background: -ms-linear-gradient(#EEFF99, #66EE33);
background: -o-linear-gradient(#EEFF99, #66EE33);
background: linear-gradient(#EEFF99, #66EE33);
-pie-background: linear-gradient(#EEFF99, #66EE33);
behavior: url('PIE.htc');

}





Até a próxima

domingo, 6 de maio de 2012

WP7 Unit - Testes Unitários para Windows Phone

Salva galera,

Através desse poste, gostaria de informar o porte da API de testes unitários desenvolvida para Android, chamada Droid Unit, para sua versão Windows Phone. Ela tem mesmo objetivo que a versão Android, o objetivo de fornecer uma maneira muito simples de realizar testes unitários em aplicações para Windows Phone. Agora podemos realizar os testes da mesma maneira, tanto em aplicativos para Android ou para Windows Phone, e mantermos um bom nível de padronização em portes de apps.

Ela funciona da mesma maneira que a versão Android, inclusive em sua simplicidade. Como na versão para Android, na versão para Windows Phone o projeto está sendo liberado a créditos da Mobile Mind, e também espera obter feedback dos usuários.

Area OpenSource da Mobile Mind:

http://www.mobilemind.com.br/open-source.php

Página do projeto no CodePlex:

http://wp7unit.codeplex.com/

ScreensShot de um caso de teste funcionando



Até a próxima!

Droid Unit - Testes Unitários para Android

Salve galera,

Através desse poste, gostaria de comentar um sobre projeto que dei início a alguns mêses.. mas somente agora liberei como um projeto livre, a créditos da Mobile Mind. Se trata de uma simples e pequena API de testes unitários para o sistema operacional Android, ou para aplicativos desenvolvidos para Android. Essa API, apesar de ser "ridiculamente" simples, tem tudo o que esperamos em um teste unitário:

  • Garantia de consistência do código
  • Nos dá o feedback do que está acontecendo
Bom, poderiamos agregar inúmeras coisas a essa API, e justamente por esse motivo, seu projeto está sendo liberado como Open Source.. Então, se alguém se interessar em melhorar o projeto, ou até mesmo usar a api, fique a vontade, e se possível, dê seu feed back sobre o projeto.

Na página inícial do projeto, tem uma explicação de como a API é usada. É tão simples que pode ser explicada em algumas linhas. Hoje a Mobile Mind está usando ela em vários projetos, e astá satisfeita com seus benefícios.

Área OpenSource Mobile Mind:

http://www.mobilemind.com.br/open-source.php

Página do projeto no Google Code:

http://code.google.com/p/mobilemind-droid-unit/


ScreensShot de um caso de teste funcionando






Até a próxima!

quinta-feira, 3 de maio de 2012

Client Restfull Jersey

Salve galera!

Gostaria de compartilhar a solução de um erro que tive a poucos dias, e que me fez perder algumas horas...

Quando eu tentava converter uma lista no formato JSON em objeto, usando a api Jersey, era apresentado um erro. O formato da mensagem JSON que retornava era:


[{"id":2,"descricao":"RESTAURANTE"},{"id":3,"descricao":"MERCEARIA"}]


O erro era:

[com.sun.istack.SAXParseException2;
 lineNumber: 0; columnNumber: 0; unexpected element (uri:"", 
local:"id"). Expected elements are <{}categoria>]


Ou também:

XMLStreamException: JSON expression can not be empty



A configuração do cliente era:

ClientConfig config = new DefaultClientConfig();
client = Client.create(config);
client.addFilter(new LoggingFilter());
webResource = client.resource(BASE_URI).path(resourceName);


E forma de busca do servidor era:

WebResource resource = webResource;
ClientResponse response = resource.path(java.text.MessageFormat.format("{0}/{1}", new Object[]{max, first})).getRequestBuilder().accept(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class);
GenericType> genericType = new GenericType>(){};
List categorias = response.getEntity(genericType);





Então, após algum tempo de pesquisa, descobri que faltava uma linha de código na configuração do cliente:

config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,Boolean.TRUE);


E pronto, após adicionar essa configuração, tudo funcionou perfeitamente. Espero que ajude!

Até a próxima!