Politics, Weather, Photography, and the Dog
Page 1 of 2 in the SoftwareCloud 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 26 June 2014

A Comcast installer showed up this morning within the appointed time frame, and in about an hour had taken my apartment the Inner Drive Technology World Headquarters from this:

To this:

I almost want to dance around singing "A Whole New World" but that would be very disturbing to my self image.

Instead I'll head into the office, getting in a little earlier than I expected, and come home to real Internet speeds. In fact, I think right now I'll watch something on YouTube just because I can.

Goodbye, AT&T. Hello Comcast, you gorgeous thing.

Thursday 26 June 2014 11:36:51 CDT (UTC-05:00)  |  | Software | Cloud | Work#
Thursday 19 June 2014

No, not aviation routing; IP routing.

From the Terminal 2 American Airlines club, I am unable to hit most *.cloudapp.net IP addresses. This is significant because it's basically all of Microsoft Azure, including logon.microsoft.net, Weather Now, and a bunch of other sites I use or have some responsibility for.

I've just spent a few minutes testing DNS (everything is fine there) and then using tracert and pathping, and it looks like the entire 168.62.0.0/16 and 168.61.0.0/16 ranges are just not visible from here. (The Daily Parker is also in Azure, but its IP is in the 191.238.0.0/16 subnet, which seems to be visible just fine.)

I wonder if Microsoft knows that its U.S. East data center is being blocked by some French ISP? Or why?

Thursday 19 June 2014 15:53:25 CEST (UTC+02:00)  |  | Cloud | Security#
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#
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#
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#
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#
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#
Saturday 18 January 2014

A co-worker sent around this post from Iris Classon explaining how to set up continuous deployment in Azure. She used Visual Studio Online and Team Foundation Server. I spent about two hours this morning doing it with Visual Studio 2013 and Bitbucket. There are a couple of gotchas the way I did it:

  • First, I made a mistake, and started with the Visual Studio 2012 MVC template. There's actually a VS2013 MVC template that has better authentication features, but, well, sometimes you miss things, right?
  • Because of this, I had to add the ASP.NET Universal Providers 2.0 package from NuGet.
  • Jumping to the end, it also means I had to copy WebMatrix.Data.dll directly into the deployed Web site by FTP. It didn't get deployed through Git.
  • When I created a new Web database using the Azure portal quick-create, no amount of convincing could persuade the portal to create the database in the North Central U.S. data center just outside Chicago. Instead, it created the thing in Southeast Asia. Since the Web site was in Chicago, this was inconvenient. I wound up just adding a new database to an existing Azure server.
  • The ASP.NET universal providers required create table permissions when the application started, to create the app's membership tables. Since I had created the database on an existing server, this required me to add the application user account to the database owners role for a moment, which I don't like doing. Oh, and because it was a new database, I had to grant select, insert, update, and delete permissions to the application user account manually.

The app is pretty simple, and may not last long in its current incarnation. If you're really curious you can see it here.

The app, however, isn't the point; continuous deployment is. And I found, once I got it running, that pushing changes to the site's repository in Bitbucket updated the site transparently.

I'll play with this a little more when I have time.

Saturday 18 January 2014 13:36:32 CST (UTC-06:00)  |  | Cloud#
Friday 17 January 2014

Just getting a server rack out of one's apartment is only half the battle. Disposal takes a little effort, too.

Fortunately there's Craigslist. Unfortunately, people are flaky. So on the second attempt, the former Inner Drive Technology International Data Center found a new home in a small Loop family law firm.

I actually felt a little twinge. The rack, the servers, the peripherals...they're actually gone. But: Inner Drive Technology is now 100% Cloud.

Thursday 16 January 2014 20:13:31 CST (UTC-06:00)  |  | Cloud#
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#
Wednesday 1 January 2014

Right before Christmas I removed all the long-dormant servers from the Inner Drive Technology Worldwide Data Center. Today I'd planned to shut off the last two live devices, my domain controller and my TeraStation network attached storage (NAS) appliance, replacing the first with nothing and the second with a new NAS.

(The NAS is the little black box on the floor to the right; the domain controller is the thin rack-mounted server at the top.)

It turns out, today was a good day to shut down the old NAS. When I logged into its UI, I discovered that one of its disks had failed, cutting its capacity by a third. Fortunately, I configured the device with 4 x 256 GB drives in RAID 5. This meant that when one of the drives failed, the other three kept the data alive just fine, but the array lost 128 GB of space and a whole lot of speed.

The new NAS cost $200 and has 4 TB of space—almost 6 times more than the old, ailing NAS. I'll have a photo of it when I put it in its permanent home next weekend. (Right now there's a server rack in the way, and right now it's busy getting completely loaded.)

For perspective: the TeraStation cost $900 in May 2006. It's run nearly continuously since then, which means three of the drives lasted about 67,000 hours, with an amortized cost of 32c per day.

I'll discuss how much damage to a network killing the domain causes once I'm done cleaning up the debris.

Wednesday 1 January 2014 15:23:27 CST (UTC-06:00)  |  | Business | Cloud#
Monday 23 December 2013

I had a reasonably productive morning cleaning up the Inner Drive Technology World Headquarters, including removing all all the decommissioned hardware from the Inner Drive Technology International Data Center. Contrast the before with the during:

Both DSL modems are still there; so is the NAS, the PDC, and the switch. However, the dead UPS (thank you, TrippLite, for creating a UPS whose battery you can't replace), four decommissioned servers (including one in the back you can't really see), and a whole bunch of cables, are now out of my apartment.

I'm still debating whether to break my domain or move it to the cloud, so the domain controller gets a stay of execution for a week or so. Either way, it's gone next weekend.

All the rack servers, along with the rack itself, are free or nearly so. Let me know if you want one.

Sunday 22 December 2013 23:30:52 CST (UTC-06:00)  |  | Business | Cloud#
Thursday 19 December 2013

The Inner Drive Technology Worldwide Data Center (IDTWDC) will shortly be decommissioned. I first wrote about this in June 2012, when it looked like I could migrate all the apps running on my servers to Azure quickly. (It actually took until March.)

Now, however, I'm done. And now I have about 100 kg of equipment to remove from my apartment.

So: does anyone want some equipment? Here's the inventory:

  • Two Dell PowerEdge 2950 2U servers with 1.6 GHz Xeon dual-core processors. One has 4GB of RAM, the other has 2GB. These were my Web and database servers.
  • Another Dell PowerEdge 2950 2U server, but with a 1.8 GHz Xeon single-core processor and 4 GB of RAM. This was my Exchange server.
  • A Dell PowerEdge 860 1U server with a 1.8 GHz Xeon single-core processor and 2 GB of RAM. This is my PDC.
  • All four servers have SCSI PERC RAID controllers.
  • A Netgear gigabit switch with 24 ports.
  • A 42U steel rack, as pictured, with removable shelf.
  • A 17" LCD screen, Dell keyboard, and 4-port KVM switch.
  • Assorted network cables, power cables, and APC battery backup units, some of which may need new batteries.

Since I'm essentially giving these things away (except for the rack, for which I'm asking $50), they're conveyed as-is, no liability. And again, the servers will not have disk drives.

If you want these, or know anyone who might, let me know through Inner Drive feedback.

Thursday 19 December 2013 09:26:12 CST (UTC-06:00)  |  | Business | Cloud#
Tuesday 26 November 2013

Oh, you betcha:

On a year-over-year basis, average connection speeds grew by 25 percent. South Korea had an average speed of 14 Mbps while Japan came in second with 10.8 Mbps and the U.S. came in the eighth spot with 7.4 Mbps.

Year-over-year, global average peak connection speeds once again demonstrated significant improvement, rising 35 percent. Hong Kong came in first with peak speed of 57.5 Mbps while South Korea came in at 49.3 Mbps. The United States came in 13th at 31.5 Mbps.

Yes, South Korea has the fastest connectivity in the world. This I gotta see.

Plus, you know, clients.

Tuesday 26 November 2013 14:44:29 CST (UTC-06:00)  |  | Geography | Business | Cloud#
Monday 4 November 2013

Aw, buggre alle this for a Larke.

I'm all in favor of upgrades, but for Foucault's sake, don't break things. I'm trying to upgrade a .NET project to Entity Framework 6, and I want to smack the developers.

Under previous versions, you could set the retry manager through configuration. This was really helpful for unit testing, when you might want to change the configuration and have the application block load a transient fault handler automatically.

With Entity Framework 6 (EF6 — yes, this is blatant SEO), you have to set up the default transient fault handler in code:

[TestFixtureSetUp]
public void TestFixtureSetup()
{
	var strategy = new FixedInterval("fixed", 10, TimeSpan.FromSeconds(3));
	var strategies = new List { strategy };
	var manager = new RetryManager(strategies, "fixed");
	RetryManager.SetDefault(manager);
}

I mean, really? With EF6, you've got to put this code in every unit test sequence in your solution. Basically, that means you need to put it in every unit test file. Before, it had its own defaults.

Despite being all in favor of upgrades, I do get impatient when (a) the upgrade breaks existing code and (b) the entity performing the upgrade is one of the wealthiest entities in the history of business.

All right, then. Bring on the copy pasta...

Sunday 3 November 2013 19:58:42 CST (UTC-06:00)  |  | Business | Cloud#
Sunday 27 October 2013

Programming languages have come a long way since I banged out my first BASIC "Hello, World" in 1977. We have great compilers, wonderful editors, and strong typing.

In the past few years, jQuery and JSON, both based on JavaScript, have become ubiquitous. I use them all the time now.

jQuery and JSON are weakly-typed and late-bound. The practical effect of these characteristics is that you can introduce subtle, maddening bugs merely by changing the letter case of a single variable (e.g., from "ID" to "Id").

I've just spent three hours of a perfectly decent Sunday trying to find exactly that problem in some client code. And I want to punch someone.

Two things from this:

1. Use conventions consistently. I'm going to go through all the code we have and make sure that ID is always ID, not Id or id.

2. When debugging JSON, search backwards. I'll have more to say about that later, but my day would have involved much more walking Parker had I gone from the error symptom backwards to the code rather than trying to step through the code into the error.

OK, walkies now.

Sunday 27 October 2013 13:25:49 CDT (UTC-05:00)  |  | Software | Cloud#
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#
Wednesday 9 October 2013

I've got about an hour to prepare for a Meet-Up I'm presenting. While I'm doing that, you read these:

OK, prep time.

Wednesday 9 October 2013 16:26:34 CDT (UTC-05:00)  |  | Chicago | US | Cloud#
Tuesday 8 October 2013

I have a new post up on the 10th Magnitude developers' blog.

Tuesday 8 October 2013 15:38:49 CDT (UTC-05:00)  |  | Blogs | Cloud | 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#
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 8 August 2013

I've started playing around with Orchard, an open-source content-management system, as a replacement for this blog's infrastructure (and as a replacement for other things, like inner-drive.com. It hasn't been all skittles and beer: Orchard has serious issues running on Microsoft Azure Cloud Services, though it runs fine on Azure Web sites.

It turns out, my employer is moving to Umbraco, a different open-source CMS. So it makes sense to try that out, too, as I'll have to support Umbraco at work anyway—meaning I can learn it during work hours instead of after.

Working in my few free hours after work, of course, makes this decision take longer than I'd like. That, and I don't want to do this again for many years.

So no major changes to report yet, but I'm getting closer.

Thursday 8 August 2013 15:58:31 CDT (UTC-05:00)  |  | Blogs | Cloud | Work#
Tuesday 30 July 2013

Observer columnist John Naughton explains how the practices Edward Snowden revealed have hurt us:

[H]ere are some of the things we should be thinking about as a result of what we have learned so far.

The first is that the days of the internet as a truly global network are numbered. It was always a possibility that the system would eventually be Balkanised, ie divided into a number of geographical or jurisdiction-determined subnets as societies such as China, Russia, Iran and other Islamic states decided that they needed to control how their citizens communicated. Now, Balkanisation is a certainty.

Second, the issue of internet governance is about to become very contentious. Given what we now know about how the US and its satraps have been abusing their privileged position in the global infrastructure, the idea that the western powers can be allowed to continue to control it has become untenable.

His conclusion: "The fact is that Google, Facebook, Yahoo, Amazon, Apple and Microsoft are all integral components of the US cyber-surveillance system." And no European country wants to deal with that.

So, great. United States paranoia and brute-force problem-solving may have destroyed the Cloud.

Tuesday 30 July 2013 12:02:25 CDT (UTC-05:00)  |  | US | World | Blogs | Business | Cloud#
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#
Monday 15 April 2013

In my profession, I get to sit at Peet's Coffee at 6:30am and watch action-packed videos like this:


I know what you're thinking: "slow down, tigerblood. Slow down."

I'm also pushing a new build of customer software up to production, and waiting for my coffee to kick in.

At least I'm not blowing three runs in the 10th with a damned balk, like other people I could name.

Monday 15 April 2013 07:11:14 PDT (UTC-07:00)  |  | Cubs | Business | Cloud#
Wednesday 3 April 2013

Back in November, Chicagoans voted to buy electricity in the aggregate from Integrys rather than the quasi-public utility Exelon. As predicted, the big savings only lasted a few months:

And Chicago, where residents saw their first electric-bill savings this month under a 5.42-cent-per-kilowatt-hour deal completed in December with Integrys, will see its energy savings shaved to just 2 percent.

ComEd's new price is not yet official. But utility representatives have filed their new energy price of 4.6 cents per kilowatt-hour with the ICC and have told the commission they expect forthcoming transmission charges to be about another 0.95 cents per kilowatt-hour. That will make the ComEd "price to compare" cited by competing suppliers when marketing their offerings about 5.55 cents.

That said, between the new Integrys rate that hit me on my last electricity bill, and moving to the cloud, my March bill was only 54% of my average bill from 2009 to 2012. So ComEd is lowering rates too? Good. It'll still be higher than Integrys.

Wednesday 3 April 2013 08:45:53 CDT (UTC-05:00)  |  | Chicago | US | Business | Cloud#
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#
Saturday 16 March 2013

Regular blog readers know that since moving to my current apartment in February 2008, the Inner Drive Technology International Data Center has occupied a couple square meters of my home office. I've also mentioned lower energy use since I started to move everything out of the IDTIDC and into Microsoft Azure.

Something else has happened to my electricity bill. In November, we citizens of Chicago voted to pool our electricity buying to get the lowest electricity cost possible. Well, the new regime kicked in last month, and the 660 kw/h I used in February cost 25% less than the 610 kw/h I used in January—which was the lowest use ever for this place.

It helps, also, that since moving my email to the cloud in June, I've used an average of 224 kw/h less electricity each month year-over-year.

I can't wait to see my bill for March. They read my meter on the 7th or 8th to prepare the bill I just got; the IDTIDC shut down on the 10th.

Saturday 16 March 2013 16:07:52 CDT (UTC-05:00)  |  | Chicago | Business | Cloud#
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#
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#
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?
Yes, that's an improvement (Comcast win!)
Weird routing issues at CDG
When a convenience becomes a nuisance, Azure VM edition
That seemed to go well...
Scary software deployment
How to look up Azure table data by ID
Scaling Azure websites globally
Even Azure requires maintenance
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
Continuous deployment for Azure web sites through Git
The IDTIDC has left the building
Windows Azure is now fully PCI-compliant
The IDTIDC is no more
Shutting it all down
The IDTIDC thins out
Who wants a server? Or a rack?
Am I bringing my laptop to Korea?
EF6 "The default RetryManager has not been set" problem
jQuery: Party like it's 1989
Lunchtime link list
Before I forget...
Integrating Multiple CRMs with One Azure Cloud Service (part 4)
Hanselman's Azure Glossary for the Confused
Unexpectedly productive weekend
Quick update on the Daily Parker's future
How U.S. government over-reach may kill the Inernet
Re-evaluating tools. Again.
My glamorous life
ComEd lowers rates, still above Integrys
Things I might have time to read this weekend
Weather Now bug fixes deployed
Lowest electricity bill ever
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
Happy 12-hour Monday!
Countdowns
The Daily Parker +3267d 09h 39m
To London +8d 11h 19m
Parker's 9th birthday 234d 03h 35m
My next birthday 315d 07h 40m
Categories
Aviation (338) Baseball (110) Best Bars (6) Biking (44) Chicago (893) Cubs (197) Duke (132) Geography (330) Higher Ground (5) Jokes (282) Kitchen Sink (638) London (52) Parker (189) Daily (204) Photography (142) Politics (303) US (1080) 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 (85) 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: 4518
This Year: 416
This Month: 31
This Week: 7
Comments: 0