Things that ‘shouldn’t’ work

Virtual learning is a challenge for all this year. My wife is a teacher and is struggling in that boat. She encountered a scenario which was very frustrating for her and reminded me of a very important and often over looked point of problem solving. 

She was on the phone with administrators and technical support for her virtual learning platform for several hours, because she couldn’t login. They tried password resets, support staff tried to reproduce the error on a different computer and couldn’t (they were successful), but my wife was not successful on a different computer and others were successful on her computer. All to no avail. After trying many things, in the end, the third tier technical support professional tried to give her a new username. He said, “this shouldn’t work” but let’s just try it. Lo and behold, it worked. A spelling error in the database for her email (as a username) had led to her not being able to login, because she had been using her email spelled correctly. The company and others trying to help, had been copying her misspelled username from the database and it was working for them. Frustrating, to say the least, that many had not double checked the spelling of “schoos” instead of “schools” in the email. 

The idea that I want to promote here is not the Sherlock Holmes quote “When you have eliminated the impossible, whatever remains, however improbable, must be the truth.” This quote shows up in at least six books of Doyle’s. I am also not promoting the idea of trying to break the things that you have made, in order to test them. Although, this is also a very good idea. I am also not saying do nothing but question what has already been well established. If we do that, we never progress. 

No, rather I want to promote the idea of perpetual self-reproach and self-questioning. In order to be a good problem solver, one should have a practice of trying things that shouldn’t work. One should try the things that you know in advance should fail, because HOW they fail is so very important. 

This is fundamental to nuclear physics, where we learn so much about nature from watching things decay and from watching things explode and collide and reveal constituent components. It is vital in life, to ask myself, “What are my preconceived notions?” or “Have I been rude or prejudiced today?” or “Is there anything that I can do today to be more considerate of the people around me?” 

I find my faith life helps me here. I have a spiritual practice of knowing I am redeemed in my life. That I am capable of doing some good, because there is one who is good that lives for me and in me. I know that “all have sinned”, but that I am “free from condemnation” to use some quotes from Romans. So, I can approach myself continually, loving being wrong. I can confidently ask myself, “Am I evil?”, I can answer, “Yeah, probably.” Then I can take a deep breath, recognize the very spirit of God in every breath and heart beat, and I can be better today than I was yesterday without being crippled by shame.

I can learn. I learned today that it may not unfortunate that style often wins over substance (this thanks to MC in a learning community that I’m a part of called Penny University (pennyuniversity.org)). Maybe style is simply a vital part of substance. 

The point is this, I shouldn’t wait to prove all the other things impossible before I consider the improbable. I should build a life where I question myself and my most cherished ideas. I’m convinced that taking old and well practiced ideas and converting them to new and better ones is the hardest thing anyone can ever do. When it happens though, it is a revolution and new ideas have the power to solve all kinds of problems. 

Be well, Stay safe

N

The wonder of invisible things

Today I will write about one of many aspects of learning and problem solving in general that I’m very passionate about. 

Invisible things make the world go round. I don’t just mean that the basic building blocks of our universe are invisible. As a physicist, you can assume I also mean that. But there is a kind of aspect to problem solving that invokes something that isn’t just unseen by the naked eye, it is truly fiction. I’m talking about the cases like dropping a perpendicular line in geometry. In any given geometry problem, there are an infinite number of lines you can draw and most of them are decidedly unhelpful. However, a particular choice ( usually a perpendicular line) that comes with a constraint unlock the next step and allows you to say something new about the system. An iterative process of this kind, bootstraps knowledge together in such a way as to unlock problem solving. This is wondrous to me. 

It doesn’t stop there. Physics is rife with such problems to solve. The brachistochrone problem was one of many like this for me in graduate school. Problem solving in this system was unlocked by a particular set of co-ordinate choice. For other problems the key was the ‘right’ choice of basis in a quantum mechanics course. The ‘right’ one was of course revealed by the choice making the problem tractable at all. The common frustration between myself and my peers was ‘how do you know in advance what to choose?’ The response was a disappointing, ‘you can’t always know.’ Progress is made by an arbitrary choice of something abstract, something fictional or something invisible. 

More recently, I found this with a counting problem. I wanted to index the difference of the elements of a vector with itself so position 0 minus position (1,2,3, … ) then the difference of position 1 with position (2,3, … ) pretty easy to set up two loops over these indices. In python:

for i in range(0,maxi-1):
    for j in range(i+1,maxi):

With maxi being the total length of the vector of interest. This makes something like traversing an upper left triangular matrix. Well then I wanted a counter in this loop that goes (0,1,2,3,4….). It didn’t take too long for me to realize triangular numbers (n(n+1)/2) and indexing were involved but the specific form was a little illusive.

I started from what I could see (the elements of the vector) and I started counting from the bottom up of a smaller upper left triangular table. I reasoned that if I could count 1,2,3 from the bottom up, simple subtraction for the max value counts me down. I used a good problem solving step as well, I reduced my issue to something smaller but equivalent and worked on a whiteboard instead of the larger vectors I was interested in.  I got to the end, redid it because I made some mistakes and back substituted some new variables I had created and I realized that the final form indicated a much simpler derivation than all the steps I had taken to get there.

Had I, from the beginning, imagined a square matrix with indices i,j (row,column) and imagined subtracting off the ends of the lines I could have almost just written down j+i*maxi - 1/2(i+1)(i+2). Where the term, j+i*maxi counts through a square and 1/2(i+1)(i+2) is a triangular number index but for the bottom-right triangular array that is then subtracted off. But in truth, that part doesn’t exist. It is invisible. It is fictional and it absolutely unlocks the solution to the problem at hand.

It is incredible to me that I have made a career out of solving problems by looking at invisible things. 

Be well, stay safe

N

Next: Trying solutions that “shouldn’t” work

One day build – Scheduler

If have to do anything more than twice, I’m likely to make a script to help. 

Like so many others we are keeping to ourselves these days and it was helpful to make a scheduler pop-up for telling me when to move my child onto the next task during the day. Enter my super easy one day build. 

The relevant library was notify2 in python.  It tells my OS to pop-up a notification and send me a message.

import notify2
from playsound import playsound as ps
import schedule
import time

Then I set the important variables and initialize the relevant objects. These are a Notification object and a sound file name string. 

notify2.init("MyName")
n = notify2.Notification(None)
n.set_urgency(notify2.URGENCY_CRITICAL)
n.set_timeout(5000)
song_file = "gw151226.mp3" 

It plays a gravitational wave chirp. Quite nice. Then, I define one of several ‘jobs’.

def job1():
    n.update("message!")
    n.show()
    ps(song_file)

where ps is playsound.playsound() from the import line. It is then invoked with some variant of the ‘schedule’ program. 

schedule.every().day.at("08:30").do(job1)

And that’s all there is. 

Be well, stay safe, wear a mask. 

N