Lollipops and Hugo

I appreciated this more formal recognition of my Lollipop contributions to date. Working with Kemonine has been a real “treat” (sorry not sorry), and we are making so much progress! I’ve got myself a little Orange Pi running as a router and data-cap-saver thanks to Pi-Hole.

Note (and an opinion) about data caps and advertisements: unlimited data plans are great, but they’re not quite as unlimited as they appear on the surface: see this post about unlimited data from the experts at the Mobile Internet Resource Center. Many sites and individuals rely on ads for revenue, but ads can be hogs, and are exceptionally annoying if not downright harmful: such as when they trigger migraines, trauma flashbacks, or other health problems. It might seem extreme to sent up an entire device specifically to avoid ads, but for today’s internet, I think of it as an accessibility tool. And I hope that someday we won’t need it, because advertisers will shift towards more ethical practices.

In other interesting news, I learned how to deploy a Hugo site: Gluten-Free RV. Hugo’s really nice. (jmf.codes may be switching over someday in the near future…)

A long overdue post and a new project!

Things are busy! This update is long overdue.

Lollipop Cloud logo is an orange lollipop with a blue wrapper in the background.

I am excited to be a contributor and team member with the Lollipop Cloud Project. The Lollipop Cloud is a small self-hosted cloud for nomads, anyone with limited internet access, and anyone who’d like to avoid having their personal data harvested or controlled by corporate interests.

Our goal is to make it as accessible as possible: ultimately, anyone who can use a personal computer should be able to set up one of these little gadgets and customize it to meet their needs. We are lowering the bar in ways few other projects have imagined. This project means a lot to me ethically and professionally, and I’m so excited to be part of it.

Read a full summary of the project here.

Lollipop’s documentation lives on its own self-hosted Gitea instance, and I’ve been busy. This is where I’ve been spending most of my time lately.

P.S. I still hate git. But I’m getting better at it.

a quick update: wordpress, plugins, css

  • The Whisker Shop has grown a bit… and then I realized the Responsive Lightbox plugin I’m using for the catalogue has stripped all my alt-text from the thumbnails. I think of “responsive” as more than just screen size: it’s about how the screens are being used. So that was disappointing.
  • So I’m working on getting my favorite Lightbox, from Lokesh Dhakar running manually. It’s been tricky, but a test page is semi-functional, although it needs work. (The images don’t cycle through, even when tied to a common gallery name.)
  • CanITowThis.com got a mini-makeover to simplify some text styling and to get fancy with a wide-screen view, where the definitions are side-by-side to the form. Thank you to everyone for the feedback about not seeing the definitions when they’re so far down on the page below the form.

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

It’s been a bit of a rough month. I’ve been tinkering with this Mastodon moderation bot— and as a bonus, it’s in Python, which I love and want to do more. I’m currently working locally, but when I have something nice to contribute I’ll be setting up a gitlab account.

My family recently had to say goodbye to the greatest cat I could’ve hoped for, my kitty BFF for the last 15 years. She was always so sweet when she’d sit with me while I was working: she was always careful NOT to step on the keyboard, and I’ve never known another cat who does that. She also always remembered which parts of me hurt too much to stand or lay on, and would be near me without hurting me. She was such an angel. I’ll miss you, Ginger.
An orange cat laying on a pillow, her face and front paw sticking out from under a blanket.

#100DaysofCode – PHP edition

I switched The Whisker Shop over to use some PHP. Originally (and part of my WD4E capstone), it was HTML, CSS, and a little JS, but I wanted to keep the JS to a minimum, so it still involved a lot of repetition, copying and pasting the same code between pages, which was just annoying and antiquated.

So I put down some PHP, created a whole separate header file for the nav bar, and updated everything. I also removed the JS Lightbox from the gallery, because a Lightbox for 6 pictures felt a little silly. The site loads a lot faster now, too, although I still plan on making the photos load faster in the future, and finding a more attractive way to display that gallery page. Front-end isn’t my forte but enough people have done so many beautiful things before me, that I’m confident I can make this even prettier.

In the shorter term, I plan on updating the nav bar with a pure-CSS drop-down menu.