<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>We blog about web development, 
design, technology and lots more.</description><title>pebble {code} blog</title><generator>Tumblr (3.0; @pebblecode)</generator><link>http://blog.pebblecode.com/</link><item><title>Hack Day Live</title><description>&lt;p&gt;What a great day. The whole team working on different projects but of the same theme - the team work was fantastic (helped obviously by the numerous table football breaks and bountiful food!). &lt;/p&gt;

&lt;p&gt;The projects that emerged from the day were:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;Fear the IOC&lt;/b&gt; - a bookmarklet to censor webpages of any term or image of which the IOC may take offence.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Data Visualisations&lt;/b&gt; - taking some scraped data of past Olympic medals and visualising it with &lt;a href="http://mbostock.github.com/d3/"&gt;d3.js&lt;/a&gt;, a very cool Javascript library.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Location-sensitive Chat Rooms&lt;/b&gt; - a service to allow users to gauge the buzz around a particular location, in this case Olympic venues.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Json API for Olympic Data&lt;/b&gt; - Json API giving both historical medal data and 2012 schedule data in an easy to consume way.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Web Visions&lt;/b&gt; - a node.js app taking streaming data from Twitter, 4Square and others and displaying location specific buzz. &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And the winner was&amp;#8230; the Json API, written by Alex with help from scrapers Paul and Toby. Awesome. Congratulations Alex. &lt;/p&gt;

&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m33ruxvmED1qa7q62.jpg"/&gt;&lt;/center&gt;&lt;br/&gt;&lt;p&gt;We are now seeing how best to take these projects forward and make them demonstrable externally - we will keep you up to date! &lt;/p&gt;

&lt;p&gt;For blow-by-blow of the day&amp;#8217;s action, read on.&lt;/p&gt;

&lt;center&gt;&lt;p&gt;&amp;#8212;-&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;20:00 - So, after an super fun day of coding, pairing, sharing, scraping and eating, the team are ready to show and tell. We will eat and then display the results. But in short, a great day. &lt;/p&gt;

&lt;p&gt;19:55 - Pizza here. Getting ready for demonstrations. &lt;/p&gt;

&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m33r5zHEae1qa7q62.jpg"/&gt;&lt;/center&gt;&lt;br/&gt;&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m33r6eXRs91qa7q62.jpg"/&gt;&lt;/center&gt;&lt;br/&gt;&lt;p&gt;19:40 - Project 1. Code name &lt;i&gt;Fear the IOC&lt;/i&gt;! Published on GitHub. Check out Mark&amp;#8217;s handiwork at &lt;a href="http://pebblecode.github.com/fear-the-IOC/"&gt;&lt;a href="http://pebblecode.github.com/fear-the-IOC/"&gt;http://pebblecode.github.com/fear-the-IOC/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;19:24 - Only 36 mins left of the hackday now until presentations, pizza and beer (well, we may have already had a couple of beers!). The demonstrations have started and the last few teams are frantically getting their day&amp;#8217;s toil presentable. Screenshots and explanations of submissions coming soon. &lt;/p&gt;

&lt;p&gt;15:57 - Just over 4 hours to go! Code getting written, committed and shared. &lt;/p&gt;

&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m33dsfzTZ61qa7q62.jpg"/&gt;&lt;/center&gt;&lt;br/&gt;&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m33dswiqtQ1qa7q62.jpg"/&gt;&lt;/center&gt;&lt;br/&gt;&lt;p&gt;14:22 - More data scrapping from various sources. The geo-loc team making good progress, as is the social team. Data visualisation had hit a bump, but now back on track. IOC fear team already on the write up! &lt;/p&gt;

&lt;p&gt;12:40 - Lunch has arrived.&lt;/p&gt;

&lt;p&gt;12:30 - IOC fear bookmarklet preview on the Guardian website - ability to block out IOC trademark words or images: &lt;/p&gt;

&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m334bdSLeA1qa7q62.jpg"/&gt;&lt;/center&gt;&lt;center&gt;&lt;p&gt;Before&amp;#8230;&lt;/p&gt;&lt;/center&gt;&lt;br/&gt;&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m334bnIi5w1qa7q62.jpg"/&gt;&lt;/center&gt;&lt;center&gt;&lt;p&gt;After!&lt;/p&gt;&lt;/center&gt;&lt;br/&gt;&lt;p&gt;12:20 - Massive tea round for Toby! &lt;/p&gt;

&lt;p&gt;11:55 - Wow, raining outside! &lt;/p&gt;

&lt;p&gt;11:35 - Looking at some very interesting data visualisations. &lt;/p&gt;

&lt;p&gt;10:55 - Some images from the morning so far: &lt;/p&gt;

&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m32zl0fHjJ1qa7q62.jpg"/&gt;&lt;/center&gt;&lt;br/&gt;&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m32zmhyO9Y1qa7q62.jpg"/&gt;&lt;/center&gt;&lt;br/&gt;&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m32zmtZIWA1qa7q62.jpg"/&gt;&lt;/center&gt;&lt;br/&gt;&lt;p&gt;10:38 - Data feeds pouring in. Teams working well. Duke Ellington on the wireless! This is good fun! &lt;/p&gt;

&lt;p&gt;09:30 - Break. Teams have been decided and discussions are flowing. The different teams are hitting the following topics: &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Social&lt;/li&gt;
&lt;li&gt;Data visualisation&lt;/li&gt;
&lt;li&gt;Locational / travel&lt;/li&gt;
&lt;li&gt;IOC fear!&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Champagne and kudos for the people&amp;#8217;s choice team. &lt;/p&gt;

&lt;p&gt;09:00 - Ideas flowing.&lt;/p&gt;

&lt;p&gt;08:32 - Team getting warmed up for the hard day ahead! &lt;/p&gt;

&lt;center&gt;&lt;img src="http://media.tumblr.com/tumblr_m32t0yQ2q81qa7q62.jpg"/&gt;&lt;/center&gt;&lt;br/&gt;&lt;p&gt;08:20 - Breakfast getting devoured. Ideas being discussed. Kick off is at 08:45. Excited. &lt;/p&gt;

&lt;p&gt;07:49 - Office prepped. Food ready (courtesy of &lt;a href="http://www.eataldesco.co.uk/"&gt;Al Desco&lt;/a&gt;). Early birds arriving. &lt;/p&gt;</description><link>http://blog.pebblecode.com/post/21838814065</link><guid>http://blog.pebblecode.com/post/21838814065</guid><pubDate>Thu, 26 Apr 2012 08:19:00 +0100</pubDate><category>hackday</category><category>olympics</category><category>agile</category></item><item><title>Open data for London and the Olympics</title><description>&lt;p&gt;Tomorrow pebble {code} will host our first hackday! The theme is Olympics! The IOC data is distinctly not open but there are some good feeds available.&lt;/p&gt;

&lt;h3&gt;Food for developers&lt;/h3&gt;

&lt;p&gt;Who needs coffee, pizza and beer. We need data!&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.tfl.gov.uk/businessandpartners/syndication/default.aspx"&gt;Transport for London&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://data.gov.uk/"&gt;data.gov.uk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://data.london.gov.uk/"&gt;data.london.gov.uk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.twitter.com/docs/streaming-api/methods"&gt;Streaming Twitter API&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.foursquare.com/index"&gt;Foursquare&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.openstreetmap.org/wiki/API_v0.6"&gt;Open Street Map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;YQL[8]&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Some examples of what you might do with these are at &lt;a href="http://www.maptube.org/"&gt;MapTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Have more good links for Open London data? Post them in the comments.&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/21786887439</link><guid>http://blog.pebblecode.com/post/21786887439</guid><pubDate>Wed, 25 Apr 2012 17:17:00 +0100</pubDate></item><item><title>Sending usage stats to Campfire</title><description>&lt;h3&gt;Automate all the things&lt;/h3&gt;

&lt;p&gt;We use Campfire heavily at pebble {code}. After a brief flirtation with IRC we found it was the easiest way to get everyone in the team involved. We post quite a few things to Campfire:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Git commits from GitHub&lt;/li&gt;
&lt;li&gt;Git commits from local, private repositories&lt;/li&gt;
&lt;li&gt;Build notifications from Jenkins&lt;/li&gt;
&lt;li&gt;A few things from Marvin, our &lt;a href="https://github.com/github/hubot"&gt;hubot&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;As everyone is in Campfire is makes lots of sense for us to do this. We don&amp;#8217;t waste time having to ask people in the team what they are doing since it is all there.&lt;/p&gt;

&lt;h3&gt;How are our apps doing?&lt;/h3&gt;

&lt;p&gt;We have recently created a couple of web applications in &lt;a href="http://tricklrapp.com"&gt;Tricklr&lt;/a&gt; and &lt;a href="http://vistazoapp.com"&gt;Vistazo&lt;/a&gt;. Every now and again people ask &amp;#8216;How many users do we have?&amp;#8217; or &amp;#8216;How many projects are there&amp;#8217;. Typically questions like this result in&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;SSHing into the server&lt;/li&gt;
&lt;li&gt;Logging into PostgreSQL&lt;/li&gt;
&lt;li&gt;Running some queries&lt;/li&gt;
&lt;li&gt;Pasting the results into Campfire&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;About the fourth time of doing this it became obvious this is a job for automation!&lt;/p&gt;

&lt;h3&gt;First pass&lt;/h3&gt;

&lt;p&gt;A first pass at this resulted in a quick rake task after about 20 minutes from start to deploy. The rake task uses &lt;a href="https://github.com/collectiveidea/tinder"&gt;tinder&lt;/a&gt; a neat little gem for interacting with Campfire from Ruby.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;task "campfire:stats" =&amp;gt; :environment do
  campfire = Tinder::Campfire.new '[YOUR_ACCOUNT_NAME]', :token =&amp;gt; '[YOUR_TOKEN]'
  room = campfire.find_room_by_id([YOUR_ROOM_ID])
  # Get the data you want with ActiveRecord
  users = User.count
  room.speak "OHAI! Stats from YOUR APP"
  room.paste "Users: #{users}"
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For a quick and dirty solution not bad. This is added to a cron job run on the server at 9.30 each day, just after everyone gets/logs in.&lt;/p&gt;

&lt;h3&gt;Feature requests&lt;/h3&gt;

&lt;p&gt;Some things that would be good to have:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Comparison with yesterday, last week and the month before. &lt;/li&gt;
&lt;li&gt;Make it a Marvin script! This would allow Marvin to tell anyone how the apps were doing on request.&lt;/li&gt;
&lt;li&gt;Package it up as a Node.js module or gem&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.pebblecode.com/post/21640251325</link><guid>http://blog.pebblecode.com/post/21640251325</guid><pubDate>Mon, 23 Apr 2012 11:08:00 +0100</pubDate></item><item><title>Vistazo: The making of our new baby</title><description>&lt;p&gt;&lt;p class="p1"&gt;We publicly released &lt;a href="http://vistazoapp.com/"&gt;&lt;span class="s1"&gt;Vistazo&lt;/span&gt;&lt;/a&gt; recently - a web app to view and manage a team’s schedule - and now it’s time to take a step back and do some reflection upon the story of our new little Pebble Code baby.&lt;/p&gt;
&lt;p class="p1"&gt;It was a natural and organic growth, and it started with the conception of the idea&amp;#8230;&lt;/p&gt;
&lt;p class="p3"&gt;&lt;strong&gt;Conception&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p2"&gt;Vistazo started off as a scratch-our-own-itch type product, when we were struggling to find a simple application that would let us easily keep track of what everyone was working on through the week. We alternated between several different solutions (basecamp, github, pivotal, trello and even a google spreadsheet), and while they were all great products, they weren’t what we wanted here at Pebble Code. Some felt overkill, some felt overly complicated, and some were just clunky to get things done.&lt;/p&gt;
&lt;p class="p2"&gt;That’s when we were incepted with this idea - Hey! We build stuff! We can build this thing ourselves! It’s a simple enough problem to do with a small team, and we can build it to exactly how we want. It’d also be a very nice learning experience for Pebble Code.&lt;/p&gt;
&lt;p class="p5"&gt;&lt;span class="s2"&gt;&lt;a href="http://www.youtube.com/watch?v=RHw2_QbJcNU"&gt;&lt;strong&gt;Business time&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p2"&gt;Vistazo is very much a design driven product, focused primarily on simplicity. We also like the philosophy of &lt;a href="http://en.wikipedia.org/wiki/Unix_philosophy"&gt;&lt;span class="s1"&gt;do one thing and do it well&lt;/span&gt;&lt;/a&gt;, which Vistazo strives for in the space of team scheduling.&lt;/p&gt;
&lt;p class="p2"&gt;Development started with wireframes and design of the interactions, to get an idea of how it would work before we coded it all up.&lt;/p&gt;
&lt;p class="p2"&gt;&lt;img src="http://media.tumblr.com/tumblr_m2s5d4bgfR1qdcl2v.jpg"/&gt;&lt;/p&gt;
&lt;p class="p2"&gt;Having the initial designs and some html mockups, along with choosing some &lt;a href="http://www.sinatrarb.com/"&gt;&lt;span class="s1"&gt;lean&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.mongodb.org/"&gt; &lt;span class="s1"&gt;technologies&lt;/span&gt;&lt;/a&gt;, Mark, our resident designer, and I were able to create a usable prototype within a week. This v0.1.0 release had most of what we needed internally, with the ability to view weekly schedules, create projects, and add/remove/drag and drop timetable items. Woot! It was a fun bit of work, and not much of an investment at all.&lt;/p&gt;
&lt;p class="p3"&gt;&lt;strong&gt;Gestation&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p2"&gt;Although Vistazo was usable after this 1 week prototype, we felt there was still a lot of opportunity for it to grow, and more we could do with it. So we decided to carry on with our designer-developer duo setup (with great support from the rest of the team along the way) and iterate on 1-2 week sprints to refine the app, and also generalise it to be useful for people outside of Pebble Code.&lt;/p&gt;
&lt;p class="p2"&gt;&lt;a href="http://pebbleit.com/"&gt;&lt;span class="s1"&gt;Pebble IT&lt;/span&gt;&lt;/a&gt;, our sister company, was one of our first guinea pigs to test the software. From their use, we realised that we needed the idea of teams, to allow people to be in more than one team and view different schedules.&lt;/p&gt;
&lt;p class="p2"&gt;An obvious type of feature in a team scheduling app, but we kept to our simplicity philosophy and only added it when we needed to. &lt;a href="http://en.wikipedia.org/wiki/KISS_principle"&gt;&lt;span class="s1"&gt;Keeping things simple&lt;/span&gt;&lt;/a&gt; helped to manage scope creep, and especially for such a small team, it was necessary to keep things realistically doable.&lt;/p&gt;
&lt;p class="p3"&gt;&lt;strong&gt;Bump!&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p2"&gt;Feedback is such an invaluable thing during the development process. It’s very easy to get stuck in your own head when creating something, and watching other people use your product is one of the best ways to find things you missed.&lt;/p&gt;
&lt;p class="p2"&gt;Amongst the development sprints, there was a dedicated sprint to user testing. We used &lt;span class="s1"&gt;&lt;a href="http://silverbackapp.com/"&gt;Silverback&lt;/a&gt;&lt;/span&gt; and a questionnaire on a handful of users for this. Silverback was a useful tool to see exactly how people were navigating the site, and seeing how they reacted to the different tasks. It helps so much, just being able to see people’s faces and hear what problems they encounter as they are using the app.&lt;/p&gt;
&lt;p class="p2"&gt;&lt;img src="http://media.tumblr.com/tumblr_m2s5j9LfWy1qdcl2v.jpg"/&gt;&lt;/p&gt;
&lt;p class="p2"&gt;Also, a more simple method, requiring less effort was just to push the code to a server, send an email out to the office and ask for feedback. The latter shouldn’t be dismissed either, as it was equally as valuable.&lt;/p&gt;
&lt;p class="p2"&gt;All this feedback helped to find usability bugs, give us insight to what people thought of the app and helped find out where we should direct our attention for new features. Project view and month view came from these feedback sessions, and they’re some of our proudest features.&lt;/p&gt;
&lt;p class="p3"&gt;&lt;strong&gt;Pop! Out she comes!&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p3"&gt;&lt;strong&gt;&lt;img src="http://media.tumblr.com/tumblr_m2s51nbEwZ1qdcl2v.png"/&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p2"&gt;It was a clean and safe birth, with all parties coming out unscathed&amp;#8230; and now &lt;a href="http://vistazoapp.com/"&gt;&lt;span class="s1"&gt;Vistazo&lt;/span&gt;&lt;/a&gt; is available to the world! =)&lt;/p&gt;
&lt;p class="p2"&gt;It was great fun making &lt;a href="http://vistazoapp.com/"&gt;&lt;span class="s1"&gt;Vistazo&lt;/span&gt;&lt;/a&gt;, playing around with new technologies and learning a whole bunch about product development along the way. Please, have a play with the new kiddo, and if you have any feedback or suggestions, send them our way at &lt;a href="mailto:vistazo@pebblecode.com"&gt;&lt;span class="s1"&gt;vistazo@pebblecode.com&lt;/span&gt;&lt;/a&gt;. Enjoy!&lt;/p&gt;&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/21434355185</link><guid>http://blog.pebblecode.com/post/21434355185</guid><pubDate>Fri, 20 Apr 2012 14:40:33 +0100</pubDate></item><item><title>Vistazo goes live!</title><description>&lt;p&gt;Today we are proud to release our latest bouncing baby to the public.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m29f567g0p1qz7kgs.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Vistazo is a lightweight web application to help small teams keep track of who is working on what and when they are working on it.&lt;/p&gt;

&lt;p&gt;We created Vistazo to solve a problem we were having at the pebble {code} office with keeping track of what everyone was working on. We found the available solutions for team/time management were far too complex for our needs, often adding in a ton of functionality that we really didn’t need. Just like any other great software company when we discovered the right tool for us didn’t exist, we decided to build our own.&lt;/p&gt;

&lt;p&gt;We’ve been using (and loving) Vistazo internally for a few months and now we&amp;#8217;re at a stage where we’re happy to share it with the public.&lt;/p&gt;

&lt;p&gt;Vist vistazoapp.com to try it out for yourself.&lt;/p&gt;

&lt;p&gt;Any feedback you have about it is greatly received, so please get in touch if you have any issues, would like to request a feature, or preferably just to tell us how much you love Vistazo!&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/20902818823</link><guid>http://blog.pebblecode.com/post/20902818823</guid><pubDate>Wed, 11 Apr 2012 14:58:05 +0100</pubDate><category>vistazo</category></item><item><title>Budget 2012 and us</title><description>&lt;p&gt;Let&amp;#8217;s frame where we are coming from - pebble {code} is a software company with (much) less than £50M turnover and less than £300K profit&amp;#8230;&lt;/p&gt;

&lt;p&gt;What does this mean for us? &lt;/p&gt;

&lt;p&gt;Well, for now, Corporation Tax will remain at 20% - fine. However, if you are a business with greater than £300K profit, you are down to 24%, from 26% - good. &lt;/p&gt;

&lt;p&gt;There is good news for us software developers if we have patents - Patent Box says that profits made from patents will only be charged at 10% Corporation Tax - good. &lt;/p&gt;

&lt;p&gt;No reduction in business rates - bad. Instead they will go ahead with a rise to 5.6% - grr. There is also no reduction on fuel tax - not a biggy for us, but still - bad.&lt;/p&gt;

&lt;p&gt;In terms of cash, a number of banks have signed up to the National Loan Guarantee Scheme that will have banks lending at 1% lower rates than those outside of the scheme for businesses with less than £50M turnover - this is good if you are able get a loan approved in the first place! &lt;/p&gt;

&lt;p&gt;So, that is a very quick round up of what that Government&amp;#8217;s Budget 2012 has meant for us as a small business. Not lots of good news, but not dreadful. &lt;/p&gt;

&lt;p&gt;There is however another very interesting Government scheme that has come to our attention recently - &lt;a href="http://www.seis.co.uk/"&gt;SEIS&lt;/a&gt; or &lt;a href="http://www.seis.co.uk/"&gt;Seed Enterprise Investment Scheme&lt;/a&gt;. In a nutshell it offers massive tax breaks for investors wanting to invest in startups. Rightly so, the chancellor sees us small businesses as the life blood of the economy. Boom!&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/19777113650</link><guid>http://blog.pebblecode.com/post/19777113650</guid><pubDate>Fri, 23 Mar 2012 09:25:29 +0000</pubDate><category>small business</category><category>budget</category><category>startups</category></item><item><title>Will it blend?</title><description>&lt;p&gt;Yes!&lt;/p&gt;



&lt;p&gt;Recently I&amp;#8217;ve been experimenting with Illustrator&amp;#8217;s blend tool. After a little trial and error I’ve developed a few tricks for producing interesting gradient-based effects with the specified steps setting. Now that I’m pretty comfortable with the techniques I’ve developed I thought it was time to share.&lt;/p&gt;



&lt;p&gt;First let have a look at how the blend tool works.&lt;/p&gt;



&lt;p&gt;&lt;span id="internal-source-marker_0.272348694736138"&gt;Start by drawing two parallel lines. It doesn&amp;#8217;t mater how you style these lines. Just make sure that the lines are parallel and (for now) they have the same style. &lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m14npsQtvL1r1hmko.png"/&gt;&lt;/p&gt;



&lt;p&gt;Next go to the top menu&amp;#160;: object &amp;gt; blend &amp;gt; blend options. Select specified steps for spacing. Input 8 for the number of spaces. And select “align to path” from the two buttons.&lt;/p&gt;



&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m14nt38nJF1r1hmko.png"/&gt;&lt;/p&gt;



&lt;p&gt;Next go to the top menu&amp;#160;: object &amp;gt; blend &amp;gt; make. You can see illustrator has rendered us some more lines between the two we started with.&lt;/p&gt;



&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m14o4oX8wM1r1hmko.png"/&gt;&lt;/p&gt;



&lt;p&gt;Larger numbers in the specified steps field give you more lines, lower numbers less. Simples. This is essentially how the blend to works with specified steps.&lt;/p&gt;



&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m14o6v2PWA1r1hmko.png"/&gt;&lt;/p&gt;



&lt;p&gt;Now things get interesting. Blending two paths with either different thicknesses or colours will (yeah you guessed it) blends between the two values.&lt;/p&gt;



&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m14o7ttp7q1r1hmko.png"/&gt;&lt;/p&gt;



&lt;p&gt;We don’t just have to use simple paths, we can use shapes / grouped objects as well.&lt;/p&gt;



&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m14o8bTZPV1r1hmko.png"/&gt;&lt;/p&gt;



&lt;p&gt;Any (vector) effects you have on the paths will also be blended. Here we have zig-zag (smooth), roughen, and scribble. &lt;img src="http://media.tumblr.com/tumblr_m14o90HM4v1r1hmko.png"/&gt;&lt;/p&gt;



&lt;p&gt;We can combine all these elements to make some pretty strange visuals. This is an example of a thin blue line with the roughen effect applied blended with a fat pink line with the zig-zag effect applied.&lt;/p&gt;



&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m14o9sKCge1r1hmko.png"/&gt;&lt;/p&gt;



&lt;p&gt;Now we can use this technique to create a thousand different type of visuals. We can make ordered patterns, psychedelic abstract compositions, and even use it to create (relatively) subtle type treatments. &lt;/p&gt;



&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m14oeoBeic1r1hmko.png"/&gt;&lt;img src="http://media.tumblr.com/tumblr_m14oevAL0g1r1hmko.png"/&gt;&lt;img src="http://media.tumblr.com/tumblr_m14of0ZAjL1r1hmko.png"/&gt;&lt;/p&gt;



&lt;p&gt;If you have any questions or if you&amp;#8217;ve used this technique to create something, please let us know in the comments. Above all, have fun with it. The blend tool is my current favorite vector tool because it lets you experiment easily and sometimes gives you results you just weren&amp;#8217;t expecting. &lt;/p&gt;</description><link>http://blog.pebblecode.com/post/19571810699</link><guid>http://blog.pebblecode.com/post/19571810699</guid><pubDate>Mon, 19 Mar 2012 13:51:00 +0000</pubDate></item><item><title>Dump the big 6</title><description>&lt;p&gt;Here at pebble {code} we have our heads firmly out of the sand.  We believe in climate change and that as a responsible company we should be doing everything in our power to mitigate it&amp;#8217;s effects.  That&amp;#8217;s why we&amp;#8217;re proud to shout about being a customer of &lt;a href="http://www.ecotricity.co.uk/"&gt;Ecotricty&lt;/a&gt;.  Their new campaign to &amp;#8220;&lt;a href="http://zerocarbonista.com/2012/02/08/dump-the-big-six-go-on-you-know-you-want-to/"&gt;Dump the Big Six&lt;/a&gt;&amp;#8221; strikes a chord here at pebble - there&amp;#8217;s literally no reason not to switch your energy company today, away from one of the big 6, to a cleaner, greener supplier.&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="315" src="http://www.youtube.com/embed/ggg3C87UVCY" width="420"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;If you plan to switch wither your home or business to Ecotricity, see the details &lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=ggg3C87UVCY"&gt;here&lt;/a&gt; on how to make a donation to our favourite green campaigning charity at the same time.&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/18373699091</link><guid>http://blog.pebblecode.com/post/18373699091</guid><pubDate>Mon, 27 Feb 2012 09:19:09 +0000</pubDate></item><item><title>George talks Node.js</title><description>&lt;p&gt;Our Creative Director, George (&lt;a href="http://twitter.com/shapeshed"&gt;@shapeshed&lt;/a&gt;), took to the stage on Monday night to give a talk on &lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt;. The event was hosted by &lt;a href="http://www.forwardtechnology.co.uk/"&gt;Forward&lt;/a&gt; who gave us free beer and pizza - thank you Forward! &lt;/p&gt;

&lt;iframe src="http://player.vimeo.com/video/38580971?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="225" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href="http://vimeo.com/38580971"&gt;An Introduction to Node.js&lt;/a&gt; from &lt;a href="http://vimeo.com/webstandards"&gt;London Web Standards&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

&lt;center&gt;

&lt;p&gt;
&lt;img src="http://media.tumblr.com/tumblr_lzfn1neYIM1qa7q62.jpg"/&gt;&lt;/p&gt;

&lt;/center&gt;

&lt;p&gt;The evening was a great success - as we heard from numerous people afterwards - and it was great to hear from a few companies that are already creating successful applications using Node.js. &lt;/p&gt;

&lt;p&gt;George is also writing a book on the subject, titled &amp;#8216;&lt;a href="http://nodejsbook.io/the-author/"&gt;Sam&amp;#8217;s Teach Yourself Node.js in 24 Hours&lt;/a&gt;&amp;#8217;. It is due for release later this year and you can pre-order on &lt;a href="http://www.amazon.co.uk/Sams-Teach-Yourself-Node-js-Hours/dp/0672335956/ref=sr_1_1?ie=UTF8&amp;amp;qid=1329305805&amp;amp;sr=8-1"&gt;Amazon&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For more information and to get involved, check out &amp;#8216;&lt;a href="http://lnug.org/"&gt;lnug&lt;/a&gt;&amp;#8217; (London Node User Group), also hosted by Forward - next meetup next Wednesday 22nd February! (as we were told just a few times). &lt;/p&gt;

&lt;script src="http://speakerdeck.com/embed/4f393e29fe6466001f01cd26.js"&gt;&lt;/script&gt;</description><link>http://blog.pebblecode.com/post/17653720808</link><guid>http://blog.pebblecode.com/post/17653720808</guid><pubDate>Wed, 15 Feb 2012 11:50:00 +0000</pubDate><category>nodejs</category><category>frameworks</category><category>book</category></item><item><title>Styling for Tricklr 1.0</title><description>&lt;p&gt;Tricklr&amp;#8217;s previous UI was developed &amp;#8216;old school&amp;#8217; - the design was mocked up in Photoshop, all the relevant images were ripped and then the styling was approximated in css.&lt;/p&gt;
&lt;p&gt;When we started the redesign, we decided to to try a new approach to the design and implementation. Here’s a run down of what we did and why we think the new approach was a success.&lt;/p&gt;
&lt;p&gt;We started off by creating a separate style guide that could be applied to all of the elements in the app. To start, we created a simple .html doc containing all the elements we needed to style. We tried to give all elements class names that were as generic as possible (about 60% of the elements have the class button).&lt;/p&gt;
&lt;p align="center"&gt;&lt;img align="middle" alt="The blank .html doc ready to get beautiful." src="http://media.tumblr.com/tumblr_lxvy305Pzo1r1hmko.png"/&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;em&gt;The blank .html doc ready to get beautiful.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;With this blank canvas ready, we started to style each element. Most of the styling was done ‘in browser’ using css3 goodness, but there was also quite a lot of Photoshop / Illustrator work done at this stage for things like the tiling background and working out colours for gradients.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://media.tumblr.com/tumblr_lxvy3kTBHi1r1hmko.png"/&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;em&gt;The style guide with css/images all linked up.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We also made a folder of tiling noise .pngs of different opacities - this let us add different amounts of noise to different elements without having to keep going back and forth between css and Photoshop each time. If you’d like to use the same set up for your designs you can download it &lt;a href="http://dl.dropbox.com/u/14876849/noise-pngs.zip" title="noise pngs" target="_blank"&gt;here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once happy with the style guide, we (the developers) started adding the styles to the app. We used &lt;a href="http://compass-style.org/" title="Compass" target="_blank"&gt;compass&lt;/a&gt; to handle all the vendor prefixes which made dealing with all the nice css3 stuff that much easier.&lt;/p&gt;
&lt;p&gt;After all the styles were in the app we found a few small bugs and made some tweaks here and there, mostly to do with positioning rather than style.&lt;/p&gt;
&lt;p&gt;Now you might be asking yourself why bother with creating a style guide when you could just style the app in browser and have the same effect? Here are a few reasons why we think it’s worth adding that extra step:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;When your not worried about anything linking up or having any functionality you can focus purely on the UI.&lt;/li&gt;
&lt;li&gt;Separating design elements from the app as a whole helped us keep similar elements consistent.&lt;/li&gt;
&lt;li&gt;Designers can work on the UI whilst developers work on functionality without getting in each others way.&lt;/li&gt;
&lt;li&gt;You can see all the elements for the entire app on one page rather than having to switch pages to check out what’s what. This also lets you see how the UI works as a whole rather than for each page.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Overall it’s probably slightly more time consuming to do things this way but you get a better result. The design we ended up with really succeeds because everything with the UI is coherent and that’s a direct result of taking the time to design the style guide.&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/16013229022</link><guid>http://blog.pebblecode.com/post/16013229022</guid><pubDate>Tue, 17 Jan 2012 17:52:00 +0000</pubDate><category>css</category><category>twitter</category><category>design</category><category>ui</category><category>tricklr</category><category>product</category></item><item><title>Tricklr 1.0</title><description>&lt;p&gt;We have finally found the time to release Tricklr - an app we have had in the works for a while. &lt;/p&gt;

&lt;p&gt;Tricklr solves the annoying problem of being continuously active on Twitter without having to stop 10 times a day to think about writing a tweet. Now, you can write lots of tweets in a oner and they will just &lt;i&gt;trickl&lt;/i&gt; out at a pace you set. &lt;/p&gt;

&lt;p&gt;Tricklr is a very simple app and we hope that you like it! There are a couple of screenshots below, but probably best to just go and &lt;a href="http://tricklrapp.com"&gt;try it out&lt;/a&gt;! 

&lt;/p&gt;&lt;center&gt;&lt;p&gt;
&lt;img src="http://media.tumblr.com/tumblr_lxqql1qWmM1qa7q62.png"/&gt;
The Tricklr Queue&lt;/p&gt;&lt;/center&gt;

&lt;center&gt;&lt;p&gt;
&lt;img src="http://media.tumblr.com/tumblr_lxqql9sPDM1qa7q62.png"/&gt;
The Tricklr Settings&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;Try Tricklr at &lt;a href="http://tricklrapp.com"&gt;tricklrapp.com&lt;/a&gt; and please let us have any feedback on &lt;a href="http://getsatisfaction.com/pebblecode/topics/new"&gt;our GetSatisfaction page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/15777853652</link><guid>http://blog.pebblecode.com/post/15777853652</guid><pubDate>Fri, 13 Jan 2012 16:11:23 +0000</pubDate><category>tricklr</category><category>twitter</category><category>social</category><category>product</category></item><item><title>Creating possible combinations from a list of lists in F#</title><description>&lt;p&gt;Just a short post after I came across an interesting problem while learning F# and couldn’t find any great resources to solve what seems to be quite a generic problem.&lt;/p&gt;
&lt;p&gt;The scenario is:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;You have a list of lists where each of the inner lists contains 1 or more element. &lt;/li&gt;
&lt;li&gt;You want to find all possible combinations where you take precisely one element from each inner list.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The example of where I found this problem is calculating the possible value of a hand in blackjack:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;You have a set of cards &lt;/li&gt;
&lt;li&gt;Each card has a value &lt;/li&gt;
&lt;li&gt;Ace has both the value 1 and 11 at the same time &lt;/li&gt;
&lt;li&gt;You might be holding more than 1 ace&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Therefore we want to be able to calculate the possible values the card could be determined to have.&lt;/p&gt;
&lt;p&gt;We represent the value of each card as a list. The five of hearts is [5], the jack of clubs is [10], and the ace of spades is [1;11]. If you hold all three of these cards in your hand you can either make 16 or 26.&lt;/p&gt;
&lt;p&gt;We would represent this hand as [[5];[10];[1;11]] and would ultimately aim to get our results in the form [16;26]. However as an intermediate step we want to transform our hand into a list of possible card values such as [[5;10;1];[5;10;11]] which we can then simply sum to get our result.&lt;/p&gt;
&lt;p&gt;Here’s the function that recursively expands all combinations, returning a list of each combination of items.&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span&gt;let rec &lt;/span&gt;combinations (l) =
    &lt;span&gt;match &lt;/span&gt;l &lt;span&gt;with
    &lt;/span&gt;| [] &lt;span&gt;-&amp;gt; &lt;/span&gt;[]
    | h::[] &lt;span&gt;-&amp;gt; &lt;/span&gt;h |&amp;gt; List.map (&lt;span&gt;fun &lt;/span&gt;opt &lt;span&gt;-&amp;gt; &lt;/span&gt;[opt])
    | h::t &lt;span&gt;-&amp;gt;
        &lt;/span&gt;combinations t
        |&amp;gt; List.map (&lt;span&gt;fun &lt;/span&gt;tOpts &lt;span&gt;-&amp;gt;
            &lt;/span&gt;h |&amp;gt; List.map (&lt;span&gt;fun &lt;/span&gt;hOpt &lt;span&gt;-&amp;gt; &lt;/span&gt;hOpt ::tOpts)) 
        |&amp;gt; List.concat
&lt;/pre&gt;
&lt;p&gt;Essentially, a quick line by line run through is:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;To cover all cases, if this is called with an empty list, just return an empty list. This is not used in the recursion. &lt;/li&gt;
&lt;li&gt;If we are looking at the last list of options then return each option as a new list containing only itself. &lt;/li&gt;
&lt;li&gt;If we are in the middle of the list (or equally the start) then get the combinations of the tail option lists giving us a list of combinations. &lt;/li&gt;
&lt;li&gt;For each combination,:  &lt;ol&gt;&lt;li&gt;For each option in the current set of options  &lt;ol&gt;&lt;li&gt;Add the option to the beginning of each of the tail combinations&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Flatten the list of tail combinations of head options to outcome list to a list of outcome lists.&lt;/li&gt;
&lt;/ol&gt;</description><link>http://blog.pebblecode.com/post/15769678315</link><guid>http://blog.pebblecode.com/post/15769678315</guid><pubDate>Fri, 13 Jan 2012 09:59:35 +0000</pubDate><category>fsharp</category><category>listoflist</category><category>blackjack</category><category>cards</category></item><item><title>Hack Day Paris</title><description>&lt;p&gt;Two member of our web team, Tak and Vince spent the weekend in Paris to take part in the &lt;a href="http://hackdayparis.org/"&gt;Paris Hack Day&lt;/a&gt;.  Sounds like it was a fantastic event, and together with their 3 team mates, their innovative categorised free goods recycling scheme won the social prize at the event, well done guys!  The demo of their app, freesbee can be found here&lt;/p&gt;
&lt;p&gt;&lt;a title="Freesbee" href="http://hackdayparis.soey.me.uk/"&gt;&lt;a href="http://hackdayparis.soey.me.uk/"&gt;http://hackdayparis.soey.me.uk/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Full write up coming soon&amp;#8230;&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/12507455809</link><guid>http://blog.pebblecode.com/post/12507455809</guid><pubDate>Tue, 08 Nov 2011 09:26:52 +0000</pubDate></item><item><title>Getting a startup off the ground</title><description>&lt;h3&gt;Following the yellow brick road&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l69juj4maT1qz7kgs.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="http://www.flickr.com/photos/cdevers/4602805654/"&gt;Chris Devers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recently at pebble we&amp;#8217;ve had a lot of discussion about the best way to get a startup off the ground. We have the ideas and the skills but need a coherent way to make it happen. We&amp;#8217;ve got a mixed team of designers, developers and business level people all of whom have different skills and different ideas on the right way forward.&lt;/p&gt;

&lt;p&gt;Here are the options as we see it and the relative pros and cons.&lt;/p&gt;

&lt;h3&gt;Use client work to fund the startup&lt;/h3&gt;

&lt;p&gt;This model works where the team works on client projects in order to fund the time to work on the startup. The profit from the client work pays salaries and any fat is pooled into a fund to support working on the startup project.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;No external or personal investment is required&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Lead time before the fund is big enough and the project can start. &lt;/li&gt;
&lt;li&gt;Will end up working on the project in fits and starts. &lt;/li&gt;
&lt;li&gt;Client work never ends!&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Hack days&lt;/h3&gt;

&lt;p&gt;Come into the office at weekends to work on the startup. Given the short amount of time available it is felt more work will get done and the project will progress further.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Everyone is available at the same time&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;This isn&amp;#8217;t great for life outside of work and needs an understanding family/partner&lt;/li&gt;
&lt;li&gt;Very short amount of time to work on the project&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Spare time&lt;/h3&gt;

&lt;p&gt;This essentially asks members of the team to work on the project for free in their spare time. Particularly for designers and developers this can be a significant amount of time.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;If you can find a willing developer this is a great option as it doesn&amp;#8217;t affect cashflow or client business.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Pressure on personal life. &lt;/li&gt;
&lt;li&gt;No guarantee that you&amp;#8217;ll actually see a return on the investment of your time. &lt;/li&gt;
&lt;li&gt;Risk of developer burn out.&lt;/li&gt;
&lt;li&gt;Working in fits and starts.&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Venture Capital Investment&lt;/h3&gt;

&lt;p&gt;Go into the market and see if an idea can get investment.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The project will be funded properly so a team can be resourced properly.&lt;/li&gt;
&lt;li&gt;Dedicated time to the project&lt;/li&gt;
&lt;li&gt;Bad ideas will quickly be shown to be bad ideas&lt;/li&gt;
&lt;li&gt;No need to continue client work&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Need to give a significant part of the business away&lt;/li&gt;
&lt;li&gt;Very competitive&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Personal Investment&lt;/h3&gt;

&lt;p&gt;Members of the project team put up their own cash in order to fund a project.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Able to resource a project properly&lt;/li&gt;
&lt;li&gt;Full ownership of the business&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Personal money at stake&lt;/li&gt;
&lt;li&gt;Further rounds of investment likely to be required&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Develop something for a client then spin it off&lt;/h3&gt;

&lt;p&gt;This model means developing a product for a client and then extracting it into a web application. There are issues over intellectual property here but if these can be resolved this is a great option.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;You have an active client to help scope the product&lt;/li&gt;
&lt;li&gt;You get paid for it&lt;/li&gt;
&lt;li&gt;The development costs are largely covered by the client&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Cons&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The product may end up being too specific to the client &lt;/li&gt;
&lt;li&gt;Intellectual property issues&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;The biggest issue in all of this is funding. We have the skills and the ideas but we also have mortgages and families. None of the options are 100% perfect and the one we&amp;#8217;ll choose won&amp;#8217;t necessarily be the right one for all situations.&lt;/p&gt;

&lt;p&gt;Ultimately this situation is no different from normal business rules and getting a business off the ground. It is about risk and return. Some options are safer and take longer to achieve, whilst others are more risky but resolve the situation more quickly.&lt;/p&gt;

&lt;p&gt;So take your pick Dorothy.&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/11607824403</link><guid>http://blog.pebblecode.com/post/11607824403</guid><pubDate>Tue, 18 Oct 2011 10:28:44 +0100</pubDate><category>startups</category></item><item><title>Fetching and caching Google Calendar data in Rails</title><description>&lt;p&gt;Recently we had a requirement to show Google Calendar data for a client on a Rails intranet project. The requirements were a bit outside what&amp;#8217;s offered by the embedded iFrame option so we needed a better solution to retrieve Google calendar data.&lt;/p&gt;

&lt;h3&gt;Options for getting data from Google Calendar&lt;/h3&gt;

&lt;p&gt;The simplest option is just to use the iFrame that Google provide that is accessible from your Google Calendar under Settings &amp;gt; Calendars &amp;gt; Name of your Calendar  &amp;gt; Embed This Calendar. You don&amp;#8217;t really get to customise this though so what you see is what you get&lt;/p&gt;

&lt;p&gt;If you want the raw data so you can do things with it Google publish the &lt;a href="http://code.google.com/p/gdata-ruby-util/"&gt;gdata-ruby-util&lt;/a&gt; Ruby library which provides an interface into Google&amp;#8217;s Data APIs. This is a very useful gem, providing full access to lots of data across Google services. From a Ruby perspective it seemed like you need to write a lot of code for a simple API call.&lt;/p&gt;

&lt;p&gt;Better for our requirments was the &lt;a href="http://rubyforge.org/projects/gcal4ruby/"&gt;GCal4Ruby&lt;/a&gt; gem that provides a clean interface to Google Calendar data. It works for both Google and Hosted Accounts and with just six lines of ruby you can get event data for a particular calendar:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;service = GCal4Ruby::Service.new

service.authenticate("USERNAME", "PASSWORD")
cal = GCal4Ruby::Calendar.find(
    service, 
    'YOUR_CALENDAR',
    {:scope =&amp;gt; :first}
)
events = GCal4Ruby::Event.find(
    cal, 
    "", 
    {
     :range =&amp;gt; {:start =&amp;gt; Time.parse("08/04/2000"), 
     :end =&amp;gt; Time.parse("09/04/2010")}
    }
)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once you&amp;#8217;ve got the data you can iterate over it as you want&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;for event in events
    #do stuff here
    puts event.title 
end
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Caching&lt;/h3&gt;

&lt;p&gt;The API call takes a while to come back so we don&amp;#8217;t really want the user experience to be impacted by slow load times. We can use &lt;a href="http://guides.rails.info/caching_with_rails.html"&gt;Rails caching&lt;/a&gt; to store the response and only fetch it when we need to. We put this into a rake task so that we could call it using a cron script to keep the calendar up to date&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;task :gcal_update  =&amp;gt; :environment do
    Rails.cache.delete('gcal_events')
    Rails.cache.fetch('gcal_events') {
    gservice = GCal4Ruby::Service.new
    gservice.authenticate("USERNAME", "PASSWORD")
    calendar = GCal4Ruby::Calendar.find(gservice, 'your calendar',  {:scope =&amp;gt; :first})
    events = GCal4Ruby::Event.find(calendar, "", {
        :range =&amp;gt; {:start =&amp;gt; Time.now.beginning_of_day, :end =&amp;gt; Time.now.advance(:days =&amp;gt; 7)}, 
        :singleevents =&amp;gt; true, 
        :max_results =&amp;gt; 1000, 
        :sortorder =&amp;gt; "ascending" })
        upcoming_events = {}
        # We're saving the next 7 days of events
        days = Date.today..Date.today.advance(:days =&amp;gt; 7)
        # initialize the hash
        days.each{ |day| upcoming_events["#{day.to_s}"] = [] 
    }
    events.each do |e|
        # should find out if its an all day event or a recurring event. 
        event = Hash.from_xml(e.to_xml)["entry"]
        days.each do |day|
            current_event = {}
            if (event["when"]["startTime"].to_date &amp;lt;= day) and (event["when"]["endTime"].to_date &amp;gt;= day)
                # save useful data into a hash
                current_event["all_day"] ||= event["when"]["startTime"].to_time.to_date &amp;lt; event["when"]["endTime"].to_time.to_date ? true : false
                current_event["title"] = event["title"]
                current_event["uri"] = event["link"][0]["href"]
                current_event["time"] = event["when"]["startTime"].to_time.strftime('%H:%M') if event["when"]["startTime"].to_date == event["when"]["endTime"].to_date
                upcoming_events["#{day.to_s}"].push(current_event)
            end
        end
    end
  upcoming_events
}
end
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Showing the calendar&lt;/h3&gt;

&lt;p&gt;Now in our controller we have an easy way to get the latest calendar data and we can then loop over it in our view&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@calendar = Rails.cache.read('gcal_events')
&lt;/code&gt;&lt;/pre&gt;</description><link>http://blog.pebblecode.com/post/11607822701</link><guid>http://blog.pebblecode.com/post/11607822701</guid><pubDate>Tue, 18 Oct 2011 10:28:35 +0100</pubDate><category>Google Calendar</category><category>Rails</category></item><item><title>You are the designer</title><description>&lt;p&gt;New websites and tools for browsers are showing that users have more control over design than ever.&lt;/p&gt;

&lt;p&gt;With the release of Safari 5 Apple added a &lt;a href="http://www.apple.com/safari/whats-new.html#reader"&gt;Reader feature&lt;/a&gt; that takes a web page and formats it for easy reading. This type of feature has been around for a while in Chrome and Firefox via the Readability Extension (&lt;a href="https://chrome.google.com/extensions/detail/jggheggpdocamneaacmfoipeehedigia?hl=en"&gt;Chrome&lt;/a&gt; &amp;amp; &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/46442/"&gt;Firefox&lt;/a&gt;) and gives users the option to reformat the page in a more readable format. Here&amp;#8217;s the pebble blog reformated using Readability.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l41z0k3U7d1qz7kgs.jpg" alt="'pebble Blog Reformatted'"/&gt;&lt;/p&gt;

&lt;p&gt;At pebble we&amp;#8217;ve really been enjoying using these tools to get rid of unnecessary navigation and adverts, and correct poor typography.&lt;/p&gt;

&lt;p&gt;What do websites need to be able to take advantage of this? Not much - providing you have used well-formed HTML your web pages will be neatly formatted by these extensions.&lt;/p&gt;

&lt;h3&gt;APIs also free content from design&lt;/h3&gt;

&lt;p&gt;Another project that caught our eye this week was the &lt;a href="http://guardian.gyford.com/"&gt;reformatted Guardian site&lt;/a&gt; created by &lt;a href="http://www.gyford.com/"&gt;Phil Gyford&lt;/a&gt;. This takes content from the Guardian API and reformats it for easy reading. We have found it works particularly well on the iPad and is a great example of how publishing your content via an API can give it new contexts without any effort from the creators of the content.&lt;/p&gt;

&lt;h3&gt;Where does this leave the designer?&lt;/h3&gt;

&lt;p&gt;We are the first to admit the importance of UI design but these examples show that, like it or not, you the user will have greater control over how content looks. Browsers are offering users more options to assign custom styles, turn parts of the page on and off or to change the layout entirely.&lt;/p&gt;

&lt;p&gt;In our opinion this is a good thing. The web should be open and users should be able to choose how content appears.&lt;/p&gt;

&lt;h3&gt;And.. don&amp;#8217;t change our reader&lt;/h3&gt;

&lt;p&gt;Shortly after the Safari 5 feature several users began publishing &lt;a href="http://brettterpstra.com/2010/06/12/safari-reader-antique-hack/"&gt;custom styles for the Reader page&lt;/a&gt; allowing Safari users to change the way the reader page looked and Apple had intended.&lt;/p&gt;

&lt;p&gt;This provoked unhappiness from Apple employees including &lt;a href="http://farukat.es/journal/2010/06/456-stop-hacking-safari-reader"&gt;Faruk Ateş&lt;/a&gt; who wrote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Don&amp;#8217;t risk unwitting users&amp;#8217; safety or their user experience with your hacking suggestions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I&amp;#8217;ll leave you to mull on the irony of that.&lt;/p&gt;

&lt;p&gt;Using the browser to customise web pages will become more popular so expect designers to throw their toys out of their prams and users to rejoice that they can view pages how they want to.&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/11607821126</link><guid>http://blog.pebblecode.com/post/11607821126</guid><pubDate>Tue, 18 Oct 2011 10:28:27 +0100</pubDate><category>browsers</category><category>design</category></item><item><title>pebble.it on github</title><description>&lt;p&gt;&lt;img alt="pebblecode on github" src="http://media.tumblr.com/tumblr_lqw97kYnrf1qld9wg.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;The dev team at pebble.it are proud to announce that we finally &lt;a href="http://github.com/pebblecode"&gt;have a home on github&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;When we started the development arm of the business we stated that being an active member of open source projects was one our goals. We also have a lot of things that we think would be useful to others. We have used many, many open source projects in our work so it is high time we started to give back.&lt;/p&gt;
&lt;p&gt;Having a public account will allow us to publish our work and hopefully learn from others in the process. We have plans to publish things like our default Rails app, ruby scripts, puppet configuration, some work we’ve been doing in F#, our default CSS framework as well as miscellaneous shell scripts.&lt;/p&gt;
&lt;p&gt;Hurray!&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/11607819225</link><guid>http://blog.pebblecode.com/post/11607819225</guid><pubDate>Tue, 18 Oct 2011 10:28:18 +0100</pubDate><category>git</category></item><item><title>Titanium - native mobile apps with JavaScript</title><description>&lt;p&gt;At pebble.it the development team have been working hard to get up to speed with &lt;a href="http://www.apple.com/ios/"&gt;iOS&lt;/a&gt; so that we can support our clients&amp;#8217; growing requirements for mobile applications.&lt;/p&gt;

&lt;p&gt;The team have reached a good level of understanding on iOS even diving into &lt;a href="http://www.opengl.org/"&gt;OpenGL&lt;/a&gt; to create a complex drawing application.&lt;/p&gt;

&lt;p&gt;With most of the team coming from a web background we&amp;#8217;ve been keeping a close eye on frameworks like &lt;a href="http://www.phonegap.com/"&gt;Phonegap&lt;/a&gt; and &lt;a href="http://www.appcelerator.com/"&gt;Titanium&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Inspired by the wonderful &lt;a href="http://www.6wunderkinder.com/wunderlist/"&gt;wunderlist&lt;/a&gt;, which is built on Titanium, we had a closer look at Titanium.&lt;/p&gt;

&lt;h3&gt;One API to rule them all&lt;/h3&gt;

&lt;p&gt;One issue we&amp;#8217;ve discussed as a team is the fact that in developing mobile apps there are multiple SDKs and frameworks to master. Just as soon as you&amp;#8217;ve got to grips with Objective-C and the iPhone SDK there&amp;#8217;s Android and Blackberry. To date our philosophy has been let&amp;#8217;s get really good at iOS. We are still following that but Titanium allows us to support other platforms, at least on a superficial level.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s some code from the default scaffolding app. If you are familiar with JavaScript it should read easily to you.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;//
// create base UI tab and root window
//
var win1 = Titanium.UI.createWindow({  
    title:'Window 1',
    backgroundColor:'#fff'
});
var tab1 = Titanium.UI.createTab({  
    icon:'KS_nav_views.png',
    title:'Foo!',
    window:win1
});

var label1 = Titanium.UI.createLabel({
    color:'#999',
    text:'I am window 1',
    font:{fontSize:20,fontFamily:'Helvetica Neue'},
    textAlign:'center',
    width:'auto'
}); 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is the code behind creating a tabbed window with a label for both iOS and Android:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lfq8rvv7DE1qz7kgs.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;For more checkout the &lt;a href="http://developer.appcelerator.com/apidoc/mobile/latest"&gt;API documentation&lt;/a&gt; and &lt;a href="http://developer.appcelerator.com/blog/2010/05/sample-code-and-resources.html"&gt;Code Examples&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Strengths&lt;/h3&gt;

&lt;p&gt;Titanium has surprisingly good coverage of the APIs for iOS and Android. Installing the &lt;a href="https://github.com/appcelerator/KitchenSink"&gt;KitchenSink application&lt;/a&gt; on a device shows just what you can do with it.&lt;/p&gt;

&lt;p&gt;It is quickly apparent that it would be possible to scaffold an application for both Android and iOS in no time.&lt;/p&gt;

&lt;p&gt;The fact that Titanium creates native applications using just JavaScript is a huge draw.&lt;/p&gt;

&lt;h3&gt;Weaknesses&lt;/h3&gt;

&lt;p&gt;Installation didn&amp;#8217;t go smoothly, leading me to the forums where I found lots of other developers who were having problems getting Titanium off the ground. I followed the advice of a couple of posts, fixing a bug in the Python source, and had to fiddle around with a number of things on Android to get it working.&lt;/p&gt;

&lt;p&gt;Documentation and walkthroughs are a little light and I ended up learning from the source. Some might argue that this is the best way to learn anyway but it would be great to have some more code examples in the API documentation. Given that this is an Open Source project if we use Titanium I&amp;#8217;d certainly be willing to fork the project and improve documentation. There are also &lt;a href="http://developer.appcelerator.com/training"&gt;paid for videos available&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Issues like memory management and how Titanium performs across different versions of SDKs are not really understood at the moment.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Titanium looks like a really interesting project for our business. Given that we can also use it to write cross-platform desktop applications it actually opens up new markets for us. It leverages existing skill sets within the team and will allow us to get apps off the ground more quickly. For more complex client requirements though we will need to drop down to writing custom code - a common scenario with frameworks.&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/11607817717</link><guid>http://blog.pebblecode.com/post/11607817717</guid><pubDate>Tue, 18 Oct 2011 10:28:12 +0100</pubDate><category>andriod</category><category>iOS</category><category>iPad</category><category>iPhone</category><category>mobile</category></item><item><title>Our New Office</title><description>&lt;p&gt;A few months back, we moved into a bigger and better space. It has been a really fantastic move for us and we love it! We are still in Vauxhall and all very happy.&lt;/p&gt; 

&lt;p&gt;Here are a couple of pics to give you a flavour - if you&amp;#8217;re in the area, why not drop by for a cup tea and a biscuit?! &lt;/p&gt; 

&lt;p&gt;Luv, &lt;br/&gt;&lt;i&gt;pebble {code}&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Our fun wall, by the &lt;a href="http://www.graffitikings.co.uk"&gt;Graffiti Kings&lt;/a&gt;:&lt;/p&gt;

&lt;center&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_llcr34gqZ11qa7q62.png"/&gt;&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;One corner of the room:&lt;/p&gt;

&lt;center&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_llcr3lufCA1qa7q62.png"/&gt;&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;And, the as yet unfinished meeting room (with cinema and dart board!):&lt;/p&gt;

&lt;center&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_llcr3zdJc61qa7q62.png"/&gt;&lt;/p&gt;&lt;/center&gt;</description><link>http://blog.pebblecode.com/post/11607815764</link><guid>http://blog.pebblecode.com/post/11607815764</guid><pubDate>Tue, 18 Oct 2011 10:28:03 +0100</pubDate></item><item><title>Green League 2011</title><description>&lt;p&gt;We&amp;#8217;re super excited to finally be able to announce that we&amp;#8217;ve been working on an iPhone app over the last month or so, in collaboration with our favourite environment organisation, &lt;a title="People &amp;amp; Planet" href="http://peopleandplanet.org/"&gt;People &amp;amp; Planet&lt;/a&gt;. People and Planet is the largest student network in Britain campaigning to end world poverty, defend human rights and protect the environment. The award-winning People &amp;amp; Planet &lt;a href="http://peopleandplanet.org/greenleague"&gt;Green League&lt;/a&gt; is the only ranking of UK universities by environmental and ethical performance.  This year 142 unis took part, and the results were released in &lt;a href="http://www.guardian.co.uk/education/people-and-planet-green-league"&gt;today&amp;#8217;s Guardian newspaper&lt;/a&gt;.  We think it&amp;#8217;s a great project, providing prospective and current uni students with a tool to demand and justify change in their unis.  Download it now and give it a whirl.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://itunes.apple.com/us/app/people-planet-green-league/id437491386?mt=8&amp;amp;ls=1"&gt;&lt;img src="http://media.tumblr.com/tumblr_lmew8trSKN1qdcl2v.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The app, whipped up by our in house iPhone wizz &lt;a href="http://pebbleit.com/team/"&gt;Tak&lt;/a&gt;, provides university search and comparison features.  For those students applying through UCAS for the next academic year, this app provides a really neat way to compare uni choices on a sustainability basis, allowing students to checkup on their uni&amp;#8217;s ethical &amp;amp; environmental performance in a number of fields, whilst on the move.  Hopefully it&amp;#8217;ll lead to a few awkward questions on campus tours too - there&amp;#8217;s nothing like customer pressure to drive change! &lt;/p&gt;
&lt;p&gt;&lt;a title="The Green League 2011" href="http://peopleandplanet.org/greenleague"&gt;&lt;img src="http://media.tumblr.com/tumblr_lmevjg870s1qdcl2v.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The app is available for download now on the app store.&lt;/p&gt;
&lt;p&gt;&lt;a title="Green League app on the App Store" target="_blank" href="http://itunes.apple.com/us/app/people-planet-green-league/id437491386?mt=8&amp;amp;ls=1"&gt;&lt;img src="http://media.tumblr.com/tumblr_lmev8gtR341qdcl2v.png"/&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.pebblecode.com/post/11607814255</link><guid>http://blog.pebblecode.com/post/11607814255</guid><pubDate>Tue, 18 Oct 2011 10:27:55 +0100</pubDate></item></channel></rss>

