{"id":1611,"date":"2016-05-13T13:20:48","date_gmt":"2016-05-13T20:20:48","guid":{"rendered":"http:\/\/internetofhomethings.com\/homethings\/?p=1611"},"modified":"2016-05-13T13:20:48","modified_gmt":"2016-05-13T20:20:48","slug":"usb-lamp-web-server-part-6-code-compiler","status":"publish","type":"post","link":"https:\/\/internetofhomethings.com\/homethings\/?p=1611","title":{"rendered":"USB LAMP Web Server Part 6 &#8211;  Code Compiler"},"content":{"rendered":"<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/combine_1463066378.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1613 size-full\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/combine_1463066378.jpg\" width=\"640\" height=\"346\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/combine_1463066378.jpg 640w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/combine_1463066378-300x162.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<h2 style=\"text-align: center;\"><strong>All Under One Roof<\/strong><\/h2>\n<p>The LAMP server in this series has been built using the Precise Puppy Linux Distribution. But in my case, I had experimented with several different distributions. And my development environment for compiling \u00a0code was on a different distribution of Linux than the LAMP. In addition,\u00a0the main application in this other Linux distribution, an MQTT Broker, is\u00a0needed often for IoT setups.<\/p>\n<p>This became very messy. Swapping out the USB sticks for different projects. The solution is obvious. Consolidate the development environment and the MQTT Broker into the USB LAMP Server.<\/p>\n<p>One USB stick for everything&#8230;<\/p>\n<p>Web Server, mySQL, WordPress, MQTT Broker, and other application that needs to be compiled.<\/p>\n<p>These\u00a0added capabilities\u00a0have been broken down into two parts:<\/p>\n<p>USB LAMP Web Server Part 6 &#8211; \u00a0Code Compiler<\/p>\n<p>USB LAMP Web Server Part 7\u00a0&#8211; \u00a0MQTT Broker<\/p>\n<h2 style=\"text-align: center;\"><strong>Adding the Code Compiler<\/strong><\/h2>\n<p>First thing to do is to get the Linux development tools for the Precise Puppy Distribution. They are bundled in the file &#8220;devx_precise_5.7.sfs&#8221;, which you can download\u00a0<a href=\"http:\/\/distro.ibiblio.org\/puppylinux\/pet_packages-precise\/\" target=\"_blank\">here<\/a>.<\/p>\n<p>Copy this file to the USB LAMP drive root directory (from a Windows OS computer).<\/p>\n<p>Now let&#8217;s configure the USB LAMP to startup with the development tools. Here is how to do it&#8230;<\/p>\n<p>Start the USB LAMP.<\/p>\n<p>First, click on the menu in the lower left hand of the start-up screen, selecting:<\/p>\n<p>Menu&gt;System&gt;BootManager configure bootup<\/p>\n<p>Click on the icon to the right of &#8220;Choose which extra SFS files to load at bootup:&#8221;<\/p>\n<p>Select &#8220;devx_precise_5.7.sfs&#8221; and click &#8220;OK&#8221;.<\/p>\n<p>Now close all the open windows and reboot Linux from the menu.<\/p>\n<p>Menu&gt;Exit&gt;Reboot<\/p>\n<p>That&#8217;s it!<\/p>\n<p>Everything you need to create and execute programs are now installed. To test this setup, let&#8217;s code and run the classic &#8220;Hello World!&#8221; program&#8230;<\/p>\n<p>Let&#8217;s keep things tidy by creating a folder for programs we create. And to keep things visible when we use the USB stick with the Windows OS running, the folder needs to be located under the &#8220;Home&#8221; folder. That is the Linux folder that appears as the &#8220;root&#8221; folder under the drive letter assigned by Windows.<\/p>\n<p>To navigate to the Home folder using the Puppy GUI, first click on the &#8220;file&#8221; icon from the startup screen.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/compiler_file.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1621\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/compiler_file.jpg\" alt=\"compiler_file\" width=\"473\" height=\"173\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/compiler_file.jpg 473w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/compiler_file-300x110.jpg 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><\/a><\/p>\n<p>Click on the left &#8220;up arrow&#8221; icon to get to the parent folder.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/parent-folder.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-962\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/parent-folder.jpg\" alt=\"parent-folder\" width=\"445\" height=\"177\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/parent-folder.jpg 445w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/parent-folder-300x119.jpg 300w\" sizes=\"auto, (max-width: 445px) 100vw, 445px\" \/><\/a><\/p>\n<p>Then select the &#8220;mnt&#8221; folder.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-mnt-sel.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-963\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-mnt-sel.jpg\" alt=\"folder-mnt-sel\" width=\"442\" height=\"199\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-mnt-sel.jpg 442w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-mnt-sel-300x135.jpg 300w\" sizes=\"auto, (max-width: 442px) 100vw, 442px\" \/><\/a><\/p>\n<p>And finally, the &#8220;Home&#8221; folder.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/home.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-978\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/home.jpg\" alt=\"home\" width=\"412\" height=\"154\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/home.jpg 412w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/home-300x112.jpg 300w\" sizes=\"auto, (max-width: 412px) 100vw, 412px\" \/><\/a><\/p>\n<p>To create a folder, right-click the mouse in the home folder list of files and select:<\/p>\n<p>New&gt;Directory<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-create.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-965\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-create.jpg\" alt=\"folder-create\" width=\"200\" height=\"166\" \/><\/a><\/p>\n<p>Change &#8220;NewDir&#8221; to &#8220;MyPrograms&#8221; and click on the &#8220;Create&#8221; button.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-create-MyPrograms.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-966\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-create-MyPrograms.jpg\" alt=\"folder-create-MyPrograms\" width=\"200\" height=\"164\" \/><\/a><\/p>\n<p>Now click on the &#8220;MyPrograms&#8221; folder. We shall now create one additional folder under this one for our first program. Just like before,\u00a0to create a folder, right-click the mouse in the MyPrograms folder list of files and select:<\/p>\n<p>New&gt;Directory<\/p>\n<p>Change &#8220;NewDir&#8221; to &#8220;HelloWorld&#8221; and click on the &#8220;Create&#8221; button.<\/p>\n<p>Now click on the &#8220;HelloWorld&#8221; folder. This time,\u00a0to create our source code file, right-click the mouse in the HelloWorld folder list of files and select:<\/p>\n<p>New&gt;Blank file<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-MyPrograms-Blank.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-968\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-MyPrograms-Blank.jpg\" alt=\"folder-MyPrograms-Blank\" width=\"417\" height=\"223\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-MyPrograms-Blank.jpg 417w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/folder-MyPrograms-Blank-300x160.jpg 300w\" sizes=\"auto, (max-width: 417px) 100vw, 417px\" \/><\/a><\/p>\n<p>Change &#8220;NewFile&#8221; to &#8220;HelloWorld.c&#8221; and click on the &#8220;Create&#8221; button.<\/p>\n<p>Click on the file listed as &#8220;HelloWorld.c&#8221; to open the file editor.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/select-helloworld-file.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-967\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/select-helloworld-file.jpg\" alt=\"select-helloworld-file\" width=\"415\" height=\"222\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/select-helloworld-file.jpg 415w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/select-helloworld-file-300x160.jpg 300w\" sizes=\"auto, (max-width: 415px) 100vw, 415px\" \/><\/a><\/p>\n<p>For the minimal first program, enter the following:<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/save-helloworld.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-969\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/save-helloworld.jpg\" alt=\"save-helloworld\" width=\"738\" height=\"410\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/save-helloworld.jpg 738w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/save-helloworld-300x167.jpg 300w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/a><\/p>\n<p>Click on the &#8220;save&#8221; icon to finish the creation of this file.<\/p>\n<p>Now we need a &#8220;Makefile&#8221; to define how to compile and build the program. This will be a minimal Makefile for this first program. Just like the &#8220;c&#8221; file, create a file named &#8220;Makefile&#8221; and enter the following contents:<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/makefile.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-970\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/makefile.jpg\" alt=\"makefile\" width=\"768\" height=\"439\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/makefile.jpg 768w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/makefile-300x171.jpg 300w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><\/p>\n<p>Got it?<\/p>\n<p>Now we are ready to build and execute the program. This can be done two different ways.<\/p>\n<ol>\n<li>Using the GUI editor we currently have open.<\/li>\n<li>From the command line.<\/li>\n<\/ol>\n<p>Since the GUI file editor is already open, let&#8217;s first build and run the program from that environment. This is really easy. Like 1-2-3&#8230;<\/p>\n<h2 style=\"text-align: center;\"><strong>Build and Execute Using the GUI<\/strong><\/h2>\n<p>Step 1: Select the &#8220;HelloWord.c&#8221; source code file tab.<br \/>\nStep 2: Click on the &#8220;Build&#8221; icon.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/build-helloworld.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-972\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/build-helloworld.jpg\" alt=\"build-helloworld\" width=\"765\" height=\"379\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/build-helloworld.jpg 765w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/build-helloworld-300x149.jpg 300w\" sizes=\"auto, (max-width: 765px) 100vw, 765px\" \/><\/a><br \/>\nStep 3: Click on the &#8220;Execute&#8221; icon.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/execute-helloworld.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-971\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/execute-helloworld.jpg\" alt=\"execute-helloworld\" width=\"389\" height=\"225\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/execute-helloworld.jpg 389w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/execute-helloworld-300x174.jpg 300w\" sizes=\"auto, (max-width: 389px) 100vw, 389px\" \/><\/a><\/p>\n<p>Our one-line &#8220;prinf&#8221; command correctly displays on the console when the program is executed.<\/p>\n<p>That&#8217;s great for a quick compile and run. But what I found is that if your program contains errors, nothing is displayed indicating what went wrong. Fortunately, there is a way to get needed error messages, when they occur.\u00a0\u00a0It requires you to use the command line to build and execute.<\/p>\n<p>Fear not! It really is not that difficult&#8230;<\/p>\n<h2 style=\"text-align: center;\"><strong>Build and Execute Using the\u00a0Command Line<\/strong><\/h2>\n<p>Now let&#8217;s do the same thing from the command line. To open a command line window, click on the &#8220;console&#8221; icon.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/compiler_console.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1622\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/compiler_console.jpg\" alt=\"compiler_console\" width=\"473\" height=\"173\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/compiler_console.jpg 473w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2016\/05\/compiler_console-300x110.jpg 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><\/a><\/p>\n<p>Then switch to the HelloWorld Folder:<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/change-dir-hello.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-974\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/change-dir-hello.jpg\" alt=\"change-dir-hello\" width=\"456\" height=\"168\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/change-dir-hello.jpg 456w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/change-dir-hello-300x111.jpg 300w\" sizes=\"auto, (max-width: 456px) 100vw, 456px\" \/><\/a><\/p>\n<p>You can view a directory listing now to verify the source and &#8220;Makefile&#8221; files are present with the &#8220;ls&#8221; command.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/dir-listing.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-975\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/dir-listing.jpg\" alt=\"dir-listing\" width=\"458\" height=\"172\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/dir-listing.jpg 458w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/dir-listing-300x113.jpg 300w\" sizes=\"auto, (max-width: 458px) 100vw, 458px\" \/><\/a><\/p>\n<p>Now we can build the program with the command &#8220;gcc -o HelloWorld HelloWorld.c&#8221;. And run the program with the &#8220;.\/HelloWorld&#8221; command.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/cmd-line-demo.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-979\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/cmd-line-demo.jpg\" alt=\"cmd-line-demo\" width=\"596\" height=\"204\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/cmd-line-demo.jpg 596w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/cmd-line-demo-300x103.jpg 300w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/a><\/p>\n<p>That&#8217;s it. You are now setup to build and execute programs built for Linux.<\/p>\n<p>Now\u00a0let&#8217;s see what happens if we put an error into the program. Enter a bogus line after the printf statement. Like &#8220;junk;&#8221;, for example. When we try to &#8220;make&#8221; this program with the error injected, an error is returned. Unlike the GUI, with no error information provided, this provides you with an indication of what went wrong.<\/p>\n<p>So you can quickly correct the error.<\/p>\n<p><a href=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/error.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-976\" src=\"http:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/error.jpg\" alt=\"error\" width=\"570\" height=\"227\" srcset=\"https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/error.jpg 570w, https:\/\/internetofhomethings.com\/homethings\/wp-content\/uploads\/2015\/09\/error-300x119.jpg 300w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/a><\/p>\n<h2 style=\"text-align: center;\"><strong>Conclusions<\/strong><\/h2>\n<p>Here you have a simple reference to use to setup a Linux development environment. It is another tool to add to your &#8220;bag of tricks&#8221;. You never know when it will be needed. Like when\u00a0the only solution available must be run using Linux.<\/p>\n<p>Now that we have the development environment setup, we are set to\u00a0build and configure an MQTT Broker on our USB LAMP. That will be the topic covered in my next post.<\/p>\n<p>Hope you find this information useful.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>All Under One Roof The LAMP server in this series has been built using the Precise Puppy Linux Distribution. But in my case, I had experimented with several different distributions. &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,19,111,132],"tags":[133,134],"class_list":["post-1611","post","type-post","status-publish","format-standard","hentry","category-alltheposts","category-internet-of-things","category-mqtt","category-web-server","tag-lamp-server","tag-lamp-server-compiler"],"_links":{"self":[{"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=\/wp\/v2\/posts\/1611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1611"}],"version-history":[{"count":11,"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=\/wp\/v2\/posts\/1611\/revisions"}],"predecessor-version":[{"id":1631,"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=\/wp\/v2\/posts\/1611\/revisions\/1631"}],"wp:attachment":[{"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/internetofhomethings.com\/homethings\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}