{"id":3304,"date":"2014-03-17T00:07:36","date_gmt":"2014-03-16T23:07:36","guid":{"rendered":"http:\/\/blog.modelical.com\/?p=376"},"modified":"2022-04-28T17:10:39","modified_gmt":"2022-04-28T15:10:39","slug":"grasshopper-scripting-101","status":"publish","type":"post","link":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/","title":{"rendered":"Grasshopper Scripting 101"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>This is the first of a series of posts that should work as an introductory course to computer programming in general and scripting in Grasshopper in particular. It was first written for my classes in IE University but I&#8217;ll make it &#8211; at least partially- accesible here due to two facts: Programming is something we do professionally at Modelical and many of my colleagues help me with it and posting this on the blog offers me better tools to share the code and to receive feedback.<\/p>\n<h3>Why Do I Need To Learn To Program?<\/h3>\n<p>Simple: Buildings are designed, built and maintained based on information. That information has to be created and curated. Creating, storing and processing information is much simpler nowadays because we have computers. Dealing with computers is several times simpler and more powerful if you speak their language, and that language is <em>programming.<\/em><\/p>\n<p>If you&#8217;re reading this, chances are you&#8217;ve had a great time playing and learning Grasshopper and now you need\/want more. Well, let me tell you that programming is ALL you&#8217;ve been doing this far. Connecting nodes is -basically- coding in a language called Grasshopper in order to control an application called Rhino. Now we are going to learn how to do that more consciously and efficiently.<\/p>\n<h3>Things I Can Do In Grasshopper If I Learn Scripting.<\/h3>\n<p>Well, is not just a matter of quantity but also a matter of quality and effectiveness. With the beautiful tools and component added to GH with every release, there are few things you can do only if you write scripts but there certainly are some important ones. By learning scripting you&#8217;ll be able to:<\/p>\n<li>Reduce the size and complexity of your definitions, developing solutions faster with less work.<\/li>\n<li>Layout and use more complex program-flow concepts taking advantage of complete iteration, recursion and tools reuse.<\/li>\n<li>Develop your own plug-ins.<\/li>\n<p>Besides, this might be your first try with scripting in general and let me say that if you&#8217;re able to understand the principles of programming through GH, you&#8217;ll be able to understand and leverage other tools more deeply, even learning other scripting languages for other applications and who knows, maybe develop that <em>superpower<\/em> called <em>Programming.<\/em><\/p>\n<h3>Programming vs. Scripting<\/h3>\n<p>You might have noticed that I talk about programming and scripting. They are not the same, or at least we&#8217;ll assume there&#8217;s a difference.<\/p>\n<p><a title=\"Scripting in Wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Scripting_language\"><strong>Scripting<\/strong><\/a> comes from latin Scribere &#8211; to write &#8211; and is used to describe a series of ordered instructions to be completed by the computer. A script is a list of replicable actions to be completed by a certain computing environment. A script works most of the time in the context of a wider application, Grasshopper within Rhinoceros in our case.<\/p>\n<p><strong>Programming<\/strong> is the action of creating a program, a set of instructions required by a computer to perform a certain task. Programming is a much wider concept as you would call Rhinoceros a program and not a script. Programs are interactive and have different status, they perform many different tasks and some of them may resemble or be like scripts. Programming, in a general sense, requires careful planning and uses complex strategies like the widely accepted paradign of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Object-oriented_programming\">Object Oriented Programming<\/a>.<\/p>\n<p>You&#8217;ll get a better idea with the course but keep in mind that programming requires writing scripts among other things and that scripting is a great point to start learning to program.<\/p>\n<p><strong>Programming \/ Scripting Languages<\/strong><\/p>\n<p>Scripting is basically about writing instructions for a certain application. Those instructions must come with a language, a syntax and a vocabulary.<\/p>\n<p>Language and syntax come together and in computing you have to follow the latter very carefully as computers cannot understand what we&#8217;d call &#8220;natural language&#8221; as we humans do.<\/p>\n<p>See the difference:<\/p>\n<p>&#8220;Er&#8230;can you come closer, yes, that&#8217;s it, a little bit mor&#8230;to your left, now you gotta raise your hands, that&#8217;s nice, ok, so we&#8217;re ready&#8230;&#8221;<\/p>\n<p>&#8220;Come to X=1.5, Y=0.73. Raise your hands.&#8221;<\/p>\n<p>The vocabulary is optional but we&#8217;ll be faster and more precise if we&#8217;re able to use better targeted nouns, adjectives and verbs when discribing to the computer what we want it to do.<\/p>\n<p>There are hundreds of programming languages and some of them are also available to speak to Rhinoceros \/ Grasshopper: C# (C-sharp) , Visual Basic .Net and Python.\u00a0For what is worth, all three languages would do fine for us. None of them has a winning feature and all of them are quite popular for many other purposes. Each one has an specific syntax that you should get familiar with in order to perform well. <strong>We will use C#.<\/strong><\/p>\n<p>For the vocabulary, we will use a library called RhinoCommon. It is a set of instruction specifically writen for Rhino in a modern and convenient way. RhinoCommon will be a set of shortcut words to ask Rhinoceros \/ Grasshopper to do amazing things for us.<\/p>\n<p><strong>Why C# and not Python nor VB.NET?<\/strong><\/p>\n<p>There is only one and main reason for this: because I know C# better than the others. Period.<\/p>\n<p>Trust me, programming is a much bigger endeavour than just learning a language and if I am going to teach you, we&#8217;ll both be better off if one of us knows what he&#8217;s doing.<\/p>\n<p>Besides, there are other and more technical reasons to choose C#:<\/p>\n<li>C# is strongly typed. This means you&#8217;ll have to know what you&#8217;re doing when declaring and assigning variables. VB.NET is also strongly typed but I find C# faster to write and cleaner to read. This of course is a personal feeling.<\/li>\n<li>C# is based on C\/C++ and its syntax is quite similar to other modern and cool languages as Java, PHP and Javascript which you might encounter in the future.<\/li>\n<li>There are more examples of GH scripts in C# than in other languages <a href=\"http:\/\/www.grasshopper3d.com\/forum\/categories\/vb-c-and-python-coding\/listForCategory\">at the forum<\/a>, at least for now.<\/li>\n<li>C# is the de-facto standard language for other application API&#8217;s like AutoCAD or Revit.<\/li>\n<p>But again, the main and only reason to choose C# over the rest is that I feel more confortable with it.<\/p>\n<h3>The simplest description of Programming<\/h3>\n<p>After some years of thinking about it I&#8217;ve come to the following ridiculously over-simplified expression of programming.<\/p>\n<p>You should understand programming -and scripting as a subset of it- as the\u00a0<em>art<\/em> of storing and processing pieces of information, one bit at a time. An example:<\/p>\n<p>When you ask your computer to add 5 + 5,<\/p>\n<pre class=\"lang:c# decode:true\">int result = 5 + 5;<\/pre>\n<p>I like to think it in this way.<\/p>\n<ol>\n<li>The computer has to clearly undertstand what you mean by &#8220;5&#8221; and &#8220;+&#8221;. You help it by stating somewhere that you are working with integer numbers.<\/li>\n<li>At the same time you&#8217;re creating what is called a variable, a space in memory to store the\u00a0<em>result.\u00a0<\/em>It is important that you declare the type of the result as it will help the computer allocating only the right amount of memory.<\/li>\n<li>The expression is evaluated one part at a time and the\u00a0<em>result\u00a0<\/em>variable is filled with 10.<\/li>\n<\/ol>\n<h3>Running Scripts In Grasshopper<\/h3>\n<p>Scripting in GH is intended to help you write your own components, and as so, you will be only be able to write scripts within components.<\/p>\n<p>To create a new C# custom component, double click on the canvas and type <em>C# Script<\/em>\u00a0or go to Maths tab &gt; Script &gt; C# Script.<\/p>\n<p>Scripts are quite similar to expression components, you can add and remove inputs (and outputs) by zooming in and pressing the (+) and (-) buttons.<\/p>\n<p><img decoding=\"async\" width=\"800\" height=\"251\" class=\"aligncenter wp-image-4280 size-full\" alt=\"101-01\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/11\/101-01.jpg\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/11\/101-01.jpg 800w, https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/11\/101-01-480x151.jpg 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/11\/101-01-768x241.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>To edit the script, just double click in the center or right click on it and select &#8220;Edit Source&#8230;&#8221;<\/p>\n<p><img decoding=\"async\" width=\"800\" height=\"411\" class=\"aligncenter wp-image-4281 size-full\" alt=\"101-02\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/11\/101-02.jpg\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/11\/101-02.jpg 800w, https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/11\/101-02-480x247.jpg 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/11\/101-02-768x395.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>The editor contains to editable regions:<\/p>\n<li>The\u00a0<strong>RunScript\u00a0<\/strong>method, inside the curly brackets, where the main instructions are provided.<\/li>\n<li>The <strong>&lt;Custom Additional Code&gt;<\/strong> region, where we&#8217;ll add utility functions.<\/li>\n<p>Your scripts will be saved as part of the GH definition so you don&#8217;t have to worry about the editor, so simple, so good!<\/p>\n<p>Ok, so now is time to start working with information. Go ahead to the\u00a0<strong>Next step:<\/strong> <a title=\"Grasshopper Scripting 102 \u2013 Variables and Assignment\" href=\"https:\/\/www.modelical.com\/en\/grasshopper-scripting-102-variables-and-assignment\/\">GH Scripting 102 &#8211; Variables &amp; Assignment<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction This is the first of a series of posts that should work as an introductory course to computer programming in general and scripting in Grasshopper in particular. It was first written for my classes in IE University but I&#8217;ll make it &#8211; at least partially- accesible here due to two facts: Programming is something [&hellip;]<\/p>\n","protected":false},"author":64,"featured_media":27197,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[423,418],"class_list":["post-3304","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guidelines","tag-technology-c","tag-technology-grasshopper"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Grasshopper Scripting 101 - Modelical<\/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:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Grasshopper Scripting 101 - Modelical\" \/>\n<meta property=\"og:description\" content=\"Introduction This is the first of a series of posts that should work as an introductory course to computer programming in general and scripting in Grasshopper in particular. It was first written for my classes in IE University but I&#8217;ll make it &#8211; at least partially- accesible here due to two facts: Programming is something [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/\" \/>\n<meta property=\"og:site_name\" content=\"Modelical\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Modelical\/\" \/>\n<meta property=\"article:published_time\" content=\"2014-03-16T23:07:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-28T15:10:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.modelical.com\/wp-content\/uploads\/Posts_37_GH_7.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"375\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Roberto Molinos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@modelical\" \/>\n<meta name=\"twitter:site\" content=\"@modelical\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Roberto Molinos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/\"},\"author\":{\"name\":\"Roberto Molinos\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#\\\/schema\\\/person\\\/3ad52fd99e6b5b98a59ef24c76a7c2d5\"},\"headline\":\"Grasshopper Scripting 101\",\"datePublished\":\"2014-03-16T23:07:36+00:00\",\"dateModified\":\"2022-04-28T15:10:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/\"},\"wordCount\":1360,\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/03\\\/Posts_37_GH_7-400x250-1.jpg\",\"keywords\":[\"Tec C#\",\"Tec Grasshopper\"],\"articleSection\":[\"Guidelines\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/\",\"name\":\"Grasshopper Scripting 101 - Modelical\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/03\\\/Posts_37_GH_7-400x250-1.jpg\",\"datePublished\":\"2014-03-16T23:07:36+00:00\",\"dateModified\":\"2022-04-28T15:10:39+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#\\\/schema\\\/person\\\/3ad52fd99e6b5b98a59ef24c76a7c2d5\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/03\\\/Posts_37_GH_7-400x250-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/03\\\/Posts_37_GH_7-400x250-1.jpg\",\"width\":400,\"height\":250},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/\",\"name\":\"Modelical\",\"description\":\"We build information\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#\\\/schema\\\/person\\\/3ad52fd99e6b5b98a59ef24c76a7c2d5\",\"name\":\"Roberto Molinos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro\",\"caption\":\"Roberto Molinos\"},\"sameAs\":[\"https:\\\/\\\/www.modelical.com\"],\"url\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/author\\\/roberto\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Grasshopper Scripting 101 - Modelical","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:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/","og_locale":"en_US","og_type":"article","og_title":"Grasshopper Scripting 101 - Modelical","og_description":"Introduction This is the first of a series of posts that should work as an introductory course to computer programming in general and scripting in Grasshopper in particular. It was first written for my classes in IE University but I&#8217;ll make it &#8211; at least partially- accesible here due to two facts: Programming is something [&hellip;]","og_url":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/","og_site_name":"Modelical","article_publisher":"https:\/\/www.facebook.com\/Modelical\/","article_published_time":"2014-03-16T23:07:36+00:00","article_modified_time":"2022-04-28T15:10:39+00:00","og_image":[{"width":600,"height":375,"url":"https:\/\/www.modelical.com\/wp-content\/uploads\/Posts_37_GH_7.jpg","type":"image\/jpeg"}],"author":"Roberto Molinos","twitter_card":"summary_large_image","twitter_creator":"@modelical","twitter_site":"@modelical","twitter_misc":{"Written by":"Roberto Molinos","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/#article","isPartOf":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/"},"author":{"name":"Roberto Molinos","@id":"https:\/\/www.modelical.com\/en\/#\/schema\/person\/3ad52fd99e6b5b98a59ef24c76a7c2d5"},"headline":"Grasshopper Scripting 101","datePublished":"2014-03-16T23:07:36+00:00","dateModified":"2022-04-28T15:10:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/"},"wordCount":1360,"image":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/Posts_37_GH_7-400x250-1.jpg","keywords":["Tec C#","Tec Grasshopper"],"articleSection":["Guidelines"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/","url":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/","name":"Grasshopper Scripting 101 - Modelical","isPartOf":{"@id":"https:\/\/www.modelical.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/#primaryimage"},"image":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/Posts_37_GH_7-400x250-1.jpg","datePublished":"2014-03-16T23:07:36+00:00","dateModified":"2022-04-28T15:10:39+00:00","author":{"@id":"https:\/\/www.modelical.com\/en\/#\/schema\/person\/3ad52fd99e6b5b98a59ef24c76a7c2d5"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/#primaryimage","url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/Posts_37_GH_7-400x250-1.jpg","contentUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/Posts_37_GH_7-400x250-1.jpg","width":400,"height":250},{"@type":"WebSite","@id":"https:\/\/www.modelical.com\/en\/#website","url":"https:\/\/www.modelical.com\/en\/","name":"Modelical","description":"We build information","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.modelical.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.modelical.com\/en\/#\/schema\/person\/3ad52fd99e6b5b98a59ef24c76a7c2d5","name":"Roberto Molinos","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro","url":"https:\/\/secure.gravatar.com\/avatar\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro","caption":"Roberto Molinos"},"sameAs":["https:\/\/www.modelical.com"],"url":"https:\/\/www.modelical.com\/en\/author\/roberto\/"}]}},"_links":{"self":[{"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/posts\/3304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/comments?post=3304"}],"version-history":[{"count":0,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/posts\/3304\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/media\/27197"}],"wp:attachment":[{"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/media?parent=3304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/categories?post=3304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/tags?post=3304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}