Using the Learn REST API from Golang

Written on Sep 22, 2016

By Shane Argo During the DevCon at the Teaching & Learning Conference in Sydney Wiley and I presented about Using the Learn REST API from Golang. This post is going to be a summary of that presentation. First things first - getting set up First of all you’ll need to download and setup the development VM. Be sure to download at least 2016Q2, as REST was unavailable before this. In fact, Blackboard is adding new REST services and improving the existing services in each version (even within the cumulative updates) so it’s best to get the newest VM available.

Read On →

Don't include Blackboard JARs in your WAR

Written on Jun 9, 2016

By Shane Argo Every building block in Blackboard has its own classpath. This essentially means that every building block can define it’s own dependencies without conflicting with others. This is generally a good thing, but also comes with a pretty major drawback. If multiple building blocks use the same library (JAR), each will load thier own copy of the classes into memory. To get around this, Blackboard provides a number of common libraries.

Read On →

Useful aliases in the Blackboard Dev VM

Written on Jun 8, 2016

By Shane Argo. When developing extensions to Blackboard using the Blackboard Developer VM, there are a number of shell commands that you’ll find yourself using frequently. Perhaps the most common is tailing the latest stdout-stderr log, but you’ll also want to start, stop and restart Blackboard, and push configuration changes quite often. As I found myself constantly doing this, I’ve created a number of Bash aliases so I can run these commands with a single command without needing to change directory or specify full paths.

Read On →

Enums and Blackboard's ORM Framework

Written on Jun 4, 2016

By Shane Argo. A while back I wrote about using Blackboard’s ORM framework with your own beans. This is going to be a really quick post about how you can map database values to Java Enums. This is done using the @EnumValueMapping annotation, which is only mentioned breifly in Blackboard’s documention but is pretty simple to use. Let’s start with an example: @EnumValueMapping(values={"TOP", "BOTTOM", "LEFT", "RIGHT"}) enum Position { TOP, BOTTOM, LEFT, RIGHT } By annotating your enum with the @EnumValueMapping annotation, you can give each of the values a string representation or an integer representation like this: @EnumValueMapping(values={"1", "2", "3", "4", "5"}, integer = true) enum StarRating { ONE, TWO, THREE, FOUR, FIVE } The values in the annotation are assigned to the enum values in order.

Read On →

Disabling Blackboard's SQL Query Cache for Development

Written on May 10, 2016

By Shane Argo. Blackboard has an API for loading SQL queries from an external file, which can be very useful. This article is not going to cover the API itself, but I will hopefully get a chance to blog about it in the future. The API provides a number of advantages over inlining the query in your java code but, by default, the query is cached. It gets loaded once, on first use, and then cached in memory for future reuse.

Read On →

Blackboard Extensions and the Submission Service

Written on Jan 19, 2016

By Harry Scells. Extensions are one of many available Blackboard APIs which are there to provide useful interfaces to interact with the system. This post will walk through the process for implementing one such extension provided by Blackboard, namely the submission service. The submission service provides event handlers for submittable items (assignments, tests, For example when a student submits an assignment, one of the handlers in this extension fires. So let’s jump into the code!

Read On →

How to automate the changes to the Blackboard Vagrant VM (October 2014 release)

Written on Jan 5, 2016

By Wiley Fuller. By now you’ve probably read, and used, Shane’s blog posts on how to configure the Blackboard Vagrant VM so that it works properly. However, if you’ve ever blown away your VM and started again from scratch, you’ve probably discovered that you have to go and re-apply all those changes. This isn’t such a big deal, but if you have to do it more than once or twice it gets to be a pain, and it’s a serious disincentive to rolling back to a clean VM.

Read On →

Creating Smart Views for Groups with the Blackboard API

Written on Jan 3, 2016

By Shane Argo. There has been a fair amount of discussion on the bb-open_src mailing list and other communities lately about creating a Smart View for a group using the Blackboard API. It’s actually fairly simple, but there are some non-obvious things you need to do to get it working. This information should prove useful for creating Smart Views with other (non group) criteria as well. Smart View == Custom View As is fairly normal for the Blackboard API, the UI has a different name for the same thing.

Read On →

The first things you should do after downloading the Blackboard Vagrant VM (October 2014 release)

Written on Dec 9, 2015

By Shane Argo. A while back I wrote about the changes we make to the Blackboard Developer VM. That was written within the context of the April 2014 release. While it is still mostly relevant in the October 2014 release, there has been some changes. This is a copy of the original article with some updates. I’m hoping the 2015 Quarter 4 developer VM will have some or all of these changes already applied.

Read On →

Introduction to Blackboard's Schema.xml

Written on Oct 15, 2015

By Shane Argo. For a very long time, there was no way for Blackboard building blocks to create and manage database entities. Instead, if you wanted to persist and load data in your building blocks, you had to use hacky solutions. For example, you could store data in: files in the shared content; manually created database tables in the Blackboard database; or an external database. All of these solutions had their own pitfalls and were often messy, difficult and unmaintainable.

Read On →

Using Blackboard's ORM Framework with your own beans

Written on Oct 12, 2015

Last time, (yeah, I know that was almost a year ago) Wiley discussed using Blackboard’s ORM to access legacy Blackboard entities. This time around I want to talk about how you can use the ORM to perform CRUD operations on your own custom beans. For those new to development altogether, this all means we can interact with the database, modifying and reading data purely with Java. This simpilfies things a lot, taking care of things like supporting different databases.

Read On →

Using Blackboard's ORM Framework

Written on Nov 22, 2014

If you’ve ever needed to access the Blackboard database from a building block, you’ll know that it can be a bit painful. Historically, Blackboard hasn’t made it easy to use a pre-defined datasource, so using Hibernate or JPA has invariably meant hard-coding connection strings, either in your java code, or ORM config files. Alternatively, you could wrap all the Bb DB Access objects to make them look like a normal Datasource, but this was a bit of a pain too, and JPA just doesn’t want to play ball unless you’re using JNDI.

Read On →

Lessons Learned: B2s and Stored Procedures

Written on Nov 19, 2014

Stored Procedures in B2s When writing a Blackboard building block, you can define your own database objects, including tables, keys and stored procedures/functions. There’s far too much functionality to talk about in this blog post, but the gist of it is this: At the root of your B2, create a directory named schema and within it create a directory for each database you want to create database objects in. This is likely to be the main database (referred to here as instance, but it could be anything), but it may also be the stats database.

Read On →

The first things you should do after downloading the Blackboard Vagrant VM

Written on Oct 27, 2014

Since Blackboard v9.1 Service Pack 14, the company has provided for download an Oracle VirtualBox VM wrapped up in a nice Vagrant VM. This is extremely convenient, but there are a number of changes that I like to make to it immediately after downloading which makes it even more useful. These changes are: Disable SSL: SSL (technically TLS) is an extremely important technology for a production system, but is hardly necessary while developing a building block.

Read On →

schema.xml data types and using grep to explore

Written on Jul 10, 2014

I’m currently in the process of developing a relatively complex Blackboard building block which includes persistence of data into custom tables in the database. For those who don’t know, this is done by defining all the database entities in a file named schema.xml in the building block package. The specifics of this is worthy of a post of it’s own, but this isn’t what I wish to focus on for this post.

Read On →

Add the version from bb-manifest to your war

Written on May 26, 2014

If you’re using Gradle to build and package your Building Blocks, it’s remarkably easy to add a version number to the . war file that Gradle creates. If you set the version property in build.gradle, like so: version=1.0.5 You’ll end up with a war file named: myproject-1.0.5.war This seems a bit redundant when we’ve already set the version in /WEB-INF/bb-manifest.xml. So using the following snippets, you can just grab the version from bb-manifest.xml, and stuff it into the version property.

Read On →

Creating Your First Building Block, The All The Ducks Way

Written on May 16, 2014

This is the fourth post in a series about how All the Ducks builds a Blackboard building block. To summarise the series so far: I began by describing how we structure our building block project then moved on to the tools we use during development; and finally [we used Gradle to build a web application that could be deployed to a standard container, without needing Blackboard](/post/foundation_of_gradle_for_blackboard_building_blocks/. This time we will take the project we created at the end of the last post and expand it to build an actual building block that can be installed into Blackboard.

Read On →

Foundation of Gradle for Blackboard Building Blocks

Written on May 15, 2014

This is the third post in a series about how All the Ducks builds a building block. In the last post, I summarised the tools we use and introduced Gradle as our build tool of choice. In this post, we’ll use Gradle to build a ‘Hello World’ building block. Some familiarity with your terminal or command prompt will be necessary to complete this tutorial, but it should all be very basic.

Read On →

Blackboard Building Block development tools

Written on May 13, 2014

This is the second post in a series about how All the Ducks builds a Blackboard Building block. The first described how we structure a project. In this post, I want to document the tools we use to develop Blackboard building blocks. The truth is, that we’d use a lot of these tools for any software development. Whilst it is entirely possible, software is not normally developed using only a text editor and a compiler.

Read On →

Structure of an All the Ducks Blackboard Building Block Project

Written on May 9, 2014

This is the first in a series of posts about how All the Ducks builds a blackboard building block. Sometimes tutorials will step you through the bare minimum to get the desired result, but there is often a long way between this and a “real world” application. Instead, we have chosen to describe the real world development processes that we use. This is the structure we used for Javascript Hacks (JS Hacks).

Read On →

Making a Gradle Plugin Task depend only on input

Written on Jan 9, 2014

Recently, I have been doing some development of a plugin for the (amazing) build tool Gradle. Specifically, the All the Ducks developed Glovr Gradle plugin, which adds support for the Google Closure Plovr tool to Gradle. We will inevitably blog about this plugin more as we prepare for release of version 1. I was adding support for the Google Closure Linter to the tool when I ran into a little stumbling block.

Read On →

what can ICANHASPDF teach us about remaining relevant

Written on Dec 9, 2013

This morning I came across this article from @thelabandfield about the #icanhazpdf twitter hash-tag and it’s effects on Libraries. Specifically, the effects on Inter-Library Loans (ILL) services. A quick summary for those who haven’t heard of the #icanhazpdf twitter hash-tag – which included myself until I’d read this article. While doing research, if you come across a citation which you cannot find at your institution’s library, compose a tweet with the citation and this magical hash-tag, and your helpful followers will search their library for it and send you the elusive article as a PDF.

Read On →

Blackboard on Oracle Dev Days VM

Written on Oct 31, 2013

I hate installing Blackboard, but I hate installing and configuring Oracle even more. As a result, I find the easiest way to get a Blackboard Development VM up and running, is to install Bb into the Oracle Dev Days VM which is freely downloadable from the Oracle site. Here’s the steps I follow: Install VirtualBox if you don’t have it. Download and install Oracle DevDays VM with all the oracle stuff.

Read On →