Bruno Miranda's Notebook

Personal Blog about Ruby on Rails, XHTML, CSS, and Design

I have attended FOWA for the past 2 years and can’t say enough good things about it. One of the major highlights for me was meeting and chatting with people like Gary Vaynerchuk, Kevin Rose, Jason Fried, and Kathy Sierra.

This years line up is incredible as well. Here are just a few: Alex Payne, Fred Wilson, Gary Vaynerchuk, John Resig, Molly Holzschlag, Steve Huffman and Tara Hunt. If there is one Tech conference you should not miss, FOWA Miami 2010 is it.

Checkout some of the photos I snapped at the event last year.

Space is limited and you definitely don’t want to miss this conference. Also this is your chance to come out and enjoy sunny Miami Beach.

I have long ago unsubscribed from Techcrunch’s RSS feeds. They were way too disturbing and the signal vs. noise ratio was ridiculously unbalanced. I do visit, however seldom the web site which usually reminds me immediately why I unsubscribed.

Almost every single post is a big pile of useless startup news. Here are some accurate examples:

  • [Company A] raised another [$$$] million.
  • [Blah Blah Bha] Crunchies
  • The rumors of [Company A] blah blah blah
  • [CrunchBase] woah woah woah

I mean give me a break, bring us something new, original, intriguing. Stop wasting your almost 4 million RSS subscriber’s time (imagine how much time that is daily).

Comments: 0 (view/add your own) Tags: (none)

Posted on December 23, 2009 at 10:53 PM

I used to have a very large collection of books and sold most of them before I purchased a Kindle. A few of them still remain and I would like to give them away.

If you would like to have any of these books shipped to you, please paypal $5 ($9 international) to bruno at bopia dot com to cover shipping costs, make sure to mention on the payment which book you would like and your shipping address.




Comments: (disabled) Tags: books

Posted on October 03, 2009 at 12:50 PM

Why do people start projects and don’t finish them? Why does something seem so much more fun when you first start doing it. Do we get that quickly jaded? Or is it just how humans are pre-programmed to operate?

Remember when you purchased your first car? You drove it around the block a couple times before you came home (I remember I almost got a speeding ticket on my first ride home). The point is that you were super excited about your newly acquired vehicle. The first weekend came around and you spend an entire morning washing it, vacuuming and waxing your new toy. A couple months went by and suddenly you lost interest. Washing the car became a chore, you no longer looked forward to driving it. You took the quickest route home, as the goal shifted from enjoying the ride to arriving at your final destination.

How did that happen? What changed so drastically that made you shift priorities? I don’t know exactly but I suspect it has to do with focusing on the outcome instead of the journey. Before you purchased the car, you spent a lot of time thinking about it, comparing prices, looking up reviews and pros & cons. All of these tasks kept you focused on the desired outcome. When the outcome was achieved, you quickly started losing focus and interest.

The same can be said for completing projects. You decide to refinish your kitchen table, you focus on the outcome: having a nicely re-stained table. You start building a new web application or a piece of desktop software, and your focus is on the final product. How nice it will be when your application is being used by 2,000 people. What you are gonna do with your time when you have hundreds of users purchasing your iPhone app for $2.99 a piece. There is great power in visualizing the outcome, as something to strive for but the focus should be on the journey. How are you going to start? How will you market it? When will you ship version one? Who will likely be your first customer? Focusing on the journey will hopefully keep you motivated the whole way.

Achieving small daily goals goes a long way towards renewing your energy. Starting is easy, because you focus on the end result. You tell your friends about a new idea, and it makes you feel like you have already started. You spend a ton of time selecting a name, and this part is fun, but in reality you are no closer than you were when you first began.

Next project you start, try to focus on the steps and daily goals necessary to achieve the outcome, instead of focusing on the end result.

It is easy to waste an entire day chatting online, IM, Email, you know the rest. Being succinct may allow you to get the point across more quickly and get on with your life. However people may mistake brevity for lack of interest and sometimes even confuse it with rudeness.

A typical online conversation tends to start off with a greeting followed by mutual exchange of small talk. Usually people ask you questions just because it is the norm, even thought they couldn’t care less about the answers. This is pointless and wastes time.

My days of over-productivity incentives are done. I am not advocating filling every second of your day with ultra-productive tasks, multi-tasking to the extreme to cross off hundreds of items from the almighty to-do list. I am talking about getting the small talk out of the way in order to allow focused time.

Why do we need the initial greeting? I can understand when you run into someone at the mall, you certainly don’t want to startle the person by walking up and them and completely skipping to the meat of the message without at least saying the usual ‘Hi’. But online is different. You are not going to be startle if the first message on a Skype window is: “Please resend the resume file”.

Why not just drop online chatting altogether? If you do, people will call more often, which is even more distracting. Not only that but people will email you asking you to get on IM. I find the combination of GTalk inside Gmail perfect, at intervals which I am checking email, I get to answer a few succinct chats online. On a schedule daily, I am on Skype for about two hours to iron out some work discussions. This has been working really well.

Sometimes it takes an extreme measure to change something, for better or worse.

I have reached my limit regarding time wasters. This rant is not about being productive, achieving the most amount of stuff in the least amount of time. This is about ‘less’.

Ridding life of things that create open loops in the brain, things that feed distractions. I have been dabbling with the idea that some of the goals I would like to achieve have been put on hold because of useless stuff I decide to spend my time on. Albeit usually fun, these sort of activities are not rewarding in the sense that I search for at this moment.

I cringe every time I hear people praise being busy, or proud themselves regarding their workaholic ways of living. Trust me I know the feeling, I used to answer: “Busy” to the commonly asked question of: “How are you?” - I now find that to be the absolute most ridiculous answer.

Achieving productivity to me at this point is more about effectiveness than efficiency. Someone who reads 10,000 emails a day can theoretically be highly efficient, but terribly ineffective. And that is just one example. Being busy is out of style, I want to bethe opposite of busy, which in my book is: focused.

How much can I really accomplish by focusing, one thing at a time?

Expending all my energy into a narrow channel with the expectancy of a pre-calculated outcome? That is my current question. I have touched on the subject on this blog before. How much time I find myself spending on “necessary” (notice the quotes) daily distractions such as RSS, E-mail, Twitter, IM; the total is exorbitant, upwards of 60% of the day.

Over the past couple years I have tried to achieve certain goals on a personal/professional level and feel that I have come short on certain ones. I will not blame online A.D.D for it all but I see it as a major contributing factor. For this reason I will be conduction an experiment for the entire month of September as such:

  • Time wasters such as RSS feeds are to be completely excluded.
  • I will excuse myself from IM and only use Skype at work and keep the conversations as succinct as humanly possibly.
  • Keep campfire usage to absolute minimum (I use campfire at work).
  • Twitter will be checked once in the morning when I wake up and before bed (This will give me a nice overview of each day).
  • Stick to reading fiction books which relax the mind.
  • Spend my 2 hour daily commute listening to fiction audio books or music which excite the brain and boost creativity.
  • Drastically limit the amount of email I send and limit email checking to once per day.
  • Disable ALL notifications (growl) to prevent distractions.
  • Keep non work related web surfing to a minimum.

I have chosen to take a relatively strict approach but have kept it realistic and achievable. The goal of this experiment is to track how much more I can achieve with distractions and time wasters turned off. I do realize this will be relatively difficult to measure as the ‘control’ is subjective. I will however have a very good gut feeling of my level of personal/professional accomplishments at the end of the month. Here is what I will be looking at:

  • Have I done more focused work and accomplished tangible results?
  • How do those results compare to the previous months?
  • How is my general mood towards work, software development?
  • How happy I feel on a general level? How does that compare to the previous months?
  • How easy has it been to stick to the information diet?
  • Have I achieved my clearly defined goals more quickly and with higher quality?

I will be putting the items above to the test by setting a clear path to action. One important thing to remember is to not force anything. If I don’t feel like doing something, I will simply not do it.

Comments: (disabled) Tags: efficiency, productivity

Posted on September 03, 2009 at 07:36 AM

I had the pleasure of attending and speaking at BizConf held in Amelia Island, Fernandina Beach. I have nothing but respect for those who worked so hard to organize such and incredible conference.

Hashrocket did an excellent job at organizing and bringing together so many talented people under the same roof. I remember at one point the audience was asked how many had published a book, almost half of the room lifted their hands, that’s something.

There were about 75 attendes and often four tracks. The talks were intimated and often became more like a very fun workshop where questions were welcomed and encouraged.

The location, hotel and food were absolutely stellar and the hallway conversation where superb. On the first morning I had the pleasure to have breakfast with Jerry Weinberg one of my personal heroes. Another highlight was being able to attend James Duncan Davidson’s workshop on photography where I learn a lot about both the technical and business aspects of the trade.

If you missed it this year make sure you signup early for next year. More Photos

We have a couple open positions at Hoodiny and I would like to share some detail here. Some require physical presence in our Miami Beach office, most of them don’t.

Web Developers

We are looking to hire 1 to 2 knowledgeable Rails developers to join our team. Remote is absolutely OK. The ideal candidate will love to debug and solve problems, be available to work from 10-6 EDT and follow through with everything he/she commits to complete.

QA Engineer/Support Developer

We are also looking for a QA engineer confortable with automated testing tools such as selenium, remote is also ok for this position. Knowledge of rspec/shoulda/cucumber is a plus.

Java Developers/Database Expert

We are searching for someone confortable with supporting legacy Java systems having also a handle on relational databases (MySQL and/or PostgreSQL preferred). Experience with Tomcat, PostgreSQL, Apache, SVN, XML/XSLT, HTML/JS is a plus. Once again a remote position is also perfectly acceptable.

User Acceptance Expert

We are also looking to hire a user acceptance expert to help us test and and troubleshoot our suite of applications. This position will require you to be in our Miami Beach office daily. The ideal candidate will show an extreme level of attention to details and excellent communication skills.

User Experience Web Designer

Lastly we are looking for a UI/UX expert to confortable with designing highly usable web applications. Proficient at developing clean HTML/CSS, HAML experience is a plus. This positions is also only for the Miami office.

Please contact me for more details bmiranda at hoodiny dot com

Comments: (disabled) Tags: hiring

Posted on August 25, 2009 at 01:53 PM

About a week ago I put together a micro project called NaPicIt. Weirdly enough it stands for Name that Picture.

While posting some pictures online I found it difficult to remember the name of certain locations to describe the image. A thought came to mind. Wouldn’t it be great if someone else could help me describe this picture?

You can login via Twitter oauth authentication, where you don’t actually have to provide your credentials to anyone but twitter. Once you upload your picture, others can describe it. Once at least two descriptions match it shows up on the site.

Not sure how far I will take this, but I thought it was an interesting idea and a neat way to play with Twitter’s oauth.

A friend of mine, Davis Cabral helped me with some of the oauth implementation.

It took me a while to come to terms with the high ticket price of Amazon’s electronic book reader, the Kindle 2.

After almost two weeks with the device I have to say I am extremely pleased with the purchase.

Purchasing and reading books on the Kindle is a blast. The books are often less expensive than regular paperback and hardcover books. You also get the instant gratification of reading it instantly.

One of my favorite features of the kindle is text-to-speech (enabled for most books). The Kindle 2 will read the book to you out loud. You can also plug in headphones or into your car’s auxiliary jack. This is useful for me specially as I drive a long way to work. I get to read a chapter of my favorite book before I leave the house, then when I get in the car it The Kindle continues to read while I drive. It is not narrated by a professional but read by a computer using a human voice (you do miss a bit of intonation and emphasis).

I also really enjoy that I can convert my collection of PDF books to the Kindle, either free of charge via the USB cord, or via Amazon’s Whispersync technology (nominal charge for the transfer applies). When you convert a PDF not made for the the kindle the table of contents or any no non justified text can occasionally look a bit funky.

Overall I am very pleased. Great battery life, easy to read and full featured. You can even search your favorite tech books.

Sidenote: Kindle books are better for the environment.

If you need to have your employee sitting at his cubicle daily to trust that he or she is accomplishing their job properly, you may have a bigger problem. Perhaps the issue here is hiring competent and trustworthy adults. When that is the case they rarely need to be babysat. Of course common sense plays a big part on this subject. If you are hiring an anesthesiologist, it is very unlikely he would be able to do his work remotely. Obviously he knew this going into school for the chosen profession. The same applies to any other professions restrained by virtue of the basic differences between atoms and bits.

This post has been a long time in the making. Perhaps not in the shape of words and sentences, but in my head. I spend about 2 hours per day in the car driving to and from work. I often use the time efficiently to make phone calls or to listen to an audiobook. Regardless of the actual activity at hand I am always expending brain cycles around a vast array of topics. Most recently one topic that aggravates any awaken neurons in my head related to outdated company policies. Allow me to elaborate.

Two distinct approaches came to mind. First, there are common excuses as to why remote workforce does not work. Secondly often simple misconceptions as to why it is simply not as effective. A common argumentative response I hear too often: “Well if you get to work from your front porch, so will John, and Mary, and Susan.” As I mentioned above, Susan, the office’s receptionist, may have a difficult time teleporting herself every time someone rings the doorbell; just guessing. Need I say more? Obviously if your physical presence is required in the office because your daily activities can’t be performed while removed from the building, stop reading right now.

Another interesting response I have heard in the past comes in the form of a question. “How will I know people are actually working if I can’t see them?” This is when transparency plays a huge part. If your technology department works inside a cave (cave mode), with no transparency into what they are accomplishing, it will become very difficult for the director/boss/manager/chief to know what is getting done. It starts with accountability. To me, a person is either accountable by nature or not. There is no in-between. Picking up the phone when your seven year old calls you from school is not being accountable. Accountability is about “following-through” with your commitments in a timely manner, attention to detail and proper communication with the involved parties. That may be very far from the dictionary definition but I am OK with that.

Transparency in the other hand is the responsibility of those in charge. Providing your department with an easy way and a clear channel into the current status/progress of a given project/task is imperative. This is by far one of the most important initiatives towards a decentralized office environment.

With the proper level of transparency it becomes very easy to measure effectiveness. You know you have that gut feeling about how effective a person is. At least to me, I can quickly tell if someone is slacking or performing fruitful work. Be honest with yourself. If you feel like subpar work is getting accomplished, approach the person, remotely or not, and have a one-to-one discussion.

I do see value of “face time”. In the past I have worked with teams where developers were 100% remote, 100% of the time. Water-cooler conversations in that case are held around the digital watercooler and online such as Campfire or daily phone call.

Meetings tend to be another topic most managers seem to bring up. How could I possible have a meeting with both collocated staff and remote staff? I will let a good friend of mine, and ex-coworker explain as he puts it best:

Twitter / Chris Saylor: First XP iteration meeting ...

http://twitter.com/cwsaylor/status/2804309361

Chris Saylor is the Director of Development at Todobebe. While working at Todobebe, we hired two very talented remote developers in Brazil (Roberto and Dante). The entire experience proved to be a great success. We had just adopted to conduct development in a more Agile manner. This experience goes to show that the proof is in the pudding, and hiring competent and committed people is more important that their physical location.

Employee will not be around to be appreciated/reprimanded. Sure they will. Just as a distance family member would when you want to wish them a happy birthday or collect the money he owns you. More often than not, email and phone conversations are more effective than in person meetings. You do have to be careful with this one. I tend to prefer to chat over phone or skype if the topic is even slightly off-topic. People tend to be slightly more bravado over email/chat than over voice.

I hear of the old days, when computers were as big as a house, and every time you placed a long distance phone call a mental clock ticked to remind you how expensive the call was. Fortunately for us, that is no longer the case.

There is a wealth of highly qualified resources out there, limiting yourself to a tiny local radius seems foolish and counterproductive. There are very few obstacles that can’t be dealt with. Communication barriers, time-zone differences and lack of physical presence are not enough to justify passing out on extremely talented team members.

Finally, if you do come to terms with your demons, here are a couple tips that will help you and your remote employees succeed:

Have a quiet home office. I can’t emphasize enough the importance of having a quiet place to work. Somewhere you can go, close the door and concentrate.This means you get to avoid interruptions that are commonplace in the traditional office space. Developers tend to take about 30-45 minutes to get in the zone, a simple co-worker interruption can knock them out of the zone. If this happens once an hour, you can literally lose an entire day. It has happened to me, I am sure it has happened to you as well. Arrive at the office, engage co-workers, help them with their questions and issues and by the time you realize it is six o’clock and it it’s time to go home.

Establish a stable schedule that includes at least 70% of shared core hours between remote and collocated staff. Make sure everybody is in the same virtual “room” and can be reached at all times.

Campfire is great for team collaboration chating. At Hoodiny, we have all of our tools posting regular status updates into our campfire room. The team’s standup is at 10:30am. Git commit notifications are posted into campfire. Deployments and Continuous Integration results are also automatically posted into the room. We use NewRelic’s RPM tool to track our application’s performance or potential abnormalities. Performance stats are brought up side-by-side and a list of current referrer links is posted into campfire so that we can keep track of daily patterns. At any point, company executives can access the campfire room and catch up on all the work that has been done, current status of the build, performance and analytics information. This works beautifully. Developers are only notified of new messages when someone mentions their names. The chat room’s log is persistance and it always there, if you are late, or happened to miss a day, you can always read the log. Periodically during the day at your own pace, you can pull up the chat room window and catch up on the team’s progress.

I could go on for days on personal experiences and my opinion about hiring the best regardless of where they are. I realize this is not one-size-fits-all but I hope to shed some light into the subject. In this global market, don’t limit yourself to your own backyard. Get out there and prosper.

Note: I wrote this about 2 years ago and forgot to publish it, it still applies.

While working on a client application I was faced with the challenge of storing recurring events.

The problem with recurrence is the database, linear sequential data is what the db is built for, recurrent events are not necessarily sequential. One might argue that they occur in order so therefore some sort of sequence exists. In my opinion that is both right and wrong.

Say for example you need to schedule and event that occurs today and reoccurs every week on the same week day at the same time for next 12 weeks. You could write a method to iterate through and save all instances of this event as recurring items in a table.

There are a couple of problems with that take. Let’s say you need not only to record the dates the events will happen on, but also the times. Suppose those date/time combinations also inforce “unicallity” scoped to a specific location, therefore not allowing other events to be scheduled for the same time/date. Say you have an event that happens every weekday at 1, 3, 4 and 7 o’clock for the next six months. You just added 500+ records to your database each to hold that date/time/location spot.

Iterating through those events later on, in order to sanely display them in a calendar format will be as much fun as poking yourself in the eye with a sharp #2 pencil. This method not only may cause your database to grow immensely unnecessarily, it may also cause you much headache and grief in the future when an recurring event is updated and/or deleted.

Martin Fowler has provided great insight into this issue. He introduced the idea of using temporal expressions for scheduling of recurring events.

Using temporal expressions to specify the recurrence of a recurrent event is a step in the right direction. The schedule needs to figure out if and which events happen on a given at a given time. A recurrence can be referred to as a schedule element. A schedule element is created for each event recurrence “with the ‘when’ part delegated to a temporal expression” [Fowler]. The temporal expression has an instance method to whether a date/time lies within the temporal expression. With that we can separate event matching from date/time matching.

I just got back a few days ago from an incredible vacation to London, France and Barcelona. It is though to adapt to the daily grind again.

One of the most predominant things I have noticed is how much time and attention I spend daily on online communication. Some will say “necessary evil”, or even include it in the “cost of doing business”, does that mean it is good?

Between Skype, Campfire, AIM and email roughly 70% of the day is consumed with communicating. Is it the message that is so complex? Or are we spending time going in circles in order to achieve a sense of self-fulfillment?

Let’s spend a few seconds thinking about a car factory assembly line. By virtue of the loud machinery, employees rarely communicate with each other. An unwelcome interruption on the factory floor could become life threatening. How much more are they accomplishing by concentrating on the task ahead instead of randomly attending to pop-us on each corner of a computer screen?

This post will come to it’s demise with no clear solution, I truly wish I had one. Other than: “Close all communication tools and get some work done” I draw a blank.

I wrote a small sinatra app this morning as proof of concept. The only function of the application at this time is to provide you a shorter link to a long URL.

http://s.bopia.com try it out.

The code can be found on github.

I love almost everything about Pivotal Tracker. The one issue I have with it is the upper right-hand corner navigation menu. In my honest opinion I think the labels as misleading.

My Profile - Pivotal Tracker

Here is how I would improve it:

pivotal_menu @ 100% (Layer 2, RGB/8)

The current “My Accounts” page contents should go under “My Account” which replaces “My Profile”

I always end up having to click around a couple times to get to the right place because to me the labels just don’t perfectly match their destinations.

Twitter / Maintenance

What could you possibly be doing now that the website you visit and hit refresh 40 times per minute is down for maintenance.

Use the time wisely to get some work done.

PS. Let me tweet that, o wait :-)

We have released the new Cyloop music platform built using Ruby on Rails. I have had the pleasure of working with the team at Hoodiny to build and deploy this great application.

The platform has been adopted by MSN Brazil and MSN Mexico for their default music channel, soon to be the default music channel for MSN Latin America, MSN US Latin and MSN Canada.

While being featured on the home page of MSN Brazil and MSN Mexico we witnesses a tremendous amount of traffic. We knew this was going to be the case which is why we spend a considerable amount of time pre release working on caching and optimizations.

One of my favorite features of the application is the ability to follow your friends and discover music based on what they are listening to, you can also follow you favorite bands. We are using a messaging queue platform called RabbitMQ to accomplish the queuing of activity (writes/reads). Another aspect of our caching strategy is heavy usage of Memcached coupled with warm-caching of the activity feeds which are currently being stored to flat files.

During the caching and optimization phase we implemented a separate messaging queue for emailing and image uploads, lots of rails page, action and fragment caching as well as strategic usage of rails metal and cache-money to enhance performance.

Many thanks to the entire team who worked on this application. The Hoodiny dev team (Scott, David, Steven, Rick, Ana), the Hashrocket team, and Jason Seifer for bringing his rails scaling insight to the table. Also many thanks to Engine Yard and all the excellent application support technicians who helped up configure our cluster.

More to come, thank you and may we see continued success.

In the preceding post I attempted to describe my gratitude and farewell thoughts.

I am glad to announce that as of Monday I will be joining Hoodiny Entertainment Group. This opportunity was extremely welcomed as I realized my readiness for the next challenge. I have met the development and executive team at Hoodiny on numerous occasions and am fully confident that we will continue to achieve great things together.

This opportunity happened a bit out of serendipity. As a good friend of mine once said:

“Life is about serendipity, be ready for it.”

I am anxious and excited about taking on this new journey and glad to have once again be given the chance to make a difference. Isn’t that what life is all about? There will be challenges, there will be failures, thankfully for from those same failures, greatness can be achieved.

Today is my last day at Todobebe. I have quickly realized how much I will miss the entire team. A team who kicked so much ass – and took so many names I would need an entire book to transcribe all accounts.

While at Todobebe I had the pleasure of working with extremely talented team players. People like Rich Cavanaugh who hired me and gave me a chance to shine. Chris Saylor who’s skills are, scary, to say the least. David Reckles, our CTO who taught me the importance of great communication and mitigation skills. Leslie Chavez who put up with a group of developers and became our official bucket of sunshine.

While at Todobebe I also had the opportunity to hire Roberto Soares and Dante Regis two of most capable and self-disciplined software developers I have ever met.

It is by no means a surprise that with such a team we achieved great things. From our adoption of Agile methodologies, thanks to Patrick Curtain, to amazingly effective development and superb software quality.

I appreciate the trust bestowed upon me by the entire executive team and would like to take this opportunity to once again thank Jeannette, Gillian, Cynthia, Michael, Allison, Cathy, Carol, Rogelio, Rick, Kevin, Damian, and everyone else, team member or vendor that I have ever dealt with while at Todobebe.

I would like to wish Todobebe continued success and to make known that I will be forever thankful and always just a phone call away.

I am pleased to introduce the new Facebook group about Agile methodologies such as Extreme Programming, SCRUM and lean.

Feel free to participate if the subject interests you and share with friends.

Thank you

Visit the Archives →