What Java and Zurich have in common

Last month, on my way home from my annual skiing vacation I spent a day in Zurich, Switzerland with may family and friends. This city is very nice and clean with well maintained buildings, large windows with watches, silver and gold, and people are well dressed and polite. This was during the day. But when on the evening we were walking along the central Banhofstrasse street to a famous place that sells long sausages, the street was empty. This was 7PM on Saturday! After dinner, my son with his friends decided to go to a night club. The hotel concierge said that there is not too many fun clubs in the city, but if they take a cab and go out of the city, there is a very popular place…

For some reason this reminded me of today “s Java, which is also a well established metropolis, with a multitude of different areas that are suitable to people with various tastes and needs. But hellip;if you take a cab hellip;there are some really fun places to be. And the names of these places are AJAX, Ruby, and Flex. Let ‘s not get into technical pros and cons of these three, but they are fun places to be. That “s for sure.

The Ruby crowd writes about happiness of programming. AJAX folks are routinely overcoming lots of challenges, but somehow enjoy the process anyway. Flex has a very live and vibrant online community, where almost each blog entry includes at least one occurrence of the word “Cool rdquo;. Are all these people faking orgasm? I doubt it.

After my recent talk at New York “s Java user group (this was about using Flex as a front end to Java), a guy from the audience stopped by and said, “This looks nice, but I can do all this in Java Swing rdquo;. He “s right, but how easy would it be? Do you enjoy the process of Java Swing programming? There is an old joke when a wife says to her husband, “My mother is dying, I know you did not like her that much, but it “s her last day, please do me a favor and kiss her. rdquo; The husband replied, “I “ll do it for you, but you should know that I “m not going to enjoy the funeral! rdquo;

The Java metropolis consists of three boroughs ndash; the Server Side (sounds like an Upper East Side), Mobile, and UI. The first two areas seem to be fine. Working with Java Swing for desktop applications is not fun, but if you have enough time and money, you can create solid enterprise applications. But this is not the case when it comes to Java applets, or in other words Rich Internet Applications (RIA).

To put it simple, the Web shines when you want to have seamless deployment. Initially it was just HTML, then JavaScript came in. These two exist ON ANY user ‘s PC, even though there are some issues with JavaScript incompatibility in different Web browsers.

Then Java was born with its concept of applets, which were the first rich Internet applications (remember the dancing Duke). But Java creators quickly decided that the development of the server side applications should be their strategic direction.

Up till now, Sun was not able to pull off an easy installation of a small footprint JVM on anyone “s client machine. This is where Flash Player shines. The fact that it exists on 98% of users PCs makes it pretty much equivalent of HTML or JavaScript when it comes to availability on the end-user machine. ITS ALREADY THERE. Do not get the right version of the Flash Player? One button click and 20 seconds later you got it. That ‘s why I believe that Flash Player is today “s best environment for rich Internet applications. Flash Player is a VM running compiled bytecode processed by JIT compiler.

Java is hopelessly lagging behind in the RIA field. Even Microsoft is giving up Windows-only approach with their WPF/E tool for RIA, where E stands for Everywhere. Today, they are behind Flash Player, but at least they are actively moving in this direction. Ironically, they are using competitor “s Flash Player to promote Vista as opposed to their own Windows Media Player.

But Java seems to be hopelessly losing in the RIA field. To the best of my knowledge, nothing exciting is cooking there. Yes, you can create a rich Internet application in Java, but if you take a cab hellip;

Free bagels

This morning I ‘ve purchase while orderig my morning coffee and a donut I ‘ve got goose bumbs. I almost forgot that there was some email exchange yesterday that tomorrow we ‘ll have free bagels! Once in a while corporations treat their employees with free bagels cookies, pizzas. Free food! What should I do? What if I won ‘t purchase my donut but by the time I get in the office all bagels will be gone? Too risky. I found a smart solution: I ‘ve purchased a small bag of cookies thinking to myself, “If the bagels will be still there, I ‘ll save my cookies for after lunch sugar crave. But if I ‘m late with bagels, I ‘ll drink my coffee with the cookies “. I am really smart, isn ‘t it?

I came to my office and sure enough the email with exact location of the bagels was there. But it was sent 40 minutes ago! My colleague walked in and said, “Did you see all these people walking around with bagels? “…I was drinking coffee with my cookies by this time.

Anyway, nothing works as good as free food. It ‘s the best perk ever. Forgret about the fact that any worker of this company can afford to buy anywhere from 3 to 12 thousand bagels a month. How cares, we want free bagels! The more the merrier! If someone will ask you, do you like the place you aork at? Yes I do, we have free bagels every week. If you need to make a multi-million deal, you invite a person for a dinner that costs $100 or less per person.

Do you know what place I enjoy the most? A good supermarket. I walk along the isles and add stuff to my shopping cart. I do not pay too much attention to prices. I fill rich. Do you know the major difference between people and animals? The latter eat when they are hungry.

Are you lucky enough to get treated with free bagels? Google employees should not reply.

PowerBuilder developer needs some direction

I ‘ve received a very well written email titled “PowerBuilder developer needs some direction “. Here ‘s what the author (let ‘s call him Joe) wrote:

Yakov, I have been a PB developer for the last 12 years. I ‘m hoping since you were a PB programmer awhile back that you can help me understand what the fuss is about with web development and/or point me in the right direction to better understand this. In the past few years, our department is doing less developing in PB and more focus is on developing web applications in Java. The applications are used within the company so there is no requirement to be able to access the applications from the internet. I also should mention that most of the business logic was in Oracle stored procedures and now the focus is on having the business logic in Java and using hibernate to talk to Oracle.

I usually thrive at learning new technology but I ‘m really having a hard time with convincing myself that this is the way to go. For me, PB is so much faster at building GUIs. It also made more sense to me to keep the business logic on the Oracle server so we wouldn ‘t have a network bottleneck issue. And dealing with only PB and stored procedures made maintaining the applications real easy. Now I have so many parts in applications like JSF, Spring, Hibernate, Java workflows, Log4J and XML configuration files that it ‘s not as simple to maintain these applications anymore. Also, since internet access is not required for these applications, I don ‘t understand why we have to go this route and make these applications so complex.

I ‘m hoping you can shed some light on this because I really need to get past this.

I swear, I did not change a word in this email. I want to shed some light, but I really do not know what to say – the author is absolutely right – it ‘s really hard to explain why majority of the business applications have to be so painfully difficult. I ‘ll probably repeat myself, but let me say it again,

Using Web technologies in enterprise development is abused. At least fifty percent of the Web applications in any given corporation could have remained Client-Server using PowerBuilder or Visual Basic as a front end.

Can anyone explain why all these HR applications has to be on the Web? Why your order management system is written in Java and requires developers that know Java, JSF, HTML, JavaScript, Spring, Hibernate, XML, XPath, XSLT, Shell scripting, JDBC, Servlets, JSP and a couple of other buzzwords? Any PowerBuilder or VB developer who knows SQL could have created such applications in half time for half money. Why hire expensive Java Swing gurus to display data in a simple datagrid? Why hire even more expensive AJAX gurus to achieve even half of the functionality that any mid-level PowerBuilder developer gets off the shelf with an excellent DataWindow control that I ‘ve been using more than ten years ago?

Why overcomplicate programming? Guys, 90% of corporate programmers do not need to be computer scientists. Unless you are working in the algorithmic trading modeling area or have to calculate a trajectory of an object moving in space, PowerBuilder or VB is more than enough! Having a MS in Applied Math, I have to admit that during the last 15 years I did not need to use even a bubble sort algorithm. If you know how to write nested if-statements and a little of SQL you should be able to write majority of the modern enterprise business applications. And business users will be much more happier than they are now with this pletora of technologies!

So what can I say to Joe? You have to learn Java and JSF and Spring and Hibernate to survive and feed your kids. They will proudly announce how dependency injection (also known as inversion of control) helps. I ‘ll tell you a secret – if you are doing PowerBuilder you already know all this – it ‘s just sending custom events to a non-visual user object with all the data that this object needs. But hush! We do not want to make all these gurus angry. You ‘d better read all these article of smart programmers who will explain you how to make your life easier wit their XYZ framework. Someone pushed you in the corner in the first place for no reason, and now they are happy to suggest you how to make your life “even easier ” than before.

All these technologies scared an average American away from CS majors, and friendly Indians are happy to help without having any idea why such superpower as AMERICA can not find people to program an Order Management System of a shipping company?

Joe, I ‘m sorry I can not give you any better explanation. Just surrender and learn all that they want you to know – you need to raise kids and take you wife to a nice one week vacation to Carribean. Just do not forget to put the Hibernate book into the garment bag right next to the swimming trunks and shades. They say writing Select lastName, firstName from customers is bad, and you need to create a Java class and an XML mapping to get the last and first name from a database table.

As one stand-up comedian recently said, “There is no difference between I ‘m sorry and I apologize unless you are attending a funeral “. PowerBuilder is dead, and I am really sorry.

Mac or PC, RIA with Adobe or Microsoft?

My Dell laptop is dying and I had to make a choice – which small screen laptop tp buy next. After having two issues with motherboards Dell is out, and I was choosing between Lenovo X60 (12 “) and MacBook Pro (13 “) with dual boot – OSX or Windows. As a professional enterprise developer I was inclined to stay with PC, and these couple of youtube videos have confirmed my decision – Wintel notebook.

But I ‘m still waiting till Lenovo will start shipping their notebooks with Windows Vista (today ‘s the first official Vista day). That ‘s why I decided to look at the Windows Vista home page . It shows a nice little presentation on Vista using…Flash Player from their rival Adobe. This is a clear indication that Flash Player is a de-facto standard when it comes to delivering multimedia. FLash Player ‘s ubiquity forced Microsoft bite the bullet and use it instead of their Windows Media Player.That ‘s why Adobe Flex and not WPF/E is a tool of choice for rich internet application development…at least for another couple of years.

Fortune Magazines list of 100 best companies

Fortune Magazine ‘s list of 100 best companies to work for. Who ‘s the number one?

Thake a guess…Three…Two…One…Google .

Check out this youtube video. I wonder who pays for this happiness? Let ‘s take a typical boring floor at a large corporation with a smelly carpet and a cafeteria that serves hamburgers and grills frozen Philly cheesestakes charging $5 for each. Say, a gross salary of an average employee in this boring place is $80K a year. This average employee here is… well an average person. I ‘ve heard that Google salaries are lower than you might expect. But their approach to HR is very smart. Say, thay pay a person $70K and use the remaining $10K to offer “free ” food, “free ” gym, and “free ” laundry and car wash, and most importantly, promotion of Google ‘s work culture. It ‘s smart, and they know how to do it right. If you noticed, one girl on this youtube video said that she likes to spend time at Google more than in her family…She hit the nail right on the head:

Google has built a place were lonely geeks having no personal lives can hang out

These are some sample interview questions if you want to apply for job there.

And this is a description of the intervewing with Google by one person, and here ‘s another one .

So where do you want to be – in your old boring cube making $80K or in a bright colorful place making $70K? If you are young, pick the latter.

Object-Oriented programming in ActionScript 3 vs Java

Several years ago I wrote an article on using abstract classses and interfaces in Java . Back than I was absolutely sure that writing object-oriented code is a must. These days, I ‘m using yet another language called ActionScript 3 (AS3), which supports all OOP paraphenalia plus has provisions for dynamic data types. This article illustrates my up to date vision of OOP with and without interfaces. OK, let ‘s go.

You know the drill: a language is called object-oriented if it supports inheritance, encapsulation and polymorphism. The first two notions can be easily defined:

bull; Inheritance allows you to design a class by deriving it from an existing one. This feature allows you to reuse existing code without doing copy and paste. AS3 provides the keyword extends for declaring class inheritance, for example:

package com.theriabook.oop{

public class Person {

var name:String;

}

}

package com.theriabook.oop{

public class Consultant extends Person{

var dailyRate:Number;

}

}

package com.theriabook.oop{

public class Employee extends Person{

var salary:Number;

}

}

Listing 1. The ancestor and two descendents

bull; Encapsulation is an ability to hide and protect data. AS3 has access level qualifiers such as public, private, protected and internal to control the access class variables and methods. In addition to a Java-like public, private, protected and package access levels, in AS3 you can also create namespaces that will give you yet another way of controlling access to properties and methods. However, if Java enforces object-oriented style of programming, this is not the case with AS3, because it “s based on the scripting language standard. Object-oriented purists may not like the next code snippet, but this is how HelloWorld program may look in AS3:

trace( “Hello, world “);

That “s it. No class declaration is required for such a simple program, and the debug function trace() can live its own class-independent life, as opposed to Java “s println() doubly-wrapped in the classes System and PrintStream. You can write your own functions, attach them to dynamic objects and pass them as parameters to other functions. AS3 supports regular inheritance chain as well as so-called prototype inheritance when you can add new properties to the class definitions, and they will be available to all instances of this class. Moreover, you can disable validation of the properties and methods during compilation by turning off “strict rdquo; mode. In Java, behind every object instance there is an entity of type Class. This is not an object itself, but it “s placed in memory by class loaders.

Program Design with Interfaces and Polymorphism

As in Java, AS3 interfaces are special entities that define the behavior (methods) that can be implemented by classes using the keyword implement. After explaining crucial for OOP interfaces, we “ll discuss how to write generic code even without their.

To illustrate how you can design AS3 programs with interfaces, let ‘s work on the following assignment:

A company has employees and consultants. Design classes to represent people working in this company. The classes may have the following methods: changeAddress, giveDayOff, increasePay. Promotion can mean giving one day off and raising the salary by a specified percentage. For employees, the method increasePay should raise the yearly salary and, for consultants, it should increase their hourly rate.

First, we “ll add all common methods that are applicable to both employees and consultants to the class Person.

package com.theriabook.oop {

public class Person {

var name:String;

public function changeAddress(address: String): String {

return “New address is ” + address;

}

private function giveDayOff(): String {

return “Class Person: Giving an extra a day off “;

}

}

}

Listing 2. The Ancestor class: Person

In the next step, we “ll add a new behavior that can be reused by multiple classes: an ability to increase the amount of a person “s paycheck. Let “s define an interface Payable:

package com.theriabook.oop

{

public interface Payable

{

function increasePay(percent:Number): String;

}

}

Listing 3. Interface Payable

More than one class can implement this interface:

package com.theriabook.oop

{

public class Employee extends Person implements Payable

{

public function increasePay(percent:Number):String {

// Employee-specific code goes here hellip;

return “Class Employee:Increasing the salary by “+ percent + “%\n “;

}

}

}

Listing 4. AS3 class Employee implementing Payable interface

package com.theriabook.oop

{

public class Consultant extends Person implements Payable {

public function increasePay(percent:Number): String{

// Consultant-specific code goes here hellip;

return “Class Consultant: Increasing the hourly rate by ” + percent + “%\n “;

}

}

}

Listing 5. Class Consultant implementing Payable

When the class Consultant declares that it implements interface Payable, it “promises rdquo; to provide implementation for all methods declared in this interface – in our case it “s just one method increasePay(). Why is it so important that the class will “keep the promise rdquo; and implement all interface “s methods? An interface is a description of some behavior(s). In our case the behavior Payable means existence of a method with the signature

boolean increasePay(int percent).

If any other class knows that Employee implements Payable, it can safely call any method declared in the Payable interface (see the interface example in class Promoter).

In Java, besides method declarations, interfaces can contain final static variables, but AS3 does not allow in interfaces anything but method declarations.

Interfaces is yet another workaround for the absence of multiple inheritance. A class can “t have two independent ancestors, but it can implement multiple interfaces, it just needs to implement all methods declared in all interfaces. One of the way to implement multiple ingeritance (we often use but do not recommend ndash; use at your own risk) is to use “include rdquo; statement with complete implementation in all classes implementing interface:

public class Consultant extends Person implements Payable {

include “payableImplementation.as rdquo;

}

public class Employee extends Person implements Payable {

include “payableImplementation.as rdquo;

}

For example, a class Consultant can be defined as follows:

class Consultant extends Person

implements Payable, Sueable { hellip;}

But if a program such as Promoter.mxml (see below) is interested only in Payable functions, it can cast the object only to those interfaces it intends to use, for example:

var emp:Employee = new Employee();

var con:Consultant = new Consultant();

var person1:Payable = emp as Payable;

var person2:Payable = con as Payable;

Now we “ll write a MXML program Promoter, which will use classes Employee and Consultant defined in the Listing 4 and 5. On the button click it “ll create an array with a mix of employees and consultants, iterate through this array and cast it to Payable interface, and then call the method increasePay() on each object in this collection.

lt;?xml version= “1.0 ” encoding= “utf-8 “? gt;

lt;mx:Application xmlns:mx= “http://www.adobe.com/2006/mxml ” layout= “absolute ” gt;

lt;mx:Label y= “10 ” text= “Inheritance, Interfaces and Polymorphysm ” width= “398 ” height= “35 ” fontWeight= “bold ” horizontalCenter= “-16 ” fontSize= “16 “/ gt;

lt;mx:Button x= “93 ” y= “66 ” label= “Increase Pay ” width= “172 ” fontSize= “16 ” click= “startPromoter() ” id= “starter “/ gt;

lt;mx:TextArea x= “26 ” y= “114 ” width= “312 ” height= “133 ” id= “output ” wordWrap= “true ” editable= “false ” borderStyle= “inset “/ gt;

lt;mx:Script gt;

lt;![CDATA[

import com.theriabook.oop.*;

function startPromoter():void{

output.text= “Starting global promotions…\n “;

var workers:Array = new Array();

workers.push(new Employee());

workers.push(new Consultant());

workers.push(new Employee());

workers.push(new Employee());

for(var i: int = 0; i lt; workers.length; i++) {

// Raise the compensation of every worker using Payable

// interface

var p: Payable = workers[i] as Payable;

output.text+= p.increasePay(5);

//p.giveDayOff(); would not work. Payable does not know

// about this function

}

output.text+= “Finished global promotions… “;

}

]] gt;

lt;/mx:Script gt;

lt;/mx:Application gt;

Listing 6. Promoter.mxml

The output of this program will look as follows:

The line p.increasePay(5); in the listing above may look a little confusing: how can we call a concrete method increasePay on a variable of an interface type? Actually we call a method on a concrete instance of the Employee or a Consultant object, but by casting this instance to the type Payable we are just letting the AVM know that we are only interested in methods which were declared in this particular interface.

bull; Polymorphism ndash; when you look at our Promoter from Listing 6, it looks like it calls the same method increasePay() on different types of objects, and it generates different output for each type. This is an example of polymorphic behavior.

In the real world, array workers would be populated from some external data source. For example, a program could get the person “s work status from the database and instantiate an appropriate concrete class. The loop in Promoter.mxml will remain the same even if we ‘ll add some other types of workers inherited from the class Person! For example, to add a new category of a worker – a foreign contractor, we “ll have to create a class ForeignContractor that implement the method increasePays and might be derived from the class Person. Our Promoter will keep casting all these objects to the type Payable during the run-time and call the method increasePay of the current object from the array.

Polymorphism allows you to avoid using switch or if statements with the type checking operator is. Below is a bad (non-polymorphic) alternative to our loop from Promoter.mxml that checks the type of the object and calls type-specific methods increaseSalary() and increaseRate() (assuming that these methods were defined):

for(var i: int = 0; i lt; workers.length; i++) {

var p: Person = workers[i] as Person;

if (p is Employee){

increaseSalary(5);

} else if (p is Consultant) {

increaseRate(5);

}

}

Listing 7. A bad practice example

You “d need to modify the code above each time you add a new worker type.

Polymorphism without interfaces

If this would be a Java article, I could have patted myself on the back for providing a decent example of polymorphism. But I ‘d like to step into a little bit dangerous territory: let “s think of a more generic approach ndash; do we even need to use interfaces to ensure that a particular object instance has a required function like increasePay? Of course not. Java has a powerful introspection and reflection mechanism, which allows to analyze which methods exist in the class in question. It “s important to remember though, that in Java object instances have only those methods that were defined in their classes (blueprints). This is not the case with AS3.

There is yet another urban myth that reflection is slow, and you should use it only if you have to. But this consideration is not valid for programs that run on the client “s PCs, because we do not have to worry about hundreds of threads competing for a slice of time of the same server “s CPU(s). Using reflection on the client is fine. Even on the server, a proper combining of reflection with caching allows avoiding any performance penalties.

AS3 provides very short and elegant syntax for introspection, and I “d like to spend some time illustrating polymorphism without typecasting and strict Java-style coding.

Let “s re-visit our sample application. Workers have pay and benefits and vacations, consultants have hourly pay. But retirees may have some other forms of receiving pension, board of directors might have pay with no benefits – are they workers? No they are not, and their objects may not necessarily implement Payable interface, which means that the typecasting from Listing 6 would cause a run-time exception.

How about raising the compensation of every Person even if it does not implement Payable? If one of these objects will sneak into the array of workers, simple casting to Payable show below will throw an exception

Payable p = Payable(workers[i]);

Let “s re-write the loop from Listing 6 as follows:

for(var i:uint = 0; i lt; workers.length; i++) {

var p:* = workers[i][ “increasePay “];

output.text+=p==undefined? rdquo;no luck rdquo;:p(5);

}

This short loop deserves explanations. First, we “ve declared a variable p of type *. Using an asterisk a bit more open than var p:Object; as it allows the variable p to have a special value of type undefined, which is used in the above code sample.

Let “s dissect the following line:

var p:* = worker[i][ “increasePay “];

It means, “Get a reference to the function increasePay() from the array element workers[i]. You may ask, why do you use brackets around the increasePay instead of the dot notation? The reason being that dot notation would ask the compiler to find and validate this function, while the brackets tell compiler not to worry about it: the program will take care of this little something inside the brackets during the runtime.

Basically, this single line above performs the introspection and gets a pointer to the function increasePay for the future execution in the next line:

output.text+=p ==undefined? rdquo;no luck “:p(5);

If this particular element of the workers array does not have increasePay defined (its class must be declared as dynamic), add “no luck rdquo; to the text field, otherwise execute this object “s version of increasePay passing the number five as its argument. The line above still has a potential problem if the class does not have the function increasePay, but has a property with the same name. The bulletproof version looks like this:

output.text+=!(p is Function)? “no luck “:p(6);

Let “s emphasize again: this method increasePay does not have be defined in any interface.

Java programmers would call this a wild anarchy. Of course, adhering to strict rules and contracts in Java leads to more predictable code and less surprises during the run-time. But modern Java moves toward dynamic scripting, added implicit typecasting, run-time exceptions, etc. Overuse of interfaces, private, protected and other “nice and clean object-oriented techniques rdquo; does not promote creative thinking of software developers. By the way, protected variables is another weird thing in OOP.

Now raise your hand if you are a Java programmer and after reading this article is thinking to yourself, “Hmm, may be ActionScript 3 is not too bad and I should take a look at it ? “. Now, stand up if you are thinking, “Java rules, the rest of programming languages sucks “. ActionScript 2 programmers can remain seated, but might want to reconsider the way they program.

Unusual Medical experiments on me

Last week I was on my annual skying vacation. I was a part of a large group of people who went to this resort. There were several medical doctors in our group, and one of them asked me at the dinner, “give me your hand “. She asked me to form an O-shape with my thumb and middle finger of one hand while the finger of my other hand was pointed at my heart. Then she tried to spread my O-fingers apart. I resisted and she was not able to do it. Then she said, you heart is healthy, now point at your lung, then liver and so on. An experiment was going on, and at some point, while pointing at one of my organs, whe was able to spread my fingers apart (to prevent stupid questions and joke, let me just say that this was an internal organ) . She said, “you ‘ve got some problems there. Now take a glass of beer in your other hand “. This time she also was able to tear my finges apart. She concluded that beer is not too good for me. With Jack Daniels my fingers were even weaker… I said, that most likely it ‘s happening because my fingers were tired and could not resist as strong as in the beginning of these tests. She responded, “OK, form the O and point at your heart again “. This time I also was able to keep my O together!

A number of people started screaming “me too, me too “, and she said to one lady not to eat apples, the other one should have removed oranges from her diet…

She explained that she ‘s practitioning a Japanese methodology called Bidigital O-ring (she ‘s licensed american MD), and using this method she successfully helps patients in diagnosys of the internal diseases and creating special diet using food supplements.

Other doctors from my our group remained sceptical and did not believe that this was a valid methodology. But it was really an interesting experiment.

Some useful Windows keyboard shortcuts

There is this Windows key right by the Ctrl on my keyboard. You may not know of some handy shortcuts with this button:

1. WindowsKey + R – Opens the Run command window

2. WindowsKey + L – Locks your desktop

3. WindowsKey + E – Opens Windows Explorer

4. WindowsKey + M – Minimizes all open windows

If you know of any other useful shortcuts, please share it with us.

My 15th anniversary in the USA

I have arrived to the USA on January 24, 1992. Today, I tried to recall things that seemed unusual, different or surprising. No comments, just the list. Each of these items deserves a separate blog, which I “ll write later. Anyway, let “s start.

– “How are you? rdquo; is not a question and you do not have to answer it.

– The usage of the phrase “You got it rdquo;

– You can improve any word by breaking it in the middle and inserting the word f..king there. The classical example from Pretty Woman is Cindef..kingrella.

– Kneeling buses ndash; disabled passengers are not second class citizens

– It “s very important to have good teeth.

– People can have different opinions and remain friends.

– The fact that you can buy speakers at WallMart for $10 does not mean that the speakers for $800 are good. There are also speakers for $8000 and for $80000.

– Computer programming is the best profession from the return on investment perspective. Six to twelve months of training can secure you $50K a year.

– If a patient is diagnosed with a terminal disease, he “ll be the first one to know about it, hot the relatives.

– Divorce for a man is extremely expensive.

– Too many lawyers per person.

– Having an American passport is not enough to prove your identity while applying for a renewal of a driver license.

– If you are driving a car and someone hits you from behind, it “s a good thing.

– Buy one get one free deals. If you buy what you don “t want, we “ll give you what you don “t need for free.

– If an interviewer asks you to evaluate your skills on the scale of 1 to 10, add 2-3 points ndash; the person who asks will subtract them anyway.

– If some one greets you with “How are you rdquo;, the only right answer is “Great rdquo;.

– If someone greets you with “What “s up? rdquo;, the only two right answers are “Nothing rdquo; or “Not much rdquo;.

– The word “friend rdquo; is not actually a friend. The “close friend rdquo; is a friend.

– You can “t and shouldn “t try to bribe the policeman that is about to write you a ticket.

– All toys are made in China.

– They call football soccer.

– In America, the English speaking country, you have to press 1 if you want to continue in English.

– American dream is not to buy a house, but to have money for downpayment for a house.

– These to block is a safe area to live, the next block is dangerous, and than it “s safe again.

– In December, you can see a Christmas tree next to Hanukah candles in every store ndash; business is business.

– Lots of people around the world do not like America because they want their country to be like America.

– If you want to turn a friend into an enemy, lend him money.

– People are the same in every country, but Americans are lucky to be born in the society and smart enough to maintain the society that is very close to the needs of a regular Joe.

– The best quote ever( by Henry Ford): “If you think you can do a thing or think you can ‘t do a thing, you ‘re right “.

I travel a lot and have seen places were I “d like to live for a year or so, but overall, the USA is the best country for me. What a country!