Made of Everything You're Not

I’m Speaking! (... again…)

Welp, here we go again. Time to yakkity yak about coding in one of the only places left where "for the exposure" actually works as an incentive: virtual conferences. On May 25th I'll be speaking at the EE Conf 2022 Spring Conference; a virtual conference all about ExpressionEngine. It's reasonably priced at $49, which let's just do the math, is basically $8 an hour to learn all about the latest and greatest hotness within ExpressionEngine (and the community). Not too bad.

And I'm gonna be speaking at it. For like 45 minutes. Virtually. Probably super early since I'm basically PST so this starts at 7AM my time. (I should ask for a later slot now that I think about it.) I've decided to go SUPER self aggrandizing and will be talking all about my little side project, EE Objects, and why it's super awesome for ExpressionEngine development. So go sign up and be sure to check out my talk.

So yeah, me talking using English like I'm a native speaker. Which I am. So very easy on that front. But getting a slot to talk is just the start. The process of getting the slot was basically me submitting a form saying, "I wanna talk about this thing I built" and that's it. You use proper grammar and throw some links into it, so the reviewer can actually look into your topic, but easy enough. It's the after where things require effort and what I want to go over; all the various tasks needed for putting a presentation together for a virtual conference.

Dirty little secret of the conference world is just how much of an financial burden it routinely puts on the presenters. Most notably at the newer conferences, but there are tons of stories on how even big events like Ted just milks their speakers. My experience has been right down the middle. I've had to pay for my own travel and lodging to even get to events but I've also had full accommodations and travel paid up front.

Speaker dinners rule though. You don't get to do those in a virtual conference which does make for a disconnect between the speakers. Small price to pay though considering the lack of travel I have to do. But not knowing any of the other presenters makes a cohesive voice tough to create. Again though, no travel so I'm gonna make do.

Slides Are Required

First things first, gotta put some thought and creativity into your talk. Slides too. Gotta have slides. Which means we need an outline; probably my favorite part about putting a talk together. You need an outline. Obviously, so you know what you're talking about and the details you want to go into, but also because your outline is going to make up your slides.

Putting slides together is an art unto itself so, by all means, do your own diligence and research, but for me it usually involves a few points.

  1. Don't repeat your slides. Don't be that presenter; the one who just parrots what the audience can read.
  2. Items and sub-items are the way. Start out high level then drill deeper per point. Again, don't parrot.
  3. Don't be a parrot.

Once you have an outline worked out, you gotta put them together using whatever flavor of tool you like. For me, I'm gonna stick with Powerpoint just 'cause I can and don't want to spend the time digging into an alternative.

Slide Styling

I feel like it should be mentioned that you HAVE to put a style (of sorts) together for your slides. A cohesive pattern. While I too am a fan of Times New Roman on a white background, it's at least worth considering. Your audience will respect the effort.

AV Gear Upgrade Time

Unique to virtual conferences is the excuse to upgrade my personal microphone and video setup. Historically, this has been a nonissue; I've been exclusive to laptops for two decades and they've all been coming with camera and microphone standard for half that time. And, I don't skimp on my laptops. Gamer computers make the BEST development computers in my opinion. And, when you're not working, you get a gaming computer.


And, to be fair, gaming laptops, even those like mine (which is only 4 years old), come equipped with "good enough" hardware. It's fine. Not great but not bad; just enough to goldilocks the requirement. And for things like Zoom, Skype, etc, they're fine. But for a professional speaking engagement, it's time for an upgrade.

So I'm looking to get a better microphone and video camera. Something that doesn't suck. And I did what you do: I asked smart which yielded 2 recommendations. The Shure MV7, sold without a stand(?!?) for $249, and the Blue Yeti USB Mic for $129.

Now, I'm usually a fan of the "pay more now to save later" mentality (especially when it comes to commodity hardware) but, let's be honest, Shure is straight gold digging. Not a fan of that, so I went with the Blue Yeti option. Well, sort of. I ended up going with the Pro model though that was more accident than anything (I didn't thought I was buying the other one). Still waiting on it to arrive but it should be a pretty solid choice.

Since I'm broke, I decided to forgo the video camera for the moment. those fuckers are expensive. Quite pricey for the good ones. And, let's be honest; my entire talk is going to be sharing my screen so "good enough" should suffice for now.

Now that my hardware situtation is handled, next up, I gotta actually put a talk together. I have the topic, "EE Objects, and how it's pretty damn cool" (paraphrasing), but that's actually a pretty meaningless description even without the paraphrasing. Oh. And there's a "dig your old slide creative out of whatever backup it lives in" part... lots to be done...

Guess I Better Start Contributing (... again…)

Let's play a game. Let's suppose nobody knows who you are or that you're a programmer and you need money. You have MASSIVE debt and it's draining your resources, just to tread water, every month in interest alone. You're also not so much a "people person", as you are suspicious and leery of humanity as your default. Let's also suppose you live on the edge of downtown Tucson Arizona, a town not exactly notorious for its silicon alley, so remote work is your only real option. So, how do you start making money?

Yeah, I don't know either. So, while I figure that out, I've started focusing on working within the ExpressionEngine community on various initiatives in my downtime. I had spent almost 5 years prior to my little startup adventure working with ExpressionEngine pretty heavily, so there's a certain amount of logic to revisiting the platform. Familiarity, community, and whatnot.

Working a lot in fact. Mostly in obscurity it turns out 'cause sometimes you have to toot your own horn and I wasn't tootin'. So, as I've just started writing again, I thought it'd be fun to put a spotlight on a few tasks I've been working on. And by a few I mean here's a comprehensive list of things worth mentioning. *Toot Toot!

EE Unit Tests

If you had asked me back in 2017 what I would like to see added to ExpressionEngine, it would have been the ability to run unit tests easily. If you're not familiar, previously, ExpressionEngine had been built in such a way as to require an entire bootstrap layer and the inclusion of a global object layer, within your tests. Your tests needed database access, and the use of the entire ExpressionEngine codebase needed to be available through the global ee() super function. So getting up and running for tests pretty much sucked. Real pain in the ass to get setup and running.

But with ExpressionEngine 6.1 (and back in November of 2021) that now became a trivial exercise. I mean, you still have to deal with the inclusion of super global objects but now you can easily run PHP Unit without the bootstrap layer So I put together a damn simple Add-on to make it even simpler. Take a look at EE Unit Tests on GitHub.

Datalist FieldType

Around the time I was pecking at putting EE Unit Tests together, I was trawling the ExpressionEngine Issues list on GitHub. One specific Issue stuck out to me; someone wanted a datalist FieldType to be included with ExpressionEngine.

See, one of the things I started doing during my search was to dig through the list oldest to newest. I had this idea to do the most outstanding Issues and help whittle down the list. And I found a good one. Just, not a good change to the ExpressionEngine core. This, was a custom FieldType.

Why? Because there exists a third party FieldType API it makes zero sense to saddle Packet Tide (the owners of ExpressionEngine) with the burden to maintain the addition. Community wants it, the community can maintain it; I'll start.

And, to be honest, it kind of scratched a couple itches of mine. I wanted to help (for real though!), but I also really needed to get up to speed on the FieldType API. And in December 2021 I released DataList FieldType.

EE Objects

This is a MUCH larger topic for later, but after working with ExpressionEngine for a few months I started to notice some opportunities for improvement. After being gone for so long, and working with other technologies, some of the paradigms built into ExpressionEngine still required a lot of the same boilerplate from the CodeIgniter days. Kinda bummed me out to be honest.

So I rolled up my sleeves and got to work. Enter EE Objects; a collection of objects to work with ExpressionEngine programmatically. Right now, it's still very much unstable and in a proof of concept state, but the idea is to make things easier for everyone when developing for ExpressionEngine.

I'll be writing about this in detail coming up, and also speaking about it at the Spring EEConf so won't go into detail here. Still, check it out if you're curious.

Pull Requests

In addition to the above stand-alone projects, I've also tried to take an active hand in whittling down the crazy Issue list on GitHub. Not gonna lie, it's a lot more effort than I thought it'd be. I really wish I could do more of these but just haven't had much time for this lately. Will definitely be picking it back up when able though!

Icon Dates

While I was trawling the Issue list I reached out to a buddy and asked them straight out, "which you think I should do?", and they came back with this one: Provide a method to quickly distinguish published entries from scheduled entries. Which, with a title like that, my hands were tied; I was in.

But, as I'm UI challenged, this was/is trickier than I thought. While I could implement the business logic without much issue (and I started the Pull Request on December 2021), making it look "good" and "not bad" has proven troublesome. So, if anyone wants to take a stab, the Pull Request can be found on GitHub.

CLI Time Limits

In a prime example of "you found it, you fix it", I found a bug within ExpressionEngine while working on a client project. Nothing big, the coding equivalent of a typo, but I found a bug so I fixed the bug.

This was included in ExpressionEngine 6.2.2 on January 17th 2022.

Issues with Avatars

Continuing on with my strategy of hitting the oldest GitHub Issues first, I found another good one with the Problems with avatars Issue. This Pull Request was a little more involved than the previous bug fixes since the reported Issue ended up being just the tip of the iceberg.

In a nutshell, the entire Avatar layer was problematic. The root problem the Issue mentioning were true but there were quite a few problems on top. We're talking bad meta handling, flawed upload logic, thumbnail generation was just odd; a whole refactor was called for. Pretty fun and easy task though.

This was released on February 10th 2022 in ExpressionEngine 6.2.5

Command Name Length

This was another example of finding an issue and fixing the issue. Basically, when you used the new list command through the CLI system, it would truncate the names and details provided. Basically, render a tool that should provide details into a tool that didn't in certain cases.

Was a pretty fun exercise though. ExpressionEngine has a really clever CLI layer, and how they rendered the interface taught me a lot about the sprintf PHP function. Seriously. It's a lot deeper than I initially had thought.

This was released on February 23rd 2022 in ExpressionEngine 6.2.6

Hello World (... again…)

A funny thing happened on my way to the future; I got a tad distracted. For, well... six and a half years. I thought I'd try the old "join your friends in a company" trope. It did not go well. But things end and, if I'm being honest, I did goof; I didn't prepare for this. I went all in and am paying the price now. By the end, I was in such a position that I had to abandon every piece of furniture I owned (nice furniture, too), and run, tail between my legs, back to the ghetto with a mountain of debt and no prospects.

2021 was not a fun time.

Though, it's worth mentioning, I've been assured all that is something that "just happens". Which is true enough, I guess (I still struggle with it though). And, they also say, it's not the end of the world. Thankfully, things have worked out insofar as my debt has been paid off and I own a couch and bed again!

Still though, my career has basically stalled, right where I left it. Six and a half years ago (at the time). On paper, I basically took a REAAAAALLLY low paying job and just rode it out. I mean, don't get me wrong, it was supposed to be a success. It was supposed to set me up. None of this was supposed to happen.

But that didn't work out. Not even close. So, what do you do then? Your world just blew up; where do you go with that? Well, me, the day after it ended, I opened up my contact list and started reaching out. Everyone got pinged. But, as is my luck at the moment, a lot of my contacts from back in the day promoted out/up/beyond. A lot more of them are just not coding any longer; which is a very bizarre thing to see, I have to admit. Not all, thankfully, but enough are out of the game where things looked pretty grim there for a minute. Thankfully, a friend had a friend who needed someone to help out on a consistent basis and that's provided a much needed level of stability and things have leveled out.

Small problem though; as mentioned, my career stalled. If a professional career were a ladder, I went up a bunch of rungs then fell down a bunch of rungs. And that just will not do. So, steps must be taken to remedy this situation. And, historically, what worked was putting myself out there. Which, as a natural introvert, I fucking hate; but them's the breaks in this industry. Good news is I've done this before so second time around should be easier.

I'm back to writing. Again. To prove I can play. Again.

Eric Lamb

Builds things. Has thoughts. Sometimes they're even worth sharing.


  1. GitHub
  2. Twitter