AMY v0.7 was
released today. You’ll find list of changes below.
This release contains surprisingly few changes, and the development
seemed slowed a little, but that’s not a bad thing: Greg’s moving to
Europe with his family and I’m going from time to time on 2-day trips
(Wrocław tomorrow)
Bug fixes
This time I start with bug fixes.
Check if event’s starting date is earlier than it’s ending date.
Ensure event’s administrative fee and event’s attendance are both
non-negative numbers.
Theme problem
This release was themed “fixing
host/site/organizer
representation in the database”, and I claim success!
The change was rather significant and required me confirming ideas with
Software-Carpentry administrators and Steering Committee.
Rename “Site” to “Host”
Previously event’s host was incorrectly named “site” (ie. location).
Rename “organizer” to “administrator”
Event.organizer field was mostly unused and no-one knew it’s real
purpose. By changing it to “administrator” we now have a place for
our administrators to mark events they’re working on.
Filter by administrators on the “All Events” page
We can filter by Host, we can now also by administrator.
More location fields for Event
Workshops that have a public website (most of our workshops does)
contain standardized location data we didn’t previously collect.
This was required by some other features.
contact field for Event
Additional field we didn’t collect in the past.
New features
Faster testing
I switched the Travis-CI server to use fast Linux Containers.
Testing time dropped from 1.5min to 45s.
Enhanced filtering
It’s possible to select multiple countries and preferable gender on
“Find Instructors” page.
Lookup instructors closest to the event’s location
From event’s details page administrators can quickly go to “Find
Instructors” and search by latitude/longitude.
“Update from URL” functionality
This works in a similar way to “Import from URL” from v0.6.
Plans for v0.8
Greg wants v0.8 to store demands for Instructor Training in AMY.
Event details page will show link to the Eventbrite’s event page
instead of sole key ID.
Quick link for new airport page
Accessible from “+” dropdown menu.
Auto-fill end-date on event form
Setting a start-date for an event will set-up an end-date (+1 day)
automatically (most of our workshops lasts for 2 days). The
auto-fill won’t happen if user put something into end-date field.
2-column layout on person-details page
First column contains awards and tasks, while the second column
contains knowledge domains and lessons person can teach.
Facelifted Find Instructors page
Full-width layout, filters in sidebar, no setting of “wanted”
instructors. Using GET for filters application instead of POST as
previously.
Ability to add tasks for person from their edit page
Now admins can not only assign awards to specific persons from their
edit page, but also tasks.
Tabs on person edit page
Because of using 3 forms and 2 listings on the person edit page, the
split was necessary. The first tab contains original person edit
form, the second tab contains awards and award-form, the third one
contains tasks and task-form.
Facelifted bulk-upload
Another switch to full-width layout. Confirmation page for
bulk-upload will now show what happens with specific entries (“will
be created” or “it’s already in the database” kind of thing).
Lessons sorted by default
Lessons will appear in alphabetical order in Find Instructors filter
and also in “lessons” column on that same page.
Importing event from URL
Admins can pre-fill event create form with data from workshop page.
Improved “failed to delete” page
Thanks to one small discovery, a big and ugly chunk of code was
replaced with almost a one-liner.
Fixes
Display of tasks
Tasks now show links to events and persons.
Eventbrite event ID name change
Previously it was ‘reg key’, now it’s clearer.
Better fields in airport form
“Airport name” instead of “Fullname”, “IATA code” with link in the
“help_text” instead of “Iata”.
Better list of tasks on person-details page
These tasks now contain links to related events and clearly indicate
roles a person has.
Searching for “firstname lastname”
Searching for “Piotr Banaszkiewicz” now works!
Enforced uniqueness for event slugs
Having two events with the same slug resulted in a crash, so we
decided to enforce uniqueness for event slugs. This not only
prevents the bug from hunting us, but also prevents admins from
adding events with slugs that are already in the database.
Awards will prevent events from deletion
If there are some awards that point to specific event, that event
will not be deleted.
Plans for v0.7
There are two things that I want to work on for v0.7 release.
I want to add develop branch and set it as the main branch for the
repo.
The rationale for 1. is that I had to make two minor releases to v0.5
when we already had features for v0.6 merged to the master. If we had
only kept stable releases in the master
(git-flow),
I’d not have that problem.
After some tough weeks today marks the
v0.5 release of
AMY!
Here’s the short list of what’s new.
New features
AMY!
We finalized the move from “Amy” to AMY.
Instructors’ profiles
We ask instructors to provide a list of preferred lessons, nearest
airport, area of expertise and current career stage. While some of
that information does not land in the database, can now take what we
really need in AMY: airport, lessons to teach, email changes, and so
on.
Nice pagination
Thanks to work by Carlos Peña, we now have a very nice looking
pagination bar. I added some algorithms to make it show sections.
Merging duplicate people
We can now merge people who appear more than once in our database.
History of changes
This has some flaws, but we now store history of changes to events
and persons. It should help admins a lot, because they demanded it
at least twice! This feature makes dashboard look strange (it’s very
wide), and I’m looking forward to feedback from admins if they like
it or hate it.
New development database
Weights at least twice more due to pregenerated initial revisions
(ie. initial “changes” for all our events and persons).
Fixes
Missing make migrations command
Thanks to Carlos Peña sharp eye, we no longer miss that step in the
installation section.
Sidebar covered messages
On pages with full width (all events, all persons, etc.) the
success/error messages would be covered by sidebar background. Now
they’re narrower so that sidebar doesn’t cover them.
Redundant display of badges
Badges were displayed in two places on person’s details page.
Today’s the deadline for AMY
v0.4. It contains a
bunch of usability fixes, so all our admins should be happy :-)
New features
Filtering!
I couldn’t get DataTables to work properly
with our backend, but thankfully I found out about
django-filter. It’s
basically what DataTables is, but works
without JavaScript (which in case of our huge data sets is a good
thing!). A wide, fluid view was adapted for pages with listings (so
that we can put filters in the sidebar). I must admit that I like
it.
“New” name
As you might have noticed, we’re switching from “Amy” to “AMY”, to
not confuse people with software.
Reports
Thanks to Greg’s work, we now are able to simply report which events
are missing attendance figures, as well as display how many
workshops, learners or instructors we have over time.
Success/error messages
Each successful form save, or each errorneous action will result in
adequate message displayed on top of the page.
Horizontal layout of Find Instructors page
You won’t have to scroll half of the page to get the results,
because now the skills take way less vertical space than before.
Search improvements
You can now search through airports, and search for events by their
site name. Also, events ordering was changed: soonest show first.
Deleting objects
It’s possible to delete almost any object we have in the database.
Improvements to bulk-upload
Greg made the person-bulk-upload useful! And Giacomo used it
recently.
Pagination on airports list
Clicking through our stored airports is now possible.
Fixes to workshop selection for the debrief
Only events that started and ended in the specific period are going
to show up.
View/edit icons in object listings
Two icons now make it possible for admins to view object details or
go right ahead to editing it.
Event fields ordering
We reorganized fields on the event detail/edit page. Now the slug is
on top.
Line wrapping for fields with notes
Some notes had very long lines, but thanks to CSS3 goodness we can
now break-up the words inside <pre> tag.
Username visible
Person details page displays the person’s username.
Link to event’s repository and it’s website
If either is provided, we display the other link too. For example,
the admin submits only the link to the repository. We parse it and
display the link to the event’s website (because it’s way easier to
fact-check the website than the repo).
Update 19.06.2015: I forgot to mention that we moved servers! We’re
now using Rackspace VPS and have a very clean deployment, plus we’re
SSL-only!
You’re gonna miss it
Event “published”
Greg simplified the logic for marking events as published. So now
“published” field is gone!
Breadcrumbs
We decided to drop the breadcrumbs. They proved to not be as useful
as I hoped.
DataTables
Our listings were pretty big (for example if you wanted to load all
persons at once, you’d be waiting for about 10-20s for the site to
come up), so to maximize usability we’d have to turn
DataTables into “server-side processing”
mode. Basically, we’d have to do all filtering and sorting on our
end, and that would mean no benefit for us. So instead we switched
to django-filter.
Django Admin
We were not using it at all.
What did not land
I’m trying to figure out a way to automate Eventbrite for admins, but
from what I can tell it’s going to be impossible unless Eventbrite
changes the way it’s working. So I’m holding off with creating
Eventbrite events, at least for now.
Features for v0.5
From Greg’s ticket we
can gather that most important feature for
v0.5 is completing
user’s preferred lessons and knowledge domains.
We’re soon to release
Amy v0.3, which should
include some exciting features.
New features
Autocompletion
It’s now possible to type a fragment of what you’re looking for and
then simply select from a drop-down list.
Page footer
The new footer displays current Amy version.
Country representation
Countries in Amy are now internally represented in ISO
3166-1 format.
New “+” button in top-nav
It allows to add a new event, site or person. Or even multiple
persons.
The dashboard page has proper title
It’s not “Amy: None” anymore.
Stripped down Makefile
Some actions it included were not longer relevant.
Templates with the same content were merged
It’s not a change to the end-user.
Lots of small interface changes
Including switch from links to buttons in some cases, easier event
page validation, better display of events on the fron page, better
display of people on the person’s listing, links for persons or
tasks or webpages, and more…
Event invoiced field
Instead of “fee paid?”, we now call it “invoiced?”. Why the change?
Because NumFOCUS handles invoicing, not Amy.
We only need to know if we should list the event as uninvoiced or
not.
The list above is not complete. We still have about 3-4 days to include
other nice features:
awarding badges from badge details page (done)
awarding badges from user edit page (work in progress)
setting permissions and passwords (done, awaiting feedback)
What we’re going to miss
We probably won’t implement addition of new
skills. At least I didn’t
see a pull-request for it.
Features for v0.4
DataTables. It’s a must-have! Many feature
requests would be solved by simply introducing these tables. We may
leverage autocompletion backend for serving via Ajax, but I didn’t quite
look into the matter yet.
Thoughts
We now have new admins, including woman named Amy. This causes some
“namespace” conflicts. In v0.4 we might switch to capitalized AMY
for the software name. I proposed an acronym for that (“AdMinister
Yourself”), but it’s not what I think is good acronym. I failed at
finding others, though. Also, recursive acronym didn’t fit.
Feature freeze. I think we need it. We don’t want to incorporate
stuff that’s not thought-through.
Maybe smaller release periods, with smaller upgrades. With the
current pace, Amy would gain 0.1 every month or even less.
I have exams soon. I received credits for multiple academic projects
for the current semester, so I’m only 2 small tests away from the
exams. Gotta start preparing…
I got involved in Software Carpentry
one year ago. We went through one
Summer of Code,
I became certified instructor, and then at MozFest 2014 in London we decided to
write a workshop management tool.
Software Carpentry is growing
rapidly
and managing workshops has become a hussle.
Greg Wilson, Software Carpentry’s father, started the Amy project on
October 30th 2014. I got involved early in December, and became since
then one of the
core contributors.
On April 27th, almost a month ago, I received a chance to work on Amy
during my summer and get paid for it (which was basically my dream
summer coming true).
The community bonding period
I consider myself, Greg Wilson and W. Trevor King the core of Amy
community. We had not much chance to integrate in the last month, but we
used it to progress on Amy.
This summer was great. I’m really glad I had the chance to work with
Mozilla Science Lab on bringing a new teaching tool.
Here are a few of my thoughts about the good, the bad parts about GSoC
2014 and the future of my project.
What’s cool about this summer
This summer was special for a variety of reasons.
I was working on a bleeding edge technology with a language I didn’t
really understand previously. It gave me opportunity to not only dig
into software architectures I haven’t known before (like pub/sub) but
also to learn how professionals write JavaScript.
I met quite a few people interested in my project (despite very low
number of stars or watchers on GitHub) and spent fruitful time with my
mentors on discussions about the project.
What’s not cool about this summer
A few things that come to my mind that could’ve been done better.
First, at the beginning of this project I pivoted a little. The actual
codebase and architecture (pub/sub) is, I think, third or even fifth
iteration.
I was promised a community hosting for my project at Mozilla but didn’t
get one, even though I went through some lengthy procedures. Instead, my
mentor had to allow me on his private server.
I’m also a little sad that my project doesn’t bring as much attention
and excitement as it excites me. Hopefully I will be able to present it
during MozFest and it will spark
some interest.
Conclusions
JavaScript’s poor object-programming design causes programmers to write
things in many different ways. There’s actually no one good way to write
JavaScript. I found some really well-written JavaScript libraries but I
was unable to write pretty code myself. Python for browsers anyone?
Note: CoffeeScript or Dart were crossed out at the beginning. In April,
during PyCon in Montreal, actually. Reason: too fresh, too unstable and with
little support, even though they may provide a better language experience.
Running multiple camera streams within browser is very resource-heavy.
I’m pretty happy that I end the summer with a working application that
still can fit multiple features, ehancements and improvements. There’s
even place for something that wasn’t done
before, I think.
Peer instruction teaching tool features
I “end” this project with these specific features implemented:
broadcasting mode
discussions in small groups mode
really quick switching between these modes
countdown with audio aid before disabling discussions mode
variable small group sizes
better interface for tablets
basic text chat
It might seem like not that much, but I spent whole summer on this and I
think I did pretty good :)
In near future I want to see these features implemented:
better chat
better interface
better backend and frontend code structure
sharing files
connections routing / mesh
Acknowledgements
I want to highlight and thank Greg Wilson and Mike Hoye - my mentors
during this summer. Their efforts and continuous work and long meetings
with me… I call this summer a success; it wouldn’t be without your
help. Thank you! :)
There’s still so much work to do on Pitt I’m sure I’ll be working on it
after the GSoC 2014 is done.
Before the soft pencils-down date I want to release one last version,
v0.5.0 (this
week) and then work on documentation improvements (probably will release
additional
v0.5.1
then).
Features not coming into Pitt this Summer
Sadly, there’s only so much I can do… A few features won’t make it
into Pitt this GSoC:
I’m feeling terrible - I forgot to blog post last week. Again. I’ll try
to make up for it…
Software Carpentry sprint summary
The sprint lasted two days (22-23 July 2014) and it was a blast! Poland
had wonderful representation in Kraków, where I’m living.
Most of the group worked on Data Carpentry lessons:
writing new in Excel or Python+Pandas
checking existing in Bash.
As far as I know, everything was merged in! That’s what I call a
success.
I was the only person working on a different project, ie. on my Pitt.
Most of the time I was working alone, but once or twice we’ve got
together with Mozilla Paris to test some things.
I want to kindly thank Rémi Emonet and Raniere Silva for their help!
These guys not only contributed feedback and bug reports, but also took
part in coordinated calls with me. Thank you!
Having tested Pitt with Paris, I’m now more certain that the signalling
part of my application is now very close to being bug-free. Or maybe it
is already. I’m really liking how easy it is to add new features and
still be certain, that the application won’t break accidentally.
Pitt progress during sprint
Here’s the list of everything that was achieved during the sprint:
five hundred lines of documentation have been written
fixed too high volume for the warning beep
forced low video resolution
dropped _pubsub part from directories or file names
turned on TURN server for testing – and successfully tested with
Mozilla Paris
Exciting features coming
For the next big update, I’m thinking about setting some huge goals.
Etherpad integration – as far as I am concerned, Etherpad doesn’t
provide any way to share chat with other sites. That’s a bummer.
While I don’t need Etherpad’s content integration, shared chat would
be extra nice. This needs futher invesitagion
(https://github.com/pbanaszkiewicz/pitt/issues/23)
And I’m in the middle of rewriting JavaScript code (again…). Now the
code uses good JavaScript patterns (and I don’t consider myself a JS
newbie anymore).
I separated application logic code from application appearance code.
Overall, the code should be easier to understand for newcomers and a lot
easier to maintain.