Friday, March 26, 2010

Calling OpenSuse 10.3 Gurus

Yup, I now it's old. We have NFS server running on OpenSuse 10.3 and everything is working great. We now have a circumstance where we need detailed logging to this machine for a short period of time and the command line arguments for rpc.mountd don't seem to work as I expect them.

By appending --debug all (and optionally --foreground to run on the foreground) I was expecting to see lots of spewage and be able to monitor all NFS activity including reads, writes and deletes in realtime. But the only thing that is bring reported is when the initial mount comes from the client. All interaction with files creates no logging at all.

I thought maybe this was a syslog problem, and thus ran it in the foreground and expected to see this information displayed; yet I'm getting no logging at all.

Drop me a line in the comments area if I'm having a conceptual failure in this area. :) I also have been looking for a description of the debug levels (all, auth, call, general and parse)...yet no man pages seem to tell you exactly what they mean. I guess this might fall under 'read the source code'?

Happy weekend all.

Wednesday, March 17, 2010

Why We Develop With Panther

People are pretty passionate about their development tools, we found something that works for us based on our needs. Maybe if you are in the Government or Business segments, this information will be useful.

The development tools on Linux most commonly in use are great for writing 'desktop applications'. Want an email client? Use C. Want a note taking package? Use Mono. But those tools are not a good fit for our needs. We want to quickly connect to a database, drop and drag fields out, give the users a simple grid and entry system; and then give them quick reports. We always say that the type of software that we write boils down to "enter, list, sort and print". When we get a request, they usually want it finished quickly, and we don't want our staff debugging garbage collection, threads, compilation and fighting every widget interaction. Our custom software isn't as complicated as Firefox or Evolution, and does not need low level languages. We also want it to run on Linux, and carry no runtime licenses.

The other big issue for us is portability and server upgrades. When an operating system or hardware becomes obsolete, you don't want to spend a time messing with stable software trying to get it to work correctly on a new box. It's much easier to just tar it all up and move it over and it just *works*. Sometimes too you move to new operating systems. All of our software started on SCO Unix and then moved to Linux, and we didn't want to have to recompile and debug working applications during that transition. Lastly, when database upgrades and changes come we didn't want to have to touch the software yet again and fight library interactions.

So how did we obtain these goals? We are using a software package called Panther from Prolifics. The way that it works in a nutshell is that when you develop, you are writing GUI layout instructions and logic code into the 'client.lib'. This file itself does not execute and is highly portable. You then get a 'prorun' binary from Prolifics for whatever platform you wish to deploy on, and it converts your UI instructions into native widgets of the current operating system. It's super fast, with a small memory footprint and serves us well.

This image shows how software is deployed with Panther. You develop your screens on any platform, and a runtime engine on other operating systems instantly convert your screens to that platform.

I built a very simple (blingless!) screen to demonstrate. Here is a shot of the development environment running on Linux/X.

Once your screen is finished all of your instructions are stored in client.lib. You can then pass it to the prorun binary for various platforms unmodified. I do want to be clear that you do of course have to make considerations for the real estate of the various platforms. But Panther does a good job of adding scroll bars to screens when they don't fit. Making this work becomes kind of a art form, and is elegant.

Here is the screen running in Linux/X

If you unset DISPLAY, it instantly runs in character mode. It replicates the widgets as closely as possible, and on a workstation with a mouse, you are able to click into fields and activate the pulldown menus.

They have a prorun (jserver) process that can go into the cgi-bin directory of your web server and once called converts the client.lib into HTML. Your screens are instantly on the web, unmodified. In theory you could NFS mount the client.lib file and run the same code on MS WIndows, Linux/X, Linux/Character and on the web. Any changes you made instantly were deployed to all users.

Here is the screen running in the webserver.

Here is the same screen running on Microsoft Windows.

So for the last few months I have been working with our Integration staff in making Panther fit better into the GNOME desktop. Artwork is being upgraded and all hard coded colors are being removed. GNOME themes automatically set old school X resources as closely as possible to the right colors, which Panther picks up nicely. These steps along with anti-aliased fonts in newer versions of Motif have allowed us to deliver better looking software. The shots below demonstrate a deployed screen, with colors picked up from GNOME theme.

Linux is a wonderful runtime environment for running custom in-house software, and maybe this post has given you some ideas for your own organization.

Update: Receiving and uploaded Microsoft Windows screenshot.

Thursday, March 04, 2010

18 Second Boot

I have been working in between things on the hp 4410t thin client laptop based on ideas from some of users and IT staff. One thing that was important to me was making it work better than our fat PCs that are used to remotely log into the City network. One part of that goal is making so that it's ready to work as quickly as possible after it's powered on. I stripped out all services not required and have gotten the machine fully booted and networked in 18 seconds. I might be able to shave off a few seconds yet, but I think it's getting pretty close to the fastest possible experience with this hardware. Not bad.

When I'm finished with everything, I'll post a flowchart showing the design flow of network connections and features. I'm working to make this as simple as possible and want to reach a goal of users just having to know to push a single button and everything is networked and ready for their login.

Items left for me tinker with: Backlight issues when moving back and forth to battery, More intelligent WiFi logic to understand whether it's in our buildings to reduce boot times, resolve issue of very buggy x-server-xorg-video-intel (2.9.1-2) on Debian squeeze/sid, remove unneeded packages to try and reclaim a bit more flash drive space and resolve some pulseaudio problems at boot time.

Monday, March 01, 2010

Miserable Admin Things

Some things make the life of an Admin absolutely miserable when you are trying to keep hundreds of users working with adequate performance. My updated /etc/hosts entry sure makes things work better. :)