stdlib-js / google-summer-of-code

Google Summer of Code resources.
https://github.com/stdlib-js/stdlib
26 stars 7 forks source link

[RFC]: provide APIs for computing Fast Fourier Transforms #82

Closed liberocks closed 5 months ago

liberocks commented 6 months ago

Full name

Tirtadwipa Manunggal

University status

No

University name

No response

University program

No response

Expected graduation

No response

Short biography

Before I started my current job, I studied Physics Engineering. I focused on signal processing and machine learning. Now, I work as a full-stack engineer at a Health Tech startup in Cyprus. My job involves creating new features for different parts of our technology, like the backend, frontend, and mobile apps. I use languages like TypeScript, Python, and Dart every day to make sure our products work well and help people in the healthcare field.

Timezone

Asia/Jakarta (UTC+7)

Contact details

email:tirtadwipa.manunggal@gmail.com,github:liberocks

Platform

Mac

Editor

My go-to code editor is VSCode. It's widely used and comes with a bunch of plugins that make coding easier and quicker for me.

Programming experience

Coming from a non-Computer Science background, my programming journey began in the realm of Physics, where I applied my skills to tasks such as signal processing, solving ODEs/PDEs, and designing filters. Utilizing languages like C/C++ and Matlab, I navigated through various academic challenges. However, upon entering the software industry after graduation, I felt disoriented, having never worked within a professional development team.

This confusion sparked a realization: I needed to relearn programming from an industry perspective. It was a process that reshaped my approach to programming and laid the foundation for my current expertise.

I vividly recall my first project: researching noise filtering algorithms. This project was particularly rewarding as it allowed me to blend my academic knowledge with industry demands. The culmination of my efforts resulted in a tangible product. I was immensely proud when the work was published in a local journal (https://doi.org/10.26418/jlk.v1i1.2), marking a significant milestone in my professional journey.

JavaScript experience

My journey into web programming began long before React became popular, when I started using JavaScript to build web pages. JavaScript served as my entry point into the world of web development due to its low entry barrier, allowing me to start coding relatively quickly. One of the aspects I appreciate most about JavaScript is its array functions like map, reduce, and filter. Coming from a background where C was my first programming language, which required lengthy iterations for arrays, these functions were a game-changer. They not only helped me cut down on code length but also made it cleaner and more concise. However, despite its advantages, there are certain aspects of JavaScript that I find challenging. One such aspect is its ambiguous Falsy-Truthy value comparison. This ambiguity often leads to bugs that are difficult to detect, adding complexity to the debugging process.

Node.js experience

Transitioning to Node.js marked the next chapter in my programming journey after working extensively with JavaScript. It was through Node.js that I first encountered npm, the package manager, which revolutionized my approach to programming. Unlike my experience with C/C++, where package management was less structured, npm introduced me to a systematic way of managing libraries. npm opened my eyes to the vast ecosystem of open-source libraries, generously provided by the community. I started to appreciate the open source community for providing vas libraries that not only expanded my toolkit but also enriched my programming experience. In Node.js, my focus primarily revolved around building APIs using NestJS and web applications with React.

C/Fortran experience

C/C++ was the very first programming language I learned, and it set the stage for my entire programming journey. I was introduced to it back in college while studying a particular subject. I even worked on projects involving microcontrollers and Arduino, putting my C/C++ skills to good use. In my first job, C/C++ remained an essential part of my toolkit. We developed APIs for our speech-to-text AI worker using 0MQ. This setup enabled us to handle large volumes of data traffic with remarkable speed and efficiency, showcasing the power and versatility of C/C++ in real-world applications.

Interest in stdlib

Working with the stdlibjs feels like home to me because of my prior experience with Matlab during my degree. Just like Matlab, the stdlibjs provides a wide range of functions and tools that for math/numeric operations.

What I particularly love about stdlibjs is its ndarray and plotting functionality. These features were not typically associated with JavaScript environments; they were more commonly found in languages like Python or R. However, with stdlibjs, I now have access to these powerful tools within the JavaScript ecosystem. This expanded toolkit allows me to work with data and visualization in new and exciting ways.

Version control

Yes

Contributions to stdlib

Open pull request:

Merged pull request:

Goals

The goal of this idea is to expose a set of Fast Fourier Transform (FFT) interfaces similar to those available in NumPy and as documented in the Data APIs Array API specification. Similar to stdlib's BLAS interfaces, we may want to allow switching out the FFT backend.

One potential reference implementation which could form the basis of this idea is pocketfft, as done in NumPy:

https://github.com/mreineck/pocketfft https://gitlab.mpcdf.mpg.de/mtr/pocketfft

Why this project?

The primary motivation behind introducing FFT operations on stdlib ndarrays is to enhance the toolkit available to stdlib users. This addition aligns with my experience in signal processing, where I have worked extensively with Fourier Transform. By incorporating FFT functionality into stdlib, users gain access to a broader range of tools for working with data. This not only enriches their capabilities but also opens the door to exploring various topics in data processing, particularly in signal processing.

Qualifications

With several years of experience in signal processing under my belt, I've gained expertise in utilizing FFT for various purposes, such as extracting signal features and understanding its inner workings. My proficiency in both C and JavaScript positions me well to contribute to the development of FFT functionality in stdlibjs. Drawing upon my extensive background in signal processing, I am equipped with the knowledge and skills necessary to design and implement robust FFT features within stdlibjs.

Prior art

Upon reviewing the GitHub issue (https://github.com/stdlib-js/google-summer-of-code/issues/3), it appears that FFT functionality has yet to be implemented in stdlibjs. However, the existing groundwork for ndarray operations lays a solid foundation that can facilitate the implementation of FFT.

Commitment

Given my prior experience balancing side projects alongside my full-time job, I typically allocate 20-24 hours per week to part-time work. As I am currently without a side project, I am able to commit the same amount of time to the Google Summer of Code program. This equates to approximately 360 hours over the course of the program, comfortably fitting within the 350-hour category project duration.

Schedule

Assuming a 12 week schedule,

Community Bonding Period:

Week 1, 2, 3:

Week 4, 5, 6, 7:

Week 8 & 9:

Week 10 & 11:

Week 12 (final week):

Related issues

https://github.com/stdlib-js/google-summer-of-code/issues/3

Checklist