Torrey’s Blog

My Application Development Ramblings

User Experience Headaches

October22

This week has been an eye opener into the reality that I’m a programmer and not a designer. I’ve nearly completed my second year as a professional software developer and have quite the project list for my resume, and still have so much to learn about software development. This post is about the user experience design problem I encountered with two clients.

The first example comes from an Auction Manager application I wrote that handles property auctions and contacts.

prux.png

This application was not based off any other application and was created from scratch. As I created this and went through various meetings with the client it was clear there are various steps and seperations during the process of property auctions. As an application that will grow over the years I imagined that using an Outlook style explorer bar would be benefitial and make the application easy to understand and learn. Once work started picking up for the client and the software was used more they found that this kind of style slows down the work flow, because of the extra clicks it takes to get to the various screens they need. After I visit them this week I’m sure I’ll come up with a better idea to repair the work flow and create a better user experience, but my question is how do you plan and prepare the great user experience if the application never existed? What works for some clients may not work the same for others.

The second example I have is a point of sales system I created for small businesses. This is still in development and I’m 100% sure this interface will change within the next two weeks.

spvux.png

While creating this software I searched the internet to view various screen shots of point of sales systems to get an idea of how I could improve the ease of use for users. A lot of systems out there are screens loaded with information that will completely confuse the user. By simplifying everything and making the whole process faster. The boss and other office co-workers liked the system and said it should be a really big hit with people. One of our clients that will be using the software soon came to have a sneak peek at it. Their first reactions were that all the information is displayed on the screen and there is no contrast between the various parts which will leave users confused. Her point of sale system that she is switching from is QuickBooks POS, so everything she compared to was that. If it doesn’t function like QuickBooks with the various screens they use, then it appears to confusing to learn? I just don’t understand the design side of things to accept feedback like this.

Every client is different, and small businesses seem less likely to have training sessions because their work schedules are so busy. In the last year I’ve heard multiple comments that clients want their software to look and function exactly like Microsoft products and other big name companies like Intuit. Their reaction really comes from years of using these products, which causes me stress because of the thought and ideas I’ve put into the making the software I’m presenting. New innovative ideas don’t stand a chance in a fast moving busy small business. I am confused on how to approach the user experience design side of things because all I’ve done is programmed most of my life.

If anyone has some great adivce on resources to read or listen to I’d be more than willing to take a look. Right now I try to learn as much as possible from various web searches on the topic and listen to the Pixel8 podcast.

A Client Requests Time Traveling?

August13

This is new and interesting. Just when I thought clients have reached the limit of requests when it comes to changes in their software they blew me away on this. I received an email from a manager at this client office that was asked by one of his big clients to recompile a year to date report of their repair jobs.

The funny part is that this same manager has updated financial figures in the database, and changed a savings calculation for his client 3 times total this year. His request was to somehow use old information for the old date ranges. Requests like this make me laugh, and think really silly stuff. I even mentioned in the email about scientists can’t even figure out how to trace back movement of energy to make time traveling to the past possible. :)

Someone has to tell these administrative people how it is, and maybe I’m the guy to do it! I’m in a joking mood, so don’t take that comment seriously.

Testing the eeePC 4G (XP)

July7

The Asus eeePC 4G is more than capable of acting as a main computer for individuals that need to stick with something cheap, and don’t have a large need for super intense applications.

That opening sentence describes the experience I had using the eeePC 4G with Windows XP installed as the operating system over the course of 4 days. The minor details I haven’t mentioned yet was that after the first day I installed a USB mouse to make my navigation a little easier. The little touch pad is okay when you’re on the go, but if you’re sitting down at home the last thing you want to do is keep leaning forward to try and use a miniture touch pad that doesn’t always respond. I’m also using a Class 6 8GB SDHC card as a place to store temporary internet files, program files, and the my documents storage location.

As this device is a single core processor clocked at 633mhz stock, I decided to make use of the utility called eeectl that can overclock the processor to what speed it was originally designed for–900mhz. The utility works perfectly without problems, and even gives the user control over the fan & backlighting. There is also a icon that is placed in the system tray near the clock that displays how much of the processor they are clocked at (0-100%), and a tempature is also displayed in the icon animation. On those facts alone this makes eeectl a must have application for the laptop.

The laptop I was using still has the default of 512mb of RAM installed. This should be sufficent for most regular computer users, but as soon as I can it will be upgraded to 2GB for maximum performance. The last time I checked, amazon.com has the price around $51 with a $20 rebate available on the RAM module. Quite a bargin if you ask me!

I wanted to test out an intense application to see how the handling was, and used SecondLife as the test. Surprisingly, the intense network and graphics usage held up like a champ, but were a little choppy at times. The reasons for that would be the video memory, processor, and total ram available. I’m pretty sure that the performance would be great with the 2GB ram module installed, and will further test this out.

Here’s a list of some applications I tested out that worked perfectly like they would on a normal laptop or desktop PC:

  • Windows Movie Maker (also used the onboard camera as the capture source)
  • Corel Paint Shop Pro Photo X2
  • Skype
  • Windows Live
  • Windows Media Player 11 (used with media files and also NetFlix.com instant play movies)
  • Internet Explorer 6 & 7
  • Sandboxie (use this in combination with your browser to prevent spyware or worms–or any rouge applications you might want to run but are not that sure about)

The list really could go on and on. This little guy is capable of competing with the performance of other machines out there! If I would have found my Visual Studio 2005 installation disc I would have gave that a test run too. Although, with that tiny screen I’d have to make extensive use of the pins to hide the toolbars.

Before ending this post I’ll further talk about not using an anti-virus application. There maybe some users that will swear by using them religiously because of the whole mess of things that can attack your pc in numerous ways. These suggestions and information is based off my own experience, so take from it what you will.

Using an anti-virus causes lots of extra activity on the hard drive and in memory that would take a performance hit out of the eeePC that isn’t necessary. By understanding that most systems of today are infected by running rouge applications downloaded through peer-to-peer programs, and web surfing websites that contain ads that exploit your pc to run their spyware, you can use this knowledge to provide a slightly better solution to avoid using the anti-virus apps.

The major application for my demonstration today will be Sandboxie, by using this application you can run your browser in a controlled environment to prevent any nasty bugs from taking over your system, and also provide an outlet to testing applications or toolbars out before you install them. Sandboxie is extremely customizable, and let’s you explore the contents of what the application you’re running in the sandbox created. It has a number of functions, and it’s all for free! This solution alone can keep even clueless web surfers away from nasty malware found on sites like myspace.

If for some reason you end up with malware on your pc, use a program like IceSword to delete the rouge BHO (browser help objects) & startup references that are in your system. There are times when the malware will rewrite those references after you delete them, which will cause you go one more step further with technical know-how to remove them. This simply involves booting up a Hiren’s CD and using the NTFS drivers navigate to the folder and deleting the rouge DLL & EXE file names you found in the IceSword BHO and startup listings.

Hopefully, this gives you a nice starting overview of the eeePC and what it’s capable of. If you have further questions, comments, or would like to know more about a certain feature or function of the eeePC leave a comment.

Code Monkey by Jonathan Coulton

June17

This song had me laughing tonight, it’s really good. I’m going to add the song with the new podPress plugin, and place the lyrics under the player.

 
icon for podpress  Code Monkey [3:07m]: Play Now | Play in Popup | Download

Code Monkey get up get coffee
Code Monkey go to job
Code Monkey have boring meeting
With boring manager Rob
Rob say Code Monkey very dilligent
But his output stink
His code not “functional” or “elegant”
What do Code Monkey think?
Code Monkey think maybe manager want to write god damned login page himself
Code Monkey not say it out loud
Code Monkey not crazy, just proud

Code Monkey like Fritos
Code Monkey like Tab and Mountain Dew
Code Monkey very simple man
With big warm fuzzy secret heart:
Code Monkey like you

Code Monkey hang around at front desk
Tell you sweater look nice
Code Monkey offer buy you soda
Bring you cup, bring you ice
You say no thank you for the soda cause
Soda make you fat
Anyway you busy with the telephone
No time for chat
Code Monkey have long walk back to cubicle he sit down pretend to work
Code Monkey not thinking so straight
Code Monkey not feeling so great

Code Monkey like Fritos
Code Monkey like Tab and Mountain Dew
Code Monkey very simple man
With big warm fuzzy secret heart:
Code Monkey like you
Code Monkey like you a lot

Code Monkey have every reason
To get out this place
Code Monkey just keep on working
See your soft pretty face
Much rather wake up, eat a coffee cake
Take bath, take nap
This job “fulfilling in creative way”
Such a load of crap
Code Monkey think someday he have everything even pretty girl like you
Code Monkey just waiting for now
Code Monkey say someday, somehow

Code Monkey like Fritos
Code Monkey like Tab and Mountain Dew
Code Monkey very simple man
With big warm fuzzy secret heart:
Code Monkey like you

If you like this song and want to support the creator, then check out his website for information and great songs!

posted under General | No Comments »

One Client CEO Is At It Again

June13

The CEO I mentioned in my blog in the past is causing some problems again this week. Last week he asked for an update of what needs to be worked on for his company’s project. I gave him a list, diagram of the current system, and included a description of the capability and features of the software I’ve developed for him so far.

This past Monday I get an offensive email back as a reply. He doesn’t understand why there are 2-3 months of development left, the cost of out-of-pocket and not using the software is high, and a few other ignorant comments. What makes them ignorant is the fact his company has been using the software I’ve been in the process of developing since last April. This CEO is so out of touch with the day to day realities of his own business the guy doesn’t even know what they have. If you’ve read the book “Execution: The Discipline of Getting Things Done” you might remember this:

“Know your people and your business. Leaders have to live their businesses. In companies that don’t execute well, their leaders are out of touch with the day to day realities. They are getting lots of information delivered to them, but it’s filtered. Presented by direct reports with their own preceptions, limitations, and agendas. Or gathered by staff people with their own perspectives. The leaders aren’t where the action is. They aren’t engaged in the business, so they don’t know their organizations comphrensively, and their people don’t really know them.”

This little excerpt describes this guy perfectly. It’s a shame I have to deal with someone so ignorant. If he would have taken even 5 minutes of his time to talk with his people he could of had the facts to properly respond back. Software development follows a process, and this process isn’t always understood by leaders. I think it’s pretty straight forward.

  1. Requirements Specification
  2. Design
  3. Construction (implementation and programming)
  4. Integration
  5. Testing and Debugging
  6. Installation (deployment)
  7. Maintenance (updates)

That’s for the normal development process, and keep in mind for this project I basically have 3 total layers. First is the application and web development. This includes the new items and features. Second is the report development. And the last layer is maintence of the software modules previously created. This could go more in depth, but I’ll leave it at that.

For the sake of that CEO he’s lucky that my boss is a great communicator, because I’m sure he wouldn’t like the reality I’d spit back at him if given the opportunity. I’m not a verbal dancer of words, I will tell you how it is.

I’ll leave this post with two quotes I based off the book “Execution: The Discipline of Getting Things Done”.

“If everyone doesn’t commit to the changes they help make then the execution will not be successful.”

“An organization follows the behavior of its managers and leaders. If there’s no accountability or structure then people are going to do what they want, and cause execution to fail.”

Memory Leaks Cleanup Roto Rooter Style Snippet

June5

This could be one of the most useful snippets know to man kind. Shove this bad boy into a timer that executes every so many minutes or after loading up some datasets.

  try
  {
     Process process = Process.GetCurrentProcess();
     process.MaxWorkingSet = process.MaxWorkingSet;
     process.Dispose();
  }
  catch { }
posted under C# | No Comments »

Video Tutorials Idea for .NET

June4

I’ve watched most of the videos at http://www.windowsclient.net and came to the realization that lots of what they show is near useless. From my experience in different programming communities is that lots of the newer programmers aren’t as creative as the older ones because they learn from videos like those, and then bug the hell out of people in those user groups for the necessary meat and potatoes.

Once I get Camtasia installed to this computer, I’d really like to take a crack at a video tutorial or two. I’m almost guessing in my mind that creating the complex videos that users would benefit from take a lot of planning and time to produce. We’ll see what happens, and what video topic ideas I can think of.

posted under General | No Comments »

It’s not that peachy Microsoft!

May29

In my last post I blogged about n-tier development and updating a dataset through a web service. Later that night I found the link from Microsoft showing how to update data through a web service. Well, I tried it out the next morning…Life is not as simple as they make it look! Trying to update that way ended up making my web service complain about the dataset not being the correct type, so I ended up using my first method. I also ended up adding a little extra flavor to the update webservice method so it’ll handle inserts, deletions, and updates. If I get the chance today I’ll post up the source code for that on my blog and also the snippets section of this website.

Happy coding, it’s almost the weekend!

Updating a DataSet Through a Webservice

May27

Alright, so I’ve been racking my brain around this whole n-tier architecture and started converting one client’s software to this type of solution. When it comes to creating the various layers and web service that just pulls data it’s easy as pie. Updating a DataSet through a data access layer that communicates to a web service is a whole other story. Here’s a quick overview of how I achieved the update.

1) The smart client issued an update event that called the DAL (date access layer) update.

2) The DAL passes the DataSet to the web service. Keep in mind during the first two steps I used the generic type DataSet. The smart client doesn’t actually contain the DataSet types that are stored in regular applications that could made the update a whole lot easier, that’s the reason why I’m using the generic DataSet type.

3) The webservice uses the method below for updating the DataSet. The more reference material I read lately, I may end up changing the update method, I believe that I’m doing it partially incorrect even though it works perfectly.

         [WebMethod(Description = “Updates the edited Job Log row.”)]          public String update_tblJobLog(DataSet tblJobLogDS)          {              DataSets.tblJobLogDataSetTableAdapters.tblJobLogTableAdapter tblJobLogTableAdapter = new Company_Webservice.DataSets.tblJobLogDataSetTableAdapters.tblJobLogTableAdapter();              Company_Webservice.DataSets.tblJobLogDataSet typedtblJobLogDS = new Company_Webservice.DataSets.tblJobLogDataSet();              typedtblJobLogDS.Load(tblJobLogDS.Tables[“tblJobLog”].CreateDataReader(), LoadOption.OverwriteChanges,                  typedtblJobLogDS.tblJobLog);              typedtblJobLogDS.tblJobLog.Rows[0].SetModified();              try              {                  tblJobLogTableAdapter.Update(typedtblJobLogDS);                  return “Success”;              }              catch (Exception ex)              {                  return ex.Message;              }          }  

There’s actually a way I can just pass the rows I need by using the GetChanges method, then cycle through the loaded rows to update the RowState. This style of programming definately has its pros and cons, but I think in the long run it’s going to work wonders for scalability since this particular client is expanding like their is no tomorrow.

[edit]

Just googled the magic phrase and found out Microsoft actually has a code snippet that shows an easy way to update a dataset through a webservice. It figures I nearly make my brain bleed trying to get the update to process earlier, and Microsoft has the solution sitting right there. Sometimes all it takes is the magic search phrase…

[WebMethod]         public DataSet GetCustomers()         {             SqlConnection con = new SqlConnection(“server=servername;uid=login;  pwd=password;database=northwind”);             SqlDataAdapter daCust = new SqlDataAdapter(“Select * From Customers”, con);             DataSet ds = new DataSet();             daCust.Fill(ds, “Cust”);             return ds;         }       [WebMethod]         public DataSet UpdateCustomers(DataSet ds)         {              SqlConnection con = new SqlConnection(“server=servername;uid=login;  pwd=password;database=northwind”);              SqlDataAdapter daCust = new SqlDataAdapter(“Select * From Customers”, con);              SqlCommandBuilder cbCust = new SqlCommandBuilder(daCust);              daCust.Update(ds, “Cust”);              return ds;          }
   

Beginning N-Tier Development

May22

Within the past week or so I’ve started studying up on N-Tier applications since I’ve been experiencing overload on one particular client expanding faster than I can keep up with application maintenance. This client has grown so much in the past 2 months that I have been working almost non-stop to develop a solution that works with their business. Now that I understand what N-Tier is and means, I really feel silly for not looking into that sooner. You’ll read that it’s mainly for large scale applications, but there is actually a need for such a architecture in small business too. From this point on I plan on creating layers for every project I work on. It makes perfect sense and will ease future projects because I can reuse the various layers.

I would keep typing more, but I’m half asleep right now, so I’ll try to catch up with more posts tomorrow. Goodnight!

« Older Entries