World: r3wp
[Core] Discuss core issues
older newer | first last |
Rod 5-Dec-2007 [8909] | Any binary parse wizards ever tried to tackle the on disk file format that postgresql uses to store row data? I'm looking through the docs trying to get a handle on how tough it is. http://www.postgresql.org/docs/8.1/static/storage.html and http://www.postgresql.org/docs/8.1/static/storage-page-layout.html give a fairly detailed starting place, plus the source of course but my C is so rusty I think reviewing the raw data is going to be easier. We are trying to recover some data that was deleted (marked for) by accident. We basically need to find the serial key value and associate it with a text value for each row so we can rebuild the table and not lose the relationships that key off that serial numeric value in other tables. There are some good examples of binary parsing in the rebol.org script library so I know rebol can help write out a text version of the two values if we can get a handle on the structures involved. I'm open to suggestions or advice, this is not critical but would be a nice win to recover the key data. |
Oldes 6-Dec-2007 [8910x4] | I'm quite interested and I may give it a try... but I don't know when |
but I have only Postgresql 8.0 I'm not sure how much it's different | |
the header is same | |
here is a basic... http://box.lebeda.ws/~hmm/rebol/pgsql-db.rthis reads the postrge's file per pages... but I'm not sure what to do with the data inside and have to do something else now | |
Rod 6-Dec-2007 [8914] | Oldes, thanks for getting us started on the postgresql data parsing! Thanks, Rod. |
Henrik 14-Dec-2007 [8915x2] | is it possible to get the name of the script that was run with 'do? |
from inside that script, that is | |
BrianH 14-Dec-2007 [8917] | system/script/path gets the directory of the script, and you can put the name of the script in its header with the File field. |
Henrik 14-Dec-2007 [8918x2] | ah yes, but it doesn't work if you 'do other scripts inside that script. I guess I'll figure out some other method. |
the goal is only to be able to relaunch the script. | |
BrianH 14-Dec-2007 [8920] | If script %a calls script %b, b's system/script/path is set to its directory, and b's system/script/parent/path is set to a's directory. |
Henrik 14-Dec-2007 [8921] | perhaps a quick routine to find the root script? |
BrianH 14-Dec-2007 [8922x2] | If we set b's File field to %b in its header, we can get that value for relaunching or whatever. |
x: system/script while [x: x/parent] [root-dir: x/path] | |
Henrik 14-Dec-2007 [8924x2] | does that work? x/parent keeps being an object here. |
perhaps also ask if x = x/parent | |
BrianH 14-Dec-2007 [8926x2] | The top parent is none. |
x will never equal a/parent. | |
Henrik 14-Dec-2007 [8928] | oh, I didn't get that before, but I do now. odd. |
BrianH 14-Dec-2007 [8929] | a/ -> x/ |
Henrik 15-Dec-2007 [8930x2] | I see the problem now. Or at least a problem: If you 'do the same script multiple times in the console, the system/script object depth increases. |
another note: parent equals none the same time as the script header does, so to properly check whether you really don't have a parent, if you want to see the header, you should check parent/header, not just parent. | |
BrianH 15-Dec-2007 [8932] | No, the script object depth only increases if the script depth increases. When a script ends, system/script is set to system/script/parent. |
Henrik 15-Dec-2007 [8933] | ok, now I'm wondering why the script depth would increase. |
BrianH 15-Dec-2007 [8934x2] | Is the script calling itself, or does it return and have an outer trampoline script call it again? |
Or is the script creating some functiona and objects and returning so the caller can use them, then being reloaded by the caller to do this all over again? I wrote a server application in 2000 that acted that way, with scripts migrating the data from the previous incarnation still in memory. | |
Henrik 15-Dec-2007 [8936] | the script calls 4 other scripts once. one of these contains an object that must know the name of the launched script. that's basically all. |
BrianH 15-Dec-2007 [8937] | Does the object need to know the name of its own script, the calling script, or the script that is calling the code in the object? |
Henrik 15-Dec-2007 [8938] | it needs to know the name of the launched script. there can be any number of levels down to the script that was used to launch the script containing the object. but I have solved the problem now. I was just wondering why the script object depth increased on each run of the main script. |
Graham 27-Dec-2007 [8939x5] | Any maths guys here? |
I need to map a pair from one coordinate system to another. | |
So, I have two pairs initially, specifying a top left and bottom right. eg. 4x26 => 38x729, and 234x355 => 600x62 So, I need a function that works like this remap 4x26 38x729 234x355 600x62 n1xn2 => n3xn4 that is, it takes the 2 sets of pairs as argument, and a new pair, and returns the value of the new pair mapped to the new coordinates. | |
I guess it's just linear algebra | |
What I am doing is taking two sets of pairs on a PNG image, and trying to map to the EPS image as postscript coordinates. | |
Gregg 27-Dec-2007 [8944] | Probably not something as simple as this, though, eh? remap: func [a-ul a-br b-ul b-br pt] [ res-x: pt/x / (a-br/x - a-ul/x) * (b-br/x - b-ul/x) + b-ul/x res-y: pt/y / (a-br/y - a-ul/y) * (b-br/y - b-ul/y) + b-ul/y as-pair res-x res-y ] (untested) |
Graham 27-Dec-2007 [8945x3] | looks close , but not right though as if i feed it one of the first two pairs, it should display one of the second pairs |
>> remap 4x26 38x729 234x355 600x62 4x26 == 277x344 but that should be 234x355 | |
>> remap 4x26 38x729 234x355 600x62 38x729 == 643x51 and it should be 38x729 | |
Gregg 27-Dec-2007 [8948] | Ah, I thought you would feed it 0x0 to get, e.g., the UL corner. |
Graham 27-Dec-2007 [8949] | I mean 600x62 |
Gregg 27-Dec-2007 [8950] | So the point is the coord in the first rect and returns the "equivalent" point in the second rect. |
Graham 27-Dec-2007 [8951x3] | yes |
but the second rectangle uses a different coordinate system. | |
ie. in the first, 0x0 is top left as in vid, but in the second, 0x0 is bottom left as in postscript | |
Gregg 27-Dec-2007 [8954] | Ahhhhh. I see now. |
Graham 27-Dec-2007 [8955x2] | but I can't use 0x0 as the image is offset from there in both instances |
so, I'm using the actual points where the top left of the image starts and the bottom right where the image ends ... surrounded by a little whitespace | |
Gregg 27-Dec-2007 [8957] | ; How about something like this: remap: func [a-ul a-br b-ul b-br pt] [ res-x: (b-br/x - b-ul/x) / (a-br/x - a-ul/x) * (pt/x - a-ul/x) + b-ul/x res-y: (b-br/y - b-ul/y) / (a-br/y - a-ul/y) * (pt/y - a-ul/y) + b-ul/y as-pair res-x res-y ] remap 4x26 38x729 234x355 600x62 4x26 remap 4x26 38x729 234x355 600x62 38x729 |
Graham 27-Dec-2007 [8958] | Wow ! |
older newer | first last |