I decided to give presentations a try since I’ve never been really good at it. It was pretty fortunate that I was given the opportunity to present in a lecture to CP3101B students about my experiences contributing to NUSMods. There’re a few lessons learnt from the short 5 minutes.

Speak slowly.

I spoke too fast and honestly I doubt if people even caught what I said. Nerves probably contributed to this and also maybe due to the minimal sleep I had the night before. Also, speaking too fast caused me to not speak into the microphone. Which is another problem in itself. What’s a presentation if people cannot even hear you?

Something to keep in mind for next time.

Prepare slides with a theme.

My slides didn’t really have a theme, and it was mainly me rambling on and on about whatever comes into my mind. By theme I mean content, not aesthetics. It is similar to writing a research paper without a thesis. What am I trying to get across to the audience? 

Look at the audience, not your slides.

I have a tendency to look at the slides in order to remember what I want to say. I guess sometimes it’s not about one presenting to another. Similar to a conversation between two, eye contact shows the amount of attention you give to them. So if I don’t give attention to my audience, why would any be given to me?

That’s pretty logical.

Some people can present without planning, comfortable with giving impromptu speeches on stage. I’m really impressed by them, but that probably took years of hard work. Reducing the presentation problem to a set of algorithms probably isn’t the best idea, since a presentation is live and dynamic, it changes over time, any time. These skills come with experiences that can only be gained by participating more.

Until the next opportunity shows up, I should focus more on bettering myself in other aspects of life. :)

13AM musings

I just came back from my algorithm coding quiz today and feel totally stumped. It was an easy paper, I thought I had it in the bag…

But I clearly did not.

Whenever things start to veer into the direction of hard work not paying off, I think it’s good to reflect on quality of work. Perhaps I did not grasp the concept well enough or it was just plain bad luck. There’s no harm in reflecting either way.

The semester has been very hectic so far. Starting off with the Inter College Games and two hackathons, it is now week 9 and I don’t feel confident about my work at all. The algorithms class is the most interesting course I have this semester, but I am not thriving in it. The first half of linear algebra is also supposed to be easy to grasp, but I (most likely) made too many careless mistakes in the midterm paper.

In addition to school work, I have my own projects such as Google Summer of Code applications and CS1010R to juggle. It is demanding and painful, but I do believe that I am leveling up as a person.

This got brought up during a conversation with a friend:

You do know there is more than just getting a degree and running the rat race right?

This should be one of the most important lesson that I have yet to learn. It’s still early, I am still in my freshman year. But I acknowledge the fact that the earlier I understand this, the closer I am to really benefiting from university education. 

Second Hackathon Thoughts

A while ago I wrote a post about my first hackathon experience at HacknRoll by NUSHackers. Just yesterday, I participated in Emirates Travel Hackathon, co-organized by Web In Travel (WIT). The experience this time was much more fulfilling than the previous. From the ideation to execution, there were key takeaways in every phase.

We built Big Brother, which aims to improve your travel experience by making use of beacon aided geo-locational marketing and gamification. It seemed like a good idea to everyone and up till now I still believe it is. Despite not winning anything in the end, the knowledge and experience we gained from this 24-hour was remarkable.

Here are a few of the takeaways from the Hackathon.

Start with the idea.

I think we spent two/three weeks in advance brainstorming for ideas and we didn’t really know what to do until three days before the actual hackathon. It was a great idea that we could all decide on, but we could’ve decided on it earlier. Having an early idea means more time for refining, rather than coming up with brand new ideas.

I’m pretty glad that we had Regina on our team, despite her not being a developer, since she contributed most of the ideas and design. If there’s one thing I should learn from her, it would be the ability to present and speak in front of an audience with such confidence.

Decide the technology stack based on the team’s capabilities.

We went with Android development initially, but switched to iOS at 2am because the Android app just wasn’t working as well as we wish it would. Half of the time (which was a day) was spent on making the Android app work, and it could have been a smoother experience if we went ahead with iOS from the start. We really didn’t expect Android development to be such a hassle, but at least we got a working iOS demo up and running.

Many times I found myself useless.

This happens all the time after I finished fixing a certain bug, or pushed a new feature out. I’ll be left wondering “what else can be done?” It’s pretty easy to run out of things to do, but at a hackathon, it’s a free learn-fest. I am consistently amused by the speed that I am able to learn at, and how much I can learn in 24-hours. The context of learning is also different since we apply the knowledge to practical situations on the spot. The learn-by-doing principle kicks in pretty fast.

Similar to army experiences, I tried to make myself useful. I recall this phrase which came into my mind when I ORD:

Even if the most ordinary of situations, some choose be extraordinary.

Go beyond and find more things to do. If there’s one thing that I regret not doing is realising this earlier on. I could have gotten more done over 24 hours. I spent at least half of the time trying to figure out how else I could contribute.

These are the three main takeaways that I had from the hackathon. Despite our team not winning anything, I still think it was an enriching and fulfilling event. Or as we put it, it was an undeserved loss. :D There’s just so much out there to learn and environments like these are very well catered to train the mind to learn, and learn fast.

Looking forward to the next (BattleHack Singapore), and many more hackathons ahead!

UPDATE: We actually won TripAdvisor’s API prize. Didn’t know that until the organizers sent us an email. Yay! :D

Anyway, just another thought while on the bus today.

Ever tried, ever failed. No matter. Try again. Fail again, fail better.

That pretty much concludes what I feel about this hackathon. Here’s a picture of the team without Yiwen.

Photo 15-3-15 15 22 48


Build Character

3 days into 2015, and I’ve had two interesting experiences.

Jumpstarting a car.

This actually happened on New Year’s Eve. Darren actually forgotten to turn off his hazard lights after parking. So while we were happily having Korean BBQ, his car was flashing away. The battery was flat when we returned. It was our first time trying to jump start a car, and it wasn’t really smooth.

Why would I want to succeed on their first try anyway? Making mistakes is the way to learn.

Let’s break down what we have done, and what we should have done.

What we have done:

  1. Assume that we didn’t have the jumpstart cable
  2. Call a number provided by a random helpful stranger to change the car’s batteries
  3. Realise that we have the jumpstart cable and start stopping cars
  4. Not researching properly how to jumpstart a car

What we should have done:

  1. Turn the inside of the car upside down to search for a jump start cable. It has to be somewhere, right?
  2. Call insurance and ask what to do in case of a totally busted battery
  3. In the meantime (there were four of us), one of us could Google ‘how to jumpstart a car’

It all went well in the end, thanks to a pickup truck that, very magnanimously, aided us for half an hour, trying to figure out what’s the problem.

So here’s the proper procedure:

  1. Park cars next to each other, bonnets side-by-side
  2. Cease both engines, and put gears to neutral
  3. Connect the red wire to the positive terminal of both batteries, order doesn’t matter
  4. Connect the black wire to the negative terminal of the working battery first, then connect it to the flat battery
    (It doesn’t really matter how you connect the wires, so long as you clip onto the metal contacts of the battery terminals)
  5. At this point, if your car’s security alarm system has been triggered, turn it off with your key. Chances are you triggered the car alarm when opening the door manually with a car key.
    We spent 10 minutes figuring out why the car starts horning and ringing every time we connect the terminals. It was so annoying that a person shouted from the tenth storey in frustration.
  6. Start the engine of the working car, and rev the engine.
    Here’s the part I’m not so sure of. Since the working car already has RPM when the engine starts, revving it seems to be redundant.
  7. Wait for a minute or two before trying to start the engine of the flat car.


I think the major takeaway from this would be to know what you’re doing. Most of us didn’t know what we were doing and ended up looking stupid. At least this was a valuable learning experience for me. What a way to end 2014.

The next one, which just happened today.

Changing a lightbulb – well not really – a lamp.

How many person does it take to…

Alright I wouldn’t continue that joke. But my dad and I felt that the kitchen was too dark, and decided to install a new LED lamp for the kitchen. (It took the two of us)

The process of this wasn’t as easy as unscrewing and screwing. It involved saws, measuring, and figuring out how things work. In short it was an interesting DIY thing to do over the weekends.

The first challenge was the shape.

The previous light was circular, the new one we have is squarish, and bigger. Since our dropped ceiling is made of Gypsum Board, sawing through it was easy. We had to make sure we don’t saw into any electrical components or wires though.

Then we have the problem of circuits.

Similar to jumpstarting a car, live to live, neutral to neutral, earth to earth. But since we have looping, we have to twist a few of the wires together into a single splice.

The last problem was the design of the latch.

I should have taken a picture of the product.

We spent half an hour figuring out how does the latch on the side of the lights work. After slotting them into the sawed out space in the dropped ceiling, something has to hold it in place, or else you risk a lamp falling on your head.

We figured it out in the end, (trust my dad, he’s an engineer). The thought process was pretty interesting. It went along the lines of:

Right we gotta prevent it from falling out

But the latch has to stand up when we mount it, and latch on when we release it

Means there’s some spring action going on then

(pause… Magic engineering moment)

Here we go.

That’s really an over-simplified version of what we actually did. But I’m always amazed by my father’s problem solving abilities. Sometimes I ask why didn’t I inherit some of those?

Then I told myself, he probably didn’t inherit it from anyone either. It comes with experience and hard work.

It was rewarding in the end. The kitchen feels so much brighter now, and my mom was pretty satisfied with it. (YAY MORE HOMECOOKED FOOD! :D)

This may seem to be a really small, unimportant event. But I see it as a learning experience. No matter how small or trivial the knowledge I’ve gained today, it is still knowledge.

I feel that 2014 came to a great end, and 2015 started off really well. Experiences such as these builds character, and character is something that I’m still lacking.

Here’s to the many more experiences awaiting me in the year ahead. 


Semester Break So Far

4 weeks into semester break and here’s what I’ve done:

Shipped Ecomore Corp:

One of the greatest accomplishment is to see your crafted project go up online, even if there’s not much people viewing it. I’ve spent quite a bit of time making sure certain features work, and nothing beats the feeling of uploading the final product.

It’s not quite finished yet, there are still certain issues here and there, especially for mobile. (Now I know why people curse and swear over responsive web design, it really isn’t easy) Also, code quality. I believe my CSS is really messy, and that’s something to work on as well. I’ve put the project up on GitHub to manage issues, since I find that a very productive way of getting work done.

EPUB version of SICP:

After CS1101S, I’ve signed up for CS1010R, a 1MC research module that allows us to work on certain aspect of CS1101S in order to make it a better module. Being quite an avid user of EPUB myself, I decided to take on the challenge of creating an EPUB version of our textbook, SICP. The challenges that comes with this is:

  1. Our version of the textbook isn’t complete, so we have to make sure that it is easy to update to the latest EPUB version every time something new gets released
  2. With regards to 1, it means that the whole process has to be automated
  3. XML/XSL is a new thing to me, learning something so complex on the fly can be really daunting (It is, I’m still confused with how XSL works)

Nothing worth doing ever comes easy. This has been my main priority for the semester break.

iHouse360 tweaks:

What I do with the iHouse360 website is not amazing, but really developing an eye for detail. I’m tasked with settling some of the styling issues of the website. Also, it forces me to work with WordPress which even though I’m using to post this blog right now, I’ve yet to understand what’s going on under-the-hood. It requires me to learn quite a bit of PHP, so… I’m not sure where this would lead me. I’ve heard scary stories about PHP, most of it tells me to stay away from it. :\


Ahhh, my not-so-little side project. Remember I mentioned that I put Ecomore’s website up on GitHub to handle issues? Exactly, I figured that a better way of working on your side project is to create new issues yourself, and then fix them one by one. It’s like a to-do list, but a technical one.

It doesn’t only get work done, but also records them down in an organised way of how you progressed. Amazing tool, try it out yourself for any side projects of your own.

You could check out my progress here.

There’s my semester break so far, and I believe I have 3 more weeks to go. Certain things I should really get down to doing would be MIT 6.006, which I’m still stuck at lecture 5. I’m supposed to finish the course by this semester. Oh well, perhaps a break from academics would be better.

Time to binge-watch MIT-OCW.

Results, and a 2014 Wrap-Up

It’s the time of the year again. A time to look back at all the moments and achievements, also at all the missed opportunities and failures. But before I go into that.

Results just got released today.

I did pretty okay, considering that both of my As came from my CS modules. Well let me just sum up the semester since I have not done so yet. A little pre-summary of the year. What better way to do it than a module-by-module analysis again? Refer back to my previous post!

CS1101S: Programming Methodology – 5MC

Yep. This has got to be the most important module of the semester, and how much have I learnt since my previous post about this? Lots. We’ve dealt more with OOP, more recursion, lazy-evaluation and the killer topic which wasn’t really tested, the metacircular evaluator. The more I went into this course, the more confident I feel about my code and the thought process behind it. Some graduated from CS1101S with regrets, but for me, I have none. This was probably the best decision I’ve made as a freshmen. :D

The finals for this was pretty manageable, more manageable than the mid-terms and practical exam. Yes, I got an for this module, which unlocks the next crazy module I’m going to take, CS2020, a 6MC accelerated data structures and algorithm course. :D

CS1231: Discrete Structures – 4MC

Previously I’ve mentioned the importance of this module and how I’ve been pushing myself to take it seriously. All the hard work had paid off in the finals which felt really manageable. I guess the main concern about this course is the different type of mathematics that one would encounter. Like I mentioned previously, this module teaches you how to think, logically. An important skill and foundation for future modules, and will later prove to be very useful in life.

Yes, being smart will give you an advantage, but hard work would probably give you a greater advantage for this module. I think a piece of great advice on the Internet for this module could be found here. The amount of work I’ve put in rewarded me an A- for this module, could have probably done better if I had focused more, but I’m satisfied.

MA1521: Calculus for Computing – 4MC

This H2 Mathematics on steroids got pretty challenging as we got into integration. Not challenging as in difficult problems, but challenging in a tedious way. Lots of long workings which I’m pretty bad at, since I’m really, really careless. Anyway, it’s a for this module, and I didn’t quite expect that coming my way. (Was really expecting something better, S/U-ed this anyway)

LSM1301: General Biology – 4MC

This module taught me a valuable lesson. Don’t take another life science module in NUS, again. I’m really bad at these, and I don’t have much time to put in effort for such modules. I’ve prepared pretty decently for this module but got a B- in the end. Perhaps this was the reason why I took physics instead. I S/U-ed this, and the other two science modules I’m take in the future will probably be from Math department.

GEM1902M: On Blindness – 4MC

This is my Tembusu module and was ungraded by default. As the end of the semester was nearing, we watched several interesting movies and had discussion based on those. The essay assignment I wrote for this module sort of enabled me to think on a deeper level, and how to draw relations between different things in life.

I wrote about the relation between mid-life crisis and messianic time. 

In fact, the essay was formulated on an MRT train when I was looking at an elderly lady napping on one of the seats. It sort of gave me the idea that all of us are actually bounded by two different types of blindness and they grow in opposite directions/time.

So there I was, staring at the old lady while all these thoughts start to flood in to my head. Then during the seminar for our assignment workshopping, my professor pointed out to me that I could actually relate it to Paul the Apostle’s messianic time. And voila, I crafted out a nifty little essay with diagrams and graphs. Yes, I put in quite a bit of effort for an ungraded module.

There’s my 21MC worth of modules in semester 1, and the next semester I’ll be taking 23MC worth of modules. No more S/U safety net next semester, so it’s time to take things even more seriously (as though I wasn’t serious enough this semester).

2014 in a Nutshell

It has been helluva year for me. Let’s list down in order the major events that happened in this year.

  1. Exercise Thunder Warrior 2014 – New Zealand
  2. ORD
  3. USA Trip – Chicago
  4. Peru Trip – Machu Picchu
  5. China Trip – Three Gorges
  6. School Commences

I believe it’s the first time I’ve been to four different countries in a single year. It was really eye opening and exposed me to many different cultures. More importantly, it gave me space to think about what I really want in life.

Looking back, I’ve never really had an idea of who I really want to be, or who I was until the recent years. At least now I have this idea of who I want to be, where I want to be and how I want my life to be in the future. I’m really glad to have established such targets, and it is definitely motivation and fuel for my university journey.

So here are a few things I’ve learnt in 2014

You are smarter and better than you think you are.

Sometimes I feel that I’m surrounded by people who were damn smart. Way above my level. Only until I watched a Steve Jobs video on how beautiful things around us were invented by people no smarter than you are. That phrase stuck in my head, and in fact, gave me a large boost of confidence. I have a tendency to underestimate my own abilities, or in other words, I have a lack of confidence sometimes. I’ve been working on this for quite a while, and should continue to work on this in 2015.

Never say no too early.

There are many opportunities that come knocking at my door, but usually I turn them down to walk a ‘safer’ route. But really, where does this ‘safe’ route lead me to? Perhaps it’s time to step more out of my comfort zone and try something very, very new. I’ve made some effort in ensuring that I’m constantly challenging myself out of my learning comfort zone, but what about other aspects of life? This is definitely something to keep in mind for 2015.

Learn something new on a constant basis, and you’ll be surprised how fast you actually learn.

I’ve picked up several new things after I got into university, and roller blading is one of them. I skate for 2 hours every Wednesday. At first I was overwhelmed with all these thoughts of embarrassing myself. But as I progressed on, it turns out to be something so natural, and learning new tricks is fun despite the falls. I’m actually quite amazed at how much I’ve progressed in a single semester of weekly roller blading.

Of course, I’ve been trying to apply this to coding. I document some of the things I learn here, and would really like to do a weekly update of what I learnt as well. There we go, another goal for 2015!

Learn to relax.

I have no idea why this has to be a skill, but I seem to have lost the ability to relax. Just lie back and forget about school work, forget about coding for a moment. Probably the fast paced school schedule has drilled into me the thought that every second is valuable, and every second not doing schoolwork is wasted. Not a very healthy habit, let’s try to get rid of that in 2015.

So, there are my ‘sort-of-resolutions’ for 2015. I don’t like to call them resolutions because more often than not, they don’t get ‘resolved’. It’s good to keep something in mind for a brand new start though.

Not forgetting to live by the code I set for myself in university:

Be yourself, be free, have fun, and don’t forget to dominate.

Here’s to a better year, and better semester up ahead. Cheers!

Recess, and Code Golf.

It’s recess week! Also known as the week of pure studying for mid terms, at least for us CS students.

To start the recess week off proper, I attended a Code Golf session by NUSHackers. It sort of show me how detached I am from recreational programming. Lately CS1101S is getting more intense, and I’m often coding out solutions in JediScript, a neat little subscript of JavaScript. In fact, I’m more used to the JediScript library now compared to the usual JS things I’ve learnt before.

Code Golf has taught me something valuable though:

The people who understand their tools well are usually those who solves problems.

I’ve done JS programming for quite a while now, but I still couldn’t return the index of the n-th occurrence of string s in string t. But what I’ve really learnt were neat and elegant concepts such as recursion, order of growth and data structures. There’s still some missing dots that I’ve yet to connect. One of the ways I could do that would be by coding my own projects with concepts learnt from this module so far.

As Ryan mentioned I should probably fix my TicTacToe.

As always when I try something new (Code Golf), I had a feeling that I suck. Interestingly I always tell myself it’s okay to suck. So long as I’m getting better and I’m trying.

So yes, that was my ‘virgin’ Code Golf experience, and what I’ve taken away from a short 2 hour session of coding little snippets. :3