BLOG

standard

You should check in your dependencies.

28.03.2015 Posted in Knowledges 2 Comments

I’m not sure who started this pattern so I can’t really refer back but if you know please comment below and I will update the post. I’m sure all of you have heard that you should not check in anything that can be generated to Source control. It’s long been a common pattern. However, lately I have been checking in my dependencies into my source control and it works really well for small to medium project. Here’s why.

Isolate you from any network failures.

I know you might say that it rarely happens to me so why should I care about this. I hear you. It rarely happens to me as well but when it did happen I got really frustrated. Especially, when your CI failed without any reason and you found out that one of your dependencies doesn’t get downloaded properly.

CI failure

This frustrates me the most and it’s one of the reasons why I started doing this. More than often that my CI failed and it’s because of dependencies didn’t get resolved or compiled properly and people just kept running it over and over again. To eliminate this problem and let CI just run the tests save me a lot of pulling my hair time.

Check out and Go!

This pattern I have learnt while I was working with ThoughtWorks that it’s so frustrated when you are joining a project and you spend almost half a day just to get your machine up and running and run the build script to download all the dependencies. I believed that’s one of the reasons why Chef and Puppet exist. It’s so easy when you checkout a project from your source control and you can start coding right away or even run all the tests.

I also have this support from my friend

Srini also pointed out that you shouldn’t do that for internal project dependencies

Conclusion

I know people might argue that it doesn’t really work for big project because of the size of the repository. That’s why I mention small to medium project. It works really well with small projects. Another point to mention is that every developer might have different environment for example, Windows VS Linux which node_modules might not work for both environments. I solve that problem by using Vagrant so everybody has the same environment.

Inspiration
https://www.dzombak.com/blog/2014/03/including-pods-in-source-control.html

standard

My 2015

5.02.2015 Posted in Knowledges No Comments

I just want to take a break from writing about technical posts to just talk about myself a little bit. I’m inspired by Scott Muc’s post about his 2015 Resolutions. Before getting into 2015 I want to take a step back and review my 2014

My 2014

  • I got the opportunity to work in Turkey as part of my consulting job with ThoughtWorks. I can count Turkey to be my 6th country I have lived and worked in. I used to work and live in Thailand, China, India, United Kingdom, Germany, Turkey.
  • Learned C#. C# is the first language I learnt at school when Windows Form was a big thing. I loved it but then the web took over and I felt in love with Java instead and never look back. The project in Turkey is C# so I got to relearn that again and I can say that I like it more than Java now. The language is nicer and more functional. I can do more stuff with less code.
  • Moved to the US.

My 2015

Move to the US and join Fusion

I decided to join Fusion and left my glamorous consulting job. Partly because of the city. I felt in love with New York City when I was there in 2013 for a conference and I thought it would be nice to live here. When the opportunity came I took it immediately. Now two months passed by and I still love the city and my job. Much to explore and lots of places to travel in the US. Fusion is also the first place I get to know what’s like to work remotely. I absolutely love it. I get to be anywhere and also do what I love which is coding. I will write another post about remote collaboration later. Fusion is a media company which is a new field that I haven’t explored before.

Join Kollaboration

I join Kollaboration New York as a Technical Director because of my roommate Tanner Chung. Kollaboration is a non-profit organization that help and promote Asian American artists through entertainment. In this organization, I get to learn what’s like to be Asian American. I’m asian myself but I was born in Asia. So, I didn’t know the problems a lot of asian people living abroad having.

What I want to do in 2015

Learn to invest

Who doesn’t want to have money? I’m going to learn how to invest my saving and will keep posting the results.

Travel across America

When I was living in Europe, you can get to a lot of countries in just 2-3 hours but in America everywhere is so big and South American has always been my dream location.

Learn Spanish

My previous goal leads to this goal. I speak Thai, English and Mandarin. I learnt German before but didn’t really get anywhere. This year I’m going to learn Spanish and make it my fourth language. I love languages and it’s fun to talk to the locals and amazed them with their language.

Run a marathon

My friend Rajveer and Srini inspire me to running. I’m a chubby guy and I really want to get into shape. Running a marathon takes a lot out of you mentally and physically. I thought if I could do it at least for once, I’d accomplish something.

Summary

I started off 2015 pretty good. I went to India for my friend’s wedding in Rajasthan. I went to US west coast to experience super cold whether. I learned PHP and WordPress and improved my JavaScript skills which I will continue doing that.

standard

Event delegation in JavaScript is fast but how fast?

22.11.2014 Posted in Javascript No Comments

People say always use event delegation for adding event because it’s faster. But how fast exactly? I really want to create a test case for this, but I couldn’t figure out how to run Benchmark.js in browser. So, I thought we could just use Chrome Developer Tool to achieve this.

What are we measuring?

As I said in the beginning, we want to know how fast event delegation is compared to direct binding that most people do. For example, I’ve always seen people do this

1
2
3
$('#ul li').on('click', function() {
  // doing something amazing.
});

What is actually doing is, jQuery will add the event to each of the li in the DOM. If you have 3-4 lis, then I don’t think it’s going to make a big difference. However, if you have a thousand lis, you will see some difference. I’ll show you by using Chrome Developer Tool.

What do we need?

We need some basic HTML

It’s going to be something like this

1
2
3
4
<ul id="parent">
  <li></li>
  // 999 more <li>
</ul>

Then we will have JavaScript like this

1
2
3
4
5
6
7
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
    $('#parent li').on('click', function() {
        console.log('you clicked me!');
    });

</script>

If you open your html page on Chrome you should see something like this.
Screen Shot 2014-11-21 at 7.06.19 PM

If you go down to where JavaScript is executed You will see it takes around 37ms to execute the snippet.
Screen Shot 2014-11-21 at 7.07.18 PM

Now change your snippet to be event delegation

1
2
3
4
5
6
7
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
    $('#parent').on('click', 'li', function() {
        console.log('you clicked me!');
    });

</script>

And refresh the page you should see something like this.
Screen Shot 2014-11-21 at 7.12.02 PM

Now it will only take 2ms to execute the snippet. It’s because the event is added to one element not 1000 of them.

This is just an easy example that you can do it yourself to improve your performance.