Difference between revisions of "User talk:Void Singer"

From Second Life Wiki
Jump to navigation Jump to search
m (→‎0x80000000 X_X: recalculated)
Line 31: Line 31:
:{{message}}well I'm glad I could give you something fun to play with, though I am sorry it interfered with your RL schedule (such is the nature of our passions eh?) still haven't had a chance to poke at it... I'm barely fitting forum posts in between RL concerns =/ stupid RL, always demanding I do things like work and eat and sleep... meh <br/>-- '''[[User:Void_Singer|Void]]''' <sup><small>([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])</small></sup> 16:47, 21 January 2010 (UTC)
:{{message}}well I'm glad I could give you something fun to play with, though I am sorry it interfered with your RL schedule (such is the nature of our passions eh?) still haven't had a chance to poke at it... I'm barely fitting forum posts in between RL concerns =/ stupid RL, always demanding I do things like work and eat and sleep... meh <br/>-- '''[[User:Void_Singer|Void]]''' <sup><small>([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])</small></sup> 16:47, 21 January 2010 (UTC)


:{{message}}'''Update:''' looking at it, the month calc doesn't look rights, as it would include the current month and llooks to be off by a day for some months... after fiddling with it, I came up with this, roughly... <lsl>//rtn =  
:{{message}}'''Update:''' looking at it, the month calc doesn't look right, as it would include the current month and looks to be off by a day for some months... after fiddling with it, I came up with this... <lsl>//rtn =  
86400 *
86400 *
( //-- years YY-=1902
(//y -= 1902
(vIntYear >> 2) * 1461 + //-- years days, since 1902 start
(int)(y*365.25 + 0.25) - 24837 + // (y>>2)*1461 + (int)((y&3)*365.375) - 24837 +
(integer)((vIntYear & 3) * 365.375) + //-- (>1/3), (<1/2) --> leap day inclusion, when YY==3
//m -= 1
//-- MM-=1 ie months as 0 indexed
m*30 +(m-(m<7)>>1) + (m<2) - ((y&3)>0)*(m>1) +
(vIntMnth * 30 + //-- previous months' days
  //d -= 1
(vIntMnth - (2 | (vIntMnth < 7) >> 1) + //-- mar-nov correction
d) +
(vIntMnth < 2) * (-~!vIntMnth) + //-- whoops I did all february's as leap years
h +
//--DD
m +
(~-llList2Integer( vLstStp, 2 )) //-- days as zero indexed
s</lsl> check me on that but I think that's right for the symmetry capped version. shouldn't flow unless it's fed bad m/d/h/n/s, which I could force cap with llAbs(x%#) to prevent, so that even purposely malformed dates would fall in the +/-2145916800 range.
) +
llList2Integer( vLstStp, 3 ) * 3600 + //-- hrs are naturally 0 indexed
llList2Integer( vLstStp, 4 ) * 60 + //-- min are naturally 0 indexed
llList2Integer( vLstStp, 5 ) + //-- sec are naturally 0 indexed
-2145916800 //-- base starting point for the beginning of 1902</lsl> still needs the jan-feb part fixed, was trying for a tight solution... a littl of the math may need reordored to accomodate the multiply by 86400 operation, and year should be prechecked for range..

Revision as of 19:54, 22 January 2010

Comments:

Question2.JPG Comment Format

=== Topic === <-- this line is optional
{{message}} this is my comment
~~~~ <-- will be replaced by User Name + Time Stamp automatically

Question2.JPG welcome all to my User Talk page. Feel Free to leave a message below, and thanks for stopping by! --Void Singer 05:54, 20 November 2007 (PST)

Re: Formatting [topic added by Void due to page reordering]

Question2.JPGIt looks well thought out. I'm pretty laid back about style as long as it's consistent. The only thing I put my foot down on is tabs being 4 spaces. All a matter of preference thou. I find prefixing variables with anything other then a letter to indicate type is overkill. I write my LSL as ESL (which is LSL passed through a C precompiler) and I reserve all uppercase lettered names for ESL macro's and defines. -- Strife Onizuka 03:09, 3 November 2007 (PDT)

Question2.JPGAmazing. I've been programming for 25 years and have developed a style that chooses the opposite of most of Void's rules. Why is it that these questions lead to such equally satisfactory results in competent programming organizations that are so different. I suppose that it's similar to the reason that Spanish isn't the same as French.

I'll go Strife one further, though, and put my particular foot down about the insane (to me) verbosity of prefixing variables, function names, etc. with garbage characters that serve no useful purpose I can see, and is constantly bonking the reader who has to read through several largely irrelevant or self-evident characters to get to the important part - what the variable is. It's like getting tapped on the side of the head with a pencil every time I trip over one of the darn things. Is this another sad legacy of Microsoft? I'd never seen such a thing before I had to start writing Windows code. And I'll note, I work in RL in an environment where we have several hundred thousand lines of legacy code I have to refer to regularly, (and a couple of legacy programmers) that use "Hungarian" notation like this, and after 10 years of reading it I STILL get tapped every time I see one.

I do have one possibly pertinent point, though. I had been ambivalent about where the brace at the opening of a block goes for a couple years, having programmed in environments for most of my time where they were to be on a (wasteful) line of their own. After spending some time in Java, where the convention tends to be 'on the same line' I was still uncertain I had an opinion, except that I really don't like the effect that mixing the styles has. (That happens with templates, copy/paste, etc.) However, a few weeks ago when working on some poor code (mine) that was too long and nested too deeply I spent quite a while tracking down a missing opening brace. I realized that had it been on its own line I'd have seen it almost immediately. Given modern monitor resolutions and sizes, I don't think the vertical height saved is worth the obviousness that it exists.

So there, finally the definitive answer to the "same line or different line" question.

Ah, the style wars, long shall they rage.

In the end, as both you and Strife observe, it is all personal preference as modified by the need to be consistent with those you work with. Thanks, much, for taking the time to write it down. I should do it too if I care so much I guess. --RJ Thibaud 12:25, 23 December 2007 (PST)

RE: style etc

Question2.JPG heh, thanks for reading it at least, I'm not fanatical about it, each person develops their own style, and to be honest I only adapted the style I normally use for lsl, from my other coding projects, so it's prone to updates (a few of which I've yet to add in). The particular style I use is geared towards maximum understanding of the code for those new to scripting/programming so they can more easily find their way through code. But as noted, for an experienced coder it can be a bit like 'duh I know that'. Coming from an enviroment with lots of new coders though, I tend to keep it up for their benefit more than my own. The opening brace debate is long running with me, and I do realize the pro's and cons, but have gotten myself in the habit of expecting open braces on the same line, and visually reading the statement (if, do, etc) and the indent as opening the statement and even briefly played with inlining the closing statement (but found it interfered with the visual nesting effect sometimes).

I mostly provided the example style as something to explain, rather than recommend, because I was bored enough to write it one day, and had been asked a few times about it. I have found that prefixing of some kind tends to avoid collisions with developing languages like lsl, as I noticed happened once or twice when people named constants or variables that later became LSL constants, and I've discouraged a few people from using llFunctionName for that and other reasons (like people that see the call and try to use it elsewhere). I'ts all good though, whatever gets the job done and works as expected. Void Singer 13:35, 25 December 2007 (PST)

0x80000000 X_X

Yep I forgot about 0x80000000. The limit however accepts 2038 and then overflows. So I wrote a version that detects overflows and accepts the entire integer range. It should be noted that if you get clever on it, and give it a year before 1970 but have the final date fall in or after 1970 it will have a fit. Likewise for years after 1969 but the final dates fall before 1970. Could turn off the overflow detection for centrally located years but that's more work. But it will parse [2100,12,13,23,59, -2147483648] and [1845, 1, 1, 0, 0, 2147483647] properly... i think. =^_^= -- Strife (talk|contribs) 06:28, 20 January 2010 (UTC)

Question2.JPG I'll take a look in a bit, and I do like the integer division and bit shift solution in the unix2stamp, much cleaner... in the other, subtracting out 68 less to make the entire range positive... I like that part, shouldve done it from the start (it was converted from a quickie 1970+ version that I think argent did) although I had capped the dates to provide symmetry with the opposite function (since it's much easier to cap that one on a particular day, and 19 days on the edge seemed a small loss, vs detecting up to the last available second)... haven't checked the leap day / month detection in the loop replacement but I'll assume it's good until I double check. ps, I appreciate the fixes (always something to be learned) but can we separate out revisions that are more than corrections or order changes... it makes it harder to compare versions side by side (as the wiki only gives changed lines)... not complaining, I appreciate the feedback... PPS bad cabbit you didn't test to be sure? =)
-- Void (talk|contribs) 23:37, 20 January 2010 (UTC)
As I was reading the code, I was like "this code is so evil I think it is something I must have done in a past life". I really enjoy niggling away at code like this, reducing it to it's bare essentials. With that loop, once I saw that the sister function shared it, it made sense why you used it, symmetry. Yeah I agree with you about the comparisons being easier but it all sort of rolled out all at once; it didn't help that I pushed allot of the adjustment math through multiplications and divides. P.S. This version I posted I did check (in LSLEditor, with only minor mods, casting the bools to ints), I wanted to make sure I didn't screw up the math somewhere. P.S.S. I was considering replacing the (i * 30) with (i << 5) - (i << 1) cause it would be theoretically faster to execute but I didn't because it would probably take longer to setup the registers. P.S.S.S. I really enjoyed the coding (It's a great piece of code) but I forgot about everything else I was supposed to be doing yesterday; the secretary of my Physical Therapist was nonplussed that I hadn't called to cancel. *sigh* P.S^4 I was thinking I would work on the sister function, see if the loop can be eliminated altogether. Could do it with a list. A tree of if's would be better but more expensive. I think instead I'll trick out Float2Hex to use my super evil Int-Base64-Hex converter. -- Strife (talk|contribs) 03:47, 21 January 2010 (UTC)
Question2.JPGwell I'm glad I could give you something fun to play with, though I am sorry it interfered with your RL schedule (such is the nature of our passions eh?) still haven't had a chance to poke at it... I'm barely fitting forum posts in between RL concerns =/ stupid RL, always demanding I do things like work and eat and sleep... meh
-- Void (talk|contribs) 16:47, 21 January 2010 (UTC)
Question2.JPGUpdate: looking at it, the month calc doesn't look right, as it would include the current month and looks to be off by a day for some months... after fiddling with it, I came up with this... <lsl>//rtn =

86400 * (//y -= 1902

(int)(y*365.25 + 0.25) - 24837 + // (y>>2)*1461 + (int)((y&3)*365.375) - 24837 +
//m -= 1
m*30 +(m-(m<7)>>1) + (m<2) - ((y&3)>0)*(m>1) +
//d -= 1
d) +

h + m + s</lsl> check me on that but I think that's right for the symmetry capped version. shouldn't flow unless it's fed bad m/d/h/n/s, which I could force cap with llAbs(x%#) to prevent, so that even purposely malformed dates would fall in the +/-2145916800 range.