<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by John Carneiro on Medium]]></title>
        <description><![CDATA[Stories by John Carneiro on Medium]]></description>
        <link>https://medium.com/@johnwmcarneiro?source=rss-2e8b303f5fb9------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*Er4loG5bW4fHsYqBwRvKyQ.jpeg</url>
            <title>Stories by John Carneiro on Medium</title>
            <link>https://medium.com/@johnwmcarneiro?source=rss-2e8b303f5fb9------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 12 Nov 2026 18:08:42 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@johnwmcarneiro/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Conhecimento superficial é melhor que nenhum conhecimento.]]></title>
            <link>https://medium.com/centro-startups/conhecimento-superficial-%C3%A9-melhor-que-nenhum-conhecimento-dcb0d702d5ce?source=rss-2e8b303f5fb9------2</link>
            <guid isPermaLink="false">https://medium.com/p/dcb0d702d5ce</guid>
            <category><![CDATA[business]]></category>
            <category><![CDATA[desenvolvimento]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[empreendedorismo]]></category>
            <dc:creator><![CDATA[John Carneiro]]></dc:creator>
            <pubDate>Thu, 05 Jul 2018 18:36:59 GMT</pubDate>
            <atom:updated>2018-07-05T18:36:59.774Z</atom:updated>
            <content:encoded><![CDATA[<p>Como meu sogro diz, “Conhecimento não ocupa espaço”, não sei dizer a origem dessa frase, mas é com ela que quero começar o artigo.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*OQXIhH0Z6Uu3M927atn7lw.gif" /></figure><p>Continuando a série de artigos voltados para os idealizadores de startups que não tem tanto conhecimento técnico, quero passar a seguinte mensagem.</p><p>Como pode você liderar uma startup de tecnologia e não ter nenhum conhecimento em tecnologia? Sei que é possível, mas não acha que isso é um fator que dificulta a comunicação entre você e a área técnica?</p><p>Conheço algumas startups em que é necessário uma terceira pessoa para intermediar a conversa entre um(a) Desenvolvedor(a) e uma pessoa de Negócios, por que fica difícil a comunicação entre ambos, parece que um fala alemão e o outro mandarim.</p><p>Não é necessário que amanhã você se matricule em um curso de <a href="https://pt.wikipedia.org/wiki/PHP">PHP</a> da vida, ou se aprofunde em <a href="https://pt.wikipedia.org/wiki/SQL">SQL</a>, mas já facilitaria muito a comunicação com a área de tecnologia, se você soubesse por exemplo, o que é uma <a href="https://pt.wikipedia.org/wiki/Interface_de_programa%C3%A7%C3%A3o_de_aplica%C3%A7%C3%B5es">API</a>, e que ela é necessária para que o aplicativo móvel se comunique com o sistema.</p><blockquote>“Saiba pelo menos diferenciar o que é um cachorro e o que é um gato.”</blockquote><p>Seria muito interessante se você soubesse o que é um <a href="https://pt.wikipedia.org/wiki/Kanban">Kanban</a>, <a href="https://pt.wikipedia.org/wiki/Scrum_(desenvolvimento_de_software)">SCRUM</a><a href="http://www.manifestoagil.com.br/">,</a> <a href="http://www.manifestoagil.com.br/">Agile</a>, <a href="https://pt.wikipedia.org/wiki/An%C3%A1lise_de_requerimento_de_software">Levantamento de requisitos</a> e principalmente o que é um <a href="https://pt.wikipedia.org/wiki/Produto_vi%C3%A1vel_m%C3%ADnimo">MVP</a> (Mínimo produto viável), isso quem sabe já evitaria algumas coisas como:</p><ul><li>Criar funcionalidades desnecessárias;</li><li>Perda de tempo e dinheiro;</li><li>Produzir um produto de um cliente só;</li><li>Prazos não cumpridos;</li><li>E principalmente, criar um produto que ninguém usa. Isso é simplesmente a morte.</li></ul><p>Você está entrando em uma “nova área”, então tem que buscar o máximo possível de informação sobre ela, o Carlos, CEO da Estuda.com, sempre fala isso, que ele e o Vitor não são pedagogos e que tiveram que buscar muita informação sobre, para conseguir conversar e entender os clientes, é a mesma lógica, só foi aplicado em outra área.</p><p>Buscar esse conhecimento em tecnologia só pode lhe trazer benefícios. Como exemplo vou citar algumas informações sobre o software WordPress:</p><ul><li>30% dos sites da web é feito em <a href="https://pt.wikipedia.org/wiki/WordPress">WordPress;</a></li><li>O <a href="https://pt.wikipedia.org/wiki/WordPress">WordPress</a> é feito em <a href="https://pt.wikipedia.org/wiki/PHP">PHP</a>, o PHP é uma das <a href="https://olhardigital.com.br/noticia/as-10-linguagens-de-programacao-mais-populares-do-mundo-em-2018/74538">dez linguagens mais utilizadas,</a> sendo assim, temos uma grande oferta programadores em <a href="https://pt.wikipedia.org/wiki/PHP">PHP</a> e em <a href="https://pt.wikipedia.org/wiki/WordPress">WordPress;</a></li><li>Ele é fortemente usado por pequenas agências para criação de sites institucionais.</li></ul><p>Você consegue perceber que são conhecimentos estratégicos, mas não necessariamente tão técnicos que você não possa entender?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/706/1*uhrC21Drh8429KDK2KQ9qg.png" /><figcaption>As coisas são bem mais complexas do que isso.</figcaption></figure><p>Nesse ponto quero fazer uma pequena analogia, para reforçar a importância sobre a busca de conhecimento sobre tecnologia.</p><p>Imagine abrir um pequena padaria, mas você não será o padeiro, provavelmente precisará entender os seguintes itens para a fabricação do pão:</p><ul><li>Quais são os ingredientes e suas proporções;</li><li>Que precisará de ferramentas, maquinários, pessoas em determinadas funções para todo processo na fabricação do pão;</li><li>O processo de fabricação. (Ingredientes, Pesagem, Preparo da massa, Divisão, Fermentação e Forneamento).</li></ul><p>Você consegue perceber que mesmo que não faça o pão, você precisa conhecer sobre o processo da fabricação e os elementos que o envolve?</p><p>É preciso buscar esses conhecimentos, para facilitar a comunicação com seu sócio desenvolver ou equipe que irá te ajudar na construção do produto.</p><p>Irei listar alguns itens, para lhe dar um norte no começo das suas pesquisas. Procure entender o que é, para que serve e como se aplica.</p><p><strong>Domínio e registro</strong></p><p>Basicamente é o nome que você acessa o seu site. Você pode registrar seu domínio .com.br, .net.br,.. pela <a href="https://registro.br/">Registro.br</a> ou .com, .net,… pela GoDaddy.</p><p><strong>Hospedagem</strong></p><p>De forma simples, entenda que onde os arquivos do seu sistema ou site estarão. Existem diversas empresas que oferecem esse tipo de serviço, como: Digital Ocean, AWS, Hostgator, Hostseries e etc, vai desde hospedagem compartilhada, VPS até Servidores dedicados.</p><p><strong>Linguagem de programação</strong></p><p>Esse item é imprescindível conhecer. Para a Web, acredito que a linguagem mais utilizada é o PHP, o Javascript, nos últimos anos vem ganhando muita força por causa do NodeJS, Aplicativos híbridos como Cordova, Ionic e React Native e os Frameworks de Frontend como React, Vue.JS e Angular, mas também acho que vale a pena conhecer o ecossistema do Ruby e o famoso framework Ruby on Rails, a queridinha das startups, confesso que são os meus preferidos. Com relação a esse item gostaria de destacar alguns pontos:</p><ul><li>Verifique a mão de obra disponível para a linguagem escolhida, por exemplo, provavelmente você irá encontrar mais programadores de PHP do que de Java, Python ou Ruby;</li><li>Utilize um framework! Imagine que é uma caixa de ferramentas, onde oferece ao programador uma série de itens para facilitar o trabalho. <br>Nada de criar o próprio framework ou fazer na “mão”, acaba por dar muito trabalho e é bem provável que o projeto tenha pouco padrão e documentação escassa, verifique quais frameworks são mais utilizados. Assim vai facilitar na consistência do projeto e para encontrar programadores qualificados.</li></ul><p><strong>Banco de dados</strong></p><p>Amigo esse item é básico para a estrutura, basicamente, sem banco não tem onde salvar os dados. Como dica o que posso dizer, comece simples, não resolva problemas que ainda não tem, sendo assim, para projetos iniciantes prefiro começar com bancos relacionais como: PostreSQL (Preferido) ou MySQL, mas procure saber o que são os bancos não relacionais (os famosos NoSQL, como: MongoDb, Redis e CouchDb), como funciona, estudos de casos e em que situações foram aplicados. O que tem que se entender, é que para cada problema existe uma solução diferente, não adianta usar uma chave de fenda em parafuso philips.</p><p><strong>API</strong></p><p>Entenda que é uma camada que permite que seu aplicativo mobile ou outros sistemas interajam com sua aplicação. Por favor, as interações faça com o formato JSON e no padrão REST. Procure entender melhor sobre isso, quando começar pode ser que encontre assuntos relacionados a React e Vue.JS, pode deixar para depois, mas se quiser saber o que é, pode valer a pena.</p><p><strong>Testes automatizados</strong></p><p>Esse assunto também é um pouco técnico, mas é de suma importância para a qualidade do software, basicamente é código testando código, existe uma série de benefícios, procure entender o que é o TDD e o que o BDD, e as ferramentas utilizadas dentro do ecossistema da sua linguagem.</p><p><strong>Metodologias ágeis de desenvolvimento</strong></p><ul><li>Leia o livro “ Lean Startup (Startup Enxuta)”do Eric Ries, fala bastante sobre MVP, validação e como construir o software de forma enxuta.</li><li>Leia o livro “Scrum: a arte de fazer o dobro do trabalho na metade do tempo” do Jeff Sutherland (inventor do Scrum), fala sobre a metodologia e como eles aumentaram a velocidade do desenvolvimento, pode ser que não utilize na integra, mas acho que você pode acabar adotando algumas ferramentas.</li><li>Leia sobre o manifesto ágil, você pode encontrar informações no site <a href="http://www.manifestoagil.com.br/">http://www.manifestoagil.com.br/</a>.</li></ul><p>Sei que as vezes parece muita coisa para aprender, mas é assim mesmo, na área de tecnologia a informação não para, mas como meu amigo <a href="https://medium.com/u/f648162d5087">Gabriel Pedro</a> fala, “Fé no Pai que o inimigo cai”.</p><p>Mas quero deixar claro que minha intenção não é pôr na conta das pessoas ligadas a área de negócios, acredito que os desenvolvedores tem muito a ganhar entendendo um pouco mais sobre assuntos relacionados a “negócios” também.</p><p>Então é isso. Até a próxima!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dcb0d702d5ce" width="1" height="1" alt=""><hr><p><a href="https://medium.com/centro-startups/conhecimento-superficial-%C3%A9-melhor-que-nenhum-conhecimento-dcb0d702d5ce">Conhecimento superficial é melhor que nenhum conhecimento.</a> was originally published in <a href="https://medium.com/centro-startups">Centro Startups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Ferramentas para Startup: Gestão do projeto e tarefas com o Asana]]></title>
            <link>https://medium.com/centro-startups/ferramentas-para-startup-gest%C3%A3o-do-projeto-e-tarefas-com-o-asana-27bb9c9806e3?source=rss-2e8b303f5fb9------2</link>
            <guid isPermaLink="false">https://medium.com/p/27bb9c9806e3</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[project-management-tool]]></category>
            <dc:creator><![CDATA[John Carneiro]]></dc:creator>
            <pubDate>Mon, 25 Jun 2018 17:58:57 GMT</pubDate>
            <atom:updated>2018-06-25T17:58:57.822Z</atom:updated>
            <content:encoded><![CDATA[<p>Em conversa com alguns colegas e pessoas que frequentam os meetups que já ajudei a organizar, percebi que principalmente as pessoas que tem a ideia do negócio, nem sempre tem o conhecimento em “desenvolvimento e TI”, por isso as vezes desconhecem algumas ferramentas que poderiam auxiliar no dia a dia do seu negócio ou startup.</p><p>Pensando nisso, resolvi criar alguns posts para apresentar ferramentas e algum conhecimento que tenho sobre “Dev” para quem é de negócios.</p><p>Antes que digam “Por quê?”, preferi começar com algo que estamos vivendo no dia a dia aqui da <a href="https://estuda.com/">Estuda.com</a>, sendo assim vamos falar de ferramentas para auxiliar na gestão de tarefas e projetos.</p><p>Desde o momento que entrei na <a href="https://estuda.com/">Estuda.com</a>, já havia o movimento para encontrar uma ferramenta que pudesse ajudar a gerenciar as tarefas, os projetos e se possível na gestão dos processos da empresa.</p><p><strong>Por que usar uma ferramenta para gerenciar?</strong></p><p>Simplesmente por que sem algo para ajudar a nortear, certamente você terá um caos generalizado, não saberá quais são as tarefas, o que é prioridade, o que está pendente, o que está sendo executado, quem está fazendo ou qual tarefa está em andamento.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*b3tAnCb2J0c856Jh7O2UoQ.png" /><figcaption>É assim que me sinto sem uma ferramenta para gerenciar as tarefas.</figcaption></figure><p>E essa situação é algo recorrente entre empreendedores que já conversei, principalmente por se tratarem de startups, as vezes não tem as coisas muito bem definidas, acabam fazendo o que tem que ser feito no piloto automático.</p><p>Nesse tipo de caso, recomento sempre o básico, <a href="https://www.significados.com.br/kanban/">Kanban</a> e quadro no <a href="https://trello.com/">Trello</a>.</p><p>Na Estuda.com já passamos por algumas ferramentas, inicialmente usamos o Trello, mas logo não atendeu mais, faltava algumas ferramentas, relatórios nativos e etc. Depois passamos pelo <a href="http://pipefy.com/">Pipefy</a>, a ferramenta é bacana, mas alguns bugs e problemas pontuais nos fizeram desistir. Foi então que conhecemos o Asana.</p><p><strong>Experiência do uso do Asana na Estuda.com</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bvGdIHV5VwN-w4paNdN6AA@2x.png" /></figure><p>O <a href="https://asana.com/">asana</a> é uma aplicação web e mobile, fundada em 2008 por Dustin Moskovitz, co-founder do Facebook e Justin Rosenstein, ex-engenheiro da Google e Facebook.</p><p>Abaixo algumas das funções que nos fizeram adotar a ferramenta.</p><ul><li>Gestão de projetos, como no Trello, você cria o quadro do projeto, adiciona colunas, criar os cards, define o responsável, prazo, tags, comentários, uploads e etc. :)</li><li>“Minhas tarefas”, uma listagem com as tarefas em que você é responsável ou está seguindo. Pode parecer simples, mas para mim, é a junção do Wunderlist com um quadro do Trello, me ajuda a focar somente nas minhas tarefas pendentes!</li><li>Caixa de entrada, praticamente uma timeline com tudo que está acontecendo nos projetos. :)</li><li>Poder vincular uma tarefa em mais de um projeto, ou uma sub-tarefa em um quadro diferente. <strong>Amigos essa função, é aquele “</strong><a href="https://en.wikipedia.org/wiki/Many-to-many_(data_model)"><strong>many-to-many</strong></a><strong>” que todo mundo gosta. :)</strong></li><li>Ainda tem os bônus, as <a href="https://asana.com/pt/guide/help/tasks/celebrations">Criaturas Comemorativas</a>, algumas animações que aparecem na tela quando concluímos algumas interações. Que de início parece bobo, mas é bem legal para descontrair!</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WxKKIl92LV53hhxtoPVJ2g.gif" /></figure><p>Lógico, existem outras funcionalidades que não citei, até por que estamos ainda testando a ferramenta e conhecendo ela melhor, mas das que usamos até agora, é que tem melhor nos ajudado na gestão e ainda tem os relatórios que o Boss quer.</p><p>Então é isso pessoal, obrigado!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=27bb9c9806e3" width="1" height="1" alt=""><hr><p><a href="https://medium.com/centro-startups/ferramentas-para-startup-gest%C3%A3o-do-projeto-e-tarefas-com-o-asana-27bb9c9806e3">Ferramentas para Startup: Gestão do projeto e tarefas com o Asana</a> was originally published in <a href="https://medium.com/centro-startups">Centro Startups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Livro: Receita Previsível]]></title>
            <link>https://medium.com/@johnwmcarneiro/livro-receita-previs%C3%ADvel-e681834829b2?source=rss-2e8b303f5fb9------2</link>
            <guid isPermaLink="false">https://medium.com/p/e681834829b2</guid>
            <category><![CDATA[livros]]></category>
            <category><![CDATA[empreendedorismo]]></category>
            <dc:creator><![CDATA[John Carneiro]]></dc:creator>
            <pubDate>Thu, 25 Jan 2018 19:53:29 GMT</pubDate>
            <atom:updated>2018-01-25T19:53:29.974Z</atom:updated>
            <content:encoded><![CDATA[<p>Vou falar nesse post sobre alguns pontos que aprendi com o livro “Receita Previsível” do Aaron Ross e Marylou Tyler, confesso que comprei o livro no impulso, vi a recomendação em algum post sobre receita recorrente, então imaginei que o livro se tratava basicamente sobre o modelo SaaS e a venda por recorrência, mas não é bem disso que se trata, acabei me surpreendendo de forma muito positiva.</p><p>Gosto muito de assuntos relacionadas a vendas, marketing, gestão e empreendedorismo, no livro acho que tem um pouco de tudo, mas embasado em uma postura pró-ativa, transparente e moderna de vendas.</p><p>O assunto girar em torno de como a Salesforce montou uma máquina de vendas que a levou a gerar mais de US$ 100 milhões em receita anual recorrente para a empresa.</p><p>O livro começa definindo conceitos e siglas, explicando sobre o Cold Call 2.0, a diferença com o Cold Call comum e como implementá-lo, explica também sobre como transformou um processo de vendas comum em etapas menores e funções específicas gerando grandes benefícios, essa parte do livro acho que foi a que mais gostei, da divisão do que um vendedor faz em basicamente duas funções, deixando a cargo de um a prospecção ativa e ao segundo realizar a validação das oportunidades e a responsabilidade pelo fechamento da proposta.</p><p>O autor trata também sobre planejamento e definição do perfil ideial de cliente para empresa, como ele mesmo cita diversas vezes, “Escolha um nicho e fique rico”, destacando a importância do perfil do cliente para conversão de um prospect em uma oportunidade válida. No livro fica claro sobre como remunerar essa equipe e como uso de um bom CRM pode auxiliar no processo de vendas.</p><p>Mas o livro não trata somente de vendas outbound, nele tem um capítulo escrito por um membro da HubSpot, explicando sobre como gerar um fluxo estável de leads por inbound, no final fecha com um capítulo falando sobre como ter projetos e equipes autogeridas através da liberdade.</p><p>Uffa, tem bastante coisa!</p><p>Sinceramente gostei muito do livro, vale a pena ler e recomendo caso não tenha lido.</p><p>Foi só um pequeno post, não diria que foi um resumo pois é muito superficial para a quantidade de lições valiosas encontradas no livro, mas achei interessante deixar a dica e minha recomendação para leitura.</p><p>Então pessoal, obrigado e até a próxima!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e681834829b2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Rails: Como acessar o contador em um renderização de coleção]]></title>
            <link>https://medium.com/@johnwmcarneiro/rails-como-acessar-o-contador-em-um-renderiza%C3%A7%C3%A3o-de-cole%C3%A7%C3%A3o-16c49f239e75?source=rss-2e8b303f5fb9------2</link>
            <guid isPermaLink="false">https://medium.com/p/16c49f239e75</guid>
            <category><![CDATA[ruby-on-rails]]></category>
            <category><![CDATA[dicas]]></category>
            <category><![CDATA[ruby]]></category>
            <dc:creator><![CDATA[John Carneiro]]></dc:creator>
            <pubDate>Mon, 04 Dec 2017 14:34:14 GMT</pubDate>
            <atom:updated>2017-12-04T14:34:14.100Z</atom:updated>
            <content:encoded><![CDATA[<p>Olá, hoje vou deixar aqui uma pequena dica, mas acho que de grande ajuda.</p><p>Como acessar o “contador” em um renderização de coleção.</p><p>As vezes me deparo com essa situação, pois tenho que adicionar os “rows” das colunas em um renderização html utilizando o bootstrap.</p><p>Então vamos lá, suponha que você tenha uma coleção com 8 artigos e que deseja que sejam exibidos 4 artigos por linha e que no loop do 5 artigo (ou início de cada linha) se adicione uma div “.row” para que o layout não “quebre”, então vamos ao exemplo código sem o contador e com o contador.</p><p><strong>View “index.html.erb”</strong></p><p>Na view chamamos a coleção dos objetos, podemos fazer de duas formas.</p><p>A primeira informando o partial e passando a coleção.</p><pre>&lt;div class=&quot;row&quot;&gt;&lt;%= render partial: &#39;article&#39;, collection: @articles %&gt;&lt;/div&gt;</pre><p>Ou na segunda, simplesmente passando a coleção, assumindo que “@articles” é um coleção de “Article”, então se poderia definir assim.</p><pre>&lt;div class=&quot;row&quot;&gt;&lt;% render @articles %&gt;&lt;/div&gt;</pre><p><strong>Partial “_article.html.erb”</strong></p><p>Exemplo antes do uso do “counter”.</p><pre>&lt;div class=&quot;col-md-3&quot;&gt;<br>&lt;h3&gt;&lt;%= article.title %&gt;&lt;/h3&gt;<br><a href="https://apidock.com/rails/ActionView/Helpers/TextHelper/truncate">&lt;%= truncate</a>(article.text) { link_to &quot;Ver mais&quot;, article }<br>&lt;/div&gt;</pre><p>Da forma como está acima ele poderia ficar alinhado 4 colunas e na quinta ele cair, mas imagine que um título ou texto tenha um tamanho diferente, poderia acabar “quebrando” a visualização, então nesse caso podemos utilizar o contador do laço criado na coleção. <br>O Rails fornece uma variável chamada “#{partial_name}_counter” para se utilizar no partial, em nosso exemplo essa varíavel seria “article_counter”, lembrando que inicia que o valor começa com 0.</p><p>Então vamos corrigir nosso partial <strong>_article.html.erb</strong></p><pre>&lt;%= &#39;&lt;/div&gt;&lt;div class=&quot;.row&quot;&gt;&#39;.html_safe if article_counter % 4 == 0 %&gt;</pre><pre>&lt;div class=&quot;col-md-3&quot;&gt;<br>&lt;h3&gt;&lt;%= article.title %&gt;&lt;/h3&gt;<br><a href="https://apidock.com/rails/ActionView/Helpers/TextHelper/truncate">&lt;%= truncate</a>(article.text) { link_to &quot;Ver mais&quot;, article }<br>&lt;/div&gt;</pre><p>Chamando a variável “article_counter” podemos calcular o módulo por 4 e imprimir o fechamento e abertuda da div “.row”, sempre que se iniciar uma nova linha.</p><p>É isso, eu irei continuar publicando essas pequenas dicas sobre o que vou vendo no dia a dia com o Rails.</p><p>Valeu até a próxima.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=16c49f239e75" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Rails: Utilizando o scope de outra classe na query]]></title>
            <link>https://medium.com/@johnwmcarneiro/rails-utilizando-o-scope-de-outra-classe-na-query-130ee45606ec?source=rss-2e8b303f5fb9------2</link>
            <guid isPermaLink="false">https://medium.com/p/130ee45606ec</guid>
            <category><![CDATA[ruby]]></category>
            <category><![CDATA[ruby-on-rails]]></category>
            <dc:creator><![CDATA[John Carneiro]]></dc:creator>
            <pubDate>Fri, 01 Dec 2017 22:58:43 GMT</pubDate>
            <atom:updated>2017-12-01T22:58:43.351Z</atom:updated>
            <content:encoded><![CDATA[<p>Hoje tive uma situação onde eu tinha a model “A” e fazia um join na model “B” e precisava utilizar um scope de B (para não ter quer duplicar código), então cheguei no método “Merge” do ActiveRecord, abaixo vou exemplificar como utilizar.</p><p>Imagine que tenhamos duas models, a primeira Offer (Oferta) e a segunda Lot (lote).</p><p>Onde:</p><ul><li>Cada oferta pode ter muitos lotes.</li><li>O período de disponibilidade é definido em Lote.</li></ul><p>Teríamos mais ou menos o seguinte cenário.</p><pre># Fields<br># id<br># name (string)<br># status (integer)<br>class Offer &lt; ApplicationRecord<br>  enum status: [:active, :inactive]  <br>  has_many :lots<br>end</pre><pre># fields<br># id (int)<br># offer_id (int)<br># start_date (datetime)<br># end_date (datetime) <br>class Lot &lt; ApplicationRecord<br>  belongs_to :offer</pre><pre>  scope :available, -&gt; { where(&#39;? BETWEEN lots.start_date AND lots.end_date&#39;, Time.current) }<br>end</pre><p>Agora imagine que deseja buscar todas as ofertas ativas que possuam lotes, sendo assim facilmente conseguiríamos com o código abaixo:</p><pre>@offers = Offer.active.joins(:lots).group(:id)</pre><p>Mas agora imagine que desejamos buscar todas as ofertas ativas, que tenha ligação com os lotes e que estes lotes estejam disponíveis. <br>Como faremos? <br>E se tentarmos chamar o scope “available” de “Lot” na query como no exemplo abaixo, o que aconteceria?</p><pre>@offers = Offer.active.joins(:lots).group(:id).available</pre><p>Provavelmente irá gerar um erro como esse<strong> “undefined method `only_available’ for &lt;#Offer…”</strong>, não é mesmo? <br>Obviamente o método não está disponível para a model “Offer”, sendo assim como podemos fazer?</p><p>Então nesse caso podemos utilizar o método “merge”, ela permitir que façamos essa interseção. Então vamos para o código...</p><pre>@offers = Offer.active.joins(:lots).merge(Lot.available).group(:id)</pre><p>Assim eles irá gerar uma SQL mais ou menos assim.</p><pre>SELECT ... <br>FROM offers <br>INNER JOIN lots ... <br>WHERE <strong>&#39;DATA_ATUAL&#39; BETWEEN lots.start_date AND lots.end_date<br></strong>AND offers.status = 0<br>GROUP BY offers.id</pre><p>Agora percebe-se que ele gerou corretamente, pois ele lista as ofertas com lotes ligados, onde essa oferta deve ser ativa e a data atual deve estar dentro do período do lote.</p><p><em>Vale lembrar que utilizei o “GROUP BY” para evitar registros duplicados das ofertas, dado que ele faz um JOIN com os lotes e poderá ter mais de uma lote com período válido para cada oferta, gerando assim a duplicação de registros de oferta na listagem.</em></p><p>Você pode conferir o funcionamento do método “merge” através do link abaixo.<br><a href="http://api.rubyonrails.org/classes/ActiveRecord/SpawnMethods.html#method-i-merge">http://api.rubyonrails.org/classes/ActiveRecord/SpawnMethods.html#method-i-merge</a></p><p>Até a próximo!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=130ee45606ec" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[As vezes dê um tempo]]></title>
            <link>https://medium.com/@johnwmcarneiro/as-vezes-d%C3%AA-um-tempo-f5ce4ffe3eed?source=rss-2e8b303f5fb9------2</link>
            <guid isPermaLink="false">https://medium.com/p/f5ce4ffe3eed</guid>
            <category><![CDATA[trabalho]]></category>
            <category><![CDATA[produtividade]]></category>
            <dc:creator><![CDATA[John Carneiro]]></dc:creator>
            <pubDate>Sat, 30 Sep 2017 00:36:54 GMT</pubDate>
            <atom:updated>2017-09-30T01:38:31.870Z</atom:updated>
            <content:encoded><![CDATA[<p>Esse é o meu primeiro texto aqui e na verdade acho que é o meu primeiro texto em qualquer lugar, não sou muito de escrever…</p><p>Mas senti vontade de compartilhar sobre o que passei agora, pois nesse exato momento eu acho que fiquei “cego”, pois o problema estava bem na minha frente e eu não percebia a ÓBVIA solução.</p><p>Para quem já programou algum um projeto, já deve ter percebido como ficamos imersos entre linhas de código e “telas pretas”, mas também, certamente notou como apesar de todo o foco, as vezes parece como se um duende colocasse a solução sob uma faixa preta.</p><p>Fiquei mais de uma hora e meia, ou seja, mais de 90 minutos da minha vida, tentando resolver um problema que não existia por uma situação que imaginava ser diferente, simplesmente por um dia exaustivo de trabalho.</p><p>Qual foi a solução?</p><p>Levantei, me estiquei, fui ao banheiro, tomei uma água, liguei a TV e 10 minutos depois… “MEUS DEUS, como não percebi isso!”, voltei para o notebook e digitei “git status”, simplesmente descobri que não havia feito o “upload” do “<a href="http://gembundler.com/v1.3/rationale.html">Gemfile.lock</a>” e o sistema acusava diferença entre o Gemfile e Gemfile.lock.</p><p>Moral da história, tão importante quanto se dedicar intensamente aos projetos você deve também dedicar um tempo para você e suas necessidades físicas.</p><p>A máquina as vezes falha e isso afeta sua produtividade.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f5ce4ffe3eed" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>