ejdraper.com - Elliott Draper

Announcing: Feather

Tags: blogging feather merb mike plugins ruby

So after a few weeks of teaser posts, we’ve finally opened up the code on the software that powers this very blog, Feather. It’s been a collaborative effort so far between me and my boy Mike, but now it’s time to open source it, and hopefully people besides us will not only find a use for it, but will also find new ways to extend and improve it.



So what’s in the current codebase? As alluded to before, the core itself is lightweight. Basic article posting, and user management is all you’re really getting. The beauty is in the wide variety of plugins that are (and will be) available to extend the software further. Within a separate plugins repository, there are currently twelve plugins, that extend Feather to provide comments for articles, feeds, formatters for article content (Textile and Markdown), basic RSS importing for articles and comments, integration with ping services, the ability to setup hard-coded redirects on your site, sidebar and snippet content, overridden css styles, tagging, Twitter integration (to display your tweets in line with blog posts), and file uploads. The code in core and for these plugins probably isn’t perfect, but it’s good enough to power a few blogs already - and improvement is where you come in.



If you’ve got an idea for a new plugin, improvements to existing functionality, or you’ve found a bug, then by all means fork the project on GitHub, implement your code, and send us a pull request so we can merge the changes into the main trunk. Alternatively, send us your patch via e-mail, and we’ll look to include it within the application. If you submit two patches to either feather, or feather-plugins, then you’ll be given commit access to the repository in question, and will effectively become part of the core team. So what needs doing right away?



The biggest deficiency at the minute are specs - there are some specs in the core code, but it doesn’t cover a lot of the application, and ideally we’d be aiming for 100% coverage of the core controllers and models. We then need to devise a decent way of similarly shipping specs with plugins. When we start updating and improving plugins, we’ll need a way of handling data migrations smoothly and efficiently. On top of this, there are still outstanding useful plugins that need to be written, such as content search, and trackbacks, as well as integration with services other than Twitter. Lastly, there are bound to be bugs, so roll up your sleeves and fix them, it’ll be much appreciated!



We’ll be rolling out a Feather website soon, along with an official plugin directory to make installing plugins easier - for now, there’s a basic getting started page on the wiki over at GitHub, and there will be more information over the coming days on both mine and Mike’s blog. Any questions in the meantime, then let me know.



Other than that, what are you waiting for? Get your Feather on!


Comments

Leave a response

  1. Michael LeungApr 26 08 @ 03:44AM
    Congrats bro! Great work on getting Feather ready for public consumption!
  2. Alistair HoltApr 26 08 @ 03:30PM

    Damn.. just when i finished writing my own rails blog cms for my site!

  3. its a mea marioApr 26 08 @ 06:55PM
    This is fantastic. Love seeing merb progress!
  4. migApr 26 08 @ 07:05PM
    No specs. Ouch. I am going to fork your repo and start writing some for you.
  5. El DraperApr 26 08 @ 09:15PM
    Thanks for the enthusiastic comments guys.

    @alistair: well if you think that after writing your own Rails-based blog/CMS that you may have something to contribute to this project, then by all means get stuck in!

    @mario: thanks!

    @mig: great, thanks! We have some specs in place which should act as a decent starting point, but there is definitely a lot missing there, and having almost 100% coverage would make future core improvements a lot easier to develop. Let me or Mike know when you've got some stuff you want to contribute to the trunk repo, or send a pull request!

    @cag: thanks for the comments, you are right that the white-on-black design might not be everyone's cup of tea - I put it in place partly just to show the capability of Feather to support custom designs, and also so it would at least look different to my buddy Mike's Feather hosted blog! I may look to update/improve the design when I get some more time, so keep checking back and thanks for your comment!

    By the way, I've got a link to this post over at DZone (http://www.dzone.com/links/announcing_feather.html), and also Digg (http://digg.com/programming/Announcing_Feather), so if anyone wants to help push the link further up by voting for it on either of those sites, that'd be great!
  6. Alistair HoltApr 27 08 @ 03:48PM

    @el: I’ve just had been playing with feather and looking through the code. Really nice simple app. I can think of a few improvements and ideas which I will try to contribute.

    I take in the theme stuff isn’t implemented yet? One of my main dislikes of all the CMS systems I looked at before building my own was the way themeing is implemented. Personally I just want to edit the .html.erb views and drop in my own CSS files without having to go through the hassle of learning a "new theme language":http://www.liquidmarkup.org/ and being restricted in what I can do. Yes, I’m looking at you Mephisto:http://mephistoblog.com/ and Typo:http://www.typosphere.org/ !

    I also like the way you’re developing feather with having everything extra in plugins. :)

  7. El DraperApr 27 08 @ 04:55PM
    @alistair: thanks! Yeah we've tried to keep it as simple as possible in the core code, and then provide various extra functionality via plugins so users can choose what they want to include on their blog, rather than having loads of stuff within the app that they never use. It'd be great if you could contribute though - by all means fork the feather and feather-plugins repo over on GitHub, and when you've got some changes you want us to include, send over a pull request!

    Specifically on the topic of themes, at the minute the blog design is fairly customizable using the snippets plugin (that allows custom html to be inserted at predefined hook points in the design), and also using the styles plugin (that allows custom css to be specified to override the design css). Using just these plugins I was able to tweak my design here to be a fair bit different to the default. I would like to continue customizing the snippets plugin to further allow it to edit and override existing elements within the design (rather than just add to them), and then we should have most of the pieces in place to allow basic view modification and custom css. The snippets are basic erb templates, so like you say, there won't be any new complicated theme/scripting syntax to learn!

    Oh and yeah, not sure comment formatting is being picked up properly as I had a little trouble with my comment yesterday, so I'm going to look into that. I use Safari as well so I'm also aware of the form field bug you mentioned, it's driving me mad but that's another one we're looking into. I think it's time to get a bug tracking instance up so we can start to track issues and feature requests!

    Thanks for the comments.
  8. Marcus BreeseApr 28 08 @ 09:20PM
    I thought I'd let you know about some possible name collision with a project that I run. It's also a web framework named Feather and has been around for a while.

    Of course, it's written in Java, so it probably wasn't on your Ruby-world radar.

    FYI
  9. El DraperApr 28 08 @ 11:42PM
    @marcus: thanks for your comment. I must admit I had never heard of your project; looks cool though. I don't think the naming will be an issue, as the projects are very different, and are going to appeal to different communities. The domain we've picked up for when we get an official site up and running (featherblog.org) also represents exactly what the project is, a blogging engine named Feather, so I don't imagine there will be too much confusion.

    Thanks for your comment!
  10. El DraperMay 01 08 @ 11:15PM
    @greg: thanks for your comment - I'm planning on trying to write a step-by-step tutorial for setting up an instance of Feather over the next few days, and hopefully that'll help you get up and running.

    In the meantime, to answer your specific question, you can setup the database tables using the Merb console (merb -i), and then by calling "DataMapper::Persistence.auto_migrate!". I think there is a rake task that does the auto migrate, but it didn't seem to work correctly last time I tried it. Bear in mind that that command creates the database structure in a destructive manner, so if you run it once the schema is created (even if there is data present), it'll destroy and recreate the schema, thereby destroying any data you had too. We're looking into better ways to handle data schemas, especially for plugins which should be easily upgradable.

    Thanks for your comment!
  11. Khang TohMay 05 08 @ 03:33PM
    Awesome, you guys got this out before even I started one.. I was going to work on an Merb open source blogging system but I'll check out Feather first.
  12. Michael LeungMay 05 08 @ 07:06PM
    @khang - I'm glad we launched before you started! We need lots of help!
  13. Khang TohMay 05 08 @ 10:02PM
    @michael - I tried setting up feather and got a weird error in the beginning.

    Bascially, when I tried to bring up #index, an exception is being thrown in Article#specific_date_function and it basically boils down to the the method trying to determine if the database adapter is sqlite and formats the SQL query differently.

    Its looks like using symbols on the Hash returned from YAML::load is causing an issue. Are you guys running this using AR as the orm? I was using Sqlite3 and changed to Datamapper and was still seeing the same issue.

    I was then able to overcome this by changing to

    YAML::load(File.open('config/database.yml'))[Merb.environment]["adapter"]
  14. MarcMay 05 08 @ 10:53PM
    It would be cool if there was a 10-line quickstart guide or something like that.
    I'd love to play arround with feather, but I don't really know how I should populate the database.

    At the moment, I'm just gettting a:

    Internal Server Error 500
    Your query failed. no such table: configurations QUERY: "SELECT "id", "title", "tag_line", "about_formatter" FROM "configurations" LIMIT 1"

    when going to localhost :-(
  15. El DraperMay 06 08 @ 02:42PM
    Thanks for the comments guys!

    @xavier: Certainly interesting, but it seems that the Enki blog definitely has a different ethos to our project. We want people to have options for extending and customizing their blog in any way they want, but we also want to make sure that those same choices don't result in a bloated and heavyweight piece of software for everyone else. By separating the lightweight core code from the plugins, each user can completely customize their instance of Feather, while ensuring that they only have the features they need installed.

    @khang: absolutely, let us know what you think when you check out Feather! It'd be great if you'd like to contribute, checkout the bug/feature request tracker over at http://feather.lighthouseapp.com for ideas, or if you already have some other ideas for how to contribute, then fork the code on GitHub and give it a go! As for your specific issue, perhaps if you could raise that as a bug on the Lighthouse tracker, someone will take a look into it and see if they can replicate the issue? You can also submit your patch if you think it may resolve the issue for other users too.

    @marc: it looks like you need to setup the initial database structure for the app as you suggest. You can do this by running the application in console mode ("merb -i"), and then by calling "DataMapper::Persistence.auto_migrate!". This will setup the initial database structure and should allow you to get up and running. Also, I've finally gotten around to writing a basic getting started guide that might be of interest - it's available at http://github.com/mleung/feather/wikis/getting-started. Let me know how you get on!
  16. Michael LattaMay 15 08 @ 08:04PM
    I am looking at Feather for a revamp of several sites, but do not see the "fully customizable" approach you mention. The content/layout of the main page seems pretty fixed to me. What I am looking for is more than a one page blog. The blog needs to be part of a larger site that has other functions. The application.thml.erb seems pretty rigid in terms of a text title top and bottom, and the article list in the content. What I would have liked to see (and may be somewhere I am not seeing) is the ability to override the site map and layout of the user facing pages. This could be with added views or with database directed / plug-in provided views but there seems to be a lot of fixed content in what I am seeing on first read. For example the title and home page for my sites use a graphic title (which could be CSS), but still want a textual header for the page. The main page needs menus and a mix of content not just the blog.

    I guess the main question is whether Feather should support a more full CMS model for sites since it is an application rather than a component that can be added to a larger app.
  17. El DraperMay 16 08 @ 09:42AM
    @michael: thanks for the comment. I think some of what you are trying to achieve is possible with Feather today, and some is on our todo list to try to build into Feather over the coming weeks and months.

    Anything design-wise that can be achieved using CSS can be implemented using the feather-styles plugin, that allows you to specify custom CSS rules that'll override the CSS already within the Feather style. We also allow custom snippets of HTML/Javascript to be inserted at predefined points, using feather-snippets. I'm looking to extend snippets to allow you to also override existing html elements (using a basic selector syntax) with your own HTML/Javascript, rather than simply using the predefined snippet points in the layout.

    However as you say, a lot of the design still maintains a static layout, and altering this using CSS/snippets solely may prove to be tricky and/or untidy. The beauty of Feather is it's extendability, and we have someone at the minute that is going to be looking into writing a new plugin, feather-themes, that'll provide full theme support. In this way, you'll be able to choose between minor customizations (styles/snippets plugins), or using a dedicated theme plugin to change the entire layout and style.

    And as for the CMS stuff you mentioned, again this is now something that is being worked on. Above and beyond the basic blog stuff, feather-pages is currently in development so that Feather can be used as more of a CMS than just a blog engine, for those that need it (we are hoping to then use that to host the official Feather site when it gets up and running). There'd be nothing to stop a wiki plugin being written as well, for sites that require built-in wiki features on their site.

    So really, "fully customizable" doesn't necessarily mean we have everything in place right this minute, it just means that the concept of Feather is to continue extending it with a wide variety of plugins that in the future will allow the user to utilise Feather for a different range of requirements, and to be able to tweak it as they see necessary. Obviously the project is still very young, and so we are actively seeking contributions to try and implement a lot of these features, and to add to the already available plugins. If you are a developer, you are welcome to contribute some of your ideas to Feather, they'd be much appreciated! If not, then keep an eye on Feather, as over the next few weeks we are hoping to line up a few of these bigger features (feather-pages, feather-themes) to allow greater customization along the lines that you were referring to. Either way, drop by #feather on irc.freenode.net if you want to discuss your ideas further, the more the merrier!
  18. El DraperMay 27 08 @ 10:15PM
    @dmitry: thanks for your comment. We are working on porting the code to work on DM 0.9 at the minute. The idea is to keep compatible with stable released versions of Merb and DM, and to ideally also have separate branches cooking against upcoming versions of Merb and DM so we can be on the ball whenever a new release is made. But the trunk codebase should hopefully always be buildable on the latest stable releases of all of it's dependencies, that's the aim.

    If you have any issues in setting it up, or would like to contribute, please drop in to the IRC channel on irc.freenode.net, #feather!
  19. Rein HenrichsJul 29 08 @ 04:59AM

    Please, body { line-height: 1.4 }

    Think of the children!

Comment

Back to recent posts