
{"id":2379,"date":"2017-12-15T13:09:18","date_gmt":"2017-12-15T13:09:18","guid":{"rendered":"http:\/\/dyor.roboticafacil.es\/?p=2379"},"modified":"2018-04-26T12:51:58","modified_gmt":"2018-04-26T12:51:58","slug":"facilino-myblocks","status":"publish","type":"post","link":"https:\/\/dyor.webs.upv.es\/en\/facilino-myblocks\/","title":{"rendered":"Introduction to Facilino MyBlocks"},"content":{"rendered":"<p>In this entry, we introduce the block creation tool of Facilino: Facilino MyBlocks.<\/p>\n<p><!--more--><\/p>\n<p><a href=\"https:\/\/roboticafacil.es\/facilino\/blockly\/FacilinoMyBlocks.html\">Facilino MyBlocks<\/a> is a tool for creating your own blocks with Facilino. The aim of this tool is that is can be used for <strong>advanced users<\/strong> that want to implement a feature that is not implemented in Facilino in one single block. It is mainly targeted to teachers to create their own blocks and shared them with other users, but it is also useful for programmers who want to create their own components.<\/p>\n<p>In this sense, we can create blocks that can be later on included in Facilino in a very easy way, even for individual use or for a group of people. In case of individual use, the blocks will be automatically saved in an internal library of MyBlocks that will be used by Facilino, while if we want to share our block with other people, we will need to export our project, as well as all images and HTML documents associated with them).<\/p>\n<p>In order to use Facilino MyBlocks we need first require to understand how the code generation works for Arduino and Blockly (it is recommended to read about Arduino API and Blockly API if needed), although in a very intuitive way, we can learn how to use this tool.<\/p>\n<h3>Facilino MyBlocks UI<\/h3>\n<p>Here we show the UI of Facilino MyBlocks. This includes a menu bar with typical features for open\/save &#8220;XML&#8221; files containing defined blocks, as well as simple tools to manage MyBlocks library. It also includes a dropdown list with the available blocks in the library as well as an icon to exit Facilino MyBlocks and return to Facilino.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2382\" src=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/FacilinoMyBlocks.png\" alt=\"\" width=\"2223\" height=\"946\" srcset=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/FacilinoMyBlocks.png 2223w, https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/FacilinoMyBlocks-300x128.png 300w, https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/FacilinoMyBlocks-768x327.png 768w, https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/FacilinoMyBlocks-1024x436.png 1024w\" sizes=\"auto, (max-width: 2223px) 100vw, 2223px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Facilino MyBlocks allows you to define the block &#8220;shape&#8221; (a.k.a. block definition), define the Arduino code generation and the documentation associated with the block. Block definition and code generation are mandatory in order to use the block, while documentation is optional, it is very convenient to create a proper documentation if you intend to share it and for yourself.<\/p>\n<p>In particular, at the toolbox (on the left) we have three different types of categories: &#8220;Block&#8221;, &#8220;Code&#8221; and &#8220;Doc&#8221; (each of them with instructions associated with the parts mentioned before).<\/p>\n<h4>Block definition<\/h4>\n<p>Block instructions in this category will define the shape of the block, such as inputs, output, connections, fields, colour, etc. This is the first step we need complete since the code generation will mostly depend on the available inputs\/fields and (optionally) the output to create the code. As long as we change the aspect of the block the shape will be automatically rendered on the right view, as well as the Blockly code use to generate such shape.<\/p>\n<p>On each block, we can use the tooltip by placing the mouse over the instruction.<\/p>\n<p>Now, we will describe the available options and discuss each of them:<\/p>\n<h5>Inputs<\/h5>\n<p>Inputs of a block can be configured in the same way as Blockly works. An input of type &#8220;Value Input&#8221; is an input that expects that a value will be introduced by the user, while a &#8220;Statement Input&#8221; is used to define stacks so that other blocks can be nested inside. A &#8220;Dummy Input&#8221; are inputs that can group fields with different information.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2385\" src=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/blocks_inputs.png\" alt=\"\" width=\"267\" height=\"289\" \/><\/p>\n<p>&#8220;Value Input&#8221; inputs will generate a <em>Blockly code for Arduino code generation<\/em>, for instance:<\/p>\n<pre id=\"generatorPre\"><span class=\"kwd\">var<\/span><span class=\"pln\"> input_name <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">Blockly<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Arduino<\/span><span class=\"pun\">.<\/span><span class=\"pln\">valueToCode<\/span><span class=\"pun\">(<\/span><span class=\"pln\">block<\/span><span class=\"pun\">,<\/span> <span class=\"str\">'NAME'<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">Blockly<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Arduino<\/span><span class=\"pun\">.<\/span><span class=\"pln\">ORDER_ATOMIC<\/span><span class=\"pun\">);\r\n\r\nIn a similar way, \"Statement Input\" will generate the following code:<\/span><\/pre>\n<pre id=\"generatorPre\"><span class=\"kwd\">var<\/span><span class=\"pln\"> statements_name <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">Blockly<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Arduino<\/span><span class=\"pun\">.<\/span><span class=\"pln\">statementToCode<\/span><span class=\"pun\">(<\/span><span class=\"pln\">block<\/span><span class=\"pun\">,<\/span> <span class=\"str\">'NAME'<\/span><span class=\"pun\">);\r\n<\/span><\/pre>\n<p>A &#8220;Dummy Input&#8221; does not generate code in this section (it simply affects to the block definition).<\/p>\n<h5>Fields<\/h5>\n<p>Fields allow you to show text, introduce text, options, but opposite to &#8220;Value Input&#8221; inputs, they can not be connected with other blocks. Depending on the information we want to show, the field could be simply a text field or even a URL for an image to show. Other fields, such as &#8220;Text Input field&#8221; allow the user to introduce its own text, &#8220;Dropdown Field&#8221; shows a dropdown list with options to select, &#8220;Checkbox field&#8221; shows a checkbox and &#8220;Colour field&#8221; allows you to select a colour.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2386\" src=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/blocks_field.png\" alt=\"\" width=\"293\" height=\"550\" srcset=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/blocks_field.png 293w, https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/blocks_field-160x300.png 160w\" sizes=\"auto, (max-width: 293px) 100vw, 293px\" \/><\/p>\n<p>All fields with a field &#8220;NAME&#8221; will also generate code in the Arduino code generation section. In particular:<\/p>\n<pre id=\"generatorPre\"><span class=\"kwd\">var<\/span><span class=\"pln\"> field_name <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> block<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getFieldValue<\/span><span class=\"pun\">(<\/span><span class=\"str\">'NAME'<\/span><span class=\"pun\">);<\/span><\/pre>\n<h5>Types<\/h5>\n<p>Variable types allow you to define the compatibility for connecting different blocks between each other. For instance, if we want to accept only one type of inputs information, then we must select this as the input type. This will allow preliminary detect potential errors when programming with Facilino because Blockly won&#8217;t allow their connection.<\/p>\n<h5>Labels and Examples<\/h5>\n<p>These options have been included as future options, but now they do not have an effect.<\/p>\n<h4>Arduino Code Generation<\/h4>\n<p>In order to generate Arduino Code, you need first to understand how Arduino code works, but also you need to understand how Facilino internally works.<\/p>\n<p>Arduino requires some libraries (or &#8220;headers&#8221;) to increase their functionalities. Most of them have been developed by third-parties and have not been included in Arduino&#8217;s core, but they are available through the library manager. On the other side, we can define functions and global variables that we can use in other code sections. Some blocks they do require a set of &#8220;text&#8221; code instructions, for instance when initializing a device that must be included in &#8220;Setup&#8221; section of Arduino. Many blocks they require to generate also other instructions or methods based on the ones that we have defined in the &#8220;Setup&#8221; section. For instance, &#8220;Serial.begin()&#8221; is usually included in the &#8220;Setup&#8221;, while instructions such as &#8220;Serial.read&#8221; or &#8220;Serial.write&#8221;, among others, will be required to be used whenever the block is placed. In order to avoid multiple instances of the same code, such as &#8220;Serial.begin&#8221; every time we include a block we need to define section names within the setup section. So if the section name is the same, all blocks are expected to share the same part of the code to be generated (otherwise, the last block will actually define the code to generate). Therefore, it is reasonable to define a section with the name &#8220;Serial&#8221; such that all instructions that require using the Serial port will also include this section too. On the contrary, the &#8220;Inline&#8221; section is precisely included to generate code wherever the block instruction is placed, which can be either &#8220;Setup&#8221; or &#8220;Loop&#8221; functions of Arduino.<\/p>\n<h5>Headers<\/h5>\n<p>We can include headers by simply including the header name. For instance, the header name &#8220;Servo.h&#8221; will actually generate the Arduino code &#8220;#include &lt;Servo.h&gt;&#8221;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2387\" src=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/code_header.png\" alt=\"\" width=\"178\" height=\"50\" \/><\/p>\n<h5>Variables<\/h5>\n<p>We can define global variables with predefined types of Arduino code or variables with some class name. The names of the variables must be unique so that the compiler does not report a compilation error and once established the name, it will appear in the dropdown list of variables that can be selected to generate code in global functions, setup or inline sections.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2388\" src=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/code_variables.png\" alt=\"\" width=\"183\" height=\"103\" \/><\/p>\n<h5>Functions<\/h5>\n<p>Functions allow you to generate some code that can be reused later when calling it in different places. To define a function we need first specify the type of the function we want to create, so we need to know the type of input and output arguments that. Once defined, we can drag and drop blocks in it that will be included in the code of the function. It accepts variables and basic control structures (if, switch, for, while). This is described in the &#8220;Inline&#8221; section because it shares most of the features of this section.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2389\" src=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/code_functions.png\" alt=\"\" width=\"264\" height=\"630\" srcset=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/code_functions.png 264w, https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/code_functions-126x300.png 126w\" sizes=\"auto, (max-width: 264px) 100vw, 264px\" \/><\/p>\n<h5>Setup<\/h5>\n<p>As previously mentioned, the code generated in the Arduino Setup is organised in sections, so we need to assign a name to each section. If you want to use some section name compatible with the already existing names in Facilino, please contact <a href=\"mailto:soporte@roboticafacil.es\">soporte@roboticafacil.es<\/a>.<\/p>\n<p>Within each section, we can include code blocks to generate the actual code that it will be included just once in the Setup function of Arduino. This is described in next section because it shares most of the features of the code generated in the &#8220;inline&#8221; section.<\/p>\n<h5>Inline<\/h5>\n<p>Global functions, setup and inline sections allow you to generate Arduino code using blocks. Here we show the types of instructions that we can use:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2390\" src=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/code_code.png\" alt=\"\" width=\"206\" height=\"810\" srcset=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/code_code.png 206w, https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/code_code-76x300.png 76w\" sizes=\"auto, (max-width: 206px) 100vw, 206px\" \/><\/p>\n<p>Each instruction can be stacked or connected to other instructions as if we were generating Arduino code (so it must be read as Arduino code with the tag &#8220;Code: &#8221; at the beginning). By trial and error, you can learn how these blocks work, but we will document them in the future.<\/p>\n<h4>Documentation<\/h4>\n<p>We can generate documentation for every block by including a title and a short description. In addition to this, we can add additional information for every &#8220;Value Input&#8221;, &#8220;Statement Input&#8221; or any filed with a named associated with it.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2393\" src=\"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/doc.png\" alt=\"\" width=\"247\" height=\"271\" \/><\/p>\n<p>We can also create a documentation of the examples by adding a short description and a circuit.<\/p>\n<p>The document, as a result of this documentation, will be an HTML file that will be shown when the users access to the help of the instruction.<\/p>","protected":false},"excerpt":{"rendered":"<p>Sorry, this entry is only available in Espa\u00f1ol.<\/p>\n","protected":false},"author":1,"featured_media":2384,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[105],"tags":[],"class_list":["post-2379","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-facilino-manual"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/12\/MyBlocks.png","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":2355,"url":"https:\/\/dyor.webs.upv.es\/en\/facilino-web\/","url_meta":{"origin":2379,"position":0},"title":"Facilino Web","author":"soporte","date":"Friday December 15th, 2017","format":false,"excerpt":"Introduction to Facilino Web multiplatform tool. Learn how to use basic features of Facilino (web) and how to program Arduino and ESP processors. Facilino web is a web page that allows you to generate code for Arduino, while the microcontroller programming must be actually carried out with Arduino IDE (Windows,\u2026","rel":"","context":"In &quot;Facilino Manual&quot;","block_context":{"text":"Facilino Manual","link":"https:\/\/dyor.webs.upv.es\/en\/category\/programacion\/facilino\/facilino-manual\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/02\/Facilino_logo_vectorial.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/02\/Facilino_logo_vectorial.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/02\/Facilino_logo_vectorial.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/02\/Facilino_logo_vectorial.jpg?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":3916,"url":"https:\/\/dyor.webs.upv.es\/en\/instalacion-de-librerias-externas-de-facilino\/","url_meta":{"origin":2379,"position":1},"title":"External library installation in Facilino","author":"soporte","date":"Monday June  4th, 2018","format":false,"excerpt":"Some instructions in Facilino have a dependency on external libraries that must be added to Arduino IDE to compile the code. In this post, we explain the installation process of external libraries of Facilino. Facilino \u2194 Arduino IDE Arduino IDE comes with a set of libraries installed by default, that\u2026","rel":"","context":"In &quot;Facilino&quot;","block_context":{"text":"Facilino","link":"https:\/\/dyor.webs.upv.es\/en\/category\/programacion\/facilino\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2018\/06\/arduino.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2018\/06\/arduino.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2018\/06\/arduino.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2018\/06\/arduino.jpg?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":3006,"url":"https:\/\/dyor.webs.upv.es\/en\/facilino-bloques-comunes\/","url_meta":{"origin":2379,"position":2},"title":"Common Blocks in Facilino","author":"soporte","date":"Friday April  6th, 2018","format":false,"excerpt":"In this presentation, we introduce common programming blocks in Facilino that likely any application will need. Presentation Video","rel":"","context":"In &quot;Facilino Tutorial&quot;","block_context":{"text":"Facilino Tutorial","link":"https:\/\/dyor.webs.upv.es\/en\/category\/programacion\/facilino\/facilino-tutorial\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2066,"url":"https:\/\/dyor.webs.upv.es\/en\/guia-de-instalacion-de-facilino-en-ubuntu\/","url_meta":{"origin":2379,"position":3},"title":"Facilino Instalation Guide in Ubuntu (Linux)","author":"soporte","date":"Friday June 16th, 2017","format":false,"excerpt":"In this entry, we will describe download, instalation and license activation proces for Facilino in Ubuntu. Facilino is a free software, although it include a licence (a number) to activate advance features. In this entry, we will first show the process for downloading and installing Facilino. Download and Instalation You\u2026","rel":"","context":"In &quot;Facilino Manual&quot;","block_context":{"text":"Facilino Manual","link":"https:\/\/dyor.webs.upv.es\/en\/category\/programacion\/facilino\/facilino-manual\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/06\/mi_cuenta.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/06\/mi_cuenta.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/06\/mi_cuenta.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/06\/mi_cuenta.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/06\/mi_cuenta.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":1899,"url":"https:\/\/dyor.webs.upv.es\/en\/facilino-intro\/","url_meta":{"origin":2379,"position":4},"title":"Introduction to Facilino","author":"soporte","date":"Monday May 29th, 2017","format":false,"excerpt":"Facilino is a block-programming\u00a0tool for Arduino. This tool offers a set of features adapted to program DYOR robot, but it can also be used in wide\u00a0a variety of Arduino projects. Exclusive features Here we show some of the advanced features of Facilino Communication: There are block instructions to communicate over\u2026","rel":"","context":"In &quot;Facilino Manual&quot;","block_context":{"text":"Facilino Manual","link":"https:\/\/dyor.webs.upv.es\/en\/category\/programacion\/facilino\/facilino-manual\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/05\/UI.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/05\/UI.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/05\/UI.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/05\/UI.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/05\/UI.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/05\/UI.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2054,"url":"https:\/\/dyor.webs.upv.es\/en\/guia-de-instalacion-de-facilino-en-windows\/","url_meta":{"origin":2379,"position":5},"title":"Gu\u00eda de Instalaci\u00f3n de Facilino en Windows","author":"soporte","date":"Friday June 16th, 2017","format":false,"excerpt":"En esta entrada se describir\u00e1 todo el proceso de descarga, instalaci\u00f3n y activaci\u00f3n de la licencia de Facilino en Windows. Facilino es un programa gratuito, si bien, incluye una licencia para activar las funcionalidades avanzadas. En esta entrada describiremos primero todo el proceso de descarga e instalaci\u00f3n de Facilino. Descarga\u2026","rel":"","context":"In &quot;Facilino Manual&quot;","block_context":{"text":"Facilino Manual","link":"https:\/\/dyor.webs.upv.es\/en\/category\/programacion\/facilino\/facilino-manual\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dyor.webs.upv.es\/wp-content\/uploads\/2017\/06\/Windows.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/posts\/2379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/comments?post=2379"}],"version-history":[{"count":0,"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/posts\/2379\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/media\/2384"}],"wp:attachment":[{"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/media?parent=2379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/categories?post=2379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dyor.webs.upv.es\/en\/wp-json\/wp\/v2\/tags?post=2379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}