Image Image Image Image Image
Scroll to Top

Topo

Sistemas

23

nov
2011

Sem Comentários

Em Blog

Por Allison

Google pode criar concorrente para iTunes e iCloud da Apple

Em 23, nov 2011 | Sem Comentários | Em Blog | Por Allison

A relação do Google e a Apple não é mais a mesma. Embora diversos serviços da gigante da web estejam nos dispositivos rodando iOS, todo mundo sabe que as empresas não se dão como antes (Eric Schmidt até deixou o conselho da Apple). E isso tende a piorar, tendo em vista que o Google está preparando um concorrente para o iTunes e a nuvem de músicas da Apple.

O jornal New York Times teve acesso a informações preliminares sobre o lançamento da loja de músicas do Google. Seria um local no qual as gravadoras podem colocar seus MP3s disponíveis para que qualquer usuário compre. Esta proposta te parece familiar? O iTunes, a loja de músicas da Apple, funciona da mesma maneira.

Comprar as músicas é apenas uma faceta do negócio que Google aparentemente pretende lançar. Feito isso, o internauta teria a opção tanto de escutar a música por meio de streaming, sem armazená-la no dispositivo que estiver usando, como fazer o download (o que implica ter mais espaço em disco). Ou escuta como se fosse uma rádio online, ou tem a música ali o tempo todo.

Para que tudo funciona nos conformes, o Google estaria testando ferramentas de DRM, aquela proteção de direitos autorais que atrela o arquivo de música digital à conta do usuário (do Google, nesse caso). A Apple abriu mão do DRM em muitas das canções disponíveis na iTunes faz alguns anos.

Enquanto isso, o Google Music continua em beta. O aplicativo e serviço permite que usuários enviem suas canções para a nuvem (somente em alguns países). Caso a loja do Google realmente saia, o próximo passo é copiar o iTunes Match, maneira que a Apple encontrou de legalizar as músicas baixadas de forma não-lícita pelos internautas — a empresa cobra US$ 25 anuais por isso.

Fonte: TechTudo

Tags | , , ,

23

nov
2011

Sem Comentários

Em Blog
Código
Java

Por Allison

Criando uma Tag Library para carregar a imagem de um perfil do Gravatar

Em 23, nov 2011 | Sem Comentários | Em Blog, Código, Java | Por Allison

Há alguns dias eu estava querendo um tempo para estudar um pouco a API do Gravatar, que por sinal funciona muito bem aqui no WordPress. Lendo a documentação de uso, percebi que muito fácil de você obter a imagem de um perfil do Gravatar usando um hash do e-mail do usuário com criptografia MD5.

Primeiramente, como sou um usuário fanático do jQuery, tentei resolver a bronca direto por Javascript, mas acabei empacando na geração do hash MD5, não sei porque, mais aqui nenhuma implementação Javascript para MD5 funcionou, assim parti para o plano B, usando a API Java para gerar o hash MD5, perfeito, funcionou corretamente, tá bom, mas agora eu tenho a implementação lá em uma classe Java, como que eu ligo isto com a minha view HTML/JSP ?

Usando o VRaptor 3.4, fiz uma requisição AJAX/JSON e retornava o hash e fazia o carregamento da imagem via jQuery, assim:

01	$(document).ready(function(){
02	   $('#button').bind('click', function(){
03	      var email = $('#email').attr('value');
04
05	      var url = "<c:url value='/gravatar/get-md5/'/>";
06	      $.post(url, {email: email}, function(data){
07	         var url = "http://www.gravatar.com/avatar/" + data.string + "?s=200";
08	         $('#result').html($("<img/>").attr('src', url)).append('<br/><i>' + data.string + "</i>");
09	      });
10	   });
11	});

Na minha aplicação Java eu tinha duas classes, uma que implementava o hash MD5 e a outra que era o meu controller da requisição AJAX/JSON:

01	package com.wp.carlos4web.cpropriedades.md5;
02
03	import java.io.UnsupportedEncodingException;
04	import java.security.MessageDigest;
05	import java.security.NoSuchAlgorithmException;
06
07	public class MD5 {
08	    public static String hex(byte[] array) {
09	        StringBuffer sb = new StringBuffer();
10	        for (int i = 0; i < array.length; ++i) {
11	            sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(
12	                    1, 3));
13	        }
14	        return sb.toString();
15	    }
16
17	    public static String md5Hex(String message) {
18	        try {
19	            MessageDigest md = MessageDigest.getInstance("MD5");
20	            return hex(md.digest(message.getBytes("CP1252")));
21	        } catch (NoSuchAlgorithmException e) {
22	        } catch (UnsupportedEncodingException e) {
23	        }
24	        return null;
25	    }
26	}
27	// Controller.
28	package com.wp.carlos4web.cpropriedades.controllers;
29
30	import com.wp.carlos4web.cpropriedades.md5.MD5;
31
32	import br.com.caelum.vraptor.Get;
33	import br.com.caelum.vraptor.Post;
34	import br.com.caelum.vraptor.Resource;
35	import br.com.caelum.vraptor.Result;
36	import br.com.caelum.vraptor.view.Results;
37
38	@Resource
39	public class HomeController
40	{
41	    private Result result;
42
43	    public HomeController(Result result) {
44	        super();
45	        this.result = result;
46	    }
47
48	    @Get("/")
49	    public void index ()
50	    {
51
52	    }
53
54	    @Post("/gravatar/get-md5/")
55	    public void generateMD5Hash(String email)
56	    {
57	        String hash = MD5.md5Hex(email);
58
59	        this.result.use(Results.json()).from(hash).serialize();
60	    }
61	}

O código é bem simples, e funcionou, atendendo o que eu precisava, só que daí pensei em ‘componentizar’ essa solução, daí acabei refletindo e vi que seria inviável inicialmente, logo então pensei em uma solução alternativa à uma interação/codificação Javascript/AJAX, logo a única saída seria escrever uma tag própria para isso, pronto, encapsula a lógica em uma classe Java e vincula a mesma em uma tag acessível pelo HTML/JSP.

As tag libraries, ou tag support do Java são bem simples de serem utilizadas e implementadas, não sou um grande conhecedor, mas com algumas pesquisas na documentação consegui desenvolver a solução sem muitos problemas. Bom primeiramente precisamos criar a nossa classe que contém a implementação necessária, mais qual implementação ?

A implementação/ligação com a classe que gera o hash e que cria o elemento IMG para ser inserido no corpo da página HTML/JSP, o código da classe está na listagem abaixo e é bem simples, repare que os atributos ‘email’ e ‘imageSize’ são os parâmetros da nossa tag na página HTML/JSP.

01	package com.wp.carlos4web.gravatar;
02
03	import java.io.IOException;
04
05	import javax.servlet.jsp.JspException;
06	import javax.servlet.jsp.tagext.TagSupport;
07
08	import com.wp.carlos4web.cpropriedades.md5.MD5;
09
10	public class GravatarTag extends TagSupport
11	{
12	    private static final long serialVersionUID = 1066237315711135837L;
13
14	    protected String    email;
15
16	    protected int       imageSize = 200;
17
18	    @Override
19	    public int doEndTag() throws JspException
20	    {
21	        if(email != null && !email.isEmpty())
22	        {
23	            try
24	            {
25	                // Gera o hash MD5.
26	                String hash = MD5.md5Hex(email);
27
28	                // Monta a URL para a imagem remota.
29	                String url = "http://www.gravatar.com/avatar/" + hash + "?s=" + imageSize;
30
31	                // Monta a tag HTML IMG com a URL remota.
32	                String img = "<img src='" + url + "'/>";
33
34	                // Insere no corpo da página onde a tag está sendo chamada.
35	                this.pageContext.getOut().write(img);
36	            } catch (IOException e) {
37	                e.printStackTrace();
38	            }
39	        }
40	        return super.doEndTag();
41	    }
42
43	    public String getEmail() {
44	        return email;
45	    }
46
47	    public void setEmail(String email) {
48	        this.email = email;
49	    }
50	    public void setImageSize(int imageSize) {
51	        this.imageSize = imageSize;
52	    }
53
54	    public int getImageSize() {
55	        return imageSize;
56	    }
57	}

Como vocês viram o código é bem simples. Não existe regra sobre qual pacote deve ficar a sua classe, somente no arquivo TLD de descrição você deverá informar o caminho dela, exemplo: ‘br.pacote.pacote.SuaClasse’. Não esqueça:

  • Criar os métodos setters para os seus atributos, caso falte algum será gerada uma exception na sua aplicação.

Caso contrário não irá funcionar.

O próximo passo e a estruturação da nossa tag, para isso eu segui o padrão do desenvolvimento de tags, no meu diretório WEB-INF, eu criei um diretório tags e dentro dele um diretório com um nome significativo, neste caso ‘gravatar’. Dentro dele, seguindo a convenção, criei um arquivo .TLD com o nome da minha classe, logo ‘gravatar.tld’. Abaixo segue a codificação do mesmo, que também é bem simples e segue um padrão.

01	<?xml version="1.0" encoding="ISO-8859-1" ?>
02	<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
03
04	<taglib>
05	    <tlibversion>1.0</tlibversion>
06	    <jspversion>1.1</jspversion>
07	    <shortname>gravatar</shortname>
08	    <uri>http://carlos4web.wordpress.com/</uri>
09	    <info>Insere uma tag IMG com o gravatar de um usuário a partir do seu E-mail.</info>
10
11	    <tag>
12	        <name>gravatar</name>
13	        <tagclass>com.wp.carlos4web.gravatar.GravatarTag</tagclass>
14	        <bodycontent>JSP</bodycontent>
15	        <info>Say Hi</info>
16
17	        <attribute>
18	            <name>email</name>
19	            <required>true</required>
20	            <rtexprvalue>true</rtexprvalue>
21	        </attribute>
22	        <attribute>
23	            <name>imageSize</name>
24	            <required>false</required>
25	            <rtexprvalue>true</rtexprvalue>
26	        </attribute>
27	    </tag>
28	</taglib>

O próximo passo é usar a nossa tag, esta é a parte mais fácil da brincadeira, primeiramente, declare o import da nossa tag library:

1	<%@ taglib prefix="carlos" uri="/WEB-INF/tags/gravatar/gravatar.tld" %>

Agora é só chamar quando você precisar:

01	<table>
02	    <tr>
03	        <td valign="top">
04	            <carlos:gravatar email="carlosjrcabello@gmail.com" imageSize="30"/>
05	        </td>
06	        <td valign="top">
07	            <carlos:gravatar email="carlosjrcabello@gmail.com" imageSize="50"/>
08	        </td>
09	        <td valign="top">
10	            <carlos:gravatar email="carlosjrcabello@gmail.com" imageSize="100"/>
11	        </td>
12	        <td valign="top">
13	            <carlos:gravatar email="carlosjrcabello@gmail.com" imageSize="300"/>
14	        </td>
15	    </tr>
16	</table>

Lembrando pessoal, que segundo a API do Gravatar, quando a imagem do perfil não é encontrada, é retornado uma imagem padrão com a logo do gravatar. Caso você queira, existem mais parâmetros na API para customizar isso.

Conclusão

Bom pessoal, essa é uma solução do ‘mundo real‘ no desenvolvimento de aplicações WEB, porque? Com esse código, você investe um tempo X para fazê-lo, depois você ganha muito tempo somente reusando ele, lembrem-se dos princípios de agilidade e reusabilidade de código.

Este é um exemplo didático, está bem simples, quem quiser enriquecer esta solução com os outros recursos da API do Gravatar fique a vontade, no final será uma solução muito bacana e utilizável.

Download

Para quem quiser baixar o exemplo da tag, estou deixando disponível lá no Github o código junto da estrutura do projeto, segue o endereço abaixo:

https://github.com/carlosjrcabello/gravatar-tag-support

Referências


http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPTags6.html – contém exemplos bem claros de como utilizar.


http://stackoverflow.com/questions/224748/jsp-custom-tag-library-unable-to-find-setter-method-for-the-attribute – contém a solução para um problema que uma hora ou outra você irá passar, que é a ordem da declaração dos elementos no arquivo TLD.


http://java.sun.com/developer/technicalArticles/xml/WebAppDev3/ – Mais exemplos de como trabalhar com o arquivo TLD.

http://en.gravatar.com/site/implement/ – informações sobre a API e implementações.

Por enquanto é só pessoal, um abraço e até a próxima.

Dúvidas e comentário usem o espaço de comentários abaixo.

Fonte: Carlos4web

Tags | , , , , , , , , ,

03

set
2011

Sem Comentários

Em Blog

Por Allison

TrueCrypt 7.1 com Suporte Completo à Mac OS X Lion

Em 03, set 2011 | Sem Comentários | Em Blog | Por Allison

O projeto TrueCrypt anunciou a chegada da versão 7.1 da sua ferramenta de código aberto, multi-plataforma e destinada à criptografia de disco. TrueCrypt 7.1, a nova versão estável do projeto, dentro de um período de quase um ano, é uma atualização de manutenção que acrescenta compatibilidade total com sistemas de 32 e 64-bit (versões do Mac OS X 10.7 Lion).

Os desenvolvedores ressaltam que várias melhorias realizadas e algumas correções de falhas, (que afetam todas as plataformas suportadas) também estão incluídas neste release. Todos os detalhes sobre o TrueCrypt 7.1, podem ser encontraoas no seu histórico de versões. Além disso, ele está disponível para download para sistemas Windows, Mac OS X e Linux, e um tutorial para iniciantes também está sendo disponibilizado.

Fonte: Under-Linux

Tags | , , , , ,

30

dez
2010

Sem Comentários

Em Blog

Por Vinicius AC

Da timidez regional à quase liderança nacional

Em 30, dez 2010 | Sem Comentários | Em Blog | Por Vinicius AC

Fonte: http://www.fbde.com.br/cases_list.php?case=33

Da timidez regional à quase liderança nacional

Durante duas décadas, uma indústria familiar de autopeças,localizada no Sudeste do País, com atuação exclusiva no mercado regional, ofereceu produtos com qualidade aceitável para o perfil de clientes por ela atendidos. As vendas eram estáveis e a rentabilidade satisfatória.

A chegada dos concorrentes

Não demorou muito para novos concorrentes – pequenos e grandes – chegarem com toda força, trazendo com eles uma nova e dura realidade para a organização. O setor passou a crescer de 5 a 6% ao ano, enquanto o faturamento da empresa permaneceu estagnado e sua rentabilidade caía acentuadamente. Os concorrentes estavam mais atuantes e com agressivas estratégias de conquista de novos mercados.

Após essa dura constatação, os quatro sócios da indústria de autopeças procuraram o FBDE|NEXION para rever e reposicionar a empresa no mercado. Logo nos primeiros dias dos nossos trabalhos de consultoria, apontamos para uma questão determinante: uma forte resistência interna a mudanças.

Constatamos que, além da atuação exclusivamente regional, a área comercial estava inerte. Faltavam dinamismo, foco, gestão de clientes, gerenciamento eficaz do trabalho dos representantes comerciais e motivação da equipe.

A inibição comercial

A total inibição da empresa para tratar de assuntos comerciais refletiu fortemente na equipe de vendas. Sua carteira de clientes estava limitada, quase na sua totalidade, a 1.400 pequenas lojas de reposição de peças e, invariavelmente, velhos “conhecidos”dos representantes comerciais. A cultura do pequeno cliente e do “pensar pequeno” contaminou as gerências e, de certa maneira, até mesmo os sócios da organização.

O que todos pensavam e diziam era: Clientes de porte ou montadoras? “Não são para nós”.

Tínhamos uma missão num curtíssimo prazo, que era elaborar um planejamento consistente e definir novas estratégias com a menor margem de erro possível.

O primeiro passo era agir

Agir era a ordem e havia apenas uma saída: com muito planejamento e cobrança, romper o ciclo de inércia e conformismo, aplicando um “choque” geral, especialmente nos profissionais que lideravam os diversos setores da empresa.

Definimos um detalhado planejamento comercial e de marketing, coordenado pela consultoria e elaborado pelos gerentes e diretores da empresa.

O primeiro passo, para colocar nosso plano em prática, foi expandir os horizontes dos líderes, rompendo a idéia de que o mundo se resumia na região onde atuavam. Para isto, além dos programas internos, criamos e colocamos em ação um programa de visitas envolvendo todos os diretores e gerentes. Agora, independente das áreas onde atuavam, todos deveriam dedicar, nos três primeiros meses, uma semana de trabalho no “campo”.

Foram diversas viagens, visitas a feiras, empresários do segmento, clientes ativos e inativos, distribuidores e montadoras. Quinzenalmente, em reuniões coordenadas pela consultoria, cada executivo comentava o resultado de suas visitas e as soluções práticas para cada problema identificado.

É importante lembrar que as montadoras ainda eram uma meta considerada inatingível pela empresa.

Construção de uma nova cultura

Nesse momento, o processo de motivar e estimular o grupo para o exercício do pensamento estratégico era crucial para o sucesso da nova empreitada. Definimos e orientamos a contratação de um novo gerente nacional de vendas, considerando a necessidade de uma forte e efetiva liderança na área comercial.

Mas isto era pouco. Era preciso identificar as origens da falta de ousadia que paralisava a área comercial.

Mais uma vez, fomos a “campo” e o que estava previsto confirmou-se: oferta de produtos mais baratos, argumentação desprovida de informações técnicas e defesa unilateral dos interesses dos clientes eram práticas comuns entre todos eles.

Não podíamos esperar mais. Negociamos firmemente e conseguimos a adesão de novos representantes comerciais, que, efetivamente, interessavam à empresa.

A partir do novo planejamento comercial e de marketing, realizamos importantes mudanças, que envolveram filosofia, políticas e procedimentos de trabalho:

  • Abrimos 28 novas áreas de vendas e elaboramos estratégias específicas de atuação;
  • Nomeamos 32 novos representantes comerciais.

Para consolidar essa nova postura da companhia, também elaboramos e implantamos uma agressiva política de lançamentos de produtos e, em curto espaço de tempo, orientamos seis lançamentos.

Presença nacional

As montadoras, nosso “objeto de desejo” desde o início, eram a vitrina que faltava para agregar valor e imagem de qualidade ao portfólio, dando a chancela de “produto original” a toda linha de produtos da empresa.

A essa altura já estava definida a estratégia de atuar forte e prioritariamente no mercado de reposição, onde a rentabilidade e o giro da carteira compensavam amplamente.

O trabalho passou a ser sustentado por programas de definição de metas e de controles de atuação. Essa nova estrutura possibilitou aos representantes fazerem visitas sistemáticas a todos os clientes potenciais de cada região e assumirem compromissos junto a cada um deles.

Crescimento contínuo

Durante esse período de transformações, outras providências importantes foram colocadas em prática, dando sustentação a toda a reestruturação programada.

A empresa, estagnada há mais de 5 anos, entrou num processo de superação e evolução em todas as áreas. Seu quadro de funcionários, que antes contava com 120 pessoas, saltou para mais de 300 colaboradores. Dentro do tempo planejado, passou a fornecer produtos a seis montadoras de automóveis, caminhões e tratores. O número de clientes ultrapassou 6 mil e as 22 mil unidades/mês antes produzidas alcançaram a marca de 140 mil unidades/mês.

Acompanhando o ritmo das mudanças, foram lançados mais 12 produtos, com maior valor agregado e lucratividade interessante, passando a representar 37% do faturamento da empresa.

Atualmente, a tímida empresa regional ganhou atuação de destaque em todo o País. É a segunda maior do seu segmento e busca, de maneira consistente, alcançar a liderança do mercado, que, hoje, pertence a uma multinacional com unidades em vários países. E mais: com criatividade, diversificou os investimentos, fazendo com que novos negócios apontem para uma receita igual ou superior ao negócio original.

Este é apenas um dos casos de reestruturação comercial e de marketing conduzidos pelo FBDE|NEXION Consulting.

Tags | , , , ,