Hi, I'm Wilhelmina Asante, a first-year student studying Computer Science at The Kibo School of Technology. I want to share an exciting journey I embarked on, with my teammates, during my summer internship at CodeDay Labs where I contributed to Zulip.
Zulip is an open-source Project for team collaboration. It was started in 2012 by Jeff Arnold, Waseem Daher, Jessica McKellar, and Tim Abbott. Zulip provides essential features, including a unique topic-based threading system, streams (categories of conversations), and compatibility with various devices and operating systems. It is widely used by companies and organizations to streamline internal communication and facilitate team collaboration.
Problem Description
The task assigned was to implement settings for typing indicator delays during registration which involved adding the three typing notification constants set on the server to the POST/register response. These three constants namely:
● TYPING_STARTED_WAIT_PERIOD
: Used to indicate how actively a compose box is engaged. A ‘still typing’ notification is sent after every 10 seconds to extend the expiry of this notification.
● TYPING_STOPPED_WAIT_PERIOD
: Used to indicate how long a user stopped typing in the compose box. After a wait of 15 seconds, the server should send a ‘stopped typing’ notification.
● TYPING_STARTED_EXPIRY_PERIOD
: Used to indicate the wait time before it is assumed a client has gone away and expires its typing status.
These constants are used to help enhance the user experience within the Zulip application by providing real-time feedback.
Setting Up Zulip
To prepare our team for the project, I followed the step-by-step guidance in the Zulip setup tutorial for the Development Environment. This tutorial outlined the necessary steps to get Zulip up and running on my local machine. Since I'm using Windows, the most suitable approach for setting up the Zulip environment was to utilize the Windows Subsystem for Linux (WSL). Here's how I achieved this:
Prerequisite Installation: Initially, I installed all the prerequisites by downloading, installing, and configuring Ubuntu.
WSL Setup: With WSL, I created a Linux environment within my Windows operating system. This enabled me to seamlessly run Linux-based tools and applications, which are often necessary for Zulip development.
Following the Tutorial: I followed the instructions provided in the Zulip setup tutorial meticulously. This tutorial offers clear and straightforward guidance on how to set up a development environment for Zulip.
Forking the Zulip Repository: After ensuring that the prerequisites and WSL were properly set up, I proceeded to fork the Zulip repository from its main branch to my local machine. This step allowed me to have a copy of the Zulip codebase on my local system, making it accessible for development work.
Solution
The constant values in the default_settings.py which serves as the constants for Zulip were defined and parsed in the realm when the program was fetching initial state user data. This made a way to parse the constants to the POST/register API endpoint. Below is a breakdown of our implementation as a team.
Front-End: We obtained the
typing_expiry_wait_period
directly frompage_params
for use in./web/src/typing_events
. We could not directly importpage_params
fortyping_started_wait_period
andtyping_stopped_wait_period
from./web/src/typing_status
because it was defined outside of its root directory. Instead, we created constants in./web/src/typing
and passed them as parameters totyping_status.update
. We also had to define the constants in theweb/tests/typing_status.test
because the values inpage_params
are only populated when an API is called.Back-End:
For the Backend changes, we added typing constants to the response returned by the
post /register
API. We added the constants tofetch_initial_state_data()
under the conditionif want("realm")
, this is because we believe you only need these constants when you are in a realm. We also edited the OpenApi documentation to reflect the change in the response of the API. We also edited the tests to verify the contents of the page_params and reflected this change. In the front-end change, we retrieved the constants from page_params instead of defining them there.Our Implementation was successfully merged into the Zulip mainstream and Issue
25656 has been successfully closed.
Challenges I encountered these challenges while on Zulip:
● Setting up the codes using Windows Subsystem for Linux.
● Understanding the code structure and organization of Zulip.
● Locating files with relevant information.
● Identifying how to solve the problem.
● External challenges like poor internet connectivity.
However, I was able to overcome these challenges with the help of Zulip’s Documentation which gives instructions on setting up Zulip, navigating through the codebase, and finding the relevant needed files for the success of the project. Another support that helped me during my internship was my amazing teammates who took time every day for a virtual meeting where we discussed our progress and helped me where I was lagging, And not forgetting My mentor who was always checking on us and demonstrated a sense of team support among us.
Technical And Non-Technical Skills Gained
I gained the following valuable technical and non-technical skills while working on Zulip.
Technical skills:
I learned to use the Windows Subsystem for Linux (Ubuntu).
Gained some understanding of REST APIs and the Django framework.
I learned to read codes more carefully and pay attention to the details, which is crucial in programming.
Non-Technical Skills:
I had the chance to experience how project supervisors monitor progress in the industry through the consistent submission of concise standup reports.
I learned how to collaborate more effectively in a professional context.
I learned the importance of communication concerning clarity in the real-world industry. Impact of Learning and Growth This industry experience has transformed my personal growth and learning experience in the following ways as a first-year computer science student.
Practical Application Of Knowledge; I had the opportunity to apply the theoretical knowledge gained in the course to real-world problems. One notable instance was how Python played a crucial role while working on Zulip. I have come to understand the importance of what I learn in the class through this practical experience and why it is necessary to pass through these three years of training and studying computer science.
Skill Development; I learnt valuable technical and soft skills as well as gained domain-specific knowledge that is rare to find in the classroom setting. Some notable examples include learning how to effectively communicate within the Zulip community, understanding the process of making a pull request, and gaining the skill of writing detailed reports.
Networking: I made some great connections with tech giants throughout my industry experience through technical interviews, which were part of the first phase of the experience. I used the opportunity to ask good questions which led to getting personalized mentorship and assistance when necessary from the likes of Safiyah Abdulsalam.
Professional Development: I have learned how to communicate, collaborate, and address issues in professional settings. I feel much responsible for my actions and decisions.
Personal Growth; Through feedback from mentors, coursemates, and self-reflections, I have been able to identify areas I need to improve. With the help of my mentor, I have been able to access myself and develop a learning pattern that will be highly beneficial to my long-term success.
Acknowledgment
I am grateful to Kibo School for this fantastic opportunity to be part of this experience. It's like a dream come true to connect with top tech experts through this experience.
I have always dreamt of this and Kibo has been a doorway to reality. Thank you to the whole Kibo team for your support.
Our Mentor, David Walter played an exceptional role throughout this experience. He got involved in the project and at every phase of the project he was with us. His support and coaching helped us complete this project successfully and merge our implementation.
A big thank you to my teammates – Samuel Adeyemi, Samuel Kabuya, and Oluwaseyifunmi Adeyemo– for their support, time, and dedication to the success of this project. I am more than happy to be part of such an amazing team of goal-driven persons who always seek excellence.