This web site collects together a few ideas, demos, and hobby experiments.

I am interested in sailing, and electronics and dabbling in coding. The Science of Cambridge MK14 was my first computer and I am still playing with it 40 years later! My interest in PIC micro controllers started after using one to turn on a cassette recorder to record the Radio 4 Shipping forecast while on a yacht away from the marina. Nowadays, boards like the Arduino, Raspberry Pi and modules sourced from eBay allow plenty of tinkering using LINUX, the IDE, Tiny C and SDCC compiler. Emulating old computers has provides interesting challenges. Most computers are micro-controllers or virtual now with the Cloud. Thankyou for all the useful blogs and webpages information. I have an interest in using JavaScript and SVG in Web Pages to try out coding ideas and dabbles.

Wiki - Arduino, R Pi, old computers: MK14, NASCOM 2, Microchip PIC , JavaScript, more...
My github - MK14, NASCOM emulators in DOS, Java, C using SDL
Science of Cambridge MK14 emulator
MicroChip Web Pages
Interative Telecom models
ADSL and the bell wire
dougrice.co.uk


Guest book - used to log web pages of interest!
Dashboard - updatable
Notice Board using Markdown.

Simple JavaScript applications using data stored in a guest book

The UK Online Safety Act needs to be considered. The Online Safety Act explainer.

This idea could allow any content to be posted un-moderated. The server side scripts need validation of who is posting. A separate script to unlock and lock the posts is used to restrict ad-hoc posts. Some validation of the form data is needed. Ad-hoc posts would need to be moderated before publication.

Here is a way of writing simple web applications by using a 'guestbook' server side script and client side JavaScript. There are loads of simple applications that just need a simple sorted list of user's amendments.

Some of these pages result from work on automating our sailing club web site.

Our sailing club needed some simple but useful applications without too much effort.

I did not want to be constrained to using an "off the shelf application" provided by the likes of www.bravenet.com

I wrote this essay for the TCN, who gave me a special commendation prize.

Community Groups communicate using the Web - A need for a simple booking system on the web.

The server side script collects the submits from the guestbook form and wrapped them in a JavaScript function call.

Your web pages would include these and do the processing on the viewer's browser.

You write the body of the function to use the data in the guestbook.



Example CGI script: perl cgi script

When this was invented, the server did not allow PHP, SQL or Perl written by the site owner.  

It only had a generic guestbook script that saved the data as HTML. 

This idea modified a similar guestbook script, 
so the the data could be downloaded to the web page 
and unpacked by JavaScript and wrapped in HTML.

The data is wrapped in JavaScript gbF() functions in a file gbookFxxx.js

The author needs to know how to use JavaScript to output HTML and CSS.

They need to know how to escape the data so that ' " < and > within the data to not break the application.
Generic CGI script wraps Form data in gbF().

  function gbF( name, email, postedOn, IPaddress, userfield1, userfield2, userfield3, userfield4, comments)
	
Include remote guestbook and gbF() will be called once per entry.

  <script  language = "JavaScript" type = "text/javascript" 
    src = "http://ccgi.dougrice.plus.com/gb/gbookFXXX.js" >  
  </script>
	
Using JavaScript object format
var gbA  = new Array()

function gbF( name,email,postedOn,IPaddress,userfield1,userfield2,userfield3,userfield4,comments){
  var  r = new Object()

  	r.name       = name
	r.email      = email
	r.postedOn   = postedOn
	r.IPaddress  = IPaddress
	r.userfield1 = userfield1
	r.userfield2 = userfield2
	r.userfield3 = userfield3
	r.userfield4 = userfield4
	r.comments   = comments
	r.link	     = ""

    // If the dates are in ISO format they are easier to sort
	//The user can split userfield1 is userfield1 ="item|2025-07-14|"
	r.uf1A = userfield1.split("|")


	//return r
	
	// Append this object to an Array
	gbA[ gbA.length ] = r
}
Using JavaScript Objects to load and sort data
 
var gbA = []
var gbA = new Array()
console.log( gbA.length )

function gbF( name,email,postedOn,IPaddress,userfield1,userfield2,userfield3,userfield4,comments){
  
  gbA[ gbA.length ] =  { 
    "name":name,
	"email":email,
	"postedOn":postedOn,
	"IPaddress":IPaddress,
	
	"userfield1":userfield1,
	"userfield2":userfield2,
	"userfield3":userfield3,
	"userfield4":userfield4,
	
	"comments":comments,

	"index":gbA.length
	}
}
test call:-

// test call
gbF( "Test Call1","email","15 Nov 2003","IPaddress","userfield1","userfield2","userfield3","userfield4","Testcomments")
gbF( "Test Call4","email","15 Nov 2003","IPaddress","userfield1","userfield2","userfield3","userfield4","Testcomments")
gbF( "Test Call5","email","15 Nov 2003","IPaddress","userfield1","userfield2","userfield3","userfield4","Testcomments")
gbF( "Test Call2","email","15 Nov 2003","IPaddress","userfield1","userfield2","userfield3","userfield4","Testcomments")

function sortfn( a, b ){
  if (a.name  >  b.name){
    return 1
  } else { 
    return -1
  }
}

// pass name of sort function
gbA.sort( sortfn )

NOTE:- My entry is appended to: http://ccgi.dougrice.plus.com/gb/gbookFXXX.js.

I put spam into: http://ccgi.dougrice.plus.com/gb/gbookF_guest_XXX.js

Guestbook data used by userdefined gbF() function and other JavaScript code.

Data Dump of my guest books, Timeline of entries at www.plus.net and Data Dump at www.plus.net

Posted Fields used by guestbook scripts:

  name	    =name  - name of person signing guestbook
  email	    =email - email address of person signing guestbook
  userfield1  =userfield1 - a string that the application can use
  userfield2  =userfield2 - a string that the application can use 
  userfield3  =userfield3 - a string that the application can use 
  userfield4  =userfield4 - a string that the application can use 
  userfield5  =uf5 Tue Oct 23 21:47:32 UTC+0100 2007 - anti spam security string set by javascript

  comments    =This is a multi line comment

The fields above are copied into the parameters below, suitably escaped:

  function gbF( name, email, postedOn, IPaddress, userfield1, userfield2, userfield3, userfield4, comments)

  function gbF( "user's name", "user's email", "timestamp postedOn", "users IPaddress", "uf1", "uf2", "uf3", "uf4", " user's comments");

This field is use to select the guestbook to update:

  guestbook   =XXX  - this string is appended to gbookF{guestbook}.js 

These fields control the next URL to go to:

  nextpage    ="http://www.dougrice.plus.com/hp/gbbook/index.htm"  - URL of page to go to.
  loadnextpage=loadnextpage  - this is a flag to load the next page
A conventional Server side app uses PHP to do an SQL query to return data in PHP arrays.
The page author needs to understand PHP, SQL, HTML, CSS, and possibly JavaScript.

They also need to know how to connect to the remote SQL database, CREATE a table, SELECT, INSERT, UPDATE, DELETE, DROP and backing up the SQL database.

BOTH methods need to know how to escape data so that characters like ' and " and < and > do not break the application. This is a big challenge for beginner.
The PHP unpacks the data from the arrays to generate HTML pushed to the Web page.

This generates table rows:-
	
$sql = "SELECT * from boats";

$uresult = $mysqli->query($sql , MYSQLI_USE_RESULT);

if ($uresult) {
  while ($row = $uresult->fetch_array()) {
    echo "<TR>";

    for( $x = 0; $x < count( $row )/2 ; $x++) {
      echo "<TD>". $row[ $x ]  ."</TD>";
	}  

    echo "</TR>". PHP_EOL;
  }
}

Other pages:-

A simple to set up Webserver on a Raspberry Pi:- Notes on using busybox httpd.

More Theory:-

Early Theory:-

Examples:-

Demo Apps, some were used :-

boat booking system - demo data - Liferaft Booking System - used for one year.

boat booking system - demo data - Uses cookies - Liferaft Booking System - used for one year.

sailing session booking system - with - Booking System - pricing.

Markdown and Guestbook idea - Includes a Markdown using JavaScript on the page.

These were used:-

Updateable Notice Board - shows future and last weeks notices.

Updateable Notice Board - with update form

Guest book closed due to spam but used to log interesting pages.

Multi table note blogger Used for notes and still can read archived data.

Experimental Demos:-

Updateable Club Race Results - results using csv to tables.

Gant Chart demo - try to show gant chart.

CSV data to tables Demos:-

CSVtoTable - try to display tables.

CSVtoTable - with update links - try to display editable tables.

Dump data as CSV dump CSV tables

Favorites and code scrap blogger:-

Guestbook logging Favorites - records links of interest

Code Scrapbook - record bits of code

Webpage includes links found:-

ADSL links / Favorites

Garden solar Light:-

Garden Solar Light including blog / Logger.

Garden Solar Light Logger - Daily Counts.

Plot Solar cell measurements using SVG graphics