Hello 
I'm Siobhan Curran/Kisa Naumova, and this is my weblog. I tend to write about stuff like crossdressing, Macs, code, cats, wine and Second Life, but in general it's just an ongoing conversation about all sorts of stuff. If you'd like to know a little bit more about what this all is, I recommend starting on this page which has a little bit of info on who I am, and what I'm trying to do — or you could dive into my five years worth of archives if you like.
Otherwise, feel free to close this box and explore...
A Short Cautionary Conversation With My Mother
(This was preceded by general flat-hunting chit-chat, and the admission from myself that there are black marks from my past on my credit history)
"People have to be very careful though these days, don't they?"
"Yes?"
"Well, you hear of people not getting jobs because they've written silly things on their 'blogs' or whatever they're called"
"I guess that's true" ... *starting to get worried*
"You've just got that business-type site though, haven't you?"
"Er, yes. There's nothing else about me online at all"
/me *whistles* ![]()
Live Chatlogs
OK, right. See this?
I know what you're thinking — something along the lines of "Yeah yeah Kisa, you blogged about this last week". But despite the glaring similarity to the other chatlogs that have been posted through my (ugly) webform, that one was made completely inworld.
I knocked up a little object that you rez in a meeting, click through a dialog box setting things like the title and description, then it automagically creates a new chatlog in my database, and logs the subsequent conversation.
The thing is though, I'm having a bit of stylisticly conceptual struggle with the way the web version is displayed. The whole point behind this is the idea that you could — if you wanted — host a small discussion group/panel somewhere in SL, but make the conversastion available live for anyone who wanted to read along.
(Why you might want to do that is a question best asked later — it just seems like a good idea for now)
My question is, how to display the dialogue, in a way that is (a) dynamic (so you get a sense of 'being there') and (b) has minimal user-input, ie. so you don't keep having to refresh the page every few seconds.
Obviously, some JavaScript is involved, but here is what I've come up with so far:
Just refreshing the whole page with some kind of anchor to make sure it scrolls to the bottom.
(That would be very slow though, and quite unreliable I think)
Adopting a reverse-chronological approach, 'twitter-style', pulling in the recent text and prepending it to the top
(I'm really opposed to reverse-chronologically presented text — as you can probably tell from the way I format this blog. Later things should be below earlier things — otherwise it doesn't make sense)
Having some kind of animated thing, where only the last five (?) things are shown, the older ones 'fading' from the top of the list.
(Except there would need to be some way of scrolling back — kinda like the 'History' button in SL)
Dunno
Any thoughts on how best to present live text discussions on a web page?
Nicky
Well, AJAX was what I had in mind — it's just how to keep the page scrolled all the way to the bottom. Just appending the new content would cause the page to 'creep' wouldn't it?
I just did a quick search and found a couple of JavaScript functions called scrollBy(dx,dy) and scrollTo(x,y). Could you scrollTo an unfeasibly large y value to keep the page down at the bottom? (I'm no JS guru, so I've no idea)
Nicky
Hmm, I guess so
I'm no JS guru either, which is probably obvious ![]()
You need to look at Scriptaculous, or one of the other Ajax tools out there.
I'm using Scriptaculous in my little web-gallery thing, so I'm most familiar with that one... I did a survey of the other tools, and decided S* (!) was more suited to what I'm doing. There are some other, lighter-weight, solutions out there. Go over to "Ajax Patterns" on the o'Reilly website for a comprehensive survey.
Insofar as positioning, you might want to think about a collection of arrays. One to hold the stuff being displayed, the other to hold the rest of the discussion. You might need some limits on older "bits", though. (Discard everything but the last 100, or some other number, statements, etc.)
That would provide a nice complement to the "last 5" thing you mentioned. If you stuck to that, a single array would obviously be okay.
Oh — here's a thought. You should take a look at jQuery. It's got some great CSS manipulators, in addition to some excellent DOM stuff. It's also lightweight, and comes with some excellent documentation — and a user community. It's thing is that it "makes Ajax fun".
I'd attach a CSS class — defined dynamically by some sort of basic rule-system — to the posts, making sure that Fred's statements are all the same (this would, obviously require tracking who's saying what) and Ginger's are the same, but different to Fred's. Color might be the easiest choice. That wouldn't hard: check the user id, look up the color in a table, and go about displaying it. If the person is not known, allocate a color. Make it random: no one will know what color they're going to get, session to session. ("Stateless", in other words...)
After all that, it's just a case of "static" CSS, and the programmed stuff.
Who knows, there might even be some code out on jQuery world that does what you want. (Reinventing the wheel is so 1990's...
) If not, the crowd over in the jQuery forum can probably help you figure out the best of programming the stuff. They seem to be a good bunch! (I'm not a member; I just lurk...)
Good luck!
Carolyn Ann
PS Oh: I chose prototype and scriptaculous because they had the features I wanted. I've also started to integrate jQuery into my little (yeah, right! So far it's over 100k in code) gallery because I want the easiness of its CSS stuff. Your system sounds more suited to jQuery; but take a peek at the main solutions, and see which you prefer.
I'm not sure how your site is organised, but how about a two part process?
You have a (some length, say 10 items) recent history that always updates (top down, or bottom up, although I prefer top down too).
You then have an "archive" version which goes live after the chat is ended, that contains the whole thing. Maybe even goes live during the chat, but updates far more infrequently with a pointer to the live version whilst that's still operational?
Would that work and make the scrolling and things a hell of a lot easier?
And, btw, the version you sent me wouldn't let me start a new conversation by any obvious route and didn't add to the conversation you had sent it to previously! I'm sure it's a problem at my end.
I shouldn't just chuck things out without documentation, should I? ![]()
As long as I've got the whole onrez->reset script thing working (which I might not), when you touch it it should throw up a dialog. Once you set a title, description and tags, the dialog should have a new button: "start"
I could, of course, have totally fucked up
I can write you one in binary code if you like?
Sorry ... only kidding ... I think I'll have a shower instead
CurranMagick
Perhaps I'm wanking my own ego a little too much here, but I like to think that there's a certain 'recognisable' style to the self portraits I've been doing recently — a kinda 'softness' to them. Perhaps.
I wrote a tutorial thingy a while back, explaining the process that I go through in PhotoShop to make them, but I got totally sidetracked from the chatlogging thing this afternoon, and wrote something that does it all automatically¹...
It takes a couple of minutes, but yeah. Have fun ![]()
¹ Might tweak it a little later². Not totally happy with it.
² Or, of course, I might just get steamingly drunk instead
mothers always know everything! you can not hide from mother. they read minds. thank....erm....god, mine is like mary tamm.
It didn't reset on_rez for me I'm afraid.
I'd love to see the tutorial, always like picking up tips on PS techniques rather than doing the processing by autopilot.
El, I'll chuck you a full-perms copy later. I've never quite got the resetting on_rez thing — It'd be great if you could tell me what was up with that.
Nice work on the automatic photo adjustment thingy, it gives some impressive results. It's spurred me on to take some better photos, just so I can see how they look after going through it.
Oh, and yes, there is definitely a recognisable style that your portraits have.
Alex
Personally i would like you to "wank your ego" all over that lifestream script and give that out to the masses.
I should really try to write that so that it isn't reliant on hard-coded passwords and things, so that it's easy to set up. Or maybe make it 'live' rather than caching every single twitter/flickr/del.icio.us/blog RSS thing via cron scripts ![]()
@Alex — thanks
It's been pointed out to me that it only makes a black & white image — which is true, but actually it makes a few versions, including the 'faded colour' one that I do a lot of.
Thing is though, the output isn't exactly like what I get out of PhotoShop. I can't seem to work out how to composite one image over another with a composite mode of — say — 'Screen', and an opacity of — say — 20%. I thought I could do something like this:
composite -matte -dissolve 20 -compose Screen overlay background output
...but the -disolve seems to have no effect. I'll poke about with it later perhaps (unless anyone can shout what I'm doing wrong there), and maybe have the script preset a series of options, rather than just the one I happen to think is the best at the moment.
@Carolyn — thanks for the link to jQuery. It looks rather good. I've used scriptaculous for a few things in the past, and I'm using the YUI for a large chunk of the stuff that I'm writing for work. I'm a bit loathe to introduce another library, but it certain looks interesting. I'll give it a shot ![]()
...
Ah, screening a layer on top of another layer, with 20% opacity...
composite -blend 0x20 null: overlay -matte miff:- \
| composite -compose screen — background output
Got to pipe a 20% transparent version of the overlay into the composite command. That'll do ![]()




Can't you use some kind of AJAXy business?
Instead of refreshing the whole page, get the JavaScript routine to asynchronously fetch and add any new stuff to the bottom of your log. That way the refresh won't send the viewer back to the top of the page.