Skip to content

Blog

How time flies (or why I still haven’t learned Python)

A constant staple of this blog’s life over the last 10-plus years have been the constant breaks and then the “I haven’t blogged in forever!” blog posts. And here we are again.

After starting my journey to learn to program, I went a couple of months and then we sold the house and moved. That really did occupy a large chunk of time, but then all the usual excuses set in. I’ve been telling myself the last couple of months I would start and never do.  Now we are just six weeks away from the football season and if I don’t learn Python, I can never build the application I want to automate the scoring of my football pool.

Nothing like the NFL season starting to get you motivated. I’ve re-enrolled in Programming for Everybody (Getting Started with Python) at Coursera and have decided to use Python 3.x over Python 2.x. I’m also going to work my way through Think Python (2nd Edition) by Allen B. Downey, which also focuses on Python 3. I have a few ideas for what I’ll do next, but I need to do it one step at a time.

I’ve also been doing more research on how I’m going to pull the NFL stats in, but more on that later. I’m just happy to be motivated again!

Prince Rogers Nelson 1958 – 2016

Prince has always held a special place for me. I spent my summers growing up with grandparents, an hour north of the suburbs of Milwaukee, where I lived. In 1984 I was 11 and I still remember walking to the record shop to purchase my first record, Prince’s Purple Rain. Years later, I would joke that if my grandparents or parents knew of some of the lyrics on that album, I would never have been able to buy it.

Darling Nikki

I knew a girl named Nikki

I guess you could say she was a sex fiend

I met her in a hotel lobby

Masturbating with a magazine

She said how’d you like to waste some time

And I could not resist when I saw little Nikki grind

Growing up in the golden age of MTV, my fandom would continue. Raspberry Beret continues to be one of my top ten songs of Prince. U Got the Look, his collaboration with Sheena Easton, will always be emblazoned in my mind from the video. In 1989, when the first Batman movie was released starring Michael Keaton, Prince’s Batdance was a sensation. There was nothing like it on pop radio. Diamonds and Pearls was released in October 1991, a month after I met my girlfriend and later wife. The Love Symbol album was released just a year later in October 1992 and both of these albums would feature singles that I would sprinkle through the mixtapes I made Kelly over this period.

I moved from Milwaukee to Madison in late 1992. I worked as a supervisor in a Best Buy store and Barb, a customer service rep, worked for me. If I had to guess, she was in her early 40s and worked Monday through Friday from 9-2. She knew I was a Prince fan and one day, out of the blue, she asked me if I wanted to join her and her husband on a trip up to Minneapolis. It turns out her son, Jamie, was a choreographer working for Prince’s new protege. Jamie didn’t have any formal dance training. Every day growing up, he would come home after school, turn on MTV and learn the dance moves to all the videos playing on MTV. Jamie would later go on to become one of the five touring dancers on Michael Jackson’s Bad tour.

I joined Barb and her husband on the trip to Minneapolis, my first time there. It was about a four to five hour drive. A local radio station was hosting there annual party called the Star Party. We had a VIP table close to the front where it was Jamie, Barb and her husband, and…. Carmen Electra. (I bet you didn’t remember that Carmen Electra started as a protege of Prince, did you?)

The Star Party was at Glam Slam, the club owned by Prince in downtown Minneapolis. Carmen Electra was slated to go on second to last and we sat at the table watching the other acts performed. Shortly before Carmen Electra was to go on stage, two huge bodyguards approached our table:

He is going to come to the table in a few minutes. You don’t look at him, you don’t talk to him. Understand?

And then he was there. You knew Prince was short but he was even smaller in person. He ignored all of us and whispered in Carmen Electra’s ear. She giggled, clearly enjoying the attention. And just like that, he was gone. A few minutes later Carmen would go backstage to get ready for her performance, of which I remember very little as it was forgettable. After the show, she came back, signed a record for me in lipstick, and kissed it. For years, as I moved apartment to apartment, cross country and back, I kept that sealed and signed record. At some point, I got rid of it. I kick myself on two fronts for that: first, the novelty; second, I would buy a turntable in 2008, and would have been able to actually listen to it.

After the show, we drove out to Chanhassen to drive by Paisley Park, before driving back to Madison. I only remember that I was very tired and it was a half hour drive to his studio through corn fields out in the suburbs. Who knew that in 1999 I would buy my first house just ten minutes from Paisley Park, where I still live to this day.

A few years later when watching the Oscars telecast, I noticed in the credits:

Choreographed by Jamie King

Hey, I met him!

A year or two later I would move to Minneapolis with my future wife. I was still working at Best Buy, and now so was she, in stores about ten minutes apart. There was a security guard who worked at both of our stores who also moonlighted as security at Paisley Park, where Prince would throw impromptu concerts from time to time. This security guard had a crush on Kelly and even asked her out. I didn’t hold this against him as he got me on the list for Paisley Park a few times.

Seeing Prince perform at Paisley Park is like nothing you’ve ever seen. He would rarely play any of his hits. Most times it was things stored in the vault or it was a one hour jam session with his band playing whatever he wanted. Whatever it was, it was magical and special and I’m so glad to have been one of the hundreds in attendance at those shows.

I would only be in Minneapolis for a year or two before moving for another promotion at Best Buy. Two albums would get me through the cross country drive. One was The Hits, a three album best of and a disc of B-sides, released in 1993. The other was ABBA’s Thank You for the Music, their four disc best of collection. (Don’t judge me).

In 1996 I was now a district operations manager for Best Buy in Philadelphia. The Gold Experience, released in September of ’95, was my constant companion in the car as I drove from store to store.

We would move back to Minneapolis in 1997 and in 1999 we bought our first house in Chaska, just ten minutes and one suburb over from Paisley Park, which we still drive by all the time.

In 2008, I would buy my first turntable. Searching through all of the record stores in Minneapolis, I was always on the lookout for Prince albums. Being in Minneapolis, Prince albums, with the exception of Purple Rain, were usually difficult to find and overpriced. But I would buy every one I could get my hands on.

Prince Vinyl

After years away in Las Vegas and Los Angeles, Prince returned to Minneapolis in a big way the last few years. He would throw more parties and concerts at Paisley Park. There was little notice given – usually a week to just a couple of days and you had to follow social media to find out. I would tell a co-worker who lived in Silicon Valley that he had to come out, as he really wanted to go to one of those shows. But buying a plane ticket on short notice? Ouch. You never knew if Prince was actually going to take the stage or not, and if he did, what time he would. Some of those first shows when he was back, doors would at 10 p.m. and he wouldn’t appear until 3, 4 or 5 a.m. I kept telling myself I would go back and never did.

Now I never will.

I drove out to Paisley Park mid-day yesterday after the announcement of Prince’s death. There were already hundreds gathered, grieving. The tributes along the Paisley Park fence were touching.

After the news broke, I was trying to explain to my oldest son what Prince met to me, and I broke down. 89.3 The Current played Prince non-stop starting in chronological order at 1 p.m. yesterday, and at 4 p.m. when Purple Rain hit the airwaves shortly after I got home from Paisley Park, I choked up again. Just writing this, tears come to my eye. Only one other artist’s death, Freddie Mercury in 1991, touched me in the way this has.

I’m so glad to call Minneapolis home. The impromptu concert last night on the streets of Minneapolis, as the city closed off blocks downtown surrounding the legendary First Avenue nightclub where Purple Rain was filmed, was awe inspiring as thousands filled the streets. First Avenue opened a dance party at 11 p.m., which was packed all night with people still waiting to get in at 3 a.m.

Prince called Minneapolis home, but he belonged to all of us, all over the world.

Photo: Prince by Peter Tea under a Creative Commons BY-ND 2.0 license.

Rebooting my productivity without technology

Early last year I ran to Target on a Sunday morning on the spur of the moment. I wanted a Moleskin notebook, the small one that fits in your back pocket.

I wanted to get in a habit of writing down everything, especially ideas for writing prompts.

That lasted about a week for me. This is typical for me, especially when I try to create a new habit impulsively.

For the last couple of years, I’ve also been a huge fan of Wunderlist as a to-do application. It has great app support, working on the web, Mac, Android and iOS with instant sync. I had a number of lists and sub-lists within those and would capture all of the to-do items for each category.

It even worked great when we were selling the house late last year. My wife installed the apps and we shared a to-do list by room for everything that had to get done in order to sell the house. This was a big deal as she is a big fan of writing everything down and gets great pleasure in physically crossing off each action item.

The challenge I have is that I use Wunderlist in fits and spurts. I don’t capture everything I want to do as it happens. When I’m on top of my game, I’ll do two things. At the beginning of each week, I’ll first review all of my lists and the action items in them. I’ll update and check off anything that is done and I’ll add everything I want to get done. Each morning after that, I’ll sit down and review the lists, making sure to add anything I want to get done that day. The challenge I had is there were some days where I’d have the Mac app open and check things off as I would get things done. But I lacked discipline and wouldn’t do it every day and then weeks would go by and I’d have to start over. The bigger challenge for me was that I wasn’t adding things to my to-do list during the day. I was using it as a tool to get things done that I had already planned.

I’ve always been a big fan of Getting Things Done by David Allen. I read the book years ago and I took away three things:

  1. As soon as the idea hits you, write it down. Keep your mind uncluttered.
  2. If it takes less than five minutes, write it down and then just do it.
  3. Create a tickler file aka a long term file for things you want to get done in the someday pile. But write it down and get it out of your head.

That’s why Wunderlist wasn’t working for me – I wasn’t reaching for the Mac app or my phone the moment something hit me that I needed or wanted to do. I don’t always have my phone on me. I don’t take it to meetings when I’m in the office and if I’m at my home office, I’ll leave it there when I go to the kitchen or if I go for a walk. If I think of something at a particular moment, I’m not writing it down right then and there.

So now I’m going old school. I grabbed the small Moleskin notebook I had abandoned and over the last couple of weeks, I’m filling it as fast I think of something that I want to do or needs to be done.

I have also added two tabs to my notebook. The first 70% of the notebook will be dedicated to my to-do list (and crossing them off!). I then have a tab for “Big Projects”, things that aren’t going to be done on a specific day. It needs to be more than a “someday” list, but I haven’t figured it out yet. Then there is a third tab, a “notes” tab. This tab is for anything I want to capture – ideas that I might want to write about; story ideas; or just random thoughts. Anything goes.

I think my wife might be on to something – the mental pleasure you get by crossing something off. Wunderlist makes a nice little ding when you check something as done and then archives it, making it disappear. Having the ability to see a page of things that have been done and crossed off makes you feel more productive. (Though there is an advanced feature in Wunderlist to make them not disappear, it would quickly be cluttered).

Like any productivity tip or tool, it’s about what works for you – and then sticking with it. I’m finding that not using technology for the first time in a long time is making me even more productive.

Python Jumpstart Kickstarter

My plan to learn Python was temporarily derailed by buying a new house, selling the old one, and moving.  Fear not, we’re moved in, broadband was finally installed two days ago, and I’ll be back on plan next week.

In my quest to learn Python, I came across the Talk Python to Me podcast.  I’ve listened to a handful of episodes and enjoyed them, even if most of them are over my head at this point.

Michael Kennedy, the host of the show, launched a Kickstarter this week:  Python Jumpstart by building 10 apps.  This looks absolutely perfect for me as I’ve started learning Python from a couple of online courses and books and struggled in linear learning without context.  From the Kickstarter page:

Most courses focus on teaching you hundreds of details and leave putting them together as an exercise for the student. My course is different.

You will learn all the basics, yes. But you will learn them while building 10 stand alone applications. You will see each application built from the ground up in live demos. When we hit new topics (functions for example), we will pause, discuss them, and return to our application we are building.

This sounds like it may fix or address where I’ve struggled in trying to learn from books.  While the Kickstarter does say it is for people who have some programming / scripting experience, I’m hoping by the time the course if available I’ll have a basic enough understanding of Python that this will jumpstart my Python knowledge.  (Pun intended).

I’m happy to see that after just a few days, its reached a couple of stretch goals.  I’ve pledged at the Early Access Student access.  Check it out!

My workflow in learning Python

(Originally written in Day One on November 30th, 2015)

When Apple introduced iBooks into Mac OS X a couple of releases ago, I thought it was a dumb idea.  Reading eBooks was meant to be done on an e-ink reader, such as a Kindle, or worst case, an iPad or tablet with an LCD screen.  Who would want to read books on their actual computer?

It turns out, me.  This may be big when it comes to learning Python.  Oh, and having a 27” iMac doesn’t hurt, either.

On the left, are the iBooks I have imported.  (Big thanks to O’Reilly for making their ebooks purchases DRM free and available as ePub, Kindle format, PDF and another format of which I can’t remember).

On the right is Atom, the text editor from the folks who brought you Github.  I’ve just installed it as it is a little more lightweight than Coda, typically my text editor / IDE of choice on a Mac.

After reviewing the three Python books I bought, I’m starting with Think Python.  Originally known as “How to Think Like a Computer Scientist” and written for Java, I chose this one, because, as the author puts in in the introduction:

“In January 1999 I was preparing to teach an introductory programming class in Java. I had taught it three times and I was getting frustrated. The failure rate in the class was too high and, even for students who succeeded, the overall level of achievement was too low.

One of the problems I saw was the books. They were too big, with too much unnecessary detail about Java, and not enough high-level guidance about how to program. And they all suffered from the trap door effect: they would start out easy, proceed gradually, and then somewhere around Chapter 5 the bottom would fall out. The students would get too much new material, too fast, and I would spend the rest of the semester picking up the pieces.

Two weeks before the first day of classes, I decided to write my own book. My goals were:”

  • “Keep it short. It is better for students to read 10 pages than not read 50 pages.
  • Be careful with vocabulary. I tried to minimize jargon and define each term at first use.

  • Build gradually. To avoid trap doors, I took the most difficult topics and split them into a series of small steps.

  • Focus on programming, not the programming language. I included the minimum useful subset of Java and left out the rest.”

Excerpt From: Allen B. Downey. “Think Python.” iBooks.

What I took away is he wanted to help students learn the basics of programming and computer science, not just the language.  That’s what I need as I don’t have any background in the building blocks of programming.  So even though the book is geared towards Python 3.x and I’m using Python 2.7 on my Mac and my CentOS server, I’m going to start with this book.

What’s great about doing this in iBooks side by side with my text editor and a terminal, is that when it comes time to do the exercises in the book, I can make a note right in iBooks.  I highlight the exercise and click “Add Note”.  I then paste in from a terminal the Python code from the exercise and the results.  If I get it wrong, I’ll paste both the wrong and right code and make a note of how I fixed it.  This should make review a lot easier.

Today’s focus was on math operations (and not using the math module built in to Python).  Lots of parentheses and learning the order of operation.  I also learned the hard way the difference between integers and floating point numbers as part of the exercises.

How I Got Started Programming

As I attempt to learn Python, I’m fascinated by how people are able to do this as well as how they started to learn to program.

I’m not the only one, as Ryan Gordon (aka Icculus), a well known game developer who ports many games to Linux and Mac, asked a similar question on Twitter last month.

This led to a lot of interesting tweets and Ryan created a Storify page to share them. Josh “Cheeseness” Bush wrote up a great analysis of those tweets sharing graphs looking at the languages, hardware and more about the people who replied used to get started with programming.

Even though I’m just starting to formally learn to code now, my story with computers is similar to a lot of those stories.

It all started in the early 80s when my father bought a Timex Sinclair TS1000 (aka ZX81) and then a TS1500.  You could load games via tape and also buy magazines with the code to program your own games.  I spent hours handtyping machine code to create games like Breakout.

A few years later my father bought an Apple //c and I then learned Logo, Basic and others.  Nothing that I ever really stuck with from a programming stand point, but enough to learn the basics and spend hours tinkering.

After that, my father bought a an IBM clone 286.  I remember being at Sears with him and telling him to spend the extra money to get a 386, but even a 286 was at least $2,000 back then.  I remember it ran GeOS for a graphical interface and one Christmas, after I received the original Wing Comannder as a gift, I had to buy MS-DOS 5 just so I could use the himem.sys to have enough memory to run the game.

From the Apple //c on, we always had a modem as well.  Starting with a 300 baud modem to a 1200 baud modem later, I started visiting BBSes on the Apple //c and later on the IBM clone as well.  (We had a Compuserve account early on, but hourly charges!  Ouch.) As a teenager I would go to meetups and actually meet the people I was interacting with on a BBS in a real life – something I’d do twenty years later when I got involved in open source and GNOME.

Using Linux for years and being involved with GNOME, taught me how to use a shell, basic XML with Docbook, and revision control with Git.  But now it’s time to learn a formal language and make my first program.

In many ways, I still consider myself an early adopter and if it weren’t having access to computers at a young age, both in home and in school, I’d be a much different person today.

Learning Python

(Orginally written in Day One on November 30th, 2015)

I’ve decided to learn Python.

Not only do I have an itch to scratch, but I need a hobby (as I’ve said many times over the last few years since leaving the open source world.)

Python is supposedly one of the easier languages to learn as a complete beginner. It also is supposed to be good at web scraping, which fulfills a specific need I have.

I started the Codeacademy class for Python last week over the Thanksgiving holiday. I was about 15% of the way through it and then got hung up on Boolean operators. Not only did I find them confusing, but I have an issue with the way Codeacademy structured that chapter. They basically had you copy and paste the code into their editor, which for me, didn’t teach me anything. When it came time to do the quiz, I was hopelessly lost. After swearing about that for a few hours and taking a break, my subconscious kicked in and started thinking about it. I then realized that the Boolean operators are going to be exactly what I need to define if a player’s pick is a unique choice in our pool and to double the points for that particular pick.

But I’m getting ahead of myself.

In 2013, my friend Stone and I resurrected MLBPool, with the creative name of MLBPool2. This was a baseball pool he had been in for ten years that came to an end in 2011. You pick which teams will win and lose their division, individual leaders in hitting and pitching categories and that’s it. You earn double points if your pick is unique and no one else chose that team or person for that category. You can change your picks at the All-Star break, but those changes are only worth half points. That’s it – no daily lineups like fantasy. I call it fantasy sports for the lazy. Which is perfect for me.

This year we also started an NFL version, which I’m managing. It’s identical except there is no changing your picks at the half way point. I manage the website for both at MLBPool2.com.

Every Tuesday morning I have to manually update the Google Sheet. The original MLBPool site was written in ASP and was doing web scraping to update the leaders. I have to believe there is a way to do that again and I’m hoping Python is the answer.

O’Reilly had a 60% sale over Black Friday, so I bought four books:

  • Introducing Python
  • Learning Python
  • Think Python
  • Python Pocket Reference

I’m all in.

The biggest challenge is that there are two versions of Python: 2.7 and 3.5. 2.7 is legacy and 3.x is the future. I even emailed an old friend that I haven’t talked to in a few years that I know uses Python. (I’m terrible about staying in contact with people, but that’s a different story for another day). My CentOS server on Digital Ocean runs 2.7, as does my Mac. He also recommended I start with 2.7. But of course the books are focused on the latest and greatest. I’m hoping I don’t get too confused and can write clean code that works in both, but we’ll see. Worst case scenario is I learn 3.x code from the books and have to upgrade the server, but we all know how that usually turns out…

I need a hobby. I’m hoping I can stick with this. Even writing in my journal isn’t something I’ve stuck with for as long as I’ve liked, but I have to give it a go. I’m hoping by the 2017 season I’ll have a beta that’s working, so I have a year and a half.

With the updates to Day One, maybe I should start a Python journal to document how it’s going. (Update: I have started a new journal in Day One called Python. I may even start blogging my adventures in Python on my personal blog or via DayOne.me).

January 6th, 2016: And, look! I even started blogging my adventures!

Welcome to 2016 and my quest to learn Python

* Dusts off the old blog *

This thing still on?  Still working?  I guess it is!  I could give you the usual excuses why I haven’t blogged much in the last few years.  The rise of Twitter, general laziness, etc.  But I might be back to blogging for a little bit.

I won’t call it a New Year’s resolution as I started it at Thanksgiving, but 2016 is the year I’m going to learn how to code.  Specifically, I’m going to learn Python.  I have an itch to scratch and a problem to solve and Python may be the solution.

I’ve worked with programmers both at my day job and various open source organizations, but I don’t know how to code.  I can manipulate a little HTML and XML (Docbook), but that doesn’t mean I could do it from scratch.

Just over a month ago on Thanksgiving weekend, I decided it was time to learn Python.  I bought a few books from O’Reilly that were on sale, started a Codecademy course, and away I went.

One reason that I may not blog as much, is that I do use a journal – Day One, specifically (and it’s fantastic, but that’s a different subject for another day) as I do enjoy writing.  At the same time I decided to start to learn to code, I started a new notebook in Day One (sshhh – it’s a secret new feature available to beta testers I’m not supposed to talk about…yet) to start detailing my journey into learning Python.

In the coming days, weeks, and hopefully, months I’ll be sharing those thoughts from my journal on trying to learn Python, including why, what’s working, not working and the tools I’m using.  Stay tuned for more as I begin my quest to learn Python.

Bloom County 2015

Since I was a kid, I’ve been a fan of Berke Breathed’s Bloom County. Over a dozen years ago while on vacation in San Francisco, I visited a number of used bookstores and completed my Bloom County book collection. I own every Bloom County book published, including the collections and the Library series. I even bought the Humble Bundle a year or two ago to re-purchase everything digitally so I can view it on my iPad.

So when Mr. Breathed brought Milo, Opus, Steve Dallas and the rest of the gang earlier this year as Bloom County 2015 I was through the moon. I took a picture of my stuffed Opus with a collection of my books and tweeted out my excitement.

I don't know who is happier today, Opus or me. #bloomcounty

A couple months after re-launching the comic strip, a store was launched to buy signed copies of the daily strips, merchandise and more. A daily strip costs $110 and a Sunday strip in color costs $150. It’s a steep price, but each strip is signed and Breathed also personally draws a pencil sketch of the character of your choice on the strip.

One of last week’s strips sealed the deal for me and I pulled the trigger and bought it today. Bloom County 2015 #76 features Cutter John trying to avoid the Star Wars: The Force Awakens trailer due to spoilers. Bloom County and a Star Wars reference together? These are two of my favorite things! Like Cutter John, I had successfully avoid Star Wars spoilers for the new movie… until the trailer came out and I read a scene by scene breakdown of the trailer with all the spoilers.

It will be a month before my personalized comic strip arrives. This will be a perfect addition to my new office in the new house.

Congratulations Alex

I haven’t blogged in almost a year, so here’s a picture of Alex with Jack and Zoe. Alex graduated from boot camp in the United States Navy last week and is embarking on his new career as a nuclear engineer.

IMG_0581