Refined Notepad a simple text editor project implemented in Python. It can be used to create and edit text documents.
Working on Refined Notepad has been a fun learning experience that has taught me more about Python, the GitHub flow model, and industry standard practices.
I was motivated to begin the Refined Notepad project in Summer 2018 because of a motivation to learn more about the Python programming language and creating a GUI. I began to think about a program I could create that could have real-world use. Eventually, I came up with the idea of creating a text editor of sorts in order to enhance my knowledge of the Python programming language. I also thought it would be fun to create something that I could use in my daily life. With these goals in mind, I set off on creating a notepad-like text editor in Python and began coding in October using the GitHub flow model and industry standard practices.
Working on this project has been a fun learning experience as I have learned more about Python and industry standard procedures that are followed when creating a software project. Once I formalized the idea for my project, I drew a diagram on how it would function. After this, I created a GitHub repository to house the projects code and related material. I then began to code my Project in Python3 using the Tkinter package to create the notepad’s GUI, in the Atom text editor. I began by implementing code that would create the window and an extremely basic GUI for the notepad that the user could type in. I then set about creating a menubar for the notepad, with several submenus to give the user access to the notepad’s features. The first submenu was the “File” menu, which contained options for saving the user’s writing and exiting the program. I had to implement these saving and exiting features as functions and then create buttons for them in “File” menu, which when clicked would execute the function. Additionally, I created a “Help” menu with information about the program and where to go for assistance. I followed a similar process for when I implemented the “File” menu’s features, but instead of calling functions that altered the program’s state, the “Help” menu’s functions simply displayed a pop-up message. Throughout this implementation process, I regularly committed, with detailed messages pertaining to what the commit was doing, and pushed these commits to GitHub. After completing these tasks, I now had a basic notepad application created in Python.
Implementing features became more challenging after this and as a result, I began to rely more heavily on the GitHub flow model. I created issues in the Issue Tracker to note potential features and bugs for the program. Additionally, I also used the Issue Tracker to receive and respond to software reviews for my program. I often created branches for adding new features and fixing bugs. For example, when creating the “Edit” menu (which contained undo, redo, copy, etc. features), I made a separate branch for this because these features were more challenging to implement than the previous ones. I would regularly commit and push to these branches as I implemented the code. Since these branches were separate from the master branch, if something was broken or not completed, it would not affect the main codebase for the program. Additionally, once I had pushed completed code to these branches, I would create Pull Requests containing the branch’s code and a description as to what it did. I would then test and review these Pull Requests before deciding whether or not to merge them into the master branch. I also took care in organizing the repository’s files by, for example, separating code into a folder called “src” and separating project-related content into a folder called “docs”. This gave me good experience in following the GitHub flow model and adhering to industry standard procedures.
Having thorough testing is key for any software project to be truly successful. I am using Travis CI for testing so my project is checked automatically every time content is pushed to the repository. Currently, Travis CI tests the quality of the program’s Python code by checking to see if it adheres to the PEP8 style guide standards. Additionally, there are also checks in place to check the quality of the program’s writing, such as for the README, using Proselint. I am currently working to implement and create more automated testing for the project, but I have had trouble doing this. As a result, to check the program itself I am currently doing manual testing by running the program and completing a variety of different tasks, in a variety of different orders, to make sure everything is functioning correctly.
As of right now, my software project is functioning with no issues. The user can write in the program’s text area and save or open writing using implemented features. Additionally, the user can use a host of features for formatting the text such as features for redoing, undoing, copying, cutting, and pasting text. The user also has access to help features with information about the program and how to report issues. These features help enhance the user experience.
Here is a photo of the program running: