Archive for the ‘World Wide Web’ Category
Model-view-controller considered harmful
In 2001 I created a PHP 4 web application framework from scratch as the backbone of a sophisticated application. Back then frameworks weren’t cool. Smarty templates were the hotness.
My framework had URL routing, templates with a capable templating syntax similar to mustache, loosely coupled and tightly cohesive object-oriented design, an elegant way to access the database without dumbing it down, and nicely separated business logic and presentation layers — among many other nice things you find in good frameworks. As the application grew more and more complex, the framework continued to serve well with only occasional enhancements.
I mention this because it illustrates that I’ve been aware of how to design maintainable systems for a long time. But the so-called MVC paradigm (model, view, controller) has never made sense to me.
The design goals make sense. See above. It’s just that I find MVC itself — the abstraction and implementation of those goals — to be unhelpful at best, on a day I’m being charitable. On a day I’m telling it like it is, I’ll just bluntly say MVC is the most confusing pile of acronym bulls**t I can think of.
Tell me, without knowing what MVC is, what would you guess the model represents? Controller? View? It would be bad enough if these were abstract terms like “node” or “resource,” but they’re not abstract. They hint at meaning, and then you discover that MVC doesn’t align with the hinted-at meaning. Instead, the M, V, and C represent concepts that are vague and hard to understand, and are kind of a stretch to mentally fit with the terms. This is worse than abstract, it’s misleading. It’s like bait-and-switch for someone who’s trying to grasp what it means.
I don’t know where MVC came from and I’m sure I won’t change my mind if I find out. I have a hard time believing that I’m the only one who wishes someone had formed a committee[1] to discuss what kind of names to represent the concepts. Especially since there are so many frameworks that abstract things slightly differently, because MVC apparently doesn’t suit their designers either, and thus it’s necessary to explain the relationship between Framework X’s view of the world, and how that loosely maps to the MVC view of the world. It becomes a sloppy comparison to a sloppy analogy.
Even more fun: some folks try to invent an MVC framework, like the original ASP.NET, and “get it wrong,” to disdainful criticism. Then they have to reinvent it, sometimes several times.
It’s kind of like the OSI 7-layer model, which everyone agrees doesn’t actually represent modern networking technology stacks cleanly, and yet everyone talks about the OSI layers. There’s a clean way to think about networking layers, but the OSI model ain’t it. Or NoSQL — the most unhelpful, undescriptive name for an … amorphous category of technologies or worldviews or design patterns or whatever… ever.
The lesson: great concepts that teach great truths, and could result in great advances in engineering due to a common mental model around which other things can be built, can be sidetracked by slapping an ill-fitting monicker or set of analogies on them. And sometimes we never seem to get another chance. NoSQL believers can’t seem to think of anything better than NoSQL as a name (and neither can I, as much as I deplore the NoSQL name). We’re stuck.
I’m sure my strong opinions on this are a) somewhat ignorant and b) not shared by everyone. Discuss! :-)
[1] Yes, I’m aware that awful things come from committees, like SQL. But I have faith that it would have been better than MVC.
Using AdBlock to clean up the UI on sites I use a lot
I use LinkedIn a lot. I also use various Google properties a lot. Both of them have a bunch of distracting and annoying UI features that just get in my way. I know Google and LinkedIn have a vested interest in catching my attention and trying to get me to use their products in the ways that will make them the most money, but as a user, I don’t care what they want. I care what I want.
So I’ve used AdBlock to clean up the elements I don’t want. Here’s how.
I’m assuming you use one of the many excellent AdBlock extensions for whatever browser you use. If not, you need to do that — reclaim your browser and view the web the way you want it. Every time I use someone else’s computer and they don’t have an AdBlock extension it blows my mind.
LinkedIn Endorsements
LinkedIn has a new endorsement feature. They show me a big banner at the top of the page every time I view a connection’s profile page.
I don’t care. I don’t know enough about most of my connections to endorse them publicly, and I don’t want to see that nonsense. So I AdBlock it. This is easy to do — just right-click and select the context menu item to block that whole banner.
I’ve also hidden the endorsements on my profile. It’s nice that people want to endorse me (although I think LinkedIn is almost bullying them into it by putting the obnoxious endorsement box in their faces), but most of the endorsements are for things I’m not actually expert in. Some of them I literally know nothing about. It’s interesting to see the difference between what people think I know and what I actually know.
Google+ Notifications
Somewhere I read that Google+ has quietly become a significantly large social network, with a large fraction of the number of users that Facebook has. I know why that is: it’s because Google has tied a Google+ account into nearly all of their services, and most people I know have multiple Google profiles. I have seven, and a couple months ago I had eight. Google can count me multiple times if they wish; that’s their business.
What’s my business is whether I let them annoy me with notifications. You know that irritating notification bar at the top of the page in all of the pages on Google’s domains? This one?
As far as I can tell, Google doesn’t allow you to disable notifications. The only way I know to get rid of that irritating red animated 1 button is to click on it so it turns back into a faint gray 0:
No offense, guys, I do consider you friends, but I don’t care that you added me to your circles :-\ I don’t use Google+, regardless of what Google tries to make you believe. I bet you were probably bullied into adding me, just to make some annoying suggestion box go away.
The Google+ notifications box is a little harder to hide, because it uses CSS classes to generate the numbers in the box. But a little digging into the page source yielded the following custom AdBlock rules:
google.com##DIV[id*="gbgs"]
google.com##SPAN[id*="gbgs"]
And now all of my Google pages are free of one more time-wasting, attention-disrupting, productivity-killing distraction.
Updated spam controls
I’m not using my previous combination of Bad Behaviour + WP-Gatekeeper anymore. I’ve removed them in favor of ordinary reCAPTCHA. Although it lets a lot of spammers through (almost a thousand spam comments in the day I’ve had it enabled) and Bad Behaviour let only 1 or 2 a month through, it became clear that a lot of people were getting blocked wrongly by Bad Behaviour.
This means that I can’t practically moderate the spam queue. If you submit a comment and it doesn’t get published, you either went into the spam queue that I ignore, or I decided to censor you ;-) Feel free to email me if you think anything’s wrong.





