Politics, Weather, Photography, and the Dog
Page 1 of 2 in the WindowsAzure category Next Page
Thursday 14 August 2014

I mentioned over a month ago that, given some free time, I would fix the search feature on Weather Now. Well, I just deployed the fix, and it's kind of cool.

I used Lucene.NET as the search engine, incorporating it into the Inner Drive Gazetteer that underlies the geographic information for Weather Now. I won't go into too many details about it right now, except that I was surprised at how much the index writer was able to crunch and store (in Azure blobs). The entire index takes up 815 MB of blob space. That's so small a fraction of a cent per month I can't even calculate it right now.

The indexing process took about 6 minutes per 500,000 rows. (The entire database has 7.25 million rows.) It helped that I ran the indexing process on an Azure virtual machine, because at one point during index optimization I clocked the data throughput at 200 Mbps. Yes, two hundred megabits per second. The entire index ran in a little less than two hours on a VM while I was doing other things. And once the index initializes in the Weather Now app, searches only take a second or so.

Go ahead. Try a search. Put in your ZIP code or the name of a prominent building near you.

I still have a lot I want to do with the application, including updating it to a responsive theme and MVC, but this is a pretty big leap.

Thursday 14 August 2014 16:23:11 EDT (UTC-04:00)  |  | Cloud | Cool links | Weather | Windows Azure#
Friday 11 July 2014

I have to dash off to a meeting in a few minutes, then to Wrigley. So this is more of a note to myself.

Lucene.NET will be coming to Weather Now, I hope in a few weeks. This will massively improve its piss-poor searching, and allow me to do a few other things as well given Lucene's amazing search capabilities.

Unfortunately, Weather Now ranks third in development priorities behind my employer and my long-suffering freelance client. At least it kind of runs itself these days.

Friday 11 July 2014 12:44:00 CDT (UTC-05:00)  |  | Software | Business | Cloud | Windows Azure#
Wednesday 9 July 2014

For the last couple of days, I've had trouble getting to Microsoft's Azure blog. From my office in downtown Chicago, clicking the link gives me an error message:

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

However, going to the same URL from a virtual machine on Azure takes me to the blog. So what's going on here? It took a little detective work, but I think Microsoft has a configuration error one of a set of geographically-distributed Azure web sites, they don't know about it, and there's no way to tell them.

The first step in diagnosing a problem like this is to see if it's local. Is there something about the network I'm on that prevents me from seeing the website? This is unlikely for a few big reasons: first, when a local network blocks or fails to connect to an outside site, usually nothing at all happens. This is how the Great Firewall of China works, because someone trying to get to a "forbidden" address may get there slowly, normally, or not at all—and it just looks like a glitch. Second, though, the root Azure site is completely accessible. Only the Blog directory has an error message. Finally, the error message is coming from the foreign system. Chrome confirms this; there's a HTTP 200 (OK) response with the content I see.

All right, so the Azure Blog is down. But that doesn't make a lot of sense. Thousands of people read the Azure blog every day; if it were down, surely Microsoft would have noticed, right?

So for my next test, I spun up an Azure Virtual Machine (VM) and tried to connect from there. Bing! No problem. There's the blog.

Now we're onto something. So let's take a look at where my local computer thinks it's going, and where the VM thinks it's going. Here's the nslookup result for my local machine, both from my company's DNS server and from Google's 8.8.8.8 server:

Now here's what the VM sees:

Well, now, that is interesting.

From my local computer, sitting in downtown Chicago, both Google and my company's DNS servers point "azure.microsoft.com" to an Azure web site sitting in the North Central U.S. data center, right here in Chicago. But for the VM, which itself is running in the East U.S. data center in southern Virginia, both Microsoft's and Google's DNS servers point the same domain to an Azure web site also within the East U.S. data center.

It looks like both Microsoft and Google are using geographic load-balancing and some clever routing to return DNS addresses based on where the DNS request comes from. I'd bet if I spun up an Azure VM in the U.S. West data center, both would send me to the Azure blog running out there.

This is what massive load balancing looks like from the outside, by the way. If you've put your systems together correctly, users will go to the nearest servers for your content, and they'll never realize it.

Unfortunately, the North Central U.S. instance of the Microsoft Azure blog is down, has been down for several days, and won't come up again until someone at Microsoft realizes it's down. Also, Microsoft makes it practically impossible to notify them that something is broken. So those of us in Chicago will just have to read about Azure on our Azure VMs until someone in Redmond fixes their broken server. I hope they read my blog.

Wednesday 9 July 2014 10:26:44 CDT (UTC-05:00)  |  | Blogs | Cloud | Security | Windows Azure#
Thursday 3 July 2014

Last night I got an email from Microsoft saying the Windows Azure subscription that I got through work was disabled because it had run out of credits.

Some context:

  • The Microsoft Developer Network (MSDN) gives developers access to all of Microsoft's software development projects, along with a monthly credit to use Windows Azure that can go as high as $150. Because West Monroe Partners wants to make sure all of us have the right tools, we get the subscriptions with the $150 credit.
  • I activated my MSDN subscription a year ago, and so far have used only $7.25 of Azure services.
  • Yesterday I spun up a JDK 7.2 virtual machine (VM), which, at 33c per hour, was unlikely to bust my Azure credit limit. Plus, I shut it down when I was done, having used only 2 hours of computing time.

Here's what I missed when I spun up the VM:

(Click on it to see full-size.)

Even at full size you probably didn't notice the little warning box lower-right that says, in 9-point type, "You selected an image that has special pricing information. Learn more." You also probably didn't realize that the special pricing image means Microsoft will disable your Azure account if you don't give them money once you spin up this VM.

I'll skip to the end. Here is the relevant part of the message I sent to Microsoft Customer Support after I resolved the ensuing hilarity:

All right, now that I’ve managed to re-enable my subscription after wasting an hour of my life, I have four serious complaints.

Complaint #1: Shutting down an entire Azure subscription without warning because it has a 34c balance—thirty four U.S. cents—is unacceptable.

Complaint #2: The Azure account portal (account.windowsazure.com) does not work with Microsoft Internet Explorer 11. The login session does not propagate to the dialog box that takes billing information. I had to make the change using Google Chrome.

Complaint #3: The Azure account, but not the subscription, already had payment information available. Yet the portal prevented me from merely applying the existing payment information to the new subscription at the “remove spending limit” dialog box.

Complaint #4: If, despite all common sense and reason, a change to the subscription could result in the subscription being disabled without notice, a very small “Pricing Information” note is insufficient warning. The portal should have an unambiguous, impossible-to-miss step in the virtual machine configuration dialog box.

Is this looking a gift horse in the mouth? No. This is a benefit Microsoft provides developers so we developers can learn their products and sell them. So the horse isn't exactly a gift; it's a demonstrator. And for a few hours last night, mine wouldn't leave his stall.

Thursday 3 July 2014 09:47:50 CDT (UTC-05:00)  |  | Business | Windows Azure#
Thursday 12 June 2014

We've been using Microsoft Azure virtual machines for development for a while. This means we run our Visual Studio instances in the cloud up on special virtual machines that have nothing on them except the bare minimum required for writing software. This keeps different projects separate from each other, and also speeds up network access, which is useful for network-intensive applications.

We started noticing, however, that going to MSDN or Google or other big sites became...challenging. All of these sites started acting as if our VMs were located in Brazil, when we knew perfectly well that they were in Virginia. Microsoft has finally explained the problem:

IPv4 address space has been fully assigned in the United States, meaning there is no additional IPv4 address space available. This requires Microsoft to use the IPv4 address space available to us globally for the addressing of new services. The result is that we will have to use IPv4 address space assigned to a non-US region to address services which may be in a US region. It is not possible to transfer registration because the IP space is allocated to the registration authorities by Internet Assigned Numbers Authority.

At times your service may appear to be hosted in a non-US location.

It is important to note that the IP address registration authority does not equate to IP address physical location (i.e., you can have an IP address registered in Brazil but allocated to a device or service physically located in Virginia). Thus when you deploy to a U.S. region, your service is still hosted in U.S. and your customer data will remain in the U.S.

In other words, Microsoft's cloud service is so popular that they have run out of addresses to assign to it. Microsoft, it should be noted, has tens of millions of IPv4 addresses available. (Of course, IPv4 has only 4.2 trillion possible addresses, though fully 43 billion are in private IP ranges.)

Thursday 12 June 2014 10:49:56 CDT (UTC-05:00)  |  | Business | Cloud | Windows Azure#
Saturday 7 June 2014

Parker and I haven't yet left for Ribfest because I've just spent two and a half hours debugging an application.

After upgrading the application to the current version of the Inner Drive Extensible Architecture™ the thing wouldn't start. I simply got an error message in plain text, "The page cannot be displayed because an internal server error has occurred." The Windows Application Log supplied this clue:

The worker process for application pool 'a177c227-f36e-4874-aefe-9b41ca0d14ec' encountered an error 'Cannot read configuration file ' trying to read global module configuration data from file '\\?\C:\Users\dab\AppData\Local\dftmp\Resources\02e946dc-c92e-4774-a19a-5b013a38da65\temp\temp\RoleTemp\applicationHost.config', line number '0'. Worker process startup aborted.

Searching through Stack Overflow gave me a few clues, but nothing concrete. So I had to go through the web.config file line by line until I found this:

<system.diagnostics>
	<trace>
		<listeners>
			<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,
		Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, 
		PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
				<filter type="" />
			</add>
		</listeners>
	</trace>
</system.diagnostics>

Deleting the configuration section altogether worked. So did changing the 1.8 to a 2.2. And now the application runs. And now Parker and I are going to get ribs.

The error message is just stupid programmers being lazy. It isn't really that hard to write error messages that tell users what has gone wrong. In this case, line number 0 wasn't the problem; it was farther down in the configuration file, and in fact it had very little to do with the configuration file at all.

I would like to have seen a message in the application log that "the system could not load Microsoft.WindowsAzure.Diagnostics version 1.8." Why was that too hard for the Azure Emulator team?

Saturday 7 June 2014 13:22:50 CDT (UTC-05:00)  |  | Windows Azure#
Friday 6 June 2014

Microsoft Azure is having some difficulties today in its East data center. It's causing hiccups. Nothing more. Just hiccups. But these hiccups are peculiarly fatal to the Weather Now worker process, so it keeps dying. Before dying, it texts me. So in the last 18 hours I've gotten about 30 texts from my dying worker process.

Maybe it's just telling me to go see Edge of Tomorrow?

Update, 15:15 CDT: Microsoft has finally updated the service dashboard to reflect the horkage.

Friday 6 June 2014 14:36:20 CDT (UTC-05:00)  |  | Windows Azure#
Monday 19 May 2014

The deployment, I mean. Everything works, at least on the browsers I've used to test it. I ran the deployment three times in Test first, starting from a copy of the Production database each time, so I was as confident as I could be when I finally ran it against the Production database itself. And, I made sure I can swap everything back to the old version in about 15 minutes.

Also, I snuck away to shoot publicity photos for Spectralia again, same as last year. I'll have some up by the end of the week, after the director has seen them.

Sunday 18 May 2014 21:36:34 CDT (UTC-05:00)  |  | Photography | Business | Cloud | Windows Azure#
Sunday 18 May 2014

I have a totally-no-boring software deployment today. This is not optimal.

Sunday 18 May 2014 09:57:04 CDT (UTC-05:00)  |  | Software | Business | Cloud | Windows Azure#
Saturday 17 May 2014

Short answer: You can't. So don't try.

If you want to find out how I solved the problem (and what that problem actually was), click through.

Saturday 17 May 2014 14:27:42 CDT (UTC-05:00)  |  | Software | Cloud | Windows Azure#
Monday 12 May 2014

I'm uploading a couple of fixes to Inner-Drive.com right now, so I have a few minutes to read things people have sent me. It takes a while to deploy the site fully, because the Inner Drive Extensible Architecture™ documentation (reg.req.) is quite large—about 3,000 HTML pages. I'd like to web-deploy the changes, but the way Azure cloud services work, any changes deployed that way get overwritten as soon as the instance reboots.

All of the changes to Inner-Drive.com are under the hood. In fact, I didn't change anything at all in the website. But I made a bunch of changes to the Azure support classes, including a much better approach to logging inspired by a conversation I had with my colleague Igor Popirov a couple of weeks ago. I'll go into more details later, but suffice it to say, there are some people who can give you more ideas in one sentence than you can get in a year of reading blogs, and he's one of them.

So, while sitting here at my remote office waiting for bits to upload, I encountered these things:

  • The bartender's iPod played "Bette Davis Eyes" which immediately sent me back to this.
  • Andrew Sullivan pointed me (and everyone else who reads his blog) towards the ultimate Boomer fantasy, the live-foreverists. (At some point in the near future I'm going to write about how much X-ers hate picking up after both Boomers and Millennials, and how this fits right in. Just, not right now.)
  • Slate's Jamelle Bouie belives Wisconsin's voter rights decision is a win for our cause. ("Our" in this case includes those who believe retail voter fraud is so rare as to be a laughable excuse for denying a sizable portion of the population their voting rights, especially when the people denied voting rights tend to be the exact people who Republicans would prefer not to vote.)

OK, the software is deployed, and I need to walk Parker now. Maybe I'll read all these things after Game of Thrones.

Sunday 11 May 2014 21:15:29 CDT (UTC-05:00)  |  | Kitchen Sink | US | Software | Business | Windows Azure#
Wednesday 7 May 2014

I want to try this:

In less than an hour [my website] went from a small prototype in a data center in Chicago and then scaled it out to datacenters globally and added SSL.

The step-by-step explanation is worth a read if you do anything in .NET.

Wednesday 7 May 2014 10:56:26 CDT (UTC-05:00)  |  | Cloud | Windows Azure#
Thursday 24 April 2014

Busy day, so I'm just flagging these for later:

Back to the mines...

Thursday 24 April 2014 16:20:42 CDT (UTC-05:00)  |  | Kitchen Sink | London | US | Cool links | Windows Azure#
Sunday 6 April 2014

Yesterday I migrated this blog and four other ASP.NET websites from a Windows 2008 Microsoft Azure virtual machine (VM) to a brand-new Windows 2012 R2 VM. I did this because Microsoft has announced the end-of-life for Windows 2008 VMs on June 1st, so I thought I'd get a jump on it.

VMs usually mean never having to say "reinstall." Unfortunately, since this involved upgrading three steps at once, I decided it would be simpler just to launch a new VM and migrate the applications using FTP.

Seven hours and 25 minutes later, everything works, and I've archived the old VM's virtual hard disk (VHD). Why did it take 7:25 to complete?

Forget it. I'm not reliving those hours. I will say only that at least 90 minutes of that time was completely wasted because my AT&T Uverse FiOS line doesn't...quite...make it to my building, limiting it to 1.5 Mbps. Yes, I have a 1.5 Mbps Internet line. While waiting for things to download and upload yesterday, I spoke with them, and they assured me that I have the fastest Uverse service available to me.

Which brings up the other problem with doing so much in Microsoft Azure: you need good Internet connectivity. Which I don't have. Which meant I spent a lot of time yesterday rubbing Parker's belly and cursing AT&T.

Sunday 6 April 2014 09:20:44 CDT (UTC-05:00)  |  | Blogs | Cloud | Windows Azure#
Tuesday 1 April 2014

Microsoft has partnered with Lotus Formula 1 Racing to create a series of ads about Microsoft Azure:

Neowin reports:

The new ad, which has been running for the past few days on many U.S. TV networks and has been posted on YouTube, attempts to show how the Lotus Formula 1 racing team uses a number of Microsoft cloud services such as Azure, Office 365 and Dynamics to collect and analyze data from 200 sensors on the car. The ad's main them is that the cloud products offer the Lotus team a way to better understand how the F1 vehicle runs on each track and, therefore, give them an edge in winning races.

The new TV commercial comes even as rumors hit the Internet that Microsoft is planning to rebrand its Windows Azure cloud website hosting service to Microsoft Azure, in order to better reflect the fact that it can use software not made by the company like Linux.

The "rumors" are true, by the way. The service is now called Microsoft Azure.

Tuesday 1 April 2014 12:34:55 CDT (UTC-05:00)  |  | Business | Windows Azure#
Wednesday 19 March 2014

The repercussions from Monday's data-recovery debacle continued through yesterday.

By the time business started Tuesday morning, I had restored the client's application and database to the state it had at the moment of the upgrade, and I'd entered most of their appointments, including all of them through tomorrow (Thursday). When the client started their day, everything seemed to be all right, except for one thing I also didn't know about their business: some of their customers pay them based on the appointment ID, which is nothing more than a SQL IDENTITY column in the database.

If you know how databases work, you know that IDENTITY columns are officially non-deterministic. In this specific case, the column increments by one every time it adds a row, but also in this specific case, I didn't re-enter the data in the same order it was originally entered, since I prioritized the earlier appointments.

We've gotten through the problem now, and the client no longer want to put my head on a spike, so I will now take a moment for an after-action review that might help other software developers in the future.

First, the things I did right:

  • When I deployed the upgrade Saturday, I preserved the state of the database and application at exactly that moment.
  • All of the data in the system, every field of it, was audited. It was trivially easy to produce a report of every change made to the system from roll-out Saturday afternoon through roll-back Monday night.
  • When I rolled back the upgrade Monday night, I preserved the state of the upgraded database and application at exactly that moment.
  • When the client first noticed the problem, I dropped everything else and worked out a plan with them. The plan centered around getting their business back up first, and then dealing with the technology.
  • Their customers were completely back to normal at the start of business Tuesday.
  • The application runs on Windows Azure, which made preserving the old application state not only easy, but possible.

So what should I have done better?

  • My biggest error was overconfidence in my ability to roll back the upgrade. No matter what other errors I made, this was the root of all of them.
  • The second major error was not testing the UI on Internet Explorer 8. Mitigating this was the fact that neither I nor my client was aware that the bulk of their customers used IE8. However, given that people using IE8 were totally unable to use the application, even if the numbers of customers using IE8 was very small, the large impact should have put IE8 near the top of my regression test checklist.
  • Instead of spending a couple of hours re-entering data, I should have written a script to do it.
  • I have always regretted (though never more than today) publicizing the appointments IDENTITY column to the end user, because it's normal they'd use this ID for business purposes. This illustrates the danger—not just the sloppy design—of using a single database field for two purposes. Any future version of the application will have an OrderID field that is not a database plumbing field.

All in all, the good things outweighed the bad, and I may get back in my client's good graces when I roll out the next update. You know, the one that works on IE8, but still solves the looming problem of the platform's age.

Wednesday 19 March 2014 09:59:00 CDT (UTC-05:00)  |  | Software | Business | Cloud | Windows Azure#
Tuesday 18 March 2014

At 8:16 this morning, a long-time client sent me an email saying that one of his customers couldn't was getting a strange bug in their scheduling application. They could see everything except for the tabbed UI control they needed to use. In other words, there was a hole in the screen where the data entry should have been.

Here's how the rest of the day went around this issue. It's the kind of thing that makes me proud to be an engineer, in the same way the guys who built Galloping Gertie were proud.

The whole story is past the jump...

Monday 17 March 2014 23:26:14 CDT (UTC-05:00)  |  | Business | Cloud | Security | Windows Azure | Work#
Tuesday 4 March 2014

If I have time, I'll read these articles today:

Now, to work.

Tuesday 4 March 2014 08:31:47 CST (UTC-06:00)  |  | Aviation | Chicago | Kitchen Sink | Cloud | Weather | Windows Azure#
Saturday 1 March 2014

Parker, 14 weeksI'm David Braverman, this is my blog, and Parker is my 7½-year-old mutt. I last updated this About... page in September 2011, more than 1,300 posts back, so it's time for a refresh.

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.
  • The weather. I've operated a weather website for more than 13 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 sometimes London, San Francisco, and the rest of the world.
  • Photography. I took tens of thousands of photos as a kid, then drifted away from making art until early 2011 when I finally got the first digital camera I've ever had whose photos were as good as film. 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.

I also write a lot of software, and will occasionally post about technology as well. I work for 10th Magnitude, a startup software consultancy in Chicago, I've got more than 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.

Thanks for reading, and I hope you continue to enjoy The Daily Parker.

Saturday 1 March 2014 14:27:44 CST (UTC-06:00)  |  | Aviation | Baseball | Biking | Cubs | Geography | Kitchen Sink | London | Parker | Daily | Photography | Politics | US | World | Religion | Software | Blogs | Business | Cloud | Travel | Weather | Windows Azure | Work | Writing#
Monday 17 February 2014

I spent 4½ hours today upgrading three low-traffic websites in order to shut down an Azure database that cost me $10 per month.

The problem is this: I continually improve the Inner Drive Extensible Architecture as I learn better techniques for doing my craft. The IDEA began in 2002, and the industry changes rapidly, so every so often it changes significantly enough that things using earlier versions break when they're upgraded. About a year ago, version 2 ended and version 3 came out, breaking everything that used version 2.

Except, I still had some things out there using version 2, including its clunky data architecture. Therefore, I had to keep its clunky data architecture running on its own Azure database, at a cost of about $10 a month.

The three sites involved date from 2004, 2006, and 2007. All three moved to Microsoft Windows Azure by mid-2012, but unfortunately that means all three used the Azure SDK 1.7, which Microsoft killed somewhere around November 2012.

Upgrading from a dead version to a live version requires some effort. So for 4½ hours today, I dealt with version conflicts, expired publishing certificates, niggling little configuration errors, and a virtual machine that needed a critical upgrade. Along the way I gained 10 Stack Overflow reputation points because other people have felt my pain, but didn't know how to get past it.

This is a good example of yak shaving, and also the fundamental principle of software development: enlightened laziness.* Had a client needed me to do this work, each upgrade would have cost the client around $300 (which, being a salaried consultant, I would not have actually received). So it wasn't horribly expensive, but remember: I did this to save $10 per month.

So, from a commercial perspective, today's activities made no sense. Yet I feel completely satisfied that I solved a problem today that had bothered me for months.

* Why spend 10 minutes on a task when you can spend 4 hours automating it? By these words ye shall know software professionals.

Sunday 16 February 2014 21:00:04 CST (UTC-06:00)  |  | Business | Cloud | Windows Azure#
Sunday 16 February 2014

I remember, back in .NET prehistory (2001), that one of .NET's biggest benefits was to be the end of DLL hell. Yet I spent half an hour this afternoon trying to get a common package (Entity Framework 6) to install in a project that never had that package in the first place—because of a version conflict with .NET itself.

When I tried to install EF6, the NuGet package installer failed the installation with the message "This operation would create an incorrectly structured document". A quick check of StackOverflow suggested a couple of possible causes:

  • The Entity Framework installer creates an invalid web.config file because it gets confused about the older project's XML namespaces.
  • The EF installer chokes on .NET 4.5 and .NET 4.5.1 because it's broken.

Anyone who's spent time with Microsoft products should immediately suspect that hypothesis #2 is unlikely. No, seriously: Microsoft releases things that have bad usability, rude behavior, and incomplete features all the time, but they have some incredible QA people. This fits that pattern: the installer script works fine. It just has pretty dismal error reporting.

So after removing every trace of EF from the relevant files, and downgrading the app to .NET 4.0 from .NET 4.5.1, EF still wouldn't install. Only at this point did I start thinking about the problem.

Let's review: I had an error message about an incorrectly-structured document. The document in question was almost certainly web.config, which I could tell because the EF6 installation kept changing it. The web.config file is an XML document. XML allows you to specify a namespace. This particular XML document had a namespace defined. A Stack Overflow commenter had mentioned namespaces. Um...

At this point I changed the web.config header element from this:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

to this

<configuration>

That fixed it.

The moral of this story: read error messages carefully, form hypotheses based on the data you have available, and even before that, stop and think. And even if you're not a Microsoft developer working on NuGet package installer scripts, always give as much detail as possible in error messages, so that developers who read them can spend less time trying to understand why the operation they thought was simple took so long to accomplish.

Regular readers of this blog know how irritated I get when error messages don't actually explain the error. I'm on developers for this all the time. It's rude; it's lazy; it costs people irrecoverable time. This is one of those times.

Sunday 16 February 2014 17:35:55 CST (UTC-06:00)  |  | Software | Cloud | Windows Azure#
Sunday 26 January 2014

Yesterday I wrote that I'd spend this morning setting up the Inner Drive Website as a continuous-delivery application running in Windows Azure cloud services. Well, that was a bit optimistic. Here's what I did instead:

  • Shook my head sadly that the last time I published the site at all was last March. That's a little dis-continuous, I think.
  • Upgraded the application to .NET 4.51, the Azure SDK 2.2, Azure Storage 3.0, and the latest Inner Drive Extensible Architecture build.
  • Moved the master code repository to my real provider.
  • Upgraded an administration feature to a new database schema.
  • Created an entirely new copy of the site's database to accommodate this, because other applications are using the old database schema.
  • Beat Web deploy into submission to avoid the 30-minute Azure publish time. (Why 30 minutes? Because I have a slow DSL and because the site has about 30 MB of SDK files (register!).
  • Corrected an idiotic mistake that prevented people from resetting their forgotten passwords.

The total time for this mishigos: 5 hours, including 6 minutes for the last bullet point.

So I haven't actually converted the repository to Git, let alone set up a CI server or anything like that. And now, I will go walk the dog, and work on this no more.

Sunday 26 January 2014 15:54:23 CST (UTC-06:00)  |  | Business | Cloud | Windows Azure#
Saturday 25 January 2014

This is just a note to myself, really. Last weekend I spent an hour setting up continuous deployment of an Azure website using Git.

At work, we're moving towards doing the same thing with Azure cloud services, which has a different set of problems to solve.

I'll have more to say about this once we've done it. Meanwhile, here are a few of the resources we're reading to get started:

This weekend I may move Inner-Drive.com to CI/CD as well. It'll be my Sunday Morning project, possibly.

Saturday 25 January 2014 14:24:39 CST (UTC-06:00)  |  | Business | Cloud | Windows Azure#
Thursday 16 January 2014

This is a big deal for shops like 10th Magnitude, my employer, especially given that we developed the API for Arrow Payments. PCI compliance means banks—who have skin in the game—have certified Azure is secure enough for credit-card processing:

The PCI DSS is the global standard that any organization of any size must adhere to in order to accept payment cards, and to store, process, and/or transmit cardholder data. By providing PCI DSS validated infrastructure and platform services, Windows Azure delivers a compliant platform for you to run your own secure and compliant applications. You can now achieve PCI DSS certification for those applications using Windows Azure.

To assist customers in achieving PCI DSS certification, Microsoft is making the Windows Azure PCI Attestation of Compliance and Windows Azure Customer PCI Guide available for immediate download.

The latest Azure release also has a bunch of other great features for developers, including monitoring tools and Web site improvements, but PCI is the big one.

Thursday 16 January 2014 15:01:35 CST (UTC-06:00)  |  | Cloud | Windows Azure#
Sunday 5 January 2014

Right before Christmas I removed the four dormant servers from the Inner Drive Technology International Data Center (IDTIDC), vowing to complete the job posthaste. Well, haste was Wednesday, so now, post that, I've finally finished.

There are no more servers in my apartment. The only computers running right now are my laptop and the new NAS. (The old switch, hidden under a chair, still has a whirring fan. I may replace it with a smaller, non-fanned switch at some point.)

Here's before:

And here's the after:

Notice that Parker doesn't seem too freaked out by the change, though he did seem uncomfortable while things were actually changing. He's resilient, though.

Fully 18 months ago I started moving all my stuff to Microsoft Azure. Today, the project is completely done. My apartment is oddly quiet, and seems oddly larger. I can get used to this.

Saturday 4 January 2014 18:18:07 CST (UTC-06:00)  |  | Business | Cloud | Windows Azure#
Tuesday 26 November 2013

With only a few hours to go before I jet out of Chicago, I'm squeezing in client work and organizing my apartment while on conference calls. Also, I'm sending these to my Kindle:

Back to debugging...

Tuesday 26 November 2013 12:20:37 CST (UTC-06:00)  |  | US | World | Travel | Windows Azure#
Friday 25 October 2013

Once again, here's a list of things I'm sending straight to Kindle (on my Android tablet) to read after work:

Back to work. All of you.

Friday 25 October 2013 12:29:22 CDT (UTC-05:00)  |  | Aviation | Chicago | Kitchen Sink | US | Business | Cloud | Windows Azure#
Thursday 12 September 2013

We've published Part 3 of my series of blog posts about integrating Holden International's Azure-based sales training app with multiple customer-relationship management (CRM) applications. The combined parts 1 and 2 went up mid-August. Part 4 should come out within 10 days.

Click through for the mirrored post.

Thursday 12 September 2013 13:35:53 CDT (UTC-05:00)  |  | Business | Windows Azure | Work#
Tuesday 27 August 2013

Microsoft's Scott Hanselman has published one:

IAAS

Infrastructure as a Service. This means, I want the computers in my closet to go away. All that infrastructure, boxes, network switches, even software licenses are a headache. I want to put them somewhere where I can't see them (we'll call it, The Cloud) and I'll pay pennies an hours. Worst case, it costs me about the same but it's less trouble. Best case, it can scale (get bigger) if some company gets popular and it will cost less than it does now.

IAAS is Virtual Machines, Networking and Storage in the cloud. Software you wrote that runs locally now will run the same up there. If you want to scale it, you'll usually scale up.

PAAS

Platform as a Service. This means Web Servers in the cloud, SQL Servers in the cloud, and more. If you like Ruby on Rails, for example, you might write software against Engine Yard's platform and run it on Azure. Or you might write iOS apps and have them talk to back end Mobile Services. Those services are your platform and will scale as you grow. Platform as a service usually hides the underlying OS from you. Lower level infrastructure and networking, load balancing and some aspects of security is abstracted away.

If you're interested in Cloud or Azure development, or you want to understand more about what I do for a living, take a look.

Tuesday 27 August 2013 07:49:09 CDT (UTC-05:00)  |  | Cloud | Windows Azure#
Saturday 24 August 2013

A couple weeks back I moved an Azure Virtual Machine from one subscription to another. Since then, I haven't been able to connect to the FTP sites that were running on it. I finally spent some time today to figure out why.

First, I forgot to change the FTP firewall support in IIS. The IP address of the VM changed, so I needed to update the VM's external IP address here:

Then, I had to change the FTP firewall support for the FTP site itself. (It looks the same, just on the FTP site instead of on the IIS root node.)

Ronald Door has a good walk-through of how to set this up for the first time on a new VM. The problem is, I'd already set it up on the VM, so I thought that I only had to make the configuration changes I've just described.

Flash forward an hour and a lot of swearing later, and I realized one more problem. See, I set up the VM endpoints through the Azure portal when I launched the VM in the new subscription. However, it looks like I configured them incorrectly. And Microsoft updated the portal last week.

I finally decided simply to delete all four FTP endpoints (port 20 and 21 plus my two passive data return ports) and rebuild them. Endpoint setup is on the Endpoints tab of the Virtual Machine cloud service item:

That worked. The FTP spice flows fine now.

I'm troubled that I don't know exactly why it worked, though. The only difference between the current and previous setup is that before, I inadvertently created load-balanced sets for the ports. Since I only have one VM, that may have been my error.

Saturday 24 August 2013 12:56:08 CDT (UTC-05:00)  |  | Windows Azure#
Sunday 11 August 2013

Yes, I know the weather's beautiful in Chicago this weekend, but sometimes you just have to run with things. So that's what I did the last day and a half.

A few things collided in my head yesterday morning, and this afternoon my computing landscape looks completely different.

Sunday 11 August 2013 16:30:24 CDT (UTC-05:00)  |  | Business | Cloud | Security | Windows Azure | Work#
Thursday 1 August 2013

...because I didn't have time to read them today:

I will now go home and read these things on the way.

Thursday 1 August 2013 18:16:13 CDT (UTC-05:00)  |  | Aviation | Kitchen Sink | Windows Azure | Work#
Wednesday 17 July 2013

At 10th Magnitude, we have used Beanstalk as our central code repository. We transitioned to Mercurial about a year ago, which Beanstalk supported.

Today they sent around an email saying they're ceasing Mercurial support—including existing repositories—on September 30th, and would we care to switch to Git?

No. No, no, no. No Git. I'm not asking people to learn another damn version control system. (Plus Git doesn't quite suit us.)

But fortuitously, this forced re-evaluation of Beanstalk coincides with a general self-reflective re-evaluation we have underway. That doesn't mean we're going to Git, or (angels and ministers of grace, defend us!) back to Subversion, but as long as we have to move off Beanstalk, why not take a look at our issue tracking, external bug reporting, project management, and document sharing?

I'll have more about this as we get closer to the September 30th date, along with some awesome stuff about how we have developed an Azure application that does single sign-on with...just about any identity provider.

Tuesday 16 July 2013 19:58:09 CDT (UTC-05:00)  |  | Business | Cloud | Windows Azure | Work#
Saturday 15 June 2013

As I promised four weeks ago, I have the final data on moving all my stuff to Windows Azure. I delayed posting this data because Azure pricing recently changed, as a number of services went from Preview to Production and stopped offering 25% discounts.

The concrete results are mixed at the moment, though increasing within the next couple of months. The intangible results are much, much improved.

An exciting graph and some detailed data on Azure after the break.

Saturday 15 June 2013 09:47:53 CDT (UTC-05:00)  |  | Business | Windows Azure#
Monday 20 May 2013

I have 21 hours of budget to finish a substantial project at work, and then another project to finish by the end of May. Posting may be iffy the next couple of days.

Coming up, the final figures on how much moving to Azure saved me.

Monday 20 May 2013 15:40:52 CDT (UTC-05:00)  |  | Business | Windows Azure#
Sunday 21 April 2013

On March 10th, I completed moving Weather Now to Windows Azure, and shut down the Inner Drive Technology International Data Center. I had already received my lowest electric bill ever for this location, thanks to a 25% rate reduction negotiated by the City.

Earlier this week I got my March electric bill, for my electricity use between March 8th and April 7th. Take a look:

My electricity use in March 2013 was just 26% of my March 2012 use (243 kw/h in 2013 against 933 kw/h in 2012). The bill was 80% lower, too.

My telecommunications bill also went down considerably. After I have complete data of these cost differences mid-May, I'll post a full rundown of how much moving to Azure saves me every month.

Sunday 21 April 2013 09:38:19 CDT (UTC-05:00)  |  | Business | Windows Azure#
Friday 22 March 2013

Too much going on:

Now, I will go back to drafting documentation while I wait for AT&T to reconfigure my DSL and kill my landline. I've had a POTS ("plain old telephone service") twisted-pair line longer than most people on earth have been alive. After today, no longer. I don't think I'll miss it, either. I only have it because I have a business-class DSL, which I don't need anymore, and the only people who call it want money from me.

Friday 22 March 2013 09:12:03 CDT (UTC-05:00)  |  | Kitchen Sink | US | World | Business | Cloud | Security | Windows Azure#
Sunday 17 March 2013

I've fixed seven annoying bugs and added three minor features to Weather Now, including:

  • Fixed searching from the search box so you can enter an airport code directly;
  • Fixed the Last 24 hours page to show day and night icons properly;
  • Added a status page so users can peek under the hood; and
  • Tweaked a few things in the background worker process around logging and status update alerts.

A minor bug fix release like this used to take a couple of hours to deploy, because I had to update the code running on the web server file-by-file. I got the process down to about an hour—but I still had to bring the application offline to make the update.

Since I put it up in Microsoft Windows Azure, publishing an update takes about 15 minutes, is completely automated, and doesn't require taking the site down. The great Inner Drive migration continues to pay dividends.

Sunday 17 March 2013 13:51:36 CDT (UTC-05:00)  |  | Cloud | Weather | Windows Azure#
Tuesday 12 March 2013

I'm paying 90% of my attention right now to a Windows Azure online training class. I already knew a lot of the material presented so far, but not all of it. It's like re-taking a class you took as an undergraduate; the 10% you didn't know is actually really helpful.

Like next week's class, which will go over Infrastructure as a service: a lot has changed in the last year, so it should be valuable.

Apparently, though, my homework is to build an Azure web site this week. Not a multi-tier application with a worker role. Just a web site. How adorable.

Tuesday 12 March 2013 16:09:05 CDT (UTC-05:00)  |  | Cloud | Windows Azure#
Sunday 10 March 2013

The Inner Drive Technology International Data Center is no more.

This morning around 8:15 CDT I updated the master DNS records for Weather Now, and shut down the World Wide Web service on my Web server an hour later. All the databases are backed up and copied; all the logs are archived.

More to the point, all the servers (except my domain controller, which also acts as a storage device) are off. Not just off, but unplugged. The little vampires continue to draw tens of Watts of power even when they're off.

The timing works out, too. My electric meter got read Thursday or Friday, and my Azure billing month starts today. That means I have a clean break between running the IDTIDC and not running it,* and by the beginning of May I'll have more or less the exact figures on how much I saved by moving everything to the Cloud.

Meanwhile, my apartment is the quietest it's ever been.** The domain controller is a small, 1U server with only one cooling fan. Without the two monster 2U units and their four cooling fans (plus their 12 hard drives), I can suddenly hear the PDC...and now I want to shut it down as well.

* Except for the DSL and land-line, which should be down in a couple of weeks. I'll still have all the expense data by May.

** Except for the two blackouts. Now, of course, I never need worry about a blackout again—unless it hits the entire country at once, which would create new problems for me.

Sunday 10 March 2013 13:10:42 CDT (UTC-05:00)  |  | Business | Cloud | Windows Azure#

Weather Now is fully deployed to the Cloud. As soon as the Worker Role finishes parsing the last few hours of weather, I'll cut over the DNS change, and it will be live.

Actually, that's not entirely true; I'm going to cut over the DNS in the morning, after I know I fixed the bugs I found during this past week's shake-down cruise.* So if you want to see what a weather site looks like while it's back-filling its database, you can go to its alias, http://wx-now.cloudapp.net. (Because of how Azure works, this will remain its alias forever.)

Time to meet my friends, who are wondering where I am, no doubt.

* Bugs fixed: 13. Total time: 6.9 hours (including 2.4 to import and migrate the Gazetteer).

Saturday 9 March 2013 18:34:28 CST (UTC-06:00)  |  | Business | Cloud | Weather | Windows Azure#
Saturday 9 March 2013

The final deployment of Weather Now encountered a hitch after loading exactly 3 million (of 7.2 million) place names. I've now kludged a response for the remaining 4.2 million rows, and a contingency plan should that upload fail.

Meanwhile, I have a saturated Internet connection. So rather than sit here and watch paint dry, so to speak, I'm bringing back some of the bugs that I decided to postpone fixing. The end result, I hope, will be a better-quality application than I'd planned to release—and a rainy Saturday made useful.

Saturday 9 March 2013 14:25:30 CST (UTC-06:00)  |  | Cloud | Weather | Windows Azure#

Tomorrow morning, shortly after I have my coffee, I will finally turn off the last two production servers in my apartment the IDTIDC. The two servers in question, Cook and Kendall, have run more or less continuously since November 2006*, gobbling up power and making noise the whole time.

As I write this, I'm uploading the production Weather Now deployment along with the complete Inner Drive Gazetteer, a 7.2-million row catalog of place names that the site uses for finding people's local weather. It takes a while to upload 7.2 million of anything, of course; and it's only 35% done after two hours. Trying to deploy the Cloud package at the same time may not have made the most sense, but I need the weather downloader to start running now so that when I cut over to the new site, it has actual weather to show people.

I started this project on November 3rd, logging almost exactly 100 hours on it until today. I'm through the tunnel and almost done climbing up the embankment. One more night of whirring fans and then...quiet.

Update: Crap. The Gazetteer upload crashed after 3 million rows. Now Plan B...

* Yes, I did just link to the Wayback Machine there. The original Inner Drive blog is offline for the time being. I have a task to restore it, as I haven't updated it since 2008, it's not a priority.

Another update: the original link at (*) pointed to Wayback Machine, but after reconstituting the old blog I corrected the link. That's why the footnote above no longer makes a lot of sense.

Saturday 9 March 2013 12:19:17 CST (UTC-06:00)  |  | Cloud | Weather | Windows Azure#
Sunday 3 March 2013

I don't know what to do with myself the rest of the day. I've just deployed the completely-redesigned Weather Now application. I feel 10 kilos lighter.

Check out the preview on Windows Azure.

The application started in mid-1997 as a feature of the now-defunct braverman.org, my proto-blog. The last major changes happened in 2006, when I gave it a face-lift. I've occasionally pushed some bug fixes, but really, until today it has looked and acted essentially the same way for 6 years. (The GetWeather application, which downloads and parses data from outside sources, hasn't changed significantly since 2002.)

So what's new? In sum:

  • The application now runs on Microsoft Windows Azure, up in the cloud. (Check out the preview!)
  • This means it also runs on Azure SQL Database instead of on-site SQL Server.
  • Since I had to port the database anyway, I completely re-architected it.
  • The database rearchitecture included moving its archives to Azure Storage, which will pay benefits once I update the UI to take advantage of it.
  • The ancient (1997, with revisions in 1999, 2002, and 2005) GetWeather application, which downloads weather data from outside sources, got rebuilt from byte 0 as well.
  • Finally, I fixed 35 bugs that the old architecture either caused or made fixing overly difficult.

There are a few bugs in the preview, of course. This morning I found and fixed 6 of them, all related to architectural changes under the hood that the creaky user interface didn't understand. And just now, I discovered that it thinks the sun never shines anywhere—again, almost certainly a problem related to changing from using the broken System.DateTime object to its replacement, System.DateTimeOffset. Always another bug to fix...

Still: I'm done with the port to Azure. I'll bang away on it for the next week, and if all works out, on Saturday I'll finally, finally, finally turn off my servers.

Sunday 3 March 2013 12:37:48 CST (UTC-06:00)  |  | Weather | Windows Azure#
Saturday 2 March 2013

I've just finished—I mean, finished—the Weather Now worker role. The worker role runs in the background and performs tasks like, for example, downloading the weather from outside sources, parsing it, and storing it.

I have three tasks left to enable me to publish the new version of Weather Now to its new home in Windows Azure:

  • Create a script to initialize the lists that appear on the site's home page;
  • Upgrade the existing ASP.NET website to an ASP.NET web application; and
  • Create an Azure Cloud Service Web role to house the application.

I believe I will be done today sometime. But first, Parker is demanding a trip outside.

Saturday 2 March 2013 12:46:49 CST (UTC-06:00)  |  | Weather | Windows Azure#
Friday 1 March 2013

I'm just a day from losing my mind (or "loosing," to all you Facebookers out there), a day from my workload returning to normal levels, and a day from deploying Weather Now to a test instance in Azure. Then, maybe, I'll have time to take all these in:

Watch this space for a sneak preview of Weather Now 4.0, possibly tomorrow. The GetWeather utility has run with only minor hitches for a week, and with two more (quick) bug fixes it's ready for production. That just leaves about 6 hours of work to move the ASP.NET application up to Azure...and then, you get to beta test it. If all goes well I'll cut over to Azure on the 9th or 10th, and finally—finally!—retire my last two servers.

Friday 1 March 2013 13:38:44 CST (UTC-06:00)  |  | Aviation | Chicago | Geography | Kitchen Sink | Weather | Windows Azure#
Monday 25 February 2013

I don't have time to read these must-read articles:

Back to the mines...

Monday 25 February 2013 16:47:50 CST (UTC-06:00)  |  | Kitchen Sink | Business | Cloud | Windows Azure#
Saturday 23 February 2013

Microsoft has suffered some unfortunate outages this week, first affecting SQL databases on Monday, and then yesterday storage:

On Friday, February 22 at 12:44 PM PST, Storage experienced a worldwide outage impacting HTTPS traffic due to an expired SSL certificate. This did not impact HTTP traffic. We have executed repair steps to update SSL certificate on the impacted clusters and have recovered to over 99% availability across all sub-regions. We will continue monitoring the health of the Storage service and SSL traffic for the next 24 hrs. Customers may experience intermittent failures during this period. We apologize for any inconvenience this causes our customers.

The outage caused problems throughout the Azure universe, because SSL-based storage underpins just about everything. Without Storage, for example, any VM that goes offline can't restart, because its VHD is kept in Storage. Web sites and Service Bus were also hosed. My customers were annoyed.

These problems can affect any computing system. The problem with Azure Storage going down was the scope of it: millions of applications. Even the largest colo data center only has tens of thousands of computers. With so many people affected, the outage looks like a disaster.

I'll be watching Microsoft closely over the next few days to see what more they can tell us about the outage. But if this was all do to certificates expiring, wow.

Saturday 23 February 2013 08:52:26 CST (UTC-06:00)  |  | Cloud | Windows Azure#
Search
On this page....
Weather Now gazetteer now really, really fast
Lucene coming to Weather Now
What's going on with the Microsoft Azure blog?
Microsoft's excellent usability and customer care
When a convenience becomes a nuisance, Azure VM edition
Stupid error messages that cost lots of time
Not making my job easier today
That seemed to go well...
Scary software deployment
How to look up Azure table data by ID
Waiting for software to deploy...
Scaling Azure websites globally
Stuff I didn't get to this afternoon
Even Azure requires maintenance
Microsoft Azure TV ads
It's not the good times they care about, it's the bad
And the day started so well...
Morning link round-up
About this blog (v 4.2)
Shaving the yak
Error installing Entity Framework 6 in a very old Web project
The opposite of continuous delivery
Continuous integration with Azure cloud services
Windows Azure is now fully PCI-compliant
The IDTIDC is no more
Too much to do
Lunchtime link list
Managing multiple CRM connections with one Azure application
Hanselman's Azure Glossary for the Confused
Configuring FTP on a moved Azure VM
Unexpectedly productive weekend
Articles I've sent to my Kindle
Re-evaluating tools. Again.
Inner Drive Azure benefits
Wrapping up a project
First post-Azure electric bill
Things I might have time to read this weekend
Weather Now bug fixes deployed
Azure training...?
Weather Now 4.0 in Production
That's all he wrote
While the data uploads...
The Inner Drive Technology International Data Center's last day
Weather Now 4.0 released to Beta
Almost done with Weather Now's upgrade
March? What do you mean, March?
Happy 12-hour Monday!
The very bad week of Microsoft Windows Azure
Countdowns
The Daily Parker +3264d 13h 02m
To London +5d 14h 43m
Parker's 9th birthday 237d 00h 11m
My next birthday 318d 04h 16m
Categories
Aviation (336) Baseball (110) Best Bars (6) Biking (44) Chicago (892) Cubs (197) Duke (132) Geography (329) Higher Ground (5) Jokes (282) Kitchen Sink (637) London (52) Parker (189) Daily (204) Photography (142) Politics (303) US (1079) World (252) Raleigh (21) Readings (8) Religion (66) San Francisco (87) Software (200) Blogs (74) Business (225) Cloud (89) Cool links (132) Security (98) Travel (202) Weather (688) Astronomy (84) Windows Azure (59) Work (54) Writing (8)
Links
Archive
<October 2014>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Full archive
Blogroll
About
David Braverman and Parker
David Braverman is a software developer in Chicago, and the creator of Weather Now. Parker is the most adorable dog on the planet, 80% of the time.
Legal
All content Copyright ©2014 David Braverman.
Creative Commons License
The Daily Parker by David Braverman is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License, excluding photographs, which may not be republished unless otherwise noted.
Admin Login
Sign In
Blog Stats
Total Posts: 4514
This Year: 412
This Month: 27
This Week: 3
Comments: 0