Differences between revisions 5 and 39 (spanning 34 versions)
Revision 5 as of 2023-03-27 18:02:32
Size: 670
Editor: khellman
Comment:
Revision 39 as of 2025-09-18 12:28:14
Size: 3062
Editor: anonymous
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:

/* DO NOT EDIT THIS FILE! moinconfig/cspages/AlamodeAccessCaveatsAndWarnings! */
<<TableOfContents()>>

<<Anchor(randomdat)>>
= Trace File Arguments Are Not Always Files =
In practically all programming assignments, at least one command line argument is a file from which `SIM` should read random values from (in lieu of using a library specific pRNG). The [[Assignments/TraceFiles|TraceFiles]] page has sample files for use in development.

'''Beware''' that `grader.sh` scripts don't usually provide a static regular file as these arguments!
Instead they use input redirection to connect a program generating '''a possibly infinite''' sequence of values to your `SIM`.
This means that if you attempt to read all random values into an array or list, your `SIM` is going to "hang" --- it will dutifully read in an infinite collection of `double`s until you exhaust machine memory.

An easy way to manage this is to create a `TraceFile` object that accepts a filename as a constructor parameter and provides a single `getRandom()` member function that returns a floating point value. Of simply write a `getRandom( tracefile )` global function that accepts an open file descriptor (object, pointer, handle, the terminology depends on the language) and returns the next `double` from the file.

== Why are things so complicated you ask? ==
By using redirection as the source for your `SIM` random numbers, `grader.sh` can be written with tests to be sure the random numbers are being used properly,<<FootNote(Depending on the system being modeled)>> it is easy to incorporate pRNG '''streams''' into the mix without worrying about which language a student is using, and by providing fake sequence of random values...
{{{
$ ./SIM <(yes 0.5)
}}}
certain types of '''consistency checks''' can be automated without micro-managing how student programs are written.
Line 7: Line 27:
ctb60-12$ ~khellman/COMPGRADING/aenorm
/usr/lib/libc.so: No such file or directory
ctb60-12$ ~khellman/SIMGRADING/Random 12345
/usr/lib/libssl.so: No such file or directory
Line 10: Line 30:
Of course, `libc.so` is there: Of course, `libssl.so` is there:
Line 12: Line 32:
ctb60-12$ file /usr/lib/libc.so /usr/lib/libc.so.6
/usr/lib/libc.so: ASCII text
/usr/lib/libc.so.6: symbolic link to libc-2.31.so
ctb60-12$ file /usr/lib/libssl.so /usr/lib/libssl.so.1.1
/usr/lib/libssl.so: symbolic link to libssl.so.1.1
/usr/lib/libssl.so.1.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=5a12e36d18f5fd2e5519bd1f7741bcc6907bb3ad, stripped
Line 18: Line 38:
<<Include(AlamodeAccessCaveatsAndWarnings)>>
<<Anchor(sshXhopping)>>
= Grrr, I can't see the PDFs generated by grader.sh =
Use a PDF viewer installed on the alamode images. Some examples include `gview` or `evince`; but `xpdf` is '''by the far the fastest'''.
{{{
$ xpdf output-1010.pdf
}}}

If you are `ssh(1)`ing into alamode, use the `-X` option.
{{{
remote-with-vpn$ ssh -X ctb60-13.mines.edu
ctb60-13$ gview output-1010.pdf
}}}

Trace File Arguments Are Not Always Files

In practically all programming assignments, at least one command line argument is a file from which SIM should read random values from (in lieu of using a library specific pRNG). The TraceFiles page has sample files for use in development.

Beware that grader.sh scripts don't usually provide a static regular file as these arguments! Instead they use input redirection to connect a program generating a possibly infinite sequence of values to your SIM. This means that if you attempt to read all random values into an array or list, your SIM is going to "hang" --- it will dutifully read in an infinite collection of doubles until you exhaust machine memory.

An easy way to manage this is to create a TraceFile object that accepts a filename as a constructor parameter and provides a single getRandom() member function that returns a floating point value. Of simply write a getRandom( tracefile ) global function that accepts an open file descriptor (object, pointer, handle, the terminology depends on the language) and returns the next double from the file.

Why are things so complicated you ask?

By using redirection as the source for your SIM random numbers, grader.sh can be written with tests to be sure the random numbers are being used properly,1 it is easy to incorporate pRNG streams into the mix without worrying about which language a student is using, and by providing fake sequence of random values...

$ ./SIM <(yes 0.5)

certain types of consistency checks can be automated without micro-managing how student programs are written.

Missing Libraries on An alamode Machine

Occasionally, you will login to an alamode machine and some course provided code will fail to run due some very bizarre reasons

ctb60-12$ ~khellman/SIMGRADING/Random 12345
/usr/lib/libssl.so: No such file or directory

Of course, libssl.so is there:

ctb60-12$ file /usr/lib/libssl.so /usr/lib/libssl.so.1.1
/usr/lib/libssl.so:     symbolic link to libssl.so.1.1
/usr/lib/libssl.so.1.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=5a12e36d18f5fd2e5519bd1f7741bcc6907bb3ad, stripped

This seems to be resolved by using a different alamode machine. ctb60-12 won't be fixed until it gets a reboot :(

Grrr, I can't see the PDFs generated by grader.sh

Use a PDF viewer installed on the alamode images. Some examples include gview or evince; but xpdf is by the far the fastest.

$ xpdf output-1010.pdf

If you are ssh(1)ing into alamode, use the -X option.

remote-with-vpn$ ssh -X ctb60-13.mines.edu
ctb60-13$ gview output-1010.pdf
  1. Depending on the system being modeled (1)

AlamodeAccessCaveatsAndWarnings (last edited 2026-01-12 10:40:18 by anonymous)