I want to give a shout out to another nonprofit this week, TechSoup.
"TechSoup equips changemakers with transformative technology solutions and skills they need to improve lives globally and locally."
Jessica and I met with our accountant recently who advised us to use QuickBooks to manage Charitocracy's accounts. No big surprise there. Jessica thought we could get the cheapest version of QuickBooks Online for $120/year by having them extend their introductory $10/month rate beyond the initial 6 month period. But then I discovered TechSoup's offering.
After confirming our 501(c)(3) status, we qualified for a donation of QuickBooks Online Plus, which normally costs $40/month and is often discounted to $24/month. We only had to pay TechSoup's administrative fee of $50. And we'll be able to renew for another $50 in future years. This is a big savings if you compare it to the $288 we'd pay for this "plus" edition or $120 for the cheapest one!
Thank you, TechSoup. It was a painless process to register for this donation. And thanks to Intuit, maker of QuickBooks, for donating their software through TechSoup!
This week I pulled my first all-day-all-night-all-dayer for Charitocracy, and probably the first of my entire career! In the past I've always gone home and slept after an all-nighter. Have I mentioned how much I love working on this stuff?
What was I working on that's so engrossing I just couldn't stop? I was migrating Charitocracy's staging server off my laptop onto a virtual private server (VPS) "droplet" at one of DigitalOcean's NYC data centers.
Here's a brief rundown of my long, long day:
- Signed up using $10 off discount code I saw on Facebook, effectively giving me a nice long free trial. You can support Charitocracy by using our referral URL to sign yourself up. You get $10 off (e.g. 2 months of their cheapest config) and Charitocracy gets $25 off our future bills!
- After researching Linux distribution options, chose Ubuntu 16.04, the new long-term support (LTS) version.
- Ran through the checklists for setting up and securing the system, installing Apache, MySQL, and PHP. This gave me a LAMP environment very similar to the MAMP environment I've been using, just on Linux instead of Mac.
- Installed Let's Encrypt (remember?) along with a cronjob to automatically renew the TLS certificate as needed.
- Dumped the MySQL database from my MacBook to a file, copied it over to the new server, and imported it to the new database.
- Moved my git origin repository from iCloud to DropBox so it could be easily accessed not only from my Macs but also from Linux. Cloned the repository into the new server's Apache tree and took it for a spin!
- Blinked a lot for a good hour or so.
- Configured postfix email server like I had it on my Mac, using Gmail SMTP servers to send out emails from Charitocracy.
- Discovered that I was hitting the RAM ceiling on the cheapest ($5/mo 512 MB) DigitalOcean config, leading to some MySQL queries failing, so resized my droplet to the $10/mo 1 GB config. I'm sure I'll quickly outgrow this one, too, but so far so good!
I can still easily sync the latest code and database back onto my Mac and fly it via PageKite if I have a need, but I don't foresee any. I've effectively obsoleted the local environment I set up 6 weeks ago, but really I've leveraged almost all of it, simply on a remote Linux server that's closer to the final production environment.
Progress! And finally, sleep!
We've been asked by some of you how you can help, and don't always know quite how to answer. Feed me coffee and chocolate from dusk 'til dawn? Don't wake me up before noon? Distract me with trivia and beer and movies once in a while? All pretty obvious stuff.
Our dear friend, Melia, has undertaken an important task: writing a guide for volunteer moderators. A large part of the activity on Charitocracy will be weighing the relative merits of different causes in a discussion forum. We'll need some moderators who can help remind donors that we're all on the same team, and to keep the discourse positive and constructive. Thank you Melia for spearheading this!! And do give us a yell if you don't mind doing some moderating once we go live.
For others who want to help without biting off such a big chunk, here are two easy ways to help today:
- Like us on Facebook and/or follow us on Twitter. If you already do, then please share/retweet with your friends and encourage them to follow us. If we build momentum now before the site opens, the size of the pot for month #1 will be meaningful instead of simply... cute. Might I suggest something like "My amazing and handsome friends are launching a <insert region-appropriate equivalent to wicked pissah> non-profit soon, please support them by liking their page and following along!"
- Ask us a question! We'll need to start fleshing out a Frequently Asked Questions (FAQ) for the site, and could use some ideas. What do you want to know about Charitocracy? Some of it might be obvious once you can actually go in there and look around, but I want the FAQ to be useful to people who haven't signed up yet, so they'll have many of the same questions you do now! Pose questions, broad and narrow alike, here on the blog, Facebook, Twitter, wherever is convenient for you. Maybe we'll even answer your question in a blog post!
Thanks for your continued support. We're getting close!
This weekend we celebrate as Jessica joins me amongst the ranks of quadragenarians. She's not going quietly, either.
Charitocracy is lucky to have someone of her
age maturity seniority experience at the helm! Let's wish her a year, nay a decade, full of meaning and purpose and 80s references... while she can still remember them.
What has become known as The Year of Benj is now half over. Let me rephrase: I'm now beginning the best half of TYOB!
I'm in a serious groove right now. It doesn't matter if I've already worked all day or if I've been out partying and get home after midnight: prime me with a couple squares of dark chocolate, tune the Apple TV on my desk to John Oliver, and next stop will be 8:30am and a half dozen items off my to-do list. Repeat about 4 times per week, and things truly start happening!
Yesterday I worked from the beach just to prove that I could. TYOB, YOLO! It was in the mid-70s (degrees, not decade, sadly) but the wind was obnoxious. I had goose bumps the whole time. However, the equipment test mission was a success! My new beach umbrella and sand anchor didn't budge in the wind. I could see my Mac's screen just fine thanks to the dorky but effective Pixel Sunscreen. And I scoped out the beach access closest to a cell tower, which afforded me 3 bars of AT&T signal. (I'll try for 4 next time, but 3 gave me a steady 1Mbps up and down, fine for my typical needs.)
Now I just need to work out a system for accepting dark chocolate donations...
🎶 Once upon a time I was calling printf, my debugging skills were falling apart... Nothing I could do but then I found Eclipse, now I ❤️. 🎶
I have plenty of experience with debuggers: db, ladebug, gdb, jdb, NetBeans, WinDbg (affectionately known as WindBag), Xcode, and perhaps my all-time favorite, SoftICE. I've used them almost exclusively to debug low-level device driver code. This is my first time since last working on cutting-edge web code circa 1999-2001 that I've had the need to debug server back-end scripts.
PhpStorm seems to be the most highly praised option out there, but they don't offer discounts to non-profits, and it's pricey at $199 for the first year! The next most popular is Eclipse for PHP Developers, and the price is right: free. It uses PHP's Xdebug extension, and worked like a champ. I was setting breakpoints in my PHP functions, actually hitting them, inspecting variables, stepping through code, and fixing bugs (in 3rd-party code of course, not mine) with hasty abandon!
After three all-nighters in the past week, I'm really starting to get the hang of web development again. Don't get me wrong, I miss needing a debugger that lives below the operating system, and sifting through PCI buffer traces for broken command packets caused by multithreaded race conditions. Really, I do
n't. But someone has to make sure deadbeat donors with expired credit cards receive an encouraging email with a link to remedy the situation, right? That someone is me.
The sun has set on my unbridled "cowboy coding" for the last time. (Geek alert. You've been forewarned.)
Traveling 5+ weeks and not touching Charitocracy the entire time was never my plan. I thought I would have remote access to my home server, but something went wrong. (I still don't know what, but I have some suspicions.) I set up a more reliable VNC connection as an immediate countermeasure when I returned home so this particular obstacle wouldn't repeat itself.
Really, though, I needed to rethink my overdependence on an old Mac Mini (MM). I chose it as my main staging server by virtue of it being the only unutilized Mac in my house, purchased as a home theatre PC before Apple TV made it obsolete. I used dynamic DNS to direct charitocracy.org traffic to my home network, then my router port-forwarded to the MM. It just worked... except when it didn't. Namely while on my trip, and about half the times I tried logging into it from neighborhood coffee shops.
Meanwhile, I have a powerful mid-2015 MacBook Pro (MBP) at my fingertips any time I'm working. It runs circles around my circa 2009 MM. I never need to access it remotely over a questionable net connection. So why am I trying to use it as a dumb terminal into an ancient machine across the house, across town, or across the world as the case may be, with mixed success at the best of times?
Last week I declared an end to amateur hour by doing the following:
- I installed MAMP on my MBP.
- I set up a git source control repository (with origin backed by my iCloud drive) to host Charitocracy web code and database.
- I rebuilt the Charitocracy beta site from scratch on my MBP, submitting to git at intervals along the way, using my MM's site as a reference.
- I created a pre-commit hook that automatically adds a SQL database snapshot whenever I commit code changes.
- I installed and configured PageKite, a pay-what-you-want tunneling service which allows me to receive Charitocracy network traffic (including TLS/SSL) wherever I like, including on my MBP, even if I'm in a random waiting room or coffee shop (as I am right now).
- After proving the new beta site worked as well as the MM's, I pulled all the code and data back from git and proved I could easily clone the site on my MM, redirect PageKite to serve it up externally, make changes to the site on MM, and pull the changes (code and DB) back onto my MBP.
So I'm finally baking some real engineering discipline into my coding process. Nothing falls through the cracks. I can go back to previous snapshots of code and data. I can easily view and search through changes, even if they were in the DB or in code I didn't write myself, like plugins. I can travel. And all of this is quick and robust, because 99% of it is happening right on my laptop (credit card processing is one exception, but that traffic works seamlessly through PageKite, too). And if I get hit by a
bus stagecoach tomorrow, you'll all be able to pick up where I left off, right?!
I still have plenty of engineering discipline yet to adopt, the sorts of things truly necessary when working in teams with fluid requirements and actual deadlines. So I reckon I'll just ⌘H the cowboy coder until the coast is clear. Yeehaw!
"I wouldn't say I've been missing it, Bob." I packed 6 months of travel into 6 weeks, but got it out of my system. Let's hope.
You'll recall before I left, the IRS totally punk'd us with a letter saying "We got your application, now sit tight for 6 months while we think about it." Then after I left town, they followed maybe two weeks later with a letter saying, "Just kidding, we love you guys, don't change a thing, you're totally in." I'm paraphrasing, the actual letter of determination is here.
If you want to know what goes into a full-fledged Form 1023 these days (not the shortened -EZ version) you can take a look at that here.
I thought I'd be taking my time getting the web site up, and that the IRS making donations to Charitocracy tax-deductible would be the long pole in the schedule. Suddenly I'm the weakest link! Charitocracy's only obstacle to going live is me. The pressure is back on, friends. Jessica be all like:
Benj is away so the kids and I eat lots of meat, watch horrible (nay, amazing?) movies, and sleep in the big bed. I have the pleasure of taking out the trash and getting the mail. Glamorous life, I tell ya!
Bison chili? Nailed it. Watching the very 80's and mildly inappropriate for kids Adventures in Babysitting? Oh, we SO nailed that! Middle of the night visits to my bed by each kid? They each nailed it. Recycling? Well, I missed the first week's pickup but I totally nailed it this week!
Getting the mail? Yeah, I'm mostly terrible at stopping by the post office even though I drive by it multiple times a day. I mean, why bother? Christmas card season is over. It's no one's birthday. And I have enough credit cards, thank you very much.
But, OMG, YOU GUYS!!! Look what came in the mail this week!!!
Getting approved for our 501(c)(3) tax-exempt public charity status on the first try?
Yeah. WE NAILED IT!
I'll be on the road for the next five weeks. First a couple of weeks in Seattle and London visiting dear friends and family, then three weeks in Massachusetts prepping our old house for sale. My Boston to Portland flight on Tuesday was the first since... August?! I used to fly at least monthly. It was good to be back up in the friendly skies after six months on the ground!
On my way up the east coast, before dropping off my car with Dad & Maryann near Logan Airport, I spent a day in New York City snowed in with my cousin-in-law, Hillary. We had an insightful and timely conversation about the next phase of Charitocracy development: cause nomination, discussion, and voting. It's just what I needed to psych myself up for tackling this next and most critical aspect of Charitocracy functionality.
Hillary also suggested including a portal for non-profit nominees to join the discussion without being donors themselves. Brilliant. This way they can correct any well-intentioned but inaccurate information in the nomination pitch, provide more details about their mission and current activities, and respond to any criticism. Hopefully it keeps a grass roots feel without too much of a polished marketing department aftertaste. But it will certainly add an important voice to the discourse.
I'll be constantly on the move until March 1st without much opportunity to code, but I am looking forward to killing off the last few known bugs in the signup/donation process so I can start in earnest on nominations. I'm as excited as ever, but will use this self-imposed downtime to reflect on what's coming next. For now, it's Adventure Time with my buddy Kerry and his fam!