The Daily Parker

Politics, Weather, Photography, and the Dog

On hiring and grammar

Via Sullivan, entrepreneur Kyle Wiens won't hire people who use poor grammar (and neither will I):

Good grammar makes good business sense — and not just when it comes to hiring writers. Writing isn't in the official job description of most people in our office. Still, we give our grammar test to everybody, including our salespeople, our operations staff, and our programmers.

Grammar signifies more than just a person's ability to remember high school English. I've found that people who make fewer mistakes on a grammar test also make fewer mistakes when they are doing something completely unrelated to writing — like stocking shelves or labeling parts.

In the same vein, programmers who pay attention to how they construct written language also tend to pay a lot more attention to how they code. You see, at its core, code is prose. Great programmers are more than just code monkeys; according to Stanford programming legend Donald Knuth they are "essayists who work with traditional aesthetic and literary forms." The point: programming should be easily understood by real human beings — not just computers.

Yes. Clear writing shows clear thought, almost always. I might not go so far as to use a grammar test for new employees, but I do pay attention to their emails and CVs.

Higher energy mid-continent, but so far not tropical

Despite having two Atlantic named storms before June 1st, so far the tropical storm season has been eerily quiet with 4 named storms. Then I did a little poking around on the Intertubes and realized that no, we usually don't have that many by the end of July. With all the energy in the Northern Hemisphere atmosphere this summer, September might be more interesting than usual. But so far in July, we seem to be about average.

Deployments are fun!

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.

Taking an Azure shortcut

I hope to finish moving my websites into the cloud by the end of the year, including a ground-up rewrite of Weather Now. Meanwhile, I've decided to try moving that site and three others to an Azure Virtual Machine rather than trying to fit them into Azure Cloud Services.

For those of you just tuning in, Azure Cloud Services lets you run applications in roles that scale easily if the application grows. A virtual machine is like a standalone server, but it's actually running inside some other server. A really powerful computer can host a dozen small virtual machines, allocating space and computing power between them as necessary. You can also take a virtual machine offline, fold it up, and put it in your pocket—literally, as there are thumb drives easily as big as small VMs.

This is called infrastructure as a service (IaaS); putting applications into cloud services without bothering to set up a VM is called platform as a service (PaaS).

IaaS offers few advantages over PaaS. The principal disadvantage is that VMs behave like any other computers, so you have to care for them almost as if they were pieces of hardware on your own server rack. You just don't have to worry about licensing Windows or hoping the electricity stays on. Also, VMs are expensive. Instead of paying around $15 per month for a web role, I'll wind up paying about $80 per month for the VM and its associated storage, data transfers, and backup space. And this is for a small instance, with a 1.6 GHz processor and 2 GB of RAM. VMs go up to 8-core, 16 GB behemoths that cost over $500 per month.

On the other hand, my server rack costs easily $100 per month to operate, not counting licenses, certificates, me tearing my hair out when the power fails or my DSL goes down, and having to keep my living room the Inner Drive Technology Worldwide Data Center below 27°C year-round.

So it's not nearly as expensive as rack space would be, but it's less economical than PaaS. Unfortunately, my four most important web applications have special needs that make them difficult, and in two cases impossible, to port to PaaS:

  • The Daily Parker, this blog, which runs on the open-source dasBlog platform. I estimate that porting this blog to PaaS will take about 12 hours of work, and I have lots of other (paid) work ahead of it. In principal, I need to change its storage model to use Azure blobs instead of the local file system, which doesn't work the same way in Azure Web roles as it does on an VM.
  • Weather Now, which is overdue for a ground-up rewrite, and uses a lot of space. Porting the application will take about 12 hours, plus another 12 hours to port the GetWeather application (which keeps the site supplied with weather data) to an Azure worker process. That's time I can better spend rewriting it. Moving it to a VM shouldn't take more than an hour or two.
  • My SourceGear Vault source code control system. Since I don't own the source code, I simply can't port it. Plus, it uses a couple of worker processes on the server, which I also won't be able to port.
  • My FogBugz issue tracking system. Same problem: it's not my software, and it uses a couple of worker processes. I can either install it on a server from a commercial installation package, or I can sign up for FogBugz on demand for $25 per month. And also lose my Vault integration, which lets me track all of my issues back to actual pieces of code.

So watch this blog. In a couple of days, it's liable to migrate to an Azure VM.

Certified, again, and just as happy as the last time

Long-time readers will know how I feel about Microsoft certification exams. When it came time for 10th Magnitude to renew its Microsoft Partner designation, and that meant all of us had to take these tests again, I was not happy.

So, against my will, I took exam 70-583 ("Designing and Developing Windows Azure Applications") and passed it. I am once again a Microsoft Certified Professional.

Fwee.

Houses of cards + breeze

The brokerage house Evercore doesn't believe Groupon. No one else does either:

The brokerage said Groupon Goods, the company's consumer products category, is increasingly becoming the merchant of record - the owner of goods being sold or the first-party seller.

As first-party sales assume inventory risk and drive higher revenue contribution, the composition of Groupon's first-quarter revenue beat in North America has become questionable, analyst Ken Sena wrote in a note.

"Growth in unique visitors in the U.S. to Groupon.com, which can be looked at as a proxy for subscriber growth, exhibited negative year-over-year trends this quarter," Sena said.

Essentially, no one is buying stuff from Groupon, which leaves them holding the bag on lots of it.

In a related story, people are sick of Farmville, which is hurting Zynga:

A slew of analysts cut their ratings and price targets for Zynga after it reported lower-than-expected quarterly results on Wednesday and forecast a much smaller 2012 profit.

Zynga has been hit by user fatigue for some of its long-running games and a shift in the way Facebook Inc's social platform promotes games.

"The biggest factor impacting current performance appears to be the way Facebook is surfacing gaming content on its platform," JP Morgan's Doug Anmuth wrote in a note to clients.

Actually, Facebook users just got bored of FarmVille, and it's hard to blame them. This is what happens when companies stop innovating in favor of milking their cash cows. (Sorry.)

Good thing the ethanol subsidy died

...because most of our maize corn is dying too:

The latest U.S. Drought Monitor has expanded D3 “extreme” drought across Illinois. It went from 8 percent of the state last week to 71 percent this week. This major shift was based on a number of short-term drought indicators based on rainfall, streamflow, and temperature, as well as from widespread reports of significant crop and pasture losses.

Earlier this week, the USDA NASS reported that 66 percent of the corn crop, 49 percent of the soybean crop, and 91 percent of pasture was rated poor to very poor. Topsoil was rated at 91 percent poor to very poor and subsoil was rated 97 percent poor to very poor.

The hottest July ever in Chicago averaged 27.4°C; so far this month has averaged 27.8°C, though today and Saturday are forecast to be about normal.

Food prices, electricity expenses, health-care costs: all are higher this month than one would expect for July. Welcome to the 21st Century, where the weather is as if everyone has moved 800 km south.

Oppressive heat here, terrifying heat in Greenland

Chicago today looks set to get up to 39°C, part of an emerging pattern of worsening heat waves in the region.

The holy terror this summer, however, is 2,000 km to the northeast. Greenland has experienced unprecedented thawing this month:

The set of images released by NASA on Tuesday show a rapid thaw between 8 July and 12 July. Within that four-day period, measurements from three satellites showed a swift expansion of the area of melting ice, from about 40% of the ice sheet surface to 97%.

About half of Greenland's surface ice sheet melts during a typical summer, but [Jay Zwally, a glaciologist at NASA's Goddard Space Flight Center] said he and other scientists had been recording an acceleration of that melting process over the last few decades. This year his team had to rebuild their camp, at Swiss Station, when the snow and ice supports melted.

He said he was most surprised to see indications in the images of melting even around the area of Summit Station, which is about two miles above sea level.

It was the second unusual event in Greenland in a matter of days, after an iceberg the size of Manhattan broke off from the Petermann Glacier. But the rapid melt was viewed as more serious.

Greenland's ice sheet accounts for possibly 25% of the world's fresh water. A massive release of that water into the North Atlantic would not only raise sea levels worldwide, but also could distrupt thermohaline circulation, which in turn would make northern Europe's weather more like Canada's.

Of course, we'll all forget this in the winter, and react with surprise and alarm in a year or two when we have another record-breaking summer. Time to adapt.

Bloodletting and leeches

Krugman yesterday reminded us that people are so desperate for the security that investing in the U.S. brings them, they're paying us to take their money, at alarming rates of negative interest:

That’s right: for every maturity of bonds under 20 years, investors are paying the feds to take their money — and in the case of maturities of 10 years and under, paying a lot.

What’s going on? Investor pessimism about prospects for the real economy, which makes the perceived safe haven of US debt attractive even at very low yields. And pretty obviously investors do consider US debt safe — there is no hint here of worries about the level of debt and deficits.

Now, you might think that there would be a consensus that, even leaving Keynesian things aside, this is a really good time for the government to invest in infrastructure and stuff: money is free, the workers would otherwise be unemployed.

But no: the Very Serious People have decided that the big problem is that Washington is borrowing too much, and that addressing this problem is the key to … something.

Conservatives here and in the UK (another country with unprecedented low government interest rates) have either a delusion or a willfully dishonest belief in the dangers of deficits. Yes, both countries have long-term deficit problems that need resolution, and both countries will need lower defense and entitlement spending to close their gaps. But that's in 20 years.

Right now, we need to take this free money (five-year Treasuries are at -1.18%; ten year notes are at -0.68%) and abundant labor (nationally still around 9% unemployment) and rebuild. We need to repair our roads, upgrade our trains, fix our sewers and electric grids, and restore our countries to the economic strengths they have had in decades past.

Those on the right, however, want to continue bloodletting, draining us of our strength when we're weakest. Or, put another way, if someone is starving, withholding food won't help him. Lending him some food might just get him feeling better again.

Ten years from now we're going to look back on this period of Republican and Tory intransigence, laugh nervously, and change the subject. If we're supremely lucky, we'll be out of the economic traps that their misguided policies have created for us.

Dual Microsoft Azure deployment: Project synchronization

Last week I offered developers a simple way to simultaneously deploy a web application to a Microsoft Azure web site and an Azure Cloud Services web role. Today I'm going to point out a particular pain with this approach that may make you reconsider trying to deploy to both environments.

Just to recap: since Azure web sites are free, or nearly so, you can save at least $15 a month by putting a demo instance of your app there rather than having a second web role for it. You'll still use a web role for your staging and production environments, of course.

While reading my last post, though, sharp-eyed developers might have noticed that the dual approach creates some additional maintenance overhead. Specifically, you'll need to keep both solution (.sln) files and both web project (.csproj) files in sync. This becomes part of your staging deployment task list, which means you probably only have to synchronize the files once every few weeks, not such a big deal. Still, if you've never hand-edited a solution or project file before, it can be a little daunting.

The solution file probably won't require much synchronization, unless you've added new projects—or new files outside of projects—to the solution. For example, at 10th Magnitude we like to keep all of our database scripts in the solution tree, for easy access. (We also use the open-source RoundhousE tool for database deployment, which I'll talk about in a subsequent post.) If we add new database files to the web site solution, they won't automatically show up in the web role solution. Same with the web project file: adding new controllers, views, or web forms to a project is very common. So you'll have to make sure all the changes in the web site project get migrated over to the web role project.

Keep in mind, though, that some things will remain different between the two pairs of files. The web role solution will have a Cloud Services project, mapping the web and worker role entry points, which the web site won't have. And the web site project file will have references to Microsoft.WindowsAzure.ServiceRuntime.dll and msshrtmi.dll that the web role project won't have. Here's a synchronized pair of solution files, using Beyond Compare to show the deltas:

And here are the two project files, also synchronized, showing the differences you need to wind up with:

One final thing to consider: if you have a paying client, they might not want to pay for development time to synchronize the two deployment environments. If you're charging $125 an hour, and you spend 30 minutes every four weeks—$62.50—to save the client $15 for an additional cloud services instance, that isn't good value. But for an internal application (like the 10th Magnitude brochure site), or for a personal project, the savings might be worth the hassle.