Celx error trace
-
Topic authorhharris
- Posts: 79
- Joined: 23.02.2006
- With us: 18 years 8 months
- Location: Pasadena, CA 91104
Celx error trace
I'm sure this must have come up before so I apologize in advance. I'm new to Celx programming (although I'm an experienced programmer in C, C++, Fortran, Pascal etc.) I have a very simple question:
Are there any built-in error trace functions that I can use? I'm writing a fairly complex program and simply observing when the program doesn't work isn't very productive, especially when flash or print comments may or may not reveal what has failed. I'm sure there must be a simple answer to this, I just haven't found it in the Celx or Lua online documentation yet. Any suggestions would be appreciated.
Cheers,
Henry
Are there any built-in error trace functions that I can use? I'm writing a fairly complex program and simply observing when the program doesn't work isn't very productive, especially when flash or print comments may or may not reveal what has failed. I'm sure there must be a simple answer to this, I just haven't found it in the Celx or Lua online documentation yet. Any suggestions would be appreciated.
Cheers,
Henry
# summary of Lua-support in Celestia
http://www.h-schmidt.net/celestia/
by Harald Schmidt
# Documentation for the Lua language
http://www.lua.org/docs.html
http://lua-users.org/wiki/
# LUA IDE
http://www.gorlice.net.pl/~rybak/luaide/
If debugging support isn't described there, I don't know where it might be.
http://www.h-schmidt.net/celestia/
by Harald Schmidt
# Documentation for the Lua language
http://www.lua.org/docs.html
http://lua-users.org/wiki/
# LUA IDE
http://www.gorlice.net.pl/~rybak/luaide/
If debugging support isn't described there, I don't know where it might be.
Selden
-
Topic authorhharris
- Posts: 79
- Joined: 23.02.2006
- With us: 18 years 8 months
- Location: Pasadena, CA 91104
I've gone through every document I could find including those. Perhaps my problem is that I've been using compiled languages for the last 30 years and I just don't understand the methodology of programming interpreters. Let me rephrase:
My current way of programming in Celx is to do it icrementally and notice when the program fails. A failure usually either means that my syntax is wrong or (and this is the hard part) I'm asking Celx to do something it was not designed to do. Compared to a compiler this is very time consuming.
For example I'm currently trying to figure out to access moons of a planet . I know that this information is contained in a table, but when I access the table with an index the program simply exits (I think). I'm thinking that the moon tables are keyed by something else besides an index. (??)
My current way of programming in Celx is to do it icrementally and notice when the program fails. A failure usually either means that my syntax is wrong or (and this is the hard part) I'm asking Celx to do something it was not designed to do. Compared to a compiler this is very time consuming.
For example I'm currently trying to figure out to access moons of a planet . I know that this information is contained in a table, but when I access the table with an index the program simply exits (I think). I'm thinking that the moon tables are keyed by something else besides an index. (??)
-
Topic authorhharris
- Posts: 79
- Joined: 23.02.2006
- With us: 18 years 8 months
- Location: Pasadena, CA 91104
There are IDE's for creating scripts? I use an IDE for compiling Xcode but it never occured to me there an IDE for creatng an interpretive script.
Actually, I've solved all of problems except one and I'd be most appreciative if someone could give me a clue.
The lua manual leads me to believe that if I make the statement:
gSolMoonsAtmTable = { Titan = "N2/Ar/CH4", Moon = "rocky", Europa = "icey", Io = "ice/volcanic", Callisto = "icey" }
I can make the statement
gSolMoonsAtmTable["Titan"] and get "N2/Ar/CH4"
But it doesn't work. (???)
Henry
Actually, I've solved all of problems except one and I'd be most appreciative if someone could give me a clue.
The lua manual leads me to believe that if I make the statement:
gSolMoonsAtmTable = { Titan = "N2/Ar/CH4", Moon = "rocky", Europa = "icey", Io = "ice/volcanic", Callisto = "icey" }
I can make the statement
gSolMoonsAtmTable["Titan"] and get "N2/Ar/CH4"
But it doesn't work. (???)
Henry
hharris wrote:There are IDE's for creating scripts? I use an IDE for compiling Xcode but it never occured to me there an IDE for creatng an interpretive script.
Actually, I've solved all of problems except one and I'd be most appreciative if someone could give me a clue.
The lua manual leads me to believe that if I make the statement:
gSolMoonsAtmTable = { Titan = "N2/Ar/CH4", Moon = "rocky", Europa = "icey", Io = "ice/volcanic", Callisto = "icey" }
I can make the statement
gSolMoonsAtmTable["Titan"] and get "N2/Ar/CH4"
But it doesn't work. (???)
Henry :?
It works for me.
Code: Select all
gSolMoonsAtmTable = { Titan = "N2/Ar/CH4", Moon = "rocky", Europa = "icey", Io = "ice/volcanic", Callisto = "icey" }
msg = gSolMoonsAtmTable["Titan"]
celestia:flash(msg,2)
wait(2)
-
Topic authorhharris
- Posts: 79
- Joined: 23.02.2006
- With us: 18 years 8 months
- Location: Pasadena, CA 91104
Thanks Hank (I like your name BTW)!
Chalk this down to confusion from a newbie. I've only been using celx/lua for a few days and there's a lot to learn for someone who's last interpretive language was BASIC, right after it was invented in the sixties by a couple of guys from Dartmouth.
The way Celx/lua handles arrays is my favorite feature. Since the kind of programs I usually write require associative arrays anyway, having it built-in saves me a lot of time.
Cheers,
Henry
Chalk this down to confusion from a newbie. I've only been using celx/lua for a few days and there's a lot to learn for someone who's last interpretive language was BASIC, right after it was invented in the sixties by a couple of guys from Dartmouth.
The way Celx/lua handles arrays is my favorite feature. Since the kind of programs I usually write require associative arrays anyway, having it built-in saves me a lot of time.
Cheers,
Henry
-
Topic authorhharris
- Posts: 79
- Joined: 23.02.2006
- With us: 18 years 8 months
- Location: Pasadena, CA 91104
Not so fast....
After a little expermentation I found that my problem with arrays turned out to be something different than I thought. The problem turned out to be in the expression
if(atmstr = gSolPlanetsAtmTable [ "Titan" ]) then
(more code)
else
atmstr = "rocky"
end
which will cause the program to refuse to run but the following will interpret just fine. Apparently the first expression is not part of the celx/lua lexicon.
if(gSolPlanetsAtmTable [ "Titan" ]) then
atmstr = gSolPlanetsAtmTable [ "Titan" ]
(more code)
else
atmstr = "rocky"
end
Henry
if(atmstr = gSolPlanetsAtmTable [ "Titan" ]) then
(more code)
else
atmstr = "rocky"
end
which will cause the program to refuse to run but the following will interpret just fine. Apparently the first expression is not part of the celx/lua lexicon.
if(gSolPlanetsAtmTable [ "Titan" ]) then
atmstr = gSolPlanetsAtmTable [ "Titan" ]
(more code)
else
atmstr = "rocky"
end
Henry
Re: Not so fast....
hharris wrote:After a little expermentation I found that my problem with arrays turned out to be something different than I thought. The problem turned out to be in the expression
if(atmstr = gSolPlanetsAtmTable [ "Titan" ]) then
(more code)
else
atmstr = "rocky"
end
which will cause the program to refuse to run but the following will interpret just fine. Apparently the first expression is not part of the celx/lua lexicon.
if(gSolPlanetsAtmTable [ "Titan" ]) then
atmstr = gSolPlanetsAtmTable [ "Titan" ]
(more code)
else
atmstr = "rocky"
end
Henry
:roll:
In Lua (unlike C) an assignment is not an expression, so it can't be used as the condition in an if statement. But you could write:
Code: Select all
atmstr = gSolPlanetsAtmTable [ "Titan" ]
if (atmstr) then
(more code)
else
atmstr = "rocky"
end
-Hank
hharris wrote:Hank,
That works fine with an "if" but how would you handle it with an "elseif"? In a complicated expression with many elseifs, would I have to precalculate every possible parameter just in case I needed it? Perhaps there is a better way to handle this situation in celx?
Henry
I don't understand what you're trying to do. Can you give an example?
- Hank
-
Topic authorhharris
- Posts: 79
- Joined: 23.02.2006
- With us: 18 years 8 months
- Location: Pasadena, CA 91104
Hi!
Well, consider the snippet below. Note that I called the function "PlanetClass" twice. True, I could avoid doing this by substituting an "else" for "elseif" but it demands a lot of messy extra logic beyond what C++ code would need?€”unless you have an easier way. (I'll probably end up winding adding the extra logic because that's probably faster than calling the function twice.)
Anyway, the good news is I've about finished my program. I can now smoothly explore the Celestia universe with simulated sensors that detect what is around me as I explore "out there". I came down with the flu a week ago and since I couldn't go anywhere, I decided to spend the time learning a new language and creating an exploration script for Celestia. I'm just about well now so it worked out pretty good.
Thanks! Let me know if you have a better way.
Henry
if( objtable) then
atm = objtable.atmosphereHeight
if(atm) then
if(atm > 0) then
atmstr = "atmos"
else
atmstr = "rocky"
end
else
atmstr = "rocky"
end
elseif (PlanetClass(radius, p_distance )) then
atmstr = PlanetClass( radius, p_distance )
else
atmstr = "rocky"
end
Well, consider the snippet below. Note that I called the function "PlanetClass" twice. True, I could avoid doing this by substituting an "else" for "elseif" but it demands a lot of messy extra logic beyond what C++ code would need?€”unless you have an easier way. (I'll probably end up winding adding the extra logic because that's probably faster than calling the function twice.)
Anyway, the good news is I've about finished my program. I can now smoothly explore the Celestia universe with simulated sensors that detect what is around me as I explore "out there". I came down with the flu a week ago and since I couldn't go anywhere, I decided to spend the time learning a new language and creating an exploration script for Celestia. I'm just about well now so it worked out pretty good.
Thanks! Let me know if you have a better way.
Henry
if( objtable) then
atm = objtable.atmosphereHeight
if(atm) then
if(atm > 0) then
atmstr = "atmos"
else
atmstr = "rocky"
end
else
atmstr = "rocky"
end
elseif (PlanetClass(radius, p_distance )) then
atmstr = PlanetClass( radius, p_distance )
else
atmstr = "rocky"
end
-
- Posts: 164
- Joined: 18.03.2004
- Age: 63
- With us: 20 years 8 months
- Location: Victoria, BC Canada
hharris wrote:if( objtable) then
atm = objtable.atmosphereHeight
if(atm) then
if(atm > 0) then
atmstr = "atmos"
else
atmstr = "rocky"
end
else
atmstr = "rocky"
end
elseif (PlanetClass(radius, p_distance )) then
atmstr = PlanetClass( radius, p_distance )
else
atmstr = "rocky"
end
This can be expressed as
Code: Select all
if (objtable) then
atmstr = ((objtable.atmosphereHeight > 0) and "atmos") or "rocky"
else
atmstr = (PlanetClass(radius, p_pdistance) or "rocky")
end
The conditional operators and & or offer a great "shortcut" ability in Lua.
Code: Select all
A and B
Code: Select all
A or B
This allows you to (almost) recreate the C conditional assignment
Code: Select all
x = A ? B : C
Code: Select all
x = (A and B) or C
You may want to check out this online book
Last edited by cpotting on 01.03.2006, 13:33, edited 1 time in total.
Clive Pottinger
Victoria, BC Canada
Victoria, BC Canada
-
- Posts: 164
- Joined: 18.03.2004
- Age: 63
- With us: 20 years 8 months
- Location: Victoria, BC Canada
selden wrote:My more traditional (i.e. ancient) programming training would expect that to produce a bitwise Logical result (individual bits set to 1 or 0) rather than a string assignment.
When I first saw it I thought it would operate on purely boolean results, so that A or "text" would give always give you true because "text" is non-zero and so always true.
Clive Pottinger
Victoria, BC Canada
Victoria, BC Canada
-
Topic authorhharris
- Posts: 79
- Joined: 23.02.2006
- With us: 18 years 8 months
- Location: Pasadena, CA 91104
Lua symbol logic is unexpected but very cool.
At first blush I was thinking that Lua was just another limited interpretive language like BASIC, but I can see now, besides being robust and fast, it has a lot of substance and subtly to it, a good choice for Celestia programming.
I want to thank everyone for their generous support on this forum. BTW, If anyone knows someone who is doing planet generation, I?€™d like to talk to them. I was doing something like that for NASA many years ago and Celestia has rekindled my interest in that subject.
Henry
At first blush I was thinking that Lua was just another limited interpretive language like BASIC, but I can see now, besides being robust and fast, it has a lot of substance and subtly to it, a good choice for Celestia programming.
I want to thank everyone for their generous support on this forum. BTW, If anyone knows someone who is doing planet generation, I?€™d like to talk to them. I was doing something like that for NASA many years ago and Celestia has rekindled my interest in that subject.
Henry
-
- Posts: 164
- Joined: 18.03.2004
- Age: 63
- With us: 20 years 8 months
- Location: Victoria, BC Canada
hharris wrote:LAt first blush I was thinking that Lua was just another limited interpretive language like BASIC, but I can see now, besides being robust and fast, it has a lot of substance and subtly to it, a good choice for Celestia programming.
My impression was that Lua was a very powerful scripting language, but limited as a programming language. Then I read Roberto Ierusalimschy's book and found out the many interesting things that you can get up to in Lua.
At the moment, I am in the process of creating libraries of routines and objects for CELX.
BTW: the Lua site has a list of applications using Lua. Celestia is conspicuously missing from that list.
Clive Pottinger
Victoria, BC Canada
Victoria, BC Canada
-
- Posts: 216
- Joined: 30.10.2005
- With us: 19 years
Hello hharris,
You asked for someone who is active in planet generation. That is me.
What do you want to do with planets? Here is my latest work on Mars 3D.
This picture shows 3 levels of resolution from left to right :
8 points per degree, 4, and 2 points per degree.
That is Valles Marineris. I am also in California, so we can have a phone call
to plan possible collaboration. See my website, linked below as w w w
You can describe your ideas here, or send me an email on the link below :
You asked for someone who is active in planet generation. That is me.
What do you want to do with planets? Here is my latest work on Mars 3D.
This picture shows 3 levels of resolution from left to right :
8 points per degree, 4, and 2 points per degree.
That is Valles Marineris. I am also in California, so we can have a phone call
to plan possible collaboration. See my website, linked below as w w w
You can describe your ideas here, or send me an email on the link below :
Your wish is my command line.
GM,
I suspect Henry meant the production of planetary types from first principles, as is done in Accrete. I don't think he meant creating 3D models.
For example, Jim Burns' program StarGen will generate planetary systems and can output their parameters in SSC format for use with Celestia. See
http://home.comcast.net/~brons/NerdCorn ... arGen.html
StarGen and the similar programs that I've found seem to be based primarily on relatively old theories of planetary formation, dating from the mid-'80s. I haven't seen anything that incorporates the most recent theories of gravitational collapse in protoplanetary nebulas, but I haven't been looking for them, either.
I suspect Henry meant the production of planetary types from first principles, as is done in Accrete. I don't think he meant creating 3D models.
For example, Jim Burns' program StarGen will generate planetary systems and can output their parameters in SSC format for use with Celestia. See
http://home.comcast.net/~brons/NerdCorn ... arGen.html
StarGen and the similar programs that I've found seem to be based primarily on relatively old theories of planetary formation, dating from the mid-'80s. I haven't seen anything that incorporates the most recent theories of gravitational collapse in protoplanetary nebulas, but I haven't been looking for them, either.
Selden
-
Topic authorhharris
- Posts: 79
- Joined: 23.02.2006
- With us: 18 years 8 months
- Location: Pasadena, CA 91104
What is Accrete?
On the subject of Celestia modeling and accuracy, I have a slightly different viewpoint (I think) from the mainstream. I'd be very interested in any disagreements or agreements with the following opinion.
The following argues that dynamic modeling is at least as important as real data in a universe where most objects are invisible.
Consider a cube 20 ly on a side, centered at Sol. From statistics of the nearby interstellar enviornment, we can guess there should be approximately 144 stars in this cube. The star database that came with Celestia has 40 stars. As you travel into adjacent cubes and beyond the number rapidly drops of to a few stars/cube, in some cases zero.
The reason for this is obvious. Most stars are dim red dwarfs. The statistical probablity of a star being in any cube is inversely proportional to its mass. But except for the nearby environment the stars are unlikely to show up on any database because they're so dim, and finally invisible as you go out.
So why is this important? For two reasons. One, it means that traveling in our simulated galaxy is completely unrealistic because most stars are not there. Most people don't notice because Celestia treats objects in the universe as only existing if you can see them?€”from Earth. However if you write a script to detect nearby objects, not just ones you can see, one starts to realize how unrealistic this situation is.
But I said there was a second reason. Recently we have detected a planet (using gravity lensing) around a red dwarf. Many scientists, including myself, have come to a startling conclusion from this data point. Planets around red dwarfs are probably very common, and since red dwarfs are much more prevalent than G type stars and have stable lifetimes hundreds of times that of a G type star, we should expect , statistically speaking, that most life comes from planets around these types of stars. One might expect this to be especially true of intelligent life. However we have to invoke Fermi's Paradox here. The lower mass of the protoplanetary nebula would suggest that, on average, gas giants would be rare and terrestrial planets would be smaller. This would seem to indicate that the average extrasolar intelligent life form would have a spindly body with an out-of-proportion head with very large eyes that evolved in the spectrum of a red dwarf. Also, since such a creature wouldn't need protection from the UV spectrum, its skin would not need pigment so it would probably be gray in color. Since red dwarfs are so common we would expect to be overun with creatures like these, but since we haven't seem them, we must invoke Fermi's Paradox and conclude we must be wrong.
Henry
On the subject of Celestia modeling and accuracy, I have a slightly different viewpoint (I think) from the mainstream. I'd be very interested in any disagreements or agreements with the following opinion.
The following argues that dynamic modeling is at least as important as real data in a universe where most objects are invisible.
Consider a cube 20 ly on a side, centered at Sol. From statistics of the nearby interstellar enviornment, we can guess there should be approximately 144 stars in this cube. The star database that came with Celestia has 40 stars. As you travel into adjacent cubes and beyond the number rapidly drops of to a few stars/cube, in some cases zero.
The reason for this is obvious. Most stars are dim red dwarfs. The statistical probablity of a star being in any cube is inversely proportional to its mass. But except for the nearby environment the stars are unlikely to show up on any database because they're so dim, and finally invisible as you go out.
So why is this important? For two reasons. One, it means that traveling in our simulated galaxy is completely unrealistic because most stars are not there. Most people don't notice because Celestia treats objects in the universe as only existing if you can see them?€”from Earth. However if you write a script to detect nearby objects, not just ones you can see, one starts to realize how unrealistic this situation is.
But I said there was a second reason. Recently we have detected a planet (using gravity lensing) around a red dwarf. Many scientists, including myself, have come to a startling conclusion from this data point. Planets around red dwarfs are probably very common, and since red dwarfs are much more prevalent than G type stars and have stable lifetimes hundreds of times that of a G type star, we should expect , statistically speaking, that most life comes from planets around these types of stars. One might expect this to be especially true of intelligent life. However we have to invoke Fermi's Paradox here. The lower mass of the protoplanetary nebula would suggest that, on average, gas giants would be rare and terrestrial planets would be smaller. This would seem to indicate that the average extrasolar intelligent life form would have a spindly body with an out-of-proportion head with very large eyes that evolved in the spectrum of a red dwarf. Also, since such a creature wouldn't need protection from the UV spectrum, its skin would not need pigment so it would probably be gray in color. Since red dwarfs are so common we would expect to be overun with creatures like these, but since we haven't seem them, we must invoke Fermi's Paradox and conclude we must be wrong.
Henry