Thursday, February 17, 2011

Trac and closed source

I'm working on a closed source (for now) project that I'd like to write a wiki and ticket system about. Trac has a well-integrated wiki and bug/issue-tracking system, and has good integration with Subversion. Webfaction offers Subversion, Trac and a whole lot of programmer-friendly options in a web host. So I'm seriously thinking of using Trac for my project.

One thing concerns me though.

How secure is Trac when I remove permissions to view the sources from various Trac groups? Is there a significant chance that any closed source hosted in the linked Subversion instance would leak out through Trac?

Any of you used Trac for closed source before? What were your experiences?

From stackoverflow
  • I'm actually using a Track /Subversion setup through Webfaction for a closed-source project. The configuration of Trac is really just a front end for Subversion, so ultimately it will be dependent on Subversion's security (e.g. the .authz file).

    A plugin (nothing more than a front end) that will help you in your journey of security configuration:

  • Im using the same setups and the solution i am using is to host the trac as a subdomain - trac.mysite.tdl and svn.mysite.tdl then simply use .htaccess and .htpasswd to secure both of these subdomains to known users.

How can I make a non-programming person recognize a good programmer?

Let's assume that I would be a good programmer and I knew that my (non programming) customer will have to decide between me and a competitor. Let's say that I, as an experienced programmer, would obviously see that my competitor is inexperienced and trying to fool the customer with some nice presentations or an expensive suit.

And here is my problem: How can I empower my customer with the aibility to distinguish between a good and a bad programmer? What can I tell or teach him to be able to look a bit behind the scene?

Same problem, other situation: The nice guy from HR has to hire some programmers on his own. How can I brief him?

Here some solutions that seem obvious, but do not work well:

  • Tell the HR guy to send the best 10 candidates to me. (Changing the assumption -- "non programming person" -- is a solution, but not to this problem.)
  • Give the customer 5 questions he should ask the competitor. (Bad style and the customer still has no clue.)
  • Teach the customer how to code. (errrr ... try again please)
From stackoverflow
  • For the latter question: let him explain something. For instance polymorphism or inflexion.

    A good programmer should be able to explain it to a person without any programming skills.

    Nicholas : I'll agree that it might be an okay way to weed out bad programmers, but it isn't exactly a benchmark for "good programmers". I know a few programmers that could explain polymorphism to my grandpa, but that doesn't translate to the quality of their work.
    Jonke : I know people that are good at teaching "generic" programming but they can't write a single line in real application. (Hello World is not a real application).
  • Short answer: You can't. At least, not until you define a "good programmer".

    Without that clarification, I'll take a page from Joel's book and say that the primary qualities of the programmer are pretty easy for a non-programmer to measure: Smart, and gets things done.

    Jonke : I agree but I would like to have "Done, and get things smart" if I can choose.
    MrFox : "getting things done" is hard to decide in the situations above
    Nicholas : MrFox: as a HR hiring rep? I'd hope not.
  • This is a perfect situation when Marketing skills come in handy. This is exactly one of the reasons good programmers need good marketing skills. Otherwise marketers will win. And precisely because marketing is understandable to the layman that we need to compete on that ground and not on programming alone.

    Jeff had a great post about his that came from Steve Y's great speach about this

  • Tell your non-expert that if this guy walks through the door, give him a job.

    S.Lott : Depends on the job. I've read interviews with Knuth and he doesn't seem focused. He might follow his gut and instincts a little too much. Great if you're hiring someone to invent fundamentally new kinds of apps. Maybe not so good for shipping product on schedule.
    Ali A : Yeah, I agree, I was just trying to be funny.
    Ali A : (a deadly game on s.o.)
    Ken Liu : that guy doesn't even use email. http://www-cs-faculty.stanford.edu/~knuth/email.html
  • In my experience there really isn't a way that you can make a non-programming person realise that your competitor is worse then you, because no matter what you say, the customer has in the back of their mind the fact that you are trying to get the same work as your competitor and that is going to colour their judgement of whatever you say.

    In my experience it is better to simply show the customer your past record of successes vs your competitors past record and then encourage them to ring former clients of both you and them and get their opinions.

  • Just like Nick Baldwin wrote, a non-programmer can't evaluate someone's technical skills and that's why we around here always have some kind of technical expert for interviews.

    S.Lott : Here's a suggestion -- vote up the answer you like. Add comments. But repeating the answer you like can be seen as a waste of time.
    t3mujin : I took Nick's answer to add my own experience: in my company there's always someone with a technical background in interviews.
  • The customer is a person who doesn't need to know if you are a very good programmer. He has a problem and you can help him to fix it...and that's it...if you try to explain him that you are best than your competitor hi won't care! Hi just wants his problem fixed...

    Now you need to convince the customer that you are offering the best solution to his problem and that you will help him to decide what's best for him and his business...if you can do this without mentioning any technologies or languages or frameworks that maybe the customer will pick you.

  • I think you need to describe the qualities that set a good programmer apart from the rest: good communication skills, attention to detail, ability to describe problems from different perspectives, knowledge of business, ability to organize.

    If you think of it, the process of running a SCRUM meeting would be good description of the organizational skill that a programmer possesses. How would the programmer describe a problem that they are encountering, and how is this affecting his / her schedule. Furthermore, can these descriptions be described in business language and with analogies? The mark of a facile mind is one that can switch gears and still communicate.

    On the skill front, when you describe good programming skill to a potential customer, what are those things that make a good programmer? How do design patterns help? How does in depth knowledge of a related system bring dimension and breadth to a developers experience.

    Finally, does the developer have a blog? Maintaining a blog can speak to the level care one takes when maintaining skills.

  • It's all about trust. Does your customer trust you and ask for your opinion? Does HR trust you?

    If they don't trust you, you can't make them or empower them or influence them at all.

    If they do trust you, then your opinion will be of value and you now have the real problem of getting them to ask for your help in choosing a programmer.

    I interview programmers by the dozen. I suspect it isn't because I've got great questions or some profound insight into the programming mind. I interview programmers because my opinion is trusted.

    If you opinion isn't trusted (or isn't trusted enough), what's wrong with your relationship? What aren't you doing? What could you do more of, less of or differently to improve the level of trust.

    Here's one theory: lack of trust can be mutual. Perhaps you don't trust them to do the right thing and it shows. Because you don't trust them, they don't trust you.

  • A couple of people have mentioned things like "define a good programmer".

    A Good Programer is more than the sum of his parts. He will know multiple languages in several disciplines and knows how to use several of them together. He will also know how his skillset interacts with others in a team (e.g. to the DBA or the webmaster) -- he may in fact have the skills to be those other people to some extent. Moreover, he will be able to speak about his experience and achievements using these skills from a position of authority and modesty. A HR person should be able to recognize both of these.

    The other way to answer your original question is that they have to watch someone who knows what they are doing pick good programmers from not good programmers, being aware that this is the skill they are being asked to learn.

  • Show the non-programmer something that will dazzle him, a small demo of a killer application (something very fancy) always gets the job done.

    Edit: if you don't have any killer apps, the you gotta ask yourself if you really are better than the competition. ( Customers want good applications, not bad ones that have great code in them ;-) )

  • Your question is sort of like asking, what makes a good President?

    The answer turns out to be the same as well. Most likely a person is going to be good at a specific task if they have an interest in the job at hand, experience, a good work ethic, can communicate, and are intelligent. While all those are very general qualities and do little to identify the specific toolset that a programmer might need, they certainly lay the groundwork for the ability to learn and comprehend specific areas like programming.

    You can't inform others about the specific qualities of a complicated domain (i.e. programming) without at least knowing that they know something about the domain. So the most logical thing to do is rely on the thing people have been doing for generations: judge the overall qualifications of the candidate.

  • This is where being able to articulate your accomplishments come in handy. Explain in detail, but in a fashion that is understandable to non-technical folks what projects you've been a part of, your part in the project, what you did, and why what you did was so great.

    When you're trying to sell your self (in an interview or trying to land a contracting job), the interviewer knows that you are directly competing with other people. You saying "I am better than the other guy" or "the other guy stinks" means nothing to them, because you are competing with the other guy and the interviewer expects you to compare yourself more favorably to your competition.

    But if you are truly a good programmer, your accomplishments will be more impressive than your competition's accomplishments and the interviewer will take notice.

  • Don't compete with your competitors on direct technical skills. While they're burbling on about ASP.NET or whatever, you can explain how you would add real value to the business.

    In other words, cut out the technical muddle and go direct to the business problem.

  • A good portfolio of your past work can do most of the talking for you. It has worked for me on a couple of occasions, and I think to a non-programmer, seeing might be believing - if what you show is genuine and good.

  • One thing I've done in the past to help a non-programmer manager in the hiring process is to set up a short test covering some of the fundamentals I'd expect a "good programmer" (for that particular role) to be able to cover pretty easily.

    It worked surprisingly well - some people interviewed well, but bombed in the (not too difficult) test. Some interviewed so-so, but blitzed the test.

    When faced with two people who both interview well, when one scores 5/25 and the other scores 23/25, you know who you're going to more inclined to offer the job to..

    I know it's far from perfect, but it's actually worked so well for me that I'm now disappointed when I go to job interviews and they don't test me in any way. In fact, in almost 10 years in my industry I've never been tested in any way, shape or form when applying for a new job.

Best practices for refactoring classic ASP?

I've got to do some significant development in a large, old, spaghetti-ridden ASP system. I've been away from ASP for a long time, focusing my energies on Rails development.

One basic step I've taken is to refactor pages into subs and functions with meaningful names, so that at least it's easy to understand @ the top of the file what's generally going on.

Is there a worthwhile MVC framework for ASP? Or a best practice at how to at least get business logic out of the views? (I remember doing a lot of includes back in the day -- is that still the way to do it?)

I'd love to get some unit testing going for business logic too, but maybe I'm asking too much?

From stackoverflow
  • Is there any chance you could move from ASP to ASP.Net? Or are you looking at keeping it in classic ASP, but just cleaning it up. If at all possible, I would recommend moving as much as possible moving to .Net. It looks like you may be rewriting/reorganizing a lot of code anyway, so moving to .Net may not be a lot of extra effort.

  • There are over 200 ASP scripts in the project, some thousands of lines long ;) UGH!

    We may opt for the "big rewrite" but until then, when I'm in changing a page, I want to spend a little extra time cleaning up the spaghetti.

  • Since a complete rewrite of a working system can be very dangerous i can only give you a small tip: Set up exuberant tags, ctags, on your project. This way you can jump to the definition of a function and sub easy, which i think helps a lot.

    On separating logic from "views". VBScript supports som kind of OO with classes. I tend to write classes which do the logic which I include on the asp-page which acts as a "view". Then i hook together the view with the class like Username: <%= MyAccount.UserName %>. The MyAccount class can also have methods like: MyAccount.Login() and so on.

    Kind of primitive, but at least you can capsulate some code and hide it from the HTML.

  • Presumably someone else wrote most or all of the system that you're now maintaining. Look for the usual bad habits (repeated code, variables that are too widely scoped, nested if statements, etc.), and refactor as you would any other language. Keep an eye out for recurring things in the same file or different files and abstract them into functions.

    If the code was written/maintained by various people, there might be some issues with inconsistent coding style. I find that bringing the code back into line makes it easier to see things that can be refactored.

    "Thousands of lines long" makes me suspicious that there may also be situations where loosely-related things are being displayed on the same page. There again, you want to abstract them into separate subroutines.

    Eventually you want to be writing objects to help encapsulate stuff like database connectivity, but it will be a while before you get there.

  • Assumptions

    The documentation for the Classic ASP system is rather light.

    Management is not looking for a rewrite.

    Since you have been doing ruby on rails, your (VB/C#) ASP.NET is passable at best.

    My experience

    I too inherited a classic ASP system that was slapped together willy-nilly by ex excel-vba types. There was a lot of this stuff <font size=3>crap</font> (and sometimes missing closing tags; Argggh!). Over the course of 2.5 years I added a security system, a common library, CSS+XHTML and was able to coerce the thing to validate xhtml1.1 (sans proper mime type, unfortunately) and built a fairly robust and ajaxy reporting system that's being used daily by 80 users.

    I used jEdit, with cTags (as mentioned by jamting above), and a bunch of other plugins.

    My Advice Try to create a master include file from which to import all the stuff that's commonly used. Stuff like login/logout, database access, web services, javascript libs, etc.

    Do use classes. They are ultra-primitive (no inheritance) but as jamting said, they can be convenient.

    Indent the scripts properly.

    Comment

    Write an external architecture document. I personally use LyX, because it's brain-dead to produce a nicely formatted pdf, but you can use whatever you like. If you use a wiki, get the graphviz add-in installed and use it. It's super easy to make quick diagrams that can be easily modified.

    Since I have no idea how substantial the enhancements need to be, I suggest having a good high-level to mid-level architecture document will be quite useful in planning the enhancements.

    On the business logic unit tests, the only thing I found that works is setting up an xml-rpc listener in asp that imports the main library and exposes the functions (not subroutines though) in any of the main library's sub-includes, and then build, separately, a unit test system in a language with better support for the stuff that calls the ASP functions through xml-rpc. I use python, but I think Ruby should do the trick. (Does that make sense?). The cool thing is that the person writing the unit-test part of the software does not need to even look at the ASP code, as long as they have decent descriptions of the functions to call, so they can be someone beside you.

    There is a project called aspunit at sourceforge but the last release was in 2004 and it's marked as inactive. Never used it but it's pure vbscript. A cursory look at the code tells me it looks like the authors knew what they were doing.

    Finally, if you need help, I have some availability to do contract telecommuting work (maybe 8 hours/week max). Follow the link trail for contact info.

    Good luck! HTH.

  • My advice would be to carry on refactoring, classic ASP supports classes, so you should be able to move all everything but the display code into included ASP files which just contain classes. See this article of details of moving from old fashioned asp towards ASP.NET

    Refactoring ASP

    Regarding a future direction, I wouldn't aim for ASP.NET web forms, instead I'd go for Microsoft's new MVC framework an add-on to of ASP.NET) It will be much simpler migrating to this from classic ASP.

    nocache : or since you are familiar with RoR, then you should look into Castle Monorail as an alternative to Microsoft ASP.NET MVC. They are both quite mature now, but Monorail was there first, and it integrates nicely with the Castle ActiveRecord implementation, so it might be easier to pick up and the Microsoft MVC stack.
    Tristan Havelick : The author of this answer should disclose that he is the author of the pay-to-view article he links to here. For $8, it doesn't cover much of anything you won't find in Fowler's book, or Feather's.
  • I use ASPUnit for unit testing some of our classic ASP and find it to be helpful. It may be old, but so is ASP. It's simple, but it does work and you can customize or extend it if necessary.

    I've also found Working Effectively with Legacy Code by Michael Feathers to be a helpful guide for finding ways to get some of that old code under test.

    Include files can help as long as you keep it simple. At one point I tried creating an include for each class and that didn't work out too well. I like having a couple main includes with common business logic, and for complicated pages sometimes an include with logic for each of those pages. I suppose you could do MVC with a similar setup.

  • This is very old, but couldn't resist adding my two cents. If you must rewrite, and must continue to use classic ASP:

    • use JScript! much more powerful, you get inheritance, and there some good side benefits like using the same methods for server-side validation as you use for client-side
    • you can absolutely do MVC - I wrote an MVC framework, and it was not that many lines of code
    • you can also generate your model classes automatically with a bit of work. I have some code for this that worked quite well
    • make sure you are doing parameterized queries, and always returning disconnected recordsets

Message Driven Bean with a Datasource

My question is how do I configure an EJB 3.0 style message driven bean to use a configured JMS datasource in jboss.

For example, my MDB looks something like:

@MessageDriven(mappedName = "ExampleMDB", activationConfig = {

        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "MyTopic"),
        @ActivationConfigProperty(propertyName = "channel", propertyValue = "MyChannel"),

})
@ResourceAdapter(value = "wmq.jmsra.rar")
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@TransactionManagement(TransactionManagementType.BEAN)
public class MyMDB implements MessageListener {
 .....
}

But I would like the bean to attached to a given JMS datasource ( in the case of jboss 4.2.2 this is in deploy/jms/jms-ds.xml). Perhaps this is not even possible but is worth asking.

From stackoverflow
  • If I understood your problem correctly, MyMDB listens to a topic on WebLogic, and you want to use an additional JMS destination provided by JBoss, defined in a deployed configuration file and identified by its JNDI name (by default, deploy/jms/jms-ds.xml only contains the configuration for the JMS provider and connection factories -- no data sources).

    The easiest way is to let the container inject the JMS destination and a connection factory via its JNDI name (in JBoss the JMS destinations are configured by deploying xxx-service.xml files). On startup you can then initialize the connection, and perform cleanup as soon as the MDB is released.

    The following examples shows injection (@Resource) and resource managemend (@PostConstruct and @PreDestroy). The JMS connection and destination is used in useJmsDestination(String) to send a text message.

    public class MyMDB implements MessageListener {
    
     @Resource(mappedName = "queue/YourQueueName") // can be topic too
     private Queue targetDestination;
    
     @Resource(mappedName = "QueueConnectionFactory") // or ConnectionFactory
     private QueueConnectionFactory factory;
    
     private Connection conn;
    
     public void onMessage(Message m) {
      // parse message and do what you need to do
      ...
      // do something with the message and the JBoss JMS destination
      useJmsDestination(messageString);   
     }
    
     private void useJmsDestination(String text) {
      Session session = null;
      MessageProducer producer = null;
    
      try {
       session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
       producer = session.createProducer(targetDestination);
       TextMessage msg = session.createTextMessage(text);
       producer.send(msg);
      } catch (JMSException e) {
       throw new RuntimeException(e);
      } finally {
       try {
        if (producer != null) {
         producer.close();
        }
        if (session != null) {
         session.close();
        }
       } catch (JMSException e) {
        // handle error, should be non-fatal, as the message is already sent.
       }
      }
     }
    
    
     @PostConstruct
     void init() {
      initConnection();
      // other initialization logic
      ...
     }
    
     @PreDestroy
     void cleanUp() {
      closeConnection();
      // other cleanup logic
      ...
     }
    
     private void initConnection() {
      try {
       conn = factory.createConnection();
      } catch (JMSException e) {
       throw new RuntimeException("Could not initialize connection", e);
      }
     }
    
     private void closeConnection() {
      try {
       conn.close();
      } catch (JMSException e) {
       // handle error, should be non-fatal, as the connection is being closed
      }
     }
    }
    

    I hope this can help you.

  • I think what you are asking is "How do I specify the JNDI location of the JMS datasource to use for an MDB?"

    In which case the answer is:

    @ActivationConfigProperty(propertyName = "providerAdapterJNDI", propertyValue = "java:/DefaultJMSProvider")
    

    Also, take a look at the following page which provides loads of useful details on configuring MDBs in jBoss: http://www.jboss.org/community/docs/DOC-9352

How do I export a CSV from Access?

Hello,

I am trying to import an access database to mysql. I have created a mysql database, but do not want to use all of the colums in the access database. Is there a way to export only certain colums from the access database to csv?

From stackoverflow
  • 1) Make a query on the table with only the columns you want, and save it.
    2) Select the query, and then got to File->Export (Select Save As "text *.txt, *cvs, etc.") and follow the prompts

Is it worth switching from Visual Studio 2005 to Visual Studio 2008 ?

As a team we are using Visual Studio 2005 with framework 3.0. I am thinking if it will be nice for us to switch to Visual Studio 2008 with framework 3.5 ? Is it worth it ?

Thanks.

From stackoverflow
  • Yes, it is 100% worth it. Visual Studio 2008 supports 2005 code (.net 2.0) completely. There are also a lot of improvements that you'll enjoy as you use 2008.

    Marc Gravell : Actually it targets 2.0 SP1 (and similar for 3.0), meaning you can get into issues if you aren't careful. But I agree completely: make the switch!
    korro : "Yes it is worth it, there are a lot of improvements". That's really all the arguments you need??
  • 100% worth it, agreed.

    Also switching to 3.5 with new projects (or easy to migrate ones) will help a lot with productivity. Even it you don't use features like LinQ.

    Object Initializers and Automatic Properties will make your life much easier.

    Also as said before, you can still develop 2.0 projects with VS 2008, so switching won't hurt at all. There have been some improvements in the Webdesigner space, especially with Javascript Syntaxhighlightning etc..

  • Thanks for your answers; They helped me.

    Thanks.

  • Multi-Targeting support (utilization of Dev Studio 2008 for all .Net project, without having to convert them)
    Refactor (Productivity tools / Macro )
    Unit Test (Pro only)
    Better Web Designer with improve Editing and CSS Support
    CSS Source View Intellisense
    Transparent Intellisense (don’t hide code behind)
    ASP.NET AJAX
    JavaScript support with Intelissense
    JavaScript Debugging
    Windows Presentation Foundation (WPF) Designer LINQ (Language INtegrated Query)
    Object Relational Designer (O/R Designer)
    Better debbuging capabilities (Multithread, script, LINQ, WPF)
    Debug Remote process, SQL Debug, XSLT Debug (Professional version only)
    New reporting tool (with PDF support)
    Crystal report new feature (also ASP.NET) (Pro version only)
    Community help (comment added by user in online help)
    ClickOnce Deployment enhancement (setup)
    Better Vista support
    Office support (Pro version only)
    Many tools for smart device (Pro version only)

    With Dev Studio 2008 SP1

    Support for Smart Device Occasionally connected Application
    Power Packs Controls and components
    Printer Compatiblity Library (use VB6 report without rewriting them)

    Sources:

    http://msdn.microsoft.com/en-us/library/bb386063.aspx#Original

    http://msdn.microsoft.com/en-us/vstudio/products/cc149003.aspx

  • Even if you can't use .NET 3.5 yet, the C# 3.0 language features (especially if you use LINQBridge) are well worth it. It also has better support for WCF etc (since you mention 3.0 - this is a kludge in VS2005).

    Add to that the IDE improvements, and it is a no-brainer IMO.

  • The intellisense for C# is much improved

  • yes it is. works faster and more reliable

What do you like about Django?

I started to learn Django a few days ago, and as i dive into it it seems that I'm starting to like it even more.
Trying to migrate from other language. I won't say which one, as the purpose of this question is not to bash anything.

So i would like to know your opinion about Django.

What do you like about it?
What made you switch/use it?
What features you would like it to have that aren't there?
What would make you switch to it?
How fast is it in production?
How hard is it to master it?

From stackoverflow
  • What do I like about it :

    • Very simple ORM
    • clear separation of template / controller
    • django-admin
    • pluggable apps : it seems to me that the Django community really nailed that one !

    What made me switch :

    • mainly curiosity
    • I heard a lot of good things about it from a colleague
    • I wanted something more lightweight than the Java I do for a living
    • I had a side project heavily data-driven for which the Django-Admin interface is very useful

    What features I'd like :

    • better / simpler control of the transactions (configuring different types of transactions (read only / read write / some tweaking here and there) isnt as easy as i am used to. Having a session in view model, where the transaction is still open in the view doesnt make me all that comfortable, I would prefer if the transactions didnt leave a service layer. But again, there isnt really a service layer in the Django model.
    • better model for business logic (maybe that's just me, but I miss the service oriented approach of enterprise java, I never know if I should put the business logic in the view, in the form or in the model. None of those solution make me feel warm and fuzzy ... at the same time, I dont have heavy business logic in the application I develop for the moment, and I would probably still use Java for those)
    • stability (in the sense of not changing, not in the sense of not crashing). Again, coming from Java, where I'm still working on Java 1.4 for a lot of projects, having a project that just released 1.0 and all the refactoring that went with it is not very reassuring. It did take some work to follow trunk and using 0.96 was not particularly compelling. I dont think I would feel comfortable to use it on a mission critical enterprise project yet.

    I realize that there is quite a few improvements that I would like. Dont understand me wrong, I love Django and I will stick to it for a lot of projects. I jsut wont put it everywhere yet ...

  • What do you like about it?

    URL dispatching: I was never a big fan of "/foo.php" is the file "foo.php" on my server, and if I want nicer URLs I need to mess around with mod_rewrite and keep that in line with what my logic in foo expects.

    ORM: Because 90%+ of your queries, in my experience, do not need to be written by hand. Smart caching is much more important for performance, in general. You can always drop to raw SQL as needed.

    Middleware and Signals: Easy to extend most parts of the request / response / view / render cycle without touching Django code itself.

    What made you switch/use it?

    It came out when I was disappointed with the Python web framework offerings. An easy sell for me.

    How fast is it in production?

    Hmm, to be honest, I've never cared too much. The webserver part of your app is (in my opinion) always the easiest to scale. As long as you use 'best practices' and share nothing, all you need to do is add a software load balancer and you can add new webservers until the cows come home. The first bottleneck people generally hit is database load - but Django gives you great caching APIs that help you alleviate that.

    That said, I only skimmed this but it seems faster than Rails and the well known PHP frameworks: http://wiki.rubyonrails.org/rails/pages/Framework+Performance

    How hard is it to master it?

    I guess it depends how you define 'master'. The documentation is great, over the course of a decent sized site/app I think you'll use a little bit of everything, which is a great start.

    daniels : "URL dispatching" i love it too
  • I haven't had had the opportunity to use it much. That said, my absolute favorite part of django is the built in administration console.

  • Likes

    The excellent Documentation. Together with help from stackoverflow I have learned a lot in only a few days. It writting in Python. It has the wonderful contrib.admin which is even modular and extensible to embed it into the web app proper.

    Dislikes

    None so far. I am still enchanted

    Switch

    Its my first web framework, so no switch. After using Python for some years Django seemed the natural selection to me, mainly for its clean design.

    TomA : Indeed, without the top-notch documentation Django would not be quite as attractive.
  • What do you like about it?

    • the templates, specifically the inheritance feature, was amazing after dealing with jsps
    • not having to write sql anymore

    What made you switch/use it?

    A friend had been following its progress before it was publicly released, and I've been using it for personal projects ever since.

    What features you would like it to have that aren't there?

    I realize this isn't a trivial problem, and I think Google summer of codes have been spent on this, but I would like to see better ways to evolve the db (which rails seems to do a pretty good job of).

    What would make you switch to it?

    I already use it at home, and I don't make those decisions at work.

    How fast is it in production?

    I've never run into issues, though for the most part django seems to stay out of the way, so performance seems based more on python or the db.

    How hard is it to master it?

    The documentation is pretty amazing, and enough people use it that answers are often available when that doesn't help. Additionally, when I've had to go into the source code, its been clean and documented as well, so I would say its easier to master than most frameworks, web based or otherwise.

  • Likes:

    • Pythonic (I can easily grok the language) and thus extend any part easily
    • Documentation,
    • community (I belong to the french one and they're very nice)
    • a full load of projects around it
    • full-integrated test engine. You can almost test a whole application without firing a web browser, just by writing tests.
    • the custom commands just rock. It allows you to perform custom tasks very easily, in a snap. I often use it to run batch tasks (cleanup a database, for example, or check for integrity on a production server - tests use their own database, not the actual data in your application).

    Why switch?

    • got bored of PHP-from-scratch.
    • had a RSI at the back of my hand, very painful. after switching to a semicolon-free language, it vanished (it's TRUE!)
    • much more solid developpement (TDD), and faster (you can buid a CMS in minutes) - as many other web framework, though.

    Dislikes:

    • no smooth data model migration. You often have to change your model because of an unexpected feature. That is painful, and you have to build it by hand, and it may be risky sometimes.

    How hard to master?

    • If you already have Python skills, you can build up things in a few hours.
    • If you don't, first dive into Python (heh) - that'd take a few days.
    • "Mastering" it may take some time... And you often discover gems in Django documentation that will make you yell "I love Django!" (well, it works for me)