Categories
Humor Programming

Don’t interrupt a programmer at work…

…because this could happen:

Comic showing what happens when you interrupt a programmer in the “flow state.”
Creative Commons comic by Jason Heeris. Tap to view the original.
Categories
Programming

Getting my (rubber) ducks in a row

Photo: Acer Nitro 5 laptop computer with monitor and many rubber ducks.
Tap to view at full size.

In programming, there’s a term called rubber duck debugging. It’s a problem-solving technique where you describe the problem you’re facing in as simple a way as possible to an inanimate object, such as a rubber duck. 

It’s turned out to be a good way to solve many programming problems. When you describe how something should work and then look at the system and see how it isn’t working, it often becomes easy to spot where the issue is.

You could perform the exact same thing with a person — in fact, it’s one of the things that pair programmers are supposed to do — but when another person isn’t available, a rubber duck can come in pretty handy. So I’ve started a collection.

The newest addition is the Einstein duck, located below the big monitor on the left. I supposed I could’ve ordered it from Amazon, but I bought it at the gift shop the History of Science Museum when I visited Oxford last month.

See also…

Categories
Career Programming

How to solve coding interview questions: Linked lists, part 3

The linked list exercises continue! In case you missed them, be sure to check out part 1 and part 2 of this linked list series before moving forward…

Adding an item to the start of a linked list

In this article, the first new feature we’ll implement is the ability to add new items to the start of the list. It’s similar to adding an item to the end of a list, which is why I reviewed it above.

The diagram below shows the first two nodes of a linked list. Recall that a linked list’s head points to its first node and that every node points to the next one:

Here’s how you add a new node to the start of the list. The new node becomes the first node, and the former first node becomes the second node:

Here are the steps:

  • Create a new node. In our implementation, newly-created nodes have a next property that points to null, nil, or None by default.
  • If the list is empty (i.e. head points to null, nil, or None), adding it to the list is the same thing as adding it to the start of the list. Point head to the new node and you’re done.
  • If the list is not empty, you need to do just a little more work.
    • Point the new node’s next property to head. This makes the current first node the one that comes after the new node.
    • Point head at the new node. This makes the new node the first one in the list.

Here’s how I implemented this in Python…

# Python

def add_first(self, value):
    new_node = Node(value)

    # If the list is empty,
    # point `head` to the newly-added node
    # and exit.
    if self.head is None:
        self.head = new_node
        return

    # If the list isn’t empty,
    # make the current first node the second node
    # and make the new node the first node.
    new_node.next = self.head
    self.head = new_node

…and here’s my JavaScript implementation:

# JavaScript

addFirst(value) {
    let newNode = new Node(value)
    
    // If the list is empty,
    // point `head` to the newly-added node
    // and exit.
    if (this.head === null) {
        this.head = newNode
        return
    }
    
    // If the list isn’t empty,
    // make the current first node the second node
    // and make the new node the first node.
    newNode = this.head
    this.head = newNode
}

Inserting a new item at a specified position in the list

So far, we’ve implemented methods to:

  • Add a new item to the start of the list, and
  • Add a new item to the end of the list.

Let’s do something a little more complicated: adding a new item at a specified position in the list. The position is specified using a number, where 0 denotes the first position in the list.

Here’s how you add a new node at a specified position in the list.

Here are the steps:

  • The function has two parameters:
    1. index: The index where a new node should be inserted into the list, with 0 denoting the first item.
    2. value: The value that should be stored in the new node.
  • Create a new node, new_node, and put value into it.
  • Use a variable, current_index, to keep track of the index of the node we’re currently looking at as we traverse the list. It should initially be set to 0.
  • Use another variable, current_node, which will hold a reference to the node we’re currently looking at. It should initially be set to head, which means that we’ll start at the first item in the list.
  • Repeat the following as long as current_node is not referencing null, nil, or None:
    • We’re looking for the node in the position immediately before the position where we want to insert the new node. If current_index is one less than index:
      • Point the new node at the current node’s next node.
      • Point the current node at the new node.
      • Return true, meaning that we successfully inserted a new item into the list
    • If we’re here, it means that we haven’t yet reached the node immediately before the insertion point. Move to the next node and increment current_index.
  • If we’re here, it means that we’ve gone past the last item in the list. Return false, meaning we didn’t insert a new item into the list.

Here’s how I implemented this in Python…

# Python

def insert_element_at(self, index, value):
    new_node = Node(value)
    current_index = 0
    current_node = self.head

    # Traverse the list, keeping count of 
    # the nodes that you visit,
    # until you’ve reached the specified node.  
    while current_node:
        if current_index == index - 1:
            # We’re at the node before the insertion point!
            # Make the new node point to the next node
            # and the current node point to the new node.
            new_node.next = current_node.next
            current_node.next = new_node
            return True
        
        # We’re not there yet...
        current_node = current_node.next
        current_index += 1
        
    # If you’re here, the given index is larger
    # than the number of elements in the list.
    return False

…and here’s my JavaScript implementation:

// JavaScript

insertElementAt(index, value) {
    let newNode = new Node(value)
    let currentIndex = 0
    let currentNode = this.head
    
    // Traverse the list, keeping count of 
    // the nodes that you visit,
    // until you’ve reached the specified node.     
    while (currentNode) {
        if (currentIndex === index - 1) {
            // We’re at the node before the insertion point!
            // Make the new node point to the next node
            // and the current node point to the new node.
            newNode.next = currentNode.next
            currentNode.next = newNode
            return true
        }
        
        // We’re not there yet...
        currentNode = currentNode.next
        currentIndex++
    }
    
    // If you’re here, the given index is larger
    // than the number of elements in the list.
    return false        
}

Deleting an item from a specified position in the list

Now that we can add a new item at a specified position in the list, let’s implement its opposite: deleting an item from a specified position in the list. Once again, the position is specified using a number, where 0 denotes the first position in the list.

Here’s how you delete a new node from a specified position in the list:

Here are the steps:

  • The function has a single parameter, index: the index of the node to be deleted, with 0 denoting the first item in the list.
  • Use a variable, current_index, to keep track of the index of the node we’re currently looking at as we traverse the list. It should initially be set to 0.
  • Use another variable, current_node, which will hold a reference to the node we’re currently looking at. It should initially be set to head, which means that we’ll start at the first item in the list.
  • Repeat the following as long as current_node is not referencing null, nil, or None:
    • We’re looking for the node in the position immediately before the position of the node we want to delete. If current_index is one less than index:
      • Point the current node to the next node’s next node, which removes the next node from the list.
      • Set both the next node’s data and next properties to null, nil, or None. At this point, this node is no longer in the list and is an “island” — no object points to it, and it doesn’t point to any objects. It will eventually be garbage collected.
      • Return true, meaning that we successfully deleted the item from the list
    • If we’re here, it means that we haven’t yet reached the node immediately before the deletion point. Move to the next node and increment current_index.
  • If we’re here, it means that we’ve gone past the last item in the list. Return false, meaning we didn’t delete the item from the list.

Here’s how I implemented this in Python…

# Python

def delete_element_at(self, index):
    current_index = 0
    current_node = self.head

    # Traverse the list, keeping count of 
    # the nodes that you visit,
    # until you’ve reached the specified node.  
    while current_node:
        if current_index == index - 1:
            # We’re at the node before the node to be deleted!
            # Make the current node point to the next node’s next node
            # and set the next node’s `data` and `next` properties
            # to `None`.
            delete_node = current_node.next
            current_node.next = delete_node.next
            delete_node.data = None
            delete_node.next = None
            return True
        
        # We’re not there yet...
        current_node = current_node.next
        current_index += 1
        
    # If you’re here, the given index is larger
    # than the number of elements in the list.
    return False

…and here’s my JavaScript implementation:

// JavaScript

deleteElementAt(index) {
    let currentIndex = 0
    let currentNode = this.head
    
    // Traverse the list, keeping count of 
    // the nodes that you visit,
    // until you’ve reached the specified node.  
    while (currentNode) {
        if (currentIndex === index - 1) {
            // We’re at the node before the node to be deleted!
            // Make the current node point to the next node’s next node
            // and set the next node’s `data` and `next` properties
            // to `null`.
            const deleteNode = currentNode.next
            currentNode.next = deleteNode.next
            deleteNode.data = null
            deleteNode.next = null
            return true
        }
        
        // We’re not there yet...
        currentNode = currentNode.next
        currentIndex++
    }
    
    // If you’re here, the given index is larger
    // than the number of elements in the list.
    return false  
}

The classes so far

Let’s take a look at the complete Node and LinkedList classes so far, in both Python and JavaScript.

Python

# Python

class Node:
    
    def __init__(self, data):
        self.data = data
        self.next = None
        
    def __str__(self):
        return f"{self.data}"


class LinkedList:
    
    def __init__(self):
        self.head = None
        
    def __str__(self):
        if self.head is None:
            return('Empty list.')
        
        result = ""
        current_node = self.head
        while current_node:
            result += f'{current_node}\n'
            current_node = current_node.next
            
        return result.strip()
    
    def add_last(self, value):
        new_node = Node(value)

        # If the list is empty,
        # point `head` to the newly-added node
        # and exit.
        if self.head is None:
            self.head = new_node
            return
        
        # If the list isn’t empty,
        # traverse the list by going to each node’s
        # `next` node until there isn’t a `next` node...
        current_node = self.head
        while current_node.next:
            current_node = current_node.next
        
        # If you’re here, `current_node` is
        # the last node in the list.
        # Point `current_node` at
        # the newly-added node.
        current_node.next = new_node
        
    def __len__(self):
        count = 0
        current_node = self.head
        
        # Traverse the list, keeping count of 
        # the nodes that you visit,
        # until you’ve gone past the last node.
        while current_node:
            current_node = current_node.next
            count += 1
            
        return count        
        
    def get_element_at(self, index):
        current_index = 0
        current_node = self.head
        
        # Traverse the list, keeping count of 
        # the nodes that you visit,
        # until you’ve reached the specified node.        
        while current_node:
            if current_index == index:
                # We’re at the node at the given index!
                return current_node.data
            
            # We’re not there yet...
            current_node = current_node.next
            current_index += 1
    
        # If you’re here, the given index is larger
        # than the number of elements in the list.
        return None
    
    def set_element_at(self, index, value):
        current_index = 0
        current_node = self.head
        
        # Traverse the list, keeping count of 
        # the nodes that you visit,
        # until you’ve reached the specified node.  
        while current_node:
            if current_index == index:
                # We’re at the node at the given index!
                current_node.data = value
                return True
            
            # We’re not there yet...
            current_node = current_node.next
            current_index += 1
            
        # If you’re here, the given index is larger
        # than the number of elements in the list.
        return False
        
    def add_first(self, value):
        new_node = Node(value)

        # If the list is empty,
        # point `head` to the newly-added node
        # and exit.
        if self.head is None:
            self.head = new_node
            return
        
        # If the list isn’t empty,
        # make the current first node the second node
        # and make the new node the first node.
        new_node.next = self.head
        self.head = new_node
        
    def insert_element_at(self, index, value):
        new_node = Node(value)
        current_index = 0
        current_node = self.head
        
        # Traverse the list, keeping count of 
        # the nodes that you visit,
        # until you’ve reached the specified node.  
        while current_node:
            if current_index == index - 1:
                # We’re at the node before the insertion point!
                # Make the new node point to the next node
                # and the current node point to the new node.
                new_node.next = current_node.next
                current_node.next = new_node
                return True
            
            # We’re not there yet...
            current_node = current_node.next
            current_index += 1
            
        # If you’re here, the given index is larger
        # than the number of elements in the list.
        return False
        
    def delete_element_at(self, index):
        current_index = 0
        current_node = self.head
        
        # Traverse the list, keeping count of 
        # the nodes that you visit,
        # until you’ve reached the specified node.  
        while current_node:
            if current_index == index - 1:
                # We’re at the node before the node to be deleted!
                # Make the current node point to the next node’s next node
                # and set the next node’s `data` and `next` properties
                # to `None`.
                delete_node = current_node.next
                current_node.next = delete_node.next
                delete_node.data = None
                delete_node.next = None
                return True
            
            # We’re not there yet...
            current_node = current_node.next
            current_index += 1
            
        # If you’re here, the given index is larger
        # than the number of elements in the list.
        return False

JavaScript

// JavaScript

class Node {
    
    constructor(data) {
        this.data = data
        this.next = null
    }
    
    toString() {
        return this.data.toString()
    }
    
}


class LinkedList {
    
    constructor() {
        this.head = null
    }
    
    toString() {
        if (!this.head) {
            return('Empty list.')
        }
        
        let output = ""
        let currentNode = this.head

        while (currentNode) {
            output += `${currentNode.data.toString()}\n`
            currentNode = currentNode.next
        }
        
        return output.trim()
    }
    
    addLast(value) {
        let newNode = new Node(value)
        
        // If the list is empty,
        // point `head` to the newly-added node
        // and exit.
        if (this.head === null) {
            this.head = newNode
            return
        }
        
        // If the list isn’t empty,
        // traverse the list by going to each node’s
        // `next` node until there isn’t a `next` node...
        let currentNode = this.head
        while (currentNode.next) {
            currentNode = currentNode.next
        }
        
        // If you’re here, `currentNode` is
        // the last node in the list.
        // Point `currentNode` at
        // the newly-added node.
        currentNode.next = newNode
    }
    
    getCount() {
        let count = 0
        let currentNode = this.head
        
        // Traverse the list, keeping count of 
        // the nodes that you visit,
        // until you’ve gone past the last node.
        while (currentNode) {
            currentNode = currentNode.next
            count++
        }
        
        return count
    }
    
    getElementAt(index) {
        let currentIndex = 0
        let currentNode = this.head
        
        // Traverse the list, keeping count of 
        // the nodes that you visit,
        // until you’ve reached the specified node.     
        while (currentNode) {
            if (currentIndex === index) {
                // We’re at the node at the given index!
                return currentNode.data
            }
            
            // We’re not there yet...
            currentNode = currentNode.next
            currentIndex++
        }
        
        // If you’re here, the given index is larger
        // than the number of elements in the list.
        return null
    }
    
    setElementAt(index, value) {
        let currentIndex = 0
        let currentNode = this.head
        
        // Traverse the list, keeping count of 
        // the nodes that you visit,
        // until you’ve reached the specified node.     
        while (currentNode) {
            if (currentIndex === index) {
                // We’re at the node at the given index!
                currentNode.data = value
                return true
            }
            
            // We’re not there yet...
            currentNode = currentNode.next
            currentIndex++
        }
        
        // If you’re here, the given index is larger
        // than the number of elements in the list.
        return false
    }
    
    addFirst(value) {
        let newNode = new Node(value)
        
        // If the list is empty,
        // point `head` to the newly-added node
        // and exit.
        if (this.head === null) {
            this.head = newNode
            return
        }
        
        // If the list isn’t empty,
        // make the current first node the second node
        // and make the new node the first node.
        newNode = this.head
        this.head = newNode
    }
    
    insertElementAt(index, value) {
        let newNode = new Node(value)
        let currentIndex = 0
        let currentNode = this.head
        
        // Traverse the list, keeping count of 
        // the nodes that you visit,
        // until you’ve reached the specified node.     
        while (currentNode) {
            if (currentIndex === index - 1) {
                // We’re at the node before the insertion point!
                // Make the new node point to the next node
                // and the current node point to the new node.
                newNode.next = currentNode.next
                currentNode.next = newNode
                return true
            }
            
            // We’re not there yet...
            currentNode = currentNode.next
            currentIndex++
        }
        
        // If you’re here, the given index is larger
        // than the number of elements in the list.
        return false        
    }
    
    deleteElementAt(index) {
        let currentIndex = 0
        let currentNode = this.head
        
        // Traverse the list, keeping count of 
        // the nodes that you visit,
        // until you’ve reached the specified node.  
        while (currentNode) {
            if (currentIndex === index - 1) {
                // We’re at the node before the node to be deleted!
                // Make the current node point to the next node’s next node
                // and set the next node’s `data` and `next` properties
                // to `null`.
                const deleteNode = currentNode.next
                currentNode.next = deleteNode.next
                deleteNode.data = null
                deleteNode.next = null
                return true
            }
            
            // We’re not there yet...
            currentNode = currentNode.next
            currentIndex++
        }
        
        // If you’re here, the given index is larger
        // than the number of elements in the list.
        return false  
    }
    
}

Coming up next

It’s time to reverse that list!

Previously in this series

Categories
Current Events Tampa Bay

What’s happening in the Tampa Bay tech/entrepreneur/nerd scene (Week of Monday, July 25, 2022)

Here’s the list of tech, entrepreneur, and nerd events for Tampa Bay and surrounding areas for the week of Monday, July 25 through Sunday, July 31, 2022.

Every week, with the assistance of a couple of Jupyter Notebooks that I put together, I compile this list for the Tampa Bay tech community.

As far as event types go, this list casts a rather wide net. It includes events that would be of interest to techies, nerds, and entrepreneurs. It includes (but isn’t limited to) events that fall under the category of:

  • Programming, DevOps, systems administration, and testing
  • Tech project management / agile processes
  • Video, board, and role-playing games
  • Book, philosophy, and discussion clubs
  • Tech, business, and entrepreneur networking events
  • Toastmasters (because nerds really need to up their presentation game)
  • Sci-fi, fantasy, and other genre fandoms
  • Anything I deem geeky

By “Tampa Bay and surrounding areas”, this list covers events that originate or are aimed at the area within 100 miles of the Port of Tampa. At the very least, that includes the cities of Tampa, St. Petersburg, and Clearwater, but as far north as Ocala, as far south as Fort Myers, and includes Orlando and its surrounding cities.

This week’s events

Monday, July 25

Join us in a big get-together at The Sail (located on the Riverwalk and right by the Convention Center) on Monday, July 25th at 6:30 p.m. as we celebrate the return of StartupBus and give the coders, entrepreneurs, creatives, and coaches of StartupBus Florida a grand send-off!

Register for the event here.

GroupEvent NameTime
Rafael StuchinerBlockchain, Bitcoin, Crypto! What’s all the Fuss?~~~Tampa, FLSee event page
RGANetwork.netDowntown St Pete Professionals Networking Lunch~ Fords GarageSee event page
Rafael StuchinerBlockchain, Bitcoin, Crypto! What’s all the Fuss?~~~St. Petersburg, FLSee event page
Young Professionals Networking JOIN in and Connect!In person at Fords Garage St Pete11:00 AM
JobFairXTampa Job Fair – Tampa Career Fair11:00 AM – 2:00 PM EDT
Professional Business Networking with RGAnetwork.netVirtual Networking Lunch11:30 AM
Entrepreneurs & Business Owners of Sarasota & BradentonVirtual Networking Lunch Monday11:30 AM
Christian Professionals Network Tampa BayLive Online Connection Meeting- Monday11:30 AM
Professional Business Networking with RGAnetwork.netSt. Pete Networking Lunch! Fords Garage! Monday’s11:30 AM
Thinkful TampaThinkful Webinar || Data Science vs. Data Analytics12:00 PM – 1:30 PM EDT
Work From Home -Online Business Opportunities and NetworkingLearn How You Can Create A Crazy Side Income Through LinkedIn3:00 PM
Tampa Financial Freedom Meetup GroupHOW TO CREATE A EASY INCOME ON LINKEDIN3:00 PM
Tampa St Pete Stocks and Options Trading GroupSuccess in Stagflation: Learn to Protect Your Wealth4:00 PM
SCIPS, a 50+ Tampa Bay Singles ClubEUCHRE, Rummy Q and other Board Games for ENTHUSIASTIC GAME PLAYERS4:00 PM
High Tech ConnectJuly Tech Fest5:00 PM
High Tech ConnectJuly Tech Fest5:00 PM – 8:00 PM EDT
Thinkful TampaThinkful Webinar || Intro To Data Analytics: Tableau Basics6:00 PM – 7:30 PM EDT
Brews N Board GamesBoard Game Night at Persimmon Hollow Flamingo Crossings6:00 PM
Tampa Bay TabletoppersMonday Feast & Game Night6:00 PM
Beginning Web DevelopmentWeekly Learning Session6:00 PM
Board Game Meetup: Board Game BoxcarMonday Weekly Board Game Night! (Lazy Moon Colonial Location)6:00 PM
BerLagmark – Sarasota AmtgardMonday Night Fighter Practice!6:00 PM
Critical Hit GamesMTG: Commander Night6:00 PM
Toastmasters District 48Wesley Chapel Speaks Toastmasters6:30 PM
Coders, Creatives, and Craft BeerStartupBus Send-Off at the Sail Pavilion — Monday, July 25th!6:30 PM
Toastmasters District 48North Port Toastmasters Meets Online!!6:30 PM
Startup BusStartupBus Send-Off at the Sail Pavilion — Monday, July 25th!6:30 PM – 9:30 PM EDT
Bradenton Photo GroupCamera Menus and Photography Tutorial6:30 PM
Tampa Bay Gaming: RPG’s, Board Games & more!Board Game Night at Armada Games7:00 PM
Tampa HackerspaceInkStitch 101 (THS Members Only)7:00 PM
Tampa – Sarasota – Venice Trivia & Quiz MeetupTrivia Night – Motorworks Brewing Smartphone Trivia Game Show7:00 PM
Learn-To-Trade Crypto – Online (As Seen on Orlando Sentinel)Learn-To-Trade Q&A (0NLINE)7:00 PM
Learn-To-Trade Forex – Online (As Seen on Orlando Sentinel)Learn-To-Trade Q&A (ONLINE)7:00 PM
Light Study PRO – A Photography Workshop for Emerging ProsMembers as far back as 2008 can access their photos7:00 PM
Central Florida AD&D (1st ed.) Grognards GuildWorld of Greyhawk: 1E One-Shots7:30 PM
Tampa / St Pete Business ConnectionsMonday Virtual Business Introductions11:30 PM

Tuesday, July 26

GroupEvent NameTime
UiPath RPA TampaAutomation Hub best practices – Session 2: large-scale rollouts9:00 AM
Suncoast Credit Union Micro Enterprise Development MeetupBuilding Your Business Bankability9:30 AM
Tampa Bay Tech Career Advice Forum10 Musts to Rock the Interview10:00 AM
Tampa Cybersecurity Training10 Musts to Rock the Interview10:00 AM
Orlando Melrose MakersIn-Person: Makerspace Open Lab10:30 AM
Young Professionals Networking JOIN in and Connect!In Person Networking at the Great Catch ~~ Oldsmar All Welcome to connect!11:00 AM
Tampa / St Pete Business ConnectionsOldsmar Professional Business Networking lunch11:00 AM
Professional Business Networking with RGAnetwork.netOldsmar Tuesday Professional Networking Lunch The Great Catch! JOIN IN11:00 AM
Tampa Bay Business Networking Meetings & MixersUpper Pinellas, Oldsmar,Safety Harbor, Westchase Business networking lunch11:00 AM
Network Professionals Inc. of South Pinellas (NPI)NPI Seminole Referral Pros Chapter – Exchange Qualified Business Referrals11:30 AM
Pasco County Young Entrepreneurs/Business Owners All WelcomeProfessional Business Networking Lunch Glory Day’s New Tampa11:30 AM
Wesley Chapel, Trinity, New Tampa, Business ProfessionalsNew Tampa Networking Lunch at Glory Day’s Grill New Tampa11:30 AM
Thinkful TampaThinkful Webinar || Enhancing Your Career With Mindfulness12:00 PM – 1:30 PM EDT
Global Networking SummitNetworking Brunch12:00 PM
Pasco County Young Entrepreneurs/Business Owners All WelcomeWednesday Business Networking Lunch New Port Richey at Widow Fleatchers12:30 PM
Block Co-op – Bitcoin Crypto Blockchain OrlandoBitcoin/Crypto. Buying, Selling and sharing ideas. Small group atmosphere.1:00 PM
Tampa Startup Founder 101Startup Crowdfunding: Best Practices and Q&A for Fundraising1:00 PM
Free Video Production Classes – TV/InternetSocial Video Marketing Tips(ONLINE CLASS)-FREE for Hillsborough County Residents4:15 PM
Bradenton Photo GroupPhotoshop – Editing and Creative Sessions5:00 PM
UiPath RPA TampaTest Automation using UiPath Test Suite – Developer Series – Part 3 of 45:00 PM
Entrepreneurs & Business Owners of Sarasota & BradentonVirtual Networking Evening meeting Every TUESDAY5:30 PM
Professional Business Networking with RGAnetwork.netVirtual Networking Evening Meeting5:30 PM
Pasco County Young Entrepreneurs/Business Owners All WelcomeTrinity/Odessa Evening Networking “The Happy Hour of Power” All Welcome!5:30 PM
Low Light Photography GroupSony Demo Day and Photo Tips6:00 PM
Critical Hit GamesMarvel Crisis Protocol Night6:00 PM
Toastmasters Division EBartow Toastmasters HYBRID Meeting6:00 PM
Thinkful TampaThinkful Webinar || UX/UI Design: Designing A UX Case Study6:00 PM – 7:30 PM EDT
Tampa HackerspaceWeekly Open Make Night6:00 PM
Florida Center for Creative PhotographyMeet & Greet at O’Keefe’s Family Restaurant6:00 PM
Board Game Meetup: Board Game BoxcarBlood on the Clocktower & Board Games! (Deadwords Brewing Location)6:00 PM
Toastmasters District 48Seminole SPC Toastmasters6:15 PM
Tampa – Sarasota – Venice Trivia & Quiz MeetupTrivia Night – Moose Lodge 2117 Smartphone Trivia Game Show6:30 PM
GDG SunCoastI/OExtended: WebEdition6:30 PM
Pinellas WritersWeekly Group Meetings – All Writers Welcome!6:30 PM
West Pasco Toastmasters Club Weekly Meeting6:30 PM
Orlando Adventurer’s Guild[IN PERSON] DDAL05 Storm King’s Thunder (Tier 2, FR, historic)6:30 PM
The Sarasota Creative Writers Meetup GroupThe Sarasota Creative Writers6:30 PM
Central Florida Computer SocietyCentral Florida Computer Society TechSIG (Please join us!!)7:00 PM
St. Pete Beers ‘n Board Games for Young AdultsSt. Pete Beers ‘n Board Games Meetup for Young Adults7:00 PM
Literate Ladies of Orlando…Well Bred…Well ReadKindred for July7:00 PM
IIBA Tampa BayBABOK IIBA Tampa Bay Study Group7:00 PM
The Orlando Python User GroupPythonic Monthly Meeting7:00 PM
Tampa Hackerspace3D Printing for a Cause: Intro to E-nable7:00 PM
Crypto/Trading/Online Business/Entrepreneurship nightsCrypto/Trading/Online Business/Entrepreneurship Nights7:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!D&D Adventurers League at Armada Games7:00 PM
TB Chess – Tampa Bay – St. Petersburg Chess Meetup GroupLet’s play chess at 54th Ave Kava House!7:30 PM
Shut Up & Write!® TampaOnline Event: Shut Up & Write on Zoom7:45 PM
Thinkful TampaThinkful Webinar || Intro To Data Analytics: Excel Basics9:00 PM – 10:30 PM EDT

Wednesday, July 27

GroupEvent NameTime
Kat Usop, MSHIMINDSHOP™ REPLAY| DESIGN THINKING IN 3 STEPSSee event page
Meet Me In The MetaverseMetaBus – Make History & Interact With Entrepreneurs Creating Web3 In 72 HR7:00 AM
Network Professionals Inc. of South Pinellas (NPI)NPI Profit Partners Chapter – Exchange Qualified Business Referrals7:30 AM
1 Million Cups – Orlando1 Million Cups – Orlando Weekly Meetup8:30 AM
North Tampa Networking GroupBusiness networking9:00 AM
Tampa Bay Business Networking Meetings & MixersBrandon Networking Professionals Networking Lunch11:30 AM
North Sarasota Happy Hour NetworkingBusiness Networking Lunch11:30 AM
Wesley Chapel, Trinity, New Tampa, Business ProfessionalsLutz, Wesley Chapel, New Port Richey Networking Lunch11:30 AM
Suncoast Credit Union Micro Enterprise Development MeetupThe Importance of a Business Banking Relationship11:30 AM
Professional Business Networking with RGAnetwork.netCarrollwood Professional Networking Lunch Wednesday All Welcome JOIN us11:30 AM
Young Professionals Networking JOIN in and Connect!Brandon Business Professionals Just Love Coffee11:30 AM
Sarasota Web Development Meetup GroupLunch Hour Meetup12:00 PM
Entrepreneurial SuccessSuccessful People Never Waste Time!12:00 PM
Thinkful TampaThinkful Webinar || Intro to Data Analytics: SQL Fundamentals12:00 PM – 1:30 PM EDT
Web Design And SEO/SEM Three Sixty DegreesWeb Design And SEO/SEM Three Sixty Degrees12:00 PM
Women Who Code TampaWomen Who Code Mobile Summit12:00 PM
Success Strategies for Business OwnersYour Business with a SWOT Analysis12:00 PM
Pasco County Young Entrepreneurs/Business Owners All WelcomeWednesday Business Networking Lunch New Port Richey at Widow Fleatchers12:30 PM
Free Video Production Classes – TV/InternetDigital Video Editing Class (ONLINE CLASS) -FREE for Hillsborough residents only1:00 PM
Board Game Players ClubBoard game playing1:00 PM
StartUp XchangeTampa Bay Innovation Center Startup Technology Showcase1:30 PM
Work From Home -Online Business Opportunities and NetworkingLearn How to Deal In Stocks And Shares – Tips & Insider Knowledge From Trader2:00 PM
TampaBayNetworkers15+30 Virtual Networking2:45 PM
Orlando Adventurer’s Guild[HISTORIC] Storm King’s Thunder Tier 2 – DM Robert5:00 PM
Brandon BoardgamersBoard Gaming – In Person5:00 PM
Ironhack Tampa – Tech Careers, Learning and NetworkingJuly Data Workshop: Learn the Basics of Python Programming5:00 PM
The Tampa Chapter of the Society for the Exploration of PlayPlaying Games in the Alley5:00 PM
Tampa Bay Tech Career Advice ForumHang Out with WITI Tampa Bay5:30 PM
Tampa Cybersecurity TrainingHang Out with WITI Tampa Bay5:30 PM
Tampa Gaming GuildWednesday Board Game Night5:30 PM
Front End CreativesHang Out with WITI Tampa Bay5:30 PM
Around The World: International Book Club – MetrowestSYRIA: The Map of Salt and Stars – Zeynab Joukhadar6:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!Hobby Night – Minis Painting Tips & Tricks at Armada Games6:00 PM
Saint Pete BoardgamersBoard Game Night6:00 PM
St. Petersburg Crypto Investors and Miners ClubCryptoProCafe: Introduction to Cryptocurrency6:00 PM
Thinkful TampaThinkful Webinar || What Tech Career Is Right For Me?6:00 PM – 7:30 PM EDT
St. Petersburg Crypto Investors and Miners ClubCryptoProCafe : The Investors Club6:00 PM
Suncoast Critical Thinking Discussion GroupCRITICAL THINKERS SUPPER AT AMOB LANDSIDE JULY 27 @ 6:00 INSIDE SEATING6:00 PM
Design St. PeteDesign Stories: How the art of Bonsai can help your design practice6:30 PM
Tampa Bay Inventors Council – www.TampaBayInventors.orgTampa Bay Inventors Council – www.tbic.us bi-monthly Meetup6:30 PM
Tampa Writers AllianceTampa Writers Alliance Critique Group6:30 PM
Tampa Bay Business Networking Happy Hour/Meetings/Meet UpLutz /Land O Lakes /Odessa /Trinity Evening Networking Dinner All Welcome6:30 PM
Toastmasters District 48Carrollwood Toastmasters Meetings meet In-Person and Online7:00 PM
Central Florida AD&D (1st ed.) Grognards GuildNew Beginnings & Old Rivalries7:00 PM
Tampa – Sarasota – Venice Trivia & Quiz MeetupSmartphone Trivia Game Show at Wilders Pizza7:00 PM
Communication Skills for Interviews and LifeCommunication Practice and Improvement7:00 PM
Writers of Central Florida or ThereaboutsOrlando Word Lab7:00 PM
Ironhack Orlando – Tech Careers, Learning and NetworkingInterview Skills for Tech Career Success7:00 PM
Nerd Night OutGames & Grog – Party Games Social Night7:00 PM
Tampa Bay Bitcoin[In-Person] Tampa Bay Bitcoin Meetup: News, Markets, & Community7:00 PM
Women, Words and WineJuly Book Club Meeting :: A Murder in Music City7:00 PM
MakerFX MakerspaceMakerFX Makerspace Art Of Electronics Guild7:00 PM
Castaways Euchre ClubCastaways Euchre Club7:00 PM
Central Florida CitySecCitrusSec Meetup7:00 PM
Orlando Lady Developers MeetupCode challenge bi-weekly coding session8:00 PM
Thinkful TampaThinkful Webinar || Intro to HTML & CSS: Build Your Own Website9:00 PM – 10:30 PM EDT
Tampa / St Pete Business ConnectionsCarollwood Professionals Networking Lunch!11:30 PM
Tampa / St Pete Business ConnectionsBrandon Business Professionals IN Person!!!!11:30 PM

Thursday, July 28

GroupEvent NameTime
Pasco County Young Entrepreneurs/Business Owners All WelcomeHappy Hangar Early Bird Professionals Networking7:30 AM
Wesley Chapel, Trinity, New Tampa, Business ProfessionalsBusiness Over Breakfast ~ Happy Hangar IN PERSON JOIN US!7:30 AM
Young Professionals Networking JOIN in and Connect!Tampa Young Professionals Virtual Networking Thursday Morning All WElCOME7:30 AM
Professional Business Networking with RGAnetwork.netVirtual Networking Breakfast Thursday’s7:30 AM
Business Networking Weekly Meeting for Local ProfessionalsBusiness Networking for Local Professionals8:00 AM
Orlando Melrose MakersIn-Person: Makerspace Open Lab10:30 AM
Block Co-op – Bitcoin Crypto Blockchain OrlandoCrypto Set-up Class -Limited to 5 Seats Only11:00 AM
Young Professionals Networking JOIN in and Connect!The Founders Meeting where it all Began! JOIN us! Bring a guest and get a gift11:00 AM
Florida Startup: Idea to IPOHow to Cut Product Development Costs by up to 50%!11:00 AM
EmpireToday Networking BrunchEmpireToday Commercial Partners Brunch11:00 AM
Tampa / St Pete Business ConnectionsClearwater/Central Pinellas Networking Lunch11:00 AM
Tampa Bay Business Networking Happy Hour/Meetings/Meet UpPinellas County’s Largest Networking Lunch and your invited!11:00 AM
Business Game Changers GroupClearwater Professional Networking Lunch11:00 AM
Network Professionals Inc. of South Pinellas (NPI)NPI Power Lunch – Exchange Qualified Business Referrals11:30 AM
Pasco County Young Entrepreneurs/Business Owners All WelcomeWesley Chapel Professional Networking Lunch at Chuck Lager America’s Tavern11:30 AM
Tampa Bay Business Networking Meetings & MixersBrandon Networking Professionals Networking Lunch11:30 AM
Tampa Cybersecurity TrainingLunch & Learn: How to Beat the ATS12:00 PM
“Learn and Earn” Millionaire Mind Secrets & NetworkingOnline Zoom! Millionaire Mind Lunch; Book Club and Networking!12:00 PM
Tampa Bay Tech Career Advice ForumLunch & Learn: How to Beat the ATS12:00 PM
Thinkful TampaThinkful Webinar || What is UX/UI Design?12:00 PM – 1:30 PM EDT
StartUp XchangeStartup Strategy Office Hours2:30 PM
Tampa Bay Amazon Sellers E-commerce MeetupAmazon Sellers, How to Rank Higher & Get More Traffic using SmartScout (Webinar)3:00 PM
Free Video Production Classes – TV/InternetYouTube Basics (ONLINE CLASS) – FREE for Hillsborough County Residents3:00 PM
Explorations in PhilosophyIntroduction to Philosophy Ch.85:00 PM
Tampa – Sarasota – Venice Trivia & Quiz MeetupTrivia Night – Bunkers Bar of Sun City Center Smartphone Trivia Game Show5:00 PM
Network After Work Tampa – Networking EventsTampa at Hooch & Hive6:00 PM
Magic the Gathering Tampa/Brandon/St PeteNerdy Needs (Casual Thursday Commander Night)6:00 PM
St Pete Business ClubSt. Pete Beach Rooftop Networking After-Hours Event6:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!D&D Adventurers League at Critical Hit Games6:00 PM
Network After WorkNetwork After Work Tampa at Hooch & Hive6:00 PM – 8:00 PM EDT
Tampa HackerspacePhoenix Board Game Night6:00 PM
Tampa JPMorgan Chase & Co. Technology EventsJPMC Tampa Tech Diversity Networking Event (in person)6:00 PM
Orlando Board Gaming Weekly MeetupCentral Florida Board Gaming at The Collective6:00 PM
Tampa Bay Data Engineering GroupTBDEG – Architecture of Apache Iceberg with Alex Merced!6:00 PM
Brandon and Seffner area AD&D and Rifts (Palladium) Group1st ed AD&D Campaign.6:00 PM
Critical Hit GamesWarhammer Night6:00 PM
Tampa Business Club/Networking After HoursSt Pete Rooftop Networking After-Hours social6:00 PM
Black Orlando Tech (BOT)Intro to Web 36:00 PM
Tampa Bay Data Science GroupPyLadies/TBDSG: Customer Lifetime Value6:00 PM
TampaBay PyLadiesCustomer Lifetime Value with Python6:00 PM
Seasoned Entrepreneurs 40+Introductory Networking Event6:00 PM
Toastmasters District 48St Pete Beach Toastmasters In Person + Zoom Group: Improve Your Public Speaking!6:30 PM
Tampa Writers AllianceTampa Writers Alliance Poetry Group6:30 PM
Bradenton Photo GroupLight Basics – Working with Flash6:30 PM
Tampa Ybor Free Writing GroupWriting Meetup6:30 PM
Tampa Bay Technology CenterWordPress7:00 PM
3D Printing OrlandoIntermediate TinkerCAD 3D Design7:00 PM
Live streaming production and talentLive streaming production and talent7:00 PM
Tampa Hackerspace3D Printing Guild7:00 PM
Tampa Bay BitcoinBitcoin Social7:30 PM
Orlando Lady Developers MeetupCoding Challenges with Vanessa8:00 PM
Thinkful TampaThinkful Webinar || UX/UI Design: Wireframes and Prototypes9:00 PM – 10:30 PM EDT

Friday, July 29

GroupEvent NameTime
RGAnetwork.netInternational Professional Networking JOIN us to grow your businessSee event page
Winter Park Toastmasters – Learn while having FUN!Improve your communication, listening, and leadership skills7:15 AM
Agile OrlandoAgile in the Morning7:30 AM
Toastmasters District 48Trinity Odessa Toastmasters8:00 AM
Laid Back Leads GroupLaid Back Leads Group8:00 AM
Brandon Biz ProsBuild your Business with Brandon Biz Pros8:30 AM
Toastmasters District 48Real Talkers #73069:15 AM
Christian Professionals Network Tampa BayImprove Speaking Skills & Build Confidence9:25 AM
Tampa / St Pete Business ConnectionsInternational Professionals Networking Meeting11:30 AM
Professional Business Networking with RGAnetwork.netFriday International Business Introductions at McAllisters Westshore11:30 AM
Professional Business Networking with RGAnetwork.netIn PERSON Networking Lunch Sabal Park/Brandon Reserve your seat11:30 AM
Tampa / St Pete Business ConnectionsInternational Professionals Networking Meeting11:30 AM
Young Professionals Networking JOIN in and Connect!Friday Business Introductions JOIN us at Cafe Delanie All Welcome11:30 AM
Tampa Bay Business Networking Meetings & MixersFriday Business Introductions!11:30 AM
Tampa Bay Business Networking Happy Hour/Meetings/Meet UpInternational Networking Westshore McAlisters Deli11:30 AM
Tampa OtakuTampa Bay Comic Con 202212:00 PM
Thinkful TampaThinkful Webinar || Data Analytics: Tools of the Trade12:00 PM – 1:30 PM EDT
Traction REIA Tampa & SarasotaIN-PERSON * Traction Sarasota Networking Luncheon12:00 PM
United Way /Neighborhood Centers for FamiliesTECHquity: Coding With Disney STEMinar1:00 PM – 4:00 PM EDT
Learn-To-Trade Stocks – Online (As Seen on Orlando Sentinel)Monster Learn-To-Trade Stocks5:00 PM
Clermont Nerd GamesBoard Game Night!5:00 PM
Meeple Movers Gaming GroupLet’s Play Games ONLINE on Fridays!5:30 PM
Tampa Gaming GuildFriday Board Game Night5:30 PM
Toastmasters District 48MESSAGE CRAFTERS5:30 PM
Thoughtful WritingPhilosophy in Writing6:00 PM
Thinkful TampaThinkful Webinar || UX/UI Design: Creating A Design System6:00 PM – 7:30 PM EDT
Tampa Bay Gaming: RPG’s, Board Games & more!Board Game night at The Strange Realms in Carrollwood Friday, 6 PM6:00 PM
Critical Hit GamesMTG: Commander FNM6:00 PM
Orlando Adventurer’s GuildCanon’s Custom Campaign Moonsea Tour – DM Canon (Tier 3)7:00 PM
Learn-To-Trade Crypto – Online (As Seen on Orlando Sentinel)Learn-To-Trade Advanced Strategies (ONLINE & OFFICE)7:00 PM

Saturday, July 30

GroupEvent NameTime
VIP*NCCCCareer Event for University of South Florida StudentsSee event page
Doris Muller for NPI Westchase ChapterBusiness Networking Event for Local ProfessionalsSee event page
Central Florida Philosophy MeetupWake Up and Think Clearly Saturday morning share and discuss.7:00 AM
Toastmasters Division GEarly Bird Ocala8:00 AM
Cryptocurrency/Blockchain Education – Palm HarborCrypto over Coffee8:45 AM
Florida Center for Creative PhotographyFREE – Learn Your Camera Series, part 3 — ISO & Exposure9:00 AM
Tampa HackerspaceSteel TIG Welding Safety and Basic Usage (Members Only)9:00 AM
Gen GeekBubble Run Scheduled ( same venue new date)9:00 AM
Saint Petersburg Introverts Socializing (Ages 25-40)Tampa Bay Comic Con9:30 AM
Gen GeekTampa Comic Convention9:30 AM
Chess RepublicCoffee & Chess: Tampa Midtown9:30 AM
Critical Hit GamesFlames of War Christmas in July Tournament10:00 AM
Orlando Lady Developers MeetupCode with me – learning sessions weekly on Saturdays10:00 AM
Toastmasters Division EKeynotes and More Advanced Toastmasters Fifth Saturday Meeting10:30 AM
Orlando Melrose MakersIn-Person: Makerspace Open Lab10:30 AM
Geekocracy!Tampa Comic Con10:30 AM
Oviedo Middle Aged Gamers (OMAG)Bravo Group Campaign Continues11:00 AM
Thinkful TampaThinkful Webinar || Learn Data Analytics With Thinkful12:00 PM – 1:30 PM EDT
Lithia Chess Meetup Group(Chess in the Park) Chess at Park Square Plaza12:00 PM
Dungeons and Dragons 5e – Beginners Meetup GroupThe Lost Mines Campaign-Limited Space12:00 PM
The Maker Team – Plant CityRegular Monthly Meetup1:00 PM
Suncoast MakersFREE Fab Lab Orientation1:00 PM
Casual Scrabble PlayAnyone up for Scrabble?2:00 PM
Socrates Cafe – “The unexamined life is not worth living”ONLINE: “Adam Smith & The Wealth of Nations” Part 33:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!Saturday MTG Draft at Hammerfall Games and Collectibles3:00 PM
Tampa Bay TabletoppersGame Day!4:00 PM
Lithia Dungeons & Dragons And Gaming GuildRIFTs (Palladium Games)6:00 PM
Thinkful TampaThinkful Webinar || Data Science vs. Data Analytics6:00 PM – 7:30 PM EDT
Brandon and Seffner area AD&D and Rifts (Palladium) GroupRifts6:00 PM
Nerdbrew EventsCommunity Hang-out Night7:00 PM
Nerd Night OutNB Community Hang-out Night!7:00 PM
Florida Gulf Coast Chapter of Sisters in Crime“Who Killed the Circus Queen?” Murder Mystery Trolley Tour FLGC Special Event7:30 PM
Central Florida AD&D (1st ed.) Grognards GuildTHE ONE-SHOT GUILD8:00 PM
Thinkful TampaThinkful Webinar || Intro To Data Analytics: Tableau Basics9:00 PM – 10:30 PM EDT

Sunday, July 31

GroupEvent NameTime
Kat Usop, MSHIMINDSHOP™| AI FOR ALLSee event page
Florida Center for Creative PhotographyFree – Adobe Lightroom Classic CC Class9:00 AM
Toastmasters District 48Clearwater Sunday Speakers Toastmasters Club9:30 AM
Board Games and Card Games in Sarasota & BradentonGames at Descent Into Gaming12:00 PM
Thinkful TampaThinkful Webinar || Free Crash Course: JavaScript Fundamentals12:00 PM – 1:30 PM EDT
Drunk’n Meeples West PascoWeekend Game Day2:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!D&D Adventurers League at Critical Hit Games2:00 PM
Critical Hit GamesD&D Adventurers League2:00 PM
The Historical History Book ClubBook Discussion: The Time in Between by Maria Duenas5:30 PM
Orlando Adventurer’s GuildJuly New Player Nights – Various DMs (Tier 1: Level 1-4)6:00 PM
Lithia Dungeons & Dragons And Gaming Guild5E (ish) AD&D – Humble Beginnings Campaign (Trouble in Elm).6:00 PM
Thinkful TampaThinkful Webinar || Enhancing Your Career With Mindfulness6:00 PM – 7:30 PM EDT
Nerdbrew EventsHidden Gems Night, Presented by A Duck!7:00 PM
Solana – TampaOffice Hours8:00 PM
Nerd Night OutNerdBrew Karaoke @ MacDinton’s!8:00 PM
Thinkful TampaThinkful Webinar || UX/UI Design: Designing A UX Case Study9:00 PM – 10:30 PM EDT

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
Entrepreneur How To

Hackathon protips for StartupBus 2022

Banner: “StartupBus 2022: Hackathon Protips”

StartupBus 2022 happens in less than a week! For the benefit of the people who’ll be participating in this mobile hackathon — as well as those who are still thinking about signing up (it’s not too late!), here are some protips that you might find handy.

Nick Singh’s Win Hackathons in 2022: A Step-by-Step Guide

Banner: “Win Hackathons: A How-To Guide”

Nick Singh, a developer on Facebook’s Growth team, author of Ace the Data Science Interview and Ace the Data Job Hunt, and creator of a monthly tech career newsletter, recently wrote a decent-size guide on winning hackathons — Win Hackathons in 2022: A Step-by-Step Guide — and it’s good.

If you read only one guide for winning hackathons, read this one. Among his tips:

  • The demo should be the center of your project. Your pitch should revolve around the demo, and the demo should be captivating.
  • Don’t do “design by committee.” As Nick puts it: “You want to tackle an idea when—and only when—at least one person is a true believer. Going with everybody’s second favorite idea is disheartening and ultimately dangerous.”
  • Stick with tools you know well and can rely on. You’re under a lot of time pressure on StartupBus, and there are a number of “unknown unknowns” you’ll have to contend with. These challenges will be much worse if you’re using StartupBus as an opportunity to try out new tools — you’ll be climbing up a learning curve while trying to get an application running under tricky conditions.
  • Ship the MVP. “MVP” in this case means “Minimum Viable Product,” a product that does just enough for customers to be willing to pay for it. Stick to the main functionality, avoid adding unnecessary features, run it locally on your computer if you can, skip or use smiulate login if you can do that, and so on.

How to win $60,000 in a Web 3.0 Hackathon

StartupBus Florida will provide some utilities and other goodies for anyone who wants to work on a Web 3.0 project. I personally think that Web 3.0 is still a lot of snake oil and NFTs are basically FourSquare mayorships for JPEGs, but others on the team think that it’s the hottest thing of the moment, and I’m here to support StartupBus projects. I leave it to the buspreneurs and readers to make their own call.

With that in mind, the YouTube channel Dapp University has a video covering strategies for getting the most out of a Web 3.0 hackathon, a good number of which are applicable to hackathons in general.

How to Win ANY Hackathon — Everything You Need to Know

Need a “how to win a hackathon” video that’s a little less crypto-bro-y? Maria Sikovets’ video is for you.

How to win a hackathon? 12-step recipe from Apptension

Apptension, a software development consultancy based in Poland, has a 12-step recipe for winning hackathons, both virtual and in-person.

Among their tips:

  • Map out your project. “Before you start coding, gather your team and walk them through the product you’re making so that everyone gets it 100%.”
  • Think like a judge. Remember, the winner is determined by a panel of judges, who”ll judge startups based on the pitches.
  • Get some sleep. Sleep deprivation ruins your judgement, and a lot of hackathon activity is making judgement calls.

9 Ways to Win a Hackathon… Without Coming in First Place

I was a buspreneur on StartupBus Florida 2019, and our team made it all the way to the finals and was the first runner-up. We didn’t come in first place, but we won in different ways. For me, doing well in StartupBus gave me a great resume item that most people didn’t have, and that helped me land my last two jobs.

There are all sorts of ways to win StartupBus, even if you don’t come in first place, and even if you don’t make it to the finals or even the seminfinals. This article points out different ways of viewing success at StatupBus. Check it out!

Everything you need to know to win StartupBus is in this podcast

Gimlet Media’s Startup podcast sent a reporter to join the New York City StartupBus for the 2017 event, and the result was a five-part series that tells the story of the buspreneurs on that bus.

Before going on StartupBus 2019, I listened to this podcast in its entirety — twice — to get a better feel for what the experience would be like and to try to glean insights into what would give me and my team better odds of winning.

I wrote a five-part series called Everything you need to know to win StartupBus is in this podcast, where I share notes on every episode of the podcast series. Check it out, and learn!

Categories
Humor

With great client project comes great responsibility

We’ve all been there.

Categories
Editorial

The U.S. needs more green card holders and immigrants to stay ahead

Graphic: “Immigrants: We get the job done.”

“To sustain the United States’ technology leadership in the face of China’s formidable economic and military challenge,” write Graham Allison, a professor of government at the Harvard Kennedy School and Eric Schmidt, former CEO and executive chairman of Google in Foreign Policy, “U.S. President Joe Biden should launch an urgent drive to recruit and retain 1 million tech superstars from around the world by the end of his first term in office.”

For the want of a green card (or: How the 5G story could’ve been very different)

Graphic: 5G phone network.

Their article, The U.S. Needs a Million Talents Program to Retain Technology Leadership, starts with a story about one key player we lost in our failure to take in new people.

In 2009, Erdal Arikan, a Turkish graduate of the California Institute of Technology and MIT published a paper that solved a big information theory problem. He could’ve continued his work in the U.S., but he had to leave because he couldn’t get an academic appointment or sponsorship to stay. He returned to Turkey, turned to China, and Huawei — yes, that Huawei — used his work to create 5G solutions.

The article sums us the situation like so:

And while Huawei has produced one-third of the 5G infrastructure now operating around the world, the United States does not have a single major company competing in this race. Had the United States been able to retain Arikan—simply by allowing him to stay in the country instead of making his visa contingent on immediately finding a sponsor for his work—this history might well have been different.

And with the recent discovery that Huawei equipment installed as part of U.S. communications infrastructure could have a secondary purpose disrupting nuclear arsenal communications, the magnitude of our failure to let Arikan stay in the country has become even more apparent.

It’s the space race all over again

Photo: Time Magazine cover — “Race for the Moon,” featuring an American and Russian astronaut in spacesuits running towards the moon.

China’s leader Xi Jinping said it himself: “technological innovation has become the main battleground of the global playing field, and competition for tech dominance will grow unprecedentedly fierce.”

In 2001, China was still behind technologically. But in the space of only a couple of decades, they’ve leapfrogged the West in communications, facial and voice recognition, other aspects of AI, and green technology, and their education system is producing four times the STEM bachelor’s degrees and twice as many graduate degrees.

Their insularity remains their Achilles’ heel. They naturalize fewer than 100 citizens a year, while the U.S. does so with 1 million a year. That’s a difference of four orders of magnitude.

And what a difference it makes! Half of all U.S. unicorns were founded or co-founded by immigrants, and there are so many big-ass, big-deal companies founded or run by people born outside the U.S.:

Big-ass companyFounder or leaderWhere they were born
Auth0Eugenio Pace, founderArgentina
CloudflareMichelle Zatlyn, founderCanada
Credit KarmaKenneth Lin, founderChina
CrowdstrikeDmitri Alperovitch, founderRussia
DatabricksAli Ghodsi, founderIran
DiscordStanislav Vishnevsky, founderUkraine
EventbriteRenaud Visage, founderFrance
EvernoteStepan Pachikov, founderAzerbaijan
GoogleSergei Brin, founderRussia
GoogleSundar Pinchai, CEOIndia
InstacartApoorva Mehta, founderIndia
InstacartFidji Simo, CEOFrance
MicrosoftSatya Nadella, CEOIndia
NvidiaJensen Huang, founderTaiwan
PalantirPeter Thiel, founderGermany
PelotonYony FengChina
RobinhoodVlad Tenev, founderBulgaria
SlackStewart Butterfield, cofounderCanada
SpaceX, TeslaElon Musk, CEOSouth Africa
SprinklrRagy Thomas, founderIndia
StripePatrick and John Collison, foundersIreland
UberGarrett Camp, founderCanada
Warby ParkerDavid GilboaSweden
ZoomEric YuanChina
ZscalerJay CaudhryIndia

I deliberately included German-born Peter Thiel in the list particularly because he spends a lot of time canoodling with the anti-immigrant crowd. He’s one of those people who says “Ever since my family came to this country, we’ve had nothing but trouble from the immigrants.”

Let’s also not forget that Apple founder Steve Jobs was the son of a Syrian immigrant, and that there are many children of immigrants who’ve contributed so much.

“It’s time for the United States to poach with purpose.”

Photo: Smartphone displaying picture of “help wanted” sign.

That’s what Allison and Schmidt write, and what they mean is that the U.S. should:

  • Grant an additional quarter million green cards every year.
  • Eliminate the rule that limits the percentage of green cards issued to citizens of any single country to 7%.
  • Move the immigration system from its current paper forms-based process to a digital one, which has caused more than 300,000 green cards to be lost.
  • Grant 100,000 additional visas to extraordinary tech talents. You know, like the one Melania Trump got, but give them to people who actually merit them.
  • Adjust the criteria for visas so that people qualify based on their technological expertise.
  • Direct the Labor Department to make recruiting STEM talent a top priority.

…and most importantly:

  • Dismantle the Trump administration rules whose goal was to reduce legal immigration to the U.S.

There’s more in the article, and I strongly encourage you to read it.

And hey, if you’re in Tampa Bay and looking for an example of a highly-skilled green card holder who’s making a difference, let me point you to the handsome well-dressed gentleman in the photo below:

Joey deVilla eats a burger -- that most American of dishes -- after successfully acquiring a green card.
Celebrating my green card status the American way at Burger 21, on January 26, 2017.

Don’t let my accent, grasp of the culture, or accordion skill fool you — I’m a first-generation green card holder from the Philippines, and I’m here to make a difference in the tech world, locally and nationally.

(If you’re really curious, check out my article about my green card interview, which took place a week after the Trump inauguration.)