Wednesday, February 28, 2007

New LSL commands for setting linked prim parameters

Things that make script geeks happy -- I came across this in the forums:

New LSL Commands in 1.13.4 (posted by Milo Linden)

These seem to have slipped from the release notes, but i know quite a few have been looking forward to these.

Currently on the aditi beta grid.

llSetLinkTexture(integer link_pos, string texture, integer face)
Sets the texture of face for link_pos

llSetLinkPrimitiveParams(integer linknumber, list rules)
Set primitive parameters for linknumber based on rules.

Each with a 0.2 second sleep and rules as per their non link counterpart.

What does it mean? It will make life SO much easier to pass prim parameter information between linked sets. Faster too. And, reduce memory requirements. The SkirtProgrammer should become MUCH easier to extend to modify anything.

It's not slated for release for a few months, but it will be very welcome when it arrives!

Wednesday, February 21, 2007

First Land, and good people

Yesterday, without any warning, Linden Labs announced the end of the First Land program. It was a bit disappointing, because I had actually upgraded to a Premium account just 7 or 8 days prior, in the hopes of someday acquiring a little parcel to call my own. I was going to write what I think of Linden Labs, but...

... instead, I'll just publicly thank some people, who will remain nameless. But you know who you are!

Thank you to the decent human being who had a parcel of First Land of her own that she no longer needed, and felt badly about what Linden Labs had done. She wanted to find someone to sell it to, at the far-below-market value of L$1 per square meter. Totally understandably, she didn't want to "give" it away to someone who would immediately resell it for a 10-fold profit. That's not what First Land was meant for.

Thanks to a friend who knew of my disappointment about First Land, for remembering me, and for connecting us.

It's silly, but it was such an exciting moment when I went to that parcel, and clicked Buy for L$512 and... I was a landowner! Sure it's not much, but it's a place to call home (and was immediately set as my new home location, LOL).

Really, it reaffirms my belief that there really are good, decent people out there, who choose to do something nice for essentially a random stranger, rather than to make a profit. Thanks again. I only wish that all the other Premium members who just wanted a little place to call their own, could also have been as fortunate as I.

Time to try my hand at writing a "scene rezzer", to make the most of this little plot :)

Tuesday, February 20, 2007

Incredible texture work, offline to SL

Holy bajeezus, but it's really impressive what some people can accomplish with texture work, using 3-D ray tracing.

By creating textures off-line and simulating light and shadows, Johanna Hyacinth has really impressive "before" and "after" views of a lecture hall she designed for Rockcliffe University in Second Life. I just love the way the corners of the rooms get dark, and how the shadows fall under the chairs. Very much worth taking a peek at.

I hope she doesn't mind that I'll post two thumbnails here...


Wednesday, February 14, 2007

"Smoke" texture and subtle permissions problems, crud crud crud

The "Edit Linked Part" feature of the newly released LoopRez Deluxe v0.8 had a critical failure with textures, with the "Smoke" texture being substituted. This is due to the inconsistent and flawed permissions system on SL, and was missed because it was not apparent to me, because I had full permissions on all objects during testing.

I released a version 0.81 fix for both the Commercial and Personal editions.
  • Commercial Edition has full functionality restored.
  • Personal Edition can still do the "Edit Linked Parts" --> "Touch" to update skirt, but textures will not be propagated. All other prim parameters will be sent to the rest of the skirt. I'm sorry that I was not able to keep ALL features identical between Personal and Commercial Editions
  • the Template DropScript can still be used with both versions, to send texture information

Technical explanation: inconsistencies / holes in the SL Permissions system:

Users should be aware that a serious hole in the SL permissions system is that any object, even if "NO COPY / NO TRANSFER" can be physically copied, if they are "MOD"-able.

The way it works is that you write a script that reads off ALL the prim parameter settings of an object and reports them, and then you drop it into the "MOD / NO COPY / NO TRANSFER" object. With the prim parameter settings, you can recreate the object, and you could have another prim "listen" to this report of settings, and duplicate the object.

This has been known a long time, and caused quite an outcry when the technically excellent and ethically conscientious scripter Jeffrey Gomez released an incredibly helpful tool, that as a side-effect, revealed more publicly the already-present and known-to-some short-coming in the SL permissions system. He tried to work with LL to close this permissions hole, but LL was not interested. He tried to release an entire LSL-based system to close the hole, and was attacked by the user community.

So, the hole remains. As you might have guessed, the way the DropScript works is by reporting all prim parameters to the LoopRez object. It could copy objects that are NO COPY / NO TRANSFER, except that I coded it so that it checks permissions and refuses to run, unless FULL perms are present. I have no wish to be attacked the way Jeffrey Gomez was.

There was a time when even textures could be copied in this way; however, LL did patch the permissions system so that texture UUID's can not be read unless full permissions are present, while other prim parameters CAN be read. I was aware of this, and figured that would not be a problem, because I warned LoopRez Deluxe users that they would need full permissions on any template prims.

Here's the subtle problem that I missed: if an object that you have FULL permissions to is linked to an object that you do NOT have full permissions to, you will not even be able to read the texture UUID of the object that you DO have full permissions to.

And, when you try to read a texture UUID that you're not allowed to, it returns the NULL_KEY (all 0's). And when you try to set a texture with NULL_KEY, you get... the "Smoke" texture.

The Commercial Edition fix was easy -- the Little Metal Ball is now full permissions. Early testers of the latest version of LoopRez Deluxe sometimes had a metal ball that was full permissions, sometimes not, which is why the problem seemed unpredictable and intermittent.

The Personal Edition can NOT be fixed, because the panels are all NO TRANSFER (by definition of the Personal Edition.) You can still do the "Edit Linked Parts", but I edited the script so it would not try to read the textures (because it can't). Textures can still be read by the DropScript, because it is dropped onto an unlinked prim which you have full permissions on.

I apologize to all LoopRez Deluxe users who received this product with the "Edit Linked Parts" initially not working.

Sunday, February 11, 2007

Varying skirt pleat lengths (and colors) -- skirt scripting language?

Voila, the ugliest skirt in existence!

One of the things about LoopRez is that it generates skirts where all the panels are essentially the same -- same color, same length -- just varying in position and rotation in space. Varying the length can give a much more interesting effect. One of my favorites is Natalia Zelmanov's formal gown.

When LoopRez was modified to have a "BACKANGLE" setting, where the back panels can have a different amount of flare angle compared to the front of the skirt, I started thinking that it ought to be possible to do more with varying each panel.

I experimented with a rather extreme case of varying textures across the panels, by tiling a texture completely around the skirt. This worked, but had to be hand-coded, adjusting the script for the specific skirt size and texture. This wouldn't be terribly accessible to the general public.

So, what about varying lengths (and colors) across skirt pleats, but making it more usable to the general public? I've been thinking about this for a while now, and even mentioned it a little while back. Well, in the past few days, I wrote my first notecard reader (for product updates, actually), but realized that a notecard might be a way for a skirt designer to tell LoopRez what they wanted in varying lengths.

Here's what I've come up with -- the LoopRez Skirt Programmer
  • there are 360 degrees in a circle: moving counter-clockwise looking down on a skirt,
    • 0 degrees is the front of your skirt;
    • 90 degrees is your left side;
    • 180 degrees is the back;
    • 270 degrees is the right side; and
    • 360 degrees is the front again
  • prim sizes are described (in the Edit Menu and in scripts) as three numbers <x,y,z>, a vector. Generally, the Z size is the length of a skirt, depending on how you rotated your prim
  • I create a notecard, and consisting of some lines that describe the lengths at various "degree positions" on a skirt. Here's an example:
    TYPE~SIZE
    0~<0.2, 0.2, 0.2>
    30~<0.2, 0.2, 0.3>
    60~<0.2, 0.2, 1.0>
    300~<0.2, 0.2, 1.0>
    330~<0.2, 0.2, 0.3>
    360~<0.2, 0.2, 0.2>
    The first line tells my script that you want to vary the size. Notice that X and Y are always 0.2 -- those sizes don't vary. Notice that Z, however, varies from short (0.2 m) at the front of the skirt, a little longer (0.3 m) at 30 degrees, and full length (1.0 m) for all the degree range from 60 degrees to 300 degrees, then symmetrically back to 0.3 and 0.2 meters as you come around the front-right of the skirt again.
This is what it looks like.

IMPORTANT: there's been some confusion about when to use the SkirtProgrammer. Essentially, what you need to do is ALL the things to generate a skirt, and THEN run the /1 PROGRAM command. The Skirt Programmer works on a skirt that has already been rezzed, but NOT yet completed with the /1 DONE command.

Start with a default 30 panel LoopRez skirt:

After dropping the above notecard (named "skirt open front") onto the LoopRez central little Metal Ball, and typing "/1 PROGRAM skirt open front", the panel sizes get adjusted to look like this (no adjustments needed for position or rotation, so it took just a few seconds to go from the first picture to this one):


Well, it turns out that like sizes, colors are also described in SL by 3 value vectors, <RED, GREEN, BLUE>, with values ranging from 0 to 1 for each color. So, it wasn't hard to write the script to vary colors as well. I don't remember exactly what the Notecard contained, but it was probably something like:

TYPE~COLOR
0~<1,0,0>
180~<0,0,0>
360~<1,0,0>
In other words, pure bright red at 0 degrees (the front), varying to no color (black) at 180 degrees (the back), and then back to bright red at 360 degrees (the front) again. Here's how it looks:
Notice that the short panels stick out a bit. Bah... I think that has to do with the flexi settings -- a short panel doesn't have as much "gravity" pulling it down. So, perhaps some small amount of manual tweaking might actually be helpful.

Ever wonder how to generate a rainbow in RGB space? No? Well I did, and I found one way here:
It ends up being a progression of 6 segments, varying the amount of red, green, and blue. So, why not try to write a Skirt Progammer notecard ("skirt rainbow") that varies RGB in this progression? It looked like this (I added in comments for description):
TYPE~COLOR
0~<1,0,0> // pure red
60~<1,1,0> // red + green
120~<0,1,0> // pure green
180~<0,1,1> // green + blue
240~<0,0,1> // pure blue
300~<1,0,1> // red + blue
360~<1,0,0> // back to pure red
There are 6 segments in the progression, so I divided the 360 degrees of a circle, to get 60 degree increments around the skirt. After typing "/1 PROGRAM skirt rainbow", the result makes me think of 60's tie-dye hippiedom:


To adjust 30 panels manually to get a smooth rainbow gradient would have been rather tedious. To run it with the Script Programmer took a few seconds. Fun!

Granted, the skirt is ugly enough to make a real SL fashion designer want to claw their eyes out, but hey, I just make the tools -- it's up to them to make beautiful things with them.

Comments? What do you think?

Saturday, February 10, 2007

Catherine Moody, Live at the Acropolis

Congratulations to Catherine Moody, on her two-hour debut concert at the Acropolis Stadium. It was a spectacular program, consisting of:
  • Schubert: Valses sentimentales nos. 1-5
  • Mozart: Sonata in F major K332, 1st movement
  • Brahms: Intermezzo in E flat “Shepherd's Lullaby”
  • Chopin: Études op. 25 no. 1 "Harp", op. 10 no. 3 “Tristesse”, op. 10 no. 8
  • Bach: Prelude in B minor from "The Well-Tempered Clavier”, Book II
  • Beethoven: Sonata no. 27 in E minor
    • 1. Mit Lebhaftigkeit und durchaus mit Empfindung und Ausdruck (“With vivacity, and with sentiment and expressivity throughout”)
    • 2. Nicht zu geschwind und sehr singbar vorgetragen (“Not too fast, and highly lyrical”)
  • Liszt: Harmonies du soir "Evening harmonies"
- Intermission -
  • Selected compositions by Catherine Moody's real life alter ego (1981-present)
    • I. Prelude (2003)
    • II. Childhood innocence: Budgerigars, Opus Two, Sketch in G (1988-1990)
    • III. Studies in classical form: Sonatina (1995), Étude (1998)
    • IV. Sentimental miniatures: Dreams of Bygone Days, Valse Mélancolique, Reality and Fantasy (1995-1996)
    • V. Trials and tribulations: Sonata in Bb minor—1. Funeral March (1995), 2. Adagio (2006); Despair (1999); Waltz “In Your Absence” (2003)
    • VI. Contemplation no. 3 “Prayer for the unfortunate” (2003)
I believe the audio stream peaked at around 50 unique listeners! I'm really looking forward to hearing more of Catherine Moody in the future. :)

For me, the concert was enhanced by the presence of the lovely ladies Miss Virrginia Tombola...
... Rhetorica Acronym, and Johanna Hyacinth.

Why am I posting pictures? Because I get out so infrequently, that the sheer novelty of seeing other avatars forced me to take snapshots :)

Friday, February 9, 2007

Automated product updates: one solution

So I mentioned the other day that I was trying to come up with a decent method to deliver product updates. This pipeline is horribly kludgy and not automated, but it's what I've come up with so far.

Issues and solutions
  1. Need to maintain a complete list of purchasers, regardless of whether they've purchased from Sirena Fashions, SL Exchange, or SL Boutique. It would have been easier if I had just scripted a vendor that kept track of all purchasers and their avatar keys, but then it would not have been available on the regular web.

  2. Downloaded the available avatar name / key database from http://www.moopf.com/name2key.php

  3. Wrote a Perl script that took each purchaser's avatar name and searched the 600,000+ entries in the moopf database, and returned the listed key. Amazingly, only one avatar UUID key was missing (it was someone who was created just a few days ago).

  4. Manually found the missing avatar UUID by following the instructions at http://w-hat.com/name2key
    You can also look up keys yourself using the SL client. First, enable the debug menu (ctrl+alt+d), and use it to turn on the Debug Console (ctrl-shift-4, or Client -> Consoles -> Debug Console). Search for the person using Find, and then hit Instant Message. A message will come up in the debug console following the form:

    INFO: LLTalkView::createFloater: target (user key) in (session key)

  5. Copied all the avatar names + keys into a notecard. Here's where my paranoia shows. The databases of names / keys are NOT Linden Lab official. There is no assurance that the key that they list for a name is actually linked to that name. So, I copied all the name + supposed key pairs into a notecard in SL, and...

  6. Wrote a script that read line by line from the notecard, and checked that the name pulled up with a llRequestAgentData on the key actually matched the name I had. They all matched, lol, which shows that my paranoia is groundless and a waste of time. :)

  7. If the key and name match, the script will send the inventory item to the user. Just in case there are people who do NOT want to receive updates, I also coded it so that in the avatar / key list, lines could be flagged as people who didn't want updates.
Phew! So much of this hassle could have been avoided if LL just included a "name to key" function...

Or, since there are minimal sales at SLEx and SLB, a simple solution will be to replace the product in Sirena's with a scripted vendor that records the avatar UUID's, so I plan go write a one-prim vendor soon.

For everyone who asks, "Why the heck are you reinventing the wheel? Other people have written vendors and product updaters," well, this is how I've taught myself how to script. :) Before today, I'd never written a Notecard reader or Agent Info query before. Having done it now, I now understand how it works, and for me, that's fun! (Yeah, weird sense of fun, I know...)

bye-bye DropScript, yay!

The "Template Parameter DropScript" is probably one of the more powerful but most confusing parts of the LoopRez Deluxe setup. It's really useful, because you can adjust a skirt AFTER it's already been rezzed, without editing each panel separately.

But, it's SO unintuitive -- why would you drop a panel on the floor next to you, and then drop a script onto it, to adjust a skirt you were working on? Wouldn't it make much more sense to edit the actual skirt you were working on? I think it's pretty clear that if I couldn't come up with a simpler name than "Template Parameter DropScript," it had to go.

(And for the truly paranoid, the DropScript does not communicate securely with the LoopRez object -- it uses spoken commands on a hidden channel, but an enterprising industrial spy hell-bent on obtaining your secret texture UUID could conceivably intercept it. In contrast LinkMessages within a linked object are secure.)

I've (yet again) re-written LoopRez Deluxe so that panels can be edited in place, and the changes propagated through the rest of the skirt in progress. Here's what it looks like:

  1. First, you rez and link your skirt, just as before. Then bring up the edit window and check off the "Edit Linked Parts" checkbox:





  2. After clicking the checkbox, click on any panel you'd like to edit, and make all changes as you would normally do. Here, I've applied a texture to the outward-facing surface.


  3. Finally, "touch" the panel you just edited. Because you have an edit window up, the easiest way to activate a touch is to RIGHT-CLICK the panel you just edited, and choose TOUCH. All parameters will automatically be transmitted, and the changes will spread to the rest of the skirt.

    The Personal Edition will not be able to spread textures, because of the permissions system in place. However, all other prim parameters will be transmitted.



  4. Voila! The entire skirt is updated, and you didn't have to go around dragging any panels to the ground or scripts from inventory.


Like it?

Wednesday, February 7, 2007

any tips on scripting for product update delivery?

I posted this on the official SL Forums this morning, looking for advice:


I was wondering if anyone had any general tips on writing product delivery scripts.

I've released my first product, which contains a few prims and 4 scripts, and already, it's time to send out an update to deal with... "issues" (stomp those bugs! Because updates will occasionally include completely new scripts, I can't simply use llRemoteLoadScriptPin.

So, I think the only option is to use: llGiveInventory

But then, I need a list of all the keys of the users. But, although there's an llKey2Name, there's no llName2Key function, right? Neither the SL transaction history, or SL Boutique, or SL Exchange appears to make available the keys to the users.

What's the best way to keep a list of the keys of all the users?

My guess, and PLEASE correct me if I'm wrong:
- this time, I'll have to manually search each user, and drop the new product on their profile
- the new product will somehow communicate the owner's key to me (what's the best way? email?) I've never been a fan of RL products that "phone home", and this bugs me a little.
- in the future, I'll have a list of keys, and would write a script looping through them all and do an llGiveInventory (what's the best way? reading lines off a notecard?)

Or perhaps, have a notecard with all the avatar names, and then an object in a store the users would need to go to. When they touched the updater object, the avatar's name could be checked off the notecard list, and if present, the updated object could be given to them. Perhaps their avatar KEY could also be recorded at this point, with their permission. This avoids the "product phone home" distastefulness too.

Any thoughts? Thanks in advance.

Tuesday, February 6, 2007

Tiling a texture across many panels

I had some fun playing with texture offsets and writing a script that would send different offsets to each panel of a LoopRez-created object.

For a test, I wanted to run a long, skinny picture across the bottom of a "skirt." I used an image from the web, at the WHTour:Gugong:Nine Dragons Wall scrolling panoramic view. Here's an excerpt, with 4 of the 9 dragons:


To test the script, I created a LoopRez object with maybe 10-12 panels, and tiled the texture across it, yielding this:

It seemed to work, other than some distortion issues, so I told LoopRez to increase it to ~20-24 panels, and ran the texture tiler. So, from the first object to the second object only took a few seconds, with no manual editing of texture offsets. Cool!

And, just because movies are fun, here's a video of the object rotating around, so you can see more of the dragons, and how the textures are split across the flexi panels when they move:



I don't think this script could ever be useful as a releasable tool, though. Essentially, I think for every project, the script would have to be re-coded, which would probably not be worth it. But it was a fun little hack :)

Monday, February 5, 2007

Product support, and LSL aaarrgghhh's...

Cut and pasted, basically straight out of a notecard sent to some LoopRez Deluxe users who have had some problems: two people who can not link more than 6 to 8 objects at a time, and a crazed (and I mean it in the nicest way) individual who makes 60 prim skirts, and has run into grey goo problems.

After writing it, I thought other users might be interested in the progress / troubleshooting.

LoopRez Deluxe v0.67 BETA

- NOT well tested yet

Linking problems, can not link more than 6 - 8 panels
  • added the option to have the LoopRez do all the linking by itself, without user input
  • this will add a 1 second per panel delay (llCreateLink has a built-in delay), so people without linking problems wouldn't want this
  • to activate it, type /1 AUTOLINK, BEFORE you touch to rez the panels, and it'll give you a message that autolink is ON
  • to deactivate it, type /1 AUTOLINK again, and it'll tell you that it's off again
  • with the 2 users who were having this problem, AUTOLINK seems to have resolved the problem

Grey goo barrier problems
  • added the option to slow down rezzing, to prevent running into the grey goo barrier
  • type: /1 DELAY ##, where ## in the per panel delay in seconds
  • the default is 0.0 seconds

Memory of prim parameters
  • split out some functions of LoopRez into yet another script (the package now includes 5 distinct scripts, all inter-communicating), to see if that would free up enough memory to "remember" prim parameters after changing number of objects / "die" commands / between sessions
  • /1 reset will reset all scripts, clearing out the prim parameter memory
  • I've had a script crash once, with memory running out, but it hasn't been reproducible
  • I need to make sure memory issues won't recur..

Pretty much failed attempt to get rid of that DropScript
  • I was hoping that by using "edit linked parts" on a skirt that has been rezzed, a new method to tweak skirts would be possible
  • Goal: in edit menu, check off "Edit linked parts", and then edit ONE isolated panel within a rezzed skirt; then "Touch" that edited panel, and a dialog window would allow you to propagate the change through the rest of the skirt
  • after doing a heck of a lot of script re-writing, I *then* found out that you can NOT change "flexi" parameters even if "Edit Linked Parts" is checked. DANG DANG DANG
  • well, it does seem to work for size / color / texture, at least
  • I disabled rotations for now, because that would involve more rotation math, and I'm not fond of rotation math
  • back to the drawing board. I hate LSL sometimes
Edited 2/9/07 to add: WOOHOO! "Edit Linked Parts" works just fine, I just wasn't doing it right. Adjusting an attached panel on a skirt in progress, and propagating any adjustments through the rest of the skirt ought to work beautifully -- I think this will be much more intuitive than using that DropScript.

Sunday, February 4, 2007

Catherine Moody, debut concert


I just wanted to do what I could to let people know about the debut concert of the incredibly talented Catherine Moody. She is an accomplished pianist, playing everything from Bach, Beethoven, Chopin, and Debussy, to Joplin ragtime, to her own compositions and improvisations. (I hear she also plays the guitar and violin.)

Please support the Arts in Second Life, as well as the official debut performance of an extremely gifted artist. Hope to see you there!

Saturday, February 3, 2007

A few notes, and another wonderful concert

The FREE LoopRez v0.61 script, and LoopRez Deluxe packages are now available at SL Exchange and at SLBoutique, to give more options for distribution. It will still be less expensive to obtain them at Sirena Fashions, though.

The initial response to LoopRez Deluxe has been nicely favorable! I'm wondering whether it'd be rather gauche to ask permission of the people who sent IM's or posted nice comments to quote them, either anonymously or not?

There is now an open membership "LoopRez User" group in Second Life, for upgrade announcements and peer-to-peer support. Any bugs or problems should still definitely be reported directly to me though!



And on an unrelated note, I had the pleasure again of hearing Catherine Moody perform classical music on the piano last night. What a talented and charming individual! I can't highly enough recommend that everyone who has the least interest of hearing beautiful piano music try to hear her perform.

Sometimes I feel rather out-of-place, amongst the creative designers, skilled musicians, artistic poets and writers, and imaginative role-players that can be found throughout Second Life. Although I am slowly acquiring expertise and experience in scripting, still, it feels so very technical. I continue to very much admire, and rather envy, those who possess such an aesthetic sense. Perhaps if I try to hang around them, some of it will rub off ;)

Friday, February 2, 2007

LoopRez idea hodgepodge

Just collecting some random thoughts here about future things to play with (sort of a public journal of silly ideas).

  • Right now, LoopRez duplicates a single object repeatedly in the path of an ellipse. Although each panel is at a different location with a different rotation, each object is otherwise identical.

    But, there's no reason why this has to be the case! It should be possible to send each panel a distinct, separate instruction that varies, for example: length (to form those dresses with a "V"-shaped cut-out in front, or high on one side + low on the other), color (maybe a gradient of a hue, from light to dark). In fact, this is exactly how the "BackAngle" adjustment works to increase the "poof", just in the back of a skirt.

    The only problem is that it would pretty much need a custom script written each time. The script wouldn't be complicated (I could see it being just a dozen lines long, and mostly the same each time), but would put it out of reach for most users.

  • when a dress is in progress, each panel contains an active script (that's what the little green asterisks are signifying); when the dress is completed, the scripts delete themselves.

    Here's an idea that might cause horrendous lag, or might be fine (e.g., touch-activated + link messages): leaving some scripts in place. What might that be useful for?
    • saving different sizes (S / M / L / XL), or lengths (mini-skirt through ankle length), triggered by user commands
    • user-selected colors / tints
    • a brief change in parameters, maybe even combined with an Animation or Gesture? I've always thought it'd be cute to have a Marilyn Monroe gust of wind effect. How might that be implemented? Perhaps a 1 or 2 second change in the flex prim gravity to negative JUST in the side panels, and then returning it to normal, combined with that famous pose of hers :) Anyone want to design a Monroe skirt and animation for me to play with?


  • I really don't like the kludginess of the DropScript. I think perhaps actually editing a panel already in place (using Edit Linked Parts), and having the change propagate through the rest of the skirt, would be far more intuitive. This is probably #1 on my list of things to do.
It's also time for me to take on something new to learn about, in LSL scripting. Perhaps I will try my hand at writing a multi-tool. My idea is for it to have "modules" that can be dropped into it, so you only install what you want. It should also be possible to activate / deactivate modules that are present, to minimize lag.

Too many things to play with, too little time.

On the other hand, I've FINALLY bought some clothes in SL. Yes, after nearly 2 months, I actually bought a pair of shoes, and a sweater or two. I'm not much of a fashionista, am I? :)

Thursday, February 1, 2007

Some ideas?

I met a charming individual named Meni Kaiousei in SL today, who suggested that perhaps LoopRez might benefit from a User Group, for announcements of new versions, updates, and help.

I like the idea!

But, if we had a group (which, I believe, requires at least 3 people, so if nobody else is interested, I'll hold off), I do have one concern. While it would be great if users were willing to help out other users having problems, I'm worried that if I'm not logged in at the time, I won't hear about the problem or difficulty. And if anything was confusing enough that people had to ask for help to get it to work, I'd rather hear about it, so I can try to improve it. We'll see :)


An unrelated idea: I'd like to collect a photo gallery here on the blog of objects (dresses, skirts, buildings, whatever) created with the assistance of any version of LoopRez. I really like seeing what so many talented designers have been able to create. (For example, when I met Meni, she was wearing a lovely floral print skirt, with lace trim -- very nice!)

If you'd like to share, please send me a photo of your creation ("full permission", so I can download the picture off SL and upload it here). I'd also be happy to list your name, store name, or SLURL store location too, if you'd like!

Interested?

LoopRez Deluxe, now available


Also available at SL Exchange!
Current version is v0.8, released 13-Feb-2007


Unfortunately, I am unable to make LoopRez available on the Teen Grid.
However, the free LoopRez script could be used.

Tuesday, January 30, 2007

Intellectual property and patents -- I don't think so

I got home to an interesting notecard from Jerry Martin, creator of a skirt generator that is sold on SLexchange.

I initially posted his notecard to me, but because a notecard might be construed as part of a "conversation", which would be against LL ToS to post under resident's expectations of privacy, I've removed it. The bottom line is that he tells me he has applied for a patent of his dress-making "invention," and that he suggests that I should be aware of the "patent pending" status of his "invention."

This is rather interesting to me, but doesn't make me overly concerned. I wonder what portion of LoopRez infringes on his yet-to-be granted patent? Possibilities include:
  1. the parametric definition of an ellipse, consisting of:
    • x = a cos (t)
    • y = b sin (t)
  2. dividing 360 degrees (or 2*PI radians) by the number objects you wish to place radially symmetrically
  3. the equation for a tangent unit vector at a position on an ellipse, which is published in equations 89 and 90 at Wolfram's Mathworld
  4. applying a fixed rotation to an object around a local axis (the "flare" rotation)
  5. using llRezObject?
Another reason that I'm not terribly concerned, and would be happy to challenge his "patent", in the unlikely event that the United States Patent and Trademark Office were to grant it, is that it fails to meet 2 of the 3 criteria that all patentable inventions require: "new / novel" and "non-obvious." Multiple people have independently come up with the same method to place objects along an elliptoid path in space, including Ariane Brodie and Johanna Hyacinth.

My public reply to Jerry Martin:
Jerry,

Thank you for your notecard correspondence, which this time was readable. While interesting, I am going to proceed with my plans. Patent protection does not start until the actual grant of the patent. Feel free to inform me when this has taken place.

As you know, intellectual property of patentable inventions requires certain attributes, including new/novel, useful, and non-obvious. While the concept of the various "skirt generators" may be useful, the other 2 criteria are likely not met.

This idea may not be novel, as Ariane Brodie long ago released a script into the public domain that rezzed objects in SL in the pattern of a modified ellipse (http://virtualunderworld.net/arianeb/secondlife.htm). The mathematics she used to place the objects at a proper tangent angle were incorrect, but the tangent equations are also in the public domain, at http://mathworld.wolfram.com/Ellipse.html, equations 89 and 90. It was an "obvious" improvement to correct Ariane Brodie's incorrect mathematics to substitute in the correct tangent vector.

Finally, once in the public domain, it is usually not possible to successfully obtain IP rights. I point out that I freely released the LoopRez v0.6 script into the public domain, which includes both the non-original concept of placing objects in an ellipse, as well as the corrected mathematical formula of tangent vectors.

Again, thank you for your note. I will be posting our correspondence publicly as a matter of record at http://slged.blogspot.com.

Ged Larsen





I then proceeded to release LoopRez Deluxe, with the following response:

February 1, 2007

Ged Larsen


I have just spoken with an attorney and been advised to ask you
to cease and desist all and any occurances and references
pertaining to any device you have that infringes on my intellecual
property and or patent rights . Your looprez used as a device to
manufacture prim skirts or dresses clearly infringes upon my patent
pending process. Your failure to abide by and defience of United
States Patent Law , reluctance to discontinue sales and
distribution along with a public announcement to proceed with sales
and distribution after you were notified of the patent pending
status , clearly demonstate and consitutes willfull patent rights
infringement on your part. A snapshot has been taken of your blog
known as (geds anti-blog) to be used as evidence in the event a
trial takes place and will also be sent to Linden Labs legal
department .

Also if nessesary a court ordered Cease and Desist Order
prepared by an attoney will be presented to Linden Labs to wipe
their servers clean of your infringing product including any of
this product sold to other residents . That will cost me 3-5
hundred dollars to have done and I do intend to recover all and any
expenses that are a direct result of any legal actions that take
place against any person or persons that break the law by patent
right infringment on my product .

In addition I am drafting letter to be sent to the DMCA to
inform them that a copyright and patent right infringement of a
patent pending product is taking place on the servers at Linden
Labs .

In all fairness I will allow 24 hours for you to remove the
infringing product and any references to it being used to
manufacture prim skirts and dresses . Failure to comply will
put you at risk of further litigation and legal action brought
against you in a U.S. Court of Law .

With kind regards ,
Jerry Martin , Fashionetics


I don't think his claims have merit.

Saturday, January 27, 2007

LoopRez for making buildings

I came across a blog entry: ArtsPlace SL: LoopRez and buildings, where there's a very nice example of a building created with some assistance from LoopRez.

The enclosure looks very bright and airy.



Sort of made my day to know the script was helpful to someone :)



I'll be away for the next half week. Will I survive SL scripting withdrawal?

LoopRez Deluxe Documentation

LoopRez Deluxe Documentation

This is primarily a list of commands. If you are new to using LoopRez Deluxe, the following are the most useful places to start:

Command List



/1 AUTOLINK
  • rezzed panels are automatically linked together
  • must be typed BEFORE rezzing the panels
  • type it again to turn it off
  • causes a 1 second per panel delay (because LSL's llCreateLink command forces a delay)
  • with Second Life being so buggy and laggy, some users were unable to link more than 6-8 panels at a time; this command should bypass that problem, at the cost of a 1 second per panel delay



/1 BACKANGLE ##
  • adds an extra ## degrees of flare angle to the backside of a skirt
  • helps prevent the effect of prim panels emerging from the buttocks and upper thighs of avatars



/1 CHANNEL ##
  • changes the channel that LoopRez Deluxe listens on for chat commands
  • i.e., if you typed /1 channel 0; all subsequent commands would be listened to on the public, regular chat channel
  • default is 1


/1 CIRCLE ##
  • changes both WIDTH and DEPTH to ## meters, forming a circle instead of an ellipse


/1 DELAY ##
  • delays panel rezzing by ## seconds between each rez
  • helps if you are having problems running in the SL "grey goo" barrier
  • if the "grey goo" barrier prevents some panels from rezzing, the best way to recover is:
    • select and link all the panels that DID manage to rez with the central Metal Ball
    • issue a /1 DIE command
    • increase /1 DELAY to 0.5 or 1 second
    • touch the rezzer again to re-rez the panels


/1 DEPTH ##
  • changes the front-to-back DEPTH of the skirt to ## meters
  • contrast to /1 WIDTH


/1 DIE
  • causes all panels LINKED to the central Little Metal Ball to delete themselves
  • does NOT reset the scripts, so parameters are retained for use with the next rezzing (i.e., number of objects, width, depth, and seen prim parameters / textures)
  • contrast with /1 RESET


/1 DONE
  • issues when you are FINISHED with the skirt
  • causes all scripts with the skirt panels to self-delete, as well as re-linking the skirt to a new central object


/1 EVENELLIPSE
  • this toggles between placing the skirt panels evenly around the ellipse versus allowing them to bunch up a little bit on the ends
  • even spacing is a LOT slower, but might look better with low flare angles
  • the default is NOT even spacing, which is faster and generally looks better with the usual flare angless


/1 FLARE ##
  • this adjusts the number of degrees that each skirt panel will "poof" outwards
  • 90 degrees has the panels sticking straight out, like a ballerina's tutu; 0 degrees has the panels all hanging straight down
  • /1 BACKANGLE adds extra flare angle to the backside of a skirt


/1 HELP
  • lists the available commands and current settings


/1 NUMBER ##
  • changes the number of skirt panels to rez
  • if entered AFTER a skirt has already been rezzed, will make the existing panels disappear, and then re-rez the new number of panels, and then (new to v0.8) re-apply any skirt prim parameters it has seen to all the newly rezzed panels
  • limited to 60 now, but if more are needed, the theoretical maximum would be ~255


/1 OBJECT ##
  • changes the name of the Object within the central Little Metal Ball that is rezzed; the default name is "Object"
  • this object MUST contain the morphTarget script
  • the creator of this Object becomes the creator of the final finished skirt (AFTER the /1 DONE command is issued), so replacing this object is the goal of reconfiguring LoopRez Deluxe Commercial Edition to change the skirt creator listed
    • Commercial Edition Users could conceivably load multiple objects with different names, and use this command to have lots of different "starting panels" available


/1 PROGRAM ##
  • this activates the Skirt Programmer to execute a notecard named "##"
  • it MUST be run AFTER the panels have all been rezzed and linked
    • it's probably best to run this command as the LAST thing you do before the /1 DONE command
  • the Skirt Programmer allows you to define a program of skirt panel sizes or colors that varies from panel to panel, all the way around the skirt
  • the notecard must be in the central Little Metal Ball
    • LoopRez Deluxe ships with two notecards in the Little Metal Ball: "skirt rainbow" and "skirt open front"
    • examine these notecards to get a sense of how your own Skirt Programs could be written
  • Skirt Program Notecards
    • must be in the little metal ball
    • start with a line "type~size" or "type~color"
    • optionally follow with the lines:
      • "alpha~##" (## is the color alpha, default 1.0), or
      • "face~##" (## is an integer describing which face to color, default ALL_SIDES)
    • lines:
      • 0~<X, Y, Z> (vector describing the starting size or color at 0 degrees, facing forward)
      • any number of lines ##~<X, Y, Z>, describing size / color at points moving around the skirt to the left
      • 360~<X, Y, Z> (vector describing the end position size or color, after coming completely around the skirt)
  • this command is complex enough that I can't promise to fully support it; think of it as a potentially powerful freebie that's included


/1 RESET
  • causes all panels LINKED to the central Little Metal Ball to delete themselves
  • and then RESETS the scripts, so all parameters are returned to default settings
  • clears the "prim parameter" memory, so newly rezzed objects will not have the prim parameters of the previous object
  • contrast with /1 DIE


/1 ROTX ##
  • changes the rotation of each panel, around its X-axis
  • if your panels are upside down, but facing outwards correctly, "/1 ROTX 180" might help
  • changing this might mess up the evenness of the hemline


/1 ROTY ##
  • changes the rotation of each panel, around its Y-axis
  • if your panels are upside down and inside out, "/1 ROTY 180" or "/1 ROTY 0" might help
  • changing this might mess up the evenness of the hemline


/1 ROTZ ##
  • changes the rotation of each panel, around its Z-axis
  • if your panels are outside facing in, "/1 ROTZ 180" might help


/1 TOUCH
  • this simulates a "touch" on the central Little Metal Ball, to either start rezzing panels, or receive status information
  • here, because I'm too lazy to click the ball


/1 WIDTH ##
  • changes the side-to-side WIDTH of the skirt to ## meters
  • contrast to /1 DEPTH

LoopRez Deluxe Commercial Edition, creator configuration

LoopRez Deluxe Commercial Edition has the same functionality and features of the Personal Edition except:
  1. created skirts are TRANSFER, as well as MOD / COPY, so you can sell your creations
  2. with configuration, the CREATOR of the skirt can be changed to yourself
This document describes the somewhat annoying procedure of getting LoopRez Deluxe Commercial Edition configured such that you are listed as the creator. (Don't try this with the Personal Edition -- it will break the script.)

Note: even after being properly configured, skirts that are "In progress" (i.e., before the "/1 DONE" command is sent), will still list Ged Larsen as the creator. This is because the little metal ball that is the root prim during skirt generation is owned by me.

However, after the "/1 DONE" command is sent, the root prim will be swapped over to a little metal ball look-alike, and so the final linked product will list YOU as the creator.


How to re-configure LoopRez Deluxe creator information
  1. Make a backup of your LoopRez Deluxe Commercial Edition package
    • just in case anything goes wrong, you can always start again

  2. Rez a copy of your LoopRez Deluxe object

  3. Delete "Object" out of the inventory of the little metal ball of LoopRez Deluxe
    • i.e., right-click the little metal ball; then select the Contents tab; then right-click "Object" inside the Contents tab and select delete
    • "Object" is the source of each skirt panel; its Creator becomes the creator of the skirt. Your goal in the following steps is to replace the "Object" I created with one that YOU create, so you'll be the new Creator. The annoying part is getting the required script inside it, too.

  4. Create a prim from scratch. Don't change its name, just leave it "Object"
    • i.e., click the Create button (or press CTRL-3), select a prim type, and rez it
    • create it yourself, because this prim will determine the "Creator" of your future skirts
    • you can use just a plain block, OR, you can shape, color, and texture it / set commonly used flexi settings. These settings will be the default initial settings of each panel of skirts that you generate in the future

  5. Drag the MorphTarget script into the contents of your "Object"
    • i.e., click on your new Object and select the Contents tab. Then, drag the MorphTarget script into the Contents

  6. Right-click and "TAKE" your "Object" (now containing the MorphTarget script) back into your inventory

  7. Drag your "Object" (containing the MorphTarget script) from your inventory, INTO the contents of the little metal ball

  8. Select both the pose stand and the little metal ball, and "TAKE" it into your inventory
    • have the edit menu open (CTRL-3), and then LEFT-mouse-click and DRAG a box surrounding the 2 items (thereby selecting them both), and then RIGHT-click one of the items to bring up the pie menu to "TAKE" both items at the same time, into inventory
    • this is your new, customized LoopRez Deluxe, which will generate skirts with YOU as the creator
    • I'd suggest moving the modified generator into a clearly named new folder
    • if you obtained your LoopRez Deluxe after 5-Feb-2007, you might be able to rename the modified LoopRez Deluxe generator (I fixed permissions on 1 recalcitrant object); I need to test this. If it works, it will be included in the next update
    • make a backup copy of it too, so you ever mess up in the future, you won't have to go through these steps again
I told you the steps were annoying, sorry. But, if it all worked, you won't have to do it ever again.