Log in

Dia for Class Diagrams

In my class at NCSU, a UML class diagram is a required part of the design document for each project. I attempted to use Violet UML for this effort as introduced by our instructor, but I had a difficult time creating complex diagrams with its limited functions. So, having extensive experience with Dia for diagrams and figures for documentation, I decided to check out its UML editing features.

I was delighted at how much easier it was to construct the class diagram, especially if I forget a symbol I don't use much. The trick is lining up the terminology in the UML with the terminology in Java so I can use all the features effectively.

For more information about Dia and to download it search for "dia for _____" and fill in the blank with "mac" or "windows" or "linux" (I've used all three at different times).

Setting up my Android SDK and Emulator

Sometimes it's hard to find a "quick start" guide to set up a development environment. Here's a quick checklist for my own (and anyone else) to use as a future reference when setting up an Eclipse-driven Android development environment:

(1) Install Eclipse from http://www.eclipse.org/downloads/
I was already using Eclipse IDE for Java Developers, the Galileo release for Mac, build 20090619-0625.

(2) Download the Android SDK from http://developer.android.com/intl/de/sdk/index.html
I'm using the one for Mac (android-sdk_r04-mac_86.zip).

(3) Unpack the SDK and put it in a local directory you're comfortable referencing it from.
For the Mac install, I just dropped the android-sdk-mac_86 directory into /Applications/.

(4) Install the Android Developer Tools for Eclipse. Basically, open Eclipse, go to Help --> Install New Software, and add the following as an available site: https://dl-ssl.google.com/android/eclipse

(5) Still in Eclipse, go to Preferences from the menus, select Android, and set the SDK location to point to the android-sdk-<something> directory you unpacked to your preferred location.

(6) Also working in Eclipse, install one or more of the SDK platform images from Windows --> Android SDK and AVD Manager using the directions here: http://developer.android.com/intl/de/sdk/adding-components.html 
I installed SDK Platform Android 1.6, API 4, revision 2, which is what I'm running on my G1 and what I'm programming for in my class at NCSU. I also installed the corresponding Google APIs; not yet sure what I might do with those.

(7) To test you have a working test environment, create an AVD, and then launch an emulator. The emulator plus AVD creates a virtual machine running the Android OS. Here's more detail for each step:

(7.1) Create the AVD using either using the same Android SDK and AVD Manager in Eclipse, or using instructions here: http://developer.android.com/intl/de/guide/developing/tools/avd.html
In the Android SDK and AVD Manager, I went to Virtual Devices, clicked Add, gave my new configuration a name, selected the Android 1.6 SDK from the targets drop-down list, and saved the configuration. I didn't worry about tweaking any other configuration for the first launch.

(7.2) Launch the emulator with the new AVD either using the same Android ADK and AVD Manager in Eclipse, or using instructions here: http://developer.android.com/intl/de/guide/developing/tools/emulator.html
In the Android ADK and AVD Manager, while I was still in Virtual Devices, I selected my new configuration and clicked Start. The emulator launched in a separate window...

... and it was really kinda cool.

From there, I used the Subversive plugin in Eclipse to connect to the project code I'm working on, check it out, and start working on it. My next step is to figure out just how to pull together my Java classes and manifest into an Android package, add it as part of the AVD, and test it in the emulator. 


Feb. 8th, 2010

Originally submitted at Timbuk2

A mini-messenger for urban adventure


Same Top Quality, But Different Features

By Stef from Raleigh, NC on 2/8/2010


5out of 5

Pros: Attractive, Great Color, Good Strap Length, High Quality, Good Organization, Enough Compartments, Easy Access

Best Uses: Shopping, Traveling, Everyday, Carrying a small netbook

Describe Yourself: Career, Comfort-Oriented, Practical

I got the Click on sale at a great price compared to the classic small messenger bag. It is about the same size, but it has a sewed instead of a clipped strap, and it uses only the Velcro tabs for the flap instead of having the additional clips like the messenger bag. For me, it was a great bargain: all the quality of a Timbuk2 bag, but on a smaller scale that was perfect for carrying my EeePC, a book, and a small notebook for class. I love it, and I recommend it to anyone needing the smaller messenger-type bag without the messenger bag cost.


Technically, I haven't owned a portable computer of my own until now. Sure, I've had work-issued laptops for the last few years, and I've borrowed laptops from friends from time to time. When I bought my mom's Asus EeePC, though, it was the first time I'd had one I could call mine. Everything else I own is a desktop system. :-)

For my Computer Science programming coursework at NCSU, I can easily do assignments at my desktop systems or from one of the campus computer labs. Once in a while, though, I'd like to grab a portable system and go somewhere else. I could use my work-issued MacBook, but if anything happens to it while I'm using it for something other than work, I could be held responsible for its replacement. Plus, even though it isn't but a 13" MacBook, it's still a little bigger than I want to haul around with me.

The EeePC had Xandros pre-installed, and I really like it. However, I didn't want the launcher. When I tried installing the advanced-mode Xandros, I was excited because it had the look and feel I wanted. Unfortunately, any minor change in software bricked the system. I gave up on Xandros after about half a dozen repair installs.

Having participated in the Foresight Linux project for some time, my next instinct was to try installing Foresight Linux Mobile Edition. After all, I have friends and colleagues that have used the EeePC and other netbooks with FL Mobile with much success.

I loved it... but I needed to customize it to my needs as a Java programmer.

My first instinct was the fall back on my Conary system building skills and use rBuilder Online to build a custom one-off of Foresight Mobile. However, the package structure was significantly different in some ways, and I didn't want to spend a lot of time figuring out how to make the system into a Java programmer's toolkit. So, I decided just to use my Conary system administration experience and add and remove packages until I had the system I wanted. Later, if I wanted to, I could capture this list of packages and create a "backup" system image of sorts using rBuilder Online.

For the following process, I used a combination of the Alt+F1 tty and runlevel 3 to drop to a command line as needed. I also made sure sudo was configured (in /etc/sudoers) so I could use it without providing a password.

I started by removing the launcher, which was included as a dependency of the desktop switcher:

$> sudo conary erase desktop-switcher
$> sudo conary erase netbook-launcher

Then, because I wanted to control my software at a command line instead of using the GNOME Package Kit tool, I removed the package kit:

$> sudo conary erase packagekit

Because I wanted to conserve space, I also removed some applications that I knew I would not use on this system. Most were modestly sized, so I probably could have done without removing them. (Browse the application launcher in the default GNOME install to see what GUI applications are installed, and determine which you want to keep and remove.) Here are the erase commands for the ones I removed:

$> sudo conary erase f-spot
$> sudo conary erase banshee
$> sudo conary erase pidgin

At this point, I was still using 58% of the 4 GB solid state drive. I considered replacing GNOME with xfce to save even more space and further reduce processing overhead. For now, though, I'm sticking with GNOME for familiarity's sake, and it seems to be running efficiently so far.

Next, I had to add my programming tools for Java. First, I needed the JDK for Java 6 (aka 1.6), which also brings in the JRE as a dependency:

$> sudo conary update sun-jdk

The install took a few minutes on the Eee PC. Stopping to check my disk space after the update, I was up to 68% used of my 4 GB. I wasn't concerned about room for my data, since I had an 8 GB SD card mounted at /data, ready for my programming work. However, the percentage made me doubtful I'd be able to install and use Eclipse as my IDE. I decided to give it a try, anyway.

I first tried installing just the runtime component (eclipse-sdk:runtime), but when I launched the application, it said it was missing some necessary jar files. Then I installed the eclipse-sdk package as shown here, which also brought in its dependencies: an earlier build of OpenSSL's library component, the Java components for Xalan and Xerces, and Python's runtime and library components:

$> sudo conary update eclipse-sdk:runtime

This install took less time, and it bumped me to 75% of the solid state drive used. I was happy I had the tools I needed installed, and decided the next item of business was to evaluate performance of Eclipse as my Java IDE on the Eee PC with my customized Foresight Mobile.

Before I did anything, I rebooted the system and confirmed everything was still in working order. Everything was fine. Yay!

Before I launched Eclipse, I wanted to set up a workspace directory on the 8 GB SD card. I wanted to be sure my Eclipse work was stored there instead of in my home directory on the solid state drive. I changed to root, changed the owner on /data was mounted, and made sure it was mounted correctly in /etc/fstab. Then, I created a directory there named eclipse-workspace-java6.

When I launched Eclipse, in the "Select a workspace" dialog, I pointed to my new /data/eclipse-workspace-java6 directory. The splash screen since everything is set to be full screen by default (it tiled instead of expanding). The view was the same as using Eclipse on any system, but it seemed to take up a lot of space. I'm sure I'll continue customizing the look and feel from here until it's like I want it.

As I've done a little bit of sample coding, I've noticed that Eclipse seems to work great on my EeePC. I haven't pushed the limited to see how it runs alongside Firefox and other programs, but I'm confident I at least have the Java Programmer System I was looking for.

Installing the SOAPpy Python module

Having not posted since September, I thought it interesting that my new post today is related to my previous post. Basically, I had to get really comfortable finding and installing Python modules, and fixing issues with the installs, so I could make the script run on my local system.

One big thing I had to have (to run JIRAnemo) was SOAPpy, which was apparently called "SOAPy" (with one "p") until about 2003, and which hasn't had a new release since 2004 (stable) and 2005 (release candidate). Also, the dated documentation for SOAPpy is accurate in what you need, but out-of-date in its links to where to get it.

In hopes of helping those of you out there who are trying to get SOAPpy running, especially on Mac or Windows, here's the information about what I did on my Mac OS X Leopard install:

(1) Update your Python to 2.6.x (optional):
    (1.1) Download the newest Mac installer disk image for 2.6.x from:
    (1.2) After installing the package, verify the command line the
        Python Launcher (under Applications/Python 2.6/ i=on the Mac)
        wants to use by default, such as: /usr/local/bin/pythonw
(2) Install the Python module pyXML:
    (2.1) Download it from:
    (2.2) Unpack it, change to its directory, and install it to your 2.6.x version of Python:
        $> /usr/local/bin/pythonw setup.py install
(3) Install the Python module fpconst:
    (3.1) Download it from:
    (3.2) Unpack it, cchange to its directory, and install it to your 2.6.x version of Python:
        $> /usr/local/bin/pythonw setup.py install
(4) Install the Python module Web Services for Python (ZSI)... may not need this, but I installed it anyway:
    (4.1) Download it from:
    (4.2) Unpack it, change to its directory, and install it to your 2.6.x version of Python;
        use "sudo" to pass permissions to install to /usr/local/bin/:
        $> sudo usr/local/bin/pythonw setup.py install
(5) Install SOAPpy:
    (5.1) Download it from:
    (5.2) Unpack it, cd into it, and install it to your 2.6.x version of Python:
        $> usr/local/bin/pythonw setup.py install
    (5.3) For each file that Python reports that the "__future__" import line needs to
        be at the beginning of the file, make that adjustment, and rerun the install.
        Repeat this process until the install completes successfully.
(6) Install lxml:
    (6.1) Download it from:
    (6.2) Unpack it, cd into it, and install it to your 2.6.x version of Python:
        $> usr/local/bin/pythonw setup.py install


My First Python Thing

Okay, so thanks to my experiences writing recipes and working with appliance agent code at rPath, I have already done a lot of Python coding. The difference there, though, is that it is Python syntax within a specific API. Outside of that, though, I had yet to write or contribute to original Python code.

Now I have! I cannot express thanks enough to Elliot for coming over after work hours and spending 15-20 minutes showing me some essential things to add to my code so I could call it with arguments at the command line. He also advised me on some best practices I had not really picked up on before. There are a lot of helpful resources online, but wading through to find what I needed was going to take more time than I wanted to put into this first effort.

So, what's the program do?

The problem I needed to solve was automating the retrieval of certain information from an installed JIRA (in this case, the rPath Issue Tracking System at issues.rpath.com). I needed to be able to provide a product and a fix version (equal to the release version) for that product, and then to retrieve issue IDs and "README" fields for every issue associated with that product and fix version. This would be a way of assembling the rough draft of the release notes for that product release.

My desired functionality was to run a single command, providing three arguments to that command, and to get the desired results printed to stdout. The arguments are the product ID and fix version, plus the desired type of output. The three types of output are:

(1) from the queried issues, the list of issue IDs for issues with blank "README" fields, needed to determine where we need to add information in rITS;

(2) from the queried issues, the contents of the "README" field plus the issue ID value (or a note that an issue still has no README field), needed to make a first editing pass with changes made directly in rITS as needed;

(3) from the queried issues, the DocBook XML markup needed to generate the release notes for publishing.

One additional need is to ensure that when addressing #2 and #3, identify whether or not an issue should be publicly visible, and only print the issue ID if it is. Markup will include linking these issues as appropriate, too.

The first code attempt created a class called "generel" (get it? GENErate RELease notes?). The class had four methods and allowed me to accomplish output types #1 and #2 (though not yet with the check for publicity).

I can't believe how simple the code is for this, thanks mostly to work already done by Dave Christian's Jiranemo that he programmed back in late 2006, and Andy Grimm's contributions working with pyjira. Thanks guys!

I'll blog more about this one again later when it is complete.

In other news... my first Java programming experiences at NCSU have been very smooth and easy. I look around the class, though, and I see people struggling to understand basic programming logic and syntax the same way I did my first time through it 17 years ago. Without any prior exposure to coding, it is difficult to connect some concepts for people. While I am relieved not to be in those shoes any longer, I am also glad to help those others when I can. Even though there is a bit of boredom to the class, I'm too busy with other things in life to worry about it at the moment... I'll be cherishing these simpler times soon enough, I'm sure. :-)


Introducing Charlie

Charlie is the name of my new Mac Mini, a celebratory purchase made over tax-free weekend. Charlie is my new media center, though I will continue to use the DVD player and AV receiver as part of the overall system. Charlie looks cute next to the Wii.

Charlie plays Netflix, Hulu, and YouTube beautifully, especially with its 2.0 GHz processor and 4 GB of RAM.

Charlie has not yet met Holly (custom-built PC) and Eric the Half-a-TB (network storage device), but I have a feeling they will all get along fine. :-)

Charlie had a little difficulty early on accepting the new RF keyboard/touchpad I purchased. Of course, most Macs are sheltered in their Apple environments for a while before they get out into the world, so I knew there might be a bit of an adjustment period for Charlie. They seem to be getting along well now.

Despite his social challenges, Charlie was delighted to meet the Logitech remote! He is happy to go to stand-by or to waken, following suit with the TV and AV receiver, all from a push of a button on the remote. I was glad to see this ready cooperation.

What does Monty think of all this? Well, I think he was a bit jealous; this morning he was squawking quite dramatically from his cage, trying to make a scene while I watched an episode of the Colbert Report. In time, though, I think he will get used to it, particularly if I play some of his favorite YouTube videos. :-)

Back at rPath

I just realized my last post in this blog was May 20th. Since then, I worked a six-week contract at rPath to update some documentation. Afterward, they extended me an offer to come back to my original position with the company: technical writer. I accepted that offer and started this week as a full-time permanent "docs person."

It is good to be working again. The contract work with rPath, along with my ongoing freelance writing for HowStuffWorks.com (under the pen name Stephanie Crawford), has been an enjoyable way to rebuild my professional confidence. With the resuming of a salaries position, I have been given the opportunity to put things back together again, and a second chance to plan my finances better knowing the type of job market that's out there for people with my experience.

I was also readmitted to N. C. State so that I can finish my Computer Science undergraduate degree. I had almost three years of CSC coursework completed when I changed majors to Mathematics Education. After I got the Math Ed degree in 1996, I didn't think I would ever return to do university coursework. Now, I am looking forward to getting back into the geeky things I loved about CSC, with a renewed perspective to motivate me.

Now, off to do the stuff I get paid for. :-)


Still looking, but certainly not idle!

Wow, I can't believe I haven't posted since March. Not much as changed except that I have had some really good interviews and some small bits of freelance work, but I'm still generally unemployed. I would love to continue embracing the freelance lifestyle, I just need more work in the pipeline to make it work out. If you need any writing, course development, instructional design, or PC repair, let me know!

In the meantime, I have readjusted to using Windows XP for the sake of using certain software: Flash, Fireworks, and Captivate. Because I still need dependable access to my Linux systems, today I learned how to use two PuTTY supplements, PuTTYgen and Pageant, to adapt my OpenSSH keys and use them from PuTTY and FileZilla. BTW, FileZilla rocks the frickin' house... I LOVE this tool!

When I'm not working on projects, I'm looking for jobs and developing my skills. I'm thinking of doing some creative ways of presenting my resume and putting them online. The main page could be a portal to download the Word or PDF copies, or to view a Flash or Captivate version.

Lots of little things to accomplish right now, including these things to enhance my hunt for work.
There is good news on the horizon, but I feel like I'm walking on a treadmill toward that point, not quite reaching it. I have a modest short-term agreement to return to rPath and write some items due in April, but I'm still waiting for other pieces to be in place before that starts. Also, I have an interview today with a firm that may be able to keep me busy with other short-term assignments when the rPath gig ends. These are helping to launch my career shift into being a freelance writer. There are also some other potential assignments that are longer term, some with and without "benefits," but now that I have considered the advantages of freelance, I am looking at those opportunities in a different light than I would have three years ago.

Yesterday, a mentor and friend took time to talk with me as I worked through an internal debate on what it is that I want out of my career just now. Because I may have a couple of routes before me, I needed to think ahead on which road was going to take me where I want to go. Our discussion, though purely just a hashing out of the facts, helped me to get my thoughts in the proper focus. Here's my thinking list:

Path 1: Secure longer-term positions

* Sense of security in having a job from one day/week/month to the next
* A consistency in routine over that extended amount of time
* A predictable monthly income
* Employer-paid benefits (when offered)
* Sense of camaraderie and common corporate goals with a team of colleagues
* Building trust and good relationships with colleagues over time to strengthen future references

* Pay rate lock-in for an unpredictable amount of time
* Dependence on opportunities for upward mobility aided by the employer in order to advance professionally
* Less opportunity for taking on overlapping work for extra income
* No guarantee of having the job forever; the possibility of starting over at any given time, disrupting the security and consistency

Path 2: Short-term freelance work

* Control over the selection of work and, as a result, the overall work calendar
* More opportunity to overlap work, with flexibility to adjust the workload based on other life events
* Adjustable pay rate between assignments/contracts
* Choice of a healthcare plan and other items often included as employer benefits
* Professional organizations provide a support system for freelancers if there is a need to replace the camaraderie of long-term colleagues
* Opportunities to deepen the portfolio with a wide variety of experience and increase the number of professional relationships
* Avoiding the uncertainties about whether and when the job will end

* Unpredictable monthly income
* Time management challenges and the possibility of ongoing changes to the daily/weekly/monthly routine
* Need to take time to self-sell to ensure the work calendar is full [may be able to counter this by working with a firm that does this sort of thing, such as the one I am speaking with today]
* Requirement to charge more per hour to cover health insurance and other expenses often covered by an employer
* Managing my own income tax witholding, 401K contributions, and health and dental insurance.

(I know not all the bullet points here are formed in the best consistency of voice and tense, but the words are meant to convey the idea, not necessarily to meet technical writing standards. ;-)

There are risks with either of these career paths. In time, though, I think I would be more comfortable with the freelance path: it puts me in control of my career instead of depending on an employer to control my future. However, with power comes responsibility, and I know that I alone am responsible for my success or failure in freelance work.

Now, I'm off to bake pies at the coffeeshop... a venture which isn't really making me any money, but thankfully has kept me busy while I continue on this treadmill toward the promising horizon.