Atlantic Business Technologies, Inc.

Author: Doug Eubanks

  • When You’re Fortunate Enough to Work with Your Closest Friends

    Fifteen years ago, I started my journey at Atlantic BT as a Senior Systems Engineer. Over time, I took on the role of IT Manager—but titles have never been what kept me here. What’s kept me grounded, motivated, and thankful every single day is something much rarer than job satisfaction: friendship.

    Many people draw a clear line between their work relationships and their personal lives. For some, that boundary is essential. But for me, Atlantic BT became something different. Here, I found not just coworkers, but some of the closest friends I’ve ever had. I don’t know if it’s because making friends has always been a little hard for me, or if it’s because of the shared passions and projects that bring us together. Maybe it’s the joy of connecting with people outside my typical age group or social circle. Whatever the reason, I consider myself incredibly fortunate to have built genuine friendships within these walls.

    But with that blessing comes a bittersweet truth—when friends move on, change careers, or when we lose someone dear, it hits differently.

    This week, we suffered a profound loss. My friend Jennifer passed away unexpectedly. And while my heart aches, I also want to celebrate who she was and what she meant to me—and to so many others.

    Jennifer started as our Administrative Assistant and Office Manager. She was usually the first person I saw each morning, always ready with a smile and a warm greeting that somehow made the day feel brighter, no matter what was ahead. We’d often grab lunch together, share stories about life, talk about our challenges, and even open up about our faith. There was a depth to those conversations that left a mark on me.

    I’ll never forget her dedication to causes she believed in. One year, she joined a flag football fundraiser for Alzheimer’s research called Blondes Vs. Brunettes. She threw her whole heart into it. I proudly sponsored her that year, not just because I cared about the cause, but because I was inspired by her passion. She gave me a t-shirt from that fundraiser, and I still hold onto it like a little reminder of her light.

    Jennifer also had a drive to grow beyond her role. She began learning front-end development and worked hard to gain the skills she needed. And she did it—she grew into the role she aspired to, with determination and humility.

    One memory that sticks with me, and still makes me smile, is when I was planning to propose to my (now) wife. Jennifer, always thoughtful, found out where and when it was happening, and she and another friend secretly showed up—just to snap pictures of the moment for us. That’s the kind of person she was. She cared, deeply, and she showed up for the people in her life in big and small ways.

    Losing Jennifer has left a hole—not just in our company, but in our hearts. She was a blessing to know, and I’m forever thankful to have called her my friend.

    If there’s anything this week has reminded me of, it’s how lucky I’ve been to work somewhere where friendship runs this deep. Jennifer’s legacy is a reminder to cherish those bonds, to be kind, and to celebrate the people who make our days brighter just by being in them.

    Rest well, Jennifer. You were one of the great ones, and you are so very missed.

  • Optimizing The Events Calendar Plugin in WordPress: Resolving High CPU Usage During Query Execution

    Optimizing The Events Calendar Plugin in WordPress: Resolving High CPU Usage During Query Execution

    Recently, we encountered an issue while upgrading a client’s WordPress site that utilizes The Events Calendar plugin from theeventscalendar.com. The upgrade caused a significant spike in database CPU usage, leading to severe performance degradation and eventual downtime. The site would become unresponsive within 1 to 12 hours post-deployment, forcing us to revert to the previous version.

    Identifying the Issue: A Slow Query

    After investigation, we isolated the problem to a specific SQL query that was being executed repeatedly:

    SELECT SQL_CALC_FOUND_ROWS wp_4_posts.ID, CAST(wp_4_tec_occurrences.start_date_utc AS DATETIME) AS event_date_utc
    FROM wp_4_posts
    LEFT JOIN wp_4_term_relationships ON (wp_4_posts.ID = wp_4_term_relationships.object_id)
    LEFT JOIN wp_4_term_relationships AS tt1 ON (wp_4_posts.ID = tt1.object_id)
    LEFT JOIN wp_4_term_relationships AS tt2 ON (wp_4_posts.ID = tt2.object_id)
    LEFT JOIN wp_4_term_relationships AS tt3 ON (wp_4_posts.ID = tt3.object_id)
    LEFT JOIN wp_4_term_relationships AS tt4 ON (wp_4_posts.ID = tt4.object_id)
    LEFT JOIN wp_4_term_relationships AS tt5 ON (wp_4_posts.ID = tt5.object_id)
    LEFT JOIN wp_4_term_relationships AS tt6 ON (wp_4_posts.ID = tt6.object_id)
    JOIN wp_4_tec_occurrences ON wp_4_posts.ID = wp_4_tec_occurrences.post_id
    WHERE 1=1
    AND (
    (
    wp_4_term_relationships.term_taxonomy_id IN (147,148,149,150,96)
    AND tt1.term_taxonomy_id IN (147,148,149,150,96)
    AND tt2.term_taxonomy_id IN (147,148,149,150,96)
    AND tt3.term_taxonomy_id IN (147,148,149,150,96)
    AND tt4.term_taxonomy_id IN (147,148,149,150,96)
    AND tt5.term_taxonomy_id IN (147,148,149,150,96)
    AND tt6.term_taxonomy_id IN (147,148,149,150,96)
    )
    )
    AND CAST(wp_4_tec_occurrences.start_date_utc AS DATETIME) > '2024-06-24 03:59:59'
    AND wp_4_posts.post_type = 'tribe_events'
    AND wp_4_posts.post_status = 'publish'
    GROUP BY wp_4_tec_occurrences.occurrence_id
    ORDER BY wp_4_tec_occurrences.start_date_utc ASC, wp_4_posts.post_date ASC
    LIMIT 0, 1;

    Each execution of this query was taking over 23 seconds, leading to a bottleneck that caused the CPU to max out at 100%. Clearly, this query needed optimization.

    Investigating the Query: EXPLAIN Command to the Rescue

    To better understand what was causing the delay, we turned to MySQL’s EXPLAIN command. By analyzing the query execution plan, we could pinpoint inefficiencies related to the joins and groupings, particularly involving the wp_4_term_relationships and wp_4_tec_occurrences tables.

    We found that key indexes were either missing or not being utilized optimally. The absence of appropriate indexing on columns like object_id, term_taxonomy_id, and post_id meant that the database had to scan entire tables repeatedly—leading to high CPU usage and slow response times.

    The Fix: Adding Indexes

    To resolve the issue, we added three specific indexes. These were designed to speed up the joins and comparisons that were bogging down the query:

    CREATE INDEX idx_wp_4_posts_id ON wp_4_posts (ID);
    CREATE INDEX idx_wp_4_term_relationships ON wp_4_term_relationships (object_id, term_taxonomy_id);
    CREATE INDEX idx_wp_4_tec_occurrences ON wp_4_tec_occurrences (post_id, start_date_utc);

    By introducing these indexes, we were able to reduce the query execution time from 23 seconds down to just 1.3 seconds—a significant performance boost.

    Monitoring the Results

    To ensure everything was working smoothly in production, we continuously monitored our query performance using the following command:

    SHOW FULL PROCESSLIST;

    This allowed us to track the running queries and verify that our optimization was successful. The CPU usage stabilized, and the site performance returned to normal without further issues.

    Conclusion: Indexing Matters

    If you’re running into similar performance issues after upgrading The Events Calendar plugin or any other database-intensive WordPress plugin, we recommend analyzing your queries using EXPLAIN and considering appropriate indexing. Note that your table names might differ depending on your WordPress setup, so adjust accordingly.

    Optimizing database performance can be tricky, but with the right tools and approach, even complex queries can be tuned for efficiency.

  • Why Atlantic BT switched to our own shared cloud hosting.

    Why Atlantic BT switched to our own shared cloud hosting.

    Each business requires a unique hosting infrastructure to suit their needs. At Atlantic BT, we’ve seen many issues arise when businesses choose the wrong solution. They frequently come to us to help them minimize costs, recover from a security breach, or prevent future threats.

    We’ve customized two primary hosting options to serve clients: shared cloud hosting and AWS. While many people believe that shared hosting is only meant for small businesses, we find it is a good option for any company that doesn’t have specialized requirements.

    In fact, our shared hosting is so trustworthy, we recently migrated our own website from AWS to shared hosting.

    What value will I recognize from shared cloud hosting?

    Shared clouds are affordable and, when set up correctly, provide businesses with the security and performance needed to run smoothly.

    Atlantic BT uses LightSpeed Web Server and has built a custom infrastructure on Liquid Web. We limit servers to 30 websites, reducing risks of outages.

    While some people are hesitant to start out with shared hosting as they anticipate rapid growth, it’s fairly simple for our team to switch over to AWS. You could save some money by starting out with a shared option.

    What happened when Atlantic BT switched to shared hosting?

    We took some time to reevaluate our hosting setup with two primary goals in mind: reduce costs and boost performance. Initially, we were using a standard LAMP setup in AWS, paying $650 month.

    Switching from Apache to LiteSpeed Web Server gave us some immediate benefits with performance. This proprietary web server software is a popular choice, built with modern architecture in mind. Google recommends using modern web hosting software that supports newer optimized protocols, like LiteSpeed. For this reason, implementing LiteSpeed can also give you some SEO benefits.

    Combining LiteSpeed with our shared hosting platform meant that Atlantic BT reduced monthly costs by over 80% and page load from 4.1 to 1.8 seconds.

    When should you use AWS vs. shared hosting?

    In most situations, shared cloud hosting will be sufficient for your business. AWS is essential for businesses with the following requirements:

    • Regulatory compliance: For example, Healthcare of Financial businesses must be HIPAA and FISMA compliant.
    • Large need for scaling and load balancing: If your business has large surges of traffic compared your normal traffic, you may benefit from AWS.
    • Custom environments: If you need a custom environment to support custom languages, libraries, architectures, or the ability to scale; AWS is a good option. However, these custom environments are more expensive and may require more time to manage.

    Use our checklist for evaluating shared hosting providers.

    Shared hosting can be a great option when set up correctly. When evaluating providers, be sure to ask the following questions:

    1. How many websites are on a server? Packing too many websites on one server means they are competing for bandwidth. As a result, a surge on one website could impact all. Furthermore, this could create security risks.
    2. Does the plan have sufficient disk space and bandwidth? Unlimited plans are a buffet of disk space and bandwidth, but they often are lower quality and performance than a metered plan.
    3. What type of support is available? Make sure your provider has 24/7 support. And also – do they charge extra for support?
    4. Do they charge extra for standard elements? For example, some hosts will charge extra for backups or SSL certificates.
    5. What is the process to migrate to another host? Many plans include a domain name for free, but they tie the domain name to the provider and make it difficult to leave. Even then, you usually have to commit (and pay) for a year of hosting to receive the domain name for free.
    6. And don’t forget – see what other people are saying about this shared hosting option! See if other people using this provider have any issues. If so, have they provided a fix or update?

    Interested in learning more?

    If you want to learn more about which type of environment is best for your business, we’re here to help. Contact us to get started.

  • The Best Way to Save Your Company is by Phishing Your Coworkers

    It’s easy to think that an email phishing attack wouldn’t fool us. Or that our friends and coworkers know how to identify a suspicious email.

    But like a lot of our work at Atlantic BT, we don’t really know how well we’re prepared until we run some tests. So, how do you test the human side of IT security? You run your own phishing scam on your coworkers and record the results.

    How I Ran My Phishing Test

    Before you call the police, no, this blog post is not a confession that I’ve turned to a life of crime. I used a free tool from PhishMe. Then, I was able to conduct a convincing phishing test. My targets? Every one of my coworkers at ABT, including the CEO and President.

    PhishMe Free allows you to send a fake phishing email to as many as 500 users by importing a list of emails. You can design your phishing email using 18 different templates. Afterwards, you can then schedule when you want to send it. The app will measure how many recipients open the mail and how many click the phishing link inside it. For my test, I sent two different emails more than a month apart. The results were very different.

    The first test sent an email in the middle of the workday. It notified the recipient that their inbox was “over the limit”. The phishing link inside the email was threatening. “Click here to increase your mailbox size or you will lose your account within 24 hours.” Results of this test were encouraging. 65% of my colleagues opened the email, but no one clicked the phishing link. This particular phishing attack wasn’t fooling anyone.

    The second test delivered less positive results. This email arrived at the start of the workday. It referenced a suspicious credit card charge. The email also offered to let the recipient trace the progress of a package, as it made its way to its destination. 67% of my coworkers opened this email, and 21% actually clicked the phishing link. Had this been a real attack, our company could have been in trouble.

    What I Learned from Phishing

    Our main lesson here was that even a tech-savvy company, like ABT, is vulnerable to phishing. Without testing, you won’t know how susceptible you are to a phishing attack until it already happens.

    Here are some other observations from this test:

    • Timing could matter: The first test took place in the middle of the day. But, the second test began before people were arriving for the day and checking their email. The more successful test was a part of all the other morning emails employees deal with first. The lesson here is about timing. It’s especially important to watch our for suspicious emails at peak communication times. Then you can judge each email’s impact and risk on an individual basis.
    • Content matters: This means that the content of the phishing email is a critical clue. It can determine how susceptible your employees are to the scam. The worry over an unauthorized credit card charge struck a deeper nerve. The lesson? Teach your coworkers how phishers target their victims. Manipulating emotions, curiosities, and worries are all part of their attack strategy.
    • Response plans are important: A few users notified IT when they suspected an email attack was underway. But, they were unsure how to proceed after. It’s important to be able to find weak spots in training and policies. Education and regular testing helps us to find those vulnerable points. It also helps to remind employees to be vigilant. It’s a good idea to have protocols for how to respond to this kind of suspicious activity.

    Cybersecurity is necessary in our hacker dwelling world. Being prepared and aware makes all the difference. Our team of experts are ready to help you with the knowledge and experience they’ve gained in the real world and with phishing tricksters, like me.

  • 4 Ways to Know If Your Site Is Safe for eCommerce

    Congratulations! You’re ready to take a big step forward by jumping into eCommerce. You’ve evaluated the market to see how you stack up against the competition. You’ve developed your pricing strategies. You understand how you’re going to handle order fulfillment. And, most importantly, you’ve built out your website to handle all the online transactions.

    But is your site really ready for eCommerce?

    Four Questions to Ask Before You Begin eCommerce Transactions

    1) Do you trust the work of your development partner?

    Most eCommerce websites require significant custom development, so you can connect the site to your Enterprise Resource Planning (ERP) software or integrate it with your marketing tools. This makes it essential that you can trust the company (or individual) that completed your development work. That means asking tough questions: Does your developer have the experience necessary to build sites that meet current standards? How reliable is the code? Has it been tested?

    Because eCommerce asks a lot of your website, you need to feel confident your development partner is trustworthy and knowledgeable about security best practices. The long-term success of your business depends on it.

    2) How secure is your hosting infrastructure?

    Your eCommerce website needs to be in a stable, secure hosting environment. If you’re using a shared hosting environment, you may be at risk. If any website on that shared server gets hacked, your website and all your customer data (including credit cards and personal information) could be compromised.We recommend creating a customized hosting configuration in the Cloud.

    As an Amazon Web Services (AWS) partner, we’ve seen first-hand the scalability and reliability that comes with hosting your website within the Cloud. And since eCommerce requires 24/7/365 operation, you need to minimize downtime as much as possible.

    3) Are you using encryption to protect your data and transactions?

    Today’s eCommerce websites handle more data and larger volumes of transactions than ever. Customers depend on you to keep their data safe and secure. Once you violate that trust, you may never get it back. This makes encryption essential. Installing Transport Layer Security (TLS) encryption is a good starting point. TLS has replaced the older SSL encryption methodology. But has your developer taken the necessary steps to encrypt the transactions? What about the stored data? How about customer histories and personal information?

    Failure to encrypt the personal information and transactional data stored in your site means that once a hacker gains access to your site’s backside, they have access to everything. By using trusted and proven encryption methodologies, you can keep your data safe, even if a hacker were to get inside the site.

    4) Do you have a dedicated budget for website maintenance?

    Many eCommerce projects tend to focus on the task of developing and launching the eCommerce site. However, websites and hosting environments are a lot like buildings—if you don’t maintain them, they will break down over time.

    At a minimum, you will need to plan on updating your website’s core code, the encryption technologies, the integration with your external systems, and the structure of the hosting environment. A dedicated maintenance budget will help you extend the life of your eCommerce website and provide the peace of mind your customers need.

    Launch with Security, Launch with Confidence

    A secure foundation for your new eCommerce store will relieve any worries in the back of your mind. If the questions asked above have you concerned that your online store might not be ready, my colleagues in eCommerce will be happy to set you at ease.

  • Who is the Winner of the Great Content Delivery Network Race?

    The Internet has more than its share of misconceptions and half-truths. However, one of the most significant mistakes is the belief that bandwidth speed alone determines how fast a webpage will load. The truth is more complicated—your website’s load time depends on user bandwidth and the latency of your server.

    You can’t control the quality of your user’s Internet connection. However, there is a proven way to improve the latency of your server by using a Content Delivery Network (CDN). CDNs support your site by storing and caching your content (such as images, CSS, videos, and the like) and serving this content from an EDGE location. The result? Your webpage and all its content loads faster and more reliably.

    This leads to the natural question: which CDN delivers the right combination of value, reliability and performance? To learn the answer, I designed and conducted a series of tests measuring the speed and performance of four CDNs: S3, CloudFront, Fastly, and section.io.

    How I Tested These CDNs

    I created my test to simulate a typical loading task for a website facing low to modest traffic. Using an S3 server, I pushed a 100kb file and tested how many transactions the CDN could handle over a period of 90 seconds with 100 concurrent connections on a single 300mb/second link; I also measured the CDN’s transfer rate and response time.

    The table below reveals my test results, but first, a few qualifications:

    • I chose S3 as the test server because of my experience with S3 as well as S3’s support from Amazon Web Services.
    • I chose these four CDNs because of their similar price point and my familiarity with them.
    • There was no “warming” of the cache by throwing a preliminary file at it to scale the cache upward. This allowed the test to better simulate a site with modest traffic experiencing a sudden rush of visitors.
    • My test did not include comparisons between the different CDNs’ features, such as the ability to invalidate a CSS file or security capabilities.

    CDN Performance Results and Observations

    S3

    CloudFront

    Fastly

    section.io

    Transactions

    7533 hits

    12456 hits 12131 hits

    12284 hits

    Availability

    100%

    99.14% 99.34%

    99.51%

    Elapsed Time

    90.03 sec.

    89.95 sec 89.81 sec

    89.47

    Data Transferred

    735.64 MB

    1216.41 MB 1184.67 MB

    1199.61 MB

    Response Time

    0.95 sec

    0.33 sec 0.37 sec

    0.39 sec

    Transaction Rate

    83.67 trans/sec.

    138.48 trans/sec 135.07 trans/sec

    137.3 trans/sec

    Throughput

    8.17 MB/sec

    13.52 MB/sec 13.19 MB/sec

    13.41 MB/sec

    Concurrency

    79.1

    45.05 49.74

    52.9

    Successful Transactions

    7533

    12456 12131

    12284

    Failed Transactions

    0

    108 80

    60

    Longest Transactions

    9.04

    31.15 31.21

    31.27

    Shortest Transactions

    0.12

    0.05 0.1

    0.17

    Amazon CloudFront emerged as the clear frontrunner, leading the pack in transactions processed, data transferred, response time, and speed. CloudFront also led the way in failed transactions, though the 108 failures represent less than 1% of transactions attempted.

    That said, these results represent only one test in one set of circumstances. It’s important to try out different CDNs for yourself to find the combination of performance, features, and price that best fits your needs. If you have specific questions regarding CDNs or Amazon Cloud Services, our development team is here for you.Â