<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Todo Dia Algo Novo</title>
 <link href="http://pablodinella.github.io//atom.xml" rel="self"/>
 <link href="http://pablodinella.github.io//"/>
 <updated>2016-01-08T02:08:05-02:00</updated>
 <id>http://pablodinella.github.io/</id>
 <author>
   <name></name>
   <email></email>
 </author>

 
 <entry>
   <title>Ano novo, novas metas</title>
   <link href="http://pablodinella.github.io//2016/01/08/Ano-Novo/"/>
   <updated>2016-01-08T01:55:00-02:00</updated>
   <id>http://pablodinella.github.io//2016/01/08/Ano-Novo</id>
   <content type="html">&lt;p&gt;Parece que não consigo escrever posts para este blog a não ser durante a transição da noite para a madrugada… Mas não me sinto parte daquele grupo que se diz mais produtivo durante a madrugada. Na verdade, parece que eu só escrevo aqui de madrugada porque sinto que não fui produtivo o suficiente durante o dia e preciso fazer mais algo.&lt;/p&gt;

&lt;p&gt;Há tantas ideias que vêm à mente e tantas coisas que quero fazer, que me frustro ao não ver os projetos avançando. Também têm sido meses difíceis para mim aqui em casa, especialmente financeiramente. Inclusive se você trabalha com desenvolvimento web e gostar do meu perfil pode entrar em contato viu ;)&lt;/p&gt;

&lt;p&gt;Enfim, chega disso e vamos em frente! Este post é só pra atualizar o blog e registrar 3 metas que tenho:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Mudar o tema do blog&lt;/li&gt;
  &lt;li&gt;Escrever sobre os 3 desafios de programação que fiz e tudo que aprendi com eles&lt;/li&gt;
  &lt;li&gt;Continuar com as aulas do Be MEAN&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por enquanto é isso, e se você também se sente mal por não conseguir fazer tudo o que queria, vá com calma e prossiga com constância, e o mais importante, risque as tarefas da sua &lt;em&gt;todo list&lt;/em&gt; ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Be MEAN (MongoDB): Operadores de Array no comando update()</title>
   <link href="http://pablodinella.github.io//2015/12/14/Be-MEAN-Aula-4-parte-1-continuacao/"/>
   <updated>2015-12-14T20:42:00-02:00</updated>
   <id>http://pablodinella.github.io//2015/12/14/Be-MEAN-Aula-4-parte-1-continuacao</id>
   <content type="html">&lt;p&gt;Continuando o &lt;a href=&quot;/2015/11/23/Be-MEAN-Aula-4-parte-1/&quot;&gt;post anterior onde vimos o comando update()&lt;/a&gt; e seus operadores de modificação, hoje vou relatar o que eu aprendi sobre operadores de array.&lt;/p&gt;

&lt;h2 id=&quot;operadores-de-array&quot;&gt;Operadores de Array&lt;/h2&gt;

&lt;dl&gt;
  &lt;dt&gt;$push&lt;/dt&gt;
  &lt;dd&gt;Adiciona um valor ao campo, caso o campo seja um &lt;em&gt;Array&lt;/em&gt; existente&lt;/dd&gt;
  &lt;dd&gt;Caso não exista irá criar um novo do tipo &lt;em&gt;Array&lt;/em&gt; e adicionar o valor passado&lt;/dd&gt;
  &lt;dd&gt;Se o campo não for do tipo &lt;em&gt;Array&lt;/em&gt;, retorna um erro&lt;/dd&gt;
  &lt;dd&gt;Uso: &lt;code&gt;{ $push : { campo : valor } }&lt;/code&gt;&lt;/dd&gt;
  &lt;dt&gt;$pushAll&lt;/dt&gt;
  &lt;dd&gt;O mesmo que o item anterior, porém serve para adicionar vários valores ao array&lt;/dd&gt;
  &lt;dd&gt;Uso: &lt;code&gt;{ $pushAll : { campo : [Array_de_valores] } }&lt;/code&gt;&lt;/dd&gt;
  &lt;dt&gt;$pull&lt;/dt&gt;
  &lt;dd&gt;Retira o valor do campo, case seja do tipo &lt;em&gt;Array&lt;/em&gt;&lt;/dd&gt;
  &lt;dd&gt;Se o campo não existir, não vai fazer nada&lt;/dd&gt;
  &lt;dd&gt;Uso: &lt;code&gt;{ $pull : { campo : valor } }&lt;/code&gt;&lt;/dd&gt;
  &lt;dt&gt;$pullAll&lt;/dt&gt;
  &lt;dd&gt;O mesmo que o item anterior, porém serve para remover vários valores do array&lt;/dd&gt;
  &lt;dd&gt;Uso: &lt;code&gt;{ $pullAll : { campo : [Array_de_valores] } }&lt;/code&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2 id=&quot;j-acabou&quot;&gt;Já acabou&lt;/h2&gt;

&lt;p&gt;Esta na verdade é uma continuação do &lt;a href=&quot;/2015/11/23/Be-MEAN-Aula-4-parte-1/&quot;&gt;último post da série Be MEAN&lt;/a&gt;. No dia daquele post eu já não podia continuar escrevendo e por isso deixei esta parte pra depois.&lt;/p&gt;

&lt;p&gt;Demorei um pouco pra fazer este post, mas agora que estou de férias é hora de decolar com os projetos!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Stackedit.io e desafio em Ruby on Rails</title>
   <link href="http://pablodinella.github.io//2015/12/07/stackedit-e-desafio-rails/"/>
   <updated>2015-12-07T00:47:00-02:00</updated>
   <id>http://pablodinella.github.io//2015/12/07/stackedit-e-desafio-rails</id>
   <content type="html">&lt;p&gt;Estou atrasado com as aulas do Be MEAN, eu sei, mas assim que passar essa semana de provas eu volto com tudo. Além disso, essa semana eu estava focado em um desafio para uma vaga de estágio, que foi bem… desafiador!&lt;/p&gt;

&lt;h2 id=&quot;stackeditio&quot;&gt;Stackedit.io&lt;/h2&gt;

&lt;p&gt;Quero relatar que passei a utilizar mais o &lt;a href=&quot;https://stackedit.io/&quot;&gt;stackedit.io&lt;/a&gt;, editor markdown online. Eu já conhecia há um tempo, mas só passei a utilizá-lo agora, depois que &lt;a href=&quot;/2015/11/26/Buscas-mongo-ionic-kramdown/&quot;&gt;mudei o processador de markdown do blog para o kramdown&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Editar markdown no stackedit é bem gostoso, mas tem alguns probleminhas também, como não destacar links que referenciam a um endereço um tanto diferente do comum:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://pablodinella.github.io//assets/post-images/stackedit.jpg&quot; alt=&quot;stackedit não destaca links não convencionais&quot; /&gt;&lt;/p&gt;

&lt;p&gt;E também não é possível (ou não sei como) &lt;em&gt;escapar&lt;/em&gt; trechos de código que não quero formatar como bloco de código:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://pablodinella.github.io//assets/post-images/stackedit2.jpg&quot; alt=&quot;como escapar código no markdown?&quot; /&gt;&lt;/p&gt;

&lt;p&gt;PS: já tentei “\” e não deu certo.&lt;/p&gt;

&lt;p&gt;Fora isso, estou gostando mais de usar o &lt;a href=&quot;stackedit.io&quot;&gt;stackedit.io&lt;/a&gt; do que o &lt;a href=&quot;atom.io&quot;&gt;atom&lt;/a&gt;, especialmente por causa do preview e os atalhos do teclado.&lt;/p&gt;

&lt;h2 id=&quot;desafio-aplicao-em-ruby-on-rails&quot;&gt;Desafio: aplicação em Ruby on Rails&lt;/h2&gt;

&lt;p&gt;Sobre o desafio, tratava-se de uma aplicação que permitisse gerenciar e compartilhar playlists de músicas. Aparentemente simples, mas que mesmo assim foi bem desafiador. Tive de aprender os conceitos básicos sobre Ruby, Ruby on Rails, migrations, generators, entre outros.&lt;/p&gt;

&lt;p&gt;E apesar disso ter me impossibilitado de postar no blog e ver as aulas do Be MEAN, a boa notícia é que tenho um conteúdo bem legal pra postar sobre o que aprendi em ruby e ruby on rails :D&lt;/p&gt;

&lt;p&gt;Estou nas últimas aulas do semestre na faculdade, então ainda vai ficar bem difícil atualizar o blog, mas vou ficar feliz se você &lt;a href=&quot;http://feeds.feedburner.com/TodoDiaAlgoNovo&quot;&gt;assinar o RSS do blog&lt;/a&gt; :)&lt;/p&gt;

&lt;p&gt;Por enquanto é isso, até o próximo!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Busca "insensitiva" no mongodb, diretivas vs classes no ionic, e kramdown</title>
   <link href="http://pablodinella.github.io//2015/11/26/Buscas-mongo-ionic-kramdown/"/>
   <updated>2015-11-26T01:02:11-02:00</updated>
   <id>http://pablodinella.github.io//2015/11/26/Buscas-mongo-ionic-kramdown</id>
   <content type="html">&lt;p&gt;Seguindo a ideia inicial deste diário, que é anotar o que eu aprendo no dia a dia, aqui vai o que aprendi esta semana ;)&lt;/p&gt;

&lt;h2 id=&quot;buscas-no-mongodb-sem-diferenciao-entre-maisculas-e-minsculas&quot;&gt;Buscas no MongoDB sem diferenciação entre maiúsculas e minúsculas&lt;/h2&gt;

&lt;p&gt;No MongoDB realizamos buscas com o &lt;a href=&quot;/2015/11/14/Be-MEAN-Aula-3/&quot;&gt;comando &lt;em&gt;find()&lt;/em&gt;&lt;/a&gt; utilizando uma &lt;em&gt;query&lt;/em&gt;, desta forma:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;db.collection.find({Nome: &#39;MongoDB&#39;})
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Porém neste caso, a busca retornaria apenas resultados cujo valor do campo &lt;strong&gt;nome&lt;/strong&gt; fosse exatamente &lt;strong&gt;MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Mas descobri &lt;a href=&quot;https://youtu.be/ONzJsNbv15U?t=24m32s&quot;&gt;através de uma aula do Be MEAN&lt;/a&gt; que podemos tornar essa busca &lt;em&gt;case insensitive&lt;/em&gt;, ou seja, fazer o mongo ignorar a diferença entre maiúsculas e minúsculas, usando &lt;em&gt;regex&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Então nossa busca com regex ficaria assim: &lt;code&gt;db.collection.find({Nome: /mongodb/i})&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Isto faz com que obtenhamos documentos com o nome &lt;strong&gt;mongodb&lt;/strong&gt;, &lt;strong&gt;MongoDB&lt;/strong&gt;, &lt;strong&gt;mongoDB&lt;/strong&gt; e assim por diante.&lt;/p&gt;

&lt;h2 id=&quot;qual-a-diferena-entre-usar-diretivas-ion--e-classes-no-ionic-framework&quot;&gt;Qual a diferença entre usar diretivas &amp;lt;ion-*&amp;gt; e classes no Ionic Framework?&lt;/h2&gt;

&lt;p&gt;Estou &lt;a href=&quot;https://github.com/PabloDinella/BeautyTime&quot;&gt;desenvolvendo um app&lt;/a&gt; para a faculade com &lt;a href=&quot;http://ionicframework.com/&quot;&gt;Ionic&lt;/a&gt;, e me veio essa dúvida, qual a diferença entre usar &lt;code&gt;&amp;lt;ul class=&quot;list&quot;&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;ion-list&amp;gt;&lt;/code&gt; por exemplo?&lt;/p&gt;

&lt;p&gt;A &lt;a href=&quot;http://forum.ionicframework.com/t/ion-vs-div-directives/7524&quot;&gt;resposta veio&lt;/a&gt; &lt;a href=&quot;http://forum.ionicframework.com/t/ionic-html-tags-when-use-ion-prefix-and-when-not/3933&quot;&gt;dos fóruns&lt;/a&gt;: com as classes só temos a estilização, já as diretivas nos dão mais funcionalidades.&lt;/p&gt;

&lt;p&gt;Este &lt;a href=&quot;https://github.com/driftyco/ionic/blob/master/js/angular/directive/list.js#L12-L17&quot;&gt;comentário no código fonte do Ionic&lt;/a&gt; exemplifica bem:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The containing element requires the &lt;code&gt;list&lt;/code&gt; class and each list item requires the &lt;code&gt;item&lt;/code&gt; class.
However, using the ionList and ionItem directives make it easy to support various interaction modes such as swipe to edit, drag to reorder, and removing items.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;utilizar-o-kramdown-no-seu-blog-jekyll-lhe-d-mais-opes&quot;&gt;Utilizar o kramdown no seu blog Jekyll lhe dá mais opções&lt;/h2&gt;

&lt;p&gt;Escrevendo um post, senti a necessidade de fazer uma lista de definições e também gostaria de usar notas de rodapé. O Jekyll no GitHub vem com o processador &lt;em&gt;redcarpet&lt;/em&gt; por padrão.&lt;/p&gt;

&lt;p&gt;Mas dando uma googleada descobri que o &lt;em&gt;kramdown&lt;/em&gt; me dava essas &lt;a href=&quot;http://kramdown.gettalong.org/quickref.html&quot;&gt;opções a mais&lt;/a&gt; e para utilizar com o jekyll bastava mudar &lt;code&gt;markdown: redcarpet&lt;/code&gt; para &lt;code&gt;markdown: kramdown&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;concluindo&quot;&gt;Concluindo&lt;/h2&gt;

&lt;p&gt;Estou gostando de fazer este diário, especialmente porque eu aprendo muito mais quando eu crio conteúdo do que quando eu consumo. Afinal não quero escrever besteira, então sempre tento dar uma pesquisada antes de falar sobre algo.&lt;/p&gt;

&lt;p&gt;E é claro que bate aquela vontadezinha de que alguém leia seu texto, e eu acho que é esse tipo de pretensão que me faz ser menos produtivo com o blog, porque sempre que penso em escrever algo, fico imaginando qual categoria utilizar, como organizar as tags, como não deixar o post simples demais… E todas estas coisas me seguram um pouco na hora de escrever e publicar meus textos.&lt;/p&gt;

&lt;p&gt;Mas o jeito é se manter firme na proposta e insistir nela, por isso pode ser que esse diário seja uma pequena bagunça. E afinal desde quando um diário é organizado?&lt;/p&gt;

&lt;p&gt;Às vezes acho que escrevo demais para o que este projeto se propõe, mas não consigo parar. Mas pode ser que isso seja bom, vai formar a personalidade diferenciada deste blog :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Be MEAN (MongoDB): save(), update() e operadores de modificação</title>
   <link href="http://pablodinella.github.io//2015/11/23/Be-MEAN-Aula-4-parte-1/"/>
   <updated>2015-11-23T01:20:00-02:00</updated>
   <id>http://pablodinella.github.io//2015/11/23/Be-MEAN-Aula-4-parte-1</id>
   <content type="html">&lt;p&gt;Rapaz, esse curso tá ficando cada vez mais denso! E isso é bom, afinal quanto mais conhecimento melhor! Vou escrever bastante, então prepare-se:&lt;/p&gt;

&lt;p&gt;Nessa aula foi recordado que para alterar um documento no MongoDB, temos dois comandos:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;db.collection.save()&lt;/code&gt; e &lt;code&gt;db.collection.update()&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;modificando-documentos-com-save&quot;&gt;Modificando documentos com &lt;code&gt;save()&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;A diferença básica entre os dois comandos é que com o &lt;code&gt;save&lt;/code&gt; temos que buscar e guardar o objeto numa variável, e depoooois salvá-lo no banco, dessa forma:&lt;/p&gt;

&lt;p&gt;Primeiro buscamos o objeto: &lt;code&gt;var p = db.pokemons.findOne({name:/pikachu/i})
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Temos que usar &lt;code&gt;findOne()&lt;/code&gt; pois o &lt;code&gt;find()&lt;/code&gt; não retorna o objeto em si, mas sim um &lt;em&gt;cursor&lt;/em&gt;. Me corrija nos comentários se eu estiver errado!&lt;/p&gt;

&lt;p&gt;Então &lt;code&gt;p&lt;/code&gt; terá o seguinte conteúdo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &quot;_id&quot;: ObjectId(&quot;5650c5c8c36927f637e6ce10&quot;),
  &quot;name&quot;: &quot;Pikachu&quot;,
  &quot;description&quot;: &quot;Rato elétrico bem fofinho&quot;,
  &quot;type&quot;: &quot;electric&quot;,
  &quot;attack&quot;: 55,
  &quot;height&quot;: 0.4
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Agora podemos alterar um de seus valores, como por exemplo: &lt;code&gt;p.attack = 50&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;E daí salvamos com &lt;code&gt;db.pokemons.save(p)&lt;/code&gt;. Isso altera o valor do attack do Pikachu no banco.&lt;/p&gt;

&lt;h2 id=&quot;modificando-documentos-com-update&quot;&gt;Modificando documentos com &lt;code&gt;update()&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;Já com &lt;code&gt;update()&lt;/code&gt; é um pouco diferente. Primeiro, o &lt;code&gt;update()&lt;/code&gt; recebe três parâmetros:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;query (geralmente com o &lt;a href=&quot;/2015/11/14/Be-MEAN-Aula-3/&quot;&gt;_id&lt;/a&gt; do documento que queremos modificar)&lt;/li&gt;
  &lt;li&gt;update (a modificação)&lt;/li&gt;
  &lt;li&gt;options (parâmetro opcional, veremos mais pra frente)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com esta sintaxe: &lt;code&gt;db.collection.update(query, update, options)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Podemos então criar uma query &lt;code&gt;var query = {&quot;_id&quot;: ObjectId(&quot;5652574334d59f7ade6bf57e&quot;)}&lt;/code&gt;
que no meu caso retornará este documento:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &quot;_id&quot;: ObjectId(&quot;5652574334d59f7ade6bf57e&quot;),
  &quot;name&quot;: &quot;Testemon&quot;,
  &quot;attack&quot;: 8000,
  &quot;defense&quot;: 8000,
  &quot;height&quot;: 2.1,
  &quot;description&quot;: &quot;Pokemon de teste&quot;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;e um &lt;em&gt;mod&lt;/em&gt; (parâmetro &lt;code&gt;update&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var mod = {description: &quot;Teste de modificação&quot;}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Então passamos os parâmetros ao comando &lt;code&gt;update()&lt;/code&gt;: &lt;code&gt;db.pokemons.update(query, mod)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Executamos o comando, e ao buscar o documento no banco com &lt;code&gt;db.pokemons.find(query)&lt;/code&gt; para ver como ficou temos este retorno:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &quot;_id&quot;: ObjectId(&quot;5652574334d59f7ade6bf57e&quot;),
  &quot;description&quot;: &quot;Teste de modificação&quot;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Opa! O &lt;code&gt;update()&lt;/code&gt; não só modificou a &lt;code&gt;description&lt;/code&gt; do nosso documento como removeu os outros campos. Isso acontece porque passamos o parâmetro de &lt;em&gt;update&lt;/em&gt; sem usar um &lt;strong&gt;operador de modificação&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;De acordo com a &lt;a href=&quot;https://docs.mongodb.org/manual/reference/method/db.collection.update/#replace-a-document-entirely&quot;&gt;documentação do mongo&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;O comando &lt;code&gt;update()&lt;/code&gt; substitui o documento que corresponde a nossa &lt;code&gt;query&lt;/code&gt; pelo documento do nosso segundo parâmetro, no nosso caso o &lt;code&gt;mod&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;O comando &lt;code&gt;update()&lt;/code&gt; não altera o _id do documento&lt;/li&gt;
  &lt;li&gt;O comando &lt;code&gt;update()&lt;/code&gt; não altera múltiplos documentos de uma vez&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Então para alterarmos um campo apenas, sem substituir o documento inteiro, temos de usar nossos…&lt;/p&gt;

&lt;h2 id=&quot;operadores-de-modificao&quot;&gt;Operadores de Modificação&lt;/h2&gt;

&lt;p&gt;Que são:&lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;$set&lt;/dt&gt;
  &lt;dd&gt;muda o valor de um campo, criando-o caso não exista&lt;/dd&gt;
  &lt;dd&gt;uso: &lt;code&gt;{ $set: { campo: valor } }&lt;/code&gt;&lt;/dd&gt;
  &lt;dt&gt;$unset&lt;/dt&gt;
  &lt;dd&gt;remove campo&lt;/dd&gt;
  &lt;dd&gt;uso: &lt;code&gt;{ $unset: { campo: 1 } }&lt;/code&gt; colocamos &lt;strong&gt;1&lt;/strong&gt; (true) para remover o campo&lt;/dd&gt;
  &lt;dt&gt;$inc&lt;/dt&gt;
  &lt;dd&gt;incrementa o valor do campo com a quantidade especificada&lt;/dd&gt;
  &lt;dd&gt;para decrementar, usar valor negativo&lt;/dd&gt;
  &lt;dd&gt;uso: &lt;code&gt;{ $inc: { campo: 1 } }&lt;/code&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Exemplo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var mod = {$inc: { attack: 1 }}
db.pokemons.update(query, mod)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;O código acima vai apenas incrementar do campo &lt;code&gt;attack&lt;/code&gt; do nosso registro em 1, e manter todos os outros campos intactos.&lt;/p&gt;

&lt;p&gt;A lista segue, mas para não deixar o post muito longo vou parar por aqui, que é até onde foi abordado &lt;a href=&quot;https://www.youtube.com/watch?v=ONzJsNbv15U&quot;&gt;na aula&lt;/a&gt;. Mas o restante &lt;a href=&quot;https://docs.mongodb.org/manual/reference/operator/update/#fields&quot;&gt;está na documentação&lt;/a&gt; :)&lt;/p&gt;

&lt;h2 id=&quot;no-prximo-post-eu-continuo&quot;&gt;No próximo post eu continuo!&lt;/h2&gt;

&lt;p&gt;Eu disse que o curso estava ficando denso mas nem eu sabia o quanto… Já escrevi tanto e não acabou ainda! Por isso vou parar por aqui, assim não abordo muitos assuntos num post só.&lt;/p&gt;

&lt;p&gt;Então assine meu &lt;a href=&quot;http://pablodinella.github.io/atom.xml&quot;&gt;feed RSS&lt;/a&gt; e/ou me siga no &lt;a href=&quot;https://www.facebook.com/pablordinella&quot;&gt;facebook e aguarde&lt;/a&gt; ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Be MEAN (MongoDB): ID, find(), e operadores</title>
   <link href="http://pablodinella.github.io//2015/11/14/Be-MEAN-Aula-3/"/>
   <updated>2015-11-14T02:00:00-02:00</updated>
   <id>http://pablodinella.github.io//2015/11/14/Be-MEAN-Aula-3</id>
   <content type="html">&lt;p&gt;Mais uma aula do Be MEAN, e hoje aprendemos o que seria a segunda operação básica em banco de dados, ou seja, o &lt;em&gt;READ&lt;/em&gt; do &lt;em&gt;CRUD&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Aprendemos dois comandos para recuperar dados no mongodb:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;db.find()&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;db.findOne()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;o-uud-universal-unique-identifier-de-um-objeto&quot;&gt;O UUD (Universal Unique Identifier) de um objeto&lt;/h2&gt;

&lt;p&gt;Quando inserimos um objeto no mongodb, é gerado um _id automaticamente (e não tem nada de autoincremento). O _id tem esse formato:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;4-bytes que representam os segundos desde a época Unix,&lt;/li&gt;
  &lt;li&gt;3-bytes para o identificador de máquina,&lt;/li&gt;
  &lt;li&gt;2-bytes com o ID do processo,&lt;/li&gt;
  &lt;li&gt;e 3-bytes para um contador, começando com um valor aleatório.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Na prática, o _id se parece com isto: &lt;code&gt;507f1f77bcf86cd799439011&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Se fosse escrito em binário, seria um número de 96 dígitos. Tipo assim: &lt;code&gt;010100000111111100011111011101111011110011111000011011001101011110011001010000111001000000010001&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Uma coisa que pensei nesse momento foi: até quantos anos será que dá pra usar esse esquema de 4 bytes para represntar os segundos do UNIX? Pelos meus cálculos, dá 21 séculos (me corrija se eu estiver errado), ufa, dá pra usar este esquema por muito tempo então.&lt;/p&gt;

&lt;h2 id=&quot;voltando-ao-comando-find&quot;&gt;Voltando ao comando find()&lt;/h2&gt;

&lt;p&gt;O find aceita dois parâmetros, query (cláusulas) e fields (campos), dessa maneira:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;db.collection.find({clausulas}, {campos})&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para facilitar, é recomendável criar variáveis especificando um JSON para fazer a busca, desse jeito:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var query = {Nome: &#39;Fulano&#39;}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Daí passamos o parâmetro pro find assim:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;db.collection.find(query)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O parâmetro fields define quais campos queremos. Para usá-lo devemos dizer o nome do campo junto com o valor &lt;strong&gt;1&lt;/strong&gt;, se quisermos que a busca retorne este campo, ou &lt;strong&gt;0&lt;/strong&gt; caso não queiramos este campo.&lt;/p&gt;

&lt;p&gt;Por exemplo, caso queiramos fazer uma busca que retorne os campos Nome e Idade de um objeto:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var fields = {Nome: 1, Idade: 1}&lt;/code&gt;
&lt;code&gt;db.collection.find(query, fields)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O retorno seria algo como:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &quot;_id&quot;: ObjectId(&quot;564220f0613f89ac53a7b5d0&quot;),
  &quot;Nome&quot;: &quot;Fulano&quot;,
  &quot;Idade&quot;: &quot;25&quot;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Perceba que o _id foi retornado mesmo sem ter sido especificado. É porque ele é o único campo que é retornado sempre. Caso não queiramos que ele seja retornado, basta especificá-lo com o valor 0:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var fields = {Nome: 1, Idade: 1, _id: 0}&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;operadores-aritmticos-e-lgicos&quot;&gt;Operadores Aritméticos e Lógicos&lt;/h2&gt;

&lt;p&gt;Os operadores servem para obtermos apenas resultados que satisfaçam certa condição. Temos os seguintes operadores:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;$lt (less than)&lt;/li&gt;
  &lt;li&gt;$lte (less than or equal)&lt;/li&gt;
  &lt;li&gt;$gt (greater than)&lt;/li&gt;
  &lt;li&gt;$gte (greater than or equal)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E dentre os lógicos temos:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;$or&lt;/li&gt;
  &lt;li&gt;$nor (“ou sqn”)&lt;/li&gt;
  &lt;li&gt;$and&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E o uso destes segue o formato dos seguintes exemplos:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;var query = {height:{$lte:0.5}}&lt;/code&gt; para obter apenas resultados cujo campo &lt;code&gt;height&lt;/code&gt; seja menor ou igual a &lt;code&gt;0.5&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;var query = {name:&quot;bob&quot;, $nor:[{a:1}, {b:2}]}&lt;/code&gt; para obter resultados que tenham o campo &lt;code&gt;name&lt;/code&gt; porém os valores de pelo menos um dos campos &lt;code&gt;a&lt;/code&gt; e &lt;code&gt;b&lt;/code&gt; &lt;strong&gt;não&lt;/strong&gt; sejam &lt;code&gt;1&lt;/code&gt; e &lt;code&gt;2&lt;/code&gt; respectivamente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pode parecer meio difícil de entender, mas é só ler com calma e/ou mais de uma vez que fica fácil ;)&lt;/p&gt;

&lt;p&gt;O JSON desse último exemplo, numa forma tabulada ficaria assim:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;bob&quot;,
  &quot;$nor&quot;: [
    {
      &quot;a&quot;: 1
    },
    {
      &quot;b&quot;: 2
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Exemplo com o operador &lt;strong&gt;$and&lt;/strong&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var query1 = { a: 1 };
var query2 = { b: { $gt: 5 } } ;

db.collection.find( { $and: [query1, query2] } )
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nesse caso somente são retornados resultados que satisfaçam as duas condições &lt;code&gt;query1&lt;/code&gt; e &lt;code&gt;query2&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;operador-existencial&quot;&gt;Operador existencial&lt;/h2&gt;

&lt;p&gt;Temos também o operador &lt;code&gt;$exists&lt;/code&gt;, que retorna o objeto caso o campo exista. Por exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;db.collection.find( { altura : { $exists : true } } );
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Só retorna objetos nos quais existam o campo &lt;code&gt;altura&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;concluso&quot;&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;Basicamente esse foi o conteúdo da terceira aula. Espero que tenha sido útil pra você, e qualquer coisa comente abaixo ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>O (quase) grande lançamento do blog!</title>
   <link href="http://pablodinella.github.io//2015/11/12/o-quase-grande-lancamento-do-blog/"/>
   <updated>2015-11-12T20:24:26-02:00</updated>
   <id>http://pablodinella.github.io//2015/11/12/o-quase-grande-lancamento-do-blog</id>
   <content type="html">&lt;p&gt;Sabe quando você acha que algo é fácil e acaba perdendo algumas horas pra fazer? Pois é, foi assim comigo pra colocar esse blog no ar. Tem muitas coisas que quero fazer ainda pra deixar esse blog &lt;em&gt;supimpa&lt;/em&gt;, mas como o que importa mesmo é o conteúdo, vou ajeitando as outras coisas com o tempo :)&lt;/p&gt;

&lt;p&gt;Enfim, a ideia aqui é manter um &lt;em&gt;diário&lt;/em&gt; de tudo que eu aprendo no dia a dia, relacionado a desenvolvimento, tecnologia, web, programação, frontend, e o que mais vier ;) (será que consigo finalizar o próximo parágrafo sem emoticon?)&lt;/p&gt;

&lt;p&gt;Geralmente quando se começa um blog, você tem que ter certo domínio sobre o assunto, mas não me considero especialista em nenhum assunto. Na verdade, tenho muito, muito a aprender, e estou aprendendo tanto nos últimos meses que eu não posso deixar de registrar as notas em algum lugar. Além disso, pode ser muito útil para quem também está trilhando esse caminho, e principalmente para mim, que posso receber feedback de você, leitor. (ahá, não terminei com emoticon :P ops)&lt;/p&gt;

&lt;p&gt;Aliás, o nome do blog é &lt;strong&gt;Todo dia algo novo&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;blogando-com-jekyll&quot;&gt;Blogando com Jekyll&lt;/h2&gt;

&lt;p&gt;Voltando ao aspecto técnico do blog, algo que me ajudou muito foi os posts do Willian Justen:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://willianjusten.com.br/making-of-parte-1/&quot;&gt;Making of - Parte 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://willianjusten.com.br/making-of-parte-2/&quot;&gt;Making of - Parte 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://willianjusten.com.br/perguntas-e-respostas-jekyll/&quot;&gt;Perguntas e Respostas - Jekyll&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E algumas coisas que quero fazer aqui no blog ainda:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Mudar essa fonte esquisita do título do site&lt;/li&gt;
  &lt;li&gt;Página de Séries e tags&lt;/li&gt;
  &lt;li&gt;Busca&lt;/li&gt;
  &lt;li&gt;Feed RSS&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;j-tem-contedo&quot;&gt;Já tem conteúdo&lt;/h2&gt;

&lt;p&gt;Por enquanto é isso, aliás, já tem três posts que eu tinha escrito antes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2015/11/10/Be-MEAN-Aula-2/&quot;&gt;Be MEAN #2: Mais comandos do MongoDB&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2015/11/09/Be-MEAN/&quot;&gt;Primeira aula do Be MEAN!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2015/10/05/inicio-chave-rsa-e-tabelas-markdown/&quot;&gt;Início, chave rsa pública e tabelas no markdown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Até logo ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Be MEAN (MongoDB): Mais comandos do MongoDB</title>
   <link href="http://pablodinella.github.io//2015/11/10/Be-MEAN-Aula-2/"/>
   <updated>2015-11-10T18:00:00-02:00</updated>
   <id>http://pablodinella.github.io//2015/11/10/Be-MEAN-Aula-2</id>
   <content type="html">&lt;p&gt;Segunda aula de MongoDB e a coisa está ficando séria! Vou até fazer uma lista de comandos:&lt;/p&gt;

&lt;h2 id=&quot;comandos-de-hoje&quot;&gt;Comandos de hoje&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;use &amp;lt;collection&amp;gt;&lt;/code&gt; muda a base de dados em uso, cria se ainda não existir&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;db&lt;/code&gt; variável que aponta para a base de dados em uso&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;show dbs&lt;/code&gt; mostra as bases criadas&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;show collections&lt;/code&gt; mostra as coleções da base de dados em uso&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;db.createCollection()&lt;/code&gt; cria uma coleção vazia&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;db.collection.insert()&lt;/code&gt; (onde &lt;em&gt;collection&lt;/em&gt; é a sua coleção) insere objetos&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;db.collection.find()&lt;/code&gt; executa uma query&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;db.collection.save()&lt;/code&gt; insere e salva&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;db.collection.findOne()&lt;/code&gt; executa uma query e retorna um objeto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Obs.: ao criar uma base de dados com o &lt;code&gt;use&lt;/code&gt;, e este criar uma nova base de dados, ela não será exibida pelo &lt;code&gt;show dbs&lt;/code&gt;, pois nada foi inserido nela ainda.&lt;/p&gt;

&lt;h2 id=&quot;cursors&quot;&gt;Cursors&lt;/h2&gt;
&lt;p&gt;Ao dar &lt;code&gt;var cur = db.collection.find()&lt;/code&gt;, &lt;code&gt;cur&lt;/code&gt; será um cursor, e caso haja documentos que possam ser iterados, podemos fazer um &lt;code&gt;while(cur.hasNext()){print(tojson(cur.next()))}&lt;/code&gt; para mostrar os documentos.&lt;/p&gt;

&lt;p&gt;Basicamente (pelo que entendi), NoSQL segue um modelo não relacional, e por isso pode tratar cada caso de forma mais eficiente, existem por exemplo bancos NoSQL para tratar de grafos, de docuemtos, etc.&lt;/p&gt;

&lt;h2 id=&quot;referncia&quot;&gt;Referência&lt;/h2&gt;
&lt;p&gt;Com tanto conteúdo novo, a &lt;a href=&quot;https://docs.mongodb.org/manual/reference/&quot;&gt;documentação do mongo&lt;/a&gt; será sua melhor amiga :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Primeira aula do Be MEAN!</title>
   <link href="http://pablodinella.github.io//2015/11/09/Be-MEAN/"/>
   <updated>2015-11-09T18:00:00-02:00</updated>
   <id>http://pablodinella.github.io//2015/11/09/Be-MEAN</id>
   <content type="html">&lt;p&gt;Passou mais de um mês desde o primeiro post! Ahá, mas estou de volta com esse segundo. Eu poderia começar do zero de novo e fazer desse o primeiro post, mas sou teimoso e quero fazer esse &lt;em&gt;diário&lt;/em&gt; dar certo, nem que as atualizações sejam mês a mês.&lt;/p&gt;

&lt;h2 id=&quot;be-mean&quot;&gt;Be MEAN!&lt;/h2&gt;
&lt;p&gt;Dia 9 começou o &lt;a href=&quot;https://github.com/Webschool-io/be-mean-instagram&quot;&gt;Be MEAN&lt;/a&gt;, curso &lt;a href=&quot;http://dagora.net/be-mean/&quot;&gt;financiado via crowdfunding&lt;/a&gt; e aberto ao público, graças ao sucesso do financiamento :)&lt;/p&gt;

&lt;p&gt;Estou acompanhando e pretendo registrar tudo que aprendo aqui, então agora sim, esse diário vai pra frente! Espero…&lt;/p&gt;

&lt;p&gt;A primeira aula foi simples, uma introdução ao NoSQL e o mongodb.&lt;/p&gt;

&lt;h2 id=&quot;nosql&quot;&gt;NoSQL&lt;/h2&gt;
&lt;p&gt;Foi dada uma visão geral sobre o NoSQL, que é um conceito de banco de dados não relacional (não tem nada a ver com SQL, esse nome foi dado por questões de marketing).&lt;/p&gt;

&lt;p&gt;Basicamente (pelo que entendi), NoSQL segue um modelo não relacional, e por isso pode tratar cada caso de forma mais eficiente, existem por exemplo bancos NoSQL para tratar de grafos, de documentos, etc.&lt;/p&gt;

&lt;h2 id=&quot;mongodb-export-e-import&quot;&gt;MongoDB, export e import&lt;/h2&gt;
&lt;p&gt;O mongodb é o banco voltado a documentos, e corresponde ao &lt;strong&gt;M&lt;/strong&gt; do MEAN. Utiliza JavaScript como linguagem para fazer as consultas.&lt;/p&gt;

&lt;p&gt;Na primeira aula do Be MEAN instalamos o mongo e aprendemos o comando import e export.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mongoexport --db nome_do_database --collection nome_da_colecao --out minha_colecao.json
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;mongoimport --db nome_do_database --collection nome_da_colecao --drop --file minha_colecao.json
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Por hoje é só ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Início, chave rsa pública e tabelas no markdown</title>
   <link href="http://pablodinella.github.io//2015/10/05/inicio-chave-rsa-e-tabelas-markdown/"/>
   <updated>2015-10-05T17:00:00-03:00</updated>
   <id>http://pablodinella.github.io//2015/10/05/inicio-chave-rsa-e-tabelas-markdown</id>
   <content type="html">&lt;p&gt;Pois é, esse é o início de uma ideia que eu tive e decidi experimentar. A probabilidade de eu desistir no meio do caminho e isso não dar certo é alta, mas como eu reprovei em estatística e probabilidade na faculdade eu posso estar errado :P&lt;/p&gt;

&lt;h2 id=&quot;a-ideia&quot;&gt;A ideia&lt;/h2&gt;
&lt;p&gt;É criar um pequeno diário, relatando coisas simples que eu aprendo no dia a dia, sobre desenvolvimento, tecnologia e tudo mais.&lt;/p&gt;

&lt;h2 id=&quot;estou-aprendendo&quot;&gt;Estou aprendendo&lt;/h2&gt;
&lt;p&gt;E por isso as coisas que vou relatar são extremamente simples. Pra se ter uma ideia, a primeira coisa que eu desenvolvi, tirando os trabalhos acadêmicos e formulário de site freelancer, foi &lt;a href=&quot;https://github.com/PabloDinella/FaleMais&quot;&gt;essa calculadora de preço de chamadas telefônicas &lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Pra iniciar já esse projetinho,&lt;/p&gt;

&lt;h2 id=&quot;foi-isso-que-aprendi-hoje&quot;&gt;Foi isso que aprendi hoje:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;a chave rsa pública fica em &lt;code&gt;~/.ssh/id_rsa.pub&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;tabelas no markdown são feitas com pipelines e traços (&lt;code&gt;| e ---&lt;/code&gt;), e destaque de código é com &lt;code&gt;``&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Foi bem simples, mas por hoje é só :)&lt;/p&gt;
</content>
 </entry>
 

</feed>
