another python specialization completed… now what?

This weekend I completed the University of Michigan’s newest python specialization on Coursera. It was a great followup to Python for Everybody, which was just perfect for new programmers. This newest specialization covered advanced topics like classes and working with large sets of data. My capstone involved learning image processing, facial recognition, and OCR libraries (Pillow, Tesseract, OpenCV, Kraken), and it was definitely hardest course I’ve taken on Coursera so far.

My capstone was the 30th Coursera course I’ve completed. Thinking back on the amount of course work involved in my two bachelor’s degrees (chemistry and forensic science), I think the 30-course-mark for computer science courses via Coursera is comparable to what’s required for a university BS degree.

That said, I’ve decided to suspend my Coursera subscription for now. I will be focusing on personal projects and the job I started at the beginning of the year (not in tech, but I love the work and I especially love my coworkers).

I started on my “learn tech skills to get a tech job” journey almost two years ago, and I’ve learned a hell of a lot. I’ve especially learned about tech’s diversity problem, and experienced those obstacles firsthand.

I’m not sure what’s next for jmf dot codes, but jmf dot person’s arms are tired from constantly trying to swim against the current.

Happy New Year!

I am still looking for a job, and one thing that both amuses and saddens me is that the more time passes without finding the right job, the more experience I’m getting to qualify for the right job. Ironic.

So here’s what’s new:

  • The University of Michigan and Coursera have created another fantastic Python 3 specialization, building on the Python for Everybody specialization. I’ve finished the first three courses and am waiting for the last two to open.
  • Lollipop Cloud Project is going well. We are working through some hardware issues with our board of choice, and deploying more cool stuff like Plume, a federated blogging platform.
  • I don’t do New Years resolutions, but I’ve decided to start talking more openly about being disabled, and specifically about being a disabled job seeker.
  • I’ve also decided to start posting links (perhaps weekly) that I find interesting. I don’t care for Reddit (too much bigotry and abuse), and I’m not so active on social media, but I like to save links I find interesting.

Coursera, Hacktoberfest, and site updates

After putting it on hold for awhile because I was having too much fun with Lollipop (and still am!), I finally finished the entire Google IT Support Professional Certificate, a 5-course specialization through Coursera.

I’ve also contributed a little to Debian and mUzima, after learning about (and applying to) Outreachy, which seeks to give paid internships to marginalized people looking to work with free and open source projects. It would be pretty exciting to be awarded an internship, but I met tons of great fellow applicants through this process, so the competition is pretty stiff!

Now that I’ve been getting more comfortable with Git, I was able to complete Hacktoberfest this year. If you’re new to coding and not sure if you can or should participate, here’s Quincy Larson telling you why you should and how you can get your own Hacktoberfest tshirt.

What have I learned from all of the above? I really love documentation and improving user experiences. I still love Python and I want to keep up with that, but my job hunting is shifting towards documentation and roles where coding overlaps with documentation and support.

Site housekeeping: Originally, I set up jmf.codes with WordPress because it’s what I know, and I had fun hacking and tweaking a theme I’ve used elsewhere for years (GeneratePress). But it’s far more powerful than I need, and it’s pretty resource-intensive for a few pages of mostly text. I’d like to load faster and with a smaller resource footprint, so I’ll be switching over to something else soon. (Probably Hugo, but I keep making versions I love and can’t settle on just one!) I’ll keep you posted.

My lovely friends reading this through an RSS reader should keep an eye out for an updated link once I’ve moved everything over.

short update: new course, more speed tests, and a move

Realizing I could use a little more formal education in the area of systems administration, I am about 95% finished with Coursera and Google’s System Administration and IT Infrastructure Services course. It’s been a good overview, but definitely only covers the fundamentals.

I’ve been running some more speed tests on my Lollipop setup, comparing phone tethering to a cellular modem, as well as the connection options (onboard wifi vs. separate USB dongle). Results to be published in the near future. Here’s a short Lollipop Cloud update, and for friends following along with my journey, help is always welcome in the Lollipop department!

I will be moving soon– not long distance, but to a much smaller space, so things have been a bit hectic around here… and will likely continue to be hectic for a few weeks.

Still, I vow to update this more, despite the fact that my poor old computer is plagued with this (admittedly kind of funny) MacBook Pro keyboard glitch.

I’ve been learning WordPress!

I’ve actually been using WordPress for years, but I didn’t do much tinkering with it. This site is a slightly-tweaked WordPress template I’ve loved for years. (GeneratePress, and the paid version is worth every penny.)

But it’s so popular and powerful, I wanted to dig deeper into it. So I converted The Whisker Shop over to WP and did a lot of tweaking and tinkering… I’m still not thrilled with the catalogue/gallery page, because I want to be able to include a link to each item’s page from the gallery images, and it looks like a hot mess with everything I’ve tried so far. It looks like I’m not the first person to have this question in the plug-in’s forum, so maybe there’s a workaround somewhere.

I’d originally installed WP in a blog/ directory just for blog purposes, but I decided to see if I could migrate a WP version from a directory (blog/) to the main directory (thewhiskershop.com) and I did! Without breaking anything! And the credit goes to Ask WP Girl.

Some days you have to celebrate the small victories. 🙂

#100DaysofCode – towing capacity calculator

A quick proof-of-concept for a web app I’d like to make next. (code below, or code on Github.)


#!/usr/bin/env python
''' Towing capacity calculator, takes user inputs for vehicle and trailer data, then determines if the vehicle is over payload or under gross combined vehicle weight rating. Proof of concept before turning this into a web app.

Disclaimer: If you use this, double-check using your own math, too. This has not gone through a formal validation process, and I don't want my code to cause any accidents. -jmf '''

# Check if over/under payload
def payloadcheck(availablepayload):
if availablepayload >= 0:
print("Available payload: {}".format(availablepayload))
return True
else:
print("Exceeded Payload! Over payload capacity by {}".format(availablepayload))
return False

# check if over/under GCVWR
def gcvwcheck(towcapacity, newgcvw):
if newgcvw >= towcapacity:
print("Acceptable! With combined weight of {}".format(newgcvw))
print("You are under your GCVWR by {}".format(towcapacity - newgcvw))
return True
else:
print("Exceeded GCVWR! Over capacity by {}".format(newgcvw - towcapacity))
return False

def getdata():
vehicle = input("What vehicle will be doing the towing? ")

# dry weight, or curb weight = unloaded vehicle weight, WITHOUT driver, passengers, or cargo
truckdrywt = int(input("Curb weight: "))

# gvwr = maximum allowed weight of a fully loaded vehicle (dry wt + driver + passengers + cargo)
gvwr = int(input("Gross Vehicle Weight Rating (GVWR): "))

# gcvw = curb weight + allowable payload + passenger weight + trailer weight
gcvwr = int(input("Gross Combined Vehicle Weight Rating (GCVWR): "))

# payload = maximum allowed weight of passengers + cargo + hitch
payload = int(input("Payload: "))

# tow capacity = defined by manufacturer, listed in owners manual or a manufacturer's tow guide
towcapacity = int(input("Tow capacity: "))

# passenger weight = driver + all human and non-human riders
passengerwt = int(input("Combined driver and passenger weight: "))

# cargo = everything in the vehicle that isn't sentient
cargo = int(input("Cargo weight inside the vehicle: "))

trailer = input("What trailer are you towing? ")

# trailer dry weight, or curb weight = unloaded weight, can be determined by a sticker on the trailer or by taking an unloaded trailer to a truck scale. Published unloaded weights may or may not include water/waste/propane
trailerdrywt = int(input("Trailer curb weight: "))

# trailer gcvw = dry weight + everything inside it
trailergvwr = int(input("Trailer Gross Vehicle Weight Rating (GVWR): "))

# hitch weight = defined by manufacturer, listed in manual or sticker on the trailer
hitchwt = int(input("Trailer hitch weight: "))

availablepayload = payload - (passengerwt + cargo + hitchwt)
newgvw = truckdrywt + hitchwt + passengerwt + cargo
newgcvw = trailergvwr - hitchwt + newgvw

print("\nWith the {} towing the {}: ".format(vehicle, trailer))

payloadcheck(availablepayload)
gcvwcheck(towcapacity, newgcvw)

def main():
print("==================================================")
print("Towing calculator.")
print("It does not matter if you use pounds or kilograms, just be consistent. \n")

getdata()

print("\nDon't forget to check the capacity of your tires and gross axle weight ratings (GAWR).")
print("==================================================")

main()

''' inspiration for this came from Marc Leach's Excel worksheet here: http://www.keepyourdaydream.com/payload/ '''

#100DaysofCode Days 19 through 22

I have been working so much on The Whisker Shop!! I’m so excited. I’m also still tweaking it, so I’m posting this as a draft, but I’m still real excited about it. My spouse has been talking about selling cat furniture for years (in fact, you should check out the about page to read about how he came to make cat furniture), and here we are finally making it happen.

This is also my capstone for the Web Design for Everybody specialization, and I believe I could submit it at this point, but I really want to turn in a completed and polished project. I’m using my PHP knowledge from the Web Applications specialization to incorporate it into my design, and it’s cool to finally tie everything together.

And I definitely still prefer back end work 🙂

#100DaysofCode Day 18

I have been under the weather… I don’t talk about my life with disabilities here, and I might someday (this was created for people in my circles to follow my journey after all), but for now I’ll just cryptically say that I’ve just been a little unwell, and I’m proud to say I’ve kept up with regular coding, but not regular blogging.

At this point, I feel like the days of my #100DaysofCode are more of a guide rather than a true count. I’m okay with this. I hope you’re not here for a linear progression. 😉

Since the last post…

my Local Weather App is finished… I’m comfortable listing it on my Free Code Camp profile for now, but I would like to tweak it and make it my own startpage to remind me of how far I’ve come since I started coding. ♥

I am now working on The Whisker Shop (link is a placeholder as of this writing, but this is the current working draft), my spouse’s cat furniture business he’s been talking about starting for years. We’re working together as a crossover Coursera project, as he’s currently in the project management specialization. It’s been a lot of fun so far.

I’m also working on a Wikipedia Machine. I absolutely love working with APIs. They’re really frustrating and infuriating sometimes, but when they work, it’s so satisfying that it makes it all worthwhile. Practice, practice, practice.