Description
Full name
Gunj Joshi
University status
Yes
University name
Indian Institute of Information Technology, Kottayam, Kerala
University program
Bachelor of Technology in Computer Science and Engineering
Expected graduation
May 01, 2026
Short biography
I am currently a second-year undergraduate and will be entering my third year by the time the coding period starts. I am pursuing a B.Tech degree in Computer Science and Engineering. My technical competencies include C/C++, JavaScript, Python, AWS and several other web technologies, along with a good amount of knowledge and experience with Docker and Firebase.
My coursework includes a wide variety of subjects covering Computer Organization, Computer Networks, Data Structures, Database Management Systems, Operating Systems, Design and Analysis of Algorithms, and so on.
Some of my general interests include contributing to open-source projects, learning new technologies and developing backends for web applications and other software.
Timezone
Indian Standard Time ( IST ), UTC+05:30
Contact details
email: [email protected], [email protected]
Platform
Mac
Editor
My preferred code editor is Visual Studio Code. This is because, based on my experience so far, I find VS Code to be the smoothest and most user-friendly. Also, its merge conflict resolver and availability of a large number of extensions feels great.
Programming experience
Apart from my contributions to stdlib, my programming experience consists of a wide variety of personal as well as group projects, open-source contributions, competitive programming, and so on, covering a wide variety of technologies such as Next.js, Node.js, React.js, Tailwind CSS, C/C++, Python, and JavaScript. Some of the projects I've enjoyed working on include the following:
- Knowledge Sharing Platform: During a Winter of Code program called FOSS Overflow 2023-24, I made significant contributions to this project using Next.js, Firebase, and AWS. My contributions to the development of the Knowledge Sharing Portal (KSP) include:
- Migrating the codebase from Prisma to Firestore Database.
- Integrating the File Upload and Download feature using the S3 bucket of AWS.
- Setting up different privileges for guests, normal users, and admins.
- Implementing file moderation features for moderating the content of uploaded files on the platform.
- AutoJoomer: During Hacktoberfest 2023, I contributed to AutoJoomer, a Chrome extension that includes features like automatic login to Wi-Fi and the learning portal. Some of my contributions to the AutoJoomer extension include:
- Implementing RegExp for validation of user credentials.
- Fixing the extension interface popup overflow problem.
- Cybersecurity Club Platform: In 2022, I worked on developing a web platform for the Cybersecurity club of my college using Next.js, Tailwind CSS, and Firebase. Its features include:
- Registration of new club members.
- Tracking previously held and upcoming club events.
JavaScript experience
My most recent experiences with JavaScript include my contributions to stdlib, such as adding new packages, adding C implementaions for existing mathematical functions, and refactoring some of the blas/ext/base
packages to align with current project conventions. Alongside my JavaScript work at stdlib, I've also utilized JavaScript extensively during my coursework and have completed numerous projects using JavaScript and its frameworks.
One of the best aspects of JavaScript is its rich ecosystem of frameworks. It can be used for creating awesome libraries like stdlib, great frontends using React.js, robust backends using Node.js, and much more!
However, one downside of JavaScript, in my opinion, is that there isn't as much seriousness or interest among most people for it outside of web development. But this perception is gradually changing, especially with projects like stdlib proving that mathematical calculations and visualizations can be efficiently done with JavaScript.
Node.js experience
While working with various web applications and other projects, I have gained extensive experience with Node.js. Not only have I worked with its core functionalities, such as writing server-side code and handling database connections, but I have also tackled tasks like file handling and more.
C/Fortran experience
The first programming language I learned was C during high school, where I created small command-line projects. Building on this foundation, I further developed my skills during my undergraduate coursework and have since made significant contributions to stdlib, which includes adding C implementations for various mathematical functions originally written in JavaScript. Additionally, I have a basic understanding of Fortran.
Interest in stdlib
Since the time I got to know about stdlib, I was very excited to see how things are working under the hood. The whole idea of, building a mathematical library for JavaScript seemed great. Initially, I thought,
But why do we need this?
As I went deeper and deeper into the codebase, talked with the maintainers, I got my answer -
What if we want to use those complex mathematical functions in the browser ? Without relying on other Python libraries ?
And that was when, I developed a huge interest in stdlib. The core idea behind this, to have all the numpy
and scipy
functionalities straight into JavaScript, in our browsers, amazed me. The organization of the entire project impressed me greatly. Even contributions made in remote corners of the project can seamlessly propagate to other repositories automatically. The approach of employing JavaScript implementations for smaller, lighter functions and C implementations for larger and complex ones struck me as ingenious.
The mentors are very helpful, and so are the fellow contributors. This, in turn, makes a great community. The whole process of learning, discussing and implementing felt great to someone like me.
Version control
Yes. I have a great amount of experience with GitHub.
Contributions to stdlib
Merged Pull requests : https://github.com/stdlib-js/stdlib/pulls?q=is%3Apr+author%3Agunjjoshi+is%3Amerged+
Open Pull Requests : https://github.com/stdlib-js/stdlib/pulls/gunjjoshi
Issues : https://github.com/stdlib-js/stdlib/issues?q=is%3Aissue+author%3Agunjjoshi+
Goals
After successfully completing this project, C implementations for math/base/special
functions, both for single precision and double precision, will have been added. Additionally, some additional packages, including those which involve complex numbers will also be included for both single precision and double precision. This will represent a significant step towards achieving parity with numpy
and scipy
. Furthermore, existing implementations that have received bug fixes in their upstream implementations will also be updated.
In addition to these enhancements, work on automation and scaffolding will be undertaken to automate specialized package generation. This will streamline the process of extending the C implementations of math/base/special
packages to include strided
and ndarrays
encapsulated within them.
Why this project?
What excites me about this project is that we're building something for a large level and audience. Having a JavaScript library, with numpy
and scipy
parity, is not a small thing ! I, while working on certain projects, personally wished if we could have something like numpy
or scipy
, using which we can use those complex mathematical functions directly, in a web application, or in the browser, rather than relying on other Python libraries.
More specifically, if I say, about the project develop C implementations for base special mathematical functions
, it gives me immense excitement to work on this. The reason being, I will be working on one of the most important things out there. This is because these C implementations are essential for optimizing the performance of our existing JavaScript functions. I believe this initiative has the potential to be a game-changer.
Along with that, the idea of working with a very supportive and insightful community of stdlib, both mentors and fellow contributors, is what excites me the most.
Qualifications
During the course of this project, I will be utilizing C, JavaScript, and Node.js. As mentioned earlier, I have acquired sufficient knowledge and hands-on experience with these technologies. Throughout my high school and undergraduate coursework, I have consistently delved deeper into the workings of C and JavaScript.
Additionally, I have developed several web applications with Node.js, which have provided me with a solid understanding of the platform.
My contributions to stdlib have further added to my experience with C, JavaScript, and Node.js. As a result of all these factors, I believe, I possess the technical know-how required for this project.
Prior art
For this project, some of the work has already been started. The C implementation for some of the math/base/special
functions has already been done, as given here. This progress provides us with a foundation to build upon rather than starting entirely from scratch. The ideation of the automation and scaffolding part has also been started here, and we can soon have a final plan and implementation for that too.
Commitment
- 1 May 2024 - 26 May 2024 : Bonding Period
- 27 May 2024 - 27 July 2024 : 30 hours per week
- 28 July 2024 - 26 August 2024 : 20 hours per week
This, in turn, sums up to 340 hours in total.
Apart from this, I would aim to get started with the work in the bonding period itself, to ensure that we are always a bit ahead of the intended schedule. I don't have any other commitments for the entire duration of the program, which would enable me to dedicate my whole time for this project.
Implementation Plan
-
Initially, for developing C implementations for the existing packages in
math/base/special
, I would be referring the following package dependency graph, to make sure that the package that I am working on, has all its dependencies set up already. -
For adding newer packages, I will be taking references from many sources, rather than relying on just one. It would be better to have a mix and match out of them, while keeping in mind other factors such as performance, implementation, etc. Some of the sources include:
-
For some of our existing packages, I will be updating their implementations, to move on from the older ones to newer implementations. Again, I would be following above mentioned sources for this.
-
I will also be addressing design considerations for some of the existing packages, so that their C implementation becomes possible, with regard to our project conventions, such as
maxn
,minn
, etc. -
For adding newer packages that involve complex numbers, I will be following C99.
-
Some more packages, that we are currently missing out, would have been implemented, with regard to IEEE 754.
Schedule
Assuming a 12 week schedule,
-
Community Bonding Period: During this phase, I will be focusing on implementing those functions, which do not have any dependency yet to be implemented in C. For this, I will be following the above mentioned package dependency graph.
-
Week 1: Focusing on completing the double precision C implementations of packages like
rempio2
,gamma
,gammainv
etc., which can be a blocker for a large number of packages such assin
,cos
,tan
, etc. This would be an extension of my work that I would have started in the bonding period. -
Week 2: Continuing work from Week 1, I would be trying to complete the double precision C implementations of the packages aimed in the first week, and would be moving towards other packages dependent on them.
-
Week 3: By the end of this week, I would aim to have completed the double precision C implementations for most of the packages in
math/base/special
, if not all of them. -
Week 4: Complete backlogs, if any, and start working on single precision C implementation for all of the packages. For this too, I will be referring the package dependency graph, and that the previously mentioned sources.
-
Week 5: During this week, I would be focusing on finishing with the C implementations, both single and double precision, for all of the packages.
-
Week 6: (midterm) : Once done with all of the packages in
math/base/special
, I would be adding some more, newer packages, as per suggestions by the mentors. -
Week 7: By this week, I would be trying to complete the work from week 6, and then will be moving towards the double precision implementation of the packages involving complex numbers.
-
Week 8: Completing double precision implementations for additional packages and begin single precision implementations for them.
-
Week 9: Working on any backlog from previous weeks, along with that, I would be starting out with updating existing implementations which have had bug fixes in their upstream implementations.
-
Week 10: In this week, I would be focusing to complete updating existing implementations which have had bug fixes in their upstream implementations. Along with that, I will be modifying pre-existing implementations in
math/base/special
, which need to be updated in accordance with sources such as[FreeBSD](https://svnweb.freebsd.org/base/)
. -
Week 11: During this week, I will be looking to finish off with all of the previous work related to adding and modifying implementations, and would try to start out with the automation and scaffolding part, which would require some discussion with the mentors prior to working, as given here. I would aim to get to some conclusion, and would try to get clarity on what should we follow.
-
Week 12: During this entire week, I will be working towards the automation and scaffolding part, and things related to it. If all that goes well, incorporating the packages in
math/base/special
with higher order ones, such asndarrays
andstrided
arrays would become somewhat easier. -
Final Week: Finishing off with the last week’s part, along with that, working on additional things, if required, after taking suggestions and feedback from the mentors.
-
Post GSoC: I would like to continue contributing to stdlib even after the completion of GSoC, working on more projects, to make sure stdlib turns up to the same level as other popular libraries out there.
Moreover, I would be making Pull Requests after the implementation of each package, so that we don't need to have the burden of reviewing a large chunk of code at the last moment.
I do fully understand that reviewing those PR's from time to time might take a significant amount of time. During that time, I will be working with #1147 in parallel.
In total, I will be aiming for a default 12-week timeline, during which I would be working on this 350 hour project. If we are left with some more time towards the end, we can work in some more depth with strided arrays
and ndarrays
.
Notes:
- The community bonding period is a 3 week period built into GSoC to help you get to know the project community and participate in project discussion. This is an opportunity for you to setup your local development environment, learn how the project's source control works, refine your project plan, read any necessary documentation, and otherwise prepare to execute on your project project proposal.
- Usually, even week 1 deliverables include some code.
- By week 6, you need enough done at this point for your mentor to evaluate your progress and pass you. Usually, you want to be a bit more than halfway done.
- By week 11, you may want to "code freeze" and focus on completing any tests and/or documentation.
- During the final week, you'll be submitting your project.
Checklist
- I have read and understood the Code of Conduct.
- I have read and understood the application materials found in this repository.
- I have read and understood the patch requirement which is necessary for my application to be considered for acceptance.
- The issue name begins with
[RFC]:
and succinctly describes your proposal. - I understand that, in order to apply to be a GSoC contributor, I must submit my final application to https://summerofcode.withgoogle.com/ before the submission deadline.