Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GSoC: JSON Schema Language Server Contributions #601

Open
jdesrosiers opened this issue Jan 30, 2024 · 14 comments
Open

GSoC: JSON Schema Language Server Contributions #601

jdesrosiers opened this issue Jan 30, 2024 · 14 comments
Labels
gsoc Google Summer of Code Project Idea Status: Stale It's believed that this issue is no longer important to the requestor.

Comments

@jdesrosiers
Copy link
Member

JSON Schema Language Server Contributions

Brief Description

The Language Server Protocol (LSP) provides a way to write an IDE/editor extension that is compatible with any IDE/editor that supports the LSP. Today, most IDEs/editors support LSP including JetBrains, VSCode, and even Neovim. LSP allows you to provide all the kinds of features you'd expect from an IDE such as inline error messaging, autocomplete, goto definition, linting, and more. We're currently in the early stages of building a language server for JSON Schema.

Expected Outcomes

This might be different that other GSoC projects in that it's not explicit about what aspect of the language server you'll be working on. There will be a prioritized list of tasks and you will work with the maintainer to complete as many tasks as you can in the time allotted for GSoC. Sometimes you'll be working solo and other time pairing with the maintainer. Tasks may include implementing a language server feature, adding linting rules, improving an existing feature, and possibly some bugfixes.

Skills Required

  • Familiarity with JavaScript and Node.js
  • Familiarity with client/server and RPC architectural styles
  • Familiarity with the observer pattern
  • Familiarity with JSON Schema
  • Ability to work with and understand asynchronous code
  • Ability to learn an existing code base and make contributions
  • Familiarity with writing and working with automated tests

Mentors

@jdesrosiers

Expected Difficulty

Hard

Expected Time Commitment

350 hour

@jdesrosiers jdesrosiers added the gsoc Google Summer of Code Project Idea label Jan 30, 2024
@utkarshdagoat
Copy link

Hi! 👋 I am Utkarsh a college student passionate about software development. Ever since I found neovim I completely fell in love with it thanks to theprimeagan (a youtuber btw). I have given hours to have my own config and have failed miserably 😢 but that wasn't a waste as it left with extensive knowledge of how LSP works what is treesitter , buffers etc.

Answer to the questions

  • Question: What interests you most about this project?
    Answer: As someone who have invested a lot of time on his tooling when a language does not have a LSP and I don't get that sweet formatting ,I don't get those red errors and can't understand the error I start to loathe the language. So when I saw that a project has writing LSP I jumped straight in knowing that it is a difficult task and I have to give in the hours but these things don't matter when you love doing your work.

  • Question: As mentors and project coordinators, how can we get the best out of you?
    Answer: I love when people give me some other way of thinking about approaching the same problem then I travel down multiple paths to approach the same problem and try to choose the most optimal path. I have high tendency to over engineer so that would be something my mentor would have to tell me. I also love doing research and something to study whether it is about writing code, structuring code or different programming paradigms.

  • Question: Is there anything that you’ll be studying or working on whilst working alongside us?
    Answer: I am pursuing a bachelor in technology 👨‍🎓 from Indian Institute of technology Roorkee. I do development more than three quaters of my day when I not have exams. I will only have 1 week off for my exams.I also am part of student group which is responsible for maintaining the official website of our campus and the student portal. But this dosen't stop me from researching on topics of my interest.

  • Question: We'd love to hear a bit about your work preferences, e.g. how you keep yourself organized, what tools you use, etc?
    Answer: I use fedora + i3 as my daily machine. I use my neovim as my daily code editor. For note taking I primarly use Obsidian. Also git + gitlab as the VCS.

PS: I cannot see mandatory qualification task as mentioned in gsoc/CONTRIBUTOR-GUIDANCE.md and I would love to follow up with the proposal but the slack link is also showing up expired.

@jdesrosiers
Copy link
Member Author

@utkarshdagoat Thanks for expressing your interest!

I cannot see mandatory qualification task as mentioned in gsoc/CONTRIBUTOR-GUIDANCE.md

You can expect to see the qualification task announced early next week.

I would love to follow up with the proposal but the slack link is also showing up expired.

I think the link has been fixed now. Please try again.

@diyaayay
Copy link

diyaayay commented Feb 23, 2024

Hi, I am Diya Solanki, a keen open-source contributor and a college student who loves to code most of her time during the day. I have spent the last few months writing features for a javascript library called p5.js and it has been a great experience. My interests align with the requirements of this project. I have a solid knowledge of vanilla javascript and asynchronous code since that was something I worked on the most in making features and debugging issues on a JS library.

Some of my work:
[(https://github.com/processing/p5.js/pull/6710)]
[(https://github.com/processing/p5.js/pull/6773)]
[(https://github.com/processing/p5.js/pull/6812)]

Answers to the questions:

  • Question: What interests you most about this project?
    Answer: When I started my open-source journey and started contributing, solving bugs, proposing my own issues, making PRs, and altering them to get them to merge, I was always fascinated by how these tools are the core of code maintenance and allows everyone to write code according to the organization's standards. The inline errors, ESlint making my npm run test fail, and visual and automated tests fail, and then from error messaging to setting up friendly errors for tasks have always been my area of interest. I also have been working in Cloud Computing and learning about web services so along the path I gained a good knowledge of API's, client-server, REST, and RPC architectural styles. All of this really interests me to dive into developer tooling. I think my skill set and interest align with this project and I would love to work on it.

  • Question: As mentors and project coordinators, how can we get the best out of you?
    Answer: I think I am somebody who keeps looking for food for thought. When somebody proposes a problem statement or a task, I love to spend my own time researching it, asking questions, communicating, and also get guidance and working in a certain direction when I'm not on the right path to somehow reach the solution. I am a people's person and I think I can take inputs, use them in the right way, and also at the same time put my views forward. I love to learn new technologies and integrate them into my projects to keep optimizing for better performance.

  • Question: Is there anything that you’ll be studying or working on whilst working alongside us?
    Answer: I am an undergraduate student pursuing Bachelor of Engineering in Information Science. I have a 2 months break during the summers, mostly around May and June. I will be working on this project and mostly some up skilling during the holidays and if any exams come up before the holidays I will be able to manage or would require a week's time with lesser work assignment. I would still be available all the time for communicating, keeping up with the progress of the project and resuming work on the project as early as possible.

  • Question: We'd love to hear a bit about your work preferences, e.g. how you keep yourself organized, what tools you use, etc?
    Answer: I use Windows and WSL on i5 as my daily machine. I use VScode as my code editor. I use Git and GitHub as VCS. I use notion for note taking and keeping track of daily tasks.

  • Once you’ve selected a project from the ideas section, please suggest a weekly schedule with clear milestones and deliverables around it.
    Answer: I will structure my application proposal in a certain way that includes a weekly schedule and deliverables or I can update this answer later, after drawing up a plan for the project.

I would like to dive into some issues and try solving them here, is there a particular repository or issue that I should be looking into? @jdesrosiers
Would be grateful for some guidance.
PS: I will complete the mandatory task once it is announced.

@jdesrosiers
Copy link
Member Author

@diyaayay Glad to hear that you're interested!

is there a particular repository or issue that I should be looking into?

The repo will be made public within the next week. Until then, you can start getting familiar with language servers (https://code.visualstudio.com/api/language-extensions/language-server-extension-guide) and @hyperjump/json-schema (https://github.com/hyperjump-io/json-schema)

@Hugoalv79
Copy link

Hi! I am Hugo, an passionate student of algorithms, math and web i.e computer science in general.

Question: What interests you most about this project?
Answer: I want to learn more about the server functionality, the Json schema and provide an excellent tool for users worldwide.

Question: As mentors and project coordinators, how can we get the best out of you?
Answer: I appreciate direct feedback on what works and what doesn't. I thrive on receiving feedback to improve and adapt quickly. I work best with a clear understanding of the overall project roadmap. Additionally, I'm eager to learn from your experiences, including common errors and insights gained over time.

Question: Is there anything that you’ll be studying or working on whilst working alongside us?
Answer: Most likely, yes. In April, I may begin working, but I am committed to delivering excellent performance in the project and mastering writing scalable code before, during, and after the official dates.

Question: We'd love to hear a bit about your work preferences, e.g. how you keep yourself organized, what tools you use, etc?
Answer: I use notepad to annotate pending tasks of my life, I'm responsible and I know how to prioritize tasks, I'm constantly learning new things and trying to code new stuff, I have good communication skills.

@benjagm
Copy link
Collaborator

benjagm commented Feb 27, 2024

Thanks a lot for joining JSON Schema org for this edition of GSoC!!

Qualification tasks will be published as comments in the project ideas by Thursday/Friday of this week. In addition I'd like to invite you to a office hours session this thursday 18:30 UTC where we'll present the ideas and the relevant date to consider at this stage of the program.

Please use this link to join the session:
🌐 Zoom
📅 20124-02-29 18:30 UTC

See you there!

@diyaayay
Copy link

diyaayay commented Feb 27, 2024

Tried implementing a small LSP for plain text files. The server validates the plain text document and flags all occurrences of words that use ALL CAPS.
Thanks a lot for the resources @jdesrosiers
Here is the implementation:
https://github.com/diyaayay/LSP/tree/main/lsp-sample

Diving into https://github.com/hyperjump-io/json-schema now.
If there is anything else that we should be studying to have a better try at the qualification task or in general to learn more about the project, let us know. Thanks:)

@jdesrosiers
Copy link
Member Author

Qualification Task

The repo is now public at https://github.com/hyperjump-io/json-schema-language-tools.

The purpose of the qualification task is largely for us to get an idea of your suitability for this project. While this project will require good coding skills, your collaboration skills are what will be most important. If you're the type of person who prefers to be given detailed requirements and then left alone to get it done on your own, this is not the project for you. With this project, we're figuring things out as we go. There will be a lot of change and a lot of uncertainty. I need someone who is flexible to change and can be part of determining the direction of the project as we go. You won't be building something for me, you'll be building something with me.

That's why I'd like you to do your qualification task as a pair. When you find a partner, create a group DM in Slack and include your partner and me (@jdesrosiers). There you can discuss what you're going to work on and how you're going to collaborate. Try to complete the task together rather than dividing up the work between you.

The task is simply to make a contribution to the language server. I've tagged a few issues with gsoc for you to choose from. You can also propose something, but be careful about the scope of what you're proposing. You want something interesting enough to display your skill, but not too big that you can't get it done. Remember that quality is way more important than quantity or speed, so take your time, don't do too much, and do it well. With your PR, include a short screen capture video demoing the feature in both VSCode and Neovim.

The issues I created aren't very detailed. Make sure to ask questions to ensure you understand what you need to build. Consider me a collaborator on your task, but in a product manager role. Don't be afraid to include me, but also don't spam me.

@mabagoury
Copy link

mabagoury commented Feb 29, 2024

Hi!

I am Mohammed. I am an aspiring software engineer with a focus on backend development. I recently graduated from Zagazig University with a computer and systems engineering major.

Here is a little more about me in the Q/A format:

Q: What interests you most about this project?
A: I have 3 main reasons:

  1. I like to build developer tools especially ones I use myself. And JSON Schema is one of those.
  2. As a backend developer, the project is an opportunity to build a whole new type of server for me.
  3. I have always wondered how useful features like auto complete, go to definition, and get all references are built. And this project opens the door to DO it.

Q: As mentors and project coordinators, how can we get the best out of you?
A: I would say I am better at software design than implementation. I like to go through business requirements (or an existing product) and evolve a high-level design that is scalable and maintainable. I can help with constantly improving the design (and implementing it of course) as we add more features.

Q: Is there anything that you’ll be studying or working on whilst working alongside us?
A: Nope. I just graduated and I currently have no job.

Q: We'd love to hear a bit about your work preferences, e.g. how you keep yourself organized, what tools you use, etc.
A: Here is a list of tools I use while working. It should also show how I keep focused and organized:

  • OS: Linux (currently Ubuntu)
  • IDE: WebStorm
  • Text editor: VSCode (for quick file changes)
  • VCS: Git + GitHub
  • Note-taking and planning: Notion
  • Time-tracking: Toggl Track

Looking forward to taking advantage of this learning opportunity and contributing to this great organization.

@LordRona
Copy link

LordRona commented Mar 6, 2024

Hello
My name is Ronard, a final year computer science Major at the University of Buea. My area of focus is web development.
Here is a little more about me in the Q/A format:

Q: What interests you most about this project?
My interest in this project is to gain in-depth knowledge of JSON Schema specifications, best practices, and implementation details. A project like this will give me a leverage in working on real-world challenges and collaborate with experienced developers.

Q: As mentors and project coordinators, how can we get the best out of you?
To get the best out of me as a mentee:
As a mentee, I value guidance and mentorship to enhance my learning and growth. Provide regular feedback on my work, highlighting areas of improvement and acknowledging my strengths. Offer constructive criticism and suggestions for improvement while fostering a supportive and encouraging environment.

Q: Is there anything that you’ll be studying or working on whilst working alongside us?
Answer:
Most likely, No. I have dedicated my time to working on this project

Q: We'd love to hear a bit about your work preferences, e.g. how you keep yourself organized, what tools you use, etc?
Answer: I prefer to keep myself organized by using a combination of digital tools like Notepad and calendar applications (e.g., Google Calendar). I rely on to-do lists, set priorities, and track progress regularly. Additionally, I appreciate clear communication, well-defined goals, and regular check-ins to stay on track and ensure a smooth workflow.

@andreolli-davide
Copy link

Hello to all mentors,
I'm Davide, I study and live in Italy and I attend the Computer Science course at the University of Trento. In my spare time I work for a racing team called E-AgleTRT, a team in the Formula SAE category. I belong to the telemetry department, which deals with collecting and transmitting all the data that the car sensors produce. There are more than 80 people in the team, including 20 software engineers with whom I have the pleasure of collaborating. I also tutor the Computer Programming part 1 course.
Some contributions that have been made public are:

What interests you most about this project?

For about a year now, I have been using NeoVim, which unlike other IDEs allows and requires an understanding of how the editor interfaces with the code and language logic. This has led me to learn how LSPs work and their implementation, from the real time observation part of the code to the actual communication between the service daemons (such as clangd, rust-analyzer, ...) and the various editors. What I find exciting about this project is the possibility of getting into the actual core of these services and experiencing what the protocol can offer. In addition, I have been using various libraries and tools developed by the Json Schema community and would love to interface with the people involved, who I believe are organised and very knowledgeable.

As mentors and project coordinators, how can we get the best out of you?

From what I have noticed in my previous experiences, I would appreciate it if coordinators would provide regular feedback to avoid misunderstandings and be available to clarify any doubts about the project. Good communication I believe is crucial and I personally will always keep those involved in the project updated on the status of the work. Working within a good organised team makes development more productive and I personally find it more enjoyable.

Is there anything that you’ll be studying or working on whilst working alongside us?

I am a Computer Science student and will be taking summer exams. Given last years' experiences, I will be busy taking the tests in the two weeks of mid-June. After those, I am free to work without university or work commitments.

We'd love to hear a bit about your work preferences, e.g. how you keep yourself organized, what tools you use, etc?

As mentioned I use NeoVim for development, which allows me to be much more productive than other IDEs I have used in the past (especially Visual Studio Code). My machine runs MacOS, although for compatibility and testing reasons I also use Dev Containers with Docker and Linux virtual machines. As far as the organisation aspect is concerned, I like to try out new tools all the time to compare them and get to know the ins and outs of each one. Lately, I have been obsessed with Airtable, which allows me to keep track of work, school and personal commitments. It offers many interfaces with external services (Github for example) and gives the possibility to develop custom applications and actions with the data entered.

@lmgyuan
Copy link

lmgyuan commented Mar 16, 2024

Hello to all mentors of JSON Schema Org,
I hope this message finds you well! I am Yuan Yuan, currently a Master's student studying Data Science and Computer Science at the University of Pennsylvania in Philadelphia, Pennsylvania, the U.S. I love using programming to solve critical issues in life, so I always seek valuable opportunities to tackle interesting and significant issue. In my spare time, I work with my friends to develop a financial analytics platform that leverages AI and programming to help entrepreneurs manage their financial reporting. Here is my little introduction, tailored to the requirements in the contributor guidelines.

What interests you most about this project?

The opportunity to contribute to the JSON Schema Language Server excites me greatly due to my keen interest in improving developer tools and efficiency. The chance to work on a variety of tasks—from implementing new features to debugging and enhancing existing ones—promises a dynamic and enriching experience. The various kinds of extensions in IDE have improved my coding efficiency tremendously, so I am excited to contribute my share to a project of a similar topic. At the same time, my skills are aligned with the project's requirements. The project aligns with my knowledge of client/server architectures. This project offers a platform to apply my skills in JavaScript, Node.js, and my understanding of asynchronous code, all within the innovative context of the Language Server Protocol (LSP).

As mentors and project coordinators, how can we get the best out of you?

Providing clear, prioritized goals and regular feedback sessions would be invaluable to maximize my contributions. I thrive in environments where open communication and collaboration are encouraged. Given my background in agile development and my proactive approach to problem-solving, I respond well to mentors who challenge me with high expectations while offering support for any coding issues. Additionally, allowing me some autonomy in task selection based on the project’s needs and my areas of interest could foster a mutually beneficial working relationship.

Is there anything that you’ll be studying or working on whilst working alongside us?

During this project, I aim to deepen my understanding of JSON Schema and the Language Server Protocol. Additionally, I plan to refine my skills in writing and working with automated tests, a crucial aspect of maintaining high-quality code. Exploring advanced JavaScript and Node.js patterns for efficient asynchronous programming will also be a focus, ensuring I can contribute effectively to the project's success. Other than knowledge relevant to the project itself, I plan to work on the project full-time during the Summer so I can get the most out of this experience.

Work preferences: how you keep yourself organized, what tools you use, etc?

I maintain organization and productivity through a combination of calendars and deadlines. I love using Google Calendar to organize my time so I know exactly what I need to do at each time of the day. Every time I get a meeting invite, I would immediately make an appointment in my calendar with a reminder 30 minutes before the meeting. If I have a deadline for a task, I would set up a reminder at least one day before the deadline. I have things going on in my life, but Google Calendar helps me stay on top of everything I have. For coding IDE, I use IntelliJ, Visual Studio, and Pycharm a lot. I also have experience with Google Colab for projects in a Machine Learning course I have taken.

Weekly schedule with clear milestones and deliverables

Week 1-2: Onboarding and Initial Planning
Familiarize myself with the project’s codebase and documentation.
Set up the development environment and tools.
Collaborate with mentors to prioritize tasks.
Week 3-4: Implementing Basic LSP Features
Milestone: Basic LSP features such as syntax highlighting and error reporting.
Deliverable: A working implementation in the development environment.
Week 5-6: Advanced LSP Features and Linting Rules
Milestone: Implement autocomplete, go-to definition, and custom linting rules.
Deliverable: Enhanced server capabilities with added user experience improvements.
Week 7-8: Feature Enhancement and Optimization
Milestone: Refine and optimize existing features based on user feedback.
Deliverable: Code optimizations and feature enhancements committed to the repository.
Week 9-10: Testing and Documentation
Milestone: Comprehensive automated tests for new features and documentation updates.
Deliverable: A test suite ensuring feature reliability and updated project documentation.
Final Weeks: Review and Final Adjustments
Collaborate with mentors for final code reviews and adjustments.
Prepare a final report and presentation showcasing the project’s achievements.

This schedule is flexible and will be adjusted as necessary based on the project’s evolving needs and priorities.

@benjagm
Copy link
Collaborator

benjagm commented Mar 18, 2024

🚩 IMPORTANT INSTRUCTIONS REGARDING HOW AND WHERE TO SUBMIT YOU APPLICATION 🚩

Please join this discussion in JSON Schema slack to get the last details very important details on how to better submit your application to JSON Schema.

See communication here.

Copy link

Hello! 👋

This issue has been automatically marked as stale due to inactivity 😴

It will be closed in 180 days if no further activity occurs. To keep it active, please add a comment with more details.

There can be many reasons why a specific issue has no activity. The most probable cause is a lack of time, not a lack of interest.

Let us figure out together how to push this issue forward. Connect with us through our slack channel : https://json-schema.org/slack

Thank you for your patience ❤️

@github-actions github-actions bot added the Status: Stale It's believed that this issue is no longer important to the requestor. label Jun 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
gsoc Google Summer of Code Project Idea Status: Stale It's believed that this issue is no longer important to the requestor.
Projects
None yet
Development

No branches or pull requests

9 participants