Public Journal

So much for publishing the reading reviews “roughly every two weeks”. I’m journaling in private again too, after a break since roughly 2001. In any case, let’s see what happens here.

Read more …

Reading Review #4

This review covers March 10 through March 27. Instead of bemoaning how late this one is, I’m going to go ahead and say this is the pattern: roughly every two weeks (about twice a month) I’m going to publish one of these. However, I’m also toying with the idea of implementing some sort of bookmarklet for myself (inspired by Jeremy Keith in this post linked below) to make composing these a bit easier.

Read more …

Reading Review #3

Once again, this one’s really late. Some of this reading is from back in February. I’ve been dealing with some depression issues lately that have kept me from doing what I know I want to be doing. That said, I do want to spend more time thinking about what I’m trying to do with these reading reviews. Here’s a rough brain dump of what I’m thinking right now.

Read more …

Debugging API Requests in the v2 Google PHP SDK

In a previous article we looked at using the new v2 Google PHP SDK to work with exporting Google Sheets. In working on that article I ran across some interesting side-effects of the middleware model. I’d like to mention some of those side-effects. First, let’s talk about what middleware is.

Read more …

Reading Review #2

I’d prefer to publish these weekly, but last weekend found me without enough time to do this. I’ll try better in the forthcoming weeks.

Read more …

Exporting Google Sheets in the v2 PHP SDK (google/apiclient v2.0.0-RC4)

I’ve been playing around with the new google/apiclient (v2.0.0) for use with Google Drive and ran into some issues figuring out how to make use of the ability to export, for example, a Google Sheet as a CSV or Excel spreadsheet.

Read more …

On Being: B.J. Miller — Reframing Our Relationship to That We Don’t Control

It’s been a long time since I listened to this podcast. The topics are often weighty and I don’t feel I have the energy to give due attention, but this morning the title of the latest episode struck me, so I decided to listen to it. There’s so much here. You can listen to the episode or read the transcript.

One of my favorite parts is this (emphasis mine):

DR. MILLER: … I think about this idea of normalcy a lot. I and many, many others before me have been agents of normalizing disability, and that’s really potent. And I also think there’s a second half to that equation, that we need – that doesn’t mean that we fit these other things into our idea of normal, it means we expand our idea of normal. And I think that life is weird. Life’s hard. Life’s weird. Humans are weird. And I worry, sometimes, that we exist in such a narrow bandwidth of accepted behaviors and thoughts that we really clip off so much of the strange beauty that can be part of the human experience.

Read more …

Reading Review

For a couple of years now I’ve occasionally been keeping track of what I read in a Google Doc, in hopes I’d use it to write a blog post about what I’m reading. So here’s the first one. The idea behind the reading review is to become more deliberate about what I’m reading online; to take more than just a couple of seconds to think about what I’m reading and to share it with others in a more thoughtful medium than just posting to Facebook or Twitter randomly.

Read more …

Introduction to AWS CloudFormation

This is the first article in what I hope to be a series that documents my experience getting to know how to use AWS CloudFormation. In this article we’ll get to know the basics about CloudFormation and set up a simple application stack. In future articles I hope to cover more advanced topics.

Read more …

Dependency Injection

@ircmaxell has a great explanation of the concept of dependency injection (DI). I won’t even link to anything else about the concept because any Wikipedia entry would just confuse the issue. Watch this video first, then go Googling.

Read more …

20 Years of PHP

This is my contribution to the #20yearsofphp story telling happening today on Twitter. I’m coming to this a bit late, but I thought I should add my part.

In 2005, I had just graduated with a B.A. in Mathematics and Philosophy from a small liberal arts college in the midwest, had been working in the IT department there since about 2004, and was rather tired of the same old routine of fixing persistent printer problems and troubleshooting roaming profile issues in a Win2k/Novell environment.

For a couple years, one of the workstations in the office doubled as a web-server that hosted a key/core management web-application for our physical plant department. It was served via IIS using ASP backed with an MS Access database. All it did was keep track of which doors had which cores and what personnel had which keys.

The original developer had since moved on to other things, so we were looking for a way to replace the fragile setup. The director of IT (he’s still there) made a random comment (joke really, in hindsight) about needing to look into MySQL and maybe PHP.

So I began Googling.

As it became clear to me what really could be done with PHP (and with what ease!), my imagination began to grow as well. To this point my experience with programming was a boring world of for loops and pointer arithmetic (I blame the varous “teach yourself C in 24 hours” books for making it so boring.)

What turned this from a curiosity into something that could actually solve a problem, was figuring out how to authenticate users via LDAP. PHP’s ldap extension made this easy. Learning this made me feel I could do anything.

The original code I wrote was atrocious.

I had a single admin.php script which included a rather epic if-then-else construct branching based on an “action” request parameter (as was common in the day). Much SQL and not too little HTML was all embedded within this behemoth script. This was my first PHP application, and the last to utilize such a routing mechanism.

Within a year I wanted to write version 2.0 of the application. I had learned about Smarty templates and just enough MVC to be dangerous. This led me down the path to more MVC (and patterns! of course) and the important lessons of separation of concerns. My voracious apetite for learning and fervent desire to Do it Right™ caused version 2.0 to suffer from what I now see was a case of the second-system syndrome.

It took nearly two years to finish.

When it finally did ship, I had moved on from my employment at that institution, and had nearly finished a year of graduate school in the mathematics department at the University of Kansas.

I never really finished that year of graduate school. Turns out…I’m not that great at math. Instead I began to look at ways of getting full-time employment in tech, but not in programming.

I began the process of becoming recertified as a CCNA with a goal of ultimately becoming a CCIE. I even went so far as to trawl eBay looking for old Cisco routers and switches to build my networking lab. (I’ve since gotten rid of all of the equipment: two 2501 routers, a couple 2600 series routers, a T1 modem, and a couple of Catalyst switches—along with all the attendant cabling). This led me to apply for a position with a company in Wisconsin called Berbee Information Networks—since acquired by CDW. I went through a few phone interviews and was flown out to one of their offices in Madison, WI for an on-site interview. Two weeks later they informed me I didn’t get the job. The same day, I had an interview for my first full-time programming gig in Wichita, KS at a small tech company—since acquired by CybertronPC.

There I came into contact with the Zend Framework 1.0.x and started reading programming blogs including Rob, Matthew, Pádraic, Jani, and Jeff to name a few. At this job I did mostly internal-facing apps such as systems for managing ER patient chart coding and billing and torque tool calibration/certification tracking. After almost four years, though, I was looking for new challenges and to be nearer to members of my family living on the east coast. That brought me to my current position at a small university in the Shenandoah Valley in Virginia.

The PHP community has been good to me.

Before PHP I spent many hours during high school learning C/C++, but PHP was the first language that let me really do something without a lot of frustration. It was the first language that taught me patience when developing and gave me a real job. Now that I’ve been programming in PHP for 10 years (7 years full-time), it’s more than once per week that I want a more strongly typed language, but I’m glad PHP was flexible enough for a beginner to get some work done without a lot of hassle.

I’m excited at what the future has to offer for PHP 7.

Read more …

Sorry, that AA “study” is bullshit

This is a great (short) read for many reasons.

Yes, AA asks that you believe in a higher power. I call that higher power god because that’s what works for me. Not a Protestant god. Not a Catholic god. Just a god that loves me unconditionally. It took me a little while to get to that point, but I could get with that idea. My concept is simple: There is a god, and I’m not it. That’s the construct I came up with shortly after I arrived, and it’s still serving me well today. My god and your god aren’t the same. And that’s totally fine.

That struck me, particularly as I’m now reading Karen Armstrong’s A History of God.

Reading about the history of what we mean when we talk about “God”, leads me to the conclusion that we don’t need to agree on what we mean by “God” in order for that concept to have a very profound (positive) impact on our lives. The beginning of this realization for me is the thought that God isn’t something “out there” but is literally everywhere. From that you proceed to the idea that God is inside of all of us. (And thence to the idea, perhaps, that we—and the whole cosmos—are really just God playing hide-and-seek from godself.)

Each of us has a totally unique experience of God. Reading Armstrong’s work drives home the idea that this is something that virtually all religions have understood at one point or another. More recently, however, there’s greater emphasis on objective experience of God.

This is something I’ve believed for a long time now, but only now am I beginning to understand what this feels like at a gut level. I’m sure I have a lot more (self) work to do on the road to more understanding about the implications this truth has.

Read more …

Apache 2.4 + mod_deflate + etags = HTTP 200 Always

This Apache bug is really annoying. Fortunately, there is a really simple work-around.

Add the following to your Apache configuration:

RequestHeader  edit "If-None-Match" "^\"(.*)-gzip\"$" "\"$1\""
Header  edit "ETag" "^\"(.*[^g][^z][^i][^p])\"$" "\"$1-gzip\""

This work-around comes from comment #15 on the Bugzilla page. However, you cannot use it as is because as coded it omits the double quotes around the ETag. Credit for the correct work-around goes to this unselected answer to this Stack Overflow question.

The answer links to a bit more info about the bug.

Read more …

Tools are(n’t) the Problem

The other day I was looking at Twitter and came across this status from @marcoarment.

Read more …

On Blogging

At it’s core, the World Wide Web is about connecting people and information together. Consequently, that “traditional” style blogging is making a comeback (via this), should be no surprise.

Read more …

Memory Leak Behavior with ArrayIterator, SplHeap, and SplDoublyLinkedlist in PHP 5.{3,4,5,6}

Since PHP 5.3 it has been possible for memory occupied by objects having cyclic references to be reclaimed via the new garbage collection feature. However, there is a case in which the garbage collector does not appear to be able to reclaim memory.

Read more …