I'm Yitzchak Schaffer; I do software in New York City and Northern New Jersey. Uncle Bob is my crack, and Linux-Mac-PHP-Ruby-Python-Java-Haskell-JS-HTML5-CSS3-Sass is my stack. Here, I talk about stuff from my journeys in software.

  • The Realtime Web with Socket.IO and RabbitMQ

    I have been thinking a lot about the best way to implement a realtime collaborative web app. WebSockets is the maturing tech of choice for this, and although there still seem to be some issues in terms of support, things are improving. more

  • Learn You a Haskell for Great Good in PHP, Ruby, ...

    My main production language is PHP. I started dabbling in Haskell a couple of years ago, out of curiosity. I’ve found a few great resources out there and have gone through the novice lessons a few times. I still haven’t graduated to the point of building Real Things in the language; I have noticed, however, that exposure to the very different approach and style of Haskell had an immediate broadening effect on my PHP work. more

  • Accessing undefined properties of hashes/objects (in PHP and more)

    The true focus of this post is how to retrieve given member values of associative arrays in PHP, but it will touch on analagous constructs in other popular languages, namely Java’s Map, Python’s dict, Ruby’s Hash, and Javascript objects. more

  • Defining Communication in WebSocket Applications with WAMP

    In an earlier investigation, I conducted a very high-level comparison of WebSockets to AJAX. I discovered that WebSockets, with its inherently persistent connection, makes more sense in principle for a low-latency interactive application, but that there is no built-in semantic for requests and responses in the way that AJAX inherits from HTTP. Enter the ill-named protocol of WAMP. more

  • Why Laravel Homestead Makes Me Nervous

    I had an immediate negative reaction to the news of Laravel’s new Homestead program. more

  • Test-Driven Development in Context

    This article comes in response to a critique of TDD eloquently advanced by my colleague, Richard Wossel. Rather than offer a point-by-point comparison of our perspectives, I am going to paint TDD in a broader context, and I hope that this will clarify its value as I see it. more

  • The Angel of Refactoring

    This is one of the nicest feelings in coding. You’ve been working a couple of hours on some legacy code, with a thorny refactoring of stuff that’s used in a couple of places. After a morning buried in the code that deals with one of the implementations, you have a nicely reworked version, and you’re at a few hundred lines of delta. more

  • Pushing the limits of metaprogramming in PHP: aspect oriented design

    I’ve been doing software for about six years professionally. It was a few years into my career that I first heard about Aspect Oriented design (AOP == Aspect Oriented Programming is your buzzword). Here’s the premise. A given piece of code exists for a certain purpose - let’s say, to retrieve a record from a database. But there may be any number of other things that need to happen in addition to the actual retrieval: logging, access control, caching… those are known as cross-cutting concerns – issues that are relevant across the codebase, but are not specifically relevant to any one piece of code where they might be needed. And being that these bits of functionality are not intrinsically connected with data retrieval, in our example, it would make sense for them to be disconnected from the retrieval implementation. more

  • Edge-case web application disasters

    I finally had my first real perfect storm disaster last week: when new features, late changes, imperfect test environments and core server library regressions combine to nuke a feature on a production web app. more

  • Refactoring: SRP and coding in terms of the domain

    As I first moved into the medical benefit/procedure cost module I would be taking responsibility for, I tried to get a sense of how the parts worked together. I found that the boundaries between the responsibilities were not always cleanly defined. There were also a number of cases where a single class was responsible for different levels of a certain operation. more

subscribe via RSS