Back on the road
I’ve reinstated my travel/ mobile working/ camping blog, using the latest version of eatStatic blog software.
Rick Hurst Full-Stack Developer in Bristol, UK
Menu
I’ve reinstated my travel/ mobile working/ camping blog, using the latest version of eatStatic blog software.
So, one of my goals for this year was to learn to touch type. I pretty much ignored this goal until last week, when I opened up my copy of Mavis Beacon Typing Tutor. Right now I can type with the correct fingering, without looking, but it is painfully slow – i’m still waiting for the magic moment where I don’t have to pre-calculate every key, and remember which finger to press it with! This is the first blog post I have ever written using the correct technique and it has taken ages, but am determined to stick with it until I am fluent, so expect lots of short blog posts with minimal punctuation until I have this thing nailed!
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
Last year I shut down this blog and incorporated the content into my web development/ techie blog, but I’ve decided to resurrect “Rick on the Road”. The main factor in this decision was the long awaited purchase of a camper van (a 1983 VW T25 devon moonraker – expect to hear more about that!). This has of course led to the planning of adventures, and being a compulsive blogger, felt the need to blog about it.
Also after a year of being an employee mostly working from the same place, i’ve started to get the mobile working itch, so hope to take advantage of my new “mobile office” for a change of scenery from time to time. As of Jan 2013, i’m also contracting again, which will hopefully mean I can do more nomadic working, inbetween on-site contracts, and maybe some remote contracts. So the new version of the blog will resume where it left off, covering remote working and associated equipment and tools, but also general experiences with the camper van, including technical post on mechanics.
If you subscribe to this blog via RSS, then you can choose from the full feed which contains all posts, or only posts in certain categories, e.g. if you are only interested in camper vans (including technical posts on mechanical issues), use this feed, or if you are only interested in mobile/ remote working, use this feed.
I’ve written a post about the current plans for the eatStatic blog software (that this blog runs on), on the demo/ documentation blog.
I’ve worked at a fair few agencies in my time, and despite most agencies now using content management systems as standard, the content population and revision workflow is usually sub-optimal:-
Yes, I think we can all see a flaw with this workflow – no need to point out how things could be done differently in the comments!
* I don’t care if your CMS has a really good WYSIWYG editor – it’s either too limited or too powerful, so an untrained editor at best will never really get the result that they want, at worst do some real damage!
Often I create a git repo locally, but then want to push it to a remotely hosted repo.
On the server, create a folder and move into it, then:-
git init --bare
Then in your local git repo:-
git remote add origin ssh://username@yourserver/path/to/repo.git
git push --all origin
(this assumes your remote repo is accessible via ssh)
Over the last couple of years i’ve tried to rationalise the way I use various social media sites, and I realised that how I use a service has evolved over time.
I think flickr was the first social network (of sorts) that I signed up to, in 2005. It was the instagram of it’s day, but with an important difference in that people uploaded whole galleries at a time. It made a real feature of the use of tags, so that you could follow an event, or add contacts and follow their streams. I even signed up for a pro account to allow me to create more galleries. I’d also use it as a blog/ diary – frequently posting pictures of the coffee or beer I was drinking (like I say – the instagram of it’s time). I kept twitter for personal/ creative use, rather than posting family pics, baby photos etc., but the fact that it had a permissions system meant that I could restrict content to people marked as friends if I wanted to. I’m not really using flickr now, and am shortly to let my pro membership expire – it doesn’t offer me enough as a paid service, it’s hardly changed over the last few years, it feels clunky to use. Also, alarmingly it also seems to be full of really good photographers, which doesn’t fit in with my desire to post grainy camera phone pics of my food, like I now do on instagram.
I also dived into facebook in 2005 (I think), and pre-twitter, most of my friends were from the web industry, and I used it mostly like I do with twitter now, for joining in conversations mainly about building web things. As it became more mainstream, I started using it to keep in contact with old friends and current non-techie friends, and it became a strange mix. I was also getting friend requests from people i’d never met, and as facebook became more.. err… social, I started to trim my contacts down to only people I had met in real life. When twitter took off, many people had their twitter and facebook status updates synchronised, and this started to drive me mad, seeing the same things over and over, so one night I deleted pretty much all my web industry friends (all of them were on twitter anyway), stopped posting anything techie to my status updates and embraced it as a way of keeping up with non-techie/ web industry friends (old and current) and family.
My twitter use hasn’t evolved that much – I post less pictures of my food and coffee than I once did (as i’ve already mentioned, I have instagram for that now), but due to it only having basic privacy settings, I tend not to post any family pictures, and am pretty guarded about posting anything personal. It’s mostly for technical discussion, but is also social, as of course some of my web industry friends have become good friends out of work (but still tend to talk shop down the pub). The thing I still really hate about twitter is that there is no native “mute” function (although it exists in some twitter clients), which means that I tend to unfollow people if they get a bit noisy tweeting from a conference or something, then by the time you go back to follow them again, they’ve been offended and decided to unfollow you back! I have to say facebook is much better for dealing with this kind of thing – you can anonymously mute people, and it’s much easier to group people and select who sees what. Twitter has lists, and i’ve tried grouping people into lists, so I can choose to only see tweets from certain groups of people, but it has no prominence as a feature in the native twitter UI, and people feel sidelined if they are only on a list and not on your main timeline.
I was late to the party on this, only starting to actively use it in the last few months, but just like flickr back in 2005, I use it to explore my creative side (mediocre pictures of clouds, coffee and food), and as a kind of diary, to remind myself what I was up to, and where I had been. Instagram public profiles have just arrived, and this has made me feel unsure about how I want to use instagram. Even though initially my pictures were set to public, it still felt like a fairly private personal thing, that I just shared with a few friends and web industry aquaintances, so i’ve set it to private for the time being. I don’t really want or need to showcase my instagram pictures to the general public, but occasionally I will post them over to facebook or twitter. So not sure which way i’ll go on that – if I do choose to make it public, i’ll be less likely to post any family or personal stuff, and there’s only so many cloud pictures my instagram followers can take!
I recently added image uploading to Too Old To Skate, and not having set up a “normal” django site for a while, hit about every stumbling block possible, so here are a few notes. Please bear in mind there may be other, better ways to achieve this – i’d love to hear them.
Adding an Image field
This is achieved simply by adding an ImageField to your model, e.g.:-
photo = models.ImageField(upload_to='image_uploads', blank=True)
Separate static and media directories
The static folder is where your local site assets go e.g. CSS and Javascript. Locally these are served up from /static/ by the django dev server, and on a live site this should be set up as aliases to serve by your web server (in my case Apache).
The media folder is where user-uploaded files go, in subdirectories specified in ‘upload_to’ in your image field in the model. The root is configured in settings.py, but unlike the static folder you will need to do some configuration to get the local dev server serving files up from this directory (and its sub-directories). The location of the media root needs to be different to static root, which threw me slightly, though I guess it makes sense to keep your own static assets and uploaded media entirely separate.
To get the local dev server serving up files from /media and its subdirectories, add this to urls.py:-
# you'll need to add this if you aren't already importing settings
from django.conf import settings
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT}))
Permissions
Permissions need to be set on your media folder to allow uploaded files to be saved. This depends on your set-up, but for me adding write permissions for group allowed apache + wsgi + python (whichever one of those it appears as?) to save files and create directories.
PIL and libjpeg
As usual this caused me massive headaches to get running both locally and on my web server, and as usual I tried so many things i’m not 100% sure which steps actually made a difference in the end!
On Wednesday, the day after my lightning talk at the Django meetup, I gave a talk “An introduction to Backbone.js“, at a newly formed javascript meetup, loosely based around the locality of southville in Bristol. This was an interesting experience as other than using Backbone.js on one project (largely written by other people, so I only really dipped into it to add stuff), when I was volunteered to do the talk by Andy Mcgregor, I didn’t actually know a great deal about Backbone!
When it came to the crunch, i.e. pretty much the day before the talk, I started searching for online tutorials that might demonstrate what I wanted to cover in the talk, and the first one that I found was Hello Backbone.js by Artur Adib, which provides a fantastic step through with a set of examples building up on the previous example. I created a little “To Do” list app based roughly on these examples.
I then found an excellent set of video tutorials called Introduction to Backbone.js, by Joe Zim, which run through some interactive examples for Models, Views, Collections, Routers and Ajax within backbone, which really helped the penny drop for me, and gave me a basis for my own live-coding examples. The audience (of about 20 people – not bad for a highly localised, highly niche meetup!), were a mixture of people who already know backbone and people who have never used it, but hopefully there was something useful there for everyone. On a personal level, being put under pressure to be able to demonstrate something, accelerated my backbone knowledge very quickly, to the point that I would confidently start my next project using backbone.
The moral of the story is – if you want to learn a new skill quickly, you don’t need to pay to go to a workshop – volunteer to do a talk instead! Even if you don’t want to do a talk, find your friendly local user groups (or friendly online user groups, if there’s none local to you), and get involved. I’m not knocking paid workshops – there’s a place for those and i’m sure some of them are good value for money, but i’ve always loved the way that the web community are happy to share their knowledge for free, and you really can find the knowledge out there without spending your hard earned cash! Being part of the web community provides valuable support too when you get stuck, something that doesn’t happen in the world of “traditional” paid training.
The next southville js talk is “An introduction to CoffeeScript” by Tom Holder on wednesday 12th July, kindly hosted again by SimpleWeb. Also keep an eye on the Bristol Web Folk calendar for upcoming web related events in Bristol – there’s loads!
Photo above nabbed from an instagram pic by Chris Mytton