Categories
Career Programming What I’m Up To

What you’ll learn in my online course: Using Python to detect startup founder megalomania

Poster for the Apple TV+ series “WeCrashed”.
WeCrashed was a good podcast and a great TV miniseries.

One of the more ridiculous aspects of the S-1 Form that WeWork filed during their first attempt at an IPO was the fact that the name “Adam” (WeWork’s founder / personality behind the cult Adam Neumann) gets mentioned in it a ludicrous number of times. It’s not unusual for an S-1 Form to mention the founder’s name a couple dozen times, but nowhere near as many times as WeWork’s original S-1 did.

You could go through WeWork’s S-1 and count the number of times “Adam” appears in its text. You could load WeWork’s S-1 into a text editor and have it give you that number. But what if you had to do that for a dozen, or a hundred, or a thousand companies and create a list of the number of times each company’s founder was mentioned in its S-1? You will write a Python script to do just that in my upcoming course.

I’ll guide you through the process of writing that script and running it on not just the text of WeWork’s S-1, but also for other hot tech companies, such as Zoom, Uber, Lyft, and Slack.

It’s just one of the practical things I’ll cover in the Learn Python online course being offered by Computer Coach. Here are the quick details:

  • What: An introductory Python course!
  • Where: Online, via Zoom.
  • When: Monday and Wednesday evenings, from 6 p.m. to 10 p.m., starting Wednesday, September 7th.
  • How to enroll or find out more: Contact Computer Coach’s Kasandra Perez at kasandra@computercoach.com or (813)-254-6459 to find out more about the course or register.
Banner: Computer Coach - Learn Python - Live, online, instructor-led - Starting September 7th 2022

For more details, see this post: I’m teaching another 5-week / 10-evening Python course starting September 7th!

Categories
Conferences What I’m Up To

I’ll be at ng-conf 2022 this week!

ng-conf logo.
Auth0 logo

From Wednesday, August 31 through Friday, September 2, I’m going to be tending the Auth0 booth at ng-conf 2022 in Salt Lake City’s Grand America Hotel, the annual conference dedicated to all things Angular.

I’ll be there, providing yeoman service to two coworkers who’ll be speaking at the event…

Photo: Alisa Duncan.
Alisa Duncan, Senior Developer Advocate at Okta.

First, there’s Alisa Duncan, Senior Developer Advocate at Okta (Auth0’s parent company), who’ll be presenting There’s Safety in Angular, which is scheduled for Wednesday, August 31 at 10:32 a.m. MDT (that’s not a typo, it’s happening at ten thirty-two). Here’s the brief on her talk:

When you use Angular, you know you’ve got a best-in-class framework with all the bells and whistles at your fingertips. But did you know Angular is also a cozy blanket that keeps you safe and secure? Businesses with a security breach in 2021 average over $8 million in remediation, and it can permanently damage their brand. The 2021 OWASP Top 10 list includes broken access control and web injection exploits in their top 3 security risks. This talk will cover web vulnerabilities, risks posed by exposing sensitive information, and how Angular has your back so you can rest easy.

Photo: Sam Julien.
Sam Julien, Director of Developer Relations at Auth0.

Then, there’s my teammate Sam Julien, Director of Developer Relations at Auth0. He’ll be presenting with Cloudinary’s VP of Developer Experience Kim Maida

Photo: Kim Maida.
Kim Maida, VP of Developer Experience at Cloudinary.

…and their talk is titled RXWut? and scheduled for Wednesday, August 31 at 2:36 p.m. MDT (again, not a typo; it’s happening at two thirty-six). Here’s the abstract:

You’re working on your Angular application late one night and need to handle some data. That means using RxJS, so you think, “Great! People love RxJS and there are tons of docs. This will be easy!” You remember that someone told you “everything is a stream” and “it’s just an array over time” but in practice, those insights haven’t been as helpful as you’d hoped. You also need to manipulate data in the stream, which means: operators! You head to the docs and you’re looking for just the right operator… Distinct until what? What’s a forkJoin? These examples all have to do with multiplying arrays of numbers, but your data isn’t numerical. Okay, what about these weird diagrams? Wait, what the heck do marbles have to do with programming?!

RxJS is fascinating and powerful, but the learning curve for reactive programming can be challenging (to say the least). In this talk, we’ll take a light-hearted approach to demystifying reactive programming concepts, confusing operator names, and much more. Whether you’re already a reactive wizard or still a fledgling Rx apprentice, you’ll laugh (and maybe cry) while learning some new magic.


If you’re attending ng-conf 2022, drop by the Auth0 booth! I’ll be there, and I’ll be pretty easy to spot…

Photo: Joey deVilla playing accordion at the Auth0 booth.
Yours truly, that rare specimen of accordion-playing developer advocate.
Categories
Career Programming What I’m Up To

I’m teaching another 5-week / 10-evening Python course starting September 7th!

If you’re getting this feeling…

…and you’d rather have this feeling…

Creative Commons image by Nick Youngson — CC BY-SA 3.0 Pix4free.
Click here to see the source.

…then the course I’m teaching might help:

a close up of text and logo over a white background
Graohic: Computer Coach Training Center logo

I’ve been programming in Python since 1999, and I’ll be teaching Computer Coach’s upcoming 10-week online Learning Python course!

The “TL;DR:”

  • What: An introductory Python course!
  • Where: Online, via Zoom.
  • When: Monday and Wednesday evenings, from 6 p.m. to 10 p.m., starting Wednesday, September 7th.
  • How to enroll or find out more: Contact Computer Coach’s Kasandra Perez at kasandra@computercoach.com or (813)-254-6459 to find out more about the course or register.

What will you get out of this course?

The biggest things that you’ll get out of this course are the tools to succeed in a tech career, namely:

  • An introduction to the most-used and most useful parts of the Python programming language,
  • a solid basis in programming principles,
  • and a bag of tricks that you can use in your tech career.

The course will use one of the best books on Python out there: Automate the Boring Stuff with Python by Al Sweigart (whom I had the pleasure of meeting in person earlier this year at PyCon):

…but we won’t just stick to the book. We’ll look at all sorts of programming examples and tricks, based on your suggestions or needs. These include (and aren’t limited to):

  • CoverTron: My generator for cover letters for job applications. I actually used it in my last job search!
  • Tampa Bay Tech Events Transmogrifier: Every week, I put together a list of tech events for Tampa Bay, culled from Eventbrite and Meetup. It would take me hours to do it by hand, but it’s so much quicker with the automated help of a couple of Python scripts.
  • Find out when and where a digital photo was taken: When you take a picture with your phone or a present-day digital camera, that picture has EXIF data embedded in it, with the date, time, and location where the photo was taken. I’ll show you how to extract that info!
  • Editing photos: If you were assigned the task of shrinking a set of 100 photos by 25% (or any other similar basic photo editing task), you could do it manually, or you could make Python do it.
  • Creating interactive documents with Jupyter Notebook: It’s more than just a Python tool used by data scientists, Nobel Prize winners, and Netflix, but a useful programming environment and operations platform for everyday tasks!
  • Writing web applications with Flask: Just a Python makes programming much easier, the Python-powered Flask framework makes programming web applications much easier.
  • Passing interview coding tests: Learn how to deal with the most dreaded part of the interview for a programming job, and why Python is a key part of my coding interview strategy.
  • Using databases: Using databases is a key part of programming, and luckily, Python comes with a built-in database!
  • Data science: This is a giant topic and could easily take up the time to do this course three times, but I’d be happy to go over the basics.
  • Interactive storytelling and games: Python’s quite good at this, and I can walk you through the PyGame framework and Ren’Py interactive story system.
  • Mobile app development: Yes, there are ways to do mobile app development in Python.

What happens in the course?

Photo: Woman’s hands typing on Mac laptop.

This is not a passive course! This isn’t the kind of course where the instructor lectures over slides while you take notes (or pretend to take notes while surfing the web or checking your social media feeds). In this course, you’ll follow along as I write code on my screen. You’ll actively take part in the learning process, entering code, experimenting, making mistakes, correcting those mistakes, and producing working applications. You will learn by doing. At the end of each session, you’ll have a collection of little Python programs that you wrote, and which you can use as the basis for your own work.

The course will start at the most basic level by walking you through the process of downloading and installing the necessary tools to start Python programming. From there, you’ll learn the building blocks of the Python programming language:

  • Control structures that determine what your programs do,
  • Data structures to store the information that your programs act on,
  • Functions and objects to organize your code, and
  • Using libraries as building blocks for your applications.

Better still, you’ll learn how to think like a programmer. You’ll learn how to look at a goal and learn how you could write a program to meet it, and how that program could be improved or enhanced. You’ll learn skills that will serve you well as you take up other programming languages, and even learn a little bit about the inner workings of computers, operating systems, and the internet.

What will you need for the course?

Nothing fancy:

How do you sign up for the course or find out more?

Once again, you’ll want to contact Computer Coach’s Kasandra Perez at Contact Kasandra Perez at kasandra@computercoach.com or (813)-254-6459 to find out more about the course or register.

Categories
What I’m Up To

What I’m up to…

…well, at least as far as work goes, it’s all captured in this screenshot as I figure out what I have to do this week:

Screenshot from my work computer, showing windows for Xcode, Android Studio, two Jupyter Notebook windows, and a Canva window.
Tap to view at full size.

The top row contains windows for Xcode and Android Studio, on which I’m putting together the demo apps for a couple of mobile app authentication tutorials that I’m writing for the Auth0 Developer Blog.

The bottom row has two windows for the Jupyter Notebooks that I use to generate the weekly Tampa Bay Tech Events list, and one Canva window.

Categories
Current Events Florida Programming Tampa Bay What I’m Up To

StartupBus Florida 2022 was a success!

The riders of StartupBus Florida 2022. From left to right: Cary, Evan, Justin, Josh, VJ, Julie, Marley, Ray, Charlotte, Joey, Mandy, Sasha, and Chevy.
StartupBus Florida 2022!
Tap to view at full size.

This article is a work in progress — I’m making it available to readers as I write it!

On Wednesday July 27, 2022, 13 people boarded a bus at The Sail on the Riverwalk in downtown Tampa bound for Austin, Texas to participate in a contest unlike any other: StartupBus 2022. I was one of those 13 people, and this is what happened on (and off) that bus.

StartupBus is the Mother of All Hackathons. The first part of the event is a three-day bus ride where buspreneurs (contestants), with help from conductors (coaches), conceive a technology startup, its software, and marketing and business plans. There are a number of buses that start in different places — in 2022, the buses left from California, Mexico City, Cincinnati, and Tampa — and they spend three days making their toward Austin, where their buspreneurs present their startups at the qualifying, semi-final, and final rounds of judging. It’s a road trip, entrepreneurship crash course, competition, and adventure all in one.

Day 1: On the bus from Tampa to Gainesville and Tallahassee

Boarding the bus

At 6:00 a.m., I arrived at The Sail, the designated pickup loacation. It’s a pavilion located downtown, on the Tampa Riverwalk, just a stone’s throw away from the Tampa Convention Center. The buspreneurs were told that the bus would depart at 7, so I expected to be the first one there. Instead, Mandy was there, and so were a handful of buspreneurs. This was a good sign.

The bus should’ve been there too, but it wasn’t. None of our bus contacts were responding to messages or Mandy’s phone calls.

“Let’s just chalk this up to Murphy’s Law and declare 6:45 as ‘panic o’clock,’” I suggested.

Fortunately, she made contact with the bus people at around panic o’clock, and they told us that they were on their way. That gave us a little more time to chat and get to know each other a little more:

Wednesday, 7:16 a.m.: VJ, Ray, Marley, Chevy, and Justin. In the background: Cary.
Tap to view at full size.

The slight delay gave us a chance to load up on coffee and a little breakfast food. We started boarding the bus soon afterward:

Wednesday, 7:22 a.m. The buspreneurs get set to board the bus.
Tap to view at full size.

Here’s a shot showing Josh’s photobombing prowess:

Wednesday, 7:22 a.m. Me in the foreground, VJ and Josh in the background.
Tap to view at full size.

…and shortly after 7:30, our bus started making its way toward the highway.

The secret route

While the buspreneurs knew that the bus would start in Tampa on Wednesday morning and arrive in Austin sometime on Friday evening, they didn’t know what route we’d take or what stops we’d make.

The simplest route from Tampa to Austin takes I-75 north to I-10, and then takes I-10 west, a route 1,200 miles (a little over 1900 km) long. If you were to drive that distance at a consistent 70 miles an hour with no stops at all, you could make the trip in a little over 17 hours. Add stops for activities (more about these later), meals, sleep (at hotels or Airbnbs — we weren’t going to sleep on the bus), and bio breaks, and the trip easily expands to fill three days. At least one of the buspreneurs did some map consulting and guessed our route and where we might end up stopping.

Here’s a map of the route we took:

The route we took from Tampa to Austin.
Tap to view at full size.

Opening ceremonies

Shortly after everyone had settled in on the bus, it was time to get started with the opening ceremonies. The buspreneurs were already familiar with us conductors, so we got on with the task of having the mentors say something to inspire them. First Cary…

Wednesday, 7:42 a.m. Cary addresses the troops.
Tap to view at full size.

…then Josh:

Wednesday, 7:43 a.m.
Tap to view at full size.
Wednesday, 7:43 a.m. The troops watch the opening address.
Tap to view at full size.

With the introductory speeches out of the way, the next step was to have the buspreneurs introduce themselves and propose a startup idea.

Wednesday, 7:47 a.m. Chevy proposes “Tinder for puppy playdates.”
Tap to view at full size.
Wednesday, 7:49 a.m. VJ proposes an electronic replacement for a first responder standard operating procedure manual.
Tap to view at full size.

The buspreneurs got to refine their startup pitches in an online meetup with one of Tampa Bay’s Toastmasters groups, who listened and provided valuable feedback.

After the meetup, the buspreneurs started talking amongst themselves to figure out which startups they should create. Remember, they had only three days to create them!

Wednesday, 9:06 a.m.
Tap to view at full size.
Wednesday, 9:47 a.m.
Tap to view at full size.
Wednesday, 9:47 a.m.
Tap to view at full size.

In the meantime, I got into an extensive conversation with Cary about his life and work, and we discovered that we had both lived in Toronto. Small world!

University of Florida Innovation Hub

At about 10:00 a.m., we arrived in Gainesville, where we paid a visit to the University of Florida’s business incubator, UF Innovate | Accelerate @ The Hub.

Wednesday, 10:18 a.m.
Tap to view at full size.

Wednesday, 10:18 a.m.
Tap to view at full size.
Wednesday, 10:21 a.m.
Tap to view at full size.
Wednesday, 10:21 a.m.
Tap to view at full size.
Wednesday, 10:31 a.m.
Tap to view at full size.
Wednesday, 10:31 a.m.
Tap to view at full size.
Wednesday, 10:35 a.m.
Tap to view at full size.
Wednesday, 10:43 a.m.
Tap to view at full size.
Wednesday, 10:43 a.m.
Tap to view at full size.
Wednesday, 11:41 a.m.
Tap to view at full size.
Wednesday, 11:57 a.m.
Tap to view at full size.

Back on the bus

Wednesday, 12:06 p.m.
Wednesday, 12:14 p.m.
Wednesday, 12:23 p.m.
Wednesday, 2:07 p.m.
Wednesday, 3:20 p.m.
Wednesday, 3:46 p.m.
Wednesday, 3:59 p.m.
Wednesday, 4:17 p.m.

Domi Station, Tallahassee

Day 2: New Orleans

The wiper hack

Stayges

Next Responder

Afterparty on the roof

A night out in New Orleans

Day 3: Austin

Making our way to Texas

Buc-ee’s!

Home stretch

Arrival at the “TikTok Mansion”

Day 4: Qualifying round

Breakfast and getting ready

Capital Factory and the qualifying rounds

Brent Britton and CoreX

Day 2: Semifinals and finals

Categories
Career Current Events What I’m Up To

StartupBus looks good on a resume

Here’s an excerpt from the current version of my resume (yes, my resume’s under version control). Note the highlighted entry:

The entry is for Hyve, the startup and application that my StartupBus team built when I rode in 2019. Hyve was a service that let you create “burner” email addresses that relayed email to and from your real email address, allowing you to safely subscribe to services and avoid getting marketing spam or safely communicate with people whom you might not completely trust.

We did all right in the end, landing in the runner-up slot:

Team Hyve. From left to right:
Tracy Ingram, David Castañeda, me, Rina Bane, Justin Linn.

…but the real wins came a little bit afterward when I was interviewing for developer and developer relations jobs a couple of weeks afterward. StartupBus makes for a good story, and in a job interview, it’s the story that “sells” you.

After all, StartupBus is a hackathon where you’re challenged to come up with:

  • A startup business
  • and an application that supports that business
  • on a bus
  • in three days.

This intrigued the people who interviewed me, which led me to talk about the decisions that shaped the business, which in turn shaped the software. I detailed the challenges of writing business plans and software on a bus, a rumbling, rolling office space with spotty internet access, unreliable power, and the occasional engine breakdown. I also talked about dealing with the compressed timeframe and a few of the tricks we used to get around the limited time, which included getting help from our professional network, taking advantage of crowdsourcing services, and using our media contacts. My StartupBus story played a key part in convincing prospective employers that they wanted to hire me.

StartupBus Florida will depart Tampa, Florida on Wednesday, July 27 and make a 3-day trip with interesting stops and challenges along the way. It will arrive in Austin, Texas on the evening of Friday, July 29, where it will meet with teams from 6 other buses:

On Saturday, July 30, all the teams will assemble at a venue in Austin for the semifinals. Every team will pitch in front of a set of semifinals judges. By the end of the day, a handful of finalists will emerge (Hyve was one of six finalists in 2019).

Those finalists will then go on to the finals, which will take place on Sunday, July 31. They’ll pitch again (and if they’re smart, they’ll have spent the night before reworking their pitch and application) in front of the finals judges, who will select the winner and runners-up.

If you participate in StartupBus, you will come out of it a different person. You will pitch your startup at least a dozen times (and yes, everyone pitches — not just the marketing people, but the creatives and developers, too). You will work on product design. You will work on marketing. You will work on code. And you’ll do it all under far-from-ideal circumstances. StartupBus is a crash course in guerrilla entrepreneurship, and it’s an experience that will serve you well — especially during these economically upside-down times.

And you’d better believe that you’ll have stories to tell, and they’ll help you stand apart from the crowd.

Want to ride StartupBus later this month?

You’ll need to apply on the StartupBus site, and you’ll need an invite code. Use mine: JOEY22, which will tell them that I sent you.

Categories
Programming What I’m Up To

Fix the ChromeDriver 103 bug with ChromeDriver 104

The ChromeDriver 103 bug

If you had an application or script that uses Selenium and ChromeDriver to control or automate instances of Chrome or Chromium, it’s probably not working right now. Instead, you’re probably seeing error messages that look like this:

Message: unknown error: cannot determine loading status
from unknown error: unexpected command response
  (Session info: chrome=103.0.5060.53)
Stacktrace:
0   chromedriver                        0x000000010fb6f079 chromedriver + 4444281
1   chromedriver                        0x000000010fafb403 chromedriver + 3970051
2   chromedriver                        0x000000010f796038 chromedriver + 409656

...and on it goes...

The culprit is ChromeDriver 103, and I wrote about it a couple of days ago in a post titled Why your Selenium / ChromeDriver / Chrome setup stopped working.

ChromeDriver 103 — or more accurately, ChromeDriver 103.0.5060.53 — works specifically with Chrome/Chromium 103.0.5060.53. If you regularly update Chrome or Chromium and use ChromeDriverManager to keep ChromeDriver’s version in sync with the browser, you’ve probably updated to ChromeDriver 103.0.5060.53, which has a causes commands to ChromeDriver to sometimes fail.

The fix

Luckily, the bug has been fixed in ChromeDriver 104, which works specifically with Chrome 104. This means that if you update to Chrome and ChromeDriver 104, your Selenium / ChromeDriver / Chrome setup will work again.

The challenge is that Chrome 104 is still in beta. As I’m writing this, the Google Chrome Beta site is hosting an installer for Chrome 104, or more accurately, Chrome 104.0.5112.20. The application has the name Google Chrome Beta and is considered a separate app from Google Chrome. This means that you can have the current release and the beta version installed on your machine at the same time.

Once you’ve installed Chrome Beta, you just need to make your Selenium/ChromeDriver application or script use the appropriate version of ChromeDriver. Here’s how I did it in Transmogrifier, my Python script that helps me assemble the Tampa Bay Tech Events list:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager


// 1
option = Options()
option.binary_location='/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta'

// 2
driver = webdriver.Chrome(service=Service(ChromeDriverManager(version='104.0.5112.20').install()), options=option)

Here are some explanation that match the number comments in the code above:

  1. These lines create an instance of the Options class, which we’re using to specify the directory where the Chrome beta app can be found. We’ll use the instance, options, when we create driver, the object that controls the Chrome beta app.
  2. This constructor creates a WebDriver.Chrome object which will control the Chrome beta app. The service parameter specifies that the driver should be an instance of ChromeDriver 104, and that it should be installed if it isn’t already present on the system. The options parameter specifies that ChromeDriver should drive the version of Chrome located at the directory path specified in the option object: the Chrome beta app.

Once that’s done, I can proceed with my script. Here’s a simplified version of the start of my Transmogrifier script:

from bs4 import BeautifulSoup

// Load the web page whose URL is `url` into
// the browser under script control
driver.get(url)

// Execute any scripts on the page so that
// we can scrape the final rendered version
html = driver.execute_script('return document.body.innerHTML')

// And now it’s time to scrape!
soup = BeautifulSoup(html, 'html.parser')
// ...the rest of the code goes here...

Hope this helps!