{"id":1842,"date":"2016-08-19T14:16:57","date_gmt":"2016-08-19T19:16:57","guid":{"rendered":"http:\/\/www.logikalsolutions.com\/wordpress\/?p=1842"},"modified":"2016-08-19T14:16:57","modified_gmt":"2016-08-19T19:16:57","slug":"c-11-and-qt-part-1","status":"publish","type":"post","link":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/","title":{"rendered":"C++ 11 and Qt &#8212; Part 1"},"content":{"rendered":"<p align=\"justify\">The medical device touch screen world tends to stay well behind on \u201cnew\u201d standards and features and for good reason. Given the 5+ year FDA mandated testing and approval cycle for things with varying potential of catastrophic patient outcome bleeding edge isn\u2019t a welcome thing. Judging from recent contract postings some devices are locked into Qt 3.3.x because that is what was used when they were first built. Until recently most newer devices were sticking with Qt 4.8.x because it was the most stable at the time.<\/p>\n<p align=\"justify\">With Qt 6 on the not so distant horizon, a goodly number of new projects will begin with Qt 5.4.x or 5.6.x. With the advent of this reality we must all begin changing our coding standards, not just because of Qt changes, but because Qt has helped change the C++ standard and now offers support for c++11. I say Qt has changed the C++ standard because many of the \u201cnew\u201d features found in C++ 11 appear to be directly lifted from Qt.<\/p>\n<p align=\"justify\">Before we delve into such things, we must first make certain the development environment supports C++ 11. I\u2019m running 64-bit Ubuntu 16.04.<\/p>\n<pre>roland@roland-HP-Compaq-8100-Elite-SFF-PC:~$ which g++\r\n\/usr\/bin\/g++\r\nroland@roland-HP-Compaq-8100-Elite-SFF-PC:~$ g++ --version\r\ng++ (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609\r\nCopyright (C) 2015 Free Software Foundation, Inc.\r\nThis is free software; see the source for copying conditions. There is NO\r\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r\n\r\nroland@roland-HP-Compaq-8100-Elite-SFF-PC:~$ mkdir fopa\r\nroland@roland-HP-Compaq-8100-Elite-SFF-PC:~$ cd fopa\r\nroland@roland-HP-Compaq-8100-Elite-SFF-PC:~\/fopa$ jed test1.cpp\r\nroland@roland-HP-Compaq-8100-Elite-SFF-PC:~\/fopa$ g++ -Wall -g -std=c++11 test1.cpp -o test1\r\nroland@roland-HP-Compaq-8100-Elite-SFF-PC:~\/fopa$ .\/test1\r\n2\r\n3\r\n5\r\nroland@roland-HP-Compaq-8100-Elite-SFF-PC:~\/fopa$ cat test1.cpp\r\n#include &lt;array&gt;\r\n#include &lt;iostream&gt;\r\n\r\nint main()\r\n{\r\n \r\n std::array&lt;int, 3&gt; arr{ 2, 3, 5 };\r\n \r\n for( auto i : arr)\r\n {\r\n std::cout &lt;&lt; i &lt;&lt; std::endl;\r\n }\r\n \r\n}\r\n\r\n<\/pre>\n<p>Our simple program tested a few C++ 11 features. First is the initializer list, which is awesome. You can now initialize arrays outside of the code body of a constructor. More importantly, {} initialization refuses to narrow.<\/p>\n<pre>vector&lt;int&gt; vi = { 1, 2.3, 4, 5.6};<\/pre>\n<p align=\"justify\">The above line has a pair of \u201cobvious\u201d typos. Under previous standards your program would compile with bugs. Under C++ 11 this narrowing from a floating point type to an int is an error caught at compile time saving you hours of debugging.<\/p>\n<p align=\"justify\">Next we tested the \u201cauto\u201d type which tells the compiler to figure out what it needs. While you may believe this is only a crutch for lazy programmers it is a maintenance boon. If you are long in the tooth like myself, you\u2019ve had to do more than your fair share of maintenance programming. Think back to how many times a variable had to be widened. How many times have you had to search for every place a float was referenced because an application now needed a double, or an int now needed to be a qlonglong?<\/p>\n<p align=\"justify\">These weren\u2019t initial design flaws. In the embedded world you still try to use the smallest data type which meets design requirements. How many times did you have a device which originally shipped with under 512Meg of RAM only to have the new generation come with 1Gig and a new requirement to run N days longer on battery? Given initial storage and processor limitations a 32-bit int had oceans more capacity than needed, but the new version now has 5-10 day longer constant run time, more RAM and a dramatically faster processor necessitating a 64-bit int. If you had used the auto data type you would only have to change one variable declaration, compile and regression test. Sadly, you now have to search for every place the variable was used.<\/p>\n<p align=\"justify\">Did you notice the syntax of the for loop? This is the new range-based for loop. As a Qt programmer you may notice the similarities to Qt\u2019s foreach() loop. There appears to be a significant difference though. Unless you work in a resource constrained environment you probably do not know that foreach() makes a local copy of the container. Speed wise this can be expensive, resource wise it can be devastating. If you are developing for a desktop using a container which has 100 integers or less, you probably don\u2019t care.<\/p>\n<p align=\"justify\">Besides working with values via the \u201cauto\u201d data type, the range-based for loop can work with references.<\/p>\n<pre>QStringList lst { \"fred\", \"ethyl\", \"mayble\", \"George\" };\r\nfor( const QString &amp; str : lst)\r\n{\r\n\u00a0\u00a0\u00a0 std::cout &lt;&lt; qPrintable(str) &lt;&lt; std::endl;\r\n}<\/pre>\n<p style=\"text-align: justify;\">That said, if your container has large or complex objects which require a deep copy, your processor is slow to save battery and your RAM is tiny, using foreach() comes at too high of a price.<\/p>\n<p align=\"justify\">Foreach() performed a copy to enable dangerous programming. There was predictable behavior if you added or removed items while iterating. The new range-based for loop has undefined behavior when adding and removing items from a container while iterating.<\/p>\n<p align=\"justify\">Qt containers use implicit sharing so, in many cases a copy is cheap. The range-based for loop does not copy, it uses the begin() and end() iterator functions. Those functions will force a copy of a Qt container if it is shared and non const. It is recommended you pass const containers to avoid the price of a copy.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The medical device touch screen world tends to stay well behind on \u201cnew\u201d standards and features and for good reason. Given the 5+ year FDA mandated testing and approval cycle for things with varying potential of catastrophic patient outcome bleeding edge isn\u2019t a welcome thing. Judging from recent contract postings some devices are locked into Qt 3.3.x because that is what was used when they were first built. Until recently most newer devices were sticking &hellip; <a title=\"C++ 11 and Qt &#8212; Part 1\" class=\"bnm-read-more\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/\"><span class=\"screen-reader-text\">C++ 11 and Qt &#8212; Part 1<\/span>Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[1182,1184,159,1183],"class_list":["post-1842","post","type-post","status-publish","format-standard","hentry","category-information-technology","tag-c-11","tag-foreach","tag-qt","tag-range-based-for-loop","bnm-entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>C++ 11 and Qt -- Part 1 &#8211; Logikal Blog<\/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.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C++ 11 and Qt -- Part 1 &#8211; Logikal Blog\" \/>\n<meta property=\"og:description\" content=\"The medical device touch screen world tends to stay well behind on \u201cnew\u201d standards and features and for good reason. Given the 5+ year FDA mandated testing and approval cycle for things with varying potential of catastrophic patient outcome bleeding edge isn\u2019t a welcome thing. Judging from recent contract postings some devices are locked into Qt 3.3.x because that is what was used when they were first built. Until recently most newer devices were sticking &hellip; C++ 11 and Qt &#8212; Part 1Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Logikal Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-08-19T19:16:57+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/c-11-and-qt-part-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/c-11-and-qt-part-1\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b87acf3335e19871db8f4a1aca03736c\"},\"headline\":\"C++ 11 and Qt &#8212; Part 1\",\"datePublished\":\"2016-08-19T19:16:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/c-11-and-qt-part-1\\\/\"},\"wordCount\":741,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"keywords\":[\"C++ 11\",\"foreach\",\"Qt\",\"range-based for loop\"],\"articleSection\":[\"Information Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/c-11-and-qt-part-1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/c-11-and-qt-part-1\\\/\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/c-11-and-qt-part-1\\\/\",\"name\":\"C++ 11 and Qt -- Part 1 &#8211; Logikal Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\"},\"datePublished\":\"2016-08-19T19:16:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/c-11-and-qt-part-1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/c-11-and-qt-part-1\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/c-11-and-qt-part-1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C++ 11 and Qt &#8212; Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\",\"name\":\"Logikal Blog\",\"description\":\"For people with attention spans longer than a Tweet\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\",\"name\":\"seasoned_geek\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"caption\":\"seasoned_geek\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\"},\"description\":\"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\\\/Qt touchscreen\\\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \\\"Zinc It!\\\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \\\"The Minimum You Need to Know to Be an OpenVMS Application Developer\\\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \\\"The Minimum You Need to Know\\\" book series was born. Three years later he wrote his first novel \\\"Infinite Exposure\\\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \\\"The Earth That Was\\\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.\",\"sameAs\":[\"https:\\\/\\\/theminimumyouneedtoknow.com\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b87acf3335e19871db8f4a1aca03736c\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/168fb2539f8db5d41fe93ae7707d04fbfab3d518cd2603e8066217896887745a?s=96&d=mm&r=r\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/168fb2539f8db5d41fe93ae7707d04fbfab3d518cd2603e8066217896887745a?s=96&d=mm&r=r\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/168fb2539f8db5d41fe93ae7707d04fbfab3d518cd2603e8066217896887745a?s=96&d=mm&r=r\",\"caption\":\"admin\"},\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C++ 11 and Qt -- Part 1 &#8211; Logikal Blog","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.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/","og_locale":"en_US","og_type":"article","og_title":"C++ 11 and Qt -- Part 1 &#8211; Logikal Blog","og_description":"The medical device touch screen world tends to stay well behind on \u201cnew\u201d standards and features and for good reason. Given the 5+ year FDA mandated testing and approval cycle for things with varying potential of catastrophic patient outcome bleeding edge isn\u2019t a welcome thing. Judging from recent contract postings some devices are locked into Qt 3.3.x because that is what was used when they were first built. Until recently most newer devices were sticking &hellip; C++ 11 and Qt &#8212; Part 1Read more","og_url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/","og_site_name":"Logikal Blog","article_published_time":"2016-08-19T19:16:57+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/#article","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/"},"author":{"name":"admin","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/b87acf3335e19871db8f4a1aca03736c"},"headline":"C++ 11 and Qt &#8212; Part 1","datePublished":"2016-08-19T19:16:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/"},"wordCount":741,"commentCount":0,"publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"keywords":["C++ 11","foreach","Qt","range-based for loop"],"articleSection":["Information Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/","url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/","name":"C++ 11 and Qt -- Part 1 &#8211; Logikal Blog","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website"},"datePublished":"2016-08-19T19:16:57+00:00","breadcrumb":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/c-11-and-qt-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.logikalsolutions.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"C++ 11 and Qt &#8212; Part 1"}]},{"@type":"WebSite","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website","url":"https:\/\/www.logikalsolutions.com\/wordpress\/","name":"Logikal Blog","description":"For people with attention spans longer than a Tweet","publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.logikalsolutions.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842","name":"seasoned_geek","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","url":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","caption":"seasoned_geek"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r"},"description":"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\/Qt touchscreen\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \"Zinc It!\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \"The Minimum You Need to Know to Be an OpenVMS Application Developer\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \"The Minimum You Need to Know\" book series was born. Three years later he wrote his first novel \"Infinite Exposure\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \"The Earth That Was\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.","sameAs":["https:\/\/theminimumyouneedtoknow.com"]},{"@type":"Person","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/b87acf3335e19871db8f4a1aca03736c","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/168fb2539f8db5d41fe93ae7707d04fbfab3d518cd2603e8066217896887745a?s=96&d=mm&r=r","url":"https:\/\/secure.gravatar.com\/avatar\/168fb2539f8db5d41fe93ae7707d04fbfab3d518cd2603e8066217896887745a?s=96&d=mm&r=r","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/168fb2539f8db5d41fe93ae7707d04fbfab3d518cd2603e8066217896887745a?s=96&d=mm&r=r","caption":"admin"},"url":"https:\/\/www.logikalsolutions.com\/wordpress\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/1842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/comments?post=1842"}],"version-history":[{"count":0,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/1842\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media?parent=1842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/categories?post=1842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/tags?post=1842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}