Page 1 of 4 in the Software category Next Page
Sunday 24 March 2013 |
|
|
Just a quick note about debugging. I just spent about 30 minutes tracking down a bug that caused a client to get invoiced for -18 hours of premium time and 1.12 days of regular time.
The basic problem is that an appointment can begin and end at any time, but from 6pm to 8am, an appointment costs more per hour than during business hours. This particular appointment started at 5pm and went until midnight, which should be 6 hours of premium and 1 hour of regular.
The bottom line: I had unit tests, which automatically tested a variety of start and end times across all time zones (to ensure that local time always prevailed over UTC), including:
- Starts before close, finishes after close before midnight
- Starts before close, finishes after midnight before opening
- Starts before close, finishes after next opening
- Starts after close, finishes before midnight
- Starts after close, finishes after midnight before opening
- Starts after close, finishes after next opening
- ...
Notice that I never tested what happened when the appointment ended at midnight.
The fix was a single equals sign, as in:
- if (localEnd > midnight & local <= localOpenAtEnd)
+ if (localEnd >= midnight & local <= localOpenAtEnd)
Nicely done, Braverman. Nicely done. |
Sunday 24 March 2013 12:36:48 CDT (UTC-05:00)  | | Software
|
|
|
|
Wednesday 16 January 2013 |
|
|
We're just 45 minutes from releasing a software project to our client for user acceptance testing (UAT), and we're ready. (Of course, there are those 38 "known issues..." But that's what the UAT period is for!)
When I get back from the launch meeting, I'll want to check these out:
Off to the client. Then...bug fixes! |
|
|
|
|
Sunday 6 January 2013 |
|
|
This is about C# development. If you're interested in how I got a 60-fold improvement in code execution speed by adding a one-line Entity Framework configuration change, read on. If you want a photo of Parker, I'll post one later today. |
|
|
|
|
Sunday 18 November 2012 |
|
|
I found Joe and Ben Albahari's library of LINQ extensions, which enabled me to finish a really complicated piece of code quickly and elegantly.
Programmers keep reading. Everyone else: I'll have more stuff about the weather tomorrow. |
|
|
|
|
Saturday 3 November 2012 |
|
|
I mentioned a few weeks ago that I've had some difficulty moving the last remaining web application in the Inner Drive Technology Worldwide Data Center, Weather Now, into Microsoft Windows Azure. Actually, I have two principal difficulties: first, I need to re-write almost all of it, to end its dependency on a Database of Unusual Size; and second, I need the time to do this.
Right now, the databases hold about 2 Gb of geographic information and another 20 Gb of archival weather data. Since these databases run on my own hardware right now, I don't have to pay for them outside of the server's electricity costs. In Azure, that amount of database space costs more than $70 per month, well above the $25 or so my database server costs me.
I've finally figured out the architecture changes needed to get the geographic and weather information into cheaper (or free) repositories. Some of the strategy involves not storing the information at all, and some will use the orders-of-magnitude-less-expensive Azure table storage. (In Azure storage, 25 Gb costs $3 per month.)
Unfortunately for me, the data layer is about 80% of the application, including the automated processes that go out and get weather data. So, to solve this problem, I need a ground-up re-write.
The other problem: time. Last month, I worked 224 hours, which doesn't include commuting (24 hours), traveling (34 hours), or even walking Parker (14 hours). About my only downtime was during that 34 hours of traveling and while sitting in pubs in London and Cardiff.
I have to start doing this, though, because I'm spending way too much money running two servers that do very little. And I've been looking forward to it—it's not a chore, it's fun.
Not to mention, it means I get to start working on the oldest item on my to-do list, Case 46 ("Create new Gazetteer database design"), opened 30 August 2006, two days before I adopted Parker.
And so it begins.
|
|
|
|
|
Sunday 9 September 2012 |
|
|
Despite my enthusiasm for Microsoft Windows Azure, in some ways it suffers from the same problem all Microsoft version 1 products have: incomplete debugging tools.
I've spent the last three hours trying to add an SSL certificate to an existing Azure Web application. In previous attempts with different applications, this has taken me about 30 minutes, start to finish.
Right now, however, the site won't launch at all in my Azure emulator, presenting a generic "Internal server error - 500" when I try to start the application. The emulator isn't hitting any of my code, however, nor is it logging anything to the Windows System or Application logs. So I have no idea why it's failing.
I've checked the code into source control and built it on another machine, where it had exactly the same problem. So I know it's something under source control. I just don't know what.
I hate very little in this world, but lazy developers who fail to provide debugging information bring me near to violence. A simple error stack would probably lead me to the answer in seconds.
Update: The problem was in the web.config file.
Earlier, I copied a connection string element from a transformation file into the master web.config file, but I forgot to remove the transformation attributes xdt:Transform="Replace" and xdt:Locator="Match(name)". This prevented the IIS emulator from parsing the configuration file, which caused the 500 error.
I must reiterate, however, that some lazy developer neglected to provide this simple piece of debugging information, and my afternoon was wasted as a result.
It reminds me of a scene in Terry Pratchett's and Neil Gaiman's Good Omens (one of the funniest books ever written). Three demons are comparing notes on how they have worked corruption on the souls of men. The first two have each spent years tempting a priest and corrupting a politician. Crowley's turn:
"I tied up every portable telephone system in Central London for forty-five minutes at lunchtime," he said.
"Yes?" said Hastur. "And then what?"
"Look, it wasn't easy," said Crowley.
"That's all?" said Ligur.
"Look, people—"
"And exactly what has that done to secure souls for our master?" said Hastur.
Crowley pulled himself together.
What could he tell them? That twenty thousand people got bloody furious? That you could hear the arteries clanging shut all around the city? And that then they went back and took it out on their secretaries or traffic wardens or whatever, and they took it out on other people? In all kinds of vindictive little ways which, and here was the good bit, they thought up themselves. The pass-along effects were incalculable. Thousands and thousands of souls all got a faint patina of tarnish, and you hardly have to lift a finger.
Somehow, debugging the Azure emulator made me think of Crowley, who no doubt helped Microsoft write the thing. |
Sunday 9 September 2012 18:12:33 CDT (UTC-05:00)  | | Software
|
|
|
|
Monday 27 August 2012 |
|
|
After installing Windows 8 yesterday, I discovered some interaction problems with my main tool, Visual Studio 2012. Debugging Azure has suddenly become difficult. So after installing the OS upgrade, I spent about five hours re-installing or repairing a whole bunch of other apps, and I'm not even sure I found the causes of the problems.
The next step is to install new WiFi drivers. But seriously, I'm only a few troubleshooting steps from rebuilding the computer from scratch back on Windows 7.
Cue the cursing... |
Monday 27 August 2012 16:10:31 CDT (UTC-05:00)  | | Software
|
|
|
|
Sunday 26 August 2012 |
|
|
This morning I installed Microsoft Windows 8 on my laptop. As a professional geek, getting software after it's released to manufacturing but before the general public is a favorite part of my job.
It took almost no effort to set up, and I figured out the interface in just a few minutes. I like the new look, especially the active content on the Start screen. It definitely has a more mobile-computing look than previous Windows versions, with larger click targets (optimized for touch screens) and tons of integration with Windows Accounts. I haven't linked much to my LiveID yet, as I don't really want to share that much with Microsoft, but I'll need it to use SkyDrive and to rate and review the new features.
I also did laundry, vacuumed, cleaned out all my old programming books (anyone want a copy of Inside C# 2 from 2002?), and will now go shopping. And I promise never to share that level of picayune personal detail again on this blog. |
|
|
|
|
Monday 6 August 2012 |
|
|
If one of the developers on one of my teams had done this, I would have (a) told him to get some sleep and (b) mocked him for at least a week afterwards.
Saturday night I spent four hours trying to figure out why something that worked perfectly in my local Azure emulator failed with a cryptic "One of the request inputs is out of range" message in the Cloud. I even posted to StackOverflow for help.
This morning, I spent about 90 minutes building a sample Cloud application up from scratch, adding one component at a time until I got to the same failure. And, eventually, I got to the same failure. Then I stepped through the code to figure out
And I immediately saw why.
The problem turned out to be this: I have two settings:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Cloud" ...>
<WebRole name="WebRole" vmsize="Small">
<ConfigurationSettings>
<Setting name="MessagesConfigurationBlobName" />
<Setting name="MessagesConfigurationBlobContainerName" />
</ConfigurationSettings>
</WebRole>
</ServiceDefinition>
Here's the local (emulator) configuration file:
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration ...>
<Role name="WebRole">
<ConfigurationSettings>
<Setting name="MessagesConfigurationBlobName" value="LocalMessageConfig.xml"/>
<Setting name="MessagesConfigurationBlobContainerName" value="containername"/>
</ConfigurationSettings>
</Role >
</ServiceConfiguration>
Here's the Cloud file:
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration ...>
<Role name="WebRole">
<ConfigurationSettings>
<Setting name="MessagesConfigurationBlobName" value="containername" />
<Setting name="MessagesConfigurationBlobContainerName" value="CloudMessageConfig.xml"/>
</ConfigurationSettings>
</Role >
</ServiceConfiguration>
I will now have a good cry and adjust my time tracking (at 3am Saturday) from "Emergency client work" to "Developer PEBCAK".
The moral of the story is, when identical code fails in one environment and succeeds in another, don't just compare the environments, compare *everything that could be different in your own code* between the environments.
Oh, and don't try to deploy software at 3am. Ever. |
Monday 6 August 2012 10:15:13 PDT (UTC-07:00)  | | Software | Cloud
|
|
|
|
Sunday 29 July 2012 |
|
|
In every developer's life, there comes a time when he has to take all the software he's written on his laptop and put it into a testing environment. Microsoft Azure Tools make this really, really easy—every time after the first.
Today I did one of those first-time deployments, sending a client's Version 2 up into the cloud for the first time. And I discovered, as predicted, a flurry of minor differences between my development environment (on my own computer) and the testing environment (in an Azure web site). I found five bugs, all of them minor, and almost all of them requiring me to wipe out the test database and start over.
It's kind of like when you go to your strict Aunt Bertha's house—you know, the super-religious aunt who has no sense of humor and who smacks your hands with a ruler every time you say something harsher than "oops."
End of complaint. Back to the Story of D'Oh. |
Sunday 29 July 2012 17:35:07 CDT (UTC-05:00)  | | Software | Cloud
|
|
|
|
Saturday 30 June 2012 |
|
|
When working with Microsoft Windows Azure, I sometimes feel like I'm back in the 1980s. They've rushed their development tools to market so that they can get us developers working on Azure projects, but they haven't yet added the kinds of error messages that one would hope to see.
I've spent most of today trying to get the simplest website in my server rack up into Azure. The last hour and a half has been spent trying to figure out two related error messages:
- Failed to debug the Windows Azure Cloud Service project. The output directory ' { path }\csx\Debug' does not exist.
- Windows Azure Tools: Can't locate service descriptions.
If you're interested in these error messages, click through. For non-technical readers, I'll put up a photo of Parker tomorrow, I promise. |
Saturday 30 June 2012 18:17:08 CDT (UTC-05:00)  | | Software | Cloud
|
|
|
|
Sunday 24 June 2012 |
|
|
I have just spent an hour of my life—one that I will never get back—trying to figure out why I couldn't install any software from .msi files on one of my Windows 7 machines. Every time I tried, I would get a message that the installer "could not find the file specified."
If you're interested in this, or you want to see a stupid rage comic face, click through: |
|
|
|
|
Friday 9 March 2012 |
|
|
In general, people using words they don't understand, presumably to sound smart, drives me up a tree. In specific, I wish against reason that more people knew how time zones worked. Microsoft's Raymond Chen agrees:
One way of sounding official is to give the times during which the outage will take place is a very formal manner. "The servers will be unavailable on Saturday, March 17, 2012 from 1:00 AM to 9:00 AM Pacific Standard Time."
Did you notice something funny about that announcement?
On March 17, 2012, most of the United States will not be on Standard Time. They will be on Daylight Time. (The switchover takes place this weekend.)
Now, I'm one of the few people in the world who has implemented a complete time zone package for Windows systems, and regular readers will already know about my vocal defense of the Olson/IANA time zone database. So I don't expect most people to know the ins and outs of time zone abbreviations. But this is the point Chen makes, and I would like to make: if you don't know what you're writing, don't write it. Say "Central time" or "local Chicago time" instead of "Central Standard Time," if for no other reason than you'll be wrong about the latter 8 months out of the year. |
|
|
|
|
Thursday 19 January 2012 |
|
|
A couple of things have happened on two issues I mentioned earlier this week:
That is all for now. We in Chicago are bracing for 15 cm of snow tomorrow, so there may be Parker videos soon.
Oh, and: Kodak actually did file for bankruptcy protection today. |
|
|
|
|
Thursday 24 November 2011 |
|
|
The new feature I mentioned this morning is done. Now, in addition to the "where was this posted" button on the footer, you will notice the entry's time zone. Each entry can have its own time zone—in addition to the site-wide default.
I still have to fix a couple of things related to this change, like the fact that the date headers ("Thursday 24 November 2011," just above this entry) are on UTC rather than local time. But going forward (and going backward if I ever get supremely bored), you can now see the local time wherever I was when I posted.
Incidentally, if you want to bring the tzinfo database to your .NET application, I have licensing terms. |
Thursday 24 November 2011 14:22:50 CST (UTC-06:00)  | | Software | Blogs
|
|
|
|
Monday 17 October 2011 |
|
|
The AP has picked up the story about the tzinfo database moving to ICANN:
The organization in charge of the Internet's address system is taking over a database widely used by computers and websites to keep track of time zones around the world.
The transition to the Internet Corporation for Assigned Names and Numbers, or ICANN, comes a week after the database was abruptly removed from a U.S. government server because of a federal lawsuit claiming copyright infringement.
Without this database and others like it, computers would display Greenwich Mean Time, or the time in London when it isn't on summer time. People would have to manually calculate local time when they schedule meetings or book flights.
Ah, I do love the popular press, trying to explain things. AP writer Anick Jesdanun generally did all right explaining the problem and the move, except the story has no information about the tzinfo community's response to the mess. (I'm just sad they didn't mention The Daily Parker.)
|
|
|
|
|
Friday 16 September 2011 |
|
|
I'm David Braverman, this is my blog, and Parker is my 5-year-old mutt. I last updated this About... page in February, but some things have changed. In the interest of enlightened laziness I'm starting with the most powerful keystroke combination in the universe: Ctrl-C, Ctrl-V.
Twice. Thus, the "point one" in the title.
The Daily Parker is about:
- Parker, my dog, whom I adopted on 1 September 2006.
- Politics. I'm a moderate-lefty by international standards, which makes me a radical left-winger in today's United States.
- Photography. I took tens of thousands of photos as a kid, then drifted away from making art until a few months ago when I got the first digital camera I've ever had that rivals a film camera. That got me reading more, practicing more, and throwing more photos on the blog. In my initial burst of enthusiasm I posted a photo every day. I've pulled back from that a bit—it takes about 30 minutes to prep and post one of those puppies—but I'm still shooting and still learning.
- The weather. I've operated a weather website for more than ten years. That site deals with raw data and objective observations. Many weather posts also touch politics, given the political implications of addressing climate change, though happily we no longer have to do so under a president beholden to the oil industry.
- Chicago, the greatest city in North America, and the other ones I visit whenever I can.
I've deprecated the Software category, but only because I don't post much about it here. That said, I write a lot of software. I work for 10th Magnitude, a startup software consultancy in Chicago, I've got about 20 years experience writing the stuff, and I continue to own a micro-sized software company. (I have an online resume, if you're curious.) I see a lot of code, and since I often get called in to projects in crisis, I see a lot of bad code, some of which may appear here.
I strive to write about these and other things with fluency and concision. "Fast, good, cheap: pick two" applies to writing as much as to any other creative process (cf: software). I hope to find an appropriate balance between the three, as streams of consciousness and literacy have always struggled against each other since the first blog twenty years ago.
If you like what you see here, you'll probably also like Andrew Sullivan, James Fallows, Josh Marshall, and Bruce Schneier. Even if you don't like my politics, you probably agree that everyone ought to read Strunk and White, and you probably have an opinion about the Oxford comma—punctuation de rigeur in my opinion.
Another, non-trivial point. Facebook reads the blog's RSS feed, so many people reading this may think I'm just posting notes on Facebook. Facebook's lawyers would like you to believe this, too. Now, I've reconnected with tons of old friends and classmates through Facebook, I play Scrabble on Facebook, and I eagerly read every advertisement that appears next to its relevant content. But Facebook's terms of use assert ownership of everything that appears on their site, regardless of prior claims, which contravenes four centuries of law.
Everything that shows up on my Facebook profile gets published on The Daily Paker first, and I own the copyrights to all of it (unless otherwise disclosed). I publish the blog's text under a Creative Commons attribution-nonderivative-noncommercial license; republication is usually OK for non-commercial purposes, as long as you don't change what I write and you attribute it to me. My photos, however, are published under strict copyright, with no republication license, even if I upload them to other public websites. If you want to republish one of my photos, just let me know and we'll work something out.
Anyway, thanks for reading, and I hope you continue to enjoy The Daily Parker. |
|
|
|
|
Monday 12 September 2011 |
|
|
On this day in 1986, I got my first PC: an original, 1982-vintage IBM PC, with a 1 MHz 8088 processor, 256 kB of RAM, twin 360 kB drives, a 30 cm 80 x 25 character green monochrome monitor, and a steel clickety-clackety keyboard.
The laptop I'm writing this on, 25 years later, has a 3 GHz Intel Core 2 processor, 4 GB of RAM, an internal solid-state 250 GB drive, a 36 cm 1280 x 800 pixel monitor with 16 million colors, and a silent keyboard. And this laptop cost less than half what the PC cost in nominal terms, which makes it about one-sixth the cost in real terms.
Twenty five years of computing, and I still don't have a fast-enough computer. |
|
|
|
|
Wednesday 20 July 2011 |
|
|
Or, how I learned to stop worrying and love the boilerplate:
/*
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of Oracle or the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* The HelloWorldApp class implements an application that
* simply prints "Hello World!" to standard output.
*/
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
|
|
|
|
|
Wednesday 15 June 2011 |
|
|
Andrew Binstock, editor of Dr. Dobb's, has a pair of editorials in praise of and instruction to create small classes:
High levels of complexity, generally measured with the suboptimal cyclomatic complexity measure (CCR), is what the agile folks correctly term a "code smell." Intricate code doesn't smell right. According to numerous studies, it generally contains a higher number of defects and it's hard — sometimes impossible — to maintain. ...
My question, though, is how to avoid creating complexity in the first place? This topic too has been richly mined by agile trainers, who offer the same basic advice: Follow the Open-Closed principle, obey the Hollywood principle, use the full panoply of design patterns, and so on. All of this is good advice; but ultimately, it doesn't cut it. ...
...[Y]ou need another measure, one which I've found to be extraordinarily effective in reducing initial complexity and greatly expanding testability: class size. Small classes are much easier to understand and to test.
In Part 2, in which Binstock responded to people who had written him about the first editorial:
Coding classes as diminutive as 60 lines struck other correspondents as simply too much of a constraint and not worth the effort.
But it's precisely the discipline that this number of lines imposes that creates the very clarity that's so desirable in the resulting code. The belief expressed in other letters that this discipline could not be consistently maintained suggests that the standard techniques for keeping classes small are not as widely known as I would have expected.
Both editorials make excellent points. Every developer should read them. |
Wednesday 15 June 2011 15:10:42 CDT (UTC-05:00)  | | Software
|
|
|
|
Thursday 5 May 2011 |
|
|
Apparently "gardener" makes more sense than "engineer:"
So why do so many gardens fail, yet so many skyscrapers succeed? With a few exceptions, the technique for building a skyscraper is similar whether you are in Europe or you are in Singapore. Gardens do not work that way. Every garden is different because the environment it is in is different. Even gardens that are within throwing distance of each other can have wildly different soil. That is why the lowest bidder can probably build the same bridge as the highest bidder, but your company can’t grow the calibre of gardens that Google can grow.
Remember that time when someone in your company unsuccessfully used an Agile gardening methodology, and then went around saying that it was horse shit that doesn’t work? Well horse shit does grow gardens, it just wasn’t enough to save your garden. Your garden was probably dead before it started – a victim of the climate of your organisation. Were you trying to grow a rainforest in the desert? You can’t just plant the same plants as Facebook, Flickr or Twitter and expect them to take root regardless of the quality of your gardeners or the climate of your organisation.
(Hat tip MVT.) |
|
|
|
|
Friday 17 December 2010 |
|
|
|
Friday 17 December 2010 08:37:19 CST (UTC-06:00)  | | Jokes | Software
|
|
|
|
Saturday 23 October 2010 |
|
|
One of the benefits Avanade provides is a fairly generous "technology" budget. I'm given cash, every year, to buy things that either demonstrate my (read: Avanade's) love of technology, or give me better work-life balance.
This week I bought a 240 GB solid-state drive for my work laptop to replace the 256 GB drive it came with. So, I backed up the entire drive using Windows 7 System Image, swapped the drives out, and...crap.
Did anyone else notice that 240 < 256? Yeah. Also, the bigger drive was bit-lockered.
So, yeah, I can't restore the image. I am now copying all the data I'll need and, in fits and starts this weekend, I'll be rebuilding the laptop from scratch.
Phooey. |
Saturday 23 October 2010 13:05:11 CDT (UTC-05:00)  | | Software | Work
|
|
|
|
Friday 1 January 2010 |
|
|
...nothing happened. And I spent all night in a data facility in New York watching nothing happen. Fun times, fun times. |
Friday 1 January 2010 14:05:04 EST (UTC-05:00)  | | Software
|
|
|
|
|
Happy 22!
That's a little geek humor. See, 01/01/10 is 22. Get it?
You know, like, "There are 10 types of people in the world: those who understand binary, and those who don't"?
Right. Starting off the year well, I can see.... |
Friday 1 January 2010 11:09:08 EST (UTC-05:00)  | | Jokes | Software
|
|
|
|
Saturday 10 October 2009 |
|
|
This may actually be funny.
My CCMBA class includes students from 30 countries, in every part of the world. Consequently, Duke has created a Flash-based Web portal, through which we take exams, submit assignments, attend classes, and keep in touch. The thing has worked more or less as advertised since we arrived in London two months ago.
By tomorrow at 23:59 EDT, we must hand in our Accounting and Management exams. We have 24 hours from download to complete the former, and 90 minutes to complete the latter.
Can you see where this is going? Of course you can:
See, as a Cubs fan, this doesn't bother me so much. There's always next year.
Update: Tech support just emailed me back. Apparently they had a hardware failure in one of the server rooms, and the infrastructure guys are on it.
Update, 13:30 CDT: The platform is back up. Here we go...let the exams begin.
Update, 13:35 CDT: They did a fu@!ing upgrade! During exams! Unbefu&@ingleivable.
Final update, 13:55 CDT: OK, it looks like they did a rollback to a known-working version of the platform, not a upgrade. That makes a lot more sense. I will just assume that, because it's exam week and I've had a little more caffeine today than usual, I might have some extra nervous energy that caused me to jump to hasty conclusions. I will now walk the dog, take some deep breaths, and start the first exam. |
Saturday 10 October 2009 13:00:10 CDT (UTC-05:00) | | Duke | Software
|
|
|
|
Tuesday 4 August 2009 |
|
|
(By way of explanation why I'm being wery wery qwiet today.)
Actually, I'm hunting financial accounting (Duke) and bugs (client). Like this one, which shows one of the perils of refactoring. See if you can spot my stupidity (after the jump). |
Tuesday 4 August 2009 13:32:21 CDT (UTC-05:00) | | Software
|
|
|
|
Wednesday 10 June 2009 |
|
|
The following photo shows a programmer, a usability expert, and an IT manager struggling to figure out how to add players to a bowling game using AMF's scoring software. I don't even remember the sequence we had to go through, but I do remember thinking (a) on average, we were sober; and (b) software that makes something so simple take so long should be punishable...in some appropriate way.
On the other hand, one doesn't go to a bowling alley because of the software they use. On the first hand, however, bad software makes everything less fun.  |
|
|
|
|
Saturday 2 May 2009 |
|
|
Via Sullivan, I suddenly feel very old:
We extracted about 75 percent of the responses on age (representing about 700 responses, taking equally from the earliest and most recent postings, which show very similar age distributions). Per John Makinson's quip at an LBF panel, over half of reporting Kindle owners are 50 or older, and 70 percent are 40 or older.
So many users said they like Kindle because they suffer from some form of arthritis that multiple posters indicate that they do or do not have arthritis as a matter of course. A variety of other impairments, from weakening eyes and carpal-tunnel-like syndromes to more exotic disabilities dominate the purchase rationales of these posters.
Wait! I'm not 40 yet! And I see just fine, with a little help.
This, on the day that I took a final exam in a class (Introduction to Microeconomics) in which every other student was younger than half my age. Yes, there were about 50 of us in there, and the day the Berlin Wall fell down I was older than they are now.
Sigh. |
|
|
|
|
|
I had thought about writing a long entry on another technical aspect of the new version of Weather Now, but for the first time in weeks it's sunny and 20°C, and I just finished a final exam in economics. So, off to the dog park.
All y'all waiting for the lengthy technical stuff will just have to wait until it rains again.
Update: In the meantime, why not scratch your head, as I did, over meat business cards? Hmmm.... |
|
|
|
|
Tuesday 28 April 2009 |
|
|
Arriving home this evening, after three days in San Francisco and frequent email checking while there, Outlook presented me with 295 unread messages (not counting the hundreds of messages in my spam filter). Of these, almost all were on my RSS reader—75 Facebook status updates, 50 posts from Andrew Sullivan, etc., etc.
It's amazing how much better you can feel after hitting <Ctrl>+A, right-click, "Mark As Read". Problem: solved.
Still, I hate feeling like I missed something.... |
Monday 27 April 2009 22:19:07 CDT (UTC-05:00) | | Software
|
|
|
|
Friday 20 March 2009 |
|
|
The vernal equinox happened about two hours ago. Typical of this time of year, though, it's below freezing this morning in Chicago. Nature nerd Naomi has more from the wilds of northern Lake County.
Of interest to possibly no one, for the last two years I've worked on the innards of my flagship demo project, Weather Now. I'm now putting together a new user interface for it. The new version 3.5 UI, which you can see at http://beta35.wx-now.com/, looks a lot like the old one—for now.
So what's new? I've rewritten from scratch the core framework, geography and weather code, and the basic UI framework. The beta (version 3.5) looks nearly identical to the current (version 3.1) application, except that the trained eye will notice new features where the ground-up re-write peeks out.
Sometime before the end of July, I hope to finish the next version (4.0), which will have an entirely different database structure. (Version 3.5 uses the same database as the current version through a façade.)
Exciting? Probably not. But it's how I keep my saw sharp. |
|
|
|
|
Wednesday 18 March 2009 |
|
|
I'm David Braverman, this is my blog, and Parker is my 3-year-old mutt. I last updated this About... page two years ago, so I thought it's time for a quick review.
|
|
|
|
|
Monday 16 March 2009 |
|
|
Usability expert Jakob Nielsen takes a look at Kindle 2 usability in his column today:
[T]he device is best for reading long linear material, such as novels and some non-fiction. Kindle's best user interface feature is turning the page; the reading experience you design should require no other interactions.
Writing linear books simply requires a skill that all good authors already possess: the ability to keep readers immersed in the plot.
Kindle also works well for the long, narrative articles common in certain literary magazines and Sunday newspaper supplements. No surprise that The New Yorker is currently the best-selling magazine for the device.
... [But] it's awkward to interact with the device through its 5-way controller. Also, after every selection, you're doomed to wait for a sluggish response. And, once you finally get something, you get very little because of the small screen. Setting aside the header and footer areas, Kindle 2's content area is 525x650 pixels, or 341 kilo-pixels. In contrast, a mid-sized PC screen is 1280x1024, offering 999 KP of content, or the equivalent of three Kindles.
Given these constraints, navigating non-linear content on Kindle feels much like navigating websites on a mobile phone. Kindle content designers should therefore follow mobile usability guidelines for many user interface issues, including the presentation of article pages. |
Monday 16 March 2009 09:26:59 CDT (UTC-05:00) | | Software
|
|
|
|
Friday 6 February 2009 |
|
|
The first, from the Poynter Institute, concerns how Michigan Governor Jennifer Granholm's staff made Twitter into journalism:
I tuned in an Internet broadcast of ... Granholm's annual state of the state speech because it was expected to be laden with energy and environment issues. On impulse I logged into Twitter and asked my followers if there had been a hashtag established for the speech. There was: MiSOTS (Mich. State of the State).
To my amazement, the hashtag had been established by the governor's staff—who were tweeting major points of Granholm's speech as she made them.
Meanwhile, many, many, many other people used this hashtag to challenge points, support points, do some partisan sniping, question assumptions, add perspective, speculate about what was going on, and provide links to supporting information—including a transcript of the speech and the opposite (Republican) party's response.
(Emphasis in original.)
The second, Mark Morford musing about technology in general:
To paraphrase a renowned philosopher, we just keep making the pie higher. This is the nature of us. It is, in turns, both wonderful and terrifying.
It seems there are only two real options, two end results of our civilization's grand experiment. Either the stack becomes so high -- with our sense of wonder and integrity rising right along with it -- that it finally lifts us off the ground and transports us to some new realm of understanding and evolution, or it ultimately topples over, crashes and mauls everything that came before, because we just didn't care enough to stop and smell the astonishment.
You have but to remember: How many ancient, advanced civilizations have collapsed under the weight of their own unchecked growth, their own technological advances, their own inability to stay nimble and attuned to the crushing marvel of it all? Answer: all of them.
Both are worth reading in full. |
|
|
|
|
Wednesday 14 January 2009 |
|
|
Developers generally don't like third-party UI controls because they're generally frustrating to use. Case in point: in the Infragistics Windows Forms controls package, the UltraGridColumn has sucked a substantial portion of my day away.
If you don't write software, you still appreciate it when it works simply and intuitively. You want to search for something, you go to Google and type in a search term. Brilliant. When you go to some company's website because you want to call the company, you look for something called "contact us" and click it. If you don't get the address and phone number of the company after clicking that link, you get irritated: the simple, intuitive thing didn't work. Jakob Nielsen is all over that stuff.
So. I have a simple problem, which is how to make a column in a grid grey out so my users don't inadvertently edit something they shouldn't. What I expect to write is something like this—or I would, if the member existed: theReadOnlyColumn.Enabled = false;
Sadly, there is no "Enabled" member. So how about using a member that actually does exist? theReadOnlyColumn.IsReadOnly = true;
Interesting. That member doesn't allow you to change its value. In fairness, the particle "Is" suggested it was a read-only member (ironic, that), but still, it looked like the right thing to do.
But no, here's the intuitive, simple, gosh-how-didn't-I-see-that-right-away thing to do: theReadOnlyColumn.CellActivation = Activation.Disabled;
<rant>
This sort of thing happens when developers create software based on how it works, rather than what it does. It's sloppy, it reflects an inability to think like the person using the product, and it's compounded by a criminal lack of clear "how-to" documentation. (The Infragistics documentation site appears to have no way to search for concepts, requiring you to figure out how Infragistics developers organize things on your own.) This really, really annoys me, and is why I avoid using their products.
</rant> |
Wednesday 14 January 2009 11:48:13 CST (UTC-06:00) | | Software
|
|
|
|
Sunday 4 January 2009 |
|
|
The weather has cooled off a bit in the interior of Alaska:
Friday marked day six of the worst cold snap to hit Fairbanks in several years and there is no relief in sight for residents who live in Alaska’s second-largest city — or the business owners they call to bail them out when their cars, pipes and septic tanks freeze.
The temperature in North Pole dipped to 55 degrees below zero on Wednesday night, the lowest temperature recorded in the greater Fairbanks area during what has been six days of severe cold. It was “only” 46 below at 4 p.m. Friday in North Pole, but the temperature was “dropping by the hour,” meteorologist Austin Cross at the National Weather Service in Fairbanks said.
Friday marked the fifth day in the last six the temperature at Fairbanks International Airport hit 40 below or colder; it was only 38 below at the airport on New Year’s Day.
Forecasters expect temperatures in Fairbanks this weekend will likely touch 50 below and there is no indication the cold wave will dissipate anytime soon.
Since I don't read Alaskan newspapers often, and I'm used to seeing cold Alaskan temperatures on the Weather Now extremes page, I actually first heard this when ten people emailed me to complain about a bug in Weather Now. It turns out, the news story above linked to Weather Now and drove 2,400 unique visitors to the site in six hours.
I should know better. Fortunately my servers easily handle 10,000 page views per hour, but still, seeing a traffic spike like that caught me a little off-guard. |
|
|
|
|
Wednesday 17 December 2008 |
|
|
I've given up for the evening attempting to configure a recalcitrant firewall. To cheer up, I turn to Paul Krugman, who reminds us that a 0% Fed rate means we're in trouble:
ZIRP!
That's zero interest rate policy. And it has arrived. America has turned Japanese.
This is the thing I’ve been afraid of ever since I realized that Japan really was in the dreaded, possibly mythical liquidity trap. ...
Seriously, we are in very deep trouble. Getting out of this will require a lot of creativity, and maybe some luck too.
At least I think I've figured out where I mis-configured the firewall.... |
Tuesday 16 December 2008 23:08:26 CST (UTC-06:00) | | US | Software
|
|
|
|
Thursday 27 November 2008 |
|
|
Most Daily Parker readers can skip this (long) post about software. But if you're
interested in C# 3.0,
LINQ, or
FogBugz, read on. |
Thursday 27 November 2008 10:21:00 CST (UTC-06:00) | | Software
|
|
|
|
Tuesday 9 September 2008 |
|
|
Every so often, one must wipe and reinstall his main computer. This is not fun. Even Parker finds it boring, and he sleeps all day.
Still, my main box (a Dell D620) now runs so much faster it's making me cry. So, several hours of boring work will save me several dozen hours waiting for the damn computer. |
Tuesday 9 September 2008 16:08:57 CDT (UTC-05:00) | | Software
|
|
|
|
Saturday 31 March 2007 |
|
|
Ah, family. I'm glad I got a chance to unwind with the Ps after my conference. But I do miss my dog.
Tomorrow: or, rather, tonight after 7pm CDT: check out Weather Now for, well, something appropriate to the season. |
|
|
|
|
Tuesday 20 February 2007 |
|
|
I'm David Braverman, this is my blog, and Parker is my 8-month-old mutt. |
|
|
|
|
Monday 1 January 2007 |
|
|
Weather Now is all new.
We're ecstatic to roll out a completely new visual design by Katie Zoellner. It's actually been lurking as a Beta site for several months. We didn't roll it out because not all of the features from our old site (see http://old.wx-now.com/) are complete. But today is the first day of a new year, which we thought an appropriate moment to finally give Katie's design some exposure. |
|
|
|
|
|
|
|
| Countdowns |
| The Daily Parker |
+2745d 14h 39m |
| Parker's 7th birthday |
25d 22h 34m |
| To West Coast |
38d 12h 24m |
| My next birthday |
106d 15h 02m |
|
|
|
| Archive |
| | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|
| 28 | 29 | 30 | 1 | 2 | 3 | 4 | | 5 | 6 | 7 | 8 | 9 | 10 | 11 | | 12 | 13 | 14 | 15 | 16 | 17 | 18 | | 19 | 20 | 21 | 22 | 23 | 24 | 25 | | 26 | 27 | 28 | 29 | 30 | 31 | 1 | | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| May, 2013 (31) |
| April, 2013 (42) |
| March, 2013 (42) |
| February, 2013 (40) |
| January, 2013 (44) |
| December, 2012 (45) |
| November, 2012 (46) |
| October, 2012 (44) |
| September, 2012 (43) |
| August, 2012 (44) |
| July, 2012 (46) |
| June, 2012 (47) |
| May, 2012 (44) |
Full archive
|
|
|
|