Realizando consultas na base de dados do Parse

Essa semana eu iniciei uma série de posts sobre o Parse, serviço de cloud do Facebook. Neste segundo post vou abordar como realizar consultas em nossa base. Caso não conheça o Parse veja o post de introdução: https://www.fellyph.com.br/blog/tutoriais/parse/.

No post anterior abordamos um pouco sobre consultas, primeiro resgatamos todos os valores de uma base com a função “find”, em seguida resgatamos um único item com a função “get”. Criei um cadastro de carros com as propriedades: modelo, ano e valor para cadastrar os dados utilizei os mesmo padrão do post anterior:

INDEX.HTML

APP.JS

Cadastrei algumas informações na minha base para realizar a consulta:

Captura de Tela 2014-01-16 às 19.53.32

Agora vamos dar uma olhada em algumas funções que podemos trabalhar com a classe Query. A primeira delas será a função equalTo:

equalTo

Na função equealTo passamos dois parâmetros, o primeiro o nome da propriedade e a segunda o valor que você deseja comparar, detalhe sobre a função que sua consulta é case sensitive.

notEqualTo

A função notEqualTo é o inverso da função equalsTo ela retorna todos os valores diferentes do valor repassado. Também é possível realizar queries compostas:

O função oposta seria lessThan ela retorna apenas os valores menores:

limit

Por padrão as consultas tem um limite 100 resultados por query, podemos modificar esse resultado de 1 até 1000. Para aplicar esse limite utilizamos a seguinte função:

first

Em nossa query podemos resgatar apenas o primeiro resultado isso é possível com a função first:

skip

Podemos definir o limite de resultados e também podemos definir o índice inicial do resultado com a função skip, com essas duas funções podemos criar um esquema de paginação.

ascending & descending

Além de criar filtros, busca por valores, limitar a busca… criar paginação… Pensa que acabou? Não ainda podemos ordenar nossa consulta(por ascendente ou descendente):

O resultado será o seguinte:

Captura de Tela 2014-01-17 às 18.08.08

Outra opção com listagem de valores maiores para menores:

containedIn & notContainedIn

Caso queiramos realizar a consulta com mais de um modelo de carro, por exemplo, podemos utilizar a função containedIn ela espera um Array como parâmetro:

O inverso da função containedIn seguindo o padrão é a função notContainedIn, ela retorna o resultado das palavras diferente das que constam no Array:

exists & doesNotExist

O Parse permite criar objetos com propriedades vazias ou modificar os objetos depois de criados adicionando novos atributos, assim os objetos antigos ficam sem a informação gravada, para isso podemos utilizar a função exists para verificar se o objeto possui informação gravada na propriedade requisitada.

Vamos a um exemplo:

No código acima verificamos os itens que tem a propriedade year cadastrada, o inverso seria:

matchesKeyInQuery & doesNotMatchKeyInQuery

A matchKeyInQuery serve para comparar dois objetos de classes diferentes que possuem duas propriedades iguais, por exemplo:

No código acima temos duas class Team e Users esta classe deriva do Parse Porque é uma classe especial, vamos falar dela em um próximo post. Mas voltando a query, comparamos duas propriedades “hometown” e “city” presentes na classe User e Team quando eles forem idênticos apareceram em nossa consulta.

select

Caso queira consultar propriedades específicas com a função select passamos as keys das propriedades que queremos:

Captura de Tela 2014-01-17 às 20.01.44

No caso da imagem acima utilizei a mesma função de exibir os resultados, por conta de utilizar o select a coluna valor veio “undefined” porque eu só escolhi duas propriedades “model” e “year”.

startsWith

Na função equalsTo ele retorna valores estritamente idênticos, com a função podemos resgatar valores que iniciam com a String repassada, ela tem um funcionamento parecido com o operador LIKE do MySQL. Esta consulta também é case sensitive.

Captura de Tela 2014-01-17 às 20.29.05

count

A função count conta “Dan”, isso mesmo ela serve para contar o número de itens do resultado ela funciona da seguinte forma:

No exemplo anterior eu realizei um filtro sobre a query e a função count tem o tratamento similar a função find, falando nela podemos aplicar as duas em conjunto sem problemas. Temos outras queries aplicadas em objetos relacionais mas isso vamos abordar em um futuro. Até o próximo post Pessoal.

Crie aplicações na nuvem com Parse

No ano passado tive oportunidade de conferir o Parse Developer Day em San Francisco, foi o primeiro e um dos melhores eventos que conferir lá na capital da tecnologia. O Parse para que não conhecer é um serviço de cloud para aplicações e games mobile. Ele tem suporte a IOS , Android, Windows Phone, Unity e JavaScript.

fotos-parse-developer-day-2

Dentre os serviços que o Parse oferece, temos:

  • Cloud Storage
  • Push Notification
  • Social Connection
  • Hosting
  • Analytics
  • Cloud Code

Neste tutorial vou dar uma introdução sobre o serviço de Cloud Storage com JavaScript esse recurso possibilita salvarmos informações em um server sem precisar de uma linguagem Back-end, também podemos utilizar o JavaScript SDK junto com Phonegap e exporta-ló para diversas plataformas. O JavaScript SDK é baseado no framework BackBone.js: Isso possibilita total compatibilidade com aplicações que usar tal framework. O JavaScript SDK não possui dependência por outras libs, você pode trabalhar com Parser + JS e mais nada, mas claro que você pode utilizar outras libs. Durante o tutorial eu vou falando sobre mais recursos. Agora vamos aos passos iniciais.

Primeiro passo é realizar o cadastro no site do Parse: https://parse.com/. Não se preocupe com questões de preço eles fornecem um pacote free bem “parrudo”. O plano free tem 1 milhão de requisições/mês e 1 milhão de Pushes Notifications/mês. Se sua aplicação realiza mais de um 1 milhão de requisições mês já está na hora de ganhar algo com seu app ou repensar no esquema de requisições que ele realiza.

Captura de Tela 2014-01-13 às 00.39.17

Você pode criar uma conta passando os dados convencionais ou vincular sua conta a uma conta do Facebook/GitHub . Com sua conta devidamente criada ele vai liberar para você um painel para você administrar suas aplicações.

Captura de Tela 2014-01-13 às 00.43.00

Crie sua aplicação clicando no botão “+ Create New App”, só adicionar o nome do seu app:

Captura de Tela 2014-01-13 às 00.50.37

E você já tem uma aplicação na nuvem!

Agora vamos fazer um pequeno exemplo para ler e gravar informações na nuvem. Precisamos realizar o download do JavaScript SDK:

https://parse.com/downloads/javascript/parse-js-blank/latest

Ou utilizar o link da CDN :

Com o Parse devidamente importado temos vamos ao código de nossa aplicação:

No código acima temos um markup simples em HTML, no final de nosso código temos a parte que interessa que é o nosso código JavaScript. após chamar o Parse via CDN no segundo bloco de código JavaScript inicializamos o Parse com a função “Parse.initialize(“APPLICATION_ID”,”JAVASCRIPT_KEY”)” esse dois parâmetros você deve substituir pelo application ID e o JavaScript Key de sua aplicação, você vai descobrir essa informação no settings de sua aplicação, na imagem abaixo temos marcados o application id e o JavaScript Key.

app-id

Copie as duas infos e substitua em sua inicialização. Na linha seguinte criamos um objeto da classe “MyObject” ela estende do Parse.Object, ele é responsável por toda regra de armazenamento de dados. Quando chamamos a função extend o Parse irá verificar em sua base se existe a classe MyObject, caso não exista ele irá criar uma nova base de dados com a classe. Também não é necessário definir o esquema padrão para armazenamento previamente, as propriedades do elemento podem mudar, não é uma ação recomendável, mas você pode adicionar uma propriedade nova em sua classe sem precisar criar uma nova classe.

Nesse ponto eles simplificaram ao máximo, você chega a não acreditar como isso funciona. Na linha 18 ele cria uma nova instancia(test) da Classe MyObject e por fim na linha 20 ele salva essa instancia passando um objeto com as informações que serão salvas nesse momento temos um códido “like jQuery” temos mais uma função atrelada a then ela será disparada caso os dados seja gravados com sucesso, essa função também recebe um objeto no callback se inspecionarmos esse objeto teremos os seguintes valores:

Captura de Tela 2014-01-13 às 19.18.35

Como podemos ver na imagem acima recebemos um objeto com uma série de informações que foram gravadas em sua aplicação, algumas informações úteis como o ID do objeto esse atributo é um identificador único do objeto na aplicação, também podemos verificar os atributos do objeto salvo.

Se testarmos nossa aplicação e ela retornar um alert significa que as informações foram salvas. Para verificar isso basta acessar o painel database no dashboard de sua aplicação como na imagem a seguir:

Captura de Tela 2014-01-13 às 17.26.47

Como podemos ver a informação está salva na nuvem, agora vamos para algo mais prático no próximo exemplo eu vou montar um cadastro de TODO-LIST. O código vai ficar um pouco extenso por isso vou separar o código em dois(HTML/CSS), primeiro vamos ver o nosso HTML:

Em seguida o nosso JavaScript, comentei algumas linhas mas também vou comentar a seguir.

Nas primeiras linhas inicializamos o Parse, em seguida criamos algumas variáveis para armazenar alguns itens importantes em nosso app. A função initApp será disparada por um listener para quando nossa página for totalmente carregada. Continuando na função initApp inicializamos nossa Class Tasks. Na linha 11 chamamos a função showTasks ela será responsável por exibir nossas tasks. Nas últimas 3 linhas adicionamos um listener para nosso form, guardamos o container das tasks a ul com id list-tasks e o input que iremos digitar nossas tasks.

Na Função “showTasks” temos um item novo, para realizamos uma consulta em nossa base utilizamos a Classe Parse.Query(“Tasks”), armazenamos ela na variável “query” com a função find pedimos para resgatar a lista de valores cadastrados, também podemos atribuir callbacks para serem chamados em caso de sucesso ou erro. Em caso de sucesso recebemos um array de objetos, tratamos o array e o exibimos em nosso ul.

A função “onSubmit” é disparada quando o usuário tenta salvar alguma informação, utilizei o submit para utilizar o recurso de required de nosso input, nesta função pegamos o dado cadastrado no input e passamos para função saveTask.

A “saveTask” será responsável por salvar os dados na nuvem, não comentarei essa função porque já abordamos o assunto anteriormente sobre salvar objetos na nuvem.

Até o momento nosso app só salva os itens agora vamos implementar um função de editar os itens, mas antes vamos adicionar um CSS para sinalizar nossos itens editados. vamos adicionar o seguinte CSS:

Detalhe para o código acima a regra aplicada para quando o elemento com class .item-task tiver sua propriedade setada para true ele receberá uma linha sobre o texto.

Em nossa função initApp adicionamos o evento de click para lista com:

Adicionamos o tratamento no click:

Atribui o click no “ul” pelo fato de não implementar o click em cada filho, observo o item pai e valido se o meu target foi o “li” e pego as informações contidas no elemento e passa para a função editTask o id do elemento e o novo valor da variável done. Agora vamos ao código da função editTask:

Na função editTask instanciamos uma nova query e realizamos uma busca pelo id da task com a função get, caso a função ache o item, executamos a função success modificamos a propriedade com a função set e salvamos novamente a nossa task. Esse esquema não possui nenhum esquema de tratamento para controle de requisições e em todo o clique iremos executar um nova requisição.

Para finalizar vamos adicionar uma função para excluir a task, na função showTasks, em cada “li” vou adicionar um button com o id de cada item vou adicionar somente a linha modificada:

Agora vou adicionar na função clickList uma condicional para quando o usuário clicar no button:

No código acima quando o usuário clicar no button eu passo o id da task para função removeTask que possui o seguinte código:

Na função removeTask realizamos uma Query para resgatar o objeto pelo id, quando recebermos a task chamamos a função destroy como nome sugere ela é responsável por remover o dado.

O objetivo desse tutorial era mostrar as funções básicas do Parse e entender o seu funcionamento, os dados estão abertos para todos os usuários, ou seja todo mundo que usasse esse app compartilharia a mesma lista de task. Nos próximos posts pretendo abordar questões de usuários, vincular os dados por usuário e criar seções. Coloque o código completo no gitHub para baixar o código basta acessar o link:

https://github.com/fellyph/Tutorial-bbUI/tree/master/parse-tutorial/www

Referência:
https://parse.com/docs/js_guide#javascript_guide

Segundo post da série:

https://www.fellyph.com.br/blog/tutoriais/realizando-consultas-na-base-de-dados-parse/

Talks 2013

2013 começou com tudo, em fevereiro rolou Wordtalks 3 na DRC treinamentos e o meeting do BlackBerry Dev Group na sede da BlackBerry aqui em São Paulo. Wordtalks é um formato de evento que já comentei aqui no blog, são um ciclo de palestras com parceria com alguns alunos.

O meeting da BlackBerry é um encontro realizado pelo developer group São Paulo, o evento contou com 3 palestras uma minha, outra com Demian Borba e Rodrigo Peixoto. Foi apresentada a plataforma BlackBerry.

1819_609386292409024_1733567219_n

No evento foram distribuidos para os participantes aparelhos Dev Alpha, tendo a possibilidade de participar do Trade Up, programa que permite para trocar o Dev Alpha por uma edição especial para desenvolvedores. Alguns dos participantes do já começaram a receber os devices:

z10-limited-edition

A foto acima é do membro do BlackBerry Developer Group São Paulo Renato Nitta.

No começo de março a convite de Davidson Fellipe tive a oportunidade de palestrar no Rio.js, foi uma oportunidade incrível ir em evento com tantos nomes Fod… (desculpem a palavra). No Rio.js falei um pouco sobre carreira evento também que já comentei no blog. No final do mês de março semana pré feriadão fui palestrar na IFSP Guarulhos sobre a plataforma BlackBerry, graças ao Alexander Stafusa que organizou o encontro. Fiz um post no site da comunidade de desenvolvedores da BlackBerry: http://blackberrydeveloper.com.br/eventos/palestra-na-ifsp-guarulhos/

522052_632594263421560_1537717662_n

No último final de semana no dia 13 de abril, estive em Novo Hamburgo na semana Acadêmica da FEEVALE, lá também falei sobre mercado mobile e desenvolvimento para BlackBerry, com a palestra: Desenvolvendo apps mobile sem sofrimento: Conheça a nova platarforma BlackBerry 10.

O evento ocorreu de 13 a 18 de abril, no mesmo dia da minha apresentação, também esteve presente o Davidson Fellipe que apresentou a palestra: Os segredos dos Front end Engineers.

E para os próximos dias minha agenda está da seguinte forma, neste final semana dia 20 de abril estarei em Caruaru Realizando o Workshop sobre WordPress. Dia 15 de maio estarei no Tableless Conf e no dia 24 de maio estarei no Adobe Camp 2013.

Essa rodada de palestras está sendo uma fase muito boa, estou tendo oportunidade de conhecer novos profissionais e conhecer outras regiões do Brasil e o que está acontecendo no cenário local de cada uma delas. Quem estiver organizando evento sobre desenvolvimento web ou mobile, pode entrar em contato comigo ou na caixa de comentários ou em minha fan page : https://www.facebook.com/FellyphBlog

Slides do terceiro Wordtalks DRC

No dia 05 de Fevereiro rolou o terceiro Wordtalks DRC no evento rolou três palestras. Rodrigo Simoni falando de 10 dicas de SEO, Luis Felipe falando sobre dicas de servidores para WordPress.

Minha apresentação foi sobre como utilizar o WordPress em aplicativos mobile. os slide da apresentação você confere aqui :

Slides da apresentação do Rodrigo Simoni:

Concurso #bb10believe BlackBerry Brasil

Como já comentei no blog, estou fazendo parte do grupo de desenvolvedores da BlackBerry e colaborando para o site : http://blackberrydeveloper.com.br/. Além de saber das novidades da plataforma lá você encontra tutoriais sobre desenvolvimento mobile.

E para comemorar o lançamento do site, está rolando um concurso que irá sortear todos esses itens da imagem abaixo:

final

O sorteio será realizado no dia 15 de janeiro. Mas como você pode concorrer?

  • Deixar sua mensagem na área de comentários deste post, nos contando porque você acredita na plataforma BlackBerry 10 (não há limite para a quantidade de palavras);
  • Deixar uma REASON TO BELIEVE no site worldwide.blackberry.com/reasons;
  • Curtir a página do BlackBerry Jam Sessions no Facebook.

Então não perca tempo, entre no link abaixo e participe deste concurso : http://blackberrydeveloper.com.br/destaque/promocao-bb10believe/

O anúncio do vencedor será feito dia 16 de Janeiro de 2013 às 16 horas (horário de Brasília), via página do Facebook do BlackBerry Jam Sessions.

Obs: somente participantes com endereço no Brasil poderão participar.

 

Dev Group BlackBerry São Paulo

Pessoal esse final de ano está bastante corrido e cheio de novidades. E uma delas que agora eu sou Manager do DEV Group da BlackBerry, mas o que isso significa?
A partir de agora eu fico responsável por organizar encontros na cidade de São Paulo para promover a comunidade de desenvolvedores da plataforma, com uma frequência mensal irei organizar palestras e encontros sobre desenvolvimento mobile. Além de ser colaborador do site: http://blackberrydeveloper.com.br/

Está sendo ótimo por estudar uma área que sempre tive vontade de desenvolver algo. Mobile é um mundo totalmente novo cheio de oportunidades. Cada dia o número de dispositivos mobile no mundo cresce. E porque não desenvolver mobile?

Agora faço outra pergunta: Porque BlackBerry?

BlackBerry saiu um pouco de cena durante esses dois anos. Parte disso foi a reformulação que ela está passando. O novo CEO está implantando uma nova política na empresa e está investindo na empresa e na comunidade de desenvolvedores, com suporte, eventos e treinamentos. Quando eu fui convidado para ser manager do dev group aqui em São Paulo. A primeira coisa que fiz foi pesquisar sobre a situação atual da empresa e consultar os desenvolvedores da plataforma e todas as informações foram positivas. Conversei com um colega ele contou que estava com dificuldade de portar uma app para a plataforma teve todo o suporte online, o tipo de resposta foi claro e direto, apontando o que ele precisava fazer para finalizar o aplicativo.

foto

Esse tipo de cuidado que dá prazer a um desenvolvedor criar produtos para uma plataforma. Tive a oportunidade de conhecer o novo sistema operacional o Black Berry 10, que estará presente nos novos devices que serão lançados em janeiro de 2013. Vi que algo grande vai chegar ao mercado e será uma grande oportunidade de fazer parte disso. Que linguagem você pode desenvolver? A que vc sentir mais a vontade: ActionScript(AIR), C++, Cascades, Java ou Javascript.

todos os managers do Brasil

No Brasil Atualmente são 10 cidades com managers. E eu tive um dos maiores desafios de cuidar da comunidade da maior cidade do Brasil junto com o Alexander Stafusa. Apesar da responsabilidade eu continuo minha vida no UOL que é o meu projeto principal, mas aceitei esse grande desafio. Já de cara, fui para Maceió para o encontro dos Managers do Brasil lá foram quase 25 horas de reunião e treinamento, foi uma ótima oportunidade de conhecer os managers de outros estados e trocar informações importantes.

9672_10151122399997531_871009154_n

531939_10151123597262531_94400020_n

2013 vai vir cheio de novidades! Fiquem ligados aqui no Blog e no site dos Dev group da BlackBerry, todo mês vou publicar as novidades e os encontros da plataforma.

#bb10believe