Category Archives: Technology

When Jenkin checkout the wrong SVN revision

Evolus have brought the Build Integration Server into function for a while. The thing I like most about Jenkin is that I don’t have to build the heavy web-application in my machine anymore (the build process eats RAM pretty fast). Instead, the build get packaged on the CI server and then deployed directly to our staging server.

In fact, we have to get over several issues before getting it done correctly. One of them is the “Wrong SVN version” issue.

The last SVN version for development is 129. But the svn update on CI server always yields 127. We must wait several hours before it brings to the correct version of SVN to the CI server for building.

We have tried to switch to another checkout strategy. But even a full check-out doesn’t help to update the svn version correctly.


It’s the time. The SVN server must be synced by time with the CI server. The mismatching of time (even in seconds) can caused a loss in SVN check out function.


Since we don’t control the SVN server directly, we can’t have it synced with CI server. A work-around is that we can indicate Jenkin to check only for the HEAD version:

Put the link into the SVN box and it will be ok: svn://hostname/project/trunk@HEAD

Working in a distributed team

/* This post was published under the Programmers Blog */

Distribution Environment

Working in a distributed team is becoming more and more popular. With the power of Internet, today we can easily work together without worrying about physically travelling to work. It saves time, fuel, and personal energy. Can anyone imagine anything better?

But, all the convenience comes with a price. Co-located workers have the advantage of direct communication, which is often underestimated. When you have all of your coworkers in a room, they will answer you immediately when you ask, “Is that document is ready?” or “Can our original design support these new requirement changes?”. When the team are distributed in many locations (and possibly many time zones), things are quite different. We must wait for our emails being answered, or the chat reply message, while the others are on their other tasks. We may get stuck and need help from another team member who are sleeping while we are at work. That’s not only irritating, but also become a real challenge for any distributed team want to push their productivity toward their maximum potential.

I have been in this position more than once. Some were school projects, some were start-ups with my friends, and some in my work elsewhere. Some of them failed desperately, the rest succeeded. What I learned from them is: the way we do things as a programmers have a big impact. And success is not only for the Project Manager – it’s something we programmers can be proud of – when we contributed in it.


There are three key principles to success: Communication, Trust, and Enthusiasm

Communicating Communication

Communication, communication, communication. I can’t stress this enough. Making sure everyone is on the same page is critically important, especially when you’re building a product a continuously changing product. In a fast-paced environment, a developer may take harmful shortcuts or forget important details if the rest of the team is not aware of their actions. Many times, I had to remind a team  member about a requirement he forgot, or explain the reason for our design the third time to the same person. It’s annoying, but it’s far better than letting developers make assumptions and cause irrepairable damage to the project.

Given that the team is potentially distributed all over the world, communication is harder but not impossible. All the team should sit together (via Skype or similar) to agree on a “communication plan”. In our case, we had two teams: client and server which works on different places with different time zones. we decided that everyday the server team would build a new version at 12:30 pm, then the client team would check to see if there’s any problems. Then, at 4pm when everyone in the server team went home, the client team will begin their work and give feedback to server team by the next day. The check at noon guarantee s that the build is not broken so badly that the client team can’t fix it.

One of the other ways to enhance communication is building a “responsive” culture. “Respond early – respond often” – that’s our motto. When you get an email and don’t have the chance to read it thoroughly, just mark them as “to read” and send a message that you’re doing on another task and will look at their problem as soon as you’ve time. That will help the people on the other end switch to another task in the meantime. (*)

Teamwork Trust 

Believe me, trust is very important. If people think you are not doing your best, they won’t either. Trust others and they will trust you. Do your work so that your team can trust you, and they will be much more inclined do their work. Be as transparent as possible. Make it clear what you’re working on. All of those things are easy to say, but it requires attention and care to get them done.

Once, I joined in a start-up where everyone was eager about what we were going to build. But we were located in different countries, and also had day jobs. Several weeks passed and we got our infrastructure setup ready. But then we got stuck in a vicious cycle: late response time, endless discussion about what the project will do, and soon everyone was tired of meeting without seeing anything done. The project got cancelled.

The lesson to be learned here is: we wanted to build something, but we failed to show each other that we wanted to put forth our best effort. As a result, any trust could have been cultivated was destroyed.

Happy team Enthusiasm!

Share your vision. If you don’t love what you’re doing, you are killing the morale of others. We all love working in a enthusiastic environment, so just make it :-) .

Being passionate about the project’s goal is a sure path to victory: I have noticed that when myself and other team members have a positive attitude, all team work better with less conflict and miscommunication. We even feel much better.

Enthusiasm is infectious. Coming up with new ideas (sometimes stupid) is a way to show passion. That means you don’t only do your work, but you do it with heart. If you think of any cool idea, tell others right away. Don’t be lazy and say: “I will catch up with him tomorrow” because that tomorrow will never come. Tomorrow, other tasks will pull you away along with your best ideas. If you think the idea is not mature enough to present, put it off somewhere you will absolutely look at when you have free time. I feel that a sticker right beside the monitor is not a bad idea.

Last but not least, keep a close eye on what’s going on. Revise early, revise often. No matter what you’re doing, which role you’re playing, you should be responsible about project’s success. Tell the people in charge about any risk early.

In closing, a programmer is not simply a technical worker. That’s not the spirit – any laborer can learn their work for once and apply it the same way for many years, but that’s not us. We live and breath in the ever-changing technology environment, and we come here because we love it. Working in a distributed team is not only a difficulty, but also a challenge that many of us seek to overcome.

(*) Manage your time wisely. Time management: Answer too many requests and you will not get anything done. Don’t answer then they will wonder why you don’t respond. They can’t see you are busy. Balancing the workload is an art. But for starters: Speak the truth and try to be as simple and as clear as possible.
(**) The images used in this post are credited for Stock Exchange

Can’t Hide

We can run away.. but we can’t hide.

Through a storm and through a lonely night


Whenever you need

I promise you I never hide

Sometimes Life throws us under the rains. It certainly does. No one can hide.

Let’s live with it and go through it…

For Bich Thuan, my friend.

Houston, we have a problem.

“Houston, we have a problem”
Apollo 13


Houston, we have a problem Before hearing that sentence from my client, I haven’t viewed the movie yet. It was after an afternoon after a failed live test. During a demo to end-customer, our application met an unknown state of data and crashed.

No need to say, that is a big disappointment. Both my team and our client trying to make everything prepared among few weeks. We all work hard for this demo. And we know that this is related closely to the future of our project.

And the responsibility in that case is mine.

While I was expecting his explosion, or at least many complaints, he told me one thing that I would never forget:

Have you known this saying: “Houston, we have a problem

Problems come and go. He says that he expects that problems would come, specially for our fast-paced development. We must develop new features even before fixing the old bugs, and this is hard to avoid. He said he’s impressed with the work of our team, and hope I can recover this case as quickly as possible.

That stunned me for a while.

Everything work out at last. We resolved the problem – far easier than expected.

PhD Comics – an unusual reasonable humor

There’s nothing which we can be sure about life. That’s exactly what happened to the creator of PhD comics. Before coming to Stanford, Jorge Cham didn’t even imagine that something like this could be an important part of his life.

PHD comics

Start as a graduate student, now become successful and famous as a professional cartoonist. No one can ever know when the wheel of fate turns!

Let’s view some of his best works:

You can take a lot more here.

Piled Higher and Deeper!

Model Thinking – an after-course review

Model thinking icon

The “last last”(*) Sunday is the last date on my course “Model Thinking” from Michigan University. It’s such an enjoying experience, with a lot of materials that help looking our world in a brand new way. I’d love to address the some interesting topics of this wonderful course in a recent day. Here’s a short summary of what makes me remember about it.


1. Knowledge should be free

Yay, a slogan :) . Along with many many online courses out there, what makes this course stand out? The first thing, it’s free. Truly free. From the beginning to the end. No premium membership, no payment for extra lessons, no cost for materials (although they introduce some books in the course, but they are optional and can be skipped). I like it. I mean, premium membership is ok, but if a course claims that they are free, then it should be truly free. Asking people sign up for membership after a few trial lessons… well, I understand that the publisher needs money, too, but that brings a feeling of being tricked. The work of Professor Scotte is very impressive, too. Pulling such a lot of knowledge into the easiest-to-understand form is no easy-feat. He explains the concepts from a variety of theory: advanced statistics, automation… with a very clear and short style. It reminds me about the spirit of Wikipedia- a garden for high quality knowledge – but friendly with “often-poor” students. It brings students from a far-away countries (like me) a feeling of how people studies in the Michigan school. Isn’t that cool?

2. Organization matters. Simplicity rules.

I have joined several online courses with different way of interaction, but the “Model thinking” course is my best experience so far. One may argue that the content of the course is rather simple and general, but that’s only one thing. Actually, in the course there are some knowledge about high-level statistics, automat,… but they tackle from a very simple view, on the surface, and only what really matters to the main idea. There’s space for enthusiastic students to explore more by themselves, so don’t need to stuff all in the course :) The way by which knowledge is transferred matters. As you can see from the picture, the main learning interface is somewhat “plain and simple”. But it proves itself as a good way to eliminate distraction. I took part in several other courses with more-interactive learning interface, and surprisingly this interface is far more friendly than others.


A normal interface of the course

The quiz is quite good, too. There are small quiz attached after some parts of a lesson to confirm what we just learn. Although some minor odds, I can say that the teachers do their best to keep everything clean and make progress track-able. That’s a very well-placed effort. And yes, no advertising! I guess it’s just a problem of time… since I still not know about other ways that they can support a free course forever, but it’s great when there’s no distraction. I think this course will proceed far if it can live with donation money from the sponsors, not the advertisers.

3. Still lack of Interaction.

Although many improvements made, this course still not achieve the perfection – requires. Participating in forums and Facebook pages are fairly rare, and only a very few people are active. Mostly they only leave a “hello” message, then disappear (well, that includes some of me, too).

In the normal sense, we shouldn’t blame the organizers, since this is the problem that all the online courses struggled over years. People are busy, having different time frames and plans… But I think we should have the right to expect more from such a well-defined course. If Mr. Scott can come up with a way to engage people to a community (just like his lesson about Standing Ovation), I think he would be able to transform the way people learn from the Internet. For those who missed this course, I would recommend to wait a little to take that course again in September.


(*) Yep, this blog post was in my desk from 2 weeks ago.

(**) I would like to use this post as a thank one of my “big” friend, who showed me that age doesn’t have anything to do with the willing to learn. Hope some day you can read this.

Start at StackOverflow: go for the niche

At the end of a week, I often find myself struggling finding sometimes to write out some “good thing” – some of my experience which may be useful to others. I don’t have much time, but that’s no excuse for low-quality posts. I’ll try my best to make it as short as possible, but also enough for a good read!

Sometimes, I feel people have a treasure that they don’t even know. That’s knowledge. Don’t be too fast to say that our knowledge is not as much as Einstein, Khong Minh, or Obama… I can assure, with my very experience, every of us possess an unique set of knowledge of our own – and they are special.

Imagine that you and Einstein were thrown into a river… you will know what I’m saying about ;)

The same applies for programming. Now we have StackOverflow site as the river!

StackOverflow is one of the great Q&A community site. Its reputation system is good and simple, if only not for the high entrance fee. But I’m already here to help :)

Step aside and observe, you will see: besides lots of the question which get answers after few seconds, a lot of the remains get few of views, and eventually die out unnoticeable.

Why that happened?

It’s because in StackOverflow community, there are many of “sub-communites“: C# community, .NET community, Java community,… and then Zend, Grails, web community,… In strong communities, the answer rates would be a lot better, and it would be more competitive too. But in smaller communities (like Grails, and surprisingly, Facebook), the answer rate are much lower.

So if you are a new-comer, why not go to the “niche” market, which has less competition? Well, if you are a Java developer, I don’t recommend you drop Java to go for COBOL, but trying a new framework (Grails) or similar language(Scala) might be a good choice. People at those areas need help too!

I myself had a good experience with the Grails community. Sometimes I dive in solving another problem which I hadn’t met before, just for help other fellows. That feels really good. That’s also a good way to learn, after all.

Google I/O – Another clever thing by Google

Google is famous with their cleverness – to make little happy joyful things. We developers are all familiar with their tricks, such as “snowy day” , or “do a barrel roll”.

And it’s time for a new trick!

Google IO Game

Google IO Game, Google IO Game

The purpose is simple: get the ball from “input” to “output”.  You are given a variety of “pieces” to make your machine. The pieces include redirectors, elevators, walls,… and so on. Can you make the best machine with only fewest pieces? Let’s try!

Some beautiful machines:




Coding in 1990s – The email Wild West

Creating an email isn’t hard. Creating a good one is.

That statement is very true, especially for HTML emails.

It has been a while since the first time I worked in creating campaign emails. Looking back, it’s a journey of many surprises, even pains, and of courses, lots of interesting experiences… Those are what I’m going to share here.

Email is a strange thing in our technology world. While almost everything get changed day by day, emails we get today are nearly the same as the time they were invented. And not for any good reason.

I guess there are some interesting facts about emails that many developers don’t know:

1. You can’t check if an email address is actually a real email,without sending a confirmed email.
2. Anyone in this world can fake your email address fairly easy. And currently, there’s no reasonable way to tell that an email is actually from an address or not.

3. HTML emails are poorly supported. They have none of the good enhancement that HTML achieved in recent years.

Well, first point first. Currently, the only way to check that an email is valid is: send some “secret message” to it, then if you receive that “magic message” from someone, he/she must be the owner. That’s exactly how confirmation emails work. Remember the last time you register to a forum/website ? Now you understand why.

At first it seems reasonable, but it leads to a funny similarity: you can only check if an address is valid only if you go there. With our advancement in GPS technology, this fact is quite a fun story.

Didn’t the email creators realize this restriction? No, they knew it from very soon. At first, every email server has a utility to check if an email which has domain address belongs to that server is eligible. But with the movement called SPAM MAIL, they one after one turn that function off. A step back in history, IMHO.

Point 2 WILL make many people shocked. Any email can be faked? Yes, I confirm this fact again and I mean it. That means I can send you an email with the address of Obama, Clinton, Bill Gates or Nelson Maldela… you can never tell it out,at least with the current state of our technology.

The reason is that our current email protocol has no reliable method to tell where an email come from. If an email server receive an email which tells that it’s from, the server believe it right away. Some email clients may try to check, but what they do are purely heuristics, like checking the sender server in blacklist or not… In my experiments, even yahoo and Google didn’t realize the “faked email” and consider them “valid” emails!

Only recently,Gmail makes some improvements and “detect” the fake emails ONLY IF the sender is also But it can’t give strong confirmation either, since in some forwarding mail case, the syndrome are same.

Point 3,HTML. In our “modern” email clients, the HTML headers are often striped off. That means no css file AND no header css. So what? Hundreds, no, hundreds of thousands lines of inline styling, which is the nightmares to normal web developers. They are not only duplicate, ugly, but also take lots of our precious web bandwidth. Moreover, table layouts are very popular in html emails, since the html parser in current email clients are just old and can’t parse div layouts accurately. Quite funny, Mr. Table tag found a hide out, after becoming history in the mainstream web development.

That’s just several holes in the design of our email technology. Surprisingly, people seem to be happy with patches, but not a re-design. They continue making marketing emails which looks very good at interface, but unstable in their bases. Running around popular email clients (Gmail, for example), they put enormous effort into beautiful email templates, without noticing that they are encourage for a bad practice.

Emails, as a protocol, should be valid and easy to use, to everyone.

Above problems are also the reason why some senior developers tell that we should always use plain text emails. I would prefer that approach as a developer, but I understand that in business reality, we usually need more than text.

And don’t forget, in near future, mobile’s emails would be a hot topic.

Made by my androids.
For the upcoming birthday

Thinking of The End

Steve Jobs

/* This post was written after the author complete reading the book about Steve Jobs by Isaac Walterson */

I never met Steve Jobs.

Only knowing him through the articles, the books,  and the news… I never have a chance to meet him in person, though I’d love to. An empowering leader, a great visioner, and a wit marketer… people even say he changes the world.

People also say he can be a lot selfish, hurtful, and rude. He can focus on the work through many days, as well as, be able ignore all the things he doesn’t want to see. Even his children.

He’s a man of complicated.

But even Steve Jobs, the Great one, can be forever. No matter how much money he had, how much famous he was, no matter how many doctors he called, in the end, he still fell before death.

No, I don’t want to talk about the metaphor such as: his achievements lives through… I just want to say about the fact. He was dead – no longer with us. No more. no less.

Walter Isaacson wrote a good book. Though I doubt that he has a subjective view about Steve… I must admit that the lines Walter writes about the last days of Steve… is very … well, impressive.

Impressive – in the end, such a great, vicious man, fears that “his children will mis-understand him”. He called Walter to write that book for him just for that reason. Well… Someone who can ignore the world to do what he thinks right, in the end, fears about what people say about him…

Even the prideful Steve Jobs, the cold-blooded man… in his last moments fears his children misunderstand him. That impress me more than anything in his best product collections

People are Subjective. We are subjective.

In spite of that, I somehow, share his feelings. Maybe in the end of his life, he could find peace among his dearest ones.