Skip to main content

14 posts tagged with "SOC"

View All Tags

End of Year 3 Sem 2

· 5 min read

CS3282 THEMATIC SYSTEMS PROJECT II

This is a continuation of the CS3281 OSS project, where we now take on the role of a senior developer, overseeing and guiding a new batch of students contributing to the project. In this project, we are presented with the option to either continue our work on the same project from CS3281 or venture into the realm of larger, external Open Source Software (OSS) projects. I must admit that I thoroughly enjoyed this module, as it provides the freedom to delve into what I am genuinely passionate about. For a more detailed account of my learning experiences, feel free to explore my write-up here. Now, let's delve into some high-level insights I gained from this journey.

Working on OSS: One aspect that struck me profoundly during this project was the dedication and commitment of independent developers who voluntarily invest their free time into contributing to and maintaining open-source software, all without monetary incentives. Witnessing this selfless dedication gave me a new appreciation for the sheer amount of work and effort OSS project maintainers put in. From triaging issues and discussing improvements to reviewing Pull Requests, they handle endless updates and upgrades. I can only imagine that for immensely popular projects, the workload may feel never-ending. However, this commitment has a flip side—the strong sense of community and the collective goal of creating high-quality software.

Being a Good Developer: Throughout the module, we participated in three lightning talks. Personally, presenting has never been my strongest suit, but these opportunities allowed me to practice and improve my public speaking skills.

100% will recommend.

CS4218 SOFTWARE TESTING

Getting into the depths of software testing made me realize that this aspect of software is not easy to manage at all. The goal of testing is to ensure that the software not only gets shipped but also works well. This involves a lot of attention to details like correctness, performance, etc. Just on validation and verification itself, there is a need for deep technical knowledge on how we model the software and what sort of testing we perform. While it doesn't always apply, it seems to me that it's a problem in the industry that we are not yet equipped with such knowledge and willingness to do so. I should say that even with the knowledge, testing itself seems to be difficult and not something that can be done without extra effort.

In this course, I learned a lot from the group project where we worked on implementing shell functions in Java and wrote tests for those functions. The arrangement was quite interesting in that we first implemented the functionality, then wrote the tests, and were also "forced" to practice TDD (Test-Driven Development) by writing code based on test cases that other teams wrote. There was also a "hackathon" where we spent time spotting bugs in other team's projects.

Overall, I think the stress didn't stem from the workload...but our team did work after midnight to finish a submission. At this moment, I have pretty much forgotten most of what I learned in this course, but I think it left me with a good impression of what software testing is about and how complex it can be.

I will recommend it.

CS4240 INTERACTION DESIGN FOR VIRTUAL AND AUGMENTED REALITY

I took this course to learn Unity and VR development. While the course itself does not teach you all the necessary details about AR/VR development, the professor provides high-level overviews and discusses concerns and considerations when developing such applications. The learning from this course is very much dependent on how hands-on you are. There are individual assignments where you can go all-out to complete the rather loosely defined deliverables, or you could do the minimum to meet the requirements. From my experience, there was a 3D game, an AR application, a group VR game, and a final group VR project. The requirements are not cast in stone, and the professor is quite flexible in terms of giving us the choice to make what we want for the final project. I enjoyed that it was very open-ended, and we could decide what we wanted to do. Overall, I think I gained some practical knowledge operating Unity and some basic ideas of how to implement a VR application.

CP4101 B.COMP.DISSERTATION (FINAL YEAR PROJECT)

This is my foray into research. To keep it short, I think research is not an easy job. The biggest difficulty I feel lies in the uncertainty that you are exploring. To construct a research plan that succinctly captures the core concept and the steps to achieve it is like telling a good story. You will need the ingredients, the preparation, and you may stay nervous and unsure all the time because you are not sure who will be in your audience. I'm simplifying a lot there, as the other aspect that I am still grappling with is that the devil is in the details. I think this is a mentally draining module, and I am really going into uncharted territories here. Even if I don't continue higher learning after my undergraduate days, I'm partially glad that I have this experience to understand what research is about.

GEH1045 World Religions

  • SU exercised
  • took the module to clear requirement
  • interesting spread of content covering different religions
  • improved my understanding of the context/origin of different religions
  • SU exercised
  • took the module to clear requirement
  • content and workload is manageable
  • essay writing skill is cruicial
  • I enjoyed watching the movie (a long long time ago 2) as part of the module

Resources for Orbital CP2106 Independent Software Development Project

· 7 min read

Orbital (a.k.a., CP2106: Independent Software Development Project) is the School of Computing’s 1st year summer self-directed, independent work course. This programme gives students the opportunity to pick up software development skills on their own, using sources on the web. All while receiving course credit in the form of 4 modular credits of Unrestricted Electives (UE). SoC provides the Orbital framework for helping students stay motivated and driven to complete a project of their own design, by structuring peer evaluation, critique and presentation milestones over the summer period.

Summary of the Level of Achievements

Vostok

Features

  • Basic features
  • Use of database (workload must be justified otherwise if there is no database)

Planning / Version Control (via Git + GitHub)

  • GitHub repo + Basic version control (e.g., add / commit / push / pull)

Design

  • Use cases and features
  • Flow and architecture

Implementation

  • Organization of files into folders
  • Code level comments

Testing

  • System testing by the developers

Documentation

  • Proper description of the system in project README, project poster and project video

Quality of peer evaluation given

  • Average feedback rating >= 2

Gemini

Features

  • Basic / Intermediate features
  • Use of database (workload must be justified otherwise there is no database)

Planning / Version Control (via Git + GitHub)

  • GitHub repo + Basic version control (e.g., add / commit / push / pull)

Design

  • Use cases and features
  • Flow and architecture

Implementation

  • Organization of files into folders
  • Code level comments

Testing

  • System testing by the developers

Documentation

  • Proper description of the system in project README, project poster and project video

Quality of peer evaluation given

  • Average feedback rating >= 3

Apollo 11

Features

  • Basic / Intermediate / advanced features with complexity
  • Use of database (workload must be justified otherwise there is no database)

Planning / Version Control (via Git + GitHub)

  • GitHub repo + Basic version control (e.g., add / commit / push / pull)
  • GitHub issues with (monthly) milestones / labels / tags / assignee + Intermediate version control (branching, pull request)

Design

  • Use cases and features
  • Flow and architecture
  • Design diagrams (drawn with tools): Sequence diagram, activity diagram, class diagram, ER diagram, etc.
  • Design principles + pattern
  • Design decisions (alternatives, criteria, comparison and justification)

Implementation

  • Organization of files into folders
  • Code level comments
  • Coding Standard

Testing

  • System testing by the developers
  • Multi-level (unit / integration / system) testing with automation + User testing
  • Proper test strategy (planning / test case design)

Documentation

  • Proper description of the system in project README, project poster and project video
  • SE evidence in every stage of the development process in project README, project poster and project video

Quality of peer evaluation given

  • Average feedback rating >= 4

Artemis

Features

  • Basic / Intermediate / advanced features with complexity
  • Use of database (workload must be justified otherwise there is no database)

Planning / Version Control (via Git + GitHub)

  • GitHub repo + Basic version control (e.g., add / commit / push / pull)
  • Github issues with (monthly) milestones / labels / tags / assignee + Intermediate version control (branching, pull request)
  • 2-week sprint with objectives / allocation / tracking.
  • Github Projects + Code Review + CI/CD

Design

  • Use cases and features
  • Flow and architecture
  • Design diagrams (drawn with tools): Sequence diagram, activity diagram, class diagram, ER diagram, etc.
  • Design principles + pattern
  • Design decisions (alternatives, criteria, comparison and justification)

Implementation

  • Organization of files into folders
  • Code level comments
  • Code Review

Testing

  • System testing by the developers
  • Multi-level (unit / integration / system) testing with automation + User testing
  • Proper test strategy (planning / test case design)

Documentation

  • Proper description of the system in project README, project poster and project video
  • SE evidence in every stage of the development process in project README, project poster and project video

Quality of peer evaluation given

  • Average feedback rating >= 4

General suggestions for the last phase of Orbital

  1. Design
    • I know that design by itself is a skill and a broad area to master, however, I think it is an important aspect because whatever you have built, it has an interface for users to interact with. The interface should be user-friendly and easily understandable. If you need inspirations, you may want to look out for designs on websites like https://dribbble.com/ ... I don't mean to say that your design should be fancy, but they should follow some of the basic design principles and be comfortable for anyone to use. You may want to explore things like https://coolors.co/ which gives you a good combination to start with. For mobile design, you can look at existing applications on https://mobbin.com/browse/ios/apps
  2. Testing
    • It's an area that's lacking in most groups
      • User testing: things like usability testing https://www.nngroup.com/articles/usability-testing-101/ and your typical surveys, interviews etc
      • Software testing: this can be specific to your tech stack, but in general it is of the form of unit, integration and end-to-end testing
  3. Deployment
    • It is important for your project to be "available" and "usable" for anyone to use and test. Please do not just leave everything deployment related at the end, thinking that you should only deploy when the entire software is built. This can be dangerous because the deployment process may require you to change the code somehow, or even making you realize later that some stuff doesn't work on certain platforms. So PLEASE start early if you have not done so, try it out, ensure that you are able to deploy way before the deadline.

Resources

End of University Year 3 Sem 1

· 8 min read

Thoughts

For a variety of reasons, I decided to do a partial local exchange from the NUS school of computing (Computer Science) to NTU. Overall, I think the experience was good and refreshing to study in a (slightly) different environment. I ended up taking 1 module at NUS, and 5 modules at NTU. I will be writing a review of the modules below, and more importantly, I want to note down some of the gotchas that I encountered during the process of applying for the exchange. I hope that this will be useful to anyone who is considering doing a partial local exchange. Note that some of the information might be outdated, so please still do your own research.

Application

Singapore Universities Student Exchange Programme (SUSEP) is a program that allows students to take modules at another local university. The exchange is usually for a semester, and it is possible to do a partial exchange(meaning you can still do some modules at your home university). If you are interested, you should look out for the announcement email that will be sent out by the school nearer to the application period, which should be in the semester before the exchange. E.g. for my semester starting in August, the application period was in February. As they mentioned in the email, the quota is limited for NUS SOC so the application could be selective.

Application materials

Things required:

  • submit an application form
  • might require transcript
  • will need a personal statement stating why you want to do the exchange
  • an exchange plan indicating module mappings and the modules you want to take at the other university

I think a good personal statement could be important for the selection as there are only a few slots.

Module mapping

I would say that module mapping is a really troublesome part of the process. You need to do your own research to find out the modules offered and whether they could possibly be mapped back.

Some things to do include:

  • going into Edurec and checking the past module mapping records, which could be found under academics -> global education -> search module mapping
  • search online to see if the modules are still available and offered in the coming semester

Below is a list of approved modules that I requested, so you can use it as a reference. (open the image in a new tab if blurry) mapping

Gotchas

Here's what I painfully learned during the process of module mapping:

  • some modules might not be offered to exchange students.
    • some modules may claim that they don't offer to exchange students but somehow you can bid and get the module ...
  • some modules may be phased out.
  • some modules have separate module codes for a particular faculty, e.g. CZ XXXX for computer science students.
  • module code and content could change from year to year, which means the module mapping may become invalid if it differs from what you requested
  • when filling up the individual module request, you will need to provide module information as well as your pre-requisite module grades. Sometimes it's impossible to find a URL for module details, in those cases you can try to print out the NTU official module search webpage and upload it to dropbox, and then link it. If you can't find the module details e.g the module components, you can just leave it blank (which was what I did).
  • if you are doing a partial exchange, do take note that you may need to submit appeals to NUS to adjust your min workload. This is to prevent the system from disallowing you to drop the extra modules you applied to at your home university. I applied for additional modules at NUS just in case I could not secure the modules that I wanted at NTU, and I had a hard time dropping them after I got the modules I wanted at NTU.
  • Some modules will be preallocated to you before the exchange period, and for the rest, you will have to go through the module bidding process.
  • If you are doing a partial exchange, you will need to be careful about schedule conflicts. Even if the modules don't directly conflict, you may need to take into account the time you need to travel between the two universities. I would say for some of the modules in NTU, it was fine that I did not attend the tutorials and lectures as I could just watch the recordings or read the slides. However, for some modules, there are compulsory labs or you need to be careful with the quiz timings that happen during lecture time.

Below is a sample module mapping request that you will need to fill up. (open the image in a new tab if blurry)

request

CS3219 Software Engineering Principles and Patterns (NUS)

This is an over-subscribed software engineering module that many students want to do. It was worth doing because I got to try and understand not just some of the software principles, but also technologies that support them. A large part of what I learned came from working on individual assignments, which got me into Docker, Kubernetes, Redis, AWS hosting and deployment, kafka, and more. Those experiences were really valuable as I wanted to learn about these technologies for a long time and finally had the chance to do so. The group assignment was also a good way to practice building an application powered by micro-services. Overall, I would say that the practical aspects of the module were really good. Of course, what you learn out of it depends on how much effort you put in, but I would say that the assignments were well structured for you to learn.

One thing that I remembered: my first time implementing a complete authentication system via JWT......pretty cool experience as I discovered some intricacies of JWT and how to use it properly. (I will probably write about it in the future)

SC2005 Operating Systems (NTU)

I took this module to map it back to our NUS core OS module, and surprisingly the quality of this module in NTU was pretty decent. I think that the two profs delivered the course well (lectures were great) and the tutorial was conducted in a way that was very helpful for students to understand the concepts (again, the prof for my tutorial was great). The labs were a little less challenging and the workload overall was very manageable.

CZ4003 Computer Vision (NTU)

This module is an overview of the computer vision space, talking about how digital images can be enhanced, and how computers "see" them (so edge detection, object detection, 3D reconstruction etc). I think it gave me some ideas about what computer vision means and the mechanisms behind things like object detection. My personal opinion is that the module materials were not very easy to understand and perhaps some background knowledge was required in order to understand the concepts better. When going into the technical details such as deriving Fourier transforms, some mathematical maturity certainly helps for topics on linear algebra, calculus, trigonometry, and matrix manipulation. Overall, I think I would not recommend this module.

IE4483 Artificial Intelligence and Data Mining (NTU)

This module is split into 3 parts:

  • traditional AI methods(e.g. search, logic, planning, etc)
  • Machine learning (convolutional neural networks, decision trees, etc)
  • Data mining and more ML (clustering, optimization, PCA etc)

The last two parts were well taught and the topics covered gave me a good introduction to machine learning. The first part was a little less interesting, probably because I already learned those in the introduction to AI in NUS. The assignments were doable. Overall I would say that this module is worth doing if you want to learn more about machine learning.

IE4758 Information Security (NTU)

I think this module is super light and the workload is almost non-existent. The module is about the basics of information security, and the topics covered are pretty much common sense. It's like a general knowledge class where you just come in and listen to the prof talk about the topics. The only technical parts are some calculations that you need to do for cryptography(e.g RSA and Diffie-Hellman key exchange), which is not difficult. Overall this module is pretty simple and recommended if you want to do a near-zero workload module.

CX4153 Blockchain Technology (NTU)

The lectures in this module are all recorded and every week you will need to watch a series of videos. After doing this module, I finally understood some of the concepts in the blockchain world. I think the topics are interesting and I got the fundamental ideas of blockchain after doing this module. And I appreciate why blockchain is so popular because it solves some of the existing problems with such an elegant computational and distributed solution. The assignment also gave me a good idea of how to write a smart contract and connect it to a frontend. Overall, I would say that this module is highly recommended if you are interested in blockchain.