Piotr Banaszkiewicz

AMY update #4

On Friday 17 Jul, 2015

Today is the deadline and release day for AMY v0.6.

Here’s what’s new and what’s changed in this release.

In-between releases

I was forced to add some hotfixes in v0.5.1 and v0.5.2.

v0.5.1 included a fix for the name of one of our lessons (was ‘dc/spread­sheet’, but it should be ‘dc/spread­sheets’).

v0.5.2 included a fix for the round-off error that was crashing AMY. If you’re more interested on the story, read this commit message.

New features

Deletion of tasks
Tasks can now be deleted from their details page.
Eventbrite link
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) au­to­mat­i­cal­ly (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 In­struc­tors page
Full-width layout, filters in sidebar, no setting of "wanted" in­struc­tors. Using GET for filters ap­pli­ca­tion 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. Con­fir­ma­tion 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 al­pha­bet­i­cal order in Find In­struc­tors 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 Ba­naszkiewicz" 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.

  1. I want to add develop branch and set it as the main branch for the repo.
  2. I want to fix host/site/organizer rep­re­sen­ta­tion in the database.

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.

AMY update #3

On Friday 03 Jul, 2015

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.
In­struc­tors’ profiles
We ask in­struc­tors to provide a list of preferred lessons, nearest airport, area of expertise and current career stage. While some of that in­for­ma­tion 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 de­vel­op­ment database
Weights at least twice more due to pre­gen­er­at­ed 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 in­stal­la­tion 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.

Features for v0.6

Currently there’s no main theme for v0.6 release.

Exams

I had exams in previous weeks, so they casted a little bit of shadow on this AMY release.

AMY update #2

On Friday 19 Jun, 2015

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 in­struc­tors 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 In­struc­tors 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 im­prove­ments
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.
Im­prove­ments 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 re­or­ga­nized 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!
Bread­crumbs
We decided to drop the bread­crumbs. 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.

Amy update #1

On Thursday 04 Jun, 2015

We’re soon to release Amy v0.3, which should include some exciting features.

New features

Au­to­com­ple­tion
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 rep­re­sen­ta­tion
Countries in Amy are now internally rep­re­sent­ed 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.
Con­trib­u­tor guidelines
We now have guidelines for con­trib­u­tors.

In the oven

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 per­mis­sions 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 in­tro­duc­ing these tables. We may leverage au­to­com­ple­tion backend for serving via Ajax, but I didn’t quite look into the matter yet.

Thoughts

  1. We now have new admins, including woman named Amy. This causes some "namespace" conflicts. In v0.4 we might switch to cap­i­tal­ized 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.
  2. Feature freeze. I think we need it. We don’t want to in­cor­po­rate stuff that’s not thought-through.
  3. Maybe smaller release periods, with smaller upgrades. With the current pace, Amy would gain 0.1 every month or even less.
  4. 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…

Amy: a workshop management tool

On Wednesday 20 May, 2015

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 con­trib­u­tors.

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.

Amy: status update

Most important features of this bonding period:

  1. Amy v0.2 was released
  2. A new Rackspace server was set up just for Amy
  3. We started using Travis-CI for continuous in­te­gra­tion

Currently we have an open window for v0.3 release, and some of already im­ple­ment­ed features contain:

  1. No more "None" in Amy’s dashboard title [#282]
  2. A footer with Amy’s version (both release and git hash) [#275]
  3. "+" sing in the top navbar — a shortcut to add event/site/person pages [#286]
  4. Slimmed down Makefile [#284]
  5. New look for the dashboard with un­pub­lished events more visible [#274]

And there’s more in the oven!

Plans for the summer

I want to get a rest, cut down on projects (only Amy and my Bachelor’s project), play some games.

This is going to be an exciting summer, and I’m looking forward to it!

Peer instruction: update 9 - the end of Summer

On Monday 11 Aug, 2014

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 op­por­tu­ni­ty to not only dig into software ar­chi­tec­tures I haven’t known before (like pub/sub) but also to learn how pro­fes­sion­als 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 dis­cus­sions 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 ar­chi­tec­ture (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.

Con­clu­sions

JavaScript’s poor object-pro­gram­ming design causes pro­gram­mers 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

Cof­fee­Script 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 ap­pli­ca­tion that still can fit multiple features, ehance­ments and im­prove­ments. There’s even place for something that wasn’t done before, I think.

Peer in­struc­tion teaching tool features

I "end" this project with these specific features im­ple­ment­ed:

  • broad­cast­ing mode
  • dis­cus­sions in small groups mode
  • really quick switching between these modes
  • countdown with audio aid before disabling dis­cus­sions mode
  • variable small group sizes
  • better interface for tablets
  • basic text chat

It might seem like not that much, but I spend whole summer on this and I think I did pretty good :)

In near future I want to see these features im­ple­ment­ed:

  • better chat
  • better interface
  • better backend and frontend code structure
  • sharing files
  • con­nec­tions routing / mesh

Ac­knowl­edge­ments

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! :)

Peer instruction: update 8

On Tuesday 05 Aug, 2014

Google Summer of Code is coming to an end.

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 doc­u­men­ta­tion im­prove­ments (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:

  1. Hard: better broad­cast­ing mesh (students act like relays / proxies), read more at https://github.com/pbanaszkiewicz/pitt/issues/22
  2. Etherpad in­te­gra­tion – Greg Wilson told me that Etherpad right now is not in best condition so this one is postponed (https://github.com/pbanaszkiewicz/pitt/issues/23)
  3. Peer2Peer file sharing – something exactly like ShareFest (https://github.com/pbanaszkiewicz/pitt/issues/21)

Features coming into Pitt

  1. Mobile-friendly interface (at least for tablets) and fixes for non-full-HD devices (https://github.com/pbanaszkiewicz/pitt/issues/18)
  2. Voice-only con­nec­tions im­prove­ments – as long as I’m able to test them (https://github.com/pbanaszkiewicz/pitt/issues/19)
  3. Chat (https://github.com/pbanaszkiewicz/pitt/issues/20)

I won’t write summary post until after the firm pencils-down date. But let me say that this Summer was truly awesome :)

Peer instruction: update 7

On Sunday 27 Jul, 2014

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 rep­re­sen­ta­tion 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 con­tributed feedback and bug reports, but also took part in co­or­di­nat­ed calls with me. Thank you!

Having tested Pitt with Paris, I’m now more certain that the signalling part of my ap­pli­ca­tion 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 ap­pli­ca­tion won’t break ac­ci­den­tal­ly.

Pitt progress during sprint

Here’s the list of everything that was achieved during the sprint:

  • five hundred lines of doc­u­men­ta­tion have been written
  • fixed too high volume for the warning beep
  • forced low video resolution
  • dropped _pubsub part from di­rec­to­ries or file names
  • turned on TURN server for testing – and suc­cess­ful­ly tested with Mozilla Paris

Exciting features coming

For the next big update, I’m thinking about setting some huge goals.

  1. Mobile-friendly interface (at least for tablets) and fixes for non-full-HD devices (https://github.com/pbanaszkiewicz/pitt/issues/18)
  2. Testing (and fixing in case of errors) voice-only con­nec­tions – that’s something I didn’t get to test during the sprint (https://github.com/pbanaszkiewicz/pitt/issues/19)
  3. Etherpad in­te­gra­tion – 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 in­te­gra­tion, shared chat would be extra nice. This needs futher in­vesita­gion (https://github.com/pbanaszkiewicz/pitt/issues/23)
  4. Chat: if not possible to integrate with Etherpad, write our own (https://github.com/pbanaszkiewicz/pitt/issues/20)
  5. Peer2Peer file sharing – something exactly like ShareFest (https://github.com/pbanaszkiewicz/pitt/issues/21)
  6. Hard: better broad­cast­ing mesh (students act like relays / proxies), read more at https://github.com/pbanaszkiewicz/pitt/issues/22

I think the end of Google Summer of Code is nearing, but I like this project a lot, and I definitely will continue working on it.

Peer instruction: update 6

On Monday 14 Jul, 2014

I missed one post last week and this one is already delayed by two days (compared to my typical writings that appeared on Saturdays).

For­tu­nate­ly, I have good excuses.

First, I wanted to get something done. Second, I was buried under real-life super exhausting stuff like post-exams leisure. ;)

Progress

Okay, good news: Pitt has new interface:

Pitt's fresh interface

Pitt’s fresh interface.

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 ap­pli­ca­tion logic code from ap­pli­ca­tion appearance code. Overall, the code should be easier to understand for newcomers and a lot easier to maintain.

The list of issues is updated and available here.

I’m also starting to think about Software Carpentry Sprint that takes place on July 22-23. I’ll post some update soon…

Peer instruction: update 5

On Sunday 29 Jun, 2014

This is gonna be a short one. Because of exams, I have to study a lot. And because there was not much progress on Pitt during this week.

Current release

Current version is v0.3.1, and it’s tagged in git repository. I’m in­cor­po­rat­ing git-flow model.

What I wanted to get in was two major features:

  1. countdown before switch from group split to broad­cast­ing mode,
  2. small groups of students of variable-defined size.

I can tell that I was successful and these features are now part of v0.3.1 release.

Bugs

While testing with Greg and Mike at their office and me here in Kraków, I couldn’t connect to them and vice versa. Con­nec­tions between Mike and Greg worked as intended.

This was strange, because I didn’t change the code so much that it’d break. More so: last week while testing with Greg alone it worked!

So I conducted few more tests:

  1. Pitt: Kraków ↔ Kraków
  2. Pitt: Kraków ↔ Toronto Mozilla Office
  3. Pitt older version: Kraków ↔ Toronto Mozilla Office
  4. Other WebRTC ap­pli­ca­tion: Kraków ↔ Toronto Mozilla Office

In the previous week, I’m guessing Greg worked from his home. We wanted to try Pitt in this con­fig­u­ra­tion (Kraków ↔ Greg’s home), but due to holidays in Canada we were not able to.

From what I can tell, the issue lies in the client IP addresses resolution. Here’s a lengthy article about how hard it is to do WebRTC properly: http://www.html5rocks.com/en/tutorials/webrtc/basics/#toc-signaling

Anyway, I hopefully will be able to easily overcome this issue.