About a week back I wanted to open source a few jQuery plugins that I use for one of my projects. After going back and forth several times, I decided on github because of the bigger community. GitHub’s pages feature also made it easier for me to make that decision.
Jekyll is a really nice static website generator built by one of the git-hubbers. I started using Jekyll only to find that Liquid, the templating language used by Jekyll was not to my liking at all.
Granted, I have been severely spoiled by Django, which is incidentally the original inspiration for liquid.
Looking for Djekyllango
So I started looking for the best of both worlds and came across three options:
- Roll my own: I found this nice article on how to run Django components in a standalone mode.
- Static Generator: Static generator is a clever Python class for Django that creates static files for performance.
- Aym CMS: Will Larson had a similar need and had started and got a CMS working successfully. Unfortunately, by the time I found out about this, I had already started going down option 1.
The Roads Not Taken
Hard ones first, option #2 was out. This option meant either I hack the code to force generate the site or make http requests to generate the static pages before hand. This seemed to be more complicated than the other options.
Aym CMS seemed complete and was successfully doing the site generation. So I started using it. But I did find a few issues:
- No extensive multi directory support. I am a OCD code organizer. If files are not grouped I cannot think.
- The site generator and site were essentially the same. Understandable since it was just a single build file. Again my OCD played up and I wanted to change that.
- The odd bug: There was a weird glitch where my css files were being ignored. This was probably because I was mucking around with the directories.
- No page context: This is actually a Django issue. I cannot provide my base page parameters. Aym-cms has a global context which is populated and accessed sequentially based on the Django template loading scheme. There is no page context where per page there could be some variables that are avilable to the entire template hierarchy of the page. For dynamic websites this is a non-issue, since you can always make a database call to get what you need. But for static generators, this is a deal breaker. This significantly ties down the all powerful Django template hierarchy.
- I also wanted to generate site navigation, listings etc.
All in all, while there was a lot of value in aym_cms, it was not right for me as it stood.
So with my tongue firmly lodged in my cheek, I christened my new project Hyde. Since I was going to be using some of the aym_cms code, template tags, clever css, yui compressor, I thought the right thing to do was to fork the project from aym_cms.
An aside: This is my first foray into the world of open source. If I am
breaking any unwritten rules do let me know.
This is the feature set I targeted three days back:
- Page Context
- Separation of generator from the site
- Modular design with plugin hooks
- Site templates
- Per item processing(required for #6)
- Run as daemon / web server polling for changes and auto deploying on save.
Today, I am happy to say that items 1 - 4 are complete and the site you are looking at has been generated using Hyde. Over the next few weeks I will try to get 5 and 6 done, while improving the performance of the application.
I have also open sourced the code for this website in order to be lazy and work on the default site template later.
There are quite a few plugins and services I would like to create / integrate including the ones mentioned on the aym-cms site:
- Get Satisfaction / User Voice
I also want to get cherrypy integrated so that a webserver can be spawned to test the site urls.
Fork me over
If this project fills your need and would like to contribute please do fork and push your changes on github.