Ramblings of a software developer with a degree in bioinformatics. Agile development mixed with DNA sequencing - what could go wrong?
Friday, April 13, 2007
FastTrack seminar, part 2
A few other features he went over were: Native XML store; Pivots; Top; and Rank; they all seem very nice but I'm not really in a position to judge how useful they would be in my work. I guess we'll see.
The final session was on "Business Intelligence". I didn't have any idea what that might involve, but it turned out to involve reporting. I wasn't aware that you can configure SQL Server to give you a project type of "Report" in Visual Studio fairly easily, and there's also a "Report Viewer" control that you can add in to your own ASP pages. I have to admit that I lost some of this lecture, as the presenter was having some trouble with his computer and the wireless was working nicely - for a change - so I took the time to mess around with some more of the AJAX demos that I was really interested in.
The seminar was held in the Glick Center, where the Indy NDA holds its meetings. It was a good venue to hold the couple of hundred people who showed up. Microsoft sprung for donuts and pizza, and I liked the idea of having a couple of arcade games for people to check out between sessions. I would have traded them for better wireless, though. There were also only power outlets on one end of the room. But there's only one really important highlight: through the door prizes, I am now the proud owner of a Zune :) Welcome to the social! (Hello? Is there anyone else in here?)
FastTrack seminar
I’m blogging today from a Microsoft FastTrack seminar. Perpetual Technologies in Indianapolis is putting this on in some sort of collaboration with Microsoft. It’s a free seminar – and I’m always up for a free seminar – with a keynote and six sessions in three time slots.
The keynote was OK. Steve Thompson from Microsoft gave a roadmap presentation of where they expect enterprise technology to go over the next several years. The majority of audience were DBA’s rather than developers, so they may have had more interest than I did. As important things, Steve brought up Office, Microsoft Server, and mobile applications; and also Microsoft Business Solutions, about which I don’t know much. The goal, I guess, is to get enterprises on the Services Oriented Architecture bandwagon, and also to move towards virtualization as an important technique for scalability. He also discussed voice and VOIP near the end of the presentation, and how our standard voice data paradigm – blinking message lights and busy signals – is really out of date. This is something I’ve known since Interactive Intelligence was trying to get everyone out of that as well; don’t know how that effort is going, but we still have the copper wires at my last couple of jobs.
First session was on the Ajax.Asp.Net control library, which looks pretty cool. It was given by a younger guy from - I think - Crowe Chizek, and he did a creditable job, although I would have happily spent a couple of additional hours learning the subject, given the opportunity. It's interesting that most of the effects it allows you to create are already implemented in Javascript in the application I'm currently working on - a tribute to the skills of the original writers of this app, I think. But, you could certainly write a lot less code to get the same effects using this library. It looks pretty easy to use, although .Net 2.0 is required: one msi to install on your machine, and one zip file with controls and demos. It'll definitely be useful in my own web applications, anyway!
Monday, April 02, 2007
Javascript testing with NUnit
There are at least two if not more versions of JSUnit, one here and the other here. But there is one fundamental requirement I have for any unit testing framework, and that is that it has to integrate into an automated build script. For example, suppose you're using CruiseControl. It's got an NUnit step in it; once you write up your tests, it's the matter of a few minutes' configuration to get them running as part of the build, and it's very satisfying to watch the test counts grow as more builds are done. 117 tests run, no failures. 123 tests run, no failures. 135 tests run, no failures.
So if the framework doesn't work with automated builds, it's no good to me. Do they? I'm not sure. Edward Hieatt's version seems primarily to require a browser, although he does provide a JSUnit Server which appears to be designed to work from Ant or Java, but doesn't have any particular support for Nant or ASP.Net that I could find. Jörg Schaible's version is even less able to work in Windows; starting from the download which is only provided in tar.gz format. The documentation states that it can be run from the command line; if so that's easily adaptable to an automated build, but I didn't even take the trouble to download it, suspecting that it wouldn't even run on Windows.
So I was looking around for other alternatives, and I ran across this post. I'm sure that not everything you can write in Javascript can be evaluated by the .Net Javascript evaluator, but when you write a lot of tests you get used to keeping functionality nicely isolated.
I'm not sure what the best way to use this is. My first couple of tests have the Javascript in the ASP.Net codebehind file, where they can be unit tested at test time and Response.Write-n at runtime; but there's a few other possibilities; keeping all the Javascript in a separate file to be read in at test time, and using it as an include at runtime perhaps.
So I have a lot of work to do on this technique. But it seems promising!
Wednesday, March 14, 2007
Sports and power ranking systems
But Ken has something much more valuable on his site than a ranking system: a game database. For the most part, this information is not available in any easy-to-get-at-form, so if you want to create the rankings, you have to get down and do the data entry every year, which is why I've never created any system that lasted more than a year. But now, with Ken's files, maybe something useful could be done.
So I did a little research, thinking that the most effective system probably was going to be some kind of balance between a single-game Pythagorean expectation and strength of the opponent, repeating until the numbers converged. I'm sure I read a paper about that some years ago, but I can't find it now. Instead, I found this, a technique which doesn't take into account the scores at all!
But it's interesting, because it's based on the age-old theory of game commutativity; to wit: my team beat team X and team X beat your team, so my team is better than yours. Yah. It's a principle that's been widely derided for years, and people make hobbies out of finding weird cycles of games proving that Prairie View A&M is really better than Michigan after all. But there's obviously a kernel of truth in it. The paper goes into a lot of detail about setting up the graphs and putting weights on things and, you know, math, but really the principle is pretty simple. It works like this:
For each game that my team wins, it gets partial credit for each win the team it beat has.
For each game that my team loses, it gets partial debit for each loss the team it lost to has.
That's it. The questions are, do you want to go deeper and credit my team for a third or fourth level, and just how much credit do you give for each "indirect win"? The second question is easier for our purposes, because the authors of the paper do a lot more of that math stuff and come up with a simple equation for us:
Let k equal the average number of games played by each team.
The credit is (2k) / ((k^2) - k ).
For a third level, you'd square the credit, etc. But do you want to do the third level? Say the credit is .1, or 10% of a win. For the third level the credit would be .01, which doesn't seem like much, but you're talking quite a few games, too. So I'm going to have to use Ken's game database and do some research on this. Any code I create will be open-source, of course. I won't be able to do anything useful before this year's games start, but next year, watch out!
Monday, March 12, 2007
Generating classes from XML in .Net
Except it didn't work. The serializer threw a File Not Found error. When the XMLSerializer class has a new type it needs to serialize, it just generates the code on-the-fly and throws it into a new assembly with a name like olkdzxc.dll, and returns the class from it; but when I called the serializer, it told me that olkdzxc.dll wasn't found. Very mysterious.
Luckily, I remembered Chris Sells' old tool that was made for debugging exactly this problem, XMLSerializerPreCompiler, which lets you see the compiler errors that occur while the code is being serialized, and one of those led me to the problem: When generating the class code for an array of objects, XSD was adding an extra set of brackets in. So instead of having a class member myFoo[], I had a member myFoo[][]. Why did XSD do this? I have a hard time believing it's just a silly bug. I'd love to hear if anyone knows.
Thursday, March 08, 2007
Online and offline communities
So the recommendation, for church leaders at least, is to define more exactly what groups already exist in the church. Church leaders want every small group to provide intimacy, but that's really only one way to relate to a group: the group can be more of a public group, or more of a social group, or just a personal group, and churches can take advantage of knowing how these groups relate to each other to encourage more fellowship in the church.
Is it applicable for online groups? I'm not sure. Here's the issue: at least if you're working with a church congregation, you can call a meeting, bring everyone in, discuss the issues, maybe figure out what the existing groups are and what they're doing. You can't do that online. Maybe the best thing someone tasked with creating an online group can do is simply to monitor the group, or groups, and make sure that the company is willing to go wherever the group takes them. Seems obvious, but is it? Check out Yahoo's handling of Flickr accounts, or Facebook's decision to allow non-college students to join. Or check out a lot of different online forums that die because people thought they were cool at first, but then they never changed again and everyone left for more responsive pastures.
I don't know the answers. But it's an interesting bunch of questions.
Tuesday, March 06, 2007
Quality of Local Political Blogs: Compare and Contrast
Or you could read the Indianapolis Star. But I don't have much trust in the Main Stream Media. Their goal never seems to be so much the truth as it is finding someone who disagrees, no matter how foolish or inane that person may be, and unless you already know the subject matter pretty well, you can't tell from the way the article is written which is the inane perspective and which is sensible. So that leads you back to blogs.
Here are four local politicians who have been on my mind lately: Marty Hawk, Dave Rollo, Scott Tibbs, Sophia Travis. How easy is it to get their perspectives on local issues?
Far and away the best online writer in this group is Sophia Travis. If you just looked at the MSM, you wouldn't think much of her except that she's a little flaky (an accordion player with political aspirations? Weird!) But when you read her blog, not only is she talking about the tough political issues, but she's following up on comments people leave; leaving comments on other local blogs; sending in questions to local online chats; really being a part of the conversation about what Monroe County is, and what it should be. It would be great if every politician had an online presence like Sophia's.
Second best is Scott Tibbs. I actually started this post thinking about what I don't like about Scott's blog: there's no real comment area on it, just a link to a bulletin board, which I assume is also run by him, and which you have to register on before you can comment. He says that's to avoid spammers, but obviously a lot of bloggers manage to allow real comments without going to that extreme. But the point is, he writes, and discusses, and allows discussion of his views in some form. So I can't take too much umbrage, especially compared to:
Dave Rollo. He's got a web page; it's a start. The page is very static; the main page has a "last updated" date on it, but there's nothing to find what was there before. There's only a few paragraphs discussing his views, and there's no way to leave public comments, and if he's ever left a comment online I haven't seen it. Start a blog, Dave. He did participate in an online chat recently, and having a web page puts him ahead of:
Marty Hawk. Not much to say here, because I really couldn't find out anything. She gets quoted in the local paper from time to time, and you can go read the minutes of the Monroe Council meetings and find some things she said. But right now, the number 2 hit on Google when you search for her name is the article I wrote on her last week. So we really don't know too much about her at all. It leaves me defining her, rather than having her defining herself. If that's what she wants, then that's fine.
So that's where we are in online local politics in Bloomington. It's a start. But I wish there were a lot more politicians in the conversation.
Thursday, February 22, 2007
Bookplates
One principle of agile development that doesn't get a lot of attention is Sitting Together. The point of the principle is simple: agility requires communication, and there's no faster communication than shouting over your shoulder to the guy behind you! I think it's a bit overblown; communication is hugely important, but with the advent of instant messaging, not only do you know that Dan down the hall is sitting at his desk, but you even know that Mike down in Dallas is, and they're just as likely to respond to your ten-second query as Jennifer two desks away is. The participants have to be in pretty close time zones, though; Suresh in India just isn't gonna respond to your IM no matter how many times you check his status during the working day!
In my new company we sit together, which is something I've never done anywhere else. I've found that one disadvantage is that my desk doesn't have space by half for my programming library, which I like to keep at the office for easier reference. (Okay, so I haven't referred to the Differential Equations textbook since I left the videogame industry. Nevertheless.) So I'm taking over a couple of shelves nearby, but instead of just writing my name in all my books, I thought it would be more fun to make bookplates for them. Here's the design I made:
I'm no graphic designer, but I thought it was OK. If you want to modify it for your own use, feel free; I've made a Word template available for use with the Avery labels that come six to a page; you can get it here, or download the Avery bookplate for the four-a-page labels. Hey, my favorite book site LibraryThing, why don't you provide some of these? I'm sure there are dozens of people who can do better!
Friday, February 16, 2007
Government RSS Feeds
What would you like to see on your local government web site?
Thursday, February 08, 2007
Change is good
Do ideas by the Gang of Four, Steve McConnell, Martin Fowler, Tom DeMarco and Kent Beck resonate with you? Join an experienced team of developers in an Agile environment...
So I'm no longer working in Indianapolis for the first time in more than ten years - I'm not sure what I'm going to do with all the extra time!
(I've also set up a LinkedIn account as per Guy Kawasaki's suggestion. Drop me a line if you want to connect to me.)
Tuesday, February 06, 2007
Prius anti-skid props
Up I started, accelerating to about 25 MPH and getting at least 30 or 40 yards before realizing that the plow hadn't been by recently enough to make a difference. It was easily the worst snow I'd ever tackled on the hill before, and it's not fun having to back down that slope, let me tell you. Especially with the literal vertical drop on the side that sends you ten feet straight down before the drop is conveniently stopped by a tree.
But here's what the Prius does, straight from the brochure:
Motor Traction Control (TRC) – TRC uses sensors which automatically apply the brake to any slipping wheel while delivering more power to the wheels with greater traction.
Vehicle Stability Control (VSC)* – VSC senses oversteer (tail slide) and understeer (nose pushing forward), and managing the power delivered to each wheel.
It was a beautiful thing. I kept the accelerator right around 25 and the car took over from there. It never slipped sideways, never fishtailed, and actually applied acceleration to the wheels in bursts of a couple of hundred milliseconds at a time, followed by coasting to grab what little traction it could, and then accelerating again, and I was at the top of the hill as nice as pie. I only felt guilty for not stopping the cars I passed and telling them, "Your car got TRC? Got VSC? Then DON'T try the hill tonight! Just because my car can do it doesn't mean yours can!" What a beautifully engineered vehicle.
Thursday, February 01, 2007
WiX installer and Error 2708 (No entries found in the file table)
Not so fast. Compile up the install and run it:
Error 2708: No entries found in the file table.
Say what? Must have been a file system glitch. Open up the MSI with Orca and check the file table; well, yes, it has lots of entries, no trouble there. What's going on here?
Buried deep in the search results for the error code I found this page. The comment from Jane D pointed out that she'd seen this error while having problems with the Duplicate File table rather than the File table - and that jogged my memory. In a separate component I had a CopyFile element that was pointing to my file, and it still had the old file ID reference, now orphaned. Update the reference, recompile, and bingo. Working install.
I see this as a bug in the WiX linker: why did it build the MSI with this unresolved reference? I'll have to post something to the mailing list at some point.
Thursday, January 25, 2007
Credibility redux
I've been a loyal subscriber of Dare Obasanjo for at least a couple of years now, and a happy user of RSS Bandit, although I'm now evolving a bit into Google Reader for its mobile capabilities. So when I read his article about changing Wikipedia I didn't think much about it; mildly interesting but not a big deal, and his changes in the TechCrunch entry certainly deserved reverting under the Wikipedia "No experimenting" clause. But Michael Arrington's reaction was out of line:
A Microsoft employee, who took issue with this blog post, vandalized the TechCrunch Wikipedia entry and wrote about it on his blog.
That is a misuse of the word vandalized by any stretch of the imagination. Dare added maybe a couple of sentences with a dry, unemotional tone. He put up an apology in the comments, too, but in two or three comments (which have now disappeared) Arrington repeated the vandalism charge, and he's showing no signs of backing down. IMO, there is a serious credibility gap in repeating an emotionally charged word like that in response to some rather minor issues. I'd never heard of Arrington before, or read TechCrunch. This little flap doesn't make me want to, either. Michael Arrington joins Andrew Orlowski in my credibility book.
Wednesday, January 24, 2007
B2B 2.0
There are lots of definitions of Web 2.0, but at least one of the principles that seems to define it is "Online Community". Flickr, YouTube, Yahoo! Answers. Online communities have been around since the beginning, of course, at first through mailing lists and NNTP servers, later through applications and, eventually, web sites. When we at Sunstorm were working on a version of Deer Hunter that was going to have a multiplayer mode - we had only the vaguest idea how that might work - I went to a seminar at the Game Developer's Conference on the topic of building online communities. We did a little work towards it; our web site ran some decent forum software, but in 1998 the Deer Hunter target market did not actually overlap with people who spent a lot of time online, which was hampering.
At least we had a good size target market. Combine the lush outdoor scenery of Deer Hunter 3 with a visionary concept of online communication, and we might have had our own version of Second Life on our hands, five years before anyone else. But of course, we didn't have the vision thing. It's still the hardest part of launching a consumer oriented web site. Wal-Mart tried it. Xanga was hip for a while. Not much there there, now.
But what about an online community as part of a B2B play? Not a corporate MySpace, but a self-selecting group made up of users of your product. If your target is geeks you might have a leg up here; Kinook has a nice online forum. Axosoft has forums and bloggers. The forum we put up at Interactive Intelligence seems to be buzzing along nicely. When I was there the customer base was very technical; that may be less so as their customer base has grown. But I think an actual, product-based online community is very workable for a business-to-business company. More later.
Thursday, January 18, 2007
The blogging split
So what happened? Did everyone just sort of "get it" ? I would say more that the world is sort of partitioning itself off now. On the corporate side, corporations are splitting into sort of "New Media" companies, Microsoft and Sun, where bloggers are allowed almost free rein, and "Old Media" companies, Wal-Mart say, or GM, where they feel it's very important that the company try to keep absolute control of the image of the company and don't allow their employees much say. That's not to say there isn't crossover; I understand one Microsoft division wanted Robert Scoble fired after he said something critical about the company, while GM actually has a blog...a rather corporate-oriented one, to be sure, but it does allow comments and they don't appear to censor them for criticizing the company.
On the other hand bloggers, or better I should say people, are splitting off as well. You see a lot of blogs around where someone started the blog, posted a few things, then apparently dropped off the face of the earth. Or possibly they write an article once a month or so apologizing for not blogging more and promising to do better from now on. Hey, blogging is hard, and most of us aren't getting paid for it. I've been known to go a month or two without posting. So there's more of a split between people who blog and people who read.
So I suspect what's happening is that people who blog, are moving over to work for companies who support blogging! Maybe not a momentous insight, but I can't think of anyone else who's come out and said it. People who don't blog, can stick around with the companies that are trying so hard to control their messages. That's why, I suspect, that you haven't heard much noise about doocing recently. People have sorted out where they belong; companies have clearer policies about what they expect and employees have a clearer understanding of what they're looking for.
(If they don't, I guess they'll have to buy Shel Israel's new book to clarify things.)
Wednesday, January 10, 2007
Building a cathedral
Thanks to Grady Booch and Joe Marasco for the story!
Wednesday, December 13, 2006
New Technology High School
I'm hearing some contradictory things about the school, though. For example, a questioner asked last night about the per-student cost of the school. The response was that the school doesn't get any more from the state than any other school would get, and that technology was the biggest expense. But the little handout we got actually says, small school and class size allows students to take responsibility for their own learning...So I wonder which it is. I'd guess that any school would find that graduation rates would inversely correlate to class size. Also, two separate articles in the paper (subscription required) tell us that the school (a) caters to students in the job market, and (b) most graduates go on to higher education. What the heck does that mean?
The speaker explained a little bit of what the school was about; all very nice; focus on communication skills and working as a team, computers for everyone, community internships. I think you can have two kinds of high schools: the kind where kids are motivated and enthusiastic about doing stuff, and the kind where the kids are biding their time until they can get out and go do something else. When you have the first kind, the students are going to be self-selecting - they have to want to go to the school. This is why I think charter schools and school choice are good ideas. So for that reason alone I think this school would be a good idea.
But the audience had a lot of good questions; some sublime; some ridiculous; all very practical. The inevitable "What about sports?" question was asked, which of course really means, "What if my kid wants to go there but he's also a basketball star?" The responder didn't really pick up on that dynamic, mentioning that the schools in California play Ultimate Frisbee against each other. Yeah, great. But the local guy did mention that allowing the students to play on the big school teams was a possibility.
A lot of the questions made me think, though, that either by state law or by educator attitudes, the school system isn't really ready to shift paradigms. I don't necessarily blame them; it's not an easy thing to do. But there were questions about honors degrees and demographics. The California panelist pointed out that an honors degree is a pretty divisive thing, and how can you teach teamwork in that sort of environment? The local panelist said that he thought the demographics would have to mirror those for the local high schools, so this school would have the same proportion of special needs students, minorities, gifteds, etc. I don't see how they can do that and still have the students be self-selecting, not to mention I find it extremely irritating when people are classified into "black", "poor", "special ed" or groups, even when the goal is to create balance.
So there's plenty to think about still. But I hope they do it. And if I'm still around town in ten years, I'll probably be pushing my kid to go there. If you see a chance, take it.
Thursday, October 26, 2006
The Guerrilla Guide to Interviewing
- Hire/No-Hire . Make a decision. If you don't know, the answer is No Hire. I've run into this before when interviewing an entry-level guy for a position that required more skills than that. We recommended he be hired for Support instead. I'm not sure that that wasn't the right decision, but as a principle I like this one.
- You want people who are smart, and who get things done. Joel describes people who fail at one or the other, and I think I've worked with most of them before.
- A programmer should understand pointers, and recursion. Joel comments that a lot of people are coming out of school without learning a language that requires pointers, which is a problem. Less so with recursion. He says that pointers are an aptitude rather than a skill.
At the end he says, confidently,
If your resume and phone-screening process is working, you’ll probably have about 20% hires in the live interview.
True at FogBugz, no doubt. I've not really seen it here in Indianapolis, where the local talent pool is so small. But you never know, we might get lucky!
Want a job at an up-and-coming medical imaging company? Drop me a line!
Wednesday, October 25, 2006
Bloggers are people too
Tuesday, October 17, 2006
IQAA: Regression Testing
So what should a tester do at a code review? Primarily they will want to come up with test ideas; examine the code paths; ask how each one can be exercised. But also they can ask a very fundamental question: What other parts of the code is this project going to affect? This is an impact analysis. If I remember correctly, it was recommended that this analysis be done formally, as in developers have to write up a statement or report analyzing what other parts of the product will be affected. Not a bad idea, but probably not for smaller companies like Prosolv.
So based on the Impact Analysis, testers should be able to come up with a set of requirements that need to be retested, and there's your regression suite. Of course, every build that goes to testing should be tested on the critical path (or as I prefer, the "Happy Path"). Dr. Hanna suggested a 90% pass goal, but I'm not sure why that should be. Some tests will be showstoppers, others will be...well, whatever. I suppose if you have more than 10% "whatevers" failing, you've got an issue, though.
Just a couple of other notes:
- Regression testing doesn't do any good if you do it at the beginning of a project - it is certainly to be hoped that there will be few failures then!
- Impact analysis is also necessary when a requirement is changed. Go to a developer if necessary!
- Which led to the question, what if the developer doesn't know? Dr. Hanna's response: Find new developers ;)