Visual Python 이란 오픈소스에 1년 넘게 관심을 가지고 있다.
https://github.com/visualpython/visualpython
GitHub - visualpython/visualpython: GUI-based Python code generator for data science, extension to Jupyter Lab, Jupyter Notebook
GUI-based Python code generator for data science, extension to Jupyter Lab, Jupyter Notebook and Google Colab. - GitHub - visualpython/visualpython: GUI-based Python code generator for data science...
github.com
Visual Python
GUI solution for Data Science
visualpython.ai
JavaScript 기반으로 데이터분석을 위한 Python 코드를 생성해주는 GUI 프로그램이다.
오픈소스에 기여하기 위한 첫 걸음은 역시 사용해보고 고민하는 것.
1. 프로그램 직접 사용해보기

Visual Python은 이렇게 Jupyter Notebook 혹은 Colab 기반의 GUI 프로그램이다.
어떤 오픈소스든지 내가 잘 사용한 경험이 있어야 기여할 때도 좋은 성과를 거둘 수 있다.
나 또한 Jupyter 환경에서 직접 Visual Python을 사용해보고
내가 불편한 점이 있는지
직접 느끼고자 했다.
하나의 예시를 살펴보자

이것은 데이터를 시각화해주는 App중 하나이다.
입력해야할 항목들이 상당히 많은데
겨우겨우 입력했다 쳐도
혹시 에러가 난다면?
파이썬 및 프로그래밍 초보자를 위한 툴인만큼 유저가 에러를 예측하기 힘들 것이다.
그러다가 에러가 뜬다면?
당연히 이전에 입력했던 내용을 그대로 입력해야하는 대참사가 발생한다.
2. 개선점 고민하기
문제점을 찾았다면 이를 어떻게 개선할지 고민해야 한다.
오픈소스에 이슈를 생성하는 유형은 다양한데
내가 직접 기여를 하고 싶다면, 개선점 방향을 제시해서 메인테이너와 의견을 조율하는 것이 필요하다.
나같은 경우는 위 같은 문제에서
입력한 데이터를 실행했을 때, 다시 그 앱을 열었을 때 이전에 입력된 데이터 정보가 남아있었으면 좋겠다고 느꼈다.
그럼 다음과 같은 문제가 생길 수 있다.
만약 오류가 없으면? 그럼 새로 만들고 싶으면 하나하나 다 지우는 것도 귀찮은거 아냐?
그렇다. 그럼 여기서 또 하나의 개선점을 제시해보자
그럼 모두 한번에 지워주는 Clear 기능을 추가하면 되지 않아? Reset 버튼 하나 만들면 되지
어차피 우상단 x 버튼이 기존 Cancel과 동일한 기능을 하고 있기 때문에
Cancel 버튼 대신 Reset 버튼을 만들어도 될 것 같았다.
정리하면 다음과 같다.
- Cancel 버튼 대신 Reset 버튼을 만든다.
- Reset 버튼의 기능은 모든 입력 데이터를 지워주는 역할을 한다.
- 한 번 실행한 App에서 이전 입력 데이터를 저장하고 있는다.
3. 이슈 등록
자, 문제도 발견했고 나름의 개선점을 찾았다면
Github 이슈에 등록할 차례이다.

Visual Python 경우에는 이슈 등록 시, 위와 같은 카테고리중 하나를 선택해야 한다.
난 기능 개선이니 Feature request로 선택
내가 고민한 과정에 대해 적어보자

물론 내가 제시한 의견이 좋은 아이디어라면 좋겠지만
메인테이너의 개발 방향과 맞지 않을 수도
혹은 굳이 필요하지 않는 기능일 수 있다.
따라서 메인테이너와 의견 교환은 필수이며, 만약 거절당했다 하더라도 상처받지 말자
모든게 다 accept 된다면, 그 오픈소스야 말로 산으로 갈 수 있다.
그렇다면, 메인테이너의 답변을 기다려보도록 하자
그리고 얼마 지나지 않아..
메인테이너의 답변이 달렸다.

이미 있는 기능이라고 한다 ㅜㅜ
아쉽게도 이번에 찾은 개선 포인트는 포기해야할 것 같다.
https://github.com/visualpython/visualpython/issues/232
Suggest : Creating a RESET button instead of a Cancel button · Issue #232 · visualpython/visualpython
I felt the need for a RESET button in two situations. Initialize all the data I entered If an error occurs after running the app, and I want to modify form of app from the previous input data Cance...
github.com
하지만 포기하지 않고
다른 개선점을 찾아보았다
2023년 4월에 pandas 2.0 릴리즈 이후
pyarrow와 parquet 포맷을 사용할 수 있게 되었고
이로 인해 file read/write 성능이 대폭 향상되었다는 소식을 들을 수 있었다.
visual python에서 file read/write는 pandas 라이브러리에 의존하고 있었고
사용자 옵션을 통해 pyarrow로 r/w 가능하면 어떨까?
그리고 pickle 포맷과 함께 parquet 포맷도 함께 제공해줄 수 있지 않을까?
그래서 다시 이슈 등록

해외 블로거가 pandas 1.x 버전과 2.0 버전을 비교하며
pyarrow를 사용했을 때 얼마나 성능이 향상되었는지 테스트한 블로그를 레퍼런스로 함께 작성하였다.
그리고

메인 컨테이너의 긍정적인 답변이 날라왔다.
https://github.com/visualpython/visualpython/issues/233
Suggest : Using parquet and pyArrow, when R/W files · Issue #233 · visualpython/visualpython
How about using parquet and pyArrow, when read and write files? Starting with pandas 2.0, using pyArrow reduces file reading time. Also parquet data type is better performance than pickle. Referenc...
github.com
이제 나름대로 코딩을 해봐야겠다.
'Open Source 개발' 카테고리의 다른 글
[Visual Python] 오픈소스 컨트리뷰션 - 새로운 기능 추가하기 (0) | 2023.08.27 |
---|---|
[오픈소스 개발기] pypipo는 어떻게 만들었을까? (0) | 2023.08.06 |
[오픈소스 개발기] 내가 만든 오픈소스 pip 등록하기 (0) | 2023.07.10 |
[오픈소스 개발기] pypipo : CLI 만들기 (0) | 2023.07.08 |
[오픈소스 개발기] pypipo : PEP8 및 클린코드 적용하기 (2) | 2023.07.08 |