6/6/18, 1:55 AM: Computer Vision: Bundle Adjustment
In the application of computer vision in 3D reconstruction, bundle adjustment is the optimization of various parameters relating to the reconstruction. Most understandably, we might want to optimize the 3D locations of viewed features and camera positions from a stereo reconstruction.

Optimization
Optimization implies that there is an error to minimize in a system. In this case, the system is the 3D reconstruction, containing all of the reconstructed points, and for simplicity of explanation, two camera positions that viewed the reconstructed points. The error in the system is a little less straightforward to explain.

To compute an error in the system, we must first be able to make a measurement, and compare it to an observation. The measurement to be made here is the triangulated position of features viewed by both cameras. Via triangulation, a 3D position of a feature can be found, given the location estimates of both cameras, and the bearing of the 3D feature from the cameras, obtained using 2D image coordinates. Several of these 3D points are measured, by iteratively matching 2D image features, and then triangulating their 3D positions. The 3D point locations are computed assuming the matches, camera locations, and 2D image coordinates are accurate, which they are exactly not, and this is where the error arises. How the error is measured is fairly straightforward. The (probably inaccurate) estimates of camera poses are known, and their calibration matrices are known, so their projection matrix estimates are known. One may then project a reconstructed 3D point back onto the image plane of both cameras (one at a time for now).

Certainly, because of the assumptions that the triangulation process makes about the accuracy of the parameters passed to it, a 3D point reprojected back onto the image plane will not lie exactly on its parent 2D feature. This disparity is called the reprojection error and it is the error we seek to minimize. This reprojection error is summed up analytically for all the 3D features seen in all camera frames, a bundle of camera frames and hence it gets its name, bundle adjustment. The differential of this function is then the cost function, and is used in a minimization problem. For the curious, this is a task well suited for an optimization library, something like Ceres-Solver (BSD licensed), by google.

Parameters
In order to obtain the cost functor for one observation of a 3D feature, the following parameters are required:
1. Focal length
2. Distortion parameters
3. 3D View pose (translation, rotation)
4. 3D Feature position (translation)
5. 2D Feature position

The first four parameters are for computing the projected 2D feature position on the image plane that had observed the 3D feature. The last parameter is an immutable (unchangeable) parameter for comparison, and computation of the reprojection error. Detection of a 2D feature is the least unstable, and is thus used as some kind of ground truth to compare the measurement against.

A unique observation is made when a camera sees and recognizes a 3D point in the reconstruction from the 2D features in the image it contains. Hence, for each 3D point that is seen by each camera, an observation consisting of a unique combination of the above parameters exists.

For example, 3 3D features are seen and shared by two camera frames. Then, 6 different combination of the above 5 parameters exist.
5/3/18, 11:23 AM: ORBSLAM2: First look
That is the reconstruction of my office hallway using ORBSLAM2. 
ORBSLAM2 is an open-source vision slam implementation with a General Public License (GPL), meaning anyone may use the software for any purpose (and other things). There is some considerable set up involved to get it to work, and you need some idea of compiling c++, and I did all of it on VirtualBox running Ubuntu 14.04, and a native Windows OS.

Note the "double-vision" effect of the points near the bottom of the reconstruction. The batch adjustment algorithm would take care of that if I continued walking around a bit more.

The supposed scale-drift effect as described in the ORBSLAM2 paper by Raulmur cannot really be seen here (partly because I don't have a ground truth image) and based on my own estimation, it looks accurate. This is because I took care to make proper reconstructions while moving the camera. There is probably room for innovation in a method to move the robot such that proper reconstructions can be done. Alternatively, a stereo set up may be used to obtain depth information, as Raulmur also suggests.

Besides the scale-drift problem, in order to make ORBSLAM2 useful, a way to save and load the map created by your motion should be available. One application may not require simultaneous localisation and mapping, once a reliable map has been constructed, only localisation is needed. A robot can then be configured to be more specialised for other tasks besides SLAM. Since this implementation runs a multi-threaded process, a separate thread must be created so as to not interrupt  the other threads running in the background.

Getting the coordinates of MapPoints

There are a few methods that will help to get these coordinates, and I have listed them here.

GetAllMapPoints() is a method of Map that returns a vector list of the pointers of all the MapPoint type objects that have been created by the program and visualised on the Pangolin viewer.

GetWorldPos() is a method of the MapPoint type that will return the absolute coordinates of the object in a cv::Mat (OpenCV matrix) object.

With these in mind, after setting up a thread for user input (including syncing it with the other threads, this is actually the hard part), getting the 3D map information should be a matter of conversion from list of MapPoint objects, to list of cv::Mat objects containing just the absolute coordinates of all 3D points.

It is also worth noting that if the goal is to reuse the MapPoint objects, it is necessary to check how the Map is initialized, so the load function may initialize the Map.

Further, the default initialisation causes the Tracking thread to start initializing. However, once a Map is loaded, we want the tracking thread to start by relocalization.

Saving Coordinates

Usually this wouldn't be an issue, but ORBSLAM runs multithreaded, so a new thread might be necessary in order to process user (or other programs') input, much like the pangolin viewer. To simplify this, for now, placing the save or load functions in the initialisation and shutdown respectively might be more efficient.

Saving MapPoint Objects

I did not expect this to be a problem, but since the tracking, mapping and loop closing threads need MapPoint Objects to work, it is necessary to save all the information that they carry, in order to reuse them in a Load function later. After some searching I determined that the best way to do that is through the Boost library. For some reason, the boost documentation did not specify which libraries to link, and I had some trouble compiling the demo program.

In the end, I found here that the library flag for boost/file_system is -lboost_filesystem-mt, and by a bit of trial and error, since I was trying to use the serialization library, the library flag to use is -lboost_serialization (American spelling) and tadaaah it works.

I used:
g++ source_file.cpp -l boost_<relevant_library> -o target_name
There is also the option of using CMake to help to find your package, which, if you know how, is considerably easier. Using the find_package(Boost REQUIRED) command in CMake, the libraries and include directories are easily found.

TODO: how to use CMake.

After getting the boost libraries to work, we need to get boost to help us save and load the Map or MapPoint Objects - whichever is more convenient. It seems now, based on my understanding of boost, that it would make sense to just save the entire Map object. Initially I thought that boost would not be able to detect pointers, and try to serialize them (which doesn't make sense, because pointers just contain memory addresses, and not the more valuable information), but after looking into it a little more I found that the boost library is more intelligent than I initially thought. Boost will be able to identify pointers, look for the Object that it is pointing at, then serialize and track it. Boost knows what object it is looking at based on the address that it was taken from, and will not serialize and archive repeat objects.

So this means, in an object of class Human called brian, containing pointers to other objects of class Car and class House called car_ptr and house_ptr respectively, even though car_ptr and house_ptr contain addresses rather than the actual objects, Boost will look for the object that lives at the address given by the pointers, and serialize them to be archived.

So one tricky thing is that when you want boost to archive a custom something, you need to give it access to the information inside the object. This is done by sticking this member function into the class definition

// Allow serialization to access non-public data members.
friend class boost::serialization::access; 
// Serialize the std::vector member of Info
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & member_variable_name_1;
ar & member_variable_name_2;
ar & member_variable_name_3;   
}
serialize is a function used by Boost when you use the operands "& ", ">>" and "<<"  to store/retrieve objects from archives. The first line gives Boost access to all the data, private and public, declared and stored in this particular class of object. You can choose to serialize multiple member variables inside your object, and omit several as well.

I am still unsure what happens to the member variables that are not saved when the entire object  is reloaded at a separate occasion. I assume they will default to undefined values, can test this tomorrow.

Further, since Boost looks for the object that is referenced by the pointer (car_ptr and house_ptr from above), this means that the referenced object must also contain a serialize function, and each referenced object within that one, and so on. According to this, if your class contains a non-primitive object (things that aren't defined in the standard library), you have to add the above code to the definition of that object as well in order for it to be serializable. This implies that for all objects that Map contains, I have to add the serialization function in their class definition.

This way Boost will be able to save an ENTIRE complex object to an archive - including the pointer references, and reconstruct the saved object in its entirety, in a different time and place. Ideally, I will be able to save and reload the whole Map object this way.

The next step would be to investigate the relocalization (American) process, and find out how to start the SLAM with a relocalization.
10/24/16, 9:47 AM: Cheers mates.
this is it. i got what i asked for. every minute, every moment, every sweet and thoughtful conversation, to every confused, irrational, fearful exchange. as much as i hate to say it, it was bound to happen and i knew it deep down and perhaps, in some way, it was a self-fulfilling kind of eventuality. i'm such a moron dammit. its kind of funny, in a sort of twisted self-loathing kind of way. i compared it all to skating and climbing and all the other things that you can just grind away at yourself. woop big surprise doesn't work that way. and dammit. fucking dammit it hurts so bad and doesn't go away. there's a whole lot of self-doubt going on. and much more i can't even pinpoint. lost the friendship, lost the trust, lost the companionship... my fucking big mouth. i hate my stupid shit eq, lack of cool. god dammit dammit all dammitdammit.
11/3/15, 10:42 PM: what's your crisis?


Maybe sometimes we spend too much time seeking happiness, we forget to just be happy.

I need some time to think. I want to leave some things in my record I realise, so I can pick it up and think about it later.

I do have some things in mind.

These days I find myself fearing what others think of me. There seems to be a few ways to go about it - and a lot of grey in between. Cast it aside, tread boldly my own way. Pick up from what they say and change accordingly...

I have no time right now. I'll be back.
10/21/15, 7:22 AM: well, hello.
Hmm...

A lot has changed? Or maybe you could say nothing has changed in the grand scheme of things... Or maybe more accurately you could say things have been changing recently. I always get the temptation of going back where I came. There is comfort in the thought of the tried and tested. It is an ever present fear. When what you're trying just stops working, you want to make a reversion.

I tell myself that there's no way back. All you can do is take comfort in the thought of what was. There is greater certainty, with what experience you have now, compared to what you had, that there is more pain ahead, but also bigger lessons to learn from.

to my surprise... it seems to follow those who seek it.

Looking back, I can tell you how functional I was, how many good decisions I made for myself. But also how cold it felt. It could be, the beginning of uni gave me a start point. A place to make some daring changes. Daring by my own standards.

I'm not sure if this could pass of as a confession, but often I am confronted with a scary thought. I don't have an affinity with people. It's true. It's a defining characteristic of what I am. I don't manage to appreciate everyone me all at once. Sometimes it almost feels like I only want to be near people I can benefit from.
3/5/15, 12:52 AM:
I hope nobody takes pity on me. No one should offer help. Don't offer me your hand because I won't take it. I don't want to be weak. Don't waste your time on trivial things. There are honestly, better things that await you.

I just ask that you share your opinion, and I will share mine. Then maybe we will both take a piece of each other and incorporate it into ourselves. I think it's important to see the world through the lens of others and get the aggregate perspective.

I should consider others views and change how I act and how I think about things.
2/14/15, 10:33 AM: post powered by caffeine
How often does one get the opportunity to set a club's mission hahahaha

aahh i love the weekends, because it gives me a chance to stop being who i want to be, and be who i am now. That means i get to be close to everything i rly love. its funny how who you want to be seems like such a masochistic person. it is kind of schizo isn't it.

i start to question why i'm doing all this though. what's the point of the thrill. if in the end life becomes just a personal investment then i've neglected a whole other dimension with all the people in it

But i love climbing luh. i like its philosophy. when you start climbing everyone tells you that no two people are alike and will have different muscle groups more developed, or different levels of flexibility, or have better balance or planning. no two people will succeed at a route the same way. climbing sort of acknowledges this and it makes me feel at ease.

i kind of need this monologue to justify climbing -_- hahahaha.

whoa gotta i have a date w the wall :B

12/15/14, 10:44 PM: As much as possible, do things
Whether you like it or not, eventually you're gonna have to make some contribution to society. I guess you could become reclusive and become a hermit. Grow your own food, listen to the birds, watch the stars :/ But where's the meaning in that. Sure, its human to wonder, to wander, but at some point, to be able to ponder should lead you to think and at least empathise with the problems that somebody else has to handle. Am I being too fluffy about things? I don't want to be. Point is, it's one thing to think about things, and its another to be apathetic. Escapist even.

Escapist is a word that if used correctly could bring me to tears. I've been called that more than once, in different sentences with different words, but I get the gist of it quickly. I can recognise its familiar face in a cloud of words, because I see it in myself sometimes. My problem is I find myself innately unwilling to help. It takes effort to want to do something for someone (I read somewhere it's got to do with loving people). I guess some may say that it's natural to feel the inertia. Like panting when you run. And I get it. There's some kind of self-gratification mechanic at play here, do something for someone and you feel good yourself. But to me, I second-guess whether my contribution made anything better, or made any difference at all. I always thought I lost my empathy... Maybe I'm just fearful. Or not empathetic enough. Maybe it doesn't have to be a guessing game. For the people who lack mind-reading faculties, it probably would be a good idea to spell out the thoughts in words. I wish people just spoke their mind.

1. fear less
2. ask more
3. fewer surprises.
11/9/14, 12:20 AM: we live in a big green forest
I discovered something new I think.

It's something good.

Maybe I'll be judged when I say I've rediscovered a new expression of love. Let me first describe what I feel. Maybe you can take a guess who I feel this for. And chances are there it'll be applicable to a lot of people, and I'm regretful that I have not noticed earlier.

It's not an overwhelming feeling of want, or need anymore. I don't feel a sickening craving to see, or meet or talk to or interact with them. But every time we meet I can't help but wonder why I would ever part with them. Because I feel I own the goddamn world with them. I feel safe enough to reveal my truest self, and cure my darkest parts. It doesn't matter if only two of us meet in the cozy embrace of the night, or if we decide to congregate as a pack and roam the quiet streets. Words flow, and stories lace themselves into our regular encounters. It makes me feel like we are old friends, older than ourselves, beyond ourselves.

I'm embarrassed of them sometimes, how I behave with them makes me feel self-conscious. In our truest image, the deepest wounds surface and I can't help but gag when I see them, mine and theirs. Maybe we all have knives in our backs, but we can't see our own backs. Or maybe we're punctured by the same stake, hurt by the same weapon. In recent weeks, I have struggled with this, but I realised it is no struggle if our love is true, and we are willing talk to set matters straight.

I can't leave these people to suffer because I have them in my heart. And they can't leave me.

I strongly believe that my relationship with them is less like a garden, but more like a forest ecosystem. Self-sustaining, persistent, growing. We may leave the forest to explore sometimes, but when we get back it will only be greener.

Some may look into our world and criticize, and impose an image of blight upon my paradise, but the truth is known among us, and if our intentions are pure, pardon my naivety, my childish inflection, but mind your own business. I will not let the view of others twist our point of view.

At this point I find it absurd as to why I even considered the observer's opinion.

My dear friends. I don't know why you worry. I don't know why I worry.
8/5/14, 12:43 AM: A long time. A lot of stories
It's been real long.

I don't really know why I stopped writing. I'm not sure who else still writes. But I think I want to write.

Life is real different now hahaha. I used to refrain from using "life" cos I thought it was cheesy and unreal. Because who are we to judge life when we've only seen so little of it right? Wrong. What we've seen is all of what life is from our own view point. And it is completely okay to be selfish about it. Life is for you to judge, just like how life judges you.

Just - be fair in your judgement, be just.

How has life been different?

Well, for starters there are girls around that take notice of me hahahahaha I can't help but feel flattered. And a bit vulnerable. To making false choices, bad decisions. People talk and you hear things and it's hard to handle. I don't want to hear false things. Opinions, rumours. It's a nagging pain tbh. And yet I do not want to be alone anymore. I don't. Distortionary is what they say in econs right hahahaha. I guess you could say I'm adjusting. I've never let myself be open to the idea of seeking companionship before. So this "seeking" is new. And I can say that I'm handling it. On the job learning. Earned myself some scrapes and bruises. And more in time, hopefully no lost limbs; None so far.

We learn along the way. If you found it easy, then you're doing it wrong.

Okay girls aside, overall perspective now - how do you have an honest relationship with another person? Sometimes I don't know if I do something sincerely or out of empathy or out of kindness. It gnaws at my heart. Because there are so many instances where I REALLY don't want to do the right thing, but I do it anyway cos its right, and suddenly I'm at odds with myself.

The reflex action is to squirm out of it. Escape route fashioned out of lies and sugarcoating. In my book, it's very wrong. Blackens the heart and soul, but everyone else walks away unscathed if done correctly. The right way? Or the truth? The truth can be awfully awfully brutal. Instantaneous blunt force emotional trauma, or a virulent disease that stays in the system for a long time.

I guess you could say some things have remained much the same. The lonesome spirit is hard to change hahahaha. I can't say I don't seek camaraderie though. I don't want to be alone, but not all the time. The more I seek though, the more I cherish my existing friends. This one is hard to make friends with. An oddity.

5/13/14, 5:24 PM: Happiness is rare and precious
5:23 PM: My soul was saved on the 7th of May
Just a split second later and I could have tainted my soul blacker than anything I can ever have nightmares about.
5/17/13, 10:57 PM: sure is silent in here. like warehouse-y silent.
almost can hear the echoes from off the post borders.
anyway here's an image

5/12/13, 3:44 AM: "1, 2, 3, 4, 5, 1, 2, 3, 4, 10, 1, 2, 3, 4, 15..."
And it lives!

Odd time for a blogpost but I feel like it so there. Okay lets see recent highlights...

I normally take pride in being an independent soul. It's not the best method, in fact often times I wonder what i'm trying to prove. Then I realise i can't really help it - it's grown onto me. Wherever I go I end up the odd one :/ I'm the odd one. I hate being the odd one but I can't help it. Or can I? I'm thinking there's gotta be some changes around here *gestures to self* Done it before :s prolly could do it again. Just a little reprogramming.

People say you're supposed to learn something from all this sh*t I've been a part of for close to a year and a a third. Can't say I learned a lot. Say what you will - Damien isn't paying attention, can't make accurate judgment, can't read people etc. etc. - the following is as much as I was able to pick up.

1. the DO SOMETHING eqn: Planning + Compromise = Execution

or something of that sorts. Things seldom go according to plan. Okay the equation isn't all that important. I should say the focus is to really DO SOMETHING. And to DO SOMETHING you have to have a plan, and have the guts/willpower/resilience to carry on doing it even if something goes to sh*t. I find very often people put things off because of a little difficulty or roadblock. If things are to be done then we need to find a compromise. Of course this only works for individual to small group planning. Cos any larger and the compromise component multiplies per individual... (stop looking at the equation it doesn't make sense). I mean there's more resistance to compromise per individual, more opinions. Hence the system that gives shitty planners the ability to override people down the hierarchy.

okay how bout this: Planned Benefit + Benefit loss from Compromise = Actual benefit

HAHAHA I don't know - it's 3 am.

2. What (not) to expect from a leader - I mean this from a (micro?)management pov

Leadership(not) qualities:
Dictatorship - "No, because - no."
Tardiness - "Do not be late, I won't be there early to check."
All stick no carrot - "It's your duty what."
Not there for your guys - "When the shit hits the fan don't look for me"

Okay I'm quite certain there's more, but that's all I can come up with right now. And I can't find a good phrase to describe "No. Because I don't want to explain why we did this to my equally unreasonable superior."

3. Something's wrong with our guys, our country.

Some opinions I gathered were:
"No choice, must defend."
No means to leave :/ can't leave family behind. Not enough cash.

"If sg is hit, I'm out of the country"
Yes means to leave. Some extended family already settled overseas can provide accommodations. Have enough cash to pull family out etc.

I think those are pretty realistic opinions. Rather than "I love my country." Patriotism is rare in this cynical age. Or if cynical is too harsh/biased, I guess you could say people have more resource to judge and make a realistic opinion. And also the option to leave the country is becoming more and more available to people. "because this is where I grew up" just isn't enough to keep people around anymore. People are becoming real globetrotters these days. In the end its very likely that after finishing education we're all going to stay elsewhere (what's a fifth of our lives anyway) make a couple visits a year to see relatives and convince them to go over as well.

Me? I guess I'd stay... and fight also. It depends on who hasn't left the country. If my family moved (+ my extended family) and if my close friends didn't stay (people on facebook who have a gazillion friends prolly would have some explaining to do, luckily I label them as acquaintances) then i wouldn't stay and fight. Otherwise, I'd stay. Stay fight and die? For a country that's barely ours? Sg has a problem building up patriotism for the country, she has to kind of hold hostage the loved ones of the nsf, assuming one nsf is a loved one of another nsf, this would result in a giant web of loved ones held hostage and thus the civilian army is born.

What I'm saying is: I'd stay for my loved ones. It'd be great if every nsf is patriotic and fought because he loved his country and because this is where his roots are, but for every other ns guy, I hope he thinks the same as me. Cos its the only way to think if patriotism is dies here :/

CALL ME A PESSIMIST. I'm walking on a line though, between reality and pessimism I think.

That's it for the NS talk. Not really fond of getting charged if my words are wrongly interpreted xD no one really walks by this corner of the interwebz anyway huh.


And on a different note, I got my scholarship offer from SUTD :DD
*GAASP* No one's ever paid me to study before c':
A nice lady came down to my house and handed me a plaque sort of thing and all the documents personally. Really sealed the deal on this one. But when she left I can't help but get the feeling that she had doubts about me. Could just be me... but as she walked away she asked "you must have did well in your interview right?" And also I was kinda quiet while she was talking to my parents and myself for the half hour duration. But in my defence I already knew most of what she was telling them because I did research for my interview hahaha.
3/30/13, 7:22 PM: I should use my blogposts to map my high/low points
These couple of weeks... months have been low points.
2/2/13, 6:38 PM: A lesson:
Some fuck-ups have good explanations.

Some fuck-ups don't.

Next time something fucks-up, and you're on the recieving end when the shit hit the fan: maybe it's not such a good idea to throw the culprit in the pit and burn him alive before he even gets to realise he made a mistake. You might just have killed a stupid friend.
2/1/13, 11:31 PM: sigh my speech betrays
I don't like squirming. It's not pretty. Yet I do, and it's... not pretty. I had a good look at myself in the mirror today, and it struck me... I'm old. 20 years old :/ look at myself, look at others - all that jazz. I'm still not settled with myself. No passion, no luck, no mature words, not thinking about others. Just; Me. Still a mumbler, still lonesome. With familiar faces I become a boy again. Act the same way in front of others and I get strange looks.

There seems to be no general equation when dealing with different people - and its confusing for my brain. I can't. I need something consistent, but i hate getting on other people's nerves.

Here's something I think I need to spill. The reason why i keep organising jc class events - is because i'm afraid if I don't i'll not get invited to gatherings of their own. And sadly there's some truth to that. I predict, if i simply don't do anything from now on I'll simply never speak to my jc class anymore. I'm THAT guy. What's more - I'm OKAY with it. It doesn't actually matter to me. So what kind of person does that make me?

Agh this is freakin' ridiculous.
1/17/13, 11:58 PM: 24, to 26
To unit 26:


Hey there! Its me Damien, your neighbour from unit 24. And I guess you could say the rest of the family too. On their behalf? Hahahaha.

I hear from Pamela that you guys are going to Australia soon. That's great! Big change is always exciting. And whoa Australia... beautiful place, and I'm guessing a less gloomy populace xD

~The "could've/should've/would've" effect.~
Okay actually what i'm getting at is that i'm a little guilty that we haven't been really good neighbours with each other over the years. And losing something has a way of making one realise we hadn't treasured it enough. We could have smiled at each other more. We should have invited each other over when we had the chance. We would have made even more awesome neighbours!

Whoawaohh. I'm not saying we weren't good neighbours. We were! But life would be so much more awesome if we put in a little extra effort. Maybe it wasn't our fault. We lost it somewhere among the piles of work that needed doing, the tears of growing up... And the house. It's so BIG. So many mouths that need feeding. So many bulbs that need changing. So many floors that need cleaning, walls that need a fresh coat of paint (admittedly we haven't gotten around doing the painting.) but you get the picture. Its so stressful :/

(okay to be fair, i should probably also address that many times i feel like i belong to a family who are morons with the spoken word; myself included. In other words, we're an awkward bunch. We want to be nice, but you know, its awkward, and my dad admits it too. I could almost picture myself reading this letter aloud at your porch. Yes, drink it in, all of the searing awkward pain. Thankfully i'm much better with the written word, albeit not significantly so. [In fact, most Singaporeans are - which is why we need those reserved seat signs on our trains and buses - because people simply don't want to interact.])

Its easy to forget the good days, before the sad slate tiles started popping up, before we had anything much to worry about, well at least for us nosepickin' young'uns. Hahaha all of us would come out just before dinner and play. So fun xD. I miss playing catching, AEIOU, hide and seek, red alert, burning lanterns and m&ms, playing christmas games with you guys. Awesome. I wish I had pictures to remember, but the memories work just fine too.

Sadly Lion has grown old. Achoy passed away, Socks and his(her?) family has moved away. And now you guys are going :/ Its a lot to miss if you ask me. Is this a soppy letter? Yes. Is it necessary to write it? Yes. Because you guys were part of a large chunk of our childhood, and that deserves some kind of remembrance. And remembrance means there has to be some degree of soppiness to this letter.

So for the mango tree that is now gone, our baby teeth that once was, sundae the noisy little prick that is no more, the over the wall conversations we have, the nights we spent wondering when the party next door is going to end because we want to get some sleep,

THANKS FOR BEING OUR NEIGHBOURS. WE LOVE YOU.

Yours sincerely, 24

From Melody, Damien, Erica, Joseph and Charmaine.
To Benjamin, Pamela, Joseph, Steven and Juliana.

Of course, my family has its reservations about this letter, so i'm writing it in secret, (refer to bracketed paragraph about awkwardness) but rest assured, they really do feel the same way, just way too awkward to tell. They're also a bit envious, about how you guys have the courage and the momentum to step away from the familiar.
12/29/12, 6:01 PM: overly careful aunty and 5 other little things
Hahahaha every now and then I run into those aunties who seriously siam when I'm cruising by on my bicycle. XD it's amusing every time. I'm thinking the overreaction is to spite me. Cos when I look back at them to apologise for using the pedestrian path I catch a glimpse of her face scrunched up angrily :/ no need for that right? C'mon spore faster build finish all the park connectors. If you're all done then I'm very disappointed.

There was a little cat outside my house. My dad and I brought it in and it ran back out and hid under the car. My sis fed it milk, my dad put it back where it came from. It was a really cute cat. No pic cause I was in the middle of a game and didn't remember to take one :c

I went rock climbing again with a stranger xD. Can't say it wasn't an odd experience. Can't say why I did it. Cos I really don't know. It was awkward, most certainly. But it was also definitely fun hahahaha. Will do it again.

Lol xbox360 is wickedawesome. Borrowed games from my friend Ben(odd guy, cool guy, ask me about him! Don't. will describe l8r). Red dead redemption, halo reach, dark souls etc muahahaha. I gotta say though. I kinda neglected a lot of real life things hahaha. Guilty!

Christmas and Christmas eve parteeeeeeeeehhhhhhhh!!!!!! My younger cousin 2yrs my junior just got a girlfriend. AND IS BRINGING HER AROUND FOR OUR FAMILY GATHERINGS XD. In case you're wondering how it's like well you can stop now cos I'm telling ya. It's a big box of awkweird delivered freshly baked to MY DOORSTEP hahahaha. OK DAMIEN stop judging and stop being jealous. (Forever aloneeeeee)

Well but besides that I had my friends over and as usual there's a girl boy divide in the class. Which at second glance is kind of odd because you know hey don't the guys miss the girls seeing that they spend all day every week in the dickfests that are our camps but then subsequent consideration makes me realise that heyyy... it's our class. They haven't changed. Whoahwhoa. Second and third? The first is the intuitive solution that assumes the class has been the same all along what.

Now I remember that I was complaining about my face. And how it reeks. I've been practising and I think it's working. I was at Starbucks the other day and as usual I practised my over-the-counter -smile-to-get-slightly-better-service smile. And as my luck would have it, she was a pretty young lady receiving so my knee-jerk reflex was to smile a little wider. And that's whew it got weird. She shot me a strange look almost raising an eyebrow. The poor, now embarrassed Damien had to fake being normal while she prepared his java chip with whip cream. Geez my smile went too far hahahaha. I thanked her again and received my java chip which was covered in fudge in excess and then her own ridiculous smile. Confused, Damien took his drink and left.

Maybe I'll have Starbucks a little more often? XD
12/11/12, 10:28 PM: oddball
Shooting's real great xD. 4th among the hundred shooters participating in the army shooting meet. Encik says I'm on my way to the shooting team. Which is great! 'what luck', you know. I'm just super lucky when i need to be hahahaha. But you win some you lose some.

NS' still pretty damn sickening now. Feels like that point in conversation where you've got nothing more to say to your conversational partner but you're still stuck with'em for a long long time. that kind of thing frustrates me.

Soooo frustrated...

I guess shooting's gotta be my thing. It's the solo sport where the only thing that counts is the little dot where your chambered round is eventually gonna land. No 'team', just my gun and I. Kinda resonates with photography a little raight? It's a... quiet sport.

Told dad that i was surprised i made it to fourth place in the controlled practice rounds. He says I should be surprised - surprised I ONLY made it to fourth place hahhaha. Shit mah dad says haaha.

Its pathetic la. To be overly empathetic. Mustn't underestimate others' ability to struggle. Insulting. We are all fighters.

+
-