I just finished HCI 430 Prototyping and Implementation. This class involved designing interfaces for windows applications and writing the code to make them work. I was a little nervous about taking this class because although I can write code, most of it is procedural scripting; PHP, VBscript, JavaScript and all of that is focused on web applications. Despite that, I wasn’t sure how I would handle this… it turned out to be trivial. I have never written a formal windows application in any great detail (I’ve done “hello world” and temp converter tutorials, but that’s it), yet this turned out to be only slightly more complicated than developing web applications. Especially when using the Visual Studio IDE.
Fortunately, the school provides free academic copies of VisualStudio.net and I have a windows laptop to use from work. So I had what I needed to be able to spend long nights writing code if necessary. I had used VS a few years ago when we implemented our content management system. A few DLLs supplied from the vendor needed to be modified (which they supplied the source for us to do just that), they were written in vb6, so we made the changes and got out as quickly as we could. I have to say that VS.net looks pretty much like VS 6 does, but there are substantial changes in the language. Basically, VB.net is MS’s version of Java. So anyone who is familiar with Java should probably find working with VB.net to be fairly easy.
And that was enough for me, as I had some basic Java a couple of years ago. And well, with my other scripting experience, it isn’t that hard to do programming logic, if you can think logically. Of course, Visual Studio almost writes the code for you… designing the interfaces and creating the code framework to interact with the interface is very simple. This is not to say there weren’t any challenges. As always, when something gains my interest, I tend to see how much I can do with it. While the instructor had indicated if there was something that we could not do, that we could just insert “stubs” (that is dialog box notices) that indicated that the feature was not yet available. This, for me, would not be acceptable, so I tried to make my apps function as much as possible. In the first project I even added the help file/documentation, but the instructor told me that I could/should work more on the interface. Which I readily agreed…
We had five projects in 10 weeks. Four were straight forward windows applications, the 5th and final project was to be an ASP.net version of one of the previous projects. One thing that I learned during this class is… I now know why ASP/ASP.net returns form values in a different order than that in which they are sent to the server. This has been very frustrating, for in web app development, it has been a favorite RAD method to just iterate through form values sent to the server and display, insert into a db, or e-mail them in that order. Unfortunately, with ASP and IIS the values from forms are stored in an Hash table. The keys are converted to hash values and then sorted. So the order will be what ever the hash values of the keys sort into. Understanding why they do this is still not fully clear to me, as whatever performance gain they are getting is only going to show up in the most extreme applications. That is, if your server is processing 60 or more concurrent users on a single form, it might be a benefit. But I have to think that you will have other bottle necks in that scenario to worry about… before the form key/value pair access needs help.
As mentioned earlier, creating interfaces with VS.net is very simple. Creating a usable interface is still a challenge, which requires analysis, testing and iterative development. Unfortunately, with 5 projects for this class, there wasn’t much time to do that. I am not sure how it could be made better, while the obvious solution might be to have fewer projects, then we wouldn’t have been able to cover as many of the controls and features of implementing the interface. And sometimes in the real world you just aren’t going to have a lot of time to design and test. However, I kind of lean towards the fewer projects perspective as we could have worked on different projects and shared knowledge through presentations. I am definitely against team projects which are just a waste of time and effort in academic curriculum (well, unless the class is about how to work on a team). Working on a project as team for a class grade is nowhere near the same as doing so for real world work. For one thing, the grade is not incentive enough for some, particularly when some folks may be happy with a B or C effort and others have a straight A average going (note: I am not in either group… I don’t have a straight A average, but I am not happy with a B or C effort).
Sorry for getting off-topic here, but my experiences working on teams in class projects has been one that has left me wondering… what is the point. I mean, one or two members end up pulling the team through the semester or one or two members drag the team down. Rarely will you get all members contributing equally or significantly well (which I have experienced once), and so I won’t go farther into the quality vs quantity discussion. Bottom line, in a work environment there are additional incentives for encouraging teams to work effectively… both positive (pay and rewards) and negative (lose your job). Another issue… in a specialized graduate program, some people have to take on roles for a team project, for which they would never be hired or last long in as an actual career… if they some how managed to get in the position. Certainly, some people may be multi-talented or have hidden skills, but for the most part people don’t or can’t use those skills/talents and end up wasting the team’s time and effort. I fully believe in giving people an opportunity to try something different or to gain a better understanding of another person’s job/role, but that only usually works when it is something they want to do. And to try and do it for a academic term of only 10 weeks is just a negative experience and significantly reduces the effectiveness of any learning/research.
At any rate, another learning process in this particular class involved working in ASP.net using VisualStudio. MS has done an admirable job of making the process of building web applications much like building windows applications. So for the programmer who is now getting pulled into writing web apps, this is an easy transition. From my perspective the whole code-behind implementation doesn’t do enough to allow actual separation of form from content, to merit using VS. Every single web form/page gets a “code-behind” page no matter what… I would prefer structuring the code into the parts that make the most sense for the application. For a small simple application that only involves one or two web forms and one display page, there is really only need for one code page. For simple applications using VS… you could end up with 20+ files on the system… no wonders they worried about storing the form values using a hash table. They are chewing up a lot of resources sucking in files.
Well, I will add more to this entry later (and do more proofing), plus post some of the code and documentation… For the assignments I created the documetation on my Mac. The lo-fi interfaces were made with OmniGraffle. I created a custom set of interface widgets so I could easly comp windows or web applications. The applications I had to write/build on a windows computer. I tried to get VS to run on the Mac with Qemu emulation, but that did not work… I think it would have worked with Virtual PC but I didn’t want to spend the money on that. Below are links to a couple of the projects. The documentation should appear along with the folder/directory. Sorry but these will only run under windows… these are the actual Visual Studio .net project. You will need to compile them in VS in order for them to work… they are provided as is, no warranty. If you think they cause harm to your system, it is your fault. if you want something changed, do it yourself or send me money and I might do it. This code is provided under the BSD style license… that is you can do what you want with it… except patent it!
- Dental Appointment [project #3 – size: 354k]
- Color Dialog example [project #5 – size: 85k]