So I can't say enough good things about my employer. Well, I could say enough good things, but then I'd come off as an obsequious little toadie and my readers would ask themselves hard questions, like "am I the only person reading this blog?" and "why am I reading this blog?" Far be it from me to thrust my public into such a swirling existential vortex, so suffice to say, my employer was kind enough to shuttle me off to the PASS Summit for a week...Disneyland for DBAs.
After fixing a few problems noticed over the weekend this morning, I headed out to the airport to catch my flight. Once boarded, I settled in by the window, with a couple processed meat product marketing executives gassing away about meat portfolio strategies next to me. I did notice something rather disconcerting about the AirBus we were riding in...one generally doesn't like to see Bondo patching on the wings:
It's been a while since I've flown and unlike the meat-hawking aerial commuters next to me, the process still invokes a sense of wonder...the first kick of thrust from the turbines, the quavering steadiness as we rocket down the runway and the pilot holds it steady, and the joyous weightlessness as the plane breaks ties from terra firma. Halfway through the trip the cloud topography started to interest me. Almost as if we are looking down on white mountains, particularly those off in the distance.
Ironically here we can make out some actual mountains, albeit only what count for mountains in the Southeast.
The effect of watching the low angled sun glint off of this landscape of clouds is a sense of the Antarctic, somewhat. Then we barreled slowly down towards the snowy landscape.
Landed with precision in Charlotte and took the bus into Uptown. After chatting with the family a bit, I grabbed some sushi for dinner...not bad for takeout, but then I'm from Kansas City...
Tomorrow, a pre-con with the Brent Ozar Unlimited group. I shall endeavor to not lose my head and scream like a teenage girl in 1964 when the Beatles get off the airplane.
Next day, up early and over to the convention hall, chatting of this and that with fellow database professionals at breakfast. All day pre-con session in store today with the Brent Ozar folks. I of course remained complete calm and in control of my faculties while settling in before the session startedERMAHGERD LERK ERTS THE ERZERS!!!!!!!!!!!
*ahem* My composure restored, I settled in and it was a surprisingly useful session, filling in gaps of knowledge I already should have had and pushing me a bit further into new areas as well. Proper indexing was really a key point of the session...it delved here and there into other areas but indexing was the leitmotif, if you will, that kept resurfacing, and given that that has been, if not one of my blind spots, then one of my unfortunately somewhat myopic spots, this was excellent training for me and left me somewhat eager to get back to work and start tuning crappy queries and indexes.
And of course, my wife wouldn't let me hear the end of it if I had chickened out and didn't abase myself into queueing up to get the obligatory picture with the SQLebrities! Ermergerd BERNT ERZER!!!
Also thanked Kendra Little for reviewing my resume for one of their resume tuneup podcasts; since it helped land me my current gig, I hold them responsible. Whether that's blame or credit, who can say! Speaking of the SQL glitterati, apologize for the fuzzy picture, but that's PINAL DAVE of SQLAuthority. Basically the Google DBA...you need a script, you Google it, his blog is almost often right there at the top of the list.
So after the day was over I retired to the hotel and picked up some toiletries I had left at home. Soon to return though...
The evening reception was not the "scene" of a writing-focused, quiet chap such as myself. But it was the scene of a parsimonious bastard with a GSA per-diem for meals, so I was very happy to queue for tiny appetizer plates at the reception until I had basically fulfilled the obligations of a light dinner, and thence to the hotel. Was a happening thing, as nerdfests go...tons of people, and I'm sure just ramping up as I left.
Tomorrow, the real conference begins in earnest. Although I could fly home tomorrow and feel like I'd gotten (nearly) my money's worth.
The conference began in earnest Wednesday. I trotted over early to grab a quick continental breakfast in the hall before the keynote. Nice crisp note in the air at that hour.
After a brief, quiet bit of tissue-restoring in which I indulged my predilection to introversion by abstaining from the social mixing aspect, I sauntered over to the ballroom where the keynote was set to take place. Rather large it was, too!
Eventually others joined me and the place filled up. I've not been to a lot of conferences, but this seemed pretty high production value. Even so, I paid more attention to the liveblogging and twittersnark that was going on throughout the presentation. I almost lost it when the wifi seemed to collapse right as they went into the boring demo of new POWERPIVOTPOINTPOWERQUERYBIGDATA or whatever their BI buzzword is these days. Of course the wifi stress test was because the speaker decided to announce that CTP2 of SQL Server 2014 was released, and so everybody en masse decided that conference wifi was the best conduit for two thousand simultaneous downloads of the new CTP bits. The best commentary was on Twitter, and Brent Ozar's live-blog which, in keeping with his commentary from past years, doesn't pull punches when Microsoft blows smoke.
Great morning session on Extended Events from Erin Stellato. Lots of good insights and tools for changing how we do things now that Profiler is fading into the abyss of deprecation. The session was packed.
After lunch the vendors were well under way in the exhibition hall. I chatted with the Violin Memory folks and got to see our all-Flash SAN up close and personal. Violin gets my stamp of approval, I love having all our SQL on blazing fast storage. The Dell booth had the Ozar crew hired on to do a cool presentation, bits of which I caught, I think mostly about interviewing. Strange Doppelgänger Brent in the foreground.
Then on to a great session on indexing by Gail Shaw, who did a great job, but a sense of fatigue had me bailing at the midway point, intent on rewatching the whole thing again when I get the recordings. Had to remote back in to my work servers and play around with newly acquired query tuning techniques in there too, I'm eager to get back and start fixing these problems.
Trotted back to the hotel to do a little work and chat with the family, then eventually back to the convention hall. The hotel has some lovely gardening, several of these bonsai-like trees.
My visit to the evening vendor exhibition was a similar combination of cheapskate food acquisition and harrassment and abuse of our current vendors in light of their failings. Well, perhaps that is an overstatement, I gave lavish praise to the Violin folks, but Dell neé Quest signed up for a masters class in what's wrong with their Spotlight product, and they got it. Good news is, a lot of the issues they are already aware of and working on, so I was appeased. I trotted over to Red Gate on a whim (not our current vendor for anything) and asked them if they had a product to audit access/security on database objects that also considers access via cross-database ownership chaining. Suffice to say I lost the poor chap in a Red Gate shirt at "ownership chaining" but he kept trying, and failing, to understand, and at least wrote down my question to get back to me. I guess they can't all be DBAs working the booth. I hated working the booths in former lives...
Thursday was kilt day, I think in homage of Women in Technology (for which there was later to be a luncheon, I gather), but also just "because". After cursing myself for being so remiss as to neglect packing my latex miniskirt, I opted not to participate, and just headed over to the second keynote arrayed in traditional trousering. Got to chat with Bill Graziano, vainly (in both senses of the words) throwing out the suggestion that hey, maybe Kansas City could host this some time (when certain meteorological conditions prevail in the infernal regions, perhaps), and then talked with Brent Ozar a bit. Once the keynote got underway, Tom LaRock, who I meant to meet and chat with but didn't actually get a chance to, announced next year's Summit, back in Seattle:
Then a great, very cerebral keynote by Dr. David DeWitt on Hekaton.
Beautiful stuff, the twitter snark died down in genuine admiration and interest; the blogger table had Grant Fritchey, Kevin Kline, Erin Stellato, and Brent Ozar among others.
Continuing the trend of mentally challenging topics I walked over and got one of the scarce seats in Kimberly Tripp's session on filtered statistics for skewed data. Wonderful stuff, started out fairly simple and digestible for me, giving me some very distinct takeaways (I finally "get" the DBCC SHOWSTATISTICS histogram). Got very advanced and complicated as it went on, will bear rewatching.
Then another session from Jonathan Kehayias on the system_health extended events session, and I had to call it a day. I skipped the evening party and got to sleep by 7:30 Eastern, I was that tired, mostly mental exhaustion catching up to me.
Next day, I woke feeling rather better and attended Ozar's reveal session for his new stored proc; a nifty little number with a built-in 8-ball called sp_AskBrent. Queries DMVs and wait stats among other things, and gives a good snapshot of why a server may be bottlenecking or slowing down at the moment. Useful tool to add to the DBA belt.
After connecting up and working a bit, then grabbing lunch, I decided to catch the bus and head to the airport early. Seven hours early to be exact, but I was keen to get home and decided to roll the dice in case they were interested in bumping me to an earlier flight. No dice, or that is, I was unwilling to pay the $75 they required for such a purpose, so I just sat and worked. But I did notice this unfortunate name for a TSA Administrator:
Glad to be home with the family, maybe not quite as keenly happy to be back at work, but still, good to get back into routine. I'm eagerly awaiting the session recordings to harvest more value from this conference. Good times overall, and lots of brilliant insight being flung around with abandon, like fecal matter in a primate house.
25 October 2013
20 September 2013
Solving the Uptime Problem Part Two
My last entry detailed a need we have for a SQL Server specific uptime monitoring solution, both for outage alerts and for uptime reporting to management; I've discussed why we needed it and my earlier attempts to put something together, and today I'll detail the technical components.
Table Structure
The back end of this solution is extremely simple; on an instance we use for DBA monitoring utilities that also happens to house our Central Management Server repository, I have a small database I called DBAUtil, and within there, one table is needed for this solution, named OutageLog. OutageLog has a identity column primary key, a ServerName varchar column that stores the hostname\instance of the server, a StartTime column and a nullable EndTime column. StartTime has a default constraint of GETDATE() so when a record is inserted it uses the current date and time, and to facilitate updates the clustered index is on ServerName.
Populating a List of Instances
One of the main problems I detailed in the last entry was of having to hard-code yet another list of monitored servers, which would be assured to fall into unmaintained hell mere seconds after implementing. What can I say, I don't trust -myself- to keep all these disparate lists maintained, much less any future successor. In my mind, we have one place that is always kept accurate...our Registered Server list in our Central Management Server. I kept hunting for a way to use the CMS querying functionality in a batch process, but I came up short. Ultimately though, I used a combination of CMS and our DTSX package idea...if we could find the back-end of CMS and pull out a list of servers, we'd be on the right track. Our CMS structure has an "ALL" folder that contains subfolders for each environment (Dev, Test, Model Office, Prod, and a few others) and these contain all currently live SQL Server instances. So I needed a way to pull in not just the contents of one folder, but all servers in a folder tree structure. Hearkening back to my days designing Bill of Materials reports for a manufacturing company, I knew the tool I wanted...the recursive CTE. Here is the query I used. I include two variables, a root folder name from which to start the recursion, and an "omit" value so that I could easily seperate Prod (root folder Prod, omit folder null) and non Prod (root folder ALL, omit folder Prod).
This package is the parent package of the process:
Basically, after passing in the aforementioned parameters, the msdb database CMS tables are queried using the CTE query above, and the list of servers is passed into a variable. Then it passes into a Foreach loop, incrementing for each value in the list. I tried several possible solutions for the inside of this container, first trying the Execute Package task, but being unhappy with the serial execution (even when the out of process option is used) I started trying to use DTEXEC instead. First the Execute Process task seemed to also operate in a serial fashion with DTEXEC, until I realized I could pass CMD.exe as the executable with DTEXEC (and the whole string of arguments, including the server name to pass to the child package), and everything started running in a quasi-parallel mode at this point. Having almost 100 instances makes it important for us to parallelize this as much as possible; it is light in workload but the slow timeouts would kill us if operating in serial.
DBAX-OutageWatch_CheckStatus.dtsx
Then on to the child package, which accepts a server name as its input parameter.
There is an ADO.NET connection manager that uses the server name variable, via expression, as its connection. This is how we dynamically build a connection to the target server. The first step is literally nothing more than running "SELECT 1" against the server. I allow more than one errors on this step because if it fails, I don't want the entire package to fail. I have a success and failure constraint from this testing task. If the logging fails, we go to the "Log Outage If Not Already" task, which goes to DBAUtil.dbo.OutageLog with the following query:
If however, the server responds to the SELECT 1 query, we go to the Close Active Outages task:
Watching the Watcher
As an extra failsafe I have another copy of the DBAUtil database and the DBAX-OutageWatch_CheckStatus package on a similar monitoring server across the wire in our offsite facility. I have this package running to check for and log outages of a hardcoded specific server, the one that runs the above packages. This way, we can get alerts on a failure of the monitoring server itself. It functions the same as the above but instead of having the parent package and querying CMS I just push the a fixed server name straight into the child package.
About those Alerts...
The jobs that launch these packages are seperated into prod and non-prod, as I alluded earlier. This allows me to set up slightly different logging frequencies, with staggered run times, and customized alerting. The second job step does precisely that...alerting:
So that's my system in a nutshell, in its infancy. Plenty of work to go hardening it up I'm sure. Maybe in a future post I'll detail out my Uptime RDL magic I did this week using Reporting Services. It was fun to get back into SSRS after a long hiatus! Fit like an old glove. Or like OJ Simpson's bloody glove...well, whatever the case...
Table Structure
The back end of this solution is extremely simple; on an instance we use for DBA monitoring utilities that also happens to house our Central Management Server repository, I have a small database I called DBAUtil, and within there, one table is needed for this solution, named OutageLog. OutageLog has a identity column primary key, a ServerName varchar column that stores the hostname\instance of the server, a StartTime column and a nullable EndTime column. StartTime has a default constraint of GETDATE() so when a record is inserted it uses the current date and time, and to facilitate updates the clustered index is on ServerName.
Populating a List of Instances
One of the main problems I detailed in the last entry was of having to hard-code yet another list of monitored servers, which would be assured to fall into unmaintained hell mere seconds after implementing. What can I say, I don't trust -myself- to keep all these disparate lists maintained, much less any future successor. In my mind, we have one place that is always kept accurate...our Registered Server list in our Central Management Server. I kept hunting for a way to use the CMS querying functionality in a batch process, but I came up short. Ultimately though, I used a combination of CMS and our DTSX package idea...if we could find the back-end of CMS and pull out a list of servers, we'd be on the right track. Our CMS structure has an "ALL" folder that contains subfolders for each environment (Dev, Test, Model Office, Prod, and a few others) and these contain all currently live SQL Server instances. So I needed a way to pull in not just the contents of one folder, but all servers in a folder tree structure. Hearkening back to my days designing Bill of Materials reports for a manufacturing company, I knew the tool I wanted...the recursive CTE. Here is the query I used. I include two variables, a root folder name from which to start the recursion, and an "omit" value so that I could easily seperate Prod (root folder Prod, omit folder null) and non Prod (root folder ALL, omit folder Prod).
WITH RecursiveTree AS (DBAX-OutageWatch_Initialize.dtsx
SELECT server_group_id
FROM msdb.dbo.sysmanagement_shared_server_groups_internal
WHERE name = @RootFolderName
UNION ALL
SELECT Child.server_group_id
FROM msdb.dbo.sysmanagement_shared_server_groups_internal AS Child
JOIN RecursiveTree AS Parent ON Child.parent_id = Parent.server_group_id
)
SELECT a.server_name AS Name
FROM msdb.dbo.sysmanagement_shared_registered_servers_internal a
INNER JOIN msdb.dbo.sysmanagement_shared_server_groups_internal b
ON a.server_group_id = b.server_group_id
WHERE a.server_group_id IN (SELECT server_group_id FROM RecursiveTree)
AND b.name != @OmitFolderName
This package is the parent package of the process:
Basically, after passing in the aforementioned parameters, the msdb database CMS tables are queried using the CTE query above, and the list of servers is passed into a variable. Then it passes into a Foreach loop, incrementing for each value in the list. I tried several possible solutions for the inside of this container, first trying the Execute Package task, but being unhappy with the serial execution (even when the out of process option is used) I started trying to use DTEXEC instead. First the Execute Process task seemed to also operate in a serial fashion with DTEXEC, until I realized I could pass CMD.exe as the executable with DTEXEC (and the whole string of arguments, including the server name to pass to the child package), and everything started running in a quasi-parallel mode at this point. Having almost 100 instances makes it important for us to parallelize this as much as possible; it is light in workload but the slow timeouts would kill us if operating in serial.
DBAX-OutageWatch_CheckStatus.dtsx
Then on to the child package, which accepts a server name as its input parameter.
There is an ADO.NET connection manager that uses the server name variable, via expression, as its connection. This is how we dynamically build a connection to the target server. The first step is literally nothing more than running "SELECT 1" against the server. I allow more than one errors on this step because if it fails, I don't want the entire package to fail. I have a success and failure constraint from this testing task. If the logging fails, we go to the "Log Outage If Not Already" task, which goes to DBAUtil.dbo.OutageLog with the following query:
IF NOT EXISTSEssentially this looks to see if there is an open outage for this query...if there is not one, then as the discoverer, it must be the first to log this outage and it inserts an outage record.
(SELECT 1 FROM OutageLog WHERE EndTime IS NULL
AND ServerName = @ServerName)
BEGIN
INSERT INTO OutageLog (ServerName) VALUES (@ServerName)
END
If however, the server responds to the SELECT 1 query, we go to the Close Active Outages task:
IF EXISTSThis similarly checks for the existence of an open outage; if one exists, now that the server is responding, it must close the outage by updating that record's EndTime value. Otherwise, it does nothing; this being the most common logical path most of the time hopefully!
(SELECT 1 FROM OutageLog WHERE EndTime IS NULL
AND ServerName = @ServerName)
BEGIN
UPDATE OutageLog SET EndTime = GETDATE()
WHERE EndTime IS NULL AND ServerName = @ServerName
END
Watching the Watcher
As an extra failsafe I have another copy of the DBAUtil database and the DBAX-OutageWatch_CheckStatus package on a similar monitoring server across the wire in our offsite facility. I have this package running to check for and log outages of a hardcoded specific server, the one that runs the above packages. This way, we can get alerts on a failure of the monitoring server itself. It functions the same as the above but instead of having the parent package and querying CMS I just push the a fixed server name straight into the child package.
About those Alerts...
The jobs that launch these packages are seperated into prod and non-prod, as I alluded earlier. This allows me to set up slightly different logging frequencies, with staggered run times, and customized alerting. The second job step does precisely that...alerting:
--Give the job some time to ensure the other job hasNote that this is my third iteration of this script after some testing. I got a few incidents where I received an email with no results, back when I was doing an IF EXISTS, selecting for an active outage, and then having a sp_send_dbmail query that does the same select. Because our logging process is asynchronous, and because sp_send_dbmail puts its stuff into its own queue and is not guaranteed to operate within the bounds of one transaction, it is possible, and indeed happened in this case that the query decided to send the mail while an outage was logged, and then by the time the mail query was run, the outage was cleared, so it looks like a phantom read type issue. I resolved this by placing a 10 second delay to allow extra room for outage clearing updates to occur, and generating the body of the email into a variable first, then passing that variable into the email alert, eliminating the chance of differing results (which happened when we had two instances of the same query happening).
--completed its updates.
WAITFOR DELAY '00:00:10';
--Variable to place Body text in for notification email
DECLARE @Body VARCHAR(MAX)
--Generate Body text based on servers still down
--(null if no servers are down)
SELECT @Body = COALESCE(@Body, '')
+ 'Server ' + a.ServerName + ' is down for '
+ CAST(DATEDIFF(mi, a.StartTime, GETDATE()) AS VARCHAR(50))
+ ' minutes, since ' + CAST(a.StartTime AS VARCHAR(50))
+ '.' + CHAR(13)
FROM DBAUtil.dbo.OutageLog a
INNER JOIN
msdb.dbo.sysmanagement_shared_registered_servers_internal b
ON a.ServerName = b.name
--Outage is still active
WHERE a.EndTime IS NULL
--Outage has been for 5 minutes at least
AND DATEDIFF(mi, a.StartTime, GETDATE()) >= 5
--Servers are in the prod folder in CMS
AND b.server_group_id = 6
--If servers are down send an email with the @Body text
IF (@Body IS NOT NULL)
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'WhatevertheProfileIs',
@recipients = 'whoevertheoncallchumpis@yourcompany.com',
@subject = 'Prod Server Down, Wake UP!',
@body = @Body
END
So that's my system in a nutshell, in its infancy. Plenty of work to go hardening it up I'm sure. Maybe in a future post I'll detail out my Uptime RDL magic I did this week using Reporting Services. It was fun to get back into SSRS after a long hiatus! Fit like an old glove. Or like OJ Simpson's bloody glove...well, whatever the case...
19 September 2013
Solving the Uptime Problem Part One
As a DBA, I have to worry about uptime from two angles. The first is one of raw survival. I want to be the first to know when an instance decides to shuffle off this mortal coil and join the choir invisible. I hate being told my servers are down; I absolutely want to know first. And perhaps less critical but still important is being able to give KPI figures to the management. So...how can we say what our SQL environment "uptime" is?
Our infrastructure chaps have all sorts of tools...SolarWinds Orion, SCOM, etc. that might be able to give us -server- uptime. But they can provide that metric to management on its own. What we are responsible for is a layer deeper: instance uptime. When SQL Server is online, servicing queries. If the server is turned on but the SQL service has shot craps, that is a SQL outage. So we can't just do something simple where we log ping response or anything like that.
I've tried solving this in a handful of ways. The first attempt was a painful and probably misguided debacle where I tried hacking the back-end of our existing SQL Server monitoring solution, Quest Spotlight. If anyone out there has monkeyed with Spotlight to any extent they know of which I speak; the back-end databases are all but useless. There was no possibility of using its history to accurately come up with a picture of uptime. That said, I did build a fragile little alerting job based on the back end; the outage alerts from Spotlight fire immediately and often are false positives due to network connectivity issues and the like. I wanted to be able to get an email that I trusted that indicated a hard outage, so I wrote a job that queried the back end for active outage alarms over 15 minutes, and emailed my personal email. To this day this job is still occasionally saving my bacon. When no one else is paying attention this job will catch an overlooked outage.
But the uptime calculation problem remained. I grudgingly started to realize that what I wanted was going to have to be hand built, and so a few abortive attempts to build an SSIS package began. I started with a fixed list of servers/instances in a table in a DBA utility database with an SSIS package that ran for-each container (for each server name) with a test connection (SELECT 1) to the server, logging in a table whether the instance was up or down. Lots of strange error handling had to be done to accomplish this.
I had the following issues with this I needed to address:
Our infrastructure chaps have all sorts of tools...SolarWinds Orion, SCOM, etc. that might be able to give us -server- uptime. But they can provide that metric to management on its own. What we are responsible for is a layer deeper: instance uptime. When SQL Server is online, servicing queries. If the server is turned on but the SQL service has shot craps, that is a SQL outage. So we can't just do something simple where we log ping response or anything like that.
I've tried solving this in a handful of ways. The first attempt was a painful and probably misguided debacle where I tried hacking the back-end of our existing SQL Server monitoring solution, Quest Spotlight. If anyone out there has monkeyed with Spotlight to any extent they know of which I speak; the back-end databases are all but useless. There was no possibility of using its history to accurately come up with a picture of uptime. That said, I did build a fragile little alerting job based on the back end; the outage alerts from Spotlight fire immediately and often are false positives due to network connectivity issues and the like. I wanted to be able to get an email that I trusted that indicated a hard outage, so I wrote a job that queried the back end for active outage alarms over 15 minutes, and emailed my personal email. To this day this job is still occasionally saving my bacon. When no one else is paying attention this job will catch an overlooked outage.
But the uptime calculation problem remained. I grudgingly started to realize that what I wanted was going to have to be hand built, and so a few abortive attempts to build an SSIS package began. I started with a fixed list of servers/instances in a table in a DBA utility database with an SSIS package that ran for-each container (for each server name) with a test connection (SELECT 1) to the server, logging in a table whether the instance was up or down. Lots of strange error handling had to be done to accomplish this.
I had the following issues with this I needed to address:
- The fixed list of servers was clunky and sure to be left unmaintained at some point. I'd much rather use a more actively maintained list of current servers in our environment (we have just shy of 100 instances right now).
- The For-Each container was a painfully iterative process...each one done one at a time, and if any failures were noted, it slowed the process by 10-20 seconds for the timeout to occur.
- Logging an up or down of every single instance every few minutes is logging tons of data for what should ultimately be assumed; why not just log outages?
04 June 2013
"You keep writing that query; I do not think it returns what you think it returns..."
So one of our BAs had a 4 hour long "insert into" query running today that completely pegged the CPUs on their box. The simplified version of the SELECT query involved:
So basically, the apparent logic is they want all the records for the first table, when value1 (an ID field) exists in this other spectacularly large table, referenced by subquery, but doesn't exist in another table (referenced with a further nested subquery).
However, the query doesn't work that way. I first got an inkling of this when I realized (while trying to rewrite the script for performance optimization) that there was no value1 column on anotherReallyBigTable (it was something like [Value One], we'll say). But amazingly to me at the time, it doesn't throw a syntax error saying invalid column!
Then we sorted out what was going on. Because the nested subquery is capable of referencing its calling query, the value1 from the last subquery is actually just the value1 from the first subquery. If the query author had named the tables (ie., "anotherReallyBigTable as a" and then referencing a.value1) the logic would make sense and the values returned would be accurate. As it is, it looks suspiciously like getting a set of values with the condition that that set of values does not exist in that same set of values is very likely to give you a result set of GOOSE-EGG. Probably not what the author had in mind, unless they just enjoy letting the CPUs getting a bit of exercise...
SELECT *
FROM theFirstTable
WHERE value1 IN
( SELECT DISTINCT value1
FROM reallyTerrificallyLargeTable
WHERE value1 NOT IN
( SELECT value1 FROM anotherReallyBigTable ) )
So basically, the apparent logic is they want all the records for the first table, when value1 (an ID field) exists in this other spectacularly large table, referenced by subquery, but doesn't exist in another table (referenced with a further nested subquery).
However, the query doesn't work that way. I first got an inkling of this when I realized (while trying to rewrite the script for performance optimization) that there was no value1 column on anotherReallyBigTable (it was something like [Value One], we'll say). But amazingly to me at the time, it doesn't throw a syntax error saying invalid column!
Then we sorted out what was going on. Because the nested subquery is capable of referencing its calling query, the value1 from the last subquery is actually just the value1 from the first subquery. If the query author had named the tables (ie., "anotherReallyBigTable as a" and then referencing a.value1) the logic would make sense and the values returned would be accurate. As it is, it looks suspiciously like getting a set of values with the condition that that set of values does not exist in that same set of values is very likely to give you a result set of GOOSE-EGG. Probably not what the author had in mind, unless they just enjoy letting the CPUs getting a bit of exercise...
28 May 2013
Poetry Slam
dev environment
screw it up if you want to
but i won't fix it
stop creating heaps
it isn't that hard to script
a clustered index
solid state storage
it's a nice feeling to have
a new bottleneck
no, developers
we're never gonna let you
query production
failed production jobs
no time to compose haikus
and yet here i am
screw it up if you want to
but i won't fix it
stop creating heaps
it isn't that hard to script
a clustered index
solid state storage
it's a nice feeling to have
a new bottleneck
no, developers
we're never gonna let you
query production
failed production jobs
no time to compose haikus
and yet here i am
22 May 2013
Roadtrip 2013
Day 1: KC to Ellis, Kansas
25 Apr 2013So my day started with eight hours of this:
And then, we decided, once I'd put a full day's worth of harrowing careless developers behind me, why not pack up the car and drive west? So we did!
Off to California, with our training-wheel first trip to the small town of Ellis in western Kansas. It is difficult, as natives of Kansas may readily find themselves conceding, to capture the amazing natural beauty of the landscape on film, because, of course, so little of it actually exists, but we took a few photos out the window at 75mph.
The kids enjoyed this rest stop.
The restrooms had an "observation deck". Yes, an "observation deck"; in the coarse vernacular of the day, I defecate you not. The boy was unimpressed.
A monument to fallen "employees". I dunno, employees just seems kind of a silly word to inscribe in rock for the ages.
Hey, it was our first stop of the road trip, we indulged ourselves. Yes, I know, its just a rest stop.
Back on the road, and as light faded, our MP3 CD happened upon Ray Charles' "Mess Around" and finding myself in a car on a long road trip, I was incapable of resisting the urge to channel John Candy's routine from "Planes Trains and Automobiles". It's a very difficult temptation to resist. Then the windfarms:
As boring as the landscape may be, the flat land grants a huge canvas to the sky. I'm sad these pictures don't capture but a diminished version of the reality.
Stopping for gas:
This one came out pretty well:
And arriving at the hotel in Ellis, Kansas. Tomorrow to Denver!
Day 2: Ellis, KS to Evergreen, CO
27 Apr 2013Given our relatively short drive today, we took a slow, relaxing start. Hotel waffles are a big hit:
After a few hours we stopped and had a picnic lunch at a very windy high prairie rest stop on the KS/CO border.
The boy exploring some junipers...
The girl was an animal of some sort, as usual, note the paws.
Once into Denver we aimed to meet a couple friends for dinner, but to burn off some extra time we stopped at a lake park in the city. Gretchen found the geese captivating. Note the commanding point, a characteristic of her personality.
THIS MEANS YOU!!!
Pete was more laissez-faire in his goose pursuit.
Thence to Casa Bonita, the Mexican "restaurant" I remember from the late 90s, since memorialized in South Park.
Who's excited?
Waiting around for our friends to meet up with us:
Gretchen loved everything about the place...the silly theatrics, the theme-park environment, the heady whiff of dankness akin to Pirates of the Caribbean, and most assuredly her new friend. She makes friends instantly, this kid.
The boy cared about one thing...drinking his weight in lemonade. He poured his soul into this venture.
Sopapillas and a gorilla show to round out the dinner.
That way to Black Bart's Cave!
Gretchen was disconsolate at finding her new friend wouldn't be coming with.
Pete trying to scale obstacles as usual.
Then up into the foothills, viewing the majesty of the Rockies through a bug-spattered windscreen.
Staying in a lovely hotel with lovely views, none of which turned out on film. Forgive my uncharacteristically limited writing, as its been rather a longish day and the family is insisting I turn in. Tomorrow, passing over the Rockies to Arches and Canyonlands in Utah.
Day 3: Evergreen, CO to Moab, UT
26 Apr 2013After perhaps not the most restful evening, an unsatisfying admixture of sleep and wakefulness terminating in a 05:30 alarm, we quickly packed and headed out, to a brisk and bright Colorado morning in the mountains. I-70 was looking clear and dry which is all I really ask of it...
Last time we were through here, it was overcast. Overcast, and trying vociferously to kill us like some great evil spirit of the Mountain. The cool, sharp air was refreshing and the sun was lovely. We saw a few packs of bighorn sheep along the roadway, although we were unable to snap any photos while at speed.
Reaching Vail, having negotiated the Pass without incident.
One of my favorite parts of Colorado is that western region where the Colorado River snakes along I-70. It's a bit prettier in fall where the deciduous trees are (metaphorically, we hope) ablaze, but still, lovely little place.
There is a rest stop in the Glenwood Canyon region, I want to say mile marker 121 or somewhere around there, that is a surprisingly little idyllic spot. We were there for 20 minutes or so, Gretchen doing her modelling routine of course.
There was a nice walkway along the river to the restrooms. There is actually a trail to Hanging Lake here that is said to be exceptionally pretty, but none of us felt like the hike nor spending our tightly regulated time...
The boy liked the river a lot. While the ladies went off to visit the restroom...which sounds like they are paying a social call, and knowing my daughter's penchant for making instant friends of strangers, they might have been...we trotted down to the edge of Grizzly Creek.
He was quite amused by throwing stones into the river. Didn't want to leave. Ranking highway rest stops this one is definitely top notch. We are becoming connoisseurs.
Getting over the Utah border a while later we needed to stop again and found a nice well-built rest stop, at which the boy busied himself collecting rock, proudly displayed here:
I remember seeing at other rest stops a sign for a "Pet Comfort Area" which struck me as particularly curious way of expressing it, and here, we have "Pet Exercise Areas". If that's exercise, then you need to up your fiber intake!
And then we turned south, towards Canyonlands and Arches National Parks. I'd eschewed these parks before because they were just enough off the path to make it hard to justify the driving. And yes, the driving felt like it took forever, the family were mostly good sports....mostly.
We navigated all the way through the "Islands in the Sky" region to the Grand View Point. This became an instant favourite for me. The pictures don't capture it of course, to trot out that hoary cliche again, but it was spectacular. Gretchen was overly dramatic about her fear of heights, as is her wont, but she had fun.
It feels like a recursive canyon...you're standing looking down at a canyon floor from atop a cliff, and in the canyon floor, you see more canyons.
The boy wanted to jump off the edge and eat the rocks and dirt. True to form.
One quick shot together before bustling back into the car.
Driving back up we stopped for me to vainly try to get directions on my phone (my printed directions seeming somewhat untrustworthy), and we happened to stop at the "Monitor and Merrimack" view point. This is a little cut off but I immediately saw the resemblance. The actual ships being only slightly more seaworthy than these rock formations.
The Lasal mountains were visible just about everywhere, beautiful to see next to the red rock formations. Gretchen spotting them pointed them out as "snow mountains" and asserted that there lay the Arctic.
Gretchen and Peter both were pretty good, all told, with all the travel and activity. We headed up to Arches.
Arches was the more immediately striking in a surreal, almost comic novelty sort of way. We drove up to the Windows section, got halfway up the path, being beset by Frenchies of every description on every side. I was amused to find a trilingual sign on which Spanish was not included...I think Arches gets a substantial international tourist market, much like the Grand Canyon. Gretchen didn't want to hike all the way up, so we settled for a shot at a distance.
This section calls to mind "Pink Elephants". The creative and/or LSD-addled mind I'm sure can enjoy these formations with particular relish.
Then we drove back through (the drive through alone is full of incredible sights) and headed to Moab. Moab was apparently more packed-to-the-gills than usual because of an annual car show. Tons of muscle cars, Corvettes, classic cars, etc. motored down the streets at about 30 meters per hour. We passed (slower than the bicycle traffic, I should note) hundreds of folks lining the streets in folding chairs, and I thought about shifting my über-sexy Nissan Versa into neutral and giving them a taste of some serious, growly RPMs, but I figured, lots of older car lovers out there, I didn't want to tax their dicky hearts with the lustful roar of my car's splendid four-cylinder. Finally made it to the hotel, and we locked ourselves in the room and cranked up the AC. Tomorrow, across Utah to Zion.
Day 4: Moab, UT to Springdale, UT
28 Apr 2013Woke up early-ish this morning to a much more peaceful and sedate Moab...a Moab, very likely, with a mother of a Sunday morning hangover, no doubt. Checking out I noted the multilingual Do Not Disturb hanger. "Bitte nicht stoeren", if only the Poles had thought to hang those up on the border in the late thirties.
Speaking of our Deustchy friends, LOVERLY little piece of German manufacture sitting out in the lot while I loaded luggage.
Up past Arches and back on I-70...then after 30 miles or so we veered south again on Utah 24. A surprisingly scenic bit of road...some great stretches of vast desert plains, some very windy amidst rock formations.
Very expansive views, an iPhone isn't perhaps the best instrument for the capture thereof, but we make do.
This one reminded me in a way of those desert sand sculptures in a jar, although the colours are a bit washed out compared to the reality.
Cresting a hill and seeing this loom ahead was, well, rather keen.
Then we made a brief stop in Capitol Reef National Park, intent on making an early picnic lunch, but the heavy sun, lack of shelter or picnic benches, and my son's translucent complexion which scalds quickly under a light overcast made us decide to only take a brief stopover there. These were the "Mummy Cliffs"...bit eerie I suppose, with a mild resemblance of their namesake.
The view from Panorama Point. Well, one portion of the view, as it is, of course, a panorama, and my phone is not thus equipped to take those sorts of shots.
Gretchen retiring on the local flora...
The boy is happiest, of course, when provided with an ample supply of rocks, and this stop did not disappoint.
Back on the road, we headed towards Bryce, and decided on a southern route on Utah 12. Seemed reasonably straight, albeit windy on the maps, running through the Grand Staircase Escalante National Monument. Little knowing that we'd be climbing several pretty substantial mountainous areas and doing some fairly tricksy driving. We wound our way up a mountain and happened on some unexpected and quite lovely views.
As we climbed higher the pine forests gave way to white birch. Kind of a strange sight. This is at about 9000 feet.
Then down from that section we climbed again, I assume this was the "Grand Staircase". Several sections had us high between two canyons, nothing on either side, driving along a spine of rock high in the air. Debra took a few pics, as much as her nervousness allowed. This would be the perfect highway for driving enthusiasts. Utah 12 and Grand Staircase is a hidden gem, I really think, though the windy curves and knuckle-whitening views require steeled nerves and undivided attention for the driver.
Back in saner, but still quite scenic lands, we closed in on Bryce Canyon.
At Inspiration Point.
Gretchen's somewhat over-dramatised fear of heights bade her enjoy the view from a distance.
Last time we saw this was in overcast, lovely to see it fully illuminated as well.
Gretchen cautiously assessing the view at Fairyland Point.
We ate a quick picnic lunch here, Peter doing as he usually does and attempting to scale every obstacle in sight.
We took the eastern entrance into Zion to get to Springdale, which meant, alas, driving through the lovely park. This is the somewhat Jabba-esque Checkerboard Mesa.
After a day full of landscape overload we expected to see Zion, which we've visited a number of times, with slightly jaded and underwhelmed eyes, but the sheer scale of the place, when taken in person, takes the breath away.
The splendid contrast of green and red one finds here is even more enriched in the bright afternoon sun; it is lovely as well in a soft overcast light but the sharpness and contrast in the bright light is quite nice.
OK, one more...trust me, these are but a scant fraction of all the pictures we took today.
And so I'm at the hotel under the watchful eye of a rusty red mesa, sitting on the balcony polishing off this entry while the children wreak their mad havoc inside on my wife's rapidly fraying nerves. Tomorrow we stay here another day, which will be mostly recuperative after four days on the road, with some mild sight-seeing, then the day after we set our sights on Anaheim.
Day 5: Zion National Park
29 Apr 2013Today we took it a bit easier, staying a second night in Zion National Park. Nice little break from the highways. We're staying at Driftwood Lodge in Springdale, for the second time, and we love this place. The balcony that doubles as a child containment device is also nice.
We drove down to the park entrance and took the bus to the end of the line for a gentle riverside hike. Gretchen spotted this little guy:
She scored a raccoon at the gift shop, proudly displayed here. She is a born mugger. Mugger in the sense of mugging for the camera, not armed robbery. Peter on the other hand is a natural pickpocket and has previously shown great promise in that particular area.
The river was running moderately, a bit rapid in spots. Sometimes it floods heavily here.
These cliffs are gargantuan.
You get a semblance of scale from the trees lining the cliff edges.
The boy is a future Marine, drawn to the beaches. As Douglas Adams wrote, "We all like to congregate at boundary conditions. Where land meets water. Where earth meets air. Where bodies meet mind. Where space meets time. We like to be on one side, and look at the other."
Give him sand and rocks and the kid has a grand time.
Cacti under a massive tower of rock:
The cliffs were so high that when viewed through the roof of the bus we could still barely see the top.
Later that afternoon, we had a small picnic out back of the hotel by the river. We had to be quick about it because the boy got harder and harder to prevent jumping headfirst into the Virgin River.
Gretchen loved being outside.
And while the horses neglected to pay her a visit, despite her repeated attempts to summon them ("HOORRRRSE! I HAVE SOME HAY FOR YOU!!!!" times about a million), I think she liked seeing them rather than not.
And so to bed, to return to the road tomorrow. Destined for I-15 and following that on down, past the notorious Fruit Patrol at the border (we plan to bribe our way past with a few ripe clementines and a rare quince), we shall deposit our humble caravan at the very border of the Magic Kingdom, directly across the street from the entrance to Disneyland. We'll get our free fix of pre-Disneyland hype by having dinner and browsing Downtown Disney tomorrow night, then an early night to prepare for an early morning at Walt's park. You can be assured there are those of our party who are rather excited.
Day 6: Springdale, UT to Anaheim, CA
30 Apr 2013Today we left Zion for California. This sunset picture snuck onto my camera last night as I was grabbing something from the car.
I woke reasonably early and realized after some time the power was out to the building. Dawn over Springdale was peaceful and calm.
Into the car after checking out and down through Hurricane, and onto I-15 southbound. We got out of Utah and enjoyed, as usual, motoring through the Virgin River Gorge. It isn't as impressive a drive to me now, the backwater highways of Utah jading my sensibilities on that score, but still, scenic by Missouri standards.
Thence into Nevada, which despite its proximity to several states I have much love for, remains a recipient of my contempt and slight regard. Las Vegas, the northern end of which I was forced to refuel in, remains a festering boil on the armpit of America, encompassing everything I dislike about L.A. without any of the charm or natural beauty, and slathering an extra helping of scuzz on top for extra measure. I remember the last time I railed about a particular city (here's looking at you, Atlanta) some random stranger came onto my blog, a rare enough occurrence, and sought to defend their fair city from the attack. Suffice to say, if you like Vegas, you like Vegas. I can't blame people for liking cold tinned fish with mayonnaise either.
Anyway, we motored on, got into California, speeding by the Fruit Patrol safely (the only thing ripe in our car at the time required an emergency stop at a rest stop and the use of a great lot of baby wipes), and the boy had a rough time of it in general, so we decided to take a stop in the San Bernardino forest. Stopped here and realized Peter had just fallen asleep so the stop was unnecessary, but Gretchen got to stretch her legs a bit.
Then to the Park Vue Inn, across from the Disneyland entrance. You can see Space Mountain and the Matterhorn just barely from the hotel:
Please take note...Disneyland causes cancer. Thanks, State of California, good to know. Come on kids, let's get some Magical Cancery Goodness!
We weren't actually going in tonight, just stopping at Downtown Disney (no admission fee) and having dinner to quell a sort of Disney mania that had taken root. Posing by the gates:
Gretchen watching waterfalls in Downtown Disney. We ate at the "Jazz Kitchen Express" which had a New Orleans Square feel to it.
Then we visited the Lego Store and headed south to the new hotel, the Grand Californian, because Debra wanted to see what it was like. Here we are in a sort of courtyard/garden area pretending we are paying guests, and not low class freeloaders...we managed to avoid not getting bunged out on our ears.
In one of the Disney merchandise stores, they had these Princess kits, each of which had a Princess doll complete with secondary Disembodied Head. If the object is to change the hairstyle, wouldn't it be possible to just remove the hair, and not swap out whole heads? Rather creepy.
Then on our way out we decided to buy our tickets for tomorrow, to save time. We were at the ticket booth and the fellow inside, perhaps seeing Debra's girlish excitement and deciding to have some fun, coyly asked if we were interested in going tonight. Long story short, we got complimentary passes. We were all tired by this time but went headlong for it, deciding to go to California Adventure, since we'd never been.
Gretchen loved the Little Mermaid ride.
She did the carousel twice. I think she was overwhelmed by the bustle and excitement, I have hardly ever seen her at such a loss for words.
Pete and his mum enjoyed it as well, of course.
And instead of our planned ice cream...churros. What else.
The boy was also a fan of churros. He started sucking on the waxed paper they come in once the supply ran out. Note the look of crazed desperation.
We saw a Pixar parade almost by accident.
Gretchen enjoyed the log slide in, well, I don't know what section this is, but sort of a Yosemite/Sequoia themed play area.
Oh look, they have a Micro-Utah, one eight the size of the real thing and made of StyroFoam!
Me and the boy were waiting around a bit for the girls to catch up after they went on another carousel ride.
So, yes, tomorrow, we do it again. This time, the original park.
Day 7: Disneyland
1 May 2013Day late and many dollars short, thanks to the cash-vacuuming expertise of the Walt Disney Company, but yesterday was great fun. We breakfasted early, Gretchen starting off her digestive system with the first of many batches of sugary goodness with a bowl of Froot Loops. At breakfast she decided to sit down with another family and talk at length with them. We had to drag her away.
Waiting for the park to open...rope drop was late, at 10AM, so much waiting was involved.
Actually in line for entry.
We stopped at the magic shop on Main Street, where my uncle used to work in days of yore. Gretchen got to see a couple levitation based magic tricks.
Thence to Fantasyland and a short line to ride on Dumbo...Gretchen's fear of heights was overwhelmed on this one by the fun of it, I think.
Mom and brother up ahead in the next car.
Casey Jr's is a classic train ride and thankfully early there wasn't much of a line.
Then onto the carousel.
The boy also did the carousel but his mind was still fixated on JUICEBOX.
They had a static teacup that Gretchen liked. All the fun with none of the nausea!
Ducks proved a highlight. Her hands are cupped here as she quacks to the local Anatidae.
Second Breakfast at the Jolly Holiday Bakery.
We met up with family (cousins on both sides were there, as well as nearly all aunts and uncles, and grandma) and did a number of the classic rides...the usuals, really, Haunted Mansion, Pirates, Tiki Room, a number of the movie-based dark rides, etc. Then took the train all around the park:
Then to the petting zoo.
Funny that the goats may have been her favorite thing in Disneyland, followed by the sugary food and ducks.
Seconds before getting told to get off the barrels:
Pete getting in on the germ-filled action:
I think there was a donkey over here off camera:
And the petting zoo apparently just opened a Small Nervous Lizard Exhibit, one of the more challenging petting zoo attractions to be sure.
Dinner with the local waterfowl. Not that I wouldn't have preferred the waterfowl AS dinner, but the fennel/bacon/onion pizza I got at the "Village Haus" was quite good. Gretchen eventually chased this long-suffering bird off.
And today we are just taking it easy staying with relatives. And trying to prevent the children from breaking everything in sight.
Day 9: USS Iowa
3 May 2013Today was another nice relaxing day in southern California. We ambled southeast to Long Beach, which isn't as picturesque as we thought we remembered it to be, but port cities for vast cross-Pacific container shipping have an uphill battle to fight in the aesthetics department.
Then we alighted at our destination:
Yes, today was one of my alloted military museum days and we went to tour the USS Iowa, lead vessel of the Iowa-class battleships, of which there are four, probably the best known being the Missouri upon which the Second World War was officially brought to a close. About 5 feet longer than the Titanic, capable of a sprightly 35 knots, and massively armed and armoured, its an impressive boat.
However it should be noted that it, like Disneyland, causes cancer. I think the State of California is selling the destructive power of the Iowa a bit short. Have you seen those 16 inch guns? You get on the wrong side of this ship and you'd beg to get off easy with "other reproductive harm".
The Business End.
Still on the main deck, 5-inchers in the background.
The rather impressive superstructure, part of which we would be touring.
Into the officers' quarters, nice reprieve from the sun.
Lots of interesting old signs and documents about. Athwartship is a great and underutilised word.
One of the executive officer staterooms. Perfect motivational experience for the kids. You guys apply yourselves, gain entrance into the United States Naval Academy as the best of the best, and apply yourselves and work up the ranks, and someday, perhaps, you might find yourselves living in this sort of lavish luxury while at sea!
A near-bottomless hole for loading the powder magazine, I believe.
This was a really impressive thing...in the Captain's conference room, set next to the quarters FDR used when travelling to Tehran, was a table with a variety of historical documents laid out, not under glass or anything. This is a handwritten letter from Field Marshall Montgomery. Assumedly by his own hand, even the word SECRET at the top is handwritten.
Variety of communication devices, probably each varying in vintage.
View of the inside of the armoured bridge, which afforded only slit viewports. Gave a real sense that this was, at its heart, a true warship...designed to take fire, bombs, shells, and missiles, and keep steaming and returning fire.
Just outside the armoured interior bridge was an outer area that was assumedly used in peacetime when incoming fire was not expected.
The boy gazing out from an outside view point on top of the bridge area.
The Phalanx CIWS system, a very fast and accurate radar controlled system that threw a whole lot of 20mm shells into the air in a very short amount of time. Come a long way since the manually aimed Bofors cannons that originally populated the edges of the ship.
Chaff mortars, designed to belch up enough special tinfoil to confuse radar guided anti-ship missiles. And a kid starting to exhibit prodigious fluency in Mandarin Whinese.
Hmmm, so they had an embossed plaque on what to do when the ballistic missiles start leaking rocket fuel. Apparently this was a common occurrence.
The Harpoon launch tubes:
Fire control for the 16 inch guns.
Finishing up moving aft towards the stern, with the third turret of guns. Lots of commentary from the international Whinese delegation.
And the rest of our party in tow.
These guns can hurl a 2000lb projectile over 20 miles, if I remember the figures correctly.
Then down below deck!
Gretchen sitting in the enlisted mess.
Harpoon on display. The red sign in the background is an etched sign saying "CLEAN AS YOU GO". I probably need one of those for the kitchen when I cook.
Back on deck before heading to shore.
Then, back to Diamond Bar where we paid another visit to El Pollo Loco. Really wish that chain would spread to KC, I'd prefer it over In-N-Out. The boy concurs!
The rest of the day we'll be taking it easy. Then tomorrow is our last day down here (nothing planned just yet), and we'll be back on the road for the second major leg of our vacation...central coast, Sequoia National Park, and the Route 66 way homeward.
Day 10: Crystal Cove
4 May 2013Today is our last day staying in Diamond Bar, always a wonderful stay with relatives. The kids loved staying here and spending time with my aunt and uncle. Gretchen was pretending to be a "Captain" last night with her sailor's cap from the USS Iowa gift shop. I think she may not exactly comprehend the concept of rank...
We thought about going to the Chino Air Museum today (now called "Planes of Fame" or something like that) but decided against it when we found out that it was their annual big airshow today. So instead, we decided to go for the classic California vacation pastime, the beach. Crystal Cove State Park down by Laguna Beach.
Gretchen got to work immediately in the sand.
Pete, the Not-So-Ancient Mariner, fixed me with a glittering eye, one thing to convey. TO THE SEA.
We waded in the surf, which was cool, but not too cold.
Local fauna milling about with a sort of thuggish bravado like hoodlums at a shopping mall.
Both kids loved playing in the surf. Bit chilly...the boy would start shivering, but still didn't want to leave the ocean.
After a brief warmup, the cry goes round, back into the water!
It's a rocky beach, relative to some down here.
A distantly visible sailing vessel coasts lazily by.
If nothing else, these will make nice desktop background images!
Rather graceful sea bird of some ilk pecking around for food.
Gretchen and I climbed around the rocks slowly and carefully hunting for crabs, but came up short. We'll give it another shot up the coast in San Simeon.
Beach rats cast another surly glance as we decided to leave.
Lovely view from atop the cliffs. Lot of money flying about down here and it is easy to understand why.
Caught another of the local hooligans under some brush by the boardwalk.
From there we drove north again, the kids dropping almost instantly into post-beach slumber, according to tradition. Furthering old traditions, we grabbed some burgers and fries at In-N-Out and then paid a visit to Trader Joe's, the California versions of which I still find more enjoyable than the transplanted Missourian variety. Tomorrow we hit the road again and head up north along the coast.
Day 11: Diamond Bar, CA to Cambria, CA
5 May 2013Last night we enjoyed another relaxed evening with relatives in Diamond Bar, the kids playing happily in the yard I remembered playing in growing up.
They had lots of fun and the weather was great. Gretchen really enjoyed the time spent there I think, particularly, thanks largely to the wonderful hospitality/longsuffering afforded us by the relatives.
Driving across LA this morning we hit Santa Monica and started up the coast. In the Malibu region a particularly savoury aroma pervaded our nostrils, the wonderful woodsmoke that perfumes Kansas City barbeque. Then we realized we were driving through the aftermath of one of the wildfires that had just been gotten under control. We saw some spots still smoking, and the cacti were yellowed and shriveled. Roasted nopales!
After a few hours of driving we reached Solvang, and put in the requisite 72 hour notice for seating for breakfast at the justly popular Paula's Pancake House.
While waiting, the boy was playing around with this Carlsberg umbrella, and I thought, if they ever start using baby mascots for beer, then we'll be trying our little Nordic blonde fellow out for that Danish brewery's payroll...
Little chilly with outside seating but Danish pancakes for everyone. Worth the wait.
We arrived at the San Simeon Pines resort, a nice little place I've been coming since a teenager with my parents. The room was nice in that it had a private fenced in garden area, perfect for loosing the children in. And possibly hiding out from the children in.
Then we walked across the street to the beach, which has some beautiful windswept pines on the way. Apparently the paws are up here so this must be an animal of some sort.
Pete heard the distant roar of the waves crashing and could think only, forward, to the sea!
Nice little overlook before trotting down to the shore.
Gretchen and I spotted a rabbit and a variety of birds in this area. Peter took his time.
Once we got down we realized the tide was fairly high and Debra wasn't comfortable with the kids clambering about the rocks in that particular area. So I took a few shots climbing out onto the rocks.
Couple of the waves crashed with enough force to lightly dampen the raiment.
Then to a pebbley beach that was only inhabited by a group of gulls and a few buzzards, vying over an almost picked clean fish carcass. Gretchen looks like she is singing a Disney song here or something. You know, it isn't unlikely that she was, in retrospect.
Ahhh, shoes and ocean. The boy is having a good day.
Pines along the walkway back, after we called in a pizza takeout order in nearby Cambria.
Peter in annoyed incredulity, after we told him there was a fire hazard and he couldn't have a smoke out here.
I called out to Gretchen to get her pic here and she did the classic runway model turn. Made me laugh!
Then a pizza and a salad procured, we headed back to the beach and ate with the lulling, sleep-inducing roll of waves crashing against the rocky shore, from our car.
And tomorrow, we had intended to be here again, but an unfortunate issue with the reservations that we just noticed this morning meant we had to do some rescheduling...short stay here for just tonight, then driving to Sequoia tomorrow...that stay shortened as well. At this rate we may be home much earlier than expected!
Day 12: Cambria, CA to Sequoia National Park
6 May 2013Today we breakfasted briefly on cold pizza and endeavored to head inland. Before leaving, we noted this on the grounds...whale ribs allegedly from a whaling station, 150 years old.
We drove northeast through Paso Robles and Fresno. Fresno is a nice city in ways I'm sure, and is a short drive from several varieties of natural beauty. Damning with faint praise perhaps, but after a quick stop for gas and comestibles (the latter from Der Wienerschnitzel), we drove up to Grant Grove in Sequoia/Kings Canyon National Park. Our cabin wasn't ready that early so we first drove to Grant Grove to see the General Grant tree.
We happened to time our visit with such expert planning to be able to enjoy that most choice time at Sequoia...the hail season.
Providence afforded a unforeseen respite in the form of the long, hollow, fallen log that visitors frequent here...shelter from the hail and rain.
But we had a job to do, so to speak, so we trudged on to the General Grant tree. It's a big fella to be sure.
Gretchen was a good sport, Peter got halfway through and I think tired of projectile ice targeting him from the skies, and so we had to hurry out with the echoing strains of his displeasure reverberating in these sacred woods.
Caught a few pictures on the way out...
The exit of the fallen log:
Gretchen and Debra taking a lead on our egress.
Then another thing we wanted to do was see Panoramic Point, which was said to give a nice view of Kings Canyon. We drove several miles up windy roads to reach the top point, where a short walk followed. I say short walk because it was 350 yards or so, and much of that at a steep grade, and the thin air at 7500 feet didn't exactly put a spring in my step. The others stayed in the car, not really wanting to do the hike to the viewpoint. We were the only ones around for miles...not another soul but us. The silence hung heavy.
The path was wreathed in fog. Waiting for Elijah Wood to bark out "GET OFF THE ROAD!".
Approaching the summit I started to have a premonition of possible disappointment...
Yes, it is as you expected. The panoramic view was vast, stunning, and entirely obscured by fog. Ah well.
With our cabin still not ready we started out on the road towards the Sequoia National Park.
There were some similarly obscured canyon overlooks...like gazing down into a sea of clouds.
Then into Sequoia National Park proper, we happened on the Lost Grove as it is called, some nice groupings of giant sequoias.
Quite large trees.
I remember doing a lot of clambering around on the rocks as a kid here...
The cabin was ready and rather quaint!
We decided to eat dinner down at the restaurant just to have something to do...no TV to sedate the children who have dug deep to discover new profundities of wild and crazy behavior cooped up in the cabin. Trotting back to it after dinner the sun came out briefly.
And then I've just sat down on a bench within range of the lodge's wifi to finish this entry...lovely view of a meadow.
Tomorrow, the long drive south, then east, to Flagstaff, as we make our way home.
Day 13: Sequoia National Park to Flagstaff, AZ
7 May 2013We woke up too early in Sequoia, and looked out our window and saw it was snowing. Each time we've stayed in Sequoia recently we've been greeted by a morning snowstorm and freaked out accordingly in an effort to get down the mountain before we find we need to put chains on.
The family fleeing!
It was a pretty sort of snow, and blessedly not adhering to the roads, so not a problem.
However, thanks to an over-adherence to Google Maps we ventured down, CA-245 turned out to be a beautiful but gut-wrenching swirl of 25 mph driving across sharp turns where we only made 20 miles in the first hour down the mountain, and the girl got sick, but was very, very sweet about the whole thing. We tried to make it better and thankfully had some Dramamine on hand. Once further down the mountain we had to stop to let her walk a bit, and it was an idyllic mountain farmland, with cows mooing in the distance.
It was frustrating a bit to see our day slip away from us, as we had expected a very long day of driving to get to Flagstaff, but the morning delays had slowed us down. As much as we resented the swerving mountainous roads, admittedly they were very beautiful.
As roads began to straighten out, we started to love being able to accelerate to 30, even 40 miles per hour!
So then we made our way south through central California. Bakersfield, true to form, smelled of manure. We then sped on passing Tehachapi of wind farm fame, and stopping to get gas, we stopped unfortunately at the most expensive gas station which coincided with the most abhorrent bathrooms, which had a custom Master lock fitting on the toilet paper dispenser which I only regretted not having my phone to photograph. Tehachapi also reeked of manure. But the wind farm was hard at work at least:
We passed through Barstow, that California crossroads, and kept going. We stopped at a Mohave rest stop, which had a beautiful landscape.
After a brief stop in Needles, which was depressingly depressed economically, the plywood vendors apparently making a killing on window boarding, we passed into Arizona, which had some inclement weather ready for us. But passing through it we saw a double rainbow, faintly visible here:
Arizona is beautiful country.
We arrived in Flagstaff and enjoyed the hotel kitsch...the Little America hotel in Flagstaff feels like a fancy old-school motel from decades ago, well preserved and updated only in the most important aspects. The kids loved it.
Tomorrow, across Arizona and New Mexico, to Tucumcari.
Day 14: Flagstaff, AZ to Tucumcari, NM
8 May 2013Today we left the pleasant town of Flagstaff to strike east to Tucumcari. The hotel there was a pretty one as I've mentioned and the grounds were nice for an old style motel:
Towards eastern Arizona we entered Petrified Forest National Park.
There are vast fields of fallen, petrified trees.
Gretchen was a little cold, but quite interested in finding "fossils".
Petrified wood is beautiful, either when polished or in the raw.
Pete just wanted every rock he could pick up. Unfortunately for him, this is very, very much against the rules. Note the vise-like grip on his arm.
The sun catches this stuff and it is very beautiful!
Further into the park we stopped for Newspaper Rock, a collection of ancient petroglyphs, as the name hints. Sadly access was very limited and mostly by binoculars, so very little can be seen in this snapshot from above but the center rock had some very interesting old carvings, faintly visible.
The Painted Desert on the north end of the loop is always beautiful, and this picture absolutely fails to capture the expanse, vastness, colour, and beauty of what we were seeing.
Closer to New Mexico, an interesting rock formation.
Stopping for gas in Gallup, New Mexico, Gretchen wanted to pose with the giant "come shop here for Indian trinkets!" arrows.
Back on the road winding across New Mexico. We've been watching DVDs of Marty Stouffer's Wild America, an old documentary staple of my youth, while travelling on this trip, and Gretchen loves it...even asking "Can I MEET Marty Stouffer?". Seems like the first whiff of celebrity consciousness with her, and she picked a good target I suppose. I keep thinking of humorous parodies of Wild America, such as outtakes where Marty is narrating and gets so overly excited he runs onto the scene and starts chasing animals, the crew softly swearing and muttering "not again...". Or an offshoot straight to VHS product of the ubiquitous mating sequences that seem to make it into every episode..."Marty Stouffer's Private XXX Reserve". Or best of all, reshoot the famous intro of the bighorn sheep crashing heads with Marty standing in for one of the sheep.
So we passed through New Mexico, with Historic Santa Rosa bidding us via several billboards to "COME SEE THE BLUE HOLE"...we were in no mood for any township, however historic, to show us its hole, so we sped on and arrived in Tucumcari and went straight to Mesalands Dinosaur Museum. Gretchen was in her element.
Pete was at least in pointing and shouting mood, but seemed to really enjoy it as well.
The "bones" are bronze castings of the originals and so may be touched.
How could they resist a saddled sauropod?
Gretchen is a method actor. Be the carnivore!
Crystallized ammonite, stunningly beautiful!
The T-rex skull casting.
A Velociraptor in motion. I should note they had the Jurassic Park soundtrack on repeat.
Saber-toothed cats.
It was an unexpected pleasure at the end of a long travel day.
And so, tomorrow, home.
Day 15: Tucumcari, NM to Home
9 May 2013Today was the last day of our vacation, and we were ready to get home. Starting in Tucumcari we sped north and east, departing New Mexico and traversing smelly bits of Texas and Oklahoma before landing in Liberal, KS. Where I utilized the second of my military museum vouchers granted me by my longsuffering wife and we visited the old standby, Liberal Air Museum, now known I suppose as Mid-America Air Museum, the name changed perhaps to avoid scaring off potential visitors who would scorn to patronize left-wind establishments. Interestingly enough there was a travelling attraction there as well, apparently without regard to continuity of theme, some sort of robotic dinosaur exhibit. And out front, a repurposed Sinclair inflatable dinosaur advertised its presence.
I'd like to say Gretchen was thrilled to see a F4U Corsair but the smaller model in front was more her style.
1950s era jet engine from a fighter/interceptor, I forget which one.
The F86 Sabre's gaping maw.
A Grumman Avenger torpedo bomber. Absolutely huge. You think of single prop planes as being small, but this one felt as big as their B-25, almost.
An F4 Phantom in restoration:
The now requisite shot of the family in the AH-1 Cobra.
So we wound quickly through the collection of old warbirds because everyone was keen to see the dinosaurs, which were filling the hangar with tremendous roars and such. We got to a dark, blacked out section and entered in, and a robotic carnivore raised its head and shrieked a bloodcurdling scream at us:
I didn't get any more shots because the kids were both interested and genuinely terrified, I had to carry Gretchen through. Pretty intense! Debra quickly got through with Peter, and while in safety in the gift shop he was asked several times if he wanted to see the dinosaurs again, to which he vehemently shook his head "no!".
Outside the hangar several old fighters lie in repose.
A quick sandwich shop lunch yielded some sticker earrings for the girl who was quite pleased with it, if not the lunch. I told her to make these last til she's eighteen.
Then further into Kansas, a lovely country to a weary traveller. At a rest stop they had a biplane on display hanging up, Peter was quite interested. Where was this interest when touring the air museum not two hours prior?!
Ahh the green hills. Home beckoning.
Winding down the street to our home we were amazed by the greenery. Not the best shot to show it, but it looked like we'd swapped for Ireland or something.
And so we're back at home. The trivial comforts therein slightly more appreciated! Still, a lovely two weeks, and all of us survived, sometimes just barely. Now, to rest.
Subscribe to:
Posts (Atom)