Archive for Industry

Options

I don’t like WordPress. This has been documented somewhere in this blog. I’m too lazy to link it.

Some other people don’t like WordPress either sometimes. I was just bitten by that same caching issue.

You see, I had made the mistake of thinking that enabling the WP-Cache plugin would actually enable caching on my system. I always thought “Man WordPress sucks! My blog is so slow! And nobody reads it anyway so it can’t be because people actually care about what I’m writing!”

But I digress. I enabled the WP-Cache plugin, and it was still slow. I looked a bit further, and the default options of an enabled WP-Cache plugin explicitly disables caching. You have to go into the plugin’s settings page and click “Enable”.

What the hell is that?! You know what that is? That’s a programmer right there. We love options. “Oh well if my toaster could turn inside out I could use it as a space heater in my bathroom.” Nobody wants to do that, but we love the fact that we could. We end up designing software for ourselves instead of our customers.

This is bad! Bad, I tell you! Bad! If i could hit you on the nose with a rolled up newspaper I would! Twice!

Users don’t want options, nerds want options. If you have a techy audience, then consider piling in options. R# has a million, and I think each and every one is delicious.

However, if your users are Johnny down on the warehouse floor, he doesn’t want to know about transactions, offline/online operation, or whether or not the circuit breaker is tripped or not. He wants to do work so he can get home and play with his kids.

And remember, DON’T LISTEN TO YOUR USERS. I love this quote:

Definitely don’t believe what people predict they may do in the future.

Leave a Comment

ALT.NET Seattle

So, I know ALT.NET Seattle closed 2 day ago, which, in “Internet/Blogger Time” is approximately 1.5 million years ago, but I want to blog about it anyway. Warning: rambling ahead.

Passion.

That sums up a great deal of what the conference was about. People were insanely passionate about the things they were doing, which seems simple enough, but sometimes I feel like nobody really gives a crap. These people loved what they do. They see that there’s a better way to develop software, and they want to show the world how well it works. Since I tend to hop around and wave my hands all over the place when I get excited about software related things, being around people who show such passion (maybe not by hopping around) was really refreshing.

Sessions.

I really enjoyed the session by John Lam on IronRuby. I’m very much not “in the know” on IronRuby, so I had a couple months ago gotten the mistaken impression that nothing really was going on. That was immediately dispelled, and I realize now that I got that impression because there are no binary releases of IronRuby. It’s a sort of implicit warning sign along the lines of “There be dragons here.” This was a theme throughout the conference. I need to get over it I guess. We’ll revisit that.

Anyway, the IronRuby talk was good, although it was a bit deeper than I would have liked to see, personally. Of course everyone else knows about 50 times more about IronRuby and Ruby in general than I do, so I don’t feel personally slighted in the least. It was still really interesting, and I plan on stealing John’s setup of using Vim inside Visual Studio (ViEmu) and FireFox (Vimperator). I’m less convinced about Vimperator, but ViEmu sounds pretty sexalicious.

Agile Coaching

The two sessions that had the most profound influence on me personally was the session “Coaching Agile Teams” hosted by Jim Shore. I have inherited a team, and I am trying very hard to incorporate new technologies and techniques into our development practices while at the same time not overpowering them. It’s a little overwhelming at times, being fresh out of school and suddenly finding myself in charge of our daily software development efforts. It was great to talk to these guys though, and get a few ideas (well 4 pages of ideas) and a little confirmation that I haven’t just completely screwed it all up, heh.

The ideas we talked about, empowering the team, investing in the team’s long term functionality, and similar things, were echoed throughout the second day of the conference in a session (I think by Oren Eini, the wiki is throwing me errors for some reason right now, I can’t confirm) discussing how to convince your team that using these advanced programming practices (IoC, AOP, SOC, TDD, SRP, etc.) is beneficial.

There was a lot of discussion about how frustrating it can by trying to convince someone that there is a better way when they aren’t interested in learning a better way. Of having people in technological positions who are not interested in technology. The frustration was palpable, but I personally got the feeling that all of the frustration is rooted in the tension of people resisting an effort along the lines of: “I want to make your life better by making your work easier in the long run.”

Em-Vee-See

The session on MS’s MVC offering was pretty good. I’m just getting into the whole MVC shebang, and what I was personally interested in coming away with was that if I choose Monorail over MVC, or MVC over Monorail, I wouldn’t get horribly screwed. A comment was made concerning MSMVC’s better integration into the IDE versus Monorail, and Chris Ortman made a comment during the session about how his personal experience was a bit of the opposite with a developer he had bringing him up to speed on MVC.

I approached him afterward for a little elaboration, as we have a web project coming up soon and I’m pretty convinced this is the way to go. His comments were very reassuring, and I came away with the thought that, if anything, the Castle Project may be the *more* supported solution, simply because the mailing lists are so awesome, something I can attest to personally. I also learned that I should probably move away from RC3 of Castle Project (the last binary release) and just use trunk. Sort of goes back to my predisposition against using non-binary releases.

Btw- Check Chris’s Blog for an idea he and some others have for a Developer Exchange program. I love the idea.

Grassroots

I also met a gent by the name of Alan Buck. He seemed pretty cool, local to Washington, and through our discussions he asked if I’d be interested in joining a micro-community of people here in Washington we can reach out to to bounce ideas off of and so forth. I contacted him yesterday, and I’m really excited about the opportunity. I’ll update with what goes down.

Also, does anyone know of any developers in Eastern Washington (read: East of Snoqualmie Pass). There are a crapload of resources for those in Seattle, Redmond, Olympia, etc., but nothing I’ve found for us desert-folk. I’d like to connect with those out there, and I’ve been considering forming an Eastern Washington User Group of some sort. Especially since for like 3-4 months a year we’re cut off (or at least seriously discouraged by such things as avalanches and tire chains) from the west side.

Other: _________

There was a lot else going on. Like how Scott Bellware came off as kind of rude, but then by the end of the show had completely garnered my respect, all without even having to personally interact with him, and how Ben completely blew me off 2 nights in a row (Thanks ben! ;) j/k), or how Steven “Doc” List was an amazing facilitator, or how Jim Shore had this amazing style of being very soft spoken, respectful, and polite while exerting a powerful control over the session. (Doc and Jim Shore have crazy awesome people skills), and umm… yeah. stuff.

It was great. I met amazing people. I didn’t meet anyone I didn’t like (I know, right!?). I can’t wait until the next one. I think I might try to go to Austin. We’ll see.

Comments off

Design Evolution => Designer Evolution

I’ve only been working in industry on real software since about February, and I’m beginning to be aware of just how much academia stunted my growth as a software engineer/designer. A Computer Science education (at least at University of Houston) doesn’t really teach you how to design or engineer software. They teach you a lot, but I’m pretty sure I never heard the terms IoC, MVC, Dependency Injection, Static Gateway, or even Design Pattern in any of my courses. I never got the opportunity to take Venkat’s OOAD course, which is probably one of the biggest regrets of my academic career, so maybe that’s what I’m missing. Even so, it seems a bit much to entrust the wholeness of modern OO software design to a single professor’s course.

The point of this post is that I’m learning a lot of design-related stuff, and I’m learning it fast.

Fast enough that the library I started at work about 2 weeks after I started working here is already unsatisfactory to me. It’s better than what it’s replacing, but I feel like it could be even better now that I have the experience of building it.

I guess that’s experience, but I’d rather just know it all up front. :)

Comments off

What do you do… now?

I was looking about and I realized that I needed to update with another “What do you do?” meme entry since now I do something fundamentally and completely different.

I work at JMT Systems Consulting as a System Analyst. I never really understood that title. What system am I analyzing? Why am I analyzing it? Do I write analysis reports for a living? Turns out I do not.

First, what JMT Systems, does. Our primary product right now is a software/hardware package that allows municipalities (read: cities and county governments) to perform warehouse management tasks with handheld wireless scanners (think the Wal-Mart price guns the managers have). Our product is well liked by the customers, and I feel really happy about the health of the business in general.

I ended up bringing a lot of new stuff with me to JMT Systems, and I was a little scared about that. A lot of software shops are set in their ways and view change suspiciously and actively resist it. Our team is so willing to listen and consider alternate possibilities, I really do love it. I think part of that however is the fact that I wasn’t bringing new things for the sake of change, but simply because I was aware of some newer practices and tools which I knew developers love once exposed. When confronted with new technologies and techniques, they were … (Dare I say it?) Agile.

One of our core products, Falcon Mobile Server, sits on top of this huge piece of ERM software that city and county governments run to basically manage… everything: warehousing, work orders, permitting, etc. We provide mobile interfaces on little hand-held Windows machines with barcoding and all kinds of fancy stuff. The core interface from our product to the application was showing its age, so that’s my current project: refactoring that into a lean mean extensible beast of a gateway. This paves the way for further upgrades and revisions to the Falcon product to support the latest versions of the ERM software. More supported versions = More supported customers.

We have several other projects going on, some of which are less public. I’m really enjoying working here, it’s proving to be quite challening, which is something I’m all about.

Comments off

Carbonite: Still Failing

Back in the day I wrestled with the decision between Mozy and Carbonite. I eventually chose Mozy and I’ve been incredibly happy with it. It’s already saved my bacon a couple times, and I find the combination web/local interface to be incredibly helpful. Unfortunately not everyone has been as lucky as I have.

Rich B. left me a comment regarding his current Carbonite situation. Here’s an excerpt:

I’ve been a Carbonite subscriber for almost a year. I recently suffered a hard drive failure and was very proud of myself for knowing this would happen AGAIN and being prepared. Little did I know. I’ve been attempting to do a partial recovery of my files for 5 days. Partial as I’m waiting on a new drive from Western Digital. For the last 2 days the service has been ’stuck’. The interface is clunky at best and there is no way to retrieve your files except wait for something to happen.

When I first attempted to recover my files I noticed that all the folders on Carbonite showed a date corresponding to a date last year when I first subscribed. Not good when you expect to recover your most recent files. Sure enough the few files I was able to recover were old files. I sent an email to Customer Support and they responded within 12 hours which was acceptable. Subsequent email requests from me, both by Replying to the original and going back to customer support have met deaf ears - no response in over 24 hours. Their customer support form says it may take 72 hours to respond because they’re busy. I don’t know about others, but when I’ve had a hard drive failure and can’t recover my files, 72 hours is a little slow for customer support assistance. I obviously need files as quickly as possible.

Mozy hasn’t been a cakewalk either. It’s got it’s own share of idiosyncrasies, but nothing like that.

Software Engineering lessons to take away? Nothing new: Think about your users, Consider the human elements of software design (and further software support), and Interface is crucial.

That’s an interesting question: How do considerations for continued support for production software influence design?

Comments (3)

Implementing and Overriding Read Only Properties

Ok enough crazy posts about divine design beings shining down on me from up on high. That’s what too much caffeine on an empty stomach does to a person!

So I’m beginning to hate VB.NET. Yup. There, I said it.

I was trying to create a read only interface to a Part object.

Public Interface IReadOnlyPart
    ReadOnly Property PartNumber() As String
End Interface

And Have a Part Class Implement that Interface like this:

Public Class Part
    Implements IReadOnlyPart
    Public Property PartNumber As String _
        Implements IReadOnlyPart.PartNumber()
    Etc.

That doesn’t work in VB. You can’t inherit a readonly property from an interface and then make it read/write. Grr! I’m told you can do this in C#, but I haven’t confirmed this. I posted an inquiry to microsoft.public.dotnet.languages.vb and got some great responses. This is the proposed solution by Steve Gerrard which, while perverse, works wonderfully.

Public Class Class1
    Implements IReadOnlyPart

    Private PartNum As String

    Private ReadOnly Property Dummy() As String _
        Implements IReadOnlyPart.PartNumber
        Get
            Dummy = PartNum
        End Get
    End Property

    Public Property PartNumber() As String
        Get
            PartNumber = PartNum ' or Dummy
        End Get
        Set(ByVal Value As String)
            PartNum = Value
        End Set
    End Property

End Class

Sample test code:

Dim o As Class1 = New Class1
Dim p As IReadOnlyPart = o

o.PartNumber = "test 001"
Debug.WriteLine("Class1: " + o.PartNumber)
Debug.WriteLine("IReadOnlyPart: " + p.PartNumber)

I never would have figured that out. Always ask for help when in over your head. I’ve got another post brewing on that same mailing list now about delegates.

Grr @ Delegates! So sexy, but so pointy.

Comments off

Holy Crap, Batman!

Things have changed considerably since last we really talked. Come on. Pull up a seat. Get cozy and let’s dish.

Firstly, I moved! I live in Ellensburg, Washington now. It’s amazingly beautiful here. I’m smitten.

Secondly, I have a new job. I work at JMT Systems Consulting. My title is “Systems Analyst”, but it turns out I’ll be wearing many hats. Good thing I have a big head (size 7-3/4 for those interested). It’s been a great experience. It’s a really great environment with really great people and I’m really happy to be here. Really.

I have some more posts coming up. So much new stuff! Document-Based Databases are poking my brain in all the right places. Map/Reduce is delicious. Oh and look at this Unit Testing Pattern which straight up wins the “Best Name for a Design Pattern Ever” award: ObjectMother.

Now that’s a mother of a pattern right there.

Comments off

On Democracy

So Visual Studio 2008 is out, and by all accounts it is pretty bling-tastic. LINQ is getting a lot of press since it’s release late last year. I just finished reading this article over at SD Times, and I wanted to comment.

Democracy is slow. Technology moves fast. I’m not sure they’re a good mating. I’ve heard it claimed that a negative part of Microsoft’s development platform is that it is constantly changing. Java hasn’t changed very much. They added some stuff in 5 and 6, but nothing like what MS is doing in every incremental revision of .NET. .NET is really impressive these days. It’s not one language that’s impressive, or one technology, or one tool, but the entire platform. There’s a lot of new technology that is put together really well.

I think this is due to the fact that there is someone, somewhere in Microsoft with “vision”. Maybe not just one person, but at least some smallish team leading development efforts. Java has implemented this sort of open democracy JSR proposal process, but I’m not convinced democracy belongs in software development. I feel that someone or a small group with a passionate vision can create new innovative things, while a large democracy oriented team just sort of takes so long that it’s always playing catch up. It’s probably “safer” to have a democracy, but taking risks is an important part of progress.

Maybe I’m wrong. What are your thoughts? Are there software projects where democracy created very innovative things that I’m not considering?

Comments off

What do you do?

Shey tagged me with a meme asking “What do you do?” (in the context of job-ness).

It’s always kind of irked me that my friends in the corporate world don’t seem capable of telling me what they do. A typical inquiry goes something like this:

James: So, what do you do?
Corporate Friend: I create solutions for synergistic metaproblems.
James: … So, what do you do?

I usually give up before I actually learn anything.

So here is my attempt to tell you what I do, and hopefully at the end you’ll actually know what I do.

I work as a research assistant at the University of Houston, in the Computer Science department, in the Quantitative Imaging Lab. The lab belongs to Dr. Shishir Shah. We are a research lab which focuses on quantitative imaging, oftentimes in the biomedical domain. Quantitative imaging is the name given to imaging techniques which extract quantitative (real world) data from an image. E.g., measuring a cell’s exact diameter from an image, measuring a particles absorption, or measuring the height of a person from an image. We like to measure.

I have several project going on currently. My primary research topic is Vision Beyond Sight: Diagnosis and Classification of Thyroid Cancer Using Spectral Imagery. In collaboration with The Methodist Hospital, we are trying to create new automated methods for diagnosing and grading thyroid cancer using spectral imaging methods. Spectral imaging enables the capture of spectral information at every point in the imaging plane. Instead of capturing a single RGB triplet at each point as we would in a color image, we sample the entire visible spectrum (400nm - 700nm). Anyway, our efforts involve capturing spectral image data from thyroid biopsy slides and attempting to classify the slides according to their known diagnosis.

A secondary project I have is LMAL, the Light Microscopy Automation Library. It is an open source (albeit currently unreleased) library for microscope automation written in java. It abstracts out all the components of a common upright light microscope and allows computer control of the entire system from a standard API.

I am also responsible for some administrivia in the lab.

So what kind of tools do I use? We’re mostly a java shop. I use eclipse for java development. My favorite plugins are Subclipse and JAutodoc. I also use TortoiseSVN extensively. We have several SVN repositories, including one for publications and presentations. We use Trac for project wiki’s. I use Visual Studio 6/2003/2005 mainly for JNI when dealing with native drivers for microscope hardware. There are several newish java projects that may let me get away from JNI programming (Yay!).

So there. Do you know what I do now? I hope so.

Leave a Comment

Online Backup Throwdown, Part 2

Update: Please also read part 3 before you make your online backup service selection.

In my previous entry on this topic, I described my problems with online backup services Carbonite and Mozy. Interestingly enough, both companies contacted me with regards to my post.

Carbonite’s CEO David Friend (or rather, I suspect, a PR firm masquerading as David Friend Update (Oct. 27, 2007): it was not a PR firm but actually David Friend, CEO of Carbonite. My bad.) commented on my blog in reply to my complaints. You can view the exchange here. I can understand not supporting backup from network drives, but I have a great deal of difficulty understanding the choice to not support backup from external drives. External drives are not uncommon with home users.

Thankfully Mozy does not suffer from these shortcomings. Bryan Fultz from Mozy contacted me directly offering me support on getting my Mozy installation to function. That impressed me a great deal.

It made a big impression on me that Carbonite was more concerned with their image than with backing up my files, while Mozy was more concerned with troubleshooting my installation and getting my data backed up.

Today, Mozy won one more paying customer.

BTW- Now that Mozy is setup and functioning, I can safely say from personal experience that the interface is way better than Carbonite’s.

Comments (4)