For a guy who has written so much good stuff on software development, I think Joel is falling behind the times. His latest post talks about not being able to find an online calendar that he likes, which is fine - I don't think anyone has, yet - but then he uses that as a springboard to decry the new software technique that he refers to as, "Ship early and often".
I did a web search for that phrase to find an alternate viewpoint, and Joel is already in the top three sites for it; he's quite an influencer. But he seems to have a lot of disagreements with the techniques of agile programming, which includes this technique, there referred to as "Frequent Releases". Joel - and the article I linked - claim that releasing half-baked software isn't a good idea; true enough in itself, but I'm guessing that the calendars he checked out weren't buggy, bugs are bad things and no one wants to use buggy software, but that they simply didn't have all the features he was looking for. Releasing a calendar that has actual business value isn't releasing half-baked software; it's getting something out there that people can use, evaluate, give feedback on. It's a starting point for a conversation with the users. Look at Flickr; the most popular photo-sharing site on the planet started its life as a game tool, and evolved into its current incarnation by listening to the users and giving them what they want. That's how you create software.
"But", Joel says, "I'm not going to look at 30 Boxes again -- I've spent enough time evaluating it." He won't be back to see next week's version, or even next year's. (I wonder what calendar program he'll be using in the meantime?) I suspect he says this as a recognized authority on good software, in the belief that if he doesn't like it, it's probably not much good. That's probably true, too, but, there are one heck of a lot of other folks out there. They have blogs. They write about stuff they don't like too, and they also write about stuff they do like, if not nearly as often. I didn't look at any of these Ajax calendars at all, myself. But eventually, I suspect, one will turn out to rock the world, and at that point it will be all over Technorati, Icerocket, Memeorandum, Tailrank. At that point I won't care about Joel's opinion of them today. Joel probably won't either. When one of them wins out, he'll know by word of mouth, as we all will. Two or three of the others will have fallen apart by then, spending too much time writing features that no one wants, not getting anything released out on their website, not getting any buzz. And that is why, if you're writing software today, you should release early, and you should release often.
Ramblings of a software developer with a degree in bioinformatics. Agile development mixed with DNA sequencing - what could go wrong?
Monday, February 13, 2006
Friday, February 10, 2006
Generics at user meeting
I went to the Indianapolis .Net User Group meeting last night. They advertised Generics as the topic, and since I really didn't know anything about them, I was looking forward to it.
It turned out to be more interesting as a group dynamic than as a presentation. As a presentation, what I gleaned was that, from a user's perspective, generics are precisely identical to C++ templates. You declare a variable of a type that takes generics, and drop the specific type after the type name, in brackets: ArrayList foo = new ArrayList. Or you declare your own class and declare a after it to create your own generic.
From an implementer's standpoint, they're pretty darn different from C++ templates, as you might expect. And working out exactly what those differences might be engendered more discussion from the group than any topic I've yet seen. People were interested in how they were implemented, whether they would really avoid boxing, whether it was done at run time or compile time. There appeared to be two or three people who really knew their stuff, too - they were discussing what the IL that was generated looked like and that sort of thing. By the 45 minute mark, I was pretty sure that I was in for a two-hour or more night.
But amazingly, the entire presentation couldn't have been more than 35 minutes. Add in 25 minutes of discussion and the whole thing would have been over with before seven with plenty of time to draw door prizes and be out of there by 7:30.
But I don't know if that's what happened or not. The Q&A period was still going strong at 7:05 and I decided to bail. I hope my ticket didn't win a new car or something :)
It turned out to be more interesting as a group dynamic than as a presentation. As a presentation, what I gleaned was that, from a user's perspective, generics are precisely identical to C++ templates. You declare a variable of a type that takes generics, and drop the specific type after the type name, in brackets: ArrayList
From an implementer's standpoint, they're pretty darn different from C++ templates, as you might expect. And working out exactly what those differences might be engendered more discussion from the group than any topic I've yet seen. People were interested in how they were implemented, whether they would really avoid boxing, whether it was done at run time or compile time. There appeared to be two or three people who really knew their stuff, too - they were discussing what the IL that was generated looked like and that sort of thing. By the 45 minute mark, I was pretty sure that I was in for a two-hour or more night.
But amazingly, the entire presentation couldn't have been more than 35 minutes. Add in 25 minutes of discussion and the whole thing would have been over with before seven with plenty of time to draw door prizes and be out of there by 7:30.
But I don't know if that's what happened or not. The Q&A period was still going strong at 7:05 and I decided to bail. I hope my ticket didn't win a new car or something :)
Wednesday, February 08, 2006
ISO
I wrote a while ago about how ISO can actually be used as a positive thing for a company, which I suppose most developers at the grunt level would disagree with. It's true though: you just have to use it to describe your processes, rather than prescribe them.
There is a basic dichotomy, however: The company management may not have the least interest in improving the processes. They just want the pretty sticker for the front door that says, "Yes indeed! We're ISO approved! You can do business with us!" After that, they may not give a fig whether or not the processes are actually being followed, except to the extent that they won't get into legal trouble. This is why so many developers hate ISO. For ten months out of the year, they're told to bypass, sneak around, don't bother with the process, we have to get those customers happy. Or if they follow a process, they may get penalized for it. "What do you mean it'll take you two months to do that? We can't put that on the form! Put down three weeks!" Then, of course, when it does take two months, everyone has to work overtime since the project is so far behind schedule.
For the other two months of the year, they're told, "OK, here's the process. You have to have it memorized. If an auditor comes by, make sure you have the document in front of you. Just read it to the auditor. Don't make trouble. Don't volunteer anything. We just want our little sticker; we don't care about the process."
It's a shame. There's real value in ISO. I wonder if there are any companies that can find it?
There is a basic dichotomy, however: The company management may not have the least interest in improving the processes. They just want the pretty sticker for the front door that says, "Yes indeed! We're ISO approved! You can do business with us!" After that, they may not give a fig whether or not the processes are actually being followed, except to the extent that they won't get into legal trouble. This is why so many developers hate ISO. For ten months out of the year, they're told to bypass, sneak around, don't bother with the process, we have to get those customers happy. Or if they follow a process, they may get penalized for it. "What do you mean it'll take you two months to do that? We can't put that on the form! Put down three weeks!" Then, of course, when it does take two months, everyone has to work overtime since the project is so far behind schedule.
For the other two months of the year, they're told, "OK, here's the process. You have to have it memorized. If an auditor comes by, make sure you have the document in front of you. Just read it to the auditor. Don't make trouble. Don't volunteer anything. We just want our little sticker; we don't care about the process."
It's a shame. There's real value in ISO. I wonder if there are any companies that can find it?
Tuesday, January 31, 2006
A good Informatics web site
When I complain about something, I do like to follow up if the problem is addressed, or corrected, or even vaguely not quite as bad as I thought. I wrote here about the IU School of Informatics web site and how I was pretty unimpressed with it, for what should really be a school on the cutting edge. Well, even if you can't find it from the main page, bubbling up from the bottom are some good sites. This one on a talk series about complex systems is very nice - it has the expected abstracts, speakers, times & dates, and things; but also includes links to the slide decks and podcasts of the existing talks! Now that's what I'm talking about! It's not perfect, of course - I'd like to have forums or comment sections for each individual talk, as well as an RSS feed so I can grab the talks with a podcatcher - but it's one heck of a lot more interesting than the Informatics main page. Well done, Katy Börner, and thanks to Justin Donaldson for the link.
Friday, December 23, 2005
Software testing job opportunities
Are you a software tester? Come to Indianapolis and join ProSolv, which will be adding 50 new jobs next year, and immediately adding a quality manager and a software tester. Visit the job descriptions on Monster, or just send me a note and I'll see your resume gets to the right place!
Icerocket tags
Prosolv
Medical Software
Testing
Icerocket tags
Prosolv
Medical Software
Testing
Wednesday, December 21, 2005
Responses from the Senators
I posted here about writing a letter to the Indiana senators, Richard Lugar and Evan Bayh, about the Coburn anti-pork amendments. Finally this week I heard back from both of them. Senator Lugar sent a form letter, although it was right on topic, and asserted that the "Bridge to Nowhere" was not getting any money, although I haven't verified that yet. A staffer of Senator Bayh's wrote me, though, just saying he received my inquiry and wanted me to call him. Huh! I'll have to do that and see what he has to say.
Tuesday, December 20, 2005
Major victory for science
Judge John Jones determined in the Dover, PA court case that Intelligent Design should not be taught as a reasonable scientific alternative to evolution. Well done! But the judge went beyond that, finding that ID is not good science, that the yahoos who brought the case were wasting everyone's time, and all in all wrote a decision that I completely agree with in every way. Can we just project him straight to the Supreme Court? Timothy Sandefur posts a succinct summary of the decision over at the Panda's Thumb. Congratulations to all involved!
Tuesday, December 13, 2005
Miscellania
Things I have been doing while not blogging:
- Sudoku. The local paper finally started putting one in, starting with an easy one on Mondays and getting harder each day until Saturday. I got about half of them the first week. I need to go over this paper in more detail though. I figure another week or two until I get bored :)
- Jigsaw. Got a new jigsaw puzzle (1000 pieces ) and my four-year-old and I started to work on it. Haven't looked at it since the Sudoku though!
- LibraryThing. A fun site that lets you catalog and tag books. You're only allowed
100200 free entries, but the $25 lifetime fee is pretty enticing. I can just see it becoming so popular that even the lifers have to pay extra for new features, though. - Yahoo Answers. An evil combination of points, social software, trivia and opinion that I can't resist coming back to several times a day to check on the new questions. Haven't gotten any hugely new useful information out of it, but I bet I get to level 2 soon.
- Ars Indiana. Don't know if this will go anywhere, but it's my new blog where I intend to put all my cultural-type posts. Put one up on the B.B. King concert last week.
Thursday, December 08, 2005
Way To Go Indiana!
Thanks to the Panda's Thumb for referencing the Fordham State of Science report. In it, Indiana receives an A and an overall rating of 91%, fifth in the nation. That is an amazing achievement, especially considering how close the forces of darkness are. Nice job, Hoosiers!
Bloomington as energy pill
Wocka wocka wocka. Looks like Bloomington is about to be eaten by Pac-Man.
Tuesday, November 22, 2005
No images allowed in the app_data folder
I had my first opportunity today to try to create a web site with Visual Studio 2005. I made it about two steps before running into a brick wall. The concept of Master Pages seems like a really cool one, but I'm not sure how to make it work together with CSS and maybe two or three user controls. So I tried to set up a master page; no problem; tried to associate default.aspx with it; problem. The property is grayed out. A little research told me that the field could be filled in through code in the @page declaration, so I tried adding that with trepidation. I was pretty sure that the field was grayed out for a reason, and sure enough, that didn't get me what I was looking for.
I quickly found out that "Content" pages are the only kind of page that can be associated with master pages, but all the intuitions I've built up about finding things don't apply to 2005. For example, I tried to "Add New Item" to the solution, expecting to find "Content Page" as an option. No dice. I tried looking through the toolbox for something I could drag onto the page to make it a content page; nothing. So I did quite a bit of additional research and poking around on the web, and in Dev Studio, and in the Dev Studio help. But it took me quite a long time to actually find the solution, which I did by trial-and-error: right-click in the content placeholder in the master page and choose "Add Content Page". I'm sure I could have found help on this...somewhere.
This was directly followed by problem #2; I simply tried to add an image to my page. Copy-and-pasting from VS 2003 on my system failed, to my mild surprise, but then I noticed this nice "App_Data" folder in the project, and it was clear that any images or sounds needed to go here. Right-click on it, add new item, and drag the picture to my page, no problem!
Except that when I hit F5, no image is to be seen. Back to the web. This time, there's a fundamental problem: I can't figure out any terms to search for that describe my problem with any hope of clustering to the right solution. I tried "visual studio app_data image doesn't show up", "asp.net image failing", "Visual Studio 2005 images", "visual studio 2005 add jpg to web page", but all these terms give me much too generic results back. If the solution to my problem was in one of those result sets, it must have been on page 37 at least.
Finally, I went to the Microsoft forums, and specifically to forums.asp.net . Here, a search for app_data turned up dozens of results, and I tried to narrow it down by searching for "app_data debugging", which was what I was trying to do. Bingo! By sheer luck it turned out that the problem involves permissions and running inside the debugger, but the fact of the matter is that the app_data folder is not supposed to hold images at all, only databases.
I added a separate folder for the images and everything worked fine. Whew. What adventures await me in Visual Studio tomorrow?
Icerocket tags
Visual+Studio
ASP.NET
Software Development
I quickly found out that "Content" pages are the only kind of page that can be associated with master pages, but all the intuitions I've built up about finding things don't apply to 2005. For example, I tried to "Add New Item" to the solution, expecting to find "Content Page" as an option. No dice. I tried looking through the toolbox for something I could drag onto the page to make it a content page; nothing. So I did quite a bit of additional research and poking around on the web, and in Dev Studio, and in the Dev Studio help. But it took me quite a long time to actually find the solution, which I did by trial-and-error: right-click in the content placeholder in the master page and choose "Add Content Page". I'm sure I could have found help on this...somewhere.
This was directly followed by problem #2; I simply tried to add an image to my page. Copy-and-pasting from VS 2003 on my system failed, to my mild surprise, but then I noticed this nice "App_Data" folder in the project, and it was clear that any images or sounds needed to go here. Right-click on it, add new item, and drag the picture to my page, no problem!
Except that when I hit F5, no image is to be seen. Back to the web. This time, there's a fundamental problem: I can't figure out any terms to search for that describe my problem with any hope of clustering to the right solution. I tried "visual studio app_data image doesn't show up", "asp.net image failing", "Visual Studio 2005 images", "visual studio 2005 add jpg to web page", but all these terms give me much too generic results back. If the solution to my problem was in one of those result sets, it must have been on page 37 at least.
Finally, I went to the Microsoft forums, and specifically to forums.asp.net . Here, a search for app_data turned up dozens of results, and I tried to narrow it down by searching for "app_data debugging", which was what I was trying to do. Bingo! By sheer luck it turned out that the problem involves permissions and running inside the debugger, but the fact of the matter is that the app_data folder is not supposed to hold images at all, only databases.
I added a separate folder for the images and everything worked fine. Whew. What adventures await me in Visual Studio tomorrow?
Icerocket tags
Visual+Studio
ASP.NET
Software Development
Thursday, November 17, 2005
Indianapolis Workshop on Software Testing
This looks like an interesting, if tiny, local software testing group. I found it through this post, from Mike Kelly, who appears to be the ringleader, with an impressive list of publications on his site. Mike, how about blogging more than once a month though, huh?
They say the best way to get an invite to their meeting is to submit a paper. I think I'd like to sit in on just one or two first though; maybe I'll try to finagle an invite from somebody. I joined this group anyway, which was free. Don't suppose I'll ever hear from them though.
Edit: fixed link
They say the best way to get an invite to their meeting is to submit a paper. I think I'd like to sit in on just one or two first though; maybe I'll try to finagle an invite from somebody. I joined this group anyway, which was free. Don't suppose I'll ever hear from them though.
Edit: fixed link
Monday, November 14, 2005
Customer Service: Compare and Contrast
Way back when I posted about sending a note to the Bloomington newspaper about adding an RSS feed to their website. I did that again this week, at the site Macadamian.com, which has a regular column called Critical Path, tips for software managers. Got almost an identical response, actually, with a quick response from an editor saying they were considering it, followed a few hours later with a link, and now I'm subscribed to it in my feedreader. Very nice; great customer service.
Now a month or so ago, I sent not the exact same question, but a similar question to the Indiana University School of Informatics, where I think I might be an alumni. (I was for a while, and then I wasn't again, but now I hear that the IU Computer Science department has been assimilated, and so I must be again. Unless I'm not. Anyway.) The school has an RSS feed, which is good, but the unfortunate bit is that the feed is just old-school marketing, PR stuff. IU Research in Spotlight at Seattle Supercomputing Conference. Now, by no means do I object to reading that stuff; a lot of it is important and interesting. But if this is a cutting-edge school, I want a cutting-edge web page. I want to read student and professor blogs, with comments, utilizing new technology to block spam. I want to see wikis, and web pages with Ajax components. I want podcasts of lectures and symposiums. I don't want a bunch of static web pages that no one is ever going to look at, except for the one time a month they need to look up an email address.
So, on their comment page, I wrote up my request.
No response. At all. My comment was ignored completely.
So what's the deal here? Does the industry just change too fast for universities to keep up with? Is it a problem specific to Indiana University? Or is it just that they're not a business and therefore have no interest in responding to customer requests?
I don't know. I'd like to know.
Icerocket tags
IndianaUniversity
RSS
Customer Service
Web 2.0
Now a month or so ago, I sent not the exact same question, but a similar question to the Indiana University School of Informatics, where I think I might be an alumni. (I was for a while, and then I wasn't again, but now I hear that the IU Computer Science department has been assimilated, and so I must be again. Unless I'm not. Anyway.) The school has an RSS feed, which is good, but the unfortunate bit is that the feed is just old-school marketing, PR stuff. IU Research in Spotlight at Seattle Supercomputing Conference. Now, by no means do I object to reading that stuff; a lot of it is important and interesting. But if this is a cutting-edge school, I want a cutting-edge web page. I want to read student and professor blogs, with comments, utilizing new technology to block spam. I want to see wikis, and web pages with Ajax components. I want podcasts of lectures and symposiums. I don't want a bunch of static web pages that no one is ever going to look at, except for the one time a month they need to look up an email address.
So, on their comment page, I wrote up my request.
No response. At all. My comment was ignored completely.
So what's the deal here? Does the industry just change too fast for universities to keep up with? Is it a problem specific to Indiana University? Or is it just that they're not a business and therefore have no interest in responding to customer requests?
I don't know. I'd like to know.
Icerocket tags
IndianaUniversity
RSS
Customer Service
Web 2.0
Saturday, November 12, 2005
Midsummer Night's Dream at IU Opera Theater
I went and read the Peter Jacobi article in the Herald-Times before writing this. He's got something of a reputation for sticking to positive items in his reviews, and if that's true, this opera must have been deeply troubled, since he presents a series of negative comments from the director, even if you have to read between the lines a little to get them. "Lack of stagecraft", "Not enough rehearsal time", "Children may need to be miked", were some of his comments.
All that said, I thought the opera was stunning. Now, when I write reviews, I write them not just of the production, but of the opera. I can't compare this production to the debut at the Aldeburgh Festival in 1960, or even the one at the London Coliseum in 1994. So I wasn't sure if the role of Oberon was always played by a countertenor or if that was just someone's cool idea (it always is) or if Puck is always a ballet dancer who shouts his lines (he shouts, but isn't necessarily a dancer).
And I wasn't blown away by Oberon at first. It took me a while to get used to the rhythm of his lines, but once I did, I thought it fit in perfectly with the beautiful mystic green in the abstract sets and lighting. The fairy costumes were done in modern punk, which was bright and colorful enough to work perfectly with the sets, and the four lovers were dressed in street clothes. Lysander came out in a T-shirt with the name of a fraternity on it, which got a big laugh when Oberon instructed Puck to "Look for a mortal in Athenian dress." (Athenian, fraternities, Greeks, get it?).
Some of the children did have to be miked; of the four majors, I think it was two and two, but that didn't matter. As far as stagecraft, it's certainly been a long-held belief of mine that singers can't act, which has been true here at IU at least. So the fight scene was drab at best. The rude mechanicals weren't bad - I suppose you can tell a good actor by how convincingly he can badly act - and Bottom was pretty good, although my "feel" for the character has always been a bit more boorish.
Of course, that's a judgment on the play. And while I'm at it, I could have happily left after Act 2, because I always feel badly for the mechanicals when everyone makes fun of them. But the music, the countertenor, the costumes, the dancer, in the first two acts, all combined together to make this one of the three or four best operas I've seen at IU. Dreamy.
Icerocket tags
Opera
Britten
IndianaUniversity
MidsummerNightsDream
All that said, I thought the opera was stunning. Now, when I write reviews, I write them not just of the production, but of the opera. I can't compare this production to the debut at the Aldeburgh Festival in 1960, or even the one at the London Coliseum in 1994. So I wasn't sure if the role of Oberon was always played by a countertenor or if that was just someone's cool idea (it always is) or if Puck is always a ballet dancer who shouts his lines (he shouts, but isn't necessarily a dancer).
And I wasn't blown away by Oberon at first. It took me a while to get used to the rhythm of his lines, but once I did, I thought it fit in perfectly with the beautiful mystic green in the abstract sets and lighting. The fairy costumes were done in modern punk, which was bright and colorful enough to work perfectly with the sets, and the four lovers were dressed in street clothes. Lysander came out in a T-shirt with the name of a fraternity on it, which got a big laugh when Oberon instructed Puck to "Look for a mortal in Athenian dress." (Athenian, fraternities, Greeks, get it?).
Some of the children did have to be miked; of the four majors, I think it was two and two, but that didn't matter. As far as stagecraft, it's certainly been a long-held belief of mine that singers can't act, which has been true here at IU at least. So the fight scene was drab at best. The rude mechanicals weren't bad - I suppose you can tell a good actor by how convincingly he can badly act - and Bottom was pretty good, although my "feel" for the character has always been a bit more boorish.
Of course, that's a judgment on the play. And while I'm at it, I could have happily left after Act 2, because I always feel badly for the mechanicals when everyone makes fun of them. But the music, the countertenor, the costumes, the dancer, in the first two acts, all combined together to make this one of the three or four best operas I've seen at IU. Dreamy.
Icerocket tags
Opera
Britten
IndianaUniversity
MidsummerNightsDream
Friday, November 11, 2005
Automated testing using Ruby
So here’s the problem statement: Write a Ruby script that will open a database, check it for accuracy, and if it is NOT accurate, send an email describing the issues.
So this will require (a) opening a database in Ruby, (b) running a test in Ruby, and (c) sending an email in Ruby. None of these is probably very difficult, but not being a Ruby expert I went searching for examples on the web. I wasn’t thrilled by the examples I found for these tasks, so I thought I’d write up what I did.
Databases: This is code that will open an Access database and grab all of the rows in the Exam table:
Tests: I started by writing my own little test procedures, until I stepped back and looked at what I’d done – I’d developed a rudimentary RUnit, along the lines of NUnit or CPPUnit. At that point I was sure that it had been done before, and it had – and not only that, but it turned out to be part of the Ruby standard library. Although what I’m doing here isn’t really what I would call unit testing, it’s close enough that I decided to use that instead.
Email: There are some good email sending examples around. I started with this one and ended here:
Now, my goal was for the results of the test to be put into the email. That took a long time to figure out. Step 1 of the solution was to realize what the automated test runner was doing under the covers, and take advantage of it. So I replaced the run(DatabaseTest) line with this:
Step 2 of the solution is to get the information from the test in a format that I can put in an email. It turns out that TestRunner.new can take a parameter defining where output should go, which defaults to STDOUT. I could have redirected it to a file, but that seemed like unnecessary work, so after a lot of searching I came up with what I was looking for, StringIO, which takes output and writes it to a string:
I also changed the default NORMAL verbosity parameter to VERBOSE. Then I replace the FailCounter “Failures found” line like this:
And that was it. I’m not going to glue all this code together here, since this post is already too long, but hopefully if you’re interested it should be straightforward. Good luck!
Icerocket tags
Prosolv
programming
ruby
So this will require (a) opening a database in Ruby, (b) running a test in Ruby, and (c) sending an email in Ruby. None of these is probably very difficult, but not being a Ruby expert I went searching for examples on the web. I wasn’t thrilled by the examples I found for these tasks, so I thought I’d write up what I did.
Databases: This is code that will open an Access database and grab all of the rows in the Exam table:
require 'dbi'
DBI.connect("DBI:ODBC:driver=Microsoft Access Driver
(*.mdb);dbq=" +
ENV['TESTINSTALLDIR'] + "db1.mdb ") do dbh
rows =
dbh.select_all('select * from Exam')
end
Tests: I started by writing my own little test procedures, until I stepped back and looked at what I’d done – I’d developed a rudimentary RUnit, along the lines of NUnit or CPPUnit. At that point I was sure that it had been done before, and it had – and not only that, but it turned out to be part of the Ruby standard library. Although what I’m doing here isn’t really what I would call unit testing, it’s close enough that I decided to use that instead.
require 'test/unit'
require 'test/unit/ui/console/testrunner'
class
DatabaseTest < Test::Unit::TestCase
def test_dbContents
assert(rows[1]["Media Type"] == "Image Server")
end
end
Test::Unit::UI::Console::TestRunner.run(DatabaseTest)
Email: There are some good email sending examples around. I started with this one and ended here:
require 'net/smtp'
class FailCounter
def TextBody()
email_text = <<END_EMAIL
To: "Ben Fulton"
<#{@to_addr}>
From: #{@from_addr}
Subject: #{@project}
automated test failure
An automated assertion failed for the project
#{@project}
#{@errors}
END_EMAIL
return email_text
end
def Finalize
if (@counter > 0)
Net::SMTP.start("myprovider.net") do smtp
smtp.sendmail( TextBody(),
@from_addr, @to_addr )
end
else
puts "No failures!"
end
end
end
Now, my goal was for the results of the test to be put into the email. That took a long time to figure out. Step 1 of the solution was to realize what the automated test runner was doing under the covers, and take advantage of it. So I replaced the run(DatabaseTest) line with this:
tr = Test::Unit::UI::Console::TestRunner.new( DownloaderTest)Now I have the results back in a TestResult, which I can examine for failures, so emails only go out if some tests actually failed:
passed = tr.start()
if (passed.failure_count() > 0 passed.error_count() > 0)
fc =
FailCounter.new
fc.Add( “Failures found” )
fc.Finalize()
end
Step 2 of the solution is to get the information from the test in a format that I can put in an email. It turns out that TestRunner.new can take a parameter defining where output should go, which defaults to STDOUT. I could have redirected it to a file, but that seemed like unnecessary work, so after a lot of searching I came up with what I was looking for, StringIO, which takes output and writes it to a string:
sio = StringIO.new
tr = Test::Unit::UI::Console::TestRunner.new(
DownloaderTest, Test::Unit::UI::VERBOSE, sio )
I also changed the default NORMAL verbosity parameter to VERBOSE. Then I replace the FailCounter “Failures found” line like this:
fc.Add( “Failures found: “ + sio.string )
And that was it. I’m not going to glue all this code together here, since this post is already too long, but hopefully if you’re interested it should be straightforward. Good luck!
Icerocket tags
Prosolv
programming
ruby
Thursday, November 10, 2005
New Hoosier basketball blog
I'm starting a new blog dedicated to Hoosier Hoops. Drop by if you have an interest!
Icerocket tags
Basketball
Hoosiers
Indiana
Sports
<
Icerocket tags
Basketball
Hoosiers
Indiana
Sports
<
Wednesday, November 09, 2005
Kansas school board redefines science
Build/Test machine
I posted here about our plans for updating the ProSolv build process. It's been going pretty well; the hallway machine is up and running, although I had to bring a table from home to set it up on, and now someone wants to buy it from me :)
Builds are scheduled for 6 PM each night, and an automated test script runs all day. Right now we just have a single script that takes about 15 minutes to run. It's powered by Ruby and by AutoHotKey, which works nicely as an automator. I especially like that the scripts are simple text files.
A lot of people don't quite understand what I'm trying to do. They look at the machine and say, "What's the point of running a test that doesn't log any results?" The answer is, that there is a lot of importance to just exercising the UI. If we have a build one day where you click on a study image and the application crashes, this test process will find that.
Nevertheless, as long as this machine is running scripts, there's no reason for it not to log results. I thought for a while that I would have to add code to the application to write out sensible log results, which is not a process to undertake lightly, but it occurred to me recently that the GUI manipulations that the script is doing mostly result in predictable changes to the file system and database. So I spent a little quality time with Ruby's DBI and Test/Unit modules, and wrote up some assertions that will send an email to me at the end of the script if the database isn't in the state I expect. It's only a start, but now I can add more assertions in the middle of the process, or add new assertions as I extend the test scripts. It's coming together very nicely!
I'm thinking also about modifying the machine to alternate test runs with kiosk-style data updates, such as how many files were compiled last night, or how many support calls were handled yesterday. It'll be interesting to see how people respond to that :)
Icerocket tags
Prosolv
Medical Software
Agile
Software Development
Builds are scheduled for 6 PM each night, and an automated test script runs all day. Right now we just have a single script that takes about 15 minutes to run. It's powered by Ruby and by AutoHotKey, which works nicely as an automator. I especially like that the scripts are simple text files.
A lot of people don't quite understand what I'm trying to do. They look at the machine and say, "What's the point of running a test that doesn't log any results?" The answer is, that there is a lot of importance to just exercising the UI. If we have a build one day where you click on a study image and the application crashes, this test process will find that.
Nevertheless, as long as this machine is running scripts, there's no reason for it not to log results. I thought for a while that I would have to add code to the application to write out sensible log results, which is not a process to undertake lightly, but it occurred to me recently that the GUI manipulations that the script is doing mostly result in predictable changes to the file system and database. So I spent a little quality time with Ruby's DBI and Test/Unit modules, and wrote up some assertions that will send an email to me at the end of the script if the database isn't in the state I expect. It's only a start, but now I can add more assertions in the middle of the process, or add new assertions as I extend the test scripts. It's coming together very nicely!
I'm thinking also about modifying the machine to alternate test runs with kiosk-style data updates, such as how many files were compiled last night, or how many support calls were handled yesterday. It'll be interesting to see how people respond to that :)
Icerocket tags
Prosolv
Medical Software
Agile
Software Development
Thursday, November 03, 2005
Gadgets and Office alive alive-o
Microsoft previewed its new Windows Live strategy yesterday. My reaction, along with a lot of other people's: It's a portal, and we don't want or need another portal, no matter how skillfully it's put together and how many neat gadgets are available on the site.
That said, here's what really got my attention in the announcement:
Windows Live™ is a set of personal Internet services and software...
So what exactly are we talking about, Internet services? Are we talking web services here? That would be cool. Here's what I want: The ability to add, to my site and not to Microsoft's, a Word document that can be edited by approved people. The document would ideally be stored on my site, but could then be bounced to a Microsoft service for some Ajax magic and editing. Is this the sort of thing that Office Live is going to make available. That would be awesome!
But I've gone searching around the web looking for any evidence that anything on Live is going to be addable to other web sites. Scoble said something - when does Scoble not say something? - but he didn't go into any details other than, "I’m still struggling to understand what I’ll get by putting a new Windows Live service on my blog or business site".
Robert, it depends on which direction it goes. I'd be thrilled to call out to a Windows Live web service as part of a mashup for my site - maybe a Click-To-Talk button using Messenger to dial my phone directly? - but if you're expecting me to make something available that users can only reach through the Live site, forget it.
So for me, the jury is still out until we get more details for developers.
Disclaimer: I own stock in Microsoft.
Icerocket tags
Microsoft
Windows Live
That said, here's what really got my attention in the announcement:
Windows Live™ is a set of personal Internet services and software...
So what exactly are we talking about, Internet services? Are we talking web services here? That would be cool. Here's what I want: The ability to add, to my site and not to Microsoft's, a Word document that can be edited by approved people. The document would ideally be stored on my site, but could then be bounced to a Microsoft service for some Ajax magic and editing. Is this the sort of thing that Office Live is going to make available. That would be awesome!
But I've gone searching around the web looking for any evidence that anything on Live is going to be addable to other web sites. Scoble said something - when does Scoble not say something? - but he didn't go into any details other than, "I’m still struggling to understand what I’ll get by putting a new Windows Live service on my blog or business site".
Robert, it depends on which direction it goes. I'd be thrilled to call out to a Windows Live web service as part of a mashup for my site - maybe a Click-To-Talk button using Messenger to dial my phone directly? - but if you're expecting me to make something available that users can only reach through the Live site, forget it.
So for me, the jury is still out until we get more details for developers.
Disclaimer: I own stock in Microsoft.
Icerocket tags
Microsoft
Windows Live
Subscribe to:
Posts (Atom)