OSS and Devops and the Impact of Tool Proliferation

I’ve ignored this blog for the whole semester. It just wasn’t happening. Both my students and I made it through Fall 2015. I’m exhausted but happy with the experience.

Tool Proliferation

I’ve had a few frustrations, though:

  • The Java dev environment has exploded with tools, frameworks, and… well, lots of stuff we never needed before
  • In the current version of Android Studio, the only way to get JUnit tests to run is through Gradle
  • Gradle needs to be updated out of the box, and school’s internet is slooooooow
  • The manuals and how-tos for Android Studio were for an older version, and the AS team moved things around (I think sensibly, but nonetheless I had to hunt around)
  • I could never get JUnit 4 to work, but JUnit 3 did fine

While I fully understand the need for libraries, the proliferation of tools has made a fairly simple environment needlessly complex. As with all programming tools, these can be described as “a nice place to live, but I wouldn’t want to visit there”. However, unlike the UNIX command-line and editors like vim and emacs, massive changes are the norm.

The Issue With Devops

The explosion of devops has actually made this process worse in some ways. Don’t get me wrong, I love devops; it’s not enjoyable work for me, so having someone else take responsibility is a wonderful idea. Wonderful, that is, if you have someone who can do the work. A big organization can have dedicated support for tools, integration, and deployment, but those people need their own tools. Because I don’t have time to dedicate to the maintenance of a production environment, I’m left wondering what needs to happen and which tools serve what goal.

Since I don’t have the luxury of someone devoted to devops, I pay the price. I spent an extra 20+ hours helping my students properly configure Android Studio to use JUnit. Their efforts were insufficient, because they didn’t know the underlying environment.

I no longer write massive amounts of code in Java, but I do teach Java. It’s difficult to “teach around” the complex set of systems that are integrated into current dev environments. Sadly, many of these tools have horrible user interfaces, even for programmers, and they are often poorly documented. What they actually contribute can be vague because they’re open-ended.

Open Source Software, Too

Part of the problem is the open-source movement. Yep, I said it, OSS has downsides. Anyone who wants to can build a Linux distro, or a window manager, or a build tool, or a version control system. The last is particularly frustrating, since the new “standard” seems to be git. What was wrong with subversion? Why are we all using git? Yeah, I know, Linus and the kernel, but git was built for the kernel and the processes built around contributing to the kernel. From an organizational standpoint, there are few projects like the kernel, which has developed its processes over the last 2o+ years.

The Problem Itself

Why is this a problem? New programmers.

I’ve been encouraged many times to integrate dev tools into my courses, especially the intro courses. To the extent possible, I do this: github generously gave me some private accounts through their educator program, and my students will be using them.

Most of the time, though, has to be dedicated to teaching fundamentals. These are students who hadn’t seen code in August, so they’re not yet productive, let alone nearing mastery. Every day I teach a dev tool is a lost day for programming. Every day I spend learning a new tool is a day I could have spent on other subjects.

When onboarding new programmers, even trained ones, there’s inevitably spinup time. However, these additional tools are extending that spinup time greatly.

In Conclusion

I’m going retro next semester. To start with, students will not use an IDE. I’ll let them have Notepad++, but they will compile and run at the command line.

There is a solution here: fasttracking. The tools don’t need to change or go away, but they should have standard configurations that are easy to set and don’t drop the user into the deep end. In addition, all of this should be configurable by text files. Why? Because they work. We use them all of the time in UNIX/Linux environments, and for good reason. If you want those files to be XML, fine, but make sure that they have a minimal configuration level. If you want examples, look at apache. No, it’s not a pretty system, but if there’s a need to move around user interface features, the text files mean that I can control what’s going on and can solve issues. Explaining how to fix an error caused by misconfigured apache config files is really pretty easy; 95% is commenting or uncommenting a small number of lines, and perhaps 5% require additional lines.

End rant.

My New Computer! (not yet…)

I gave two of my undergraduate classes similar challenges as their first homework assignment: find their ideal computer and save that as a PDF and submit.

It wouldn’t exactly be fair of me to not do my own, which I will link here instead of posting as a PDF because it’s copyrighted material, and there’s a vast difference between a submission for class and something posted publicly.

would have selected a new Mac, probably a 13″ MacBook Pro (I love Retina) or maybe an iMac with a 5K Retina display, but something new was just announced (today!) that’s just really awesome: the Acer Revo. Each major system component (e.g., CPU/RAM, storage, wireless power, video out, and even a projector) are stored in separate modules that stack and thus interconnect. I have no idea if these are going to be massively useful, but I love the idea; LaCie had a similar stackable storage (HDD) drive system 20 years ago. Ars Technica has the story:


It’s not going to be released until October and it’s not even definite it’s coming to the US. An additional note: it uses the Skylake processor, which is Intel’s latest generation of CPUs, possibly but not definitely supplanting Broadwell.


The Importance of Technical Communication (A Remembrance)

When I first started my MS in software engineering, I thought that the required technical communications course would be easy, given my extensive writing experience.

I was wrong.

My professor, Dr. Robert (Bob) Waite, was a principal software engineer at IBM in Rochester, MN. Sadly, I learned on July 23, 2015 that Dr. Waite had passed away a few days prior.  Dr. Waite was a fascinating guy; he had a PhD in English, but had gone into the tech industry. I’ve since met others like him, and written about the trend, but he was the first I had met. Given my own undergrad work, this in itself made him interesting to me, but he was also working on the IBM San Francisco project, which was developing a common business object platform (initially in C++, but later moved to Java) by (and initially for) organizations looking to move from COBOL, RPG, & AS/400s to the modern world. The project ended up failing, but not because it was bad; it was ahead of its time, and subsequent technology (in particular EJB) supplanted it. Brad Rubin, also faculty in the University of St. Thomas’s Graduate Programs in Software (GPS), was on the project, too, and authored the principle paper, linked above. Now, EJB failed to deliver on its promise, too, but that’s a topic for another time.

San Francisco was, in the early days of Java, the largest Java project in existence (although the company I worked for at the time, ServiceNet, claimed to have been the first to break 1 million lines of code in Java). Any project of this magnitude  needed extensive and stellar documentation, and this was Dr. Waite’s task. Thus his expertise was deep, which is what made GPS a great experience.

Dr. Waite actually gave me my first A- in grad school, and my only A- at the MS level, but I don’t hold it against him. Much. The work we did, all projects, included:

  • A memo (my first group writing project, and surprisingly useful)
  • Comprehensive documentation for a TinkerToy device we built as a group, including construction and usage instructions
  • A prepared presentation (I was exceptionally nervous the night before, as this was my first presentation, and I must have prepped that 5 minute speech 20 times)
  • A manual on a software project of our choosing based on the model in Weiss’s brilliant How to Write Usable User Documentation (I chose my current company’s database interface architecture)

Dr. Waite also introduced us to TJ Watson’s “gobbledygook” letter, which I love, and which is critical of the use of, e.g., “utilize”, where “use” works just as well.  When I expressed further interest, he led me to John M. Carroll‘s excellent The Nurnberg Funnel, which established through research the general ineffectiveness of most user documentation and the difficulty in making software actually user-friendly, and established a new standard of minimalist documentation. The book influenced me profoundly, and while it’s not among the most read books in the area, much of the subsequent documentation and the trends in how to write documentation moved to this minimalist model. The book also introduced me to human-computer interaction (HCI); my home lab for my PhD was the Penn State Laboratory for Computer Supported Collaboration and Learning, of which Dr. Carroll is the co-director. Dr. Carroll also served on my dissertation committee, and I learned a great deal from him.

Dr. Waite profoundly influenced my career and life, and at two levels. First, he made me aware of the complexity of communicating about technical subjects, and that this complexity made tech comm a fascinating field of study that holds a great degree of importance for software engineering specifically and IT generally. Second, he introduced me to new topics that would take me through my master’s degree, my career as a professional software developer, and beyond into my PhD and post-PhD career.

Published in the Chronicle!

I have wonderful news to my loyal but sadly nonexistent readership: I’ve been published in the Chronicle of Higher Education.

The article is about social science and humanities PhD employment in the IT industry, and is essentially a more directed version of what I wrote for Hortensii a few weeks ago, which I have previously mentioned.

The article didn’t make it to the (online) front page, but was the top story under Advice. I have no idea if it will make it into the print edition.

The What and Why of Amazon Web Service (AWS)

Someone created a really great stepwise resource on how to set up an Amazon Web Service (AWS) account with a database server and Linux server (OK, it was me), but I didn’t explain the what and why of AWS.

AWS is a cloud service, and in that way it’s a lot like others; I have used Dreamhost in the past, and I’m using Arvixe (this link will get you a discount) now for this site.

AWS give you several useful things:

  1. A free account for a year
  2. Free accounts for both faculty and students if using as part of a course (I have yet to do this, but have read about it)
  3. Access to low-level services (Virtual Private Servers configured how you want them)
  4. Access to high-level services (for example, their Relational Database Service (RDS) gives you a fully configured relational database; you just select storage and backup options, then connect, create users/databases/tables, and you’re up and running)

There’s more, butI haven’t explored it yet. That’s the basics of the what.

The why is more complex. The simple fact is that for 9 of 10 users, a hosting company can provide a better cloud service than something you roll yourself.

Running out of battery. More later…

Beware of Help

I’m a clever guy. Or so I like to tell myself. I know (from experience) that Amazon does not make their phone numbers for support & customer service readily available; you have to go through layer upon layer of “help” documentation, which I’m sure is useful to many of their customers, but my problem cannot be addressed except by a human being.  And perhaps not even then.

So I googled “kindle support” and grabbed the first number, which is:

Help & Support For Kindle – eReaderAid.com‎
Call Now(888) (381) (7309)TollFree. Experts. Toll Free. Call Us Now!

Now here’s the point of my idiocy; this is not Amazon. This is a third party, and they managed to come up in this search by buying Google Adwords. But I was not paying enough attention, and I called them. Well, to begin with, they were rude, which should have been a clear indication that they weren’t Amazon; I have never had Amazon be rude. Second, they didn’t understand my issue, telling me it was a network configuration issue on my Kindle, which it’s not; I’ve downloaded countless books. Third, they tried to charge me $199.95 to “fix” the “problem” that I didn’t have. I asked to speak to a supervisor, and long story short, they hung up on me.

I guess I knew that there were predatory companies out there charging money to support devices that they don’t really understand. What I didn’t know was that they make effort to appear to be the legitimate service/support line. Now, I’m not quite dumb enough to pay the money, but I’m sure others aren’t. I don’t use the word “predatory” lightly. Caveat emptor!

PS. I’m going to email Google Adwords and let them know they’re being used by predatory companies. I doubt anything will come of it, but at least I’ll have tried.

Setting Up an Amazon AWS Account

Amazon AWS (Amazon Web Service) is an amazingly cool tool for anyone in technology. They offer servers (Linux and Windows), databases (relational and NoSQL), online storage (SSD!), and, well, a mess of other things. And they’re free. That’s right, free (for 12 months, using the lowest level of services). Beyond the free stuff everyone gets, they offer grants to academics and students.

However, this stuff isn’t trivial to manage. You need a certain amount of expertise, and even a student in CS or IS doesn’t necessarily have all of the background she needs to set up and configure everything.

I’m planning on using AWS in some of my courses, so I put together a document describing how to set everything up. Right now, the document will take you from just past creating your account (which you can do on your own, and is pretty easy) to setting up a server instance (Linux) and a database instance (MySQL). The document is in a draft stage, is not pretty, but is linked from this post. The document is released under the Creative Commons Attribution-ShareAlike 4.0 International License, and is available here in two formats: PDF and Word .docx. The PDF is probably easier for most purposes, but the Word file is available for a few reasons: first, if you want to improve it under the terms of the CC license I want to enable that, and second, PDFs are notoriously hard for accessibility software like screen readers to use.

A few caveats:

  • You don’t need to know Linux/UNIX at all to follow these instructions, but you’ll be somewhat stuck until you learn more
  • The same is true for relational databases/MySQL
  • Did I mention the document is a draft, and an ugly one at that?
  • The security setup is perfectly fine for a testbed. Do not use these security settings for anything important
  • I have yet to add backup configuration
  • The SQL files to build the database(s) and load them with data are not ready yet. When they are, they will be posted here. They will be released under some open source license, and will likely be available from Github, too
  • Seriously, this security setup is not good for anything important, sensitive, mission-critical, real-world, etc.

If you have any problems, please document them as clearly and completely as you can and inform me at gross.joshua.b@gmail.com. Feel free to ask for help, too; if I can give it, I will. If you find this useful, let me know so that my ego can get a nice little boost. If you modify it, improve it, redistribute it, etc., please let me know.

Instructions for Setting Up AWS (PDF)

Instructions for Setting Up AWS (Microsoft Word)

IT as an Employment Home for Wayward PhDs

Before I returned to academia for a PhD and a career, I was an information technologist/software engineer for eight years. I began this work with a BA in English and History. I think IT is a wonderful career for PhDs in any discipline looking for alt-ac or non-ac work, and I’ve written an essay in how to market yourself and find a job on the topic for Hortensii, a project to help PhDs find employment.

I care a great deal about PhDs without permanent, meaningful employment. The employment situation for PhDs in most disciplines is terrible; it’s a little better for those of us in computer science and related disciplines because there is so much appropriate industry work available for us.  I wanted an academic career and consider myself to be exceptionally lucky to have found tenure-track employment. Even so, it took me six years.

PhDs are forced to compete for a very limited number of academic positions, most of which are not tenure track, not full-time (and don’t include benefits), and not permanent. Add onto that the fact that many PhDs, even the ones who received institutional financial support for their advanced degree work, have high debt in the form of loans for college and graduate degree work.

Beyond just the bad employment situation, though, is the shameful fact that we, as a nation (although this applies to Canada and Europe, as well) have trouble finding employment for such a large group of exceptionally bright and hard-working people. I don’t think PhDs are owed academic jobs; the world doesn’t work that way. However, I can’t see a possible justification for our unwillingness, as a society, to find appropriate employment for people who have devoted so much of themselves and their lives to learning and the betterment of society. The issue isn’t that we owe them anything; the issue is that we’re fools for not using this workforce well.

Finally, a Website

For someone who has been employed in technology since 1994, it took me a while to finally set up a website. My name is Joshua B. Gross, and I’m a Professor of Computer Science at Blackburn College. I’m not the Joshua B. Gross who is a professor of biology at the University of Cincinnati.

My interests are in software development/software engineering, artificial intelligence (AI)/machine learning (ML), human-computer interaction (HCI), computer games, and cognitive psychology/cognitive science. I have worked as a psychologist (not the kind you talk to about your problems, although you certainly can, and many people have), a software engineer, and a faculty member in computer science and game design departments. I have a PhD from Penn State in Information Sciences and Technology (an interdisciplinary program where I studied AI, HCI, and computational cognitive psychology), an MS from the University of St. Thomas (the one in St. Paul, MN, not the Virgin Islands) in Software Engineering, and a BA from the University of Wisconsin-Madison in English and History. I have lived in 11 different states and more cities/localities than that. I have never lived outside of the US, but I hope to have the chance someday.

I can be contacted by email at  gross dot joshua dot b at gmail.