Skip to content

Blur Animation source code and simplified output #328

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

Merged
merged 13 commits into from
Mar 28, 2025

Conversation

marcodallavecchia
Copy link
Contributor

Hello everyone!
I've seen from this issue, that we were looking to implement a better blur animation figure for section 06-blurring.

I've implemented a Python script that creates this animation with Matplotlib. Here are a few points:

  • I created a simple single-channel 30x30 pixels image of a letter A (using ImageJ) → available in episodes/data/A.tif
  • I exported the animation output directly in episodes/fig/blur-demo.gif
  • The animation has as a first frame the complete blurred image (for the print version, as described in the issue)
  • I chose more or less arbitrarily the colors → please let me know which colors you think could be better / more accessible
  • The code works but it's not the cleanest nor the most structured. But I tried to keep it well documented.
  • I've attached a small README and env.yml file for the requirements
  • Of course, with this script, anyone can change the source image, colors, speed and more of the animation and create a better version if desired.

A final extra point from my side: I'm a big believer that every output should be associated with its source-code, especially in the carpentries context where we are trying to keep things reproducible. In this case, I couldn't find the code used to create the previous version of the blur-demo.gif so I took the freedom to create a episodes/files/source-code/ directory, where we could pool together all the code snippets for generating all the output that would later feed on the website (this is where my current create_blur_animation.py file is). I am unsure if this is the best place to have such folder, maybe in the root could even be better for clear reference.

I hope this is helpful for the issue and course material. I am open to improve it in the near future after some feedback!

Marco Dalla Vecchia added 2 commits June 20, 2024 16:24
…f a single-channel image of letter A. I added the A.tif image in data and the exported animation directly into the fig directory
Copy link

github-actions bot commented Jun 20, 2024

Thank you!

Thank you for your pull request 😃

🤖 This automated message can help you check the rendered files in your submission for clarity. If you have any questions, please feel free to open an issue in {sandpaper}.

If you have files that automatically render output (e.g. R Markdown), then you should check for the following:

  • 🎯 correct output
  • 🖼️ correct figures
  • ❓ new warnings
  • ‼️ new errors

Rendered Changes

🔍 Inspect the changes: https://github.com/datacarpentry/image-processing/compare/md-outputs..md-outputs-PR-328

The following changes were observed in the rendered markdown documents:

 06-blurring.md                                     |   3 +-
 data/letterA.tif (new)                             | Bin 0 -> 1136 bytes
 fig/blur-demo.gif                                  | Bin 32633468 -> 567305 bytes
 .../06-blurring/create_blur_animation.py (new)     | 160 +++++++++++++++++++++
 md5sum.txt                                         |   2 +-
 5 files changed, 162 insertions(+), 3 deletions(-)
What does this mean?

If you have source files that require output and figures to be generated (e.g. R Markdown), then it is important to make sure the generated figures and output are reproducible.

This output provides a way for you to inspect the output in a diff-friendly manner so that it's easy to see the changes that occur due to new software versions or randomisation.

⏱️ Updated at 2025-03-25 20:09:35 +0000

github-actions bot pushed a commit that referenced this pull request Jun 20, 2024
github-actions bot pushed a commit that referenced this pull request Jun 21, 2024
@uschille uschille self-assigned this Aug 21, 2024
github-actions bot pushed a commit that referenced this pull request Nov 28, 2024
@uschille
Copy link
Contributor

Thank you very much @marcodallavecchia for this contribution. We discussed this in today's Curriculum Advisory Committee meeting. We do like the new animation and envision that it can be included in the blurring episode.

Regarding the location of the script, we do not have an ideal solution but our consensus (as of now) is to keep code scripts that re-generate figures in episodes/fig/source/. The reasoning is that we do not want to scare or distract learners with more complex code than what is covered in the lesson, and we believe they are less likely to look into a subfolder of the fig/ directory than the files/ directory. I have taken the liberty to update the branch accordingly.

One suggestion I have is that you might use a default value for the kernel size so that maintainers can reproduce the figure without having to guess the kernel size. I tend to prefer scripts that do not require interactive input for reproducibility.

There may be other feedback on the script, so I'll keep the pull request open for others to comment - 👋 @mkcor.

@marcodallavecchia
Copy link
Contributor Author

@uschille thanks a lot for coming back to this!

  • I can definitely add a default kernel size or even remove the user input completely for reproducibility purposes.
  • Regarding the organization, I agree with the folder structure you opted for, mine was just a proposition, because I couldn't find any code to create the previous animation
  • I will wait to make any changes to see if any other feedback reaches my ear any time soon

👋 Marco

@K-Meech
Copy link
Contributor

K-Meech commented Nov 30, 2024

Thanks @marcodallavecchia - the new blur animation looks great! I'd agree with @uschille 's comments above.

We will need to update the text in the blurring episode to match this new animation. For example, above this gif it says This animation shows how the blur kernel moves along in the original image in order to calculate the colour channel values for the blurred image. - so we'd need to do some re-wording to make it clear that it's grayscale etc. Potentially it would be good to replace all the early parts of the episode that reference cat images to use the grayscale A instead. @uschille - what's your preference for this? We could handle this in a separate PR, but then we'd need to keep the original blur-demo.gif around in the meantime.

@uschille
Copy link
Contributor

We will need to update the text in the blurring episode to match this new animation.

Yes, it will require a bit of work to incorporate the new animation in the lesson.

@marcodallavecchia would you perhaps be willing to give it a try?

I'd suggest to keep this PR open while we are working on it. Does this sound reasonable @K-Meech?

@K-Meech
Copy link
Contributor

K-Meech commented Dec 1, 2024

Sounds good to me @uschille !

@marcodallavecchia
Copy link
Contributor Author

Dear @uschille and @K-Meech,
Thanks a lot for the feedback and having the foresight of the needed changes in the lecture itself. I would gladly take the challenge to try and adapt it, given some time (probably until after the holidays).

Just to clarify, should I open a new PR only with the lecture changes, or should I integrate the text changes with the blur animation code altogether?

@K-Meech
Copy link
Contributor

K-Meech commented Dec 3, 2024

Great - thanks @marcodallavecchia ! I'd say incorporate it directly into this PR, along with the blur animation code.

github-actions bot pushed a commit that referenced this pull request Feb 15, 2025
@marcodallavecchia
Copy link
Contributor Author

Hello, sorry for the long delay on an update on this!
I just pushed an update on the text and code of the blurring animation for this PR. I ended up not replacing the cat picture for the A image, but simply adapting the text to make it consistent with what the animation shows.
If you think replacing the cat picture example is still recommended, I can still do it in the new future, let me know what you think.
Cheers,
Marco

Copy link
Contributor

@K-Meech K-Meech left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @marcodallavecchia - these changes are looking great! Sorry for the delay in getting back to you.

I noticed one comment that needs to be removed from the script now that user input is removed (see below). Otherwise, I think the line you added to the blurring episode introduces the new animation nicely 😄 I'd be happy to merge this into the main lesson soon - @uschille is there anything else you'd like to change?

# The script can be executed with
# $ python create_blur_animation.py
#
# The script will prompt the user to enter the kernel size.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# The script will prompt the user to enter the kernel size.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh good catch! I just pushed a new version with some better documentation of the packages needed to run the code as well. Thanks for the feedback!

github-actions bot pushed a commit that referenced this pull request Mar 11, 2025
Copy link
Contributor

@mkcor mkcor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm looking forward to seeing this merged!

###

### USAGE
# The script requires the following Python packages:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't it be better/safer to specify package versions as well?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would you in favor of adding a env.yml or requirements.txt file in the source directory at that point? Otherwise I could change the phrasing with: The script was tested with the following Python packages

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hope it's not confusing to add an env.yml file in episodes/fig/source/06-blurring/ (what if there were more than one script in there?). Personally, I think it would be enough to 'copy-paste' the content of the env/requirements file right here, so you just append ==[version number] at the end of lines 13--16.

#
# The script can be executed with
# $ python create_blur_animation.py
# The output animation will be saved directly in the fig folder where the less markdown will pick it up
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the 'less markdown,' please?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ooops sorry another typo.. It was supposed to be lesson. I fixed it in the next commit.

@@ -247,8 +247,7 @@ in [the scikit-image documentation](https://scikit-image.org/docs/dev/user_guide

::::::::::::::::::::::::::::::::::::::::::::::::::

This animation shows how the blur kernel moves along in the original image in
order to calculate the colour channel values for the blurred image.
Let's take a very simple grayscale image to see blurring in action. The animation below shows how the blur kernel (large red square) moves along the image on the left in order to calculate the corresponding values for the blurred image (yellow central square) on the right. In this simple case the image is composed of only a single channel, but it would work as well on a multi-channel image.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Let's take a very simple grayscale image to see blurring in action. The animation below shows how the blur kernel (large red square) moves along the image on the left in order to calculate the corresponding values for the blurred image (yellow central square) on the right. In this simple case the image is composed of only a single channel, but it would work as well on a multi-channel image.
Let's consider a very simple image to see blurring in action. The animation below shows how the blur kernel (large red square) moves along the image on the left in order to calculate the corresponding values for the blurred image (yellow central square) on the right. In this simple case, the original image is single-channel, but blurring would work likewise on a multi-channel image.

I suggested removing 'grayscale' not because it is wrong, of course, but just to avoid the repetition afterwards (when we mention it is single-channel) and because it's actually even 'simpler' than grayscale, it's binary.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, thanks for the rephrasing. I implemented this change in the next commit.

@marcodallavecchia
Copy link
Contributor Author

Hello @mkcor! Thanks for the feedback again. I implemented all the changes you suggested, the only thing I'm not sure about would be about the package requirements. I would be in favor of adding a conda env.yml or a pip requirements.txt file in the source directory if we really want to make the script fully reproducible. Let me know if you like the idea and I can add one!

github-actions bot pushed a commit that referenced this pull request Mar 15, 2025
Copy link
Contributor

@mkcor mkcor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you, @marcodallavecchia! I quite like that your script is so self-contained with the comments describing how to run it and possibly improve it, so I'd keep the list of packages it depends on inside as well. That's my personal preference; I'm not opposed to including an env file if @datacarpentry/image-processing-curriculum-maintainers lean towards this other preference.

###

### USAGE
# The script requires the following Python packages:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hope it's not confusing to add an env.yml file in episodes/fig/source/06-blurring/ (what if there were more than one script in there?). Personally, I think it would be enough to 'copy-paste' the content of the env/requirements file right here, so you just append ==[version number] at the end of lines 13--16.

Comment on lines 17 to 18
# Install them with
# $ conda install numpy scipy matplotlib tqdm
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Install them with
# $ conda install numpy scipy matplotlib tqdm

And then users/readers are free to install the above-mentioned packages as they wish.

Copy link
Contributor Author

@marcodallavecchia marcodallavecchia Mar 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mkcor I see the point, we can go that way, and simply list the packages and let a user install them how they wish. I guess then the only issue I see that while I simply installed the 4 packages mentioned above the actual list is much longer because of dependencies.

$ conda env export --from-history

name: img-proc
channels:
  - conda-forge
dependencies:
  - python=3.12
  - matplotlib
  - numpy
  - scipy
  - tqdm
$ conda list

# packages in environment at /home/mdallave/miniforge3/envs/img-proc:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
alsa-lib                  1.2.13               hb9d3cd8_0    conda-forge
brotli                    1.1.0                hb9d3cd8_2    conda-forge
brotli-bin                1.1.0                hb9d3cd8_2    conda-forge
bzip2                     1.0.8                h4bc722e_7    conda-forge
ca-certificates           2025.1.31            hbcca054_0    conda-forge
cairo                     1.18.4               h3394656_0    conda-forge
colorama                  0.4.6              pyhd8ed1ab_1    conda-forge
contourpy                 1.3.1           py312h68727a3_0    conda-forge
cycler                    0.12.1             pyhd8ed1ab_1    conda-forge
cyrus-sasl                2.1.27               h54b06d7_7    conda-forge
dbus                      1.13.6               h5008d03_3    conda-forge
double-conversion         3.3.1                h5888daf_0    conda-forge
expat                     2.6.4                h5888daf_0    conda-forge
font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
font-ttf-ubuntu           0.83                 h77eed37_3    conda-forge
fontconfig                2.15.0               h7e30c49_1    conda-forge
fonts-conda-ecosystem     1                             0    conda-forge
fonts-conda-forge         1                             0    conda-forge
fonttools                 4.56.0          py312h178313f_0    conda-forge
freetype                  2.13.3               h48d6fc4_0    conda-forge
graphite2                 1.3.13            h59595ed_1003    conda-forge
harfbuzz                  10.4.0               h76408a6_0    conda-forge
icu                       75.1                 he02047a_0    conda-forge
keyutils                  1.6.1                h166bdaf_0    conda-forge
kiwisolver                1.4.8           py312h84d6215_0    conda-forge
krb5                      1.21.3               h659f571_0    conda-forge
lcms2                     2.17                 h717163a_0    conda-forge
ld_impl_linux-64          2.43                 h712a8e2_4    conda-forge
lerc                      4.0.0                h27087fc_0    conda-forge
libblas                   3.9.0           31_h59b9bed_openblas    conda-forge
libbrotlicommon           1.1.0                hb9d3cd8_2    conda-forge
libbrotlidec              1.1.0                hb9d3cd8_2    conda-forge
libbrotlienc              1.1.0                hb9d3cd8_2    conda-forge
libcblas                  3.9.0           31_he106b2a_openblas    conda-forge
libclang-cpp19.1          19.1.7          default_hb5137d0_1    conda-forge
libclang13                19.1.7          default_h9c6a7e4_1    conda-forge
libcups                   2.3.3                h4637d8d_4    conda-forge
libdeflate                1.23                 h4ddbbb0_0    conda-forge
libdrm                    2.4.124              hb9d3cd8_0    conda-forge
libedit                   3.1.20250104    pl5321h7949ede_0    conda-forge
libegl                    1.7.0                ha4b6fd6_2    conda-forge
libexpat                  2.6.4                h5888daf_0    conda-forge
libffi                    3.4.6                h2dba641_0    conda-forge
libgcc                    14.2.0               h767d61c_2    conda-forge
libgcc-ng                 14.2.0               h69a702a_2    conda-forge
libgfortran               14.2.0               h69a702a_2    conda-forge
libgfortran5              14.2.0               hf1ad2bd_2    conda-forge
libgl                     1.7.0                ha4b6fd6_2    conda-forge
libglib                   2.82.2               h2ff4ddf_1    conda-forge
libglvnd                  1.7.0                ha4b6fd6_2    conda-forge
libglx                    1.7.0                ha4b6fd6_2    conda-forge
libgomp                   14.2.0               h767d61c_2    conda-forge
libiconv                  1.18                 h4ce23a2_1    conda-forge
libjpeg-turbo             3.0.0                hd590300_1    conda-forge
liblapack                 3.9.0           31_h7ac8fdf_openblas    conda-forge
libllvm19                 19.1.7               ha7bfdaf_1    conda-forge
liblzma                   5.6.4                hb9d3cd8_0    conda-forge
libnsl                    2.0.1                hd590300_0    conda-forge
libntlm                   1.8                  hb9d3cd8_0    conda-forge
libopenblas               0.3.29          pthreads_h94d23a6_0    conda-forge
libopengl                 1.7.0                ha4b6fd6_2    conda-forge
libpciaccess              0.18                 hd590300_0    conda-forge
libpng                    1.6.47               h943b412_0    conda-forge
libpq                     17.4                 h27ae623_0    conda-forge
libsqlite                 3.49.1               hee588c1_1    conda-forge
libstdcxx                 14.2.0               h8f9b012_2    conda-forge
libstdcxx-ng              14.2.0               h4852527_2    conda-forge
libtiff                   4.7.0                hd9ff511_3    conda-forge
libuuid                   2.38.1               h0b41bf4_0    conda-forge
libwebp-base              1.5.0                h851e524_0    conda-forge
libxcb                    1.17.0               h8a09558_0    conda-forge
libxcrypt                 4.4.36               hd590300_1    conda-forge
libxkbcommon              1.8.1                hc4a0caf_0    conda-forge
libxml2                   2.13.6               h8d12d68_0    conda-forge
libxslt                   1.1.39               h76b75d6_0    conda-forge
libzlib                   1.3.1                hb9d3cd8_2    conda-forge
matplotlib                3.10.1          py312h7900ff3_0    conda-forge
matplotlib-base           3.10.1          py312hd3ec401_0    conda-forge
munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
mysql-common              9.0.1                h266115a_5    conda-forge
mysql-libs                9.0.1                he0572af_5    conda-forge
ncurses                   6.5                  h2d0b736_3    conda-forge
numpy                     2.2.3           py312h72c5963_0    conda-forge
openjpeg                  2.5.3                h5fbd93e_0    conda-forge
openldap                  2.6.9                he970967_0    conda-forge
openssl                   3.4.1                h7b32b05_0    conda-forge
packaging                 24.2               pyhd8ed1ab_2    conda-forge
pcre2                     10.44                hba22ea6_2    conda-forge
pillow                    11.1.0          py312h80c1187_0    conda-forge
pip                       25.0.1             pyh8b19718_0    conda-forge
pixman                    0.44.2               h29eaf8c_0    conda-forge
pthread-stubs             0.4               hb9d3cd8_1002    conda-forge
pyparsing                 3.2.1              pyhd8ed1ab_0    conda-forge
pyside6                   6.8.2           py312h91f0f75_1    conda-forge
python                    3.12.9          h9e4cc4f_1_cpython    conda-forge
python-dateutil           2.9.0.post0        pyhff2d567_1    conda-forge
python_abi                3.12                    5_cp312    conda-forge
qhull                     2020.2               h434a139_5    conda-forge
qt6-main                  6.8.2                h588cce1_0    conda-forge
readline                  8.2                  h8c095d6_2    conda-forge
scipy                     1.15.2          py312ha707e6e_0    conda-forge
setuptools                75.8.2             pyhff2d567_0    conda-forge
six                       1.17.0             pyhd8ed1ab_0    conda-forge
tk                        8.6.13          noxft_h4845f30_101    conda-forge
tornado                   6.4.2           py312h66e93f0_0    conda-forge
tqdm                      4.67.1             pyhd8ed1ab_1    conda-forge
tzdata                    2025a                h78e105d_0    conda-forge
unicodedata2              16.0.0          py312h66e93f0_0    conda-forge
wayland                   1.23.1               h3e06ad9_0    conda-forge
wheel                     0.45.1             pyhd8ed1ab_1    conda-forge
xcb-util                  0.4.1                hb711507_2    conda-forge
xcb-util-cursor           0.1.5                hb9d3cd8_0    conda-forge
xcb-util-image            0.4.0                hb711507_2    conda-forge
xcb-util-keysyms          0.4.1                hb711507_0    conda-forge
xcb-util-renderutil       0.3.10               hb711507_0    conda-forge
xcb-util-wm               0.4.2                hb711507_0    conda-forge
xkeyboard-config          2.43                 hb9d3cd8_0    conda-forge
xorg-libice               1.1.2                hb9d3cd8_0    conda-forge
xorg-libsm                1.2.6                he73a12e_0    conda-forge
xorg-libx11               1.8.12               h4f16b4b_0    conda-forge
xorg-libxau               1.0.12               hb9d3cd8_0    conda-forge
xorg-libxcomposite        0.4.6                hb9d3cd8_2    conda-forge
xorg-libxcursor           1.2.3                hb9d3cd8_0    conda-forge
xorg-libxdamage           1.1.6                hb9d3cd8_0    conda-forge
xorg-libxdmcp             1.1.5                hb9d3cd8_0    conda-forge
xorg-libxext              1.3.6                hb9d3cd8_0    conda-forge
xorg-libxfixes            6.0.1                hb9d3cd8_0    conda-forge
xorg-libxi                1.8.2                hb9d3cd8_0    conda-forge
xorg-libxrandr            1.5.4                hb9d3cd8_0    conda-forge
xorg-libxrender           0.9.12               hb9d3cd8_0    conda-forge
xorg-libxtst              1.2.5                hb9d3cd8_3    conda-forge
xorg-libxxf86vm           1.1.6                hb9d3cd8_0    conda-forge
zstd                      1.5.7                hb8e6e7a_1    conda-forge

And that's where I'm a bit unsure of copying/pasting this whole block inside the .py file.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I can see that what I'm asking for is a sort of hybrid between what you installed explicitly and what the environment actually contains with all specifications (see, for example: https://stackoverflow.com/a/64288844/3885713). But it's standard, e.g.: https://github.com/scikit-image/scikit-image/blob/660cdc9f6ae25eb99df03e737ea96277d6bfe026/requirements/default.txt

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alright, thanks a lot! I was not super aware that it was standard. I will proceed with this approach and make a new commit!

github-actions bot pushed a commit that referenced this pull request Mar 16, 2025
Co-authored-by: Marianne Corvellec <marianne.corvellec@ens-lyon.org>
github-actions bot pushed a commit that referenced this pull request Mar 21, 2025
github-actions bot pushed a commit that referenced this pull request Mar 21, 2025
@marcodallavecchia
Copy link
Contributor Author

Hello! I am so sorry I was trying to understand how updating the fork would work on my side of the repo and I seem to have accidentally merged the datacarpentry:main into the mdv/blur-anim branch which then is affecting this PR. Can you please someone guide me how to fix it? Sorry again!

@tobyhodges
Copy link
Member

@marcodallavecchia it looks like your merge of main made no difference to the files involved in this PR so I think you have nothing to worry about ❤️

github-actions bot pushed a commit that referenced this pull request Mar 25, 2025
@marcodallavecchia
Copy link
Contributor Author

Thank you @tobyhodges! Lucky for me, I didn't break anything! I just pushed another commit on this branch with the incorporation of the last comments. I leave to you if you consider this a good final solution for this PR. Thanks a lot for helping me throughout the process

@tobyhodges
Copy link
Member

Thanks for persevering, @marcodallavecchia 🙌

@datacarpentry/image-processing-curriculum-maintainers this feels to me like it is ready, but since I am no longer one of the Maintainers of the lesson I leave it to one of you to decide whether or not the time has come to push the big green merge button...

@tobyhodges
Copy link
Member

One more point that I have been mulling over this morning, @marcodallavecchia. You wrote

Thank you @tobyhodges! Lucky for me, I didn't break anything!

but I think that merging our main into your branch was fine to do -- perhaps even good! In this instance, there had been no changes in main to the files you have been working on. But in other circumstances there might have been. In those cases, it is possible that a merge conflict could arise between your version of the file(s) and what was now in main and a human would need to resolve those conflicts. The way to do this would be to merge in main and work through the conflicts.

Often, a project maintainer will be happy to do that but in my view it is good open source etiquette for the contributor to handle merge conflicts and ensure that their branch is ready to merge. So in my opinion, merging main was good practice.

@marcodallavecchia
Copy link
Contributor Author

Hello again @tobyhodges. What a great remark, thanks a lot for the clear explanation. I completely see the point and, of course, I would have been happy to go through potential conflicts in the merge with main. Happy to learn from an almost mistake ;)

@mkcor
Copy link
Contributor

mkcor commented Mar 26, 2025

So in my opinion, merging main was good practice.

I concur; GitHub's interface 'invites' you to do so with the "Update branch" button. It's equivalent (and, hence, equally good) if you do it locally at the command line and then push.

@K-Meech
Copy link
Contributor

K-Meech commented Mar 27, 2025

Thanks all! I should have time this weekend to give this a final look over, and then hopefully we can merge 😄 🎉

@K-Meech
Copy link
Contributor

K-Meech commented Mar 28, 2025

Thanks @marcodallavecchia - I had another look through, and this is looking great! 😄
I'll go ahead and merge now - thanks for the contribution! Super nice to see this gif finally updated 🎉

@K-Meech K-Meech merged commit fbdb1fe into datacarpentry:main Mar 28, 2025
3 checks passed
github-actions bot pushed a commit that referenced this pull request Mar 28, 2025
Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
github-actions bot pushed a commit that referenced this pull request Mar 28, 2025
Auto-generated via `{sandpaper}`
Source  : 88f3bdc
Branch  : md-outputs
Author  : GitHub Actions <actions@github.com>
Time    : 2025-03-28 19:42:02 +0000
Message : markdown source builds

Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
@marcodallavecchia
Copy link
Contributor Author

Hello again @K-Meech! Thanks a lot for guiding me through this process and letting me contribute to the project! I hope there will be many more in the future. Excited to see this done 🎊

github-actions bot pushed a commit that referenced this pull request Apr 1, 2025
Auto-generated via `{sandpaper}`
Source  : 88f3bdc
Branch  : md-outputs
Author  : GitHub Actions <actions@github.com>
Time    : 2025-03-28 19:42:02 +0000
Message : markdown source builds

Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
github-actions bot pushed a commit that referenced this pull request Apr 8, 2025
Auto-generated via `{sandpaper}`
Source  : 88f3bdc
Branch  : md-outputs
Author  : GitHub Actions <actions@github.com>
Time    : 2025-03-28 19:42:02 +0000
Message : markdown source builds

Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
github-actions bot pushed a commit that referenced this pull request Apr 15, 2025
Auto-generated via `{sandpaper}`
Source  : 88f3bdc
Branch  : md-outputs
Author  : GitHub Actions <actions@github.com>
Time    : 2025-03-28 19:42:02 +0000
Message : markdown source builds

Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
github-actions bot pushed a commit that referenced this pull request Apr 22, 2025
Auto-generated via `{sandpaper}`
Source  : 88f3bdc
Branch  : md-outputs
Author  : GitHub Actions <actions@github.com>
Time    : 2025-03-28 19:42:02 +0000
Message : markdown source builds

Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
github-actions bot pushed a commit that referenced this pull request Apr 29, 2025
Auto-generated via `{sandpaper}`
Source  : 88f3bdc
Branch  : md-outputs
Author  : GitHub Actions <actions@github.com>
Time    : 2025-03-28 19:42:02 +0000
Message : markdown source builds

Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
github-actions bot pushed a commit that referenced this pull request May 6, 2025
Auto-generated via `{sandpaper}`
Source  : 88f3bdc
Branch  : md-outputs
Author  : GitHub Actions <actions@github.com>
Time    : 2025-03-28 19:42:02 +0000
Message : markdown source builds

Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
github-actions bot pushed a commit that referenced this pull request May 13, 2025
Auto-generated via `{sandpaper}`
Source  : 88f3bdc
Branch  : md-outputs
Author  : GitHub Actions <actions@github.com>
Time    : 2025-03-28 19:42:02 +0000
Message : markdown source builds

Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
github-actions bot pushed a commit that referenced this pull request May 13, 2025
Auto-generated via `{sandpaper}`
Source  : 88f3bdc
Branch  : md-outputs
Author  : GitHub Actions <actions@github.com>
Time    : 2025-03-28 19:42:02 +0000
Message : markdown source builds

Auto-generated via `{sandpaper}`
Source  : fbdb1fe
Branch  : main
Author  : Kimberly Meechan <24316371+K-Meech@users.noreply.github.com>
Time    : 2025-03-28 19:41:13 +0000
Message : Merge pull request #328 from marcodallavecchia/mdv/blur-anim

Blur Animation source code and simplified output
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants