Indie webcomics to follow

A well written joke or a sharp illustration can make my day. I love Dilbert and other popular comics, but there are some more out there who very well deserve the spotlight.
(Furthermore, if you are an aspiring cartoonist pop star like myself, following these guys can be great to learn new tricks and techniques.)

Please welcome some of my favourite webcomics.

The best indie webcomics
Poorly Drawn Lines by Reza Farazmand

The best indie webcomics
Invisible Bread by Justin Boyd

The best indie webcomics
Saturday Morning Breakfast Cereal by Zach Weiner

The best indie webcomics
Little Gamers by Christian Fundin & Pontus Madsen

The best indie webcomics
Noise to Signal by Rob Cottingham

For this list, I considered indie everyone who looks indie. It’s not a real measurement I know – but if I made a mistake, it’s alright. The point here is to find awesome webcomic authors.

j j j

To play Ingress, go to Berlin

I’m sure that playing Ingress is great fun everywhere, and also, this whole topic is very subjective – but I’m certain that this place adds a lot to the experience. I have at least three reasons why.

1. Awesome scenery

The ugliness of Berlin is a significant plus to the game experience: every building here looks like a scene from your favourite first person shooter. And now that I pay more attention to statues, I know that most of them are pretty weird too.

playing Ingress in Berlin - from Wimagguc, a geek blog

2. Perfect language

Everything sounds more serious in German. My communication field is full of texts like ‘Der grosse Stern – Gefangen I’m netz der Schlumpfe‘. I don’t even know what that means, but it does look scary.

3. You are not weird

The whole place is full of geeks and other weirdos, so no one gives you the look when you are running back and forth between portals. (Not unless you are holding your phone out to watch those commands about establishing control fields and destroying links – in the circle of an elementary school group. Yeah, maybe try to avoid that.)

j j j

Reducing the meat problem

Living healthy starts with eating right. Unfortunately if you are not a fitness-, cooking- or calories nerd, it’s not easy to decide what to put on the table every day. As for me, most of the time I end up buying some meat, roasting it and, serving with bread, call it a dish. Now this came to an end.

I would not want to go cold turkey (ha!) and become vegan, especially for all the excellent salamis and great wild meat out there. The only thing I want to stop is the mindless defaults: why would anyone eat chicken wraps and Frankfurters anyway? 

Somewhere I’ve read that an average grown up person in Europe would eat something like 50 kilograms of meat a year – my consumption seems to be fairly close to this, although I’m trying to be on the healthy end.

Ready-made products and those with unidentifiable origin seem to be easy to avoid, but then again: the recent horse scandal shows that even if the label looks very accurate, it’s rarely the case. Döner kebab is not something you would have high expectations about, but even Nestle and other, seemingly reliable companies sold horse meat as beef products.

Not that I’m picky with animals, I would eat whatever – my biggest complain here is that if we don’t even know the type of the animal, how would we know such very important facts like whether the unlucky pig was raised in a cage with hundreds of others, or: if it has ever seen the sun.

There I can get very picky actually. How much more awesome is to know that the animal I eat was in good health, free of weird antibiotics and full of energy! (Before it got slaughtered.)

If you just search for some minutes, you will see that some chickens are living a total of 32 days before you find them as ‘chicken wings’ in McDonalds. I can’t see how this is not bad for the public health and the environment – in the race for low-price meat, the food industry is leaving us with antibiotic resistant germs. (And even worse: food snobs, who only eat stuff coming from Bio Company shops.)

So here is my plan: I quit being a part of the problem and will reduce my food consumption to a more eco-friendly level, with the following:

  • Emerge new defaults: breakfast with cereals, choosing hummus and falafel when eating out (kill all the chickpeas!)
  • When buying non-vegan products, going for organic: looking for meat directly from farmers
  • Not buying minced meat or similar all-in kind of products
  • Keeping track of my food: keeping meat products below 500g a week

Please be aware of the fact that I’m in no way more clever than you with this. I’m not a doctor, have no idea of biology, fitness, health – so you better don’t follow anything you read here.
This post might be a good food for thought though. And please, feel free to send me further readings, hummus recipes, or just get in touch and encourage me / tell me I’m a fool on Twitter.

I might return to this topic later, if anything significant happens – although, I would be surpised if that was quite soon.

j j j

Node.js static http server with GZIP support (for Heroku)

One of my favourite solutions to serve static files is on Heroku, with Node.js: lightweight, easy to setup, easy to configure and highly scalable – awesome features, these.

However, when you serve static files, the users’ internet provider sometimes changes those. An example is when the carrier compresses the javascript documents or resizes the images to provide faster downloads. This will result a mismatch in file hashes, which, with some javascript frameworks like the Sencha touch SDK, leads to fatal app breakdowns.

An easy method to avoid this is to gzip all data ahead. Fortunately, Node.js has a built-in zlib module after v0.6.13, so writing a static http server with gzip support is a breeze. You can get my code from github: it comes as a Heroku project, so if you don’t want to configure anything, just replace the files in the ./app folder and you are all set to go.

To check that your setup works, use the following commands:

$ curl http://nodejs-static-http-with-gzip.herokuapp.com/ --silent --write-out "%{size_download}\n" --output /dev/null

$ curl http://nodejs-static-http-with-gzip.herokuapp.com/ --silent -H "Accept-Encoding: gzip,deflate" --write-out "%{size_download}\n" --output /dev/null

…where the resulting number is the size of the downloaded file – if you get a smaller number running the second command, it means that the server is sending gzipped files for a browser that supports them.

(Remember that ngix, perhaps the most popular fronting server for Node.js already supports gzip – therefore you only need this trick on Heroku and similar environments.)

j j j

Which cities does the music from?

Here in Berlin we like to think that this city is: the European capital of music. This is where artists can flourish, where all cool stuff comes from, where early adopters get what they want the most. Only that the European capital of music is not Berlin. It’s Oslo.

The alternative point of view: Wimagguc
From the paper: The geographic flow of music

Last.fm has a great pile of data about what people in the world are listening. This is a detailed snapshot of user’s taste in space and time. One can see what kind of music people are listening to and also how the taste of music changes: a flow across genres and place.

Based on this data, a research shows that music preferences are closely related to nationality, language and geographic location. Also (with a similar method I used in my masters thesis!) they figured that some cities are consistently early adopters of new music – the interesting part is that these hubs are not that easy to guess.

In Europe for example, would you have guessed that the capital is Oslo? Or that all North-America is following Montreal?

j j j

What I’ve learned from a Facebook marketing campaign

To get more attention and hopefully, eventually more likes for Frederique’s Facebook page, I’m running a small marketing campaign in the last two weeks of the year. Here are some of my findings, a little after halfway through.

(Preface: the campaign is for winning free posters. For that, one only needs to share anything from the Facebook wall or like the giveaway’s post. More info about the campaign here.)

First, the campaign is set to run in the last 18 days of the year, within the most noise around – when everyone is already immune to ads. This was clearly not great timing, and I will avoid this in the future whenever possible. 

Second, I scheduled the post to go online on a Thursday, when I saw most of my peers active on Facebook. Also, I’ve let some close friends know about the post immediately and asked them to like or share it to gain more visibility. This worked well: some people liked the post a day later as well, showing that it was among the important ones (sharing it as an image probably added some extra points to its rank).

Third, my optimistic webcomic has a very special audience: almost every person is a potential follower, and therefore it was almost impossible to foresee the new followers. (This also means that I will have next to no chance narrowing down the audience for a future ad campaign based only on gender, age or similar values).

Fourth, the helpfulness of my friends is fantastic: their shares, likes and comments helped to show Frederique to hundreds of people in a week and meet the very modest goal of reaching the magic number – 50 followers of my Facebook page.

j j j

Moving my WordPress blog to Heroku (and Amazon S3)

Knowing that there are plenty of pages out there to walk you through the exact same thing, I won’t make this guide too long: only five steps, with some bullet points for future reference.

1. Create a Heroku project

  • Create an empty folder, locate it in Terminal and:
    $ git init
    $ git add .
    $ git commit -m "init"
    $ heroku create
  • Setup the name of the Heroku app and make your domain point to it
  • Add a ClearDB database to this Heroku project

2. Make a copy of your WordPress site

  • Download all WordPress files and copy them to the Heroku project’s folder
  • Create a dump of the database (the easiest way is to use this WordPress backup plugin)
  • In the Heroku project, make sure all domain values in the files’ content point to the right address. I had quite a few ‘hardcoded’ values in the footer still pointing to wimagguc.hu – a quick search and replace on all textual files took care of this.
  • Pro tip: if you had a .htaccess file, make sure to copy that as well

3. Migrate your database to ClearDB

  • Connect to ClearDB via MySQL Workbench (or a similar tool), and import the SQL dump you created in step 2.
  • Your articles and settings will still point to your old domain. Fix these with three simple updates:

    UPDATE PREFIX_wp_options SET option_value = replace(option_value, 'www.OLD-DOMAIN.com', 'www.NEW-COMAIN.com') WHERE option_name = 'home' OR option_name = 'siteurl';
    UPDATE PREFIX_wp_posts SET guid = replace(guid, 'www.OLD-DOMAIN.com','www.NEW-COMAIN.com');
    UPDATE PREFIX_wp_posts SET post_content = replace(post_content, 'www.OLD-DOMAIN.com', 'www.NEW-COMAIN.com');
  • Edit your wp-config.php:
    $db = parse_url($_SERVER["CLEARDB_DATABASE_URL"]);
    define("DB_NAME", trim($db["path"],"/"));
    define("DB_USER", $db["user"]);
    define("DB_PASSWORD", $db["pass"]);
    define("DB_HOST", $db["host"]);

4. Make The Heroku project run locally

  • (Now this step is far from mandatory, but I find it easier to add plugins and double check everything on localhost.)
  • You probably have your xAMP environment set up already. So did I, and therefore all I needed to do was to:
  • Set the CLEARDB_DATABASE_URL variable to whatever URI “heroku config | CLEARDB_DATABASE_URL” displays
  • Create a symlink to your apache document root: “ln -s /Users/wimagguc/heroku-wordpress-folder/ /var/www/heroku-wordpress-test”

5. Add S3 to handle file uploads

  • The best practice is to keep dynamic file content off from Heroku: in case you have multiple instances running, files uploaded to one dyno might be missing from other ones. Keeping all uploaded files on Amazon S3 is one way to solve this problem.
  • Go to amazonaws.com and register for Simple Storage Service (now there is a free usage tier for the first year!)
  • On the S3 console, create a bucket for your blog
  • Get the login credentials from Amazon
  • Install this great S3 for WordPress plugin and set it up to use with your bucket

Further reading:

j j j

Selfridges London on Google Maps

If you have ever lost in a subway or a shopping mall, you know that indoor maps are indeed useful. I’m not the kind of person who wants to consult info points and -graphics every time looking for the right exit in the underground – but having a map in my phone that helps in these situations: that’s a real deal.

Selfridges London on Google Maps - by Richard Dancsi

I have read sometime in July that the indoor function of Google Maps will be available in the UK, but I didn’t pay too much attention: with my age I already know how to get around in shops and how to look for those signs that give me directions. What’s really great though, is the ease of use. No matter which section, floor or department you are at, the phone is always in your pocket – and you always know which way to go next.

A faster, more effective, happier way of getting around indoors.

j j j

Sickness resolutions

I’m sick for quite a few days now, which means spending most of my time in bed and skipping all the fun. This is a no-go, especially on possibly the last warm days of the year here in Berlin.

The worst part of the whole thing is the mood. Not being able to do anything that’s not a must. This is to get over with first: it’s not enough that I haven’t written in weeks, but reading the starred articles in Google Reader should be the bare minimum. (Now I’m finally doing these both. How proud.)

Being nailed to bed didn’t come as a surprise: I had quite enough signs and there were a few things I shouldn’t have done. First, a week with fifteen meetings and four parties in three countries. Eating out in cafes ways to often. Not taking the weather seriously enough: after the first time having 15 degrees in the room I should have switched on the heating.

So now, as soon as I got better and be able to do sports again, there is going to be a new deal.

1. Vitamins. I raised my Vitamin C intake to 2g a day (plus shitloads of oranges and paprika).

2. Sports. Running four times a week, short daily yoga sessions.

3. Being prepared for sub-optimal weather situations. Always having a scarf and another layer in my bag. Switch on the heating as soon as it’s needed.

To be organized is the new deal.

j j j

Goodbye Nike+, welcome miCoach

As you may remember, I started to track my runs with Nike+ just about two months ago. Since then we shared a few moments (ten sessions and 50 kilometers) – quite enough time to know: I need something else.

Adidas miCoach - about Android, web, tech from Richard Dancsi
miCoach – slightly less style

The main reason for the break-up was something that’s not the really Nike’s fault: their app is only for running. Because I like to track my cycling routes as well, I had to have a separate app for almost the exact same thing: see some speed and location data on a map.

And since miCoach from Adidas (the Android version) was already there, I couldn’t help to see the advantages of it:

1. Better statistics: shows my actual speed in time (not only green/yellow/red colors), average by kilometers, fastest km, elevation data etc. Just perfect.

2. Works without registration. (Now, I registered anyway so that I can see my data online, but I really like the fact that I didn’t have to for using the app.)

3. Feels more accurate. Sometimes Nike+ showed 100m as the distance so far, right at my 600m turn (I used to run on the same route a lot.)

Some drawbacks:

1. Slightly worse UI. Not bad, not ugly, but well… Nike+ really was top notch on that.

2. miCoach asks for a code every time I start it. (Why? Anyone who gains access to my phone, could check my emails, Twitter, even payment data – but not how far I ran? It really doesn’t make sense.)

3. I have no idea, how the achievements work.

Well, let’s see how long this relationship lasts.

j j j