{"id":5039,"date":"2021-07-13T17:09:09","date_gmt":"2021-07-13T22:09:09","guid":{"rendered":"https:\/\/www.logikalsolutions.com\/wordpress\/?p=5039"},"modified":"2023-11-27T18:05:45","modified_gmt":"2023-11-28T00:05:45","slug":"automated-update-procedures","status":"publish","type":"post","link":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/","title":{"rendered":"CopperSpice Experiments &#8211; Pt. 19"},"content":{"rendered":"\n<p>My first real computer job was midnight computer operator for Airfone Inc. There I learned respect for automated update procedures and bare metal backups. I&#8217;m not talking about that hokey Microsoft stuff that reboots your computer in the middle of a critical process. I&#8217;m talking about batch scripts run in a controlled manner as part of a regular job stream.<\/p>\n\n\n\n<p>When you are working with an OpenSource library and building from scratch you too need to learn respect for both things. The AGILE junkies haven&#8217;t figured out you can&#8217;t have push updates. They don&#8217;t care about quality software so they never develop scripts or procedures like these. Now that I&#8217;m started down the path of porting the Scintilla library to <a href=\"https:\/\/www.copperspice.com\" target=\"_blank\" rel=\"noreferrer noopener\">CopperSpice<\/a>, and have a few days to work on this, I needed a script.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# -*- mode: sh -*-\n#\n# refresh-copperspice\n#\n# Leave the first comment line in place so Emacs can properly highlight a file without extension\n#\n# Command script to update your cloned repo and build fresh from scratch\n# a new set of copperspice libraries\n#\n# Step 1: define our variables\n#\n#set -x\nCLONE_DIR=&quot;$HOME\/Projects\/copperspice&quot;\nBUILD_DIR=&quot;$HOME\/Projects\/cs_build&quot;\nINSTALL_DIR=&quot;\/usr\/local&quot;\nNINJA_OPTION=&quot;-j2&quot;\n\n\necho &quot;***NOTE***   This build process does not support cross compilation.&quot;\necho &quot;             If you wish to compile one one architecture for another you will need&quot;\necho &quot;             to modify the various cmake scripts.&quot;\necho &quot; &quot;\necho &quot;***NOTE 2*** This build script limits ninja via NINJA_OPTION parameter to reduce resource&quot;\necho &quot;             consumption. Build can require more than 8Gig of RAM per processor.&quot;\necho &quot;             If you only have 8Gig of RAM, adjust $NINJA_OPTION.&quot;\necho &quot; &quot;\necho &quot; Script will git pull and rebase your CopperSpice code. &quot;\necho &quot; You must have already established your git directory\/username\/etc.&quot;\necho &quot; &quot;\necho &quot; Using the following directory information &quot;\necho &quot; &quot;\necho &quot;CLONE_DIR:    $CLONE_DIR&quot;\necho &quot;BUILD_DIR:    $BUILD_DIR&quot;\necho &quot;INSTALL_DIR:  $INSTALL_DIR&quot;\necho &quot;NINJA_OPTION: $NINJA_OPTION&quot;\necho &quot; &quot;\n\nwhile true; do\n    read -p &quot;Is this correct (Y\/n)?&quot; RESP\n#&quot;${yn:-Y}&quot;\n    case &quot;${RESP:-Y}&quot; in\n        [&quot;&quot;]* ) ;;\n        [Yy]* ) echo &quot;Yes&quot;; break;;\n        [Nn]* ) exit;;\n\t* ) echo &quot;Please answer Y or n&quot;;;\n    esac\ndone\n\ncd &quot;$CLONE_DIR&quot;\n#\n# We should have no local changes so force rebase because any change\n# was accidental\n#\ngit pull origin master --rebase\n\n# Now create a fresh build directory\n#\n\nif [ -d &quot;$BUILD_DIR&quot; ]; then rm -Rf &quot;$BUILD_DIR&quot; ; fi\n\nmkdir &quot;$BUILD_DIR&quot;\ncd &quot;$BUILD_DIR&quot;\n\npwd\ncmake -G &quot;Ninja&quot; -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=&quot;$INSTALL_DIR&quot; -S &quot;$CLONE_DIR&quot; -B &quot;$BUILD_DIR&quot;\n\necho &quot;**** Starting Build: $(date +%F-%T)&quot;\npwd\nsudo ninja $NINJA_OPTION install\n\necho &quot;**** Completed: $(date +%F-%T)&quot;\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #464B5D; font-style: italic\"># -*- mode: sh -*-<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\"># refresh-copperspice<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\"># Leave the first comment line in place so Emacs can properly highlight a file without extension<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\"># Command script to update your cloned repo and build fresh from scratch<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\"># a new set of copperspice libraries<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\"># Step 1: define our variables<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#set -x<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">CLONE_DIR<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$HOME<\/span><span style=\"color: #C3E88D\">\/Projects\/copperspice<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">BUILD_DIR<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$HOME<\/span><span style=\"color: #C3E88D\">\/Projects\/cs_build<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">INSTALL_DIR<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">\/usr\/local<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">NINJA_OPTION<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">-j2<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">***NOTE***   This build process does not support cross compilation.<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">             If you wish to compile one one architecture for another you will need<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">             to modify the various cmake scripts.<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">***NOTE 2*** This build script limits ninja via NINJA_OPTION parameter to reduce resource<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">             consumption. Build can require more than 8Gig of RAM per processor.<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">             If you only have 8Gig of RAM, adjust <\/span><span style=\"color: #BABED8\">$NINJA_OPTION<\/span><span style=\"color: #C3E88D\">.<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\"> Script will git pull and rebase your CopperSpice code. <\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\"> You must have already established your git directory\/username\/etc.<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\"> Using the following directory information <\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">CLONE_DIR:    <\/span><span style=\"color: #BABED8\">$CLONE_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">BUILD_DIR:    <\/span><span style=\"color: #BABED8\">$BUILD_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">INSTALL_DIR:  <\/span><span style=\"color: #BABED8\">$INSTALL_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">NINJA_OPTION: <\/span><span style=\"color: #BABED8\">$NINJA_OPTION<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">while<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #82AAFF\">true<\/span><span style=\"color: #89DDFF\">;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #82AAFF\">read<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-p<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Is this correct (Y\/n)?<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">RESP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#&quot;${yn:-Y}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">case<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;${<\/span><span style=\"color: #BABED8\">RESP<\/span><span style=\"color: #89DDFF\">:-<\/span><span style=\"color: #BABED8\">Y<\/span><span style=\"color: #89DDFF\">}&quot;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">        [<\/span><span style=\"color: #89DDFF\">&quot;&quot;<\/span><span style=\"color: #BABED8\">]<\/span><span style=\"color: #89DDFF\">*<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">        [Yy]<\/span><span style=\"color: #89DDFF\">*<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> echo <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Yes<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">break<\/span><span style=\"color: #89DDFF\">;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">        [Nn]<\/span><span style=\"color: #89DDFF\">*<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> exit<\/span><span style=\"color: #89DDFF\">;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">\t<\/span><span style=\"color: #89DDFF\">*<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> echo <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Please answer Y or n<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">esac<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">done<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">cd<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$CLONE_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\"># We should have no local changes so force rebase because any change<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\"># was accidental<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FFCB6B\">git<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">pull<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">origin<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">master<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">--rebase<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\"># Now create a fresh build directory<\/span><\/span>\n<span class=\"line\"><span style=\"color: #464B5D; font-style: italic\">#<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">[<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">-d<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$BUILD_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">];<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">then<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">rm<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-Rf<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$BUILD_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">fi<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FFCB6B\">mkdir<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$BUILD_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">cd<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$BUILD_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">pwd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FFCB6B\">cmake<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-G<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Ninja<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-DCMAKE_BUILD_TYPE=Release<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-DCMAKE_INSTALL_PREFIX=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$INSTALL_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-S<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$CLONE_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-B<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">$BUILD_DIR<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">**** Starting Build: <\/span><span style=\"color: #89DDFF\">$(<\/span><span style=\"color: #FFCB6B\">date<\/span><span style=\"color: #C3E88D\"> +%F-%T<\/span><span style=\"color: #89DDFF\">)&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">pwd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FFCB6B\">sudo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">ninja<\/span><span style=\"color: #BABED8\"> $NINJA_OPTION <\/span><span style=\"color: #C3E88D\">install<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">echo<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">**** Completed: <\/span><span style=\"color: #89DDFF\">$(<\/span><span style=\"color: #FFCB6B\">date<\/span><span style=\"color: #C3E88D\"> +%F-%T<\/span><span style=\"color: #89DDFF\">)&quot;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Here you go. It will prompt you to verify the directories then it will &#8220;just build&#8221; after first updating. This script assumes you did an initial clone and have your Git username\/password\/security information already set up in the clone.<\/p>\n\n\n\n<p>Automated update procedures like this don&#8217;t run automatically (though you could certainly make a CRON job out of them). They automate the task so you can kick it off when you are ready.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"733\" height=\"373\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/07\/refresh-copperspice-01.png\" alt=\"\" class=\"wp-image-5055\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/07\/refresh-copperspice-01.png 733w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/07\/refresh-copperspice-01-300x153.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/07\/refresh-copperspice-01-660x336.png 660w\" sizes=\"(max-width: 733px) 100vw, 733px\" \/><figcaption class=\"wp-element-caption\">You have the option to quit before it does anything<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"623\" height=\"220\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/07\/refresh-copperspice-02.png\" alt=\"\" class=\"wp-image-5056\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/07\/refresh-copperspice-02.png 623w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/07\/refresh-copperspice-02-300x106.png 300w\" sizes=\"(max-width: 623px) 100vw, 623px\" \/><figcaption class=\"wp-element-caption\">After you say things are correct you will eventually be prompted for sudo password<\/figcaption><\/figure>\n<\/div>\n\n\n<p><a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/diamond-editor-pull-request\/\" target=\"_blank\" rel=\"noreferrer noopener\">&lt;Previous<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>My first real computer job was midnight computer operator for Airfone Inc. There I learned respect for automated update procedures and bare metal backups. I&#8217;m not talking about that hokey Microsoft stuff that reboots your computer in the middle of a critical process. I&#8217;m talking about batch scripts run in a controlled manner as part of a regular job stream. When you are working with an OpenSource library and building from scratch you too need &hellip; <a title=\"CopperSpice Experiments &#8211; Pt. 19\" class=\"bnm-read-more\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/\"><span class=\"screen-reader-text\">CopperSpice Experiments &#8211; Pt. 19<\/span>Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":3905,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[1549,1835,1980,1988],"class_list":["post-5039","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-information-technology","tag-agilesucks","tag-copperspice","tag-scintilla","tag-shell-scripts","bnm-entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>CopperSpice Experiments - Pt. 19 &#8211; Logikal Blog<\/title>\n<meta name=\"description\" content=\"My first real computer job was midnight computer operator for Airfone Inc. There I learned respect for automated update procedures\" \/>\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\/automated-update-procedures\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CopperSpice Experiments - Pt. 19 &#8211; Logikal Blog\" \/>\n<meta property=\"og:description\" content=\"My first real computer job was midnight computer operator for Airfone Inc. There I learned respect for automated update procedures\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/\" \/>\n<meta property=\"og:site_name\" content=\"Logikal Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-13T22:09:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-28T00:05:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/09\/diamond-green-and-gold.png\" \/>\n\t<meta property=\"og:image:width\" content=\"820\" \/>\n\t<meta property=\"og:image:height\" content=\"655\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"seasoned_geek\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"seasoned_geek\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 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\\\/automated-update-procedures\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/\"},\"author\":{\"name\":\"seasoned_geek\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"headline\":\"CopperSpice Experiments &#8211; Pt. 19\",\"datePublished\":\"2021-07-13T22:09:09+00:00\",\"dateModified\":\"2023-11-28T00:05:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/\"},\"wordCount\":245,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/diamond-green-and-gold.png\",\"keywords\":[\"#AGILESucks\",\"CopperSpice\",\"Scintilla\",\"shell scripts\"],\"articleSection\":[\"Information Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/\",\"name\":\"CopperSpice Experiments - Pt. 19 &#8211; Logikal Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/diamond-green-and-gold.png\",\"datePublished\":\"2021-07-13T22:09:09+00:00\",\"dateModified\":\"2023-11-28T00:05:45+00:00\",\"description\":\"My first real computer job was midnight computer operator for Airfone Inc. There I learned respect for automated update procedures\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/diamond-green-and-gold.png\",\"contentUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/diamond-green-and-gold.png\",\"width\":820,\"height\":655},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/automated-update-procedures\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CopperSpice Experiments &#8211; Pt. 19\"}]},{\"@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\"],\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/author\\\/seasoned_geek\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CopperSpice Experiments - Pt. 19 &#8211; Logikal Blog","description":"My first real computer job was midnight computer operator for Airfone Inc. There I learned respect for automated update procedures","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\/automated-update-procedures\/","og_locale":"en_US","og_type":"article","og_title":"CopperSpice Experiments - Pt. 19 &#8211; Logikal Blog","og_description":"My first real computer job was midnight computer operator for Airfone Inc. There I learned respect for automated update procedures","og_url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/","og_site_name":"Logikal Blog","article_published_time":"2021-07-13T22:09:09+00:00","article_modified_time":"2023-11-28T00:05:45+00:00","og_image":[{"width":820,"height":655,"url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/09\/diamond-green-and-gold.png","type":"image\/png"}],"author":"seasoned_geek","twitter_card":"summary_large_image","twitter_misc":{"Written by":"seasoned_geek","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/#article","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/"},"author":{"name":"seasoned_geek","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"headline":"CopperSpice Experiments &#8211; Pt. 19","datePublished":"2021-07-13T22:09:09+00:00","dateModified":"2023-11-28T00:05:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/"},"wordCount":245,"commentCount":0,"publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/09\/diamond-green-and-gold.png","keywords":["#AGILESucks","CopperSpice","Scintilla","shell scripts"],"articleSection":["Information Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/","url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/","name":"CopperSpice Experiments - Pt. 19 &#8211; Logikal Blog","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/#primaryimage"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/09\/diamond-green-and-gold.png","datePublished":"2021-07-13T22:09:09+00:00","dateModified":"2023-11-28T00:05:45+00:00","description":"My first real computer job was midnight computer operator for Airfone Inc. There I learned respect for automated update procedures","breadcrumb":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/#primaryimage","url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/09\/diamond-green-and-gold.png","contentUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/09\/diamond-green-and-gold.png","width":820,"height":655},{"@type":"BreadcrumbList","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/automated-update-procedures\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.logikalsolutions.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"CopperSpice Experiments &#8211; Pt. 19"}]},{"@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"],"url":"https:\/\/www.logikalsolutions.com\/wordpress\/author\/seasoned_geek\/"}]}},"_links":{"self":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/5039","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\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/comments?post=5039"}],"version-history":[{"count":0,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/5039\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media\/3905"}],"wp:attachment":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media?parent=5039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/categories?post=5039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/tags?post=5039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}