WebFund 2024F: Tutorial 1

From Soma-notes
Revision as of 15:41, 12 September 2024 by Soma (talk | contribs)

In this tutorial you will be studying and extending two implementations of simplegrep, included below. grep is a standard UNIX utility for returning lines from a text file that match a given pattern.

First, with the sync version, try the following:

  • Make the search pattern into a regular expression.
  • Give it an additional argument that causes matched lines to be output to a new file. You'll need to use writeTextFileSync() from the Deno file system API. When finished, output "All done!" to the console.
  • Make the output lines sorted in alphabetical order.

Then, do all of the above with the async version. Make sure to use writeTextFile(), not writeTextFileSync()!

You may find the following methods useful when working with arrays:push(), pop(), shift(), unshift(), and join().

Code

simplegrep_sync.js

Downloadable version.

if (Deno.args.length < 2) {
    console.error('Not enough parameters given. Try this: ' +
                  '"deno run --allow-read simplegrep_sync term filename.txt"'); 
    Deno.exit(1);
}

var searchterm = Deno.args[0];
var filename = Deno.args[1];

var rawContents = Deno.readTextFileSync(filename);
var lines = rawContents.split('\n');

for (var i = 0; i < lines.length; i++) {
    if (lines[i].indexOf(searchterm) > -1) {
        console.log(lines[i]);
    }
}

simplegrep_async.js

Downloadable version.

if (Deno.args.length < 2) {
    console.error('Not enough parameters given. Try this: ' +
                  '"deno run --allow-read  simplegrep_async term filename.txt"'); 
    Deno.exit(1);
}

const searchterm = Deno.args[0];
const filename = Deno.args[1];

const returnMatches = function(rawContents) {

    const lines = rawContents.split('\n');

    lines.forEach(function(theLine) {
        if (theLine.indexOf(searchterm) > -1) {
            console.log(theLine);
        }
    });
}

const readPromise = Deno.readTextFile(filename);
try {
    const rawContents = await readPromise;
    returnMatches(rawContents);
} catch (error) {
    console.error(`Error reading file: ${error.message}`);
    Deno.exit(1);
}

Getting Started with Deno and Openstack

For this class you will be using Deno and a web broswer. While these are both cross-platform, we can provide the most support for running these applications inside the class Ubuntu Openstack cloud instances.

To get going with OpenStack, follow the SCS guide to OpenStack. Inside the COMP2406 project, create your own instance, with the name of your instance being your Carleton username plus "-comp2406-1" (so, "janesmith-comp2406-1"). If you need no make another instance, increment the number. You should normally have only one instance running; please delete non-functioning instances.

(I don't expect you to mess up your instance but mistakes happen!)

Should should select the latest "comp2406-2024f-" image as the starting image. This one will have deno already installed in the student account. If you use another image, you'll have to manually install deno and add its binary to the current path.


Hello, World!

This text should be updated.

To create your first deno application, start geany, brackets, vim, or emacs code editors by clicking on their quick launch icons at the bottom left of the screen (beside the LXDE start menu button).

(If you are a fan of vi but want to try emacs, you should type Alt-X viper-mode. You're welcome.)

In your editor of choice, create a file hello.js in your Documents folder with the following contents:

  console.log("Hello World!");

You can now run this file by opening an LXTerminal (under Accessories) and typing:

  cd Documents
  deno run hello.js

And you should see Hello, World! output to your terminal.

You can also run deno interactively by simply running deno with no arguments. You'll then get a prompt where you can enter any code that you like and see what it does. To exit this environment, type Control-D.

Note that when run interactively, we say that deno is running a read-eval-print loop (REPL). It reads input, evaluates it, and then prints the results. This structure is very old in computer science, going back to the first LISP interpreters from the early 1960's.