Generations

I have never felt the need to hide my feelings regarding people of generations different than mine. For instance, my parent’s generation seems to think that getting a job in a large company and spending the rest of my life building  a carreer inside it is THE BIG THING for me to do. They’re so obviously wrong, people with jobs in large companies NEVER get promoted these days, as new leadership talents are usually recruited from the market, not inside the company.

I didn’t have a lot of contact with what I believe to be the following generation to mine: the people born in the 90s that are just turning 15-20 and beginning their careers. Recently I was given the task to hire an intern, and finally made contact. Out of all sorts of people that showed up for the job, most of them fit into the 90s generation age-range, and also,  most of them didn’t really seem motivated for anything. They just wanted a job to fill in their college resume, or to earn some cash and fund their movie tickets / trips / whatevers.

I always felt there was a huge gap between generations, but never thought there was a formal study of the subject. Yesterday the oddest thing happened, I was sitting at a bakery eating, and was invited into some “event” that was happening upstairs by an elderly man. We had a short talk about cellphones before that happened, but before I knew I was abducted into a Herbalife event. No, I’m not selling you Herbalife (thank god), but it was one of the first times in my life that I ever heard the term “Baby Boomers”. After googling it today I found out that it’s the term used to describe my parent’s generation, and there I had it in Wikipedia, the whole categorization thing unfolded before my eyes.

I was discussing something(portuguese) about the younger generations with Serj before I knew this, and all of a sudden it got a lot clearer to me. I’m definetly picking up a copy of a couple books from these guys to learn more.

Also during my research I found out that the Boomers are having a hard time dealing with us, the Millenians, and our demands for better workplaces, less dressing rules, more influence, and working from wherever we feel like, as can be seen in this article, clearly written by someone who despises our generation. For the Baby Boomers who are afraid of the Millenians I have only one thing to say: PWNED. We will pwn your jobs, our carreer growth totally pwns yours, and our ideas WILL change the world instead of being afraid to change the Status-quo. We are the crazy ones.

The new MacBook

I got SO excited when I saw the new MacBook specs. The same LCD screen as the Air, a GeForce 9400M that runs WoW way better than the previous Intel X3100, etc. What more could anyone ask from a notebook computer?

How wrong was I though, to think they had kept all ports in the MacBook intact. They couldn’t, as they had to save the STUPID amount of $0.25 per unit not adding a Firewire port to it.

Why would someone use firewire you may ask. Well, if you ever looked at pro audio interfaces, you would’ve noticed that all the GOOD external ones are Firewire not USB, for a reason. It’s a latency critical situation, and USB is heavily CPU-dependant, while Firewire is a lot more discrete. Also a ton of digital video cameras out there used by pros and semi-pros have a firewire interface for fast video transfers from the camera to a computer. Because of $0.25 on a $1200 product apple has just gotten rid of both consumer bases.

Some people seem to believe that $0.25 savings on a million units sold would become some really big savings in the end, but to me, those are short-sighted people that can’t measure real profit. If you get, say, $400 profit for each unit sold, what the heck of a difference would it make if you got $400.25? You might end up saving up to a million in an year, but it’s not even 1% of your total profit, so WHY CARE to do it?

I owned a car made by General Motors only in Brazil named Celta. It was created from the ground up to be a very low cost car to compete with Fiat’s cheapest offering here, the Uno. Instead of improving their manufacturing processes or optimizing their supply chain, the car has seen SEVERAL stupid cost-cuts:

  • Only 1 light to indicate the Reverse Gear, every car has 2 of them and it costs a stupid $2 to add one
  • No sensor for door opening on the passenger’s door, meaning the internal light won’t light up when the door is open – Stupid $5 savings
  • No mirror on the passenger’s sunshield – Another stupid $5 savings
  • No lights on the luggage compartiment – At most $10 savings

It all ends up for less than $25 woth of savings on a product that costs $15.000. WHY BOTHER to take such stupid cost cutting measures when it impacts under 1% of your profits? WHY, OH WHY can’t anyone at GM, Apple or whatever other company doing that see the STUPID move they’re making in order to save an insignificant amount of money?

It might make sense at the company level at first when you think of large scale production – at least on the instant yearly savings figure – but NO sense at all on the customer level. It also doesn’t make ANY sense when you compare the increase in profit percentage caused by the cost cutting.

I was motivated to write this post after reading this one.

The joys of open source desktop software

It was a rainy Saturday night, I had nothing else to do and decided to update my copy of Kubuntu to 8.10 Intrepid. DOH! Although I was running KDE4 ever since it came out on Kubuntu 8.04, the update still broke onde hell of a lot of stuff. X wouldn’t even start, which had me reinstalling the nvidia drivers once more (done it like 8 times or so during the first days on Kubuntu), and one thing I couldn’t get to work for DAYS was the gtk-qt-engine thing that makes GTK apps look like QT apps.

This post is all about HOW to end the struggle against qtk-qt-engine for those suffering as I did. The answer is not simple, but it’s completely stupid once you get it.

1 – Fix your gtk RC file.

Edit ~/.gtkrc-2.0-kde and change the line

include "/usr/share/themes/Qt/gtk-2.0/gtkrc

for

include "/usr/share/themes/Qt4/gtk-2.0/gtkrc"

And the line

gtk-theme-name="Qt"

for

gtk-theme-name="Qt4"

2 – Install the libbonoboui2-0 package:

$ sudo apt-get install libbonoboui2-0

And that’s all you need.

I found out about the theme locations using dpkg -L gtk-qt-engine and the bonobo thing starting firefox from the console.

Now Firefox and Eclipse are looking PRETTY on KDE4, yay!

Apple Ads

There I was scrambling through youtube seeking ads from Apple’s Think Different campaign and I stumbled upon HAL! We all do agree he’s the scariest computer (apart from my development machine whenever I need to do something fast) ever to be featured on screens, and here’s what he has to say about Y2K:

The Rise of JavaScript

There’s been a lot of use of JavaScript lately as an actual scripting language, even outside the web arena. Everywhere from Report Engines to ESBs and server-side development, JavaScript has been gaining traction, especially through the use of Mozilla Rhino as a JavaScript runtime in Java apps, but also on other platforms.

That said, it’s almost common sense that the JavaScript engines running in most of today’s browsers are not enough for handling the rich web. Although there has been a move to shifting web application logic to the browser, the limitaitons of present day JavaScript implementations on browsers.

Google Chrome has come out of some itchy dusty place inside Google, and has generated tremendous amount of hype, reactions and has also shook the web industry on its roots. Everyone from the Consumer Joe to the SOA startup company CEO and the market analyst has an opinion on it, and for some weird reason, people think it’s Google’s largest statement against microsoft since they released Chrome the week later IE 8 was out. As my good friend Fernando Ribeiro says, people give Google too much credit.

All that said, people have also been trying SO hard to find out just HOW important is Chrome, and WHAT will it change. I’ve seen a lot of things regarding how its process model is innovative, or how the unified location bar has the Apple trademark “Just works” feeling, but one of the most interesting aspects of it is the brand new V8 JavaScript Engine.

V8 compiles JavaScript code rather than just interpret it, and tries to approach JavaScript as much as it can as a statically typed language for the sake of performance, and has a highly optimized garbage collector, which might be the cure for the endless hours chasing memory leaks in your JS apps. It might be soon to say anything, but I’d predict V8 will get embedded into a lot more applications and platforms than Rhino and will make JavaScript get as much hype as Python or Ruby are getting these days.

V8 is also making Chrome a truly viable alternative to MS Silverlight and Adobe Flex, both of which I truly despise for the lack of standardization and complete lack of innovation. Readers of this blog might recall my previous postings about JavaScript MVC and the movement to leave Server Side UIs for much more natural, correct Client-driven UIs. And I’m not alone at those predictions as well, so I invite you to read this article at SearchSOA.com and discuss.

Agile versus or plus SOA?

As a proponent of both Service Oriented Architecture and Agile methods, I’ve always cringed when I see anything that says “lock down your service interfaces early on”, “an enterprise wide analysis should be done to achieve a successful SOA implementation” yada yada.

I’ve read this book by Thomas Erl, and cringed over what he called the “Agile Approach” to SOA which would be have the BUFD analysis team doing the mammoth analysis thing but having a team building whatever services they are finished “analyzing” before they finish the “big picture”.  

But Thomas Erl is not alone, a handful of SOA so-called experts are in fact evangelists of the Big UpFront Design as can be seen, for one, in this article I recently got to read following links from the Oracle SOA community center.

After a simple google search on “Agile SOA” there seems not to be as much discussion as I thought I would see on the topic, and also there is little to none real world experience on using both together. That said, I found two very interesting articles on the subject at InfoQ, one inciting discussion on the topic with no answers at all, and one interview with a successful project that applied both.

All in all it seems that agilists are too busy waving about their Rails Web 2.0 web apps to think of integration other than RSS feeds and POX (Plain Old XML) APIs. Are they wrong you may ask me. I really don’t know. I like to think of SOA as the end of the term Application, switching to service providers. But that’s something for another post, or I’ll miss the point in this one.

Edit: another good article on the subject

Thinking Heads

Talking about inspiration, I need to share something with all of those who live around me.

We have all been through so much stuff in our lives. Love affairs we couldn’t get to work but can’t forget, scars buried so deep into our hearts that we just can’t let go of, Evil we’ve done for the people we love, etc.

Up to now, I’ve never been touched as much by something as I have been by Sergio “SERJ” Buss‘ latest record, Liquid Piece of Me. I have been following his career since around the time I started playing the guitar for real, and reading guitar magazines and the such. By then, he had a column in the guitar magazine I read – Cover Guitarra – and he has to be the wisest of all musicians I’ve came across.

While all other people in their columns wrote about some harmony theory, or physical aspect of guitar playing, Sergio semmed to always touch the “Ethereal” as I like to call them subjects. Things usually not spoken of such as where and how to get inspiration, why musicality should never be shadowed by technique, and why technique is also an important factor of being a musician. Serj worked as a sound engineer for Steve Vai, and seems to have made a part of himself the link Steve Vai seems to have with his soul.

I’ve heard most of his releases so far, and despite all the spirituality level he seems to have achieved, it still sounded like a guitar player. I mean it’s not that it is a bad thing, it’s just that guitar wailing per-se doesn’t really catch my attention as much as a good song does.

That is until I’ve heard Liquid Piece of Me. Serj has used a movie script from his own and wrote the songs in this record to this imaginary movie. It’s the best instrumental record i’ve heard since Vai’s Passion and Warfare, and that was released a LONG time ago. But saying only as much is an understatement.

Serj has managed to touch me with every single emotion he has put into this record, which from the artwork – a masterpiece artwork in fact – seems to be very much a portrait of his very soul. I’ve felt rage and despair when listening to A Rainha dos Condenados and Hostile, I’ve felt hope and happiness when listening to Time to Heal and everything in between throughout the record.

It’s as if all of a sudden,  music had gone into a whole new dimension and transcended just sound, it plays images in your head. It also can send shivers down your spine, or make you cry.

Kudos to Serj, keep up the good work, and as someone said, “Keep playing the right notes”. Your record inspires me to create new music, to excel at my work, and to keep on my personal quest of achieving perfection on everything I do. It seems I may be a Thinking Head after all. “Does he deserve to become one?”

Music

Taking a short break on the whole Software Engineering thing, I’ll be writing about music today.

For those who are not familiar with my musical side, I’ve been playing the guitar since 1995, can also play the bass (well sorta), and keyboards, which were my first instrument.

I’ve started out playing and listening to punk rock (just like every other kid I know that picked up an instrument mid-nineties), then my taste for music evolved into classic metal, like AC/DC, then into thrash metal like Metallica and Megadeth (BTW Death Magnetic, the new Metallica record will be out Sep 12th, it’s now official, w00t!), laster on into a plethora of Power Metal bands, mainly Angra, Helloween and Hammerfall, and lately into Progressive Metal such as Dream Theater and Evergrey. I’ve also flirted with Gothic Metal for a while such as Tristania and Theatre of Tragedy, and love modern sounding Hard Rock bands such as Dr. Sin and Sammy Hagar era Van Halen.

Nowadays I’m more open minded and listen to pretty much every type of rock I come across, but Therion and Dream Theater are still my favorites, alongside with Ritchie Kotzen and some special brazilian guy I’ll get into detail later named Sergio “SERJ” Buss.

I’ve been in 4 or 5 bands throughout my life as a musician. Apocalypse Warriors was the first, a thrash metal act in the vein of Metallica’s Master of Puppets era which later on grew into a more power metal oriented thing, but that shift actually caused it to break apart.

Later on came at around the same time SSC and Scimitar. Scimitar was a power metal band I formed with the former bass player in Apocalypse Warriors Edgar, and we had a couple songs started,  but eventually we broke up for some reason (check out the download links later on).

I was getting into Gothic Metal due to my girlfriend back in the day, currently my wife, being totally into the Goth scene as a whole and we also started Endless Shadow, the name that would stick with me forever. I guess, apart from SSC, Endless Shadow was the band I wrote the most for, and we had 1 music finished and 3 in progress, when we were about to have our first full rehearsal with the band consisting of me on the guitar and singing grunts, my wife Carol singing soft parts , her sister Marilia on the keyboard, a high school friend Rafael Candido (currently on Semblant) and a bass player we found over the internet named Eduardo. Carol got all touchy the day before the rehearsal, and didn’t show up in the day. The banded sort of ended right there.

SSC was something we put together for a holiday season to make fun out of Hard Rock, and it ended up sticking. We were a 4 man band, me, my good friend Bernardo from the primary school days, and Felipe and Leandro the rhythm guitar and drummer from Apocalypse Warriors. We kept on as a side project with SSC, creating songs collaboratively over the internet and on the occasional barbecue Bernardo put together in a regular basis. You can listen to SSC at last.fm

When Scimitar parted ways, me and Leandro still wanted to form a power metal band, so we paired up with one my greatest friends ever, Luis Hernan, and a singer they had in their post-Apocalypse Warriors band, Roberto (which now sings for Vitrea, more on that later) and started playing a few cover songs. We had a previous band member of theirs, Ingo, play the bass, and he is possibly that reason why this one effort didn’t work. We parted ways once more.

Under the name Dryden, we formed a new band again with Luis, me, Leandro and Roberto, but now to play Adult Oriented Hard Rock (AOR), or modern hard rock as I like to call it. Me and Luis wrote a couple songs (links in the downloads part of this post again) before Roberto stabbed me in the back and kicked me out of the band, with Leandro’s apparent consent. They called in the skillful guitarrist Marcus to replace me, and eventually kicked Luis out also. The songs me, Leandro and Luis came up with are available here to download as well.

Me, Leandro and a part time SSC member and high school friend Fabio teamed up for a couple songs of an unnamed project, that eventually came out as Shutdown. Also available here for download. Me and Leandro also worked a bit togeher on a couple demo songs for an instrumental album I was trying to start, most notably one that was composed in the night before the September 11th events, and humorously was named Sep11 before it even happened. It even had a tremolo dive bomb! haha. Not available for download though, the recording is gone. That was in 2001 by the time Dryden broke up and I parted ways with Leandro forever, thus breaking SSC also.

After trying to put my musical self together for a while I still haven’t gotten into another band, mostly due to marriage and fatherhood, but keep on producing new songs every now and then (or intros, I seem to be incapable of finishing songs by my own).

While my playing skills haven’t followed my musical taste evolution, I’ve kept on as an active composer although not being in a band for a good 5 years now. As a composer, I need things to inspire me to write songs, and nowadays with the married life stability, and work routine coming up, those things get harder to come across.

I’ve been taking guitar lessons from Breno Teixeira this year and I’ve only had formal teaching before back in the first year I picked up the instrument; it’s been an amazing experience. Breno is one of those guys you can instantly relate to, with a strong personality and bold opinions, just like me.

His record Ignited is available for download from his website, and as partial as I may seem, it rocks! If you thought guitar albums were always too glammy and happy, you gotta check out his work. It’s as good as instrumetal (instrumental metal) can get.

Coming up, Segio “SERJ” Buss and a massive shrine of inspiration

Downloads:

Unit Testing Patterns

Finally! Someone did it! I’ve seen one hell of a lot of books on the Unit Testing subject, and none of them seems to have an opinion on what good and bad tests are, nor they teach you exactly WHAT to test. I’ve figured out most of it on my own, still all the time I keep asking myself, what are other people doing?

Yes, I have read tests from open source projects, but those that already did it will agree with me that 9 out of 10 open source projects are too complex, and their code is badly written, or that’s the impression you get from outside.

Under Adisson-Wesley’s Martin Fowler signature series, xUnit Test Patterns has seen the light of day, and it is in my opinion the best book released so far on the subject. You may also want to check the book website which has a good deal of content.

Agile lessons from the real world (not software)

Wow, I just looked at the latest post and it dates back from June 24th! That’s what I get from slacking up on writing this blog. Anyway, on to the post’s subject.

I’ve spent the last week renovating my household. Had a makeover done at my lil boy’s bedroom, gave him one of the pieces that comprised my home office cabinet, painted both the office and his bedroom, and changed everything light related.

What does have to do with agile you may be asking yourself. Well, we’ve done this in two phases, one using agile methods and one not. Yes, my wife thinks I’m nuts for applying agile to a home rebuild, but still it has worked. And also it has exposed how bad non-iterative work can be.

Phase 1 consisted of moving the closet into the boy’s room. The original closet is made of 3 pieces, a 2 door cabinet, a corner cabinet with 1 door, and a 3 door cabinet. It was all custom made by a woodworker for us, so they were intended to be together from day 1. The part we wanted to move was the 3 door cabinet.

We went with a non iterative aproach and moved everything that was inside the closet to the living room inside of boxes, and unassembled the closet. Yes, we had our roadblocks, the lower part of the closed was attached by a glued piece of wood to the corner cabinet, and we only figured how it was done after we moved a 200 pound closet a bit further from the wall, which took us 1 hour to accomplish. It also took another huge amount of time to saw it off cos I don’t have an automatic saw.  Also the left side of the closet was a sheet of wood shared with the corner closet, and I had to buy some replacement wood board to fill in.

After one day worth of work, we had the closet reassembled, but we intended on painting it too, so the ceiling part was left off, as it was too close to the room’s ceiling and would “lock” the cabinet to the room.

So far so good, but what’s wrong with all that? We were NOT done. Yes, the closet was in place, the main task was done, but we didn’t do anything about whatever stuff we took out of the closet. That’s work in progress for you. According to lean/agile, work in progress is worse than no work, as you’ve already spent effort on it, but didn’t get any value.

Needless to say that stuff stayed in the living room for a week before we even touched it, and hell was installed. We had to send over the boy to my in-laws as there was too much of a mess, and our morale was down all the way because we could barely walk inside the house.

That’s when changing requirements set in. Wife decided we should also paint the home office, and the boy’s room, along with the closet moving. Instead of focusing of finishing the task we had already began, we started a brand new task, thinking the previous one was complete. That’s what I’m saying we did the non-agile way. We moved everything out of our son’s room and into the living room. TA-DA twice as much mess, but now we could paint it. We even moved and deassembled the closet, that was already assembled from the previous task, so we even had our previous work undone.

So we painted the room and, once again, didn’t move the stuff back in. The excuse for that was we had to paint the closet too, and paint would spill on his furniture. Obviously, that could’ve been avoided by just covering up his furniture, but we needed an excuse since getting the stuff back in was hard. Work in progress #2.

Then we went on and assembled the closet. Turns out it was harder this time, cos we had the new wood board, and also because it was unassembled twice already. We spent twice as much time assembling it than we previously had. And the painting session went on, and while we waited for the paint to dry, we didn’t catch up the slack, instead we focused on the current task. No refactoring.

Once it was all painted and dry, we moved the closet to its proper place and assembled the ceiling. Doors were also a pain, and it took us 4 hours, twice as much than expected. After everything was set into place, we once more didn’t move stuff back in. So we had 2 unfinished tasks, and one finished.

We still hadn’t realized the work in progress we had in hands, since we considered those tasks done, so we moved on to the next one, painting our home office. That’s when agile kicked in. Since we were on such a stress from all the mess we had created ourselves, I decided to hit the brakes and plan a bit at a time. No what-ifs, we just went with YAGNI (You Aren’t Gonna Need It).

What have we done different this time? Well a lot of stuff. We shifted from BDUF when for example taping walls. Instead of taping the whole room we just taped the wall we were painting at the moment. We also did first the task that required most of preparation (taping, scraping etc), painting the 3 walls that were gonna be white, and the floor-ceiling joint, and the ceiling. It also allowed us not to tape the other wall that was gonna be painted red, since it was gonna be painted anyway.

We also didn’t move ANY furniture out this way cos we could just mangle it out of the way, one wall at a time. It was only covered by a plastic sheet. So not only we had an easier job in hands, we also created less of an integration mess.  The painting was done in half the time it took us to paint the bedroom, since we didn’t have to be as careful with the other colour wall, and since we didn’t spend any time unassembling and moving around furniture.

After it was all said and done we had one big task ahead of us, get stuff out of the living room, and make it fit into the corner closet alone. Intead of just planning a lot ahead, we went one box at a time and started putting stuff into place iteratively. With every box that went down, another 2 were filled with stuff to donate or sell, and so we went with most of the boxes. An unexpected activity showed up, which would be selling and donating stuff.

I had my brother in-law assist my wife with the boxes while I went down to the stores and sold all the stuff, and to places where we donated toys, clothes and shoes. It was done in no time, and belive me, that was one tough job, to put everything back into place.

After spending 8 days with the house turned into one big mess, we finally had everything into place. We had a lot of fights out of the blue due to the stress our work in progress had generated, but we managed to solve it all through refactoring one box at a time.

Wife didn’t like the paint job too much, since she didn’t help with it, just let me and brother in-law do it. We had her check every coat of paint we did, but still she didn’t like the end result. Serves to show that if the project owner works along with the team, the sense of accomplishment will increase, and the results are more likely to please.

So to wrap it all up, here’s the lessons I learned:

  • Work in Progress is worse than no work at all. It only generates stress and doesn’t deliver value
  • Don’t plan too much, it’s gonna change anyway.
  • Don’t do anything ahead of time, It’s gonna change anyway.
  • Break up big tasks into small ones, and get them actually done
  • Don’t try to cover yourself up with excuses, face it.
  • When you have a big problem, iterate over it and solve it one piece at a time.
  • Have your customer involved and working on the project as much as possible, or you can end up with a sub-par piece of work.

That’s all for today, thanks for reading.