{"id":1907,"date":"2014-07-22T22:36:13","date_gmt":"2014-07-23T01:36:13","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=1907"},"modified":"2014-07-22T22:36:13","modified_gmt":"2014-07-23T01:36:13","slug":"como-cai-no-groovy-e-mergulhei-no-grails","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=1907","title":{"rendered":"Como cai no Groovy e mergulhei no Grails"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-235\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png\" alt=\"groovylogo\" width=\"203\" height=\"100\" \/>Hoje passeando por\u00a0antigos c\u00f3digos meus percebi uma coisa: faz DEZ anos que programo em Groovy, e seis que criei o Grails Brasil. Uou! Tenho muitas lembran\u00e7as legais deste per\u00edodo no qual trabalhei com aquela que, hoje posso dizer com \u00a0seguran\u00e7a, \u00e9 minha linguagem favorita. Neste post conto o in\u00edcio desta hist\u00f3ria.<\/p>\n<h3>Culpa da classe java.math.BigDecimal!<\/h3>\n<p>Era 2004 e tudo come\u00e7ou por que sou um fervoroso inimigo da classe java.math.BigDecimal do Java. Se n\u00e3o a conhece, \u00e9 a classe que usamos para lidar com n\u00fameros de alta precis\u00e3o. Qual o problema com ela? Simples: imagine que eu precise implementar a f\u00f3rmula de Bhaskara:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n\r\nBigDecimal bhaskara(BigDecimal a, BigDecimal b, BigDecimal C) {\r\nBigDecimal delta = b.multiply(b).subtract(new BigDecimal(4).multiply(a).multiply(c));\r\nreturn b.multiply(new BigDecimal(-1)).subtract(Math.sqrt(delta)).divide(new BigDecimal(4).multiply(a).multiply(c));\r\n\r\n}\r\n\r\n<\/pre>\n<figure id=\"attachment_1912\" aria-describedby=\"caption-attachment-1912\" style=\"width: 206px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1912\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2014\/07\/bhaskara.jpg\" alt=\"Acho que este \u00e9 o Bhaskara mesmo\" width=\"206\" height=\"240\" \/><figcaption id=\"caption-attachment-1912\" class=\"wp-caption-text\">Acho que este \u00e9 o Bhaskara mesmo<\/figcaption><\/figure>\n<p>Tirei parte da f\u00f3rmula (e deve ter erro t\u00e1?) s\u00f3 para expor meu ponto. Eu queria usar a JVM, sabia do qu\u00e3o poderosa esta era e \u00e9. E eu tinha tamb\u00e9m uma imensa quantidade de c\u00f3digo fonte Java que n\u00e3o queria jogar fora. Foi quando vi que existia uma linguagem chamada Groovy na qual eu podia escrever algo como no exemplo a seguir:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n\r\ndef bhaskara(a, b, c) {\r\n-b + Math.sqrt( (b*b) - (4*a*c))\r\n}\r\n\r\n<\/pre>\n<p>Me ganhou na hora. De repente eu podia escrever minhas aplica\u00e7\u00f5es matem\u00e1ticas sem a maldita classe BigDecimal. E sabem o que era mais legal? Aquela fun\u00e7\u00e3o em Groovy me retornava um objeto do tipo&#8230; BigDecimal! Yeap: sentimento &#8220;troll master&#8221; me dominou.<\/p>\n<h3>Percebo que eu possu\u00eda&#8230; scripts!<\/h3>\n<p>Por um bom tempo Groovy era apenas a linguagem que eu usava para escrever minhas f\u00f3rmulas: um motor matem\u00e1tico no m\u00e1ximo. Eu salvava as f\u00f3rmulas em arquivos ou no banco de dados, meu sistema Java as carregava, passava alguns par\u00e2metros para aquele c\u00f3digo e na outra ponta vinha o resultado. Sabe aquele momento na vida em que voc\u00ea percebe que teve ouro o tempo inteiro diante de si e o ignorava? Foi o estalo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1911\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2014\/07\/script.png\" alt=\"script\" width=\"150\" height=\"150\" \/><\/p>\n<p>Juro: n\u00e3o havia me passado pela cabe\u00e7a que aquelas fun\u00e7\u00f5es na realidade eram scripts! De repente acordei para o fato de que meus scripts podiam acessar meu c\u00f3digo Java nativo, e meu c\u00f3digo Java podia executar aqueles scripts e coisas boas poderiam surgir dali.<\/p>\n<p>Se meu script acessa meu c\u00f3digo Java dentro do meu projeto&#8230; por que n\u00e3o permitir que meus usu\u00e1rios possam estender meus sistemas? Assim eu trabalharia\u00a0\u00a0menos pois fornecia apenas o framework b\u00e1sico e eles o &#8220;recheio&#8221; na forma dos scripts.<\/p>\n<h3>Percebo que meus scripts poderiam ser usados para criar minhas pr\u00f3prias&#8230; linguagens!<\/h3>\n<p>A possibilidade dos meus usu\u00e1rios fornecerem seus pr\u00f3prios scripts parecia maravilhosa, mas na pr\u00e1tica eu acabava trabalhando muito mais, pois quem escrevia os scripts era&#8230; EU! Os usu\u00e1rios simplesmente n\u00e3o sabiam programar.<\/p>\n<figure id=\"attachment_1913\" aria-describedby=\"caption-attachment-1913\" style=\"width: 200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1913\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2014\/07\/kplusplus.png\" alt=\"C++? K++ !\" width=\"200\" height=\"84\" \/><figcaption id=\"caption-attachment-1913\" class=\"wp-caption-text\">C++?\u00a0Humpf!<\/figcaption><\/figure>\n<p>Mas a\u00ed eu percebi que na linguagem havia alguns construtores que me permitiam criar algo que era quase como minha pr\u00f3pria linguagem de programa\u00e7\u00e3o. Anos depois fiquei sabendo que aquelas &#8220;quase linguagens de programa\u00e7\u00e3o&#8221; tinham um nome t\u00e9cnico: Domain Specific Languages, as linguagens espec\u00edficas de contexto (Martin Fowler tem inclusive um <a href=\"http:\/\/martinfowler.com\/books\/dsl.html\">livro bem bacana<\/a> sobre o assunto cuja leitura recomendo).<\/p>\n<p>De repente meu sonho de ter meu pr\u00f3prio &#8220;K++&#8221; estava pr\u00f3ximo de se tornar realidade. E sabem o que \u00e9 mais legal? Aquelas DSLs que eu criava funcionavam: os usu\u00e1rios conseguiam digitar suas pr\u00f3prias f\u00f3rmulas no sistema\u00a0<strong>sem me chamar!<\/strong> Eu estava trabalhando&#8230; mil\u00edmetros a menos.<\/p>\n<h3>Percebo que escrever aplica\u00e7\u00f5es web em Java era&#8230; um porre!<\/h3>\n<p>Meu framework web favorito por um tempo foi o JSF 1.2. Apesar de ter sido um projeto que fracassou em diversos aspectos (escrever componentes era horr\u00edvel, desenvolvimento fora da web para PDAs e desktop nunca se realizou, as IDEs que nos permitiram programar apenas arrastando e soltando nunca funcionaram e mais alguns que n\u00e3o me lembro agora) eu gostava muito dele. Me sentia produtivo e diria que at\u00e9 mesmo mais inteligente que as outras pessoas.<\/p>\n<p>Foi quando vi uma apresenta\u00e7\u00e3o de um sujeito chamado &#8220;David Heineieneimengen Hanso&#8221; ou coisa similar fazendo uma demonstra\u00e7\u00e3o de uma coisa chamada &#8220;Ruby on Rails&#8221;. O v\u00eddeo ainda est\u00e1 dispon\u00edvel no YouTube e sugiro que voc\u00ea o assista pois aquele foi um momento hist\u00f3rico. Aqui o link:\u00a0<a href=\"https:\/\/www.youtube.com\/watch?v=Gzj723LkRJY\">https:\/\/www.youtube.com\/watch?v=Gzj723LkRJY<\/a><\/p>\n<figure id=\"attachment_1910\" aria-describedby=\"caption-attachment-1910\" style=\"width: 200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1910\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2014\/07\/dhh.jpg\" alt=\"\u00c9 David Heinemeier Hansson o nome, mas eu sempre vou dizer DHH por que \u00e9 mais f\u00e1cil!\" width=\"200\" height=\"200\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2014\/07\/dhh.jpg 200w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2014\/07\/dhh-150x150.jpg 150w\" sizes=\"(max-width: 200px) 100vw, 200px\" \/><figcaption id=\"caption-attachment-1910\" class=\"wp-caption-text\">\u00c9 David Heinemeier Hansson o nome, mas eu sempre vou dizer DHH\u00a0<\/figcaption><\/figure>\n<p>Era um v\u00eddeo cheio de &#8220;Ops&#8221;, &#8220;Uopa&#8221; e uma s\u00e9rie de pequenos erros. Soavam engra\u00e7ados em um primerio momento, mas sabem o que era chocante? De repente aquela minha sensa\u00e7\u00e3o de que eu trabalhava de uma forma extremamente inteligente se transformou em vergonha. Eu trabalhava de uma forma muito, muito tosca perto do que aquele sujeito estrangeiro cujo nome eu mal conseguia pronunciar estava me mostrando.<\/p>\n<p>Foi o melhor tapa na cara que levei na vida!<\/p>\n<h3>E a\u00ed eu tentei o Ruby on Rails e era muito lindo e&#8230; meu passado veio me importunar!<\/h3>\n<p>E puxa vida, o tal do Ruby on Rails era muito lindo! Eu estava criando aqueles projetos com uma velocidade incr\u00edvel: pegava meu banco de dados, criava algumas classes, iniciava o scaffolding e boom: l\u00e1 estavam minhas p\u00e1ginas!<\/p>\n<p>Me lembro tamb\u00e9m de ter comprado um livro excelente, de um sujeito chamado F\u00e1bio Akita, o\u00a0&#8220;Repensando a web com Rails&#8221;. Foi uma experi\u00eancia muito bacana porque eu lia o livro, experimentava no meu PC, ia progredindo, as aplica\u00e7\u00f5es crescendo e de repente eu achava Java um porre e o JSF a coisa mais entediante do universo. (ah&#8230; a arrog\u00e2ncia&#8230;)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1914\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2014\/07\/capa_repensando_mini.jpg\" alt=\"capa_repensando_mini\" width=\"148\" height=\"224\" \/><\/p>\n<p>Foi quando na empresa em que trabalhava desenvolvi um projeto no qual precisava usar uma boa quantidade de c\u00f3digo que eu j\u00e1 tinha implementado e funcionava perfeitamente bem em&#8230; Java. \u00a0Virei para os meus colegas e disse: &#8220;ah, basta que a gente reescreva tudo em Ruby que \u00e9 uma linguagem super massa!&#8221;.<\/p>\n<p>Ainda me lembro da assustadora sensa\u00e7\u00e3o de voar sobre minha casa gra\u00e7as ao &#8220;amistoso impulso&#8221; dado pelos meus colegas de trabalho, aqueles &#8220;pregui\u00e7osos que n\u00e3o queriam reescrever todo o seu c\u00f3digo em uma linguagem mais massa que a deles&#8221;. :)<\/p>\n<h3>Tem um tal de Groovy on Rails que parece massa&#8230;<\/h3>\n<p>Voltar para o JSF 1.2 foi muito triste. Era como se em um dia eu estivesse no para\u00edso e no seguinte estivesse&#8230; escrevendo componentes em JSF 1.2.\u00a0At\u00e9 me inspirou a escrever um texto sobre o assunto um tempo depois, s\u00f3 que n\u00e3o sobre o JSF, mas sim sobre <a href=\"https:\/\/devkico.itexto.com.br\/?p=273\">&#8220;cavernas&#8221;<\/a>. :)<\/p>\n<p>Mas eu ouvia falar de algo chamado <em>Groovy on Rails<\/em>\u00a0que ainda n\u00e3o tinha atingido a vers\u00e3o 1.0 mas que me possibilitava ter o mesmo estilo de desenvolvimento que o pessoal do Ruby on Rails tinha. E com uma vantagem: eu podia reaproveitar todo o meu c\u00f3digo Java nativo e ainda ter uma performance muito superior, pois estava usando a JVM e todos aqueles servidores de aplica\u00e7\u00e3o que me pareciam t\u00e3o fant\u00e1sticos na \u00e9poca!<\/p>\n<p>Os primeiros projetos foram sucesso absoluto e n\u00f3s pudemos usar todo aquele nosso c\u00f3digo legado. O passado deixou de ser um problema e se tornou um aliado. E ainda melhor: eu n\u00e3o estava programando apenas em Java, mas em Groovy e tinha todos aqueles tesouros que havia descoberto com o tempo. Foi lindo.<\/p>\n<h3>Mas s\u00f3 eu usava aquele neg\u00f3cio e aquela solid\u00e3o me incomodava muito&#8230; e se eu buscasse por gente que tamb\u00e9m usasse aquilo?<\/h3>\n<p>S\u00f3 nossa equipe usava Groovy e Grails. Na realidade, na nossa equipe s\u00f3 eu usava Grails, pois os outros tinham medo de chegar perto daquela &#8220;coisa que ningu\u00e9m usava&#8221;. E no GUJ n\u00e3o via o pessoal falar a respeito.<\/p>\n<figure id=\"attachment_473\" aria-describedby=\"caption-attachment-473\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-473 size-medium\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/09\/grails_brasil-300x54.png\" alt=\"grails_brasil\" width=\"300\" height=\"54\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/09\/grails_brasil-300x54.png 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/09\/grails_brasil.png 450w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-473\" class=\"wp-caption-text\">Primeiro logo do Grails Brasil<\/figcaption><\/figure>\n<p>E eu ganhava extremamente mal, \u00a0mas na <a href=\"http:\/\/www.hostnet.com.br\">Hostnet<\/a>\u00a0tinha um plano de PHP que custava na \u00e9poca algo em torno de R$ 24,90 por m\u00eas no qual havia alguns assistentes que permitiam aos clientes instalar sistemas PHP de forma muito simples e r\u00e1pida. Um destes assistentes era para o\u00a0<a href=\"https:\/\/www.phpbb.com\/\">phpBB<\/a>, que \u00e9 um excelente motor de f\u00f3rum feito em&#8230; PHP.<\/p>\n<p>Na \u00e9poca eu conhecia bem\u00a0PHP: \u00a0juntei a fome com a vontade de comer e, naquele dia 15 de fevereiro de 2008, no intervalo do almo\u00e7o (terminei o dia com fome), assinei o plano, executei o assistente, customizei o phpBB, registrei o dom\u00ednio grailsbrasil.com e tempos depois o grailsbrasil.com.br. Tudo em 40 minutos. Nascia ali o Grails Brasil pois eu queria conhecer mais pessoas que tamb\u00e9m usassem Grails\u00a0<strong>e<\/strong> falassem portugu\u00eas.<\/p>\n<p>Na primeira semana havia 20 membros, no primeiro m\u00eas 50. Foi um choque para mim. N\u00e3o esperava que o Grails Brasil iria durar mais que seis meses (na realidade, eu nem sabia se teria dinheiro para pagar as coisas depois daquele per\u00edodo).<\/p>\n<h3>E hoje, bem&#8230;<\/h3>\n<p>A maior parte das pessoas me conhecem por causa do Grails. Publiquei um monte de artigos sobre, criei este blog, Grails Brasil saiu do phpBB e hoje \u00e9 100% escrito em Grails (uso a vers\u00e3o 1.3.9\u00a0at\u00e9 hoje!), publiquei um livro sobre <a href=\"http:\/\/www.casadocodigo.com.br\/products\/spring\">Spring <\/a>e estou lutando para terminar o meu livro sobre Grails (cuja id\u00e9ia para escrev\u00ea-lo surgiu l\u00e1 pelos idos de 2009, 2010) e cujo resultado final, espero, vai alegar muita gente nos pr\u00f3ximos meses (eu sei que estou atrasad\u00edssimo).<\/p>\n<p>Grails Brasil t\u00e1 chegando perto dos 2000 membros e eu continuo usando estas tecnologias diariamente. As vi evoluir, Groovy deixou de ser uma lesma e hoje tem performance pr\u00f3xima \u00e0 do Java, mais e mais pessoas\u00a0programam em Groovy e Grails aqui no Brasil , uma\u00a0<strong>porrada de empregos<\/strong> foi criada gra\u00e7as a estas tecnologias, muita gente veio para o Java gra\u00e7as ao Groovy e outra penca para o Java EE gra\u00e7as ao Grails.<\/p>\n<p>Acho esta uma hist\u00f3ria bacana, e ainda ocultei aqui diversos detalhes que dariam um livro. Conheci <strong>muitas\u00a0<\/strong>pessoas interessantes e fiz\u00a0excelentes amizades. E sinceramente? Pra uns vai soar estranho, mas me vejo programando em Groovy daqui a dez anos: talvez n\u00e3o como linguagem principal (sei l\u00e1 o que vai surgir), mas com certeza como aquela que me quebra diversos galhos di\u00e1rios.<\/p>\n<p>Aviso: momento cafona a seguir<\/p>\n<p>N\u00e3o \u00e9 exagero dizer que Groovy e Grails fazem parte da minha fam\u00edlia.<\/p>\n<h3>PS:<\/h3>\n<p>E eu ainda nem cheguei no primeiro quarto da hist\u00f3ria. Coisas boas vir\u00e3o neste ano e no pr\u00f3ximo. :)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meu in\u00edcio com Groovy e Grails<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,5,34],"tags":[],"class_list":["post-1907","post","type-post","status-publish","format-standard","hentry","category-grails","category-groovy","category-paideia"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Como cai no Groovy e mergulhei no Grails - \/dev\/Kico<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devkico.itexto.com.br\/?p=1907\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como cai no Groovy e mergulhei no Grails - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Meu in\u00edcio com Groovy e Grails\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=1907\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-23T01:36:13+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2008\/12\/groovylogo.png\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1907\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=1907\",\"name\":\"Como cai no Groovy e mergulhei no Grails - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1907#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1907#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png\",\"datePublished\":\"2014-07-23T01:36:13+00:00\",\"dateModified\":\"2014-07-23T01:36:13+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1907#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=1907\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1907#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1907#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como cai no Groovy e mergulhei no Grails\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como cai no Groovy e mergulhei no Grails - \/dev\/Kico","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devkico.itexto.com.br\/?p=1907","og_locale":"pt_BR","og_type":"article","og_title":"Como cai no Groovy e mergulhei no Grails - \/dev\/Kico","og_description":"Meu in\u00edcio com Groovy e Grails","og_url":"https:\/\/devkico.itexto.com.br\/?p=1907","og_site_name":"\/dev\/Kico","article_published_time":"2014-07-23T01:36:13+00:00","og_image":[{"url":"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2008\/12\/groovylogo.png"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=1907","url":"https:\/\/devkico.itexto.com.br\/?p=1907","name":"Como cai no Groovy e mergulhei no Grails - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1907#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1907#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png","datePublished":"2014-07-23T01:36:13+00:00","dateModified":"2014-07-23T01:36:13+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1907#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=1907"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=1907#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=1907#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Como cai no Groovy e mergulhei no Grails"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1907"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1907"}],"version-history":[{"count":3,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1907\/revisions"}],"predecessor-version":[{"id":1915,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1907\/revisions\/1915"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}