Category Archives: Operating Systems

Enforcing better software engineering on myself, an experiment

I like to pretend I am a software engineer despite being enrolled in my university’s computer science program.

One of the many was I need to improve as a software engineering is to keep code with at the same level of abstraction. An example of a failure to maintain coherent abstraction would be to manipulate a linked list in the same function you manipulate a different list using proper accessors methods. Instead you should be using methods for both lists.

In libjtapi I am experimenting with not having header files. This will force me to treat the libjtapi call-stack like a Directed Acyclic Graph. The important part being the acyclic attribute. This means that a low level function cannot call a higher level function, this is enforced by the compiler. I thus have to think hard about which layer of abstraction I am coding in at any point in time.

Or at least that is the hypothesis, I’ll see how the code matures.

libjtapi first code

After struggling with netbeans as a build platform I’ve switched to cmake.

The motivation for netbeans was to reduce the initial barriers to development. I expected that an eventual move to a full-fledged build system would be needed but I wanted to put that off until libjtapi had a substantial codebase. The good news is that cmake was much easier to setup than I expected. Thus I have now started on libjtapi proper.

My next milestone is to get the libjtapi hello world compiling.

Then fill out the dummy functions so that the hello world does what it is supposed to do.

Then refactor and code review.

 

Printed jtapi & headers

Before I write a single line of code I want to build a thorough mental map of the jtapi standard. The first thing I did was print off the headers and study those. That only took me so far and raised some further questions. Now I’m reading the jtapi spec itself.

The jtapi spec is are the top pages and the headers are on the bottom.

It just goes to show how not often I print that I was surprised how many pages 79 pages are once printed.

 

 

Why libjtapi.org

My first instinct was to register libjtapi.com since .com is the ‘default’ tld and would be the easiest to remember. But once I was sitting at namecheap.com (which is much better than godaddy (Please do not ever use godaddy)) I noticed that libjtapi.org looks better. Then I started typing random open source projects + .org into the address bar:

  • cups.org
  • libxml.org (redirects)
  • openssl.org
  • eclipse.org
  • libav.org

My ratio of random tries to hitting the correct website was about 50-50. Which settled the internal debate, libjtapi.org it had to be.

Thoughts on libjtapi.org

My motivation for creating libjtapi.org was patio11’s “how to successfully compete with open source software”. Patio11 wrote from the perspective of proprietary software selling to consumers competing against open source clones. Despite Libjtapi being a open source library usable by programmers much of the advice still applies.

Marketing

The general advice patio11 gives is to focus on what the software’s capabilities and the surrounding environment and not the software itself can do. That is to say: Our users do not have a jtapi problem, they have a job ticket problem.

Thus we need to talk about job tickets and their place in a modern printing system. We need to write targeted pages for each format as if libjtapi was THE solution for THAT job ticket. If they search ‘pwg job ticket library’ or ‘how to parse pwg job tickets’ they should arrive at libjtapi documentation for a pwg job ticket specific hello world.

Design

This is an easy one. Much of my freelance work is setting up attractive wordpress sites. In the past year alone I’ve shipped upwards of eight wordpress sites.

The downside is that these beautiful wordpress themes are all closed source. One battle at a time.

User Experience & Speaking the users’ language

Programmers prefer code so the hello world is going to be plastered everywhere. The homepage is going to open with a small paragraph about consuming & producing jobtickets with jtapi. Right below that will be the hello world. Each job ticket format page will contain a standard specific hello world. The site’s footer will also have the hello world.

On the download page below the link to the zip will be, you guessed it, the hello world. Bonus: there will be a link to download libjtapi_helloworld.c

Once visitors see the zip they’ll see the exact command line for creating a local branch of the bzr repository. Then a series of screenshots that document using the bzr explorer gui to create the local branch.

The end game goal here is to assure programmers that libjtapi solves their problem and get them to download us. Once we have users then contributors & bug reports will follow.

Support

There is going to be a set of re-occuring problems. Some will be fixed in software, others will need documentation. When these get fixed we should make an issue of this. The site’s news section should re-assure programmers that libjtapi is active and getting better and better.

Every bug I fix will be one more reason to use libjtapi, it is one more mistake that libjtapi can save the programmer from committing.

Launch early

One of the many reasons typical open source libraries’ websites are sub-optimal is that the website comes last. By creating libjtapi.org now at a time when there is no code and we do not need users or contributors the website will be well-established and ready for when we need it.