Professional
Contact
Patrick Fox
Torrance, CA     90503
fox@patrickfox.org

Endorsements

Let me start by saying, I am not so arrogant that I believe my endorsement of any product or technology would actually carry any weight with anyone. I fully realize I'm just some yahoo you've never heard of and I don't believe my opinion on anything could possibly mean anything to you. Now, having said that, let me tell you about some of the products and technologies I think are great.

Over the years I've had the opportunity to work with many different technologies, tools, languages, and methodologies, and to try many different practices. This page presents those that I have found to be most effective.

Although I personally endorse each of the items listed on this page, I am not receiving any favor in return for such (nor do I request or expect that). The purpose of this list is to share with others the benefit of my experience.

I realize some of the items listed below are not practical for all environments and situations.

The following items are not listed in any particular order.

  • Visual Paradigm

    Visual Paradigm is a modeling tool, primarily focused on UML. I've been using it to create UML models and diagrams for the projects I've worked on, for a number of years now. It's an exceptionally well designed and implemented tool.

    Visual Paradigm is free for non-commercial use. I use it for professional purposes, so I license it. For the amount of features it provides, the licensing cost is very reasonable. For most developers, the Modeler Edition is usually sufficient. At the time I'm writing this, the cost for a perpetual Modeler Edition license is $99US, or a monthly subscription is $6US/month. The next level up is the Standard Edition, which is $349US for a perpetual license, or $19US/month for a subscription. I use the Modeler Edition and it meets my needs.

    Visual Paradigm is written in Java, so it runs on all platforms that have support for JRE 1.8 or higher.

    A very nice feature of Visual Paradigm is it's built in support for SVN (and other version control systems). Using the Teamwork feature within Visual Paradigm, you're able to track the specific changes that have been made to the model.

    I would highly recommend Visual Paradigm as a standard tool of any development project I'd work on.

  • Doxygen

    Doxygen is a source code documentation tool that supports embedding the documentation right into the source code, in the form of marked up comments. I've been using it, extensively, since around 2007. I use it religiously for all new code that I write, as well as when I'm reviewing and getting up to speed on the pre-existing code of a project.

    Doxygen is open source and free to use.

    Doxygen is similar to the Javadoc tool, but much more powerful and flexible, and supports many tags which Javadoc does not. Doxygen also support many different programming languages, so you can use the one tool for documenting all of your projects.

    It's been my experience that most source code is grossly under-documented. This is a substantial problem because it requires developers to have to read the code in order to figure out what it's doing. But the code cannot tell you what it's supposed to be doing; or why a previous developer chose to implement something the way he did. Figuring out a pre-existing code base by reading the code often requires making excessive assumptions and is very error prone and time consuming.

    Many developers argue that documentation tends to not be updated so over time it gets out of sync with the code. My response to that is that developers that do not keep documentation (which is in the form embedded of comments) up to date when they make changes to the code are bad developers - period! Documentation is just part of the software development process - developers who don't do it are not doing their job.

    One of the features I find the most useful in Doxygen is the todo tag. It enables the developer to be able to insert "reminders" into any piece of code, and generates a "todo list" from those comments. That way, when a developer stumbles across something that should be addressed, but he doesn't have the time right now, he can use a todo tag so that it doesn't get forgotten. If you combine the todo tag with something like Hansoft, it greatly simplifies task management.

    Not only do I highly recommend Doxygen for all development projects, I consider it a mandatory tool.

    Web Site: www.doxygen.nl
  • Solaris

    Over the years I have worked with a variety of operating systems and nothing comes close to Solaris for stability, advanced features, and scalability.

    With features like native ZFS support, role based access control, predictive self healing, DTrace, the Service Management Facility, LDAP Name Services, boot environments, and support for amazing hardware such as SPARC M8-8 servers with 8 processors, each containing 32 coores (yes, that's 2 cores, running at 5.0 GHz, and with 16 TB of memory; or SPARC M6-32 servers with 32 processors, each containing 12 cores (uh-huh, that's 384 cores), running at 3. GHz, with 32 TB of memory; the Sun Ray thin clients; the SunPCi cards, how can you not be impressed?

    Not to mention, Sun's track record of innovations which were standard in Solaris and became open standards, such as NIS, NIS+, NFS, and again, ZFS.

    And, of course, Solaris is Unix compliant so it comes with all of the standard tools and interfaces that we'd expect.

    Solaris is also free for development, testing, prototyping, demonstration, and educational use. If it's used for production, business purposes it must be licensed. Interestingly, there is no mention in the license agreement or on Oracle's website, regarding licensing requirements for personal use, and when I've called Oracle Sales to inquire about obtaining such a license I was told they didn't have such a license. It seems Oracle has no position on people using Solaris for personal use. They certainly didn't seem to care that I'm running it on my personal machines.

    Some systems, like Linux, are comparable in some respects, but as an overall server system I don't think there is anything that comes close to Solaris.

    I realize Solaris is not the best platform for all projects and/or environments. We'd need to take into account the requirements, initial and ongoing budgets (for licensing and support costs). For many projects Linux or BSD are more than sufficient. But, when you're developing a system that will have huge scalability and performance requirements, Solaris should always be worth considering.

  • SPARC Servers

    The SPARC architecture has been around since the 1980s and has always been know for being stable, high performance, and incredibly scalable. I've been working with SPARC based systems since the mid 1990s.

    In terms of reliability, scalability, total cost of ownership, and overall performance, particularly under heavy loads, commodity x86 based systems just can't compete. People often look only at the initial cost of the hardware and ignore things like space and energy consumption, manpower to maintain the systems, and the cost of downtime. Over the life of a system, the cost of running 5 $12,000 Dell servers compared to running one $60,000 Sun/Oracle server will be significantly higher (it takes more space, electricity, cooling, and sysadmins to maintain 5 servers than to maintain 1).

    In terms of software development, if your product is going to have to run on multiple servers in order to support your scalability and performance requirements then the complexity of the system will be significantly higher. It will need to provide load balancing, interprocess communication between the instances running on distributed, networked nodes, synchronization of data between those nodes. It will also need to be able to detect when a node has become unavailable and, hopefully, provide some kind of failover.

    SPARC servers also include features like dynamic reconfiguration, which enables you to swap out almost any components, processors and memory, without even having to shut down the system. Sun/Oracle servers have supported this since the 1990s - Intel based systems cannot do that.

  • OpenSUSE Linux

    I've worked with a number of Linux distributions over the years. I have come to prefer OpenSUSE because it has very good support for LDAP as a network name service, exceptional system administration tools, an excellent software repository system, and great desktop application selection.

    I realize, for the most part, one's choice of Linux distribution is a matter of personal preference (or just following the herd). I've tried Red Hat, Fedora, Ubuntu, CentOS, and a few others, but ultimately I came back to OpenSUSE because I found that each of the other distros was always lacking in at least one or two areas - I have yet to find what's lacking for me in OpenSUSE.

    I should mention, I really only use Linux on the desktop and on my notebooks. For servers, I generally run Solaris. I've tried running Linux on my servers a few times but it always just seems so hacky compared to Solaris.

    Web Site: www.opensuse.org/
  • Netbeans / Solaris Studio

    For many years I, like many Unix developers, lacked a decent IDE and did most of my coding and debugging from within Emacs.

    A number of years ago, I played around with Eclipse but just found it so klunky for C++ development. Looking for something more elegant, I tried out Netbeans and have never looked back. Perhaps I had some bias because I had been using Sun Studio (which is essentially Netbeans with some Sun/Oracle enhancements) for a while at that point.

    Netbeans provides a nice, cleanly integrated environment with a fairly impressive editor. The only unfortunate part is that it's written in Java, which means it's slow and takes a huge amount of memory.

    Much of the choice between Netbeans or Eclipse is going to be a matter of personal preference. Both support projects based on makefiles, so there is no reason that each member of a development team shouldn't be able to use whichever IDE they prefer.

    I definitely recommend Netbeans for any development teams working in a Linux and/or Solaris environment. I also use Netbeans in Windows, when applicable, but most Windows development is done with MS Visual Studio.