Thursday, July 3, 2008

Better Explained

This site is totally awesome. It's aim is to help you truly grok a topic - from Math to Business and even some programming stuff in between!

Check out this bit on demystifying the natural logarithm.

Tuesday, July 1, 2008

A note on being interviewed

I had a brief interview yesterday that was not what i expected it to be at all: i had one idea in my head before the interview, and left with a completely different one. The problem was that i didn't take it too seriously, the result being that i wasn't prepared enough.

The main crux of the interview was that i work alone - I don't have much experience working with teams and the tools that teams rely on to make their work possible. That's a pretty big negative for someone looking to put together a core team!

Another realization that i had is that people who work in teams, speak in a specific way. I suspect they think in a specific way too. The result is that it's easy to pick out the non-team guys from a mile away.

Is this a no-win situation? This is the part where it's important to know what you're all about, and what you want to get out of your career (and your life for that matter).

I recognize in myself that i have a series of weaknesses that would jeopardize future opportunities. The problem to date has been my complacency, my lack of self investigation. Without this inward inspection I've let some things slide because I'm in a pretty comfortable place and just haven't been hungry enough to scratch around in the dirt for a bit.

Going back to the interview with a new sense of self-awareness, i can quite comfortable argue that my lone ranger approach up until now has given me unique growth and my own tested opinion. And it's exactly this kind of experience that i can bring to a team - a solid test-driven set of practices that does not just follow in convention.

The point being, know what you're about. Recognize your weaknesses. Embrace them. See what lessons they have to teach. Consider what lesson they might still provide.

Monday, June 30, 2008

Tech4frica

When tech conferences are organized within a hop-skip range of where i live it always makes me feel warm and fuzzy feelings towards the organizers.

So far the speaker line up for Tech4frica looks pretty good and i'll definitely be attending.


Wednesday, June 11, 2008

Git in my eye

Okay, so Linus Torvalds has struck again as GIT gains more and more traction each day from GitHub to 37Signals.

I can no longer ignore this distributed manifestation and will start playing around with switching from svn to git on one of my own projects. In the mean time, a gift from our friendly neighbourhood backpackers.

Open source push email and calendar

Who needs MobileMe when there's an open source solution waiting to be lovingly integrated into your business - funambol

Update!!
Came across a neat alternative: PostPath

Tuesday, June 10, 2008

gem install mysql

Let's pretend you have installed mysql with yum on your fedora box, and you want to install the mysql gem so you can take advantage of it's c binding goodness.

With giddy excitement you bash away at the keyboard and run the following command:

gem install mysql

But wait, what's this? An error the likes of which would consume small children given the chance:

checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Fear not! For it probably doesn't know how to find you mysql_config file. Try something along the following lines:

sudo gem install mysql -- --with-mysql-config=/usr/lib/mysql/mysql_config

The location of mysql_config may vary depending on your system installation.

Tuesday, June 3, 2008

SELinux: PERMISSION DENIED!!!!

Doing a Rails app installation on Fedora Core 8, I kept getting "Permission Denied" errors.

I checked file permission, wept, begged and even went on a holy walk to try massage this problem into oblivion.

As it turns out, there's this dear little linux feature that came free of charge with my fedora installation: SELinux (Pronounced "seeeed-OF-eeviel"). This gem of a feature enforced security policies, which need to take your rails app's location into account, which you can do as follows:

chcon -R -t httpd_sys_content_t /path/to/your/app

Tuesday, May 27, 2008

Damn .svn to hell!

Every once in a while i need to destroy svn a project as a working copy.

find . -name .svn -exec rm -rf {} \;

or

find . -name .svn -print0 | xargs -0 rm -rf

Monday, May 12, 2008

Kaizen, Yoga and Ruby on Rails

Kaizen is the Japanese word for the concept (and practice) of continuous improvement. It is a philosophy by which one actively re-evaluates processes in all areas of life. These processes are changed and adjusted in ways which promote improvement and eliminate waste.

Kaizen requires some methodology through which evaluation is done - something like the scientific method. With a methodical approach, it is much easier to observe the affect of changes and respond to them appropriately.

Also worth mentioning, Kaizen is not only concerned with the end result, but the process by which the end is attained. It is a holistic philosophy that is concerned with the big picture.

What i find particularly interesting, is how this principal is also echoed within other disciplines, like yoga for instance.

The philosophy of yoga is a mind-body practice by which happiness is sought (in brief). The body is continuously taken to it's boundaries and incrementally pushed beyond. The mind follows and guides in this process, simultaneously being taken and pushed beyond it's boundaries. This duality in yoga is what makes it a holistic process that draws on all areas of life.

Yoga can very easily be understood to be continuous process of incremental improvement. The goal may be happiness (or continual bliss), but the process by which we reach that place is also important.

I do a lot of work with Ruby and Rails and cant help but attribute some of it's success with how well it echoes the precepts illustrated within kaizen and yoga. The whole agile software process of incremental changes and enhancement to crank out a product mirrors the previous philosophies well. The process by which the product is created is also made important. It is made joyful and it is made to easily flow from the developer and the business goals, by not wastefully overcomplicating the process with unnecessary syntax or configuration nightmares.

Rails tries to tackle it's problem domain holistically by providing tools that make development with it easier: templating, testing, code generation etc. Importantly, though, it is just a tool used by the person wielding it.

My belief is that the more complete a person's life and experience is, the more complete the solutions and processes are that this person is able to produce. To be as complete as possible for any one moment, the process by which that one moment is reached must be a process of continuous improvement and re-evaluation.

Wednesday, April 30, 2008

Being unique is bad for solving problems

If you feel that you are somehow unique (or special), chances are that you are going to miss a whole truck load of potential problems to solve and possibly exploit! The short and simple reason for this: you're not going to relate the problems you face on a daily basis to those of the masses.

I'm a software developer. My goal in life: remove pain, automate stuff and make life simpler. So, it stands to reason, when i come across a problem I also have an opportunity to remove pain, automate something or just generally make life a little easier.

If i recognize in myself that i am not unique, then my problems are probably being experienced by other people just like me. If i solve a problem for myself and extend the solution in such a way that it is also available to other people, then i'd say I'm also making something that people might be prepared to pay for, or at the very least talk about.

The logic follows simply: the less unique i am, the more common my problems. The greater the number of solutions i have to offer, the greater my chances of creating something that people are prepared to pay for.

So, in essence, it's all about attacking the common base and recognizing that my solutions could also be solutions for others.

Saturday, April 19, 2008

Be passionate about sharing

I love the idea of sharing. I'm not talking about just giving stuff away for free, I'm talking about enabling other people with the resources that you have at your disposal. This in return should come full circle to the benefit of the community as a whole.

In the software industry this translates to open source software, where anybody can submit changes and enhancements to some common code pool, and if the changes are beneficial, it benefits all the members of that particular community. But, how does this idea translate to the real world, and what stands in the way of this kind of sharing?

Not much, i think. This morning i had a look at something called CoWorking. The basic idea is that some party provides a space that is used as an office by a number of freelancers and independents. The resources they share include things like photocopiers, internet connections etc etc.

What i find particularly remarkable about this kind of setup, is how this micro community stands to benefit from this kind of network: not only are physical resources made available to the members, but also joint venture opportunities and exposure to other professionals that might not have existed otherwise.

Also worth mentioning, is the benefit of culture. In this kind of setup it would emerge quite naturally based on the composition of the group members, and not as a result of some decreed 50 page document passed down from above. Culture in this case, is a best fit and not a one size must fit all.

For the most to come from a community you need members to actively contribute. In the case of sharing an office the most obvious contribution is that of paying rent. The less obvious contribution is that of enabling the people you share the space with to be able to pay the rent. This for me is the underpinning requirement of sharing effectively and the long term survival of the community: the benefits enjoyed by individuals, must be to the benefit of the community.

So, to close: enable those around you, benefit from those around you and be passionate about sharing.

Monday, January 14, 2008

Hello again

The time is ripe (once more) for me to fling myself into the arms of my most fickle lover and pour myself into the minds of the reader.

I'll be posting often. It'll be on a variety of topics. I'll also be asking for your help from time to time (often, in fact, and on a variety of topics).

I'm also in search of a new hobby. I write code for work, and I write code for fun. Recently this has become a bit of a problem. I need something to reset my brain and stimulate my soul. So, if you have any suggestions, I'm all ears!