Wednesday, May 8, 2019

Clipboard Trouble

In my foray into c++ so far there's one piece that is still eluding me: copying to the clipboard.

I want to be able to copy field values directly to the clipboard. So far this is eluding me. I've seen qtclipboard snippets but I've yet to get that class successfully added to my includes - even after installing qt on my laptop. I think that part of my problem is I'm trying to maintain a single code base. I don't mind needing to build windows binaries all the time, I DO need to structure everything so I don't have a nix directory and a windows directory (AND yet not have messy directories). I want one copy of the code files, one copy of the help defs, that's it.

At this point, after trying a few different options, I've put it on the back-burner.

Monday, May 6, 2019

Simple Fixes

I'm not sure if I'm a lazy developer, but I like my code like I like my computer's desktop - minimalist. I can appreciate engineering a solution for flexibility and robustness but either my skills are way below the people who write such code or their code is really difficult to decipher and update - or simply implement. If I'm looking for reusable code snippets I can use, as soon as my eyes start to glaze over I move on and look for a simpler piece of code. I'm pretty sure that says more about my skills than the snippets authors.

A great example of my minimalist tendencies is a fix I made this morning. I don't code in Python but I currently support an image data extraction script written in it (So I'm doing a lot of hilariously noobie web searches). I need to run large batches through it via input file of DB record IDs. The trouble is it isn't 'resumable'. So if it works all day and crashes before the batch is done, it has to reprocess everything from the top.

I'm not sure what other developers would do, here's what I did:

If it doesn't exist, I create a file:
<input file name>.bmark.txt

Where the script reads the input file into a tuple, I set bookmarkid the first row of the bmark file.

For each row of the input file... If bookmarkid is not "", is the current input id the bookmarkid? If so, clear the bookmarkid.
So the next row in the input, we have a bookmarkid of "" so we add the input id.

Later as we run the ids through SQL, as each one completes, I replace the bmark file contents with the successful id.

When everything is done, I delete the bmark file, just to be tidy.

So that was my minimalist solution to the problem. I added a little file to persist the last successful id that was processed. And when the script is started, I grab any 'bookmarked' id and check for it (The code was already reading the rows into a tuple, I just skipped adding them to the tuple until the bookmarkid == ""), resuming at the next row.

Win Build on Nix

I have completed a functioning version of NMX (Note Matrix - a project I've been building and rebuilding in various languages and platforms for - probably almost 15 years). It is a console-based notes / bookmarks / todo list / contacts etc app. It uses SQLITE for its database and every time an entry is viewed it creates a txt file of that entry, so you can view your data in any text editor (This feature came about in the Java version, so if you have Java issues, or the DB becomes corrupt, or incompatible with future versions of NMX, you can still read your data).

Being a total c++ noob, compiling the Windows binary was a challenge. I setup a virtual Windows box and tried Mingw. I had a hard time getting the SQLITE .dll linked. After a few attempts I decided to go with an IDE to build it. I went with a free lightweight app: Code::Blocks. I got my c++ files loaded into a blank project and linked the SQLITE .dll and it built!

My only concern was that the Windows OS in my virtual box would expire in about a month or so and I would have to rebuild it. So my goal was to be able to rebuild the Windows binary from within Wine.

I downloaded and installed Code::Blocks and Mingw in Wine. I had to get the Ming Gcc/G++ installed then it worked! I had to find and add the .dll versions of the standard libraries. I put these in the same directory as my sources. I tried creating a .bat file to call the same commands that Code::Blocks does when it rebuilds, but this didn't seem to work, so I'm stuck with Code::Blocks, but at least I can run it in Wine instead of a virtual machine.

5 VST Effects I Use in Every Song

VSTs are so great. I have a massive collection of free instruments and FX that I've tracked down. There are SOO many to choose from... B...