Mewlo Web Framework Blog Entry #1 - August 12, 2013For my first entry in the Mewlo blog, it probably makes sense for me to discuss history and motivations.
I've been programming for 30+ years. My "native" programming language is C++, and I'm an unabashed proponent of object-oriented programming.
As much as I enjoy traditional application/desktop coding, more and more I find that the large project ideas I come up with involve creating custom "community" web sites and services -- that is, services where users sign up and create accounts and profiles online, create and share projects and interact with one another.
The primary roadblock to creating a novel, custom community website, is building the "boring" foundational structures to support the site. The user and group accounts, the infrastructure to deal with spammers and logging, moderators, performance issues, etc.. There is an absolutely
astounding amount of foundational work required to build a non-trivial community website -- in fact this foundational code vastly exceeds the "custom" new code that one would write for most custom sites.
This foundational code is not just massive in size, but is full of difficult design decisions that effect efficiency, maintainability, and extensibility. It's code that is frequently implemented poorly in custom sites precisely because its the "boring precursor" work, not the heart of the new interesting ideas being implemented. It's code that gets reinvented over and over and over again on the web.
Now, there are a great many web "frameworks" and extensible content management systems in active development, and these frameworks are attempting to provide SOME of this common infrastructure.
Unfortunately, I have not found anything in existence which I have felt really good about using.
That is not to say that there aren't some truly excellent frameworks available. The closest to my interests is probably
Django, but
Pyramid (also Python) is another strong choice. Php also has some strong contenders, like
Drupal (a content management system but also arguebly a web framework), CodeIgniter, and
Yii (which I was so fond of that I used as the starting point for my first version of this project). I'm less familiar with the Java, C#, and more esoteric frameworks. And of course there is
Ruby on Rails.
It's not that these frameworks aren't excellent -- it's that they have different philosophies and different goals. For the most part they are designed to be general purpose web frameworks that could be used to produce any kind of web service. And because of that, the user/group/moderator stuff does not get treated as a first-class concern. Such features are relegated to multiple competing plugins and addons, which are often out of date and don't work well with each other. Or they go too far in the other direction, and are primarily content management systems that are designed for non-coder administrators.
What I have in mind is a framework that is somewhere in between these all-purpose lower-level web frameworks on one end, and dedicated content management systems on the other.
Furthermore, my experience using frameworks and libraries has taught me that if you are coding something where the library can be used without modification, then it can be a huge time saver. But as soon as you need to make changes to the framework/library to bend it to get it to do things it wasn't strictly designed for, you pay an enormous cost in terms of code maintenance effort and code clarity.
There is a real benefit to starting from scratch and building a framework with a singular vision and focus and consistency. While the initial coding task is huge -- I believe there is a very real potential reward in terms of producing a framework that is better designed to solve this particular program -- providing the foundational infrastructure for custom user-driven community web services.
I also know from experience that even when there are some good existing tools, as a project matures it tends to find a useful niche and naturally differentiates itself from the alternatives. I am confident that over time, a new web framework like the one I am describing would find a place for itself separate and apart from the other web frameworks.
Creating such a large project from scratch, and being able to control exactly how things are structures and organized, is one of the most enjoyable things a programmer can be involved in. A good part of the motivation for working on this project is the pure enjoyment of that.
As a programming project -- this is a huge challenge and a giant project. This is the second time I've actually started working on it. The first time I started was about a year or so ago, under the name "
Yumps", written in PHP.
For the last month or so I have restarted the project, this time in Python, under the name "Mewlo". I don't love Python -- but I think it's currently the best choice for a large web framework (one of the aims of this project is to create not just the code base for this framework, but the object structures and API so that it could be ported to a new better language in a few years).
I have created a GIT open source code repository for the Mewlo project and have begun uploading code there (see
this thread for more info and links).
What I would really LOVE to do is find some more serious Python coders who are interested in being part of the team creating this. It's a huge project and it's going to need all the help it can get.
In the next blog entry I will talk a little about the organization and structure of the Mewlo system as I currently envision it.