Skip to content

Maintaining web content on Blackboard, formally SchoolWorld

I know, not too exciting, but part of the job.  Writing helps me to process, categorize and remember.  If I want the concept to come along with me, if I want the solution to stick, writing helps.  If I want to increase the understanding of what I just did, discovered, broke or fixes, writing helps me internalize and remember.

My customer said, “James can you update so and so document with this new one?”  I had to poke around a bit on the site, I did not even know for sure which instance it was, we have about 10.  Once I had the instance, I set about finding in the instance (site) where this document was located.  Once I found the page, I had to find out how the file was uploaded or associated with the page.  Could be the file was uploaded to the page, or the file could have been uploaded to the site or site file cabinet.  Turns out to be the former.  Which is fine, since I dont think the file would be used anywhere else.  In that case, uploading to the page makes sense.  If the file were going to be referenced from multiple locations on the site, then the file should be uploaded or associated with the more generic location of the file cabinet.  Then in the file cabinet, make a not in the file description about where the file is used or referenced.

I know, not exactly riveting stuff!….but, it is part of the job that pays me well and is setting me up for a nice retirement.

In the end, I realized that my coworker had done a couple things to confuse the issue a bit, but the confusion almost always ends up as learning, learning that sticks, especially if there was some pain associated with the learn.


Navigating the problem without a box…

SchoolWorld, which  I think  is now bought by Blackboard, is a CMS.  We purchase this service on behalf of many of our 25 school districts that we support.  Sometimes, the lines are clear and I can discern which end is up.  What I mean is its easy when the problem, or need, or request is in a nice little box.

Here James, so and so needs this done on their site, or something like that“.

Nice and clear and in a box.

Other times, their is no box, only shades of grey…

Many times in business and in life, there are no clearly defined borders around a situation or problem.  When the problem or request comes to you, you must discern key things about the problem.  Like,

  1. who is the customer,
  2. what is the source of the problem,
  3. how did the problem come into our que.

An example

One of our districts goes directly to our vendor, Schoolworld and purchases a service, like a web site, for example.  They use this web site for many years, then the person who maintained the content retires or leaves.  One of our tech guys is over to their campus working on some other stuff, unrelated to the schoolworld web site, when someone at the district says “hey, George, we have website that is outdated, could you guys help with that?”  George brings that request back to my boss who says, James, follow up with George on that.

So there you have it.  A need, without a box.  Its one of those oh, BTW, ….. situations.  So now, I need to figure out a few things, such as

  1. do they have their own schoolworld instance?
  2. do they want to keep their instance?
  3. are there others at their site who could maintain content
  4. what content is still needed

In general, a needs assessment of who, what  and where.

Technically, this wont be a huge challenge.  The challenge lies in navigating the morass of unknown.  Using tact, being a problem solver, not a barrier.  Gently engaging people and helping them come along on their own.  Listening, a lot, so I can UNDERSTAND WHAT THEY NEED, and then recommending a solution.

More to follow.

Getting those pesky permissions correct on the User Groups

Another way to say that is today, my customer said to me “James, the ocsheriff user is seeing too much stuff”.  I logged into the account and saw immediately that the user or account was seeing too much stuff.  Not sure why or how this happened, but, I had to figure out why and set things straights.

Ok, its what I do, solve problems, sometimes they are simple problems, sometimes very complex.  This problem was in the middle.  It took me about an hr to figure out what was going on.  In hindsight, its more obvious that I had forgotten one of the golden rules of the Genetec software.  Before I describe that, let me say this, again.

Software has rules or policies, users, permissions, user groups and partitions.  These *entities work together to create users who can log into this web based software that allows the user to view video cameras, security cameras.  I guess you could think of this as a standard model for this type of business software.

I have a more feature rich client that I use to administer these rules.  A quick snapshot of the interface looks like this.


There you can see the User groups, as well as tabs for the Users and Partitions.  I was reminded today, that privileges, like the ones that were showing up for my ocsheriff User, are or should be defined in the User group, not on the user.  Let me say that again.  Since I forgot that.  The permissions or privileges are defined on the User group, not on the user.

I spend about 45 minutes messing with the User account ocsheriff, trying to get it to behave, behave = show the correct stuff in the web browser when logged in.  Initially, I clicked the User account and then the Privileges tab and messed around by changing, saving and logging out of and back into the web interface, hoping to see what I wanted.


Eventually, I tried copying one of the other user accounts  that was showing the behavior I wanted for ocsheriff.  That did not work either. Errr.  Then I deleted the user account, created it over again and based in on the user account that was behaving.  No dice, same thing.  Double Errrr.

Then I noticed ,when I expanded the Privileges of the User account that was working, that it said Inherited from User group name… Aha!


So, I went back to the User account, turned all the Permissions back to Undefined, and Used the  Copy configuration tool option to copy the permissions on the New York State police group to the Ontario Sheriff group.  That did it.

In a nutshell, the solution was to mirror the privileges of the User group that was behaving correctly and not the user account.  Once I removed the permission definitions from the user account, and said, use the permissions from that group, it worked like a charm, or at least it was predictable.

Moral of the story?  Permissions, privileges, users, groups, partitions – is not trivial stuff, but it is logical and can be tamed with patience and good problem solving.

Content Management 101 – Staring SchoolWorld web site(s)

I’m protecting the innocence of the person we meet with today.  Ill call her Marge.  SchoolWorld is a service a CMS that is offered to our departments here at BOCES.  Its pretty good stuff.  Departments in our organization can create space within an existing instance of SchoolWorld.  The coolest thing about SW is that it is written in ColdFusion, a language I used to develop in.  I feel old and outdated.  Not really outdated, but to say I *used to develop in it, for almost 10 years, makes me feel old, but, I digress.  My daughter told me to blog this way, to allow little tangents of emotion, it makes the blogging human, she says.

Anyway, back to my story.  I meet with Eilleen, I mean Marge for about 60 minutes this am.  I sat and listened to her talk about the content that she wanted to put on the web site.  She had most of it written down and even organized into pages.  My job then is to help her to come along and grow a confidence and ownership of the content on-line.  In other words, I needed not to do things for her so much, but to help her do it herself.  To guide her into a comfort zone, so she could take ownership of the content and feel comfortable editing and updating it.  Lets face it, what could be worse than stale web content!  That’s what i’m saying, VERY LITTLE.  Nothing gets my gander up like reading outdated material on a web page.   Tongue is planted in cheek, of course.

What I am really saying “Its not mine, Its hers”  She needs to build it, edit it, own it, not me.  I do not want her calling me, ever, to tell her how to change the content on a web page or how to make a sentence bold.

“Let you blogging come alive dad!, opps, that was my daughter sneaking in there again”.  Sam, stay out, for now.

The *technical aspects of this meeting looked like this:

  1. Find the right SW instance to work with (we have about 10)
  2. Create a new account or see if she already has one, which she did, but never used it.
  3. Provide her account with access to the correct areas or departments on the site.
  4. Create a page or two to get her stated.

Show her how to log into the system, how to find the page(s) we created for her, and set her off on her content creating journey.  Really, that’s it.

Marge had a few typical comments like “Im not really sure how I want the page to look until I can see it”, I have heard that about 100 times over 15 years.  Which is a legit comment and is very true, since seeing your content in the actual web page is very informative, much more concrete than the abstract notion of a web page in your head or on paper.  “Could I use a form so people can ask for things?”  Well, of course, which precipitated a conversation or analogy of a back door to the house and having the correct key to enter, so you could see things in the kitchen in addition to the foyer.   Then I explained that her rights or access would allow her to see the web content that she creates from a different perspective that what her customers will see.  Hence, the back door -vs- front door analogy.  She seemed to get it.  We also explained that that phase, creating a form to capture inquires from her customers, would be phase 3.

Phase 1 = logging into the system, access her pages(s) and adding some simple content.

Phase 2 = adding more content, adding new pages, figuring out what content needs to be on what page, repeat and rinse

Phase 3 = identifying what she needs in say a form and how to add those to a web page and how to access data submitted via a form and how to work with that – the concept of a data base.

So, to summarize, SW – CMS, me, a advocate of SW, customers, others in WFLBOCES who want a web presence, Me guiding customers to create and take ownership of their web content.

A link to the starting page of Marges’ content, lets see how she does.

The end.

Overview of Digital Storefront

In my job, we support many products in the interest of our school districts, they are, after all, our primary customer. I was pulled into a meeting yesterday to support a new product we are offering called Digital Storefront.

This is a 3rd party product that that will have a web based interface (like most things these days) and integrate with our very nice and expensive print shop located here at BOCES in Newark.

The product will streamline billing and notifications of services offered via our print shop. I don’t know much about the specifics of what our print shop offers, but a guess would look something like this. Our print services are available to any of our 25 component school districts and to many of the internal departments here at BOCES. An example of an external school district would be Canandaigua Academy. An example of a internal department would be Staff Development. Lots of entities need to print things and that is a service that we offer to our customers.

Now we are the customer of Digital Storefront.

Things that seems to matter from our initial meeting.

There will be a series of *trainings avail. to use, or people in our BOCES who will be supporting this product. They look like this:

  1. Storefront configuration – Initial overview/view of generic implementation of the interface. Adding branding/images, setting the look of the instance. I will link to this later…
    Platform configuration – Site settings/environmental settings (this is relevant to my role) . Something like how long does a customer session last in the web browser.
    Security configuration – Policies – setting password policies (relevant to me again)
    Product configuration – there are the things our customers will interact with. There should be a lot of these. Like, “Print a training catalog” or “Print a policy manual”.
    Pricing configuration
    Ecommerce configuration – how do customers interact with the products…
    Job management – how to handle the que of requested products…

These seems very logical to me. Others things that were very familiar is the concepts of Roles, accounts, permissions, security. These concepts are very similar to the ones I work with in Moodle and SchoolWorld and Genetec systems. Each of these systems or applications uses the same concepts to handle users who interact with the systems.

On-line web systems have

  • users
    notifications (push)

The application of the system is what is different. The entities that interact on the system are very similar. Get it?!

A simplish C program to demonstrate use of array

This program took me about 90 minutes to complete.  I only put that time, because I am using a little slower than that, but not dealing with any graphic interfaces, classes or other object orientation rules, I found it quicker to accomplish actually building the program.  As always, I demonstrate good structured programming techniques with use of functions and a top down approach.

This program will ask the user a series of questions about their health and give a simple synopsis on their longevity.  Very simple, but enough to demonstrate how a more complex program like this could look.

#include <stdio.h>
#include <stdlib.h>

//function prototypes
void display_heading(void);
int getData(int);
void print_array(int scores[]);
void determine_outcome(int scores[]);

int main(void){


int i = 1;

puts(“\n\nWant to see how healthy you are?  Enter a 1 for yes, 0 to Quit”);

int counter;
int scores[4];

if(i==1){// play
scores[counter] = getData(counter); //put response in the scores array
}// end for

print_array(scores);//just for debugging purposes really
determine_outcome(scores);//will summize responses and show a response

puts(“\n\n\t\t Remember to choose 1 to play when asked!!”);
}//end if

}//end main

void display_heading(){
puts(“\t\t\tThe life calculator\n\\n”);
puts(“Follow these simple life rules and you will live long and prosper\n\n”);
puts(“1 – Eat well\n”);
puts(“2 – get lots of rest\n”);
puts(“3 – exercise on a regular basis\n”);
puts(“4 – reduce stress in your life\n”);
puts(“5 – relax, relax, relax”);

int getData(int i){
int value;

if(i == 0){
puts(“On a scale of 1-5 how healthy do you eat? 1 = real healthy, 5 = not healthy”);
}else if(i == 1){
puts(“On a scale of 1-5 how much rest do you get each day? 1 = lots, 5 = not much”);
}else if(i == 2){
puts(“On a scale of 1-5 how much exercise do you get each day? 1 = a lot, 5 = not much”);
}else if(i == 3){
puts(“On a scale of 1-5 how much stress is in your life? 1 = not much, 5 = lots”);
puts(“On a scale of 1-5 how much time do you spend each day relaxing? 1 = lots, 5 = not much”);
}//end if

return value;


void print_array(int scores[]){
int i;
puts(“\n\nScores in the array are: “);

void determine_outcome(int scores[]){
int i,total=0;

total = total + scores[i];//total scores

if(total < 10){
puts(“You shall live long and prosper my friend!”);
}else if(total >10 && total <15){
puts(“doing well my friend a good long life”);
}else if(total >15 && total < 20){
puts(“Well, you could be doing better, think about some changes soon.”);
puts(“Your longevity is in serious question!”);


C program punt pass and kick compilation…

A simple C program to demonstrate how one might create a punt, pass and kick application for their local YMCA.  This is a prototype, a proof of concept really.  This program demos the following good program design principles

Structures programming – using functions to separate the program logic

loops – to avoid repeated code

variables – declare locally

parameters – passing simple data among functions

#include “stdlib.h”

//function prototying
int get_punt();
int get_pass();
int get_kick();
int process(int,int,int);
void print_results(int);

int main(){

int i, punt, pass, kick, total;

printf(“\n\nMain Menu\n\n”);


printf("Enter a punt distance\n\n");
punt = get_punt(); //call function, store result
}else if(i==2){
printf("Enter a pass distance\n\n");
pass = get_pass();
}else if(i==3){
printf("Enter a kick distance\n\n");
kick = get_kick();
}//end if

}//end for

printf("\ndone getting scores….. processing ………\n\n");

total = process(punt,pass,kick);//call function, passing in score data, store result

print_results(total);//call function, passing total


void print_results(int total){
printf("\n\nThe total distance of the punt, pass and kick is %d :", total);

int process(int punt, int pass, int kick){
int total = punt + pass + kick;
return total;

int get_punt(){
int punt;
scanf("%d",&punt); // get input from keyboard – store to locally defined variable
return punt;

int get_pass(){
int pass;
return pass;

int get_kick(){
int kick;
return kick;


Get every new post delivered to your Inbox.