Ruby Jekyll | HTML code correctness is entirely up to you. |
---|---|
(Lisp) Hyde | Partial validation is provided, all without getting in your way. Hyde only makes sure your HTML is syntactically valid, no semantic analysis is done. E.g. tag overlapping is not possible, because round brackets close tags and they are all the same: (i "Hyde has " (b "killed") " — Jekyll!") outputs <i>Hyde has <b>killed</b> — Jekyll!</i> There is no way to make up a string like this: <i>Hyde has <b>killed</i> — Jekyll!</b> other than printing it directly in HTML with Lisp, of course. Note attribute names and values are not checked, so you can use any non-standard or custom attribute on any tag. You are free to create your own HTML elements too. A Lisp macro called
Of course browsers know nothing of elements you invent. They just ignore them, unless it is a non-standard extension to HTML a browser recognizes. If you want to make a custom element look and function right, you will have to hook up some CSS and Javascript too. Tag nesting is not checked too. You still have to validate generated HTML pages against the W3C tools. Hyde does not even try to replace that. External files inclusions in Hyde work at the element level. You cannot have the same element generated by two or more different files, that is you cannot break an element among two or more files. Of course inner text and other nested elements can be generated from different files, that is you can divide an element's content among different files, but not the element itself. This is not a limitation, rather it is good for you. E.g. this means Jekyll does not allow you to have a start tag in a file and the corresponding eng tag in another file. Is that a good thing? Nope, if you look at both files singularly in your editor, their structure is not clear. Where does an element begins and where it does end? You have to open another file to see that! This can also be a source of layout bugs and bad HTML code, since you may forget to close a tag. |
Ruby Jekyll | You have to take care of XHTML compliance. |
(Lisp) Hyde | Full XHTML compatibility is provided effortlessly with a uniform syntax. E.g. (br) becomes <br /> instead of <br> , but (script :src "myscript.js") produces <script src="myscript.js"></script> . Hyde uses the same syntax for both void and empty elements, so that you do not have to think about it. |
Ruby Jekyll | Disk space required for static assets is double, and copying or updating of many or big static files may be slow. |
(Lisp) Hyde | There is only one copy for each non-generated static file. E.g. if a site has a lot of media files, Jekyll will make a copy of them inside With Hyde, you just add or update a single copy of each non-generated file and nothing else has to be done, because Hyde generates your site in the same directory it is served from. You can still publish the site via git or any other version control system. And if, for some reason, you do not want your source Moreover Hyde just ignores all static assets (e.g. CSS, JavaScript files), while Jekyll foolishly processes them looking for a valid YAML front matter as they were Hyde only processes |
Ruby Jekyll | The generator is an external program, not particularly easy to install and not really part of your site. |
(Lisp) Hyde | Each Hyde installation is lighter than Jekyll, easier to setup on both Windows, Linux or both and is bundled-in with your site. If something changes in new versions of Hyde that breaks compatibility, each site you develop with Hyde will still build, because it embodies and uses the same Hyde version with which it was made. You decide if and when to upgrade Hyde for each of your sites. By unpacking the Windows and Linux binary versions of Hyde in the same directory, you can even develop the same site on both OSs. |
Ruby Jekyll | Jekyll forces a layout on your site, you have to know and respect its conventions. |
(Lisp) Hyde | Hyde lets you free to organize your site's assets, layouts, includes (aka partial views), blog posts, etc. the way you see fit. Templates, includes and layouts are all the same thing in Hyde. Indeed they are implemented using the same simple, uniform mechanism: an You can always pair what you think should be paired. You are free to choose the names of your files and directories, create as many directory nesting levels and different conventions in each directory as you wish, in order to match your site logical structure. The only conventions Hyde enforces on you are quite simple and reasonable. First, a The latter contains a list of files and directory belonging to the current directory to exclude from the generation process. That's all. Initially there are no such files, so you get a simple empty document root to start with, just as if you weren't using Hyde at all. No need for a Hyde-bootstrap program like the Jekyll-bootstrap. |
Ruby Jekyll | Jekyll forces you to learn another syntax and another template language, named Liquid, and different from HTML. |
(Lisp) Hyde | Hyde uses a simple uniform syntax for both data (mostly HTML, but also data structures defined by you) and code. Hyde syntax is that of a powerful yet simple programming language: Lisp, which stands for LISt Processing. This syntax is just a simplification of the HTML syntax, so easier than HTML. With Hyde you actually write HTML at the DOM level, the same format you can see when inspecting an element with a browser (e.g. with Mozilla Firebug, the Chrome or Opera Inspect Element feature, etc), but instead of tags, you use parentheses, which are easier to type and are matched or balanced automatically by any smart editor. The wonderful thing is that you can embed any processing logic and code as it were data, using the same simple syntax, everything, including your processing logic, is like a tag, a function or markup if you prefer. E.g. a very common webmastering task is to generate the main navigation menu of your site. You usually do not want it to contain a link to all the HTML pages in your document root, but only to the main ones. And as the link text, instead of the actual title of the page, you want something shorter. In Hyde you can do this programmatically, using the powerful Common Lisp
That way you have a central place where you define your menu, e.g. at the top of the include or layout file that generates it. You can also avoid defining the constant +pages+ and put the list of links inline, in place of its name, that is inside the loop, near the code the processes it. To do exactly something like that in Jekyll is a pain in the ass, because of Liquid's limitations, and you have to restart Jekyll every time you want to add a new page. Here is another solution that does not force you to restart the Jekyll server, but unfortunately it is not very simple and forces you to group all pages in categories. This can be overkill for such a simple task of generating a custom main navigation menu for a simple site, so that in Jekyll you rather end up doing it in plain HTML, unrolling the loop with no code embedded. So Liquid restricts what you are allowed to do, it is not a complete programming language and that limits its usefulness. To overcome these restrictions, you have to learn yet another language, that is Ruby and develop Jekyll's plugins using Ruby's, which means you cannot embed powerful script code simply along with HTML, because plugins are a separate thing. To make things worse there are also other two minor markup languages in Jekyll, Markdown and Textile. IMO these lightweight HTML variants are misplaced here, where the main purpose is generating a static web site. Think about it: you are a webmaster and you already know HTML well and you probably need or will need some features that only HTML provides. So, why dabbling at other non-standard inferior markup languages? They can be useful in other contexts, but certainly not for generating full-fledged HTML sites. In Hyde, you only need to learn Common Lisp, only one language for everything, including HTML, and more! That knowledge will give you full scripting ability, anyway it is still only needed for advanced Hyde usage. Most non-programmers will be able to apply and edit generic Common Lisp recipes like the one above, code simple conditional forms and loops without a full understanding of the language. But if you want to learn Common Lisp and become a programmer too, everything you learn about it from other sources can be applied unmodified to Hyde. Moreover Common Lisp fully supports functional programming, which is simpler and safer than both procedural and object oriented programming techniques promoted by other languages. |
Ruby Jekyll | Offers no easy way to capture repeated patterns in my HTML code. |
(Lisp) Hyde | Gives you the full power of Lisp functions and macros. Another great advantage of working at the DOM level is that you can use functions and macros to modularize your HTML code. These are functions or custom tags you create that generate more complex HTML code. By using them, you type less, your HTML code becomes less boring, less error-prone, simpler and clearer. E.g. handling footnotes and references is a bit of a chore both in standard and plain Hyde HTML, especially if you have a lot of them as in an online book. A footnote looks like: and a footnote link like:
Here is a couple of function to make your life easier. Note how easy is to turn Hyde HTML code into a parametric function to generate it: it is the same code wrapped into a function definition.
These definitions can be put at the top of your Lisp file or, if you want to use them in multiple files, in a Lisp library file whose name is added to
|