Jump to content

Void Singer

Resident
  • Posts

    7,967
  • Joined

  • Last visited

Everything posted by Void Singer

  1. the native format of floats strips leading zeros, until it gets to the first set bit which it then peels off and assumes it's there, and the number of binary places is encoded as a small bit field. at 4 characters it's possible to duplicate. but there may be a small problem with your plans... the description field is limited by bytes, not characters.... and not all the characters in that series are 1 byte (optimally they could be, but that would mean using the ascii set, and not all of those will print to the description) kaluura's code is more in that direction, and should have the room to encode the shifts for sub-normal numbers (below 1) for perfect conversion of printed values (although you may still end up with 0.0 != 0.0). alternatively, if you throw in a cast to and from string, your values will always match up
  2. my advice... find better places to hang out. Most people could care less about your height or clothes, and you seem wandered into a nest of nutters.
  3. indents.... should happen with every open brace, and every close brace should see an un-indent, in pretty much every style. the two most popular bracint styles are 1TBS and Allmans 1TBS: default{ //-- open brace on the same line as the control structure state_entry(){ //-- always another indent level after each brace } //-- closing brace drops back an indent level to the level of it's control structure} //-- you know you've done it right when you close at no indent, every open must have a close Benefit: less scrolling, lines always end with a brace or a semicolon (or a line continuation character for banner lines) Allmans: default{ //-- open brace on separate new line after the control structure state_entry() { //-- always another indent level after each brace } //-- closing brace at the same indent level of it's control structure} //-- you know you've done it right when you close at no indent, every open must have a close Benefit: more separation of block code makes it quicker to identify and braces are quick to match (unlesss the code scrolls too far)
  4. Fillo Farber wrote: The weird thing is that when I added a comparison of the input vs output variables it reports that they are different although they seem to be identical. i.e. it is telling me that 0.000010 does not equal 0.000010 this is because of how floats are stored... all those leading zeros are ignored, so you can get fractional parts when using straight multiplication to raise the value. which is what you saw in the original 31/32 comparison using mine, and what you are seeing in the comparison values in your recent test... test display truncates the trailing digits past 7 places, so you don't see that they don't match. a pure float union integer and then a conversion to base 256 would perfectly encode a float of any size and perfectly decode it in 4 charaters, but the code is a bit bulky in lsl... in other most languages it's built in because they directly convert the bits from one type to the other. please note that for storage purposes, any string representation in LSL of a float or integer is actually going to take more memory than the actual numerical value... in fact, even for most transport purposes.
  5. welcome to hierarchical problem solving 101, AKA the squeaky wheel gets the grease =D
  6. Freya Mokusei wrote: Void Singer wrote: the best way to combat drama is not to get involved in it, not jump to conclusions, and drop people like hot rocks that do those things. I hate to pounce on this, since I'm aware of the wonderful work you do, but I do take exception to this statement. It's nothing personal, but I've seen this view expressed elsewhere and it's invalid. Saying "get better friends" doesn't help anyone when the functionality is being pushed into peoples' view by the viewer. The viewer is a part of of SL culture (boob-physics, media privacy, Emeraldgate), and people use it to determine what is 'socially acceptable'. People will use these features regardless of how drama-avoidant people would be otherwise. It's hard not to take the phrase 'X isn't friends with you anymore.' personally. It's hard not to ask someone WHY they think they need to hide their online status from you. Sure, people can use hacks and tricks to find out these things using standard LSL. People could make a list of their friends and check against it to see who's been deleting them. But how many people do that routinely? Feel free to post in contradiction if you do. The difference is that by putting the features in the viewer, you encourage people to use them as standard (case in point, Show LookAt, since being publicised by Emerald, is now a feature many people use daily). Before Emerald included the features mentioned in this survey, I'd never ONCE* heard someone complain about a hidden status or removed friendship, now it seems people complain every other day. People need a viewer that ENCOURAGES cohesion within the community, rather than one that draws your attention to negative events. * I'm sure they happened, but in much smaller numbers that never made it to my ears. no offense taken at all.... and I do agree that choice of wording on that message is a little unfortunate... not entirely their fault, it should never have been called a "friends" list to begin with IMO... it's a "contact" list... not everyone in mine for sure is a friend, I have business associates, clients, colleagues, friends, etc in there. the difference in having a notice and not to me is minimal, since you can see by looking that they've removed you from their list (because they will also be removed from yours). But I've had more than one person either accidentally remove me, or thought I was no longer active and done so, and it gives me a chance and an opportunity to renew that connection immediately if I didn't notice it otherwise, or at least to realize that I haven't made contact with that person recently and remind me to do better. could I do it manually? yes, and I did before I had access to that feature, it was either tedious or error prone process. I routinely hide my online status in the viewer, it's my versions of a do not distrub sign, because frankly busy mode is broken crap, and my inworld time is reserved for Me (ok and my clients when I'm working) and being well enough known that I can get a lot of random traffic. but I also realize it's easy enough to look me up if it's necessary, and there are a small core of people that I don't hide my status from that are welcome to contact me at any time. I take it as a simple replacement for busy mode, that if a person is otherwise engaged they'll respond when they're available. I rarely use the online indictors myself, but they are extremely useful in knowing when is the best time to send items to people... for instance to avoid IM caps or busy mode discards, but also to know when people are dropping into my region and popping righ back out, to see if they crashed (in which case I can offer help) or perhaps dropping griefer bombs, or stealth vendors (in which case I can quickly remove them). if they weren't in the viewer I'd be wasting resources to use simple scripts to track exactly the same behavior. and I do agree it's not enough to "get better friends", you also have to *BE* a better friend yourself, which can be hard... the fundamental attribution error rears it's ugly head there, we all assume that when people do things that have a negative impact on us that it's for negative reasons, but when we do the same things, we often have a positive or neutral reason for doing it... so when it happens it's best to try to imagine a reason why we might do it with good intentions, and then with that in mind, ask.... it probably wouldn't hurt if more people did that on forums too... and not to suggest that I'm better, because I fail at it too sometimes
  7. stories eh... I'll give you a great one... once upon a time there was a product that was well loved by it's users, but it's creators thought it was too difficult and too different for people to be able to get used to it. The product makers had some great ideas for adding new features, but they also got a bit too caught up in marketing hype, and they drastically changed how the product looked and how people operated it. in this process they completely abandoned fixing the previous version, but even though they had spent a lot of time working on the new one, it still had all the old problems and plenty of new ones too. still they rushed forth and made it the standard. the only problem is that they now had all the old problems to fix, and several new ones, plus they were trying to introduce even more new features, which not only took time away from fixing the current problems, but also introduced new ones. many users abandoned the new product for more stable products by other creators, creating a large rift in use and adoption. ok, so you've heard this story before. but there is a moral to it... when upgrading your product incrementally, you must always be sure to stabilize new features as you go, and account for all use cases. (and I sorely hope someone at LL reads this little tale because frankly, they could use the lesson, not that they are the only ones guilty of it)
  8. heh, well uninstalling quicktime was why you lost music... it must be installed (or a replacement program) for music to work in the viewer. after reinstalling it you probably needed to restart before it behaved again. yes, ctrl + alt+ D is is the advanved menu (the D stands for Debug, which was the original name for the menu once upon a time)... I'm pretty sure there's no shift in there, but my memory is fuzzy
  9. because I was tired and forgot that multiprim objects index from 1 and not 0 =X as for why that instead of llAvatarOnSitTarget.... for just the reason stated... it may not be the sit target that the owner sits on, or it may be one on a different prim (the whole set gets the changed event though) for detecting when a particular av gets up, aside from testing llAvatarOnSitTarget in the specific prim, the only way to know for sure is to loop through an test all the links above the actual prims in the set (which you can get from llGetObjectPrimCount), although there's a small shortcut in that if you text the last link, and it hasn't changed, then a previously seated av got up, or the last got up if it did change (assuming the llNumberOfPrims went down) obviously sit target is easier, but requires a script in that prim, which can be troublesome
  10. you should be able to get away with tacking each thread op message id onto the url... i don't think there is an automated way to do it built into the board http://community.secondlife.com/secondlife/rss/message?board.id=GeneralDiscussionForum&message.id=####&message.id=####
  11. click on the arrow, then turn your sound back on ctrl+alt+d in your profile, edit profile, there will be a box with your display name in it... edit it
  12. just tested by copy paste, your original results (the 9.x range) are showing a different string than the copied function... the lower inputs, are showing truncation errors, that llCeil seems to fix at first blush. if we could bit hack floats directly it'd be a lot easier (instead of going through some madness like strife's FUI-IUF functions) try this instead... string gStr256 = "0123456789abcdefghijklmnopqrstuvwxyz!\"#$%&'()*+™-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`{|}~¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅ";string uFlt2Str256( float vFltNum ){ integer vIntTmp; return llGetSubString( gStr256, vIntTmp = (integer)(vFltNum * 16), vIntTmp ) + llGetSubString( gStr256, vIntTmp = (integer)(vFltNum * 4096) & 255, vIntTmp ) + llGetSubString( gStr256, vIntTmp = llCeil(vFltNum * 1048576) & 255, vIntTmp );}float u256Str2Flt( string vStrFlt ){ return ((llSubStringIndex( gStr256, llGetSubString( vStrFlt, 0, 0 )) << 16) + (llSubStringIndex( gStr256, llGetSubString( vStrFlt, 1, 1 )) << 8) + (llSubStringIndex( gStr256, llGetSubString( vStrFlt, 2, 2 )))) / 1048576.0;} ETA: that doesn't actually match the full precision (7.3) of a float of that range, but the tail was always iffy... if it fails or needs perfect precision then it'll need to be 4 characters, and multiply/shift the ranges another 256/8bits so that the tail gets properly converted.
  13. never... you don't bug the lindens, the lindens don't bug the lithium devs, the lithium devs forget or back shelf it because no ones beating down their door about.
  14. new features are fine, but heavens help you when you change how users access those features.... if you must change how they access them, addition is better than subtraction, and if the methods change, then offering a way to use legacy methods is preferred. that applies to upgrading existing owned content... content that is for sale... have at it, and see if it survives through the next market cycle
  15. I believe that was done so that for people whom it is tomorrow, they can still see "todays" transactions.
  16. the "privacy invasions" are also useful tools for knowing when it's safe to send certain types of inventory to avatars,and can serve other positive purposes as well for merchants and venue owners. And they can also be done easily by script... and by easy I mean like 3 lines or less for complete noobs. the best way to combat drama is not to get involved in it, not jump to conclusions, and drop people like hot rocks that do those things.
  17. changed( integer vBitChg ){ if (CHANGED_LINK & vBitChg){  if (llGetOwner() == llGetLinkKey( ~-llGetNumberOfPrims( ) )){ //-- disable the script in some way } }}
  18. I overshot on the second function, corrected above (I think)
  19. maybe not in the public ones, but the private ones, especially those that are receiving the non-profit discount can and will often ban you.... because it can cost them. it's the top thing I ban for (after griefing) in the one I help manage. (yes I'm nice and usually return stuff if it's apparent it came from the store with dumb permissions, but people that set up scam vendors, stolen crap, and BIB vendors in public areas get no pity from me)
  20. I'm waiting for some of the bug fixes and features present in newer versions of both Phoenix and V2, but my intention is to probably upgrade to FS when it stabilizes.
  21. what wrong with l = llListReplaceList( l, [value], index, index ); ??
  22. it isn't pretty but this should work for ranges 0.0-15.99999 string gStr256 = "0123456789abcdefghijklmnopqrstuvwxyz!\"#$%&'()*+™-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`{|}~¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅ";string uFlt2Str256( float vFltNum ){ integer vIntTmp; return llGetSubString( gStr256, vIntTmp = (integer)(vFltNum * 16), vIntTmp ) + llGetSubString( gStr256, vIntTmp = (integer)(vFltNum * 4096) & 255, vIntTmp ) + llGetSubString( gStr256, vIntTmp = (integer)(vFltNum * 1048576) & 255, vIntTmp );}float u256Str2Flt( string vStrFlt ){ return ((llSubStringIndex( gStr256, llGetSubString( vStrFlt, 0, 0 )) << 16) + (llSubStringIndex( gStr256, llGetSubString( vStrFlt, 1, 1 )) << 8) + (llSubStringIndex( gStr256, llGetSubString( vStrFlt, 2, 2 )))) / 1048576.0;}
  23. see, see! lol and yes it can be a great gimmick for some characters, but if it's all you have to work with your range gets hurt, and you can't express the character without taking away from it... leaving a little to imagination can be very effective for overcoming that. it's not always the big reasons, lots of little reasons make a difference too.
×
×
  • Create New...