Unfortunate Side-effects

One of the neat discoveries I made in my first adventures with javascript was that if my REST API includes Last-Modified and ETag headers in its responses, then using jQuery’s ajax method will automatically add conditional headers to subsequent requests for the same resource, retrieving the response from the browser’s cache if a 304 is returned. HTTP FTW!

Unfortunately, the way I implemented pagination seems to have entirely negated this benefit for collection resources!

Straying from the Spec?

My pagination mechanism is copied from the dojo framework, and uses a Range header with a custom unit. This is actually entirely within the HTTP spec, but for some reason either the browser do not consider the responses cache-able because if a request includes a Range header then it does not automatically add any conditional headers. It seems like this is an issue when requesting byte ranges as well. I can’t find anything to suggest that 206 responses shouldn’t be cached, but it seems they are not in practice.

So what are my options in the short term?

  1. Ignore it and allow unmodified ranges to be requested repeatedly for the time being.
  2. Switch my API over to using a more usual method of pagination, such as query parameters in the URL. Doing this will cause each range to be seen as a distinct resource by the browser. Unfortunately this also precludes the use of the facilities that HTTP ranging has built in for returning range metadata.
  3. Change the behaviour of all the browsers in the world to suit my own needs.

#3 is the only one that really appeals.

Methods are not functions (except when they are)

Using python’s __getattribute__ magic method can be tricksy for more reasons than just the risk of infinite recursion that is often warned about. I encountered some interesting behaviour recently when trying to use it to automatically decorate certain methods of a class as they were called.

The class was intended to be a base class for resource controllers in a REST API, and the idea was to wrap the HTTP method handlers to perform certain common tasks. My initial attempt at it looked something like this:

class Resource(object):
    """
    Base class for resource controllers.
    """
    def __getattribute__(self, name):
        attr = object.__getattribute__(self, name)
        if name in ('GET', 'POST', 'PUT', 'HEAD'):
            # Wrap the method in the decorator.
            attr = request_method(attr)
        return attr

But, that didn’t work. Any unmodified methods worked fine, but if a method was wrapped during the __getattribute__ call then it was no longer being treated as a method, and was instead called like a regular function (i.e. the initial “self” argument was not passed). But why would this be? Isn’t a method just a function, with the self passed in if it is referenced on a class instance? Well, not really.

A method is not a function

As every pythonista knows, functions are objects. Methods are also objects, but they are not the same type of objects as functions, and there is no inheritance relationship between the two types as you might expect. Instead, a method is a callable object that has a reference to a function and a reference to an object, and when it is called it smooshes those two together to create the implicit “self” argument that we all know and love.

What was going wrong in my code was that decorator was returning a function instead of a method. When the caller called the returned attribute, the implicit self mechanism described above was just not available, because plain ol’ function objects don’t know anything about that.

The solution, then, is to ensure that a method object is returned instead. I think there might be a few ways to do this, but the way I chose was just to initialize a new method object:

def __getattribute__(self, name):
    attr = object.__getattribute__(self, name)
    if name in ('GET', 'POST', 'PUT', 'HEAD'):
        # Wrap the method in the decorator.
        attr = types.Method(
            request_method(attr),
            self,
            self.__class__,
        )
    return attr

So, problem solved? Not so much. Now there was a problem within the wrapper function: when it came to calling the wrapped method, it was providing too many arguments! It worked fine when applied to a method in the usual fashion, so why did applying it in the __getattribute__ not work?

Actually, a method is a function

Let’s take a quick look at how a decorator is usually applied to a method.

def decorator(method):
    print type(method)
    def wrapper(self, *args, **kwargs):
        # Do wrapper things.
        method(self, *args, **kwargs)
    print type(wrapper)
    return wrapper

class Dummy(object):
    @decorator
    def decorated_method(self):
        pass

d = Dummy()
d.decorated_method()

Running this code demonstrates that a decorator used in this way receives a function object and returns a function object. But it is a method that is being decorated! It seems that at this stage of its life a method is a function; it only gets wrapped in a method object after the class is instantiated (by the object class’ __getattribute__ method?). Usually this distinction is not really important, but it is when you’re fiddling with the __getattribute__ mechanism. In this case, it suggested that instead of passing the bound method to the decorator, I needed to pass the underlying function.

I had a few options to consider here. I could have retrieved the underlying function directly from the object’s __dict__, or I could have retrieved it from the class instead of the object. Or, I guess, I could have re-written the decorator to support accepting a bound method, though that’s a terrible idea and I never considered it for a second forget I said that. Instead, since I already had the method object, I decided to just examine its “im_func” attribute, which is the underlying function:

def __getattribute__(self, name):
    attr = object.__getattribute__(self, name)
    if name in ('GET', 'POST', 'PUT', 'HEAD'):
        # Wrap the method in the decorator.
        attr = types.Method(
            request_method(attr.im_func),
            self,
            self.__class__,
        )
    return attr

And then everything worked great and __getattribute__ never caused me problems ever again.

Mike Adams needs a punch in the fucking face

A few days ago Glen Friedman reposted an article from NaturalNews.com on his blog. As a propaganda site run by an egomaniac NaturalNews doesn’t allow comments because it can’t allow the faithful to be exposed to dissenting opinions, and my rant was too long to post as a comment on WTF, so I’m falling back to my own neglected blog!

The article was a response to an article in the guardian about a new “eating disorder” called orthorexia nervosa, the supposed main symptom of which is an obsession with healthy eating. It doesn’t really seem necessary to give this disorder it’s own name, but the idea that OCD, anorexia or just plain misinformation about what constitutes healthy eating could result in damaging behaviour doesn’t seem outrageous to me. I would consider somebody who thinks they can survive on sunlight and air to be pretty fucking crazy, for example. People like myself who avoid meat and junk food but don’t spend every waking minute worrying about whether what we eat is “pure” enough, I think we’ll probably avoid diagnosis.

What is really fucking insane is the liberties Mike Adams takes with the truth in order to spread his “pharmaceuticals baaaaad” propaganda. Let’s examine some of this rhetoric:

Google before you speak

If you focus on eating healthy foods, you’re “mentally diseased” and probably need some sort of chemical treatment involving powerful psychotropic drugs.

Granted, the guardian article does suggest the first part of this, being quite sensationalist itself, but I would hope that anybody interested in things like facts, truth or accuracy would do a bit of supplemental reading before squeezing out an article of their own on the topic. If you focus on eating healthy foods over unhealthy foods you are not “mentally diseased”, and nobody is claiming that you are. If you focus on eating healthy foods but have no idea what is actually healthy, or focus on it to the exclusion of all other interests, then you may need help. That that help must be pharmaceutical in nature is not clear at all. I know that drugs can be a part of the treatments for OCD and anorexia, so maybe they could help with this too, but not a lot of people seem to be saying that… I mean look at this hippy shit right here.

Wait a second. So attempting to avoid chemicals, dairy, soy and sugar now makes you a mental health patient? Yep.

Nope. The guardian article had a far longer list of things that people with this condition avoid (sugar, salt, caffeine, alcohol, wheat, gluten, yeast, soya, corn and dairy). Mike seems to have cherry picked from the list the things that he personally avoids in order to support the conclusion that he himself would be diagnosed with this condition. To be honest I don’t think the things that are avoided are actually a major part of the proposed criteria for diagnosing this condition, so it’s really turtles all the way down here.

If your opponent isn’t crazy enough, just make some shit up

But did you notice that eating junk food is assumed to be “normal?”

Nobody actually said this. This is the authors assumption stuffed into the mouth of the straw man he’s constructing.

Years ago, I warned NaturalNews readers that an attempt might soon be under way to outlaw broccoli because of its anti-cancer phytonutrients.

Yes, that is what has happened here. They have outlawed broccoli. You called it, Mike Adams.

Reading comprehension 101

Follow the non-logic on this, if you can: Eating “good” foods will cause malnutrition!

You can’t just ignore punctuation when it’s inconvenient. Those quotation marks mean something. In this case they mean “good in the (potentially mistaken) opinion of the subject”. Taken to the breatharian extreme, for example, eating only “good” foods will certainly cause malnutrition, because you would be eating nothing. The author has himself expounded on examples of “good” food that is actually unhealthy. My parents consider their Sunday dinner to be “good” food, and it is, but I think it would be better without the beef. At the end of the day, I’m not going to starve because of the choices I make about food and neither are they, and that is not what the guardian article or the doctor(s?) advancing this diagnostic category are saying.

Mike attempts to prove own sanity. Fails.

It’s an effort to marginalize healthy eaters by declaring them to be mentally unstable and therefore justify carting them off to mental institutions where they will be injected with psychiatric drugs and fed institutional food that’s all processed, dead and full of toxic chemicals.

Do I really need to point out the crazy in this sentence? This really has no resemblance to the reality of how most sufferers of mental illness are treated, whether that illness is depression, OCD, anorexia or the mental health fad du jour. It requires exceptional circumstances for somebody to be “carted off” anywhere. The discovery or creation of this “new disease” is characterised as an effort by the pharmaceutical industry, in concert with the food processing industry, under the supervision of the over-zealous nanny state, to force “radical” (that means radical in the mistaken opinion of the subject) healthy eaters into institutions so that they can be force-fed “institutional food”, thereby stifling opposition to the global political and economic order. This begs the question, what exactly is in it for the state? Rather than having these foodies running around spending above average amounts of money on their food and contributing to the economy in other ways, they choose to put them in institutions where the state has to pay for their food, drugs, and upkeep? Keep in mind that the health food industry is not insignificant in size, and that NaturalNews.com are a part of that industry. I suppose it’s ok that they’re selling something, because they’re the “good” guys.

Of course, a few google searches on the subject reveals that far from being the latest weapon in the pharmaceutical industry’s assault on human conciousness, orthorexia nervosa is in fact the invention of a single doctor who wanted to sell a book and that it has received only limited attention since then, and that mostly from media outlets which don’t really care what kind of bollox they print. The doctor admits himself that he is not an expert on eating disorders and states that is not his place to push for it to become part of the DSM. He is apparently quite active in editing the Wikipedia entry about the subject (though it’s hard to be sure it’s him) where he makes statements such as:

I don’t claim it’s a disease. I invented the word as a kind of “tease therapy” for my macrobiotic and rawfoodist patients who took their diet too seriously.

But I wasn’t trying to invent a disease, either. I was trying to tease overly serious health food maniacs into relaxing a little. (Doesn’t seem to have worked, doc.)

Lots of dieticians, eating disorder specialists, etc., seem to take it seriously. But that doesn’t mean it’s a real disease. …the fact is, orthorexia is NOT a scientific diagnosis. It’s just a popular culture term at the moment.

I agree that it might turn out to be best described as a form of OCD.

So the doctor who invented the term himself admits that it is not a real disease and that it was basically coined as a joke. A lot of people didn’t get it and are taking the concept seriously, but nobody is being carted off anywhere, being force fed junk food or being injected with drugs against their will. Bottom line is it’s not the pharmaceutical industry that’s pushing this, but the media, desperate for something to hype, and Mike Adams either fell for it because he’s a gullible fool or decided to hype it further for his own ends.

Wake up Neo, it’s time to go shopping

People who subsist on junk foods are docile and quickly lose the ability to think for themselves. …people who eat health-enhancing natural foods — with all the medicinal nutrients still intact — begin to awaken their minds and spirits. …They become ‘aware’ and can start to see the very fabric of the Matrix, so to speak. …consumption depends on ignorance combined with suggestibility …Eating living foods is like taking the red pill …It sets you free to think for yourself. …eating processed junk foods is like taking the blue pill because it keeps you trapped in a fabricated reality …Some people are ready to take the red pill, and others aren’t. All you can do is show them the door. They must open it themselves.

In the delusional system of Mike Adams he takes on the role of Neo, leading the subdued masses out of their consumerist nightmare by teaching them to… uh… consume different things. Adams falls into the very pattern of black and white thinking that he falsely accuses the guardian of (and by extension the rest of the media). The unwashed are “ignorant”, “blind” “zombies” who mindlessly consume whatever they are commanded to by the television. They are subhumans whose desires and choices are not their own, and presumably their opinions are worth nothing. Adams and his followers, on the other hand, are “aware”, “empowered”, “awakened”. They are the enlightened vanguard pointing the way for humanity. But if we step back from this masturbatory fantasy for a second I think it is obvious that nobody is less human for enjoying a plate of greasy chips, nor are you better than them just because you can afford to buy organic produce, you just have different priorities. Food is just one aspect of the human experience, and there is a wide spectrum of perfectly valid choices that can be made regarding it rather than the binary health vs junk that Adams sees. In fact, this emphasis on consumer choice as the only important freedom, and virtuous consumption as the solution to society’s ills is more than just misguided: our consumer choices, if mistaken for paths to spiritual enlightenment or political change, are a cage that we build around ourselves, even mistaking the bars for the structure of reality. Mike fails to realize that the “fabric of the matrix” is the illusion that our choices as consumers define us as people and establish our worth.

Eating healthily is not a revolutionary act and it’s not a mental illness; it’s just a good decision.

My Coincidence

The internet has a tendency to throw bizarre cultural references under your wheels without warning, usually when you’re supposed to be getting on with some actual work. Check out this series of links which has ensured that an event in 1980′s television history which I only became aware of yesterday will forever be taking up space in my brain:

A couple of weeks ago, PATV linked to the site of the artist who provided the music for the current episode. I liked the tunes so I clicked through, downloaded some stuff and went on to something else, leaving the site open in a tab to come back to later. Make a note of the image next to “Eat People 123″. I didn’t notice it at the time, and I didn’t go back to that tab until yesterday.

Probably at around the same time I came across John Dies At The End while looking for web fiction to read, or at least see what kind of things people were doing in that area. The story isn’t available on the site because it’s being published, but I did read some of the stuff the author had available, including an article on cracked.com about how monster myths are a reflection of humanity’s general shittiness. I read a few more articles on cracked.com by other people, decided it was pretty funny and I’d like to read more later, and left the tab open.

Yesterday I went back to the cracked tab, clicked through to the main page, and this article about crazy whacky broadcasts caught my eye. #3 might look familiar if you made notes earlier when I suggested it… Here’s the full video:

That this unhinged individual was able to hijack a television broadcast is pretty astounding and interesting to learn about, though I would have forgotten about it quickly. But when I switched back to the headlessbarbie tab and discovered that a reference that meant nothing to me had been explained by another series of links with no apparent connection within a short space of time, that became impossible.

Wherein I propose to DO SCIENCE

I came across an interesting study recently while researching the relative environmental impact of hydroponics systems. Run by defra in the UK, it compares the impact of food grown in the UK with that of food imported from abroad in order to test the idea that locally grown food is always better for the environment. The results are mixed, of course.

What got my attention was that one of the foods examined was tomatoes, grown hydroponically in heated greenhouses in the UK, or in soil in Spain. The hydroponic tomatoes come out worse in terms of greenhouse gas emissions due to the heating (and they also pump CO2 into the greenhouses to aid photosynthesis), but better in terms of water usage, runoff and land usage, so it’s not exactly clear cut. It’s also not exactly the same situation as what I’ve got going on here. How does a home-grown hydroponic tomato compare to a Spanish tomato, or even a UK tomato? Well, they provide some decent figures for each case, so it may just be possible for me to figure it out!

What I’m proposing is to grow a tomato plant in my original system, record the energy inputs and the yield, and from that calculate the CO2 emissions per tonne (ha!). I’ll figure out the monetary cost as well while I’m at it. There are some caveats of course: I will not be including heating costs like the UK greenhouses in the study, because I would be heating my house anyway, I will be using CFL bulbs where more powerful ones are recommended for tomatoes, I may not be able to determine the environmental impact of manufacturing the nutrients I use (though I have contacted the manufacturer), I will not consider the impact of manufacturing the system itself… Also, I have never grown tomatoes before, and I hear they are difficult, so the initial yield may be low. Still, I think an attempt or two will at least be educational, and hopefully quite tasty. Am I wasting my time, money, and destroying the environment by not powering all the equipment with renewable energy? Only SCIENCE* can tell me!

*may not contain any actual science

Building a better light reflector

A better reflector

A better reflector

My first hydroponic system worked fairly well as it was, but one aspect of it that I thought could be improved was the lighting. It was white on the sides, which is reflective enough, but something metallic and shiny would be better. Also it was wooden, badly painted, and just not all that stylish. So, I decided to take another stab at it :)

One of the things I had considered for the new system I’m building was aluminum reflectors for the lights. I abandoned that idea when I discovered that for that one, the sheets alone would have cost about €160, but I decided to use the idea for the smaller system because I still wanted a chance to work with metal.

I picked up a 250mmx500mm sheet of brilliant aluminum (one side is mirror-like and comes protected by blue plastic), some thin steel bars, some small hooks and some short nuts and bolts from B&Q. The aluminum was about €20, the rest brought it to no more than €30. If you’re building several or building larger fixtures you could definitely do it cheaper with wood and reflective sheeting or paint, but for a small one-off system this is quite economical.

The sheet after I had been doing some work on it. I didn't take pics initially unfortunately!

The intention was to bend the steel bars and use them to hold the aluminum in the shape of a parabola, or at least a curved reflector that will send most of the light downwards. I started out by putting holes to match my bolts in one end of each of the steel bars, and another about 230mm down. You will probably need a drill press to do this. Be patient or you’ll wear out your drill bit before the job is done (like I did :S). I curved the bars around a centrepoint between the two holes by pulling them against a fixed object on my workbench. This isn’t very exact, but you should be able to get a curve that is approximately the depth of a bulb and a reasonably close match between the two.

I didn't actually cut these to length until after I had fitted the aluminum

I didn’t actually cut these to length until after I had fitted the aluminum

Next I drilled a bunch of holes in the aluminum. For the bracket holes I actually drilled one side and then curved the aluminum inside the bracket to find the position for the hole on the other side. This is probably unnecessary, you could just find the position of the hole before you bend the bracket. The other holes are to support the actual light fitting (I am just reusing the ones from the previous fixture) and a hook for the chain that will support it.

And the same on the other end of course

I reused the light fittings from the previous reflector. All I did was put a hole through the centre of a block of wood and use a cable tie to secure the light fitting to it. The block of wood gives the bulb enough clearance. If I was really clever I’d have made the curve parabolic and used the block of wood to place the bulbs at the focal point, ensuring the maximum possible amount of light headed straight downwards. But no, I just went with a rough curve and the wood I had lying around. The block was glued to the previous reflector, but for this one I used a cable tie through the same hole and the two drilled in the aluminum.

There are more suitable fixtures than this available

There are more suitable fixtures than this available if you’re not as impatient as I am.

Finally, I screwed some small picture hooks through some holes in the aluminum and into the wood blocks of the light fixtures. This allows the whole thing to be suspended from a length of chain, allowing for easy raising and lowering. It also gave me an opportunity to try out the macro function on my new camera!

Woooah! Extreme close-up!

Here’s the finished product doing its thing. I don’t have any real action shots yet because I’ve been waiting on some shelves to house this system, but I think this should give you the general idea ;)

This wasn't in a darkened room or anything...

I might paint this sucker black to match everything else, but it also looks good as-is.

The Argument

I don’t see the argument begin. By the time I look around it’s already in full swing; Or simmering maybe, the rage building but not bubbling over, still a self-conscious clinging, whispering concern, still protecting each others dignity, but I can see that won’t last long. With my headphones on I can’t hear what it’s about, but it looks important. A life or death decision is being made, lines drawn and sides chosen, the big guns dragged out and primed to destroy.

I have the solution: with music pumped to me alone the petty conflicts of the outside world are nothing but a vaguely amusing backdrop to my own thoughts. Life and death decisions don’t concern me. They’re a context with no object, a ridiculous circumstance with no possible connection to my life. As I turn and notice the couple arguing one of my favourite songs comes on, and I rejoice despite their pain. I don’t know who it’s by, but it starts: “I could feel at the time, There was no way of knowing, Fallen leaves in the night, Who can say where they’re blowing…” I move my lips soundlessly and imagine that the woman, looking up at her boyfriend, or husband or whatever, pleading, berating or maybe saying goodbye, is singing right along with me, her troubles forgotten.

The other occupants of the shop huddle at the window, gripping the serated edge of the frame gingerly, and watch the riot. It’s calmed down some now, become concentrated in tense stand-offs with an exoskeletoned enemy, but excited youths still gather missiles and head to the front. The stink of revolution will linger for days, the bitter and cynical mumbling of the citizenry as the burnt out cars are hauled away and the graffitti scrubbed off the artwork.

I do see the screaming start. He says something that I guess has a note of finality, but she holds onto his jacket as he turns towards the window, yells and beats his back until he’s forced to turn to her. I imagine he says “Relax honey, God will protect me,” to which she retorts “Maybe your god plans to make you a martyr, ever think of that?” But probably the screaming and arm-waving that manages to draw stares even from the riot has nothing to do with God. Maybe they’re debating the finer points of Marxist philosophy, this is/isn’t the start of a mass movement, we should/shouldn’t engage in violent insurrection. Maybe he just slept with her sister. Maybe she’s saying “As free as the wind, And hopefully learning, Why the sea on the tide, Has no way of turning…”

I don’t see the riot shifting, but suddenly there’s a rush of bodies past the window. Bloodied heads with red eyes take cover with us, dragging the choking stench of tear-gas behind them, groping for the corners, for protection. The couple forget their differences and cling to each other as the police sweep in with truncheons and shields and pig-faced gas masks. Through my headphones, an anonymous voice sings “More than this, There is nothing.” He steps in front of her, playing protector, but he gets a truncheon to the temple and then she gets the same, both wrestled to the ground, swamped in a wave of navy blue. There’s one in front of me too, black holes for eyes, raising his arm to strike. A sharp sting of static bursts over my headphones, louder and more grating than anything I’ve ever heard; It doesn’t stop when I rip them off.

Alpha is the new Beta

Fröl and I were recently given a condo in Riverchapel, SL for free. It’s a small space, and we’re only allowed rez 50 prims, but hey, how much can you really expect for nothing, right? I have yet to meet our landlord Stoner, but apparently his reason for offering these spaces gratis is to generate traffic for the region. Presumably this is the same reason for the idling avatars that are frequently loitering around the region’s more central attractions, the rows and rows of random and questionably valuable stuff for sale. It’s a bit like living above a seedy street market, but I suppose Stoner has to pay his tier somehow…

Stoners Condos

Stoner's Condos. The land in Riverchapel was actually sold since I wrote this, and the towers were rebuilt in Putnam.

Wait, what’s this tier thing, exactly? It’s not rent since you supposedly own the land. An appropriate metaphor might be a council tax, except of course that there are no roads to be maintained, or grass to be cut. There is, in fact, no land at all. A tier, when you look behind the virtual curtain, is a hosting fee. The US$1,675 that a private island will set you back actually reserves for you a single core of a server, on which you can only run LL’s region software. The US$295 you pay a month is a hosting fee to continue sharing that server, as you would pay for web hosting or other application hosting.

You’d really have to go out of your way to find a deal as bad as that elsewhere. In fact, I couldn’t. Any hosting deal that approached that monthly price offered significantly more server power (4x at least), total control of the server’s configuration, and no setup fee. If all you really want is a patch of virtual land, $15 will get you a virtual server capable of hosting a single OpenSim region, 65,536m2 for the price of 2,048m2 in an SL mainland region. LL have been able to maintain this illusion of scarcity and charge these outrageous prices until now because they ran the only show in town, a walled garden where they could do as they pleased.

That, however, is changing. OpenSim is an open source virtual world server which allows anybody to set up their own grid which the SL viewer and others can connect to, or to run a single region server which can be attached to other grids. These independent grids can even be linked together to create a web of virtual worlds which an avatar can potentially navigate at will with an account on a single grid. LL aren’t oblivious to this change, and actually helped bring it about when they released the source of their viewer a couple of years ago, but they have been slow to fulfil their promise to release the code of their server software. In the meantime OpenSim has been catching up rapidly in terms of stability and features, even implementing features that are missing from LL’s software.

It’s far from perfect; most days I log into OSG I encounter a variety of weird and annoying bugs. Other grids are more stable because they follow SL’s model of centralised server control and don’t update to new versions of the software by the hour. The grids are also sparesly populated in comparison to SL, and don’t have the same variety of objects. But imperfections aside, what OpenSim offers that SL can’t is control and choice: the freedom to choose the hardware you require, modify the software to do what you need, or just to move easily between grids to find one with the theme, organisational structure, pricing or people you feel comfortable with.

We were also given some free land in OSG recently. It’s an 3952m2 space in a scenic atoll region surrounded by mountains, and we can rez 2714 prims where ever we want  rather than being confined to a tiny little box. There’s a bunch of other islands around, the residents of which spend a lot of their time building cool things and giving them away as presents, or thinking of ways to help newbies find their way around. Further afield there are freebie shops, test regions for a new jointed physics engine, and somebody has set up a link to a small grid they’re working on. It’s an exciting place to be. When I asked our landlord Snoopy why she offers free parcels, she said it was to allow people to get a first impression, so they can get to know each other and a community can develop. And that’s a reason that needs no excusing.

Our island in Heaven

Our island in Heaven

Down and Out in SecondLife

Down and Out in SecondLife

Google KickInThePants(beta)

This was intended to be blog about the development work I was doing with Google’s Lively virtual world in mind. I had planned numerous scripts to provide dynamic content for lively picture frames, a configurable bot to chat and perform services in world, and maybe even a text-based (at first!) client for Linux and MacOS devotees like myself.

But before any of that even got off the ground Google made this announcement, rendering all my work completely pointless, and the work that so many others have done to create cool objects and rooms and community.

So, I don’t know what it’ll be about now…