Assignment 3 Reflections

I think this went better than Assignment 1.

Our group were using the Ionic framework to build a web app. This seemed a little weird, because I think it was mostly meant to be used in mobile web application wrappers like PhoneGap. Nevertheless, the experience was better as Ionic made use of AngularJS, which I was more familiar with after Assignment 1. The backend that provided RESTful APIs was written in Ruby on Rails, which I was also familiar with. Since I was assigned to work on the frontend, I didn’t touch the Rails code unless absolutely necessary.

An example of that was with the devise gem. Although it was supposed to log the user in automatically after registration, it didn’t appear to do so, and I had to add a hack in the Rails controller code to log the user in.

The application cache was also somewhat painful. Due to us having a gruntfile for our project, we used a module so that grunt could generate our application cache for us. It also automatically added a timestamp for the time of building, which meant that the web browser would refresh all the files, as it detected that the appcache manifest had changed. Even though it was a pain to debug, I think it could have been worse.

I wasn’t happy with the performance of the animations. We sort of ran out of time to really look into that. The animations and overall app experience seemed really janky on Android and Windows Phone devices. I read about some translate3D(0,0,0) hack that was supposed to force the web browser to use the GPU for rendering, which would improve performance. /shrugs.


External Pitches~!

This was a rather fun session. External speakers came to visit us to pitch their ideas and hope that interested students would be willing to work with them. I didn’t remember all of it, but here are some I remember:

PickToLearn – was an okay idea. I felt like it was a little (just a little) like the time bank idea I proposed when I applied for CS3216, where people traded times for time bank credits. I really think that it has potential. Not every service has a commercial presence – e.g. learning how to set up a hackintosh. xD But seriously, I think it could work.

Airfrov – a really cool idea! Unfortunately, the part that they wanted the students to do didn’t seem so cool, basically crawling other websites to provide price recommendations.

HelpHelp – this idea is too difficult to execute, I think. Sending notifications only to the people in the right places? There’s no magic algorithm for that, and not everyone has GPS on all the time. Besides, retail outlets tend to be indoors, where GPS isn’t that reliable. And really, what’s in it for the person who helps? It’s all nice and good making apps for nice people, but there’s a lot of risk for the nice person who tries to help – what if the requester runs off? Then this nice person is stuck with 2 cups of coffee.

Tuition matching apps – 2 of them proposed this. I guess it would work, just that…doesn’t something like this already exist? – I understand the idea and think it’s pretty cool. It helps that some version of it has actually been done before. Seems feasible.

HappyFood – Haha so many people were impressed by what Garena offers. It’s not even just the material stuff like free snacks and all that, but the fact that they give you ownership of the IP, and you and your team get to decide what to do with it. Predictably, many teams want to do this project, so…we’ll see what happens.

Planit – I actually met with him (along with Sun and I think Wu Di) during CS3217 last semester, where he was pitching this idea personally to us. This time, I think he refined it a lot more, because it seems a lot cooler to me than what I last thought it would be. A lot to do, though.

ElderCare – Convincing old people to hang on to their phone all the time? Maybe a little early for it’s time, I think.

Student’s pitch is next Monday. I have no ideas.

Improve, improve…(end of assignment 1)

You can blame the terrible UI/UX of our app on me. ._. For someone who can criticise UI/UX you sure ain’t that good at designing them yourself eh?

Colin is right, everyone’s apps seem a lot cooler. Either they have cooler ideas or they can make it pretty and fun to use. I’m guessing, I haven’t tried that many apps from our classmates because they’re all closed to non-developers.

At first, a food app didn’t seem that cool. Especially so since I don’t care that much about good food, it’s an idea that doesn’t personally strike me as very exciting. Until we were rushing this deadline and all the cool ideas appeared, like why didn’t we think of them earlier? We could have fleshed out the gameification and taken advantage of the competitiveness and “show-off-ness” of people who use Facebook apps like ours, and provide a strong motivation for people to post. We could have had a tagging system to complement the search functionality. We could have had a wishlist feature (think iTunes App Store or Steam) which users could add dishes to, and then when they go and experience the food for themselves, we could allow them to strike it off the wishlist, and prompt for a review at the same time. If we exposed users’ profiles to each other, we could even have people see each other’s wishlists (like Steam), and know what kind of food to bring them to eat. etcetc.

Not that it mattered too much, I think. Most of us sacrificed sleep (I have roughly 9 hours over the past 3 days) and yet we couldn’t get the app in a state that we was satisfied with. The extra cool features that we didn’t think to implement wouldn’t have had time to be implemented anyway. Maybe the answer is less sleep, but I’m hesitant to accept that as a real solution…

I didn’t think I did a very good job as PM either. Which has nothing to do with sleep. That’s probably a discussion for another day.

Well I’m going to sleep, I have a project due 2359 that I haven’t started~ (it shouldn’t be too bad, hopefully).

EDIT: Post updated, so some parts of the post were written afterwards, if that’s important.

Facebook/iPad Seminar – Todoist

The Facebook/iPad Seminar (kinda odd name, since nobody seemed to do any Facebook apps, and most groups just covered the app in general) ended today (well, yesterday), and tired, sad and headache-suffering me is sitting down to think about the Todoist presentation and what I think about the app. Okay, I sound kinda grumpy, but I think I learned a few things from all the presentations today. So here we go~

The group covering Todoist started pretty strongly by comparing it to, a competing to-do list product, by stating that despite Todoist being released first with really cool features (the one they highlighted was Todoist’s strong Natural Language Processing abilities), it ended up with less users than This fact was brought up to drill home this point: just because your application released early with cool features, it doesn’t necessarily mean that it will end up being a popular app. It’s a fast moving world, and just because you’re the best now doesn’t mean that you’ll be the best later. Heck, you might still technically offer the best product, but gaining or maintaining a userbase is not just about the quality of the product. This reminds me of companies like Nintendo or Nokia. Both companies were the first to revolutionise their respective industries, but their inability to adapt to changing times has lost them their first place. Nokia is barely a shell of itself now, and while Nintendo survives based on its strong gaming properties, it could have had a commanding lead in the industry had they not alienated the hardcore gamer fanbase. For Todoist, I suppose its focus diverged, with Todoist perhaps aiming more towards business users with their pricing model. As the group explained later on, Todoist locks many features behind a Premium subscription.

That brings us to the next point. The group mentioned that Todoist should target the market better, and adjust their pricing models accordingly. The example they gave (which was quite apt) was Windows, which has multiple versions with different prices, targeting home and business users. This would encourage users who are on a lower budget to subscribe. On Todoist’s website, I can already see that the Reminders, Notes and Labels/Filters features are locked behind a premium subscription. I would wager that many home users or students would really love to have the Reminders feature, to receive push notifications when the todo is due, but would not need the ability to attach PDFs, spreadsheets, or photos to their Notes at all. I think I would agree with the group’s assessment. Producing a product that solves your users’ problems as closely as possible is easier if you offer multiple feature and pricing models, and let people pay for what they want. However, I think this would be somewhat difficult to do. You would have to conduct user studies to figure out what the different target users prefer, and sometimes, more options make things more confusing. It’s part of why Microsoft simplified the differences between Windows versions – you used to have so many versions of Windows or Office that it would be really confusing to figure out what you really want. Apple mostly gets this right, as their products are usually available with really limited choices.

The features and pricing of your app is highly important due to the saturated market nowadays. This is especially true for Todoist. The group mentioned that Todoist was in a very saturated market, and thus had to stand out in order to survive. But even for our apps, there are less and less unique ideas these days for apps that target very large userbases. The CS3216 thing about execution being more important than the idea comes in useful here. If there are other similar apps already on the market, either you provide some killer feature that was previously unthought of (good luck), or you go back to the basics, and ensure that the core functionality of the app is as polished and user friendly as possible. That was actually the philosophy behind Things, an app presented by another group (but not the group I’m supposed to blog about, so whoops). Basically, you want to be “better” than the competition, where “better” is decided by the target audience.

I learnt quite a bit from this presentation, and all the presentations today. I do think the presentation format is really limiting and annoying though. I’m sure there are other ways to limit the time taken by the groups…not all content can be nicely split into 20 second chunks, and I felt that the flow of many presentations were affected by it. People were speaking to conform to what slides were on the screen at the time, as opposed to using the slides as a supplement to enhance the presentation. Of course, with practice, the results are really good, but in my opinion a normal presentation format with cutoff timing would have sufficed. If anything, though, it was a pretty interesting presentation format that was unlike anything I’ve done before. That’s probably worth the experience, but I’d rather not do it again heh. 😛

I changed the blog theme because holy shit the old theme wasted so much screen space. /random

ZenDesk talk

Overdue blog post ><

Not that much to say though. I really enjoyed their talk and their story of sticking with their idea and eventually becoming successful, despite many setbacks (e.g. they stopped paying themselves, and had pressure put on them to find a “real” job). I also thought the growth hacking segment was quite cool – I think people underestimate the amount of free publicity you can get on places like Reddit if you are upfront about it. As in don’t be a pretend user to promote your product (well, they did say that they did that – perhaps not on Reddit though), just be honest and say something like “shameless self-promotion here, i have this game/app that does <something>, and it’s free”. I’ve seen quite a few of these posts (/r/android and /r/windowsphone have quite a few) and they generally get nice feedback and all that.

People asked lots and lots of questions, it was quite the difference compared to other go-through-the-motion talks. They seem like pretty cool people heh.

“One blog post a week :)”

Reminder from lecture 2 – blog post a week or perform a forfeit. I no want forfeits pls.

“Life’s tough as the lone nut” – YES. One of my biggest fears taking CS3216 was that I’d be mostly alone. The comforting thing (to me, that is) was that even if you were the lone wolf in CS3216 and made zero friends (boy, that’s terrible), you’d survive better than in CS3217 where you’d be alone for all of the programming assignments. I think I warm really slowly to people and may be really awkward, so I’m trying my best! And it turns out there are people who I’ve seen before here and there, etc, so it’s not so bad 🙂 But this is actually missing the point, Colin’s point was that we should open up and work with each other. For a module that is entirely team-based…well, that’s certainly true.

“Starting is easy, finish STRONG” – OBJECTION! I’ve nearly always found starting much more difficult than finishing. When you have nothing and you have to do the skeleton/boilerplate, it’s probably the most sian and clueless time of development. This is especially so when you’re learning a new language and you don’t even know where to start. Or our current problem now, how to start writing the backend, and how to start writing the frontend when there’s no backend to work with. Finishing seems much easier in comparison, you just need some determination, the threat of a failing grade hanging over your head, and frequent tea/card game breaks 😛

Colin went into the roles of programmers and non-programmers. I won’t talk that much about the role of programmers, they’re pretty standard. I’m really worried about the non-programmers’ portion though. Sure I can do feature lists, copywriting, user testing and documentation for users, as can most people. In fact, CS2103 basically has most of these, especially documentation for users in the form of a user guide. Those are fine. But but but GRAPHICAL ASSETS /sobs do we even have that many designers in the class? xD Times like this I wish I was good at aesthetics and design too. It would be really useful! There’s an Adobe Illustrator workshop this Saturday, let’s hope it’ll be useful…hopefully it’s not just a technical tutorial like “here is the pen tool”, that’s not gonna help too much >_<.

We met at 11+am today to discuss and try to start work. After a lot of discussion, we did manage to progress some. We managed to set up a skeleton application (that runs and doesn’t do much else), and were deciding on the dependencies that we needed.  For me, I spent quite a bit of time trying to fix this module that we wanted to use, called sequelize-tools. sequelize is an ORM for node.js, and sequelize-tools allows the developer to create a database configuration file in a separate location, and exposes a class db with which all database connections are accessed. However, sequelize-tools wasn’t updated since 2014, and apparently sequelize changed it’s API to return Promises (bluebird) for some of its methods. With my limited JavaScript skills, I had a go at fixing the module, which you can find here: . I hope it’s the right way to fix it, and that it won’t be the source of any database bugs a week down the road =.=”

Oh, and my own personal opinion on something. IntelliJ is a great IDE. I’m thankful for learning how to use it during CVWO times, because it’s the best IDE for almost everything, and consequently I use it for almost everything! Yay it works with Java and Ruby on Rails and node.js~! The node.js debugger seems kinda suspect though… /end IntelliJ advertisement.

It’s only Monday! I feel like a lot happened but actually it’s more like a lot is about to happen. Ha.

CS3216 – introduction + “are you ready to make a difference?” ;)

So I owe a blog post apparently, because I’m supposed to have done one to reflect on last week’s lecture. Here it is, a blog post~

Well most first lectures are about things like learning objectives and all that stuff that every student nods their head to. I’m going to say this first lecture, although funnier and more interesting than most, is about the same haha. It was motivating, I guess, but I feel like a robot nowadays so I’m not sure if I’m that affected by it >_<.

Comfort in shared suffering is definitely true though. I really made good friends and formed strong bonds with my CVWO teammates and my CS3217 friends. My CVWO friends are some of the smartest and most awesome people I’ve ever met. And working on CS3217 assignment 2 during Hack’n’Roll, good times (or bad times…) – my CS3217 seniors said he did his during Hack’n’Roll during his time too. Ahaha. Sounds like I’ll have similar stories to tell after CS3216…even though it’s probably best not to…

The “sales matter” part is really scary though. It’s time for me to join the people I find annoying on Facebook, and “use social media” to “virally spread/market” our app :P. That’s the easy part, actually. From CS3240, you know that conducting contextual interviews and usability tests, etc are quite a bit harder. Need to approach people and ask. Sigh.

And “execution matters”. Yeah, everyone is going to tell you that’s true, but the hard part is to get it right! The prof (and my friends who took the module) say that people get grilled over it. Maybe I’ll be barbequed instead. But seriously, that’s really important. If the application is uncomfortable to use, the many hours of effort spent on the code might as well not have existed. That’s gotta suck, so even if you’re the “idc, we’re the best at <insert technical area here>” kind, you should probably try to contribute to the usability of the application, heh. Don’t take it the wrong way, I’m not implying people like that exist.

Oh well, it was a good primer for what’s to come, I guess! Those deadlines though. And Sean was like “see, fun right?” while we were like “??!?!?!”.

Last Saturday, I finally got a team! Seems like we’re 4 programmers though, but I suppose we’ll make do somehow. We managed to decide on the technologies that we would use (expressjs on node.js, angularjs, postgresql). I was really worried about the frontend though, but let’s see what happens…

What I hope to learn in CS3216

School is starting soon, and I’m already scared of the module after reading the email. Some of my university friends commented that I seem to try to kill myself (not literally…) every semester, referring to me reading modules like CS3217 and doing CVWO during the previous summer. Of course, comments like this appear because I don’t exactly cruise through – I tend to struggle some and am definitely not in the top tier yet. I definitely hope to use what I learn in CS3216 to push myself even further, and become even better.

So, what I hope to learn or improve on:

  • Knowledge of web programming languages, Ruby on Rails in particular. This depends on the group decision for the language to use, though.
  • Project management. Being able to give constructive input on the possible directions that a project can go, such as architectural decisions and design patterns to use.
  • Web application design. Handling the new things such as responsiveness, compatibility/fallbacks for less modern browsers. These factors differentiate web development from traditional application development.
  • UI/UX design. I’ve taken CS3240 Interaction Design, but feel like I haven’t put any of it to use yet. I like to critique UI/UX, but making a good one myself? That’s a challenge.
  • Handling new challenges and curveballs. Few things in life are entirely predictable, especially software development.
  • Thriving. Not just surviving.

Looking forward to CS3216~! Not looking forward to lost sleep though…judging from CS3217, I don’t think my code is quality when I’m tired 🙁