stdlib-js / google-summer-of-code

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

[RFC]: Develop a Google Sheets extension which exposes stdlib functionality #63

Closed kumarsuraj212003 closed 7 months ago

kumarsuraj212003 commented 8 months ago

Full name

Suraj Kumar

University status

Yes

University name

J.C. Bose University of Science and Technology

University program

Mechanical engineering

Expected graduation

June, 2026

Short biography

I am an undergraduate student in my second year at J.C. Bose University of Science and Technology, Faridabad pursuing a Bachelor of Technology in Mechanical Engineering. With a strong passion for technology and open source, I’m constantly seeking opportunities to expand my knowledge and skills in the field. In college, I discovered my interest in programming and open source software. I was fascinated by the idea of collaborative development and the power of open communities to create innovative solutions. I started exploring various programming languages and frameworks, and even contributed to a few open source projects in my spare time. I am also an active member of a campus group called MANAN where we develop software round the year for the people of our college and teach the basics of programming/coding to the newcomers.

Timezone

GMT +5:30

Contact details

Email: kumarsuraj212003@gmail.com, 22001013119@jcboseust.ac.in , Github: kumarsuraj212003

Platform

Linux

Editor

I prefer using VS Code for my coding needs because it's easy to use, has friendly controls, and offers lots of helpful extensions. It helps me work smoothly and efficiently.

Programming experience

I've been programming for a year now, starting with Python. I've made projects like Tic Tac Toe, quizzes, and an age calculator with Python. But in the last four months, I've been focusing on JavaScript. I've also learned Node.js for backend development. Switching to JavaScript has been great. It's opened up new possibilities, and I'm enjoying exploring it. I'm excited to keep learning and building more cool stuff! During this transition, I also created another TODO list application using JavaScript. This project allowed me to apply and reinforce my understanding of JavaScript concepts while delving into practical web development.

JavaScript experience

My experience with JavaScript has been quite positive. I find its syntax to be simple and easy to implement, which makes it an ideal language for various projects. One of my favorite features of JavaScript is its versatility and the vast ecosystem of frameworks and libraries available, allowing developers to switch tools according to their needs efficiently.

However, one downside of JavaScript is its single-threaded nature, which means it can only run on one core. This limitation can sometimes slow down the execution of code, especially for tasks that require heavy processing.

Node.js experience

I have experience using Node.js and Express.js to develop APIs for a mobile app. These APIs handled user registration, profile creation, and account management, including account creation and deletion. Additionally, I integrated the Google Sign-In API for user authentication. I deployed and implemented these APIs on Google Cloud Platform for seamless communication between the mobile app and the server, enhancing the overall user experience.

C/Fortran experience

I haven't had hands-on experience with Fortran, but I recognize its importance, especially in scientific and numerical computing.My experience primarily lies in C programming, which I extensively studied during my first year of college. Over the course of 3-4 months, I mastered fundamental concepts and honed my skills through practical projects.Through practical projects, I tackled challenges such as implementing algorithms for Fibonacci series, prime number generation, binary search, and linear search. These experiences not only honed my skills but also provided a solid foundation in C programming.

Interest in stdlib

After discovering stdlib through research on the Google Summer of Code organization, I have come to admire its exceptional quality and utility. Upon further exploration, I realized that stdlib aligns perfectly with my interests and expertise, making it an ideal organization for me to contribute to and support in any way possible. As an excellent student of mathematics since childhood, I am particularly drawn to the mathematical features within the Standard Library.I am deeply impressed by the breadth and depth of stdlib's offerings, which cover a wide range of domains including mathematics, statistics, data processing, and more. Its commitment to providing high-quality, thoroughly tested, and well-documented software libraries is evident in every aspect of its work.

Version control

Yes

Contributions to stdlib

Merged PRs https://github.com/stdlib-js/stdlib/pull/1906 https://github.com/stdlib-js/stdlib/pull/1978 https://github.com/stdlib-js/stdlib/pull/1989 https://github.com/stdlib-js/stdlib/pull/1992

Open PRs https://github.com/stdlib-js/stdlib/pull/1738

Goals

Google Sheets is a widely used tool for data management and analysis, offering convenience and accessibility for users across various domains. However, its native functionalities are limited when it comes to advanced data manipulation and analysis tasks. To address this gap, we propose integrating stdlib APIs directly into Google Sheets, providing users with a powerful toolkit for advanced data analysis within the familiar spreadsheet interface.

Week 1: Planning and Setup

During Week 1, the focus will be on laying the groundwork for the project by planning and setting up(designing) the essential components. Here's a more detailed breakdown of the tasks for Week 1:

Define API Interfaces: Spend time understanding the functionality of stdlib APIs (stdlib/API) that will be exposed to Google Sheets users. Determine how these APIs will be called from within Google Sheets. Consider the syntax and parameters required for each function. Design clear and intuitive interfaces that abstract the complexity of stdlib functions for users.

Identify Broadcasting Semantics: Research and understand broadcasting semantics in the context of linear algebra and machine learning operations. Determine how broadcasting will be implemented efficiently within the Google Sheets environment. Plan how to handle operations on arrays of different shapes and sizes to ensure consistent behavior.

Plan Input Validation: Analyze the types of input data that users are likely to provide within Google Sheets. Identify potential errors and edge cases that may arise from user input. Design input validation mechanisms tailored to the Google Sheets context to ensure that users provide valid data to the stdlib functions.

Set Documentation Standards: Define the structure and format for documentation, including API reference documentation and tutorials. Decide on the platforms or tools to be used for hosting and managing documentation. Establish guidelines for writing clear and informative documentation that caters to users with varying levels of expertise.

By the end of Week 1, the goal is to have a clear understanding of the project scope, defined API interfaces, planned input validation strategies, and documentation standards. This groundwork will provide a solid foundation for the subsequent development and implementation phases of the project.

Week 2-3: Development

During Weeks 2-3, my primary focus will be on development, as we move forward with bringing the idea to life. Here's what I'll be working on:

Implementing Core Functionality:

Once the groundwork is set, I'll dive into implementing the core functionality TODO, enabling users to seamlessly call stdlib functions directly from within Google Sheets. This involves handling user input, invoking the relevant stdlib APIs, and feeding the results back into the spreadsheet. Developing Element-wise Iteration APIs:

I'll pay special attention to developing efficient element-wise iteration APIs capable of handling large datasets within the constraints of the browser environment. To optimize performance, I'll explore techniques like batch processing and asynchronous execution, ensuring smooth operation even with significant amounts of data. Rigorous testing with various data sizes and types will be crucial to guarantee the reliability and efficiency of these APIs. Starting Documentation:

Documentation is key, so I'll begin drafting guides and examples illustrating how users can make the most out of the implemented functionality. I'll leverage documentation platforms like Read the Docs or GitHub Pages to create and host this documentation, making it easily accessible. Providing clear code snippets and sample workflows will be essential to help users understand and utilize the stdlib APIs effectively within Google Sheets. Setting up Extension Build Automation:

Automation is vital for efficiency, so I'll establish automated processes for building and packaging the Google Sheets extension. I'll make use of continuous integration and deployment (CI/CD) tools to automate the build and deployment pipeline. Ensuring consistent and reliable generation of extension builds will be critical, as it prepares us for testing and eventual deployment. By the end of these weeks, my goal is to have the core functionality implemented and tested. Additionally, I aim to have documentation underway to guide users on how to leverage the extension effectively. This will set the stage for further optimization and refinement in the subsequent weeks.

Week 4-5: Testing and Optimization

During Weeks 4-5, my focus will shift towards testing, optimization, and further refinement of the project.

Firstly, I will prioritize testing the core functionality that has been implemented so far. This includes conducting unit tests and integration tests to ensure that the stdlib APIs behave as expected and interact correctly with Google Sheets. Testing will be thorough to identify any bugs or inconsistencies that need to be addressed.

Simultaneously, I'll be working on optimizing the performance of the implemented features. This involves identifying any performance bottlenecks in the code and making necessary adjustments to improve efficiency. Optimizations may include streamlining algorithms, reducing redundant computations, or optimizing data structures.

Refinement of input validation mechanisms will also continue during this period. I'll refine and finalize the input validation processes to ensure that users provide valid data inputs within the Google Sheets environment. This step is crucial for maintaining data integrity and preventing errors.

In parallel with testing and optimization efforts, I'll continue to expand the documentation and tutorials. I'll add more detailed examples, use cases, and explanations to the documentation to help users understand how to leverage the stdlib APIs effectively within Google Sheets.

By the end of Weeks 4-5, I aim to have a thoroughly tested and optimized core functionality, with refined input validation mechanisms and comprehensive documentation. This will set the stage for the final integration, user testing, and deployment phases in the remaining weeks of the project.

Week 6: Deployment and Finalization

During Week 6, my focus will be on integration, user testing, and finalizing key aspects of the project to ensure readiness for deployment.

Firstly, I will concentrate on integrating fused operations into the project. Fused operations involve combining multiple operations into a single optimized operation to improve performance and reduce unnecessary network calls. By implementing fused operations, I aim to further enhance the efficiency and responsiveness of the stdlib APIs within Google Sheets.

Simultaneously, I will invite a small group of beta testers to try out the extension and provide feedback. Beta testing allows real users to interact with the project, identify any usability issues, and provide valuable insights for improvement. I will carefully collect and analyze the feedback from beta testers to iteratively refine the project based on their suggestions.

In addition to beta testing, I will continue to collect feedback from internal testing and conduct final rounds of testing to ensure that all features are working as expected. This includes comprehensive testing of the integrated fused operations, as well as any other remaining functionalities.

Throughout Week 6, I will prioritize addressing any feedback or issues identified during testing. This may involve making adjustments to the user interface, refining functionality, or fixing any bugs or inconsistencies. It's crucial to iterate quickly based on user feedback to ensure a polished and user-friendly experience.

Finally, I will focus on finalizing documentation and tutorials based on the feedback received during testing. I will polish the documentation to ensure clarity, completeness, and relevance to users. Clear and comprehensive documentation is essential for guiding users in effectively utilizing the stdlib APIs within Google Sheets.

By the end of Week 6, I aim to have a refined and thoroughly tested project, ready for deployment. This includes integrated fused operations, validated by user testing and feedback, and comprehensive documentation to support users in utilizing the project's functionalities effectively.

Post work programme

During post week, the final week of the project, my focus will be on completing any remaining tasks, performing final checks, and preparing for deployment.

Firstly, I will address any remaining feedback or issues identified during the beta testing phase and final rounds of testing. This may involve making last-minute adjustments to the user interface, refining functionality, or addressing any remaining bugs or inconsistencies. It's crucial to ensure that the project is stable, reliable, and user-friendly before deployment.

Simultaneously, I will conduct final testing to ensure that all features are working as expected and that the project meets the required quality standards. This includes thorough testing of all functionalities, including integrated fused operations, input validation mechanisms, and performance optimizations. I will also perform compatibility testing to ensure compatibility with different versions of Google Sheets and various user environments.

In addition to testing, I will prepare for deployment by packaging the extension and finalizing any necessary documentation or instructions for users. This includes creating installation guides, release notes, and other documentation to help users understand how to install and use the extension effectively.

Finally, I will deploy the project to the appropriate platform, such as the Google Workspace Marketplace. I will follow the deployment guidelines provided by the platform and ensure that the project is properly configured and ready for users to access and install.

By the end of Week , I aim to have a fully refined, thoroughly tested, and properly deployed project. This includes addressing all feedback and issues, ensuring compatibility and stability, and providing clear documentation and instructions for users. With these final preparations completed, the project will be ready for users to access and benefit from its functionalities.

Why this project?

This project has the potential to significantly improve productivity and efficiency for Google Sheets users, facilitating more robust data-driven decision-making processes.Additionally, by providing clear documentation and tutorials, we can ensure that users of all skill levels can leverage these powerful capabilities effectively. Overall, I see this project as a valuable addition to the ecosystem of productivity tools, offering convenience and efficiency to users who rely on Google Sheets for their data analysis needs.

Qualifications

I am well-suited for this project due to my strong technical skills, attention to detail, and effective communication abilities. With extensive experience in JavaScript programming, I am confident in implementing the mathematics library and APIs seamlessly. My past experience with API integration further enhances my capability to execute this project efficiently.

Moreover, my educational background in mechanical engineering has provided me with a solid foundation in core mathematics and physics concepts such as statistics, matrix operations, and calculus. This knowledge enables me to develop robust mathematical functions for the APIs with precision and accuracy.

My combination of technical expertise, programming proficiency, and mathematical knowledge makes me an excellent candidate for successfully executing this project.

Prior art

This project aims to significantly enhance the user experience of Google Sheets by providing seamless access to powerful mathematical and machine learning tools. By integrating advanced calculation capabilities and complex graphing functionalities directly into Google Sheets, users will be able to perform extensive calculations and generate manipulate two-dimensional arrays according to their specific needs.

While there are existing web applications that offer mathematical functions, none provide the level of extreme options and smooth functioning that we intend to implement as a Google Sheets addon. Our goal is to create a precise and professional solution that elevates the usability and functionality of Google Sheets, making it the go-to platform for users seeking comprehensive mathematical and analytical capabilities.

Overall, our addon will elevate the utility of Google Sheets, empowering users to efficiently handle large-scale calculations and data analysis tasks directly within their familiar spreadsheet environment.

Commitment

Most likely,I have end-semester exams scheduled from May 15th to May 28th, during which I may have limited availability to dedicate to the project. Following this period, during the summer vacation, I am fully committed to the project and can allocate up to 40 hours per week to ensure its progress. In the event of any disturbances or unexpected commitments, I will respectively inform my mentor and take necessary steps to catch up on missed work in the upcoming weeks.

Schedule

Assuming a 6 week schedule,

Notes:

Related issues

No response

Checklist

steff456 commented 8 months ago

Hi @kumarsuraj212003, thanks for sending this draft proposal!

I see you have a very ambitious project with a lot of deliverables, which we may need to refine to scope better the whole project and set you up for success. Please use these questions as guidance,

  1. How are you proposing to define the APIs that will be exposed?
  2. Do you have a rough estimate on how many APIs are you going to add?
  3. What are the plans for the documentation? (How many new pages or sections are you planning to work on?)
  4. How many tutorials are you planning to write? (Also, do you have in mind the topics for them?)
  5. How are you going to test performance?
  6. Is the build automation process a hard requirement for this project?
  7. What testing frameworks are you planning to use?
  8. Is the final testing with users a hard requirement for this project?

I also recommend to set up to 3 SMART objectives for your proposal.

kgryte commented 8 months ago

Following up on Stephannie's questions, I have a few more.

Overall, your timeline seems misaligned with your proposed objectives and seems to underestimate the work involved.

kumarsuraj212003 commented 8 months ago

@kgryte Apology for the miscommunication, while Google Apps Script does not provide built-in support for batch processing and asynchronous execution,but I can still implement batch processing and asynchronous execution I am looking into it,Also I am exploring various options to implement to optimize performance.

  1. For fused operation :- Let's say I have two mathematical operations that are frequently used together: calculating the mean and standard deviation of a dataset. Instead of making separate API calls for each operation, I can fuse them into a single operation that computes both the mean and standard deviation in one go.

Here's a example of how I could implement fused operations for computing the mean and standard deviation:

  // Original approach: Separate API calls for mean and standard deviation
var mean = ns.math.mean(data);
var stdDev = ns.math.stdev(data);

And:

  // Fused operation approach: Compute mean and standard deviation together
var stats = ns.math.meanstd(data);
var mean = stats.mean;
var stdDev = stats.stdev; 
  1. After deployment, I plan to grant access to our StdLib community members for beta testing.
kgryte commented 8 months ago

How will you define which APIs to provide fused operations for? Fusion should be possible for an arbitrary number of operands. You cannot write separate APIs for each combination, as that would lead to a combinatoric explosion of "fused" APIs. You should probably reconsider your approach for how to implement fused operations.