WebFund 2024F: Tutorial 1

From Soma-notes
Revision as of 14:46, 12 September 2024 by Soma (talk | contribs) (Created page with "'''This tutorial is not yet finalized.''' 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 [https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions regular expression]. * Give it an additional argument that causes ma...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

This tutorial is not yet finalized.

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 writeFileSync() from the Deno fs module. 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 writeFile(), not writeFileSync()!

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

For this class you will be using deno.js and a web broswer. While these are both cross-platform, we can provide the most support for running these applications inside the class Lubuntu virtual machine appliance. We will be using VirtualBox as our preferred virtualization platform; however, VMware Workstation/Fusion and other virtualization platforms should be able to run the appliance as well.

In the labs deno.js is also installed on the lab machines under Programs->Programming->deno.js. From the deno.js command prompt you can run deno programs in a fashion similar to a Linux command prompt; however, expect there to occasionally be bugs that are not present in the Lubuntu environment. Consider yourself warned!

Running the VM

In the SCS labs you should be able to run the VM by starting Virtualbox (listed in the Applications menu) and selecting the COMP 2406 virtual machine. After the VM has fully booted up you should be logged in automatically as the user "student". If the screen locks or you need administrative access (via sudo) you'll need the password for the student account, however. This password is "tneduts!" (students backwards followed by an !). There is also an admin account in case your student account gets corrupted for any reason. The password for it is "nimda!".

We highly recommend running your VM in full-screen mode. (Don't maximize the window; instead select full screen from the view menu.) Do all of your work inside of the VM; it should be fast enough and you won't have any issues with sharing files or with host firewalls.

If you want to run the VM on your own machine, see the section on configuring your own VM the main course webpage.

Note as we will explain, you will have the ability to easily save the work you do from any VM to your SCS account and restore it to any other copy of the class VM. Thus feel free to play around with VMs; if you break anything, you can always revert. Remember though that in the labs you must save and restore your work, as all of your changes to the VM will be lost when you logout!

While you may update the software in the VM, those updates will be lost when you next login to the lab machines; thus, you probably only want to update a VM installed on your own system.


Hello, World!

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 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.