Archive: August 2008


UI redesign


Every now and then the SL blogosphere creates a lot of buzz and interest around the topic of Second Life client UI redesign. I must say whenever the topic is mentioned I'm getting worried. Almost each time a change to the UI was introduced, it was for the worse (note I didn't say 'always').

I really wish Linden Lab stopped thinking about UI redesign and didn't listen to people who complain. I don't want an oversimplified UI design - it would be much more difficult to use because you'd have to SEARCH for every option, while now you just have them in the menu. Can you imagine Photoshop with four huge icons? And using those icons to find the options you need? I really don't want that to happen to Second Life viewer.

Right now people don't know what some of the options are for but they can test them once they become comfortable with the idea. If you hide the options, they won't even know they're available. Moreover, when they would want to find a certain option, they'd probably search the Internet and it would only make things more confusing ("What Advanced menu? I don't have it...").

People take part in UI redesign contests, blog their ideas and post pictures of proposed viewer appearances - and while some of their ideas are interesting, in most cases what I saw is quite scary. Huge icons filling half of the screen, CAPITALIZED menus, chaotic build menus, Advanced menu gone (I use it daily!), camera controls float which takes up 1/4 of the screen... OR there are also overly textified versions where half of the screen is filled with text. And I mean the little (like little little) text plus miniature icons, each one looking like a dot, or a blob in some cases. I saw weird and unnecessary tabs like Worn which is supposed to show what you are wearing (like I can't type 'worn' in the inventory search). I saw mini map changed into a radar thingie... Whyyy? Why would I want that? I want to see objects on mini map like I do now, with directions NW, N etc. It's a map, not a radar... please. I've also read some people want to remove the Notes from avatar's profiles. I use them frequently! I even use my own profile notes. I don't think they should be removed, actually I think they could be improved a bit (more space for notes, built-in search etc.). So with all those proposed changes I see more clicking, more searching, more time needed to learn! And less functionality, unfortunately.

I want the UI to take minimum screen space (but to be clear and legible at the same time) to have as much of the screen as possible for other uses. The current two bars on top and bottom are just perfect. Actually, the current SL interface is a lovely mix between functionality, usability, intuitive design and the calm blue color. Some minor changes could be made (more on that later) but a redesign is not needed.

I love this UI

The problem with SL interface is not really the interface itself. It's the people who use it. They don't look carefully, they don't follow the tutorials. If only people were willing to learn and to read with understanding, there would be no need to think about redesigning the UI. I don't want to grumble, I know these people are SL users too and it's important for designers to think about them. But it's important not to fall into extreme thinking as well. I know it's easy to criticise and you could say "make your own UI then"... but hey, didn't I say I don't want the interface redesign? Besides, residents are not usability experts, so I think they should have the ability to make their own skins (not only the colours but also the layout - like Winamp skins for example), but not influence the default look of the viewer.

I think it would be a good idea to make a newbie/light viewer for those less comfortable with advanced menus. I've also read somewhere about an idea of switching between three levels of interface, from an easy one, to a more sophisticated one. If you can make the third level look like the interface now, that solution is fine with me.


I also would like to say that good UI design is not all about the looks. The look IS important, but it's not the only thing the interface design is about. I don't really mind that the current SL buttons are not shiny (and I really like the way they look now). The menu is extremely intuitive (4 hours! come on! try to learn any other complex application in 4 hours) and that is what counts. Actually, shiny would be distracting (like the eye-dazzling Dazzle - it does have pretty buttons, but they are totally out-of-place in the viewer). What also counts is the efficiency - once familiarised with the menu, how fast we can do stuff. The viewer gets a pretty good score in this test, I think.

It seems that most UI redesign discussions focus on wrong issues as to what SL UI needs. When people state their needs, it's not required to do exactly what they say. What's needed is the answer to their requests, but not necessarily the way they imagined it. Jakob Nielsen (usability guru, very often quoted on my uni lectures) says you should pay attention to what people do, not what they say. How true is that? He actually wrote 10 usability heuristics and my favourite is the one that says you should let people choose instead of making them remember. I'm not saying everything should be visible (so it's OK to hide the Advanced menu for example). But don't hide the options that are needed just because they make menus a bit more complex.

Finally, I want to list the positive suggested changes - the ones I actually liked:
  • ability to copy, cut and paste in the inventory (Ctrl+C/Ctrl+X and Ctrl+V)
  • ability to relog without the need to close the viewer
  • ability to hide the "Release Keys" button
  • a drop down list of recently visited places (like a history of visited websites in a web browser)
  • a third tab in the inventory, called Favourites, listing items you marked as favourites (for items you use frequently)
  • ability to group people on the friends list into your own tabs
  • ability to set the range of the mini map (to more than one sim for example)
What I would also like to see introduced:
  • ability to find doubling items in the inventory (could be done by UUID)
  • ability to browse objects in the inventory by creator
  • ability to decide where to place the item you are given by another avatar (so that they don't go to the default folders but where you actually want them to go)
  • a Windlight preferred setting option in the Environment Settings menu - without the need to click your way through the Environment Editor OR/AND the ability to make your SL start with your preferred Windlight settings
  • a link provided with every error message that takes the user to the appropriate knowledge base article
  • undo inventory move - how many times have I accidentaly moved one folder into another and kept searching which one that was and where I've put it
  • marking recent items so that they don't show up anymore in Recent Items tab (sometimes there's too many recent items, and you might want to remove some this way)
  • ability to decide whether the viewer should auto-hide the Tools menu (according to JIRA, the menu won't be hiding anymore in 1.21, which would be just perfect)
  • ability to set IM autoresponder
  • ability to switch between different built-in follow cams
  • ability to add people to existing text and voice conferences (currently when someone crashes you need to re-start the conference for everyone)
Anyone has anything to add to the list? :)


Scripting summer drinks


This is an article I wrote for the latest issue of SL'ang Life magazine. Since it never came out, I adapted the article a bit and decided to publish it on my blog. If the tutorial gets popular, I might write some more :)

Don't get scared or discouraged seeing all the code here - the tutorial is aimed at people who never scripted before, so I'm sure you'll understand it, just go bit by bit. And you are welcome to ask questions in the comments of course. So, here it is.

Summer Drinks

When the weather is hot and sunny, avatars can cool off by drinking refreshing beverages. Unlike real life, after they make their yummy drink, they still have some work to do before it's ready. It's because objects in SL that are supposed to interact with avatars must be scripted. Today we'll learn how to script and animate a summer drink - the easy way!

The first thing to do is to create the drink object. This is where you let your creative power flow freely - I'm sure you'll come up with a yummy looking juice or ice tea. This part is up to you - the tutorial will focus on scripting only. Take time making your drink object, and once you have it ready, let's script!

PREPARATION
Rez your drink on the floor (or table, if you prefer), right-click it, select Edit from the pie menu and go to Contents tab (if you don't see the tab, click the blue More button). You will see there's a button that says New Script - click it. The drink will greet you with 'Hello, Avatar!' phrase and you'll notice a new item in the contents, named New script. Right-click it, select Rename, type in any name you want (for example Drink script) and press Enter on your keyboard. Right-click the script again and this time select Open. You'll see a window with a default LSL script. This is where we are going to work now.

Delete the whole default script (all the text), so that you start with a blank page, and type in:


default
{

}

This indicates the default state that every script must have. When the script is first run (or reset), it enters this state and does what is listed in here. The brackets indicate where the list of tasks starts and ends. We are going to put our tasks inside the brackets.

PERMISSION TO ANIMATE
The first thing we need to do in our drink script is to check whether the object (drink) containing the script is attached to an avatar. We'll use attach event handler, which is activated when an object is attached to or detached from an avatar.

default
{
attach (key id)
{

}
}

Attach event handler has one parameter - a key named id. Parameters in LSL are used to store values important for various functions, in this case a key. Each avatar has a unique key that identifies him in Second Life. So in this case the id parameter stores the key of an avatar who attached the object with the script. If the object is not attached to any avatar, the id parameter will store an empty key: NULL_KEY. We can use that information to tell the script what to do in both cases. If the script finds out that the object is not attached (id stores NULL_KEY), we're not going to do anything (for now). Otherwise (if it is attached), we want the script to ask the avatar for permission to animate him.

default
{
attach (key id)
{
if (id == NULL_KEY)
{

}
else
{
llRequestPermissions (id, PERMISSION_TRIGGER_ANIMATION);
}
}
}

Note that we use "==", not "=" to compare whether two values are equal. The latter ("=") would assign the value to the parameter.

When an avatar attaches an object, the permission to animate is granted automatically (user don't get the dialog box with the question), but the script has to ask for the permission first anyway. To ask for permission we'll use llRequestPermissions function. It needs two pieces of information: whom to ask (we need to give an avatar's key) and what type of permissions it should ask for (there are various types of permissions, like permission to animate, permission to track avatar's camera, permission to take money etc. - they are all described in LSL Portal). We want to request permission from the avatar who attached the object, so we will use the id parameter here. And since we need a permission to animate him, we'll use PERMISSION_TRIGGER_ANIMATION flag. Remember you need to place ; (a semicolon) at the end of every function, otherwise you won't be able to save your script (it will give an error).

HOLD THE GLASS
Now we have to tell the script what to do when the permissions are granted. We need the
run_time_permissions event handler, which is triggered when the avatar responds to permissions request - either gives or doesn't give the permission. That's why we also have to make sure the permission was granted. Run_time_permissions event handler has one parameter - perm. If no permissions are set, this parameter has value of 0. Otherwise it stores the granted permissions flags. So, what we need is a situation where perm == PERMISSIONS_TRIGGER_ANIMATION. To check that we'll use an if statement similar to the one we used in attach event handler (note that else statement is optional).

Once we're sure the permission was granted, we want to animate the avatar, so that he is holding the drink. You can create your own holding animation and place it in your drink's contents or use one of SL built-in animations (they are listed on the wiki). The built-in animation "hold_R_handgun" is perfect for holding a drink and that's what we are going to use. To start the animation, use llStartAnimation function.

default
{
attach (key id)
{
if (id == NULL_KEY)
{

}
else
{
llRequestPermissions (id, PERMISSION_TRIGGER_ANIMATION);
}
}

run_time_permissions (integer perm)
{
if (perm == PERMISSION_TRIGGER_ANIMATION)
{
llStartAnimation ("hold_R_handgun");
}
}
}

LET ME TAKE A SIP
So far, so good, but we still need a bit more scripting. Holding animation is not enough, as we want our avatar to take a sip every few seconds. That's why we are going to set up a timer in our script. Let's say we want the avatar to sip the drink every 15 seconds. We'll use llSetTimerEvent function (set to 15 seconds) in run_time_permissions event handler, right after we start the holding animation. So now when permissions are granted, the script will start the holding animation and then will start up the timer. And you probably have guessed now that we need another event handler: timer, which will be triggered every 15 seconds (the time we set) and where we'll list the tasks to be done. Timer doesn't have any parameters, as it doesn't really need any. Inside this event handler we only need one task: trigger a drinking animation. We'll use again a built-in animation: "drink", but you might want to create your own animation and drag it from your inventory into your object contents.

default
{
attach (key id)
{
if (id == NULL_KEY)
{

}
else
{
llRequestPermissions (id, PERMISSION_TRIGGER_ANIMATION);
}
}

run_time_permissions (integer perm)
{
if (perm == PERMISSION_TRIGGER_ANIMATION)
{
llStartAnimation ("hold_R_handgun");
llSetTimerEvent (15);
}
}

timer()

{
llStartAnimation ("drink");
}

}

I FINISHED DRINKING
The script is almost finished but there's one more thing we need to do - tell the script what tasks to perform when the object is detached from the avatar. We are going to place these in the attach event handler. If the script finds out that the object is detached (id stores NULL_KEY), it should stop the holding animation, stop the drinking animation and stop the timer. To stop the animations, we'll use llStopAnimation function and to stop the timer, we'll set the timer event to 0.

default
{
attach (key id)
{
if (id == NULL_KEY)
{
llStopAnimation ("drink");
llStopAnimation ("hold_R_handgun");
llSetTimerEvent (0);
}

else
{
llRequestPermissions (id, PERMISSION_TRIGGER_ANIMATION);
}
}

run_time_permissions (integer perm)
{
if (perm == PERMISSION_TRIGGER_ANIMATION)
{
llStartAnimation ("hold_R_handgun");
llSetTimerEvent (15);
}
}

timer()

{
llStartAnimation ("drink");
}

}

SAVE
Our script is now ready to save! Click the Save button at the bottom of the window. You should see a message Compile successful, saving... Wait until you'll see another message: Save complete. Note: if you can't save the script because it gives you a syntax error, or any other error, make sure you typed everything correctly. If you accidentally omit one semicolon, or make one spelling mistake, the script won't save. Just go through the script, try to find your mistake (there might be more than one) and click the Save button again.

Once the script is saved you can close the window and take your drink object to your inventory. Right-click it in your inventory and attach it to your right hand (you need to do it only the first time - later you can just use Wear option, as the drink will remember where to attach). You might need to rotate and adjust the glass while it's attached to your avatar. And that's it. Your drink is ready and your avatar should be holding it and drinking properly. Congratulations, you have compiled your first script!

OH, THE POSSIBILITIES
Note that you can script ice cream cones exactly the same way. It's a basic script for eating and drinking in Second Life, although many designers come up with their own, more sophisticated scripts. Which is something you might want to do as well. Just do trial and error, lookup new functions on LSL Portal or try various animations. Scripting is easy and fun and I'm sure you can learn it fast.

If you have any problems with this tutorial, you're welcome to ask a question in the comments. And if you decide to throw a party and serve your freshly scripted drinks, be sure to invite me!


Fashion: Summer green


A look inspired by recent hot summer days. I can't dress my avatar warm when it's so hot in RL :)

Fashion: Summer green

Outfit details:
  • Top: Last Call (Luciana / in Verdant, do not wear the skirtbase with this outfit)
  • Leggings: Camie Cooper (Lace Trimmed Leggings / in Cream, tinted black)
  • Earrings: Earthtones (Retro Rounds / in Black/Gold)
  • Necklace: Chicoco (Red Plastic Ring Necklace)
  • Bracelet: U&R (FREE Necklace and bracelet)
  • Shoes: Aphrodite Creations (Sasy Chic / in d'Or)
PS. I changed my avatar's skin ^^


When avatars live a life of their own


Aaaah, so yesterday my avatar stopped listening to me. She was partying without me (I know that, cause people saw me online) while I was struggling to login. I was going to ask you that if you came across me in-world those days, tell me to come home, cause I missed myself ;) But it turned out she only did that because she wanted me to study for my driving licence exam ;)

Finally with friends - Morri, Uzi, Linc and me

PS. No, I wasn't online constantly for the last 24 hours. That was her ;) And I wasn't ignoring you when you IMed, I just wasn't in control of my avatar for a while ;) Luckily, it's OK now.

PPS. Linden Support rules. <3 Thank you Francesca, Eilyn, Lotte and everyone who worked on this issue.

PPPS. Yes, I passed the theoretical internal exam and I'm going to actually start learning to drive! Ha! :)


One year blog anniversary


Yayness! :) Precisely one year ago I started this blog, not knowing if I would have time for it at all. And now, one year later, it still exists and it is more popular than I thought it would be (I even noticed some visitors from Linden Lab). The blog evolved a lot since I wrote the first post and seeing the number of readers increase so much over time, I assume it evolved the good way :)

Today I rummaged through blog statistics a bit but I'm not going to bore you with them, except a few bits that I think might be interesting for you, or just look colorful because they have a graph (joke ^^).

The number of readers
The number of unique visitors last month was 887 (with page views that's 1205) plus those who read my blog through various RSS readers (they're not counted into statistics since the sitemeter resides in my blog's sidebar). Amazing! The last few months I see a lot more people coming here, so the monthly unique visits will probably be above 1000 somehow soon :)

Readers location
Readers location
This graph looked a bit different a month ago. The number of Polish readers averaged about 25% if I remember correctly. It changed when we opened the Polish Republic. I met so many Polish residents in SL after the opening, that I actually lost track how many that was, which is pretty cool, I love meeting new people :) /me waves to new friends!

Browser share
Most of the visitors here use Firefox, which is great because my blog looks a bit better in Firefox. It's OK in IE too, but some spacings are bigger and the profile text is aligned to the left while it should be justified. I tried all possible changes in Blogger template and it won't allow me to fix that, so please use Firefox, cause I'm a perfectionist and I want you to get a perfect experience :P

My most popular posts
  • Oh hai, I has shadows! (this actually was the most popular blog post of the year on this blog and brought in an awesome crowd! hello new readers ^^)
  • Finding Magellan Linden (possibly the biggest roleplay in SL since quite a long time, basing on the story of Magellan Linden... started by long-time residents of SL, but even some Lindens took part in it; fun fun fun and I made some good friends too!; greetings to the explorers ^^)
  • Scripting made easy (a shout-out about Ann Enigma's wonderful scripting tool)
  • Plopp goes the sculptie (very simple sculpties creation through PloppSL)
  • SL'ang Life is here! (oh, you know... our beloved magazine about SL; who would've thought we'll have to close the project only after six months - that's a lot of time in SL, isn't it?)
The most popular search terms
These are the terms that made people click the link and visit the blog (pretty much consistent with the most popular posts).
  • ayumi cassini (ha! who's googling me? :P)
  • second life shadows patch (yup, I love SL dynamic shadows too)
  • magellan linden
  • simple scripting in second life
  • sl'ang life
So, that was a little summary. I'm really happy I've got a lot of regular readers and I've always wondered how they came across this blog. Randomly? Through recommendations from friends? A link from another blog? How did YOU find my blog? :) Whatever reason it is, I'd like to thank all of my readers for coming here, reading my posts, commenting, discussing and motivating me to write more!


Changes, changes ^^


Those of you who visit my shop regularly probably noticed that some time ago I opened two new shops next to Magic Nook and I rebuilt the area completely. The shops were quite empty for a while, as I had other things on my mind: we had to close SL'ang Life, I've been building the Polish Republic sim with others, and so the area at Clay was waiting for finishing touches and the announcement on the blog. Today I finally finished everything in there!

I called the area Ayuca Shopping Plaza and now my shops are:
  • Magic Nook - fun scripted gadgets
  • Imagimations - animations and modeling poses
  • dell arte - stylish furniture and decor for home and office
I decided to setup a subscriber system for all shops instead of using the traditional SL group for updates as I used to. With 25 group limit most people can't join my update group and I want to make it available for them. If you want to join Ayuca Update Group, come to Ayuca Shopping Plaza and touch one of the terminals.

I'm also working to put all my items on SL Exchange and OnRez, but it's a slow process. If you've ever done that, you know how boring and time consuming it is.

So, come on over to Ayuca Shopping Plaza, see my new shops and new products and leave a comment if you want :)


A new place on the map


I've been super busy lately, together with a few other Polish avatars. In two weeks we created an island, which we called Polska Republika (the Polish Republic). It's a Polish place (the official language is Polish) where it's the community who decide about the growth and development of the island. The island is going to have its own government (chosen by the community and led by the queen - Uzi, who is the owner of the island) and constitution (currently in the making). We have the preamble ready and it goes like this (more less, I translated it from Polish):
We the Founders of the Polish Republic in Second Life, not professing any rules except ToS and Big Six, linking to the best traditions of Second Life, where everyone is free and even, and decides about oneself, bound by friendship ties with every avatar, we set up the Constitution of Polish Republic as the basic law and hand over the land to all of you to administer. All avatars who, for the good of Republic, will follow the constitution, we call to do that towards the common good and common fun.
Yesterday we opened the Republic and I must say it was a huge success. Here are a few pictures from the opening academy:

Polish Republic Town Square
Polish Republic Town Square, right after opening the island to the public

Photo with visitors
Photo with visitors

Queen and the Ladies - Uzi, Morri and me
The queen and the Ladies - Uzi, Morri and me

In front of the royal palace
Group photo with visitors in front of the royal palace

Right before cutting the band
Right before cutting the opening band - the preamble is read on voice

Right after cutting the band
Right after cutting the opening band... Yes, Uzi did that with a katana :) And the royal fanfare was played.

Right after cutting the band 2
Right after cutting the opening band... Uzi and Dru.

During the concert
The island (note the shape) was full during the concert. The limit was set to 80 avatars (to keep the lag to minimum) so we kept getting IMs from people to let them in. What a success, eh? We need another island ;)

The island is open to everyone, so I'd like to invite all of you to come and see it. Particularly I invite you to our public library because I manage it ^^ and because the books in there are mostly in English, so you may use them freely and learn a bit about Second Life. Some of the library staff might not know the English language though, so you'll need to get by yourself if that's the case :)

Library
The public library

As always let me know what you think.