Welcome to the MacNN Forums.

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

You are here: MacNN Forums > Software - Troubleshooting and Discussion > Developer Center > Learning OOP: which language?

Learning OOP: which language?
Thread Tools
outsourced
Forum Regular
Join Date: May 2005
Status: Offline
Reply With Quote
Oct 5, 2005, 01:15 PM
 
Any recommendations as to which language one would want to use to learn object-oriented programming? What did you start with? And, please, don't say C++. I can't stand that language. Besides, I'm not going to be writing device drivers or compilers. However, if there are any Objective-C developers, I would appreciate your feedback about that language.

I've always been interested in Java, but have lately encountered other languages that might be better suited (?) to learning OOP concepts more easily: These are Python, Ruby, and PHP5. Not sure about RealBASIC -- besides, it's not FREE!

PHP would be Ok, but I'm more interested in using the language for general purpose applications -- not just web programming.

Ruby just isn't mainstream enough yet (IMHO), but at least it is more of a true OOP language that PHP or Python.

Python is mostly procedural with OOP functionality -- it's there if you want it. However, I'm not sure if transitioning from an "almost OOP" language to a true OOP language (Java) would be confusing.

Thanks for your input!
Did Schroedinger's cat think outside the box?
     
Catfish_Man
Mac Elite
Join Date: Aug 2001
Status: Offline
Reply With Quote
Oct 5, 2005, 03:55 PM
 
Objective-C is pretty much a decent language with a great API. As far as fun languages go, I rather like Io (http://www.iolanguage.com). Java is reasonably nice, and quite useful; it's what I started out on.
     
szymczyk
Fresh-Faced Recruit
Join Date: Aug 2005
Status: Offline
Reply With Quote
Oct 5, 2005, 04:06 PM
 
It depends on what you eventually want to do with what you learn. If you want to write Mac OS X applications, learn Objective C. If you want to get a job as a programmer, learn Java. If all you care about is learning object-oriented programming, take a look at Smalltalk. The site Why Smalltalk claims it's an easy language to learn object-oriented programming.
Mark Szymczyk
Author, Xcode Tools Sensei
http://www.meandmark.com
     
outsourced  (op)
Forum Regular
Join Date: May 2005
Status: Offline
Reply With Quote
Oct 5, 2005, 05:56 PM
 
Originally Posted by szymczyk
It depends on what you eventually want to do with what you learn. ...
Exactly the dilemma: Learn OOP now using, for example, Smalltalk; or learn Java or Objective-C knowing they'll still be useful application-building languages for future.

I think, perhaps, that I'm trying to leap to the end of the journey, while I should enjoy the trip. In other words, learn concepts with a language like Smalltalk (or the Io language), and then use that conceptual knowledge of OOP to learn Java or Obj-C.

Thanks for the input, so far. It really helps to see things from another's perspective and experience.
Did Schroedinger's cat think outside the box?
     
oni
Forum Regular
Join Date: Oct 2002
Location: Palmy North, New Zealand
Status: Offline
Reply With Quote
Oct 5, 2005, 07:44 PM
 
Im in my last year of a software engineering degree, and the language that we learned while learning OO was java, in fact nearly everything we do is in java now that i think about it.

I would definetly recommend it
     
Tesseract
Grizzled Veteran
Join Date: Apr 2002
Location: california
Status: Offline
Reply With Quote
Oct 6, 2005, 12:59 AM
 
I use and love Ruby.

We could give better advice if we knew what language(s) you know already, if any.
     
Dair Grant
Fresh-Faced Recruit
Join Date: Jan 2002
Status: Offline
Reply With Quote
Oct 6, 2005, 01:35 PM
 
It depends on what you eventually want to do with what you learn.
Absolutely.

If you want to write Mac OS X applications, learn Objective C. If you want to get a job as a programmer, learn Java.
This I'm not so sure about.

When we look for a developer, C++ is almost essential. Obj-C or plain C is a useful starting point, but most desktop software development (Mac/Win/Linux) is done in C++. You don't need to know the more obscure features of the language, but being able to use objects/inheritance/polymorphism is.

It may just be a UK thing, but Java tends only to be used by people working in the financial sector (in my experience, which admittedly is of Mac development - but all the Java people I know work for banks ), even though it has taken over from Pascal as the language typically taught in SoftEng classes.

If you don't have a specific goal in mind, I would recommend learning a little of everything: pick a simple project like a memory manager, and write a couple of implementations in different languages to see the differences.
     
outsourced  (op)
Forum Regular
Join Date: May 2005
Status: Offline
Reply With Quote
Oct 6, 2005, 01:39 PM
 
Originally Posted by Tesseract
I use and love Ruby.

We could give better advice if we knew what language(s) you know already, if any.
OOPs. Details, details.

Although my only recent programming (scripting, really) has been with AppleScript, XHTML, and CSS, my background is from Pascal, BASIC (the old MS Compiled BASIC), and database 4GLs like dBase and Foxpro. I haven't used those languages in years, though.

Recently I had to modify some Perl code (yuk!), but couldn't program a real app. in Perl from scratch if I had to.

That's really about it, I think.
Did Schroedinger's cat think outside the box?
     
szymczyk
Fresh-Faced Recruit
Join Date: Aug 2005
Status: Offline
Reply With Quote
Oct 6, 2005, 03:13 PM
 
Originally Posted by Dair Grant
When we look for a developer, C++ is almost essential. Obj-C or plain C is a useful starting point, but most desktop software development (Mac/Win/Linux) is done in C++.

It may just be a UK thing, but Java tends only to be used by people working in the financial sector
In the USA both C++ and Java are popular. The original poster didn't want to learn C++, which was why I recommended Java if he wanted to get a job.
Mark Szymczyk
Author, Xcode Tools Sensei
http://www.meandmark.com
     
Tesseract
Grizzled Veteran
Join Date: Apr 2002
Location: california
Status: Offline
Reply With Quote
Oct 6, 2005, 04:39 PM
 
Here are some languages that are of more than academic interest and that are OO, and some of their common uses:

"Pure" OO or reasonably close to it - I recommend starting with one of these.
- Ruby (scripting and web applications
- Python (scripting language, moved per fugu13's advice)
- Java ("Enterprise" level server apps; cross-platform GUI apps)
- C# (similar to Java. It's MS's language for .net programming - Windows apps and server side.)
- Objective C (Mac desktop apps)

OO (plus the kitchen sink):
- C++ (Windows apps, older [Carbon] Mac apps, some lower-level code)

Scripting languages with some OO support (mostly used for web apps):
- PHP
- Perl: OO "support" in Perl 5 is awful. Avoid Perl.
- JavaScript (web browser scripting) and ActionScript (Flash)

If you want a language that is free, fairly 'pure' OO, widely used, and fairly easy to learn, Java is probably your best bet.
( Last edited by Tesseract; Oct 8, 2005 at 02:58 PM. Reason: moved Python)
     
Chuckit
Clinically Insane
Join Date: Oct 2001
Location: San Diego, CA, USA
Status: Offline
Reply With Quote
Oct 6, 2005, 05:09 PM
 
Originally Posted by Tesseract
Here are some languages that are of more than academic interest and that are OO, and some of their common uses:

"Pure" OO or reasonably close to it - I recommend starting with one of these.
- Ruby (scripting and web applications
- Java ("Enterprise" level server apps; cross-platform GUI apps)
- C# (similar to Java. It's MS's language for .net programming - Windows apps and server side.)
- Objective C (Mac desktop apps)
I don't see how Objective-C is pure OO. It's an extension to C that allows OO syntax, but it's still C at its core.
Chuck
___
"Instead of either 'multi-talented' or 'multitalented' use 'bisexual'."
     
Tesseract
Grizzled Veteran
Join Date: Apr 2002
Location: california
Status: Offline
Reply With Quote
Oct 6, 2005, 05:28 PM
 
Originally Posted by Chuckit
I don't see how Objective-C is pure OO. It's an extension to C that allows OO syntax, but it's still C at its core.
Right. But its OO support is so good that it seemed unfair to group it with the 'scripting languages with tacked-on OO support'. Sorry to confuse.
     
goMac
Posting Junkie
Join Date: May 2001
Location: Portland, OR
Status: Offline
Reply With Quote
Oct 6, 2005, 05:44 PM
 
Learn Objective C. It enforces good OOP practices.

Don't look at C++. Don't even consider it. C++ is so backwards that after programming Obj-C for years before I had any formal C++ training C++ looks like a complete total mess.

When I started programming I was lucky enough to start with HyperTalk, which was fully OO. So I was brought up in programming using objects. The plus side of is that I have an advantage over others in using objects. The downside is I get more uncomfortable when using older C API's which are not OO.
8 Core 2.8 ghz Mac Pro/GF8800/2 23" Cinema Displays, 3.06 ghz Macbook Pro
Once you wanted revolution, now you're the institution, how's it feel to be the man?
     
outsourced  (op)
Forum Regular
Join Date: May 2005
Status: Offline
Reply With Quote
Oct 6, 2005, 06:01 PM
 
Originally Posted by Tesseract
... - Perl: OO "support" in Perl 5 is awful. Avoid Perl. ...
Avoid Perl.


Originally Posted by goMac
Don't look at C++
OK. No argument there.


Thanks for the fantastic input to a somewhat subjective topic, everyone!
Did Schroedinger's cat think outside the box?
     
fugu13
Fresh-Faced Recruit
Join Date: May 2003
Status: Offline
Reply With Quote
Oct 8, 2005, 02:33 PM
 
*cough*

Python's OO support is far better than that in Java, C#, or Objective-C. Especially in the latest release, its arguably the equal of Ruby's OO support, and certainly is in any way the typical programmer ever encounters.

They make some different choices as to what sort of OOP to support (there are quite a few different styles and approaches), but Python and Ruby are both about as Object Oriented as you get.
     
Tesseract
Grizzled Veteran
Join Date: Apr 2002
Location: california
Status: Offline
Reply With Quote
Oct 8, 2005, 02:57 PM
 
Originally Posted by fugu13
*cough*

Python's OO support is far better than that in Java, C#, or Objective-C. Especially in the latest release, its arguably the equal of Ruby's OO support, and certainly is in any way the typical programmer ever encounters.

They make some different choices as to what sort of OOP to support (there are quite a few different styles and approaches), but Python and Ruby are both about as Object Oriented as you get.
OK. My own experience with Python is very limited, so I'm sure you know more about it than I do. I will correct my original post. Thanks.
     
fugu13
Fresh-Faced Recruit
Join Date: May 2003
Status: Offline
Reply With Quote
Oct 8, 2005, 03:01 PM
 
I can see how you might get that impression, its very easy to write procedural python code (or even fairly functional python code). What you won't notice, though, is that every one of those functions you write is a function object, for instance :-) .
     
I was David B.
Registered User
Join Date: Jan 2005
Location: there are days when I wake up and thats exactly my question
Status: Offline
Reply With Quote
Oct 10, 2005, 06:07 AM
 
I recommend to think about an application that you want to write or a type of applications that you like to work on.
And then choose the language that is suited best for this app.

Or think about what kind of company you want to work for.
And then - you guess what I recommend here
     
ink
Mac Elite
Join Date: May 2001
Location: Utah
Status: Offline
Reply With Quote
Oct 11, 2005, 10:40 PM
 
Originally Posted by outsourced
Avoid Perl.
Hey, be careful... the Perl 5 OO paradigm is complete. Just because it doesn't force data protection on the programmer doesn't mean it's useless (although Perl6 does do this). Often, while writing in Java, I'll bang my head against the monitor in frustration with the verbosity of the language -- take IOException, for example. At times, my code becomes so full of try{}catch(IOException e){e.printStackTrace()} that it's hard to conentrate on what's actually being done. My choices? Wrap the whole method in a try{} block (which kind of makes the exceptions pointless), or throw it on up (where is may or may not be any better, but still is very inelegant). How about reading a file? You couldn't just... read it... oh, no, you must instantiate a FileInputStream, and wrap that in a BufferedInputStream (all wrapped up in try{} blocks, of course -- and don't forget to import the java.io objects you need!), and then read the damn thing...

While I'm complaining about Java, let me talk about my current fun: displaying images... In perl, it's a one-line job; in Java, it's pages and pages of Graphics objects, with double-buffered Images and BufferedImages, using Toolkit.* methods, and overriding paint() methods on extended JFrames.

OK, now, I really do like Java -- and every programming language has problems of one sort or another (the syntactic shortcuts in perl being a problem with it; unless you know Bourne shell REALLY well, it seems chaotic). I would highly reccomend learning Java. Netbeans rocks!
     
ink
Mac Elite
Join Date: May 2001
Location: Utah
Status: Offline
Reply With Quote
Oct 11, 2005, 10:41 PM
 
Originally Posted by Tesseract
OK. My own experience with Python is very limited, so I'm sure you know more about it than I do. I will correct my original post. Thanks.
Limited... how?
     
Tesseract
Grizzled Veteran
Join Date: Apr 2002
Location: california
Status: Offline
Reply With Quote
Oct 11, 2005, 11:00 PM
 
Originally Posted by ink
Hey, be careful... the Perl 5 OO paradigm is complete. Just because it doesn't force data protection on the programmer doesn't mean it's useless (although Perl6 does do this). Often, while writing in Java, I'll bang my head against the monitor in frustration with the verbosity of the language -- take IOException, for example. At times, my code becomes so full of try{}catch(IOException e){e.printStackTrace()} that it's hard to conentrate on what's actually being done. My choices? Wrap the whole method in a try{} block (which kind of makes the exceptions pointless), or throw it on up (where is may or may not be any better, but still is very inelegant). How about reading a file? You couldn't just... read it... oh, no, you must instantiate a FileInputStream, and wrap that in a BufferedInputStream (all wrapped up in try{} blocks, of course -- and don't forget to import the java.io objects you need!), and then read the damn thing...

While I'm complaining about Java, let me talk about my current fun: displaying images... In perl, it's a one-line job; in Java, it's pages and pages of Graphics objects, with double-buffered Images and BufferedImages, using Toolkit.* methods, and overriding paint() methods on extended JFrames.

OK, now, I really do like Java -- and every programming language has problems of one sort or another (the syntactic shortcuts in perl being a problem with it; unless you know Bourne shell REALLY well, it seems chaotic). I would highly reccomend learning Java. Netbeans rocks!
Perl's OO may be complete, but it 'feels' really hacked together. First of all, an object is just a thinly disguised glorified (aka blessed) hash. This can somethimes cause problems when attempting certain OO tasks (I don't remember the specific goal I had in mind when I first realized, 'OO in perl is disgusting', I just remember that moment. Sorry). Secondly, as you say, there is NO concept of data protection, something almost every other OO language offers. Third, the syntax for doing many simple OO tasks is arcane: "our @ISA = qw[ foo ];" ???

========

"Limited experience with Python" means I haven't used it much beyond reading/debugging some Python code (mailman, I think it was).

========

I agree that Java has its problems. The biggest, as you allude to, is the bloat and steep learning curve of its standard library (and many external libraries). Java's standard library doesn't go out of its way to make the common case much easier to deal with than the rare case. This is a problem. I think the wide usage of Java in the Real World and the fact that it has a good OO model outweigh the drawbacks, though, when it comes to selecting a first OO language.
     
outsourced  (op)
Forum Regular
Join Date: May 2005
Status: Offline
Reply With Quote
Oct 12, 2005, 05:52 PM
 
by Tesseract: the syntax for doing many simple OO tasks is arcane: "our @ISA = qw[ foo ];" ???
That's probably the main reason I'm prejudiced against Perl -- the undecipherable syntax.

More power to you Perl programmer's though. I'm not dissing it. Just sharing my own perspective.

Just last night I visited wikipedia and looked up NeXTSTEP and found myself an hour and a half later reading all about object-oriented programming and the different OOP languages.

I found myself saying things like "whoa", "cool", "holy crap" while reading about each language. I wasn't even really interested (very much, anyway) in Objective-C until I read about it -- wow! Java 6 (Mustang) and 7 (Dolphin)? Cool -- the codenames really make one wonder what new features they'll offer (Mustang=Fast?, Dolphin=umm...powers submarines?)

And, I just thought Python was procedural with only OOP if you want it? I was wrong.

Everyone has posted some great insights into these languages. Thanks. This has been a great topic!
Did Schroedinger's cat think outside the box?
     
Mithras
Professional Poster
Join Date: Oct 1999
Location: :ИOITAↃOâ…ƒ
Status: Offline
Reply With Quote
Oct 17, 2005, 10:51 PM
 
I'm a long time Perl user looking to kick the habit. I've been using Ruby for recent projects. It's a joy. The syntax is crystal clear, the semantics straightforward yet amazingly powerful -- really, if you haven't tried it yet, do so now.

The single best idea in Ruby is that of internal iterators, combined with closures -- why should you have to write
Code:
for (int i=0; i < sizeof(foo); i++) { Foo myFoo = foo[i]; dostuff }
or even
Code:
for (fooIterator iter = foo.begin(); iter != foo.end(); fooIter++) { Foo myFoo = *iter; doStuff }
that's forcing you to know way too much about how this foo container works! Instead, in Ruby, you just do this:
Code:
foo.each { |myFoo| doStuff }
You're passing a block of code to the 'each' method of the foo container. The foo container will worry about the right way to iterate over its collection -- not you! This same method works across arrays, hashes, heaps, files (iterating over lines, or characters, or bytes), etc. It's a breath of fresh air.
     
Mithras
Professional Poster
Join Date: Oct 1999
Location: :ИOITAↃOâ…ƒ
Status: Offline
Reply With Quote
Oct 17, 2005, 10:56 PM
 
I hasten to add: I do think Java is the most practical OOP language to learn. there's tons of existing code, Java5 cuts down on some of the bloated syntax, and people will actually want to put you to use if you know it.
     
Tesseract
Grizzled Veteran
Join Date: Apr 2002
Location: california
Status: Offline
Reply With Quote
Oct 17, 2005, 11:40 PM
 
Originally Posted by Mithras
I'm a long time Perl user looking to kick the habit. I've been using Ruby for recent projects. It's a joy. The syntax is crystal clear, the semantics straightforward yet amazingly powerful -- really, if you haven't tried it yet, do so now.
I love Ruby, it's my favorite language right now, but just to be fair, don't you think "class << self" (aka the eigenclass) is a bit cryptic?

Being able to do
Code:
class Fixnum def kilobytes; self*1024; end end puts 640.kilobytes
is just cool though.
     
Catfish_Man
Mac Elite
Join Date: Aug 2001
Status: Offline
Reply With Quote
Oct 18, 2005, 11:35 PM
 
Originally Posted by Mithras
I'm a long time Perl user looking to kick the habit. I've been using Ruby for recent projects. It's a joy. The syntax is crystal clear, the semantics straightforward yet amazingly powerful -- really, if you haven't tried it yet, do so now.

The single best idea in Ruby is that of internal iterators, combined with closures -- why should you have to write
Code:
for (int i=0; i < sizeof(foo); i++) { Foo myFoo = foo[i]; dostuff }
or even
Code:
for (fooIterator iter = foo.begin(); iter != foo.end(); fooIter++) { Foo myFoo = *iter; doStuff }
that's forcing you to know way too much about how this foo container works! Instead, in Ruby, you just do this:
Code:
foo.each { |myFoo| doStuff }
You're passing a block of code to the 'each' method of the foo container. The foo container will worry about the right way to iterate over its collection -- not you! This same method works across arrays, hashes, heaps, files (iterating over lines, or characters, or bytes), etc. It's a breath of fresh air.
I think my favorite syntax for this is still:
Code:
foreach(Foo bar in Baz) { bar.doStuff(); }
     
Tesseract
Grizzled Veteran
Join Date: Apr 2002
Location: california
Status: Offline
Reply With Quote
Oct 18, 2005, 11:48 PM
 
Originally Posted by Catfish_Man
I think my favorite syntax for this is still:
Code:
foreach(Foo bar in Baz) { bar.doStuff(); }
Ruby has:

Code:
for bar in baz baz.do_stuff end
but the

Code:
baz.each { |bar| bar.do_stuff }
is preferred.
     
Mithras
Professional Poster
Join Date: Oct 1999
Location: :ИOITAↃOâ…ƒ
Status: Offline
Reply With Quote
Oct 20, 2005, 11:03 PM
 
And the follow-up advantage to the Ruby way is that it's not limited to the for-loop "do something with each item in this collection" paradigm. Instead, it recognizes that there are five or six standard loops that people write, and provides a mechanism such that any collection class, by implementing a single 'each' method, also gets all of those standard loop paradigms for free:

* the "for each item in the collection, do some stuff"
- this is the standard for loop, which Ruby does with
collection.each {|item| item.do_stuff }

* the "get me a new collection, containing one result for each item in the collection"
collection.map {|item| item.some_property + 1 }

* the "run through this collection, and gather up some kind of overall summary value"
collection.inject(0) {|sum, item| sum += item.value }

* the "run through this collection, and keep only some of them"
collection.select {|item| item.has_what_i_want? }

along with some rarer ones like:

* the "run through this collection, and divide into two parts"
piece1, piece2 = collection.partition {|item| item.has_what_i_want? }

etc.

anyway, I think it's neat!
     
oexel
Fresh-Faced Recruit
Join Date: Oct 2002
Location: Vancouver, Canada
Status: Offline
Reply With Quote
Oct 21, 2005, 06:06 PM
 
I dont know how anyone can dislike c++. Maybe I've been walking "backwards" so long that I find walking "straight" awkward. With a good understanding of the language, I think you can write very clean, elegant code that obeys OO principles.
     
itistoday
Professional Poster
Join Date: Oct 2001
Status: Offline
Reply With Quote
Oct 21, 2005, 07:16 PM
 
Avoid C++ like the plague. Start with Java, it's really useful and you'll find yourself using it a lot for various projects you may need. Where you go from there is specific to your needs, but I can't stress how much C++ needs to be abandoned.
     
saddino
Mac Enthusiast
Join Date: Nov 2003
Status: Offline
Reply With Quote
Oct 21, 2005, 11:50 PM
 
Originally Posted by itistoday
Avoid C++ like the plague. Start with Java, it's really useful and you'll find yourself using it a lot for various projects you may need. Where you go from there is specific to your needs, but I can't stress how much C++ needs to be abandoned.
Interesting. I've made my living writing C++ code, and its been very good to me. Best language to learn for OOP? No, of course not. But it really is amazing to see it get such a bum rap given how important its been (the language used for almost every major desktop application -- Mac or Windows -- in the past 15 years).
     
ink
Mac Elite
Join Date: May 2001
Location: Utah
Status: Offline
Reply With Quote
Nov 5, 2005, 03:09 AM
 
Originally Posted by Mithras
The single best idea in Ruby is that of internal iterators, combined with closures
In Java5:
Code:
for (String s : strings) { s.dosomething(); }
I like a lot of the changes in Java5
     
GeeYouEye
Junior Member
Join Date: Mar 2003
Location: Walnut Creek, CA
Status: Offline
Reply With Quote
Nov 10, 2005, 12:02 PM
 
If you just want to learn OOP, go with Smalltalk. For something a bit more "wow!"-inducing that's still OO, learn Io (Eye-oh, like the Jovian moon). For getting a job in the current market, Java, or if you just want to be a Mac developer (well, there is GNUstep for Win & Linux but it's not very good yet), Objective-C (I have the most fun programming with this). For multipurpose use (web, Mac, *nix), go with Ruby - for the web, Ruby on Rails is the first serious competitor WebObjects has had. There's also a Ruby-Cocoa bridge, so you can use Foundation and AppKit classes, but in Ruby. And of course you can use it as a regular interpreter.

Other languages to avoid besides C++: perl, C#, PHP (for the OO; it's fine in general), and Python (it's Scheme pretending to be something else).
I bring order to chaos. You are in chaos windows, you are the contradiction, a bug wishing to be an OS.
     
tikki
Mac Elite
Join Date: Jan 2003
Location: Evansville, IN
Status: Offline
Reply With Quote
Nov 11, 2005, 03:26 AM
 
If you just want to learn OOP Python and Ruby are great languages to start with.

I personally prefer Ruby (Rails rails Rails)

work: maczealots blog: carpeaqua
     
Chuckit
Clinically Insane
Join Date: Oct 2001
Location: San Diego, CA, USA
Status: Offline
Reply With Quote
Nov 11, 2005, 04:55 AM
 
Ruby is the closest thing to Smalltalk that doesn't date from the '80s.
Chuck
___
"Instead of either 'multi-talented' or 'multitalented' use 'bisexual'."
     
aquaclear
Forum Regular
Join Date: Nov 2002
Status: Offline
Reply With Quote
Jan 16, 2006, 11:31 PM
 
I second err third oh anyway..

i also put my vote for ruby. It gets out of the way and you are just doing the job and not worrying about the language. It is very natural feeling.

Oh and ruby on rails is the cat's meow!
     
   
 
Forum Links
Forum Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Top
Privacy Policy
All times are GMT -4. The time now is 05:40 PM.
All contents of these forums © 1995-2017 MacNN. All rights reserved.
Branding + Design: www.gesamtbild.com
vBulletin v.3.8.8 © 2000-2017, Jelsoft Enterprises Ltd.,