Categories
Programming

The Advent of Code is coming in a few days!

We’re only a few days from December, which means it will soon be time for the great programming exercise known as the Advent of Code!

Think of it as an Advent calendar, but chocolates (or cheese, or wine), you’re presented with a new programming puzzle every day between the start of December and Christmas Day, in which you try to save Santa’s mission. You can use whatever programming language you want, and you don’t need to be an expert — as the site says, “just a little programming knowledge and some problem solving skills will get you pretty far.”

Advent of Code started in 2015, and has been taking place every year ever since. The 2020 edition begins on Tuesday, December 1st at 12:00 midnight Eastern time (UTC-5).

Not only do I plan on participating in this year’s Advent of Code, but I might even use a couple of the challenges in the Python class I’m currently teaching on behalf of Computer Coach.

Solving Advent of Code 2019’s day one challenge

Here’s the premise of the 2019 Advent of Code’s challenges: Santa is stuck at the edge of the solar system, and you have to rescue him. Each day’s challenge, which has two parts, gets you closer to bringing him home and saving Christmas.

Day one challenge, part one

Here’s the first part of day one’s challenge:

The Elves quickly load you into a spacecraft and prepare to launch.

At the first Go / No Go poll, every Elf is Go until the Fuel Counter-Upper. They haven’t determined the amount of fuel required yet.

Fuel required to launch a given module is based on its mass. Specifically, to find the fuel required for a module, take its mass, divide by three, round down, and subtract 2.

For example:

  • For a mass of 12, divide by 3 and round down to get 4, then subtract 2 to get 2.
  • For a mass of 14, dividing by 3 and rounding down still yields 4, so the fuel required is also 2.
  • For a mass of 1969, the fuel required is 654.
  • For a mass of 100756, the fuel required is 33583.

The Fuel Counter-Upper needs to know the total fuel requirement. To find it, individually calculate the fuel needed for the mass of each module (your puzzle input), then add together all the fuel values.

What is the sum of the fuel requirements for all of the modules on your spacecraft?

While the problems in the Advent of Code are the same for every participant, the data for each participant is different (there’s a sign-up process, which gives you an account, your own progress tracker, and your own data). This prevents participants from simply sharing the solution.

Here are the module masses that were provided for my account:

134492
88713
84405
148193
95951
63545
137840
65558
124836
95431
77622
91864
108677
116871
119496
97172
86115
105704
68613
77114
114013
52766
57048
80814
73888
58253
135934
97409
112439
98262
116047
57456
124261
83006
101495
133449
111372
56146
87818
92209
149259
124559
141838
147988
65703
125566
59650
139564
92430
126307
120406
147383
84362
51529
146366
131840
53270
71886
118767
104311
126181
76964
129430
95489
91098
54133
110057
107276
118226
96104
135382
85152
61697
143417
148879
126846
130205
111170
86687
113729
123330
56976
148470
66028
129715
75686
74964
148258
72669
88809
78173
92699
124806
67217
139066
136002
135730
145708
142054
135772

I decided to use the Python REPL to tackle this problem.

My first step was to copy the numbers above, paste them into a triple-quoted string, and assign that string to the variable raw_input:

raw_input = """134492
88713
84405
148193
95951
63545
137840
65558
124836
95431
77622
91864
108677
116871
119496
97172
86115
105704
68613
77114
114013
52766
57048
80814
73888
58253
135934
97409
112439
98262
116047
57456
124261
83006
101495
133449
111372
56146
87818
92209
149259
124559
141838
147988
65703
125566
59650
139564
92430
126307
120406
147383
84362
51529
146366
131840
53270
71886
118767
104311
126181
76964
129430
95489
91098
54133
110057
107276
118226
96104
135382
85152
61697
143417
148879
126846
130205
111170
86687
113729
123330
56976
148470
66028
129715
75686
74964
148258
72669
88809
78173
92699
124806
67217
139066
136002
135730
145708
142054
135772"""

Now that I had the data in a string, I could split the string into an array, using the newline character as the delimiter. I named the array split_input:

>>> split_input = raw_input.split("\n")
>>> split_input
['134492', '88713', '84405', '148193', '95951', '63545', '137840', '65558', '124836', '95431', '77622', '91864', '108677', '116871', '119496', '97172', '86115', '105704', '68613', '77114', '114013', '52766', '57048', '80814', '73888', '58253', '135934', '97409', '112439', '98262', '116047', '57456', '124261', '83006', '101495', '133449', '111372', '56146', '87818', '92209', '149259', '124559', '141838', '147988', '65703', '125566', '59650', '139564', '92430', '126307', '120406', '147383', '84362', '51529', '146366', '131840', '53270', '71886', '118767', '104311', '126181', '76964', '129430', '95489', '91098', '54133', '110057', '107276', '118226', '96104', '135382', '85152', '61697', '143417', '148879', '126846', '130205', '111170', '86687', '113729', '123330', '56976', '148470', '66028', '129715', '75686', '74964', '148258', '72669', '88809', '78173', '92699', '124806', '67217', '139066', '136002', '135730', '145708', '142054', '135772']

split_input is an array of strings which needed to be converted into integer values.

In many other languages, I’d do this by using the map function to apply a “convert a string to its integer value” function to every item in the array, creating a resulting array called masses. Here’s the Python version of that approach:

>>> masses = list(map(int, split_input))
>>> masses
[134492, 88713, 84405, 148193, 95951, 63545, 137840, 65558, 124836, 95431, 77622, 91864, 108677, 116871, 119496, 97172, 86115, 105704, 68613, 77114, 114013, 52766, 57048, 80814, 73888, 58253, 135934, 97409, 112439, 98262, 116047, 57456, 124261, 83006, 101495, 133449, 111372, 56146, 87818, 92209, 149259, 124559, 141838, 147988, 65703, 125566, 59650, 139564, 92430, 126307, 120406, 147383, 84362, 51529, 146366, 131840, 53270, 71886, 118767, 104311, 126181, 76964, 129430, 95489, 91098, 54133, 110057, 107276, 118226, 96104, 135382, 85152, 61697, 143417, 148879, 126846, 130205, 111170, 86687, 113729, 123330, 56976, 148470, 66028, 129715, 75686, 74964, 148258, 72669, 88809, 78173, 92699, 124806, 67217, 139066, 136002, 135730, 145708, 142054, 135772]

It works, but from a Python programming point of view, it just doesn’t feel right.

The Pythonic approach would involve using a list comprehension instead of map (and then using the resulting iterator into a list). It just seems more readable:

>>> masses = [int(string) for string in split_input]
>>> masses
[134492, 88713, 84405, 148193, 95951, 63545, 137840, 65558, 124836, 95431, 77622, 91864, 108677, 116871, 119496, 97172, 86115, 105704, 68613, 77114, 114013, 52766, 57048, 80814, 73888, 58253, 135934, 97409, 112439, 98262, 116047, 57456, 124261, 83006, 101495, 133449, 111372, 56146, 87818, 92209, 149259, 124559, 141838, 147988, 65703, 125566, 59650, 139564, 92430, 126307, 120406, 147383, 84362, 51529, 146366, 131840, 53270, 71886, 118767, 104311, 126181, 76964, 129430, 95489, 91098, 54133, 110057, 107276, 118226, 96104, 135382, 85152, 61697, 143417, 148879, 126846, 130205, 111170, 86687, 113729, 123330, 56976, 148470, 66028, 129715, 75686, 74964, 148258, 72669, 88809, 78173, 92699, 124806, 67217, 139066, 136002, 135730, 145708, 142054, 135772]

Once I had the masses, I could then calculate the fuel requirements for each mass. This may be the only time I’ve ever made use of Python’s floor division operator, which performs an integer division, rounding down:

>>> fuel_requirements = list(map(lambda mass: mass // 3 - 2, masses))
>>> fuel_requirements
[44828, 29569, 28133, 49395, 31981, 21179, 45944, 21850, 41610, 31808, 25872, 30619, 36223, 38955, 39830, 32388, 28703, 35232, 22869, 25702, 38002, 17586, 19014, 26936, 24627, 19415, 45309, 32467, 37477, 32752, 38680, 19150, 41418, 27666, 33829, 44481, 37122, 18713, 29270, 30734, 49751, 41517, 47277, 49327, 21899, 41853, 19881, 46519, 30808, 42100, 40133, 49125, 28118, 17174, 48786, 43944, 17754, 23960, 39587, 34768, 42058, 25652, 43141, 31827, 30364, 18042, 36683, 35756, 39406, 32032, 45125, 28382, 20563, 47803, 49624, 42280, 43399, 37054, 28893, 37907, 41108, 18990, 49488, 22007, 43236, 25226, 24986, 49417, 24221, 29601, 26055, 30897, 41600, 22403, 46353, 45332, 45241, 48567, 47349, 45255]

The map/list/lambda approach works just fine, but once again, a list comprehension just seems more elegant to my eye:

>>> fuel_requirements = [mass // 3 - 2 for mass in masses]
>>> fuel_requirements
[44828, 29569, 28133, 49395, 31981, 21179, 45944, 21850, 41610, 31808, 25872, 30619, 36223, 38955, 39830, 32388, 28703, 35232, 22869, 25702, 38002, 17586, 19014, 26936, 24627, 19415, 45309, 32467, 37477, 32752, 38680, 19150, 41418, 27666, 33829, 44481, 37122, 18713, 29270, 30734, 49751, 41517, 47277, 49327, 21899, 41853, 19881, 46519, 30808, 42100, 40133, 49125, 28118, 17174, 48786, 43944, 17754, 23960, 39587, 34768, 42058, 25652, 43141, 31827, 30364, 18042, 36683, 35756, 39406, 32032, 45125, 28382, 20563, 47803, 49624, 42280, 43399, 37054, 28893, 37907, 41108, 18990, 49488, 22007, 43236, 25226, 24986, 49417, 24221, 29601, 26055, 30897, 41600, 22403, 46353, 45332, 45241, 48567, 47349, 45255]

And now that I had the fuel requirements for each module, all I had to do was get their sum:

>>> total_fuel = sum(fuel_requirements)
>>> total_fuel
3454942

I entered the value for total_fuel into the solution text field, and Advent of Code immediately told me that I had solved part one of the day one challenge! So far, so good.

Day one challenge, part two

Christine Darden, one of the “Hidden Figures” mathematicians who helped land the astronauts on the Moon.

Part two of the challenge was a refinement of part one:

During the second Go / No Go poll, the Elf in charge of the Rocket Equation Double-Checker stops the launch sequence. Apparently, you forgot to include additional fuel for the fuel you just added.

Fuel itself requires fuel just like a module – take its mass, divide by three, round down, and subtract 2. However, that fuel also requires fuel, and that fuel requires fuel, and so on. Any mass that would require negative fuel should instead be treated as if it requires zero fuel; the remaining mass, if any, is instead handled by wishing really hard, which has no mass and is outside the scope of this calculation.

So, for each module mass, calculate its fuel and add it to the total. Then, treat the fuel amount you just calculated as the input mass and repeat the process, continuing until a fuel requirement is zero or negative. For example:

  • A module of mass 14 requires 2 fuel. This fuel requires no further fuel (2 divided by 3 and rounded down is 0, which would call for a negative fuel), so the total fuel required is still just 2.
  • At first, a module of mass 1969 requires 654 fuel. Then, this fuel requires 216 more fuel (654 / 3 - 2). 216 then requires 70 more fuel, which requires 21 fuel, which requires 5 fuel, which requires no further fuel. So, the total fuel required for a module of mass 1969 is 654 + 216 + 70 + 21 + 5 = 966.
  • The fuel required by a module of mass 100756 and its fuel is: 33583 + 11192 + 3728 + 1240 + 411 + 135 + 43 + 12 + 2 = 50346.

What is the sum of the fuel requirements for all of the modules on your spacecraft when also taking into account the mass of the added fuel? (Calculate the fuel requirements for each module separately, then add them all up at the end.)

Upon reading this, my first thought was:

The trick to writing recursive functions is to solve the “escape” case first — that is, the case where you stop the recursion and just return a value.

For this problem, the “escape” case is when the repeated fuel calculation gives a result of 0 or less:

if result <= 0:
  return 0

Otherwise, take the result, and apply the fuel calculation to it again. That’s what gives us the recursive part. Here’s the resulting if statement:

if result <= 0: 
  return 0
else: 
  return result + fuel_required(result)

And finally, we have to handle the initial calculation. The end result is the fuel_required function:

def fuel_required(mass):
  result = mass // 3 - 2
  if result <= 0:
    return 0
  else:
    return result + fuel_required(result)

Now that we have the fuel_required function, we can apply it to every item in the masses array from part one:

>>> updated_fuel_requirements = [fuel_required(mass) for mass in masses]
>>> updated_fuel_requirements
[67212, 44325, 42171, 74062, 47941, 31741, 68888, 32746, 62387, 47682, 38780, 45902, 54306, 58402, 59715, 48553, 43027, 52822, 34277, 38525, 56974, 26354, 28495, 40375, 36913, 29094, 67934, 48670, 56187, 49098, 57991, 28698, 62098, 41470, 50716, 66693, 55654, 28043, 43877, 46073, 74596, 62245, 70886, 73962, 32822, 62751, 29795, 69750, 46184, 63121, 60171, 73658, 42148, 25734, 73150, 65887, 26606, 35910, 59351, 52123, 63058, 38449, 64681, 47710, 45516, 27037, 54994, 53606, 59081, 48018, 67657, 42543, 30817, 71674, 74407, 63393, 65068, 55551, 43311, 56833, 61632, 28459, 74203, 32983, 64824, 37810, 37450, 74096, 36304, 44373, 39054, 46318, 62371, 33576, 69500, 67968, 67832, 72820, 70993, 67853]

This yields the updated fuel requirements for each module. The final step was to get their sum:

>>> updated_total_fuel = sum(updated_fuel_requirements)
>>> updated_total_fuel
5179544

Entering the value of updated_total_fuel into the solution text field completed the day one challenge.

Categories
Current Events Tampa Bay

What’s happening in the Tampa Bay tech/entrepreneur/nerd scene (Week of Monday, November 23, 2020)

Once again, here’s the weekly list of events for events for Tampa Bay techies, entrepreneurs, and nerds. Every week, on GlobalNerdy.com and on the mailing list, I scour the announcements for events that are interesting to or useful for those of you who are building the future here in “The Other Bay Area, on The Other West Coast”.

This list covers events from Monday, November 23 through Sunday, November 29, 2020.

I’ve opted to list only those events that I can confirm are happening online. I’m not yet listing in-person events, as we’re still in the middle of a pandemic in one of the hardest-hit states (875,000 cases, which is an increase of 31,000 since last week, and 17,488 deaths, which is up 1,572 from last week) in one of the hardest-hit countries in the world (11 million cases, which is an increase of 1 million from last week, and 245,000 deaths, which is up 7,000 from last week).

Events — especially virtual, online ones — can pop up at the last minute. I add them to the list as I find out about them. Come back and check this article from time to time, as you might find a new listing that wasn’t there before!

It’s the week of Thanksgiving, which is one of the least productive weeks of the year. You might want to double-check with event organizers that events that appear on the schedule are actually happening this week!

This week’s events

Monday, November 23

Tuesday, November 24

Wednesday, November 25

Thursday, November 26

It’s Thanksgiving day! You might want to double-check with the event organizers that these events — which were listed on Meetup and EventBrite — are actually happening on this day.

Friday, November 27

It’s Black Friday! You might want to double-check with the event organizers that these events — which were listed on Meetup and EventBrite — are actually happening on this day.

Saturday, November 28

There aren’t any scheduled tech, entrepreneur, or nerd online events…YET!

Sunday, November 29

Do you have any events or announcements that you’d like to see on this list?

Let me know at joey@joeydevilla.com!

Join the mailing list!

If you’d like to get this list in your email inbox every week, enter your email address below. You’ll only be emailed once a week, and the email will contain this list, plus links to any interesting news, upcoming events, and tech articles.

Join the Tampa Bay Tech Events list and always be informed of what’s coming up in Tampa Bay!


Categories
What I’m Up To

My “Welcome to Auth0” swag

My Auth0 swag arrived today! This means I can finally partake in the techie tradition of making the traditional “Look at the stuff I got when I joined the company!” post.

The laptop arrived on the Friday of my first week, and it’s a nice one:

When I got hired, incoming Auziros — that’s the internal term for “Auth0 employee” — got the choice of either a 13″ or 16″ MacBook Pro.

Many developers I know prefer to go with a smaller, lighter notebook. As a person who carries an accordion to social events, conferences, and bars (or at least, I used to, before the plague), I have a distorted sense of what “lightweight” is, and consider a 16″ laptop dainty. I don’t mind the extra weight, and I appreciate the extra processing power, screen real estate, USB ports, and battery size.

The swag arrived in a box at noon, and most of it is Auth0-branded and in the official colors.

The goodies are:

  • 2 Auth0 t-shirts
  • 2 Auth0 stickers
  • A reversible booklet, which reads “Auth0 Product Vision” on one side, and “Auth0 Brand Vision” on the other
  • An Auth0 water bottle
  • A metal cup, labeled “One giant leap”, and below it, a lunar footprint with the Auth0 “shield” logo in the middle
  • An Auth0 spiral-bound notebook
  • An Auth0 laptop zip-pouch
  • A Tile Mate bluetooth tracker

The laptop pouch can hold the 16″ MacBook Pro, and it certainly stands out. It’s a good thing that orange is one of my favorite colors:

I’m going to have to ask an Auziro who’s been around longer what the “One Giant Leap” promotion was all about. It is a nice mug:

Companies function better when their people can actually tell the story of the company and articulate what the company’s all about. And for the people who work at a company, knowing the company’s vision and the image it wants to project to the world can help give a sense of meaning and purpose to the work they do.

That’s why I think one of the best things in the box o’ swag was the double-sided booklet, with Auth0’s product vision on one side…

…and Auth0’s brand vision on the other:

It’s not unusual for a tech company to provide swag like branded bottles, bags, mouse pads, mugs, and stickers. In my more recent experience, I’ve been fortunate to get a really nice “welcome” package from Shopify, Smartrac, and Sourcetoad.

Some companies stand out by providing something a little more unusual with the welcome swag. Auth0 is one of those companies, as they didn’t just include a Tile Bluetooth tracker, but also put the box in a sleeve with nice messages. They could’ve just thrown it in with the rest of the stuff, but they took the trouble to make it a little more personal:

Thanks for the sweet stuff, Auth0!

Categories
How To What I’m Up To

How to downgrade to macOS Catalina after upgrading to Big Sur

I’ll admit it: I’ve gotten a little used to working at smaller companies, where there’s no monitoring of company computers, and it’s the Wild West as far as what you can install on them.

That’s no longer the case for me. I now work at Auth0, a company with a headcount that’s quickly approaching 800, with unicorn status and Series F funding, and it’s in the security industry. Naturally, there’s a full-fledged security team that monitors company-issued computers.

In my excitement to take the new version of macOS — Big Sur — out for a spin, I’d forgotten that the Security team hasn’t yet approved it for use. They very quickly (and I should add, nicely) contacted me and let me know that I needed to reinstall macOS Catalina as soon as possible.

There are other reasons why you might need to go back to Catalina after installing Big Sur:

For the benefit of any who need to downgrade, here’s a step-by-step guide to reinstalling Catalina after you’ve installed Big Sur. You’ll need a USB key and the better part of an afternoon.

Step 1: The preliminaries

1a: Start downloading the Catalina installer from the App store

The first thing you’ll need is the macOS Catalina installer.

Here’s the link to the Catalina installer on the App Store.

It’ll take up around 9 gigabytes of space on your hard drive, and the App Store will put in your Applications folder.

Once it’s completely downloaded from the App Store, the installer will start automatically. When this happens, close the installer. You’ll make use of it later.

The installer will take some time to download. Apple’s servers will be busier than usual, as many users are downloading Big Sur and other upgrades.

1b: Back up your files!

In the process of reinstalling Catalina, you’ll need to completely erase your Mac’s hard drive. If you have any files that you can’t live without, this is the time to back them up.

I didn’t have to worry about this, since:

  • All my work product is either code (which lives on GitHub) or content (which lives on GitHub or Google Docs), and
  • I’ve been at Auth0 less than a month, and between onboarding and offsites, there just hasn’t been that much of a chance for me to accumulate that many files on my hard drive!

1c: Get a nice fast USB key that stores at least 16 GB

The process will involve booting your Mac from a USB key containing the macOS Catalina installer, so you’ll need a key with enough space. An 8 GB USB key won’t be big enough. Because digital storage is all about powers of 2, the next size up will be 16 GB.

I strongly recommend that you use a USB 3 key, especially one with read speeds of 300 megabits/second or better, such as the Samsung Fit Plus. Doing so will greatly speed up the process. Don’t use a USB key that you got as conference swag — it may have the space, but more often than not, they tend to be slow, because they’re cheap.

If the USB key contains files that you want to keep, back them up. You’re going to erase the key in the next step.

Step 2: Make a bootable USB key containing the macOS Catalina installer

2a: Format the USB key

Plug the USB key into your Mac, then launch Disk Utility.

Select the USB key in Disk Utility’s left column, then click the Erase button:

Tap to view at full size.

You’ll be presented with this dialog box:

Enter MyVolume into the Name field, and for Format, select Mac OS Extended (Journaled). Click the Erase button. This will format the USB key with the volume name of MyVolume.

2b: Install the macOS Catalina installer onto the USB key

In Step 1a, you downloaded the macOS Catalina installer and closed it after it started automatically. In this step, you’ll transfer it to your freshly-formatted USB key.

Open a terminal window and paste the following command into it:

sudo /Applications/Install\ macOS\ Catalina.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume

(The command above assumes that you gave the USB key the volume name MyVolume.)

Once you’ve provided sudo with your password, you’ll be asked if you want to erase the USB key. Entering Y in response will start the process of making the USB key a bootable drive and copying the macOS Catalina installer onto it:

Tap to view at full size.

The Erasing disk process will be relatively quick, but the Copying to disk process may take a while. This is where using a nice, fast USB 3 key will pay off.

Be patient and let it get to 100%, and wait for the Install media now available message to appear and the command line prompt to return.

2c: If your Mac is from 2018 or later, set it up to boot from external media

Check the year of your Mac’s manufacture by selecting About This Mac under the Apple menu:

  • If your Mac year is 2017 or earlier, you don’t need to follow the rest of this step. Proceed to Step 3.
  • If your Mac’s year is 2018 or later, you’ll need to change its security settings to allow it to boot from an external drive.

Here’s how you change the security settings:

  1. Restart your Mac and hold down the and R keys when you see the Apple logo. This puts the computer into recovery mode, which provides many setup options.
  2. In the menu bar, select Utilities, and then select Startup Security Utility from the list that appears.
  3. The Startup Security Utility window will appear:
    1. Under the Secure Boot section, select Medium Security. This will allow you to install Catalina without having to connect to a network.
    2. Under the External Boot section, select Allow booting from external media. This will allow you to install Catalina from a USB key or disk drive.
Tap to view at full size.

Step 3: Install macOS Catalina

Restart your Mac, and hold down the Option key while it restarts. Your Mac will present you with a choice of startup disks.

Choose the USB key. Your Mac will boot up and you’ll be presented with the macOS Catalina installer screen:

Go ahead and install Catalina.

Once Catalina is installed, you can proceed reinstalling your other software.

Once that’s complete:

  • If your Mac’s year is 2017 or earlier, you’re done installing Catalina. You can now go about reinstalling your software and  restoring your backed up files.
  • If your Mac’s year is 2018 or later, you’ll need to restore its original security settings. The process is described in Step 4, below.

Step 4: If your Mac is from 2018 or later, restore the original security settings

If your Mac is from 2018 or later, follow these steps to restore the original security settings once Catalina has been installed:

  1. Restart your Mac and hold down the and R keys when you see the Apple logo. This puts the computer into recovery mode, which provides many setup options.
  2. In the menu bar, select Utilities, and then select Startup Security Utility from the list that appears.
  3. The Startup Security Utility window will appear:
    1. Under the Secure Boot section, select Full Security.
    2. Under the External Boot section, select Disallow booting from external media.
Tap to view at full size.
Categories
Current Events Tampa Bay

What’s happening in the Tampa Bay tech/entrepreneur/nerd scene (Week of Monday, November 16, 2020)

Once again, here’s the weekly list of events for events for Tampa Bay techies, entrepreneurs, and nerds. Every week, on GlobalNerdy.com and on the mailing list, I scour the announcements for events that are interesting to or useful for those of you who are building the future here in “The Other Bay Area, on The Other West Coast”.

This list covers events from Monday, November 16 through Sunday, November 22, 2020.

I’ve opted to list only those events that I can confirm are happening online. I’m not yet listing in-person events, as we’re still in the middle of a pandemic in one of the hardest-hit states (875,000 cases, which is an increase of 31,000 since last week, and 17,488 deaths, which is up 1,572 from last week) in one of the hardest-hit countries in the world (11 million cases, which is an increase of 1 million from last week, and 245,000 deaths, which is up 7,000 from last week).

Events — especially virtual, online ones — can pop up at the last minute. I add them to the list as I find out about them. Come back and check this article from time to time, as you might find a new listing that wasn’t there before!

This week’s events

Monday, November 16

Tuesday, November 17

Wednesday, November 18

Thursday, November 19

Friday, November 20

Saturday, November 21

Sunday, November 22

Do you have any events or announcements that you’d like to see on this list?

Let me know at joey@joeydevilla.com!

Join the mailing list!

If you’d like to get this list in your email inbox every week, enter your email address below. You’ll only be emailed once a week, and the email will contain this list, plus links to any interesting news, upcoming events, and tech articles.

Join the Tampa Bay Tech Events list and always be informed of what’s coming up in Tampa Bay!


Categories
Programming

Find out more about .NET 5 on the Auth0 Developers Blog

Tap to view at full size.

Graphic: dotNET robot.NET 5 is the 5th major version of the .NET framework, the bedrock of modern Microsoft platform development, and it’s out today!

(For the official details, check out the announcement on the .NET Blog: Announcing .NET 5.0.)

In addition to being the replacement for .NET Framework 4.8 as well as .NET Core 3.1, .NET 5 unifies the various flavors of .NET — “.NET Framework”, .Net Core, Mono, the various Xamarins, Unity, and Universal Windows Platform — into a more cohesive whole.

Piano keyboard showing C# and F# keys

With this new version of .NET come new versions of its programming languages: C# 9 and F#5, as well as ASP.NET Core and EF Core.

Want to find out more about .NET 5? A good starting point is the article Five Things You Should Know About .NET 5, written by my teammate Andrea Chiarelli on the Auth0 Developers Blog.

Categories
Conferences Current Events Programming Tampa Bay

Suncoast Developers Guild’s Fall 2020 Conference is THIS SATURDAY!

Suncoast Developers Conference this Saturday!

Hey, Tampa Bay! We’ve got another Suncoast Developers Conference happening this Saturday, and you can attend for FREE, from the comfort of your own computer or phone.

Once again, it’s this Saturday, it’s online, and it’s free-as-in-beer to attend. REGISTER HERE.

The conference will be made of bite-size (15 minutes or shorter!) presentations by Tampa Bay techies and demos of capstone projects by Suncoast Developers Guild alums.

I’ll be presenting on PyGame!

I’ll be doing a presentation in the afternoon, on the topic of…

PyGame! I try to keep my topics both technical and fun, and what’s more technical and fun than Python and game development?

There will be coding, and I’ll also provide source code and a free book.

What was the last Suncoast Developers Conference like?

The last conference took place in the summer, and was also free and online. You can watch the entire thing below…

…and if you want to jump to a specific presentation, use these links:

  1. 00:00:00 Reticulating Splines…
  2. 00:00:58 Welcome & Introductions
  3. 00:08:15 Jason L Perry: Badges? We don’t need no stinkin’ badges!
  4. 00:22:11 Robert Bieber: Will it Scale?
  5. 00:58:13 Kento Kawakami – Demo: Smash Bros Combo
  6. 01:28:30 Cody Banks & Abtahee Ali – Demo: Evolution X
  7. 01:54:54 Daniel Demerin – The Rubber Duck Pal Program
  8. 02:11:12 Colter Lena – Demo: Furry Friends
  9. 02:24:50 Trent Costa – Demo: Tailgate
  10. 02:41:54 Dylan Attal – Don’t Crash! CSS-Modules in React
  11. 02:59:42 Vincent Tang – How to start your own Coding Podcast 101
  12. 03:30:31 Michele Cynowicz – Pull Requests and the Developers Who Love Them
  13. 03:52:11 Abe Eveland – Demo: Rollerblade Buyers Guide
  14. 04:04:45 Liz Tiller – Post-Bootcamp Reflections
  15. 04:23:20 Joey deVilla – Ren’py
  16. 04:41:20 Michael Traverso – You Do Belong Here
  17. 05:01:46 Rob Mack – Demo: What’s for Dinner?
  18. 05:15:38 Kat Batuigas – A Taste Of Docs As Code

How do you register for the conference?

REGISTER HERE. Once again, it’s this Saturday, it’s online, and it’s free-as-in-beer to attend.

I’ll see you on Saturday!

One more thing: What is Suncoast Developers Guild?

Since opening their doors in the summer of 2018, Suncoast Developers Guild’s coding school has graduated over 100 students, and before that, they taught people to code in their previous incarnation as the Tampa Bay branch of The Iron Yard.

In another life, I was a developer evangelist who travelled across North America and I saw tech scenes from Palo Alto to Peoria. I can tell you that one of the signs of a healthy tech community in a small- to medium-sized city is a coding school that acts as a social/technical/gathering place. If your city had one, things were looking up for local techies. If not, it was a safe bet that the place was experiencing a brain drain.

Here in Tampa Bay, Suncoast Developers Guild fills that vital role, and it does so spectacularly. They’re a key part of the heart and soul of tech in the area, and it shows in their efforts, such as events like this.