MATLAB Community

MATLAB, community & more

Update Heroes: Evergreen Contributions to the File Exchange

File Exchange developer Randy Souza (you've heard of Souza's Law, right?) was looking at some file updates coming through the other day, and he noticed something remarkable. Erik Johnson's arrow contribution was being updated. We always love to see updates, but this one was special because the file was originally contributed back in 2003.
This one file may be older than many of the people who use the File Exchange! In addition to its longevity, the arrow file has a number of accolades to brag about. It was a File Exchange Pick of the Week way back in 2009, and it was a Popular File of the Year in 2013 and 2014.
Just look at the beautiful ASCII art on that help entry! You don't see quality craftsmanship like that anymore.
Erik Johnson is on the faculty of the Civil Engineering Department at the University of Southern California, where he's been teaching for as long as arrow has been on the File Exchange. Thank you, Dr. Johnson, for keeping your little hero moving with the times.

The Hall of Update Heroes

All this got me thinking: how many files can boast of that kind of legacy? I asked to Randy to pull up a list of files that were contributed in the first five years of the File Exchange (2001-2006) and that were also updated in the most recent five years (2016-2021). Here's what he found.
t = readtable("files.xlsx")
t = 27×5 table
Name ShortName Link First Latest
1 'ellipse.m' 'ellipse.m' '' 09-Oct-1998 16-Mar-2021
2 'mixed' 'mixed' '' 08-Sep-2000 20-Nov-2020
3 'arrow' 'arrow' '' 15-Jan-2003 13-May-2021
4 'Calculates inverse Z-transform by long division' 'Inverse Z-transform' '' 30-May-2002 11-Jul-2020
5 'Reshape triggered data acquisition analog input data' 'Reshape triggered data' '' 22-Aug-2002 04-Dec-2019
6 'lombscargle.m' 'lombscargle.m' '' 09-Apr-2003 17-Jul-2020
7 'Useful Figure Management Utilities' 'Figure Management Utilities' '' 25-Mar-2003 04-Dec-2019
8 'RLS Algorithm Demo' 'RLS Algorithm Demo' '' 31-Oct-2003 11-Jul-2020
9 'Adaptive Filtering' 'Adaptive Filtering' '' 13-Jun-2003 18-Feb-2020
10 'Hatched Fill Patterns' 'Hatched Fill Patterns' '' 28-May-2002 29-Dec-2018
11 'linelabel' 'linelabel' '' 06-Jun-2003 26-Nov-2019
12 'Time Series Viewer' 'Time Series Viewer' '' 23-Dec-2003 04-Dec-2019
13 'timetick - legacy' 'timetick - legacy' '' 24-Dec-2003 04-Dec-2019
14 'timestr' 'timestr' '' 24-Dec-2003 04-Dec-2019
Here's the same list with the hyperlinks in place so you can visit them more easily.
Let's do a visualization of when those files were first created.
[~,ix] = sort([t.First]);
t = t(ix,:);
for i = 1:height(t)
line([t.First(i) t.Latest(i)],i*[1 1], ...
Marker="|", ...
set(gca,YDir="reverse", ...
Box="on", ...
XGrid="on", ...
YGrid="on", ...
XLim=[datetime(1995,1,1) datetime(2025,1,1)], ...
YLim=[0 height(t)+1], ...
YTick=1:height(t), ...
title("Update Heros from First Entry to Latest Update")
fxlaunch = datetime(2001,9,11);
line([fxlaunch fxlaunch],[0 28],Color="red")
Whoa! The red line indicates when the File Exchange launched. Two of our Update Heroes originated Before the Dawn of Time. How is that possible? When we launched MATLAB Central back in September of 2001, there was already an Anonymous FTP server (remember those?) that lived at MathWorks. It functioned as a crude forerunner to the File Exchange, allowing people to upload and download files. Two of the files on our list come from that ancient era.
Contrary to current belief, there were NO dinosaurs walking around at this time.


So what is this oldest-still-maintained file? The prize goes to David Long and his ellipse.m file. He is on the faculty of the EE Department at Brigham Young University in Provo, Utah. Thank you, Dr. Long, for maintaining ellipse across the decades!
i = 1;
dur = t.Latest(i) - t.First(i);
y = floor(years(dur));
fprintf("The %s file has been maintained for %d years and %d days\n", ...
The ellipse.m file has been maintained for 22 years and 158 days
To bring this all together, I decided to download both arrow and ellipse.m and make a little composition. Here is the result. They stand up pretty well, eh?
ra = 5;
rb = 2;
theta = pi/6;
line([0 ra*cos(theta)],[0 ra*sin(theta)], ...
LineWidth=2,Color="red", ...
line([0 rb*cos(theta+pi/2)],[0 rb*sin(theta+pi/2)], ...
LineWidth=2,Color="red", ...
arrow([-2 2.5],[1.5 1.5])
text(-2,2.5,"semi-major axis ", ...
arrow([-2 -1],[-1 0.5])
text(-3,-1.25,"semi-minor axis", ...
box on
title("Two Titans from the File Exchange: Ellipse Meets Arrow")
Of course, I'm only showing you the simplest instances of these functions. Both are extremely parameterizable.
So hats off and many thanks from us here at File Exchange Global Headquarters to all of the authors who have kept their files current across ten years or more!


  • print


To leave a comment, please click here to sign in to your MathWorks Account or create a new one.