Author: Dave Strickler

  • Avoid overlapping AP channels

    When building a Unifi network with APs, it’s tempting to find an open channel, free from neighboring networks, and put all your APs on that same channel, but that would be a mistake.

    Channel frequencies are, at their core, radio signals on a certain frequency. If you put to APs close enough that their radio signal can be seen by a device like a laptop, that device will jump between them endlessly. From the device’s standpoint, it sees radio signals coming from both directions, with the same SSID, and neither AP backing down – each one demands “Connect to me” over and over. The result is your device see WiFi as “unstable”, and to be sure, it is.

    A better way to do this is to look at the frequencies and pick two that, if they are seen by the same device at the same time, at least are on different frequencies. At this point, the device is still confused, but it does see two different APs – progress.

    Better still, use a minimum RSSI value to allow “hopping”. This allows the signals to overlap with different frequencies, as stated above, but now at a minimal RSSI level – typically about 70- 75 dB. Let’s say you set each AP’s minimum connection threshold to 70 dB. By taking your laptop and moving from room to room, you should move farther away from one AP (its signal value will go up in dB as it weakens), and you’ll also move closer to the other AP (its signal value will go down as it gets stronger). Somewhere in this journey, your laptop will say “I have a signal of 65db from one AP and an 85 dB from another,” and it will choose the AP with the lower dB value. This is how your laptop knows to “hop” from one AP to another. It sees one as weakening and the other getting stronger, and “hops” to the stronger AP.

    But how do you know what dB level to set the AP at? Trial and error? A good gut feel for networks? That used to work: a notebook, lots of pencil scratching, and some math. Or you can use Claude, my preferred method. Let it do the math for you, and it will tell you what to set your RSSI values to. But don’t expect it to spit out numbers instantly. It will need you to move from room to room, run some tests in each room, adjust your APs, and rinse and repeat. This is a process, but it can tune your network as well as (maybe better) than a professional network installer.

    So, in summary, don’t let the AP channel frequencies overlap unless they are well out of range of each other, and if the APs are close enough that their signals overlap, use Claude to help you adjust the RSSI values.

  • Meshing with Unifi networks

    When setting up a Unifi network, especially if it’s at home or somewhere that’s not commercially wired, it’s pretty common to run into a room where you just can’t get a good signal from the nearest wired Unifi AP. The logical next step it to put a new Unifi AP in between this room and the nearest wired Unifi AP, and configure it as a “Child” in a mesh network, also know as a repeater.

    Now, while that often magically works the first time you do it, you may be tempted to start dropping in meshed APs all over, but that would be a big mistake. To understand why, you need to back up a little and understand how UniFi’s Mesh technology works, which is similar to other manufacturers.

    Let’s use the simple example above: a wired AP and a mesh AP, connected to the wired AP via WiFi itself. While this works well, you will notice that connecting to the mesh AP gives slower throughput because your network packets are handed off through the wired AP, and the negotiation overhead translates to roughly 50-75% slower throughput. Also, each time you connect a meshed AP to a wired AP, the wired AP needs to stop and send data to the meshed AP. While this is fast, if more than one meshed AP is connected to the same wired AP, it will slow down everyone’s throughput to the wired AP.

    Think of of this way: a mesh AP with a single radio doing both jobs has to receive each packet from its parent over the air, then retransmit it to you over the air — same radio, same channel. Every bit crosses the airwaves twice, so the radio’s airtime is split between backhaul and serving you.

    Now a smart engineer would design around this with multiple radios, but that would also need some serious CPU power to handle this. Luckily, these units are on the market, although they’re not expensive.

    If you can’t get one of these new multi-radio APs, you should consider UniFi’s “AC-LR” AP. The “LR” stands for long range, and through some beam-forming tricks, they focus the same radio signal into a cone shape to achieve a stronger signal over a longer range. Think of it like yelling through a megaphone; same yell, but it sounds louder. While the spec says 600 feet outdoors, my experience has been closer to 300 feet outdoors, and 150 feet indoors. Now think about 150 feet inside a residential house – that’s a long way. I recently put an AC-LR in a loft in my house that had no other way of connecting an AP. While the throughput was only about 30-60Mb/s when connecting to this AC-LR in mesh mode, that’s plenty fast for a video call.

    In summary, don’t put any more than a single meshed AP attached to each wired AP, and try to use a new model with multiple radios. If you can’t find one of those, then look into an AC-LR.

  • Why use findthetime.app ?

    I used to use Calendly, and as a paid user, I was pretty happy with it. It worked, but one evening I thought I could create a system that would be easier to use, cheaper, and I could add features as fast as I could think of them.

    And thus, findthetime.app was born.

    At its core, it fixes a familiar problem. It allows anyone with your private calendar link to book an appointment with you. You can link it to your Google, Microsoft, or iCloud calendars, and it has features like creating buffers on either side of a meeting so you don’t have back-to-back meetings, and your day stays sane.

    And it’s only $3/month. Even cheaper if you ask Support nicely for a coupon.

    I didn’t create this to make money. I created it to help people, like me, handle scheduling issues.

    So give it a try at https://findthetime.app and see if it works for you. If you’d like any features added or have general questions, email support@findthetime.app, and I’ll get back to you quickly.

  • AI Can’t Design Code

    AI is everywhere today, but for people who want to create an application, where is it really helping?

    As a person who codes, I can’t imagine any coder not using it, just as I can’t imagine typing a text without auto-complete. For a non-coder, AI can build a prototype for you if you carefully know how to ask it.

    But will it replace coders today? No, but it will shift the way we think of them.

    Currently, AI makes it easier to create basic code, the code that creates an application menu or a form to accept data. The list of what AI can code is long, and it’s getting longer every day.

    The nuance of an application’s requirements has become much more important than the task of building it.

    But if you think coding is simply a series of tasks to complete, you’re missing the difference between a mechanical engineer and a 3D printer. Humans envision the design and the interaction with an object, and the 3D printer just builds it. AI can be used as a tool for building applications, but it’s just that—a tool for building, not an architect.

    Today’s AI lacks higher-level tasks such as architecture—the application’s overall design. The nuance of an application has become much more important than the task of building it. While AI will get better at this, its overall design today is to regurgitate patterns that humans have already used, not to think of a clever new way of doing things. For the moment, that’s the exclusive domain of humans.

    In the near future, I see the market for a coder who can only “code” shrinking. But for application architects and designers, the market is already exploding. They are becoming the “Prompt Engineers” of our future. They’ll be good at coaxing AI to build what they envision.

    So when you hear, “AI will eliminate coders!”, that’s a gross generalization. A better explanation is that it will alter how coders do their work, recasting them as deep thinkers of the problems presented to them. They will spend more time designing at the whiteboard and less time coding at the keyboard.

    After all, what is an application but a representation of what it’s architected to do?

     

  • Monitoring PlanetScale from Zabbix v7.x

    PlanetScale is a hosted MySQL database SaaS, and while it’s got great uptime, you should be monitoring it for metrics if nothing else. While PlanetScale offers lots of features beyond your average MySQL install, monitoring it is surprisingly the same.
    (more…)

  • Laravel

    I’ve been coding in PHP for a few decades, mostly using the CodeIgnitor, which I have grown to love. But today, I’m breaking from the old ways and adopting a framework that’s been on the rise for many years: Laravel.

    Ironically, I’ve layered on many of the basic features of Laravel over CodeIgnitor as I extended CodeIgnitor’s framework for my use. Not as clean, not as well architected, but the basics were there. But seeing Laravel’s implementation made me realize how mine paled in comparison.

    If you’re considering switching, I’ll advise you that its design is “opinionated”. This means there are rules, like keeping a Model (it’s an MVC framework) filename singular but the database table plural. While you can override things like this if you follow their conventions, things, as Steve Jobs used to say, “Just Work.” For instance, is that example my Model is almost empty. There’s the shell of a class but nothing else. Yet I can go into a controller,  reference the Model, and query the database, even though the Model looks unfinished.

    The “opinionated” nature of Laravel makes it very quick to code, but (and here’s the catch) you need to learn its conventions. Following these conventions allows all kinds of magic to happen in the background and allows for less code that’s easier to read, which is a win for both the programmer and the next person who has to read their code.

    Add in the incredible ecosystem of packages that extend Laravel, and you’ll find this like writing CRUD for a table more of configuring, and less of coding. While its list of packages is growing, I’ve only once found something I needed that wasn’t already coded and free or reasonably priced. I’ll discuss a few of of this in another Post.

  • Running Engineering in a Vacuum

    Wouldn’t it be great if you could be in a section of an office, surrounded by intelligent people, working on projects that really mattered to you personally, and never having to interact with the rest of the company? I know a lot of people who would consider that a dream job. I would hate it.

    Don’t get me wrong, as an engineer, the first few days would be delightful. Lots of interesting conversations over coffee. Working on engineering projects that are just purely interesting, regardless of how they fit into the company. That sounds fun – for a bit.

    And there’s the rub. Within a few days, I’d start asking myself, “Why am I working on this?”. “What is it accomplishing, and where does it fit into the company’s goals?”. I shouldn’t live in a vacuum, nor should my engineering team.

    How about we take a better approach? One that starts to ask those salespeople, “What does the customer want?”. One that starts to ask accounting if I have a budget and asks HR how hard it would be if I needed to staff up. And how about asking the CEO what goals they’re trying to accomplish? You can learn a lot if you just ask.

    Somewhere along the line, we’ve forgotten that we need to accomplish the company’s goals – not ours. If you’re running your engineering team in a vacuum, it’s not good for the company, and it’s probably not good for your career.

  • Getting the Weather via an API the Easy Way

    If you’re coding and need to find the local weather, there are a lot of places you can go to get it. Most are complex and require you to create an account, and generally don’t offer much.

    If you’re looking for one that’s simple and based on GPS, try https://api.pulsewise.com/environment/weather/42.3388/-71.0726 , which is free for the first 1,000 calls per month and includes sunrise and sunset, too. Just swap the latitude & longitude coordinates for your own latitude & longitude, or if you leave them off, it will use your browser’s coordinates.

    This is just part of a set of tools I wrote at https://pulsewise.com or see the documentation.

    Its output is in standard JSON, and looks like this:

    {
    “success”: true,
    “timestamp_utc”: “2023-10-16 20:25:30”,
    “summary”: “Clouds”,
    “description”: “Broken clouds”,
    “temperature_current”: 56.68,
    “temperature_min”: 53.22,
    “temperature_max”: 59.11,
    “feels_like”: 55.53,
    “pressure”: 1003,
    “humidity”: 74,
    “wind_speed”: 5.75,
    “wind_direction”: 120,
    “wind_gust”: null,
    “sunrise”: 1697453864,
    “sunset”: 1697493703,
    “lattitude”: “42.33880000”,
    “longitude”: “-71.07260000”
    }

  • Letting a Customer Out of Their Contract

    I’ve run a few companies over the years, and one inevitably wants out of contact with you. Maybe they’re going out of business, or their business has changed and they no longer need your services. To make this decision, you need to weigh some data:

    • What is the value of the contract they want out of compared to your entire customer revenue stream? A small percentage or a large one?
    • What are the circumstances of their situation? Are they going out of business (inevitable) or just wanting a new vendor?
    • Are you ready to ruin the relationship with the people at that company if you insist they pay?
    • Will the outlay to collect the money (lawyers and collection agencies) be worth the value of their contract?

    The idea here is to look at the bigger picture. Sure, collecting revenue from a customer on a signed contract seems like your legal right, but what is the bigger picture? If you insist on it, it will create friction and a rift. Are these people you’re dealing with going to go to other places and have a permanent memory of your inability to work with them on this issue? Or will you be a reasonable vendor – someone they’d like to do business with again at their new job?

    Transactions create memories. The good ones can be memorable and often result in further business. The bad ones create memories that are hashed over and over, spreading the bad outcome. What kind of memory do you want to create?

  • Everything you could possibly want to know about Internet Email – Part 1

    In this series of posts, I’m going to share what I know about email. Over the last 20 years, I’ve learned to set up, diagnose, and do just about everything with email that you can imagine at any scale. In this series, I’ll be talking about email over the Internet, which uses protocols like SMTP and IMAP. I won’t be talking about the inner workings of commercial email software like Exchange.

    Understanding how email is sent
    As mentioned above, email works with a few protocols, and the one used to send email is SMTP. The idea here is the sender’s email is converted into a string of characters and is passed to an SMTP Gateway, typically at an ISP. This gateway receives this email transmission and relays it to its recipient, typically the receiver’s SMTP gateway. This hot-potato-relay idea allows SMTP gateways to forward an email to its next “hop” along the way. While you may think of an email being sent from me to you directly, it really takes a few hops before it reaches you. This is often why sometimes email arrives quickly, and sometimes it takes a few minutes. Email, by its design, is asynchronous.

    What happens when a gateway is down
    Email gateways are really just pieces of software that run on a server, listen for inbound connections, and forward an email to another gateway. And, like other pieces of software, they can go offline for any number of reasons. When they do, they’re unable to send or receive email, causing the delays you sometimes experience. The good news is that the SMTP protocol was designed to be resilient to servers going offline. So, if an SMTP gateway tries to send to another SMTP gateway, and the receiving gateway is offline, the sending gateway will pause and then try and resend the email. How long it will pause and how long it will keep trying are configurable by the person managing the SMTP gateway. Typically, the pause is about a minute, and the gateway will keep retrying for three days. If the sending SMTP gateway gives up sending the email after its predetermined time, the email is returned to its original sender. This is known as a “bounceback”, and has a numeric code associated with it that’s typically in the 500-600 range. I’ll explain these “result codes” in another post.

    Part 2 of this series will include more.