0 comments suggest edit

Joel Spolsky totally nails it this time with his article on the Developer Abstraction Layer. This is one of his better articles. It is a tad on the long side, but well worth the read. Try to get it in your manager’s hands.

With a software company, the first priority of management needs to be creating that abstraction for the programmers.

If a programmer somewhere is worrying about a broken chair, or waiting on hold with Dell to order a new computer, the abstraction has sprung a leak.

In summary, a development company is a lot more than the developers. In fact, it is a huge support organization designed to remove abstractions for the developers so they can let the magic happen. Beautiful.

0 comments suggest edit

If you are seeing duplicate posts from my blog in your feed aggregator, my apologies. I am dogfooding the latest development version of Subtext straight from the Subversion repository. Unfortunately, my unit tests did not catch the fact that I changed the link and guid elements from fully qualified to virtual URLs.


I should have a fix soon.

UPDATE: All fixed. Sorry for the brief disruption.

0 comments suggest edit

Rainbow Eric Ramseur who works on the Rainbow 2.0 Portal project looks like he has made progress inimplementing Subtext as the blogging module for Rainbow. That is pretty sweet.

I have to admit I do not know much about the Rainbow system other than it is a Content Management System written in C# with versions for ASP.NET 1.1 and ASP.NET 2.0. It definitely bears investigation to see how it compares and contrasts with DotNetNuke.

I am definitely interested in seeing how easy (or not) it is to integrate Subtext into another system. One thing I have been working on when I have time is to refactor Subtext to clean up some code and make it easier to understand the source. As a team, we also hope to make the codebase even more modularized. This stuff is fun.

0 comments suggest edit

Red Paperclip This is one of the most ingenious methods of self promotion I have ever seen. Not to mention an interesting way to obtain a house.

Mr. Galloway sent me this link to a guy who is trying to trade a red paperclip for a house. Well not directly. He is attempting to negotiate a series of trades. In each trade, he attempts to get something of more value than the previous item. In the end, he hopes to trade for a house.

It sort of reminds me of the way you teach people about exponential growth. Start with a penny on day 1. Double it every day. And at the end of the month you are a multi-millionaire (unless it is February).

But of course, this is not exponential growth in the true sense of the word. Really, it is a demonstration in some small part of how wealth is subjective. The value of an item is really dependent on the value the people involved in a transaction see it. In a good trade, both parties are become wealthier because they both received something of more value to them than the item they gave away. Otherwise they wouldn’t have made the trade in the first place.

The other lesson may be a demonstration of how much people will give to be a part of something public. Just like reality television. In some small way, as his site makes the rounds, these people get their 15 minutes of fame.

In the end, when this guy receives his house, it will be remarkable to compare that house to the value of the paperclip. But the value of the publicity and of taking part in this interesting experiment may make the red paperclip quite valuable to the two women who received it. Of course this guy will be the biggest winner of all for his ingenuity.

0 comments suggest edit

Gorilla Swinging Jayson emailed me to let me know that my PageRank is now

  1. That puts me up in the ranks of the big guys like Scott Hanselman. Woohoo!

You realize what this means dontcha? After all this time and hard work, I moved from a 5 to a 6 on a 10 pt scale. It means I am no longer flunking the blogosphere. I am getting a D baby! Woohoo! I can’t wait for my next highschool reunion so I can shove this back in the face of all the popular kids.

  1. Me

    You thought I was a loser, eh? Well check this out! My PageRank is 6! What’s yours? Who’s the loser now? What!? What!? That’s what I thought!

  2. Popular Kids

    Ummm, who are you again? I don’t think you went to this school.

  3. Me

    Oh. Umm. Right. My next reunion isn’t for another year but I couldn’t wait.

It is great to have another scale of measurement in order to bolster a false sense of superiority and privilege over other people.

  1. Me

    Oh, lookie lookie here. Mr. Atwood’s PageRank is only five. Poor guy. How does he live with himself? Maybe I’ll start a raise Atwood’s PageRank campaign.

Don’t worry, I won’t let it change this blog or myself one bit. Except for the minor detail that in order to contact me, my contact form now sends an email to my publicist. And if you don’t mind, please refer to me as the blogger formerly known as Haacked.

Yes, for you humor (or English) impaired, this is satire. I am really not that infatuated with PageRank. No really.

UPDATE: Ummm so this is kind of awkward, but Mr. Atwood points out in my comments that his PageRank™ is actually a 6 if you put the www. in front of his URL. I am afraid I must end the Raise Atwood’s PageRank™ campaign. Sorry about that Jeff. Heh Heh. No hard feelings, eh?

And I am actually sincerely glad to have a higher PageRank™. So I did not mean this to punk Jayson in any way shape or form. The higher the PageRank™ the more AdSense Revenue people I can reach with interesting technical content.

0 comments suggest edit

Madness - Image from DC
Comics There are a lot cool javascript libraries floating around the Intarweb these days that add cool behavior to web pages. My favorites are the ones that you simply add to the head section of your website and control via markup. It is a great way to enhance structural html markup with Javascript.

Unfortunately many of these attempt to hijack the window.onload event. Ok, a show of hands (and I have been guilty of this as well). How many of you have written code like this to handle the onload event in javascript within a .js file?

function init()

window.onload = init;

Stop it!

That line of code will completely wipe out any other functions that were attached and ready to handle the onload event. How arrogant of your script to do so. Instead, your script should learn to play nicely.

Unfortunately, Javascript doesn’t support the delegate syntax that C# has. It’d be nice to be able to do this.

function init()

window.onload += init;

But that won’t work. One approach I found on Simon Incutio’s blog (which is used by the original LightboxJS script) involves using a method that safely attaches an event handling method to the onload event without overwriting existing event handlers.

It works by checking to see if there any methods are already attached to the event. If so it attaches a new anonymous method that calls the original method along with the method you are attempting to attach.

Here is a snippet demonstrating this technique.

function highlightXFNLinks()
  // Does stuff...

// Adds event to window.onload without overwriting currently 
// assigned onload functions.
function addLoadEvent(func)
    var oldonload = window.onload;
    if (typeof window.onload != 'function')
        window.onload = func;
        window.onload = function()


This is pretty nifty, but there appears to be a whole new school of script libraries that provide this sort of functionality for attaching to any event, not just the window.onload event.

I am sure you Javascript Gurus will expose how out of date and ignorant I am of this area (it is true) but the few that I have heard of that seem to be catching on like wildfire are the Prototype JavaScript Framework (often just referred to as prototype.js), the Dojo Toolkit, and Behaviour.

I will probably end up rewriting all my libraries to use one of these tooltips so that I stop duplicating code. Since each of my javascript libraries are stand-alone, I make sure to include the addLoadEvent method in each of them. But I think its time to allow a dependency on another script to avoid this duplication.

0 comments suggest edit

UPDATE: The script now uses regular expressions. This fixes the problem where it translated met to me.

You’ve heard BillG say that we need Microformats. Do you catch yourself asking But Why?

Good question. Right now the Microformats movement is dealing with a bit of a chicken-egg problem due to a lack of tool support. Without tools to make microformat creation simple for content publishers and to make microformats more usable and visible to content consumers, it is difficult to see the point of the effort. The effort / reward scale is currently tipped heavily towards the effort side.

That may soon change as Microformats start taking over the web. In preparation for an article I am writing on the topic, I have been doing some thinking and reading up on Microformats. I won’t spoil the article by discussing Microformats in much detail here, but instead will highlight one microformat and my effort to make it more visible.

Do not reinvent the wheel!

Remember, Microformats are not about trying to reinvent the wheel. In fact, it is a key principle of the Microformat philosophy to build on what already exists. For example, even before microformats there was an initiative called XFN (or XHTML Friends Network). The idea is to add semantic information to web links in the form of the rel attribute to signify relationships.

This existing format has been adopted as a microformat. When linking to a friend’s blog or website, for example, you might add the following rel attribute.

<a href="https://haacked.com/" rel="friend met">...

This incidentally creates a network that is indexed by XFN crawler. But how does the average visitor to your site even notice this? Unless they view source, they won’t. This sort of goes against the Microformat principle of focusing on humans first and machines second. Better tools are needed to highlight interesting microformats to end users.

So let’s expose our friends

Well that is where my XFN Highlighter script comes in to help in a very small way. This is yet another Markup Based Javascript Effect Libraries in the style of my table mouse over script, and Lightbox JS. As more web publishers start adding microformatted content to their sites, I think we’ll see a proliferation of these type of scripts targetting this content.

Note that this script is a bit rough around the edges (for example, I need to replace indexOf with regular expressions). I slapped it together quickly one evening and there are many improvements that could be made. But the current version works well enough and I figure it is time to share it so I can generate some feedback (hopefully!).

What the script does is look through your html for links using the XFN microformat. It then places a little icon next to links that express a relationship as well as a special tooltip that lists the relationships info. But rather than talking about it, I should give a demo. Again, I will have to ask you to try this out in a browser since most aggregators will not display my javascript and CSS. Here are a list of a few people I know. Go ahead and move your mouse over them. Go on now.

A few friends and acquaintances

How to Use


​1. Add the following Javascript declaration to the header.

<script type="text/javascript" 

​2. Include the XFNHighlighter CSS file (or cut and paste these styles into your own stylesheet).

<link rel="stylesheet" href="css/XFNHighlighter.css" 
    type="text/css" media="screen" />

​3. The CSS references an image friends.png in the images directory. Make sure that image exists or change the CSS to point to an appropriate image. This image is placed next to the link.


​1. Add an appropriate rel="value" when linking to a friend or acquaintance. Check out the list of relationships from the XFN quickstart page.


Grab the files (neatly organized) from here.

code 0 comments suggest edit

Lightbox JS brought a new level of hotness when it came to displaying pictures on your website or blog. Reference the javascript file in your html page, add a rel="lightbox" to a link, and voila! You have a sweet way to display pics. I even implemented it on my blog as evidenced by the image below. Go ahead, click on it (assuming you are not reading this in an aggregator).

Screenshot of Lightbox JS 2.0 In

Pretty cool eh? Well just as I go and get this implemented, the people that brought you Lightbox JS just released Lightbox JS 2.0. New in 2.0 is an easy way to group related images and slickly navigate through them. They also added some fancy schmancy transition effects.

The image above is a screenshot of the image grouping feature in action. Notice the Next link that displays on the upper right when you mouse over the image. Click on the below image to see a larger screenshot. (Oh the irony using Lightbox 1.0 to demonstrate Lightbox 2.0).

This is just one of many cool new toys for the discerning blogger. Good job Lokesh!

subtext 0 comments suggest edit

CoComment Logo Since I was called out, I went ahead and quickly implemented CoComment for Subtext, but I have yet to deploy it to my personal blog. It will be released as part of our upcoming interim release which is focused on bug fixes and a few developer goodies thrown in.

I said before I wasn’t interested in supporting CoComment, hoping to see a cleaner approach come along and surprise everyone. But it seems that adoption of CoComment is going pretty well and I am not one to stand in the way of progress. Besides, it really didn’t take long to implement at all.

CoComment support in the latest build of Subtext is pretty automatic. There is no need to update any skins. Simply go into the admin section under the Comment Settings and click a checkbox to enable CoComments. That’s it!

I wrote a base server control (in Subtext.Web.Controls if you are handy with Subversion and want to get it from our source control repository) for rendering out the CoComment script. This control lets you set the various properties and renders out the appropriate CoComment script. I then inherited from that class to implement a Subtext specific version. That control gets rendered in the head section of the page to maintain as much XHTML compliance as possible. I am seriously anal, aren’t I?

Tags: Subtext

0 comments suggest edit

I was recently approached by some people I know purely through blogging and IM conversations to write on a topic for a book they are putting together. Of course I was honored and appreciative that they thought of me, even after finding out there would be no payment for the work. Doh!

In any case, I am taking their lead by not discussing what the book is about, except to say that I am writing about tools that I use all the time. In attempting to cover these tools in sufficient detail, I realized how little I really knew about them. These are software utilities that I use every day, but as is the case with many tools, I wasn’t using them to their full capacity. I had quickly learned just what I needed to know to get stuff done and stopped there. How lazy and counterproductive of me!

Of course as developers, we all need to find that balance between spending the time to RTFM and just plowing along and getting to work. Back in the day, we called this the Commodore Shuffle (though I am sure there are many names for this phenomena). This is the technique of figuring out how to use a piece of software by playing around with it and clicking on everything that moves. Unfortunately, this often will only cover the surface of what a piece of software can do.

I think I will try skimming the manual more often now.

0 comments suggest edit

Web 2.11Despite the apparent hype factor of “Web 2.0”, I am really starting to get into the whole Web 2.0 phenomena. I think it really clicked when hearing about it in various panel discussions at Mix06.

The foundations are quite simple. Web 2.0 is about:

  • User created content.
  • Using AJAX to make websites UI responsive
  • Providing simple Open APIs.
  • Harnessing collective intelligence
  • And so on…

But jumping on Web 2.0 now is like jumping on a hot stock. By the time you’ve heard about it, so has everyone else. That information is immediately absorbed by the stock market and reflected in its price. In other words, you have already missed the boat sucka.

So I am letting you, my limited audience, in on a secret. The time is now to leap ahead of your competition and embrace Web 2.1.

Web 2.0 is oh so five minutes ago. Now that Microsoft is joining the Web 2.0 fray, you know they are going to get it right. But they won’t get it right in 2.0 (remember Windows 3.0 or .NET 1.0? Exactly). It is all about adding the .1 baby!

At Mix 06, Microsoft unveiled their vision for the web, which seeing as how their modern product versioning system works these days, will be marketed as Web 2007. By the time it is released it will probably be called Microsoft Web Based Collective Intelligence and Open API AJAX Platform (or WBCIOAAP for short). I personally can appreciate the double “A” thrown in there.

Some of the pillars of Web 2007 WBCIOAAP include the following:

  • Why stop at user generated crap? Animal generated content! Who better to fling crap on the web than animals?
  • AJAX is about making UI responsive. But why be so reactive? Web 2007 introduces PRAJAX! It combines the power of prayer to create PRedictive AJAX. This stuff is going to rock!
  • Current efforts to harness collective intelligence makes the unreasonable assumption that everyone who contributes is equally intelligent. Well we know that ain’t true. Introducing the Microsoft Idiot Filter. If you are going to allow tagging, this software makes sure to filter out the idiots, leaving 5% of the tags, but a very intelligent 5%.
  • And so on…

I will be converting my business and Subtext into a Web 2007 application soon. What about you?

0 comments suggest edit

View from
Pool In case you were wondering how such a loudmouth as myself could be so quiet for four days and three nights, my wife and I were in Puerto Vallarta enjoying a real vacation. By “real” I mean completely devoid of work. I didn’t so much as walk into a cyber cafe (though I did peer real hard inside).

Probably the closest thing to “work-related” I did was chat up a couple of school teachers on a boat getting their input into some software my company is building for labor unions.

We stayed at a wonderful bed and breakfast named Casa Amorita in the downtown area of PV, if you can call it a “downtown”. The picture on the top left is the view from the patio/pool. The B&B is built on a steep hill so there is a pretty nice view from everywhere.

Phil on a rooftop
bar It also has a nice rooftop honor bar as you can see me on the right, attempting to draw upon my inner Tom Cruise in the movie Cocktail.

If you are viewing these pics in a browser with javascript enabled, click on the pics to see larger versions.

Although PV is pretty heavily developed, it still retains some of its rustic charms. The streets in the downtown area are cobblestone and fun to explore. We endured one of those “We are not a time-share but we are still trying to sell you something you don’t need and can’t afford” sales presentations in order to get some free loot. We actually enjoyed the tour of the resort, got to spend time on their beach, and then took a nice boat over to Yelapa.

I put up a few photos on Flickr if you are interested.

0 comments suggest edit

CrapsI apologize for writing up a roundup for the Mix06 conference several days too late, but I was not in a good condition to blog during the conference. In part it was due to a cold I was fighting which left me unmotivated to blog. You might think that the lack of sleep and drinking would have contributed, but the strange thing about Vegas is that the less I slept, and the more I drank, the better I felt.

When you are having interesting conversations with folks, you start to lose track of just how many beers you’ve downed.

Web Standards For Real

In any case, I was impressed with the conference less due to any particular session (though there were some good ones), but more due to the reflection on what appears to be true change happening in Microsoft.

One session in particular, the IE7 Future panel, struck me with who Microsoft invited to attend. They had Molly Holzschlag, the group lead for the Web Standards Project, Eric Meyer, noted CSS guru up on stage. I sat next to David Shea, creator of CSS Zen Garden.

These are not your typical Microsoft conference attendees and perhaps have been some of the harshest critics of IE6. In part, this shows the confidence that the IE7 team has in what they are trying to accomplish. Several of these leading experts walked away from the conference with a better feelings about what Microsoft is doing in this space.

Fellow Bloggers

Deck of Cards Of course the best part of the conference is meeting my fellow bloggers. Almost immediately Jon and I ran into Jeff Atwood who is quite funny in person.

I also ran into the dynamic duo, Adam Kinney and Erik Porter. I met these guys at Tech-Ed 2004 in San Diego when they both worked at the same company in Indiana.

Also met up with Andrew Stopford who is a class act. We talked a bit about MbUnit and wondered how do we get the word out about MbUnit. NUnit has a much larger penetration simply because it was first (which is a big deal I suppose) and because of its name. It falls under the so called “N-Series” of open source tools.

MbUnit, in my humble opinion, is much superior and definitely worth trying out. I may try and prepare a talk to give at my local users group on it someday.

Also hung out at the tables with Steve Maine and Clemens Vasters. Steve and I had a great run at the craps table only to lose much of it at the BlackJack table. Meanwhile, Clemens taught us an interesting travel game that involves people watching at hotel bars. I won’t divulge the details nor the name of the game, but just know it was quite interesting.

I’m sure I am missing someone, but it doesn’t matter. I had a great time and am looking forward to Mix07 in whatever incarnation it may appear.

0 comments suggest edit

LeBoeuf You Europeans ought to appreciate this one.

I’ve mentioned before that I joined a fairly competitive league here in Los Angeles. The other day I found out that the team we are playing this Saturday fields Frank Leboeuf. He played on the 1992 World Cup Winning France National team and was a former starter for Chelsea.

jrgen His pro career must be over, but it is still a surprise that he is in the same league. He still looks like one bad mofo. I also hear that Jurgen Klinsmann plays for an adult league team in Orange County. Seems like Southern California is the place to be if you are a retired World Cup Footballer. ;)

0 comments suggest edit

Scott Hanselman asks the question, Is Open Source a Crap Idea. I sure hope not.

One thing to consider is that the type of open source projects that we are involved with are very niche market and hobby oriented. I have a feeling that the Subversion project will continue to do well because they make a product that is essential for many businesses.

CollabNet for example sees the value of the open source model and of Subversion as a source control tool so much so that they provide full time employees to work on it. I doubt we’ll see that happen with RSS Bandit or Subtext any time soon (though I welcome any company who wish to become sponsors).

The sad truth is that most open source projects I’ve seen are pretty much pushed forward by the efforts of one or two ultra committed people. I think the important thing for these projects to look at is a succession model for who will push the project forward when they burn out or move on. Or they need to really focus on marketing to bring in more developers.

I don’t have the answers to this one. I personally started Subtext because I wanted to tweak .TEXT to my liking and I thought it would be a great forum to try out new coding techniques and new technologies. Lately though, I found that I enjoy the product management and team lead aspect of running Subtext as much as I do the coding aspect. In that respect, I see a long shelf life for me on this project.

I doubt I would stop working on Subtext unless I just plain stopped blogging. Despite building a great distributed team, we are all busy and checkin activity is steady but not very active (though our mailing list is involved in some great discussions). I have tempered my expectations for what I can accomplish and realize that even if I was the only one plodding away at Subtext, it’s a fun and relaxing hobby with an outcome that I personally benefit from.

0 comments suggest edit

Vallarta So the missus and I are heading over to Puerto Vallarta this Sunday for a short mini-vacation. For me it is a chance to recover from Mix06. It was kind of unfortunate that the two events are so close together, but that was pure coincidence.

We are staying at a nice small bed and breakfast and looking forward to exploring the local area, lounging on the beach, and generally enjoying an itinerary and agenda free few days. I am not bringing a computer so I will be totally disconnected, which will be a nice feeling.

I think.

I do get a bit panicky without my blogs after a few dayshours minutes, but the missus promises me I will be ok.

0 comments suggest edit

I was involved in a 5 AM breakfast conversation (a little late night snack before we all turned in for the evening) with Clemens Vasters, Steve Maine, and some others at Mix06 in which they explained how streaming content works with WCF (code named Indigo).

They pointed out (as I mentioned in a tongue-in-cheek context in my last post) that with streaming content such as streaming videos, the consumer of the media is really concerned about headers and start tags, because they plan on using the content as it flows over the wire.

In effect, streaming works because WCF promises to send the end tags eventually. Might be hours from now. Might even be years from now. But they will get sent and the message (as everything is a message in WCF) will be well formed and complete.

Clemens then pointed out that even if they never did send the end tags, what would it matter? The consumer of the feed, if he or she is exceedingly anal, could decide to throw an exception then. But at that point, the content has already served its purpose and has been consumed. Remember, we are talking about the streaming content use case.

This struck me with two thoughts. This is a software scenario where the intent is more important than the execution. The fact is that they intend to send the end tags is very important, but whether they actually do or not is of less importance.

Secondly, with streaming content, the valuable deliverable is not a whole message but a partial message. By message I mean the entire content and whatever SOAP envelope it may be wrapped in.

Of course, the key to streaming content producers is to make sure to send any meta-data and commercials at the beginning of the message and not after the streaming part. But you knew that already. ;)

0 comments suggest edit

UPDATE: Ok, so being away from RSS Bandit has put me out of touch of some of the other discussion on this topic. As Dare writes, Don isn’t the first person to make the Lo-REST distinction.

Sleeping TigerWell it looks like Dimitri beat me to the punch. It also struck me as odd to hear Don Box coin the term Lo-REST. It also struck me to hear it repeated at Mix06 and described as really just POX over HTTP. I had an interesting conversation with Steve Maine (who is one cool cat by the way) about it at Mix06 that got me thinking.

The thing is, REST is an architectural style, and to some degree it is well defined. What is not well defined is exactly how you build real world web services using this style. If you perform a search for the term “xml” within Roy Fielding’s Dissertation (pdf) you will find zero matches. REST does not require nor really have anything to do with XML. However, XML is a viable tool that can be used with a RESTful service.

Now Don is a very smart guy and I have immense respect for his work. I am more likely to second guess myself before I disagree with him. This is why I want to give him the benefit of doubt and try to look at what he was trying to accomplish in this post, though I obviously can’t speak for him so this is mere conjecture. The question I have is whether Don is “prescribing” or “describing”.

It seems to me that rather than try and prescribing a new form of REST, he was merely describing the reality of service oriented implementations that exist in the real world. Fact of the matter is that many companies are unveiling RESTful services that end up being nothing more than attempts to tunnel REST verbs through HTTP GET (Amazon is one example).

The problem is that if this is indeed the case, I can see the usefulness of the term from an academic viewpoint. Lo-REST can usefully describe what services that are labelled as REST, but are really not. Rather, these services are actually POX based services.

Even so, attaching the term REST to a POX service is problematic in two key ways (if not more). First, it dilutes and obscures what REST is, which not only gets the RESTafarians all up in a tizzy, but also can make the conversation around this topic more difficult. Second, it seems to undercut the significance and usefulness of POX by implicitely indicating that POX needs to be attached to the term REST in order to be taken seriously.

Ideally, we should take a step back and realize that significant web services are being written and will continue to be developed using POX. Let’s elevate the respectability of the term POX a bit and retire the term Lo-REST. It is POX, let’s leave it at that and call it what it is.

DISCLAIMER: I am not what you would call a RESTafarian. I think I understand what REST is, but I am on the fence on whether web services SHOULD all be implemented as REST. I tend to take a more pragmatic approach and think that some services will benefit from a REST style approach and others will benefit from using SOAP. What I do care about though is that for the purposes of the grand debate, that we keep our terms clean and as well defined as we can and not dilute what one or the other is.

0 comments suggest edit

My Wife! The comedienne. Honey, still don’t quit your day job.

Exhibit One: My post on Mix06 in which I mentioned…

Maybe, if things are going well, I might have a date with destiny at the Let It Ride tables.

Her comment…

destiny called. she now works at the crazy horse. ; )

Exhibit Two: My recent and slightly rambling post on Lo-REST in which I talk about REST and POX over HTTP. Near the end I state…

Lets elevate the respectability of the term POX a bit and retire the term Lo-REST. It is POX, let’s leave it at that and call it what it is.

And her comment in response…

yes. Lets elevate the respectability of the term POX.

Finally, my wife is taking an interest in the work that I do. I am sure she’ll now enjoy a long and intellectually stimulating dinnertime conversation as I explain to her how streaming content works with IndigoWCF. As long as the start tags are all correct, you can consume the streaming content relying on the intent that the end tags will arrive some day in the future. And if they don’t arrive, will you care as you have already consumed the content? With streaming content, the valuable deliverable is not a whole message but a partial message. Discuss amongst yourselves.