Tuesday, July 15, 2014

If You Can't Beat Them, Join Them

The following is adapted from by book Trello Dojo, all about getting the most out of the awesome organize-anything service Trello.

I obviously am a fan of Trello, and can't imagine anybody finding it difficult to use or confusing. However, I do occasionally run across people who, for various reasons are unwilling to give Trello a try or spend a few minutes with it and give up. I've had a few readers share similar stories- they personally thought Trello was the bee's knees, but their customer wouldn't be bothered.

My first solution, obviously is to tell them about this book. But for work projects, I do have another solution. Instead of asking the other party to participate in the board directly, simply set up a weekly status call using Join.Me. This simple app requires no download or login for the other party- they simply go to the website and see your screen.  I've found a short (15-30 minute) weekly call to go over "what's happened, what's happening next, and what's being held up" is a terrific practice for managing projects.

While on the call, pull up your project board, and discuss the project (NOT the board). Be sure it's updated, add and move cards as needed, but don't mention Trello at all unless they ask. Best case your reluctant Trello-er will love what they see and will want to join in, at which point you can simply invite them to the board. Worst case, they still don't care about Trello, but you're organized and gain their confidence.

While it may not work in every situation, this can be a great way to wean projects into Trello without hitting people over the head with it.

Wednesday, July 2, 2014

In Which a 99$ Gadget Gives Me the House from the Future

I sat on the worn 70s vintage red striped couch, tired from a day of swimming, muching popcorn and watching The Jetsons. To a young tinkerer (and admittedly sometimes lazy individual), the draw of our bubble-housed, flying-car, robot-vacuuming future was inescapable. I had no doubt that one day my bed would tump me out on to the morning conveyor belt to an automatic shower and insta-breakfast while my robotic maid straightened my room. (To a twelve-year old boy, that last one was a biggie). A few decades later, I still have to make my own bed and I don't fly to work, but my home is getting smarter bit by bit, thanks in no small part to a little white box tucked away in a bookshelf cabinet.

The box, a $99 gadget from SmartThings called the SmartThings Hub, was set up in under 10 minutes, and connects all sorts of home automation devices to a service that lets me control and monitor them from anywhere using my phone or tablet. They offer tons of switches, dimmers, and sensors on their site. Each has a video showing exactly how to set them up- typically a simple one-minute process. By answering a few questions in the app, I can then add smarts to my home to automatically turn things on and off, alert me to various conditions, and take action for me.

You may be thinking you don't have a need for this, but you may be surprised. Here are some of the conveniences this gadget has brought:

  • I can control my lights (and soon, garage door) from my phone, from anywhere. Did I forget to close the garage? My house notifies me and one tap later I close it while I'm out fishing.
  • My gun case is locked and up high, but I also have a motion sensor inside. SmartThings alerts me whenever the gun case moves. It could very well save a life.
  • Whenever my wife and I both leave the house, my house knows and turns off lights. If there's motion while we're away, it notifies us. When we come back, it can turn on lights as well.
  • When there's no longer any motion in the living room, it turns on the bedroom fans and turns off any lights that were left on.
  • I'm brewing beer, and SmartThings logs the temperature at the fermenter to ensure a consistent temperature.

Next on my list of things to automate are several more lights, locks, garage door, and watering. What impresses me the most with SmartThings is that after the novelty of controlling lights from your phone wears off, it's still bringing intelligence and value to our home.

If this sounds a little nerdy - well, it is. But, I also think it's the "next big thing" in technology. Think smartphones before everybody had them. Already, the media hype engine is revving up around the "Internet of Things" and various big-name players are jumping into the market. What sets SmartThings apart, though, is that they play well with lots of different systems and do not require a monthly fee. I can pick up a ZWave switch at Lowes, or a Phillips Hue bulb and the system sees it just fine. Similar systems I've tested either require a monthly fee, or are not as polished.

Disclaimer: I'm using a referral link to SmartThings, but it's a good deal. You get 10% as a new customer, and I get $10 to automate my next thing.

Wednesday, June 25, 2014

Those click-bait articles in your feed? They started in 1926.

At first it was a trickle.  "Lose weight with this one crazy trick" appeared every so often.  Maybe a "Three tips for saving money on your XYZ" here and there.  But now?  Now it's everywhere.  Now, it seems, everywhere you turn you "won't believe what happened next" or find something that "will blow your mind." A glance at my CNN newsfeed shows that the infection has spread to mainstream news as well. Breaking just today: "Humpback Whales did THIS to Boaters".

Shoot, I'm guilty of it myself.  Like it or not, in the increasingly noisy world of the internet, titles like this stand out.  Websites routinely test and hone in on the titles that grab the most attention.  Increasingly powerful analytic tools have made it possible to drill into exactly which titles generate the most traffic and revenue.

What you may not know, however, is that this technique is nothing new.  The man credited with first applying the formula to marketing died at the age of 90 - in 1990.  The ad he created carried the headline "They Laughed When I Sat Down at the Piano.  But When I Started to Play..."  Seriously, what cold-hearted soul could read that and not want to immediately buy piano lessons?

I'm no marketing expert, but I personally think this trend is about to fizzle.  Like anything, once it reaches a certain volume, people start to tune out.

You'll never believe what trend will be next.








Thursday, June 19, 2014

Internet in the Sticks: A Complete Guide

My wife and I recently built a house situated just outside the city limits on a few acres of land that we hope will one day be home to a few chickens, a nice garden, and a couple kids to gather eggs and mow the lawn.   We settled in to our new abode, unpacking boxes and adjusting to life in the new digs.  I knew my neighbor had internet, so I figured getting it set up wouldn't be too big of an issue.  You can imagine my dismay, then, when I called AT&T and- after 10 minutes on various call center queues- was told that it was not available to our location.

"Are you sure?  This is new construction.  Is there a waiting list," I asked.

"No, unfortunately Mr. Root, there are not plans to support your area at this time.  There are no slots in your neighborhood," the call center lady said, with a hum of a hundred other calls in the background.

The +1 Most Hated Company in America  Does Their Worst

Annoyed, I called Comcast.  This call center rep cheerfully took my information and informed me that somebody would be out to install in a couple days.  Thirty minutes later, I got a call back.  Since it was a _new_ house, they would need me to go in person to the Comcast store 20 minutes away and provide written proof of residency.  Emailing said proof was not acceptable.  (This is not unlike a taxi company asking you to drive to their office to catch a ride.) Not one to be outdone by moronic business practices, I showed up and waited in line.

When my turn came, the rep looked up at me through her desk window- clearly in place to keep people from reaching across and choking her- picked at her teeth, and told me she had no clue whatsoever what the phone rep was referring to.  She gave me a corporate headquarters number that had a friendly recording asking me to call back later.  Finally, after about 3 days of pestering various call centers, I got word that Comcast was not supported either.

Internets From Outer Space

That left few options- satellite and wireless.  HughesNet, to their credit, had a real person answer the phone and answer a few questions I had.  Reluctantly, I tried this option.  A few days later a tech came by, gazed up at the south-southeast clouds and told me that to get satellite I had to chop down a few trees.  Undaunted, my cousin and I busted out our chainsaws and with various ropes and pulleys tied to his truck cleared three rather large trees.  It was dangerous work. We didn't lose our lives, but did lose several limbs.

Two days later the Rootshire was lit up with packets streaming down from the great beyond via EchoStar III.  Ah, HughesNet.  As is said around here:  "bless their heart".  They tried really hard, and had fairly good customer service.  But it turns out that the fastest a packet can go to space and back is about 700ms, and often as much as 1500ms.  This means I would remote into machines for work, click a button or type, and wait a second for the click or keys to register.  I imagine this would be sort of like trying to code drunk.  Add to that spotty speeds and fairly high cost.  Customer service told me it wouldn't be an issue, but within a few hours I could tell internets from the sky was for the birds.

In Which American Telephone and Telegraph Changes Her Tune

I don't know why I would expect a company whose name includes "Telegraph" to do any better, but I decided to hound AT&T again.  They sent a "service tech out for a site survey" and after 3 days and about two hours of call center time, I finally found that yes, I _could_ get DSL after all.  And so finally, 3 hours after he was supposed to arrive, the tech- a former NASA tech laid off in the 90s it turns out- pushed 5Mbps through the good old telegraph wire to my house.  Another two hours futzing with their javascript-error-laden activation process, I finally was able to connect without phoning E.T.

Had DSL not worked out- or if the lousy upload speeds get the best of me- I could have gotten a LTE wireless solution from them or Verizon as well.  This would have cost about three times as much and no doubt contributed to my blood pressure, but been faster.

What I Learned Along The Way

Lest this all be just a rant about the lousy state of broadband and customer service in the land that invented the internet, here are a few Dos and Don'ts for others that may struggle getting service.

Don't take "no" from a sales rep.  Unlike most salespeople, AT&T and Comcast salespeople really are not interested in actually selling you service, especially if it means they can't follow the call center script.  Insist on a "site survey from a local tech" and a call-back when it is complete.

Do bad-talk on social media if you need.  On Twitter, @ATTCustomerCare responded to some of my online venting with a $25 credit to cover the wasted cellular minutes I'd gathered.  Separate "online reputation" teams handle these requests and often have ways to handle things more efficiently.

Do try to get internet service roughly in this order:

  • Any fiber option in your area is usually the fastest and best value
  • Cable is generally the next best value if you can stomach horrible customer service.
  • DSL is the next best option, but may be slowest of them all.  
  • If a LTE home solution is available in your area, consider it.  It's going to be spendy, but the fastest option- possibly better than DSL
  • If nothing else is left, satellite is ok for email and browsing, and even a little video streaming.  I would not recommend if you have to remote into machines to work.  It's can be a little pricey as well, though I thought HughesNet's lower tier was not unreasonable

So, from my little tube of internet in the sticks, so long and good luck!







Thursday, June 5, 2014

The Bare Minimum Organization Technique


(cc) John Pannell
How I came to write on anything about organization is a mystery to me and anybody who knows me.  I can see the eyes roll when I mention I'm writing a book about an awesome organization tool.  I'm not at all qualified in this area of expertise, but I have come up with some techniques that I think work, and that I've stuck to for a while.

If you've read Getting Things Done (GTD) or follow productivity blogs like LifeHacker, you're probably already aware of various systems for bringing order to the chaos of daily life.  However, in general, they all require effort and discipline, which can be hard to muster.  I've taken some of these concepts, thrown out a bunch, and come up with something that has worked fairly well for a couple years now.

Two Folders to Rule Them All...

My goal is to have a clean inbox, clear picture of what all is on my plate, and an easy way to go back and find stuff when I need it.  Here's how I do that in Outlook.  I have two folders:  Inbox and "Reference". That's it.  Things are always in one of those two buckets.  Inbox is active important stuff, and only the latest.  I flag things that need my involvement and move the rest to  Reference.  For example, if I get ten emails related to a project, I flag the most recent and move the rest to Reference after I read them.  

I do similar in Evernote, though I probably could just leave everything in the inbox, since I don't use it as my primary productivity tool.  It's my "second brain" (no comment on what happened to the first one).  I dump everything from work notes to paint colors to recipes in it, and can generally get it back out when I need.

Trello I use for tracking high-level status, or for things that don't progress through email, such as personal or work projects.  There it makes sense to be a little more organized with various boards and lists, but I do still find myself regularly culling unnecessary lists and boards to try to get at the "least possible thing that works".

...And in the Search Box Bind Them

What has really helped me, and what I think some productivity articles don't mention enough, is the realization that good search covers a multitude of sins.  Here's what I mean: tools like Outlook, GMail, Evernote, and Trello have great search engines.  I don't need to worry about folders and filing or even tagging, because with a few keywords I can generally get what I'm looking for.  Spending time organizing them into subfolders and meticulously tagging them just doesn't carry as much value as it would if search was not available.

If I need to touch up a wall, I can go to Evernote and search for "paint colors" and get the paint colors in my house because I have a note titled "Paint Colors".  If I don't remember what I did to fix a bug at work, I can search in my Outlook "References" folder for the person I sent an email to and one or two words I know will be in the email.  Occasionally I will tag something or include a few words if I know they will be useful for finding things later.  For example, I do tag most tax-related stuff in Evernote, so that it's easier to find it all when I sit down to do my taxes.

Learning search tricks specific to the application helps here. In Outlook or Gmail, you can search things like "from:@company.com" to find mail from a particular company.  In Evernote, one of my favorite features is "Places".  Here I can see notes relevant to a particular place.  For example, the code to my storage unit pops up right when I'm at my storage.

Not Just For Personal Use

As an aside, a similar concept applies to systems at work.  I actually started thinking this way thanks to some document management work I did for a customer in SharePoint.  The temptation with these systems is to tag and categorize and organize things out the wazoo.  But the reality is SharePoint has fairly decent search built in.  So the rule of thumb there:  set metadata if you must, but only do the minimum you need to be able to find things later.

For smaller companies, it really may work to just have an Inbox or "Current Projects" folder and a "Reference" folder.  This is how the company I work for handles things in Evernote.  For larger organizations, it may make sense to break things out further.  A common practice in SharePoint is to have "internal collaboration" for divisions or teams, and "public sites" for sharing final content with the rest of the organization.

So to recap:  The Bare Minimum Organization Technique is two boxes: Inbox and Reference, and a great way to search them.

Friday, May 30, 2014

Two SharePoint Scripts For those Annoying MissingSetupFile and MissingWebPart Errors

 One annoyance I have with SharePoint is that 3rd party solutions don't always clean themselves up gracefully.  For example, if you install some 3rd party .WSP, enable whatever features it provides, then decide you don't like it, uninstalling it may not be straight forward.  Ideally you would just disable the feature and retract the solution.  However, many  3rd party solutions leave bits and pieces of themselves even after uninstall.  Worse, these bits and pieces can show up in Health Analyzer reports and even prevent upgrades and migrations. Even worse, the Health Analyzer's suggestion for "fixing" these issues is to _reinstall the solution and re-enable the features_.  9 times out of 10, this is not what you want!  You often want to clean up the mess and get rid of the annoying errors, but SharePoint doesn't give you details on exactly where the corruption is. 

 I recently ran across these excellent scripts for doing just this sort of cleanup.  But, they don't go far enough.  I wanted one script to let me see where exactly the problem was, and optionally to delete the problem files altogether.  With that in mind, here are the scripts I came up with, and how to use them.

Find all your errors
Run this script from a SharePoint Admin Powershell to see all such errors in your farm:

get-spcontentdatabase | %{Test-SPContentDatabase $_}

Fixup MissingWebPart Errors

MissingWebPart errors can happen when a solution is removed, but a webpart it contains is still on a page somewhere.  SharePoint doesn't tell you _what page_, so finding it is a bit of a challenge and involves sleuthing in the SharePoint Content Database (ill advised unless you absolutely have to!)

This script queries all content dbs for a problem webpart and optionally lets you delete the file.  Here's how to use it.

  • Copy and paste the script below to a file called fixup-missingwebpart.ps1
  • Run the test script above.
  • For any MissingWebPart error, copy the web part id from the error message
  • run fixup-missingwebpart.ps1 -webpartid
  • This will list all pages where the webpart is.  You can go to them and manually delete the webpart
    OR
  • run fixup-missingwebpart.ps1 -webpartid -delete $true
    to delete the pages if you know they are not used anywhere.  This is not reversible except by restoring from backup, and bypasses the recycle bin, so be careful!

param($webpartid, $delete = $false)
function Run-SQLQuery ($SqlServer, $SqlDatabase, $SqlQuery)
{
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Server =" + $SqlServer + "; Database =" + $SqlDatabase + "; Integrated Security = True"
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = $SqlQuery
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    $SqlConnection.Close()
    $DataSet.Tables[0]
}
$dbs = get-spcontentdatabase
$dbs | %{
$db = $_
$db.Name
$files = Run-SQLQuery -SqlServer $db.Server -SqlDatabase $db.Name -SqlQuery "SELECT * from AllDocs inner join AllWebParts on AllDocs.Id = AllWebParts.tp_PageUrlID where AllWebParts.tp_WebPartTypeID = '$webpartid'" | select Id, SiteId, DirName, LeafName, WebId, ListId, tp_ZoneID, tp_DisplayName | sort -unique
$files | ?{$_.SiteId -ne $null} | %{
$file = $_
$site = get-spsite $file.SiteId
$web = $site.AllWebs | ?{$_.Id -eq $file.WebId}
$spfile = $web.GetFile([Guid]$file.Id)
$site.WebApplication.Url + $file.DirName + '/' + $file.LeafName + '?contents=1'
if($delete -eq $true){
$spfile.Delete()
}
}
}
Fixup MissingSetupFile Errors

MissingSetupFile errors can happen when a solution is removed, but a file it installed is still in a site somewhere.  Like the other, SharePoint doesn't tell you where exactly the file is, so finding it is a bit of a challenge and involves sleuthing in the SharePoint Content Database (ill advised unless you absolutely have to!)

This script queries all content dbs for a problem webpart and optionally lets you delete the file.  Here's how to use it.




  • Copy and paste the script below to a file called fixup-missingsetupfile.ps1
  • Run the test script above.
  • For any MissingSetupFile error, copy the filename from the error message
  • run fixup-missingsetupfile.ps1 -filename
  • Note if you are careful, you can also use '%' as a wildcard.  For example:
    run fixup-missingsetupfile.ps1 -filename "KnowledgeLake/%.xml"
    Just check carefully that it only grabs files that you know you no longer need.
  • This will list all locations of the file.  You can go to them and manually delete them
    OR
  • run fixup-missingsetupfile.ps1 -filename -delete $true
    to delete the files if you know they are not used anywhere.  This is not reversible except by restoring from backup, and bypasses the recycle bin, so be careful!
param($filename, $delete = $false)
function Run-SQLQuery ($SqlServer, $SqlDatabase, $SqlQuery)
{
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Server =" + $SqlServer + "; Database =" + $SqlDatabase + "; Integrated Security = True"
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = $SqlQuery
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    $SqlConnection.Close()
    $DataSet.Tables[0]
}
$dbs = get-spcontentdatabase
$dbs | %{
$db = $_
$db.Name
$files = Run-SQLQuery -SqlServer $db.Server -SqlDatabase $db.Name -SqlQuery "SELECT * from AllDocs where SetupPath LIKE '%' +'$filename'" | select Id, SiteId, DirName, LeafName, WebId, ListId
$files | ?{$_.SiteId -ne $null} | %{
$file = $_
$site = get-spsite $file.SiteId
$web = $site.AllWebs | ?{$_.Id -eq $file.WebId}
$spfile = $web.GetFile([Guid]$file.Id)
$web.Site.WebApplication.Url + $spfile.ServerRelativeUrl
if ($delete -eq $true){
$spfile.Delete()
}
}
}


That's it!  These errors are annoying, but hopefully these scripts will make them a little easier to track down and handle.

Monday, April 28, 2014

EVERYBODY PANIC II: Operation Clandestine Fox

Update:  There is now a fix available.  Run Windows Update or go get it: https://support.microsoft.com/kb/2961887

Well, just as the news of HeartBleed winds down, here's another serious alert.  This time, a security vulnerability in all versions of Internet Explorer that is actively being exploited in what the internet hype machine is calling "Operation Clandestine Fox".  No fix is available, though one will most likely be out shortly.  Homeland Security is taking the drastic step of recommending not using IE.

In the meantime, Chrome is your huckleberry.  Lest Google and Apple fanboys get too cocky, 3 days ago saw a similar issue patched by Google and by Apple.