How a Utah Mormon Farm Kid Became an Evil Democrat

bull skull on our old shed
The bull skull that hung on our shed. Perhaps an ominous predictor of my future turn to the dark side?

This is the first post in a series called How a Utah Mormon Farm Kid Became an Evil Democrat.

Here’s the list:


Before We Begin

This is really long and nobody will probably read it except for my dad, who is now retired and has a lot of time on his hands as he sits outside by his pool (love you Dad). I’m splitting it up into multiple parts to make it more digestible (i.e., less boring). 

Maybe this won’t benefit anyone. Or maybe it will just benefit me. Life has been really hard the past few years. Hard in ways I never would have guessed or wished upon anyone. I have had experiences that have changed me, that have given me new perspectives. One of the ways that I’ve felt some clarity and relief while navigating difficult times is through writing. It’s usually through writing to other people. Writing to answer their questions or concerns about hard questions and the tough things in life. In doing so, I end up being able to put a lot of that pain and anger and frustration and reflection into words.

A lot of what I’ll discuss comes from a Utah/LDS/Mormon perspective. My assumption is that almost everyone who might actually end up reading these will come from a similar background. If that’s not you, sorry – there might be some gaps.


So Why Am I Writing This?

Maybe this will be an enormous waste of time and won’t change anyone’s mind. People are pretty stubborn; they like to make up their minds and stick to their positions. I’ve been as guilty of that as the next guy. If you’ve already decided to vote for Donald Trump, it’s pretty unlikely we’re going to get anywhere here. I’d still encourage you to read though, just in case.

I now live in Henderson, Nevada. Projections say that the presidential race in Nevada could be pretty close. I’m doing what I can within my (very) tiny sphere of influence to try and make a small difference here. If you live in Utah, it’s highly unlikely that a non-Republican will win there, so you might feel hopeless and that your vote is pointless if you’re a non-Trump Utahn. But every vote makes a statement. Trump only got 45% of the Utah vote in 2016. The closer it is, the more clear that statement of dissatisfaction is.

I guess my hope is that if you fall into one of the following categories regarding the presidential election, you’ll take a few minutes to read and consider what I have to say in this series of posts:

  • You don’t know who you’re going to vote for yet
  • You are planning on voting for a third party
  • You’re holding your nose and voting for Trump (really don’t like him but don’t feel like you have any other reasonable choice)

Even if I don’t change your mind on anything, I hope I at least give you some things to think about, or maybe cause you to see things a little differently than you did before.


My Upbringing

Feel free to skip this section if you want. I feel like establishing where I come from and the culture I was raised in might help prevent someone from trying to claim that I don’t understand where conservatives are coming from. I grew up in a lower-middle class Mormon family in rural Utah, in deeply conservative Utah County. Those are my roots.

Palmyra house #1
Our first Palmyra house. Looks like the barn my dad built is still there (red wall).

I was raised on a farm about 3 miles outside of Spanish Fork, Utah in a rural area called Palmyra (yes, Palmyra, Utah, not Palmyra, New York). Up until I was about 12, we lived in a small 3-bedroom house on about an acre. Dad – correct me if I’m wrong on any of the details here (editor’s note: he did give me some corrections, which have been made). Basically right next door to a dairy. Then my parents were able to buy ~37 acres of land a couple of miles away (land was much cheaper back in those days) and built a bigger house to hold their 5 kids, with #6 popping up out of nowhere years later (little Beekie). That house was at the dead end of a half mile long dirt road. 

Palmyra house #2 from above
View of our second Palmyra house from above

My dad was a steelworker. He worked at Geneva Steel for about 25 years before it eventually shut down. One piece of advice that I remember him giving me when I was a teenager was to try and find a job doing something you like. He didn’t love the steel mill. Early on he worked in the coke plant, where it was hot and dirty. He’d work rotating shifts, which is tough. Later he worked in the rolling mill as a bearing maintenance worker, which sounds like it was less taxing, but still not his favorite thing.

My dad had always loved horses, had dreams of being a cowboy, and that’s how he ended up in Palmyra on a small farm. We had horses, some pigs at one point, then my dad got into cows. I’m fuzzy on the stats, but when I was living at home we eventually probably had ~40 female cows that would be bred and give birth every year, with the calves raised until they were old enough to sell off. 

Note – my dad always corrected us when we or someone else said we lived on a farm. He said we were ranchers. We didn’t really raise crops, other than grass and alfalfa for hay. We raised cattle.

My mom was a stay-at-home mom. She took care of the finances, helping stretch my dad’s blue-collar income and provide us some financial stability. She was practical, frugal, and didn’t waste anything. I knew we weren’t rich or even close to it, but we didn’t feel that poor either. I credit my mom for a lot of that. She was a self-sufficient and independent woman. She’d plant and raise the garden, fix the lawnmower, clip and organize her coupons, serve us leftovers because we didn’t waste good food, and take care of all of the kids’ needs.

Farm Ranch Life

I spent a lot of summer days in the high, dry heat, hauling hay while my dad was at work. It was usually dusty, sweaty, and miserable. Alfalfa hay was the worst, as its leaves showered you in dust when you had to throw it over your head. As the oldest, I bossed my two younger brothers around while we worked. I yelled at Bryce, the next-oldest, because he was too slow. I yelled at Colten, third-oldest, when he’d knock over our stack, stopping the truck too quickly while he drove it at 9 or 10-years-old.

A lot of afternoons after school were spent feeding the cows during the winter, especially when my dad had to be at work. Putting on the winter coveralls and boots. Spreading out hay in the feeder in the cattle yard. Loading up the old truck with hay, driving it out into the field through the snow, kicking it out of the back of the truck for the cows to eat, while the truck drove itself in low gear (“granny” as Dad called it).

Palmyra house #2
Second Palmyra house from the front (I don’t have a good wide angle shot of it, so we’re going with the Google Street View version here)

Although I wasn’t a die-hard cowboy myself, I spent a fair number of days in the mountains, riding horses. Sometimes it was on rides for fun. Our cattle summered in the mountains near Spanish Fork, via grazing permits we had, so sometimes we rode in the mountains for work, herding cattle to where they needed to go. After the steel mill shut down, my dad spent a bunch of summers working in the mountains as a cowboy, living up there, herding cattle, and making sure things were running smoothly for summer grazing.

Guns

We had guns. A bunch of guns. My brother and I had our BB guns when we were little. And our bows and arrows. My dad had a big hunting rifle. A 12-gauge shotgun. My younger brother’s 20-gauge shotgun. A .22 pistol. My brother and I both got Ruger .22 rifles one year for Christmas. Got the Boy Scout rifle shooting merit badge at camp. Did some skeet shooting. Guns weren’t a huge part of our life, but we had plenty of them and used them regularly.

Hunting

Hunting is pretty serious business where I grew up. The start of the deer hunt was an official school holiday. Before he really got into the cow business, my dad was a serious hunter. He went rifle hunting and bowhunting for deer. We had deer jerky and steak. He went elk hunting. We had stuffed pheasants, ducks, and geese that he’d killed displayed in our living room for years and years when I was a kid.

My dad said he “lost his bloodlust” and gave up hunting right around the time I was old enough to start getting involved – maybe when I was 12 or so. That also happened to be when we moved to the bigger place and I think he was worrying more about the cattle at that point. I took the Utah hunter’s education course with my brother and I did a little pheasant hunting and some rabbit hunting, but nothing too serious.

Spanish Fork

Like I said, we lived outside of Spanish Fork, Utah, a town that had maybe 12,000-15,000 people during my teens. The yearly town festival and accompanying rodeo was a huge deal (and still is). I rode the bus “uptown” to go to school every day until 11th grade, when I turned 16 and was able to start driving the old farm truck to Spanish Fork High School.

Back then, Spanish Fork had very, very little ethnic diversity. It was very predominantly white. No idea what the real stats were like, but I’d guess like 98%. I remember a small handful of kids in my grade that weren’t white. The only Black person I can remember having any personal experience with growing up was a church seminary teacher I had in 9th grade. The only non-white families I can remember living in Palmyra back then were the Mexican families who lived and worked on the dairy.

Conservative Politics

My parents weren’t overly political people. Although they probably voted, I don’t remember anything about it, or for whom they voted. My dad always read the newspaper and watched the news. Politics wasn’t a frequent discussion topic as far as I recall. My dad usually had talk radio on while driving in the farm truck (the old one only had AM radio), often playing one of the following: KSL 1160, Sean Hannity, Rush Limbaugh, Glenn Beck (he’s a Mormon convert!).

High School

In high school, I had a history teacher named Mr. (redacted). He was also in my church ward. He was kinda loud, kinda full of it. I took AP History from him my junior year. Problem was, I didn’t learn much history. Mr. (redacted) was very into politics. Conservative politics. And it feels like that’s what he talked about most of the time. So much so that only 2 kids out of my entire class of ~30 actually passed the AP History test at the end of the year, and that was just because they were both 2 of those super-smart kids that just learned it all on their own or already knew it all. I got a 2 out of 5. You needed a 3 to pass and get college credit for it. Yes, I’m still a little salty about it. 

The teacher across the hall from Mr. (redacted) was Mr. Brough. I never had him. He also taught history. And he was in charge of the debate team. And Mr. Brough was also a well-known racist. Some of my friends had him and were on the debate team. They’d share the things he’d say. It was a running joke telling us about the latest racist thing that he’d said in class.

Influences

Other than a two year church mission in northern Argentina and about a year in Oklahoma when newly married, I lived in the Spanish Fork area until I was about 35, when we moved to Henderson, Nevada (basically Las Vegas).

So a lot of conservative politics rubbed off on me, one way or the other. Some at church via consistent comments about the liberals, the “war on the family”, gay marriage being an abomination. Some at school. Some on the radio. It was pretty ingrained in the culture.

Republican and conservative was all I ever knew. It was all that was ever around me.

These were some things I learned to be truths:

  • Environmentalists were bad (stupid tree huggers)
  • Democrats were evil
  • “Bleeding heart” liberals were bad
  • Feminists were awful man haters
  • Pro-choice people were baby killers
  • Homosexuality and gay marriage would ruin society as we know it
  • You couldn’t be a good Mormon and be a liberal/Democrat
  • Harry Reid, the Mormon Democrat senator from Nevada, was not a good Mormon
  • Bill Clinton was the absolute worst president ever (I still believe that Bill Clinton is pretty scummy given his extramarital affairs, etc. but I won’t get into that)

I remember when 9/11 happened. My grandma called me before I’d gone to work. I turned on the TV and watched the awfulness unfold. I was dumbstruck. Eventually I drove to work in a haze. They sent everyone home. But one of the most distinct feelings I remember from that time was the relief that I felt that George W. Bush had recently become president, winning a very close and controversial election. Much better him than that awful bleeding heart liberal Democrat Al Gore. We were in good hands.

Another Democrat from Palmyra?

Interestingly enough, and unknown to me for a long time, amidst all of the conservative Republican-ness, my church ward was home to a long-time Democratic state legislator. Eldon Money was an old (to me) farmer that was in the bishopric when I was a kid. I believe he served as bishop later on after I’d moved away.

Eldon served in the Utah House of Representatives from 1974-1979 and Utah Senate from 1980-1997. I don’t claim to know any of his personal political views, but I find it both fascinating and incredibly disappointing that he was the last Democratic state senator to be elected in all of Utah County. It’s been 23 years since he served. That article references some compassionate positions he spoke of, including this quote from his granddaughter regarding youth in the juvenile justice system:

“And I remember him talking about how some of those kids just weren’t given the chance to be who they were meant to be,” said Hansen, “and just how he wanted to see them have a chance to better themselves.”

Another quote from his granddaughter in that article said he was a “proud Democrat”.


My Political Evolution

Politically I eventually settled solidly into a no-man’s-land. My views were largely very conservative, but I didn’t follow politics closely or hold very strong views when it came to political parties – other than political parties really seemed to suck. I generally found most things political and our two party system to be distasteful. Always arguing. Always fighting. Always blaming the other guy. Never getting anywhere.

I remember discussing a visit to Utah Valley University by controversial documentary maker Michael Moore back in the early 2000s with some family members. I didn’t know a lot about the guy, other than conservatives hated him. I mentioned I didn’t have a problem with him visiting the school. It was a public university and it seemed reasonable to have someone come speak who held different views. This didn’t go over well at all. One brother-in-law’s argument against it was that he didn’t want the country to think we were “a bunch of dang liberals”. 

Somehow, even though I chose to be largely non-political and really held pretty mainstream conservative views, I may have been classified as the family “liberal” by some family members. The fact that I wasn’t explicitly Republican and didn’t always vote that way put me on the other side. My wife, Janean, was often encouraged to go and vote by some family members, even though she had even less interest and awareness of politics. “All you have to do is pick all of the Republicans”, they’d say. She didn’t feel comfortable or very honest doing that, so she didn’t.

I’m a Libertarian!

Though I still wasn’t deeply interested in politics, I saw some Ron Paul signs and some stuff on the Internet and decided that the Libertarian party sounded pretty decent. Small government. Financial conservatism. Personal freedoms. I could go along with that. I thought the concept of a flat tax made absolute sense – everybody pays the same percentage! What’s more equal than that?

I never voted for Obama. I’m pretty sure I wrote in Ron Paul in 2008. And then I voted Libertarian (Gary Johnson) in 2012. Yeah, 2012 – that was the big Mormon Moment year when Mitt Romney was the Republican candidate and all the LDS people in the land were so excited about the possibility. No, I didn’t even vote for Mitt Romney. I stuck with my third party protest vote. 

I won’t launch into a big critique of Libertarianism here (nor am I any kind of expert anyway), so here’s my short version: Libertarianism sort of boils down to an “every man for himself” approach. The government minimally interferes in our lives, and best of luck to every individual in figuring out how to survive. I believe we can do better than that. Especially in one of the richest and most advanced countries in the world.

I also don’t believe that my religion, despite many within it pushing self-sufficiency as a tenet superseding many others, supports an approach where we don’t strive for equality and a basic quality of life level for every person, especially the poor and the marginalized.

2016

Everything changed for me in 2016.

I didn’t think Donald Trump was a serious thing for a long time. Yeah, there was that weird mother of my daughter’s high school friend that had turned into some kind of Trump fanatic. The red MAGA hat, all the flag merch, lots of guns, etc. And the rich retired busybody Karen down the street that was always causing neighborhood drama. But there’s no way the rest of us are taking this guy seriously, right?

Then it came down to the final two for the Republican nomination. And somehow people actually picked Donald Trump? Had they not been paying any attention to what this guy was saying? How he acted?

I’ll get into some of this more in the next post, but I’ll sum up some thoughts about Trump from back then here:

  • His anti-immigration attacks were over the top
  • His “build the wall and Mexico will pay for it” was just insultingly ridiculous
  • He was a prominent conspiracy theorist about Obama not being born in the USA (thinly-veiled racism)
  • He mocked a disabled reporter
  • He belittled the parents of a fallen U.S. solider
  • He constantly insulted people, often personally, about their looks, about their family, or anything else
  • He was particularly disgusting and cruel when it came to criticism of women
  • He called Republican Senator John McCain, a Vietnam war vet and POW, a loser and said that he didn’t respect POWs because he liked people that didn’t get caught
  • His rhetoric was always mean, hateful, sometimes racist, and always divisive. He was your classic bully. There was no way that this man could bring our country together in any way.
  • He didn’t behave like a person who could be taken seriously
  • He just seemed like an all around awful guy

The Video

Then the Access Hollywood tape was revealed: 

“I don’t even wait. And when you’re a star, they let you do it. You can do anything. … Grab ‘em by the pussy. You can do anything.”

If you’ve never watched it before, here’s a link to the whole thing. Listen to it. It’s worse than you think.

Donald Trump admitted to sexual assault on video. Before that there was no way I was voting for him anyway, but that absolutely sealed the deal. I knew then that he was sunk. Done. Had to be. No way people were going to let this go, especially not the right-wing Christians. The party of “family values”. Until they did. And he just kept going. And he ended up winning.

Hillary Clinton

I’m not going to say I was a die-hard Hillary Clinton fan. I don’t love the idea of political family dynasties. We already had a Clinton. And some Bushes. Let’s see what else we’ve got.

There was a lot of conspiracy theory and garbage out there about her that simply did not check out at all. Seemed like an awful lot of people bought into it though. She was characterized as this evil, terrible lady – like some sort of criminal mastermind.

So when it came down to it, there was no question for me whether I was voting for Hillary or not. It was a no-brainer. When the other choice is Donald Trump, that’s an easy call. No messing around with protest third-party votes here.

One day I revealed to a friend that I planned on voting for Clinton. He couldn’t believe it. I mentioned that I’d done some thinking/reading about expanding national health care and that I was pretty open to considering that idea. He could not fathom that either. Coming from a similar cultural background, he just couldn’t conceive of the possibility of voting for a Democrat or considering “socialist” ideas.


How I Officially Became a Democrat

I’ll go into a little more depth about some specific issues in subsequent posts. Generally, it’s been a long, slow burn since 2016. It started with Republicans somehow choosing Donald Trump as their candidate. That was a non-starter for me. I had a very strong aversion to his nonsense.

Donald Trump has continued in his nonsense, escalating it to real damage done to our country. My opinion of him has gone down, not up. My opinion of the Republican party has continued to diminish. More and more it has abandoned its principles and become the party of Trump. They have consistently enabled his every whim, endorsed his unethical behavior, and failed to hold him accountable for anything. Those that do not bow down and kiss the ring of the king are cast out and they become pariahs. 

The Republican National Committee decided not to update their party platform this year. Instead they issued a one page statement that essentially boils down to “We pledge allegiance to Donald Trump”. (Republican Party Platform document)

A Lost Party

Otherwise decent men like Jeff Flake and Mitt Romney (both of whom also happen to be LDS), are now on the outside of the core party. While I may not agree with many of their positions, I at least respect the times that they have shown integrity in sticking up for what they believe in, including Senator Romney voting to convict the president during the impeachment trial – the only Republican senator or congressperson to do so.

It seems that the vast majority of the party has lost that integrity, preferring to instead do whatever they can to stay on Donald Trump’s good side, afraid of him lashing out at them in one of his Twitter tirades.  

Reassessment

So I started taking a closer look at some of the policies that the Democratic party endorsed. The Affordable Care Act (Obamacare) seemed to be a decent start. More coverage for uninsured or underinsured people. Guaranteed coverage for major pre-existing conditions. Personally, I have a major pre-existing condition with my heart, so that means something to me (maybe I’ll talk about that more later). Are all of our health care problems fixed? Nope, far from it, but I feel like some significant progress has been made. And expansion of some of that made a lot of sense to me. 

I’ve continued to re-evaluate a lot of positions that I previously held. And I’ve found that I’m not comfortable with many of them. Once I sat down, spent some time reading and listening to different perspectives, things didn’t seem quite as cut and dry as I’d assumed they were before.

I started diversifying the type of people I follow on social media. More people of color. More non-straight people. More people from outside Utah. More women sharing their important perspectives. And I started to see things differently. Maybe there was more to the world than the view that I’d had before.

Shifts

Here are some areas where my views have shifted after more information, thought, and reflection:

  • Immigration and refugees
  • LGBTQ+ rights
  • Wealth inequality – extreme concentration of wealth at the top with limited upward mobility for so many
  • “Socialism” – used as a boogeyman to try and scare people from considering policies that would help provide services and improve quality of life for a lot of our country. “We’ll turn into Venezuela!” No, we’ll turn into every other major developed country that actually cares about its people.
  • Racial inequality
  • Women’s rights
  • Sensible gun laws
  • Climate change
  • Preaching self-sufficiency and “pulling yourself up by the bootstraps” as justification for ignoring the poor, needy, and marginalized

I now find that my values align much more closely with the Democratic party.

A First

So in early 2020, having never registered with a political party before in my life, I updated my voter registration so that I could participate in the Nevada Democratic presidential caucus.

Voter registration

And I caucused for Elizabeth Warren.

Brett and Whytli with Elizabeth Warren
Still wishing she were the Democratic nominee (Elizabeth Warren I mean – not my daughter)

Do I think the Democrats have all the answers? No. Do I think they’re perfect? No. Am I still generally displeased with how our two party system functions (or fails to function)? Yes.

I’m not swearing an oath to the party. I’m not pledging lifelong devotion. I’ll continue to keep an open mind. But as of right now the Republican party has sold its soul to Donald Trump, and I am not here for it. I will fight for what I strongly believe to be right. I identify with an awful lot of the Democratic platform. This is where I am right now and for the foreseeable future. And it feels right.


But You Can’t Be a Good Mormon and Be a Democrat

I disagree. And LDS Church leadership appears to disagree too, even though an awful lot of church members in the USA keep failing to get the memo:

“Principles compatible with the gospel may be found in various political parties, and members should seek candidates who best embody those principles.”

https://newsroom.churchofjesuschrist.org/article/first-presidency-letter-united-states-election-2020

I believe that the principles and positions generally supported by the Democratic party to be more compatible with the gospel of Jesus Christ than those of the Republican party. I find them to be more compassionate, more tolerant, and more Christ-like. That is not the only reason I identify more with their platform, but it’s a big part of it. 

And apparently Eldon Money, the old farmer from Palmyra, did too.


Posted in political

SQL Complete Review – SQL Server Management Studio Add-In

A few years ago, one of the guys I work with was growing increasingly frustrated with SQL Server Management Studio (SSMS). His frustrations largely stemmed from the fact that SSMS’s Intellisense/autocomplete functionality sort of sucks. Sometimes it works ok, sometimes it doesn’t trigger at all, and sometimes it triggers…but after VERY long delays. When you’re moving along, writing a SQL script, you don’t want to be bogged down waiting for the editor. So my co-worker went on a quest to find something that could do Intellisense better in SSMS than SSMS does it. That was when he found SQL Complete, by Devart (link).

He installed the trial and fell in love with it. The Intellisense/autocomplete actually worked – no delay. And the autocomplete options were far superior to those found in default SSMS. Once he showed me the JOIN autocomplete, I was sold. I’ve been using it for the past few years and it’s provided a huge improvement in productivity when writing SQL in SSMS. They keep adding features and I’m still discovering new cool stuff on a regular basis.

Below are some of the highlights of my favorite features.

Intellisense / Autocomplete

To me, this rivals the experience I get writing C# in Visual Studio – it’s that good. You start typing a simple SELECT statement, like in the example in this screenshot:

SQL Complete Table Autocomplete

Immediately, the autocomplete pops up giving you the options so far. In this case, I get a couple of table name matches. The selected table pops out with some additional info, showing me the tables schema as well as an estimated row count. I hit Enter to select the table and move on.

Now I want to use a JOIN to grab data from another table. So I start my JOIN statement, autocomplete finds the table I want, and then the magic happens – it automatically finds potential JOIN column matches based on column names and lets you select from them. I don’t have to search for the columns, I don’t have to type it all out, and it qualifies the column names with the appropriate table names. Simply awesome. Just having the JOIN completion might justify its cost to me by itself.

SQL Complete JOIN Autocomplete

A few other key points related to autocomplete:

  • Capitalization
    • Using autocomplete does wonders for consistency in capitalization. Table names, column names, and even keywords are completed as well, your scripts end up easily looking great, even without the help of a formatter.
  • Fully-qualified table names instead of aliases
    • Now, instead of using aliases for all table names, I prefer to use the fully-qualified name, which makes it much easier to read and keep track of things, especially in large, complicated scripts. Before that would have been painful due to all of the extra typing, but now with SQL Complete it’s even easier than using aliases the way I used to do it.

Tab Restore

Ever need to restart your machine for something like Windows updates and have to go through all of your open SSMS tabs and decide what stays and goes? Now it just automatically resumes where I left off once I fire SSMS back up. Initially when this started happening, I didn’t even realize that it was SQL Compete that was doing it. I assumed it had been added to SSMS. It wasn’t until I was showing SQL Complete to a new employee at our company and we were reviewing its options that it dawned on me. It even has a session history.

Execution History

Another feature I didn’t realize existed until fairly recently. Very handy for the times that you didn’t save a script, then regretted it shortly thereafter.

SQL Complete Execution History

Find in Results

This is a fairly recent addition to the feature list. Just right-click in the results grid and start typing what you want to find. It finds and highlights it in any column in the results.

SQL Complete Find in Results

Notifications

Ever kick off a query that’s going to take a while, then have to keep checking back on it to see if it’s done yet? With notifications enabled, you’ll get a pop-up in the bottom-right corner of your screen when execution completes. Plus there are configuration options to make it suit your needs.

SQL Complete Notification

SQL Complete Notification Options

Other

A few other things worth mentioning:

  • Export/import profiles
    • Come up with a standard for your team then share the profile
  • Snippets
    • Lots of pre-defined snippets, plus create your own, to cut down on typing time
  • Formatting
    • An option to format the current document (for times when your co-worker writes some messy-looking SQL and sends it to you and your eyes start to bleed). Also an option to format a specific file, or files in a directory.
  • Connection-Based Tab Colors
    • For the times when you don’t actually want to run that script on production. Set a color for production vs. dev, etc.
  • LOTS of features and customization options
    • SQL Complete Menu
    • SQL Complete Options
Posted in technical

Discovering and Documenting the Unpublished KSL Classifieds API

The Idea

So I’ve had this idea for a mobile app kicking around for quite a while. It was born out of my time I used nerdery to buy a PlayStation 3 on the cheap project, where I leveraged some automation I created to search classified listings based on my criteria. If it found what I was interested in, it would send me email alerts.

The idea was to create a mobile app to do the same kind of thing – allow you to define some searches and pop a notification on your phone when it found something for you to look at so you could jump on the good deals before the next guy would steal them from you. I did a little research and, no surprise, that kind of app already existed for craigslist.KSL Classifieds

But I was living in Utah at the time, and while craigslist dominates the US classifieds market in almost every state, they don’t in Utah, where it’s all KSL’s classifieds. KSL-only would be a much smaller market, but I wasn’t really interested in the project for fame and fortune – it was an idea for something I would actually use, plus it seemed like a fun and useful idea to use as an excuse to get into mobile app development.

The Problem

Searching didn’t turn up anything existing along the lines of a KSL classifieds alerts app on any platform, so I set out to figure out how to make it happen. I checked to see if KSL had a public API, but that didn’t turn up anything, which wasn’t a big surprise. My PS3 project made full website page requests to ksl.com and knew how to parse out the data in which I was interested. Making repeated full page requests from a mobile app would be a bad idea – it would be much slower than an API request, not to mention a bandwidth hog, and nobody wants that – but it was looking like it might be my only option.

But then I had the thought – KSL’s official classified app, which didn’t really do anything beyond letting you browse the classifieds just like the website, had to be accessing the ad data via an API. If only I could monitor the requests that the app was making to see how it was getting its data…

Fiddler LogoAfter some Googling about how to monitor HTTP traffic for my phone, I came across the solution involving Fiddler, a free web debugging proxy.  I’d used Fiddler previously to help debug web applications and create automation for website load testing, etc., so I was familiar with the tool. With it you can view all of the HTTP requests that your computer is making and inspect them – view the response, look at the headers, etc. At any rate, the solution was to set up Fiddler on my computer, then route my phone’s traffic through the Fiddler proxy server on my computer, which I did.

The Breakthrough

And what do you know – KSL’s app was making requests to:

  • http://www.ksl.com/classifieds/api.php

An API! And not only that, it was completely unsecured – no HTTPS, no authentication of any kind required. I could take the requests I found in Fiddler made by the KSL app, run them in a browser, and get lovely JSON responses.

Fiddler Output

(these are actually requests to the new, secured API – I neglected to screenshot requests to the old API)

The next step was to figure out what API calls were available, so I started the process of going through each of the types of actions that the app contained and documenting it all (see full API documentation below).

How the Story Ends

After discovering the API, I was pretty excited about the project, even though it had a couple of limitations (no jobs or cars data, which are uniquely-handled sections of the site). I bought a few domains related to the idea, started working on the app design, started learning Android development, etc.

But then life happened – a move to a new state, a new job that required a lot of time, etc. and that was as far as the project ended up going.

I’ve had intentions to get back to it, but once I sat down and looked at it again last year, I found that KSL had moved up in the technology world – their classifieds app was now using a version 2 of their API that used HTTPS and authentication at api2.ksl.com (and now they’ve upgraded to version api3.ksl.com).

A new API request, like this one recorded in Fiddler looks like it includes authentication tokens and gives you this response if you try and request it directly:

  • Invalid request: authentication failed

I figured that the old, original, non-secure API that I’d found would be shut down at that point, which would ruin my project, but it wasn’t – it was still there and working. It’s been about another year and it’s still up. But, even though the old API is still up, I’ve basically abandoned hope that I’ll see the project through, so I figured I should at least document what I found so that if a better man (or woman) comes along, they can benefit from my findings. At least the initial discovery phase was pretty fun and educational.

KSL Classifieds API Documentation

Base API URL:

  • http://www.ksl.com/classifieds/api.php

General Parameters

  • cmd
    • description:
      • command
    • values:
      • categories
        • list all subcategories (includes parent category w/o parent ID)
      • list
        • list category or search items
      • ad
        • show individual classified ad
  • c
    • description:
      • number of results
    • values:
      • integer
  • o
    • description:
      • starting point for results
    • values:
      • integer
  • nid
    • description:
      • category id
    • values:
      • integer
  • id
    • description:
      • ad id
    • values:
      • integer

Search Parameters

  •  s
    • description:
      • search string
    • values:
      • string
  • min
    • description:
      • minimum amount
    • values:
      • int
  • max
    • description:
      • maximum amount
    • values:
      • int
  • d
    • description:
      • distance (in miles)
    • values:
      • int
  • z
    • description:
      • zip code
    • values:
      • string
  • srt
    • description:
      • sort order
    • values:
      • Most+recent
      • Least+recent
      • Lowest+price
      • Highest+price
  • slr
    • description:
      • seller type
    • values:
      • All+sellers
      • Private+sellers
      • Businesses

Example Requests and Responses

* Note that the data and in these examples is old (from around March 2014).

  • List all categories (and subs)
    • URL
      • http://www.ksl.com/classifieds/api.php?cmd=categories
    • return (multiple):
      • “id”:”2″,
      • “category”:”Announcements”,
      • “subcategory”:”Charity”,
      • “count”:”201″
  • List category or subcategory items
    • URL
      • http://www.ksl.com/classifieds/api.php?cmd=list&c=50&o=0&nid=7
    • returns (multiple):
      • “sid”:”23238199″,
      • “nid”:”2″,
      • “title”:”A simple way to help families hoping to adopt”,
      • “price”:”0.00″,
      • “image”:”http:\/\/img.ksl.com\/c\/2567\/256784\/25678426.png”,
      • “display_time”:1354598428,
      • “city”:”Farmington”,
      • “state”:”UT”
  • Search
    • URL
      • http://www.ksl.com/classifieds/api.php?cmd=list&c=50&o=0&s=searchterm&min=1&max=9&d=50&z=84653&srt=Most+recent&slr=All+sellers
    • returns (multiple):
      • “sid”:”23147173″,
      • “nid”:”91″,
      • “title”:”Full size, 30 inch, Wheeled Duffel Bag- brand NEW, was a Black Friday special, changed my mind! Retail: $99″,
      • “price”:”45.00″,
      • “image”:”http:\/\/img.ksl.com\/c\/2546\/254680\/25468076.jpg”,
      • “display_time”:1354060300,
      • “city”:”Provo”,
      • “state”:”UT”
  • Search in specific category (just add nid param)
    • URL
      • http://www.ksl.com/classifieds/api.php?cmd=list&c=50&o=0&s=house&min=1&max=9&d=50&z=84653&srt=Most+recent&slr=All+sellers&nid=279
    • returns (multiple):
      • “sid”:”22825446″,
      • “nid”:”279″,
      • “title”:”Beautiful House for Sale in Idaho Falls, ID”,
      • “price”:”169000.00″,
      • “image”:”http:\/\/img.ksl.com\/c\/2472\/247266\/24726676.jpg”,
      • “display_time”:1354597922,
      • “city”:”Idaho Falls”,
      • “state”:”ID”
  • Show individual ad
    • URL
      • http://www.ksl.com/classifieds/api.php?cmd=ad&id=23027643
    • return:
      • “sid”:”23238150″,
      • “category”:”94″,
      • “subcategory”:”640″,
      • “title”:”32 ft ext ladder”,
      • “price”:”$175.00″,
      • “displaytime”:”1354598118″,
      • “sold”:””,
      • “body”:”32 ft. extension ladder $175.00 firm\nKeller type 1 Industrial Aluminum ladder”,
      • “contactname”:”Dorothy”,
      • “contacthomephone”:”801-201-5615″,
      • “contactworkphone”:”801-201-5615″,
      • “contactcellphone”:””,
      • “city”:”West jordan”,
      • “state”:”UT”,
      • “images”:[
        • “http:\/\/img.ksl.com\/c\/2567\/256787\/25678721.jpg”,
        • “http:\/\/img.ksl.com\/c\/2567\/256787\/25678779.jpg”,
        • “http:\/\/img.ksl.com\/c\/2567\/256789\/25678901.jpg”
      • ],
      • “pageviews”:”5″
  • Large image
    • http://img.ksl.com/c/2566/256635/25663529.jpg?filter=classified/mobile_adPic1
  • Small image:
    • http://img.ksl.com/c/2566/256635/25663529.jpg?filter=ksl/newhl
Posted in technical

Hiring Using Careers 2.0 by Stack Overflow

Careers 2.0 by StackOverflow

I’ve got invitations to create a job seeker profile on Careers 2.0 available for anyone interested – just let me know.

Things at the company are going well. You’ve got too much work to do and not enough people. You decide you need to hire another developer or two so you can maintain what you’ve already got going on plus go after those exciting new ideas.

Options

So where do you start?

Networking

Ideally you rely on some networking. Talk to people you (and your co-workers) have worked with in the past that you’d love to work with again. Get referrals from them if they’re not interested themselves. Talk to friends and family. Networking got us one great developer that I’d worked with for years at a previous company (technically not a finalized deal at time of writing, but dangerously close). Familiarity with his background – knowledge, work ethic, etc. – plus a solid track record of having worked together successfully in the past is absolutely huge as you’re dealing with a known entity (a strong reference from someone you know and respect is a strong second).

Technical Recruiters

No thanks, if I can help it.

  • Ridiculous finders fees
    • 25-35% of the candidate’s first year salary? Really? Does that seem proportional to anyone? Is it just me? Yeah we can afford to pay it but…geez.
  • Inability (or lack of desire) to filter candidates
    • Throw enough crap against the wall and something is bound to stick, right? Too many recruiters are either too ignorant of the technology sector they work in to be able to discern qualifications, or they just don’t care. Either way it results in wasted time for the side doing the hiring (not to mention the candidates).
  • Spam tactics
    • I get so tired of job spam emails from tech recruiters. I haven’t updated any online job search profile in forever and they still spam me, sometimes from information in their “database” that is 5+ years old. They might recognize a buzzword on your resume and suddenly they think you must be a great fit for this job they’re looking to fill. They do absolutely no research on your background, current situation, etc. They know nothing about you but if they spam enough, someone might actually respond. Who cares if your response rate is 1 out of 100 if you’ve got the ability to send near-unlimited amounts of spam? I don’t want to specifically call anyone out here but… **cough**CyberCoders is the worst**cough**

Online Job Boards

You’ve got the older school sites – Monster, CareerBuilder, Craigslist, etc. I haven’t found them to be worth much. Dice has been around a while and is specifically for tech jobs, but most of the recruiter spam I get comes from recruiters who found an old profile on Dice, which is a pretty big turnoff. There’s Indeed. LinkedIn isn’t a bad option. And then there’s a relatively new contender – Careers 2.0 by StackOverflow.

Careers 2.0 by StackOverflow

If you’re a developer, you know StackOverflow. You live by StackOverflow. Community-created and maintained Q&A format programming content. A gamification reputation system that encourages involvement and high-quality content (here’s my profile if you’re interested). It may be the single-greatest online programming resource known to man. When I’m Googling for information or how to solve a problem, I automatically skip down to the first StackOverflow result as my first option. It’s often the only option I need. A little over 3 years ago, StackOverflow released a job search product called Careers 2.0. Careers 2.0 by StackOverflow

The Good

The main bullet points from their launch blog post:

  1. Free to job seekers, but invite-only
  2. Better profiles – the intent to be the ultimate programmer’s portfolio, complete with integration to your StackOverflow profile.
  3. Support for passive candidates
  4. Better search – statistics and nice drill-down maps, etc.

In theory, Careers 2.0 is great. It combines a developer job search with the best online developer reference we have. Some other positives about their product from the employer side:

  • Relocation search – candidates can specify areas which they are open to relocate to as part of their profile, so you’re not limited to just the candidates in your area – you can potentially pull from other areas and actually know that someone is willing to relocate.
  • Decent tools for keeping track of your search – enter notes about candidates, move them along in a kanban-style board from one stage of the process to the next
  • Saved searches – create searches with different parameters and save them for re-use, with candidates found in those searches linked back to them for reference

The cost for access to their candidate search for employers is $1000 per month. It’s not chump change, but it’s not unreasonable, especially if their candidate content is very high quality.

The Bad

  • Small Las Vegas candidate pool
    • This one isn’t entirely Careers 2.0’s fault. Las Vegas is a decent-sized metro area, but is not a tech company mecca. As my former boss, who grew up in Vegas, put it – if you want to work in tech in Vegas you can either work for the government, the gambling industry, or Zappos. Incidentally, Tony Hsieh, the CEO of Zappo’s, is spearheading the Downtown Project, a revitalization effort for downtown Las Vegas with an entrepreneurial and technology emphasis. The number of dev candidates in the area pales in comparison with the area I moved away from a year ago – Salt Lake City/Provo/Orem – which is rapidly turning into a mini Silicon Valley.
  • Outdated profiles
    • Easily the single biggest problem with the service. An incredibly high percentage of the profiles matching my searches were outdated. And we’re not just talking a few months or a year – years with an ‘s’. For something that’s only been around for 3 years, to see so many abandoned profiles is kind of a big surprise. They have got to do something to deal with the problem – whether that’s letting you filter/sort by when a profile was updated, or a proactive effort to re-engage users whose profiles are way out of date…something.
    • LinkedIn became my best friend when using Careers 2.0, which is obviously pretty odd. I would find an interesting candidate, his/her profile would either be incomplete or very outdated, so I’d turn to Google and LinkedIn to find more info. Simply searching for “linkedin [candidate name]” usually provided me with the candidate’s LinkedIn profile, which 9 times out of 10 was way better than what I found on Careers 2.0.
      • Side note about LinkedIn and Google searches.
        • LinkedIn has premium account offerings that let you see more details about people not in your LinkedIn network. The better subscription you have, the more and farther out of your network you can see. I had a basic premium account that gave me some information but not all.
        • If you Google for someone and find a result for their LinkedIn profile and you’re logged into LinkedIn, the information you can see is often limited if they’re not in your network. But if you log out of LinkedIn, or simply run the search in another browser in which you’re not logged in, you’ll be able to see a much more complete profile than you could when you were logged in. I’ve been using that trick for quite a while and also came across an article where someone else mentioned the same tactic a couple months ago.
  • Poor response rates
    • This is likely largely a function of the outdated profile problem detailed above, but response rates, even to just get a “not interested” reply, were very poor. You have a limited number of inquiries you can have pending at any given time (it’s a pretty healthy number though), so some of your subscription time is wasted in just waiting for responses that may never come (and eventually time out).
  • Customer service
    • This one may have just been bad luck or an anomaly, but one day my Careers 2.0 rep sent me an email to check in and see how the job search was going. He asked for feedback. I told him about the shortcomings that I listed above. I never got a response. He did send me offers for free job postings a few times in the months following though.

Disclaimer

Despite its significant shortcomings, I have to give credit where credit is due. My current employer found me via Careers 2.0. I’m very grateful for that. And we eventually did find a great developer that we hired – and found him via Careers 2.0. I feel like it was more a stroke of good luck in that case rather than the result of an awesome product. The candidate we hired turned out to be the only one that even made it more than a couple steps into our hiring process and we lucked out that he was a great fit and was interested in joining us – but I’ll take it either way.

Posted in technical