Apache and MariaDB/MySQL Settings for Low-Memory Servers

Gone are the days of requiring large amounts of resources to adequately run a fast, enterprise-grade web server.  I currently run a single DigitalOcean instance (the 1GB memory plan) and host many web platforms with no performance issues, whatsoever.  I thought I’d share the settings that have been working really well in this low-memory environment.  Note that the server is running CentOS 7, but these settings should be applicable for any OS.

For what it’s worth, if you’re interested in a DigitalOcean account, click here to use my referral — you’ll gain $10 in credits when you sign up… Continue reading

How to Issue Bulk Refunds through the Stripe API

Today was not a good day.  In short, a nonprofit’s online donation form was hit 1,285 times in an attempt to validate stolen credit cards.  Unfortunately, 120 of those succeeded, meaning our Stripe account had over $600 in fraudulent donations.  I needed a quick way to fully refund those charges, but in bulk.  Through the Java API client, I was able to do the following.  I figured I’d throw it out here, in case someone else can use it.  Note that although it uses the Java  client, the concept is identical for others. Continue reading

The Responsible Consultant: What project information should my software/web developer provide?

Getting right to the point, many (possibly even most) software/web developers will simply hand you the deliverable upon project completion and call it a day. The tools and processes used are often held back, forcing you to always go through them for updates or eventually argue with them to get what you need. Although the former may make a bit of business sense on the consultant’s side, I’d argue that this methodology is terrible. Continue reading

How to Backup an OpenShift MySQL Database with a Shell Script

As a part of my ongoing consulting with nonprofits, I oversee over a dozen web applications running on OpenShift.  I needed an easy way to backup all of the MySQL databases in one shot.  So, I cooked up the following shell script.  It’s pretty dirty, but it works.  The script assumes Linux and is run as a cron job, but the concept could be easily adapted to other operating systems.  I thought I’d throw it out there in case it’s useful to anyone else. Continue reading

Define: Good Consultants

This morning, I stumbled across this blog post, describing “Good Consultants vs. Bad Consultants”.  Although it’s a little rough around the edges, the points it makes are important.


The main takeaway point is the first sentence:

Bad consultants make money off their customers, good consultants make money for their customers.

When you’re looking for a technology consultant to help your nonprofit organization or business, find one that’s passionate about helping it succeed and sticking with it long-term!  You are not solely a source of income.

Tutorial: Spring + Hibernate + HikariCP

HikariCP is newer JDBC connection pool, but has already gained a large following.  And for good reason!  It’s lightweight, reliable, and performant.

We recently added it as a core module to Hibernate ORM: hibernate-hikaricp (will be released in ORM 4.3.6 and 5.0.0).  However, I wanted to try and replace C3P0 within NeighborLink’s new web platform.  It’s been plagued with connection timeouts (regardless of the many iterations of config changes) and other quirks.  NL is based on Spring MVC and ORM (4.2.12), so in this setup, hibernate-hikaricp is a moot point.  We can simply feed the HikariCP DataSource implementation directly to the Spring LocalSessionFactoryBean.  Here’s my setup and configuration: Continue reading