The PIR Sensor Debacle of 2018

Last spring I set up a Raspberry Pi to record humming birds at my hummingbird feeder, compile the recorded h264 files into an mp4 and upload it to YouTube.

I’ve written about that process before here, here, and here.

This post is a bit of documentation to remind myself about how to connect the PIR sensor to the Raspberry Pi so I don’t forget.

When I went to set it up this year, it appeared like the PIR sensor wasn’t working. It would start the video capture, but it wouldn’t end it.

I tried a couple of different things (including the purchase of some new PIR sensors) but none of them seemed to work. I was worried that the heat from the early bit of summer last year had maybe fried my little Pi.

But no, it turns out that the link I was using as the basis for my project had a diagram AND a description about how to connect the PIR.

I had assumed that the diagram was correct and that I didn’t need to read the description, but it turns out I did BECAUSE the diagram had the connections set up in a way that didn’t line up with the PIR sensor(s) I have.

In the Parent Detector PIR sensor the connectors are (1) Power, (2) Ground, (3) Out

In my PIR sensor the connectors are (1) Power, (2) Out, (3) Ground.

This meant that the power was getting to the PIR sensor, but there was no way to send the trip because the signal was being sent to the Ground.

Anyway, the morale of the story is, pictures are nice, but reading may save you some time (and money) in the long run.

ITFKH!!!

It’s time for Kings Hockey! A couple of years ago Emily and I I decided to be Hockey fans. This hasn’t really meant anything except that we picked a team (the Kings) and ‘rooted’ for them (i.e. talked sh*t* to our hockey friends), looked up their position in the standings, and basically said, “Umm … yeah, we’re hockey fans.”

When the 2018 baseball season ended, and with the lack of interest in the NFL (or the NBA) Emily and I decided to actually focus on the NHL. Step 1 in becoming a Kings fan is watching the games. To that end we got a subscription to NHL Center Ice and have committed to watching the games.

Step 2 is getting notified of when the games are on. To accomplish this I added the games to our family calendar, and decided to use what I learned writing my ITFDB program and write one for the Kings.

For the Dodgers I had to create a CSV file and read it’s contents. Fortunately, the NHL as a sweet API that I could use. This also gave me an opportunity to use an API for the first time!

The API is relatively straight forward and has some really good documentation so using it wasn’t too challenging.

import requests
from sense_hat import SenseHat
from datetime import datetime
import pytz
from dateutil.relativedelta import relativedelta



def main(team_id):
    sense = SenseHat()

    local_tz = pytz.timezone('America/Los_Angeles')
    utc_now = pytz.utc.localize(datetime.utcnow())
    now = utc_now.astimezone(local_tz)

    url = 'https://statsapi.web.nhl.com/api/v1/schedule?teamId={}'.format(team_id)
    r = requests.get(url)

    total_games = r.json().get('totalGames')

    for i in range(total_games):
        game_time = (r.json().get('dates')[i].get('games')[0].get('gameDate'))
        away_team = (r.json().get('dates')[i].get('games')[0].get('teams').get('away').get('team').get('name'))
        home_team = (r.json().get('dates')[i].get('games')[0].get('teams').get('home').get('team').get('name'))
        away_team_id = (r.json().get('dates')[i].get('games')[0].get('teams').get('away').get('team').get('id'))
        home_team_id = (r.json().get('dates')[i].get('games')[0].get('teams').get('home').get('team').get('id'))
        game_time = datetime.strptime(game_time, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=pytz.utc).astimezone(local_tz)
        minute_diff = relativedelta(now, game_time).minutes
        hour_diff = relativedelta(now, game_time).hours
        day_diff = relativedelta(now, game_time).days
        month_diff = relativedelta(now, game_time).months
        game_time_hour = str(game_time.hour)
        game_time_minute = '0'+str(game_time.minute)
        game_time = game_time_hour+":"+game_time_minute[-2:]
        away_record = return_record(away_team_id)
        home_record = return_record(home_team_id)        
        if month_diff == 0 and day_diff == 0 and hour_diff == 0 and 0 >= minute_diff >= -10:
            if home_team_id == team_id:
                msg = 'The {} ({}) will be playing the {} ({}) at {}'.format(home_team, home_record, away_team, away_record ,game_time)
            else:
                msg = 'The {} ({}) will be playing at the {} ({}) at {}'.format(home_team, home_record, away_team, away_record ,game_time)
            sense.show_message(msg, scroll_speed=0.05)


def return_record(team_id):
    standings_url = 'https://statsapi.web.nhl.com/api/v1/teams/{}/stats'.format(team_id)
    r = requests.get(standings_url)
    wins = (r.json().get('stats')[0].get('splits')[0].get('stat').get('wins'))
    losses = (r.json().get('stats')[0].get('splits')[0].get('stat').get('losses'))
    otl = (r.json().get('stats')[0].get('splits')[0].get('stat').get('ot'))
    record = str(wins)+'-'+str(losses)+'-'+str(otl)
    return record


if __name__ == '__main__':
    main(26) # This is the code for the LA Kings; the ID can be found here: https://statsapi.web.nhl.com/api/v1/teams/

The part that was the most interesting for me was getting the opponent name and then the record for both the opponent and the Kings. Since this is live data it allows the records to be updated which I couldn’t do (easily) with the Dodgers programs (hey MLB … anytime you want to have a free API I’m ready!).

Anyway, it was super fun and on November 6 I had the opportunity to actually see it work:

I really like doing fun little projects like this.

Hosing my WiFi set up

I have been wanting to put shelves up in my office above my desk for some time. The problem has been that the ones that are sold at Lowe’s or Home Depot are not really what I wanted (too short) and I’m not a super handy guy with building stuff (that’s more my dad and brother) so I’ve just been putting it off. For an embarrassingly long time.

Last a couple of weekends ago my dad had volunteered to help me out in putting up some shelves.

On Saturday at 8:30 we started. All in all the process went really, really well. Only one extra trip to the hardware store (it’s usually about 3) and the shelves were nice and level.

Since I wanted the shelves above my desk we needed to move it, and all of the electronics that were on it, and plugged into the outlet behind it. This included a UPS / Battery backup that all of my electronics were plugged into.

We moved everything away from the wall, and then I moved it back. No. Big. Deal.

Now, the timing may have just been coincidental, but the next morning I needed to do some work for my job-y job from home. I took my laptop into my office (with the brand new shelves) and plugged it into the UPS.

I noticed the lights flicker and discovered that the WiFi router (my trusty AirPort Extreme) seem to have reset itself.

No big deal. I just rebooted and we were all good.

Later that day I plugged in my iMac and then stuff got real. The lights went out. I figured that the breaker tripped, but the sprinklers next to the breaker were on so I waded out through to the box and turned the breaker back on. Or so I thought. I came back in and the lights were still off.

At this point I freaked out because, well, that’s kind of what I do. I went back out and turned the breaker off and then back on. Lights are back.

OK, lets try this again. I plug the iMac back in and … crap. Lights are off again.

Back to the breaker (at this point the sprinklers are off) so off and on the breaker went.

OK, one last time and … mother f!

Somehow I was able to go from being able to have my UPS plugged in and everything being fine, to not.

OK. Swap out the UPS and put back the Surge Protectors. Everything powers on and we’re good.

Except we’re not. The light on my AirPort Extreme is suddenly not a solid green, but instead a flashing amber. I consult the internet and get a very unhelpful message

These are some typical reasons for the status light to flash amber:

The base station hasn’t been set up, or it was reset and needs to be set up again. Use AirPort Utility to set up your base station.

A firmware update is available for the base station.

The base station is set up to use Back to My Mac, but Back to My Mac isn’t working or the password is incorrect. If you’ve upgraded to macOS Mojave, you should remove the base station from your Back to My Mac network, because Mojave doesn’t support Back to My Mac.

The base station can’t connect to the Internet, such as when Internet service is down at your location, the base station can’t acquire an IP address from your primary router, or the WAN Ethernet connection to your router isn’t working.

The base station is set up to wirelessly extend the range of your network, but is too far away from the primary Wi-Fi base station.

If your base station is an AirPort Time Capsule, its internal hard disk is experiencing an issue that requires repair.

And suddenly my entire WiFi is down. And I am sad.

I tried a ton of things to get the AirPort Extreme Back, but nothing is working. I finally throw in the towel and decide to to use the WiFi access point from my Fios router.

This means that I have to update the WiFi on:

  • 3 iPhones
  • 2 iPads
  • 1 MacBook
  • 2 MacBookPros
  • 1 iMac
  • 2 Wemo Switches
  • 2 Raspberry Pi
  • 3 Apple TVs (2 4th Gen and 1 3rd Gen)
  • 1 WiFi connected Scale
  • 1 Ring Doorbell
  • 1 Ring Chime (connected to Ring Doorbell)

It also means that I need to plug my Netgear switch into my Fios router instead of the AirPort Extreme. No big deal, right? Except that it was because I forget that the port that the Cat5 cable is plugged into on a router is important.

I spent an embarrassingly long time trying to figure out why my Sonos and Hue Lights weren’t on my network.

Emily kept telling me to take a break and relax and that was, in that moment, the last thing I wanted to do.

I was able to get all of the iOS and MacOS devices connected back to the internet (via WiFi) and decided that I needed to forget the network and watch game 5 of the World Series.

By the end of the 7th we had the game off and were catching up on CW Comic Book shows.

It was a rough day. But I learned a couple of things:

  1. LAN Port 1 on the Fios Router is the right port
  2. Sometimes, you just need to take a step back and think instead of just react
  3. I have a crap ton of WiFi devices

I’m still working on trying to get the AirPort Extreme back to working so that I don’t need to get a new WiFi router ( have I mentioned how awful the Fios one is? ).

New  Watch

New  Watch

The first week

I’ve been rocking a series 2 Apple Watch for about 18 months. I timed my purchase just right to not get a series 3 when it went on sale (🤦🏻‍♂️). When the series 4 was released I decided that I wanted to get one, but was a bit too slow (and tired) to stay up and order one at launch.

This meant that I didn’t get my new Apple Watch until last Saturday (nearly5 weeks later). I wanted to write down my thoughts on the  Watch and what it’s meant for me. I won’t go into specs and details, just what I’ve found that I liked and didn’t like.

The Good

Holy crap is it fast. I mean, like really fast. I’ve never had a watch that responded like this (before my series 2 I had a series 0).

It reacts when I want it to, so much so that I’m sometimes not prepared. It reminds me of the transition from Touch ID Gen 1 to Touch ID Gen 2. I really appreciate how fast everything comes up. When I start an activity, it’s there (no more waiting like on Series 2). When I want to pair with my AirPods … it’s there and ready to go.

I also really like how much thinner it is and the increase in size. At first I thought it was ‘monstrous’ but now I’m trying to figure out how I ever lived with 2 fewer millimeters.

I also decided to get the Cellular Version just in case. It was a bit more expensive, and I probably won’t end up using it past the free trial I got, but it’s nice to know that I can have it if I need it. I haven’t had a chance to use it (yet) but hopefully I’ll get a chance here soon.

The Bad

So far, nothing has stuck me as being ‘bad’. It’s the first Apple Watch I’ve had that’s really exceeded my expectations in terms of performance and sheer joy that I get out of using it.

Conclusion

Overall I love the Series 4  Watch. It doesn’t do anything different than the Series 2 that I had (except I can make phone calls without my phone if I need to) but oh my is it fast! If someone is on a Series 2 and is wondering if jumping to the Series 4 is worth it … it totally is.

Moving my Pycharm Directory or How I spent my Saturday after jacking up my PyCharm environment

Every once in a while I get a wild hair and decide that I need to ‘clean up’ my directories. This never ends well and I almost always mess up something, but I still do it.

Why? I’m not sure, except that I forget that I’ll screw it up. 🤦‍♂️

Anyway, on a Saturday morning when I had nothing but time I decided that I’d move my PyCharm directory from /Users/ryan/PyCharm to /Users/ryan/Documents/PyCharm for no other reason than because.

I proceeded to use the command line to move the folder

mv /Users/ryan/PyCharm/ /Users/ryan/Documents/PyCharm/

Nothing too big, right. Just a simple file movement.

Not so much. I then tried to open a project in PyCharm and it promptly freaked out. Since I use virtual environments for my Python Project AND they tend to have paths that reference where they exist, suddenly ALL of my virtual environments were kind of just gone.

Whoops!

OK. No big deal. I just undid my move

mv /Users/ryan/Documents/PyCharm/ /Users/ryan/PyCharm

That should fix me up, right?

Well, mostly. I had to re-register the virtual environments and reinstall all of the packages in my projects (mostly not a big deal with PyCharm) but holy crap it was scary. I thought I had hosed my entire set of projects (not that I have anything that’s critical … but still).

Anyway, this is mostly a note to myself.

The next time you get a wild hair to move stuff around, just keep it where it is. There’s no reason for it (unless there is).

But seriously, ask yourself first, “If I don’t move this what will happen?” If the answer is anything less than “Something awful” go watch a baseball game, or go to the pool, or write some code. Don’t mess with your environment unless you really want to spend a couple of hours unmasking it up!

How to Ryan

Hi, welcome to the team. I’m so glad you are here at $COMPANY.

It’s going to take a solid 90 days to figure this place out. I understand the importance of first impressions, and I know you want to get a check in the win column, but this is a complex place full of equally complex humans. Take your time, meet everyone, write things down, and ask all the questions – especially about all those baffling acronyms … healthcare is full of them

One of the working relationships we need to define is ours. The following is a user guide for me and how I work. It captures what you can expect out of the average week, how I like to work, my north star principles, and some of my, uh, idiosyncrasies. My intent is to accelerate our working relationship with this document.

Our Average Week

During your first 90 days we’ll have a 1:1 every week for about 30 minutes. I try to never cancel this meeting so it might get moved around a bit. I would like to apologize for this in advance.

After 90 days I let you decide how frequently or infrequently we meet. Some people meet with me every week even after the 90 days. Some meet once a month. However, once a month is the longest I feel conformable between 1:1s.

If you are curious about the 1:1s I have with my manager I’m more than happy to tell you about their frequency and duration. I meet with my boss at least once a week for anywhere from 30 – 90 minutes. It just depends on the week.

The purpose of our meeting is to discusses topics of substance, not updates (there are other platforms for that). Sometimes they can morph into update type meetings. I’ll do my best to keep that from happening, and I ask that you do the same. I have a running list of items that I will want to discuss with you and I encourage you do have the same.

We have scrum every day unless it’s retrospective day. I act as the scrum master to help move the meeting along, but during the meeting I’m the scrum master, not the manger (I even wear a silly hat). The purpose of the scrum is to tell the team three things:

  1. What I did yesterday
  2. What I’m doing today
  3. What, if any, roadblocks I have

The scrum master will make note of the roadblocks and work to remove them as quickly as possible. Sometimes this is fast, sometimes it’s not.

Every 2 weeks we have a Sprint Retrospective and Planning session. This lasts about 90 minutes. The purpose of this meeting is to review the previous Sprint and to plan out the issues that will be worked on in the next one.

When reviewing the previous sprint we ask ourselves four questions:

  1. What did we do well?
  2. What could we have done better?
  3. What did we learn?
  4. What still puzzles us?

This is a time to be honest and constructive. If the scrum master didn’t manage the scrum well, say so. If Bob didn’t get back to you say so. If you learned an amazing new way to query the database that is more performant give a shout out.

If I am traveling or will be out of the office on PTO (yes, I take PTO and you should too once you can), I will give you notice of said travel in advance. Depending on the type of travel I may need to cancel our meeting. If it’s a weekly meeting I won’t reschedule. If it’s not weekly then I’ll reschedule for as close to the day when I’ve returned as I can.

Sometimes I work on the weekends. Sometime I work late. Unless we have a big project that you are working on and it needs to get done I don’t ask anyone else to work late or on the weekends. I want you to have a life outside of work.

North Star Principles

Humans first. I believe that happy, informed, and productive humans build fantastic products. I try to optimize for the humans. Other leaders will maximize the business, the technology, or any other number of important facets. Ideological diversity is key to an effective team. All perspectives are relevant, and we need all these leaders, but my bias is towards building productive humans.

Leadership comes from everywhere. My wife likes to remind me that I hated meetings for the first ten years of my professional career. She’s right. I’ve wasted a lot of time in poorly run meetings by bad managers. I remain skeptical of managers even as a manager. While I believe managers are an essential part of a scaling organization, I don’t believe they have a monopoly on leadership, and I work hard to build other constructs and opportunities in our teams for non-managers to lead.

It is important to me that humans are treated fairly. I believe that most humans are trying to to do the right thing, but unconscious bias leads them astray. I work hard to understand and address my biases because I understand their ability to create inequity. I am not perfect, but I try to be better today than I was yesterday. Sometimes I succeed. Sometimes I don’t.

I heavily bias towards action. Long meetings where we are endlessly debating potential directions are often valuable, but I believe starting is the best way to begin learning and make progress. This is not always the correct strategy. This strategy annoys those who like to debate.

I believe in the compounding awesomeness of continually fixing small things. I believe quality assurance is everyone’s responsibility and there are bugs to be fixed everywhere… all the time.

I start with an assumption of positive intent for all involved. This has worked out well for me over my career.

Feedback Protocol

I firmly believe that feedback is at the core of building trust and respect in a team.

At $COMPANY, there is a formal feedback cycle which occurs once a year per employee.

During that formal feedback cycle (also called the Annual Review) we will discuss the previous year. There’s a form ($COMPANY loves forms). I’ll fill it out and we’ll discuss it.

This means that at anyone time I could be finishing up 5 reviews or 1.

Notice I say finishing up. I try to make the reviews I write as living documents so I can capture everything from the year, and not just everything from the last month.

If during the Annual Review you are surprised (positively or negatively) by anything, I have not done my job. Please let me know. Feedback is the only way we know we are doing something well, or not well.

I won’t assume you know what I’m thinking, and I ask that you don’t assume I know what you’re thinking.

Disagreement is feedback and the sooner we learn how to efficiently disagree with each other, the sooner we’ll trust and respect each other more. Ideas don’t get better with agreement.

Meeting Protocol

I go to a lot of meetings. In the morning scrum many times I will indicate that today I have several meetings. I don’t enumerate all of them because I don’t think everyone wants to know specifically which meetings I’m going to. If I think it’s important for the team to know, I will say, I have meeting X today. If I don’t indicate what meeting I have and you want to know, ask. If it’s not private / confidential I will tell you.

My definition of a meeting includes an agenda and/or intended purpose, the appropriate amount of productive attendees, and a responsible party running the meeting to a schedule. If I am attending a meeting, I’d prefer starting on time. If I am running a meeting, I will start that meeting on time.

If a meeting completes its intended purpose before it’s scheduled to end, let’s give the time back to everyone. If it’s clear the intended goal won’t be achieved in the allotted time, let’s stop the meeting before time is up and determine how to finish the meeting later.

Nuance and Errata

I am an introvert and that means that prolonged exposure to humans is exhausting for me. Weird, huh? I tend to be most active when I’m not running the meeting and there are fewer people. If I’m not running the meeting and there are many people I am strangely quiet. Do not confuse my quiet with lack of engagement.

When I ask you to do something that feels poorly defined you should ask me for both clarification and a call on importance. I might still be brainstorming. These questions can save everyone a lot of time.

I tend to be very reserved but this is not a sign that I am uninterested, it is just who I am. Every once in a while that reserved facade is cracked and I display emotions. That’s when you can tell I’m really excited about a thing (either good or bad).

During meetings in my office I will put my phone on DND and log out of my computer if we won’t be using it. If we will be using my computer I close Outlook and only have the applications open that need to be open. During meetings I will take notes on my phone. I have a series of actions programmed on my iPhone to help keep me on top of things that I need to do. Rest assured, I’m not texting anyone, or checking the next available movie time. When I am done typing a note, I will put the phone down.

Humans stating opinions as facts are a trigger for me.

Humans who gossip are a trigger for me.

I am not writing about you. I’ve been writing a blog (off an on) for a long time and continue to write. While the topics might spring from recent events, the humans involved in the writing are always made up. I am not writing about you. I try to write all the time.

This document is a living breathing thing and likely incomplete. I will update it frequently and would appreciate your feedback.

Basketball Conference Finals OR How the actions of one person can fire up the other team and lead them to win

Last weekend I watched both games 7 of the NBA conference finals. I have no particular affinity for the NBA (I prefer the Madness in March associated with the NCAA) but I figured with 2 game 7s it might be interesting to watch. I was not wrong.

On Sunday night Cleveland was hosted by Boston in a rematch of a game 7 from 2010. One of only 2 game 7s that LeBron James had lost.

This game had all the makings of what you would want a game 7 to be. A young upstart rookie (Tatum) with something to prove. A veteran (James), also with something to prove.

What really stuck our for me, for this game, was what happened at the 6:45 mark in the fourth quarter. Tatum dunked on LeBron (posterized is the term ESPN used) to put the score at 71-69 Cleveland. What happened next though, I think, is why the Cavs won the game.

Tatum proceeded to bump his chest up against the back of LeBron’s shoulder, like a small child might run up to a big kid when he did something amazing to be like, “Look at me … I’m a big kid too!”

LeBron just stood there and looked at Tatum with incredulity. The announcers seemed to enjoy the specticle more than they should have. But LeBron just stood there, the Boston crowd cheering wildly at what their young rookie had just done. To dunk over LeBron, arguably one of the greatest, in a game 7? This is the thing that legends are made of.

But while the crowd and the announcers saw James look like he was a mere mortal … what I saw was the game turning around. The look on James’ face wasn’t one of ‘damn … that kid just dunked on me. It was, “Damn … now I’m going to get mine and I have a punk to show how this game is really played.”

From that point on the Cavs outscored the Celtics 16-10 … not a huge margin, but a margin enough to win. What the score doesn’t show is the look of determination on LeBron’s face as he carried his team to the NBA Finals. Not because he scored all 16 points (he only scored 7) but because he checked his ego at the door and worked to make his team better than the other team. In short, he was the better team mate than Tatum in those last minutes and that’s why the Cavs are in the Finals and the Celtics aren’t.

Tatum’s reaction to dunking on LeBron is understandable. Hell, if I had done something like that when I was his age, I would have pumped my chest up too.

But it the patience and reservedness (that perhaps come with age) that make you a great player or team member. You don’t really want to rile up a great player because that’s the only reason they need to whoop your butt.

Perhaps Tatum will learn this lesson. Perhaps he won’t.

Because you see, acting like a a little kid isn’t just the right of a rookie.

James Harden pulled some immature shenanigans too in his team’s loss to the Warriors. At one point, with the Rockets up 59-53 with 6:13 in the 3rd, Harden when for a layup and was knocked down … accidentally in my opinion.

When a player from the Warriors tried to help him up he just sat there and then flailed his arms until one of his teammates can to help him up. Big man there Harden.

By the end of the 3rd quarter the Rockets were down 76-69. By the end of the game they’ve lost 101-92.

You see, when it comes down to it a great teammate will do what’s best for the team, and not do what’s best for their ego. It doesn’t seem to matter, old or young, rookie or veteran, not having the ability to control your emotions at key points in a game (or in life) can be more costly than you realize.

Sometimes it’s game 7 of the NBA Conference finals, sometimes it’s just a pick up game with some friends at the park, but in either case, being a good teammate requires checking your ego at the door and working to be the best team mate you can be, not being the best player on the court.

To put it another way, being the smartest person in the room doesn’t make you the most influential person in the room, and when it comes down to moving ahead, being influential trumps being smart.

Using Drafts 5 at Work

I have many meetings that I go to in any given day. One of the things that I’d been struggling with was being able to keep track of what I needed to do after a meeting and/or documenting certain types of meetings more effectively.

I have been using a Workflow I created a couple of years ago to get the pertinent details of a meeting into Drafts. I spoke about updating that workflow to incorporate drafts 5 here.

Once I was able to get the information into Drafts 5 a new opportunity arose. I was able to run a Workflow in Drafts!

I decided that getting the information into Drafts was great, but I needed a good way to get it out.

There were two sections in the Draft that I decided I could leverage to help:

  1. Actions
  2. Notes

Broadly speaking there are 3 types of meetings I go to:

  1. Daily Standup aka Scrum
  2. One-on-One with direct reports or my manager
  3. General Meetings

Categorizing the meetings helped me to create Draft Actions that run Workflows for each meeting type.

Scrum

This workflow runs through the Actions of the Draft and adds each one to OmniFocus in a Project called Scrum with a Tag of Work. The due date set for these tasks is noon of the same day. My goal is to have the items that come from Scrum totally processed by noon of that day and for 80% of them I can. Some actions are more involved, but having them in OmniFocus helps me to make sure that they get taken care of.

It also creates a calendar meeting for the next business day with my Scrum template and lets me know which team member will start that next day.

One-on-One

This workflow runs similarly to the Scrum workflow. It adds the Action items to OmniFocus with a due date of noon the same day, tagged with Work and in the One-on-One Project.

Instead of creating a calendar meeting for the next business day at 8:30 it appends items from the Notes section to a Dropbox file. The Dropbox path is predefined, but the name of the file matches the name of the person I met with (luckily I don’t have 2 Tom’s reporting to me).

General Meetings

This is the simplest workflow. It adds all of the items under actions to OmniFocus with a due date of noon, project of Meeting Follow Up and Tag of Work.

After the Actions are run from Drafts the notes are archived in Drafts.

I’m toying with the idea of archiving the notes from these meetings into Dropbox, but I’m not sure that it gets me anything … so I haven’t really looked at it too deeply.

Workflow links

The links for each of the workflows can be found here:

Parse Scrum Notes

Parse One-on-One Notes

Parse Meeting Notes

Setting up Jupyter Notebook on my Linode

A Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text.

Uses include:

  1. data cleaning and transformation
  2. numerical simulation
  3. statistical modeling
  4. data visualization
  5. machine learning
  6. and other stuff

I’ve been interested in how to set up a Jupyter Notebook on my Linode server for a while, but kept running into a roadblock (either mental or technical I’m not really sure).

Then I came across this ‘sweet’ solution to get them set up athttp://blog.lerner.co.il/five-minute-guide-setting-jupyter-notebook-server/

My main issue was what I needed to to do keep the Jupyter Notebook running once I disconnected from command line. The solution above gave me what I needed to solve that problem

nohup jupyter notebook

nohup allows you to disconnect from the terminal but keeps the command running in the background (which is exactly what I wanted).

The next thing I wanted to do was to have the jupyter notebook server run from a directory that wasn’t my home directory.

To do this was way easier than I thought. You just run nohup jupyter notebook from the directory you want to run it from.

The last thing to do was to make sure that the notebook would start up with a server reboot. For that I wrote a shell script

# change to correct directory
cd /home/ryan/jupyter

nohup jupyter notebook &> /home/ryan/output.log

The last command is a slight modification of the line from above. I really wanted the output to get directed to a file that wasn’t in the directory that the Jupyter notebook would be running from. Not any reason (that I know of anyway) … I just didn’t like the nohup.out file in the working directory.

Anyway, I now have a running Jupyter Notebook at http://python.ryancheley.com:88881

  1. I’d like to update this to be running from a port other than 8888 AND I’d like to have it on SSL, but one thing at a time!

A Summary of Dale Carnegie’s “How to Win Friends and Influence People”

This is mostly for me to write down my notes and thoughts about the book “How to Win Friends and Influence People.”

I’ve noted below the summary from the end of each section below (so I don’t forget what they were).

The first three sections seemed to speak to my modern sensibilities the most (keep in mind this book was published in 1936 … the version I read was revised in 1981).

I have the summaries below, for reference, but I wanted to have my own take on each.

Fundamental Techniques in Handling People

This seems to be a long way of saying the “Use the Golden Rule” over and over again. The three points are:

  1. Don’t criticize, condemn or complain
  2. Give honest and sincere appreciation
  3. Arouse in the other person an eager want

Six ways to make people like you

The ‘rules’ presented here are also useful for making small talk at parties (or other gatherings). I find that talking about myself with a total stranger is about the hardest thing I can do. I try to engage with people at parties and have what I hope are interesting questions to ask should I need to. Stuff I tend to avoid:

  • What do you do for a living?
  • Where do you work?
  • Sports
  • Politics

Stuff I try to focus on:

  • How do you know the host / acquaintance we may have in common
  • What’s the most interesting problem you’ve solved or are working to solve in the last week
  • Have you been on a vacation recently? What was your favorite part about it? (With this one I don’t let people off the hook with, ‘being away from work’ … I try to find something that they really found enjoyable and interesting

These talking points are usually a pretty good starting point. Sometimes when I’m introduced to a person and the person introduces them as their job, i.e. This is Sally Jones, she’s a Doctor at the local Hospital, I’ll use that to parlay away from something work focused (what kind of doctor are you) to something more person focused, why did you want to become a doctor? Where did you go to Medical School? Did you know you always wanted to be a doctor? I try to focus on getting to know them better and have them talk about themselves.

The tips from the book support my intuition when meeting new people. They are:

  1. Become genuinely interested in other people
  2. Smile
  3. Remember that a person’s name is to that person the sweetest and most important sound in any language
  4. Be a good listener. Encourage to talk about themselves
  5. Talk in terms of the other person’s interest
  6. Make the other person feel important – and do it sincerely

How to Win People to your way of thinking

This section provided the most useful and helpful information (for me anyway!). It really leads to how to have better influence (than winning friends).

One of the problems I’ve suffered from throughout my life is the need to be right about a thing. This section has concrete tips and examples of how to not be the smartest person in the room, but working on being the most influential person in the room.

My favorite is the first one, which I’ll paraphrase to be “The only way to win an argument is to avoid it!” I’d never thought about trying to avoid arguments, only how to win them once I was in them. The idea reminds me a bit of War Games. At the end, Joshua, the super computer that is trying to figure out how to win a Nuclear War with the USSR, concedes that the only way to win is to not play at all. Just like an argument.

The other piece that really struck me was get the other person to say ‘Yes’. This is kind of sales-y and could be smarmy if used with a subtext of insincerity, but I think that the examples given in the book, and using it in the context of trying to win friends AND influence people it can go a long way.

The tips from this section of the book are:

  1. The only way to get the best of an argument is to avoid it
  2. Show respect for the other person’s opinions. Never say “You’re wrong”
  3. If you are wrong, admit it quickly and emphatically
  4. Begin in a friendly way
  5. Get the other person saying “yes, yes” immediately
  6. Let the other person do a great deal of the talking
  7. Let the other person feel that the idea is his or hers
  8. Try honestly to see things from the other persons perspective
  9. BE sympathetic with the other persons ideas and desires
  10. Appeal to the nobler motives
  11. Dramatize your ideas
  12. throw down a challenge

Be a Leader: How to change people without giving offense or arousing resentment

This section has the best points, but the stories were very contrived. Again, this goes to how to win influence more than winning friends. Some of the items are a bit too 1930s for my taste (numbers 2, 3, and 6 in particular seem overly outdated). But overall, they are good ideas to work towards.

The tips are:

  1. Begin with praise and honest appreciation
  2. Call attention to the person’s mistake indirectly
  3. Talk about your own mistakes before criticizing the other person
  4. Ask questions instead of giving direct orders
  5. Let the other person save face
  6. Praise the slightest improvement and praise every improvement. Be “hearty in your approbation and lavish in your praise”
  7. Give the other person a fine reputation to live up to
  8. Use encouragement. make the fault seem easy to correct
  9. Make the other person gabby about doing the thing you suggest

Overall I’m really glad that I read this book and glad that my CHIME mentor Tim Gibbs recommended it to me.

I’ve been actively working to include these ideas into my work and home life and have found some surprising benefits. It’s also helping to make me a little less stressed out.

If you’re looking for a bit of help in trying to be a better influencer in your organization, or your personal life, this book is well worth the read.