Showing posts with label personal opinion. Show all posts
Showing posts with label personal opinion. Show all posts

Browsers Add-ons

0 comments

WOT

WOT gives warning whenever we are about to enter websites with bad reputations, rated by the community. WOT categorises those bad websites as either: scam, phishing, adult content, illegal, Malwares/viruses. 


Adblock

I totally understand that ads is a way to gain traffic and customers. But I sincerely prefer to not have flashy adult site ads, or promotions that actually requires you to do sacrifice for them before they will give you a piece of cake. So go ahead and install this Adblock add-on.


Google Translate

This is especially useful for someone who is living in a foreign country. You might be thinking that English is an international language and most websites must have the option for English. This is partially true because some websites are not multi-lingual and even if they do, some of the times it sucks. Here it is: for Firefox, and for Chrome.

XPath Helper

It might be out of topic, but I found this useful for web application development. XPath Helper also gives a console where we can test Xpath command, and it also displays HTML element inspect and another couple of useful things.



VOIP with Skype from a Local phone

0 comments

If you are someone living far from family and being lazy to buy telephone cards, perhaps you are like me too, to end up using Skype for calling home. And then if you think 3G connection is not good enough to make phone call, then perhaps you have already known that Skype offered a VOIP feature.

So I've just recently tried the 'Call To Go' feature from Skype. Long story short, this feature makes it available to set up our own private VOIP number specified for our favorite contacts. And then to call that person we just need to dial the private VOIP number from a telephone. The VOIP number will appear as a local toll-free number. Other than that as a bonus, you do not have to get online in Skype in order to make a phone call.

The pro of this method, I don't have to say no more, is that you are going to have a phone call with better and stable quality. And then about the pricing, it has no different with how much if will cost if the call was made through Internet connection via Skype client. Of course to be able to make use of the toll-free, you might need a fixed line telephone. Maybe it is free as well if made from a mobile phone.

So below are the steps to setup the to-go number.


1. Login to Skype, and then under your profile, click Skype To Go.


2. To set up a new Skype To Go number, click on "Add a contact". If you have not set up any registered phone, at this point Skype will have you register one, which could be either a local phone or a mobile phone.


3. And then, fill in contact's name, country, type, and phone number or Skype ID. On the right side you are going to see a local phone number started with (315). In Singapore, this is a phone number format reserved for VOIP purpose.


4. You could also set up a PIN number if you wish to protect your Skype balance, especially when you have auto reload being set up.


5. To make the phone call by using your Skype credit, directly dial the number specified for the contact, and you phone number where you made the call from, will appear as the Caller ID.


*Unfortunately, Skype has not yet support all countries for this feature. Fortunately, Singapore is one of the country that has this feature ready.


You Are Just One Click Away to Spend Those Dollars

0 comments

It's been years since the last time working on some shopping related web applications that I forgot the main angle behind the design of those applications is to make it as easy as possible for the customers to spend their money. The idea behind online shopping business is that it's so easy that as long as we have a credit card (or credit card numbers), we can order whatever we want.

So last time I went to Groupon to purchase a voucher for gift because of the convenience. Prior completing the payment, I was surprised that everything is already filled up. What I have to do to complete the payment is basically just to click the "Submit Order" button. And there is no explanation provided that "after clicking this button, your credit card will be charged". It just happened, my card was charged.


So convenient, right? Imagine if some day Groupon's database get hacked, what will happen? If really one day all those credit cards numbers were downloaded by someone else and he's using them to shop around, I wonder if Groupon is going to stand up and take the full responsibility to handle customers' claim to VISA to fully refund all the money drained by the hacker. If not, then at this time the customers are going to experience big time inconvenience, provided that they're using a credit card. If they're using debit VISA, then I wonder if Groupon is going to refund those money, because debit card has zero fraud protection and does not provide dispute resolution options.

The fact is that this kind of thing happens, and when it does, everything is already too late. For example this is what it will look like when 6 millions of CSDN's users credentials getting hacked and shared publicly on XunLei (a torrent clone of China). This event occurred just last month, and I was one of the members of CSDN. What happened is that since then my mail account (that I used to register on the website) has been always full of spams and I have to update every account that is using the same password (because it's a common knowledge that people tend to use the same password for everything).

Going back to my story about Groupon, I was upset for a few minutes and then daydreaming big time to sue the company. Of course it's not going to happen. They are big, I am just like a fly to them, chances are so small. But I still did some researches and asked around about it.

With the references given by some of StackExchange's member, I figured out that it's indeed illegal to store customer's CVV2 number.

http://www.visa-asia.com/ap/sea/merchants/riskmgmt/ais_merchants.shtml#TIP

The merchant must have confirmed that sensitive authentication data (i.e., the full contents of magnetic stripe, CVV2 and PIN data) is not stored, as defined in the PCI DSS.

So I wrote an email to VISA's AIS team to complain about that. What they replied is that they're unable to confirm if Groupon is storing customers' sensitive credit card information. The asterisk may not represent the actual CVV2 provided that the credit card information is also masked. If I have any concern about card security, I was supposed to contact the bank who was issuing the card (I assumed that they were trying to say that I may request the bank to just deactivate the card if I was really concerned about it).

But Amazon, Apple Store and PayPal also provide the same convenience, right? What makes it different between them and Groupon is that they explicitly explained it to us when we're going to enter the number, that it will be for future purchases as well. Groupon does not do that, I might have remembered it wrong, but I'm quite sure that there wasn't any explanation when I made the first purchase a few months before that.

To support my unreliable memory, additionally here's what we can see on Groupon's FAQ page. It is so beautiful and safe!


What make it worse is that Groupon is allowing you to connect your Groupon account with your Facebook account. People will commonly be being careless about Facebook account because it's just a social media. So what usually happen is that they will check the "remember me" button to keep their browser logged in to Facebook until there's one of the day when the browser's cookies are being cleaned up. Of course this is related to personal responsibility, but what I see here is that Groupon doesn't really care about their customers' security.

Maybe I'm just making this small thing such a big deal. But as a customer I never expect and wouldn't be thankful to have this kind of convenience, especially when it's related to the safety of a debit VISA card.

Python Learning Journal (Part I - Foreword)

1 comments

Learning from past experiences and evidences, there is always a death point for everything when it comes to technology, especially IT. So it is always a good thing to try out something different, prepare yourself for that one day when you need to make that changes.

I have been sticking myself to Java for at least 4 years (I started as a Delphi fans - the legendarily popular desktop programming language). At that time, Java was just starting to get popular with its runtime version 1.5.0.

The problem with Java is that you need to type a lot, java codes, XML, XSD, properties file and everything. However this problem can be overcame by varieties of sophisticated tools and IDE. And then the hosting cost for a Java web application, is not cheap. You'll at least need a dedicated server. There is no way you can host it shared with another applications.

Not to mention when you code for a desktop application, there is hardly any good and productive desktop UI library you can rely on. The only thing that is robust enough IMHO is SWT (The Standard Widget Toolkit) from Eclipse foundation, which consumes a lot of memory and is very very slow (needs references).

I am not saying that Java is bad, or going to be outdated soon. Actually Java is really good for an enterprise solution. But I think it is a requirement to explore something contrastingly different (a dynamic language) than the thing you do everyday, once in a while. And ironically Python is not even something new, should I pick another language instead?

Sexism in IT Career

0 comments

It has never come to my mind to write this blog entry until I saw a Python workshop advertisement which is "specially designed" for ladies. I don't know if it represents sexism, but the first thing that passed in my mind is: why would women need a specially design workshop in the first place?

Is it based on the assumption that women don't excel men in logic, that is why they need a separate workshop, so that they can learn programming with a slower pace to prevent slowing down the other members (which will happen in a unisex workshop) ?

You can say, "no, this is not it". Then why is it categorized based on gender and not based on the skill level of the candidates?

Catholic educates boys and girls separately, which I don't know why because I'm not a Catholic. But I believe that the reason behind it is not because of smartness differentiation between boys and girls.

In my humble opinion, women and men have the same opportunities to understand complex algorithm and how to work with programming language. There is no correlation between gender and ability when it comes to logic. This kind of gender specialized workshop has just proved that there has been some unprofessional gender prejudices happening in the community (which is sad), perhaps as a result of society belief.

What do you think? Do you see or experience any similar discrimination incident ongoing in your workplace?


Update per 03 August 2011

After asking for a number of trusted friends' opinions, it turns out that I had been acting too subjective upon posting this entry. Whatever the reason is, claiming something to be sexist is so judgmental and it's inappropriate. I apologize for that I've written this entry, I admit that it was subjective and personal.

Single Entry Point and Single Exit Point

0 comments

I don't agree with "single exit point" and so did I practically never apply it.

Glad to find an entry on this website:
http://stackoverflow.com/questions/1701686/why-should-methods-have-a-single-entry-and-exit-points

It said that:

This advice is outdated and bad for code pratice because it will lead to temporary variable which is hard to maintain.

To me, temporary variables smell bad a lot rather that multiple exit points.


public void uglyAndWrong(final int hamsandwich) {
int answer;
if (hamsandwich % 2 == 0) {
answer
= 27;
} else {
answer
= 13;
}
return answer;
}

vs:

public void comelyAndHip(final int hamsandwich) {
if (hamsandwich % 2 == 0) {
return 27;
}
return 13;
}



How about multiple entry point ?

Look at this code:

public void doSomething(MyObject person, boolean beNice) {
if (beNice) {
//code to do something nice
} else {
//code to do something not nice
}
}

vs:

public void doSomethingNice(MyObject person) {
//code to do something nice
}


public void doSomethingNotNice(MyObject person) {
//code to do something not nice
}


Which one do you prefer ?
I prefer the first one coz it would reduce code duplications because most of the time, code to "do something nice" will just be different in a little way with "do something not nice".

They Don't Understand Us

0 comments

Quoted from one of Jakarta Globe's article:

In polite Indonesian language, these are recommendations. In more direct language, these recommendations should be implemented.
This sentences remind me about Malcolm Gladwell's newest book "Outliers" about how airplane accidents happened because of miscommunication between the pilot and the copilot when they came from 2 different countries. And it make sense to me because I see that kind of thing happened at our office a lot, which has expatriates as managers.

So, according to Indonesian polite language, recommendations or suggestions mean that it should be implemented. But according to west people, recommendations mean recommendations.

Because I was born here, shame on me I do that a lot. So we sort of understand what people "mean" when they "say" something different. And whether they actually want something or not, when they say they don't want it.

You see??? It's so complicated, maybe east people [we] should fix their [our] way of communicating things by using words only without too much feeling inside.

Implement Paging for Data Display

0 comments

Almost every application need the feature of paging, whether it's web application or desktop application. Whenever you want to display some data to the user, there is no way that you display the entire set of the data to the user. Imagine that you have 1 million data on the DB, it would be inefficient either time nor resources. Especially if the application is a public website, the server might crash, if everyone is viewing the page at the same time.

If it's a desktop application, it will consume a lot of memory to display 1 million data in the table (or would you say, JTable), and then the application might crash due to out of memory exception.


For this reason, everyone should implement paging to all kind of data display. PHP MyAdmin is a good example for this. If the application is a desktop application, a proper calculation has to be done to determine how many rows can be display on the screen, so only the displayed data will be retrieved. And whenever the user is doing scrolling at the table, another set of data will be retrieved based on the calculation of which rows the user is displaying now if he was scrolling up/down for how many times.

For the retrieval, below is the query syntax comparison for MySQL and PostgreSQL. First query is the retrieval of 1st - 10th row, second query is for 11th - 20th row.

1. MySQL

SELECT select_list FROM table_expression LIMIT 0, 10
SELECT select_list FROM table_expression LIMIT 10, 10


2. PostgreSQL

SELECT select_list FROM table_expression LIMIT 10 OFFSET 0
SELECT select_list FROM table_expression LIMIT 10 OFFSET 10


Unfortunately, MSSQL and Oracle don't have the "offset" feature, and thus implementing such kind of paging will need ugly subquery that will take a long time to execute, or helper "view" that will slower the performance when inserting data. So in this case, it's to be considered whether the efficiency of data displaying is very important to the application or not.

SCJP

0 comments

Does it determine someone's skill in Java programming? A few days ago a candidate came and I also joined the interview. To be honest, I was surprised when I first looked at his CV. Apparently he passed the SCJP 1.6 which I "was" always wanted to pursue some day, with a beautiful score: 90%. He also has a high International TOEFL score. I'm pretty sure that this person is very smart and works hard, actually that means a lot. But if we look from the other side, he has never worked as a programmer before and he went to college majored in Mathematics, not computer science or even Electrical engineering.

At first pardon me for my prejudicial before continue reading, but I do believe that somehow people who has taken basic IT courses, or self-educate themselves start from the basic will excel those people who have not. Without those basic knowledges, someone doesn't really understand what is what. Yeah, even most of the people who is already a programmer is just playing around and doesn't know what is what.

And experience? By doing mistakes, we learn from it. To be a programmer, someone has to make some mistakes. I did too, lots of it. But at that time I was only working on office's internal software, not any project which will be deployed to production.

At the end of the day, we decided to not hire him. Actually it's not because of his flying scores in TOEFL and SCJP. It's because he asked for a salary that should be given to an engineer with 3 years experience, while IMHO himself is still a fresh graduate.

I don't know why people care so much about scores. If you are experienced enough to identify smart persons, you don't have to look at their scores to know their ability. CV is just written words, anybody can lie about it.

A building should have a strong enough foundation to make it a good one.

Yahoo Messenger Import Contact Feature

0 comments

Apparently a few years ago I've made a silly mistake to have something I don't like in my yahoo ID. So last Friday I managed to migrate that account to another account with a better name. As I've been using it for so many years, I had around 200 contacts. Sure I thought manually adding them to the new account will be a painful thing to do. Later I found a way to do that in an engineered way.

Here's what I did. First I exported my address book to a CSV file, and later import it to the new account. And then I login to the yahoo messenger and use the "Import Contact" feature. And voila .... Some contacts were imported and some were not. So, I just imported them once again and it surely became a mesh. I just got very upset and delete everything which made it worse than ever.

Currently I just couldn't add any contact at all with that new account. When I try to add contacts in Yahoo Messenger, after 40 seconds, a message appears as : "Your request to add a contact has taken longer than expected to complete. The Operation may have succeeded. Please check your Messenger List later."

Tried with Trillian, Pidgin, E-buddy, or whatever IM existed which I knew. Now I'm too tired to try and honestly I don't know what to try anymore. Tomorrow I'll just use the new account anyway and hope the contacts would pop up anyway.

Later I checked on the Google and some people said that it's suggested that we only add 5 contacts at a time, and later logout from Yahoo Messenger, and login again, and proceed to add another 5 contacts. Actually something crossed on my mind when I read this. Yeah sure they have made a limit, unless so people would be spamming around. BUT, why did they provide the import contact feature anyway ????? Or maybe I've just misused it ?? Anyone has experience migrating account ??

Hiring Smart

1 comments

It’s because it is much, much better to reject a good candidate than to accept a bad candidate. A bad candidate will cost a lot of money and effort and waste other people’s time fixing all their bugs. Firing someone you hired by mistake can take months and be nightmarishly difficult, especially if they decide to be litigious about it. In some situations it may be completely impossible to fire anyone. Bad employees demoralize the good employees. And they might be bad programmers but really nice people or maybe they really need this job, so you can’t bear to fire them, or you can’t fire them without pissing everybody off, or whatever. It’s just a bad scene.

quoted from: The Guerrilla Guide to Interviewing V 3.0 by Joel Spolsky

Whew
I completely agree with Joel and personally encountered some experiences with it.

Suppose it only apply for a team that already has several senior programmers in it. When you have zero programmer at the team, it's better to temporarily hire someone right-away rather than to have no-one at all.

I always believe that some people are born with the nature ability to understand math and basic computer concept, and some of these people have the right personality and enthusiasm to do everything to write the best code that runs and is scalable. Those are the people we should be hiring.

Experience can be learnt in a period of time, but you can't replace someone's brain. Neither can you make someone take a course to modify his personality.


Book Review: Outlier by Malcolm Gladwell

0 comments

Outliers: The Story of Success talks about why successful people succeed. Not having enough luck has always been a wonderful excuse for losers (like me). This book is fantastically showing some points that somehow that bunch of losers are right.

After reading chapters of it finally I can conclude why people succeed. It's a combination of culture, childhood, luck, personality, and opportunity. So what my mother always said somehow is right. Well, she always reminded us how lucky we were to have a mother like her, because according to herself, she's smart. According to the book, a child who grew up in a good environment and had enough of parent's support is statistically more successful than those who weren't.

And it also mentioned a research which is interesting for me. It said that Chinese can remember numbers better than people who speaks another language. The reason is because Chinese needs less syllables to pronounce a sequence of numbers.

After all Gladwell is still one of my favorite author. And this book is consistently as fresh as his other best-sellers: 'Blink' and 'The Tipping Point'. Can't wait to read his new idea on the next project he's working on.

Pass the SCJP Exam

0 comments

What I have to do is :
1. Spending 30 minutes each workdays and 120 minutes each weekdays to study with the SCJP book
2. Do a mock exam, confirm the score
3. Buy a voucher
4. Have the exam!
5. Pass it!

How long I’ll need to do them:
1. 2 months = 72 hours study time
2. 1 day = 2 hours for best case. Worst case could be followed by starting over number 1 with a month of learning again and 2 hours again for number 2
3. 1 week
4. 2 weeks
5. 1 day

Averagely will need: 3-4 months for that

Why Programmers Resign

1 comments

Human resource is the most valuable thing an IT company can have, and the key to determine its success story. Maintaining human resource in an IT company could be a different thing from any other company.

There are some interesting fact from The Mythical Man Month, and I completely agree with them. Here they are:

The difference between a good programmer and bad programmer is at least:

  • 10x in productivity
  • 5x in program speed, space measurement
Data showed no correlation between experience and performance (but clearly there must be some).

In another words, a programmer with salary 20k/year is at least 10 times more productive than a programmer with salary 10k/year.

I ever heard a story about a company which is willing to double all of its IT staffs' salary to keep them from moving to a competitor. I totally agree with its action.

For example I would tell a story about a development team which consists of 1manager, 3 programmers, and some QAs, technical writer, etc. In January 2009, programmer A resigned. To cover his leaving, programmer B and C have to backup programmer A's work until the team got a new programmer to replace him. In the meanwhile they themselves are already having their own job and responsibility.

Then, in Februari 2009 the company got a new programmer, lets say a good programmer with 10x productivity we mentioned above. He will need 3 months to adapt with the new working environment, and it means in that 3 months, programmer B and C have to continue backup and support for programmer A's work.

From this story I can conclude that losing a programmer means losing money and everything for at least 4 months. Losing 2 programmers at once would double the number. Losing 3 programmers would exponentially amplify the number.

Why programmers resign? There are some reasons though. Here listed them ordered by the tendency:

  1. Dislike the manager
  2. Not gaining enough self-improvement
  3. Less respect
  4. Low salary
  5. Bad working space / bad facility
  6. Company rule
  7. Bad social life in office
  8. etc or personal reason
Number 1, 2, 3, 7, 8 are fates.

Number 4: give employees a raise when they deserve it, not when they're asking for it.

Number 5: upgrade employees' facility. By facility I mean computer and Internet. That are what a programmer live for.

Number 6: don't make a rule that is not fair to both company and employee. This world work in a balance way though.

Signs of a Bad Boss

0 comments

  • He ignores the classic, time honored cliché, “Praise in public, criticize in private.”
  • He gives you assignments and doesn’t follow up.
  • He doesn’t support you when something goes wrong.
  • He thinks everything is fine when it isn’t.
  • He constantly claims that he is empowering you, but isn’t.
  • He micro-manages and needs to know everything.
  • He acts paranoid.
  • He jumps to conclusions.
  • He doesn’t know how to plan, prioritize or organize.
  • If it isn’t his idea, then it can’t be good.
  • He implements two-faced attacks.
  • He tells sarcastic jokes or teases.
The bold ones is the one that I encountered personally.

And believe it or not, even there are books which specially talk about bad boss stuff, , for example Crazzy Bosses written in 1992. Stanley Bing composed it to help people spotting, serving, surviving them - not run away from them.

Reference: http://humanresources.about.com/

Don't Reinvent The Wheel

0 comments

Since very long ago, ppl has invented wheel. The wheel are made round, because the inventor had tried so many shapes and by the end of the day, he decided that round is the best shape to move things.


Here is a summary of Futurama's episode, my favorite cartoon all the time.

Mom is the founder of the largest robot factory in 3000. Once on the Mother's day, she activated the signal to all of the robots to rebel to human kind. In the future, everything use robots. So, ppl cannot live at all without robots.

Mom's sons go over the plan: Mom will be in a cabin in the Bronx. They have a precious non-computerized map to find their way, but they're not sure how to get there without a hovercar. Fry tries to explain an old invention called The Wheel. He builds a wooden cart with oval wheels.

Leela: Wouldn't it work better if the wheels were round?
Fry: It's my invention, we do it my way! 

Fry lugs them to Mom's cabin.


I applied this story as: "don't re-build your own library, use one that has been built and stable".

The author of the library might have spent so many hours to design, write and test the library. Bugs have been reported and fixed. People requested for enhancements that are applicable to them. It might be as well wise to contribute to the library (if it's open source), by adding features that it doesn't have yet. Other people might need it too, and they will be so thankful to you.

Expanding a DVD/CD Lifetime

0 comments

Usually, ppl made backup by storing the data into a DVD or CD. The DVD/CD themselves have some limited lifetimes in fact. Do you remember the last time you found some collection of old songs on some pile of stuffs which you hadn't touch for several years? Then you tried to play the CD/DVD, and what did the player's screen said? "No disc", or "Please insert a disc".


If you read this article on CD Freak, you'll be surprised by the fact that a CD-R only survive between 2-5 years depend on:
  • The quality of the CD: cheap CDs degradate faster
  • How they're stored
To lengthen CDs lifetime what you can do is:
  • Store them in a cold and dark place
  • Store them vertically, because horizontal storing give to much pressure to the disc surface
Well I think the same rules apply for DVD.

There is nothing in this world that is eternal. The same rule apply for there is no storage medium which last forever.  However, banking industry prefer storing backup with magnetic drives because they last longer. Remember that you found some old tapes in on some pile of stuffs which "your parents" hadn't touch for several decades? Then you tried to play the tapes and it works despite of some distortions.

Some Facts About Programmer

0 comments

Now I worked in another software company, so I think I am granted the right to comment about the job of a programmer.

As a programmer, actually:

  • When you afraid that "changing something" will get the code not working anymore, you are in trouble, get another job.
  • Learn for keyboard shortcuts to increase convenience, e.g. shortcut to build, run, delete a line, duplicate a line, etc. Make the process as simple as possible.
  • When you think that the way you are doing things isn't quite efficient, it's wasting your time, change it now, whatever it takes.
  • Learn to type with ten fingers, it might help.
  • Make yourself clear with some important programming terminology.
  • The most important, code tidily, stick with the convention, and be consistent! Give exact name for exact method, exact name for exact variable. Use English.
  • Don't mess around.
  • Whatever happened today, or yesterday, how small the possibility it will happen, it will happened again in the future.
  • Do not mess with long procedures, or big classes. Make it as readable as possible. When things go too long, break them into small things.

And most importantly:
  • Always remember that anything is possible, anything... It just depends on you, are you willing to stop a while, and think for a better solution or not. Are you willing to be busy today, so you have many spare time tomorrow?
  • Never put up with inconvenience. If it's something that will be done repeatedly, always spend the necessary amount of effort to make it easy. For example, write a script, or keep a copy of template for similar tasks in the future.