Durante a execução de uma aplicação desenvolvida para o App Engine, utilizando o plugin mais recente do Goole para o Eclipse (Juno), pode ocorrer um ClassNotFoundException para a classe: org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory.
DatastoreJDOPersistenceManagerFactory é uma factory para o gestor de persistência do JDO. Uma extensão de JDOPersistenceManagerFactory, disponibilizada com o datanucleus-appengine (plugin do App Engine).
Essa classe não existe no pacote datanucleus-appengine versão 2. Portanto se você tentar executar uma aplicação desenvolvida para App Engine com JDO fique atento a versão que o plugin do Eclipse está assumindo.
Para evitar o erro acessa a tela do Eclipse com as propriedades App Engine do Projeto (Properties -> Google -> App Engine), e modifique o campo Datanucleus JDO/JPA version para v1.
@edermag
www.yaw.com.br
Showing posts with label Google. Show all posts
Showing posts with label Google. Show all posts
Monday, November 26, 2012
Tuesday, August 23, 2011
Solução em Java 7 para a prova do Google Developer Day 2011
Semana passada me diverti um pouco com a prova para o Google Developer Day 2011. A prova não é obrigatória, na verdade faz parte do processo de inscrição e dever ser utilizada como filtro para identificar as pessoas que se adequema o público alvo do evento: Developers.
A prova era composta por 5 questões, todas em torno de 2 textos do idioma Googlon.
Regras do idioma
Letras e ordem do idioma: t w d c r z p s v h m k l n f x q j b g
Esse idioma estipula grupos de letras:
- letras tipo foo: g, f, z, t e s
- letras tipo bar: todas as outras.
As preposições são identificadas com a seguinte regra: palavras com 3 letras que terminam com uma letra do tipo bar, mas que não pode ser m.
A regra para identificar verbos: palavras de 7 ou mais letras que terminam com uma letra do tipo bar. Caso a palavra seja um verbo e começe com uma letra do tipo bar, deve ser considerado um verbo de primeira pessoa.
E os números? As palavras são números. Esses números são formados em base 20, onde cada letra é uma digito ordenado do menos para o mais significativo (contrário do binário). Dessa forma a primeira posição é 1, a segunda é 20, a terceira é 400 e assim por diante. Outro detalhe importante: cada letra tem um valor (posição) conforme a ordem do alfabeto, por exemplo t é 0, w é 1, d é 2, etc. Ainda para os números, existem uma classificação de números bonitos. Em Googlon um número bonito deve ser maior ou igual a 502344 e divisível por 4.
Questões
Todas as questões contavam com uma dica do Google, elas eram respondidas levando em consideração a o texto A, mas o participante deveria responder considerando o texto B.
A solução
Na semana passada estava focado em terminar demos e a apresentação que fiz no TDC2011 em Floripa, sobre Java 7. Aproveitei o embalo pra implementar a solução da prova do GDD usando Java, mas com um detalhe especial: primeiro programa utilizando Java 7. Coloquei as letras na ordem do Googlon em um List e fiz um split do texto (uma String). Dessa forma iteirei sob as palavras para encontrar as preposições, verbos (1a pessoa tb) e números, além de aplicar a ordenação Googlon.
@edermag
www.yaw.com.br
A prova era composta por 5 questões, todas em torno de 2 textos do idioma Googlon.
Regras do idioma
Letras e ordem do idioma: t w d c r z p s v h m k l n f x q j b g
Esse idioma estipula grupos de letras:
- letras tipo foo: g, f, z, t e s
- letras tipo bar: todas as outras.
As preposições são identificadas com a seguinte regra: palavras com 3 letras que terminam com uma letra do tipo bar, mas que não pode ser m.
A regra para identificar verbos: palavras de 7 ou mais letras que terminam com uma letra do tipo bar. Caso a palavra seja um verbo e começe com uma letra do tipo bar, deve ser considerado um verbo de primeira pessoa.
E os números? As palavras são números. Esses números são formados em base 20, onde cada letra é uma digito ordenado do menos para o mais significativo (contrário do binário). Dessa forma a primeira posição é 1, a segunda é 20, a terceira é 400 e assim por diante. Outro detalhe importante: cada letra tem um valor (posição) conforme a ordem do alfabeto, por exemplo t é 0, w é 1, d é 2, etc. Ainda para os números, existem uma classificação de números bonitos. Em Googlon um número bonito deve ser maior ou igual a 502344 e divisível por 4.
Questões
Todas as questões contavam com uma dica do Google, elas eram respondidas levando em consideração a o texto A, mas o participante deveria responder considerando o texto B.
- Qual a quantidade preposições no texto B?
- Quantos verbos existem no texto B?
- Quantos verbos em 1a pessoa existem no texto B?
- Imprimir o texto B colocando as palavras na ordem alfabética do Googlon.
- Quantos números bonitos existem no texto B?
A solução
Na semana passada estava focado em terminar demos e a apresentação que fiz no TDC2011 em Floripa, sobre Java 7. Aproveitei o embalo pra implementar a solução da prova do GDD usando Java, mas com um detalhe especial: primeiro programa utilizando Java 7. Coloquei as letras na ordem do Googlon em um List e fiz um split do texto (uma String). Dessa forma iteirei sob as palavras para encontrar as preposições, verbos (1a pessoa tb) e números, além de aplicar a ordenação Googlon.
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import static java.lang.System.out;
public class Googlon {
static List<Character> alf_ordem =
Arrays.asList( new Character[] {'t','w','d','c','r','z','p','s','v','h',
'm','k','l', 'n','f','x','q','j','b','g'} );
public static void main(String[] args) {
String textoB = "prm pmqcf flqk mblz fzrr ..."; //um pedaco do texto B
int preposicoes = 0, verbos = 0, verbos1Pessoa = 0, numerosBonitos = 0;
//determina as letras do tipo foo
List<Character> foo =
Arrays.asList( new Character[]{'g','f','z','t','s'} );
//treeset com comparator resolvendo a ordem as palavras (questao 3)
TreeSet<String> listaEmOrdem = new TreeSet<>(new Comparator<String>(){
@Override
public int compare(String s1, String s2) {
int len1 = s1.length(), len2 = s2.length();
int lim = Math.min(len1, len2);
char chars1[] = s1.toCharArray(), chars2[] = s2.toCharArray();
int i = 0;
while (i < lim) {
char c1 = chars1[i];
char c2 = chars2[i];
if (c1 != c2) {
return alf_ordem.indexOf(c1) - alf_ordem.indexOf(c2);
}
i++;
}
return len1 - len2;
}
});
//aqui percorro todas palavras, para ordernar e validar
for (String s: textoB.split(" ")) {
listaEmOrdem.add(s);
if (isNumeroBonito(converteParaNumero(s))) {
numerosBonitos++;
}
if (s.length() == 3) {
if (!foo.contains(s.charAt(s.length()-1)) && s.indexOf('m') == -1) {
preposicoes++;
}
continue;
}
if (s.length() >= 7) {
if (!foo.contains(s.charAt(s.length()-1))) {
verbos++;
if (!foo.contains(s.charAt(0))) {
verbos1Pessoa++;
}
}
}
}
StringBuilder textoOrdenadoTeste = new StringBuilder();
for (String s: listaEmOrdem) {
textoOrdenadoTeste.append(s).append(" ");
}
out.println("1a resposta, qtde de preposicoes: "+preposicoes);
out.println("2a resposta, qtde de verbos: "+verbos);
out.println("3a resposta, qtde de verbos 1a pessoa: "+verbos1Pessoa);
out.println("4a resposta, o texto ordenado: "+ textoOrdenadoTeste);
out.println("5a resposta, qtde de numeros bonitos? "+numerosBonitos);
}
private static long converteParaNumero(String palavra) {
int n = 0;
long total = 0;
for (char c: palavra.toCharArray()) {
int codigo = alf_ordem.indexOf(c);
total += codigo * (long) Math.pow(20,n++);
}
return total;
}
private static boolean isNumeroBonito(long numero) {
//literal int com separador _ e a literal 4 em binario
return numero >= 502_344 && numero % 0b100 == 0;
}
}
Para rodar essa classe em versões anteriores do Java é muito simples, na ordem:- defina a tipagem de String na instância do objeto TreeSet no lugar do operador diamond.
- dentro do método isNumeroBonito, na linha 92, remova o "_" entre o número 502304 e utiliza 4 em decimal ao invés de binário (0b100).
@edermag
www.yaw.com.br
Sunday, December 06, 2009
Como Instalar Google GO no Ubuntu e Mac Os
Vou descrever quais são as etapas necessarias para instalação do Google GO, a nova linguagem de programação do Google, no Ubuntu 9.10 e no Mac OS 10.5 (Leopard).
Pré-requisitos para instalar e usar o GO:
O Python é pré-requisito para o Mercurial.
Uma vez que essas ferramentas tenham sido instaladas, a proxima etapa seria configurar algumas variáveis de ambiente que o GO usa:
Os comandos para instalação do Mercurial e GCC são:
Na sequencia é preciso criar a estrutura de diretórios e configurar as variáveis de ambiente (no arquivo ~/.bashrc):
Para baixar os fontes do GO, use o seguinte comando:
Para compilar os fontes do GO (a partir do dirétorio src):
Ambiente configurado no Ubuntu!
Baixe o Mercurial aqui, e instale o dmg.
Caso ainda não tenha o xCode, baixe aqui para resolver o GCC.
A seguir a criação das pastas e configuração das variáveis de ambiente no arquivo .bash_profile:
Para baixar os fontes do GO, use o seguinte comando:
Para compilar os fontes do GO (a partir do dirétorio src):
Pronto! Agora é só partir pro Hello World, veja um exemplo.
Pré-requisitos para instalar e usar o GO:
- Mercurial: ferramenta para controle de fontes (repositório) distribuído.
- GCC: compilador C.
O Python é pré-requisito para o Mercurial.
Uma vez que essas ferramentas tenham sido instaladas, a proxima etapa seria configurar algumas variáveis de ambiente que o GO usa:
- GOROOT: diretório raiz da instalação do GO.
- GOBIN: diretório com conteúdo binário.
- GOOS: sistema operacional.
- GOARCH: indica qual arquitetura para compilação.
No Ubuntu
Os comandos para instalação do Mercurial e GCC são:
$ sudo apt-get install mercurial $ sudo apt-get install bison gcc libc6-dev ed make
Na sequencia é preciso criar a estrutura de diretórios e configurar as variáveis de ambiente (no arquivo ~/.bashrc):
$ mkdir $HOME/go $ mkdir $HOME/go/bin $ mkdir $HOME/go/src export GOROOT=$HOME/go/src export GOBIN=$HOME/go/bin export GOOS=linux export GOARCH=386 export PATH=$PATH:$HOME/go/bin
Para baixar os fontes do GO, use o seguinte comando:
$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT
Para compilar os fontes do GO (a partir do dirétorio src):
$ cd $GOROOT/src $ ./all.bash
Ambiente configurado no Ubuntu!
No Mac OS
Baixe o Mercurial aqui, e instale o dmg.
Caso ainda não tenha o xCode, baixe aqui para resolver o GCC.
A seguir a criação das pastas e configuração das variáveis de ambiente no arquivo .bash_profile:
$ mkdir $HOME/go $ mkdir $HOME/go/bin $ mkdir $HOME/go/src export GOROOT=$HOME/go/src export GOBIN=$HOME/go/bin export GOOS=darwin export GOARCH=386 export PATH=$PATH:$HOME/go/bin
Para baixar os fontes do GO, use o seguinte comando:
$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT
Para compilar os fontes do GO (a partir do dirétorio src):
$ cd $GOROOT/src $ ./all.bash
Pronto! Agora é só partir pro Hello World, veja um exemplo.
Marcadores:
GO,
Google,
Programação
Sunday, July 05, 2009
Testando Google Wave
Essa semana fui um dos vários convidados para testar o Google Wave. A ferramenta esta em fase de testes, vários ajustes e melhorias devem ser efetuados, na minha opnião o conceito da ferramenta eh show de bola. Principalmente a ideia de plataforma aonde vc consegue criar/estender elementos e rodar no wave.
Veja essa página que comenta sobre extensões do Wave:
Vc tem 2 alternativas para criar elementos para o Wave:
Veja essa página que comenta sobre extensões do Wave:
Vc tem 2 alternativas para criar elementos para o Wave:
- Robots - robô que atua como um participante/convidado de uma determinada Wave, como por exemplo um corretor ortográfico.
- Gadgets - pequenos aplicativos que rodam dentro da Wave, e compartilham seu estado para todos os participantes da mesma Wave, como por exemplo um mapa com a rota para uma balada.
Marcadores:
Google
Sunday, May 31, 2009
Extensões GWT
Essa semana estava finalizando a estrutura para o mini-curso de Gwt, já esta quase fechado!
Um outro detalhe interessante a respeito dessa tecnologia eh a possibilidade de criar ou usar bibliotecas/extensões de Componentes Visuais (UI), tornando o desenvolvimento bem mais produtivo.
Desenvolvendo com gwt tive experiência com a extensão GXT, Gwt Ext através do gwt usa o framework javascript Ext, que sem duvida é uma suite bem completa e "rica". Veja o show case aqui.
Essa semana encontrei uma outra alternativa um concorrente chamado SmartGwt. Os componentes são bem parecidos com o GXT, mas na minha opinião a grande vantagem é a licença, além de open-source o SmartGwt eh LGPL. Compare, acesse o show case aqui.
Gosto muito do conceito de bibliotecas visuais, provavelmente por usar essa ideia quando trabalhava com Delphi. Um outro exemplo que dispensa comentarios é o JSF que no seu core foi projeto para isso, confira aqui.
Um outro detalhe interessante a respeito dessa tecnologia eh a possibilidade de criar ou usar bibliotecas/extensões de Componentes Visuais (UI), tornando o desenvolvimento bem mais produtivo.
Desenvolvendo com gwt tive experiência com a extensão GXT, Gwt Ext através do gwt usa o framework javascript Ext, que sem duvida é uma suite bem completa e "rica". Veja o show case aqui.
Essa semana encontrei uma outra alternativa um concorrente chamado SmartGwt. Os componentes são bem parecidos com o GXT, mas na minha opinião a grande vantagem é a licença, além de open-source o SmartGwt eh LGPL. Compare, acesse o show case aqui.
Gosto muito do conceito de bibliotecas visuais, provavelmente por usar essa ideia quando trabalhava com Delphi. Um outro exemplo que dispensa comentarios é o JSF que no seu core foi projeto para isso, confira aqui.
Sunday, May 24, 2009
GWT no OpenTDC
OpenTDC foi demais, só pra variar a Globalcode detonando em mais um evento. Curti a palestra de Arquiteturas JSF, principalmente pela abordagem na visão de sistemas corporativos, maiores. As palestras sobre Agile e TV Digital foram show de bola!
No fim do eventou rolou um painel de JavaFX(Maurício Leal), Flex(Rafael Nunes) e GWT(Eu). Foi interessante falar do GWT apesar do tempo ter ficado apertado.
Parabéns pra Globalcode!
No fim do eventou rolou um painel de JavaFX(Maurício Leal), Flex(Rafael Nunes) e GWT(Eu). Foi interessante falar do GWT apesar do tempo ter ficado apertado.
Parabéns pra Globalcode!
Marcadores:
Globalcode,
Google,
Gwt
Subscribe to:
Posts (Atom)