viagra comprar españa precio levitra cialis online rezept precio levitra generico viagra online kaufen forum viagra generika online precio cialis españa levitra similar viagra kaufen in wien vendo viagra barcelona viagra apotheke rezeptfrei cialis per nachnahme alternativ viagra cialis soft kaufen viagra seriös bestellen cialis generika preiswert cialis ohne rezept kaufen kamagra niederlande niederlande viagra cialis generika test viagra kaufen angebote günstig kamagra bestellen cialis 5 mg preis cialis filmtabletten viagra online kaufen ohne rezept cialis verkauf preise cialis cialis aus indien viagra nachnahme viagra im internet viagra versand apothekenpreis viagra viagra rezeptpflicht viagras comprar tadalafil argentina cialis comprimidos cialis no me funciona levitra generika viagra torte rezept viagra forum bestellen levitra en farmacias del ahorro viagra pillendienst firmel cialis cialis de 10 mg holland apotheke viagra viagra günstig rezeptfrei venta viagra españa comprar viagra españa cialis medicamento günstig cialis kauf viagra cialis generica viagra kaufen levitra verschreibungspflichtig levitra per nachnahme cialis receta medica comprar viagra sin receta en barcelona viagra billig online kamagra soft cialis 5mg rezeptfrei viagra natural en farmacias viagra frau kaufen viagra tschechien cialis holland kamagra oral jelly preisvergleich levitra receta medica viagra generika schweiz preisvergleich kamagra billig viagra precios viagra kamagra jelly kaufen viagra precio en farmacias viagra türkei rezeptfrei cialis farmacias ahumada sicher viagra kaufen vendo cialis generico super kamagra preisvergleich levitra billig kaufen viagra natural barcelona viagra rezeptfrei aus deutschland viagra kauf venta cialis viagra bestellen paypal viagra online bestellen rezeptfrei viagra ohne rezept forum cialis diario precio rezeptpflichtig viagra viagra kaufen in münchen cialis farmacia ahumada cialis versand aus deutschland viagra rezeptfrei online bestellen kamagra kaufen paypal rezeptfrei viagra bestellen cialis kaufen schweiz venta levitra cialis receta cialis seriös kaufen kamagra 100 mg cialis generico en guadalajara cialis generika günstig levitra pastilla preis viagra 100mg kamagra preisvergleich precio de levitra viagra generika unterschied comprar viagra por correo cialis mallorca cialis generika ohne rezept kamagra per nachnahme alternative viagra cialis marketing strategy viagra kaufen rezeptfrei cialis generico foro viagra billig online bestellen viagra kaufen in apotheke comprar levitra contra reembolso venta viagra farmacias comprar cialis 20 mg medicamento viagra sildenafil citrate kaufen viagra nur auf rezept farmacia levitra comprar levitra sin receta precio viagra españa cialis im internet bestellen mejor viagra o cialis tadalafil preis viagra kaufen apotheke viagra rezeptfrei spanien viagra generika erfahrungen viagra kaufen usa kamagra oral jelly kaufen comprar viagra mar del plata cialis preis deutschland viagra deutschland rezeptfrei comprar cialis generico cialis generika aus deutschland viagra original oder generika cialis venta cialis apotheke holland super kamagra billig kaufen cialis precio viagra basel tadalafilo precio cialis farmacia viagra generika günstig kamagra madrid levitra farmacias del ahorro cialis apothekenpreis vendo viagra viña del mar viagra es venta libre comprar cialis levitra venta libre kamagra barata kamagra oral jelly berlin precio cialis 10 mg viagra wo kaufen viagra generico sildenafil kamagra billiger cialis foro kamagra oral jelly billig pille viagra generika potenzmittel levitra 20mg filmtabletten comprar levitra generico tadalafil tabletas kamagra in berlin kaufen viagra preisliste firmel levitra viagra rezeptfrei deutschland viagra kaufen in der schweiz cialis ficha tecnica cialis bestellen forum kaufen viagra levitra schweiz comprar cialis online viagra es de venta libre viagra im internet bestellen pfizer viagra kaufen cialis que es viagra generika forum günstig kamagra levitra 20 mg preisvergleich viagra preis türkei cialis kaufen forum viagra pills sildenafil billig comprar viagra generica tadalafil nachnahme kamagra oral jelly günstig cialis 10 mg precio cialis instrucciones viagra generico españa vendo viagra concepcion viagra online bestellen erfahrungen foro levitra cialis online rezeptfrei viagra kaufen preisvergleich viagra frankreich rezeptfrei kamagra holland levitra ohne rezept kaufen pfizer viagra 100mg preis cialis 20mg filmtabletten preisvergleich viagra per nachnahme viagra online rezeptfrei tadalafil tadalis pille 20mg generika cialis rezeptfrei viagra günstiger viagra donde conseguir venta viagra generica precio viagra 25 mg cialis preisvergleich foro kamagra viagra original rezeptfrei cialis 5mg kaufen tadalafil colombia viagra ohne rezept erfahrungen comprar cialis españa precio viagra generico viagra cialis kaufen levitra generika preisvergleich similares tadalafil comprar viagra farmacia levitra online kaufen cialis kaufen viagra bestellen online viagra online bestellen ohne rezept preisvergleich levitra 20 mg kamagra online apotheke pastillas cialis viagra kaufen online cialis rezeptfrei schweiz tadalafil diario viagra 25 mg ohne rezept viagra kaufen forum viagra rezeptfrei niederlande tadalafil ohne rezept holland cialis venta de levitra levitra auf rezept viagra mit rezept viagra generika bestellen kamagra preise viagra in holland viagra rezeptfrei ch viagra farmacias cruz verde viagra rezeptfrei preis viagra generika ohne rezept viagra preis österreich viagra schweiz viagra apothekenpflichtig viagra niederlande rezeptfrei viagra billig bestellen levitra mit rezept viagra droga generica cialis tadalafil lilly tabletas cialis cialis generico en españa viagra rezeptfrei holland kamagra wien viagra rezeptfrei forum viagra venta preisvergleich cialis 20 mg compra levitra levitra generika forum comprar viagra internet cialis rezeptfrei forum günstig viagra kaufen kamagra günstig bestellen viagra barato cialis compra medicamento levitra generika tadalafil cialis kamagra lutschtabletten viagra bestellen günstig comprar cialis sin receta cialis niederlande viagra 100 mg preisvergleich apotheke kamagra comprar viagra barata generico tadalafil levitra 20 mg comprar kamagra kaufen deutschland viagra generika wirkung viagra blitzversand viagra pillenmaster levitra bayer precio cialis generico precio viagra generika vergleich viagra rezeptfrei in der apotheke vardenafil preisvergleich viagra preiswert comprar cialis por internet kamagra tabletten erfahrungen precio levitra 10 mg apotheke viagra preis viagra farmacias ahumada cialis rezeptfrei usa cialis farmacias guadalajara cialis rezeptfrei niederlande viagra 25 mg precio apotheke cialis cialis verschreibungspflichtig cialis similares tadalafil indien versandapotheke cialis venta viagra online sildenafil bestellen preise viagra potenzmittel cialis generika sildenafil generika cialis 10mg preis cialis 5mg filmtabletten preisvergleich preis viagra apotheke comprar viagra generico en españa viagra apotheke rezept viagra generika per nachnahme comprar viagra en españa viagra preise diferencia cialis viagra kamagra eu cialis bestellen ohne rezept cialis rezeptfrei aus deutschland kamagra ohne rezept sildenafil citrat tabletten precio viagra argentina viagra bestellen auf rechnung cialis generika indien cialis 20 mg filmtabletten genericos viagra kamagra indien cialis generika bestellen viagra online günstig viagra online bestellen forum tadalafil rezeptfrei comprar levitra españa viagra natural venta viagra online kaufen de tadalafil en argentina cialis 5 mg precio cialis requiere receta medica viagra deutschland kaufen cialis generika erfahrung viagra cialis rezeptfrei cialis generico barato cialis mas barato vardenafil generika viagra kaufen in berlin kamagra pille 100mg viagra generika viagra generika test cialis farmacia del ahorro viagra precios schweiz viagra

Why I moved from Ruby on Rails to Python/Django and back

Around March of 2006, I decided to proceed with a complete rewrite of Ajaxwhois.com. I had been studying Ruby on Rails for long enough and knew it would be the ideal platform to develop with. And I was right. While Ruby and Rails might be a little awkward at first for the Java or .NET coder in you, it all really makes sense after a little while.

The behind the scene code generation (aka: magic), the lack of a decent IDE, and worse, of a good debugger made my transition to Ruby somewhat difficult and sometimes confusing frustrating. I used to live in Visual Studio .NET and breath Intellisense. In fact, I still miss that to this day.

Any newcomer to Rails will quickly discover why it is so talked about. First of all, even though I don’t consider myself anywhere near a decent Rails programmer, I am now at least twice as productive with Ruby on Rails than with ASP.NET and C#. Thanks to the MVC (Model, View, Controller), DRY (Don’t Repeat Yourself) and Convention Over Configuration mindset of Rails. All the data access code is automagically generated for you (without running a code generator), templating is built in and creating AJAX’ed applications is a snap.

Life was good with Rails and the more I used it, the more I liked it. That was until early August of 2006. I was ready to launch version 2.0 of Ajaxwhois. Knowing so many professional Rails hackers, I thought deploying my application to my production server was going to be a breeze. I was wrong. Even though the installation of Linux (Ubuntu Dapper Drake 64 bit), Lighttpd, MySql and Mongrel went well, I experienced weird problems, mainly related to Mongrel. Sometimes, my Mongrel instances would simply die and disappear from the process list for no apparent reason. I didn’t have ANY traffic at this point because I hadn’t done DNS transfers yet. On other occasions, Mongrel went crazy and started peaking the CPU at 99%. I had to manually kill and restart it.

After extensive research and countless “from scratch” reinstalls, I found out that Mongrel was known to not play well with 64 bit Ubuntu (I lost the links to this evidence, unfortunately). Mongrel was patched accordingly, but it didn’t solve my problem. It still crashed many times a day and I just couldn’t figure out what was wrong. I asked my good friends Rich Collins and Adam Thorsen (of Guruza.com) who are both experienced Rails developers and they had no idea either. I was stuck.

I wanted to launch. Badly. I didn’t want to waste anymore time with this so I picked up a Python book and rewrote the whole site one more time, in Python using the Django framework this time. I had never programmed in Python before and much less used Django. However, the switch was easy enough since Ruby and Python are somewhat similar.

My experience with Python and Django was great; it is a combination every web developer should consider. However, I soon missed Ruby and Rails. Ruby supports “real” private/public/protected methods (Python just fakes that with its naming convention) and it’s syntax is more forgiving (the need for () at the end of each method call in Python was killing me). Django is not as straightforward as Rails, and requires more code to get things done. There are also many little things that don’t “feel right” in Django, like the need to manually pass variables to a view. Data access is confusing at best while Rails’ ActiveRecord is god-sent. These little things really add up.

On the flip side, Python is faster than Ruby and less memory hungry. I was also surprised to actually love Python’s significant indentation (see example). But more importantly, Python and Django just worked! I never experienced weird crashes like I did with my Rails stack.

So, why am I back to Rails for my next project? 3 letters: FUN. I find Ruby and Rails to be pleasant to use. The community large, active and very helpful. The number of freely available Rails plugins and the fast evolution of the core code are also welcomed additions. Rails requires less code, less self.__awkward_method_calls(), has built-in AJAX and REST support, and has much more flexible data access and templating engines.

But what about those crashes? What about the speed issue? Well, I don’t have the crashes anymore. Don’t ask me why, I don’t know, but it’s fine now, I swear! Something somewhere got fixed and it seems to have solved the problem. However, speed is still one of the low points of Rails. Using caching and proper code optimization should take you a long way, though. Matz, the author of Ruby, is working hard on a new virtual machine that should make Ruby just as fast, if not faster than Python.

My recommendation is, try both for long enough to figure out what works and what doesn’t for you. If you are a long-time Python user, Django might be more compelling for you, but if you are coming from a Java, Perl or Smalltalk background, Ruby and Rails will most likely be what you’ll end up using. Either way, I don’t think you can go wrong.

PS: I don’t want to blame Mongrel for my Rails problems because I am still not sure who was the guilty party. Mongrel is a wonderful piece of software and I heartily recommend it. Just make sure you watch it closely if you use Ubuntu on a 64 bit machine.

Trackback URL

36 Comments on "Why I moved from Ruby on Rails to Python/Django and back"

  1. Rich Collins
    30/01/2007 at 3:06 pm Permalink
  2. Topper
    30/01/2007 at 4:39 pm Permalink

    Ok, not a bad writeup of his personal experience, but as an avid Pythonista/Djanger, I’d like to point out:

    1. Python functions need () at the end: Ok, fair enough.
    2. self._awkvardmethod_calls(). I assume he’s unhappy about the first two underscores, as long method names are Good(tm) if you got an autocomplete editor. However: (1) most of Python’s “private” stuff that isn’t part of built-in scope should have one, not two underscores, and (2) if he’s accessing private methods a lot, my guess is that he’s doing something very, very wrong in his code. Or maybe more likely he’s been exposed to too much Java or C#: Python is NOT Java and you don’t program the two in the same style! Hint: The property function would most probably be this guy’s new best friend. Check it out. Also check out iPython, an interactive Python command line. Among other things it’s very good for interactive inspection.

    Anyway, an ok write-up, as everyone’s taste is different. Personally I love Python and Django, so I’ll stick to it.

  3. Jonex
    30/01/2007 at 4:44 pm Permalink

    Being one of those that fell in love with Python at first sight, I do take notice of the fact that your problems with Django isn’t something generally true.

    Being forced to use parenthesizes with methods and functions isn’t something people normally would be troubled with, it’s probably just because you were used to rails.

    The fact that you need to be slightly more explicit in Django is actually considered a feature, since that increases readability and ease of maintenance.

    I do agree though that while Python is a pleasant language to develop and maintain code in, Ruby seems to be more focused at being fun. It feels like it lets you be “clever” with your code in a way that Python won’t allow. For better and for worse, I’d guess that part is quite much just a matter of taste.

  4. Brandon Corfman
    30/01/2007 at 4:53 pm Permalink

    >Matz, the author of Ruby, is working hard on a new virtual machine that should make Ruby just as fast, if not faster than Python.

    … and Perl 6 is coming out next week too.

  5. Vimana
    30/01/2007 at 5:26 pm Permalink

    It’s agood piece of writing. After isn’t the FUN factor that it matters most :)

  6. Vincent Foley
    30/01/2007 at 5:41 pm Permalink

    I’d like to hear more about your gripes with Django. I use it at work, and I love it. I was using Rails before it reached 1.0 (my todo list tutorial was pretty popular in fact.) However, I had a much easier time wrapping my head around Django, because there is no magic involved. Data access is very easy in my opinion:

    city = City.objects.get(name=”Montreal”)
    montreal_restaurants = Restaurant.objects.filter(city=city)

    Since it’s been a while since I did any Rails, I don’t recall what that would look like with ActiveRecord. The syntax of Python doesn’t really bother me, you eventually just grow used to typing self everywhere and parentheses. As for public/private/protected methods, although I can see why some people like them, I’m not a big fan (must be the Smalltalk background). In Ruby on Rails they are used to separate the views that users can access (those public) from those they can’t. Since in Django you must explicitly associate a URL regular expression to a specific method, you don’t get that problem.

    I think you’re right about Ruby being more fun than Python however; Python is great language, and much more fun than PHP or Java, however the hackability of Ruby and the blocks make it really, really fun to use.

    I hope to hear back from you,

    Vincent.

  7. Carl
    30/01/2007 at 6:20 pm Permalink

    Vincent,

    ActiveRecord looks like:

    City.find_by_city(‘Montreal’)

    or

    City.find_by_city_and_state(‘Montreal’,'QC’)

  8. Branden
    30/01/2007 at 6:52 pm Permalink

    I’ve had very similar experiences… really loved rails until I had to start worrying about deployment.

    Rumors like this also make me really wonder where the ruby ship is headed. Taking out continuations (one of the more elegant ruby code constructs) because its TOO HARD to implement? Give me a break, Matz.

    I’m holding out for either 1) A properly done Rite that doesn’t strip features from 1.8.2, or 2) The JRuby guys to tweak their project to the point where its comparable in speed with CRuby (which isn’t very fast for a C implementation). In the meantime, I’m checking out Django because of its speed, stability, and all of the other cool stuff going on in python right now (like PyPy).

  9. Peter Bell
    30/01/2007 at 7:19 pm Permalink

    Or if you want to keep continuations, there’s always Common Lisp!

  10. TomP
    30/01/2007 at 7:37 pm Permalink

    “… and Perl 6 is coming out next week too.”

    Unlike Perl 6, Ruby 1.9 and the new VM are in the public SVN and can be checked out and used /today/.

  11. Vincent Foley
    30/01/2007 at 8:17 pm Permalink

    @TomP: Pugs is a Perl 6 implementation which you can already play with. Check out http://run.pugscode.org for something similar to TryRuby

  12. slicematt
    30/01/2007 at 11:08 pm Permalink

    Good read Carl. I think Rails deployment gets better every month or so, literally. More tricks, more articles, more support. While I prefer Rails, in the end it’s likely just a matter of personal taste and style. Ultimately however, a happy coder is a productive coder. So you chose the right answer (for you!). Glad to help power ajaxwhois.com!

  13. Anon Coward
    31/01/2007 at 2:05 am Permalink

    Perhaps you should have used lighty or apache instead of Mongrel for production deployment.

    Personally speaking, Rails fits my mental model like a glove.

    Regarding Rails performance, here’s a few tips:
    - 3rd normal form DB schema
    - use DB column indexes
    - leave performance to production
    - you’ll need a minimum 2GB of RAM in prod
    - start on one box THEN distribute (you may find one big fat box is the way to go)

  14. Faried Nawaz
    31/01/2007 at 4:06 am Permalink

    It’s not Common Lisp that has continuations, it’s Scheme. Though, all you need is some sort of closure to emulate them in any language.

  15. Brandon Corfman
    31/01/2007 at 9:39 am Permalink

    >Unlike Perl 6, Ruby 1.9 and the new VM are in the public SVN and can be checked out and used /today/.

    OK, so what’s the performance improvement?

  16. Ajaxion
    31/01/2007 at 11:53 am Permalink

    Wow. Love you Ajax app – especially the idea behind it! if you can promote it, you can pull in some $$$

  17. Pan Feng
    31/01/2007 at 11:18 pm Permalink

    I think Grails is the best choice for Java developers.

  18. huangyi
    01/02/2007 at 1:12 am Permalink

    “”"
    here are also many little things that don’t “feel right” in Django, like the need to manually pass variables to a view.
    “”"
    You mean pass variables to templates ? you can use locals() if you like.

  19. huangyi
    01/02/2007 at 1:12 am Permalink

    and context processor is very useful.

  20. Justin Rich
    01/02/2007 at 11:46 am Permalink

    I have had the same problem with Mongrel just up and dying. On the Mongrel FAQ (http://mongrel.rubyforge.org/faq.html) though you can find the following. After I did as Zed suggested I no longer have mongrels dropping off the map.

    Q: Mongrel stops working if it’s left alone for a long time.

    If you find that Mongrel stops working after a long idle time and you’re using MySQL then you’re hitting a bug in the MySQL driver that doesn’t properly timeout connections. What happens is the MySQL server side of the connection times out and closes, but the MySQL client doesn’t detect this and just sits there.

    What you have to do is set:

    ActiveRecord::Base.verification_timeout = 14400

    Or to any value that is lower than the MySQL server’s interactive_timeout setting. This will make sure that ActiveRecord checks the connection often enough to reset the connection.

  21. Carl
    01/02/2007 at 1:36 pm Permalink

    Justin: Wow! This might be it. I was using MySQL at the time (now postgres)… I wish you told me that a few months ago ;-) Thanks for that!

  22. Huw Collingbourne
    02/03/2007 at 5:13 pm Permalink

    Just to correct one small point. You don’t have to give up Visual Studio and IntelliSense to develop Ruby or Rails. We’ve recently released a Ruby/Rails IDE, ‘Ruby In Steel’, which is integrated into Visual Studio. Our commercial edition has IntelliSense. We also have a free version though that one hasn’t got IntelliSense.

    Try it out: http://www.sapphiresteel.com

    best wishes
    Huw

  23. Carl
    02/03/2007 at 6:05 pm Permalink

    Huw,

    If I was still under Windows, I’d fork out the $200 and buy this thing right away. I think what you have achieved is simply amazing.

    I am now on Mac. Visual Studio is the only thing I miss sometimes. Bring Ruby in Steel to TextMate or even Eclipse and you’ll become rich!

  24. Huw Collingbourne
    06/03/2007 at 8:26 am Permalink

    Thanks for the comments. I’m afraid Ruby In Steel is a Visual Studio-only project. There are many things I like about the Mac (it looks nicer, for one thing). But I couldn’t learn to live without VS ;-) and, to be honest, I don’t think we would have been able to accomplish half as much as we have done if we’d been using any other platform (by ‘platform’, I mean Visual Studio itself which, once you dig inside it, seems to be more like a whole operating system than just an IDE).

    best wishes

    Huw

  25. alphabean
    24/03/2007 at 12:02 pm Permalink

    I used Java and learned struts framework.And found those xml based configurations were frustrating.Then I learned PHP framework like Cakephp but it does not seem well supported.I didn’t try rails because i didn’t want to learn another language.But now I shift to rails,and find ruby is a such powerful language that just I need.

  26. darshan
    05/04/2007 at 2:43 pm Permalink

    > > Unlike Perl 6, Ruby 1.9 and the new VM are in the public
    > > SVN and can be checked out and used /today/.

    > OK, so what’s the performance improvement?

    About 3.5x:

    http://www.antoniocangiano.com/articles/2007/02/19/ruby-implementations-shootout-ruby-vs-yarv-vs-jruby-vs-gardens-point-ruby-net-vs-rubinius-vs-cardinal

  27. spaceman
    10/12/2007 at 11:28 pm Permalink

    “Well, I don’t have the crashes anymore. Don’t ask me why, I don’t know, but it’s fine now, I swear! Something somewhere got fixed and it seems to have solved the problem.”

    This “I don’t know why, but la la la.” is what I hate about Rails developers. Their sites are going to break and not have the foggiest about how to fix them (if they’re like this fellow).

  28. Carl Mercier
    11/12/2007 at 12:42 am Permalink

    spaceman: Rails has gone a LONG way since this incident happened. That was almost 1.5 year ago.

    Rails doesn’t break, developers break things. As with any framework/language, good testing is a must.

    Rails errors are often hard to understand and/or completely irrelevant. It takes some time to get used to this, but once you’ve seen them a few times, it’s almost a no brainer.

    I’d still recommend Rails over Django. If you must absolutely go Python, web.py is an awesome little framework to look at. MERB for Ruby is also excellent for smaller apps.

  29. Jon R
    13/12/2007 at 6:59 pm Permalink

    You really should have tried Pylons (http://pylonshq.com/) instead of Django. Yeah, Django has all the press; it was invented by journalists. Pylons is still better.

  30. Puneet
    04/05/2009 at 9:31 am Permalink

    Nice, But I loved Django. I have tried Symphony which sucks like anything and Rails was little strange as I new python more then ruby.

    ~Puneet

  31. Johnathon WIlliams
    16/01/2010 at 7:06 am Permalink

    I use both these frameworks, and really, they are both excellent. Django is slightly better for content websites and Rails has the edge for apps, but overall I find them both heavenly compared to my Java . As for the ‘fun’ thing, I dont really agree. I prefer to see myself as a ‘Djanog person’ as Rails is like the Spice Girls come to web dev. The community is full of fanboy 16 yo’s who think they know everything. Go to a Ruby conf and you’ll see what im talking about.

  32. angel
    23/04/2010 at 11:19 am Permalink

    what ruby version did you use for the last project?…ruby 1.9??…ruby 1.9 w rails is not so slowly…(almost as fast like django or at least that is I hear about that…please comment and let me know..thanks and sorry for my poor english..I’m italian

  33. angel
    23/04/2010 at 11:20 am Permalink

    what ruby version did you use for the last project?…ruby 1.9??…ruby 1.9 w rails is not so slowly…(almost as fast like django or at least that is I hear about that…please comment and let me know..thanks and sorry for my poor english..I’m italian…

Trackbacks

  1. [...] 交流的启迪 今天和limodou的一段对话,有些意思,征得limodou同意,公开出来,希望能有所启迪: [08:35] myhat123: 看到一篇blog,http://blog.carlmercier.com/2007/01/30/why-i-moved-from-ruby-on-rails-to-pythondjango-and-back/ [...]

  2. [...] Why I moved from Ruby on Rails to Python/Django and back - Carl Mercier: “I am now at least ...

  3. [...] conforms to Carl Mercier’s entry on Why he moved from Ruby on Rails to Python/Django and back to RoR. ...

Hi Stranger, leave a comment:

ALLOWED XHTML TAGS:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe to Comments