Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
robostac
Sep 23, 2009

Sab669 posted:

Not really important- I can just ask my professor next class, but this struck me as really strange.

You've got your return statement inside the while loop, which will immediately exit the function.

Adbot
ADBOT LOVES YOU

Sab669
Sep 24, 2009

robostac posted:

You've got your return statement inside the while loop, which will immediately exit the function.

Oh, haha, herp derp. I forgot to actually type out the return statements while I was creating the functions and quickly added them in afterwards :downswords:

Sedro
Dec 31, 2008

Sab669 posted:

In C# (or in general, I suppose- but I'm most comfortable with C#), where exactly is the "best" place to put stuff that you'll end up using through out all of the application?
You don't want to put your logic in form event handlers. The form should be an interface to your program, which should function with or without a UI. This is not an easy thing to get right.

In your case, you should have a class which parses the XML into objects (BillingInformation and ShippingInformation are instances of the same class). In the real world I would use XmlSerializer+annotations or code generation to do this for me.

There are a lot of newbie mistakes/bad style in your pasted code: pre-declaration of variables, unnecessary return at the end of functions, not using foreach, not adopting .NET naming standards.

aBagorn
Aug 26, 2004
Ok, forgive the dumb question.

I've never programmed before, but want to. I do help desk work for a pretty large (non IT) company, and I want to create a program that will go through a kind of "flowchart" system for when users call in with network connectivity issues.

Basically, "does the user have an IP address" and then point to different options with a "yes" or "no" response. Ideally I'd want to get it to be GUI based with radio buttons and other methods of input, but text based is fine for now. I'd like this to be able to be utilized by the entire help desk.

Eventually (but this doesn't have to be done from the start) I would like to incorporate a database with all of the network hardware at our individual sites that could be pulled up by inputting the site address, but that's for future use.

Questions:

What do you think the best language is for me to get started? My head is already swimming because I'm looking into too many things (Java, C#, Python).

Is there anyone that could give me a quick hand with a structure how to go about implementing this "flowchart" type of thing.

TLDR - I'm new to programming and probably am biting off WAY more than I can chew. Luckily it's not an assignment, rather a side project to make life easier

baquerd
Jul 2, 2007

by FactsAreUseless

aBagorn posted:

I've never programmed before, but want to. I do help desk work for a pretty large (non IT) company, and I want to create a program that will go through a kind of "flowchart" system for when users call in with network connectivity issues.

Basically, "does the user have an IP address" and then point to different options with a "yes" or "no" response. Ideally I'd want to get it to be GUI based with radio buttons and other methods of input, but text based is fine for now. I'd like this to be able to be utilized by the entire help desk.

There are a million ways to do this, of course, but as far as what you're looking for getting done quickly and easily with your programming background, Javascript combined with HTML may be a good choice.

A "flowchart" system can be done in any language, but the basis will be nested conditional statements. It may be that this is not the best choice, as your options go "deeper" into branches you may discover conflicts where you will have to duplicate code to get the result you want. Over time this can create an unwieldy program, and it may be better to supply many values up front and then work on them all at once rather than prompting the user at every logic branch.

Integrating it with a database will be trickier than using another language, but this will dramatically limit overhead required to get up and running. You throw the html file on a shared drive and the data is stored with the program (watch for it getting too big too quickly and look for a way to split the data into a separate file, or for users copying the file to local drives and having an outdated version).

code:
<form>
  <input type="button" value="Prompt for IP" onClick="javascript:getInfoForIP()">
  <br>  
  <textarea id="siteInfo" rows="5" cols="50"></textarea>
</form>

<script type="text/javascript"><!--

var siteData = new Array();
siteData["192.168.0.1"] = "This site has 10 employees and funding of $500k a year";
siteData["192.168.0.2"] = "This site has 5 employees and funding of $1500k a year";
siteData["192.168.0.3"] = "This site has 2 employees and funding of $60k a year";

function getInfoForIP() {
  if (confirm("Does the user have an IP?")) {
    var userIP = prompt("Enter the IP:", "");
    document.getElementById("siteInfo").value = siteData[userIP];
  }
}

--></script>

Scaevolus
Apr 16, 2007

baquerd posted:

A "flowchart" system can be done in any language, but the basis will be nested conditional statements. It may be that this is not the best choice, as your options go "deeper" into branches you may discover conflicts where you will have to duplicate code to get the result you want.
A state machine would probably be a better choice.

OneEightHundred
Feb 28, 2008

Soon, we will be unstoppable!
Does this seem correct for a concurrent hash table? (Or any construct that can be accessed concurrently but modified exclusively, really)

Read:
code:
AtomicIncrement(readAttempts)
while(insertAttempts)
{
    AtomicDecrement(readAttempts)
    Acquire(InsertMutex)
    AtomicIncrement(readAttempts)
    Release(InsertMutex)
}

<Retrieve value>

AtomicDecrement(readAttempts)
Insert:
code:
AtomicIncrement(insertAttempts)
Acquire(InsertMutex)
while(readAttempts) { }

<Insert value>

AtomicDecrement(insertAttempts)
Release(InsertMutex)

OneEightHundred fucked around with this message at 19:07 on Oct 12, 2011

Scaevolus
Apr 16, 2007

OneEightHundred posted:

Does this seem correct for a concurrent hash table? (Or any construct that can be accessed concurrently but modified exclusively, really)
That looks fine if you're not worried about reader starvation. The third readers-writers problem guarantees fair access (assuming FIFO semaphore queueing).

Hammerite
Mar 9, 2007

And you don't remember what I said here, either, but it was pompous and stupid.
Jade Ear Joe

baquerd posted:

code:
<form>
  <input type="button" value="Prompt for IP" onClick="javascript:getInfoForIP()">
  <br>  
  <textarea id="siteInfo" rows="5" cols="50"></textarea>
</form>

<script type="text/javascript"><!--

var siteData = new Array();
siteData["192.168.0.1"] = "This site has 10 employees and funding of $500k a year";
siteData["192.168.0.2"] = "This site has 5 employees and funding of $1500k a year";
siteData["192.168.0.3"] = "This site has 2 employees and funding of $60k a year";

function getInfoForIP() {
  if (confirm("Does the user have an IP?")) {
    var userIP = prompt("Enter the IP:", "");
    document.getElementById("siteInfo").value = siteData[userIP];
  }
}

--></script>

Just a quick note on this: The correct way to do associative arrays in JavaScript is using objects, not arrays. Reference

defmacro
Sep 27, 2005
cacio e ping pong

TasteMyHouse posted:

homebrew owns. It's the kind of thing that makes me want to learn Ruby better... but I feel like I'm betraying Python

The amount of Ruby you need to understand to write a formula is tiny. Just read a few formulas and you should be good to go.

pokeyman
Nov 26, 2006

That elephant ate my entire platoon.

Hammerite posted:

Just a quick note on this: The correct way to do associative arrays in JavaScript is using objects, not arrays. Reference

I'ma guess baquerd's confusing JavaScript and PHP there, and while I agree with you that it's unhelpful to make an array and then never use it as an array, there's nothing wrong with it.

Plorkyeran
Mar 22, 2007

To Escape The Shackles Of The Old Forums, We Must Reject The Tribal Negativity He Endorsed

pokeyman posted:

I'ma guess baquerd's confusing JavaScript and PHP there, and while I agree with you that it's unhelpful to make an array and then never use it as an array, there's nothing wrong with it.
Writing new Array() (or new Object()) in javascript is nearly always wrong. They're just there as a practical joke on people used to other languages.

baquerd
Jul 2, 2007

by FactsAreUseless

Plorkyeran posted:

Writing new Array() (or new Object()) in javascript is nearly always wrong. They're just there as a practical joke on people used to other languages.

Yeah, I'm definitely not a professional Javascript programmer, it's just a tool to get done the few dynamic things that can't be done easier elsewhere. The above link appears to indicate you want to create a blank Object and use the properties as an associative array, but you're saying not to do that either? It doesn't really seem to break anything regardless, it's just poor style.

Plorkyeran
Mar 22, 2007

To Escape The Shackles Of The Old Forums, We Must Reject The Tribal Negativity He Endorsed
The correct way to create arrays and objects in javascript is to use the literal syntax (i.e. var foo = {}; to create an empty object). The constructor syntax is slower, more verbose, and more prone to breakage if some rear end in a top hat defines a function named Array.

qntm
Jun 17, 2009
So, I'm reading about how left-recursion is a show-stopper for recursive descent parsers. And apparently there are various ways around this: use a different kind of parser which likes left-recursion, and rewriting the existing parser to limit depth or something using some advanced algorithm. It's also possible to rewrite the grammar to a weakly equivalent grammar which isn't left-recursive. This has a problem though because it results in different parse trees with the wrong associativity.

Can't you just modify the parse tree back to what it should be using the same rewrite rules in reverse?

rjmccall
Sep 7, 2007

no worries friend
Fun Shoe
The usual strategy is to factor out a new production that contains all the non-left-recursive rules; you first parse one of those, then iteratively try to continue all the left-recursive rules. So suppose you have this grammar:

code:
prod := ...      // Rule 1
prod := ...      // Rule 2
prod := prod ... // Rule 3
prod := prod ... // Rule 4
Here you would make a new production, prod_base, that parses Rules 1 and 2, and then you have:

code:
prod():
  base := prod_base()
  while true:
    if result := restOfRule3(base):
      base := result
    else if result := restOfRule4(base):
      base := result
    else
      return base
This assumes, as recursive descent grammars usually do, that your base grammar isn't horribly ambiguous with your left-recursive rules. It's also much easier and faster if the continuations of the left-recursive rules start with distinctive tokens.

ancient lobster
Mar 5, 2008
I'm an undergrad but due to scheduling issues ended up in a grad data communications and networks class this semester. After turning in the first homework, I'm realizing I may not have the math for this.

I'm going to talk to my professor, but he's out of the country this week and I want to start getting familiar with the math concepts I'll need in the meantime. I don't want to get messed up on a test because I didn't know something 'basic.' I'm not sure what I should be looking into or where I should start though.

Examples of questions that gave me trouble were:

"A group of 2^n - 1 routers are interconnected in a centralized binary tree, with a router at each tree node. Router i communicates with router j by sending a message to the root of the tree. The root then sends the message back down to j. Derive an approximate expression for the mean number of hops per message for large n, assuming that all router pairs are equally likely."

"In some networks, the data link layer handles transmission errors by requesting that damaged frames be retransmitted. If the probability of a frame's being damaged is p, what is the mean number of transmissions required to send a frame? Assume that acknowledgements are never lost."

I got through these, but it took a long time and a lot of wikipedia. The book just talked about different kinds of networks and protocols and didn't begin to discuss how to approach problems like these--knowledge of math and data structures was just assumed. Data structures are fine, but the first time I ever saw summation notation was a couple of weeks ago in my algorithms class.

tldr: I don't know probability or summation and need to. What else might I expect to encounter/need and are there any resources you could recommend to help me learn these things?

ultrafilter
Aug 23, 2007

It's okay if you have any questions.


Probability is a full-semester class, and not something that you can teach yourself quickly. What are your options if you drop the networking class?

ancient lobster
Mar 5, 2008
Well, I'd lose my money ($2k+) if I dropped. I'd have time to take it in the spring if it were offered. But I already had to go past my planned graduation date because a class wasn't offered and I wasn't allowed to take an equivalent class at a different school (the program apparently doesn't allow any outside credits, so they end up sticking a lot of people in grad classes as some kind of compromise).

On the other hand I have a decent GPA that I want to protect.

But as it seems like this is something I won't be able to work through, I'll just talk to my professor and decide what I need to do. I appreciate your input.

Eggnogium
Jun 1, 2010

Never give an inch! Hnnnghhhhhh!
Those are pretty similar to the questions I saw in my undergrad networking class. Out of curiosity, what year are you? Have you taken a discrete math course yet? That would basically introduce all the concepts you need to work out the math in these problems, after that it's just a matter of practice.

ancient lobster
Mar 5, 2008

Eggnogium posted:

Those are pretty similar to the questions I saw in my undergrad networking class. Out of curiosity, what year are you? Have you taken a discrete math course yet? That would basically introduce all the concepts you need to work out the math in these problems, after that it's just a matter of practice.

That may be the problem. I'm a senior but I didn't start off as a cs major and took the version of the course for non-majors (which they subbed in for the discrete math class). Unfortunately, it was taught by an adjunct who was also an FBI agent, who showed up late almost every day to class, didn't assign a book or any readings, showed us a little html, and mostly talked about how he was an FBI agent...

It's definitely helpful to know that this is what I'm missing, though. I can at least start looking into this stuff, even if it won't help me for the short term.

Any good books/sites you would recommend for discrete math?

ancient lobster fucked around with this message at 09:20 on Oct 15, 2011

Eggnogium
Jun 1, 2010

Never give an inch! Hnnnghhhhhh!
Unfortunately I also subbed in a class from another major for discrete so I don't have a good book to recommend, I just picked up bits and pieces here and there.

What about a statistics class? You should probably have taken one of those by now and they should have touched on the geometric distribution needed for the second problem, though you'd be forgiven for forgetting it.

The problem with the math you need is that even though it's not a lot, it doesn't nicely fall under a single subject. This is usually what CS "discrete math" courses are for but that's really a bit of a misnomer, so a text with that name won't most likely give you way more than you need and not mention probability at all.

I would search through your CS textbooks, especially algorithms, and see if any of them have a good appendix on mathematics.

ancient lobster
Mar 5, 2008
Ok, stats wasn't a requirement, but I'll take your advice about my other books.

'Discrete math' also gives me something to work with, and I'll start here: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/readings/

Thanks for your help.

ultrafilter
Aug 23, 2007

It's okay if you have any questions.


ancient lobster posted:

Ok, stats wasn't a requirement, but I'll take your advice about my other books.

'Discrete math' also gives me something to work with, and I'll start here: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/readings/

Thanks for your help.

That's as good a place as any to start.

Eggnogium
Jun 1, 2010

Never give an inch! Hnnnghhhhhh!

ancient lobster posted:

Ok, stats wasn't a requirement, but I'll take your advice about my other books.

'Discrete math' also gives me something to work with, and I'll start here: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/readings/

Thanks for your help.

That looks pretty good. I would just skip right ahead to parts III and IV. Proofs are definitely important elsewhere but if your Networks class is anything like mine it's going to be mostly computational problems like the one you posted, and I'm assuming you're familiar with graphs since you said you know data structures (but if not, do not skip because that will be extremely important for certain topics).

Golbez
Oct 9, 2002

1 2 3!
If you want to take a shot at me get in line, line
1 2 3!
Baby, I've had all my shots and I'm fine
Is there any resource or book to help me learn coding project organization? Lately, my projects involve looking at the scope of work and starting to code. Not diagramming what functions and classes are needed, just diving in and cleaning up as I go along. I don't think this is terribly sustainable, so I want to learn how to design a project before I start coding. Every time I try, I just end up muddled and start coding anyway.

shrughes
Oct 11, 2008

(call/cc call/cc)

Golbez posted:

Is there any resource or book to help me learn coding project organization? Lately, my projects involve looking at the scope of work and starting to code. Not diagramming what functions and classes are needed, just diving in and cleaning up as I go along. I don't think this is terribly sustainable, so I want to learn how to design a project before I start coding. Every time I try, I just end up muddled and start coding anyway.

When you build code that way, does it work?

pokeyman
Nov 26, 2006

That elephant ate my entire platoon.

Golbez posted:

I don't think this is terribly sustainable, so I want to learn how to design a project before I start coding.

Why?

Golbez
Oct 9, 2002

1 2 3!
If you want to take a shot at me get in line, line
1 2 3!
Baby, I've had all my shots and I'm fine
It works, but after multiple rewrites because I discovered I was doing the whole thing wrong. Since I don't have any documentation written up of how I want it to be, I'm going through haphazardly, possibly duplicating efforts and having to rewrite things when I realize that, logically, the idea I had in my head won't work.

No one plans before putting pen to bytes? :v:

Zombywuf
Mar 29, 2008

Golbez posted:

It works, but after multiple rewrites because I discovered I was doing the whole thing wrong. Since I don't have any documentation written up of how I want it to be, I'm going through haphazardly, possibly duplicating efforts and having to rewrite things when I realize that, logically, the idea I had in my head won't work.

No one plans before putting pen to bytes? :v:

Mainly this is what source control is for. Aside from that your best resource is other developers and talking it through with them, a whiteboard helps a lot. Planning in general is most useful for the act of planning, rather than the resulting plans created.

I use ERDs and sequence diagrams a lot, but that's about it. They are usually drawn and then used to give a vague idea of what the code should look like, but they're nothing more than a sketch.

pokeyman
Nov 26, 2006

That elephant ate my entire platoon.

Golbez posted:

It works, but after multiple rewrites because I discovered I was doing the whole thing wrong. Since I don't have any documentation written up of how I want it to be, I'm going through haphazardly, possibly duplicating efforts and having to rewrite things when I realize that, logically, the idea I had in my head won't work.

No one plans before putting pen to bytes? :v:

By "multiple rewrites" do you mean you start again from nothing? If you're doing that many times then yeah, you're doing something wrong. It could be a number of issues:

You're not expressive enough in the language you've chosen to use. Learn more about the language or choose a different one.

You're starting with too large a chunk of the project. Start smaller, get that part working, and build from there.

Your project is too complicated. Find the essence of the project, the simplest thing that still makes the project useful, and code that.

Your idea needs more thought. Write a README for your project, or sketch the different screens of your app, before your start writing code.

And like Zombywuf said, keep your old code around, preferably in some kind of source control. When you get the urge to throw everything out (and I do, all the time), try to redirect that into changing the code you have.

Gravity Pike
Feb 8, 2009

I find this discussion incredibly bland and disinteresting.
Maybe I'm misreading, but are you guys seriously advocating not having any organization to a project before you just dive in and start coding? I'm not claiming to be experienced by any stretch of the imagination, but before starting a project, I'll usually work out an overall framework (MVC, etc.), and break the project down into logical layers (API: this is where any action a user can take is; Tool Libs: these are logically grouped types of system actions; DB Libs: These are used to search or modify the database; etc). If I'm using a transactional database, I'll figure out at what scope I want the transactions to "start" and "stop".

I find it immensely helpful to take a top-down approach, and block out the major components of a large project before I actually start writing any code. By the time you get down to writing any nitty-gritty code, you should already know how your major components are interacting, and if something's not working, you should just be able to socket it out and replace it with something else.

pokeyman
Nov 26, 2006

That elephant ate my entire platoon.

Gravity Pike posted:

Maybe I'm misreading, but are you guys seriously advocating not having any organization to a project before you just dive in and start coding?

There's lots of ways to figure out what it is that you're trying to make. Diving into code is certainly one way, but it didn't seem to be working very well for Golbez, so I suggested some ways to make that work and some non-code means of organization.

quote:

I'm not claiming to be experienced by any stretch of the imagination, but before starting a project, I'll usually work out an overall framework (MVC, etc.), and break the project down into logical layers (API: this is where any action a user can take is; Tool Libs: these are logically grouped types of system actions; DB Libs: These are used to search or modify the database; etc). If I'm using a transactional database, I'll figure out at what scope I want the transactions to "start" and "stop".

These are very much implementation details, and are certainly worth thought, but the more general points you raise are more valuable for starting a project. Model-View-Controller, for example, isn't a framework for designing an app, but it can certainly help one to organize an app by considering, separately, the data it uses and how that data will be presented.

Orzo
Sep 3, 2004

IT! IT is confusing! Say your goddamn pronouns!
Calling all algorithms experts! I have an interesting problem at my job and before I tackle it, I want to know if it's an existing problem with a well-known solution.

I have a UI that lets users reorder a list of tasks. The tasks internally have a value called 'rank', a double, which determines the order the tasks appear in. If items A, B, and C have rank 1, 2, and 3, that's identical to rank 0, 0.5, 10. All that matters is the order is the same if you were to sort by rank.

Right now the service that saves the items is slow because it naively re-assigns ranks 1 through N and updates every item. This solution was fine for a while because the item list was small, but as it grows larger, more sophistication is needed. What I'm looking for is an approach (hopefully this is a problem that's been solved before) to minimize the number of saves.

For example, if you have items A-J, ranked 1-10, and you move J to the top of the list, ideally you'd just give J any rank that's less than A's rank, and save J. One save instead of 10. Similarly, if you move J in between B and C, you might assign J rank 2.5 and call it a day.

Obviously this gets more complicated when many items are moved around. To make things worse, this screen also lets users prioritize between multiple lists, so you might be remove or introducing entirely new items that weren't in the previous ordering. Does anyone recognize this as a well known problem and if so could you point me to some resources on methods to solve it? If not, anyone have any ideas?

Blotto Skorzany
Nov 7, 2008

He's a PSoC, loose and runnin'
came the whisper from each lip
And he's here to do some business with
the bad ADC on his chip
bad ADC on his chiiiiip

Orzo posted:

If not, anyone have any ideas?

My idea is that this is a data structures problem, not an algorithms problem :)

baquerd
Jul 2, 2007

by FactsAreUseless

Orzo posted:

Right now the service that saves the items is slow because it naively re-assigns ranks 1 through N and updates every item. This solution was fine for a while because the item list was small, but as it grows larger, more sophistication is needed. What I'm looking for is an approach (hopefully this is a problem that's been solved before) to minimize the number of saves.

Obviously this gets more complicated when many items are moved around. To make things worse, this screen also lets users prioritize between multiple lists, so you might be remove or introducing entirely new items that weren't in the previous ordering. Does anyone recognize this as a well known problem and if so could you point me to some resources on methods to solve it? If not, anyone have any ideas?

Make the ordering come naturally from a linked list? I mean I have literally no idea why you are using a numeric rank value in the first place. Edit: or why it would be slow even if it is weird unless you're talking millions to billions of tasks.

baquerd fucked around with this message at 20:34 on Oct 17, 2011

Orzo
Sep 3, 2004

IT! IT is confusing! Say your goddamn pronouns!

baquerd posted:

Make the ordering come naturally from a linked list? I mean I have literally no idea why you are using a numeric rank value in the first place. Edit: or why it would be slow even if it is weird unless you're talking millions to billions of tasks.
I don't have control over the format in which it saves to the database otherwise I would probably be using a different system. Or not. There's different advantages and disadvantages when it comes to serializing list orderings (rank information embedded into the object, separate object which contains the ordering, etc.)

I don't understand your question about why it would be slow, are you assuming that each item is a simple row in a SQL database? It isn't, it's something where updates involve quite a bit of overhead.

Smugdog Millionaire
Sep 14, 2002

8) Blame Icefrog
Why not just set the rank to halfway between the adjacent elements, and if you add to the front/back of the list set it to the nearest integer outside the range?
Doubles have a 52-bit fraction, which can handle quite a number of halvings.

baquerd
Jul 2, 2007

by FactsAreUseless

Orzo posted:

I don't understand your question about why it would be slow, are you assuming that each item is a simple row in a SQL database? It isn't, it's something where updates involve quite a bit of overhead.

Wait, you're maintaining this list and rank information on the database side and not in code-space pending a later commit to the database?

Adbot
ADBOT LOVES YOU

Orzo
Sep 3, 2004

IT! IT is confusing! Say your goddamn pronouns!

Smugdog Millionaire posted:

Why not just set the rank to halfway between the adjacent elements, and if you add to the front/back of the list set it to the nearest integer outside the range?
Doubles have a 52-bit fraction, which can handle quite a number of halvings.
This is a start, but what happens when there's a number of jumbled updates all in one session? Maybe I forgot to specify in the original problem that a save consists of a potential total reordering of a list, not necessarily just moving one item.

For example,

ABCDEFGHIJK

can become

HKABCDJEFG (bolding added to emphasize original 'runs' still present)

with only 3 updates--move H and K to low numbers and stick J between the values of D and E. It's easy to see that because it's such a small list, but could you write the algorithm?


baquerd posted:

Wait, you're maintaining this list and rank information on the database side and not in code-space pending a later commit to the database?
Correct. The database has a column called 'Stack Rank.' In code, it's just a List<T> (C#).

Orzo fucked around with this message at 20:50 on Oct 17, 2011

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply