This semester I am taking 5 modules, CS3241 Computer Graphics, CS3245 Information Retrieval, CS3281(CS3282) Thematic Systems Project, CS4244 Knowledge-Based Systems. In this post I will be doing module review for each of them.
CS3241 Computer Graphics
This is the introductory module for the focus area of computer graphics. If you want to become a graphics designer or become a game developer, this is the course for you. Partly because a lot of other modules require this module as the pre-requisites, but also because this module gives a good overview of computer graphics.
It covers basic concepts like rendering techniques(scanline algorithm), 2D/3D transformations, different projections, different hidden surface removal algorithms(Depth sort, Binary Space Partitioning, Z-buffer), illumination and shading, different mapping techniques, and of course ray tracing. As you can see, there are a lot of topics to be covered and each topic can only take up less than 1 lecture (2 hours). Hence, most topics are just touch and go without going into details. However, that’s the whole point of this module. To give a good overall understanding of how different components of the entire graphical pipeline works together.
On the practical side, this module uses the old syntax of openGL (glBegin and glEnd), for several topics like transformation, illumination and shading, parametric curves, you are required to apply the knowledge and draw something, these programming assignments are called labs in this module. For some examples of the work done during the lab, you can see the past lab facebook voting page (visitor posts section). There are 5 labs in total for this semester and each one takes about 3 to 5 hours for me. You can spend significantly more time on labs if you want, can produce some really nice drawings that stun everyone in your class.
Now for the paper assessments, due to the shallow depth of the topics, most questions in tutorials, midterm and final are basically “applying formula” type of questions. This means lecture notes and tutorial solutions are all you need to answer the questions. There could be some “harder” math questions involving calculus and linear algebra(calculating dot/cross product, normal). For example, my final had a calculus question that requires product rule(which I haven’t used for 2 years). The midterm and final are open-book, so as long as you know your maths and know where find answer in the lecture notes, you will be fine.
CS3245 Information Retrieval
This is a somewhat not so popular module, most people probably never heard of information retrieval (IR) as a topic under computer science. But come to think of it, we use information retrieval everyday when we are searching on Google or our local computer. So it is really nice to understand some of the concepts and algorithms behind the searching process.
The module’s syllabus can be found here, the entire information retrieval process is roughly broken down into 3 phases, indexing, ranking and evaluation. There are several different overall approaches, such as boolean retrieval, vector space model. Each approach differs in these 3 phases and there are a lot of variations to each approach suited for different situations and needs (different algorithms to index documents, different ranking schemes for documents). So there are a lot of content and when mixed together, they can be confusing sometimes. Prepare a lot of time to really understand what is going on and appreciate how different algorithms work together.
The programming assignments are mostly implementing “search engines” in python. For each major approach of the IR system, there’s one corresponding programming assignment so you can apply what you just learnt. Some assignments are easy as you just need to follow the algorithm provided in the lecture notes. But others can prove to be difficult when there you have to implement a complicated boolean operator algorithm.
The exam is tricky, typically there are half computational questions and half essay questions. For computational questions, you just need to follow the standard algorithm (maybe with slight modification here and there). But for essay questions, it usually asks for something not directly related to the content taught in class and needs your justification. It is somewhat just the “extension questions” in JC. You need basic understanding of the topic, but the knowledge you learnt in textbook is not enough to answer the question. You have to think based on your own judgement and general knowledge.
CS3281(CS3282) Thematic Systems Project
This is one of the 8MC modules that you have to take to fulfil the CS graduation requirements. The special thing about THIS 8MC module is that it is supposed to be focused on development of a “large-scaled complex” software system involving multiple software components (network, database, etc.). For this year, it is a bit different as it is “merged” with the other open-source module under the programme of Facebook Open Academy. (I couldn’t find any updated information for year 2016 for some reason). Instead of working on brand-new projects or collaborations with the industry, we get to work on some interesting open source projects.
The module’s structure is broken into 3 parts, major project, minor project and expertise area.
For major project, teams were assigned based on their background, 2 teams are working on “external projects”, i.e. open source projects outside NUS, namely socket.io and codebender. The other 3 teams are working on open source projects initiated within NUS, namely teammates, HubTurbo and PowerPoint Labs. For major project, teams are expected to complete a significant amount of work, such as implementing a new feature, or improve the current design/code quality/performance. There will be mentors for major projects, who are the developers from the projects themselves. The mentors will plan out the expected deliverables at the end of the course as well as provide guidance and review the progress along the way.
For my team working on socket.io, we are fortunately to have rauchg (the creator of socket.io) as our mentor. As heavy as it sounds, the actual workload for major project (in the case of socket.io) is not that bad. This is mainly due to the round-trip-time of each development cycle, i.e. it takes a while for the code review/feedback to come back from the mentor or the code reviewer. Also, completing your task, you can’t just move on to the next because the subsequent task depends on the implementation of the previous one. The workload for other projects, however, can be quite different. For example, in teammates project, the team members are mainly fixing the current issues within the system. So while you are waiting for one fix to be reviewed, you can work on another at the same time.
For minor project, you have the freedom to choose. Teams working on external projects as major project can choose one of the “NUS internal projects” and teams working on internal projects can choose any open source projects that are under GSoC. For minor projects, students are expected to work individually and fix 2 or more issues for the project. The purpose of the minor project is for students to experience different development processes employed by different open source projects, as well as compare and contrast them to identify strength and weakness of each.
Expertise area is something new that isn’t seen in other modules. Essentially in this module, you are supposed to develop an expertise for an area so that you can focus on it and make it your unique selling point when applying for jobs. There is no restrictions on what you choose or how you want to develop it, as long as it adds value to your profile. Examples of expertise area can be a language or a framework (Ruby on rails, node.js, Android development, react, angular), or a specific topic under computer science (computer security, computer vision).
For me I chose visualization as it is my passion and I really enjoy it. Some standard things you can do to demonstrate your expertise are building demos, writing blog posts, going through in-depth books, articles or guides on the area. In the end, you will be assessed on how well you have master that area to claim yourself as an expert. The expertise area is a unique approach to cater to students’ different interests and definitely one of the better ways to encourage learning beyond the scope of the traditional CS curriculum.
There is no midterm or final for this module, 100% continuous assessment with several feedbacks from instructors (with grades) on your current performance. There is an exit interview at the end (final assessment in the form of interview).
CS4244 Knowledge-Based Systems
This is the one of those modules that I took without knowing what to expect. It was one of area primaries for the focus are of Artificially Intelligence (AI) so I thought it would be good to know what it is about. It turns out that this module dramatically expanded my knowledge of AI as well as writing programs in general.
The module is mainly focused on expert systems and more specifically rule-based expert systems. In terms of the theoretical content, it has three main parts, knowledge representation, tool (clips rule-based programming language), and knowledge management.
Background & Content
In expert systems, you use knowledge to solve domain-specific problems, like airport control, medical diagnosis or floor planning. You can acquire knowledge by querying database, consulting experts (human experts) or searching for information from everywhere, anything that helps you solve the problem. This is called knowledge acquisition which is part of knowledge management. Then you also need to represent this knowledge in some form that can be used in the expert program. This problem is solved by knowledge representation, which is mainly about how to transform knowledge into facts, rules or frame-like structures (like OOP) and store them in the knowledge base. With the knowledge base, the rules and the problem at hand, we can use tools like clips. It has an inference engine to solve the problem by firing the rules opportunistically with minimum control logic.
In this module, you mainly learn about the features and characteristics of expert systems and how to write programs in clips. It is not only a feature-complete rule-based programming language, but also a functional language at the same time (like lisp). Unlike any other languages, the entire flow is controlled by the built-in inference engine instead of the programmer, and the programmer’s job is just writing the rules that waits to be fired when conditions are met. For the project in this module, our team developed a knowledge-based module planner. The featured image of this post (at the beginning) shows the screenshot of the software planning exact modules that I have taken.
In terms of practical use of the module, it is quite debatable. Knowledge-based systems used to be a hot topic but the interest decreased drastically following the second AI winter. Nowadays people are more interested in hot topics like machine learning, neural network or tensor flow. However, knowledge-based systems are still being used in specialized areas, and it may prove to be useful again in the future.
I would not delve too deep into the content or assessment of this module. Nonetheless I do hope you have some idea of what this module is all about.