• 0 Posts
  • 3 Comments
Joined 1 year ago
cake
Cake day: June 10th, 2023

help-circle
  • Venting again. The thing that pisses me off the most is how odoo refuses to adopt common practice and instead implements their own stuff:

    • Need an ORM? Well don’t expect odoo to use a battle tested and widely used library. Odoo implements its own, but good luck figuring out how to optimize a query.

    • Want a framework like React? Nope, we’ve got Owl — but only sometimes.

    • Want templates? Odoo uses its own XML dialect. That’s not really documented. Oh and XML is also the configuration language. Oh and about 40% of your codebase will be xml files with magic strings that at runtime magically call a python function. Because fuck you.


  • I’ve been developing on odoo for a couple of years for a project at work. The docs are horrible, especially for anything on the JS side of the house. Making relatively minor UI changes that are trivial with other frameworks become days long exercises in frustration. I can’t tell you how many unintelligible YouTube videos from Indian programming shops I had to watch just to do a simple task like add a modal dialogue.

    I get the feeling they started the project in 2004 and decided to build a web app. While the rest of the Python and JS ecosystem matured in other directions, odoo just kept doing whatever the fuck they wanted. The whole thing is a nightmare of esoteric XML dialects that are somehow mapped by the engine into a database transaction when the thing boots up.

    When I work on it, I tell my wife I am doing the “odoo doodoo”.


  • Really enjoyed the read. Thanks for sharing. I’m surprised by the random page implementation.

    Usually in a database each record has an integer primary key. The keys would be assigned sequentially as pages are created. Then the “random page” function could select a random integer between zero and the largest page index. If that index isn’t used (because the page was deleted), you could either try again with a new random number or then march up to the next non empty index.