Entries in software (9)

Software as a Service (SaaS)

Designing systems that can scale to very large sizes is a challenge. The requirements are demanding or become so very quickly. Commercial success of your product is also a two-edged sword. 

  • Will your architecture handle the initial demand?
  • How quickly can you expand resources to meet new demand?
  • Are you paying way too much money to an OS or database vendor?
  • How quickly will you need to duplicate your NOC/SOC?

I put together a slide deck discussing some of these issues for a small-group presentation a few weeks ago. I have posted the slides here because I wanted to share those thoughts.



IP Packet Sniffer -- FROZEN

Years ago I put a non-trivial amount of energy into the IP Packet Sniffer tool. There was a "what is happening on my network" thing going on inside my head, driving research into what the Windows OS APIs could give me, and I derived a great deal of fun from the work.

Times change, and although the tool was a great learning experience -- what better way to learn the guts of network protocols than dissecting the bits pulled from the wire -- this tool is way behind serious tools, like Wireshark.

Wireshark is what you should use if you are serious about investigating your network traffic (unless you need something harder core). Wireshark leverages WinPCAP and is therefore far less limited than a raw sockets based method (thanks, Microsoft).

The upshot is that I am freezing work on this tool. I've end-of-lifed a few other tools recently, and removed the download links to those. However, this one still has some life left, if only because it is significantly simpler to start up than Wireshark, so I'll keep making the bits available.



MyNetwork 2.0 - Facelift By MFC 9

I started the MyNetwork program years ago while exploring various Windows APIs providing network-related information. Basically, it was a research project. The tool interface was my quick-and-dirty approach to displaying those data.

Well, MyNetwork was complaining loudly, telling me it felt neglected. In order to stop its whining I've given it a facelift to a more modern UI via MFC version 9.0 (which comes with Visual Studio 2008).

What a difference three MFC versions can make! Now it looks like your Outlook client. :) Everything is in user-movable, dockable panes. Windows with dynamic data are individually refreshable with the obvious button. You can also configure autorefresh for all dynamic-data windows using a ribbon bar toggle.

You can get the new version here. Below are some screenshots. :)




New Flocker 2.2.1

This is just a minor update. I had to get the already-completed work out of my hair (figuratively speaking) before starting the facelifting process for the MFC-based tools. :)

Get the latest version here.

Updates include 

  • Allowed manipulation of the world box to give a better view of teleportation vs. reflection.
  • Saved field of view and world box gap to the bird configuration snapshot.
  • Added a bit more geometry to bird tails.
  • Fixed a visibility issue for "deader" birds (a face culling problem).




Tool User Interfaces - Got Facelift?

I've been comparing the old dialog-based user interfaces that I created for the tools and this site to the new capabilities of MFC in visual studio 2008 (VC9) and the newer outlook-style widgets. I think it is time to pamper their (sometimes 8+ year old) user interfaces with a facelift . :)

Stay tuned. :)


Flocker 2.2

Yes, updates for my programming playground are arriving at a rapid pace. I've been having way too much fun adding 3D fly-through via mouse control. :)

Get the latest version here.

Updates and additions in this version include:
  • Added a "Reset Light Defaults" menu item that resets all the lights to an off position with spotlights aimed at the center of the volume.
  • Added viewpoint fly-through with simple avatar and mouse controls.
  • Added a field-of-view control to control display.
  • Refactored some internal code.
  • Removed the testing window pane.



Flocker - New Version

I have been having a lot of fun with LUA lately, expanding the Flocker program to create a better 3D display experience. :)

Get the latest version here.

Updates and additions in this version include:

  • Added configurability of 8 lights covering the gamut of OpenGL controls, including diffuse, ambient, and specular colors, and omnidirectional light position (directional-at-infinity lights are not yet enabled). You also can choose to make any omnidirectional light a spot source and set its direction, beam width, etc.
  • Expanded the bird avatar to use 3D geometry and surface material properties.
  • Added preconfigured, programmatic generation of bird placement (accessed through the menu).
  • Added independent load, save, and delete of lighting configurations.
  • Updated tooltips and added some help buttons that open Wikipedia pages describing the topic.
  • Extended the bird-space partitioning to 3D (a performance enhancement for flocking calculations).
  • Updated LuaGL to version 1.4 so I could use some additional GLUT functions.
  • Factored the OpenGL related code out into a separate module.

Note: the OpenGL Testing tab is just there for fun. You can watch it but not interact with it. :)


Open Sourcing Some Example Code

In order to make some examples of thread and TCP/IP server management clearer I decided to clean up the full, standalone project and post it here for your download. The project files build with Visual Studio 2008 (VC9) for Release and Debug mode on both x86 and x64 systems. Note that this project is simply a demonstration of thread and TCP/IP server management on an MS Windows system. A full-fledged application would have much more in the way of error checking, unit tests, and other infrastructure. :)

These are all plain source code files, not executables, and I'm making them available under the Mozilla trifecta license.



Software Architecture and Design

I am responsible for the architecture of an "Enterprise Level Product". What does that really mean? The software is big: well over a million lines of code (probably closer to 1.5M) incorporating something like 20 different software technologies. When we need to add a new feature there is rarely a perfect solution. Why? Because the solution needs to fit in with the rest of the product. If we simply chose the best options for that feature in isolation from the rest of the product we would have Frankenstein's Monster. Entropy would take hold, the cost of change would skyrocket, and progress would grind to a halt.

My thoughts on architecture are added to my previous gentle rant about the specific topic of SIMPLICITY and architecture, of course.