473,396 Members | 1,892 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

Get name of instance of object

Is it possible to get the name of an instance of an object?

I want to display it for debugging purposes but don't have a clue about how
to go about it.

i.e., I want something like(psuedo)

Class A { }

main
{
A B;

writeline("{0}", B.Name());

}

and it display B.

I know I could just simply display B but if I end up changing the instance
name then I would necessarily know where to update it then. I could
refactor/search and replace ofcourse but it seems better to put it in code.

Thanks,
Jon
Oct 8 '06 #1
21 1757

I also need to print out the addresses of variables... can't seem to do this
either as when I just put in the object name to print it doe sthe same as if
I used GetType()
Oct 8 '06 #2
Jon Slaughter <Jo***********@Hotmail.comwrote:
Is it possible to get the name of an instance of an object?
There's no such concept, I'm afraid.
I want to display it for debugging purposes but don't have a clue about how
to go about it.

i.e., I want something like(psuedo)

Class A { }

main
{
A B;

writeline("{0}", B.Name());

}

and it display B.

I know I could just simply display B but if I end up changing the instance
name then I would necessarily know where to update it then.
The thing is, that's not the name of the object - it's the name of *a*
variable which has a reference to the object. There may be multiple
variables referring to the same object, or there may be none.

If you want to give an object a name, you'll have to add that as a
property of the class.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Oct 8 '06 #3

"Jon Skeet [C# MVP]" <sk***@pobox.comwrote in message
news:MP************************@msnews.microsoft.c om...
Jon Slaughter <Jo***********@Hotmail.comwrote:
>Is it possible to get the name of an instance of an object?

There's no such concept, I'm afraid.
>I want to display it for debugging purposes but don't have a clue about
how
to go about it.

i.e., I want something like(psuedo)

Class A { }

main
{
A B;

writeline("{0}", B.Name());

}

and it display B.

I know I could just simply display B but if I end up changing the
instance
name then I would necessarily know where to update it then.

The thing is, that's not the name of the object - it's the name of *a*
variable which has a reference to the object. There may be multiple
variables referring to the same object, or there may be none.

If you want to give an object a name, you'll have to add that as a
property of the class.
I don't want the name of the object. I can get that with GetType or
ToString? I want the name of the instance(or variable as you said).

So if I have 3 instances or references then I only care about there name and
not where they point.

so in the above if I have A B1, B2, B3;

then I really only want to get B1, B2, B3. I understand that there might be
some problems here. But when I do B1.Name() for example, I would want it to
return "B1". I don't mind the if the compiler just looked to the left of
the . and took that token and then replace the statement with a string of
it.

i.e., X.Name() should return "X" would be nice.

What this means is that I can refactor completely and it will take care of
itself. if I did something like WriteLine("X"); and I later renamed my
variable to Y then I will still be printing X but if I had something like
above I could just refactor and not worry about it.

Does that make sense?

Thanks,
Jon
Oct 8 '06 #4
Jon Slaughter <Jo***********@Hotmail.comwrote:
If you want to give an object a name, you'll have to add that as a
property of the class.

I don't want the name of the object. I can get that with GetType or
ToString?
Well, again neither of those give you the name, as there's no such
thing.
I want the name of the instance(or variable as you said).

So if I have 3 instances or references then I only care about there name and
not where they point.

so in the above if I have A B1, B2, B3;

then I really only want to get B1, B2, B3. I understand that there might be
some problems here. But when I do B1.Name() for example, I would want it to
return "B1". I don't mind the if the compiler just looked to the left of
the . and took that token and then replace the statement with a string of
it.

i.e., X.Name() should return "X" would be nice.

What this means is that I can refactor completely and it will take care of
itself. if I did something like WriteLine("X"); and I later renamed my
variable to Y then I will still be printing X but if I had something like
above I could just refactor and not worry about it.

Does that make sense?
Sort of, although I can't say I've ever wanted to do it myself - and C#
has no such facility.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Oct 8 '06 #5
I just know this is how you would do it in C/C++:

#define debug_print(msg, object) printf("%s - %s", msg, ##object);

##object is translated to the string of what that object is in the
pre-preprocessed code.

- peace

On Oct 8, 2:54 pm, "Jon Slaughter" <Jon_Slaugh...@Hotmail.comwrote:
Is it possible to get the name of an instance of an object?

I want to display it for debugging purposes but don't have a clue about how
to go about it.

i.e., I want something like(psuedo)

Class A { }

main
{
A B;

writeline("{0}", B.Name());

}and it display B.

I know I could just simply display B but if I end up changing the instance
name then I would necessarily know where to update it then. I could
refactor/search and replace ofcourse but it seems better to put it in code.

Thanks,
Jon
Oct 8 '06 #6
"Jon Slaughter" <Jo***********@Hotmail.coma écrit dans le message de news:
12*************@corp.supernews.com...

| Is it possible to get the name of an instance of an object?
|
| I want to display it for debugging purposes but don't have a clue about
how
| to go about it.
|
| i.e., I want something like(psuedo)
|
| Class A { }
|
| main
| {
| A B;
|
| writeline("{0}", B.Name());
|
| }
|
| and it display B.
|
| I know I could just simply display B but if I end up changing the instance
| name then I would necessarily know where to update it then. I could
| refactor/search and replace ofcourse but it seems better to put it in
code.

The names of variables are not maintained by the compiler, they are only
there for humans to read in the source code. Try decompiling an assemby
using Reflector and you will find that the variable names are different from
those in the original source; things like string1, etc will appear.

VS has very good refactoring support; if you rename a variable, all you have
to do is press Ctrl-. and it will replace all occurrences of that variable
name with the new name.

Joanna

--
Joanna Carter [TeamB]
Consultant Software Engineer
Oct 8 '06 #7
"Jon Slaughter" <Jo***********@Hotmail.coma écrit dans le message de news:
12*************@corp.supernews.com...

| I also need to print out the addresses of variables... can't seem to do
this
| either as when I just put in the object name to print it doe sthe same as
if
| I used GetType()

..NEt objects are relocatable at runtime, by the GC, therefore addresses are
meaningless.

Joanna

--
Joanna Carter [TeamB]
Consultant Software Engineer
Oct 8 '06 #8

"Andrei Bazhgin" <an*********@gmail.comwrote in message
news:11**********************@i42g2000cwa.googlegr oups.com...
>I just know this is how you would do it in C/C++:

#define debug_print(msg, object) printf("%s - %s", msg, ##object);

##object is translated to the string of what that object is in the
pre-preprocessed code.
Unfortunately I'm not using C/C++ and I don't think there are eqivilent
preprocessors in C#.
Oct 8 '06 #9

"Joanna Carter [TeamB]" <jo****@not.for.spamwrote in message
news:uo**************@TK2MSFTNGP03.phx.gbl...
"Jon Slaughter" <Jo***********@Hotmail.coma écrit dans le message de
news:
12*************@corp.supernews.com...

| Is it possible to get the name of an instance of an object?
|
| I want to display it for debugging purposes but don't have a clue about
how
| to go about it.
|
| i.e., I want something like(psuedo)
|
| Class A { }
|
| main
| {
| A B;
|
| writeline("{0}", B.Name());
|
| }
|
| and it display B.
|
| I know I could just simply display B but if I end up changing the
instance
| name then I would necessarily know where to update it then. I could
| refactor/search and replace ofcourse but it seems better to put it in
code.

The names of variables are not maintained by the compiler, they are only
there for humans to read in the source code. Try decompiling an assemby
using Reflector and you will find that the variable names are different
from
those in the original source; things like string1, etc will appear.

VS has very good refactoring support; if you rename a variable, all you
have
to do is press Ctrl-. and it will replace all occurrences of that variable
name with the new name.
and it does this for references to these instances inside a string? I don't
think so? The whole point is to make things make sense. I'm not trying to
get something at runtime or in an assembly but to turn a variables name into
text so I can display this at runtime. This is a similar idea to using
enums.

its very simple: I want to be able to display the an instances name and its
address for debugging purposes. Why? So I know exactly whats going on. It
would be nice also to display the line number where the message was printed.
These things are easy to do in other languages but I see no equivilent in
C#.
Oct 8 '06 #10

"Joanna Carter [TeamB]" <jo****@not.for.spamwrote in message
news:OL**************@TK2MSFTNGP05.phx.gbl...
"Jon Slaughter" <Jo***********@Hotmail.coma écrit dans le message de
news:
12*************@corp.supernews.com...

| I also need to print out the addresses of variables... can't seem to do
this
| either as when I just put in the object name to print it doe sthe same
as
if
| I used GetType()

.NEt objects are relocatable at runtime, by the GC, therefore addresses
are
meaningless.
if thats the case then how do you explain the fact that a program can work
with memory? addresses are not meaningless but maybe you mean that they are
just inconsistent? (Although I would still like the ability to do this
since I know the GC will not be a problem in my example.)

I suppose I could write an unmanaged C++ function and somehow wrap it.
Oct 8 '06 #11

"Jon Skeet [C# MVP]" <sk***@pobox.comwrote in message
news:MP************************@msnews.microsoft.c om...
Jon Slaughter <Jo***********@Hotmail.comwrote:
If you want to give an object a name, you'll have to add that as a
property of the class.

I don't want the name of the object. I can get that with GetType or
ToString?

Well, again neither of those give you the name, as there's no such
thing.
>I want the name of the instance(or variable as you said).

So if I have 3 instances or references then I only care about there name
and
not where they point.

so in the above if I have A B1, B2, B3;

then I really only want to get B1, B2, B3. I understand that there might
be
some problems here. But when I do B1.Name() for example, I would want it
to
return "B1". I don't mind the if the compiler just looked to the left of
the . and took that token and then replace the statement with a string of
it.

i.e., X.Name() should return "X" would be nice.

What this means is that I can refactor completely and it will take care
of
itself. if I did something like WriteLine("X"); and I later renamed my
variable to Y then I will still be printing X but if I had something like
above I could just refactor and not worry about it.

Does that make sense?

Sort of, although I can't say I've ever wanted to do it myself - and C#
has no such facility.
Well, I see the problem as something like

SomeClass myVar;

Writeln("myVar");

and when I refactor then obviously there will be no change in the string.

but if I'm able to do something like

Writeln(Name(myVar));
or
Writeln(myVar.Name());

Then the refactoring method will work because it see's myVar not as a string
but as an instance... even though myVar.Name() = "myVar" = Name(myVar) or
whatever.

Hence I won't have to do a search and replace if I want to change myVar.
Ofcoures thats essentially what refactoring will do but it won't work inside
the strings.


Oct 8 '06 #12

"Joanna Carter [TeamB]" <jo****@not.for.spamwrote in message
news:OL**************@TK2MSFTNGP05.phx.gbl...
"Jon Slaughter" <Jo***********@Hotmail.coma écrit dans le message de
news:
12*************@corp.supernews.com...

| I also need to print out the addresses of variables... can't seem to do
this
| either as when I just put in the object name to print it doe sthe same
as
if
| I used GetType()

.NEt objects are relocatable at runtime, by the GC, therefore addresses
are
meaningless.
Also, what about the fixed statement?
Oct 8 '06 #13
"Jon Slaughter" <Jo***********@Hotmail.coma écrit dans le message de news:
12*************@corp.supernews.com...

| and it does this for references to these instances inside a string? I
don't
| think so? The whole point is to make things make sense. I'm not trying to
| get something at runtime or in an assembly but to turn a variables name
into
| text so I can display this at runtime. This is a similar idea to using
| enums.

I suggest that you are trying to do something that is not normal in other
languages as well in C#. In over ten years, I certainly have never found a
need to do what you are suggesting. If you really want to continue with this
unusual quest, then I suggest you use straightforward search and replace in
your source files to achieve any possible refactoring.

| its very simple: I want to be able to display the an instances name and
its
| address for debugging purposes. Why? So I know exactly whats going on. It
| would be nice also to display the line number where the message was
printed.
| These things are easy to do in other languages but I see no equivilent in
| C#.

There are better ways of instumenting code, take a look at AOP and how .NET
can use ContextBoundObject.

OTOH, you could simply ensure that your code is bug-free as you write it,
maybe by using unit testing, where you write the tests first and then write
the code to pass the tests; much more sensible than searching for errors
once the code is written.

Joanna

--
Joanna Carter [TeamB]
Consultant Software Engineer
Oct 8 '06 #14
Hi,
That is no possible, and frankly I find it not needed at all.
--
Ignacio Machin
machin AT laceupsolutions.com
"Jon Slaughter" <Jo***********@Hotmail.comwrote in message
news:12*************@corp.supernews.com...
Is it possible to get the name of an instance of an object?

I want to display it for debugging purposes but don't have a clue about
how to go about it.

i.e., I want something like(psuedo)

Class A { }

main
{
A B;

writeline("{0}", B.Name());

}

and it display B.

I know I could just simply display B but if I end up changing the instance
name then I would necessarily know where to update it then. I could
refactor/search and replace ofcourse but it seems better to put it in
code.

Thanks,
Jon

Oct 8 '06 #15

"Joanna Carter [TeamB]" <jo****@not.for.spamwrote in message
news:e4**************@TK2MSFTNGP05.phx.gbl...
"Jon Slaughter" <Jo***********@Hotmail.coma écrit dans le message de
news:
12*************@corp.supernews.com...

| and it does this for references to these instances inside a string? I
don't
| think so? The whole point is to make things make sense. I'm not trying
to
| get something at runtime or in an assembly but to turn a variables name
into
| text so I can display this at runtime. This is a similar idea to using
| enums.

I suggest that you are trying to do something that is not normal in other
languages as well in C#. In over ten years, I certainly have never found a
need to do what you are suggesting. If you really want to continue with
this
unusual quest, then I suggest you use straightforward search and replace
in
your source files to achieve any possible refactoring.
I guess since you've never needed it then it means no one should ever need
it?
| its very simple: I want to be able to display the an instances name and
its
| address for debugging purposes. Why? So I know exactly whats going on.
It
| would be nice also to display the line number where the message was
printed.
| These things are easy to do in other languages but I see no equivilent
in
| C#.

There are better ways of instumenting code, take a look at AOP and how
.NET
can use ContextBoundObject.

OTOH, you could simply ensure that your code is bug-free as you write it,
maybe by using unit testing, where you write the tests first and then
write
the code to pass the tests; much more sensible than searching for errors
once the code is written.
You could. But then again I am not perfect like you. I make many mistakes
and its nice to have some idea where they occur.
Oct 8 '06 #16

"Ignacio Machin ( .NET/ C# MVP )" <machin TA laceupsolutions.comwrote in
message news:ur**************@TK2MSFTNGP04.phx.gbl...
Hi,
That is no possible, and frankly I find it not needed at all.

Man, it amazes me why so many people think that just because they don't need
something that it means no one else needs it either. (sounds like some type
of ego trip to me).

Oh, and why is it not possible? I can write a simple utility that "extends"
the C# syntax to include this ability. Surely with your vast programming
experience you can write the complex code to do a search and replace?
Oct 8 '06 #17
Joanna Carter [TeamB] wrote:
"Jon Slaughter" <Jo***********@Hotmail.coma écrit dans le message de news:
12*************@corp.supernews.com...
| and it does this for references to these instances inside a string? I don't
| think so? The whole point is to make things make sense. I'm not trying to
| get something at runtime or in an assembly but to turn a variables name into
| text so I can display this at runtime. This is a similar idea to using
| enums.

I suggest that you are trying to do something that is not normal in other
languages as well in C#. In over ten years, I certainly have never found a
need to do what you are suggesting. If you really want to continue with this
unusual quest, then I suggest you use straightforward search and replace in
your source files to achieve any possible refactoring.
As someone has already mentioned, then it is possible via
the C/C++ preprocesser.

And it seen used occasionally. Not often but it happens.

It is not possible in current C#. And I doubt that it
will be possible in any of the future versions of C#.

It does not really fit well with the C# model.

Arne
Oct 9 '06 #18
Jon I am going to reply even though you have trashed everyone who has tried
to help you .. bad vibes dude.

You can get some of the information you are looking for (well the runtime
stuff)

In order to do this you will need to use the debugger API. Luckily for you
someone has already done just this with mdbg
http://blogs.msdn.com/jmstall/archiv...30/236281.aspx includes a
sample. For some of the other information you could do pre-processer based
parsing but for others (such as addresses of variables) you need runtime
based support and you surely don't want to pin everything so you don't have
to worry about the gc rearranging things.

You may also want to take a look at SOS in the debugging toolkit as it
already has alot of the functionality you are asking for.

Cheers,

Greg
"Jon Slaughter" <Jo***********@Hotmail.comwrote in message
news:12*************@corp.supernews.com...
>
"Ignacio Machin ( .NET/ C# MVP )" <machin TA laceupsolutions.comwrote in
message news:ur**************@TK2MSFTNGP04.phx.gbl...
>Hi,
That is no possible, and frankly I find it not needed at all.


Man, it amazes me why so many people think that just because they don't
need something that it means no one else needs it either. (sounds like
some type of ego trip to me).

Oh, and why is it not possible? I can write a simple utility that
"extends" the C# syntax to include this ability. Surely with your vast
programming experience you can write the complex code to do a search and
replace?


Oct 9 '06 #19

"Greg Young" <dr*******************@hotmail.comwrote in message
news:uv**************@TK2MSFTNGP03.phx.gbl...
Jon I am going to reply even though you have trashed everyone who has
tried to help you .. bad vibes dude.
Well, sorry if you don't like it. I just feel that some of them deserve it.
See how simple and helpful your comments were? I'm sorry but I just don't
take crap from some of these people because I know how they are. I'm around
them all the time. They think that if you ask for help then they can march
in and try and treat you like an idiot so they can make themselfs look
smarter. I'm not saying they do this consciously or explicitly but some of
them do it. When I ask a question I don't want any of that crap. Your post
does not contain a hit of it. If you say stuff like "I don't see why you
need it. I never don't need it" then theres something else here besides
objective help. Farther comments like that then support my impression and
I'll act just like them. I don't mean to cause any problems for the rest of
you but I kinda feel its my mission to try my best to put these people in
there place. Every once in a while I might be wrong and I'll take the blame
for it but thats the price you gotta pay.

You can get some of the information you are looking for (well the runtime
stuff)

In order to do this you will need to use the debugger API. Luckily for you
someone has already done just this with mdbg
http://blogs.msdn.com/jmstall/archiv...30/236281.aspx includes a
sample. For some of the other information you could do pre-processer based
parsing but for others (such as addresses of variables) you need runtime
based support and you surely don't want to pin everything so you don't
have to worry about the gc rearranging things.

You may also want to take a look at SOS in the debugging toolkit as it
already has alot of the functionality you are asking for.
I though it might be somewhere in there but I couldn't find it.

Thanks for your informative reply,
Jon
Oct 9 '06 #20
Jon Slaughter wrote:
Well, sorry if you don't like it. I just feel that some of them deserve it.
See how simple and helpful your comments were? I'm sorry but I just don't
take crap from some of these people because I know how they are. I'm around
them all the time. They think that if you ask for help then they can march
in and try and treat you like an idiot so they can make themselfs look
smarter. I'm not saying they do this consciously or explicitly but some of
them do it. When I ask a question I don't want any of that crap. Your post
does not contain a hit of it. If you say stuff like "I don't see why you
need it. I never don't need it" then theres something else here besides
objective help. Farther comments like that then support my impression and
I'll act just like them. I don't mean to cause any problems for the rest of
you but I kinda feel its my mission to try my best to put these people in
there place.
So far I you have only managed to make a fool of yourself.

Arne
Oct 9 '06 #21
See how simple and helpful your comments were? I'm sorry but I just don't
take crap from some of these people because I know how they are. I'm around
them all the time. They think that if you ask for help then they can march
in and try and treat you like an idiot so they can make themselfs look
smarter. I'm not saying they do this consciously or explicitly but some of
them do it. When I ask a question I don't want any of that crap. Your post
does not contain a hit of it. If you say stuff like "I don't see why you
need it. I never don't need it" then theres something else here besides
objective help. Farther comments like that then support my impression and
I'll act just like them. I don't mean to cause any problems for the rest of
you but I kinda feel its my mission to try my best to put these people in
there place. Every once in a while I might be wrong and I'll take the blame
for it but thats the price you gotta pay.
Jon,
All of these individuals are providing help and taking time out of
their schedule to attempt to help you. They are not getting paid for
it, they are gaining nothing from it other than your negative attitude.

If you don't like the responses you get on the newsgroups, then go and
pay Microsoft for a per-incident basis. They will be more than happy to
take your money, listen to you complain and moan, and aid you in
finding a solution to your problem.

I am always appalled when I see people like yourself take advantage of
the good graces of all these people that provide us with knowledge FREE
OF CHARGE and in return are nothing but rude and obnoxious. You should
be thankful that anyone even bothered replying to your posting.

In the future I will make it a point to completely ignore any of your
postings, although this is not professional nor my style, I feel
compelled to do this in your instance (no pun intended)

good day sir

Sean

Oct 10 '06 #22

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: sinasalek | last post by:
class TTest { function instance_name() { echo "instance name : $instance_name"; } } $test=new TTest(); $text->instance_name();
6
by: Andre Meyer | last post by:
Hi all I have been searching everywhere for this, but have not found a solution, yet. What I need is to create an object that is an instance of a class (NOT a class instance!) of which I only...
7
by: max(01)* | last post by:
hi. is there a way to define a class method which prints the instance name? e.g.: >>> class class_1: .... def myName(self): .... ????what should i do here???? ....
6
by: Martin | last post by:
I'd like to be able to get the name of an object instance from within a call to a method of that same object. Is this at all possible? The example below works by passing in the name of the object...
8
by: CES | last post by:
All, I'm sorry but I still don't get this!! I'm trying to use a variable that is passed into a function to to dynamically name an instance of an Object(). I've created a Timer() Object that seems...
11
by: Alexander Walker | last post by:
Hello I would like to write a method that allows me to pass a reference to an instance of a class, the name of a property of that class and a value to set that property to, the method would then...
6
by: =?Utf-8?B?SmFzb24gUmV5bm9sZHM=?= | last post by:
(using .net 2.0) Say you have a class structure like this: class Address .... end class class Person FirstName
8
by: Matthias Watermann | last post by:
Hi, I'm wondering if it's possible for an object to figure it's name. for example: function baseClass() { // setup properties of "baseClass" } baseClass.prototype = { aMethod: function() {
23
by: Hugh Oxford | last post by:
How do I get an object's name? EG. $obj_FOO = new Bar; echo $obj_FOO->getName(); 'obj_FOO'
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.