Valid XHTML 1.0 Transitional

Open Source software, the common misconception is this is just free stuff. And in a way it is. I have used some Open Source tools over the years. They are 'free'. You download them with no restrictions. You may freely use them as you wish. And you get the source files for them. That is the real part of 'free'. You have the freedom to do what you want with this source. But whatever you create must remain equally 'free'. In the same manner you obtained the software you are obliged to pass it along (if you wish to share). You do not have to pass it along. You can just use the software and keep your version to yourself.

So I am here doing the passing it along.

In setting up legacy support hardware, a system able to multiboot, I needed a boot loader. I tried XOSL. It has a high quality GUI interface. I tried the 'free' to use (not Open Source, just a commercial 'free' version) OSL2000. Neither worked for the specific system I was configuring.

I said legacy support. It involved some circa 2002 or so hardware, MB, Athlon single core CPU, ATA drives (one an old small capacity one). These are just tools needed in the embedded world support activities.

I found an Open Source (under GNU GENERAL PUBLIC LICENSE from Free Software Foundation, Inc.) bootloader. This one will boot MS OSes even on hd1, hd2, etc. ... Just what I needed. Then it had one undesireable feature (undesireable for me). It marked all primary partitions before the one being booted in the MBR table as hidden.

This meant when booting an OS on second primary partition the first primary partition became inaccessable. DOS or Win98 just could not see that drive (partition). Windows' XP built in "Disk Management" would 'see' this partition but reported it as 'unhealthy', not accessable.

My fix, I do not want to hide any partitions. So I fixed this. And the result is a 'next' version with hide or do not hide fully selectable. The original author, Sergio Costas Rodríguez,. states in the version 4.10 documentation that MS OSes seem to conflict. I tested for this in my legacy support system which has WIN NT4.0, DOS6.22, WIN 98, in this order on the first three primary partitions of hd0. I found no conflicts.

For the history of GAG its original author has a site Rastersoft. The most current version he has is on sourceforge.

My now latest version 4.11 I offer here as a .zip file. In this version I have also incorporated a Finnish language port from translation files supplied by Juha Niskanen in the "Patches" tickets on the sourceforge site. Unfortunately he did not supply a font set to support the vowels with diacritical marks as used in Finnish language, so I had to change these to their simple Latin charset letters. And one string was too long. For that I simply made 3 or so double vowels into single. Seems Finnish has many double letters. This is deliberate misspelling, like an abbreviation, but hopefully comprehensible. I appologize on that detail.

As long as we are dealing with hiding partitions I observed the previous GAG versions would leave any partitions as hidden on a drive last booted to when now booting to a different drive. My legacy has 3 ATA hard drives (MB does not support SATA). That is if I boot to a primary on hd0 hiding other primaries, then reboot to hd2 I observed hd0 still had hidden partitions. So I have also added an "unhide all primary partitions on drives other than the one being booted to" feature. For those who need to hide some primary partitions on a boot drive.

Update 25 July 2013:
The original author saw my postings on the sourceforge net directing anyone to this site for GAG 4.11, or received an automatic e-mail about my postings. He e-mailed me a quick explanation:
"Thanks for your collaboration. Unfortunately, GAG is currently unmaintained, mainly because it's incompatible with the new UEFI systems."
So there you have it. I presently do not have a UEFI system so cannot rewrite GAG as a UEFI bootloader. Still stuck at original BIOS with LBA extensions. So for now GAG is a legacy bootloader. It should be usable even with Windows 8 when installed on a legacy Mother Board.

So what is UEFI? Basically a standard for a better BIOS, uniform across all platforms, having a standard interface, a mini OS for initializing all peripherals before booting an OS.

Think about Open Source. It includes MySQL, Apache Server, ... How many time does a website server problem have a tag line about Apache Server? Open Source is very big and important. We just don't see it. Then there is Android (Open Source), and the best known of all, Linux, from a student annoyed at having to pay a high price for a commercial software product ... need I say more.

Update 26 Nov 2016:

Another Open Source project I found is a USB interface dongle for connecting to a CAN bus network, the most familiar of which is the socket in all cars for over 30 years, where anyone can access control module data. This hardware is offered by Ethan Zonca, a hardware clone of Eric Evenchick’s CANtact project, an open-hardware USB to CAN adapter compatible with socketcan.

I offer a capability enhancement of the firmware.

When I found CANable I had a use in a test and development environment. Other such devices I know of cost ten times the price of CANable. I was intrigued. I bought one and eveluated it. I found CANable works very well connected to a known good CAN bus. What I observed is if the CAN bus is broken, down, etc. CANable, in my test programs written for Python 2.7, would start returning ‘serial.SerialTimeoutException’. And in a test and development use often the CAN bus is broken or down. The only way I found to recover was to disconnect CANable from USB and reconnect. This simply restarted CANable. But, ... now I had to stop and restart my program as well.

So my version of the firmware enables an autonmatic hardware restart when BusOff (way too many transmit errors). Then I added a command to read the CAN port status of BusOff, BusHeavy, BusErrWarn. This may be used to proactively restart CANable by software command when transmission problems arise but before CANable shuts down. I added full verification that the command sent is correct. An incorrect command is rejected.

I am very particular about documentation, so I added a plain text file specifying the complete command set (API), CommandSyntax. I have sent this update back to Ethan Zonca. Hopefully he will push it into his repository.

Update 09 Jan 2017:

A further refinement, to better see the bus activity I have configured the blue LED to blink only when CAN tranmission is successful. Also I have added a check that CANable is in fact enabled before transmitting any new CAN message. If the CAN port is down do not attempt to send, do not blink the blue bus activity indicator LED. These two refinements bring the performance up to be equivalent to the other interfaces, those costing 10 times as much.

Session Saver
Update 07 Sep 2021:

This is "just-another" Session Saver for the GNOME gedit editor. I found the earlier plugin for gedit 2.X under ubuntu 12.04. It was a real time saver for restoring a suite of files from a previous editing session, thus named "Session Saver". However it failed on gedit 3.18.3 under Ubuntu 16.04. The GNOME developers had changed the gedit API (and GObject and Gtk) such that the old Session Saver had numereous bad interface calls.

I had no success digging through the old Session Saver to edit it. So I started from a clean basic plugin to insert the new menus. I offer my version on GitHub. I built this version running gedit 3.18.3 under Ubuntu 16.04, so hopefully it is compatable with any gedit 3.x.

For those wishing to understand the parts of a gedit plugin read on. The gedit API has two classs needed here, Gedit.AppActivatable that constructs the menu entries in its do_activate() method, and Gedit.WindowActivatable that connects the additional menu items with their callbacks in its do_activate() method, reference this discussion. Logically the plugin specific callback function for each menu item is also needed in the WindowActivatable class.

Now the appropriate GUI popups, one to display a selectable list of presently saved sessions and another to allow a name to be typed in for a new session, are needed. A Gtk.Window having a selectable, "clickable ", Gtk.ListBox widget acts to display a list of the presently saved sessions. Another Gtk.Window having an Gkt.Entry widget and two Gtk.Button widgets, named 'Cancel' and 'OK', allows a name to be typed in. Each of these popups are in seperate (plugin specific) classes. As windows themselves each of these classes must logically also have a callback for the action, "click", taken. The Python language has good online documentation.

Code to manipulate the xml file on disk as read in by the Python library BeautifulSoup completes the pieces needed. This code simply loops through the object BeautifulSoup returns to get the various session names, or loops through a single session to get the list of files for that session. Other code loops through the Gtk.Window to ".get_documents()" into a Python list type.

Each of these elements are reasonabally straight forward. But the blocks of code must be correctly placed. After a few attempts revisiting the project over time I observed the following Gtk architectural properties.

This page is a work in progress. So come back for more in the future.