This is a placeholder for feedback/error...

Navigation: Welcome Demonstration User

You are looking at a live demo server for Course_Framework. This does pretty much everything but write the database. Download Course_FrameWork


Install: Requirements Installation License
Operate: Courses Sections Video Images Tests Tools Administration

Course_FrameWork Documentation

Promotional Fluff

Course_Framework is simple lightweight software designed to be an easy place to hang instructional content. Content can be images, video, text and tests. The software enables the teacher to quickly and easily assemble a web page with a video lecture of any length accompanied by a test which may be rich with images in both the questions and the answers. Test questions can be either multiple choice or essay type answers. Multiple selections are supported and the multiple choice parts of tests are scored automatically. Scoring essay questions is well beyond the scope of this program.

Student test results are shown both graphically, to enable the teacher to see the results for all the students at once, and as individual tests by pressing the button by the graph with the student's name on it. The student's actual test persists in the software until explicitly destroyed. A selection of filters are provided to enable the teacher to easily navigate the sea of data.

Courses are divided into multiple sections. There is no practical limit to the number of sections. Each section starts with a video which you create or provide. This video must be available on a web server. The easiest way to do this is to upload the video to If you don't have a video for the material, images or text can be provided instead.

Each section has an associated test. A test may have as many questions on it as you care to type (or your students will tolerate). Questions can be multiple choice with up to 8 answers (there have to be limits somewhere) and multiple correct answers are supported. Correct answers are selected while making up the question and are stored with the question itself. Images and HTML (except for forms and inputs) can be part or all of the question's text and answers. Essay answers are supported but not scored. Questions can be formulated as fast as you can type and find the appropriate images.

System Requirements

To make this trick work you need a website. This is much easier than it sounds. Web hosting services are a dime a dozen and there are many cheap options available nationwide. We are currently paying ~$60/year, or $5/month for this site. The hosting service needs to provide PHP and MySQL and they pretty much all do. If the people you are talking to don't you need to move on to those that do.

It is also possible to run this program in a stand-alone fashion on your personal PC without a web hosting service. This is a bit more involved, but it's something that can easily be accomplished in a couple of hours. You can run this on a machine in your classroom that is networked to other machines behind a your local firewall. Machines that can see your machine's name will be able to access the program. This will all work locally in your classroom but won't be visible in the big world outside on the InterWebs. See Xampp in the Document select for the excruciating details.


File Preparation Upload Licensing

File Preparation

Once you have the website, the files for the program need to be uploaded and the file "sql_password.php" needs to be edited so that it contains your site specific password and name for the MySQL database. Files must be edited using a simple text editor like "notepad". If you edit these files with something like "Word" it will not work. The method for obtaining this password and name varies from one hosting service to another but they generally strive to make the procedure simple and obvious. The file "sql_password.php" on my local installation looks exactly like:

$V_539b96f6e9a29587a576a2ae = "uf_physics_db";
$V_1261cd629575acc614af0867 = mysql_connect('localhost', 'admin', 'password');

You need to replace "uf_physics_db" with the name of the database you create on your hosting site. Replace admin with the name you login to the db with (not necessarily the same name as you log into the host site). Replace password with your MySQL password. The quotes, both single and double, are significant and must remain. Do NOT change 'localhost'. It's a customary (well known) name and will work just like that.

Uploading the Files

This whole package was downloaded by you in an archive file somewhere on your machine. Unless you are using the Xampp package detailed below you need to replicate this collection of files and directories on your website. Many hosting services will allow you to upload an archive (zip) file and do the extraction in place. If this is the case, upload the file and extract. Do preserve the directory structure, this is important. If your hosting service does not allow this you will have to unpack (unzip) the archive in a temporary directory on your machine and upload the files one by one.

At your document root (where points to) there need to be two files, "index.php" and "index.html". Only "index.php" is required, the .html file is provided for those webhosting sites that require the index page to be html. If this is the case, you need to edit index.html to point to your site's index.php. If you don't need index.html you should delete it as the webhosting software will always look there first. At the document root you need to create two subdirectorys (folders) called "include" and "images". In the "include" directory you need to make a subdirectory called "style". These directories and names are not optional, they need to be exactly as described.

Now you need to upload all of the files in the "include" directory you unzipped to the "include" directory on your website. Do the same with the "images" and "style" directories. You should end up with something that looks much like this.

stephen@selene:/var/www/Encrypted$ ls -R *
index.html  index.php

CF_banner.jpg  CF_icon.jpg  CF_splash.jpg  docs


check_tables.php           load_administration.php   load_wheel.php
code_fragments.php         load_courses.php          login_register.php
connect.php                load_documentation.php    run_demo.php
constants.php              load_instructor.php       select_generic_old.php
Course_FrameWork_doc.html  load_policy.php           select_generic.php
download.php               load_progress.php         sql_password.php
functions.php              load_restore_section.php  style
HTML_doc.html              load_student.php          Xampp_tutorial.html

style.css  style.css~

There might be some variation in the images: files. Not to worry.

Now that all the hard work is done you get to login for the first time. You want to be an Administrator, not just some random person who logs on, and there is a procedure for that. The first person who logs into the system with the word "ADMINISTRATOR " (please include the space, not the quotes) in front of their first name gets made into one. This gets you the instructor view of the program instead of the student view. This trick only works if there is no Administrator already made.

Boring Licensing Agreement

You are authorized to freely use and distribute, UNALTERED (excepting changes to the files "sql_password.php" and "index.html" detailed above), this software to your heart's content. You are not permitted to resell this software or alter it but you are encouraged to freely distribute it to anyone who might find it useful. This software is provided without a warranty or guarantee of fitness of any kind. Until the software is registered it will display a registration reminder on pages visible only to the content creator for 30 days. After 30 days the reminder will appear on all pages. Without registration the program will continue to work forever, or at least until 2038 and advent of the Unix Millennium Bug. Those of you using 64 bit systems should be fine until 292 billion years from now, 15:30:08 on Sunday, 4 December 292,277,026,596 when it will all come crashing down. Gives a sense of perspective, doesn't it?

and a Shameless plea for money

So why register? The program represents hundreds of hours of actual work preceded by thousands of hours learning how to do the hundreds of hours. There is value being provided that should be rewarded in a just universe. Use the program for a bit, then send me the $20, cash or check. It's the right thing to do.

If that is insufficiently motivating, there is more; more program that is. What you have right now is a loss leader. Something provided to you at an incredible price to get our nose in your tent. Registration unlocks the Branding Policies under Administration allowing you to customize the appearance of the program to your taste. It also allows for multiple instructors creating content and provides access controls so they don't inadvertently alter another instructor's content. Yes, you could probably stare at the code till your eyes water and figure out how to unlock what's there, but I did try to make the doing cost you more than $20 worth of your time and it would be evil. Don't be evil. There is plenty of value here; send me the $20. Do it now.

Registration also keeps you informed about add on modules that allow parents and students to monitor their progress through your course work as well as providing easy and convenient communication channels between teacher and students or parents. Additionally, registration gets you direct access to the developer and immediate consideration of your ideas for improvement. I'm interested in writing tools that make it easier for people to learn and I'm willing to implement any great notion that doesn't overly complicate things.
How could you resist?


At the highest level you navigate through the program using a select in the top left of the page labeled Navigation. This select takes you to pages that allow you to design content - Courses, monitor student progress - Progress, restore deleted content - Restore, read documentation - Documentation and manage your site - Administration.

Courses Progress Restore Documentation Administration

Courses Operation

Course Names Sections Video Images Questions/Tests

This is the page used to compose content into Sections and Courses. A section is a video, images or text followed by questions about the material presented. A collection of sections in order is called a course. Sections are the fundamental object we are manipulating with the database.

All of your labor creating content goes into sections. As a consequence, sections are very hard to delete forever. If you delete a section from the Courses page it can always be recovered by going to the Restore page. Only deleting a section from the Restore page will make the section truly go away. Otherwise, sections persist forever. You only detach them from the course they are assigned to when you delete them from the Courses page. A section may only be attached to one course at a time.

The entire course has an associated Status that is either Hold, meaning that it is not visible to students, or Released which means that it is visible.

A typical Course page looks like this:

The page is divided into three sections. The part just below the Course/Section select deals with course names and numbers, the middle bit deals with section names and videos. The bottom chunk deals with questions, and below that is an area that looks just like the section you are currently working on.

This part deals with the courses themselves.

At the top there is a two stage select, the first stage is the course number and name. The second stage is the section name. We use this to choose which section in which course we wish to edit.

Course Name type the name of the course you wish to create or change here.

Course Number type the number of the course you wish to create or change here.

Add Course will add a course to the database with the name and number specified in the text fields Course Name and Course Number. The combination of the course name and number are constrained to be unique. As a consequence of this, if you press Add Course more than once with the same data in the Course Name and Number you will see an error message. Call it something else and try again.

Save Course writes changes to the Course Name, Number and Status to the database. The combination of course name and number are constrained to be unique and an error message will occur if they are not. It is useful to remember that the course name and number are not the One True Name of the course. That is the function of the primary key, which is invisible. This allows us to rename a particular course yet still have it retain its identity, its knowledge about which course it really is, regardless of its name at the moment.

Status If the Status is Released your students can see the course. If it is Hold, they cannot. This lets you edit your courses without them being stumbled upon by an enquiring mind. When a course is created it uses the current status. Set this to Hold if you want to hide your development process.

Delete Course deletes a course from the database and moves all of the sections attached to the course to the trash where they persist forever, invisible to most. These sections can be recovered and re-attached to another course using the Recover page. When a course is deleted it is gone forever, there is no way to recover the course itself. But it was just an ordered list of sections, and the sections persist.

Sections Operation

Sections are composed of video, images and questions. Sections are where all of your work is stored so the program goes to great length to preserve them. If you delete a section from the Courses page it can be recovered on the Recovery page. The primary key for the sections is generated by the program and never seen by the user. This allows us to create different sections with the same name.

Section Name is where you type in the Section name. Sections are assumed to proceed in alphabetical order. There are other ways to do it but this is simple. It's a choice. To make things work smoothly I find that prepending a small number, say 010 to a section name is an easy and quick way to order your sections no matter what their name. If you want to move a section just change the number.

Video Operation

Section Video URL Video is slightly complicated so we've done our best to make it easy. Upload your video to YouTube then right mouse over the video and select Copy Video URL. Then paste what you have copied into the Section Video URL text field and press Save Section. The software will then do a slight edit to the URL you pasted as it saves then your video should appear below the questions. It can take several seconds to load if you are on a slow connection and if you are blocking Flash you need to do something about that.

The area that begins with Your Section Page Will Look Like: contains your live section page. You can check the checkboxes and the video on the page should play. If it doesn't, something is broken and it isn't going to work on the student page either. You are looking at the actual page the student will see, minus any last minute additions by the testing policies.

Video on web pages is mostly done with Flash which is frankly unreliable and fraught with security flaws. We are all waiting with bated breath for HTML5 with built in video support to make Flash go the way of the buggy whip, but it hasn't happened yet. This is yet another good reason to register.

A fabulous source of educational video is Kahn Academy. There is a teacher's resource section that you probably want to check out and 3,200 videos of more than some worth. They put a wrapper around their videos that makes it more difficult to tease out the actual URL you need. If you View Source on the Kahn page and search for the text "video" you will see something that looks like

<meta property="og:video" content="">
which contains the URL you want. I don't know what copyright issues may exist using their videos. You might ask nicely.

Add Section creates a new section in the current course with the section name and video URL that is present in the text fields. Unlike course names, section names are not constrained to be unique so it is possible to create multiple sections with the same name. When you add a section only the section name and video URL is added to the course. Existing questions from the old (copied) section are not carried along or duplicated.

Save Section writes the current section name and video URL to the database. It does not save changes to the current question, that is the function of the Save Question button.

Delete/Cut Section moves the current section to the Trash, where it can later be recovered using the Recover page.

Tests Operation

Tests are collections of an arbitrary number of questions attached to a section. Questions can be multiple choice with up to 8 answers, selectable. The answers can be either only one or multiple correct options. Essay answers are supported but not scored. Up to 8 images can be attached to each question and they can easily be resized so they all have the same size on the page no matter what their original size. Answers are marked with the question and are remembered by the program.

HTML can be used in both the question and answer text with some restrictions.

Images Operation

You can attach up to 8 images to a question. That limit is arbitrary and I am willing to address the special needs of any registered users in that regard. Images for a question can be all resized to have the same vertical or horizontal size. Vertical is pretty useful, horizontal a bit less so. The images showing in the view of the current section do not get resized until you Save Question.

Question Text is the place you enter the text for questions. HTML may also be entered here so you can put images, tables and other HTML entities excepting forms and inputs. One caveat though, single quote (') apostrophe, is brutally suppressed by substituting code for the thing itself. Your HTML must only use double quote (") or it won't work. Images inserted in this way do not get resized, for that you are on your own. Some knowledge of CSS is very useful. This little bit of HTML can be placed in either the question text or the answer text.
<table style="border:4px solid green;padding:15px;" >
  <tr><td><center><font color="blue" face="arial" size="4">
    The Fool is always greater than<br />
    The Proof.
And gets you this lovely table:
The Fool is always greater than
The Proof.

You will have to turn on the borders of tables explicitly as the global CSS has them turned off. You'll notice that we have mixed the styles, CSS to handle the table borders and the now deprecated <font> is used to specify font color, face and size. This will work for as long as the browsers support it. Learn CSS, it is the future. Under the Document Select above you will find a primer on the HTML you can use effectively here.

Answers is a select that allows you to specify the number of answers to a question. If you specify one answer a text area is provided for the student to enter an essay answer which will not be machine scored but which does enter the system in every other way. If answers 2-8 are selected then text fields for answer text are provided. Either single correct (radio button) or multiple true (checkbox) answer types are supported.

Type is a selector for the two types of multiple choice answers. The radio button type is for only one true answer. The checkbox type is for multiple true answers. The marking areas for checkboxes (square) and radio buttons (round) are different so the student has a visual clue about what is expected. Changing the Type setting will not update the page so if you select checkbox you might be looking at radio buttons till you save the question or do something else that refreshes the page.

Answer A-H: This is where you type and mark correct your multiple choice answers. HTML may be used carefully here.

Question is a selector for the current question. The current question is the one that appears in the clutter of text fields and areas that comprise the question area. If you have not yet made a question for the section the current question is #1. The selector always has one more question than the number you have made so, to make a new question select the last question number.

Save Question saves the current question. You should be aware that there are several things you can do in the question area that will provoke a page refresh. If you do a lot of typing in a Question or Answer area it is a very good idea to Save Question before doing something that would otherwise provoke a page refresh, like changing the number of answers or images attached to a question. I do not preserve typed text during a page refresh if you have not saved the question. This might be considered a bug, or a feature. Hard to say.

Delete/Cut Question deletes the current question and moves it into the question cut buffer. This buffer holds the last question deleted. If there is a question in the cut buffer and you select the last question with the Question select, the Paste Question button lights up and you can paste that question into the new question.

Paste Question works with Delete/Cut Question to paste a previously deleted question into the new question. As part of the process it renumbers the question and carried answers so that everything works.

Upload is not implemented.

Progress Operation

This page is used to measure student progress and evaluate the effectiveness of instructional content and tests. The image below shows the view of the student's progress. You can order students by name, First - Last or Last - First. You can also filter by 'None','Most Recent','Highest Score','First Taken' and 'Lowest Score'. You can look at the results for an individual section of a course or all the sections at once.

Registered users can use the Archive feature, which pre-filters the student test data to exclude tests older than a specified date. This keeps last semester's test data out of the current results while preserving the data itself.

Pressing the student name to the left will show that test. If the student's name is in red, a student feedback comment is also available from that student. The time the test was actually taken is to the right of the graph.

Another view of the data is provided by selecting the Sections view. This shows the results for the section tests broken down question by question. It tells you what percentage of students attempted to answer the question and what percentage of them got it right. If you press the button with the question number it shows you all of the wrong answers to the question. At the top left is the sample size you are working with.

Checking Show Questions prints the questions themselves along with the test data.

A view with the questions shown as well as the general results makes it easer to grasp the student's current understanding of the material. Pressing the question button shows all of the wrong answers:

Restore Operation

This is where we bring sections back from the dead.

There isn't much to say about this page. There is a list of deleted sections and a list of courses. Pick one and add to the other. Way over on the right is a red button that will make the section go away forever.

The list of deleted sections has the deletion time and date appended to the section name. After that there is an integer which is the section's index0, or One True Name. The Current User select allows you to see your own, or all user's deletions. This is not functional in the unregistered version, you will only see your own deletes as there is only one content provider allowed in the free version.

When a section is restored, the restore time and date is appended to the section name. You can and should edit this out. It is provided to help keep things straight, use it as you will. The time and date also includes the offset from GMT (the confusing bit at the end). Using time in this form assures us that we will always agree about what time something happened.

Documentation Operation

You are here...

Administration Operation

Here we set policies which control the detailed operation of the program. If you want the program to work differently than it does, this is where that might just happen. Policies are loaded in order, first the SYSTEM policies, the policies of the Administrator, then any policies that the current user specified. For this reason, there must be only one Administrator. If there is more than one it is the Administrator who registered the program whose policies are in force globally. The other Admin will be confused that their global policies (which they are allowed to set) are not enforced. This is probably a bug and should be fixed Real Soon Now. Currently there are policies for:

Support This is where you will find the information needed to register the program. Contact the email address given there for an address to send $20 and your software signature and installation hash number. On receipt you will be emailed an installation key.

Login Policies for Login are set here. There are two sets of policies, one dealing with registration and the other with login. You might, for instance, require a full name and ID number with registration but be willing to allow login with just the user's ID and some name completion.

The absolute minimum is to require an ID. Some sort of identifier is required to track users from page to page and to note who is taking the tests. Some Name completion is provided. Some Name will accept strings as user names that are contained by the registered name. You can type "Ste" for Stephen and if the user pointed to by the ID contains "Ste" as part of the name you are good.

Password policies currently are None, Required, and Complex. Complex means that the password must pass some minimum level of complexity, say alphas and numerics and mixed-case.

Some simple policies are provided for IDs. You can require that they be entirely numeric or allow mixed alphas and numbers.

Branding allows you to set the images for the banner above all the pages and the splash page for login. This makes it possible for the program to look truly you own and integrate visually with the rest of your site or organization. Branding only works for registered users.

Testing policies enable you to attach a student feedback area to the end of tests, either before the test is scored or after. You may also enter text inviting the student to type in that area.

Additional testing policies will govern scoring behavior. The default is to mark as correct or incorrect all of the questions the student attempts. No correct answers are revealed if the student doesn't try the question. There are other behaviors possible and we will explore that space.

Archive As student test data is collected at some point it becomes uninteresting to the instructor. That may be in 30 days, or 60 days or whenever. You want to be able to set a point in the past where you don't see testing data, say last semester's tests, unless you really want to. It clears the clutter.

This setting is available only to registered users. If after using the program and reading the documentation you don't send me the $20 this is my fall-back position. In the second semester you will find yourself wading through all of the data from the first semester and you will pay me my richly deserved dollars. Or you will work around the problem and think to yourself every time you use the program that "I cheated that guy out of his money; I broke that poor schmuck's rice bowel." See if you don't.

Auto-Delete This is distinct from Archive in that this actually makes the data go away after a period of time. This is available to registered users only.

Multi-user Policies Registered users can control instructor access to individual policies here. You might want to have different banners for different instructors, or different testing policies. This is where that happens.

Course Ownership/Visibility In a multi-user environment there is a whole can of worms unleashed in who gets access to what exactly when and how. With this turned on, courses are owned by the instructor who created them. Section may be freely copied by other users but they are not permitted to change the original material. With this turned off all instructors can modify all materials. This is only available to registered users.

Section Ownership/Visibility Sections are owned by whoever owns the course they are attached to. The concept of ownership is available to sections, but it doesn't make much sense to separate the ownership of sections from the ownership of the course.

Multi-user Archive Different archive horizons for individual content creators are available to registered users only.

Edit User is a simple editor for user names an passwords. You can't alter the student's ID other than to delete it. Until you register you cannot elevate the access of another user, to make another instructor for example.

Edit Courses is a simple editor for courses. This is used to change the ownership of a course. Only the Administrator has access to this tool.

This is a placeholder for feedback/error...

Course_FrameWork software Copyright © 2012 by Stephen Jackson, All rights reserved.