This week is the last week of my internship. Time really flies. I feel like it has not been so long since I have written the blog for the first week of my internship.

This week, I was mainly working on making documentation of all the work I have done. Making documentation is a useful practice that helps other developers who want to contribute be able to understand what has been done so they can catch up on the project. Thus, the documentation that I have done will hopefully be very useful for future interns who will work on the development of the project I was working on.

I would like to recap the duties that I have done and the things that I have learnt during my internship time:

Learning Git:

Git is a version control system for tracking changes in computer files and coordinating work on those files among multiple people. It is primarily used for source code management in software development, but it can be used to keep track of changes in any set of files.

Learning Witty Framework:

Witty is a web framework which is built-in C++. It includes the essential basic widgets and building blocks to build web applications, but also offers built-in security, an authentication framework (which handles login and log out of users) and a lot of other useful features.

Understanding the project I am assigned to work on:

I have been assigned to work on Integrated Development Environment (IDE) project that aims to build a simulator for the company’s board which makes the user able to debug the code line by line while visualizing the effect of the written code at the same time. This project was already built previously by other interns. My task was to add new features to it. The main feature I had to do is to get the code and schematic to communicate together.

Learning Codemirror:

CodeMirror is a versatile text editor implemented in JavaScript for the browser. It is specialized for editing code and comes with a number of language modes and addons that implement more advanced editing functionality. Codemirror was used to build the editor side of the IDE.

Learning JointJs:

JointJS diagramming library lets you create fully interactive diagramming tools for all modern browsers, relying only on JavaScript and SVG. JointJs was used to build the schematic side of the IDE.

Fixing issues:

The first problem was that the simulation was not working properly on “CodeMirror” side. When we run the simulation, the first and last addresses of the equivalent binary code of current line was supposed to be returned, however, only zeros were returned as addresses. The solution was discovered by Dr Shawn when he was elaborating the issue to me. The problem was that we were missing the “-g” flag which includes appropriate debug information on the binary generated, thus making it possible to be inspected.

Reading ELF files:

ELF stands for executable and linkable files. ELF Files can be inspected using many tools, such as GDB, llvm-nm and readelf. Reading ELF files was very necessary along with understanding C++ mangling rules for inspecting the addresses on editor side and determining to which components these addresses belong.

Understanding C++ mangling rules:

Linkers only support C identifiers for symbol names. They don’t have any knowledge of C++’s namespaces, monomorphization of a template function, overloaded functions, etc. That means that the C++ compiler needs to generate C identifier compatible symbols for C++ constructs. This process is called “mangling”. These days, almost every C++ compiler uses the Itanium C++ ABI’s name mangling rules.

Getting the code and schematic to communicate:

As I have mentioned above, this was the main task I was working on during my internship which is too long to talk about again in this blog. Refer to the blogs with the titles “Progress of Triggering the Simulation: Part 1” and ““Progress of Triggering the Simulation: Part 2”.

Defining JavaScript objects of the modules:

I have added methods that define STORE/LOAD related instructions to an object from which all modules objects inherit. Thus, these methods will be shared among all the modules. For more information, refer to the blogs with the titles “JavaScript Objects” and “UART Demo”.

Building UART Demo:

I have built a UART JavaScript object that simulates a real UART device. For more information, refer to the blog with the titles “UART Demo” and “UART Demo Progress”.

Finally, I would like to take this chance to thank my supervisor Dr Shawn Tan for guiding me, teaching me, helping me out whenever I asked for his help and for giving me this opportunity to work as an intern in his respected company. Also, I would like to thank all other interns and employees that I have met during my internship. They made this experience much more fun and exciting.

Working at Aeste was an entirely useful experience for me. I believe that internships provide an amazing opportunity for learning, using theoretical knowledge in practice and getting real-world experience, especially when you are motivated to learn and excel at what you do and engage with very knowledgeable and experienced people. My experience at the company was highly educative one, especially with having a very knowledgeable and expert supervisor who provided me with a lot of technical information and professional pieces of advice. Plus, Dr Shawn was very patient with me and he always gave me time to learn and absorb the new information, approaches and tools I needed to use to be able to fulfil my tasks during my internship time. I got to learn many things which will be helpful to me in my future. This experience has boosted my confidence, taught me how to work professionally.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.