Halfway Through

Assignment 3 is finally over, and so is the first half of CS3216! It sure had been a painful few weeks, thinking about the various problems faced in this assignment almost 24/7. Here’s a brief summary of my takeaways.

As the main front-end developer in the team for most of the time, I did understand more about AngularJS, some limitations the framework placed on what I wanted to achieve, as well as a few hacks to get around them. It was my first time dealing with HTML5 technologies that make Web applications look and feel like a native mobile app, let alone make it useful even when offline.

I felt quite fortunate to be in my current team. The app, TL;DR, though is a simple app with few features(at least in my opinion) as it is meant to be a convenience app for reading articles on the go, has its benefits to me as a developer. The uniform UI layout for the feeds page means I can just reuse the same HTML template for all the different categories, adding a little extra logic in the controller to differentiate between the pages. This frees up more time for us to deal with annoying CSS bugs(more like CSS properties of the UI components we used from Angular Material that we did not want), as well as thinking about the tougher problems of offline functionalities, synchronisation etc.

In terms of app reviews, to be honest, most of the comments/bugs we received were already known to me when I was developing the UI(and testing concurrently). It’s just that either I decided to leave them till after the app review as I knew I could not fix them in time or that I considered them low priority compared to getting more features up.

Of all the front-end work I did, the work that I was most satisfied with myself was the background job queue.  I felt it’s the closest thing to OS-level related stuff(I’m not very good at OS though) and I like to implement things that are PERFECTLY REUSABLE.

One of the few things which I felt was a pity was not doing splash screen for Android devices. I managed to get it to work on several types of iOS devices that are still on iOS 8. iOS 9 destroys our splash screen milestone on iOS. Why did iOS 9 have to come at this time!? Thereafter I got lazy since there are too many different devices running Android, each with different screen dimensions. Another thing is the inability to postpone initializing of Facebook SDK till the app gets Internet connectivity. Most of the times I get “err: NETWORK CHANGED” when the app tries to do so. Not very sure what causes this.

This post has gotten a bit too technical on the implementation side. Looking forward, I worry about the final project as we have yet to come up with a good app idea for the upcoming project proposal, even after squeezing our brains dry(creativity and human aspects are my worst stats). We have also tried emailing external parties but they usually take a few days to reply, which does not help the situation.

I really wish to say this: time for a proper mid-semester break from CS3216.


Week 6 Reflections

This is a few days overdue as it was another busy week, with most of the time unconsciously spent into implementing part of the offline functionality milestone(turns out to need more enhancements after adding in bookmark feature recently), which is one of the many new things to me. The week ended up with CS3230 midterms, which I was forced to revise only 1 day before the test due to this assignment.

This week, I learnt about how application cache and web storage works after investing hours to read, understand, and briefly plan out the implementation. This introduced another tough problem to solve: when and how much data to store in the web storage while online? Considerations involve implementation complexity, initial loading time, and storage space requirements. After considering the trade-offs, I decided to go for “cache only what you have viewed”, using less space, potentially less initial loading time and simpler implementation. Though this means you cannot view pages not viewed before while offline, what are the chances of viewing something you do not view even when online?

With most of the UI for this assignment built by myself, I feel that my UI implementation skills have improved quite a bit as I reused the same things from assignment 1 again(this time mainly Angular Material, borrowing a few classes from MaterializeCSS to make up for the shortfall of some stylings), I still found customizing/fixing CSS a time-waster. With the schedule so tight, I could not bother myself with improving my understanding of how CSS works nor increase my breadth of knowledge of CSS properties. Thankfully, someone in the team is good with hacking CSS.

Another problem faced during development is the application cache. Because I test very small incremental changes to y HTML and JS files, I do not edit anything in my manifest file. So unless I clear cache to force a re-fetch, my testing devices were stuck with older versions of the files, giving me a mistaken impression that the new fixes do not work. The question becomes: how early should we incorporate application caching? For amateurs like myself, leaving it till the last minute is definitely a suicidal attempt but doing it too early when files are frequently changing wastes a lot of time clearing cache. What is a good way to ensure that the caching is working when released to production but not disrupting too much in the development?

Looking back, I have learnt or at least thought about quite a few interesting problems this week. For the final project, I see myself doing more of solving data management related problems, both on front and back ends, since there are already team members who are better than me on both fronts and I am more into the non-visual aspects of any application.

Week 5 Reflections

Assignment 3 has started and I am back to being a front-end developer again, except that now in the early stages of the project, I have to be the only front-end developer until the back-end is more or less completed. Despite the stress, I think it is yet another opportunity to hone my implementation skills(not design sense though).

One frustrating experience I had this week is burning a few days Googling and hacking away to fix UI bugs. It turns out that some of Materialize’s/Angular Material’s UI components don’t work well with some Angular’s directives such as ng-repeat due to scope issues or that they don’t support ids that are not hard-coded. This has led me to debate with a friend about coding for use versus coding for reuse(I personally bring coding for reuse to the extreme). My conclusion is that in this module, whatever works… No one cares how you do it, be it hard-coded values, messy code etc.

For the upcoming app review, I wonder how much is enough. This is because, it has been a hectic week, with ICPC Singapore regionals preliminary round today and barely having any time to practice for it ever since the semester started.

For final project, although I have a near-complete team, we lack ideas and the external party we contacted has yet to get back to us. To be honest, I suck at coming up with ideas(I have low exposure to society and the world so…) that I cannot be bothered to do so anymore. Hopefully things will turn for the better so I can focus only on the technical aspects of execution.

Week 4 Reflections

This has been a hectic week, with a bad start knowing that our app was not in the least bit interesting… The team was mainly rushing on polishing up the app almost all of the time, with a few members burning midnight oil to get new pages/features done(not me, since I could not even think if I did so anyway). While I am glad that assignment 1 is over and hopefully the app is considered interesting(a few features were added after the final review), I was not very happy with my performance in this assignment.

The main reason is that while I took on front-end development job, I simply suck at UI design. The best I could do is to make the Ui components work, client-side data manipulation, making AJAX calls. When it came to positioning, styling and animating, it was pure disaster… Towards the end, when more interesting features needed to be added, I contributed almost none of it other than doing some debugging and finetuning. Personally, I don’t use many apps as I advocate using bare minimal toolset(I started off coding this assignment in VIM), so it is natural that I do not know of many killer features in any popular app. Maybe I should take comfort in that I was able to contribute on the final day by finetuning some of the other members’ hard work.

Assignment 2 was a good experience opportunity for presentation. Not sure if I made the right decision to present a few slides but I still dread it…

As much as I would like to start working on assignment 3 soon so as not to have to cram like today, I honestly need a break from this module right now. The backlog from other modules really accumulated too much this week and I worry about burdening my team in the upcoming ICPC preliminaries because of the lack of time to practice.

Looking forward, from this experience, I am kind of having second thoughts about doing front-end work. Sure, it’s where all the exciting part about app development is, but I feel that I am more interested in servers and project deployment(have been itching to tinker with these in the early days of assignment 1). Then again, the reason I decided to try front-end was because I thought back-end as a job that nobody outside the development team appreciates…

Thought on Pinterest

During the presentation on Pinterest, there were a few things which invoked some thoughts in me.

The first thing is that Pinterest is purely driven by bookmarks. To me, this translates into the philosophy of focussing one one thing and doing that one thing well. The Web is saturated with too many Web apps. Most of them have similar features and are competing in the same market. For any new apps stepping into such markets, it is usually very difficult to beat the incumbents on all fronts. By focussing on one aspect of the common features, the app will aim to be the master of that area, not just a jack of all trades. Of course, the one thing to focus on has to be something that easily draws users’ attention or something that is significant to the user. In the case of Pinterest, bookmarks are highly visual so doing it well easily scores an impression on users.

The second thing is the proposed change in the flow of user experience in the app itself. The team proposed to ask the user to login only when the user tries to pin something. This brings the point about managing user permissions in the app. It is important to clearly distinguish between what each group of users can do. User groups can be: logged in users, non logged in users, premium users and such. Unless everything about the app is exclusive, it is very important to also cater to users of the lowest permission level. This can be done by first implementing on the basis that users are not logged in and then slowly build on afterwards.

The last point is about the fact that Pinterest does not take a cut of every pin sale. While this is good for buyers and sellers as sellers can keep prices competitive due to the lack of need to markup if there is a sales cut involved, I am curious about how the app sustains itself if it runs on revenues. Maybe through ads, which is quite common in many websites, or are there other ways?

Pinterest is an interesting app to me. Maybe that’s because I am living in a well(I actually don’t know a lot of apps, libraries, frameworks etc. that are out there). Although it is a visual app, it definitely is different from apps like Instagram. The mode of displaying data and also transaction is purely based on bookmarks, which I feel is a niche area. When I heard about being able to buy pins, the first thing I thought of was that this aspect seems similar to Carousell? Then again, for this app, when a buyer sees a nice pin, there is no need to consider so much(not much wordy description anyway), just buy. So I guess this simplifies the decision-making process.

These days, interesting app ideas are hard to come by, especially if trying to find a niche area that will become hot in the near future. I really hope such an idea will come by in assignment 3 and the final project.

Week 3 Reflection

This has been another hectic week. Looking back, I have been working on assignment 1 7 days a week(not 24/7 though :)).

The talk during Monday’s class was interesting as ideas that are very useful to making a product successful were being shared. The only sad thing about it(to me) was that I was focussing on assignment 1 at the same time so many of the things did not register into my head. I would rather listen to similar talks without any stressful assignments/deadlines on hand(I run on a single-core single-thread processor…).

Project-wise, I am happy that the main landing page is finally presentable in terms of the few functionalities defined for the 1st iteration, though I feel it is still quite behind schedule. The server backend development is near complete so the main bottleneck lies with the UI/UX development. Having poor visual design sense, the only thing I can hope for is to be able to rush out out the remainder of the essential UX functionalities over the weekend, leaving the beautifying to another team member. It did not help that assignment 2 is due soon and other modules are starting to ramp up in content.

I look forward to the completion of assignment 1 as I really need a break from the persistent threat of not producing something satisfactory by the deadline.

Week 2 Reflections

It has been more than a week since CS3216 started and the going has not been too smooth I would say.

Before going to the main topic, I’ll just briefly talk about this week’s lecture. Being in my 3rd semester doing software engineering module, the topics covered in this lecture were nothing new. However, they serve as a timely refresher on what we should or should not do before we got too deep into the project, only to realise that things were done wrongly all along. The lecture, and the guest talk, introduced me to several useful project management tools, which I never used before because I like to use a minimal toolset for any project and dislike installing too many stuff(still using Vim for this assignment’s coding XD).

For the first assignment, despite being a non-front-end person(dealing mostly with Terminal, algorithms and some networks), I took a leap of faith and opted to do UI development so that I can call myself a full stack engineer next time. Seems like frameworks and myself don’t get along so well, but after a few days, I finally managed to get a barebones UI component(to be polished at the moment).

I hope that with my current first success(hopefully) with a UI component, developing subsequent UI components will take less time. To be honest, I feel that our progress on assignment 1 is a tad too slow, with many setup issues such as deciding on a directory structure and automated deployment script impeding our progress right at the start. Who says getting started is easy?

With that out of the way, I look forward to seeing the completion of an MVP soon(not much time left).