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

Week 4, and beyond.

Week 4 has just ended, and it’s 2 more weeks to recess week, 3 more to midterms. That’s really very, very fast.

Where did all the time go?

Newton’s first law explains this very well. I read an article recently about how the laws of physics can be related to productivity, and this is exactly what is happening. The ball is starting to roll, and I believe it’s only going to roll faster as time goes on.

I think it’s good to do a module by module reflection on what I’ve learnt, and let’s try to connect the dots.

CS1101S: Programming Methodology (5 MCs)

People who take this module are often viewed as ‘crazy’. It’s probably one of the first few ‘difficult choices’ that a student can choose in School of Computing. I believe I’ve written in my previous post that I had to go through an interview to make sure that I was crazy enough to take this module. This module is a game. We submit our code through an online academy called the JFDI Academy, and there will be regular missions and sidequests. This online portal will constitute 35% of our overall results. What I feel about this system is really simple.

It encourages you to do your work. 

What’s more fun than applying what you learnt in lesson to a certain task you have on hand? Previous weeks we’ve done 2D/3D graphics, along with curves and fractals. Along with really advanced analytical things such as order of growth, data abstraction and next week, we’re diving into RSA Encryption. This is one of the few modules that I’m really into, though it really frustrates me at times when I don’t understand what’s going on in the code. (That’s what professors/tutors are there for right?)

Oh did I miss out that there is a leaderboard? My logic for getting onto the leaderboard is simple. It doesn’t matter who is consistently on the leaderboard, so long as you make it onto the leaderboard in the end, you are the final winner. Such a ranking system is dynamic, and being on the leaderboard for once or twice right now doesn’t signify anything. Rather, it signifies who has been consistently doing work early, and participating actively in the discussion forums. It does not reflect solely on how well your understanding of the material is. There’s mid-terms and finals for that.

Value learning over results, quality of work over how early you finish your work. 

That’s what I have to convince myself for this particular module. Of course I have to at least score an A- for this module in order to do the next crazy module, CS2020: Data Structures and Algorithms (Accelerated) (6 MCs), next semester. But first we have to understand, then synthesise, followed by the results. :)

CS1231: Discrete Structures (4 MCs)

This is a module that (almost) every senior warned us about. Yes, it is difficult, it is something new, but it is definitely not something useless.

So far we’ve done proofs, logic and boolean algebra. Right now we’re at Set Theory. This module is changing the way I think about problems, and in fact about life as a whole. We’re essentially studying logic. The module is not exactly as mathematical as it seems, but then again, what is mathematics? It is a study of logic, of how we could use our brain to make sense of a certain idea. 

We’ve learnt in lectures that a set is simply an idea. You can’t see a set, you can’t feel a set, but you know that it’s there. If this is the case for mathematics, then mathematics itself is just an idea. We’re playing with ideas that may or may not even exist!

So far, this module has been about a play on words. How to make sense of mathematical notions and symbols in English. The crux of this module is to train how we think, to sharpen our logical abilities. How the hell is this useless?

MA1521: Calculus for Computing (4 MCs)

In a way, this feels easier than H2 mathematics. Or is it because this is just the beginning? Either way, this module is currently is simply calculus, and the mathematics that we’re all so used to. Differentiation and integration. Study, practice and you’ll probably do well. What’s new right?

LSM1301: General Biology (4 MCs)

This module is surprisingly fast. The lecturer goes through most of the slides every lesson, and always assigns us to watch the webcast afterwards. In a way I’ve been neglecting this module a lot. Not reading it etc. Some say this is an easy A. But I guess nothing is easy in university, and I’m not taking any chances with that.

I should probably start revising some of the stuff for this module :\

GEM1902M: On Blindness

This is a Tembusu Junior Seminar that I’m taking. There are lots of advices online about taking a ‘fun module’ every semester. This would exactly be what this module is about. Fun. 

In fact, what we learn has nothing to do with blindness at all, since blindness could really mean anything. We’ve read Fragments by Heraclitus, and Before the Law by Franz Kafka. In fact, what we discuss about in class is so broad and deep that sometimes I have a tough time connecting the dots. Maybe just an example (my favourite) to illustrate what we discuss about:

You cannot step twice into the same rivers; for fresh waters are flowing in upon you.

As we interpreted this fragment, or as anyone else would interpret it, it really has the notion of change is constant. The river is always flowing, and the water we are standing in changes for every moment we step into the river. But then, what happens at the very instant when our feet touches the water? There is no comprehension. What happens in that moment becomes the past in the next frame, but at that very exact frame, there is no meaning. In a way, it could mean that life has no meaning if you don’t compare it with memories of the past.

Deep? You bet, that’s the first lesson, but the next few lessons are on more solid passages. Previous lesson was on Kafka, and the next on another passage not as abstract as the one above.

Remember I mentioned about CS1231 changing the way I think about things?

Its usefulness can be seen in this module that I’m taking. How do I know if something is true? What implies what, proof by exhaustion, contradiction etc. In some ways, philosophy and mathematics are very related. Plato was a philosopher as well as a mathematician, so were Archimedes and Socrates.

I think based on the length of each module, you could see which modules I’m really interested in, and which few I’m taking for the sake of taking. :) But fret not, I have learnt that to make life easier, fall in love with the things you don’t like. This way doing work wouldn’t be a chore, but something enjoyable.

Oh and did I mention, I made it into my faculty’s basketball team! :D

Photo 5-9-14 22 13 52

Photo 5-9-14 22 13 44

The jerseys look really awesome, and 18 because I really didn’t have any preferences. I was so glad to just make the team. The competition is tomorrow, and hope things will go well!

I think basketball has given me a boost in confidence in whatever I do. It’s a sport that requires you to be self-confident. Taking wide open shots with courage and stability. Really a useful skill to have in life as well.

Side note: I think I’ve been studying too much recently, spent my last weekend in school finishing work that was piling up. I’m glad I did it though, my week was relatively more manageable. Basketball is somewhat a stress-reliever. Oh and not to forget, my suite mate installed a chin-up bar at the toilet door. Best. Thing. Ever. :D

Here’s to three more weeks before mid-terms, let’s go! :)