{"id":2091,"date":"2015-03-23T21:46:05","date_gmt":"2015-03-23T20:46:05","guid":{"rendered":"https:\/\/www.modelical.com\/?p=1216"},"modified":"2024-10-18T08:52:36","modified_gmt":"2024-10-18T06:52:36","slug":"ghpython-101-intro","status":"publish","type":"post","link":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/","title":{"rendered":"Grasshopper Python 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 in C# for my classes in IE University, \u00a0now I am rewriting everything in\u00a0Python, so feel <strong>free to look for the original post and compare<\/strong>.<\/p>\n<p>I&#8217;ll make the course &#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 some of those are important and make it worthwhile. By learning scripting you&#8217;ll be able to:<\/p>\n<ul>\n<li>Reduce the size and complexity of your definitions, developing solutions faster with less work.<\/li>\n<li>Sketch\u00a0and 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<\/ul>\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 additional\u00a0scripting 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:<br \/>\n&#8220;Mike!&#8230;can you come closer?, yes, that&#8217;s it, a little bit more&#8230;to your left, now you gotta raise your hands, that&#8217;s nice, ok, so we&#8217;re ready&#8230;sweet!&#8221;<br \/>\n&#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. <del>We will use C#<b>.<\/b><\/del><b>\u00a0This course will be re-written to Python.<\/b>\u00a0 Python is a modern, flexible\u00a0scripting language written in C++ (Yes! languages derive from other languages, \u00a0and almost every modern dialect comes from the good-old C\/C++)\u00a0<b>\u00a0<\/b><\/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 Python?<\/strong><\/p>\n<p>There is a fundamental reason for choosing Python over other languages, and it&#8217;s beacuse is an ubiquiotus language that can be found in other IE Courses, so students will be able to use it and learn it across multiple classes. Besides, Python is becoming very popular for a wide range of applications, and many CAD solutions are currently offering a Python API (Revit, 3Ds Max, Dynamo).<\/p>\n<p>Besides, if you learn the RhinoScripting syntax in Python, you will be able to use it, without almost any change, both in Grasshopper and directly in Rhino.<\/p>\n<p>But trust me, programming is a much bigger endeavour than just learning a language and once you understand the basics of imperative programming and get a bit of experience, you&#8217;ll be able to jump to other, more performative, languages.<\/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:python decode:true\">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> The Python interpreter will take care of assigning the right amount of RAM memory depending on what you use it for. This is a great advantage over other more &#8220;serious&#8221; languages like C\/C++\/C#\/Java.<\/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>Installing GHPython and 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<ol>\n<li>Please download this file, unzip it and install in your PC.<\/li>\n<li>First install <strong>Grasshopper_0.9.76.0.rhi<\/strong> by doubleclicking it. When prompted, choose the JUST ME option if you are not sure about what to do.<\/li>\n<li>Once complete, install the Python Component:<\/li>\n<li>In Grasshopper, choose File &gt; Special Folders &gt; Components folder.<\/li>\n<li>Save the ghpython.gha file there.<\/li>\n<li>Right-click the file &gt; Properties &gt; make sure it is\u00a0not &#8220;blocked&#8221;<\/li>\n<li>Restart Rhino and Grasshopper.<\/li>\n<\/ol>\n<p>That is all.<\/p>\n<p>To create a new Python\u00a0custom component, double click on the canvas and type <em>Python\u00a0Script<\/em>\u00a0or go to Maths tab &gt; Script &gt; Python\u00a0Script.<\/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=\"932\" height=\"444\" class=\"alignnone size-full wp-image-4056\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/101_01.png\" alt=\"101_01\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/101_01.png 932w, https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/101_01-480x229.png 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/101_01-768x366.png 768w\" sizes=\"(max-width: 932px) 100vw, 932px\" \/><\/p>\n<p>To edit the script, just double click in the center or right click on it and select &#8220;Open Editor&#8221;<\/p>\n<p><img decoding=\"async\" width=\"1559\" height=\"683\" class=\"alignnone size-full wp-image-4696\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/12\/101_02.png\" alt=\"101_02\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/12\/101_02.png 1559w, https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/12\/101_02-480x210.png 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/12\/101_02-768x336.png 768w, https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/12\/101_02-1280x561.png 1280w\" sizes=\"(max-width: 1559px) 100vw, 1559px\" \/><\/p>\n<p>The editor has three\u00a0main features:<\/p>\n<ul>\n<li>The\u00a0blank canvas is where we&#8217;ll write our code.<\/li>\n<li>The Test button allows checking our code works right before commiting to it.<\/li>\n<li>Through the File menu we can define extra functions and import utility code.<\/li>\n<\/ul>\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 Python 102 \u2013 Variables and Assignment\" href=\"https:\/\/www.modelical.com\/en\/ghpython-102-variables-and-assignment\/\">GH Python\u00a0102 &#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 in C# for my classes in IE University, \u00a0now I am rewriting everything in\u00a0Python, so feel free to look for the original post [&hellip;]<\/p>\n","protected":false},"author":64,"featured_media":27133,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[418,422],"class_list":["post-2091","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guidelines","tag-technology-grasshopper","tag-technology-python"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Grasshopper Python 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\/ghpython-101-intro\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Grasshopper Python 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 in C# for my classes in IE University, \u00a0now I am rewriting everything in\u00a0Python, so feel free to look for the original post [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/\" \/>\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=\"2015-03-23T20:46:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-18T06:52:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/Posts_37_GH_5-400x250-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"250\" \/>\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\\\/ghpython-101-intro\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/\"},\"author\":{\"name\":\"Roberto Molinos\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#\\\/schema\\\/person\\\/3ad52fd99e6b5b98a59ef24c76a7c2d5\"},\"headline\":\"Grasshopper Python 101\",\"datePublished\":\"2015-03-23T20:46:05+00:00\",\"dateModified\":\"2024-10-18T06:52:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/\"},\"wordCount\":1451,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/Posts_37_GH_5-400x250-1.jpg\",\"keywords\":[\"Tec Grasshopper\",\"Tec Python\"],\"articleSection\":[\"Guidelines\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/\",\"name\":\"Grasshopper Python 101 - Modelical\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/Posts_37_GH_5-400x250-1.jpg\",\"datePublished\":\"2015-03-23T20:46:05+00:00\",\"dateModified\":\"2024-10-18T06:52:36+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#\\\/schema\\\/person\\\/3ad52fd99e6b5b98a59ef24c76a7c2d5\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/ghpython-101-intro\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/Posts_37_GH_5-400x250-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/Posts_37_GH_5-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 Python 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\/ghpython-101-intro\/","og_locale":"en_US","og_type":"article","og_title":"Grasshopper Python 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 in C# for my classes in IE University, \u00a0now I am rewriting everything in\u00a0Python, so feel free to look for the original post [&hellip;]","og_url":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/","og_site_name":"Modelical","article_publisher":"https:\/\/www.facebook.com\/Modelical\/","article_published_time":"2015-03-23T20:46:05+00:00","article_modified_time":"2024-10-18T06:52:36+00:00","og_image":[{"width":400,"height":250,"url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/Posts_37_GH_5-400x250-1.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\/ghpython-101-intro\/#article","isPartOf":{"@id":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/"},"author":{"name":"Roberto Molinos","@id":"https:\/\/www.modelical.com\/en\/#\/schema\/person\/3ad52fd99e6b5b98a59ef24c76a7c2d5"},"headline":"Grasshopper Python 101","datePublished":"2015-03-23T20:46:05+00:00","dateModified":"2024-10-18T06:52:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/"},"wordCount":1451,"commentCount":1,"image":{"@id":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/Posts_37_GH_5-400x250-1.jpg","keywords":["Tec Grasshopper","Tec Python"],"articleSection":["Guidelines"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.modelical.com\/en\/ghpython-101-intro\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/","url":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/","name":"Grasshopper Python 101 - Modelical","isPartOf":{"@id":"https:\/\/www.modelical.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/#primaryimage"},"image":{"@id":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/Posts_37_GH_5-400x250-1.jpg","datePublished":"2015-03-23T20:46:05+00:00","dateModified":"2024-10-18T06:52:36+00:00","author":{"@id":"https:\/\/www.modelical.com\/en\/#\/schema\/person\/3ad52fd99e6b5b98a59ef24c76a7c2d5"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.modelical.com\/en\/ghpython-101-intro\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.modelical.com\/en\/ghpython-101-intro\/#primaryimage","url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/Posts_37_GH_5-400x250-1.jpg","contentUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/03\/Posts_37_GH_5-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\/2091","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=2091"}],"version-history":[{"count":0,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/posts\/2091\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/media\/27133"}],"wp:attachment":[{"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/media?parent=2091"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/categories?post=2091"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/tags?post=2091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}