Yes and No are Two Sides of the Same Coin

I’m writing this to myself because it’s likely I might forget this lesson; it would be a crying shame to have to learn it twice. 

Historically I’m terrible at saying no. I love leaving myself open for new opportunities. I like the freedom of choosing a new direction at every intersection. This means I’m more likely to say yes than no to pretty much any opportunity. Here’s the thing though: saying yes to one thing automatically means there’s a lot I must say no to make the yes happen.

Don’t Be So Negative
No isn’t a negative word, like I used to think. It’s reinforcement for a yes I’ve committed myself to. I say yes to jogging to the gym in the morning for a workout, I can’t say yes to talking to my girlfriend at the same time. I can’t say yes to writing code or a new blog post at that time. I can’t say yes to lazily rolling around in bed til I’m ready to get out of bed. Yes to the gym means I must say no to those other things. Not that they’re bad things that automatically deserve a no. The issue is I can’t go to the gym if I’m doing any of the other things. It’s simple, really.

You’ll Know When to Say Yes and When to Say No
Be grateful for the times its clear. Those are the easy ones. The things you really need to say no to don’t present themselves as an obvious no. They’re subtle. Deceptively subtle. In fact, you’ve probably assumed the correct answer to the question is yes long before you discover that you should have said no in the first place. If you’ve said yes to the gym, do you say yes to jogging to the gym with a friend? On one hand, having a buddy to go with is pretty helpful; your buddy could motivate you on lazy days, so pairing up is a good idea. On the other hand, you might spend lots of time waiting for, chatting with or hanging out with said friend. Enough that your time at the gym isn’t very productive. Do you say yes or no to your friend who wants to jog to the gym with you?

It’s A Lot More Clear When It Really Matters
Saying yes to your partner means saying no to every other future match, no matter how much more compatible they appear to be. If you’re having serious trouble in your current relationship, do you stay to work it out or do you go with a potentially better partner? Saying yes to a project means saying no to any other project that comes up while you’re currently engaged. Do you continue working on a project that feels like it’s going nowhere when you just got invited to work on an awesome new project with better pay and awesome team members?

It’s Not a Yes or No Question
The phrasing or logic of a question is really boils down to some points. You can’t pursue every opportunity. You need to be able to close some off in order to chase others appropriately.

 

It doesn’t mean something you said no to today will forever be a no. I never worked out for majority of my life. I was proud to be a nerd that focused on building my mind. I’d pick a good book over gym time any day. Today, I appreciate being able to jog a kilometer without stopping to catch my breath. Saying yes to working on a healthier body has meant I have to say no to some good books. I had to close off the possibility of reading every good book that came my way for that to happen.

It’s not always clear you’re saying no to many things when you say yes to one thing. It’s been lost on me in times past but I can’t afford to remain ignorant of the relationship between them. My future depends on it.

Not Alone

“Anything that can go wrong, will go wrong” – Murphy’s Law

Or Chinua Achebe would put it: “Things Fall Apart”.

Isolation is my coping mechanism when things fall apart. I feel fully responsible for what’s gone wrong so it’s unlikely I’m ready to surface if I don’t have a solution in hand.

Elusive solutions reinforce how I’m not suited to be doing what I’m doing in the first place. Nagging guilt rips me up, tears down my confidence and sends me on a downward emotional spiral. Justification for such self-destructive thoughts are firmly rooted in the belief that it’s my fault everything is broken.

Two unrelated problems I’m dealing with are convincing me to reconsider this way of coping when things go wrong.

Continue reading Not Alone

Transfer Files to Your Blog in Seconds

I had an interesting conversation with a friend of mine who wrote for a Nigerian entertainment blog. As much as he loved blogging, a lot of the tedious bits continually frustrated him.

1. He spent too much time downloading files just to rename them before uploading to the blog.

2. He paid a lot of money to his internet subscriber, due to the amount of downloading and uploading he needed to do.

I realized I could solve some of these problems for him, so I started to build something to help him out.

I set up a website where he posts a link to what he wanted to download and what he wanted to rename the file to. He pushes a button and the file is renamed and uploaded to his server and a link to the file pops up on his screen.

Here’s what it looks like in action.

This was a solid solution for #1 because he didn’t have to download and reupload anymore. Just press a button and a link will be provided when its done. It was done in much quicker time than he could do it too. When I tested it with a 500MB video file, it got uploaded to the server in 19 seconds! Most files he was uploading are under 30MB so I knew it would be good enough for the job to be done.

It also worked out to be a great solution for #2 because typically he would use up 10MB downloading the file and another 10MB uploading it. Now, he doesn’t waste a single MB. The download and upload happens elsewhere, so he got to keep his MB and get the job done faster too.

Adim and I are working to make it better so bloggers aren’t wasting time and money downloading a file just to reupload it again. We need a few people who want to test it out, so if you (or someone you know) can benefit from this, drop us a line below 🙂

Stay Awhile And Listen

I like building. There are very few activities that can monopolize my attention span for hours on end like assembling individual pieces to form something new. It doesn’t matter how trivial its purpose is. I obsess over it, sifting through all the components to find which combinations give me the best result. As useful as this has been for work, I didn’t get it from freelancing or employment. I got it from videogames.

Deckard Cain is a chatty old man in one of my favorite videogames of all times, Diablo II. He wants to tell you all about the world you’ve been dropped into. He wants to warn you about upcoming challenges. He wants to advise you on where you should be heading to make progress. All Deckard Cain wants to do is talk to you. His catchphrase is “stay awhile and listen”.

Conversations with Deckard Cain are useful because the world of Diablo 2 is gigantic. The maps you must explore are randomly generated every time you start the game. You must re-explore it every single time you play the game. The checkpoints scantily scattered across the world don’t save your exploration progress. They save your time but it’s likely your objective is 3 or 4 (or as many as 8!) randomly-generated maps away from the checkpoint anyways. Considering how long it takes to fully explore each map, it’s really not a game you want to be running around blindly in.

Building for the web is very similar to the ever-morphing world of Diablo 2. Every browser is its own unique environment – no two are completely identical. Browsers change between versions. Sometimes very drastically. Internet Explorer is so different from version to version that it requires special attention to accomplish the same task in different versions. Web Developers have leaned on collections of code to make working in browsers easier. Today there are so many different collections of code that choosing the right one for your project is a bigger problem than dealing with different browsers! If you’re working with a team, better pray they are willing to use the same collection of code you want to work with.

All of these “explorations” keep web developers from reaching the true objective: the thing we set out to build in the first place. To that, I’d like to channel Deckard Cain and give one piece of advice: “Stay awhile and listen”.

1. Listen to The Client
The desire to start building right away is so strong that it’s entirely possible to miss what the client wants and build something they aren’t willing to pay you for. Deckard Cain doesn’t speak until you click on him, so don’t expect to get nuggets of wisdom from your client without engaging them in a conversation. Whatever you do, get them to talk and be sure to listen. They may tell you in absolute terms what you should build. Sometimes they won’t. What’s most important is understanding why they need a solution in the first place. Nothing requires you to solve it in the same way the user expects it to be solved. In many cases, solving it exactly as the user expects will result in something they’re not willing to use! Listen to the user to understand why need a solution. Let their problem guide you to the best approach.

2. Listen to Your Environment
What you’re working with directly limits what you can build. There are things that are impossible to do in the browser. Out of the things possible in the browser, some are impossible in your framework. Some features available in your framework are unfeasible due to your project structure. You really want to listen to all these constraints, because the solution you’ve envisioned might not be possible to execute due to circumstances beyond your control.  Don’t waste your time when your environment and what’s available in it will tell you the limits of what you can accomplish.

The more you stay awhile and listen, the better the quality of things you build. This isn’t limited to Web Apps or Diablo 2 characters. The quality of my relationships have improved as my ability to listen increased. An area I’m still working on is completing people’s sentences. It’s nice when I’m right but the satisfaction is shallow and fleeting. It’s downright embarrassing when I’m wrong. All things considered, I should be fully listening; focused on what they have said and never assuming what their next words would be. That’s not what Deckard Cain would advise me to do.

Building is hard. The challenges keep coming. Even when you’re “done”, you can expect more challenges to turn up. Don’t sweat it though. Repeat the following words and let them guide you to the right solution:

When the going gets tough, stay awhile and listen.

Much Ado About Netting

Sometimes I let my mind wander. Not the way one lets a dog out into the yard or a newly-wed lets their partner hang out with old friends. There is no fence when my mind wanders. No phone call when the sun goes down to inquire its current location or when it’s coming home and if it could pick up milk on the way back. I let my mind go and dutifully waits for it to come home, like a wife waits for her partner to return from a tour of duty. Now that I have a blog, I feel compelled to share the details of its most recent trek.

You, me and everyone’s grandmother are familiar with the word network. That’s right. You too, reader of undetermined age or gender, must be familiar with the word simply because you are reading these words. You (or someone else) found where I placed it on the Internet and through undetermined steps since then, you are now reading it. According to Wikipedia, the Internet is a global system of interconnected computer networks. Which means my network is connected to your network and our networks worked to get this post on the screen you’re reading it on. Or paper, if you’re the kind that likes to print things. I’m not judging you. My point is there’s no way you’re reading this that isn’t a result of networks working.

I’m in the process of learning Japanese. I’m at the stage where I can identify individual letters, but not words. Japanese people don’t use spaces in their sentences. Don’t ask me why. I’m still at the stage where the method behind their madness is eluding me. A side-effect of their spaceless writing is I spend a ridiculous amount of time dissecting every word that is a combination of other words. For example, Wednesday is 水曜日. 日 is the character for sun or day. Makes sense so far. But why is the word ice (水) part of the word Wednesday?? I challenged myself to learn Japanese so I’m not backing down. Not in the face of utter madness.

My mind started trying to dissect the word network. “It’s obviously a product of the word net and work“, you’re thinking. You’re clearly cut out to learn Japanese too, I’m thinking.

Wikipedia says a net is a device (!!!) made of fibers and woven in a grid-like structure. It blocks the passage of large items while letting small items and fluids through.

In other words, a net is a grid and the work it performs is catching objects of predetermined size. A net’s work is catching. Network is catching.

It’s important you know the size of what you want your net to catch. Fishnet stockings, for example, don’t catch leg hair. They catch the attention of perverts, who are bigger than the proverbial and literal plenty of fish in the sea. If you want to catch a non-pervert (fish or man), fishnet stockings are not the best net to use.

Social networks are designed to catch all things social. Nobody wants to be caught, though. Not even social people. They tend to revolt when they see how much of their social activity has been captured by networks. But that is what networks do. They catch things.

Every creature on this planet is wary of nets and their work. Builders of nets strive for transparency. Spiders build their net from hard-to-see materials. Flies fly right into a spider’s net and the net works. Credit card companies build a net out of hard-to-see materials. High school graduates fly right into the net and the net works. They might escape from the net just in time to warn their own kids, but only the sharpest of kids see the net and avoid its work. The rest become haplessly tangled in it.

I think I’m unwittingly giving nets a bad image. They aren’t bad. It’s just that their work is valuable to all sorts of people, good and bad.

Firemen and trapeze artists rely on nets to provide safety to their often dangerous work. They aren’t bad people. Their work isn’t bad either. Many governments provide social safety nets. I can’t say if these governments are good or bad, but they are doing tremendously good work with these specific nets. I won’t comment on other nets they use, like stuxnet. All I’ll say is they had no desire to catch stux.

I like the Internet. The Cartoon Network website caught me as a child and I challenged myself to design for the Internet. I sift through other people’s nets and find funny pics, interesting comments, videos (all legally, Internet Police; nothing to see here), music (also legally) and articles. The Internet is a major contributor to the type of person I am and what I do. You can even say I wouldn’t be doing what I do without it.

I was caught by the Cartoon Network’s net’s work and my life has forever been changed.

The next time you get caught in a net of some sort, don’t get annoyed. Take a moment and think carefully. You might find sheer delight and a lucrative career path in it. If anybody disagrees with you on this, tell them to come to me. I’ll win them over to the net side.

Challenge Accepted

First Blood was about how I miraculously got over 5 years of procrastination planning, put up this blog and turned over a new leaf. What I didn’t mention is how it was part of a challenge I had with my doppelganger: Adim Ofunne.

There’s a proverb I heard growing up that I never quite appreciated. The child of the cobbler has no shoes. It doesn’t even sound like a proverb so I don’t feel guilty for not getting it right away. The wisdom tucked into that proverb is that when an individual is paid for a service, it’s unlikely they’ll perform it for free. I don’t believe its because they are cold-hearted. It’s in a parent’s best interest to provide shoes for their child, after all. I like to believe that when surrounded by their tools and placed in their work environment, most professionals will rather do paid work even if the free job is in their best interest.

Adim and I build websites of varying complexities for a living. Setting up a blog is hardly a test of our technical competence. We aren’t strangers to the importance of writing because a suprisingly significant percent of our jobs is keeping up with our field by reading other people’s blogs. We can set up a blog quickly and we know it’s important to blog. We can do it and we want to, but we never did. We were the cobblers who somehow never made shoes for our thoughts to wear while they traveled the internet.

How did we overcome years of procrastination planning and get our blogs set up within a few days of each other? We challenged ourselves.

As I read his first post, Child like thoughts, I realized that it was fear that was keeping us from doing it. Scared of what people will think of a Software Engineer with a so-so looking blog. Scared that what we’ve written won’t be anywhere near as impactful as the awesome content the internet is already filled with. Scared that it won’t turn out as planned. Somehow the friendly challenge made us forget all that and press on. The challenge got us where skill, desire or foreseeable benefit didn’t.

My girlfriend says I’m always ready to accept a challenge. I don’t know if that’s entirely true, but I have found great success in posing a challenge to myself and trying my best to accomplish it. Some of them are pretty ridiculous, in retrospect.

I challenged myself to walk to work one day. I was pleasantly surprised when I did it and challenged myself to continue doing it. What I didn’t know at the time was that it’s roughly 4.5km one way. Just found out a few minutes ago when I pulled up the route on Google Maps. I walk 4.5km a day (9 if I’m feeling up to it) and it all started with a personal challenge.

I challenged myself to learn Japanese. I’m still woeful at it and need all the help in the world, but I can identify most hiragana, some katakana and a handful of kanji. Stringing together a sentence is beyond my capabilities, but I’m not backing down.

I challenged myself to live off ramen for a month. That was a really stupid challenge. I lost a whole ton of weight and looked really sickly but I completed it! I’m challenging myself never to mess with having proper meals and eating well ever again. Please God, don’t ever let me fail at this.

Challenges are awesome! You’re capable of so much more than you know, but you won’t know til you push yourself. Do yourself a favor and take a page from Barney Stinson’s playbook: challenge yourself today.

 

challenge accepted

First Blood

When I start writing code, the message I attach to the first save is FIRST BLOOD. Every. Single. Time.

The phrase comes from a sound-file built into a number of competitive online games that is played the very first time a player has been eliminated this round.

The attached note the first time I used the phrase in my code is:

Extracted from YKNightlights and retrofitted for general purpose usage

YKNightlights was a lifestyle blog I worked on for a friend and his buddies back in 2012. It was a pretty ambitious project on both our parts. The layout was very custom.  To build something that complex, I pushed my knowledge of WordPress, PHP and Javascript to the limit. The closest thing I’ve seen to it since then is Life+Times. I’ll take that as big plus since I like Jay-Z.

header-sample

We worked really hard to deliver a unique experience. Keyboard arrow keys were scripted for easier browsing. Left and right to tab through the picture grid that served as content navigation. Up and down to jump between header, navigation and content.

sample-post

If the link you visited had content on it, the browser jumped directly to it. We had fun working on it, injecting our humor into it. Like what happens when there’s no search result to display.

no-search-results

Not only was the front-end custom, the back-end was too. I wanted to make it easy for them to run the site, so I designed and implemented panels that didn’t come with WordPress just to make it happen.

cover-photo-yknightlights

post-curation-nightlights

The more I did freelance work in WordPress, the more I needed to make custom control panels for clients. I got tired of having to jump into the project to get that bit of code or remember which project has the most updated version of it, so I extracted it from YKNightlights and retrofitted it for general purpose usage.

That piece of code became my first open-source contribution and I was really excited to publish and update it. I’m probably the only one that uses it, but I’ve kept it up-to-date to the best of my ability. I use it religiously when I have to customize a WordPress backend. Not because it’s perfect. It’s never been and probably never will be. I use it because it’s in public space and it’s now my job to keep it in ship shape for whoever happens to find it and use it.

In a way, it’s the perfect metaphor for this blog.


I’ve always wanted to have a blog. I’m a designer and a developer, so I always wanted something unique that showcased that so I planned accordingly. Somehow I’ve spent the last 5+ years planning, sketching, conceptualizing, daydreaming and I’ve never gotten around to it. Until now.

I bit the bullet and threw up a WordPress installation, didn’t even switch the default theme and just started writing. I’ll design it later. I’ll make beautiful illustrations for the site later. I’ll code up some amazingness some other day. Not today though.

Today is the day I draw First Blood on my own corner of the internet.

I’ve downed my first opponent in the battle for my own beautiful corner of the internet, but there are many tougher challenges to surmount than just starting. I’ll draw inspiration from my time working on YKNightlights and push with every fiber of my being to make this space exactly what I want. I may never succeed but heaven, earth and hell will know I never gave up.

FIRST BLOOD