SEO 101 Talk

seo

Last night I had the honor to talk about SEO 101 at the first Aachen Barcamp/Meetup (we don’t really have a name just yet) at Crolla Lowis‘ lovely kitchen.
Since I used to work at KeywordDomains.com I figured I could start by speaking about basic SEO techniques and strategies. My talk primarily focused on white hat SEO techniques (stuff you could proudly show any Google employee, even Matt Cutts). After the official talk there were some quite interesting questions on so-called black hat techniques (stuff you really need to hide from Matt Cutts). Below are the slides of my talk. If you’re interesting in joining us for the next Barcamp/Meetup (you might want to help us find a name) on April, 24th feel free to join our Facebook group. We’re really looking forward to meeting you.
(more…)

MySQL Performance 101

7439713998_f5fa35d269_h

So you’ve built a kick ass web application that’s really, really popular among your users? Congrats! It’s probably generating a lot of data then, as new users register, and new data is added. Probably a good time to think about scaling. But wait, before adding more hardware optimizing your existing database might help as well. Don’t get me wrong, at some point you can’t look past adding more (or more powerful) hardware. But if you’re just starting out having performance issues, looking at MySQL optimization might be a good starting point. (more…)

Content Marketing for Small Businesses

IMG_3699

Lately marketers all over the world have realized what SEOs and domainers have been knowing for a quite a long time. Content actually matters! Wow, what a surprise. While I might sound arrogant here, let me explain my background.
At the time of writing this, I was working as a frontenddesigner at KeywordDomains.com GmbH, a classical SEO company. We were buying domains, selling domains, creating sites and portals on those domain and making revenue from ads and affiliate marketing. So what’s the main key in a domainers day to day work? Search Engine Optimization, you’re totally right. It’s all about ranking your site high on Google. Higher Ranks mean more traffic, more traffic means more visitors and given the conversion rate of your site (number of people executing a desired action, in our case clicking an ad or following an affiliate link) is constant, more traffic will mean higher revenues. But how do you rank your site? There’s a lot of what seems like black magic going on out there in the web. There are a lot of self-claimed “experts” pretending to know the one way to SEO Nirvana – oh, but you’ll need to pay them like 10.000$ to a foreign bank account. Fun aside, making your site rank high is actually a pretty straightforward process. You will need unique content, that people actually search for. And you will need some backlinks. Depending on the competition on your keywords that should be about what it takes to launch a successful website.

(more…)

Common Data Structures in CoffeeScript

4761676558_09f3fb979d_b

Everything is easier to understand if it’s written in some cozy CoffeeScript. So why not try to demystify common data structures like stack, queue and tree by coding them in CoffeeScript?

In this post I’m trying to maintain an ever-growing list of CoffeeScript snippets. If you have any suggestions or ideas, feel free to drop me a note at hello@lucas-nolte.com. The snippets can also be found as gists on github. Enjoy!

(more…)

Decorate Models in Laravel

IMG_1912

I’ve been developing a custom CMS for a client project recently using the super amazing Laravel PHP Framework. The system has a lot of model with common behavior: Pages have a “published”-status, a slug and SEO information on them. The same applies for products and other data types of the system. Well, rewriting behavior to create publishable models sucks, it’s not very DRY and you shouldn’t do it. That’s when the decorator pattern popped into my mind. The decorator pattern basically allows you to add additional behavior to a class by wrapping other classes (the decorators) around it. The decorator itself is sort of invisible to the high level implementation as it’s redirecting calls to the original class.

(more…)

How Kanban and Trello worked for me

kanban

It’s been almost a year since I first got introduced to Kanban, an agile method originally developed by Toyota that quickly became popular in the IT Industry. Sure I’ve heard the term agile development before, but being a single freelancer at the time, I already felt pretty agile. That all changed when I started work at KeywordDomains.com. All of a sudden I was sitting in an open space office with coworkers from different “departments” (we were just 10 people) all around me (I was the only designer there then, so basically everyone was a different department to me).

Starting my job I was psyched. Working in an open space office felt so web 2.0 startup like (of course we had IKEA Expedit shelves like any startup does, but I’m getting off topic…). My open space office dream soon turned into a nightmare. Being the only designer I soon was hammered with requests like: “Can you create a quick visual for me?”, “Can you change this color here…?” and the occasional “Can you create a birthday card for my father/brother/friend/girlfriend/husband…?”. This sucks, because it destroys your focus. It would take me some time to get my mind back to my previous work after responding to such a request. Feeling a bit frustrated I talked about it to one of coworkers from the Development “department”. He was feeling the same pain. A few weeks later our boss Paul came up with the idea of applying Kanban to our day to day routine. He wrote down his experiences at his blog. After a few briefings on how Kanban works we decided to give it a spin.

(more…)

Error linting using git pre-commit hooks

I’ve been recently hacking on a nifty side-project, that provides real-time web analytics for humans. I’ve been hacking on it after my day job/freelance work, so I tend to be a bit tired when coding my side-project. Tired developers make random mistakes that’ll give you weird 500-style errors. I know, an IDE would keep me from producing those teeny tiny syntax errors in the first place. But being a natural-born frontend designer/developer, I don’t like IDEs. I like my code editor lightweight, letting me get stuff done.

(more…)

Create an Inverted-Index Text Search in CodeIgniter using Redis

For recent client (a company offering group travel locations) work I had to create a fulltext search that allows users to search for keywords in the travel destination descriptions. The system itself is written based on CodeIgniter 2.0 backed by a MySQL Database. I chose redis for the search, because it will allow great scalability once more and more content is added to the database. Also, I wanted to try something new. MySQL tends to get booooring. So let’s have a quick look at how I did it:

(more…)

Free responsive WP Theme BoloDay

We recently released our first free WordPress theme to the public. It’s called BoloDay (named after an hilarious lunch we had at the office).

It’s a minimalistic four-column theme, that collapses on smaller viewport. It features large imagery, optimized legibility and strong typography. Oh, and it’s open source. So be sure to check it out! Review it, submit bugs & enhancements, or fork it and send a pull request. It’s up to you ;)

(more…)

Using node.js for a build script

Lately we‘ve been amazed by how node allows you to use plain JavaScript for all your scripting needs. My coworkers still rely on Python or Ruby for those stuff, but since I’m a frontend guy, this comes in really handy for me. (Don’t get me wrong, Python and Ruby are really great languages, but I’m just too lazy to learn, when I can achieve the same thing with the language I’m using day to day).

Amazed and inspired by the many approaches the OpenSource community has towards using node for build script stuff I decided to hack my own build script for a few of my recent projects. Again, I’m being pretty lazy here. I could have just learned my way into one of the existing build scripts out there, but I wanted full flexibility and a syntax I could easily hack for different project structures. So let’s get started.

If you’re coming from the frontend like me, you’ll know that the essential part of frontend building is file concatenation and minification of assets. So that’s where I started. Concatenating files is pretty straightforward in using nodes built in filesystem-module. So my basic script workflow looks like this: Find all the files, concatenate them into a temporary file, minify the contents of the temporary file to the build target and delete that temporary file. (Lot’s of temporary going on there…)

Let’s say you have an array of files you want to concatenate that looks like this:

var paths = ['js/script1.js', 'js/script2.js', 'js/script3.js'];

You can then simply make one file from these three files using map and node’s very own filesystem module:

var _fs = require('fs');

// map the contents of all files to the array "out"
var out = paths.map(function(path) {
    return _fs.readFileSync(path, 'utf8');
});

// join "out" with a linebreak and save that stuff to a temporary file
_fs.writeFileSync('tempFile', out.join('n'), 'utf8');

It’s that simple! Next step is to minify that stuff. No need to reinvent the wheel here. Before rolling my own script I’ve been pretty happy using Google’s Closure Compiler for Javascript and YUI Compressor for CSS. Nice thing about node: It also has a child_process module, that let’s you run command line stuff from inside your scripts. So simply take the syntax you’re using on the command line and drop it inside your script. (You’ll obviously have to place the .jar files of YUI Compressor and GCC in the same folder as your node script…)

var exec = require('child_process').exec;

// ClosureCompiler
exec('java -jar google_closure_compiler-r1810.jar --js=tempFile --js_output_file=script.min.js', function (err, stdout, stderr) {
    // Put some callback stuff here
});

// YUI Compressor
exec('java -jar -Xss2048k /yuicompressor-2.4.7.jar tempFile -o style.min.css', function(err, stdout, stderr) {
        // Again, callback should go here
});

That’s all there is to using node for build scripts. You’ve just learned how to concatenate and minify assets with node.js. This is all you need to know to get started hacking a build script for your own project.

Rodolphe Stoclin has written a nice node module called “node-minify” to provide some great abstraction over those minification called. You can find it on github: https://github.com/srod/node-minify

At the time of writing this, “node-minify” has no ability to automatically concatenate files. So I’ve forked the module, added that stuff and sent a pull request to Rodolphe. I’ll keep you updated. In the meantime you can check out my implementation at https://github.com/lnolte/node-minify

So in the end file concatenation and minification in node becomes as simple as this:

var compressor = require('node-minify');

// This will concatenate your script files and minify them using Google Closure Compiler (gcc)
new compressor.minify({
    type: 'gcc',
    fileIn: ['public/js/plugins.js', 'public/js/scripts.js'],
    fileOut: 'public/js/script.min.js',
    callback: function(err){
        console.log(err);
    }
});

From now on I’ll be using node a lot more for streamlining my frontend build processes. I’m still trying to figure out a nice way to distribute the whole process, but I feel like I’m getting there.

What are your experiences with build proccesses? Please let me know. Thanks for reading!