Another flat-file driven blog/ cms engine on the block

This post was written 4 years ago.
Sat, 24 Nov 2012
I've just been looking at Statamic, which is a markdown-driven CMS and blog, self-hosted and written in PHP. It's commercial rather than open-source, but at a reasonable price, like Perch. It looks reasonably mature and has support for add-ons and lots of cool stuff. I'll probably buy a copy just to mess around with.

If I ever need to build another PHP CMS-driven site, i'll certainly give this a go, as i'm still obsessed with the idea of having content as flat files under source control. I like the idea that you could set up a staging site using something like this, and the client/ project manager could be adding content, and you can periodically log into the server, commit the content to GIT and sync you local dev copy in both directions.

Also, with the end result still being a dynamic PHP site (unlike the static sites compiled by the likes of Jekyll), you can still develop dynamic features into the resulting site and integrate in other PHP modules, e.g. forums and shopping carts etc.

As for what this means for my own PHP text-file driven blog eatStatic, it re-confirms that I shouldn't be putting any effort into building any CMS features in, and to concentrate only on maintaining as a blog engine for my own stuff, and only adding the features I need. I haven't had a look at the blog functionality provided by Stamatic yet, but having built eatStatic to fit my own ideal travel blog workflow, it would probably need some work to make me happy!

I've also mentioned a Python port of eatStatic in the past, and would still like to do something in this area, but I can't help but think i'd be better off concentrating on a module to plug into another blog engine / CMS, to avoid reinventing the wheel yet again. Before I do anything else I want to experiment with all the current static-site generators - to see if there is some way to build on this - e.g. a python app that takes content set up for a Jekyll site and syncs it with content in a mezzanine (or other Django-based CMS).

A quick google around for "python static site generator" has thrown up this: http://ringce.com/hyde
Tags: eatStatic / blogging / CMS / WCM /

More text file based CMS and Blog tools

This post was written 5 years ago.
Fri, 13 Jan 2012
If you were interested in my eatStatic text file-based blog engine, but thought it was a bit techie/immature to consider using yourself, you may be interested in Kirkby and Scriptogr.am.
This post was written 5 years ago, which in internet time is really, really old. This means that what is written above, and the links contained within, may now be obsolete, inaccurate or wildly out of context, so please bear that in mind :)
Tags: blogging / cms /

2011 retrospective and plans for 2012

This post was written 5 years ago.
Tue, 27 Dec 2011
These retrospective posts are annoying aren't they - kind of like the xmas round-robin letters?! However, I wanted to do one again, because it helps me keep track of things, where i've been (and when - it all becomes a blur..). So, as I did with 2009, 2010 and 2011, I wanted to revisit the list from last year and see what happened and what didn't.

Revisited
  • Buy a new Bass Guitar and play the hell out of it - I did just that, although it still needs a load more playing. I think initially I started focussing too much on kit and trying to compose and remix stuff and generally ending up stuck in front of a computer, which was something I was trying to avoid! So this is carried over - but with the goal of having a jam or two in a room with actual humans rather than garageband. Not sure i'm ready to commit the time to a gigging band yet, though it certainly appeals..
  • More "work from anywhere" adventures. I worked from a few different places, but in doing so, came to the conclusion that I wish I was just on holiday and could actually spend it with my wife and son and leave my laptop shut! I'm now working full-time at Potato, office-based, which I have to say i'm enjoying, though I get to travel to London fairly regularly, and hopefully other places, so still interested in mobile working tech. I actually plan to merge the content from my seperate mobile working blog into this site
  • More blogging! - including some personal blogging - um.. I think I blogged a bit more - certainly after moving this blog over to eatStatic. I hope to keep this up and improve my output - one thing i'll be doing is stepping away from the firehose of twitter for a bit again, and try to get my thoughts and opinions down in considered blog posts rather than the rapid-fire train-of-thought (with compromised punctuation!) that twitter encourages.
  • Attend at least one web conference - this nearly didn't happen until a last minute decision to attend WebDevConf in Bristol, which I enjoyed a lot. I'm happy to say that i've got a ticket for new adventures in web design, so this goal will be achieved early in 2012.
  • Get further than "hello world" with Django - I'm certainly further than hello world now! My first few months at Potato were like an intravenous injection of Django, and i'm now proud to introduce myself as a Django developer rather than just a web developer. I've still got a lot to learn though, but all new personal projects will likely be Django from now on, rather than PHP.
  • Use and understand some technologies that i've been ignoring - as ever, there's always new stuff on the horizon, but my first goal is to finally learn regular expressions properly, having successfully ignored them for the last decade!
  • More on-site freelancing for agencies - ditched for obvious reasons! I was actually a full-time on-site freelancer for potato before I went full time, so it's clear that this one worked out for me in 2011.
  • Keep Trading and survive the recession - I achieved that this year, but I guess now this point needs changing to "keep employed"!
  • Launch a web app - In a very low key way I achieved this by making my eatStatic library/ blog engine public this year. However, even though i'm pleased with the way it works, i'm not intending on developing it any further, as i've already started on another blog engine for Too Old To Skate using Django, mainly as a learning exercise. I think maybe this goal should be changed to "do not start any more blog engines"? Now i'm out of freelance, 2012 is really going to be all about the work/life balance and not spending evenings with my face stuck in a laptop, but on the other hand I have a few ideas floating around...
  • Relaunch Too Old To Skate - See above. as ever, an ongoing project.
  • Attend at least one BarCamp - Failed. These type of informal events are the ones i'm interested in though - hacknights, barcamps, skillswaps, anything which is run for the fun and community of it rather than profit.

New
  • Skateboarding! - this isn't new, but 2011 was the most lax year since I started skating regularly again, so need to get skating while my knees can still take it ;)
  • Learn to touch type - I've been saying this for years, but it's about time I stopped typing with two fingers like someone playing Daley Thompsons Decathlon on a ZX Spectrum..
  • Be more proactive with geek socials - Bristol has a great geek/ design community, but I seem to have completely missed most of the face-to-face stuff recently and want to change that.
  • Practical Skills - growing things, making things, fixing things - not sure exactly what yet but it's all about the analog at the moment...
This post was written 5 years ago, which in internet time is really, really old. This means that what is written above, and the links contained within, may now be obsolete, inaccurate or wildly out of context, so please bear that in mind :)
Tags: blogging /

Too Old To Skate rebuild

This post was written 5 years ago.
Tue, 20 Dec 2011
too old to skate screengrab
A month or so ago I took toooldtoskate.com offline as it seems that it was being used as a spam relay. It was running an ancient unpatched version of wordpress, so this came as no surprise. I thought it would be a good opportunity to rebuild it using django. So yet another django blog engine has sprung into existence - all really simple stuff though, just a couple of models and some class-based generic views, a familiarisation exercise rather than an attempt to build a wordpress clone.

A work in progress, as ever..

To Do
  • Commenting (i'll integrate disqus)
  • Filtering by type/ channel (e.g. video and author)
  • Merchandise (I will sell at least one mug, in 2012 I swear!)
  • Blogroll/ links
This post was written 5 years ago, which in internet time is really, really old. This means that what is written above, and the links contained within, may now be obsolete, inaccurate or wildly out of context, so please bear that in mind :)
Strict Standards: Only variables should be passed by reference in /home/rickhurst/sites/rickblog.eatstatic/lib/eatStatic/eatStaticBlog.class.php on line 595 Strict Standards: Only variables should be passed by reference in /home/rickhurst/sites/rickblog.eatstatic/lib/eatStatic/eatStaticBlog.class.php on line 595 Strict Standards: Only variables should be passed by reference in /home/rickhurst/sites/rickblog.eatstatic/lib/eatStatic/eatStaticBlog.class.php on line 595 Strict Standards: Only variables should be passed by reference in /home/rickhurst/sites/rickblog.eatstatic/lib/eatStatic/eatStaticBlog.class.php on line 595 Strict Standards: Only variables should be passed by reference in /home/rickhurst/sites/rickblog.eatstatic/lib/eatStatic/eatStaticBlog.class.php on line 595 Strict Standards: Only variables should be passed by reference in /home/rickhurst/sites/rickblog.eatstatic/lib/eatStatic/eatStaticBlog.class.php on line 595

Introducing eatStatic blog engine

This post was written 6 years ago.
Sun, 04 Sep 2011
creating a new blog post in textmate
Recently I ported this blog from an ancient version of wordpress to my own simple blog engine, which uses my PHP5 micro-framework, "eatStatic". I use the phrase "blog engine" rather than blog software, as it isn't really packaged up yet as something I would describe as software - its more just a collection of classes and templates that can be used to keep a blog.

The bulk of the code was written last year in the space of a couple of hours while sitting in a garage waiting for my car to be fixed - I was about to go on a long road trip and wanted a blogging solution that let me create blog posts and organise photos offline and then conveniently sync it to the live site when I had an internet connection. The result was my "on the road" blog about mobile working.

The thing that sets this apart from other blog engines (and the origin of the name "eatStatic", along with a nod to a 90's techno act), is that instead of using a relational database to store content, it uses simple text files for blog posts, and cached json files to store collections of data (e.g. post lists, tag references etc.). I have it set up to run with dropbox so that I compose my posts in textmate and they are synced to a dropbox folder on the webserver. You don't have to use dropbox though - you can use any technique you like to upload the data files to the server - for "on the road" I use subversion, which means I also have versioning of blog content. Draft posts are composed in a drafts folder and moved into the main posts folder to push them live. There is currently no admin area on the site, though I might add one later.

The published date and URI for each post are taken from the text file name - i've adapted it for this blog to use the same url scheme as wordpress to avoid link rot on legacy content. Some people asked me why I don't just use the title and created/ modified date of the text file to make it even simpler, and the answer is that I wanted finer control, and the option to specify the publish date - using created/ modified would have been a disaster for the content I imported from wordpress. Also by naming each file starting with YYYY-MM-DD, the post files are easier to sort/ find in the post folder, both visually/ manually and in code. You can use HTML in the blog post and additionally line breaks are converted to br tags, other then immediately after a closing tag. You can add tags and metadata at the end of the text file.

I've also got a simple thumbnail gallery which can be included in a post (see below) by uploading a folder full of full-size images with the same name as the post. The idea behind this is that a set of jpeg/ png images can be imported from a camera, and automatically pushed to the server by dropbox. A caching script creates the thumbnails and web-size version on demand, which are saved to the filesystem for efficiency during subsequent requests. I considered setting it up so that each post had it's own folder, which could then contain images, but the blog engine was mostly written with the idea of quickly creating posts by opening textmate/ emacs, writing and saving rather then faffing around with creating folders.

I made the decision not to build in any commenting functionality - the anti-spam / moderation features needed are too much of a pain to deal with, so i've archived the old wordpress comments into the post body and integrated disqus instead.

As I mentioned before, I've been using a previous version of eatStatic successfully for my "on the road" blog, but I wanted to see how it coped with 100's of posts rather then just a handful - it seems to be doing fine, coping with over 600 posts, but i'm sure there is room for improvement. I've also been investigating making the json read/write switchable to use mongodb so that it could potentially be very scaleable - i've encountered a few inconsistencies in the way that PHP json_decode() and mongodb object retrieval work, but nothing that can't be worked around - expect a blog post on that later!

I don't expect eatStatic blog to be a wordpress killer, but it may appeal to techie types who want a lightweight PHP5 blog engine, maybe to plug into an existing site and people who want to compose posts in textmate/ emacs (or any other code editor), rather than in a web form. If you are interested in trying it, keep an eye on the github repo, as i'll commit an example of how this blog is formed, once i've ironed out the more embarrassing bugs! I may add a simple admin area at a later date, to allow publishing entirely via the web, and I think it would also benefit from a "post by email" feature, for convenient moblogging, but don't hold your breath!

When I was importing content (I actually wrote a python script to parse a wordpress xml export file and create the text files), I found it quite fitting that the first ever post on this blog nearly ten years ago was made on a home-brewed ASP blog engine which used XML for data storage. I think before then I kept a static HTML blog of sorts, on a freeserve site, but unfortunately haven't got a copy of that for completeness.

Lastly, whether or not you want to set up an eatStatic-based blog, if you aren't already using dropbox, it really is excellent, so why not sign up for free 2GB account using my referral URL, so I can get some more free space? Even though I have a paid dropbox account, I use a second free account to mount on my server for automated site/ database backups and for this blog and it keeps filling up!
This post was written 6 years ago, which in internet time is really, really old. This means that what is written above, and the links contained within, may now be obsolete, inaccurate or wildly out of context, so please bear that in mind :)

My Idea of March - a decentralised microblogging/ chat system

This post was written 6 years ago.
Tue, 15 Mar 2011
Chris Shiflett has suggested a blog revival, and i'm having one of those days, trapped between sorting out domestic chores and procrastination, and not being entirely productive, so what better time to blog than right now!

One of the current topics being discussed is how twitter have asked developers to stop creating new twitter clients (for the non-technical a "twitter client" is a program or "app" such as tweetdeck that lets you use twitter on your computer or phone without visiting the twitter website). Apart from being an annoyance to people who want to create new clients, many developers including myself are starting to read between the lines, that this is a sign of the corporate machinery clanking into action to control how twitter is used, so they can more efficiently monetise it.

I think this is kind of inevitable - i've never seen a service adopted by the masses so quickly, and most long term users will remember when twitter struggled to scale as it suddenly became a network of multi-millions rather than a few hundred or a few thousand.Any social network system like this needs a critical mass of users to make it useful - but looking at my own needs, that critical mass consists of a couple of hundred of people who are mostly friends and colleagues in the web/ digital media industries. I don't use the "trending" stuff and i'm not interested in following celebrities, so a critical mass for me would be for all or most of those people to adopt another system. Yesterday there were mumblings about identi.ca, and sure enough you'll see that i've reserved my username (after some signup confusion and accidentally signing up to a mailing list instead).

Identi.ca is an open source solution and I look forward to seeing what develops with it, but I can't help feeling that the real solution (especially for the technically inclined) is a decentralised system, just like blogs have always been - you host your blog either on your own site, or using a service such as blogger, and people consume them directly or via RSS readers. This is another example of geek-led innovation - the geeks were doing it first, the mainstream followed later.

I've had a quick look around for a decentralised micro-blog system, and it seems there are a few already out there, but before I look closer to see if any of them would fit my needs, here's how I envisage it working:-

  • You self-host a micro-blog on your site, it's just like a blog, but each post has a 140 character limit
  • The micro-blog has an RSS feed, a variant that can optionally include extra info such as "in reply to" and "location"
  • You use a self-hosted micro-blog aggregator to follow other people's micro-blogs (this could of course include a twitter stream, using RSS not their restrictive API)
  • The aggregator could be on your site, or even running locally on your machine, and of course you could build ANY DAMN CLIENT YOU LIKE to view, interact with, and post to your micro-blog
  • You could hook into most of the existing services for things like link shortening, image hosting etc.
  • Private messaging would need some thought, but it's essentially like having a contact form on your website (and the same spam considerations).
  • Popularity contest "follower" stats would be optional - it would actually be pretty difficult to work out how many people are following you, other than analysing RSS stats, which can be misleading.
  • Global search would be tricky without a central database, but I rarely use that.
  • No central point of failure means the platform would be very resilient, and there would be no massive server-farm or staff to fund.
  • No owner means the users run it, people may develop services around it to make money, but there would be no central owner
  • The core tech should be really, really simple - the basic service should need no integration with services or API's, or software installation requirements which may scare people off.
So, once the geeks have invented the platform, there would be a similar barrier of entry to participating as there is to starting a blog - you would either need to install it, roll your own, or sign up with one of the hosted services I can imagine popping up a few months later. Therefore mainstream adoption would be much, much slower and because of the way I want to use a service like this, that isn't a bad thing.

Looking at my twitter profile, I currently follow 372 people, a number that i'd like to get down, but social etiquette dictates that I only unfollow people if they get ridiculously noisy or off-topic. I bet if I analysed how many people I regularly interact with or find unmissably interesting I would get that number down to less than 100. If I ever get round to building it, I wonder if I could persuade 100 geeks to try it? Of course as mentioned earlier, I could build an aggregator to follow peoples twitter streams via RSS, so I don't necessarily have to have other people adopt the platform immediately, so maybe that's where I will start - I wonder if scraping RSS feeds counts as use of the twitter API?

archived comments
Some great ideas here Rick. After another fail whale this evening decentralized seems like a good idea.

Joe Leech 2011-03-16 22:08:33
The de-centralized nature of XMPP would work really well as a solid back end for a new service such as this. It already supports (via the pubsub mech) the idea of posts as well as private messages and has the advantage of support for private as well as public multi user chats. All running on privately or publicly owned servers communicating with each other using an open source protocol. Sounds ideal!

There's also the additional advantage that XMPP is real time so no polling.

You just need to design the experience to feel less like "IM" and more like twitter which would be achievable.

Stefan 2011-05-25 11:17:10
This post was written 6 years ago, which in internet time is really, really old. This means that what is written above, and the links contained within, may now be obsolete, inaccurate or wildly out of context, so please bear that in mind :)

What I did and didn't do in 2010 and Plans for 2011

This post was written 6 years ago.
Sun, 02 Jan 2011
It would be rubbish to stop a tradition after only two years, so following on from my posts in 2009 and 2010, here is a retrospective for 2010 and my plans for 2011. I'm changing the format this time, by dividing into "achieved", "carried over", "ditched" and "new".

Achieved
  • Attend at least one web conference - I had an extremely busy year, so didn't get to any of the generic web conferences, but couldn't turn down the international Plone conference, as it was happening in my own city. Although it was specific to a particular open source web content management system, the talks contained enough generic web technology goodness to keep me geeked up to overflowing.
  • Get further than "hello world" with Django - Having collaborated on a django project, i've got further than this now, and i'm also using it for some tools used for managing data and assets for Kudos/ Lightplanet
  • Use and understand some technologies that i've been ignoring - I'm going to claim that as achieved, on the basis of the points above - i've learned plenty about Django, and python in general. This bullet point will always be carried over though, as there is always something new to learn.
  • More on-site freelancing for agencies - It's always tricky finding a balance with this - I did a fair amount of on-site work, but it often got tricky trying to balance my ongoing client work, with the requirement to be on-site somewhere. I'm still open to this, but the other project work needs to take priority, and as such i've started renting a desk in a shared office again.
  • Keep Trading and survive the recession - No shortage of work again, so thanks to everyone who gave me work, but i'll keep my fingers crossed and carry this one over again..
Carried Over
  • Launch a web app - so close on this one, but the manic run up to xmas and self-enforced work-free xmas holidays stopped me releasing my pet project, working title: Eat Static CMS. The name, some may have guessed is a tribute to a 90's techno outfit, but also refers to the fact that the app uses text files rather than a database. It's a basic blogging engine with niche appeal, I will make it available as a beta ASAP this year, as soon as i've tidied it up.
  • Relaunch Too Old To Skate - The site is still in limbo, and still reflects how little i've skated again, which once again I intend to change
  • Attend at least one BarCamp - the Bathcamp BarCamp clashed with Plone conference this year, so I didn't go, but want to get to more grass-roots events this year.
  • Better Customer Service (By saying "No" sometimes) - I wanted to put this on the achieved list, but looking back I took on too much again towards the end of the year, and customer service suffered as a result, so once again i'll try to find the balance in 2011
Ditched
  • Get to grips with Plone 3 skinning - Plone has moved on and so have I, but this doesn't mean i've given up on Plone, but I don't plan to do any Plone 3 work. Plone 4 skinning/ theming is still on my list, but that's a whole new technology, and a technology that can be used independently of Plone.
  • Put up a proper portfolio - I just can't imagine having the time to do this - I think potential clients can find out whether I have the skills and experience they need by looking at this blog and my linked in profile. As i'm more of a programmer than a designer, a visual portfolio is less important to me. Maybe if I run out of work i'll rethink this one?
  • Fix on a PHP framework - until someone (me?) builds a PHP framework that is basically identical to Django, with it's production-ready admin forms and API as standard, i'll just use whatever seems right at the time, or no framework at all.
New
  • Buy a new Bass Guitar and play the hell out of it - I horrified some of my older friends by selling my one remaining bass last year. I sold it as I had completely stopped playing, and having it hanging on the wall just seemed a waste. Most people i've befriended in the last 10 years don't know I ever played. Playing bass in bands used to be an important part of my life - I've actually been playing bass for over 20 years and was once pretty good (if I say so myself!). I sense a mid-life crisis coming on in the next couple of years, so I need to get back in practice for when I inevitably decide to form another band!
  • More "work from anywhere" adventures - I spent 6 weeks touring in Europe with my wife and son this summer, working from my laptop to earn money as I went. It was brilliant, so hopefully more of these adventures, the same or different in 2011
  • More blogging! - including some personal blogging. I think i'll need to divide this site into "babble" and "techobabble" - not everyone who reads this site looking for a CSS hack will want to read my self-indulgent drivel and not everyone who reads the site wanting to know how I really feel about the experimental bass playing style of jaco pastorious wants to read about the new python module i've started using, so i'll provide the opportunity to follow from both a techie and non-techie viewpoint, although it will all still be one blog. Looking back through the archives of this blog, i've been doing this over the years anyway, going through phases of techie and non-techie content.

archived comments
What about skating the s**t out of Kennington and drinking beers in London with your mate a bit more...?

Henry Sanchez 2011-02-01 17:50:52
This post was written 6 years ago, which in internet time is really, really old. This means that what is written above, and the links contained within, may now be obsolete, inaccurate or wildly out of context, so please bear that in mind :)