Categories

Tweet, Tweet!

For too long we’ve been the shoemakers with no shoes. It was very difficult to find the time to design our own site – it seems that there are always better things to do!
Even right now, there is a huge pile of things we’d rather create than our website, but after years of making web designs for others, we decided that it was finally time we got a website too, or at least start the process of building our site.

As a part of the decision to launch our website, was that we wanted to build a blog for Photographers.

Writing for Change

We’ve seen too many sites spreading either incorrect information or purely profit oriented information, for example affiliate inspired hosting reviews. The only way to change things is by sharing unbiased information. At least that’s the first step, and that’s the step I never really took seriously, until recently. So we decided that we’re going to run a blog for Photographers over at Colormelon. Soon after I realized – writing is extremely hard.

Writing isn’t hard, Writing is a skill

Today I tweeted this:

Writing code is so much easier than writing good content. How do you people do it? I open up a markdown app and suddenly feel blank!

and that really made me think – what if that’s only true, because for the past 10 years I’ve been writing code more than text? Maybe if I practice writing every day it might become a bit easier ?

So here it goes – I am going to write as much as I possibly can about everything I can think of. I don’t know where this journey is going to lead me, but I hope that when it’s all said and done that I end up changing the internet, and maybe the world – for the better.

Very much inspired by Guy Rutenberg,
I only modified the snippet slightly with -N, which validates timestamps and doesn’t download duplicated ( but does overwrite local files with the new changes ) and robots=off, so I wouldn’t download the robots.txt

When I first heard of Bower, I really, really wanted to love it. In theory Bower sounds like the real deal:

Bower works by fetching and installing packages from all over, taking care of hunting, finding, downloading, and saving the stuff you’re looking for. Bower keeps track of these packages in a manifest file, bower.json. How you use packages is up to you. Bower provides hooks to facilitate using packages in your tools and workflows.

Bower is optimized for the front-end. Bower uses a flat dependency tree, requiring only one version for each package, reducing page load to a minimum.

Unfortunately – it’s not how it works in practice. Sure, bower finds packages for me, but that’s about it. After I’ve downloaded the packages, I have no idea where the files might end up in, what are they going to be called, how to include them, so after the package is downloaded – you’re on your own, bower just calls in quits. Even tools like gulp-bower or grunt-bower don’t help all that much. No standardized way to get an unminified version or a file. Sometimes you can guess, other times you can’t.

But the worst part, for me – bower doesn’t update the scripts properly. At first, I was very confused about how updating works in Bower, and it looks like I’m not the only one. Looks like nowadays you can update the scripts, but major version updates are still a pain in Bower, and the argument for it, in my opinion is very weak.

I’m not going to go into how the updating in bower actually works, and to be perfectly honest, I don’t care about that all that much anymore. What I’m looking for is speed and ease of use.

Workflow incompatibility

I know, there is an ocean of people who love bower. But I never managed to fit Bower in my workflow. I don’t really need to think about dependency tree in a standard way. Wordpress dictates the version of jQuery and underscore.js that I’m supposed to use.

All of JavaScript libraries that I’ve used in my life, with a few exceptions ( I’m looking at you desandro ), have every little thing built right in. In many cases, even a jQuery shim.

Sure – that’s a lot of overhead, and it’s not ideal.
An ideal tool would be like Bower that people would trust, and everyone could depend on each others snippets, shims, plugins etc., but at the moment, it looks like a very, very distant utopia. Everyone has their own workflow, standards, preferences. We’re still debating on spaces vs tabs after all.

A simple solution for simple folks

I’m a simple man, looking for a plain simple solution.
I don’t need “built-in” security that prevents automatic major version upgrades. If a problem comes up because of a library update – I want to address it ASAP. I just want the latest version of the libraries I’m using.

In external_libs add your libraries and the URL to pull them down from and that’s it! If you prefer – you can keep it in a .json file, but this works perfectly fine for me.

Run gulp getlibs in your terminal and get the latest version of all your libs! Add version management ( like Git ) to your project, and you’ll always be aware of all changes in the libraries you use. Dead simple.

_.pick is great

Underscore.js has a lot of great stuff packed in it. One of the functions I love is pick, which lets you input some keys and get a new array from an Array.

Can’t pick in PHP

So today I wanted to find an alternative to Underscore’s _.pick for PHP, and I didn’t. It’s not a function that would be difficult to write, but that’s where WordPress comes in.

Can pick in WordPress

People at WordPress thought that it would be a nice helper for them too, so in WordPress 3.1 they added wp_array_slice_assoc.

The naming is a bit long, but the function is awesome anyway and the naming explains the purpose alright. Slice an array associativley ( that’s a big word ).

Here is how it works.

Imagine we have a some array like this one.

1

2

3

4

5

6

7

8

9

10

<?php

$myray=array(

'john'=>'a name',

'jane'=>'also a name',

'doe'=>'a fake last name',

'duck'=>'an animal',

'goose'=>'an animal',

);

?>

In this case the array is a mess, your array should never be a mess, but it might happen. In this case, I know I want only John and Jane in my array, so I can do this:

1

$persons=wp_array_slice_assoc($myray,array('john','jane'));

Tara. Now I have a new array “$persons” which has only john and jane.

How is this useful ?

Well, there are times where you would write something like this:

1

2

3

4

$john=$myray['john'];

$jane=$myray['jane'];

$duck=$myray['duck'];

$goose=$myray['goose'];

Which I think of an overkill, especially if you need like 10 variables. Of course you could extract from all of them

1

extract($myray)

But what if the array has like 20 items. What happens when they clash? What if someone else modifies your code? I just don’t feel that blindly using extract is the best development pattern.

Along comes wp_array_slice_assoc()

1

2

3

4

5

6

7

8

9

10

$keys_to_extract=wp_array_slice_assoc(

$myray,

array(

'john',

'jane',

'duck',

'goose'

)

);

extract($keys_to_extract);

Or a slightly more readable (based on preference) variant

1

2

3

4

5

6

7

$keys_to_extract=array(

'john',

'jane',

'duck',

'goose'

);

extract(wp_array_slice_assoc($myray,$keys_to_extract));

That’s it.

1

echo$john;// Echoes: "a name"

Final Note

Please, please be careful extracting variables. And when you do, please document them, even if the documentation comes in the form of $keys_to_extract. Recently I had a very difficult time figuring out what is what because the author of a plugin pulled some weird variables out of nowhere and I had to run around var_dump’ing all over the place until I figured out what is what.

My Theme Was Rejected

Before it was approved.

In fact, we’ve had 2 themes rejected on Themeforest for various reasons and only now will I admit that I was angry. I was mad! Mad at the reviewers, counting clicks they’ve made reviewing my themes. Mad at myself for developing something that isn’t approved. Mad at the universe for putting me in this position ( I could just have found a case full of money instead of all this… ). How much did that help? Zero. It only led to

Burning Out

Self pity. Anger. Frustration. Fear.
I experienced it all, and it seems that the more I felt any of these emotions, the more I got similar ones. I thought I am never going to get out of it.

For good reason.

I quit my job in January with very limited funds in my pocket. Having done that, I had a motivator that basically says “either you’ll learn how to swim or you’ll sink” was pretty motivating, until I had to face rejection. Once it was introduced, it was like having someone at the shore shouting: “Give up! You can’t swim, just let go and drown already”. Not motivating at all. Which caused the (what seemed to be the) endless misery.

Just do it.

I have no idea what did it for me. It may be that I was already expecting that. I wanted to say prepared, but you just can’t be prepared for that sort of thing, and you’re not even going to get what you we’re expecting as well.

So after all the rejection, and having our Acid theme also rejected, I just decided that nothing is going to stop me. I will work on the Acid theme until it is approved.

As it turns out. It’s all that was necessary. I could write a book where I could describe all the advice I’ve accumulated from all the literature I’ve read on the subject, but it all really boils down to the decision not to fail.

By that I mean – If you think you fail, you failed. If you decide not to fail at all, you won’t. Or as Thomas Edison puts it:

I haven’t failed. I’ve just discovered 10’000 ways that won’t work.

It’s a really simple lesson. At least it sounds simple. But there is no way you’ll learn it but through experience.

Here is another really quick snippet.
If you have a page where you’re using Query Posts you’re going to have trouble with Pagination.
Wordpress for some reason likes to use page and paged randomly.

If you assign your page as the “front page”, you’re going to have to get_query_var(‘page’), and if you’re going to assign it elsewhere, it’s going to be paged. This is all fine and dandy, at least when you’re in control, but as soon as someone else starts using your theme, you need something more trustworthy, and that’s what this is.Continue reading Snippet: Get the correct page in WordPress