Archive for April, 2007

Mountain Bike Trip to Ullapool

April 27th, 2007 by pyrat

In case you are interested, Im going to describe the trip that I went on last weekend.

The route was a point to point and is shown below.

We also passed this very well kept bothy. (courtesy of flickr)

It was a return trip. We left Jack Horner’s quality mercedes (shown below) at bonar bridge then cycled to Ullapool with Andy Dytch and stayed in Ullapool Youth Hostel.

The next day we cycled back but on the way took in a marilyn that Don Reid had been keen on.

It was a great trip which was on average 4hr 45min of cycling each way. (This doesnt include stops)

I was also impressed that my Kona Dr Dew hybrid bike held up very well to the battering and actually worked quite well off road. I reckon if I get a suspension fork and spd pedals this will be a mean xc machine despite the 700CC wheels.

I also had my heart rate monitor on (S625X):

Day1

Day2

You can see the mountain ascent quite clearly on the day 2 hr graphs.

Using Gettext to Translate Your Rails Application

April 20th, 2007 by pyrat

The version of this document is optimized for Ruby-GetText 1.9.0 and Rails 1.2.


This is hosted here because the ruby manuals server seems to have died. Central documentation would be nice :-p

Introduction


Stand on the shoulders of Giants


Gettext is a great tool for translating user interfaces of applications into different languages. It has been around for a long time and is very well established for this task. Gettext helps you to open up your application to a much wider user base than you would normaly reach in only one language. Since it is used in many open source projects it has a lot of useful tools you can use to your own advantage. It would be possible to “roll your own� solution, but this would consume a large amount of time. Time you would lose for the development of your app. And this is not something you would want, right?

So in this tutorial I am going to show you how to effectively use Gettext for all your translation needs in your Ruby on Rails application.

What can Gettext do for you?


Here is a quick explanation of Gettext for those of you who haven’t worked with it, yet. Gettext is a set of tools that provide help when translating strings in your software. It gives you (straight from the gettext manual):

  • A set of conventions about how programs should be written to support message catalogs.

  • A directory and file naming organization for the message catalogs themselves.

  • A runtime library supporting the retrieval of translated messages.

  • A few stand-alone programs to massage in various ways the sets of translatable strings, or already translated strings.

The only thing you have to do to your program sources is wrap all translatable strings with a method call: gettext(text) or shorter _(text). Example:

Without gettext:
notice = ‘Thank you for buying our product.’
With gettext:
notice = _(‘Thank you for buying our product.’)
If you have wrapped everything between the method call Gettext will provide you with the tools to extract these messages (called a harvester) from your source code and save the results to a portable file format. A runtime library will allow you to display a translated message whenever _() is called. In essence this is what Gettext does. It can do a couple of more things (like update / merge message catalogs, handling plurals, …) but essentially it tries to make it as easy and as unobtrusive as possible to translate the language strings in your source code and then get out of your way.

Preperation is everything—use UTF-8 everywhere

Edit your files with UTF-8 only

The W3C has an awesome page with all you need to know about character sets (choosing, declaring, serving, editing, …) and other important stuff concerning internationalization on their site called W3C I18N Topic Index. There you will find a lot of good help and suggestions on everything you need to know about general internationalization topics. You really want to spend at least a couple of hours reading through the resources they offer or link to. If you happen to use VIM like I do you can put these two lines in your .vimrc and it will from then on treat your files as UTF-8 and convert everything to UTF-8 whenever you save a file:
set encoding=utf8
set fileencoding=utf8
If your editor of choice doesn’t provide support for UTF-8 it is probably time to get a new one ;)

Feed your database with UTF-8

If I need a database I usually go for MySQL. At least most of the time. Since version 4.1.x MySQL has very good support for different character sets. Please read the extensive MySQL Character Set Support article. It will give you a very good idea about the kind of support MySQL has to offer. Here is a table definition I use in a current project:
CREATE TABLE `pages` (
`id` int(10) unsigned NOT NULL auto<em>increment,
`title` varchar(255) default NULL,
`keywords` varchar(255) default NULL,
`description` varchar(255) default NULL,
`block1` text,
`block2` text,
`block3` text,
`block4` text,
`block5` text,
`lang` varchar(10) NOT NULL default &#226;&#8364;&#8482;en</em>EN&#226;&#8364;&#8482;,
`category` varchar(255) default NULL,
`path` varchar(255) default &#226;&#8364;&#732;/&#226;&#8364;&#8482;,
`updated<em>at` datetime default NULL,
`created</em>at` datetime default NULL,
`published<em>at` datetime default NULL,
`layout` varchar(255) default &#226;&#8364;&#732;main.rhtml&#226;&#8364;&#8482;,
`template` varchar(255) default NULL,
`access` tinyint(3) unsigned default &#226;&#8364;&#732;3&#226;&#8364;&#8482;,
`version` int(10) unsigned default &#226;&#8364;&#732;1&#226;&#8364;&#8482;,
`is</em>published` tinyint(3) unsigned default &#226;&#8364;&#732;0&#226;&#8364;&#8482;,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
There is nothing really special about it except the DEFAULT CHARSET=utf8 in the last line. It will make MySQL use UTF-8 for every field that holds text like varchar and text. Add the following line to your database.yml to connect with UTF-8.
encoding: UTF8
If you use another maybe more mature and feature rich database like PostgreSQL UTF-8 support should also be available. Just make sure you configure everything upfront, because it might save you time later on.

If you still think you are going to tack on support for UTF-8 later you might reconsider after reading David’s and Jamis’ experiences: Forty-four grueling hours (or Welcome to 37s!) by David Heinemeier Hansson and On the job by Jamis Buck.

If for any reason you need to use anything other than UTF-8 you might want to know that you can use the Iconv module to convert between different character sets. This module should be installed by default on most distributions. If it is not it is usually easy to get. Just be sure to get it if you need charcter set conversion. On Debian you might need a apt-get install libiconv-ruby to get started. Here is a little example stolen from Pickaxe 2 page 686:

Example: Convert olé from UTF-8 to ISO-8859-1
$ irb&#226;&#8364;&#8220;riconv
>> Iconv.conv(&#226;&#8364;&#732;ISO-8859-1&#226;&#8364;&#8482;, &#226;&#8364;&#732;UTF-8&#226;&#8364;&#8482;, &#226;&#8364;&#339;ol303251&#226;&#8364;?)
=> &#226;&#8364;&#339;ol351&#226;&#8364;?

Installing Ruby-GetText

After everything in your setup will accept UTF-8 we can go ahead and install Gettext support in Ruby. We will use the Ruby-GetText-Package which is a Ruby implementation of the Gettext interface that also has some c-bindings for the Locale. If you have rubygems, you can easily install Ruby-GetText:
$ gem install gettext
Select which gem to install for your platform (&#226;&#8364;&#166;)
1. gettext 1.9.0 (ruby)
2. gettext 1.9.0 (mswin32)
&#226;&#8364;&#166;>
Be sure to choose option 2 if you want Ruby-GetText to work on native Windows (with One-Click Ruby Installer) as you are most likely not able to compile otherwise. For all other platforms use 1.

Alternative: If you need the source you can get it from the author’s site: Ruby-GetText-Package. Besides installation instructions you will find a small HOWTO, API Reference and documentation on how to use provided tools.

Check the sample Rails application that is delivered with Ruby-GetText. If you installed via RubyGems it is most likely here: /usr/lib/ruby/gems/1.8/gems/gettext-1.9.0/samples/rails/, but it could be somewhere else depending on where your Ruby is installed. Later I will call that path $RUBYGETTEXTRAILSSAMPLE. So keep this in mind when you read.

Create the “po� directory structure


Create a po dir right in your $RAILS_ROOT. In it you will create a subdir for every language/dialect combination (actually the second part of this abbreviation stands for “geographic region�, but I will just call it dialect throughout this document). If you don’t know the right code for your language you can seek help at the Language section of the W3C I18N Topic Index.

Ultimately your directory structure is going to look like this:
simplepages@colinux: /home/simplepages/rails/po:
$ d&#226;&#8364;&#8220;T
/home/simplepages/rails/po/:
|-myapp.pot
|-de<em>DE/:
| `-myapp.po
|-en</em>GB/:
| `-myapp.po
|-en<em>US/:
| `-myapp.po
|-fr</em>FR/:
| `-myapp.po
|-fr_CH/:
| `-myapp.po
`-ja/:
`-myapp.po
The myapp.pot file is the original file created by the rgettext script introduced later. The po files will contain the translation messages that your application is going to use depending on the language that is requested.

Convert pofiles to mofiles

After creating pofiles, you need to convert them to mofiles. If you haven’t yet, please read the the GNU Gettext manual with the explanation of what mo and po stands for. Add the code below to Rakefile:
simplepages@colinux: /home/simplepages/rails/Rakefile
require &#226;&#8364;&#732;gettext/utils&#226;&#8364;&#8482;
desc &#226;&#8364;&#339;Create mo-files for L10n&#226;&#8364;?
task :makemo do
GetText.create_mofiles(true, &#226;&#8364;&#339;po&#226;&#8364;?, "locale")
end
Then,
$ rake makemo
It will create locale directories and subdirectroies such as:
simplepages@colinux: /home/simplepages/rails/locale:
$ d&#226;&#8364;&#8220;T
/home/simplepages/rails/locale/:
|-de<em>DE/:
| `-LC</em>MESSAGES/:
| |-myapp.mo
|-en<em>GB/:
| `-LC</em>MESSAGES/:
| |-myapp.mo
|-en<em>US/:
| `-LC</em>MESSAGES/:
| |-myapp.mo
|-fr<em>FR/:
| `-LC</em>MESSAGES/:
| |-myapp.mo
|-fr<em>CH/:
| `-LC</em>MESSAGES/:
| |-myapp.mo
`-ja/:
`-LC_MESSAGES/:
|-myapp.mo
These files are used by Ruby-GetText. You don’t need to touch these files.

Tools of trade

Gettext

You will need to install Gettext. On Debian I would do apt-get install gettext to do that. It contains a couple of tools that will be handy later on, most importantly msgmerge which can merge different po files so updating your message files will be a snap and msginitwhich can set default values to the header of pofile in your locale.

Ruby-GetText and rgettext

After you have installed Ruby-GetText and tools you should able to call rgettext on the command line. rgettext is a replacement for xgettext which comes with the main Gettext application. Beyond xgettext, rgettext supports not only ruby scripts(.rb) but also ERB files (.rhtml), ActiveRecord(.rb) directly.

ActiveRecord support rgettext extracts all the table names and field names within subclasses of ActiveRecord::Base.

Notice: You need to run your database server and configure the config/database.xml correctly before executing rgettext.

poEdit

poEdit is a great tool to manage and edit your translations. It gives you a nice graphical frontend to translate all your messages. It is available for many different platforms. A nice side effect about using an easy to use GUI tool is that you can tell non-programmers to install it, open the po file and just start translating. They might have nothing to do with the coding in your project but will be able to help you translate your software. So if your grandma can translate English to Chinese she can maybe help you with your software project :)

Collecting messages

Add the code below to Rakefile:
simplepages@colinux: /home/simplepages/rails/Rakefile
desc &#226;&#8364;&#339;Update pot/po files to match new version.&#226;&#8364;?
task :updatepo do
MY<em>APP</em>TEXT<em>DOMAIN = &#226;&#8364;&#339;myapp&#226;&#8364;?
MY</em>APP<em>VERSION = &#226;&#8364;&#339;myapp 1.1.0&#226;&#8364;?
GetText.update</em>pofiles(YOUR<em>APP</em>TEXT<em>DOMAIN,
Dir.glob(&#226;&#8364;&#339;/<strong>/</strong>.{rb,rhtml}&#226;&#8364;?),
MY</em>APP_VERSION)
end
Running this task will either create or update your po/myapp.pot and po/<strong>/myapp.po</strong> files in the relevant directories. It will go through all the important directories of your rails app and harvest all the Gettext strings in files ending in .rb, *.rhtml.
$ rake updatepo

Translating and compiling with and without poEdit

After you have successfully harvested your files you should have a myapp.po file in every locale dir. Now you need to translate them. Since the myapp.po files are mere text files you could just use your favourite text editors to translate them. Given that your text editor can edit in UTF-8 mode and you know the escaping rules of Gettext this is all you actually need. Open the file, translate the text and save it. After you have saved the file compile it. Gettext doesn’t work with the text files (myapp.po) directly. It wants a compiled version of it (myapp.mo). Use the rake makemo command to compile:
simplepages@colinux: /home/simplepages/rails/po/de_DE:
$ ls
myapp.posimplepages@colinux: /home/simplepages/rails:
$ rake makemo

	

simplepages@colinux: /home/simplepages/rails/locale/de<em>DE/LC</em>MESSAGES:
$ ls
myapp.mo


However, it is way more comfortable to use an application like poEdit for this. With poEdit you can also easily open up the myapp.po file. It will give you a nice side by side view your original strings and the translated version, telling what is already translated and what is not. You click on a message and start translating it in a special field. Hit the save button and poEdit will automatically compile the myapp.mo file for you (check the preferences if it doesn’t do it by default). That’s it. With a compiled myapp.mo you can start to teach your rails app how to translate your user interface.

See Documents for Translators for more details to translate the po-file.

When creating a po file it is useful to include header information at the top of the po file. This adds useful information such as character set, last translator etc. If you are not using poEdit add something similar to the top of the po file.
msgid &#226;&#8364;&#339;"
msgstr "&#226;&#8364;?
&#226;&#8364;&#339;POT-Creation-Date: 2007-02-19 17:15-0000n&#226;&#8364;?
&#226;&#8364;&#339;PO-Revision-Date: 2003-04-03 10:49--500n&#226;&#8364;?
&#226;&#8364;&#339;Last-Translator: Alastair Brunton n&#226;&#8364;?
&#226;&#8364;&#339;Language-Team: fr_FR n&#226;&#8364;?
&#226;&#8364;&#339;MIME-Version: 1.0n&#226;&#8364;?
&#226;&#8364;&#339;Content-Type: text/plain; charset=UTF-8n&#226;&#8364;?
&#226;&#8364;&#339;Content-Transfer-Encoding: 8bitn&#226;&#8364;?

Implementing Ruby-GetText into your rails app

By now you should have a translated and compiled myapp.mo in your locale dir. For example my German translation of SimplePages is at $RAILS<em>ROOT/locale/de</em>DE/LC_MESSAGES/myapp.mo.

Including Ruby-GetText

Edit application.rb to bind textdomain to your application.
simplepages@colinux: /home/simplepages/rails/app/controllers/application.rb:
require &#226;&#8364;&#732;gettext/rails&#226;&#8364;&#8482;class ApplicationController < ActionController::Base
init<em>gettext &#226;&#8364;&#339;myapp&#226;&#8364;?
	

#init</em>gettext &#226;&#8364;&#339;myapp&#226;&#8364;?, &#226;&#8364;&#339;UTF-8&#226;&#8364;?, &#226;&#8364;&#339;text/html&#226;&#8364;? # <= Also you can set charset and content_type.
end


In this sample, the textdomain name is “myapp�. Replace it as you like to fit your application. Maybe you want to have different textdomains for your site and the admin section.

Selecting the scope of your textdomain


  1. If you call bindtextdomain in ApplicationControler, the textdomain applies to the entire application.

  2. If you call bindtextdomain in any other controller with a different textdomain, this textdomain only applies to this specific controller. For example if you call a different textdomain in myapp<em>controller.rb</em> it will only be used in myappcontroller.rb.

The textdomains are applied to each controller/view/model.

Choosing the right language on every request


Since we are developing a web application we want to be able to choose the current language by request. Additionally we might want to offer the user the possibilty to choose the language from a menu.

Ruby-GetText chooses the current language by following these rules in the given order:

  1. the first value passed to the ‘locale’ parameter of GetText.bindtextdomain method call

  2. ‘lang’ value of QUERY_STRING

  3. ‘lang’ value of the Cookie

  4. the value of HTTP<em>ACCEPT</em>LANGUAGE

  5. or default ‘en’ (English).

The script $RUBYGETTEXT<em>RAILS</em>SAMPLE/vendor/plugins/lang_helper.rb is a sample that selects locale using the cookie value of the user.

It may be useful to implement a simple controller action to change between languages eg.
class CookieController < ApplicationController
def set<em>cookie
code = params[:id]
cookies[:lang] =
{
:value => code,
:expires => Time.now + 1.year,
:path => &#226;&#8364;&#732;/&#226;&#8364;&#8482;
}
redirect</em>to home_url
end
end
So /cookie/set<em>cookie/fr</em>FR would change the language to French.

Using the Locale in your templates

Depending on the selected locale you will want to customize the language and character set in your templates. File: $RAILS_ROOT/app/view/layouts/main.rhtml
&#226;&#8364;&#339;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#226;&#8364;?>

= Locale.charset %>" />
&#226;&#8364;&#166;

Have your own textdomain for plugin applications

If you are a plugin developer and want to have your own textdomain, you need to separate the Class/Module from ActionView::Base/ApplicationController.
simplepages@colinux: /home/simplepages/rails/vendor/plugins/gettext/lib/gettext_plugin.rb:
require &#226;&#8364;&#732;gettext/rails&#226;&#8364;&#8482;module LangHelper
	
  1. If you need to bind yet another textdomain to your plugin.
  2. Separate the name space from ActionView::Base/ApplicationController.
    class YetanotherTextDomain
    include GetText::Rails

def initialize

  1. You need to call bindtextdomain in an instance of ActionView::Base.
  2. The locale is used a same values which define ApplicationController#init<em>gettext instead of
  3. the textdomain.
    bindtextdomain(”gettext</em>plugin”)
    end

def show<em>language(actionview)
langs = [”en”] + Dir.glob(File.join(RAILS</em>ROOT,&#226;&#8364;&#339;locale/*&#226;&#8364;?)).collect{|item| File.basename(item)}
langs.delete(”CVS”)
langs.uniq!
ret = &#226;&#8364;&#339;
<h4>&#226;&#8364;? + <em>&#226;&#8364;&#339;Select locale&#226;&#8364;?) + &#226;&#8364;&#339;</em></h4>
<em>&#226;&#8364;?
langs.sort.each do |lang|
ret << actionview.link</em>to(&#226;&#8364;&#339;#{lang}]&#226;&#8364;?, :action => &#226;&#8364;&#339;cookie_locale&#226;&#8364;?, :lang => lang)
end
ret
enddef cookie_locale(cookies, flash, params)
cookies[”lang”] = params[”lang”]
flash[:notice] = _(&#226;&#8364;&#732;Cookie “lang” is set: %s&#226;&#8364;&#8482;) % params[”lang”]
end
end

  1. This function shows supported languages with link to set cookie
  2. action (cookie<em>locale).
    def show</em>language
    YetanotherTextDomain.new.show_language(self)
    end
  1. This function is called when the language link is set.
    def cookie<em>locale
    YetanotherTextDomain.new.cookie</em>locale(cookies, flash, params)
    redirect_to :action => &#226;&#8364;&#732;list&#226;&#8364;&#8482;
    end
    end

Simply put gettext_plugin.po into the po directory.

Conclusion


That’s it. If you have your translated message catalogs (myapp.mo) in all the right places your application should show your message strings in your favourite language.

You can now easily start to translate your application into all the different languages you want. I hope this guide helps you to get started. There are certainly many more aspects of internationalization that you will have to learn and apply. Remember that this is only one of many possible ways to do it. If you find any mistakes, shortcomings or have good suggestions on how to improve this guide I would be more than happy to hear from you.

If you want you can download the original Textile document, make modifications and send them back to me. I will be sure to include you in the credits section.

Sascha Ebach
se at digitale-wertschoepfung dot de

Credits


Author

Sascha Ebach is the owner and lead developer of a small web design and development shop Digitale Wertschöpfung in Cologne, Germany. Together with his two partners he develops and designs complete online solutions for small to medium sized businesses. Up until the surfacing of Rails he used to develop everything in PHP although he has already fallen deeply in love with Ruby since version 1.6.2 came out. For him it is very clear that Rails and Ruby will be The Future Way of developing web applications and he already looks forward to the day when he has ported his last line of PHP to Ruby.

Appendix A: Downloads

Used files

Download the archive with files and scripts I use and talk about in this guide. The file includes the complete skeleton of files that you need to get started.
/home/simplepages/using-gettext-with-rails/:
|-app/:
| `-controllers/:
| `-application.rb (the ApplicationController with the .init<em>gettext method)
`-po/: (sample directory structure)
|-de</em>DE/:
|-en<em>GB/:
`-en</em>US/:
Download using-gettext-with-rails.tgz

Triangulation and Web Apps

April 18th, 2007 by pyrat


I recently read a great post on the marketing concept of triangulation over at Seth Godin’s blog.


It really hit home to me how this concept can be applied to pricing structures and how it is already being done in the web application world.


A lot of the new breed of web applications offer tiered pricing structures. The super snazzy expensive plan is probably rarely bought but I guarantee level 2 and level 3 are more popular thanks to its existance.

Freelancing…from a beginner’s perspective

April 18th, 2007 by pyrat

As I said in my last post, I have recently become self-employed, freelancing my design skills.

I thought I would cover some of the issues I have come across so far, and some of the resources I have found helpful.

First, the problems/issues:

It can be lonely. I am very happy in my own company. I always have been. But sometimes you just want people to bounce ideas off, or just banter with for 5 minutes when the particular task you are trying to achieve is driving you crazy. I find that this can be overcome by completely switching off from what you were doing, just like you would be if you wandered over to chat to a colleague for 5 minutes. For smaller problems, I find checking my personal email, looking at design inspiration websites, or looking at friends’ sites or flickr accounts is enough to get me back on track. For severe mental block, either a trip to the living room to watch half an hour of recorded TV shows, or a 30 min walk will do the trick. Which brings me to…

Motivating yourself could become a problem. It can be hard to define boundaries when you work from home. Your living space and work space become a little too close for comfort sometimes. It could (and I have to say that so far this has not happened to me) become very easy to get up late, finish early, watch a little too much daytime TV, let a friend stay a little too long when he stops by, etc. On occasion, these are perks of working for yourself, granted. But if they occur too often, you won’t get anything done. Working in the field that I do, I could feasibly work any hours I wanted to, but I dont think my girlfriend would be too impressed if I became nocturnal. And neither would my clients, I assume. They (generally) work ‘office’ hours, so they (quite rightly) expect me to be available at the same time. I have deliberately set out to start off on the right foot, keeping ‘office’ hours at least. I generally work longer than that though. Which leads nicely to…

It can be hard to switch off. With the work/home divide so blurred, it could be easy to go the other way, and never be able to switch off. There is always time to send one last email, make one last change to that document, etc. It is all to easy to answer the business phone at 11pm. But I really do agree with a lot of articles I have read that advise freelancers to beware of communication with clients outside normal working hours. The idea being that once the client gets one or two communications from you outside normal hours, they will think it is OK to contact you any time. There are always exceptions to this, where communications at 11pm need to take place, but try and keep them to a minimum. And the more you do little bits of work at night, the less you will be able to relax, and that will ultimately make you less productive during your proper working days. I also always keep a Sunday work free. I think this is very important. It is not good for anyone to work 7 days a week for any extended period of time. You need one day of relaxation and fun and not worrying about work at all.

These are just a few of the issues I have come across so far. I’m positive there are many more lurking around the corner, not least the anxiety about money and the problems of getting paid. I am learning all the time, not just about design now, but also about business. I hope to talk about these issues here as and when they arise.
I found these articles very helpful with regard to these issues:
Five Common Working At Home Problems Solved

Being Productively Unproductive

Five steps to get yourself in a mood to work

And now the upsides. Do I really need to discuss the upsides? Flexible hours, no boss, no potentially characterless dingy office, no irritation coworkers, your own music (this is a big thing for me), the list goes on.

And finally a couple of sites which I am finding particularly helpful while starting up on my own:

Web Worker Daily

Freelance Switch

and a giant resource worth checking out:

101 Essential Freelancing Resources

I hope this article has helped someone who is starting out, or thinking about it. Coming soon: more problems, solutions, resources and possibly an anecdote or two.

Google Checkout Released in the UK

April 16th, 2007 by pyrat

Finally, the poor online merchants have an alternative to paypal in the UK!

Google checkout has been released in the UK and I am going to integrate it with oentries to start with.

There is an existing ruby gem for google checkout api integration.

Unfortunately at the moment it only does Level 1 integration when I need Level 2. Hopefully I can extend this and improve the general offering.

Also a short coming of google checkout seems to be that you cannot specify the API callback url on the fly. This means that the merchant actually has to configure their account to have this callback url. This doesnt fit very well with the model of oentries so hopefully there is a way round this. As it is possible to set the notify url in paypal on the fly.

Update: There is also the google4r (google for ruby) which has the beginnings of a Level 2 integration. I get the impression that there are some google employees working on this so the outlook is good.

Meanwhile I will soldier on with my own integration and I will let you know of any big issues that I come across in the near future.

Espace Killy Piste Map and Mini Review

April 4th, 2007 by pyrat


Above is a link to a scanned image of the espace killy piste map which covers Tignes and Val D’Isere.


This place is massive with loads of off-piste accessible close to the lift system. Heed the avalanche risks however as this is definitely big mountain stuff.


We were there for one day only. The weather was great and the cafes were pumping out quality house beats on massive sound systems right across the mountains. This was amazing fun and a great scene to be a part of.


However, the costs for food is just insane, make sure you are plush with the bucks or have your creditcard to hand in order to survive.


A great tip when travelling to an expensive resort is to take a larger than normal case and fill it with food from your local supermarket.–Mainly snacks for through the day and a few main meals possibly.. PASTA! It will save you a lot of money as you dont have to buy much when at the resort.

Les Arcs Piste Map and Mini Review

April 3rd, 2007 by pyrat

I had the pleasure of riding Les Arcs twice last week.

Despite the accommodation being described as a concrete jungle, the mountains are amazing.

There is loads of piste to explore–241km and even more off-piste. The off-piste is real big mountain stuff.

Head down to Villaroger for some tasty lunch and an authentic french village feel.

I wish I had had some more time here and been there on a powder day. I will definitely be back! If you are thinking about going you definitely should.

Apparantly Les Arcs 1800 is the place to be with 1600 being the place for cosy chalets and 2000 being isolated but close to phat terrain. 1950 is a crazy intrawest creation.

La Plagne Piste Map and Mini Review

April 3rd, 2007 by pyrat

There is a high resolution image scan of the La Plagne pistemap linked above. Its is not top quality but should provide enough information if you are interested in looking at the skiable area.

Remember that this area is also linked to Les Arcs via the Vanoise Express. You need to buy a more expensive pass to do this but it is well worth it if you are an advanced rider or skier.

The pistes at la plagne are fairly dull and the park is not lift serviced properly.

However there are loads of opportunities for off-piste if you like that kind of thing. Some great snow can be found up high on the glacier when the snow at lower altitudes is not so good.

You should avoid tour operators like Crystal if you are thinking about going. The reps are horrific and do little but swindle more money out of you. It is going to be a lot easier to just organise the holiday yourself if you have more than a couple of braincells.

Finally, if you are a family I recommend this resort, if you are hip give it a miss as the only nightclub turns into nothing but a cockfight due to the lack of ladies, and snowboarders.

Note: There are plenty of boarders; the rider type that is just giving snowboarding a wee go and is really just a skier in disguise.

Hello, welcome & things to come

April 1st, 2007 by pyrat

This is my first post to The Scoop. My name is Andy, and I am the design side of Cheer Factory. I hope to write some interesting design based articles here in the near future, but due to my current circumstances, I thought it might be interesting to write some posts about what is going on in my life right now. You see, as of tomorrow, I am officially self employed as a freelance designer. My company is Nonimage (although some of my work will also be for Cheer Factory through Nonimage). So I thought it might be interesting to write about my experiences starting my own business in the design world, especially relating to the web side if what I do (I also do print design, but I feel that it is less relevant here). So starting this week, I will try to document the ups and downs of life working out of my home office and endless coffee shops. I hope you find these, and my design, articles interesting.