GSoC 2024 Ahmed Hossam
Name: Ahmed Hossam Mohamed
University: Zagazig University, Faculty of Computers and Informatics (2022 - Present)
Time Zone: GMT +2
Overview: I am a second-year computer science student. I always try to explore the depths of technology and its applications. With a knack for problem-solving and a curiosity-driven approach to learning.
Contact Info:
ahmedhosssamps@gmail.com
https://github.com/ahmedhosssam
https://www.linkedin.com/in/ahmedhossamm/
@ahmedhosssam:matrix.org
@ahmedhossvm (Discord)
- I plan to dedicate approximately 12 hours per week before the start of GSoC to familiarize myself with the codebase and documentation.
- During the coding phase of GSoC, I am prepared to invest a minimum of 24 to 30 hours per week into the project. Furthermore, I am open to continuing my involvement with the SunPy project beyond the GSoC period. If there is additional work to be done.
- Over the past weeks, I have spent a great deal of time inspecting the codebase of Sunpy and trying to resolve issues.
- I took a deep dive into the Sunpy documentation and I became familiar with many Sunpy’s modules.
- I joined the matrix room and became familiar with the project's community and mentors. And I was asking questions about the project and the codebase almost every day.
Contributions to Sunpy:
- Remove vendored obsgeo_to_frame in favor of using Astropy #7470 Merged
- A more appropriate way to define moon_radius constants #7465 Merged
- Add exception and warning for a.helio.MaxRecords #7540 Merged
- Reimplement Slugify #7461 Closed
- pytest error in pytest.ini #7455 Issue
Personal Projects:
- Dynamo Tree https://github.com/ahmedhosssam/dynamo-tree:
This is a Social Media Tracker developed using C++ and Javascript to track posts, comments, and shares for each user on a social media platform. User objects are stored in an AVL tree (chosen for balanced search and retrieval operations).
- Social Media App https://github.com/ahmedhosssam/quora-clone:
A Full Stack Social Media Application using React and Firebase.
I’m also a competitive programmer and I’m active on codeforces.
Problem Definition: Sunpy provides access to solar features and events held by the
Heliophysics Event Knowledgebase (HEK). Features and events include type, physical
extent, location, lifetime, etc. However, the current implementation of HEK
features/events in Sunpy does not leverage the full use of sunpy, for instance, many
features/events properties are not utilizing Astropy units or sunpy coordinates, despite
the availability of adequate information within the HEK description to facilitate this
integration.
Solution: The solution for this problem could be done with the following:
- Design and create classes that represent HEK solar features/events that full utilize SunPy capabilities.
- These feature and event classes should possess a general design, ensuring compatibility with descriptions found in other catalogs beyond HEK.
This project will be built upon the groundwork laid by a previous GSoC Project, providing a solid foundation. Leveraging this existing work will streamline the project's scope.
And because a lot of groundwork has already done, this project will focus on the following tasks:
- Design the class diagram for sunpy.net.hek.
- Refactor and reimplement some functions in the finished work in GSoC 23 project.
- Create a new utility file named
util.py
that includes some HEKClient functions that doesn't make sense to be attached to the client, in addition to new utility functions as well. - Add documentation strings for each function.
- Unit tests and Continuous Integration (CI).
In addition to the above tasks, other crucial aspects must be integrated into the
implementation process:
- Clean, reliable and maintainable code.
- Blog posts containing a log of everything that has been done and what's next.
The following diagram describes the whole sunpy.net.hek classes in a high-level fashion:
UML Diagram: https://imgur.com/a/QdNcj0U
Inside HEKClient, I'm planning to refactor the finished work in GSoC23, this includes the
following:
- Reorganize
parse_columns_to_table
by adding some variables to reduce complexity. - The function
parse_astropy_unit(str)
needs to be rewritten. -
Creating a new utility file
util.py
The following functions will be moved from HEKClient into a newutil.py
file:
def parse_times (table)
def parse_unit (table, attribute, is_coord_prop = False)
def parse_astropy_unit (str)
def parse_chaincode (value, idx, attribute, unit_prop)
def parse_columns_to_table (table, attributes, is_coord_prop = False)
def parse_values_to_quantities (table)
def get_unit (unit_prop, str, is_coord_prop = False)
The reason for this is that these functions are best suited as utilities rather than being directly
attached to the HEKClient.
Writing tests is a crucial part of the software development lifecycle. Most software products
should have some kind of automated testing process whose mission is to ensure the delivery of
correct functionality. Sunpy’s HEK interface is no Exception. Each function/class in hek.py
,
utils.py
, and attrs.py
will be accompanied by test cases to assert the function/class is properly
working.
Like testing, documentation is an important part of any software product. The plan for
documentation includes a documentation string inside every class/function so that future
developers will have an easier time maintaining the existing codebase. As for users, if
the situation demands it, there will be a step-by-step guide explaining the usage of the
client. Also, documentation strings exist in almost every sunpy function, except
sunpy.hek
, that’s also a problem.
- Getting to know mentors, deep dive into documentation, getting up to speed to begin working on the project.
- Socialize and interact with other community members (students and mentors)
- Learn more about OpenAstronomy as an organization with a mission and vision
- Familiarize myself more with the architecture and codebase
- Clarify ambiguous portions in the proposal
- Start a blog
- Refactoring
HEKClient
functions and writing documentation strings - Creating
util.py
- Begin moving some HEKClient functions into
util.py
- Writing initial
test_util.py
- Complete implementation and documentation strings for
util.py
- Creating an initial pull request and seeking initial reviews
- I will be studying and taking final exams in college, but I will be active in the community
- Complete writing
test_util.py
- Making sure that
util.py
passes all the tests - Creating a pull request for
util.py
andtest_util.py
and seeking reviews
- Writing unit tests for HEKClient
- Creating a pull request for
test_hek.py
and seeking reviews
- Seeing if there is additional work to be done, and seeking reviews before the final evaluation.