The CUTE Journey

Every now and then you will find yourself needing to install a really old Ubuntu version. I stumbled into this with CUTE and Scintilla. You see, the RedDiamond project really needs to jump ship from QPlainTextEdit. The syntax highlighting available in that module is horribly inefficient. If you never have more than a couple thousand lines in your source file and you don’t have multiple source files of that size, you can probably continue on fat, dumb, and happy with it. Life sucks if you routinely have source files tipping the scales at 5K lines or more. This makes for a long load time. Even the creator of Featherpad is starting to have updates tweaking the syntax highlighting because he too is using that class and the class is more of a student project than a robust editing widget.

Thankfully Scintilla is out there. Sadly, nobody had yet ported it to CopperSpice. I have a port but I haven’t had time to work on the new editor version so I cannot say for certain my port works. The Qt port that is part of Scintilla relies on a somewhat dangerous thing. It is relying on every character either being one byte or starting with some multi-byte indicator value making it a two byte character. I’m sure it works in America, just look at all of the editors using Scintilla and Qt.

QString in Qt is very different from what CopperSpice has implemented. I got pulled away from my coding helping out on the family farm and by life in general. I coded what I thought was going to work quite a while back. CopperSpice string changes made it sound like the existing QByteArray logic used by the Qt version wasn’t going to work. Internally CopperSpice uses QChar32 while internally Qt uses QChar which stores UTF-16.

At any rate, when I return to coding I will find out if my modifications were correct or if I need to force a UTF-16 QByteArray and use the previous logic. If I understood the logic correctly, UTF-16 cannot store all Unicode values in two bytes. CopperSpice chose QChar32 (wasting a bit of RAM) to embrace a wider Unicode set. This means the unofficial packages found in this post will be the last ones using QPlainTextEdit.

Research and Background

Make no mistake, there are hundreds of editors out there using Scintilla. The FOX Toolkit even includes one using a port of Scintilla for that GUI library. (The FOX Toolkit is worth kicking the tires on if you don’t need all of the bloat of Qt. It also doesn’t really push the C++ compiler which is why the toolkit works on so many systems.) I’ve known about Juffed for quite a while. Scintilla itself comes with Scite. Most everybody who does any serious programming on the x86 platform has heard of Notepadqq as well. A very robust free (as in beer) editor that doesn’t have the Microsoft tracking code.

The Internet is evil.

Burn that though into your brain. The Internet is evil. I got sucked into a all-of-my-free-time-and-then-some black hole because of one link. Once an editor was created using Scintilla it got added to that list and never removed. I glanced at several. One looked particularly interesting, and that one was CUTE.

CUTE text editor screenshot

I scraped that screenshot from this site. The screenshots had a Windows 95 era look to them but I wasn’t letting that bother me. There wasn’t a lot of code in the repo so it would be a good tire kicker getting started with Scintilla. (Yes, I was going to look at Scite code as well!)

There is a lesson for those who read on

There were things I added to RedDiamond I wanted to keep. There were things that started in Diamond and I was going to throw out. There were more features I wanted to add.

Above all, since I was going to use Scintilla as the editing core, I wanted to look at a lot of OpenSource editors for how-to ideas and features that might be worth adding to RedDiamond. I wanted to finally create the editor I had wanted my entire PC working career. I didn’t want a “general” text editor that got tabs wrong. I wanted a programmer’s text editor that got tabs correct, had EDT keypad navigation and a host of other features.

In short people, I wanted to make RedDiamond a kick-ass editor that would remain stable because it would not allow plug-ins. Admit it. You’ve all installed a plug-in for an editor and had it bust other things. Sometimes it busts the entire editor. Script-kiddies cutting their first programming teeth tend to write those things and they don’t know how to test. Worse yet, they suffer from “Oh, I’ll write my own” way more than us old people. That’s why between ELPA and MELPA Emacs has sooo many near-duplicate packages. Some might even be 100% duplicate, just written by someone else and placed in “the other” package library because someone didn’t bother to search both before writing.

One outright fantasy, would be if the final editor could not only get tabs correct, but could handle all/most legal COBOL source formats. Click the link for editors that got tabs wrong and read. Some time around COBOL-85 the source format dropped the line number/card format requirement. The drug induced hallucination would then be to extend that functionality to support BASIC line-number-era formatting and the no line required later. Same with FORTRAN and a few other languages. Before you go thinking that to be rather kooky, keep in mind PowerBasic created PBEdit with Scintilla. Sadly it isn’t OpenSource to look at.

I don’t care if you think those languages are old and obsolete. I want this to be the editor I’ve always wanted on the PC. There are thousands (possibly millions) of text editors out there and they all have things that suck about them. I want this editor to not have a sucky part.

Once it is close to perfect I can use it to create an IDE for CopperSpice. I’m old and want to retire so that IDE won’t be free, just the editor.

What’s the Lesson?

Never fixate on a “make it work today” project just because you have some time on your hands.

If you haven’t done that to yourself, you haven’t worked in IT long enough. I knew my brother wanted help with planting season and it was coming up fast. I knew there were other family obligations coming up. But “today,” whenever today was, I had the time. This seemed like a fun and interesting little challenge.

Pay somebody to slap you really hard when you start thinking like that.

The other lesson I’m saving until the very end.

Last Update 2013 and That was to Package Binaries

I saw that on SourceForge and didn’t care. Today I had time. Today I could play with trying to get this to build/run under Ubuntu 20.04 LTS. If that didn’t work, I was certain I could find a Ubuntu 12.04 LTS ISO to install in a VM.

Gotta say, I’ve been warned about thinking before. Doesn’t lead to good outcomes for me. This was no different. The little Gnome was cackling in the back of my mind. It really enjoys my enduring pointless frustration. That Gnome even helps me ignore obvious things like the fact this was written using Python 2 and the name of the missing library methods reminds me of something I can’t quite put my finger on.

qextscintilla.h – Why Does That Sound Familiar?

The Gnome kept stepping on this thought every time it popped up. I got most of the build to “work” using modern stuff once I installed Python and Qt development in a Ubuntu 20.04 LTS VM. I searched and I searched. There was something familiar about that file name. It had to be in one of the development package libraries.

Keep in mind I’m currently ignoring all of the other Scintilla based text editors that would actually compile because they are currently maintained. I want to get this one to work. The little Gnome is whispering “You can’t throw in the towel now. What will you do with the rest of your day? Are you really going to let a little program like this defeat you?”

It knows (gnows?) how to push my buttons.

Fine! I’ll set up a 12.04 LTS VM! Note, the setting up sections to follow are for

Setting up a Ubuntu 12.04 LTS VM in 2021

This part is only useful for those who want to set up 12.04 LTS in a VM today. I will be installing things that “should” have built CUTE.

Download Ubuntu 12.04 LTS release from here. Install into a VM.

sudo apt-get install build-essential
sudo apt-get install synaptic

Install all updates and if you are using Virtualbox, install the Guest Additions. This may require several reboots.

Reboot before proceeding.

sudo apt-get install subversion
sudo apt-get install python-dev   # this installs 2.7
sudo apt-get install jed jed-extra
sudo apt-get install qtcreator
sudo apt-get install libshiboken-dev
sudo apt-get install shiboken
sudo apt-get install pyqt-tools python-qt-dev
sudo apt-get install pyside-tools python-pyside.qtgui python-pyside.qtuitools python-pyside.qtxml
sudo apt-get install libpyside-dev
sudo apt-get install qt3-dev-tools libqt3-headers qt3-apps-dev python-qt3 libqt3-mt-dev
sudo apt-get install gnutls-bin libqt3-i18n python-qt3-gl
sudo apt-get install qt3-dev-tools-compat libfxscintilla-dev

Download and install version 2.10.0 of qscintilla from Riverbank Computering.

mkdir Projects
cd Projects
svn checkout https://svn.code.sf.net/p/cute/svn/trunk cute-svn
cd cute-svn/CUTE
jed configure.sh

Copy python 2.4 logic to make 2.7 in both places where 2.4 appears. You should have two sections in configure.sh looking much like the following:

elif test -f $withval/include/python2.4/Python.h; then
      PYTHON_INCDIR=$withval/include/python2.4
      PYTHON_LIBS="-L$withval/lib/python2.4/config -lpython2.4 -lutil -ldl"
elif test -f $withval/include/python2.7/Python.h; then
      PYTHON_INCDIR=$withval/include/python2.7
      PYTHON_LIBS="-L$withval/lib/python2.7/config -lpython2.7 -lutil -ldl"
if test -f /usr/include/python2.4/Python.h; then
      PYTHON_INCDIR=/usr/include/python2.4
      PYTHON_LIBS="-L/usr/lib/python2.4/config -lpython2.4 -lutil -ldl"
elif test -f /usr/include/python2.7/Python.h; then
      PYTHON_INCDIR=/usr/include/python2.7
      PYTHON_LIBS="-L/usr/lib/python2.7/config -lpython2.7 -lutil -ldl"

Configure still doesn’t work.

sudo apt-get install python-qscintilla2 libqscintilla2-dev

No Love!

Download Scintilla 3.2.4 from SourceForge and extract into Projects directory.

cd ~/Projects/scintilla/qt/ScintillaEdit
python WidgetGen.py
cd ~/Projects/scintilla/qt/ScintillaEditPy
python sepbuild.py

Start QtCreator.

Open project ~/Projects/scintilla/qt/ScintillaEdit/ScintillaEdit.pro

Build All

Result of build
cd ~/Projects/scintilla/bin
Everything seems to be there

You see, the configure script was expecting to find this library built from scratch at the same directory tree level as the CUTE project. It’s okay for those of you who are laughing right now. I’m sharing this so you can all get a good yuck while learning how to install really old Ubuntu versions in a VM.

cd ~/Projects/cute-svn/CUTE
still no love

Now we actually edit configure.sh.

The Help text lied

Obviously the help text lied.

That logic is a wee bit ugly

Basically there is a hard coded directory tree and you get to change the base via a command line parameter. That would be okay if it weren’t for one teeny tiny thing.

qextscintilla.h doesn’t exist anywhere.

Adding insult to injury for someone that is an old timer with Qt, the prefix “qext sounds very familiar.

Setting up a Ubuntu 8.04 LTS VM in 2021

This part will provide useful information for anyone that has to maintain something very old. In particular, medical devices that were approved long ago will force you to use the old tool chain.

Yes, Ubuntu 8.04 LTS has long since been officially dropped. Thing of it is, that means it moved to older, possibly slower and not mirrored servers. Most likely these servers are much like the ones you end up on when you sign up for $8.95/year hosting services. They will handle the tiny number of people who actually visit your blog or whatever.

The only real downsize of this is you have tweaking to do. If you are really lucky someone else has already had to do the tweaking and posted the answer like this one. That saved me a lot of searching. As I stated, the repos got moved.

Download Ubuntu 8.04 LTS from here and install into a VM. (I used the 64-bit version) Once you have completed your install and rebooted, open a terminal.

cd /etc/apt
sudo mv sources.list sources.list_orig

Now copy/save/whatever the new sources.list you pulled down from the link above. If you are too lazy to scrape it yourself from the other link then download u18-sources-list.txt here and rename once you get it. I was going to put it into this post but the Code block of WordPress block editor is busted bad. It was using the # character for something and really mangling the file.

Reboot. Login and open another terminal.

sudo rm -vf /var/lib/apt/lists/*
sudo apt-get update
sudo apt-get upgrade

Note: Ubuntu 8.04 (and several other Ubuntu flavors) had issues with monitors running in VMs. If your GUI stops working you can <ALT><CTRL><F2> to open a terminal. Just login there and type

sudo reboot now

The above works if Windows 10 is your host. It does not work if Ubuntu 16.04 LTS is your host. Why would anyone use Ubuntu 16.04 LTS as a host? To get the version of VirtualBox that works with the libxrandr-dev version found in Ubuntu 8.04 LTS. Otherwise you have a tiny little screen no matter what you do.

Assuming you are still progressing:

sudo apt-get install build-essential
sudo apt-get install libxrandr-dev

You need the build-essential for the Guest Additions. (I assume you are using Oracle Virtualbox.) “Insert Guest Additions” next. Autorun will not work. After you’ve inserted the CD via the Devices menu you have to open a terminal and type the following:

cd /media/cdrom0
sudo ./VBoxLinuxAdditions.run

Reboot. (Yes, all of the rebooting rather sucks.) Most likely your screen will remain a tiny box in the center of your actual screen. At least it will if you are using a current Virtualbox on Windows 10. I tried every video card Oracle provides. Found no monitor love. Newer Virtualbox needs version 1.4 and 1.2 is what the repo has. Use GUI tool that should be telling you about updates with big red arrow pointing down up by your name at the top of the screen to apply “held back” updates.

Reboot.

The following were installed in my hopeless attempt at getting CUTE to work.

sudo apt-get install python-kde3-dev python-qt3 python-qt-dev python-qtext 
sudo apt-get install libssl-dev libwww-ssl-dev libwww-ssl0 python-openssl 
sudo apt-get install subversion python2.4-dev qt3-dev-tools libqt3-mt-dev 
sudo apt-get install python-kde4-dev pyqt4-dev-tools python-qt4-dev python-qt4-dbus 
sudo apt-get install python-qt3-gl libqscintilla-dev python-pyopenssl epiphany-browser 
sudo apt-get install galeon autoconf python-qscintilla2 libqscintilla2-dev scite
sudo apt-get autoremove

Now I had to svn checkout CUTE on host computer and copy to shared folder to get into Ubuntu 8 as SSL is far too old. One of the reason’s I installed so many browsers was the hope one could work around the issue. Bad thing hope. Causes us to suffer needlessly.

The elusive header file

I couldn’t believe it when I found the header file. I thought “Yes! Now I’ve won.” Been warned about thinking before. I edited configure.sh and took out the /qt/ in the paths where the code was looking for qextscintilla.h

if test "${with_qscintilla+set}" = set; then
 withval="$with_qscintilla"
 QSCINTILLA=
  if test -f $withval/qextscintilla.h; then
      QSCINTILLA=$withval
   elif test -f $withval/include/qextscintilla.h; then
      QSCINTILLA=$withval/include

Now configure should actually build.

cd ~/Projects/cute-svn/CUTE
./configure.sh --with-qscintilla=/usr/include/qscintilla/

There was a dim glimmer of hope.

roland@roland-u8-desktop:~/share/cute-svn/CUTE$ ./configure.sh --with-qscintilla=/usr/include/qscintilla/
 checking for true… /bin/true
 checking for false… /bin/false
 checking for g++… g++
 checking for C++ compiler default output file name… a.out
 checking whether the C++ compiler works… yes
 checking whether we are cross compiling… no
 checking for suffix of executables… 
 checking for suffix of object files… o
 checking whether we are using the GNU C++ compiler… yes
 checking whether g++ accepts -g… yes
 configuring for CUTE 0.3.0 (12 April 2005)
 checking for a BSD-compatible install… /usr/bin/install -c
 checking for mv… /bin/mv
 checking for rm… /bin/rm
 checking for cp… /bin/cp
 checking for echo… /bin/echo
 checking for ar… /usr/bin/ar
 checking for qmake… /usr/bin/qmake
 checking build system type… x86_64-unknown-linux-gnu
 checking host system type… x86_64-unknown-linux-gnu
 checking for Operating System Distribution… done
 checking for Python location… yes
 checking for Qscintilla location… yes
 configure.sh: creating ./config.status
 config.status: creating Makefile
 config.status: creating src/cute.pro
 config.status: creating src/config.h
 config.status: src/config.h is unchanged
 config.status: executing default commands
 Configuration on Tue Jun 15 11:41:22 CDT 2021:
 Host:               x86_64-unknown-linux-gnu -- debian lenny/sid
   CUTE version:           0.3.0 (12 April 2005)
   Source code location:       .
   Install binaries:          ${exec_prefix}/sbin
   Install config files:       ${prefix}/etc
   Scripts directory:          
   C++ Compiler:           g++ 4.2.4
   Compiler flags:           -O
   Linker flags:            -O
   Libraries:              
 Python libs:              -L/usr/lib/python2.4/config -lpython2.4 -lutil -ldl
   Python include:          /usr/include/python2.4
   Qscintilla dir:          /usr/include/qscintilla/

Running make rather dashed hope, until I looked at it closely. This will seem obvious to you, but I had to first get a scrollback buffer setting big enough to get back here. For some reason it didn’t redirect to a file properly.

/usr/share/qt3/bin/uic ../ui/projectdialog.ui -o ../ui/projectdialog.h
 /usr/share/qt3/bin/uic ../ui/statusbar.ui -o ../ui/statusbar.h
 g++ -c -pipe -Wall -W -g -D_REENTRANT  -DQT_THREAD_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I.. -I/usr/include/qscintilla//qt/ -I/usr/include/qscintilla//include -I/usr/include/python2.4 -I/usr/include/qt3 -I../moc/ -o ../obj/cute.o cute.cpp
 cute.cpp:46:34: error: qextscintillaprinter.h: No such file or directory
 cute.cpp:47:31: error: qextscintillabase.h: No such file or directory
 In file included from cute.h:55,
                  from cute.cpp:49:
 c

Yes, stupid me should not have used a slash at the end of the directory path, but that is not the interesting part. Some other place in the command file is hard coding “/qt/” and “/include” on the end of that.

Hard coding of directory paths is always bad people!

That was hidden in autoconf/configure.in

autoconf/configure.in

And in src/cute.pro.in

src/cute.pro.in

They also screwed us with a hard coded /lib.

After cleaning up the first hosing I tried another clean build.

Newest build error

This is where the Gnome cackled the loudest. This is where I remember why Qext sounded so familiar.

There was a most unfortunate time in Qt’s history where they had this Website called “Playground.” Things that were being worked on unofficially, perhaps as proof of concept, got put here. They were all prefixed with “Qext” to indicate they were “Extra” classes/modules and not part of actual Qt. When something was deemed worthy of being included in Qt it was then taken out of the playground. The Qext became just Q. Many of the method names, parameters, and parameter types would change.

I got fried on this with the serial port class on a project. Early development started with the playground. Before we finished a new release of Qt came out that included QSerialPort. That was not just a quick substitution with the editor.

CUTE is abandonware. From what I’ve seen just looking at the compiler output, anyone looking to bring it back would have to start over. That last compilation error means this was written using a very old C/C++ standard. I remember during the days of DOS when we could just assume most pointers were interchangeable, but that was long ago.

Gnome 1 Rollie 0

How to Show the Day in Ubuntu

Trapped inside during COVID-19. Spending days on your computer either working or looking for work or just searching for something interesting to keep your mind off the four walls it is easy to lose track of the day. Those of us who write software for a living can get so far into what we are doing we even forget to eat. When someone finally does get our attention coming back to reality is like waking from a coma.

Default Ubuntu Date Display

Few can understand why Ubuntu chose to leave the day off. Thankfully you can fix it rather easily.

If you don’t already have a bin directory under your $HOME create one now. You probably want to log out and log back in as well. By default, if you have a bin directory in your home directory Ubuntu will add it to your path. This is where you put your personal scripts and executables that you want available from the command line.

Now open your favorite text editor and paste in the following code:

#
first="$1"
param="${first,,}"

case "$param" in
	"false"|"0") 	gsettings set org.gnome.desktop.interface clock-show-weekday false ;;
	""|"true"|"1") 	gsettings set org.gnome.desktop.interface clock-show-weekday true ;;
	*) 				echo "invalid parameter"
esac

exit

Save the file in your bin directory under the name “show-day”. Use the file browser and navigate to the file you just created. Right click on it. Select “Properties” from the menu that appears.

Select Properties

Navigate to permissions and flag the file executable.

Make executable

Close the dialog and you should be good to go. Run this command in a terminal using nothing, true, or 1 as a parameter and the day will appear on your display. This setting will remain until you manually change it (or Ubuntu pushes out an untested update that whacks it.)

If you want to get rid of the day for some reason run this script in a terminal again passing either false or 0 (that’s a zero) as the parameter. That will turn it off and the setting will persist the same.

The Best Part of Low End

As I get closer and closer to the cranky old man stage of life I get pickier and picker about my monitors and office lighting. I also find supposed high end products intolerable.

Anyone who reads this blog knows I write a lot of books. “The Minimum You Need to Know About the Phallus of AGILE” is off for final editing. I have two more books that are somewhere between 2/3 and 3/4 of the way completed. Those who visit the Interesting Authors blog were exposed to early (and ugly) drafts of their early chapters.

Over the course of the past few weeks I’ve been waxing nostalgic for my days of COBOL. This has lead me to experiment with GnuCOBOL under KDE Neon 64-bit. This is Yet Another uBUntu (YABU) Linux distro. I’ve also been kicking around various editors and IDEs, even giving UltraEdit another try. Just haven’t had the time to see if they actually fixed the C/C++ standard formatting. What is with editors like Atom, Sublime Text 3, and UltraEdit wanting you to hack default configuration files instead of providing options in menus? This is not a good trend though many seem to be following it. A previous post about Sublime Text 3 and COBOL may have given you some idea of what I was doing now.

Why so many things? There is no IDE for GnuCOBOL. Yes, during my days on OpenVMS I gladly used EDT or LSE, then ran a stand alone debugger. I would still do it today if the billing rates weren’t all illegal alien wages. The one thing that made it great, besides OpenVMS, was the debugger. It was screen oriented and worked with any language back when PC’s were selling retail with only two floppy disks installed.

The massively overweight Eclipse was my first knee-jerk impression. Let me save you some time. The COBOL plugin is horribly broken. By that I mean it will not install from the marketplace. Fine! I did some digging and found out where it lives. I followed the manual install instructions. Managed to install, but it crashes and burns when you try to start a COBOL project. Despite my not favorable impression of Eclipse, this could have justified its existence.

Someone pointed me to the OpenSource version of Visual Studio Code, VSCodium. The one without evil empire tracking information built into it. I installed it and the COBOL plugin for it. I also installed the OpenVMS IDE plugin. Don’t install both of these together. I no longer have my DS-10 Alpha (and don’t want another) but I did want to kick the tires on that plugin at some point. If you install both the COBOL plugin jumps off a cliff. Uninstalling the VMS IDE plugin made the COBOL plugin “work”. It can’t really “work” until version 3.1 or greater of GnuCOBOL is released. A compilation switch has been added to make things nicer. You can read a bit about it in this message thread.

One thing is for certain, the $299 SlickEdit Pro didn’t handle GnuCOBOL like an IDE. I uninstalled that trial within half an hour of getting the trial license key. The makers of SlickEdit need a 5 active install, $99/year license like UltraEdit if they want to be taken seriously. UEStudio would have been worth looking at, but it doesn’t run on a real operating system so why bother?

I honestly hoped KDevelop had a COBOL plugin. A quick search of the user forum shows quite a few people interested in COBOL, but so far nobody interested in developing the plugin others are waiting for. I like KDevelop because it is built around/using KATE. One of the reasons I was paying $99/year for UltraEdit was clients kept forcing me to use default Ubuntu desktop for development. Yes, QtCreator is great for Qt development, but you need another really good editor for all of your cutting and pasting and note taking. That’s what I used to use KATE for.

UltraEdit has always had a “feature” (inexcusable bug) that has pissed me off to no end over the years. It’s a burr under the saddle that just rubs both horse and rider raw. It happens when you have told UE to use spaces instead of tabs. The tab size value isn’t correct.

empty file with cursor in first position image
empty file with cursor in first position

With tab size set to 4 an IT oriented user would expect the first “tab stop” to be at 4, then multiples of 4 across the page.

after first tab key image
after first tab key

 

after second tab stop image
after second tab stop

Like I said, the cranky old man stage of life waits for all of us if we live long enough no matter what gender we are born as. For as long as I can remember this bug has existed in UltraEdit when using spaces and it is just ()&*)(*&ing annoying! In the new new new new world of COBOL it is a catastrophe. Why?

cobol fixed format sample image
cobol fixed format sample

In fixed format COBOL, Area-A starts in column 8, Area-B starts in column 12, columns 1-6 are for line numbers, column 7 is the comment/continuation, and column 72 is quite literally the end of the line. In “modern” fixed format COBOL, they tend to skip the line numbers.

modern fixed format cobol image
modern fixed format COBOL

In short, you need a tab size of 4 to actually be 4 when inserting spaces instead of tabs. This means if the cursor is sitting in column 1, you only insert 3. In fact, at all times you take the current cursor position, subtract it from the next highest multiple of 4, and insert exactly that many spaces so the cursor lands in said multiple of 4.

Now that I’ve issued this severe beating, it should be noted that UE does handle syntax highlighting correctly in both fixed and free format COBOL.

COBOL free format UE image
COBOL free format UE

That is something notepadqq doesn’t do or at least doesn’t do in an obvious manner.

notepadqq COBOL image
notepadqq COBOL

Notice how the first 6 characters are blue? That’s because it is hard coded for fixed format (or at least not an obvious way to enable free format.)

notepadqq COBOL fixed format image
notepadqq COBOL fixed format

There is supposedly some hack I can write to make UE auto-generate zero filled line numbers spacing them by 10. I just haven’t had time to try. I’m not certain I want to pay that kind of money _and_ have to fix that myself, especially since it sounds like I’m going to have to hack the default C++ template so it doesn’t force K&R on me. No, I don’t care what your argument is. If your C/C++ coding style involves this:

if (fred) {
    /* do someting */
} else {
    /* do something else */
}

Where they “{” is on the same line as the if and the “}” is on the same line as the else you are using the archaic K&R style. Java also uses this style and it hasn’t been a valid coding style since about 1985, neither is any style based on it.

In it’s defense, I really like the color schema notepadqq uses for COBOL. I “think” one should be able to hack the existing cobol.js file to make it fixed/free sensitive.

Sublime Text doesn’t do a bad job. Unlike UltraEdit, I can click the line numbers in the output window for errors and be taken to them. You just can’t debug even with the GDB debug plugin.

line numbers compiled with -free
compiled with -free

There might be yet another hack I can do to UE to make that work but I think you are starting to see the lack of appeal when it comes to paying an annual fee for something that I not only have to hack, but have to keep those hacks on-line so I have them when I travel to a client site and have to use one of their development machines for 6-12+ months. Sublime Text 3 was something like $25 back when I bought it and good forever. (I do think it is around $80 now.) If they come out with the same one time fee no matter how many times you install deal for Sublime Text 4 in a few years, yeah, I’ll do that. So far I haven’t actually had to hack hidden files. I’ve installed a few plugins and tweaked a couple of user/configuration settings using menu options. I didn’t have to find the super secret directory where they hid the file on this platform.

Why then, the title of this blog post?

Ah grasshopper. You’ve been reading my books and my blogs for years (or you should have been!) The journey is more important than the destination. I don’t write for the Twitter generation, I write for people who can think for more than 140 characters.

My waxing nostalgic for COBOL (and an academic on-line who knows less than nothing talking out his ass) got me to do some COBOL programming and COBOL research again. I’ve once again been spending an ocean of time in text editors and LibreOffice. My eyes have become more sensitive as I age and I’ve become pissed off at all of the “dots” I see making up text on my screens.

Yes, that Zotac branded NVIDIA card with 384 CUDA core would make BOINC crunch like the dickens and complex images would appear quite clear, but plain old text looks more and more like it was printed on the screen by an 8-pin dot matrix than some high end combination of graphics card and monitor. I have to get a long way from the monitor before that collection of dots looks like a “solid” character. In truth, with or without my glasses, the monitor has to be a good twelve inches past the end of the fingers on my outstretched arm before enough of a blur effect happens to push the dots together.

Believe it or not, the ViewSonic Super CLEAR IPS monitor I’m using right now looks even worse than the VG2732m-LED monitor sitting beside it connected to the same video card on the same computer.

For the past few days I’ve been hacking this 7th-gen i7 HP EliteDesk. I suspected the NVIDIA based card just kind of sucked at text. The machine has a built in Intel HD card, so why not use it?

intel built in graphics image
Intel built in graphics

Intel HD Graphics cards, Skylake in particular, have a lot of issues under Linux. There is a continually recurring bug where two monitors are found, but only one displays anything. Yesterday I didn’t really have time to fight with it so I snagged an old MSI (Radeon based) video card out of my spare parts drawer and stuck it in. I wish my attempts at taking a picture yielded something I could be certain would show up on a Web page. Most of the dots were gone?

Why was that video card one of half a dozen “spare” cards in that massive drawer? AMD ceased supporting it with the stuff that became part of Ubuntu 18.04. The “free” driver doesn’t make the GPU available to BOINC so I had to obtain another of those NVIDIA based Zotac cards. (I can usually find them for $50 or less, probably also one of the reasons I see dots.) They certainly make BOINC crunch numbers when I’m not at the keyboard!

Today I was miffed. I really wanted to solve my built-in Intel video problem. When I got to the office after running errands I re-read _all_ of the posts in that bug link. Please allow me to tell you how to solve your problem of second monitor displaying either nothing or horrible looking stuff when Intel HD graphics are involved. Oh, laptop users, you are screwed.

  1. Power down.
  2. Open your case.
  3. Install any non-Intel video card you have available which will fit an existing slot and connect monitor(s).
  4. Close case.
  5. Boot Linux.
  6. Open a terminal.
  7. sudo apt purge xserver-xorg-video-intel
  8. Power down.
  9. Open your case, remove installed video card, connect monitors to ports of your built-in video card, close case.
  10. Boot Linux.

This fixes the problem. My text is about as grainy as it was with the higher end NVIDIA based card. At some point tomorrow I may be forced to install the really old MSI card because text looked a lot cleaner.

Companies writing drivers for Windows do, and Windows itself does a lot of cheating when it comes to making text look solid. On the Linux platform few developers take the time to make text look as solid as a green phosphor letter.

You’ve probably guessed one of the books I just started writing; “The Minimum You Need to Know About GnuCOBOL.” What you probably haven’t guessed is where I landed for a COBOL “IDE”

Emacs

Yeah, I didn’t think I would ever install something that heavy again. Well, that heavy excluding the total tonnage of Eclipse.

I’m not certain but Emacs just might be the last place Lisp still exists. I vaguely remember having to write portions of an Algol then a Lisp compiler back when I was working on a masters degree.

I really did try a lot. If I was willing to push a bolder up hill with my nose, I probably could have dug into Anjuta and got it working with the compiler and debugger.

Anjuta old fixed format image
Anjuta old COBOL fixed format

 

Anjuta COBOL new fixed format image
Anjuta COBOL new fixed format

 

Anjuta COBOL free format image
Anjuta COBOL free format

I suspect the reason the 2 lines are in RED is this free format isn’t quite as “free” as others. It most likely wants SELECT and a few other things to start where Area-B would have them when using fixed format.

Summary

While waiting for my next contract to come along I am now writing four different books.

  1. “Dream Recorder”
  2. “Twenty of Two – The Infamous They”
  3. “The Minimum You Need to Know About GnuCOBOL”
  4. “The Minimum You Need to Know About GUI Emacs”

Too many Emacs books focus on just the terminal. Yes, there are hundreds of “free” sites listing 20-30 commands, just enough to really get into trouble. Yes, there are probably a hundred or more Emacs books out there right now. Most focus on Emacs in a terminal or simply add credence to the old mantra

If Emacs had an editor it would be one Hell of an operating system!

Yeah, I’ve heard it, I’ve said it, and I’m living it again.

To those who say “How can you keep all of those books straight?” that’s easy. Work on one until you get tired or lose the spark, then work on another. I’ve done the one-book-for-an-entire-year thing. That was “The Minimum You Need to Know to Be an OpenVMS Application Developer.” It’s really hard to maintain a spark for that long. Taking a few weeks or months off to write about something else that interests you then coming back to an older piece is rejuvenating, or at least it is for me.

OpenSUSE Leap 15.1

At some point I will learn to not get into conversations with people who are either new to programming or have done only one thing all of their lives. One such person suggested I should use OpenSUSE Leap for my Linux desktop. What they knew not was that I used to use SuSE Linux back when we only had dial-up Internet and the entire distro came shipped on a box of CDs. The one thing I really hated, which was far too common, was RPM Hell. This is where a package or update failed to apply leaving the your package management so broken you could neither install anything else nor back out the broken install.

For those who are not familiar with Linux, there are many different software packaging utilities/types.  The two primary are RPM (used by RedHat, Fedora, SuSE, and others) and DEB (created by Debian, used by Ubuntu and many many others.) A .DEB is basically just a zip file with some additional artifacts. I don’t care to look inside of an RPM. At some point I might have to make one, but today we are not at that point.

As you can imagine, getting hundreds of megs of updates over dial-up caused RPM Hell with alarming regularity.

The Desktops

Back in the day SuSE installed all supported desktops, KDE, Gnome, etc. This meant most everything was actually tested under all of the desktops. In fact you could change your desktop during login using KDE this time and Gnome the next. That was a massive improvement over Ubuntu which has separate distributions for each but only one repo. If you are running Gnome and install something from KDE like an editor or some utility, it was quite possible your desktop wouldn’t work right again. The same was true going the other way. SuSE didn’t have that problem which is why I put up with RPM Hell and yast for so long. It was nice knowing things not only could, but would, work together.

Yast

There are some who praise yast. Honestly I think it is only the handful of people who develop it. Conceptually, having a central place to look for all system settings and configuration isn’t a bad idea, where it failed was the implementation. To start with not everything is in yast. To really hose you, searching for what you want in the start menu doesn’t always identify the portion of yast you need.

startup applications image

Autostart applications aren’t part of yast or so it appears. I wanted to add yakuake to my autostart application list because I’m used to having a drop-down terminal when working with Linux.

startup apps image 1

Clicking add program brings up the following

list image

As you can see I navigated around to find Yakuake. As they say, the rest is history.

yakuake in startup list image

Installing and configuring OpenSUSE Leap 15.1 in Oracle Virtualbox

If you are looking for detailed instructions about installing Oracle Virtualbox on your Ubuntu based host read this article. I’m going to assume you’ve already done much/most of that. If you got in a hurry and didn’t select the ISO when starting I’m going to assume you can read this article and fix the problem yourself. This particular discussion is going to pick up at the build-essential part of the previous article.

devel_basis image 1

In the OpenSUSE world the build-essential equivalent is devel_basis.

lots of packages image

Yeah man, it installs a lot of packages.

devel_basis success image

My line of sight Internet service is neither the speed of black fiber nor a slouch. The install sure felt like way more than two minutes though.

bin directory image

One thing you may notice if you were following along with the other instructions is that OpenSUSE automatically creates a bin directory under your home directory.

OpenSUSE is one of those KDE desktop distros which installs way too much KDE for you.

kde packages image

I used to use KMail, Kontact and KOrganizer back in the day. They all use Akonadi as a common backend. In theory, this isn’t horrible. At one point it was atrocious. That’s when I learned just how difficult it was to get data out of Akonadi in a format Thunderbird and other more common applications could use.

LibreOffice Writer image

At least they install LibreOffice Writer instead of forcing you to use Calligra like some others. Forcing someone new to Linux to use Calligra would turn them off forever. That package has a steep learning curve just to write a letter home to mom from summer camp. As a professional author I refuse to use it.

Installing Guest Additions

When you are installing Guest Additions for a Ubuntu based distro it generally asks you if you want to run the autorun then runs it once you tell Virtualbox to insert the CD. Under OpenSUSE it pops up the Dolphin file browser/manager.

autorun failure image

I had to right click on autorun.sh and choose “run in terminal” then I had to manually close the terminal once completed.

If you followed along with the instructions for creating a Ubuntu based VM, you probably noticed a bit of difference with respect to the share folder.

share already created image

As you can tell, a mere mortal user cannot access it.

NOTE: SuSE used to be notorious for creating a root account and having a person issue su command to gain root authority. Ubuntu/Debian based distros have been using sudo for years without enabling a root account. There were many discussions over the years about just how insecure it was to require a known God account be enabled. Lots of shell scripts had to be hacked so they could straddle the great RPM/DEB divide. I was pleasantly surprised to see sudo work.

Don’t worry, our mount-share script can still mount and things are available in both places.

mount-share image

If you copy stuff to the /mnt/share directory you will need to use sudo and root,root will most likely own the files.

NOTE 2: User IDs are still hosed.

From KDE Neon host

id from host image

From OpenSUSE in VM

suse id image

Back in the day many developers would put the /home directory on a different physical disk than the OS install. This was done so /home/roland could be the same across many distros. When we needed to build and test with a different distro we just rebooted and selected a different Grub entry. The problem was always the differing uids. It looks like the problem has gotten somewhat better. Both are using 1000 for the uid, it’s just the groups that are way off. I seem to remember one of them used to have a really low uid number as well.

Things I Noticed

While I was able to locate and install Microsoft’s Core Fonts for the Web

core fonts image

For whatever reason years ago I used the Comic Sans font when creating the logo for my technical book series. I’m guessing it was so it “should” render the same in all browsers.

the_min logo

I was not able to locate an installable t1-cyrillic font package. This package used to contain “FreeTimes,” a very nice looking serif font I used when writing quite a few books. One of the reasons I never gave OpenSUSE another look after moving to Ubuntu was always having to backdoor in the t1-cyrillic fonts. I squirreled away one set of the fonts and it is a good thing I did. Someone dropped “FreeTimes” from the package in Ubuntu. If I ever need to work on a second edition of those books it is going to be a lot of work. Most of you who are not authors are thinking

“So what? Just select the text and change the font.”

Yeah, right. There are page break and other wrap issues to deal with. The more images, the more problems. Then you have to read through looking for internal references. What’s an internal reference? “as show on page NNN” which is now off by several pages.

Everything seemed faster

The feeling I could not help was that everything was faster. Part of this might have been explained by use of a simple, default video driver, but that makes no sense. Ultimately it all had to find its way through the NVIDIA driver the host computer was using. Everything should have been slower. I’m running inside of a VM and have to reach out of it to get to the disk. When I opened up “The Minimum You Need to Know About the Phallus of AGILE” it loaded the file blindingly fast. Well, blinding compared to how it loads on the host computer. All 598 pages with all of those images and I could bounce from beginning to end like snapping my fingers.

About all I can think of is Leap 15.1 is either using a newer kernel where some huge performance degradation got fixed or it has a dramatically better disk caching algorithm. Yes, there should be two levels of disk caching going on give the checked box, but that doesn’t explain the speed of reading one document file and rendering everything in the word processor. Both are running 6.3.something so I wouldn’t expect a huge difference.

KDE Neon – Ubuntu – Will Not Boot Properly After Kernel 5.3.0 Upgrade

So, late on Friday you are typing away and see the little blue dot from the Software Updater built into KDE Neon. Maybe you are running Ubuntu and saw a message. Doesn’t matter how you made the decision to install updates late on a Friday, you are now screwed. Yeah. I know your pain. Why do you think I’m writing this post? I did this exact thing. I know better than install anything pushed out late on Friday, but I did it too.

Adding insult to injury is the subconscious panic which sets in when you see the startup screen hang. If you hit the escape key you see a bunch of boot text, but hitting return does nothing. You can see your hard drive flashing so you know BOINC and other things are running. Adding insult to injury, KDE Neon hides the grub boot menu by default. Neither holding down the left shift key nor hitting the escape key at startup brings up the grub menu where you could easily select the previous kernel.

Frantic searches on-line via a different computer give you lots of things you could do from the command line. All of them assume you can get to a command line.

Take a deep breath and relax. You can get to the command line. With that screen of boot log text up hit <alt><ctrl><F2>. Login at the text login prompt.

cd /etc/default

sudo nano grub

change the timeout_style to menu and the timeout to at least 5 but preferably 10 seconds.

 

grub changes

 

Save the file and exit.

sudo update-grub

Now you have 2 choices. The safe and orderly choice would be to reboot via sudo reboot before proceeding. I didn’t bother.

sudo dpkg -1 | grep linux-image

You will find two linux-image packages for 5.3.0. One is a generic hardware package and the other looks like full kernel. (That’s a dash one after dpkg in case the font makes it look like an l.)

sudo apt purge linux-image-5.3.0 that looks like a full kernel

If you didn’t reboot you will get some warning screen about removing the kernel you are running with a cancel option highlighted. Use the arrow key to choose the other one and hit enter. I don’t remember if I had to manually remove the generic hardware one as well or if that removal process removed it as well. I do remember it complained about dependency issue.

sudo dpkg -1 | grep linux-image

Now you will see an unsigned 5.3.0 kernel appear in the list.

sudo apt purge unsigned linux 5.3.0 package name

Now you need to reboot again.

All should be well.

What I believe caused this problem is the AGILE software development method and the fact the 12 year old boys never test with nvidia drivers or only test with the last driver, not all of them in the repository.

nvidia driver list

nvidia driver in use

As you can see there are quite a few nvidia drivers in the list. If you have an old enough card you cannot use the latest driver because nvidia dropped support for many of their older cards. Those of us running BOINC to help cure cancer, AIDS, and many other problems need the nvidia driver to expose the CUDA cores to BOINC. We can’t use the “default” driver because it keeps the CUDA cores to itself. My card has 384 CUDA cores. That’s a lot of number crunching power. As the server settings screen shows I’m running the 390 driver. It was the best one for my card. Many of you will be in the same boat because 340, though in the repo, doesn’t play well with current Ubuntu.