Mar 072018
 

If you’ve done any amount of work in Linux from Windows, chances are pretty good you’ve used PuTTY at some point. PuTTY is a free and open-source terminal emulator that supports a variety of protocols, including SSH. I’ve been using it since college and have always been very happy with it. It’s free, it’s tiny, and it just works.

With the advent of SQL Server 2017 on Linux I find myself using it rather frequently once again, but this time around I’m not just using PuTTY for myself. Now I’m trying to take screenshots of it for slide decks, and doing demos in presentations. In a world of flashy graphics and high-resolution screenshots, PuTTY’s simplicity can become a problem. Remember, it’s a terminal emulator. Its job is to display text. By default it’s 80 columns wide* and 24 rows high.

A PuTTY window doesn’t take up a whole lot of screen real estate at this size, especially for modern HD monitors.This is great for everyday use, and terrible for teaching others. Screenshots end up tiny, and if you scale the image they tend to look horrible and pixelated.

A default size PuTTY window.

It might look great on your screen right now, but being projected on a wall this becomes a problem.

Fortunately PuTTY has an option to fix this, which has evaded me for the better part of the 18 years I’ve been using it. It’s not quite as flashy as “Presenter Mode” that SQL Server Management Studio released a few years back, but it is incredibly helpful. On the configuration screen, click the “Window” category and select the radio option to “Change the size of the font.” That’s all there is to it.

Select the “Window” category

 

Set the font size to change when the window is resized

 

Now connect to your server of choice and resize the window as you see fit. Instead of the window getting larger and the text staying small, the text will now grow with the window. Screenshots can be much clearer, and on-screen demos are delightful!

(click to view full size)

 

*Why do terminal windows tend to be 80 columns wide by default, anyway? Probably because the IBM punched card format, introduced in 1928, used cards that had 80 columns. When it came time to ditch the cards and edit them on a screen instead, 80 columns seemed like a good enough size to stick with.

Sep 092016
 

A while back, I wrote about how SQL Prompt now includes execution warnings and how useful I think that feature is. It’s saved my bacon several times now, including just last week!

I’m now happy to announce that I’ve recorded a demo video of this feature for Redgate’s series of #SuperSQLTips for SQL Prompt. Be sure to check out my video, as well as the rest of the series – there’s some super-helpful stuff in there!

 

May 202016
 

Parenting is most definitely something that parents are constantly learning more about. Our son is 11 weeks old today, and while Michelle and I are by no means experts, we’ve learned a bunch in that time. We’ve also found some techie tools that have proved incredibly helpful these past few months, and I wanted to take a brief break from database speak to share them. Here they are, in no particular order:

Whoa – I’m 11 weeks old today!

Baby Tracker. This awesome app helps you keep track of your baby’s eating, sleeping, and diaper-ing. It’s incredibly simple to use, and never again will you have to wonder if your spouse changed them recently, or how much sleep they’ve gotten today compared to yesterday. It syncs between multiple devices, and creates some really nice visualizations of your data. It comes in free and “pro” versions ($5). The pro version has no advertisements and better charting and has been well worth the cost to us.

Eye-Fi Mobi Pro WiFi SD Card. I’ve wanted one of these for a while, and wish I had bought it sooner because it’s really been useful. Admittedly, most of the photos we take of our son (and in general) are on our phones, but for the times I need a real camera, getting those photos off of it has always been a (relative) chore involving removing the SD card, sticking it in a reader, and copying files to my computer. Getting photos off my phone is trivial by comparison; I just use Dropbox‘s camera upload feature. Eye-Fi makes getting photos from my camera to my computer just as easy. For an added bonus, it can also transfer photos to my phone, so they can be shared right away if I’m not at home.

Google Photos. Years ago, I was a huge fan of Picasa and Picasa Web Albums. Then the whole Google+ Photos thing really turned me off. Last year, Google unveiled the new Google Photos, and I’ve been a fan ever since. It’s extremely easy to use, and while I hope they add a few more features, it does an excellent job of letting you store photos from all your devices in one place in the cloud. You can also create albums to share with others very quickly, thus keeping those rabid grandparents happy.

Foscam FI9821P IP Camera. Audio baby monitors are no longer good enough, now we need video ones. There’s no shortage of options in this space, but rather than go the baby monitor route I decided to just buy a real web camera and stick that in junior’s room. Not only was it cheaper, it’s easy to watch/control from our phones and I’m sure I’ll find a use for it once we no longer need to watch our son sleep. I also bought a PoE adapter so it can be powered by my network – no power cord necessary!

Anker Astro E5 USB Battery. If you attend PASS Summit or any other conference, you probably know these things are pretty much indispensable anyplace where you need to charge a mobile device and can’t be tied to a power outlet. The ability to charge our phones anywhere has proven very valuable since our son was born, and we’ve been using this almost daily. It’s not just for conferences anymore!

Remember The Milk. I’ve been using this app to keep track of my to-do list for years. Now that I have less time to do things, maintaining a list of what needs to be done has become even more helpful. There’s tons of apps out there for task lists; I’ve tried several others just to see what they’re like, and RTM is still my favorite by far.

So these are our favorite tools. If any new parents out there are reading this, hopefully you’ll find them helpful too! And don’t worry, next week I’ll be back to posting things more database-centric.

May 102016
 

I’ve loved using Redgate’s tools ever since I discovered what they were, and now that I’m a Friend of Redgate it’s even more fun because I get to give feedback to their developers and hear all about what’s coming out in new releases! Recently, Redgate announced SQL Prompt 7.2, with a bunch of new features and improvements. My personal favorite of all these is execution warnings.

Databases (and computers in general) have this pesky habit of always doing exactly what we tell them to do, instead of doing what we really meant to tell them to do. Have you ever been burned by running a query without the WHERE clause? Perhaps you ended up updating or deleting ALL the rows in a table instead of just a few? A common way to reduce the risk of this is to run those commands inside a transaction, and if you see an abnormally high number of rows affected, it’s simple to rollback. This works great, until you’re in a hurry and forget to run BEGIN TRAN, greatly upping the chances of disaster. Now in SQL Prompt 7.2 you have an added layer of protection – the tool is watching your queries and can warn you! Check it out in action:

If I try to update my table of important data and don’t specify a WHERE clause, I’ll see the following:

The same happens for deletes:

And I think it’s great that I have the option of checking the box and not showing that warning again, but I definitely won’t be doing that.

A lot of times it’s the little things that really make a difference, and I think these warnings are a simple and unobtrusive way to make sure you really meant to run what you typed.

Feb 202013
 

apple & orangeBeing a DBA and data professional doesn’t mean I always work with SQL Server – sometimes I’m not working with databases at all. We’ve recently acquired some new storage at work (aka Daddy Warbucks bought us a new SAN) and I’ve been charged with moving things to it. Some aspects of this are easier than others and there will be a few more posts coming about that in the future.

For now though, let’s talk about copying files. Lots of files. Server logs, audit logs, things like that. Mostly they were small in size but large in quantity. I ended up with a handful of directories with several thousand files in them that needed to move from SAN A to SAN B. Windows gives us several ways to do this:

  • Copy in Windows Explorer (ewww)
  • The good ol’ DOS Copy command
  • Xcopy, which offers a few more features
  • Robocopy, the most advanced of the MS copy utilities (though I believe it prefers to be called Murphy)

All of these will do a fine job of copying your files, though Robocopy will probably be the fastest due to its multithreading capabilities. But how do you know they all reached their destination intact? Copy and Xcopy offer the option of verification (both using the /v parameter) but sadly Robocopy does not. I’m not sure if verification is just built-in to Robocopy and can’t be disabled, or if it doesn’t exist at all. Either way I didn’t want to risk errors in moving all this data, so I decided to go the extra mile and use another tool to make sure. It didn’t take me long to find the Microsoft File Checksum Integrity Verifier (“FCIV” for short), a nifty little unsupported command-line utility that does exactly what I was looking for.

FCIV In A Nutshell

Basically, FCIV calculates MD5 or SHA-1 hash values for files and outputs them either to the screen or to an XML file. It can also compare files to those checksums saved in XML and tell you if anything differs or is missing. A demo is worth a lot of words, so let’s see it in action!

  • Download Microsoft FCIV and extract the executable wherever you like – for this demo I put it in G:\
  • Download the demo files and extract them. I put mine in G:\demofiles
  • Use FCIV to generate checksums of all files in the folder and save to an XML file with the following syntax:

fciv.exe -add G:\demofiles -wp -sha1 -xml G:\hashdb.xml

-wp means we’re saving only the file names in the XML file, not their full path
-sha1 specifies to calculate a SHA-1 hash on each file. The default is MD5.
-xml means output the checksums to an XML file, in this case the G:\hashdb.xml that follows it.

fciv create screenshot

Let’s open up that XML file and see what it contains:

fciv xml file

As you can see it’s very simple, just the file names and a checksum for each. Now let’s make a few changes.

  • Change the name of the directory the files are in. I changed mine from “demofiles” to “demofiles2”.
  • Delete fileE.txt
  • In fileD.txt, delete the line that says “***DELETE THIS LINE***”

Now let’s use FCIV to verify our files against the checksums we captured in the XML file. Change the current directory to demofiles2 (it won’t work unless you do this) and then run

G:\fciv.exe -v -sha1 -xml G:\hashdb.xml

-v means we’re now in verification mode, so it will verify checksums in the current directory against those in the XML file
-sha1 again specifies we’re using the SHA-1 hash
-xml is the file we’re comparing our calculated checksums against

Here’s the output it produces:

fciv file verify

As you can see, FCIV is telling us that the contents of fileD have changed and fileE is missing. It’s really that easy!

Final Thoughts

I think FCIV is a great utility to keep in your toolbox. Some people may argue that checksum verification isn’t necessary – that Windows does it for you behind the scenes. That may be entirely true, but I wasn’t able to find any concrete documentation proving that it does. Then 10 minutes I spent finding this program online and figuring it out is a very small price to pay for some extra peace of mind in knowing that thousands of files made it to their destination intact.

Others may raise the point that both the MD5 and SHA-1 checksums both suffer from collision vulnerabilities and there are better alternatives out there that this application doesn’t support. They’re totally correct, but it’s also important to remember that we’re using these checksums to detect changes, not for cryptography or protecting secrets. Any form of verification is better than none, and for my purposes FCIV has proven to be very helpful.