David Gage


Subscribe to David Gage feed
Updated: 17 hours 56 min ago

WeBWorK:AnnArbor epilogue

Tue, 06/04/2013 - 14:15

Well WeBWorK::AnnArbor is over and WeBWorK has grown in leaps and bounds… or at least it plans to.

Our group finished a data model that survived scrutiny by the rest of the participants. For those of you in the openwebwork community a link to an editable workflowy document of the data model is buried somewhere in the google doc for WeBWorK::AnnArbor.

With this model, the next iteration of WeBWorK will have some nice new features. One of the more interesting to me is the use of the strategy pattern. At the moment there are two places this is used, both in the Set object. The first will define how the problems are chosen (in terms of random seed, etc.) and generated. The second will determine how the Set and it’s problems are graded. Ambitious future users will be able to define their own strategies for these aspects of a Set and greatly increase the power of WeBWorK.

The other big feature is flexible tagging that will exist at almost every level of the data structure. The hope is that this will make creating and working with groups of objects easy for users. Implementing new functionality associated with tags will also be a powerful result, applying automatic actions to set groups of students for example. It will also give researchers a tool for filtering the massive amount of data that WeBWorK can potentially generate.

WeBWorK now has a new, and empty, BrEWerY repository where I hope to start building our new bouncing baby homework delivery system. For the moment we’re thinking the code base will remain largely perl. The overall system structure will be as modular as possible without going crazy.

The persistence layer of our data model provides abstraction between the database and the main WeBWorK programming API. The persistence layer can then be extended to support multiple types and configurations of databases, enabling users to pick and choose the database they would like to use (so long as the persistence layer supports it… or they’re willing to add that support).

The goal will be a WeBWorK that is extensible, and provides hooks for external applications into its data and functionality.

There was much talk this weekend of using WeBWorK as a tool to gather data about how students learn. We hope that whatever shape the new version of WeBWorK takes, it facilitates the research and progress of math education.

Categories: Planet WeBWorK

WeBWorK:AnnArbor DB day one

Sat, 06/01/2013 - 18:14

Here’s our board at the end of the day!

The group so far is made up of myself, Danny, Eric, Brian, Geoff, Aaron, Mark, and Bill (apologies if I’ve missed anyone!). We spent the day descussing user stories, mostly back and forth between Danny, Bill, and Aaron, and doing our best to put together some concept of the under-riding data models that make up the atoms of all of these stories. Some of these stories are up on the WeBWorK Wiki page with more to come, as soon as people write them. I figured user stories would be useful, but I was still stunned by exactly how helpful they were in staying on track and getting a real grasp of what objects are being dealt with in WeBWorK.

Largely for my own reference this is the basic conceptual model, by Eric, of the portion of WeBWorK’s architecture that we are working on. At the moment we’re focused on the “Model” part of the structure. Essentially trying to figure out what things are in webwork, what they look like, and some of how they behave.

Below is the outline of our data models so far. Anything ending in () is a behavior of the model, A/B implies a kind of relationship, everything else is an attribute.

  • User
    • username
    • tags
    • contact/personal info
    • password
    • achievement info
    • addCourse()
    • joinTeam(course,teamID)
    • getTeams()
  • Course
    • start date
    • end date
    • state [open/closed]
    • addUser()
    • Course/Participant
      • tags
      • status [active/inactive]
      • getSets()
      • addSet()
      • description
      • getType
      • Course/User
        • permisions level
        • getGrade()
        • getTeams()
      • Course/Team
        • getMembers()
        • clone()
  • Set
    • Descriptive Info
    • tags
    • template for versioning
    • grading scheme
    • getProblemPoolList() enumerated
    • versioning information
    • grading Information
    • Set/Course
      • Due/Assignment/Answer Date Info
      • overrides for set data
      • IP Restriction Info
      • getAssignedParticipants()
      • Set/Course/Participant
        • overrides for set course data
        • getSetGrade()
  • Problem
    • id
    • .PG info
  • Problem Pool
    • tags
    • problems
    • get random problems()
    • get unique problem()
  • Team
    • student (list)
    • description
    • course
    • grade
  • Attempt
    • time
    • score
Categories: Planet WeBWorK

VMWare support coming to Vagrant

Thu, 03/14/2013 - 14:14

Looks like VMWare support is coming to Vagrant.

Vagrant was mentioned on WeBWorK’s devel list awhile back as a possiblilty for easy dev installs for our developers. At the time I looked at it and decided against putting energy into it because I thought VitrualBox was kind of clunky (I have no argument or evidence to support that by the way…) and the stand alone DMG we had worked well enough for a quick mac dev distro.
I’ve been using VMWare to play with SmartOS for awhile, I’ve also got a couple ubuntu WeBWorK installs on it, and I really like it so far.

If Vagrant is going to support it and, possibly even more exciting, cloud options I think it could become an extreamly useful tool for WeBWorK developers and maybe even for the folks managing WeBWorK installs around the world.

It looks like these new features are set to land sometime in the middle of March, so I’ll keep an eye on it and hopfull have some setups for WeBWorK soon after it’s available.


Categories: Planet WeBWorK

openwebwork at Raleigh

Wed, 03/13/2013 - 12:38

We just finished up another webwork code camp, WeBWorK::Raleigh::2013.
It’s always such a blast, especially when we get to work in such a nice environment. The NC State math building is fantastic.

We’re trying out a new workflow based on git flow that Djun Kim and Davide Cervone put together. There should be a write up for it up on the wiki in the next few days if there aren’t already. It looks like it will be much easier to maintain… of course coming from what we were doing that’s not a hard sell.

The main thing I’m excited about is getting a new WeBWorK API written down. If we can standardise how we send requests and what data we’re guarenteed to get back then a new back end and as many apps and tools that tie into it as we want wont be far behind.

Here’s the API so far. Any and all pull requests, forks, and suggestions help! The idea is to specify what the request and response will be at a minimum so that applications can use it knowing what to expect at the least, but without limiting them to only what’s in the API.

oh! Djun also set up openwebwork.org. It’s really nice to have a good looking face for the project :)


Categories: Planet WeBWorK

Setting up mDNS on SmartOS

Fri, 02/01/2013 - 06:36

I’ve been working with smartOS alot through VMWare Fusion on my macbook. I was getting sick of looking up IP addresses so I poked around and sure enough mdns was there the whole time..

It took me a bit to figure out how to enable it on the VMs, turns out it’s straightforward. Just running this in a VM should do it.

I also put together a quick script to let me make and name new nodes quickly.



Categories: Planet WeBWorK