Be Careful With Europcar

During the last fifteen years I’ve being spending at least one week a year vacationing in France. Love this country for their culture, traditions, gourmet food, great wine, great skiing, and friendly people. Once in a while I rent a car and drive there visiting all these nice little villages and chateaux.

In January, I rented a car for 7 days from Europcar in France. The price was very decent: around 430 Euros for a good midsize car. The rent was prepaid in advance, but at the rental counter I was asked to provide them my credit card for accidentals, besides, I was warned that there will be small additional licensing/ecologic fees. I also asked the Europcar lady if I could purchase a GPS device, and she sold me one explaining that it’ll costs me 10 euro a day, but not more than 30 euros total. We got the small device and our trip exploring Provence begun. I’ve been also warned for additional 39 euros charge for the second driver.

After driving a couple of miles I noticed that our car has an excellent built-in GPS system. The first question was, “Why they sold us a second GPS device”? Three days into our journey we called Europcar asking not to charge us these 30 euros because the car was equipped with the GPS in the first place. They said, “We’ll see what we can do”.

The trip was over, Provence was great as expected, and, in about a month, I got a letter from Europcar stating that they charged my credit car for another 425 euros. The letter conveniently included the breakdown of the charges. I’ll just mention that ecology/licensing contributed only about 10% of that charge. They also charged me 70 euros for using the GPS for 7 days plus other fees.

Quick call to Europcar produced “Sorry, there is nothing we can do about the GPS charges”. Quick call to my credit card here in the US: “No problem, we’re opening the dispute with Eropcar. But first, we’ll refund you full amount.” God bless America! I said, “I’m not planning to dispute all the charges”, but for this particular credit card company was easier to dispute all amount so the vendor can start discussing details.

A week later, I’ve received two more letters from Eropcar notifying me that I made two traffic violations and my card was charged 25 euros for each one. I was never pulled over in France, but hey, there is no such thing as a saint driver. I might have been caught by one of the hidden video cameras while speeding or making an illegal turn. This happened to me in the past in the USA, but I’d always received a letter with camera photos showing my car in the midst of breaking the rules.
Europcar didn’t bother giving me any details other than date and time. The brief explanation reads “Fees following French authorities request for penalty process traffic rules violation. License plate, date, and time”.

I made another call to my credit card company disputing these 50 euros too. Let the conversation with Eropcar begin, and I’ll pay whatever I deserve to pay. But it seems that the dialog ain’t gonna happen. The new letter from Europcar simply states “Your credit house rejects our transaction” and if I’m not going to pay, the case goes to legal department and you’ll be placed “on the watch list which will prevent you from renting a car in all Europcar’s network”.

Oh well, I’ll wait until Europcar decides to talk to me explaining the validity of each and every charge. Meanwhile, I’ve placed them on the list of car rental companies to never rent from. I’m sending the link to this blog right to the service department of Europcar – if they want to talk, my phone number is on the record.

Backs

People take pictures of people. Saying “Cheese” or “Sex” immediately puts an artificial smile on the other person’s face. Taking photos of people from the front is so 19-th Century. You gotta be a professional photographer to make a realistic portrait.

Last summer, while walking to my workplace in Manhattan, I started to pay attention to the backs of people’s moving in the same direction. Most of the backs were boring, but sometimes, I saw a back that made me wonder what’s the face of this person looked like? Typically, the face was less interesting to watch than the back. So I decided taking pictures of selected backs without even bothering looking at their faces.

Check them out slowly. Don’t critique the quality of the photos – I’ve been using iPhone while walking. Just try to imagine how the front-ends of these people look like.

Thoughts While Watching Apple’s New iPad Presentation

I like Apple products. Our family of four owns nine of their devices. I’ll always respect Steve Jobs for being a visionary and improving our taste. And I’ve enjoyed his keynotes a lot.

Yesterday, I was watching Tim Cook’s presentation of the new iPad. I saw a gray-haired fit man in black moving on stage passionately talking about his company’s great products. The audience cheered him with applauds. It almost felt like watching Steve Jobs.

It’s clear that Tim Cook spent substantial time on improving his presentation skills and rehearsing his talk. Of course, he’s not as good as Steve Jobs just yet. He needed to add more drama to the talk and shouldn’t have revealed the iPad that soon. Of course, I missed that famous Steve’s “And one more thing…”

But overall, Tim Cook did great on stage. The company does great. As bad as it sounds, people will forget Steve Jobs soon. The crowd needs to be entertained and get fed with new cool toys. As long as Mr. Cook (and his team) will deliver, the crowd will admire him.

Le Roi est mort. Vive le Roi! The king’s dead. Long live the king!

Hiring Teams of Offshore Software Developers

Over the last five years one of my responsibilities was interviewing and hiring software developers and many of them were physically located overseas. In this post I’d like to share with you my thoughts (and get your feedback) on one of the aspects for offshore hiring: pros and cons of hiring individuals vs. teams.

Our company, has people located in the USA (East Cost) and Eastern Europe. We have a number of clients here in the USA, and some of our consultants work on sites. Sometimes a team of our developers works for the clients remotely. In some cases we provide not only a remote developers to augment the client’s team, but also a senior software architect and/or a manager too.
Our consultants works for us for years, we trust them, and they have a steady stream of work. But once in a while we have to quickly ramp up the team. For example, a new customer needs a team of five remote developers, and they need them now. We are a small software boutique and don’t have a long bench of people sitting without of work. So where to find talent quickly? In such cases we are facing the hiring dilemma:

a) we can contact to our long time partners – large offshore companies – and subcontract their developers.
b) we can start some serious interviewing process trying to pick the right talent in the open market of freelancers.

The first option is more expensive, but more preferable cause we worked with these partners for a while, the quality of their resources is typically higher, they are collocated in the same building, and the chances of losing a developer in the middle of the project are slim.

But in both cases we are getting offers to hire a team rather than individual developers. If you are looking for five developers, an offer to hire a team of five sounds very lucrative, but we never do this. Yes, having a group of people that already worked on several projects is great, but the skill-set and experience of each team member varies. But your offshore vendor charges a flat fee for each developer.

I always reject such offers. I want to interview each and every person from an existing team to make sure that I’m not getting a team of four C-players and one A-player. I’d rather work with five B-players than with one star with an entourage. This strategy allowed us to maintain a bit higher rates for our services.

Interestingly enough, our smaller size clients or startups understand the advantages of not having weak people in the vendor’s team, but thus is not the case with large corporate customers. They want to minimize the hourly rate. Period. The hiring manager won’t fight to get a particular vendor for more money just because they’re more experienced – this is not something you can easily measure. But the hourly rates are easy to compare. I remember a corporate manager who asked me, “Can’t you hire developers willing to work for a bowl of rice?” I can’t, and I won’t.

What’s your take on this? Does your firm has a list of approved vendors and you are forced to hire teams or are allowed to build them?

DI, This Special Design Pattern

Design patterns were not born equal. Some of them are boring, while others are special. Do you remember your feelings after learning what the Data Transfer Object is? Don’t remember? Of course – cause you didn’t have any special feelings about it other than “It’s easy”.

What do you say about Singleton? Yeah, this is kinda interesting pattern which gave you something to talk about. Do we really need it? Can’t we just achieve the same effect with static variables? Does it make your entire application tightly coupled? Lots to discuss and share your opinion in online forums.

How about Visitor? You must have remembered those feelings when you ran into it first time. The day when you understood how the Visitor pattern works was crucial in your career – that was the moment when you realized that you were not junior software developer anymore. From that very moment you can consider yourself a mid-level person. Till when? Till you’ll be able to explain the Visitor pattern to at least three juniors. Continuos Explanation (c) might reveal though that Visitor is not exactly what you originally thought it was, but now you really get it!

But there is one pattern that has a very strange effect on people. It’s called Dependency Injection. Decoupling in action! A Customer class doesn’t need to reach out for its Orders! How cool is that! First, it gets you high just like smoking banana peels. Then it makes you a little depressed when you realize that there is always a price to pay – instead of having two simple classes Customer and Order you need to have an Inversion of Control container and should neverforget to properly annotate the injector and injectee. In the server-side Java, containers are not too bad, really. We are used to them and feel pretty comfy inside.

But then, a senior Java developer starts learning other domain-specific programming languages like ActionScript or JavaScript just to realize that these poor people don’t have any IoC containers yet! Can you believe that? This is when the Java developer gets craving to make the lives of those (not as fortunate) ActionScript or JavaScript developers easier. In other words, such DI addict wants to share the needle with the rest of the world and inject, inject, inject… This results in proliferation of the “lightweight” DI frameworks/IoC containers among UI developers, which they should be using on top of whatever framework you currently use. This will overcomplicate the application design, but will allow you to inject Orders into Customers rather than using this so-nineties-getOrders().

Oh well, why did I poured all this on you? I don’t know. But please don’t try to tell this to people who enjoy living in thes IoC worlds or else they’ll become aggressive again and will make you feel stupid for not realizing that one can’t do a proper unit testing without the DI. Do we need unit testing? OK, OK….I won’t even go there.

Creating a Snapshot of the World With Google

Last week I published a blog about using Google for getting quick help with my English grammar. One of the readers recommended me a commercial program for that. Why would I pay for the software, if I could get the answer I need for free within 2 sec? Buying specialized software would make sense if I’d be just starting learning English. But in my case Google is all I need. Besides, I have a degree in applied math and trust the law of large numbers.

I’m sure Google has tons of non-traditional uses. Don’t forget that Google started from Larry Page’s attempts to rank Internet pages. He didn’t plan to create a search engine. So let’s think out of the box and come up with other unusual uses of Google.
Here’s what I can offer you today: let’s create today’s snapshot of your world with Google and the alphabet in your language. Here’s what you should do: just type each letter from your alphabet noting down each word that comes out first, second, and third. This is my result with the English alphabet:

A – Amazon.com, AOL, Apple
B – Best Buy, Bank of America, Blumingdales
C – Craigslist, Chase, CNN
D – Dictionary, Dominos, Delta
E – ESPN, eBay, Expedia
F – Facebook, fandango, Food Network
G – Google, Gmail, Google translate
H – Hotmail, Hulu, Home Depot
J – Jetblue, J.C.Penny, J. Crew
K – Kayak, Kohls, Kindle
L – LIRR, LinkedIn, Lord and Taylor
M – Mapquest, Macy’s, maps
N – Netflix, Nordstrom, nj transit
O – Old Navy, optonline.net, occupy wall street
P – Pandora, pinterest, Paypal
R – Redbox, rate my professor, restoration hardware
S – Skype, Staples, Sears
T – Target, translate, Toys’R’Us
U – USPS, UPS, Urban Dictionary
V – Verizon, Victoria Secret, Verizon FIOS
X – Xbox, X Factor, Xbox Live
Y – Youtube, Yahoo, Yahoo mail
Z – Zappos, Zara, Zillow

Interesting, isn’t it? Who would have though that Craiglist is more popular than CNN… I’ve been running this experiment sitting at home in New Jersey, USA. This explains some location-related results like LIRR (Long Island Rail Road) or NJ Transit. So your mileage may vary even within the USA.

Google performs serious processing of their log files to create their picture of the world, and they have a lot of more brain and computer power than I do. But hey, don’t you want to play a statistician too? It’s better than killing time with Sudoku or Bud Light, isn’t it?

If you decide to repeat this experiment with your language alphabet, please post the comment here telling where did you run it from and copy/paste your results. Don’t you worry that the readers of my blog may not understand Italian or Greek – Google Translate will convert your result into whatever language they like, well, almost any language.

Will HTML Force You to Lie?

OK, our company, Farata Systems has created this nice application using Adobe AIR, and our customers are happy. It’s not a simple CRUD though. We’ve implemented some cool stuff replacing tons of paper forms with PDF documents processing. PDF documents are being scanned, the OCR software processes them to automatically figure out what type of document is it to properly save it in a database. Customers’ checks are scanned, digital signatures are flying, reports are being created… All is integrated into one Adobe AIR application. No external Acrobat Reader, no nothing. I’m not saying that it’s not doing some traditional grid/form processing, but there is something to be proud of.

Yesterday, one perspective customer asked me if we have an HTML5 version of this application. I said, “We can create one for you”. The next moment I realized that I lied and added, “I mean, most of it can be turned into HTML/JavaScript, but some heavy duty stuff we’re doing now would be too expensive to re-create in HTML/JavaScript”.

I didn’t start questioning why they even wanted to do a pure HTML5 version. I know what the answer would be: “Everybody goes HTML5, we want it too, and we want it now”. You can’t piss against the wind. You shouldn’t attack windmills unless your name is Don Quixote.

In my 25+ years in IT I always stuck to one rule – give your customers an honest technical opinion, but if they decide to overrule it for whatever reason, do what they want. This strategy allows me sleep well at night knowing that I didn’t lie. I also know that I would have won more project bids if I wouldn’t stick to this rule.

After thinking of this yesterday’s conversation I felt like deja vu – it was happening in the past and will be happening all over again. I’ll be saying to our perspective customers something like this, “We can do it in HTML5/JavaScript, but it’s going to be a lot more expensive than if we’d in Adobe AIR”. But the next day a salesman from another consulting firm will meet with the same perspective client and, without thinking twice, will answer, “Yes sir, we can do it in HTML5 at the same or even lower cost. Promise.”. After that the salesman will give a strong handshake looking straight in the eye of a customer for about three seconds. They’ll win the bid… Said I loved you, but I lied.

Only six months later it’ll become obvious to everybody that the entire project budget is drained, because of “some unforeseeable technical difficulties”, and they’d need to substantially increase the budjet of this project. But hey, they’ll figure out something. And what do I get? I didn’t lose self respect and sleep well at night, which are not a bad things too, don’t you think?

Learning English with Google

English is my second language, but the last 20 years I live in the USA and my English is fluent. I almost never have to refer to a dictionary. But blogging and book writing forces me to look for help once in a while – readers (a.k.a. angry birds) are quick to point fingers if someone uses THEIR language improperly. I’m not talking about spelling errors – any text editor has a spell checker. I’m talking about phrases and, especially, articles – “a” vs “the” vs no articles at all, which is the most difficult part to comprehend. The funny thing is that most of the Americans raised and born here can’t explain WHY you should use “a” or “the” in this particular context. They just know what to use and do it.

If you are an ESL-person like myself, I’d like to share with you how Google helps me finding the right usage of the phrases much faster than any thesaurus. If I want to write a phrase, but am not sure which article to use, I do a Google search of each version of the phrase and see how many results come back. Important: you must put the phrase in quotes! This istructs Google to look for only those online documents that contain your words if they’re placed next to each other and in exactly the same sequence as in your search criteria.

Usually you can clearly see a big difference in result counts. Pick the version that majority uses and move on.
Oops! That majority uses or that THE majority uses? Google gives three thousand for the first version and 127 thousand for the second one. The right way is “that the majority uses”.

Let’s take another example. If you’re not sure what’s the right way to write “and the God made” or “and God made”. It’ll take you 5 seconds to find out that 16 million documents contain the second version of the phrase, and only 2 million the first one.

This method works for me almost all the time. But today I was not sure how to write – “the Eastern Europe” or “Eastern Europe”. I got 54M vs 134M. These two numbers were too close to each other, and I suspected that all occurences of the second phrase were accounted for in the results for the first phrase too. So I modified the criteria a little bit: “and the Eastern Europe” vs “and Eastern Europe”. I got 2 mil vs 90 mil. Now we’re talking! I’m sure Google has some special characters to specify more sophisticated search cases like the sentence must begin/end with the phrase in question or these option may exist in the Advanced Search panel, but we need it quick, and Google delivers!

There is another great side effect in using my method. Seeing that millions of people don’t know how to write correctly means that I’m not alone! So don’t even try to read this blog hoping to find language imperfections here. There are millions of people out there who’d made the same mistakes. Be positive and learn English any way you want!

Reading another funny document by Adobe

Today Adobe released another document that brought tears into my eyes. Why they think that people are dumb? Why not just say, “We couldn’t figure out how to monetize Flex and we’re getting rid of the ballast”? Adobe is a public company, and, beside developers they have investors and their stock went more than 10% up since last (infamous) November. They’ve chosen investors over developers. This is understandable, but why keep lying to developers?

Today’s doc contains lots of words, but the most important section is this:

Adobe runtime support of Flex

Flash Player 11.2 and Adobe AIR 3.2, which are anticipated to ship in the first quarter of 2012, will be tested
with applications built using Adobe Flex 4.6. Adobe will test future releases of Flash Player and AIR against the
Adobe Flex 4.6 SDK and maintain backwards compatibility for five years.

While Adobe will ensure that the Adobe Flex SDK 4.6 and prior will be supported in future versions of Flash
Player and AIR, it will be the responsibility of the Apache Flex Project to test future versions of the Apache Flex
SDK against released Adobe runtimes to ensure compatibility and proper functioning.

In the past, features were added to Flash Player and AIR specifically to support the needs of Flex applications.
Going forward, features will be added to the runtimes to support Adobe’s vision for the Flash Platform. The
Apache Flex Project may choose to take advantage of those features; however, new features will not be added
to the runtimes specifically to support the Apache project’s efforts.

Let me re-write it in plain English:”We’ll release the new version of Flash Player, and we ‘ll test our past versions of Flex against it. We love (kinda) Apache Flex, but we don’t give a shit about what these guys will come up with. Flash Player is OUR runtime, and you’d better make sure that your smart-ass next generation Flex works with it, or else… In the past, every  release of Flash Player would accommodate for the new features of Flex. From now on, ” We are not adding new features to Flash Player to support whatever you come up with”. Or as we say it in New York City, “Fuggeddaboudid.”

Keep reading Adobe’s doc. Their version states, “Flash Catalyst CS5.5 is the last release of Flash® Catalyst®“. BTW, why do they even add these ® signs to Catalyst? Anyone wants to reuse this lousy brand?  OK, maybe. Let me translate it into simplified Chinese: “It was stupid in the first place to work on such a tool, and we wasted two years of our Flex team re-writing the FLex Halo components into Spark architecture just to accomodate the need of this still born baby – Flash Catalyst” .

Keep reading – it’ll get even funnier: “Development of Flash Builder continues. Adobe plans to maintain support for Flex projects in updates to Flash Builder 4.x, including additional work to ensure Apache Flex based SDKs can work within Flash Builder“. This is what it means in Bengali language, “During six years we tried hard, but couldn’t create a stable and performant version of Flash Builder for our own Flex SDK. For some weird reason, Flex developers would spend half of their time waiting for Flash Builder’s workspace to finish rebuilding itself. Design mode never really worked for Spark components. We are off the hook now, yay! Noone would even expect us to fix this for some Apache product. Just use IntelliJ Idea, will you? ”

The only product that was not mentioned in this doc was LiveCycle Data Services. What’s the fate of this highly overpriced monster? Is it dead in the water? I don’t really care about this one. During the last six years I ran into one client who bought its licenses. On multiple ocasions I was trying to convey to Adobe that they should lower LCDS price, but they didn’t give a damn.

Adobe has inspired these T-shirts.  Still, it’s sad. I’m going to miss Adobe Max conferences. They knew how to put up great events, really.

Starting blogging on JavaScript and Ext JS

Our company, Farata Systems, started publishing a series of technical blogs on JavaScript and Ext JS framework at http://flexblog.faratasystems.com/. Since Farata Systems is not affiliated with Sencha, these materials will highlight both good and bad things (if any). Trust me on that.

I’ve started writing my blog on comparing JavaScript with more traditional (read O-O, strongly-typed, compiled, Java, ActionScript3) languages.

If you’re interested to jump start your Ext JS project, consider attending our hands-on 2-day workshop in New York City on April 19-20.

To get $100 off the enrollment fees, enter yakov as your promo code.