Sweet Tamarindo


Sweet Tamarindo - A great place to eat

If you are ever in Panama and in the road happen to pass Penonome City, please stop by Sweet Tamarindo, one of the nicest restaurants in Panama.

The location is a little hard to get to. We found it by mistake once with my brother and our respective wives while looking for a place for coffee. My brother joked we wouldn’t a decent place. Then out of the blue we found this distinctive old house redecorated fusion style.

The food is based around fish and seafood with Panama taste and modernized versions. The desserts are awesome, and if instead of lunch you want to do coffee, its outside patio is the place to be in the afternoons.

A great place to dine!


I dream of code…


I am not sure if it’s me, but last night I couldn’t sleep, as I was dreaming on code…

It might sound strange, but I dream of code.

I spent the weekend working on my web accounting application. It began as an alternative for my father’s roof workshop. A place where he could gather data and I could inspect it from my office or while away from the office, seating lonely in the Caracas Embassy Suites. My job keeps me traveling sometimes. And as I juggle my company’s finance strategy, I would periodically check if my dad had overspent in things like hammers, zinc sheets or imperlastic (gluey stuff that keeps your roof from leaking…)

But then the program grew. It was massive. It was beautiful. It had careful controls and meticulous use of Ruby syntax. As my abilities with Rails developed, so did the code, taking on new proportions. Relationships in the model grew, from has_many to has_many_through. Controllers multiplied. Helpers methods came to the scene, and very soon I was using every tag_as possible helper and plugin.

And then last night, I started dreaming in code…

I was trying to sleep, but in my dreams I kept highlighting some obscure labels for a form with titles in bold brackets (you know, those funky brackets…)

Then I had a wonderful idea for a new relationship model that would accelerate my queries. I can’t remember which it was or what was it about. But in my dream, I was busy typing in Komodo Edit (the free version!) the solution to my problems.

And I got no rest last night. Most of my hours sleeping involved decorating tables, creating new reports, or trying to get my PDF generated reports to work…

This is not the first time. It happened years ago when I went back to college to learn Java. I would dream of objects, classes, encapsulations and such. In my dreams, I would type away at Eclipse building classes to resolve retail marketing programs, such as maximizing profit per square feet alternating product assortments…

Yes, dreaming of Ruby code is more efficient and sintactically less stressing than Java code. And the constructions are also more beautiful.

Some would say you dream on Ruby code, but Java code is more like a nightmare…


Working with constraints and Perl!


Camel PerlAbout two days ago my good friend Chamo calls me. I did his website, which he never paid for, but I really like him because he is the kind of friend that never calls, but is there for me if I have an emergency or something. A very loyal guy.

So Chamo tells me:


         – I got this thing going on with the bank. They’ll allow me to sell on-line, and get all kind of credit card advantages and fees. But I need to present my website with on-line features ready for Monday.

         – Monday! Today is Tuesday! I can’t make an online kiosk in 4 days! For God’s sake Chamo, you are killing me!


There is no use complaining. I know the guys at the bank have it all set up for Monday. I know I like Chamo enough to give it a try. And I know I need to finish this dreaded PowerPoint for my contact in Nike (my regular job…), which I hate. That is adequate reasons for me to start working immediately.


So, let’s talk about constraints. The guys at 37signals say we should embrace constraints. And I happen to admire them, a lot. But maybe I was up against the wall here. I host Chamos’ website in Yahoo! Small Business. They allow Perl and PHP, and I knew neither. Actually, I have a book on Perl which I read but never quite got the grasp of Perl. Besides, I like Python and Ruby, so I though I was safe.

No, not safe. I think most providers of web hosting let you use Perl or PHP, at least the ones in Yahoo and Panama.

I don’t want to be boring, but I decided to look for an open source Perl shopping cart, since I liked Perl better simply because I knew that variables started with my $var, and I knew what $, @ and % meant. And that is 300% more Perl knowledge than PHP, which I know nothing about.

 I was lucky – very lucky – to download closedShop. This is a solution for a free shopping cart that is easy to install, maintain and customize. It uses Perl and mySQL to provide a full featured online e-commerce solution that is free.

The author is Chris Fleizach who I think works as a Peace Corp in Tonga. Just for general information, closedShop v2.2 was released February 26th 2006. It has many bug fixes and some useful features, like much more robust shipping. It’s worth the download and install (or upgrade).  

The documentation is scarce, but it’s a free tool, so I should not complain. I downloaded the zip file, unzipped, and installed it in my cgi-bin folder. The rest was as simple as running the Install.pl program from my website. The program installed flawlessly in minutes. You need access to a MySql database. I created one previously without any tables and let closedShop do the rest, creating all the necessary tables.  

closedShop is simple. The Admin.pl program lets you update product categories and items, including descriptions and prices. Customers buy by using the Cart.pl module. The shopping cart is sort of simple, but since the program is open source, you can get dirty and change the code for more sophisticated tables and views. Choosing categories list products, which you can then click on for a close-up view and add to your cart. 

The program is for companies that sell on-line without on-line credit card transaction (which is 90% of all companies in Central America by the way, only the biggest ones have sophisticated on-line transaction modules).

Orders can be reviewed and processed with the use of the Admin tool. The program emits sales reports, send customer e-mails when their orders were process, and shipment tracking is possible if you activate the right modules.  

The case in point here is that I can’t get out of my state of bliss here. The shopping cart is working, fully, 100% operational today (Thursday in Panama as I write this). We ran the test yesterday, and it’s amazing how well everything works. The code lets you customize header and footer files in HTML to add you own navigation buttons and logos.  

Again, I never programmed in Perl, not even “Hello World!” I picked it up by looking at the code and identifying the URL posts. I am now making a Spanish version, and I am even planning on learning Perl!

So working with constraints does work? I spend more time deciding the type of CSS to use in a Rails report than what took to get this project done. Nice? No, it’s butt ugly. Functional? Incredibly so, easy and simple. No fancy screens, no fancy Javascript, just a simple shopping cart to get you started and going. And that was all Chamo needed. Not to mention he will probably ignore the invoice for my two days of work… 

Project Euler


Project Euler

I am kind of attached now to Project Euler. I am not sure how I discovered this great website, but I did, and I am glad it happened.

Project Euler is a website where there are 158 mathematical problems just waiting to be solved. The problems could be solved with a pencil and paper, but they are much more fun if you program something (code, for example) to quickly solve them. You code and test your answer by inputing the solution (usually a number). In case you are wrong, you can keep trying. But if you are right, not only does your ranking go up, but you get access to a forum on all problems you got right.

Maybe the latter sounds funny. Why get access to the forum once you solved the problem? Much a la Linux, I think it makes you go research your topic and think of a good algorithm versus just cheat. I know I had to do my fare amount of research on Pythagorean triplets!

I like this website for two reasons.  The first one is that all the coding involves a mathematical solution. Seldom do you have to code features alien to the problem. I can only think of once when I did some off-topic coding to feed a matrix into a Python list ADT. The second reason is the plethora of other languages you can learn about in the forums. I had no idea what Haskell o J looked like, or that some people still make math solutions… in assembler!

Take a peek and try one problem. I guarantee you will be satisfied you did. Prime factors considered and all 🙂

Latin Mediocre Again…


Copa Airlines

A long time ago, so long we did not have blogs back then but used instead normal web pages in Geocities, my friend Matthew and I coined a term: Latin Mediocre. The term referred to the sad Latin philosophy of doing whatever had to be done with a 50% mentality and as little resources, quality and passion as possible. I wrote many articles on testimonies of Latin Mediocre with hopes that someone somewhere was reading and maybe thinking about ways to improve.

My last three flights (two to Caracas, Venezuela, and one interim to
Bogota, Colombia) sadly are proof that Latin Mediocre has become chronic, and that people strive their best during flights to bring out their worst behavior.

Now, I wish this would only be true for Latin people. But a new thesis come to mind, since in my last trip, a group of Asians clearly showed that lack of manners and education is now a global affair. I thought about expanding the Latin Mediocre thesis further, but decided that more proof needs to be forthcoming for globalization of stupidity.

Let me explain myself.

It all starts at the counter, a place where people ignore the IATA display where it politely reminds people that they should check their bags. It even has a metal frame where you can test in your carry-on fits inside or should be checked as luggage. Instead, people use their best faces to tell the nice lady in the counter that they have no baggage to check, despite the fact they are carrying two additional bags, heavy enough to cause a bad case of back pain and probably hurt a disc or two once in a while.

The case in point becomes more annoying when these same people try to board the plane. They are the same ones who can barely walk because of their heavy burden, who stop by your seat, decide unilaterally your small laptop case in the overhead bin simply does not belong there, and take it out to install their bags. Most of the time this involves pushing, shoving, cursing, and such, as the bag is just too big to fit inside.

The person in point will probably ignore the poor soul whose 3,000 dollar laptop is probably being crushed under the weight of the bags. The worst happens when flight attendants demand to know whose laptop bag is it, remove yours, and put the gentleman’s bag instead. This happened to me, and I had a tough time asking the attendant why was he accommodating my laptop over my seat, and helping someone who was supposed to check their bag in the first place. I travel often, sometimes three times a month, and these are trips to foreign countries, so my travel status usually affords me some voice. Yet nine out of ten I have to struggle with these happenings.

Another good sign of civilization loosing its grip is boarding time. As soon as the lady begins to talk over the microphone, people will form a line similar in despair to the hungry folks in
Africa making one to receive some corn or flour. Since most of them have tons of baggage with them, things can get ugly. Is the plane supposed to be boarded numerically? Forget about it. When 99% of the travelers rebel, it is impossible for the steward to put some order. Neither have politicians and sociologist in two hundred years…

Next is the traveler who has the need to push, spread their legs and elbows beyond their space, and act annoyingly. These tend to be older, broader, and particularly ugly men. If questioned, they tend to pretend they are asleep to avoid any signs of life.

Yet, the worst case is landing. People will do all kind of scary things in landings. People will get up, despite the fact the plane has touched downs only seconds ago. People will ignore the “fasten your seatbelt” sign. They will turn on their cell phones immediately, and get their gear as soon as possible. People will drop their heavy bags, whose weight attraction in normal gravity conditions can not be deterred by your normal traveler unless he or she happens to be the next weight lifting champion, on other people’s heads or bodies. They will do it while looking around annoyed, as if all the other persons should not be in the plane, or even exist. People will form lines ramming into one another in spite of the fact the door is not opened, and it will not open for the next fifteen minutes. People will keep standing in the small space between seats, crushing, pushing, acting as rudely and uneducated as possible. And all for the chance to get off the plane two minutes earlier than a normal soul who is sitting calmly waiting for their turn…

The behavior is uniform regardless of social extraction or class. It happens in coach and it happens in first class. Business class persons will cram their overhead bins with as many bags as possible. Coach and first class travelers will fight for a chance to be the first one in the door of the plane; even if that means standing idly in front of the flight attendance until the airport crew actually opens the door.

I had stopped flying for sometime, and had this naïve idea that one year was enough for some people to acquire some manners and make air travel a better experience. Sadly, thing are going in reverse, and manners are a forgotten thing of the past, replaced by all kinds of rude behavior and mediocre egoism to be the first one in and out of the plane, regardless of bruises, shoves, of despicable behavior.