Joel Always one syllable

What this freelancing lifestyle is missing

28 Jul 2010

#

In a word – “Feedback”. Plain and simple.

It’s a given that while we work with our customers and clients we get some feedback along the way – “This is good”, “This needs to move over here”, “Make this red”, etc. That sort of feedback, however, is a little superficial in the grand scheme of things and not quite the feedback we’re in need of most. The feedback I’ve been missing for the past few years is the piece of the traditional employee-employer (“working for the man”) relationship. We might bitch and moan about it when we’re there within that context, but to be frank – the annual review is crucial. How else are we to know what we need to improve on?

As a freelancer – these constructs no longer exist if we don’t want them to. Which is nice to begin with. We’re free! Right?! Right. But, over time the novelty and the doubt will creep in and you’ll be left wondering – “What is it that I could do better?”. I’ve found myself longing for this feedback as of late and, while it’s a little scary and my lizard brain is wailing like a banshee, I’m pulling the trigger.

I’ll be asking my clients upon project completion just what it is that I did well on, and what I done poorly or could use some work. To some it might be counter-intuitive – “They hired you, right? They had to have confidence.” – but I’m more interested and excited to know for sure. No gray area. No guessing. No assumptions. Running a business is just that – it’s business. There’s nothing personal about this. Tell me how my business can be better.

I’m sure a good number of my fellow freelancers have been doing this for months (years) and wondering what’s taken me so long. I really wish I had an answer for that, but I don’t. Would those of you who have been doing this have any suggestions? Are there any questions you’ve asked that get the most constructive and helpful reaction?

Continuing on this theme, but a different post for another day, is feedback from a different slice of our professional life – our peers. To be continued …

Meta descriptions and keywords for each page and post in WordPress

03 Apr 2009 #cms #meta #meta tags #wordpress #Work

After searching for a plugin that might accommodate this in WordPress and coming up empty, I went digging for a possible easy way to do this with the means available.   Logic dictates that with custom fields this should be rather easy to accomplish.

The only snag might have been that in retreiving a custom field for a page or a post you need the page or post’s ID.   Usually this id is readily available within “the loop”, but what about when we’re up in the tags?    A little searching in the codex reveals that we can grab your pages’ ID with $wp_query->post->ID.  Fantastic – because, with that we’re pretty much done! Adding the following in your theme’s header.php file between … :

” />
” />

.. and “meta_keywords” and “meta_description” as custom fields with your desired content for each will get you to where you want to be.

WordPress hosted on XO Communications.

27 Mar 2009 #hacks #hosting #plugins #wordpress #XO

Suffice it to say – it’s not a winning combination.   There are two definitive hacks you’ll need to get things to work.

First, a plugin to disable canonical URL redirection.  Second, a hack to wp-settings.php that circumvents the XO php configuration’s not having $_SERVER[‘REQUEST_URI’].

Update: the second hack will break the non-admin part of the site in the context of the current site I’ve been working on.  So your mileage may vary.

Installing libmemcached and the memcached gem on Leopard

16 Feb 2009 #development #gem #memcached #rails #ruby on rails #Work

face palm

What a huge pain in the ass.

I just spent hours trying to get every combination of these two to work together and nothing worked.   A handful of versions of libmemcached had no problems installing – .24, .25 and .26 were all easy to install, both from source and from macports.  However, getting the memcached gem to install proved to be way way more difficult.I tried with a myriad of options – the most promising piece of information looked to be from this gentleman’s website – but also proved fruitless.The final solution, after a LOT of googling and clicking around the rubygem forums – this post at Evan Weaver’s blog.  The libmemcached-0.25.14.tar.gz and memcached-0.13.gem tarball and gem, respectively, installed easily without any problems.  After downloading all I had to run was:

tar -xzvf libmemcached-0.25.14.tar.gz
cd libmemcached-0.25.14
./configure && make && sudo make install
cd ..
sudo gem install memcached --no-rdoc --no-ri

Done. Finally.

Update: There seems to be a few issues with the gem I link to being installed correctly in Snow Leopard.  After spending too much time trying to figure out why the gem wouldn’t install, I installed the current memcached gem (from gemcutter) on a whim – and it compiled, and worked, without a problem instantly.   So, if you’re running Snow Leopard and looking to install the memcached gem, try out the latest version first.One caveat – I’m still using the memcached server I linked to above, version  0.25.14, still from Evan Weaver’s site

Difference between :collection and :member in Rails 2.0

11 Aug 2008 #development #enlightenment #rails #Work

#

In getting up to speed with the new bells and whistles in Rails 2.0s RESTful routing capabilities I ran into something that puzzled me.  Of the options for a resource defined among your routes there were two similar pieces that, for one reason or another, I could just not find a solid and bulletproof explanation for – :collection and :member.  The :member part of it I got pretty easily for some reason, because its description is inherent in its own name … “a member among the default restful actions”.  The :collection part?  Notsomuch.  After some digging in the Rails mailing list I ran into a great, and worthy, explanation for this knucklehead by a contributer named “deegee”:

For example, with map.resources :reviews, if you want to add a method ‘delete_all’ that deletes all reviews at once. You may want to call that with ‘/reviews/delete_all’ and method PUT (never use GET to delete something). This method is acting on all resources (a collection), so the route should be:

map.resources :reviews, :collection => { :delete_all => :put }

If you want to have a custom action acting on a specific resource, e.g. ‘/reviews/3/give_rating’, then your action is on a member and the route would be

map.resources :reviews, :member => { :give_rating => :put }

So that’s it! They’re the same other than :member working on a single resource, while :collection works on multiple.  DONE!

I’ve got an idea. I need a programmer. It’s easy!

16 Apr 2008 #business #development #entrepreneurship #Work

#

There’s a really great post at this blog about how the writer, a developer named Ethan, was approached by some acquaintances with regard to a big idea they needed help in implementing. The usual banter ensues, in which Ethan discusses the terms by which he expects to be compensated. Whether in equity or at an hourly rate of payment.

The response from his pitch-man?

Hey, so, we aren’t really prepared to pay. I mean there isn’t that much to it, it’s just a PHP website with a MySql database, I was hoping you could just throw it together as a favor. Oh well, thanks anyway

The rest of his post echoes pretty much exactly how I would feel in this situation. “There isn’t that much to it”. That line destroys me. To anyone that might ever make that assumption – take a moment to step back, and really think about what you’re saying. It blows my mind to think that there are people out there that are so quick to make the leap that “there isn’t much to” someone’s craft.

“Dear Mr. Architect – can you design this house for me for free? I mean, there isn’t much to it, it’s just a house with a foundation and some walls”.

On another semi-related note. If you’re looking for someone to jump in on an entrepreneurial venture – the challenge you should expect to be faced with is to find that one special, talented individual that might share the same passion as you on this particular topic. From my perspective – that’s the key. Passion. Unless it’s for pay, it’s hard for some to get truly amped to knock out the creative, or code, for your new project. I’ve tried the same approach – “Work with me on this! We’ll rule the world“. It’s too nebulous a proposition for most, unless they know they’re going to LOVE this thing you’re creating.

My conclusion – work my ass off for a little extra money to invest in the paid services of my friends to help me where the help is needed. I just can’t ever expect to get something knocked out of the park by someone who’s going on my word – “This is going to be HUGE!”. If my name was short for something like … Joelstradamus … then maybe I’d be more eager to prognosticate on the magnitude of my many “next pet project”s.

WordPress 2.5 – I’m impressed

14 Apr 2008 #development #plugins #sara #wordpress

#

wordpress iconI’m in the process of building and theming the brand new bitbythebeautybug.com for Sara. Not only is she excited, but I’m elated to be working with the newest of the new in WordPress “technology”. It’s a strange leap from all the WP installs I’ve dealt with previously, but you can tell they’ve dropped a metric ton of work into making it the most secure (as it possibly can be) and usable blogging platform out there.

The first thing we did to get this ball rolling was to find a designer that truly “got” Sara’s vision for her brand. Luckily we were able to retain the services of a wonderful designer named Erika. I really liked the work she did for the RailsEnvy guys and figured I would give it a shot to see if she would be available for some design work. Turns out she had some space in her (I’m sure) busy calendar and whipped up some designs for us. Design – complete. Much thanks to Miss Greco!

On my end, the development work so far, other than slicing images, has consisted of a few tasks.

  1. Since this would be a custom theme, I looked for the most generic, baseline theme I could find to bend to my will. After a lot of looking I decided on one of these themes provided by Charity at Design Adaptations. It’s well developed, very well commented and absolutely gets out of the way of anyone who is using it as a jump-off for their custom wordpress theme. I’m still struggling with whether this is “custom” if it inherits code from someone else’s work. Regardless – she deserves kudos.
  2. One of the things I was looking forward to playing with in these recent versions of WordPress are the “Widgets” the WP team has put so much work into. Picking and choosing all of the content blocks you want to see around your site, re-ordering them as you wish – it’s just nice. See a widget you like, download, activate, put it where you want it. The only slightly difficult part was to enable the sidebar for widget support, and then figure out just how to enable multiple “sidebars”.
  3. Once the theme actually supported all of these widgets – it was time to find them.
    • Flexo Archives – reducing the clutter that the generic Archives widget spits out.
    • Limited Catlists – displaying the latest posts in Category X – for our purposes, the posts categorized under “Featured”. I couldn’t find a “Featured Posts” widget so this will just have to do.
    • Text widget – this one comes stock with WP by default and takes care of those scenarios where a little duct tape is needed. No decent FeedBurner widget? That’s fine – copy and paste the code Feedburner gives you into the text widget. Need a small “About” widget? Text widget to the rescue.

It goes without saying – I’m far from finished, but in the initial sprint to build out this site these are the pieces I managed to take note of. All in all though, WordPress 2.5 has been nothing short of a revelation in terms of where it came from, and where it’s going to. Huge props go to Happy Cog for the work they put into the new WP dashboard. It just feels so right.

Link Slugs with Javascript

26 Feb 2008 #javascript #rails #ruby #seo

Over at Thredded I am still using Rails 1.2.3 (I’m a little gun-shy to upgrade to 2.0) and, of course, felt that slugged links were necessary for both search engine optimization and making things like assessing site analytics a little easier. It doesn’t even need justification as it’s a matter of fact and necessity for any and all social platforms – blogging, forums, etc. With RoR 1.2.3 the best way to get your links slugging it out was to incorporate a plugin like acts_as_sluggable. It works like a charm, really, and I’ve never had any case where I needed extra functionality.

… Until now. I’ve started incorporating some auto-updating magic to Thredded and needed to grab a lot of data back from an AJAX call (sorry Steve – XHR) in the form of JSON. All well and good so far. But, when new links needed to be built on the client side, I didn’t have my handy built-in Rails ActiveRecord overrides to spit out my new slugged-up link! What to do?!

I dug through the plugin source and found the function that built the url’s slug -

def make_slug(string)
      string.to_s.downcase.gsub(/[^a-z0-9] /, '-').gsub(/- $/, '').gsub(/^- $/, '')
end

… And thought the quickest solution was just to rewrite it as a simple JS function.

function slug(id, title)
{
      title = title.toLowerCase().replace(/[^a-z0-9] /g,'-').replace(/- $/g,'').replace(/^- $/g,'');
      return(id '-' title);
}

The “hiatus” is over

04 Feb 2008 #business #life #website #Work

Has it really been (well over) a year since I last posted a single thing on this weblog? It goes without saying that that is a crying shame. Woefully neglected is too soft a phrase to use when it comes to signifying how little I’ve done with joeloliveira.com in the past year and a half. This site turned into an abandoned wasteland – deserted and stagnant.

Why? It borders on cliche, and could probably be filed within the “cop out” category, but for me it begins and ends with my not having the energy or motivation to write for my own website when I got home from work. I probably could have written a paragraph or two while from work, but never felt that was fair to my employers. What about those hours outside of work? Surely there are moments I could steal past 5 or 6ish to write something? Absolutely! But then the question still remains -

What to write about? There are numerous topics I ponder in the course of a day but for months – no one single target subject. I’ve usually just posted whatever events I’ve attended, fun nights out with friends, stupid miscellanea found on the internet – nothing of consequence for the majority of folks on the internet. To my friends and family – of course I know it’s interesting to YOU, but to communicate over the internet in such a blanket manner feels a bit too detached.

What now? Well things have changed – drastically! A little over a month ago I left my job at Molecular, an internet consultancy. The company I’ve left to work for is a very small and fledgling little operation – my own company. After months of preparation, nerve-wracked second guessing and laying groundwork with hopes I could pull this off I actually did it. As difficult as it was to leave such a great group of people at Molecular and all the opportunity they’ve allowed me in the past three years I decided that it was the right time to make this next big step.

So far, so good. I’m excited. I am already engaged with a local ad agency helping them with a handful of their (immense) interactive clients. This site is going to evolve into my portfolio for anyone looking for a resource to bang out nice, clean, rich interfaces with XHTML, CSS, javascript, and other interesting and challenging web-based technologies.

To give you an idea as to what types of things I’m involved with – The past year and change I’ve actually been encouraging and helping Sara with [her own weblog][2]. Have I not told you about it yet? For shame! [Go visit and take a look][2] at the wonderful work she’s been doing. In addition to playing occasional tech-support and copy editor for Sara I’ve been putting in most spare hours working on my own project(s). Instead of writing about it – I’ve been trying to DO it. Think it’s difficult to post on a blog every day? Try doing it when you’re attempting to master new tools in addition to supporting the users who are helping drive your new project. It’s not easy.

The ultimate end-game will be to afford myself the time to work on those few previously mentioned projects that have grown over the past few years to something I’m hoping could blossom into something beyond “pet project” status. Once I’m a little more comfortable with their status I will post announcements here.

In the meantime, this site will very occasionally feature commentary on the things I find interesting about what’s going on in my industry, maybe some personal anecdotes, and hopefully some useful original content. Let’s just hope it’s not another 16 or 17 months until I write another post.