A: An introductionEdit

  • My name is Vishnu Harikish Parammal. I am a third-year Electronics and Telecommunication engineering student at Veermata Jijabai Technological Institute, Matunga, Mumbai. I am a highly passionate, self-motivated individual with a never-give-up attitude.
    • Languages I speak: Malayalam (native), English (upper-intermediate), Hindi (upper-intermediate), Marathi (Intermediate).
    • I have a strong background in electronic circuit designing, computer science(data structure, OOP, database management, cryptography), mathematics (linear algebra, numerical analysis and calculus) and robotics.
  • I believe that GSoC will be an absolutely amazing learning experience. I have been working in small groups, but to be able to work in a massive code contribution network is what GSoC introduced me to. The level of expertise available here will help me hone my developer skills. It has been my entry point to the open-source world to which I am highly indebted. Not to mention the prestige of being a part of GSoC and its effect on my future opportunities.
    • I don't have any previous experience with the GSOC.
  • Since my under graduation days began, I have been relying on Octave as my mathematical genie. From finding an inverse of a matrix to plotting brain wave samples, Octave has helped. I have been feeling a very strong sense of giving back. With whatever limited knowledge I have, I wish to contribute. I know there is a lot to learn, and I am really excited about it.

C: ContactEdit

  • Nick name on IRC: vishnuparammal
  • I live in Mumbai, India (UTC +5.30). My location won't change over GSOC duration.
  • I usually code from 04:30 to 08:30 and then from 11:30 to 3:30 (UTC +0).

E: Coding experienceEdit

  • C/C++: I started using C++ as a part of my college curriculum. Additionally, I studied data structures in C++. I moved on to use it in various micro-controller based projects. Describing a few of them:
    • 3D Mapping and odometry: Obtaining 3D point cloud of a closed room and performed odometry using 1D LiDAR sensor and servos. The C++ code was written into Atmega16 micro-controller. For plotting the points, I used python matplotlib library.[1] [2]
    • Maze-runner: Designed a C program to completely explore a complex maze in first-person perspective. Implemented graphs to store the entire maze dynamically. Obtained the shortest path using Dijkstra's algorithm.[3]
    • WiFi-bot: Designed a web-page controlled bot connected to a common WiFi network. The C++ code was written into NodeMCU chip with HTML elements embedded into it.[4]
  • Octave: Octave has been by far the most used language in my curriculum. Needless to mention the simple yet powerful syntax has made life of engineers quite easy. I have been using octave for 2 years now in the following subjects:
    • Analog Communication Systems
    • Digital Communication Systems
    • Digital Signal Processing (mini project - audio filtering)
    • Computer Communication Networks
    • Data Compression Techniques
    • Numerical Techniques
  • OpenGL: The first project I mentioned in my C/C++ experience (3D mapping) required plotting. I had tried an implementation with OpenGL for the purpose. To be honest, I had a reference code and only modified it as per my needs. This gave me an extremely basic idea of OpenGL.
  • Python: This language has been the beast of my projects. My goto language for scripting purposes and project-Euler problems. Describing a few of my projects:
    • PLC security: I have worked on vulnerability analysis and penetration testing of PLC devices. I was responsible for writing malware scripts and modifying CIP protocol packets in a network
    • LiFi: Visible Light Communication implemented for sharing of data between multiple devices (text, images and other formats). I was responsible for managing the data fragmentation, packaging and directing data to the USB port on the sender device, and all the reverse operations by the receiver device using python.[5]
    • The n game: It was the very first code I wrote for myself. A generalized version of the famous "21 game".[6]
    • Astro-shoot: A shooting game set in space. Used pygame library for GUI.[7]
  • JavaScript: Intermediate experience in front-end development
    • Simulighter: A browser-based Ray optics simulation software. Used p5.js library for GUI.[8]
    • Visualizing Fourier: A graphical visualization of Fourier series and transform with an application of convolution in audio processing.[9]
  • Java: Part of the college curriculum. Intermediate experience.
    • Trace_It: A software capable of plotting graph of any polynomial. Cross-platform implementation for Windows, Linux and Android. Used JavaFX for GUI.[10]
  • My best experience being in a development team was for my Java project, Trace_It. Earlier, I liked to 'code' my projects single-handedly (thinking it was better-off alone), but then working with a team gave me some new insights. I understood the importance of why and how tasks should be defined and divided among the team. I also got the gist of time and resource management and the inevitably important role they play in a team project. I learnt to use git with collaboration. We faced many merge conflicts. Even had to delete the repository and start over. There were suggestion, revisions, conflict of ideas, differences in coding style, but we worked through it all. I learnt many skills like coordination, communication, feedback, trust, focus and a sense of respect for opinions different than mine. After weeks of early-morning and late-night efforts, we completed the project. The feeling itself was rewarding for me.
  • The biggest project I have done so far is the JavaScript-based Simulighter. It is a simple ray optics simulation software. I started it as a small project which was easy to code and maintain. But as more features got added, it became difficult to track code flow, debug errors, and understanding parts of code later on. The need for code organization and documentation dawned upon me. I had to refactor the code from scratch. I split up the HTML, CSS and JavaScript files, created functions, used classes and made a hierarchical folder structure, documented them, adopted the official coding style and made sure anybody who works on the code abides by them. Having worked on such a complex project has taught me that taking small corrective measures is important, or else it will be very difficult to manage later on. My role in the project:
    • Developing the HTML page in the initial days
    • Using p5.js library to build objects like lens, mirror
    • Collision detection between light rays and objects
    • Mathematical modelling and algorithm development for reflection
  • Bugs
    • Submitted patches for Octave bug ( #57774 ). Now working on improving efficiency.[11]
    • Submitted patch on Pythonic issue #44[12]
    • Submitted patch on Pythonic issue #65[13]
    • Reported Octave bug ( #58071 )[14]
    • Reported Pythonic issue #71[15]
    • Reported Pythonic issue #72[16]
    • Reported Pythonic issue #73[17]
    • Reported Pythonic issue #74[18]
    • Reported Pythonic issue #75[19]
    • Reported Pythonic issue #76[20]

F: Feeling fineEdit

  • I am new to IRC. I have used mailing lists to communicate my doubts and ideas very often.
  • I am new to Mercurial but I have used it to clone the main octave repository and submit patches (add, commit, generate the patch). I have 3 years of experience using git. All my major projects are being maintained there.
  • I am new to the wiki.
  • I am familiar with gdb (used it for reverse engineering C codes), gcc and make (used it for building C codes on ESP-IDF).
  • After having spent some time with the community, I have started learning a lot. They motivate me and I would love to keep contributing with them.

O: Only out of interestEdit

  • I heard about Octave two years ago in college as an open-source alternative for MATLAB and have been using it for our digital signal processing, data compression and numerical techniques lab.
  • My first doubt was - How to find the location where functions are defined? - I was working on a bug with mod() function but didn't know where to go and change the code. Here was my first interaction in mailing lists [21]

P: PrerequisitesEdit

  • I have a Windows 10 home with an Ubuntu 16.04 LTS VM and WSL.
  • I have my own laptop and a good internet connection at home.
  • I can access internet connection at any time.
  • I can access my computer with my progressing work at any time.
  • This is my machine, I can access it anytime I want and install any software.

S: Self-assessmentEdit

  • I view criticism in a positive way. It is honesty, and it spurs me to do better. I take it as an opportunity to improve.
  • I discuss changes but don't always wait for their conclusions. I start coding based on some assumptions. Later on, after any changes are discussed, I get to learn the error in my ways and make necessary improvements. This method also helps me explain my ideas better during discussions, as I have parts of my implementation ready.
  • I do prefer writing proof of concept codes. I realize that in the process, some parts of work may have to be discarded. But I believe the learning experience is more worthwhile.

Y: Your taskEdit

I have chosen to work on the octave-pythonic package. The elaborated project proposal can be found here[22]

  • Timeline
    • 04 May - 31 May: Build User Guide and FAQ sections during the community bonding. Try to solve Octave bugs necessary for improving Pythonic. Discuss implementation details of ideas and finalize it
    • 01 June - 20 June: Implement pyenv to change default environment of the Python interpreter
    • 21 June - 25 June: Documentation, writing tests and refining the code through community feedback
    • 26 June - 15 July: Improve slicing and indexing of Python objects
    • 16 July - 20 July: Documentation, writing tests and refining the code through community feedback
    • 21 July - 05 August: Manage Python - Octave type conversion
    • 06 August - 10 August: Documentation, writing tests and refining the code through community feedback
    • 11 August - 20 August: Add test scripts that exercise various Python libraries
    • 21 August - 31 August: Clean up, final documentation and submission
  • Milestones:
    • Create a User Guide with examples.
    • Implement pyenv() function
    • Improve slicing and indexing of Python objects and make it MATLAB compatible
    • Solve issues with Octave - Python type conversions
    • Build test scripts for Python libraries