Showing posts with label CS3216. Show all posts
Showing posts with label CS3216. Show all posts

Wednesday, 21 November 2012

CS3216: Mission Complete

It's over. Another chapter closed. So much to say, so much to think about. Even though there's so much to do, still must post, to find closure for myself. This post won't be truly coherent, I'm going to just write here what comes to my mind.

Well, can't really say mission complete. It wasn't really a mission in the first place, it just - happened.

But through this course, I've really seen a lot, gone through a lot, had moments of real happiness and also severe unhappiness, even depression - where I sort of hated everything that was happening. All thanks to my friends who saw me through everything, that's why I'm still writing about CS3216 and this late hour...

I remember at the start, when it was just the first week or so, and we got our assignment 1. My friends were saying "what module wants you to have a project completed by week 3? school hasn't even barely started!" Indeed many of them asked me to drop this module and concentrate on the others - such as FYP. Such is the camaraderie amongst chem eng, but yes, we are engineers and we are so damn practical - attempts at what you do should to be feasible with your resources. (to any people reading this, I repeat for the nth time - I am NOT from CS). So I got hooked on app development (i was thinking "seriously I'm going to write a FB app? no way this would be possible").

Assignment 1 (Let's Goal) was characterised with many late night stayovers as we coded in COM1 basement at 3am on Saturday mornings, followed by all those workshops in the afternoons. Endless seaweed (actually limited) provided by yujing and yuling was the main stay for me (maybe?). I still don't like my design for Let's Goal, and we really need a better UI. Sadly my assignment 1 groupmate shaohua left the module by assignment 3.

Assignment 2 - the 20s slides that was incredible to watch and impossible to finish. characterised by weird random meetups during assignment 1, and one strange session in the library where we practiced in the discussion rooms.

Assignment 3 (CrossView) - sometimes after I code too much here, I call it cross-eyed. A project with kianzhong whom I worked with once in RH, when I was still damn new to PHP. REST server was fun to do, but connecting to the REST endpoints as a app was messy. VERY messy. I just remember the crazy index.inc.php and kz's "i don't want to do already, i want to drop the module". Same thing, late night coding sessions in SOC. First time I didn't sleep in 1 day.

Thus recess week disappeared. At this time I was really panicking about my FYP (or lack thereof), since interim report was coming soon. 4 projects from my chem eng modules were coming up back-to-back / overlapping, and I still had FYP to do (SUPER IMPORTANT since it'll be possible veto for my honours class ><). At one point I had 6 deadlines in 1 week (midterms, projects, 3216 deadlines).

What to do? Press on with it. I don't know how I survived. Till this date, I don't know WHY I am in this course. I mean, HOW ON EARTH did I get in?! Did the filters not filter me out as one of those who won't be able to take the pain? Cause I don't think I can, and I don't think I did take all the pain till the end. I'd hope Colin or Su Yuen can enlighten me on this (if you read this - or I may go bug you on fb once everything's settled) on what element in my essay made you accept me. Really curious.

Back to topic. Final project. I was very uneasy about joining what came to be Mini Monocle. Afterall, CrossView was interesting, and Project Genius (as initially what the group was about) was intended to be an ipad app. No iOS development history, no idea what's happening, and we had 5 people. Felt very uneasy, like I've stepped into "wrong territory". I told them, I can leave if we can't have 5 people. The twins told me "no we're staying together". Still felt uneasy. Set my mind on learning iOS and making myself useful.

So we set about planning for the PG app (the acronym is ironic isn't it). But the idea got thrashed on the first consultation. It was too elaborate, too complex, and going against existing players with no idea what's happening on our end. Project Genius framework - scrap that..

Fast forward. PL1 not open, no Macs, obtain OSX VM. Started installing onto hard disk, then when I got into xcode - I thought "what?". I was totally lost as to how to code for a mac (haven't done C-related coding for 1 year)

When we got the Mini Monocle idea, we were at Katong, at Kai's parents' music school (Millet Music). Parents told us they didn't like Angry Birds, Temple Run and those brainless games. Which I rather agree for kids, but not for us. Spent one afternoon after that to look through the feedback and coming up with program features and even some simple concept art. That was when we came up with "Mini Monocle".

Still felt uneasy. Tried to figure out what iOS apps are built of. The NS prefixes, the views and controllers and their terms thoroughly confused me. After I started doing the database, I realized that the programming concept was somewhat parallel to windows forms programming (i.e. stuff like visual basic lol). Felt a bit better about iOS.

(going to bring out all the issues - to try to settle them once n for all - hopefully to get the closure that i want, and maybe move on)

Then came the first bombshell, at least for me. We had initially decided on SQLite as our backend, which seemed somewhat complicated. I was determined to learn it though, but suddenly I was told "we're using core data". I was suddenly very VERY upset. I suddenly felt like I wasn't part of the group, but just an extra pair of hands who could do coding. That sapped all my energy and I didn't talk to the rest for some time. It was a rather terrible experience to be already trying reading/learning something complex to fulfil your part, then suddenly to be told that it was decided by your group members that we'd be using something else. Just couldn't take it, and I sort of snapped. Maybe as stress and self-expectation builds, the trigger to break it all up was as simple as those in quotes above.

At this point, I was just being an idiot and resisting for the sake of principle instead of logic, cause I was really upset. So eventually we figured out that there weren't something else that was really suitable for the persistence, and I agreed to it as well.

We went on and I sort of accepted that I won't be touching the mac already - even though I was supposed to be a coder (Imagine what I was thinking when people asked me "so you're coder?" at the poster session). The twins would run the show, and I'll just make changes to the core data model and the database accessor methods. Which I think most of them were unused by the time we fine tuned our app for poster session.

Then it came again, a second time, when the features that I had coded all night got discarded. ): I gave in, all restraint went loose and I just went "do whatever you want". Was very upset that my intentions for future-proofing weren't understood, that it became extraneous stuff. I was thinking, "what on earth was I doing for this project? am I really just an additional pair of hands?" Felt like I'm just a freeloader for the project. Was so hurt that I just stoned through another project meeting that I was at for the next 2 hours. And I went back and cried.

It's a good case of trying to do well for project A, getting rejected, and giving up on B, C, D, etc. Never try that. Be more resilient. I can put it on my personality for how and what I responded (simplify stuff to observe patterns, and taking it to heart personally), but that's simplifying stuff and attributing where they may not have an exact cause and effect.

Note to anyone who's doing very logical stuff. Remember that you're dealing with people, that people have their ups and downs. Sometimes we all forget cause it's easy to get lost in the unfeeling world of logic, math and science and forget the feelings of others, and unknowingly hurt them in the process. I've done this many times to. But be very careful, and always remember this.

So in the last week, I tried to concentrate on the poster session. Dabbled in illustrator, did whole bunch of scripts here n there to rename files (damn exact-case file name matching in OSX), and learnt photoshop scripts. Of course, it was a given that I wouldn't be touching the code, so I tried wherever possible to do other stuff that I could do. Modified the DB accessors to get whatever was required, based on what was asked.

I was basically slacking around in SDE when we decided to do a promo website. Jumped at the opportunity, after all it's probably what I do best with my current resources. Took on the website and finished it in 2 days, with small refinements here n there. Considering how I worked, I was working the way I didn't like others to - do all the work on my own, and never update the rest on what's happening. But, that was the only way that I felt I was making up for the work that I never put into the project...

In any case, kai and ben are awesome designers. So enjoyed seeing them generate the graphics, and the different styles that they did: "kai-style" and "ben-style", and they could even do graphics in each other's styles. Interesting. And it was damn fun "ordering graphics" in the lab: "i want a blue facebook icon" "i want a xxx icon" and they'll go "coming right up". AI really looks damn fun, I should go learn how to use it...

So in the end, our whole group was staring at one mac, one ipad, and all of us were generating QR codes, objects, silhouettes, stickers and "stickers with standard sizes" till we were lost on what was for what.

---- Mood check. Got too emo from that previous part. Must not do this again. ---

Got emo when leaving SDE for the last time towards SOC. Again. It's what happens when you leave memories behind without proper closure. I AM SENTIMENTAL. VERY.

Poster session was rather crazy. The number of people that came way surpassed my expectations, like it was a trade fair / IT fair where people squeeze to get to stuff. Was stoning around trying to take photos with kai's zai camera and blending into the crowd. Until my IT1005 lecturer (Steven) came around and asked me what's the app doing. Then I had to recall what we had talked about... and I surprised myself with the stuff that I described. Of course observation of the rest while they presented was crucial to this though.

After that presentations came rather smoothly. Jammed up some times when I forgot to talk about the value proposition (it might not be obvious). One person gave me a huge lesson on what to say, how to do a poster presentation, and gave A LOT of help.

So leaving SOC for the last time in this sem at 10:30pm, memories from CS3216 are a mixed bag. Seemed to have understood myself and my friends LESS instead of more. Sometimes I even feel I don't understand anyone.

---- And I still am wondering how on earth I got through the pain filter check ---

Thanks yuling and yujing for accompanying me through this course, and for accepting/ignoring my craziness at times.

Thanks kianzhong, ruifeng, zhaorui for crossview. Sorry I didn't continue with you for final project...

Thanks kai, ben for being wonderful designers! Love your UI and thanks for teaching me so much. and letting me 班门弄斧 in some design matters lol.

Thanks colin, su yuen, jon lew, angad, and alan so much for the course, and especially colin and su yuen for being the contact points that got so much interaction with all of us. If i'm doing such a thing, i'd probably be exhausted by the end.

----

Now CS3216 is complete (except for final report :X)...

My dreams aren't. Nor my other mission that I hoped to achieve. Let's see if it'll come through in the end.

Till then, keep the dreams flying high. With dreams and proper execution, the world is a much better place today than yesterday, and will be even better tomorrow.

----

So I've written continuously for 1 hour and 40 minutes. It's 2:40am right now.

Time to sleep soon, and re-budget the energy reserved for CS3216 to FYP and the other modules.
Design project, FYP (my irritating 130% energy efficiency) and 2 finals.

IT1005 review session for my class in 5 hours. Can I survive tomorrow? I wonder hahaha

----

CS3216: mission complete.

Sunday, 21 October 2012

Panic state

Having real serious time management problems now.

Competing objectives of FYP, 3216, core module projects. Each with different time costs and benefits. Sounds like an optimization problem, but with unknown weights.

FYP is really stuck. The model isn't working beyond 1 cell, so optimization of fuel cell stack is not really possible in the current state. The updated scripts that I got run really slow, and the API is really complex, so I don't know where I should continue.

CS3216, just doing database for now. Although it sounds and looks very similar to VB6, VC# and .Net in general, I'm going to leave the real coding to yj and yl, since they're experienced and I think they don't want me to mess up anything, or slow anything down. Which is real likely. I don't know if it's me or what, but I just feel like I'm not doing enough for this group.

Have too much on my hands already. Feel very lost and tired.

Thursday, 4 October 2012

Peer review

So I missed the deadline for peer review... Must have been blind to not see the time but the date only... Opened IVLE at 9:02 when it closed at 9am. ARGH.

Can I do anything for it now? ><

Tuesday, 2 October 2012

For the record

Somehow I think my response to the Case Study 2 might be a bit too hard-handed for most people. These kind of decisions are easy to make, yet hard to make.

If you know the people yourself and you've worked with them long enough, it's probably like 割肉. Slicing off a part of yourself. Yet in the overall big picture, one has to put aside this to be effective, and to follow what's left of the original idea.

The guest speaker Vincent (I think) talked about MBTI. I've actually read a lot about it for the past 7-8 years, and I fully know my tendency - INFJ. And yes I'm making drastic evil decisions even though I'm supposed to be Feeling "type".

You see, this is one of the main reasons why you don't pigeonhole people into 16 boxes. People express a tendency to express different types (or functions) at different times, but the type that people test for is the one they feel most natural with. And circumstances can get someone to behave differently. In the real world, when organizations are concerned with bottom-lines, there's not much room for people to express certain tendencies.

For example, who really cares that introverts will die if asked to do a presentation? This world is driven with an expectation that introverts need to adapt for an extraverted world.

One has to balance their tendencies and reality to survive. And reality being reality, always wins. (Of course). So what you can do, is either be in denial, or work within the constraints of reality while subtly pushing for acceptance of your own personality, a bit at a time.

Reference for anyone interested:
http://www.infj.com/INFJ_CodeCracking.htm (I love this website)
http://en.wikipedia.org/wiki/Myers-Briggs_Type_Indicator

Case Study 2: Team Dynamics

Fell asleep writing Case Study 1, so Case Study 2 has been delayed. Instead of open ended discussion, I think this time round I'll just stick to some of the points listed. (this stifles though ><)

And maybe I'd just link back to the stuff I said yesterday. That sometimes sadly people have to leave a project if their motivations aren't in alignment. Cruel fact of life for organizations that are product-focused, and not people-focused. But, how many people-focused organizations can really cater to the needs of every single member and still ship great things? As you grow, bureaucracy sets in, and the explicit list of what you can and cannot do just grows.

Why do I feel so sensitive about this? Learnt this from my HR class (engin core mod). In this age, the workforce is very mobile. They can seek employment from anywhere. We assume that the team that the company has is already a good fit, chosen by means of alignment of vision and purpose. Now as time progresses, as the company grows, we want to retain these people, but how do we do this? Companies therefore need strong retention policies, and career development programs. Note the use of "career". "Career" implies the need for the person to grow and develop lifelong skills and interests together with the company, and not just skills like MS word, presentation skills. Investment both ways must occur - to make the fit both ways even better. This is what I call a people-focused organization.

But I digress. Back to small project groups or startups (they're about the same environment, just that startups have one more motivation - to make money and build their bottom line).
1. Lanh said, “It would be really bad if we have a great idea but are unable to execute it successfully”.
What are your views? Which is more important - the idea or the execution? Why?

One thing that we've seen so far is that execution matters in bringing an idea to life. If the idea is good, but implementation is wrong, the idea's going to be something worthless as a product. But if the idea isn't well thought-out in the first place, what good execution can we really talk about?
2. What have you learnt about Facebook so far?
Crazily hard to build for, especially if you're using it as an IFrame app. No proper ways to control what you can do. Communication between the platform and developers is often just one way, (maybe with the exception of major players like, eg Zynga?)
3. Comment on the ideas for Another Life and Fan Gang.
Another Life just seemed too difficult. Fan Gang was something that seemed more managable.
4. Should the team have changed their idea for the Final Project mid-way or  stuck to their original idea? Why, or why not?
Of course, one of the main problems was the scope. It seemed that Another Life had too many things that we required to be done, with huge time commitment. Maybe, they could have decided on a much smaller feature set and progressively build up from there, instead of a one-shot-do-everything. Of course there are milestones that they have to meet, like basic user interactivity, and essential stuff. Key is not being too ambitious I guess.

If they had scaled down early enough, it might not be that drastic to require a change in idea.
5. List the major problems (obvious and non-obvious ones) in faced by the team? How could they have done differently and better?
Could not gauge the amount of effort that they needed. Lack of time management (related to the first point). Synchronization of work (waiting on each other), eg for poster presentation, and even the framework used.
6. What did the team do right/well?
Sought advice constantly. Decisive about changing to another project (so it seems).
7. What would you do if you were Jeremy on the evening of 24th April (and the deadline for the final project submission was the next day)?
I would have sought eg a 1 hour discussion session earlier in the week, and understand from the rest of the group where the work remained to be done. And over the progress of that week, grasp some skills somewhere to make the app work, one feature at a time. If it's the night before, it's a bit too late I guess...
8. How would you handle a situation where one of your team members is unable to deliver on the work he/she promised because of personal problems?
I have actually had this situation before, where one of the groupmates did not show up for the task and the report. To our indignation, the coordinator asked us to include his name on the report. This was such an unpleasant experience since the guy didn't contact the rest of the group regarding his absence or provide a proper explanation. Just disappeared poof.

If it happens again, my expectation would be to attempt the work anyway, or at least inform the rest in reasonable time that he's unable to complete the work. Should follow up on a promise unless there's something really bad that happened. If I see that he has tried his best, I'll take over the work gladly if I have spare energy and time.
9. What, in your opinion, are the key learning points from this case study?
Might not be solely from the case study, but in general.

Understand and understanding. At all stages of the project, everyone should understand their motivation for the project. If the expectation diverges, it's important to realign everyone again to get everyone on the same track again.

At times, people do get caught up in issues, and sometimes they can't deliver what they had promised. Who knows, the next person might be me? So don't blame, but take on the work if you can. Forgive and forget. If no one can do the task, it's probably time to see if it's really that important. Or re-evaluate the priority of all the tasks to find out what's really essential.

----

Back to FYP.

Case Study 1: Get Help

Actually, this app sounded so much like an idea that I came up with for assignment 1 too. Just that it wasn't developed or even brainstormed upon as much as Let's Goal which we eventually settled upon...
Help app (by JG) - HOLD (or unless someone else wants to develop this with me)
- Allow people to post requests for help - public or only to friends
- Earn points by helping others
- Or earn points by helping ppl to help others (by forwarding requests)
- “Helped” person gets to award points to the people who helped him/her
- Points can be used as broadcast (xxx helped someone today)
- “Classifieds” allow people with more points to have their requests higher up on the global list.
But it's really interesting to see that the same idea had actually been done many years back! Really super surprised...

So having had the answers posted on IVLE, I think most of the lessons talked about were really quite right. Sometimes developers want a feature to stand out (we have a way to store this statistic! let's have a page for it!), want to experiment with something (hey twitter bootstrap tab pills look good. how do I use it?) or sometimes it's about totally not understanding the interaction between the user and the app (oh so users actually really use it like this?)

Those stuff in brackets up in the previous paragraph, I've done it all. Pills? Let's Goal main page nav buttons. Statistic? Let's Goal ranking page (heck, even my own app requirements up there). But it's not like I've learnt from it, just that I become more aware of it, and consciously avoid it if I remember.

Anyway, the focus of this post is on the Get Help mobile app... back to topic.

----

In such a mobile app, we have certain assumptions about the user and device:
- Screen size limited (the screen's not as luxurious as iPad, that can probably use the non-mobile optimized app since graphics and stuff are barely minimal)
- Network IO limited (restrain use of hosted graphics and resources, try to be app-embedded if critical)
- Users are probably going to encounter the app via the FB app, so we assume they know "how it works"

Since this is a FB social app, we definitely need a login screen - a "Connect to Facebook" button. This is essential since the hosted data - the requests, friends - all comes from Facebook. If the user isn't a user yet, a sequence to connect to Facebook should be necessary.

The page after login/registration should lead the user to the equivalent of the website main page - where you get to enter a new request (Figure 5 in the Background document):
  • "I need" box for new posts (phrasing should be consistent)
    • Leads to a page to complete the new post:
    • Trim the "I feel" and "Rewards" sections
  • Another section for friend's requests.
    • Large tappable region (of course)
    • Goes into a new page with full-page details of the request.
  • Needs/Rewards (as a tab/page)
Network data for the mobile app should be on a user-pull / event-triggered basis, eg refresh on new post, explicit reload. The images that are used could be part of the app and not requested from the network, to reduce the overhead.

Small number of push requests can be used to create user engagement, eg to alert them that someone has received help. Or someone has indicated help for their help requests.

This seems like a basic featureset for a mobile app, allowing you to provide a consistent functionality for the mobile app (post requests to friends, and view friends' requests).

----

It is really weird and surprising to see some idea you had, actually being realized 5 years ago and not knowing of it...

Wednesday, 19 September 2012

The journey thus far...

Feeling overstressed and overworked. It's a wonder I haven't snapped yet.

That random phone call this afternoon, I really hoped it was something from one of the oil majors. But no, it was citibank.

Work to do right now:
- Apply to SRC and any other companies that already are open
- FYP & first presentation
- CS3216 HTML5 project
- CN3121 control / simulink project
- CN3135 safety / hazop project

Sunday, 16 September 2012

Week 5: Pitching session, assignment 3 planning, random reflections

So it's week 5 already. Well, almost week 6, but there's always the one-post-a-week thing that I'm trying to keep up with. Time flies really fast when you don't know what you're really up to.

This week, we had this final project pitching session that was at this new place in BIZ (LT19 was it?) Thought some of the projects were worth doing, but most of them, I realise I'm nowhere near capable to do them.

Many of the presentations did not capture most of our attention. I'm going to be rather direct here... Like after 1 week, most of the topics have already left my mind. Except for a few, like the CELC presentation which was done in a very surprising way and rightaway caught our attention, which seemed worthwhile doing. Others somehow seem to be rather mundane and non-world-changing.

----

In any case, we have been brainstorming for ideas for assignment 3. One of the major items we had to fulfill was to do an app that NEEDS to be done on a mobile device (so to me it implies we have to utilize something that is "first-class" on mobile phones). Since I'm still carrying a nokia, I haven't really experienced what it is like to carry a smartphone daily, so the "mobile experience" is rather lost on me. Out of so many features that a smartphone has, what is it that is a "first-class" feature on phones?

Our group settled on an app that somehow should link to the camera that is built in to almost every smartphone nowadays. Wonder how we are going to build it actually...

----

Random reflections.

Somehow I've realised that I've a "laser-like" focus on my ideas so far, in the brainstorming phase. It seems to be both helpful, yet crippling at times.

Usually when you try to brainstorm to get ideas for an app, or to flesh out the features of an app, you tend to go off in different kinds of scenarios, some doable, some far-fetched. For assignment 1, when we were thinking about Let's Goal (we didn't call it that yet), we had some epic features (to me) that we thought about. However, I sort of went in to the google doc and started to wonder if those features were really necessary, and started to "kill" them off. Even before we thought through them and possibly analyze the impact of their directions.

So what really happened was, I came up with this thing called a "mission statement" for the app. I tried to make sure that every feature followed the "mission statement", so that we don't stretch ourselves too far, doing things that don't even value add to our app. Also the saying "do one thing only and do it well" somehow stuck in my head, so every feature that we suggested, went through this culling process.

Why was this not good? Probably because of conflict avoidance, if someone comes up with a great idea, but it doesn't help our core, then it may be hard for the person to take it when we reject it when we have a huge pool of directions to go for, and we have to start cutting features. This person might be anyone, even me. And I'm rather emotional when under stress, so yea it was sort of an agreement, a contract with the group and myself.

However, idealistic intentions aside, I never really put this through to the UI/UX design. We had a clearly defined mission statement, with the words "do one thing and do it well" next to it. But somehow along the way, as we got into development, that went into the back of my mind (I blame myself since I pushed for this). And the flow was done based on features and program structure, and not more on a seamless user experience.

----

So why do I bring this up now? For Assignment 3, I realise I'm starting along the same track. I've countered an idea before I completely heard it out, and that's really not good for team dynamics. There's the other extreme, when everyone hears everything out, and decide to include everything in the app (from booking plane tickets to making a simulator), because everything sounds wonderful.

Where do we draw the line? And who can tell me what features are really good for our apps? I have no idea...

Tuesday, 4 September 2012

Week 4: presentation oh my tian

The title says it all. 20 seconds per slide is just SO STRESSFUL. I wonder how many strands of hair have dropped off the last few days. Need to eat more also if not I cannot see myself at the end of the sem (my characteristic length is less than the wavelength of visible light, need electron microscope to view).

Anyway, rubbish aside, since the stressful part is out of the way, just going to repost what I said on Facebook over here:

CS3216 presentation went better than expected. but style-wise seems to pale in comparison with the rest of the groups... not class enough.

And so 2nd assignment is over. mostly.
Well, mostly. Cause we have this blog assignment to do. So here goes.

----

The app I'm supposed to blog about is called "Color", an app that is supposed to "short-cut" the record, download, upload and publish/share sequence. Will not talk about presentation effectiveness or such here, since I can't remember anything about the actual presentation style.

Some of the important things about the app and the sharing that I remember from the presentation:
  1. The app is broadcasts its recorded videos to friends, with 1 minute limitation.
    This seems like a reasonable limitation, since storage isn't free. And as mentioned during the presentation, we need restrictions. This is like bandwidth caps on mobile broadband; if not we'll end up with the tragedy of the commons.
  2. The app can probably be built with technologies that the group suggests, which include H-264 video and AAC audio encoding.
    Can't comment much, but I think these are the current standards. It's good for the app to use these encoding standards to ensure good compatibility right now, and in the short-term future. I do wonder if the phone is actually able to implement the encoding though (think iPhone has dedicated cores for graphics? that may help there).
  3. The app has a clean and uncluttered UI that is usable and direct.
    Of course, UI design is very important. If the system is oh-so-awesome but the UI is very rubbishy, then no one will use it. People who get into the app will get frustrated easily I guess?
  4. Also, the potential improvements that the group suggested seemed like a natural extension of the app.
    Other than the 1 minute restriction. We do have to set a constraint on the maximum amount of the data that we can transmit, to avoid degradation of the service that we provide. Video effects and simple editing (eg trim and crop) may be useful to allow the user to post-process the video before it's updated.
This app, like many of the other apps out there seem to simplify a (longer) process down into a few clicks/taps. The viability of such apps seem to be over a shorter span of time, since web services and mobile platforms come, evolve and go so quickly. To stay relevant, it must be able to integrate with the popular services that are commonly used at every point in time.

The app seems to take a measured direction to its limitations, for example the 1 minute limitation is probably in response to two effects - one is the service capacity, and another is the fact that users' attention spans are rather short in this social age. However, the 1 minute restriction may be able to be extended to a longer time (eg 5 minutes), and with proper post-processing tools (like crop and resize) it can re-export and upload the clipped video.

From my understanding of mobile apps (I don't have a smartphone), this app is rather similar to apps such as Instagram in spirit, which seems to implement a similar cycle: capture, add effects, upload and share. I believe that the functionality to add effects would be a very natural extension of the app.

----

This session is actually very interesting. You get to see all sorts of awesome apps, and also how other groups design their slides. Good learning opportunity for the design-crippled? Only if I wasn't so nervous...

Tuesday, 28 August 2012

Some thoughts on design

I just wanted to get this out here, even though I just posted one on the course and stuff (just 1 hour ago). Mostly cause I replied to yuling's post. This post isn't directly related to the course, but indirectly. So to anyone who reads it, welcome to my insights :)

I've been doing programming for 11 years. Design for 11 years. Or actually, programming and design for 11 years.

You see, the word programming has a rather broad scope. It can be about writing the HTML for a webpage, fighting with PHP & MySQL, writing embedded code for hardware (ref Colin) etc. It covers a rather broad range of stuff right?

The word design, however immediately conjures up mental images of artists, abstract art pieces, architects with pencils on their ears, building models, and to a certain extent if you let your mind wander, SDE, NAFA, SOTA etc. Websites with graphics that let your jaw drop, the SMRT graffiti, and especially, epic buildings like National Library (I know there are probably better and epic-er ones but humor me please, I like the NLB). Somehow this seems more niche and specialised to me.

However, let me propose a (maybe) new concept. Programming is part of design. It is one small part of design.

----

Stop reading for a while, think about it. Think about what you have learnt these years (if you're a programmer and you don't believe what I just typed). Then continue reading.

----

The idea that programming is part of design has probably been a part of me for some time now. But it just occurred to me consciously, and as I write this post, I think I can stand by this view, and show you a different point of view into something probably hard.

I always held that view all these years that programming is strongly logic-based. After all, how much different can you calculate some numbers? However, this actually applies to the execution. The term "top-down design" by definition, means breaking down a problem into smaller parts to be solved by computer. There's two parts to it, one is the solving part, and one is the breaking down part.

Design comes when us, the human, puts our experience into solving a problem. We decide how to break the problem down, and decide how to structure our solution, before converting the solution into commands for the computer to interpret. By that nature, we are designing the program. After all, it's not purely hard logic like math, where proof by various methods are required before something is accepted. There are many ways that reach the same answer, some more efficient than the others, but nonetheless, a solution.

Engineers would know that we all have this design project in year 4. Same thing here, it simply is a matter of putting our judgement to a problem, to obtain feasible and safe answers to a certain problem. There are many ways too, and none is more correct than any other if all of them meet the specs.

It all boils down to our creativity. Programming is an art, a skill that doesn't follow rigid guidelines but our experience, our creativity. It can be shaped, moulded in the way that we want it to be.

I guess I have to clarify to my IT1005 students about this.

----

Design, when used in my first definition (of artists and architects) is a much more specific definition that people may have, that is more artistic, more graphically-inclined. Programming and engineers attacking their design project are practicing the more generic idea of design, that implies putting creativity and experience to work. Both definitions embody the spirit of human creativity.

In this class, we routinely classify ourselves as a programmer/coder or a designer. This probably limits our potential in crossing into the other field, since we have already boxed ourselves into one specific term. We all can focus on one, but don't limit yourself to just that!

Let's hope there isn't any more explicit emphasis of "programmers vs designers" in this course, and hope everyone will try both sides! (:

(and of course, I lost my original purpose of the post by going rather deep into this topic... the wonders of the shower. good, it'll make for another post when I have the time :D and haha there are very weird statements in this post. I promise I'll try to not edit this post! Promise!)

Week 3: Crazy week

I'm surprised to have passed 2 weeks without actually giving up... although numerous times I've thought of giving up the module and my minor. Looks like I'm slightly more resilient than I thought?

Anyhow, this last week has passed in a flash. We (me, yuling, yujing, shaohua) only properly started coding quite late (shan't say when), and earlier on was mostly thinking of the app and planning features and such. And OH MAN how crazy it was. I've never written code this fast before.

Since all of us were coders, I decided to take on most of the design stuff for our group. So, CSS effects and layouts came under me, and oh my whitespace is an ART. I've never designed websites that I don't feel "urgh" at all, and frankly my design for this assignment is still giving me the chills. It may be because of Fireworks, or maybe not. In any case, I decided that my colour sense was terribly bad (even though I have done so many design things before), that we took 1/2 hour discussing which colour scheme to use, while I was reading on hues, sats and lums.

Also, this assignment gave me my first overnight coding marathon in SOC basement. For 2103 (during last year's special term), my group of 4 non-SOC students (chem eng, EEE, and two ISE) coded 10am-10pm for several days before the deadline. This time round, it was 6pm - 2/3am, then yuling & yujing went to some secret place to sleep. Shaohua went to sleep at the chair in the basement. Can't really remember what time I stopped (should be around 3), but i didn't take much sleep. Slept on 3 chairs pulled from the table behind me from 3-5am, and woke up cause I couldn't bear the aircon blasting away. So woke up, and continued to go through the code.

Saturday's workshops were not really useful for me, since my mind was on running away for my make-up lecture at 11am (they had to close down some LTs to clear up the stuff in E3A on Wednesday). As the clock ticked closer, I just couldn't sit still, and when the time came for my design project lecture, the context switch just couldn't be made. I was trying to fix my code instead of learning HYSIS ): Going back to SOC for the rest of the workshops were like a guilt trip, since I couldn't concentrate on either. Came back to the middle of some jQuery workshop, which quickly ended after I reached... So the workshops weren't very effective this week. (I like the AWS one though, but it felt rather like a speedboat ride O.o).

Anyway, though I knew yuling n yujing from our SEP in HK, this was the first time that we worked together on any project. And haha, it is awkward sometimes. Like there's something you believe strongly in, but you just can't get consensus, so where do you go from then on? It's just that, maybe I'm weird.

The project progress is another big problem right now. It seemed quite ok while in the planning stage, but now we have quite a big gap between now and achieving the basic functionality intended right at the start. Even if we cut some features, eg editing the created stuff, it might not be possible to complete in time. I mean, come on I have to be realistic. BUT yet, to me somewhere it's a challenge, we thought this was possible, and only WE can prove to ourselves that this wasn't wrong. After all, we estimated our ability at this level in the first place. Can we do it? Let's hope none of my group breaks down right now!

Jiayou to all of my group! Everyone, be strong, we can complete this! I know you all have the potential :P

And jiayou to me too (:

Tuesday, 21 August 2012

Week 2

Week 2 is here yet the class isn't. Strange yea.

I don't really think I can say much about the workshops last week, except they were really just in time, for the load of work that we were supposed to start on.
  • AWS + UNIX workshop was awesome, it's the first time I dug so deeply into UNIX, considering that I had *some* exposure in terms of CS1010E. It's rather crazy what we went through in that 1 hr or so, like seriously "I started up a server somewhere else by a click of a button?"

    (of course, on second thought I think it's not a real server starting up, but just one of the many VMs in Amazon's data centres)
  • Didn't really follow the Git workshop, since I was fighting to get Secure Shell Client working with AWS (of course it didn't), and Filezilla too (this did though). But occasional glances told me I understood quite a bit of the material from my CS2103. So yea I'm just lucky I guess.
  • Lunch was awesome, but super paiseh that we basically ran off in the afternoon for GeekCamp. Rather interesting things they talked about, like Arduino (can we do one for the sake of learning it? please? oh wait, I guess better not, enough on our hands already).
  • The rest of the talks, probably didn't miss much on PHP/MySQL (after all Google can tell us a lot too), but missed AJAX :( a pity...
Don't know if I should talk about the progress of our project here (what progress?)... Probably leave that to another post?



In any case, I think like many things in the world, this course puts structure on something that doesn't really "need" structure. And the effect can be drastically different - like me who already knows a little bit of PHP/MySQL would be able to probably do an app on my own. It'll just take a crazy amount of time (like months), cause this is NOT what we are trained to do. And so this little bit of structure is appreciated.

Modern life is such that we are most likely unable to complete every single thing we want to do. For maybe half the people in the class, who aren't programmers "by profession", it is hard to sit down for days and fiddle with some foreign servers (what do you mean by "instance"?), out of your own free time and pocket money (or even start to for that matter). To me, it does apply to other hobbies as well.

We may yearn to do something big - the next big thing that changes the world - yet often we realise that it's not within the power of one person to do these things. We do not sit down and think through most valuable ideas, expanding them one by one, validating whether they are actually feasible or not - this is the "easy way out".

More often than not, there are many road blocks ("brick walls" in the words of Randy Pausch) that we encounter in the thought of these ideas. And so most of the time, we ignore and move on, although I agree that "brick walls are there to show you how much you want something".

As an engineer, we build and design stuff based on optimizing our scarce resources while getting the most benefit out of it (usually economic in nature). Programming too - we optimize and develop algorithms to improve on our "space-time".

The average human lifespan is probably now 70-80 years. If you consider time as a scarce resource, it is of course impossible to explore everything that we want to do - like DFS of an infinite branching tree. Time is limited for every one of us, so how do we decide what "great ideas" should we investigate, in order to bring the best benefit out of all these ideas?

Tuesday, 14 August 2012

First Lecture

After this first lecture, I'm still wondering if I should be in this course at all. Many thoughts...

Panic mode engage.
  1. Not that the course direction isn't what I want, but whether I will die AND kill my FYP and my honours in one go (if no A-, bye bye to 1st class)... I don't know if I can manage my time well enough, considering that I am a rather slow worker in programming (faster than many Chem Engineers, but probably slow compared to all of the other students from SOC). It's just, whether I can have enough time to still have some semblance of a normal life. (Ref: http://www.fastcompany.com/node/28121/print from NUSHackers group)

    Groupmates, whoever you may be, please help me out! I can do frontend stuff like HTML, CSS, simple images and "flashy" little stuff, but for PHP and SQL, I think I may really mess up those.
  2. Just my thought from the first lecture. I came into this class with a hope that we would be empowered to do some useful stuff for the sake of many people out there who we would never know their names or faces. This small hope is mostly smothered with facts of practicality, and it's hard keeping it alive. There is no need for every single person who takes the stage to emphasize "you are going to die! muahahaha" and further make us question whether we should be here. No matter what, I'd really rather hear encouraging words. Negatives drown people. After all, it is not very useful to dampen the spirits of people who wish to change the world. Every effort to do so may not be world-changing, but it matters to those whose lives we've touched. I'd hope the environment in future is encouraging and not negative.

    (really recommend that link up there to all who believes that coding through the night is the only way to produce great results, if not you're not putting in enough effort.)
  3. Of course, it's weird being in an environment where you usually don't belong in. Even after taking 3 modules from SOC and being IT1005 TA, being physically in SOC itself freaks me out still. I have no idea why, it may be some sort of aura. It always feels like, "I don't belong here". There's always a very strange and lonely feeling when I'm in here. It's like, eventually "I'll leave this place and go back to my department"
  4. Need to be less introverted and try to interact with more people. But talking to any people (asking for directions, small talk, heck even just filling out the form yesterday) drains my battery like mad. Anyone has any good ideas?
  5. Ambition may be good, but I believe I need to take measured steps. Is this a measured step? No. (seriously)
  6. But of course, I still believe in the spirit of CS3216... Just heavily doubting my ability to survive the execution of the module.
Yesterday after reaching back to my room in KFH, one of my friends came over. We were talking about the first day of school, and the topic inevitably reached CS3216. Of course, the heavy workload came up, and his recommendation was for me to drop this module and focus on the FYP.

Not. After 3 years of waiting, this is my chance to do the module. But I think I need to depend greatly on all the other coders, since I consider myself rather deficient. Let's see where this all goes to...

Now what's needed is to switch from panic mode to excited mode. Then all will be fine. How to do so?

It does feel better getting some of this out of my head.

Sunday, 12 August 2012

Show-n-tell stuff!

Thought it'll be fun to post some snapshots of the stuff I'm bringing to show-n-tell... Something that's not very complicated, and very easily made by anyone else.

Not saying what it is (yet)! :D though yuling and yujing know, and it really is just very, very simple...


Friday, 3 August 2012

CS3216: The beginning

So I've signed up for CS3216 in my final year in NUS. It’s a strange feeling, considering that I had wanted to take this module back in my year 1, but of course I was nowhere competent enough. Even after 3 years in NUS with several CS modules (actually just 3) under my belt, I still feel rather unprepared and uncompetent to really survive this module. The warnings in the emails didn’t help much either :(

Back in year 1, one of my friends showed me “The Last Lecture”, and linked me to a website on CS3216 (it must have been the blog by Prof Ben). I was immediately enthralled, and right away I wanted to take it. In the years in between, I picked up C, C++, C#, along the way of my CS minor. I figured out that self-taught programming served me well for foundational CS modules like CS1010E, CS1020E etc. Yet CS2103 Software Engineering seemed rather tough, since the assignments weren’t simple puzzles anymore, nor doable in an hour or two. This was when I started to doubt my ability to do “real-world” programming.

Nevertheless, along the way my temp jobs (Access + SQL in one, Excel + VBA in another) gave me more opportunity to experience the client-developer relationship. My internship at EM was Chem Eng-based, yet involved interfacing with lots of specialized software. Exposure to all these specialized programs gave me some idea of what a well-developed program was supposed to be.

Indeed, I still consider myself rather unprepared for whatever this module would give me (or maybe even throw at me without being anywhere ready to catch it). Preparing for show-and-tell is already quite a challenge, having gone through several options, finding all of them infeasible :(

So let’s imagine, in a world where I am more resilient, here’s what I hope I can learn from this module:
  • How to program on new and interesting platforms (the web is so big, where do we start from?) – how to write code for all the cloud computing platforms like AWS, Azure, Google Appspot (I think this is outdated)
  • Also, concepts/techniques for harnessing this power out there. These services are so powerful, how do you use them apart from being just a simple web server? I guess there has to be some element of distributed computing here.
  • APIs of Facebook and how to utilize them. I don’t want to get scolded by my users for doing things that fly in the face of usability, security (especially) and really, really *common sense*. What do we need and what do we not need? How do you use this info that you get? To cache or not to cache (does this infringe on the “we won’t keep any info” clause?)
  • Legal stuff (as above), since we are now using info from users. Might be interesting to know what is acceptable (at least won’t trigger a legal response from MIBs in suits).
  • Programming concepts and patterns (further on from what I learnt in 2103), with particular emphasis on web-based concepts. Things like threading and rendezvous of independent objects don’t make sense to me in a web-based environment, no matter how I twist my mind around it.
  • How to be more flexible, because the world isn’t going to stay still and adapt to you. The ground beneath you is going to change so quickly. It’s going to be true in engineering; more true in the field of CS. The difference is just that engineering is limited by the discovery of physical reality, but CS is limited by human imagination... (which is much, much faster than discoveries).
  • How to manage time. Of course, I don’t want to fail all my other modules and FYP!
  • And, really, how to be more resilient. Basically, be able to look at this list at the end of the semester, smile and think to myself, “I did all of these and survived very well”.
Of course, I just hope that the world where I am more resilient == this world. So this sums up my expectations of this course, of the contents and of the intangibles. Let’s hope it will all turn out well! :)