Getting Hosting Sorted

Posted April 1st, 2012 11:45 by

Host­ing, much like air and water, without it we would shrivel up and die, and like water going to the wrong sup­ply will make you sick.

Actu­ally the ana­logy above doesn’t really work because I want to talk about the respons­ib­il­ity of host­ing rather than choos­ing a sup­plier. Host­ing is one of those awk­ward require­ments of the web industry that doesn’t get the atten­tion it needs. It’s a neces­sity, without web-hosting we wouldn’t be able to put our web­sites online, every web­site has to be hos­ted some­where. It’s an incred­ibly import­ant aspect of our industry and if you are involved in the cre­ation and deploy­ment of web media, you should have a strategy in place to deal with it.

The prob­lem is, it’s an area with a few potholes. Often a cli­ent will have abso­lutely no idea of what host­ing is or why they need it. This is fine and under­stand­able, I wouldn’t expect them to any more than a plumber would expect me to know what sort of valve con­nects my boiler to my water sup­ply. We could just include the host­ing costs along with any other build and sup­port costs, but, I believe that a greater degree of trans­par­ency is required. With host­ing (and cer­tain other sup­port requir­ing ser­vices) iden­ti­fic­a­tion of respons­ib­il­ity must be cla­ri­fied up front.

There are some­times issues with host­ing, some­times minor prob­lems, some­times major out­ages. This is where you need to have iden­ti­fied clearly to your cli­ent what host­ing is, where your respons­ib­il­it­ies lie with regards their host­ing and ensured that their expect­a­tions with regards level of ser­vice are reas­on­able. Without these con­cepts clearly agreed between you and the cli­ent, things have the oppor­tun­ity to get pretty messy.

Reseller Accounts

A nice simple solu­tion is to set your­self up a reseller account with a host­ing com­pany, that way you can sup­ply host­ing neatly bundled up with your brand­ing. All lovely if you have the resources to man­age this prop­erly. Depend­ing on your supplier’s set up you may have to deal with every sup­port request from your cli­ents and in some cases handle assor­ted admin­is­tra­tion tasks as well. I’m uncom­fort­able work­ing on this basis, with the best will in the world, no amount of small print T&Cs are going to con­vince an irate cli­ent that their host­ing going down is out­side of our con­trol if their con­trol panel comes with our branding.

Cli­ent Man­aged Hosting

Hand­ing the respons­ib­il­ity for their host­ing back to the cli­ent can be con­sidered. Yes, there’s the pos­it­ive that you won’t have to deal with sup­port calls, it’s up to the cli­ent to sort out the billing and, worst case scen­ario if everything falls over it’s someone else’s prob­lem. The cons far out­weigh the pros. Primar­ily it’s just unpro­fes­sional, I like to think a cli­ent can come to us for a web solu­tion and we can make the pro­cess as simple as feas­ibly pos­sible for them. Send­ing them off to set up an account they may have not even been expect­ing to require is just going to make the pro­cess frus­trat­ing. There are some tech­nic­ally savvy cli­ents out there but the major­ity are not (and nor should they need to be). Real­ist­ic­ally you are going to either spend half your life detail­ing what sort of pack­age they need to pur­chase, or try­ing to work with a host­ing pack­age that’s not quite fit for pur­pose. The issue I have run into most with this approach in the past is that host­ing com­pan­ies tend not to have the flex­ible billing prac­tices of a freel­an­cer or agency (for under­stand­able reas­ons) and often a cli­ent will just for­get to pay their host­ing, at which point their web­site ceases to exist (worse still with domain names).

My Approach

With Shinytastic, by default we organ­ise the host­ing for the cli­ent and try to be as trans­par­ent as pos­sible. We make clear that our respons­ib­il­ity is to ensure the host­ing account is paid up to date and con­tin­ues to exist, but the respons­ib­il­ity for the serv­ers them­selves lie with the actual host­ing com­pany. We always tell the cli­ent who the host­ing com­pany is and give them a copy of any sign up emails, agree­ments, logins or any­thing rel­ev­ant to their account for their own records. We do add a markup to any host­ing we pur­chase to cover admin­is­tra­tion costs, but we make the cli­ent aware of this and will give them the costs of set­ting up the account dir­ectly them­selves should they wish to. I believe we’ve only ever had one cli­ent opt to pur­chase the host­ing them­selves, most are happy to not have to deal with it.

We do give cli­ents the option to choose their own host­ing com­pany if they prefer, although there are cer­tain hosts (who I shall not name) who if the cli­ent wishes to use we will insist they pur­chase the account dir­ectly and indic­ate that they under­stand they are opt­ing for a ‘cheap’ solu­tion which may cause prob­lems down the line. We have run into prob­lems in the past when a cli­ent has opted for the cheapest host­ing solu­tion they can find, which has caused us sub­stan­tial addi­tional work.

The host­ing com­pany (Evo­Host­ing) we use are set up such that we can pur­chase mul­tiple host­ing accounts under a single cli­ent account. This massively sim­pli­fies the man­age­ment of mul­tiple host­ing accounts without resort­ing to a reseller account. This is also set up so that should a cli­ent decide to part com­pany with us, we can quickly release their host­ing account to another agency pre­vent­ing them need­ing to set up new host­ing to move away. We don’t hold accounts host­age and do not charge a release fee, the only stip­u­la­tion we have is that a cli­ent must have all invoices up to date before we will release their account.

We use Evo­Host­ing as our pre­ferred host­ing pro­vider. As a full dis­clos­ure, I’m good friends with the dir­ect­ors of the com­pany, but my decision to use them is based on the reli­ab­il­ity and qual­ity of their service.

Let me know your thoughts, how do you deal with hosting?

Posted in Hosting | Comments Off
Tags: , ,

We’re Hiring!

Posted March 30th, 2012 11:01 by

Hello! We’re a small web design and tech­no­logy stu­dio based in the Thames Val­ley area with a wide range of inter­est­ing cli­ents and pro­jects. We’re cur­rently expand­ing, so we’re look­ing for reli­able freel­ance developers who love what they do!

You must be based in the Maidenhead/Reading/Slough/Wycombe area and have the fol­low­ing skills:

  • PHP (must have a good under­stand­ing of OOP)
  • jQuery (must be able to build plugins)
  • MySQL
  • HTML & CSS
  • Word­Press Plugins

Pre­ferred, but not required:

  • Sym­fony 2
  • Joomla
  • Open­Cart

If this sounds like the right pos­i­tion for you, then drop us a line! bob@shinytastic.com

We’re cur­rently look­ing for freel­an­cer developers, but we will be able to offer full-time employ­ment to the right people in the future.

Posted in General | Comments Off

Smartening up the office

Posted January 26th, 2012 18:22 by

Excel­lent new prints just arrived in the post for the office wall. I found these lovely Star Wars/Day of the Dead illus­tra­tions by John Kar­p­in­sky on Etsy.

Look­ing for more art­work (we have a lot of wall space), there’s cur­rently a selec­tion of prints and posters by Tara McPh­er­son, Jeph Jacques (Ques­tion­able Con­tent) and The Oat­meal. Any sug­ges­tions on artists and illus­trat­ors that might brighten up our work­ing day would be welcomed.

Posted in General | Comments Off
Tags: , , , ,

Updated Social Media Brochure

Posted January 23rd, 2012 19:25 by

Our new Social Media bro­chure can be down­loaded by click­ing right here (pdf).

I’ve listened to the feed­back from the last incarn­a­tion, which was mostly “I fell asleep about page 8″ and “does it really need THAT much detail”. We’ve tried to give a good over­view of the ser­vice without going into more detail than is neces­sary. We are here to answer any ques­tions that are not covered in the brochure.

The bro­chure does include a price guide, which was the other most reques­ted aspect. It’s not a hard and fast menu but it should give an idea of costs, and what you will get for your money.

Any feed­back is wel­come — bob@shinytastic.com, or leave a com­ment below. Let me know what we’ve missed and if any of it reads like mar­ket­ing speak, the inten­tion is for it to be as intel­li­gible as possible.

Posted in Social Media | Comments Off
Tags: ,

Ex-Mil Advent Calendar

Posted December 2nd, 2011 13:40 by

We put together a very Christ­mas pro­ject for our lovely cli­ent Ex-Mil Recruit­ment, they wanted some­thing to enter­tain their cli­ents and can­did­ates over the Xmas period. We’ve cre­ated a simple advent cal­en­dar which you can view on their homepage, when you click on a win­dow you’ll get some­thing to (hope­fully) make you laugh. As with tra­di­tional cal­en­dars you can only open each win­dow once that day has arrived so hope­fully we’ll get a few return vis­its. We man­aged the lay­out and func­tion­al­ity while JC and Annette at Ex-Mil are sup­ply­ing the con­tent of the win­dows (they know their audi­ence bet­ter than us!).

We’ve also added some social media ele­ments with Face­book social plu­gins. You can like and share the cal­en­dar on their web­site and we’ve added it as a tab on their face­book page.

Posted in Projects | Comments Off
Tags: , , ,

Simple Parallax with jQuery

Posted September 4th, 2010 17:43 by

Shinyface Parallax

A quick demo of using jQuery for par­al­lax. This example just cre­ates a nice visual effect but it could eas­ily be con­ver­ted for more con­struct­ive pur­poses but I’ll leave that up to you.

Par­al­lax (for the sake of this post) is the effect whereby things at dif­fer­ent dis­tances move at dif­fer­ent rates, for example look­ing out of a train win­dow the closer items are the faster they move past you. This is as hor­ribly sim­pli­fied and inac­cur­ate descrip­tion but will suf­fice for the sake of this example.

I’ve used three trans­par­ent PNGs for this but you can use as many lay­ers as you like or eas­ily replace the PNGs with div tags con­tain­ing whatever con­tent you need.

View the demo.
View the javas­cript source.

The HTML

This is very simple. The html you need is as follows:

  1. <div id=“Par­al­lax”>
  2.         <img src=“images/Bottom.png” />
  3.         <img src=“images/Middle.png” />
  4.         <img src=“images/Top.png” />
  5. </div>

See, told you it was simple. The div is the outer con­tainer into which the lay­ers belong. Add the images in order of the bot­tom one (smal­lest) first. Job done.

The Images (or layers)

The images (or lay­ers) you use should each be a dif­fer­ent size, the big­ger the image the more move­ment. Each image must be at least as big as the viewer, if you set one side of it to be the same size as the viewer and another to be lar­ger it will only move on that axis, which is a nice effect in itself. So if your image is the same height as the viewer but wider it will only move horizontally.

This may be stat­ing the obvi­ous, but I’ve used trans­par­ent pngs, you must be able to see the lower images through the upper ones. To cre­ate them I used a pho­toshop file with a group for each image. This meant I could check how they would look before I out­put them. You can view the three images here:

The CSS

You can view the entire CSS file here. The import­ant parts are as follows.

  1. #Par­al­lax {
  2.         background-color: #880088;
  3.         height: 500px;
  4.         over­flow: hid­den;
  5.         pos­i­tion: rel­at­ive;
  6.         width: 750px;
  7. }

The back­ground color can be whatever you fancy. Bear in mind that if all your lay­ers are trans­par­en­cies the back­ground color will show through. Of course you could make the bot­tom layer fully colored, pat­terned or whatever you fancy. You could also give the #Par­al­lax div a back­ground image if you wanted.

The width and height are import­ant, remem­ber your images should all the same dimen­sions or big­ger than this div. Over­flow must be set to hid­den to ensure that tags within this div will not cause it to change it’s size and will not poke out of the sides.

The rel­at­ive pos­i­tion is required as we will be set­ting the tags within the div to abso­lute and we want them to be posi­tioned rel­at­ively to this div, not to the document.

  1. #Par­al­lax img {
  2.         pos­i­tion: abso­lute;
  3.         top: 0;
  4.         left: 0;
  5. }

Each of the images within the div (or whatever you use for lay­ers) must be set to use abso­lute pos­i­tion­ing so that we can move them around with jQuery. I’ve set their ini­tial pos­i­tions to the top left corner but you can set them to wherever suits.

The Javas­cript

This uses jQuery for the heavy lift­ing. It could be con­ver­ted into a handy little jQuery plu­gin but I wanted to keep it as simple as pos­sible for the sake of the example, plus oth­ers have already done that.

  1. jQuery(doc­u­ment).ready(func­tion($){
  2.         $(’#Par­al­lax’).mouse­move(
  3.                 func­tion(e){
  4.                 /* Work out mouse position */
  5.                 var off­set = $(this).off­set();
  6.                 var xPos = e.pageX - off­set.left;
  7.                 var yPos = e.pageY - off­set.top;
  8.  
  9.                 /* Get per­cent­age positions */
  10.                 var mou­s­eX­Per­cent = Math.round(xPos / $(this).width() * 100);
  11.                 var mou­seY­Per­cent = Math.round(yPos / $(this).height() * 100);
  12.  
  13.                 /* Pos­i­tion Each Layer */
  14.                 $(this).chil­dren(‘img’).each(
  15.                         func­tion(){
  16.                                 var diffX = $(’#Par­al­lax’).width() - $(this).width();
  17.                                 var diffY = $(’#Par­al­lax’).height() - $(this).height();
  18.        
  19.                                 var myX = diffX * (mou­s­eX­Per­cent / 100);
  20.                                 var myY = diffY * (mou­seY­Per­cent / 100);
  21.                                 var cssObj = {
  22.                                         ‘left’: myX + ‘px’,
  23.                                         ‘top’: myY + ‘px’
  24.                                 }
  25.                                 $(this).anim­ate({left: myX, top: myY},{dur­a­tion: 50, queue: false, eas­ing: ‘lin­ear’});
  26.  
  27.                         }
  28.                 );
  29.  
  30.                 }
  31.         );
  32. });

What this does is whenever the mouse is moved over the viewer (#Par­al­lax div) it cal­cu­lates it’s pos­i­tion over the div (as per­cent­ages) then moves each of the inner images by that same per­cent of their overflow.

Firstly work out the xPos and yPos. To do this we sub­tract the view­ers x and y off­set from the x and y mouse pos­i­tion. This is because the mouse pos­i­tions returned are rel­at­ive to the doc­u­ment not to the viewer. The off­set val­ues give us the view­ers pos­i­tion rel­at­ive to the document.

Next, work out the hori­zontal and ver­tical pos­i­tion of the mouse pointer as a per­cent­age (0 = the top of the viewer, 100 = the bottom).

Loop through each image, for each one work out the dif­fer­ence in width and height between the image and the viewer. The image’s new pos­i­tion for each axis is the per­cent­age cal­cu­lated earlier for that axis of the dif­fer­ence for that axis. So if the mouse is dead cen­ter on the viewer the hori­zontal pos­i­tion is 50% of the dif­fer­ence between the image width and the viewer width.

Finally, we cre­ate an object con­tain­ing the new CSS set­tings and apply it via a very short anim­a­tion which gives the effect a nice smooth fin­ish. You can just jump to the new pos­i­tion but it looks a little too rough for my tastes.

Links

Posted in Code | Comments Off
Tags: , , , ,

Adding Facebook Like buttons to your website

Posted August 16th, 2010 20:49 by

We’ve just launched the new Shinytastic web­site which gave me a chance to exper­i­ment with some new tech­niques. The most inter­est­ing has to be the addi­tion of Face­book like but­tons to the web­site (down in the footer). The abil­ity to dir­ectly integ­rate your web­site with a social media site is going to really change how we use the web, hope­fully in a good way. Mak­ing it much easier for users to com­ment on your web­site and your busi­ness will give you a great instant response when they have an enquiry or some­thing pos­it­ive to say and will gen­er­ally improve your com­mu­nic­a­tion with cus­tom­ers and poten­tial customers.

There are two types (at the time of writ­ing) of Face­book ‘Like’ but­tons you can add to your web­site, the dif­fer­ence caused a little con­fu­sion at first but it’s simple enough. The first type is a gen­eral pur­pose Like but­ton which you can stick on any page any­where to allow users to like that page, when they do it cre­ates a link on their face­book feed which links back to the page they liked. This is great for a blog or any web­site where you might want users to be able to like spe­cific pages or pieces of inform­a­tion. The other type (which we have used) is a like box which is linked to a Face­book Page (for a busi­ness, enter­tainer, etc). When a user clicks a like box but­ton it adds an entry to their feed which links back to the Face­book Page the but­ton is asso­ci­ated with. This is bet­ter if you want to point people at your organ­isa­tions Face­book Page and not at spe­cific art­icles or pieces of inform­a­tion. The imple­ment­a­tion is pretty much identical.

There are two ways you can add a like but­ton (either of them) to your web­site, the easy way using an iframe which I’m not going to cover as face­book gen­er­ates all the code you need for you and the more com­plic­ated but much more flex­ible man­ner using XFBML. I wanted to use XFBML because you have a lot more con­trol over how it looks and integ­rates with your site, plus it was a chal­lenge. Although all the doc­u­ment­a­tion needed is out there (mostly on the Face­book Developers site) it’s a little scattered so here’s the steps involved in as straight-forward a man­ner as I can put them. I’ll try not to be too verb­ose with the sup­port­ing notes.

Namespaces, Doc­types and Validity

The first thing you need to do to your page to run XFBML is add the Face­book and Open Graph namespaces. Find your root html tag which will look some­thing like this:

  1. <html xmlns=“http://www.w3.org/1999/xhtml”>

Add the Open Graph and Face­book namespaces as follows

  1. <html xmlns=“http://www.w3.org/1999/xhtml”
  2.         xmlns:og=“http://opengraphprotocol.org/schema/”
  3.    xmlns:fb=“http://www.facebook.com/2008/fbml”>

The Face­book namespace is so that you can use the XFBML tags the Open Graph is so that you can use the Open Graph meta tags which I’ll come to in a moment. First off though there’s a bit of a prob­lem to over­come. As a rule I stick to XHTML 1.0 Trans­itional but HORROR if you use XFBML tags with that Doc­type your page will not val­id­ate, now this is not an issue for every­one but it’s a ser­i­ous prob­lem for me. The solu­tion is you need to use the RDFa ver­sion instead, which I’m afraid kids means you need to write strict xhtml (unless you’re using HTML5 already in which case check out this handy link). This is not the time for a full explan­a­tion, the short of it is you’ll need to change your doc­type to this (assum­ing you are using XHTML 1.0 oth­er­wise just have a little google for whichever HTML ver­sion you are using + RDFa):

  1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML+RDFa 1.0//EN
  2.                             “http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd”>

Our site still doesn’t actu­ally val­id­ate 100%, we have some errors ref­er­en­cing the XFBML tags, but I can deal with that (for now) as the code was sup­plied by Face­book. That’s the hard part out of the way.

Adding the Javas­cript SDK

Use of the XFBML tags for like but­tons requires the Face­book Javas­cript SDK. This is simply a case of going here to the Face­book SDK page, cut­ting and past­ing the sup­plied code into your page. Stick it just above the clos­ing body tag. Job done.

Add the XFBML tag

Face­book sup­plies handy gen­er­at­ors for you here. You’ll need a dif­fer­ent tag depend­ing on your preference.

Like But­tons (art­icles, spe­cific web-pages, etc)

Click here to go to the Face­book page to gen­er­ate the tag. You can pretty much leave the form as it is. You should be given some code a bit like this:

  1. <fb:like></fb:like>

Yup, that’s it. That’s all you need. You can add attrib­utes for spe­cific lay­out and con­trol fea­tures like this if you fancy, see the Face­book doc­u­ment­a­tion for spe­cific info:

  1. <fb:like show_faces=“false” width=“300” action=“recom­mend”></fb:like>

Like Boxes

Like boxes are the slightly more advanced sib­lings to the Like but­tons. They are tied to a Face­book page. Quick­est way to get the code is to visit your Face­book page (you must be logged in), click Get Star­ted then click Add Like Box. This will take you to the gen­er­ator page with all your details pre-filled. Set the set­tings how you fancy them and click Get Code and you shall receive some­thing like this:

  1. <fb:like-box profile_id=“185550966885”></fb:like-box>

Stick your sup­plied tag wherever in the page you want it to go then con­fig­ure your Open Graph Meta tags…

Open Graph Meta Tags

You can read all about the Open Graph Pro­tocol here. For the sake of this art­icle the Open Graph tags are addi­tional meta tags you can add to your doc­u­ment to add spe­cific inform­a­tion about the doc­u­ment which will be used by Face­book. There’s some inform­a­tion on the Face­book Like page on how to use them. Add the meta tags to the head sec­tion of your doc­u­ment, they should look a little like this (with your inform­a­tion in, not ours obviosuly):

  1. <meta prop­erty=“og:title” con­tent=“Shinytastic Web Design”/>
  2. <meta prop­erty=“og:type” con­tent=“web­site”/>
  3. <meta prop­erty=“og:email” con­tent=“bob@shinytastic.com”/>
  4. <meta prop­erty=“og:image” con­tent=“http://www.shinytastic.com/files/ShinyFB.jpg”/>
  5. <meta prop­erty=“og:phone_number” con­tent=“01628 627289″/>
  6. <meta prop­erty=“og:site_name” con­tent=“Shinytastic Web Design”/>
  7. <meta prop­erty=“og:url” con­tent=“http://www.shinytastic.com”/>
  8. <meta prop­erty=“fb:admins” con­tent=“100001073515935”/>

title, email, phone_number, url and site_name are pretty obvi­ous. type must be one of a very spe­cific list avail­able on the Open Graph web­site. image image is more import­ant than you expect, I intially didn’t spe­cify it assum­ing Face­book would either not use an image or would use the first image on the page. Nope, it used one of our cli­ents logos so any­one who liked our page ended up with a con­fus­ing link to our web­site using our client’s logo. Face­book explain the image as follows:

The URL to an image that rep­res­ents the entity. Images must be at least 50 pixels by 50 pixels. Square images work best, but you are allowed to use images up to three times as wide as they are tall.

Final item of import­ance is the fb:admins entry. This must con­tain a comma seper­ated list of user id’s who are respons­ible for this page. To get your Face­book id go to your pro­file and look at the url, your id is the part after the ?id=. My pro­file is http://www.facebook.com/profile.php?id=100001073515935 so my id is 100001073515935.

To get the like but­ton work­ing one of the users lis­ted in fb:admins must visit the page and click the like button.

That’s it. It’s pretty simple really. I’ve only covered very basic integ­ra­tion here, there’s loads more you can do with a bit of research. Let me know how you get on.

Those Links Again

Posted in Code | 1 Comment »
Tags: , , , ,

Claires Court’s Sixth Form Gallery

Posted August 6th, 2010 14:08 by

We just had a quick fri­day lunch to cel­eb­rate Tim’s birth­day and had a look at Claires Court’s Sixth Form Art Gal­lery in Maid­en­head town centre. Hugely impressed with the qual­ity of work, the pho­to­graphy is espe­cially out­stand­ing. It’s work a look, check out the Claires Court web­site for details or just wander into Maid­en­head town centre, it’s oppos­ite Marks and Spencers.

Here’s a few shaky cam­er­a­phone pics…

IMAG0112

IMAG0110

IMAG0109

IMAG0108

IMAG0107

Posted in Out and about | Comments Off
Tags: , , ,

ShinyCMS File Browser

Posted May 4th, 2009 19:14 by

We’ve just rolled our the first ver­sion of the new file browser/selector for our in-house CMS (Con­tent Man­age­ment Sys­tem) ShinyCMS.

The file browser makes it so much easier to browse and select images (and other files) when you are edit­ing pages of your web­site through the CMS. Files can be viewed as thumb­nails or as a list of file­names avail­able, with addi­tional inform­a­tion on each file avail­able as a popup, image pre­views and filtering.

You can view a demo of the new browser here, do bear in mind this is a first release and as such we are still bug-fixing and mak­ing improve­ments. We’re just about to start plan­ning ver­sion 2 ;)

Flash File Browser

For the tech­nic­ally intrigued amongst you, this was writ­ten in Adobe Flash Action­script 3 and it integ­rates with our in-house CMS sys­tem via XML, the CMS was writ­ten in PHP5 and MySQL with a dash of Javascript.

Posted in CMS | Comments Off
Tags: ,

It’s Shinyface!

Posted May 2nd, 2009 15:25 by

Hello and wel­come to the Shiny­face blog. Wherin we shall be com­ment­ing on the state of the web industry, explod­ing myths and hope­fully being inform­at­ive and inter­est­ing all at the same time.

We’ll be post­ing up inform­a­tion on cur­rent Shinytastic pro­jects where we can and giv­ing a bit more in-depth inform­a­tion that we would on our offi­cial port­fo­lio site.

As well as com­ment­ary on our own work we’ll be invit­ing our reg­u­lar asso­ci­ates to com­ment and con­trib­ute with their own view­points on the industry cov­er­ing design, PR, host­ing and other aspects of this mar­vel­lous industry we work in.

Posted in Uncategorized | Comments Off

 

© 2013 Shinytastic. All Rights Reserved.