{"id":3635,"date":"2020-06-11T15:05:10","date_gmt":"2020-06-11T20:05:10","guid":{"rendered":"http:\/\/www.logikalsolutions.com\/wordpress\/?p=3635"},"modified":"2021-02-14T12:11:28","modified_gmt":"2021-02-14T18:11:28","slug":"copperspice-experiments-pt-4","status":"publish","type":"post","link":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/","title":{"rendered":"CopperSpice Experiments &#8211; Pt. 4"},"content":{"rendered":"\n<p>Keep in mind I have a <strong>minimal<\/strong> Ubuntu 20.04 LTS on this system and will be building PostgreSQL support into CopperSpice. The <a href=\"https:\/\/www.copperspice.com\/docs\/cs_overview\/requirements-unix.html#ubuntu20-cs1-6\">Building for Unix instructions<\/a> assume a full installation and even then aren&#8217;t complete. By using a minimal install I can help even non-Ubuntu users because I will find everything that got missed.<\/p>\n\n\n\n<pre class=\"wp-block-code fragment\"><code lang=\"bash\" class=\"language-bash\">sudo apt-get install libfreetype6-dev libfontconfig1-dev libglib2.0-dev libgstreamer1.0-dev \\\n                libgstreamer-plugins-base1.0-dev libice-dev libaudio-dev libgl1-mesa-dev libc6-dev \\\n                libsm-dev libxcursor-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev \\\n                libxrandr-dev libxrender-dev libxkbcommon-dev libxkbcommon-x11-dev libx11-dev\n\nsudo apt-get install libxcb1-dev libx11-xcb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev \\\n                libxcb-render0-dev libxcb-render-util0-dev libxcb-randr0-dev libxcb-shape0-dev \\\n                libxcb-shm0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev libxcb-xkb-dev cmake ninja-build libxcb-glx0-dev<\/code><\/pre>\n\n\n\n<p>One of the first things I want to do is try converting my <a href=\"https:\/\/sourceforge.net\/projects\/xpnsqt\/\">XpnsQt<\/a> project from Qt to CopperSpice. This and my lottery tracking application are my goto tire kicking applications. XpnsQt needs PostgreSQL.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"968\" height=\"152\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-3-1.png\" alt=\"\" class=\"wp-image-3639\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-3-1.png 968w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-3-1-300x47.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-3-1-768x121.png 768w\" sizes=\"(max-width: 968px) 100vw, 968px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"470\" height=\"398\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-1-1.png\" alt=\"\" class=\"wp-image-3636\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-1-1.png 470w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-1-1-300x254.png 300w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"916\" height=\"98\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/libpq-2-1.png\" alt=\"\" class=\"wp-image-3638\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/libpq-2-1.png 916w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/libpq-2-1-300x32.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/libpq-2-1-768x82.png 768w\" sizes=\"(max-width: 916px) 100vw, 916px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"470\" height=\"398\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/libpq-1-1.png\" alt=\"\" class=\"wp-image-3637\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/libpq-1-1.png 470w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/libpq-1-1-300x254.png 300w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/><\/figure><\/div>\n\n\n\n<p>I rebooted at this point so all would be good with PostgreSQL.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"906\" height=\"183\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-10-1.png\" alt=\"\" class=\"wp-image-3640\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-10-1.png 906w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-10-1-300x61.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-10-1-768x155.png 768w\" sizes=\"(max-width: 906px) 100vw, 906px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"1188\" height=\"535\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-13.png\" alt=\"\" class=\"wp-image-3641\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-13.png 1188w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-13-300x135.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-13-1024x461.png 1024w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-13-768x346.png 768w\" sizes=\"(max-width: 1188px) 100vw, 1188px\" \/><\/figure><\/div>\n\n\n\n<p>Yeah, the import works from the oldest year it finds a data file for to the current year. I just don&#8217;t have files for this year on this machine. Data from 1996 or so through 2019 should be more than enough to kick the tires.<\/p>\n\n\n\n<p>My first attempt at configuring CopperSpice failed rather spectacularly.<\/p>\n\n\n\n<p>Configuring CMake for CopperSpice<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Search for required Packages\n\n-- Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR) (Required is at least version \"1.0\")\n-- Found ZLIB: \/usr\/lib\/x86_64-linux-gnu\/libz.so (found version \"1.2.11\") \n-- Could NOT find Cups (missing: CUPS_LIBRARIES CUPS_INCLUDE_DIR) \n-- Could NOT find ALSA (missing: ALSA_LIBRARY ALSA_INCLUDE_DIR) \n-- Found PkgConfig: \/usr\/bin\/pkg-config (found version \"0.29.1\") \n-- Could NOT find PulseAudio (missing: PULSEAUDIO_LIBRARY PULSEAUDIO_INCLUDE_DIR) (Required is at least version \"0.9.9\")\n-- Could NOT find PostgreSQL (missing: PostgreSQL_TYPE_INCLUDE_DIR) (found version \"12.2\")\n-- Looking for pthread.h\n-- Looking for pthread.h - found\n-- Performing Test CMAKE_HAVE_LIBC_PTHREAD\n-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed\n-- Looking for pthread_create in pthreads\n-- Looking for pthread_create in pthreads - not found\n-- Looking for pthread_create in pthread\n-- Looking for pthread_create in pthread - found\n-- Found Threads: TRUE \n-- Found GLib2: \/usr\/include\/glib-2.0;\/usr\/lib\/x86_64-linux-gnu\/glib-2.0\/include \n-- Found GOBJECT2: \/usr\/lib\/x86_64-linux-gnu\/libgobject-2.0.so \n-- Found Iconv: \/usr\/include \n-- Found X11: \/usr\/include found components: ICE SM Xcursor Xext Xfixes Xi Xinerama Xrandr Xrender \n-- Looking for XOpenDisplay in \/usr\/lib\/x86_64-linux-gnu\/libX11.so;\/usr\/lib\/x86_64-linux-gnu\/libXext.so\n-- Looking for XOpenDisplay in \/usr\/lib\/x86_64-linux-gnu\/libX11.so;\/usr\/lib\/x86_64-linux-gnu\/libXext.so - found\n-- Looking for gethostbyname\n-- Looking for gethostbyname - found\n-- Looking for connect\n-- Looking for connect - found\n-- Looking for remove\n-- Looking for remove - found\n-- Looking for shmat\n-- Looking for shmat - found\n-- Looking for IceConnectionNumber in ICE\n-- Looking for IceConnectionNumber in ICE - found\n-- Found xcb: \/usr\/include \n-- Found xcb-image: \/usr\/include \n-- Found xcb-icccm: \/usr\/include \n-- Found xcb-sync: \/usr\/include \n-- Found xcb-xfixes: \/usr\/include \n-- Found xcb-shm: \/usr\/include \n-- Found xcb-randr: \/usr\/include \n-- Found xcb-shape: \/usr\/include \n-- Found xcb-keysyms: \/usr\/include \n-- Found xcb-xinerama: \/usr\/include \n-- Found xcb-xkb: \/usr\/include \n-- Found xcb-render: \/usr\/include \n-- Found xcb-render-util: \/usr\/include \n-- Found X11_XCB: \/usr\/lib\/x86_64-linux-gnu\/libX11-xcb.so \n-- Found XKBCommon: \/usr\/lib\/x86_64-linux-gnu\/libxkbcommon.so \n-- Found XKBCommon_X11: \/usr\/lib\/x86_64-linux-gnu\/libxkbcommon-x11.so \n-- Found Fontconfig: \/usr\/include \n-- Checking for module 'gstreamer-1.0'\n-- Found gstreamer-1.0, version 1.16.2\n-- Checking for module 'gstreamer-base-1.0'\n-- Found gstreamer-base-1.0, version 1.16.2\n-- Checking for module 'gstreamer-app-1.0'\n-- Found gstreamer-app-1.0, version 1.16.2\n-- Checking for module 'gstreamer-audio-1.0'\n-- Found gstreamer-audio-1.0, version 1.16.2\n-- Checking for module 'gstreamer-video-1.0'\n-- Found gstreamer-video-1.0, version 1.16.2\n-- Found GStreamer: \/usr\/lib\/x86_64-linux-gnu\/libgstreamer-1.0.so \n-- Found OpenGL: \/usr\/lib\/x86_64-linux-gnu\/libOpenGL.so \n-- Could NOT find LibXml2 (missing: LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR)\n\n\nEnabled CopperSpice libraries\n\n* Core Gui Multimedia Network OpenGL Script Sql Svg WebKit Xml XmlPatterns\n\n-- The following packages have been found:\n\n* ZLIB, Compression Library, &lt;https:\/\/zlib.net&gt;\nRequired for compression support\n* Threads, Platform dependant threading library\nRequired for threading support\n* GLib2, GNOME core library, &lt;https:\/\/developer.gnome.org\/glib&gt;\nRequired for glib mainloop support\n* GObject2, The object system used for Pango and GTK+, &lt;https:\/\/developer.gnome.org\/gobject&gt;\nRequired for glib mainloop support\n* Iconv, For use on systems which do not have Iconv or lack Unicode support, &lt;http:\/\/www.gnu.org\/software\/libiconv\/&gt;\nIconv support\n* X11, Open source implementation of the X Window System, &lt;https:\/\/www.x.org&gt;\nRequired for X11\/X.Org integration support\n* XCB, Open source implementation of the XCB Interface for the X11 Window System, &lt;https:\/\/xcb.freedesktop.org&gt;\nRequired for XCB\/X.Org integration support\n* X11_XCB, Integration between X11 and XCB, &lt;https:\/\/xcb.freedesktop.org&gt;\nRequired for X11 XCB support\n* XKBCommon, Keyboard library, &lt;https:\/\/xkbcommon.org&gt;\nRequired for XKB integration support\n* XKBCommon_X11, Keyboard library, &lt;https:\/\/xkbcommon.org&gt;\nRequired for XKB X11 integration support\n* Fontconfig, Library for configuring and customizing font access, &lt;http:\/\/www.freedesktop.org\/wiki\/Software\/fontconfig\/&gt;\nRequired for fonts configuration support\n* GStreamer, Open source media playback library, &lt;http:\/\/gstreamer.freedesktop.org&gt;\nRequired for multimedia audio and video support\n* OpenGL, The Mesa 3D Graphics Library, &lt;http:\/\/www.mesa3d.org\/&gt;\nRequired for OpenGL support\n\n-- The following packages have not been found:\n\n* OpenSSL (required version &gt;= 1.0), Support for SSL and TLS, &lt;https:\/\/openssl.org&gt;\nRequired for HTTPS support\n* Cups, CUPS is the standards-based open source printing system, &lt;https:\/\/www.cups.org&gt;\nRequired for printing support\n* ALSA, Advanced Linux Sound Architecture, &lt;http:\/\/www.alsa-project.org&gt;\nRequired for ALSA audio support\n* PulseAudio, Sound processing daemon for Unix, &lt;http:\/\/www.pulseaudio.org&gt;\nRequired for pulseaudio support\n* PostgreSQL, Popular open source database, &lt;http:\/\/www.postgresql.org&gt;\nRequired for PostgreSQL database support\n* MySQL, Popular open source database, &lt;http:\/\/www.mysql.com&gt;\nRequired for MySQL database support\n* LibXml2, XML C parser and toolkit developed for the Gnome project, &lt;http:\/\/www.xmlsoft.org\/&gt;\nRequired for XML support in WebKit\n\n\nCopperSpice configured to run on: Linux 64 bit, Release Mode\nCopperSpice will be built in: \/home\/roland\/Projects\/cs_build\nCopperSpice will be installed in: \/usr\/lib\/cs_lib\n\n\n-- Configuring done\n-- Generating done\n-- Build files have been written to: \/home\/roland\/Projects\/cs_build\nroland@roland-amd-desktop:~\/Projects\/cs_build$ \n<\/code><\/pre>\n\n\n\n<p>I was rather shocked to see Cups, Alsa, SSL, and PulseAudio in the list of things that weren&#8217;t there. The Alsa and PulseAudio were listed in the table on the documentation link, just not in the commands.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"946\" height=\"95\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-33.png\" alt=\"\" class=\"wp-image-3642\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-33.png 946w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-33-300x30.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-33-768x77.png 768w\" sizes=\"(max-width: 946px) 100vw, 946px\" \/><\/figure><\/div>\n\n\n\n<p>This time should work, right?<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"664\" height=\"329\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-34.png\" alt=\"\" class=\"wp-image-3643\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-34.png 664w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-34-300x149.png 300w\" sizes=\"(max-width: 664px) 100vw, 664px\" \/><\/figure><\/div>\n\n\n\n<p>Since I know I installed the official libraries, this is a bit of a head scratcher. Scrolling back in the output I see the following:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"1409\" height=\"427\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-35.png\" alt=\"\" class=\"wp-image-3644\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-35.png 1409w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-35-300x91.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-35-1024x310.png 1024w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-35-768x233.png 768w\" sizes=\"(max-width: 1409px) 100vw, 1409px\" \/><\/figure><\/div>\n\n\n\n<p>I won&#8217;t bore you with how many times I edited my .profile assigning different values to PostgreSQL_ROOT and PostgreSQL_TYPE_INCLUDE_DIR. I even started rebooting instead of just logging out and back in. I will share an image of one of the stupid things a person tries when the doc leads them off a cliff.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"693\" height=\"440\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-39.png\" alt=\"\" class=\"wp-image-3645\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-39.png 693w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-39-300x190.png 300w\" sizes=\"(max-width: 693px) 100vw, 693px\" \/><\/figure><\/div>\n\n\n\n<p>Ah! <strong>\/usr\/include\/pqxx\/types<\/strong> Now there is excitement! Nah. False high.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"933\" height=\"47\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-62.png\" alt=\"\" class=\"wp-image-3646\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-62.png 933w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-62-300x15.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-62-768x39.png 768w\" sizes=\"(max-width: 933px) 100vw, 933px\" \/><\/figure><\/div>\n\n\n\n<p>That&#8217;s the package you need. The number will change with PostgreSQL version, but you need postgresql-server-dev-nnnn. It installs a standard U.S. buttload of dependencies when you select it.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"470\" height=\"398\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-50.png\" alt=\"\" class=\"wp-image-3647\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-50.png 470w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-50-300x254.png 300w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/><\/figure><\/div>\n\n\n\n<p>Yes, I rebooted after this to see if things would work. This time when I entered the command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">cmake -G \"Ninja\" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=\/usr\/lib\/cs_lib ~\/Projects\/copperspice<\/code><\/pre>\n\n\n\n<p>I had much greater success.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"631\" height=\"294\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-53.png\" alt=\"\" class=\"wp-image-3648\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-53.png 631w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-53-300x140.png 300w\" sizes=\"(max-width: 631px) 100vw, 631px\" \/><\/figure><\/div>\n\n\n\n<p>Like most of the known universe, I quit caring about MySQL when Oracle bought InnoDB. Someday Oracle will squeeze that orange for every drop of juice and I don&#8217;t want to be relying on it.<\/p>\n\n\n\n<p>Now we can build CopperSpice.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"931\" height=\"368\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-55.png\" alt=\"\" class=\"wp-image-3649\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-55.png 931w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-55-300x119.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/postgres-55-768x304.png 768w\" sizes=\"(max-width: 931px) 100vw, 931px\" \/><\/figure><\/div>\n\n\n\n<p>I believe I also had to manually install CMake.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The screenshot utility that comes installed with Ubuntu 20.04 LTS blows<\/h2>\n\n\n\n<p>On KDE Neon they have a great one. You can tell it to delay when you are going to scrape a screen section so you can navigate to the proper place in a menu system. Not on this one. They have a delay, but it is only for entire windows or screens.<\/p>\n\n\n\n<p>Adding insult to injury it will randomly show you a screen shot an then save a garbage file after you give it a name. I can&#8217;t find a pattern, it just does it. There are half a dozen screen scrapes that didn&#8217;t get into this post series already because it &#8220;said it saved them&#8221; but the file was trash.<\/p>\n\n\n\n<p>The other insulting <em>feature<\/em> is that it autosnaps as soon as you get done dragging the mouse. The default one on KDE Neon leaves the box around what you selected and allows you to adjust things before hitting return to select your scrape. When the left margins are hosed in this post series, that is why.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-3\/\">&lt;Previous-part<\/a>    <a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-5\/\">Next-part><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Keep in mind I have a minimal Ubuntu 20.04 LTS on this system and will be building PostgreSQL support into CopperSpice. The Building for Unix instructions assume a full installation and even then aren&#8217;t complete. By using a minimal install I can help even non-Ubuntu users because I will find everything that got missed. One of the first things I want to do is try converting my XpnsQt project from Qt to CopperSpice. This and &hellip; <a title=\"CopperSpice Experiments &#8211; Pt. 4\" class=\"bnm-read-more\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/\"><span class=\"screen-reader-text\">CopperSpice Experiments &#8211; Pt. 4<\/span>Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":3599,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[1835,1842,1841,575,1381,1844,1843,1840],"class_list":["post-3635","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-information-technology","tag-copperspice","tag-innodb","tag-mysql","tag-oracle","tag-postgresql","tag-screenshot-utility","tag-ubuntu-20-04-lts","tag-xpnsqt","bnm-entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>CopperSpice Experiments - Pt. 4 &#8211; Logikal Blog<\/title>\n<meta name=\"description\" content=\"The trials and tribulations of getting CopperSpice configured to support PostgreSQL so you can actually build the library.\" \/>\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\/copperspice-experiments-pt-4\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CopperSpice Experiments - Pt. 4 &#8211; Logikal Blog\" \/>\n<meta property=\"og:description\" content=\"The trials and tribulations of getting CopperSpice configured to support PostgreSQL so you can actually build the library.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/\" \/>\n<meta property=\"og:site_name\" content=\"Logikal Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-11T20:05:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-14T18:11:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"627\" \/>\n\t<meta property=\"og:image:height\" content=\"585\" \/>\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=\"9 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\\\/copperspice-experiments-pt-4\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/\"},\"author\":{\"name\":\"seasoned_geek\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"headline\":\"CopperSpice Experiments &#8211; Pt. 4\",\"datePublished\":\"2020-06-11T20:05:10+00:00\",\"dateModified\":\"2021-02-14T18:11:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/\"},\"wordCount\":584,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/diamond-1.png\",\"keywords\":[\"CopperSpice\",\"InnoDB\",\"MySQL\",\"Oracle\",\"PostgreSQL\",\"screenshot utility\",\"Ubuntu 20.04 LTS\",\"XpnsQt\"],\"articleSection\":[\"Information Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/\",\"name\":\"CopperSpice Experiments - Pt. 4 &#8211; Logikal Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/diamond-1.png\",\"datePublished\":\"2020-06-11T20:05:10+00:00\",\"dateModified\":\"2021-02-14T18:11:28+00:00\",\"description\":\"The trials and tribulations of getting CopperSpice configured to support PostgreSQL so you can actually build the library.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/diamond-1.png\",\"contentUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/diamond-1.png\",\"width\":627,\"height\":585},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/copperspice-experiments-pt-4\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CopperSpice Experiments &#8211; Pt. 4\"}]},{\"@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. 4 &#8211; Logikal Blog","description":"The trials and tribulations of getting CopperSpice configured to support PostgreSQL so you can actually build the library.","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\/copperspice-experiments-pt-4\/","og_locale":"en_US","og_type":"article","og_title":"CopperSpice Experiments - Pt. 4 &#8211; Logikal Blog","og_description":"The trials and tribulations of getting CopperSpice configured to support PostgreSQL so you can actually build the library.","og_url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/","og_site_name":"Logikal Blog","article_published_time":"2020-06-11T20:05:10+00:00","article_modified_time":"2021-02-14T18:11:28+00:00","og_image":[{"width":627,"height":585,"url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","type":"image\/png"}],"author":"seasoned_geek","twitter_card":"summary_large_image","twitter_misc":{"Written by":"seasoned_geek","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/#article","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/"},"author":{"name":"seasoned_geek","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"headline":"CopperSpice Experiments &#8211; Pt. 4","datePublished":"2020-06-11T20:05:10+00:00","dateModified":"2021-02-14T18:11:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/"},"wordCount":584,"commentCount":1,"publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","keywords":["CopperSpice","InnoDB","MySQL","Oracle","PostgreSQL","screenshot utility","Ubuntu 20.04 LTS","XpnsQt"],"articleSection":["Information Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/","url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/","name":"CopperSpice Experiments - Pt. 4 &#8211; Logikal Blog","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/#primaryimage"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","datePublished":"2020-06-11T20:05:10+00:00","dateModified":"2021-02-14T18:11:28+00:00","description":"The trials and tribulations of getting CopperSpice configured to support PostgreSQL so you can actually build the library.","breadcrumb":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/#primaryimage","url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","contentUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2020\/06\/diamond-1.png","width":627,"height":585},{"@type":"BreadcrumbList","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-experiments-pt-4\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.logikalsolutions.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"CopperSpice Experiments &#8211; Pt. 4"}]},{"@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\/3635","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=3635"}],"version-history":[{"count":0,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/3635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media\/3599"}],"wp:attachment":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media?parent=3635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/categories?post=3635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/tags?post=3635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}