"I have a mind like a steel... uh... thingy." Patrick Logan's weblog.

Search This Blog

Saturday, November 03, 2007

The "Web or Facebook" Bet

I sure don't understand Facebook. I never even got up to the MySpace stage. Joe Wilcox watches Microsoft...

As I've repeatedly asserted, Facebook is more like an operating system in the cloud than a Web 2.0 service. No one should understand a "walled garden" better than Microsoft's GM of platform strategies. After all, what is Windows but a walled garden?
It's autumn. The garden is turning brown. Joe paraphrases Microsoft...
In a blog post earlier today, Fitzgerald asserts that the "sound and fury" of the OpenSocial announcement "actually underscores the weakness of the hand held by Google and their fellow travelers. While nominally about making it easier for developers to write widget applications that can be hosted across multiple sites, it really shows how few options Google has to try to deflate the twin nightmares that Facebook poses to Google."
Probably some truth is in there somewhere. The sound and fury is more Mircosoft's though. I think they're doing more bluffing and OpenSocial is more like calling the bluff.

But like I said... I don't understand Facebook. I know some people who use it reluctantly rather than enthusiastically. This also happens to be the characterization of most of the Windows users I know.

Don't bet against the web. Google has its own agenda, but it is simultaneously helping to build out the web.

Microsoft continues to make many more billions of USD than I can fathom. But I don't see how their walls and Facebooks can hold up in the long run.

Rest at QCon SFO Next Week

Pete Lacey will be there. If his talk is anywhere as good as some of his online presentations, that should be a highlight. The Rest agenda for next Thursday in SFO looks so good. I'm almost all packed. Well, that packing is for the trip to Indianapolis tomorrow through Wednesday.

So the flight to SFO has been routed through the midwest. Sigh. We'll get into SFO about 11:30pm on Wednesday.

Hopefully I will be awake for the 9am Thursday talk. I've been a fan of James Noble for years, esp. his classic Notes on Postmodern Programming.

Friday, November 02, 2007

Documents and Schemas

James Strachan writes about atom format and how to indicate schemas...

One idea is to use content types...

...another could be to add a new kind of link to the feed.

This has some appeal. We're building some feeds that will have specific kinds of content, and validation of the specific content will be beneficial.

However an aspect of RelaxNG that is appealing for our project is not tying a specific schema to a specific document. Certain consumers of a document want to validate just the parts of the document that is of interest to them. There may be more than one schema applied to a document.

Some publisher may simply want to ensure a document is a good Atom entry. Some other publisher may want that and to ensure the content meets some other schema and associated rules. Some consumer may just care about the content or a subset.

See "duck typing", below. :-S

I don't have any good ideas, but I would hesitate building in a 1:1 association out of fear some producers and consumers may become over-dependent on that association. That's my barely formed 2 cents.

Optional "Type" Declarations

I realize ActionScript, like some other dynamic languages, have optional type declarations.

I don't care for static types, optional or not, declared or not. If you want speed, there's other ways to get it. If you want safety, there's other ways to get better safety. If you want documentation, they document the wrong thing.

Alan Kay pointed out a long time ago the benefit of message passing and "duck typing" if you will. I am a huge fan.

Thursday, November 01, 2007

XMPP and Variegated Instant Messaging

Bill de hÓra...

XMPP itelf is a no brainer as the backbone protocol. I can't imagine it not being used for everything that HTTP is unsuited for a few years from now. Although we might have to go through a wasteful EDA-* cycle first before everyone "gets it", a la what has happened with WS-*.
cf. Erlang's supervisor hierarchy.


Oh dear...

Static typing will also allow compiler based unboxing, will it not? That would lead to increased performance along with safety.
The browser has a lot of problems. This is not one of them.

Reliabilty with Erlang

Steve Vinoski's announces his latest column...

My latest column, Reliability with Erlang, first describes some of the problems that highly-reliable systems face, and then explains some of Erlang’s core primitives that provide a solid foundation for reliable systems...

BTW, I can’t recommend enough that you pick up a copy of Joe Armstrong’s Programming Erlang. It’s a truly excellent book that has deeply and positively affected the way I think about designing, building, and implementing software systems. As I mentioned in my columns, my only disappointment with Erlang is that I didn’t discover it 10 years ago when it was first open-sourced, as it could have saved me a ton of time and trouble in my middleware development efforts over the years.

From the column itself...
Layered on top of the Erlang language is a framework called the Open Telecom Platform (OTP), which uses these features to help enable reliable systems. Despite the word “telecom” in its name, OTP is a general-purpose framework that’s useful for applications in a variety of domains.

I want to make it clear that Erlang and OTP aren’t magical — they won’t automatically make your software extremely reliable. Creating reliable systems with Erlang/OTP still requires knowledge, experience, solid code, thorough testing, and general attention to detail. Nevertheless, because the language was designed with reliability as a foremost concern, the combination of Erlang and OTP definitely has advantages over other common languages when it comes to reliable systems...

If you develop enterprise-integration or middleware applications that require high reliability, I’ll offer the same advice I gave last time: go get yourself a copy of Joe Armstrong’s book, Programming Erlang.1 This book is very readable and is suitable for both beginners and experts alike. It will open your eyes to a better way of building reliable software.

Wednesday, October 31, 2007

Help Me. I've Fallen.

An often repeated erroneous assumption is that static type checking is necessary for all the good IDE features like code completion and refactoring. Well, no.

The first and still best refactoring tool is for Smalltalk. Lisp and Smalltalk have had code completion mechanisms for decades.

James Robertson feeds off the recent "dynamic languages are too something or not enough something else" brouhaha and provides a Smalltalk Daily on code completion.

Tuesday, October 30, 2007

Mozilla Labs announces Prism

I told you so...

Flex / Apollo is useful for pushing the current browsers to the next level.

Air (nee Apollo) still appeals to me more than Prism. Neither are perfect, yet everyone is heading in a good direction.

Unlike Adobe AIR and Microsoft Silverlight, we’re not building a proprietary platform to replace the web. We think the web is a powerful and open platform for this sort of innovation, so our goal is to identify and facilitate the development of enhancements that bring the advantages of desktop apps to the web platform.
I don't know much about silverspoon, but air is not intended "to replace the web". You can build very-much-on-the-web systems with it.

Dynamic Languages, Compilation

A few interesting points from a recent post from Steve Vinoski...

On the dynamic language front, the worst code I have seen in my career has always, always, always been in compiled imperative languages, most often Java and C++.
This probably depends on the developers and their culture at least as much as the languages themselves. Here's my observations based on having worked directly with handfuls of programmers with hundreds of thousands of lines of Common Lisp, Smalltalk, Pascal (and Modula-like extensions), C, C++, and Java; tens of thousands of lines of Scheme; and thousands of lines of Python and Ruby.

How should we measure "worst"? I'm not sure. I've encountered large amounts of bad code in each of these languages. The bad code I see in each of these typically has these characteristics:

  • Hardly tested
  • Hardly factored - "run on" code that bleeds implementation details all over
  • Poorly named - "unreadable" code that does not communicate its purpose
  • Overly coded - way more code than is necessary to do its job
The worst of these, in each of these languages, has significantly lowered the rate of change, often down to nearly unchangeable.

All else being equal, I'd rather work with good or bad code in a dynamic language. The rate of change will almost always be faster. (But don't ask me to work with bad code: I am way past any level of tolerance to work with bad code. Don't even show it to me, I am no longer amused. Urp.)

I would much rather let an average developer loose with a dynamic language... they’ll fail way faster and thus allow much more time for recovery. The fact that dynamic language programs are usually smaller than their compiled counterparts means that they’re easier to read and review, and statistically, they’re likely to have fewer bugs.
Yeah, I would not disagree, as I said, all else being equal. I realize Steve's point is about languages and not the full spectrum of becoming a better programmer. However, my silver bullet would be having them pair with someone who can help improve tests (which in itself is learning to fail way faster), factoring, naming, and doing the simplest things first would help more than switching languages.

Along the way, sure, help them pick up a better language or two. Everything else just gets that much easier.

Furthermore, counting on the static language compiler to save you is simply wishful thinking. To paraphrase Tim Ewald from a conversation he and I had during lunch a week or so ago, compilation really amounts to just another unit test.
Oh, god. I am sure to get more comments from the static type checked folks. I will ignore you!!!

"Compilation amounts to a unit test" - I not sure about the point. Maybe this means that static checks are essentially redundant in well-tested code. Here's a twist on the unit testing thing I wrote some time ago... (Test-first is a command line interpreter for non-interactive languages)...

Test-driven design tools are "command line interpreters" for Java, C#, and other "non-interactive" programming languages.

Programmers using Lisp, Smalltalk, APL, and other "interpreted" languages have been doing test-driven design for decades. The pattern here is to type little snippets of code for an idea, get immediate feedback, then gradually incorporate those snippets into a whole program.

Lisp has its read-eval-print loop. So does Python. Smalltalk traditionally has "workspaces" which are text editors that also evaluate highlighted code.

In either case, the end of a programming episode results in a transcript of code that is then allocated to two destinations... some of the code in the transcript are the objects or functions that go into the program itself. The rest of the code is edited into regression tests.

Looking at a test-driven incremental programming session using junit or nunit you see the very same result... the shell is the command line and xUnit is the "interpreter". You get a small idea, test it, and repeat.

The tests themselves are the "transcript" of the session, and are also the preserved regression tests.

Monday, October 29, 2007

Viking Calls BS

Erik Onnen (rightly) calls BS on the Apache vs. Yaws comparison. maybe his call out will dig up more details or lead to better comparisons.

/But likening the Erlang community to Microsoft is going too far. :-/

Blog Archive

About Me

Portland, Oregon, United States
I'm usually writing from my favorite location on the planet, the pacific northwest of the u.s. I write for myself only and unless otherwise specified my posts here should not be taken as representing an official position of my employer. Contact me at my gee mail account, username patrickdlogan.