When Good Programmers Code Bad Perl

2003-07-31 5:37PM

I am pretty adept at Perl, and I had trouble deciphering this one -- Perl Angst. The first line (@fields = (0, @fields); threw me for a loop as in "why the... what the... well, that's weird." But, I read on assuming it would make more sense once I got to the applicable part.

while ($r = $q->fetchrow_arrayref) { Well, that's a common idiom. That made sense, $q is obviously a DBI statement handle, and he is fetching array references from it into $r and looping over the set. Any Perl coder has seen that more than once. And, the next line (my $topic = $r->[0];)) makes perfect sense, too. But, then there's the next line...

while ($topic != -1) {
That could really use a comment. Why negative one? Why is it in a while loop? It becomes apparent, later, that $topic gets reassigned and -1 is a sentinal value in the result set from the DB, but a quick comment would help put it in context.

The next bit is just some Perl-fu:

foreach $i (1 .. $#{$r})
{
$totals{$fields[$i]}->[$topic] += $r->[$i];
}
$topic = $parents[$topic];

So, $i is spanning over the length of @$r, but it is being used to index both @$r and @fields. That seems a little awry, but we can assume that @fields was populated with a call to $q->{NAME}->() or such. But, still, it's a terse line. And, where did @parents come from, anyways?

Sick of How-To-Blog Blog Entries

2003-07-31 5:11PM

Why do people point out blog entries that (try to) detail how to create a successful blog like this entry -- How to Save the World? I am so damned sick of these things (not that that stops me from reading them... I am indiscriminate in my consumption but will make remarks after the fact regardless).

Blogging to me is masturbation (in a figurative sense). I blog about things I would normally send an email out about to my group of fellow computer/car friends. With a blog, I can post it there, they can read it, like-minded people can read it, etc. I really don't feel the need to have a "consistent writing style," "memorable theme," or "infectious quality." That may be the case with my entries, or it may not be the case, but I do not consider this a medium that requires dramatic self-fulfilling improvement.

And, no, I am not saying there is anything wrong with utilizing a blog to improve one's communication or whatever. I am just making a counterpoint.

I blog for masturbation. I blog what I normally would have emailed to friends. I, even, blog items such that I may not have emailed because blogging is such a useful medium more conducive to certain topics and discussion(s).

I like blogging; I just don't look at the way that person does. Not that I am making a value judgement one way or another. I am all for people creating well thought out blog entries, but no one else has ever written an essay on "How to Run a Crappy Blog" or "I Don't Give a Rat's Ass; I Just Pound on the Keyboard."

New Exegesis and Python

2003-07-30 11:05AM

Exegesis 6 is out!!! (Oh yea, there might be some Python news fluttering around, too.)

Red-Blooded, American Male

2003-07-29 6:13PM

Via TheMiddle in On the road again:

Tighten up that rear brake pedal free play, fix the speedometer cable on the front wheel, and adjust the handlebar angle and I'm in business.

That phrase, or something like it, should come out of the mouth of any red-blooded male at some point in his life. It would be even better if it was prefixed with "I pulled over to the side of the road to..."

IE6 Still Growing?

2003-07-29 6:03PM

That's weird -- Microsoft's IE 6 global usage share continues to rise. Mozilla has, actually, taken over IE in my logs. But, of course, it helps that Scott and I (and I believe, gnubbs) use Mozilla. So, that's not saying much...

Actually, don't even know why I am putting this in as an entry...

Useless Software -- Dashboard

2003-07-29 5:23PM

So, I gave SNP Software's Dashboard a try today. Yea, completely useless. I was surprised at how utterly useless it was.

A 404 Page, I Couldn't Help But Take It

2003-07-28 5:57PM

I could not help but take this page. It's just too darned amusing -- 404 baby. 40-freakin'-4.

The Ultimate Source Code

2003-07-28 5:23PM
use PSI::ESP;

my $clairvoyantDWIMmery = PSI::ESP->new();
my $arrayOfObjects;

for(1..$clairvoyantDWIMmery->getAppropriateNumber())
{
    push $arrayOfObjects, $clairvoyantDWIMmery->createAppropriateObject();
}

$clairvoyantDWIMmery->doTheRightThing($arrayOfObjects);

I believe that non-technical managers think this is what all source code looks like.

Grrr... Still Pissed

2003-07-27 3:53PM

I am still pissed about the last AutoX. I went through the slaloms waaay to slow. My steering inputs were jerky; snapping the wheel back and forth violently rather than continuous and fluid. I would brake too long for the sweepers -- braking braking braking turn turn turn *damn* I am going to slow. Then, I would have to try and build speed in the turn causing me to exit the turn with excessive understeer giving up all of my traction at corner exit.

Grrr.... competition. The next one is a week from today, though. Hopefully, I shall have a much better outing.

Quotable SCC

2003-07-25 7:49PM

In the most recent issue of Sport Compact Car Magazine, they pitted the EVO VIII against Germany's finest -- Porsche 911 Carrera 4S, Bimmer M3, and Audi S4. But, here's the quote from the article I liked the best:

Before we start, we want to get something straight. This is a performance magazine and we evaluate cars for their speed and value. We're not going to evaluate how solidly the doors close on the M3 or how easy it is to get in and out of the S4. We couldn't care less.

We also couldn't care less about image or prestige. If you want street cred with your golfing pals, go buy the Porsche. We don't play golf. We drive fast. All we want to know is which is the better driver's car.

Must Remember This Web Services Security Article

2003-07-25 5:53PM

Must remember this web services security article -- Web Services Security, Part 4

Coming to Terms with Java Versus "Scripting" Languages

2003-07-25 11:37AM
if you enjoy severe lack of type safety and more dynamic binding that you can shake a stick at, don't use Java. If you want to allow your users to inject random bits of code that do not adhere to any sort of contract in ways that man and God did not intend...

I liked the rant (via The BileBlog in Those Dreaded Words... 'Beanshell Integration').

Is the Economy Zero-Sum?

2003-07-24 4:27PM

Is the economy zero-sum? That is, there is a specific amount of economic tokens m; and m is static (or the rate of change of m is so small it can be considered negligible). So, the "money" just processes itself throughout the population and institutions; all the while, never really changing.

That can't be right. The production of goods and services rises over time creating more economic tokens, right? But, population also increases. So, if you have a population of p, is the following ratio mostly static:

 m / p

The economic system is confusing. They really need to get http://www.askgreenspan.com/ up and running. There has to be an F=ma, V=IR for it.

And, while I am on the subject, what the heck is the National Deficit? Is it just a paper number -- the government, on paper, brought in x dollars in 2002; but on paper, they spent y dollars where y is greater than x? So, it's a distributed debt to a bunch of different sources? Can the National Deficit (and the underlying effects thereof) be derived from the F=ma of the economy? If not, it should be.

This all comes from watching Dennis Miller on the "Tonight Show" last night. I don't like comedies, nor do I much care for comedians; but he and Jon Stewart are just witty -- very funny fellows.

Buy Me Perl 6 Essentials

2003-07-24 2:19PM

So, Xmas is like 5 months away; and my birthday is about 8 months away; but if you really wanted to buy me something (because I am that cool of a guy) -- Perl 6 Essentials

Blog Utilities Should Have Feed Aggregators Built-In

2003-07-22 5:41PM

There's been some talk around the blog-o-sphere about response codes to blog entry requests (the context of this is usually brought up in terms of Pie/(n?)Echo/Atom stuff). Some of the comments raised the issue of bandwidth, which all goes back to a post Dan Sugalski made in Blog propagation and death to polling. Why do we have to poll for the feeds? We have "pinging"; why not link that up to aggregators?

What I am thinking about is building in a web-interfaced "Feed" aggregator into Movable Type (or, whatever blogging tool). Put something in there akin to Bloglines or NewsApp. Now, with your own web-based aggregator (if your blog is http://example.com/blog, your aggregator would be at http://example.com/aggregator, or whatever), you can begin to subscribe to other blogs' feeds from your own server. When you go through the subscription process, the site you are subscribing to automatically knows to "ping" your aggregator when new content is posted. So, we have yet another feature to add to a blogging tool, a method for people to subscribe to your blog and have your blog know to ping them during updates.

Stupid Bearings

2003-07-21 10:41PM

Bearings are one of the most ubiquitous devices on mechanical systems. So, this would lead one to believe they might be relatively inexpensive. Right? Right? They are everywhere. I probably have several dozen different bearings in my car.

I called the dealer today to get pricings on my front wheel bearings. $218 a piece. Shell-shocked... absolutely shell-shocked. I had them check again. $218. That was just blow #1, though.

More Autocross

2003-07-21 6:29PM

I did not do so well at yesterday's AutoX. My attention was very diffused. Several people were showing up to watch, and I had told them to show up around 11am counting on the fact that my category, ESP, never, never runs in the first heat. Well, yea, I was in the first heat -- first car away at 10am. So, I was half racing and half watching from the staging area so I could wave my friends over when they arrived. I couldn't get into the right mindset. I was without focus, which manifested itself into me driving timidly.

The course, itself, was a fast, wide-open course (a 'Vette-friendly course). I, on the other hand, took the widely-spaced slaloms too slowly, braked too early entering into the increasing radius sweepers, and braked for too long into the sweepers. So, the course layout, here's what it looked like (generally):

JavaScript Pattern

2003-07-21 10:43AM

I think anyone who has ever done web development has used this JavaScript pattern style.display= (style.display=='none') ? '' : 'none' -- Nifty Javascript Pattern

Oh the Depravity

2003-07-18 2:23PM

Oh the depravity -- Naked "Bambi" hunts prompt protest

First Computer Experience

2003-07-18 12:07PM

My first experience with a computer was very similar to Kasia's first experience with a computer. I can't remember the make or model of it, but it was Scott's (do you remember what it was?). In a similar fashion to her's, you loaded cassette tapes into it to run programs; and it was an all-encompassing unit i.e. the monitor, keyboard, tape drive, motherboard, etc. were all in one big device. We used to play this horse-betting game on it constantly (I was 12 or so).

I guess this could be considered the beginnings of both my love of computers and my love of gambling.

10 Java Puzzlers

2003-07-18 11:37AM

10 Java Puzzlers. I got 1, 2, 6, 8, and 9 correct; but missed 3, 4, 5, 7, and 10. I don't think 5 out of 10 is that bad considering how rusty my Java is. If it was in Perl, I would have been money.

Interview with Jon Stewart

2003-07-18 10:17AM

The Daily Show with Jon Stewart is one of my secret TV passions. It's fsckin' funny. And, I would be inclined to say, thanks in no small part, to Jon Stewart. Here's an interview -- Bill Moyers Interviews Jon Stewart (via Michael Tsai's Blog).

Bloglines (Again) -- Now That's What I Am Talking About

2003-07-17 6:37PM

So, I made a couple criticisms of Bloglines in the last entry Found A Web Base RSS Aggregator -- Bloglines. Well, check out Bloglines News:

July 17, 2003

We have made some changes to the subscription process to make it easier to subscribe to feeds with just one click. Unless it isn't clear which feed you wish to subscribe to, the confirmation page will no longer appear. We have also added subscription check boxes to the Top Feeds and New Feeds pages, so that it's easier to subscribe to multiple feeds at once.

July 15, 2003

When clicking on a folder name, all unread items within that folder are now displayed on one page in the right pane, for easy viewing. We also continue to tweak the colors and fonts to make the display easier to read. And we smashed a couple of bugs for good measure.

That's what I am talkin' 'bout.

What About Linux Software That Doesn't Run on Windows

2003-07-17 11:53AM

What about all the people who need to run software that doesn't run on Linux? Ummm... what did people do when they want to run software that doesn't run on Windows (not that I can come up with a good example right now, but I know there is one)?

Found A Web Base RSS Aggregator -- Bloglines

2003-07-16 12:47AM

I was in the hunt for a completely web based (RE: no need to download and install additional client software) RSS aggregator (Web Front-End RSS Aggregator). Well, I finally stumbled upon one --Bloglines.

My preliminary findings are favorable. It's fairly easy and does what it claims. I still have a lot of playing left to do, but here are some initial nitpicks (hey, I am a user, being "nit-picky" is my duty; I did this with Mozilla Firebird, too, even though I love it -- First Day with Mozilla Firebird).

Yep, that's it. Just two gripes thus far. That's a pretty good score. I'll be sure to blog again about it.

Systems Development Occurs in Pulses CopyCats

2003-07-15 6:11PM

Slashdot | The Evolution of Software. Copycats -- Software / Systems Development Occurs in Pulses

Web Front-End RSS Aggregator

2003-07-14 5:53PM

There's all these RSS aggregators out there like Feedreader and SharpReader and such. But, what I would like to know is if there is a completely web-based one?

How I would want it to work is something like I hop on over to http://example.com/yourRSSAggregator/setup.php, sign up for an account, and begin placing URL's to RSS feeds on the page. Then, I could go to something like http://example.com/yourRSSAggregator/index.php, and see some kind of UI with what feeds I had subscribed to all laid out.

Does that exist? I guess I could google and stumble amidst the blogosphere trying to find something like this, but I am lazy.

i 0wnZ j00!!!

2003-07-10 6:51PM

I administrate two boxes. However, I am not a System Administrator; I would never want to be. Unfortunately, these two boxes have a sufficiently complex Apache install (the subject of one of my first blog entries in Install Apache 2.0 w/ FreeTDS (SQL Server), PDC Authentication, etc.). So, because of this complexity and the fact that it is slightly non-trivial shoehorning Debian onto a Dell Poweredge 2550), the task of system administration of these boxes falls upon me.

But, I take great pride in keeping them secure; always making sure OpenSSL, Apache, PHP, etc. are up to date; only allowing ports 22, 80, and 443 open; keeping a watchful eye on 'who -a'; etc. But, we have a developer who wants to access his home directory over Samba. So, Samba was setup and remained running. And, it fell behind a few patch-levels.

Building Custom Hot Rods

2003-07-10 6:37PM

Bruce Eckel told me to go build custom hot rods in Sourthern California! Do What You Love. If only I was a better sketch artist so I could mock up the designs I have floating in my head.

The Fact that the US is Still Doing Fair Trials is a Good Thing

2003-07-09 11:11PM

You would think I would stumble upon crazy liberal articles more often than not. But, for some reason, I don't. I just never stumble upon any crazy Leftists waving Socialism around and claiming the US has become murderous Imperials enforcing their Christian morality on the world's population through economic sanctions. I know that they are out there; I just never stumble upon them. And, if I was to come across them, I am sure I would feel compelled to blog about it. Something about gross oversights of judgements absolutely compels me to blog. But, what was I saying...

Imagine you lived in a country being terrorized by "foreign" invaders. They were seizing land, levying tazes, taking quarter in citizen's homes (I hope you have all made the analogy by now). Then, one day, these armed foreigners massacre an assembly of people. You would call for blood. You would want them all hung. I know I would.

But, a man steps forward and says that a fair trial for the foreign soldiers is in order. He claims that we would be no better than them if we were to forego giving these other men the due process of law. This man so firmly believes in the ideals with which his country is (or, is to be) founded upon, that he stands up and defends these men against his own friends and countrymen.

Yes, I am referring to the Boston Massacre, which directly preceded the Revolutionary War. It was our to-be-2nd President, John Adams, who demanded that the British soldiers who commited the massacre be given a fair trial. And, he went on to defend them. I can imagine being there and hearing Samuel Adams turn to him and say:

John, have you gone out of your mind?

Programmers are Different than Engineers

2003-07-09 12:47PM

All right, here's another one... Actually, just go read his whole weblog; it's good stuff -- Eric.Weblog(). Here is the entry, though, that caused another one-liner -- Are Programmers Engineers?

Marketing for Geeks

2003-07-09 12:23PM

Marketing for Geeks! This is good stuff. It breaks marketing down into engineering-like terms. Part 1 -- Choose Your Competition. Part 2 -- Marketing is not a Post-Processing Step. Part 3 -- Act Your Age. (Via Simon Willison.)

XML::Smart... Not So Much

2003-07-09 2:29AM

(Or, how I am using it completely incorrectly; but we'll see)

So, earlier, I mocked up a Perl script demonstrating how to publish using straight XML a la Mark Pilgrim's Python example.

I had never used XML::Smart before, but I figured it could not be that hard. The XML that needed to be produced was simple, and the Python code on Mark's site looked simple enough. Of course, this was all before I encountered the befuddlement of XML::Smart.

Did Echo Fork Already?

2003-07-08 7:53PM

Okay, here is diveintomark's echo feed and here is joelonsoftware's echo feed; and they don't look very similar at all. That is, if I was going to write some code to parse it, I would write it for one and not the other. (My MT echo template is based on diveintomark's MT template.)

Where Mark has <subtitle>, Joel has <title rel="subtitle">. Where Mark has <modified>, Joel has <date rel="modified">; etc., etc., etc., so on and so forth, repeat ad nauseam.

I suppose I could go read up on the Echo Wiki Frontpage which one is more accurate (or more desired if they are both equally valid), but I find Wiki's too difficult to navigate. Other's love them; I just find them jumbled.

J$


$a="A"and$'_="J";map{$a++}(66..ord
);$$_='$';print$'a,$$a

I Am Regex Spoiled

2003-07-08 6:37PM

Maybe I am just too used to one way to do regular expressions. Admittedly, even doing them in PHP with ereg() and ereg_replace() (or, even, pereg() and pereg_replace()) feel clunky and clumsy. But, in Getting Started with Regular Expressions in .Net, this is their version of a regex:

Dim SearchString As String = _
   "A cobra is a very, very venomous snake!"
Dim Pattern As String = "\bve\w*"
Dim oMatch As Match
Dim MatchHits As Integer = 0
oMatch = Regex.Match(SearchString, _
   Pattern, RegexOptions.IgnoreCase)
 Do While oMatch.Success
    MatchHits = MatchHits + 1
    oMatch = oMatch.NextMatch()
      If oMatch.Success Then
         MessageBox.Show(oMatch.Value)
         MessageBox.Show(oMatch.Index)
         MessageBox.Show(oMatch.Length)
      End If
Loop

It seems so much more natural in Perl (here is an overly terse implementation of the VB.Net code above translated):

$_ = "A cobra is a very, very venomous snake!";
print join "\n", $&, $+[0] - length($&), length($&), "\n" while(/\bve\w*/g);

Even at maximum verbosity, the Perl "feels" cleaner:

my $string = "A cobra is a very, very venomous snake!";
while($string =~ m/(\bve\w*)/g)
{
    print $1, "\n";
    print pos($string)-length($1), "\n"; 
    print length($1), "\n";
}

J$


$a="A"and$'_="J";map{$a++}(66..ord
);$$_='$';print$'a,$$a

Finally, I Can More Accurately Develop My Fluid Intake OCD

2003-07-08 6:29PM

I drink a lot of coffee (a lot). I, also, from time-to-time imbibe in the heavenly brew of beer. Now, maybe it is from playing high school sports where coaches adamantly reinforce the notion that allowing yourself to dehydrate is a cardinal sin punishable by extra calisthenics (if that makes sense) or maybe it is just another form of my OCD leaking through, but I absolutely have to stay hydrated. Caffeine and alcohol are both diuretics, so I knew I needed to increase my water consumption to compensate, but I never had an algorithm to use. I had to just "play it by ear."

Well, if you suspend your disbelief of the Internet doling out less-than-accurate statistics and take at face value what two Internet sites have to say, I now have an actual calculation I can perform.

Here's what I am looking at:

Perl Script Demonstrating How to Publish Using Straight XML

2003-07-08 5:53PM

Mark asks for a Perl hacker [who] could mock up a similar prototype to his Python implementation of publishing via straight XML. So, what's 20 minutes of Perl hacking...

Uppercase Perl String Comparison Operators

2003-07-08 12:43PM

I learn something new about Perl everyday. I didn't even know the string comparison operators had uppercase versions ever -- Use of LE is deprecated

HowTo Create Feeds for Categories in MovableType

2003-07-07 5:47PM

I had done a bunch of Googling to discover the "right way" to do this, and I came across many different methods for constructing feeds for creating category-based syndicate feeds. So, after messing around with the different methods, I settled upon doing it this way.

  1. Go to the MovableType menu for your blog.
  2. On the left, click on the "TEMPLATES" button.
  3. On the listing of templates directly underneath where it says "Archive-Related Templates," you'll see a hyperlink for "Create new archive template." Click on that one.
  4. Give your template a name such as "Category RDF" or "Category RSS 2.0."
  5. For the body of the template, I used the following respectively, but Internet searchs provide a bounty of them:
  6. Hit "Save" to create the template.
  7. Now, back on over to the menu buttons on the left, click on "WEBLOG CONFIG."
  8. Up at the top of that page, you'll see a navigational menu looking like " Core Setup | Preferences | Archiving | IP Banning." Click on "Archiving."
  9. Click on the "Add New" button and up pops a window asking you to select an archive type and a template. For archive type, choose "Category"; and for the template, choose the name of the template you just created ("Category RDF" of whatever) and hit "add."
  10. Now, that should do it. But, in terms of placement of the files, I have an "index.xml", "index.rdf", "rss20.xml", and "feed.xml" under each category's subdirectory. So, that is, there's an http://www.alpha-geek.com/perl/index.xml, http://www.alpha-geek.com/perl/index.rdf... and http://www.alpha-geek.com/ocd/index.xml... so on and so forth -- one for each category. To accomplish this, use some of the MT tag-fu.
  11. In the same window under your archiving preferences, you can specify an "Archive File Template." If you leave it blank, MT uses its defaults. You can, also, specify "just_put_it_here.html". Or, using MT tags, you can say "<MTArchiveCategory dirify="1">/index.xml" (You can actually go crazy with that and do a lot of directory-fu.)

This MT stuff is pretty nifty.

J$


$a="A"and$'_="J";map{$a++}(66..ord
);$$_='$';print$'a,$$a

The Foos Has Gone to All New Levels

2003-07-07 3:19AM

Just when you thought the game could become no more exciting.

So, I am a pretty avid foosball (table soccer) player. It's a great bar game. It's such a great bar game, I went out and got myself a foosball table (from that exact store I linked to, as a matter of fact). Over the course of playing foos, it was often bantered about that we should be keeping statistics. For a while, some of us kept track of our respective records against one another, but nothing formal came of it. But, now, it has been standardized and finalized -- here is the official "J$" nomenclature for tracking foosball scoring.

So... Things Have Changed

2003-07-06 11:41PM

Yep, I finally got around to consolidating the blogs. I tried to maintain as much backwards compatability as feasible, though. alpha-geek.com/left and alpha-geek.com/right are still there, and the different RSS/RDF feeds are in place for those sites (as they were). As a matter of fact, there is many different feeds for each category (RSS .91and 2.0, RDF, and Echo 0.1). So, if all you want to read is my Perl postings, just suscribe to that feed.

When Google's Down, The Internet Goes Down Too

2003-07-02 11:03AM

I ran into this problem when Google went down and so did Zawodny (Google API Offline Aagain, MT pissed. Once Google is down (if you have used the MTGoogleSearch tags), MT cannot rebuild pages.

Here's the fix.

Echo Is Not /R(SS|DF) [0-2]\.[0-9]{1,2}/

2003-07-01 2:37PM

It all starts here -- Scripting News. Actually, no, it all starts here (Netscape), and where I first ran into it -- the little configurable slashboxes on /. And, if you have paid no attention to all of this "content syndication" brouhaha and you cannot decipher the "line noise" at the title of this entry and you have not noticed that I have made several other posts referencing this agglomeration of "design by blogging" a.k.a. "engineering principles applied via yelling the loudest (even though everyone is still just using a keyboard no matter what your BlogShares worth is)", you have no idea what I am talking about. Consider yourself better off. What I am talking about is RDF which begat RSS 0.9x which begat RSS version... version... uhh... well... it would take a numerological researcher to figure out the family tree from there.

Originally, RDF and RSS were ways to notify other places of content. Just look at the slashboxes. They are simple. You use a structured file format in a publicized location that contained a couple of key items -- the title of an article and a URL to access the article. After that, throw in some more simple items like maybe an author and/or a brief description; then, wrap the whole thing up in some meta-data that refers to the original site. Voila! Any barnyard animal with an install of Perl and LWP can "syndicate" any other sites content.

But, there's a difference between barnyard animals and the Internet horde. Cows and pigs and sheep are content with the grain they receive. The denizens of the "blogosphere" want meta-data with their breakfast. Enter in a new conceptual model of a (for lack of a better generalization) standard, self-contained, published Internet object (be that what it may). Let's call that Echo (or Pie or whatever... anything but R[A-Z]{2}), and let's have someone explain why we need it for content syndication What is Echo?. Take that, grab a pair of scissors, and run with it; and what do you get -- a set of uniform "services"; the mother of all API's that will define how to interact with blogging; an effort to not only deprecate the common methods of syndication, but to also replace any common methods of interacting with blogging and blog-like software (and an obligatory link to a kuro5hin entry describing how and why that is going in What's Wrong with the MetaWeblog API?).

So, now what has happened? We have lost the Unix philosophy. The underpinning principle or set of principle(s) that govern the Internet.

Do one thing and do it well.

Why would I use Echo for syndication?