A small photograph of me, Tom W. Hartung.


Hi! My name is Tom Hartung, and here is an overview of the important projects I keep on github, with links to specific repositories as appropriate.

Note that I work every day, and can prove it! Not only that, this is all work that I have done on my own time.

And to make sure the whole story is perfectly clear, and ensure expectations are properly aligned with reality, please note all projects are on-going. This is because I feel learning from these projects is much more important than completing them.



I have a static IP address and run several sites out of my home, keeping the code on github.

The joomoowebsites.com github repository contains the source for my JooMooWebSites.com site1. It is a standard Joomla install plus the Joomla AWD and RESS customizations I have written.
The tomwhartung.com github repository contains the source for my TomWHartung.com site1. It is a standard WordPress install plus the WordPress AWD and RESS customizations I have written.
The tomhartung.com-d8. github repository contains the source for my TomHartung.com site1. It is a standard Drupal 8 install plus the Drupal AWD and RESS customizations I have written. I am new to Drupal, and at this time documentation for Drupal 8 is somewhat limited, so if you visit this site, note that it is a little more in progress than the others.
The seeourminds.com github repository contains the source for my seeourminds.com and groja.com sites. It is, for the most part, a standard Joomla 1.7 install. These sites are going offline — or at best will be far less functional — when I switch to the new server, which is running Ubuntu 16.04 and PHP 72.
This is a static site, one of the first ones I built, and it has no repo on github. It is not mobile-friendly, but it is not obsolete either. I like to think of it as being a cave wall painting and I have no plans to update it at any time in the near future. Of course, if what I am reading about https in articles such as this one on arstechnica.com comes to pass this one may wind up with some sort of "red flag." Interesting times are ahead, indeed!

The static ip is included with my land line, so although it is "free," bandwidth is limited.

My Sites Run My Dog Food Only

Note that these sites run only the base distribution of the CMS and the extensions that I write. That is, they do not run any third-party extensions.

When it comes to my personal web sites, I eat only my own dog food.


LAMP CMS Customizations

I have written customizations — extensions, modules, plugins, templates, and themes — for each of the three popular LAMP CMSes, Joomla, WordPress and Drupal, and keep the code on github.

I have been doing this off-and-on for many years, since the PHP Nuke days, in fact.3. This type of work is both challenging and rewarding, and I would like to find more of it.

Adaptive Web Design (AWD) and RESS Using Device Detection
Most recently I have been using Device Detection, provided by the idMyGadget adapter API, to implement Adaptive Web Design (AWD), or more specifically, Responsive Design With Server Side Components (RESS). This work is fairly extensive and appears on a separate page on this site.
Joomla 1.x Extensions
During the last recession (2008-??) I ported the code for groja.com and seeourminds.com from PHP Nuke to Joomla 1.5. Although this work is fairly extensive, at this time it is nonetheless obsolete. If you are interested, the details are on a separate page on this site.

Please be sure to check out the two separate pages listed above, especially the one on Adaptive Design and RESS Using Device Detection. They summarize and explain quite a bit of the work I've been doing lately — and all of it on my own dime.

It would be great to get a chance to do more work like this, especially if I could actually get paid for it!


Adaptive Resume

My adaptive, interactive, and comprehensive online resume uses device detection and jQuery Mobile to present visitors with a device-dependent experience, and the source for it is on github.

The resume uses an adapter API I wrote named idMyGadget to detect the visitor's device and serve appropriate content.
Adaptive, interactive, and comprehensive resume
The resume repository on github contains the source for my adaptive, interactive, and comprehensive online resume.
How It Adapts to Your Device

When you visit it on a desktop or tablet, the resume appears as a single page — using slightly different styles on the tablet.

When you visit it on a phone, the server:

Regardless of the device, the resume uses JavaScript to make the experience more interactive. And although it lists all of my jobs — and is hence comprehensive — it will show all of them only if the visitor really wants to drill back into my past.

Try It Yourself!

These repos include documentation that should be enough to enable you to create your own adaptive, interactive, and comprehensive online resume.


Documentation and Scripts

I write scripts and document processes that help me keep my sites functioning, keeping many — but not all — of these on github.

I am language-agnostic, and happy to work with older languages such as English, Python. Bash, and even Perl. As you might guess, I use English to define processes and when giving presentations, and I use Python, Bash, and Perl to write the scripts.

It's all good, man!

All documentation and utility scripts are in the jmws_accoutrements repo.
  • Scripts are in the bin directory
  • Documentation is in the doc directory
  • The joomoowebsites directory contains some plans I was working on for awhile
  • Images, slides, and other notes from presentations I have given are in the presentations directory

I still keep most of my Bash and Perl utility scripts locally (as opposed to on github), and move them to github as I convert them to Python. Therefore this repo does not yet include many, if any at all, of the Bash and Perl utility scripts I use on a daily basis (e.g., to quickly ssh between hosts on my LAN).

Also, there are a very few utility scripts in the edison_usr_local_bin repo. I had to separate them out because they help me quickly find and kill processes and so are extremely important when experimenting. And while the eventual goal is to convert all of them to python3, I could not get python3 to run on the Edison.4

Like all the other projects on this page, this is fun and educational work, but not important enough for me to focus on exclusively at this time, and so still very much in progress.


The Intel Edison

At a recent Intel IoT Roadshow Hack-a-thon they gave everyone who attended it:

The Edison is a micro-computer — about the size of a largish postage stamp. Having virtually no recent experience with this sort of computing, for me that weekend was a huge and wonderful learning experience.

After the event I spent some time writing basic programs to run on it, keeping the code on github. Although there is support for other languages, including Java, I chose the following:

The edison_node repo contains JavaScript programs that perform basic digital and analog input and output, along with a few more fun things that work best using this method.
The edison_python repo contains JavaScript programs that perform basic digital and analog input and output, along with a few more fun things that work best using this method.
Arduino Sketches (C/C++)
The edison_arduino repo contains C/C++ sketches (programs) that perform basic digital and analog input and output, along with a few more fun things that work best using this method.

Most of these programs work similarly in all three languages, but there are significant differences in capabilities and the ability to write elegant, understandable code once one gets past the basics. I have additional repos — edison_config_tools and edison_usr_local_bin — that contain supporting code.

I bought several books, most of which are published by O'Reilly, to help guide me through all this. This entire project has been a huge amount of fun!


Lifelong Learner

I am a lifelong learner and have recently started keeping some of what I am learing on github.

JavaScript and CSS
I have been learning JavaScript and CSS in the background (so to speak) for many years. Both seem to be constantly undergoing significant changes, and it is important to spend some time on occasion keeping up with these, because JavaScript is ubiquitous, and you never know.... The always_learning_javascript repo has some work I have done recently at Nodeschool.io and Codecademy.com The ubuntu-hello_world and todos-bogotobogo_com-source repos contain some work I started for a client who has since gone dark on me. 9
Progressive Web Apps
This new technology, which allows visitors to save a site to their phone's home screen, sounds quite exciting! This looks like a great idea for my groja.com/seeourminds.com project. However, at this time (2015-08-02) it works properly only on Android Phones, and my mobile phone is an Apple. Bummer, right? Well that is exactly why they call it "Progressive..." — but that's another story. There are some online tutorials and classes at developers.google.com and Udacity Keep an eye on the progress I make on this in pwa-tutorials.
React Native
I have been hearing a lot of buzz about this new technology and definitely want to check it out. I suppose that this tutorial will be an excellent place to start, once I find the bandwidth.

Along with other benefits, keeping the code I write for these classes on github allows me to start coding for a class on one pc, commit and push what I've done, and resume the class or tutorial on another pc. Sweet!


Licensing and Production Readiness

Just because some code is publicly available on github, doesn't mean you can safely download and use it for free. It's true.


My original intent was to use the directions at gnu.org to open-source all of this work, making it available for reuse under the GNU Public License (GPL). I have done this with some of my code, and in particular many of the individual files have been open-sourced to varying degrees.

I believe I am like most people in that I really don't mind people using and learning from my code. However there is some concern that a black hat of some sort might somehow make a bunch of money off of my hard work.

Production Readiness

Another concern is readiness for production. For one thing, different environments require different levels of performance and security, and for another, this term is virtually impossible to define, because new methods of attack are constantly evolving.

So you should not assume that any code you find in any of these repos — whether licensed or unlicensed — is production-ready. This code is strictly available as-isbut: I would be more than happy to work with you to make any of the code you find in any of these repos production-ready upon request.

Using My Code

I would definitely be flattered if you wanted to use some of the code I have worked so hard on, but it's impossible for me to feel flattered if I don't know about it!

So if you are interested in using some of my code, please:

Thanks for your cooperation!