Contents
15. Light and dark
|
How to program a text adventure in C
by Ruud Helderman
<EMAIL_ADDRESS>Licensed under
MIT License
15. Light and dark
In many adventures, a lamp is a vital object.
Without it, you cannot make it through the dark caverns that lie ahead.
The effect of being in the dark differs from game to game.
Typically, it makes the command ‘look’ ineffective.
In some games (e.g. Zork),
darkness is deadly.
In others, you can still make progress without a light source,
provided you have drawn a detailed map of the dark area.
Our game will stay in between;
being in the dark will not get you killed,
but you will not be able to follow any passages either.
An exception will be made for passages that lead back into the light;
it seemed unfair to me to allow the player to run into a dark area,
without an opportunity to get back to where he came from.
Alright; so first of all, in darkness you cannot see your surroundings.
| location.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include "object.h"
- #include "misc.h"
- #include "match.h"
- #include "noun.h"
- bool executeLookAround(void)
- {
- if (isLit(player->location))
- {
- printf("You are in %s.\n", player->location->description);
- }
- else
- {
- printf("It is very dark in here.\n");
- }
- listObjectsAtLocation(player->location);
- return true;
- }
- bool executeLook(void)
- {
- OBJECT *obj = getVisible("what you want to look at", params[0]);
- switch (getDistance(player, obj))
- {
- case distHereContained:
- printf("Hard to see, try to get it first.\n");
- break;
- case distOverthere:
- printf("Too far away, move closer please.\n");
- break;
- case distNotHere:
- printf("You don't see any %s here.\n", params[0]);
- break;
- case distUnknownObject:
- // already handled by getVisible
- break;
- default:
- printf("%s\n", obj->details);
- listObjectsAtLocation(obj);
- }
- return true;
- }
- static void movePlayer(OBJECT *passage)
- {
- printf("%s\n", passage->textGo);
- if (passage->destination != NULL)
- {
- player->location = passage->destination;
- printf("\n");
- executeLookAround();
- }
- }
- bool executeGo(void)
- {
- OBJECT *obj = getVisible("where you want to go", params[0]);
- switch (getDistance(player, obj))
- {
- case distOverthere:
- movePlayer(getPassage(player->location, obj));
- break;
- case distNotHere:
- printf("You don't see any %s here.\n", params[0]);
- break;
- case distUnknownObject:
- // already handled by getVisible
- break;
- default:
- movePlayer(obj);
- }
- return true;
- }
|
Secondly, in darkness you cannot see or use nearby objects.
| noun.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include <string.h>
- #include "object.h"
- #include "misc.h"
- static bool objectHasTag(OBJECT *obj, const char *noun)
- {
- if (noun != NULL && *noun != '\0')
- {
- const char **tag;
- for (tag = obj->tags; *tag != NULL; tag++)
- {
- if (strcmp(*tag, noun) == 0) return true;
- }
- }
- return false;
- }
- static OBJECT ambiguousNoun;
- static OBJECT *getObject(const char *noun, OBJECT *from, DISTANCE maxDistance)
- {
- OBJECT *obj, *res = NULL;
- for (obj = objs; obj < endOfObjs; obj++)
- {
- if (objectHasTag(obj, noun) && getDistance(from, obj) <= maxDistance)
- {
- res = res == NULL ? obj : &ambiguousNoun;
- }
- }
- return res;
- }
- OBJECT *getVisible(const char *intention, const char *noun)
- {
- OBJECT *obj = getObject(noun, player, distOverthere);
- if (obj == NULL)
- {
- if (getObject(noun, player, distNotHere) == NULL)
- {
- printf("I don't understand %s.\n", intention);
- }
- else if (isLit(player->location))
- {
- printf("You don't see any %s here.\n", noun);
- }
- else
- {
- printf("It's too dark.\n");
- }
- }
- else if (obj == &ambiguousNoun)
- {
- printf("Please be specific about which %s you mean.\n", noun);
- obj = NULL;
- }
- return obj;
- }
- OBJECT *getPossession(OBJECT *from, const char *verb, const char *noun)
- {
- OBJECT *obj = NULL;
- if (from == NULL)
- {
- printf("I don't understand who you want to %s.\n", verb);
- }
- else if ((obj = getObject(noun, from, distHeldContained)) == NULL)
- {
- if (getObject(noun, player, distNotHere) == NULL)
- {
- printf("I don't understand what you want to %s.\n", verb);
- }
- else if (from == player)
- {
- printf("You are not holding any %s.\n", noun);
- }
- else
- {
- printf("There appears to be no %s you can get from %s.\n",
- noun, from->description);
- }
- }
- else if (obj == &ambiguousNoun)
- {
- printf("Please be specific about which %s you want to %s.\n",
- noun, verb);
- obj = NULL;
- }
- else if (obj == from)
- {
- printf("You should not be doing that to %s.\n", obj->description);
- obj = NULL;
- }
- return obj;
- }
|
In both cases, we used a function isLit.
It is defined (and used some more) in misc.c.
| misc.h |
- typedef enum {
- distSelf,
- distHeld,
- distHeldContained,
- distLocation,
- distHere,
- distHereContained,
- distOverthere,
- distNotHere,
- distUnknownObject
- } DISTANCE;
- extern bool isHolding(OBJECT *container, OBJECT *obj);
- extern bool isLit(OBJECT *location);
- extern OBJECT *getPassage(OBJECT *from, OBJECT *to);
- extern DISTANCE getDistance(OBJECT *from, OBJECT *to);
- extern OBJECT *actorHere(void);
- extern int listObjectsAtLocation(OBJECT *location);
|
| misc.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include "object.h"
- #include "misc.h"
- bool isHolding(OBJECT *container, OBJECT *obj)
- {
- return validObject(obj) && obj->location == container;
- }
- bool isLit(OBJECT *target)
- {
- OBJECT *obj;
- if (validObject(target))
- {
- if (target->light > 0)
- {
- return true;
- }
- for (obj = objs; obj < endOfObjs; obj++)
- {
- if (validObject(obj) && obj->light > 0 &&
- (isHolding(target, obj) || isHolding(target, obj->location)))
- {
- return true;
- }
- }
- }
- return false;
- }
- static bool isNoticeable(OBJECT *obj)
- {
- return obj->location == player ||
- isLit(obj) || isLit(obj->prospect) || isLit(player->location);
- }
- OBJECT *getPassage(OBJECT *from, OBJECT *to)
- {
- if (from != NULL && to != NULL)
- {
- OBJECT *obj;
- for (obj = objs; obj < endOfObjs; obj++)
- {
- if (isHolding(from, obj) && obj->prospect == to)
- {
- return obj;
- }
- }
- }
- return NULL;
- }
- DISTANCE getDistance(OBJECT *from, OBJECT *to)
- {
- return to == NULL ? distUnknownObject :
- !validObject(to) ? distNotHere :
- to == from ? distSelf :
- isHolding(from, to) ? distHeld :
- !isNoticeable(to) ? distNotHere :
- isHolding(to, from) ? distLocation :
- isHolding(from->location, to) ? distHere :
- isHolding(from, to->location) ? distHeldContained :
- isHolding(from->location, to->location) ? distHereContained :
- getPassage(from->location, to) != NULL ? distOverthere :
- distNotHere;
- }
- OBJECT *actorHere(void)
- {
- OBJECT *obj;
- for (obj = objs; obj < endOfObjs; obj++)
- {
- if (isHolding(player->location, obj) && obj != player &&
- isNoticeable(obj) && obj->health > 0)
- {
- return obj;
- }
- }
- return NULL;
- }
- int listObjectsAtLocation(OBJECT *location)
- {
- int count = 0;
- OBJECT *obj;
- for (obj = objs; obj < endOfObjs; obj++)
- {
- if (obj != player && isHolding(location, obj) && isNoticeable(obj))
- {
- if (count++ == 0)
- {
- printf("%s:\n", location->contents);
- }
- printf("%s\n", obj->description);
- }
- }
- return count;
- }
|
Explanation:
- Line 11-30:
isLit will be used to check if a given location is light or dark.
Note: it is not enough to simply check attribute light of the location;
the location could be lit by a lamp.
- Line 32-36:
isNoticeable takes it one step further;
it works for every object, not just locations and lamps.
It also takes into account that objects in the player’s inventory
can always be used, even in the dark.
- Line 60:
nearby objects that remain hidden in the dark,
are being treated as ‘not here’.
This naturally prevents the game from leaking information
about objects the player is not supposed to be aware of.
The implementation of isLit uses a new attribute light.
| object.awk |
- BEGIN {
- count = 0;
- obj = "";
- if (pass == "c2") {
- print "\nstatic bool alwaysTrue(void) { return true; }";
- print "\nOBJECT objs[] = {";
- }
- }
- /^- / {
- outputRecord(",");
- obj = $2;
- prop["condition"] = "alwaysTrue";
- prop["description"] = "NULL";
- prop["tags"] = "";
- prop["location"] = "NULL";
- prop["destination"] = "NULL";
- prop["prospect"] = "";
- prop["details"] = "\"You see nothing special.\"";
- prop["contents"] = "\"You see\"";
- prop["textGo"] = "\"You can't get much closer than this.\"";
- prop["weight"] = "99";
- prop["capacity"] = "0";
- prop["health"] = "0";
- prop["light"] = "0";
- prop["open"] = "cannotBeOpened";
- prop["close"] = "cannotBeClosed";
- prop["lock"] = "cannotBeLocked";
- prop["unlock"] = "cannotBeUnlocked";
- }
- obj && /^[ \t]+[a-z]/ {
- name = $1;
- $1 = "";
- if (name in prop) {
- prop[name] = $0;
- if (/^[ \t]*\{/) {
- prop[name] = name count;
- if (pass == "c1") print "static bool " prop[name] "(void) " $0;
- }
- }
- else if (pass == "c2") {
- print "#error \"" FILENAME " line " NR ": unknown attribute '" name "'\"";
- }
- }
- !obj && pass == (/^#include/ ? "c1" : "h") {
- print;
- }
- END {
- outputRecord("\n};");
- if (pass == "h") {
- print "\n#define endOfObjs\t(objs + " count ")";
- print "\n#define validObject(obj)\t" \
- "((obj) != NULL && (*(obj)->condition)())";
- }
- }
- function outputRecord(separator)
- {
- if (obj) {
- if (pass == "h") {
- print "#define " obj "\t(objs + " count ")";
- }
- else if (pass == "c1") {
- print "static const char *tags" count "[] = {" prop["tags"] ", NULL};";
- }
- else if (pass == "c2") {
- print "\t{\t/* " count " = " obj " */";
- print "\t\t" prop["condition"] ",";
- print "\t\t" prop["description"] ",";
- print "\t\ttags" count ",";
- print "\t\t" prop["location"] ",";
- print "\t\t" prop["destination"] ",";
- print "\t\t" prop[prop["prospect"] ? "prospect" : "destination"] ",";
- print "\t\t" prop["details"] ",";
- print "\t\t" prop["contents"] ",";
- print "\t\t" prop["textGo"] ",";
- print "\t\t" prop["weight"] ",";
- print "\t\t" prop["capacity"] ",";
- print "\t\t" prop["health"] ",";
- print "\t\t" prop["light"] ",";
- print "\t\t" prop["open"] ",";
- print "\t\t" prop["close"] ",";
- print "\t\t" prop["lock"] ",";
- print "\t\t" prop["unlock"];
- print "\t}" separator;
- delete prop;
- }
- count++;
- }
- }
|
By default, light is zero, meaning an object does not emit light.
Every location in broad daylight (typically all but the underground ones)
will be given a positive light value.
It doesn’t really matter what value that is; as long as it’s not zero.
We will also add a lamp the player can carry to traverse dark areas.
| object.txt |
- #include <stdbool.h>
- #include <stdio.h>
- #include "object.h"
- #include "toggle.h"
- typedef struct object {
- bool (*condition)(void);
- const char *description;
- const char **tags;
- struct object *location;
- struct object *destination;
- struct object *prospect;
- const char *details;
- const char *contents;
- const char *textGo;
- int weight;
- int capacity;
- int health;
- int light;
- void (*open)(void);
- void (*close)(void);
- void (*lock)(void);
- void (*unlock)(void);
- } OBJECT;
- extern OBJECT objs[];
- - field
- description "an open field"
- tags "field"
- details "The field is a nice and quiet place under a clear blue sky."
- capacity 9999
- light 100
- - cave
- description "a little cave"
- tags "cave"
- details "The cave is just a cold, damp, rocky chamber."
- capacity 9999
- - silver
- description "a silver coin"
- tags "silver", "coin", "silver coin"
- location field
- details "The coin has an eagle on the obverse."
- weight 1
- - gold
- description "a gold coin"
- tags "gold", "coin", "gold coin"
- location openBox
- details "The shiny coin seems to be a rare and priceless artefact."
- weight 1
- - guard
- description "a burly guard"
- tags "guard", "burly guard"
- location field
- details "The guard is a really big fellow."
- contents "He has"
- health 100
- capacity 20
- - player
- description "yourself"
- tags "yourself"
- location field
- details "You would need a mirror to look at yourself."
- contents "You have"
- health 100
- capacity 20
- - intoCave
- condition { return guard->health == 0 || silver->location == guard; }
- description "a cave entrance to the east"
- tags "east", "entrance"
- location field
- destination cave
- details "The entrance is just a narrow opening in a small outcrop."
- textGo "You walk into the cave."
- open isAlreadyOpen
- - intoCaveBlocked
- condition { return guard->health > 0 && silver->location != guard; }
- description "a cave entrance to the east"
- tags "east", "entrance"
- location field
- prospect cave
- details "The entrance is just a narrow opening in a small outcrop."
- textGo "The guard stops you from walking into the cave."
- open isAlreadyOpen
- - exitCave
- description "an exit to the west"
- tags "west", "exit"
- location cave
- destination field
- details "Sunlight pours in through an opening in the cave's wall."
- textGo "You walk out of the cave."
- open isAlreadyOpen
- - wallField
- description "dense forest all around"
- tags "west", "north", "south", "forest"
- location field
- details "The field is surrounded by trees and undergrowth."
- textGo "Dense forest is blocking the way."
- - wallCave
- description "solid rock all around"
- tags "east", "north", "rock"
- location cave
- details "Carved in stone is a secret password 'abccb'."
- textGo "Solid rock is blocking the way."
- - backroom
- description "a backroom"
- tags "backroom"
- details "The room is dusty and messy."
- capacity 9999
- - wallBackroom
- description "solid rock all around"
- tags "east", "west", "south", "rock"
- location backroom
- details "Trendy wallpaper covers the rock walls."
- textGo "Solid rock is blocking the way."
- - openDoorToBackroom
- description "an open door to the south"
- tags "south", "door", "doorway"
- destination backroom
- details "The door is open."
- textGo "You walk through the door into a backroom."
- open isAlreadyOpen
- close toggleDoorToBackroom
- - closedDoorToBackroom
- description "a closed door to the south"
- tags "south", "door", "doorway"
- location cave
- prospect backroom
- details "The door is closed."
- textGo "The door is closed."
- open toggleDoorToBackroom
- close isAlreadyClosed
- - openDoorToCave
- description "an open door to the north"
- tags "north", "door", "doorway"
- destination cave
- details "The door is open."
- textGo "You walk through the door into the cave."
- open isAlreadyOpen
- close toggleDoorToCave
- - closedDoorToCave
- description "a closed door to the north"
- tags "north", "door", "doorway"
- location backroom
- prospect cave
- details "The door is closed."
- textGo "The door is closed."
- open toggleDoorToCave
- close isAlreadyClosed
- - openBox
- description "a wooden box"
- tags "box", "wooden box"
- details "The box is open."
- weight 5
- capacity 10
- open isAlreadyOpen
- close toggleBox
- lock isStillOpen
- unlock isAlreadyOpen
- - closedBox
- description "a wooden box"
- tags "box", "wooden box"
- details "The box is closed."
- weight 5
- open toggleBox
- close isAlreadyClosed
- lock toggleBoxLock
- unlock isAlreadyUnlocked
- - lockedBox
- description "a wooden box"
- tags "box", "wooden box"
- location backroom
- details "The box is closed."
- weight 5
- open isStillLocked
- close isAlreadyClosed
- lock isAlreadyLocked
- unlock toggleBoxLock
- - keyForBox
- description "a tiny key"
- tags "key", "tiny key"
- location cave
- details "The key is really small and shiny."
- weight 1
- - lampOff
- description "a lamp"
- tags "lamp"
- location field
- details "The lamp is off."
- weight 5
- - lampOn
- description "a lamp"
- tags "lamp"
- details "The lamp is on."
- weight 5
- light 100
|
Explanation:
- Line 19:
the new attribute.
- Line 33:
so far, the field is the only location with ‘natural’ light.
- Line 206-218:
for the lamp we actually have two objects:
the lamp being off and the lamp being on.
But the player will only get to see one at a time;
together they act as a single item.
We will add some commands we can use to turn the lamp on and off.
| parsexec.c |
- #include <ctype.h>
- #include <stdbool.h>
- #include <stdio.h>
- #include "object.h"
- #include "misc.h"
- #include "match.h"
- #include "location.h"
- #include "inventory.h"
- #include "inventory2.h"
- #include "openclose.h"
- #include "onoff.h"
- typedef struct
- {
- const char *pattern;
- bool (*function)(void);
- } COMMAND;
- static bool executeQuit(void)
- {
- return false;
- }
- static bool executeNoMatch(void)
- {
- const char *src = *params;
- int len;
- for (len = 0; src[len] != '\0' && !isspace(src[len]); len++);
- if (len > 0) printf("I don't know how to '%.*s'.\n", len, src);
- return true;
- }
- bool parseAndExecute(const char *input)
- {
- static const COMMAND commands[] =
- {
- { "quit" , executeQuit },
- { "look" , executeLookAround },
- { "look around" , executeLookAround },
- { "look at A" , executeLook },
- { "look A" , executeLook },
- { "examine A" , executeLook },
- { "go to A" , executeGo },
- { "go A" , executeGo },
- { "get A from B" , executeGetFrom },
- { "get A" , executeGet },
- { "put A in B" , executePutIn },
- { "drop A in B" , executePutIn },
- { "drop A" , executeDrop },
- { "ask A from B" , executeAskFrom },
- { "ask A" , executeAsk },
- { "give A to B" , executeGiveTo },
- { "give A" , executeGive },
- { "inventory" , executeInventory },
- { "open A" , executeOpen },
- { "close A" , executeClose },
- { "lock A" , executeLock },
- { "unlock A" , executeUnlock },
- { "turn on A" , executeTurnOn },
- { "turn off A" , executeTurnOff },
- { "turn A on" , executeTurnOn },
- { "turn A off" , executeTurnOff },
- { "A" , executeNoMatch }
- };
- const COMMAND *cmd;
- for (cmd = commands; !matchCommand(input, cmd->pattern); cmd++);
- return (*cmd->function)();
- }
|
Below is the implementation of these commands.
| Sample output |
Welcome to Little Cave Adventure.
You are in an open field.

It is very dark in here.
You see:
an exit to the west
--> get key
It's too dark.
--> open door
It's too dark.
--> go south
It's too dark.
--> turn lamp on
You turn on a lamp.

You are in a backroom.
You see:
solid rock all around
an open door to the north
a wooden box
--> quit
Bye!
|
| onoff.h |
- extern bool executeTurnOn(void);
- extern bool executeTurnOff(void);
|
| onoff.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include "object.h"
- #include "match.h"
- #include "reach.h"
- #include "toggle.h"
- bool executeTurnOn(void)
- {
- OBJECT *obj = reachableObject("what you want to turn on", params[0]);
- if (obj != NULL)
- {
- if (obj == lampOff)
- {
- toggleLamp();
- }
- else
- {
- printf(obj == lampOn ? "The lamp is already on.\n"
- : "You cannot turn that on.\n");
- }
- }
- return true;
- }
- bool executeTurnOff(void)
- {
- OBJECT *obj = reachableObject("what you want to turn off", params[0]);
- if (obj != NULL)
- {
- if (obj == lampOn)
- {
- toggleLamp();
- }
- else
- {
- printf(obj == lampOff ? "The lamp is already off.\n"
- : "You cannot turn that off.\n");
- }
- }
- return true;
- }
|
To turn the lamp on and off,
we will use the same trick we used to open and close the door and the box
(see chapter 12).
| toggle.h |
- extern void cannotBeOpened(void);
- extern void cannotBeClosed(void);
- extern void cannotBeLocked(void);
- extern void cannotBeUnlocked(void);
- extern void isAlreadyOpen(void);
- extern void isAlreadyClosed(void);
- extern void isAlreadyLocked(void);
- extern void isAlreadyUnlocked(void);
- extern void isStillOpen(void);
- extern void isStillLocked(void);
- extern void toggleDoorToBackroom(void);
- extern void toggleDoorToCave(void);
- extern void toggleBox(void);
- extern void toggleBoxLock(void);
- extern void toggleLamp(void);
|
| toggle.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include "object.h"
- #include "misc.h"
- #include "location.h"
- static void swapLocations(const char *verb1, OBJECT *obj1,
- const char *verb2, OBJECT *obj2)
- {
- OBJECT *tmp = obj1->location;
- OBJECT *obj = tmp != NULL ? obj1 : obj2;
- const char *verb = tmp != NULL ? verb1 : verb2;
- obj1->location = obj2->location;
- obj2->location = tmp;
- if (verb != NULL) printf("You %s %s.\n", verb, obj->description);
- }
- void cannotBeOpened(void) { printf("That cannot be opened.\n"); }
- void cannotBeClosed(void) { printf("That cannot be closed.\n"); }
- void cannotBeLocked(void) { printf("That cannot be locked.\n"); }
- void cannotBeUnlocked(void) { printf("That cannot be unlocked.\n"); }
- void isAlreadyOpen(void) { printf("That is already open.\n"); }
- void isAlreadyClosed(void) { printf("That is already closed.\n"); }
- void isAlreadyLocked(void) { printf("That is already locked.\n"); }
- void isAlreadyUnlocked(void) { printf("That is already unlocked.\n"); }
- void isStillOpen(void) { printf("That is still open.\n"); }
- void isStillLocked(void) { printf("That is locked.\n"); }
- void toggleDoorToBackroom(void)
- {
- swapLocations(NULL, openDoorToCave, NULL, closedDoorToCave);
- swapLocations("close", openDoorToBackroom, "open", closedDoorToBackroom);
- }
- void toggleDoorToCave(void)
- {
- swapLocations(NULL, openDoorToBackroom, NULL, closedDoorToBackroom);
- swapLocations("close", openDoorToCave, "open", closedDoorToCave);
- }
- void toggleBox(void)
- {
- swapLocations("close", openBox, "open", closedBox);
- }
- void toggleBoxLock(void)
- {
- if (keyForBox->location == player)
- {
- swapLocations("lock", closedBox, "unlock", lockedBox);
- }
- else
- {
- printf("You don't have a key.\n");
- }
- }
- void toggleLamp(void)
- {
- bool oldLit = isLit(player->location);
- swapLocations("turn off", lampOn, "turn on", lampOff);
- if (oldLit != isLit(player->location))
- {
- printf("\n");
- executeLookAround();
- }
- }
|
Explanation:
- Line 63:
we are doing the exact same trick
as used in chapter 12 to open and close objects.
Just swap between two different objects:
one for the lamp turned on, the other for the lamp turned off.
- Lines 64-68:
when turning on the light in a dark area,
we immediately give players a look at their surroundings.
This is consistent with the behavior of the ‘go’ command:
the moment you set eyes on a location,
‘look around’ is automatically executed.
You may notice we are doing the same here when turning the light off.
Obviously this will return little more than
“it is very dark in here”,
but that too seems like a relevant observation.
So since we are doing a ‘look around’ either way,
what is the point of the ‘if’ statement?
Well, that prevents a useless ‘look around’
when turning the lamp on or off in broad daylight (i.e. in the field),
or with any other source of light still active in the same room.
Finally, we will mark the dark locations in our generated map.
| map.awk |
- BEGIN { print "digraph map {\n\tnode [style=filled]"; }
- /^- / { outputEdges(); obj = $2; delete a; }
- /^[ \t]/ { a[$1] = $2; }
- END { outputEdges(); outputNodes(); print "}"; }
- function outputEdges()
- {
- color[obj] = a["light"] ? "white" : "grey";
- outputEdge(a["location"], a["destination"], "");
- outputEdge(a["location"], a["prospect"], " [style=dashed]");
- }
- function outputEdge(from, to, style)
- {
- if (to)
- {
- nodes[to] = 1;
- if (from)
- {
- nodes[from] = 1;
- print "\t" from " -> " to style;
- }
- }
- }
- function outputNodes()
- {
- for (n in nodes) print "\t" n " [fillcolor=" color[n] "]";
- }
|
Players, please be careful not to turn off the lamp and drop it.
In the dark, you will never be able to find it back. You will be stuck!
Fortunately, the next chapter will provide a way to undo clumsy actions.
Next chapter: 16. Savegame


Title
Paragraph 1
Paragraph 2
Now you see me.
Now you don't.
A
B
C
Not A/B/C
Username
Email
Toggle login type
Phone
WeChat
Toggle Verify type


|
|
constexpr | Bounds2 (T left, T right, T top, T bottom) |
| |
|
constexpr | Bounds2 (const Point2< T > &lower, const Point2< T > &upper) |
| |
|
constexpr | Bounds2 (const std::initializer_list< Point2< T >> &vertices) |
| |
|
constexpr bool | ContainsPoint (const Point2< T > &p) const |
| |
|
constexpr bool | Overlaps (const Bounds2 &other) const |
| |
|
constexpr bool | FullyContains (const Bounds2 &other) const |
| |
|
constexpr Bounds2< T > | Fattened (float factor) const |
| |
|
constexpr Vector2< T > | Size () const |
| |
|
constexpr T & | Top () |
| |
|
constexpr const T & | Top () const |
| |
|
constexpr T & | Bottom () |
| |
|
constexpr const T & | Bottom () const |
| |
|
constexpr T & | Left () |
| |
|
constexpr const T & | Left () const |
| |
|
constexpr T & | Right () |
| |
|
constexpr const T & | Right () const |
| |
|
bool | operator== (const Bounds2< T > &rhs) const |
| |
|
bool | operator!= (const Bounds2< T > &rhs) const |
| |
|
template<typename Cast_t > |
| constexpr | operator Bounds2< Cast_t > () const |
| |
The documentation for this struct was generated from the following file:


Woman dies following weekend accident on East Kilbride Road
Police are appealing for witnesses to the crash and would also like to speak to anyone who has dashcam footage of the incident.
by Fraser N Wilson, https://www.dailyrecord.co.uk/authors/fraser-n-wilson/Police are appealing for information after a 62-year-old woman was killed on East Kilbride Road.
The incident happened around 8.15 pm on Sunday on the A749 Cathkin Bypass when a blue coloured Ford Focus collided with a blue coloured Volkswagen Golf.
Road traffic officers say the Focus was traveling southbound at the time when it collided with the Golf which was traveling eastbound on the Cathkin Bypass towards the roundabout junction with the A749.
The 68-year-old driver of the Focus and his female passenger were taken to the Queen Elizabeth Hospital by ambulance, however, the woman was sadly pronounced dead on arrival.
The driver is currently being treated for serious injuries and hospital staff describe his condition as “critical”.
The 38-year-old driver of the Golf car was taken to Hairmyres Hospital where he was treated for minor injuries before being released.
Sergeant Simon Reilly is appealing for witnesses to the crash and would also like to speak to anyone who has dashcam footage of the incident.
The accident resulted in lengthy tailbacks on the East Kilbride Expressway and Stewartfield Way on Sunday night.
One road user took to social media around 11pm to say traffic stretched back along the Expressway to Hamilton.
Anyone with any information should contact police on 101.


Avalanche hits Indian army post in Himalayas, 6 killed
by AIJAZ HUSSAINSRINAGAR, India (AP) — An avalanche hit an Indian army post Monday on a Himalayan glacier in the disputed Kashmir region, killing four soldiers and their two civilian porters, the army said.
The avalanche happened at height of more than 5,485 meters (17,995 feet) in the northern part of the Siachen Glacier. Rescuers pulled six soldiers and two porters from the snow, said army spokesman Lt. Col. Abhinav Navneet.
They were taken by helicopter to a military hospital, where the four soldiers and the two porters died, Navneet said. The surviving two soldiers were undergoing treatment, he said.
The group was on patrol near the post when the area was hit by the avalanche, Navneet said. The post was also hit by the avalanche but there were no reports of injuries there.
The glacier is on the northern tip of the divided Kashmir region claimed by India and Pakistan in an area known as the world's highest battlefield.
The two countries have had troops deployed there since 1984 at elevations of up to 6,700 meters (21,982 feet).
There have been intermittent skirmishes since then, but more soldiers have died from harsh weather than from combat.
In 2017, at least 20 Indian soldiers were killed in three avalanches. In 2012, an avalanche in Pakistan-controlled Kashmir killed 140 people, including 129 Pakistani soldiers.


- addArmy(int) - Method in class entities.Country
-
Add a certain army count to this country
- addCard() - Method in class entities.GamePlay
-
Add a random Card to the current player
Method is called once the current player successfully conquered a new Country after an attack
- addCard(String) - Method in class entities.Player
-
Adds a card to the player's arsenal
- addContinent(Continent) - Method in class entities.Player
-
Adds continent under Player's ownedContinent list when all countries in that continent is owned by player
- addNeighbour(Country) - Method in class entities.Country
-
Adds Country object in argument to linkedCountries Vector as a neighbor
does't need to add this to neighbour's linkedCountries the same function will be called for them too
- addPlayers(Vector<String[]>) - Method in class controller.Controller
-
Convert string type of player list into actual object type of player list
- addToCountriesList(Country) - Method in class entities.Continent
-
Add a country to belong to this Continent
- addTradeTimes() - Method in class entities.Player
-
Increments the amount of times the player has traded in cards
- alertObservers() - Method in class entities.Country
-
After change of state, alerts attached CountryObsLabel
- alertObservers() - Method in class entities.GamePlay
-
After change of game state, alert concerned Observers
- allOutAttack(Country, Country) - Method in class entities.GamePlay
-
From player command: attack countryfrom countryto numdice -allout
Commence a loop of attack rounds until one of the countries run out of army to attack/defend
Always choose the maximum number of dice on both sides
- attachObserver(Observer) - Method in class controller.Controller
-
Attach the observers from the MapUI to the game play model
- attackAllout() - Method in class testing.AttackTest
-
attack fromcountry tocountry -allout has similar contraints as the attack once command
this test method asserts that after an allout attack with an almost certain victory (30 vs 1),
player a's Peru would have successfully reduced player c's Brazil,
thus advancing the phase to Attack Phase 3, where player a moves a certain amount of army to
the conquered Brazil
- attackOnce() - Method in class testing.AttackTest
-
- AttackTest - Class in testing
-
Test operations on the Attack phase
A game save file junit_attack.save was pre-made with the following relevant data:
It is currently player a's Attack Phase 1 (to issue command: attack fromcountry tocountry numdice)
Peru is assigned to Player a with army count 30
Venezuela is assigned to Player a with army count 2
Brazil is assigned to Player c with army count 1
Argentina is assigned to Player b with army count 3
Peru is neighbor to the three countries above
Central-America is assigned to Player c with army count 3
Central-America does not neighbor Peru, but neighbors Venezuela and Western-United-States
Western-United-States is assigned to Player a with army count 1
- AttackTest() - Constructor for class testing.AttackTest
-


gcc: Background and Rationale
Copyright 2006 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
ident "@(#)d-compilers.txt 1.7 06/03/17 SMI"
OpenSolaris
SUPPORTED COMPILER POLICY, V1 [DRAFT 2]
1. Summary
This policy defines that the OpenSolaris build process for the ON
consolidation will introduce the concept of primary and secondary
supported compilers. Compilation cleanliness across all supported
compilers is a requirement for committing a changeset to ON.
ON will support the Sun Studio compiler as the primary compiler on
current platforms and the GCC compiler as the secondary compiler.
Constraints on the implementation of this policy are identified.
Specific exceptions for changesets affecting C++ source files are
defined.
Management of coding conventions is described in cases of
different valid language interpretations within the set of
supported compilers. Conventions are established for
functionality requiring knowledge of compiler behaviour and
output, beyond that embodied in existing language and platform
standards.
2. Discussion
There are a number of arguments that might be made for supporting
multiple compilers for the ON consolidation; the principal reasons
to support the GCC compiler specifically include
- decreased service costs, as distinct compiler execution can
identify potential defects prior to release to users [0],
- decreased porting costs due to compiler unavailability, and
- potential defect elimination from GCC-derived automatic code
examination systems [1, 2]
This policy recognizes that there is an additional intangible
benefit from supporting toolsets common across numerous software
development communities. This policy can be implemented so that
the benefits are maintained with no significant increase in active
developer time expended; see the Implementation Addendum [3].
2.1. Potential support scenarios
There are three levels of support we can require for gcc on each
platform; the levels are described here with the requirements they
impose on engineers and the C-team as well as any additional
resource requirements. In all scenarios, ON source, build tools,
and processes may be modified to minimize developer intervention
times. See the Implementation Addendum for details.
1. Full support. Require testing equally with both compilers on
all applicable platforms. In this scenario, any putback that
introduces compiler dependent differences other than
differential runtime performance will be backed out.
Gatekeepers will need to perform both incremental and full
nightly builds using both compilers, and make both sets of
archives available to developers and users. A mechanism will
be required to distinguish between these sets of archives both
at runtime and in cores and crash dumps. Projects will have
to provide test results for both compilers as part of the
integration criteria. This requirement increases (by about
70% at present) build time requirements for all putbacks and
gate builds. It also increases (by 100%) testing requirements
for all putbacks and administrative overhead associated with
tracking test plans and status for all projects. This would
likely require substantial additional build and test hardware.
2. Build-only support. Require only that ON build with both
compilers. Runtime behaviour differences will not be cause
for backout; however, these differences will constitute bugs
as they are often serious violations of standards anyway.
These bugs will be prioritized like all others in accordance
with business needs. Gatekeepers will need to perform both
incremental and full nightly builds with both compilers;
gcc-built archives need not be made available, and no
expectation of their correctness can be established. Projects
will need to show that they build with gcc but need not
provide duplicate results for other tests. Costs include
build time increases as for (1) and possible additional build
machine requirements as for (1). Several possible
implementations are presented in the Implementation Addendum,
and their relative costs and benefits are described there in
detail.
Owing to the distinct C++ ABIs across the primary and
secondary compilers, projects modifying C++ code must perform
actions equivalent to those outlined in (1), including
sufficient testing to verify that both runtime and link-time
dependencies are satisfied by the objects built by both
compilers.
3. One-shot. Require nothing; gcc support will be maintained on
an ad-hoc basis. Build and runtime breakage reports will be
considered RFEs. There are no requirements for project teams
nor for the C-team, and no ongoing costs since no one will be
expected to find or fix gcc breakage. However, as soon as
code that breaks the gcc build is introduced, the gcc QDS
begins and our efforts would have little long-term impact.
In principle, SPARC and x86 could have different levels of support
on temporary or permanent bases. As an interim milestone,
building with nonfatal warnings on either platform could be
supported to encourage and ease fixing of remaining bugs, most of
which are for warnings. Additionally, current and future
supported platforms could identify different primary-secondary
compiler pairs.
2.2. Proposed scenario and implementation thereof
The proposed scenario is to require build-only support. The
expectation is that there will be sufficient interest in an
alternative compiler on one or more supported platforms to manage
the defect introduction rate not covered by the first-pass
verification. Tools and source changes will be introduced to make
possible a standard invocation that executes a "complete" build in
this sense. The Implementation Addendum describes several
possible implementations. *WE ARE RECOMMENDING OPTION 1, SHADOW
COMPILATION.*
2.2.1. Consequences
A consequence of this strategy is that separate testing of builds
made with both compilers is not required at any time; all relevant
tests must be run against the primary compiler build. This choice
reduces greatly the resource commitments that full support would
require, to a level believed sustainable. Since elevating from
build-only to full support at some future time would have a
relatively low one-time cost, our options remain open if we
determine that a Studio exit strategy is required. Such an exit
strategy is neither the effect of nor the motivation for this
proposal.
2.2.2. Constraints
Although the implementation is not expected to produce an
executable proto area, package set, or archives from the secondary
compiler's output, the tools are expected to allow swapping the
primary and secondary compiler roles such that the full set of
build products can be constructed using either compiler.
Incremental builds that produce working bits with the primary
compiler must remain possible and generate correct bits even after
any secondary compiler pass executes.
2.2.3. Timeline
Each architecture requires a different amount of work before the
baseline requirement will be met in onnv. Code built into amd64
objects already offers full support for gcc, although its
correctness can no longer be certain since the default amd64
compiler was changed from gcc to cc. Code built into i386, sparc,
and sparcv9 objects requires some changes, mainly in generic
userland code, before build-only support will be provided.
Although sparc and sparcv9 code was initially at a substantial
disadvantage with respect to gcc support, this gap has been almost
entirely eliminated. In the interest of expediency, all
architectures will be made fully build-clean prior to or
simultaneous with this policy's effectiveness and the introduction
of tools changes required to support it.
2.3. Language ambiguity management
In the process of pursuing an initial clean state, a number of
standard differences between the compiler pair have been identified.
A reasonable partition of these differences is into two sets:
(a). Unsafe implementation: One compiler or the other is
defective; that is, it fails to adhere to relevant published
standards or documented behaviour, emits output which is
semantically different from its input, or fails to accept
unambiguous valid input.
(b). Local convention: An architecture's secondary compiler
rejects input which is acceptable by the primary compiler and
is considered valid according to local conventions, even
though the code's behaviour is undefined or unspecified by
standards. These differences generally involve implementation
choices where the language standard is ambiguous.
2.3.1. Unsafe implementation
A recent example of the secondary compiler emitting unsafe code is
6362144 gcc breaks libc by turning structure assignments into
calls to memcpy()
For such cases, while the release team may choose to identify a
clarified coding convention (such as explicit member assignment for
the example), the correct outcome is to engage with the compiler
vendor or our designate to same to secure a fix for the unsafe
behavior.
Project teams may not generally be blocked from putback by unsafe
secondary compiler implementation exposed by their correct code.
While the release team may direct otherwise, it is expected that
project teams in this position will generally take the following
actions:
1. File a high-priority defect against the secondary compiler.
2. Modify makefiles, flags, or other infrastructure so as to
avoid triggering any compile-time warnings or errors generated
by the secondary compiler as a result of its unsafe
implementation.
3. Document for ON developers the differences, if known,
between each compiler's output as they affect user- or
developer-visible functionality delivered by their project.
2.3.2. Local convention
The bulk of the differences have been where the secondary compiler
has found the previous local convention, which may merely derive
from the primary compiler's defaults, to be ambiguous. For
example:
6367203 Studio 10 C compiler and gcc 3.4.3 disagree about
preprocessing #pragma redefine_extname
In such cases, the release team should examine the choices before
them: they may either propose to abandon the local convention and
require an unambiguous invocation, or engage with the secondary
compiler vendor or our designate to same to secure a fix that
introduces an option to accept the local convention as
unambiguous. The proposal should weigh the costs associated with
the change, including vendor costs, the absolute number of
affected sites within the code, and the general acceptance of the
local convention. If the release team elects to pursue a change
to the secondary compiler, an affected project team will, subject
to the release team's direction, take actions similar to those
described in 2.3.1.
2.4. Compiler Implementation Knowledge
Projects which are directly or indirectly tied to the compiler
used to build ON will be expected to function properly when built
with the secondary compiler. In particular, mdb, the CTF
infrastructure, DTrace, and other similar tools and libraries must
behave substantially the same way regardless of the compiler used
to build them. This requirement is intended to apply specifically
to tools with intimate knowledge of compiler artifacts above and
beyond that provided by standards such as an ISA's ABI or a
published debugging format standard. In some cases, this
requirement may be waived for business or technical reasons if the
following are true:
(a) There is substantial marginal cost associated with
delivering an implementation compatible with the secondary
compiler, and
(b) There is no known or reasonably forseen build-time
dependency on this functionality. For example, if the project
team delivers a utility with compiler-dependent knowledge, and
the correct and complete output of that utility is required to
complete a successful build of ON, this requirement cannot be
waived. This exception is not intended to apply to arbitrary
code solely because it it executed during the build (e.g., a
non-compiler-dependent tool built natively).
If this requirement is waived, the project team is expected to
deliver stubs for use when the project's functionality is built
with the secondary compiler. If the functionality consists of
programs which would ordinarily be run interactively, these
programs should print a message when run indicating that they are
unavailable when built with the secondary compiler. LIbrary
interfaces should fail with an appropriate error return, and other
interfaces should generally make a reasonable effort to inform
callers or users of the reason for failure. In particular,
unpredictable output or program behaviour when built with the
secondary compiler is not acceptable even if this requirement is
waived.
The release team may instead, after evaluating the relative costs
and benefits, direct a project team delivering this type of
functionality to request appropriate changes to the secondary
compiler.
3. Modified roles in proposed scenario
Once all bugs preventing successful builds with gcc are are fixed,
we will need to establish a clear set of guidelines for maintaining
gcc compatibility within ON (and possibly in other consolidations as
well). Contributors in several roles will have additional
responsibilities in support of these guidelines.
3.1. ON C-Team
The ON C-team will enforce build-only support across all supported
architectures and platforms. That is, changes are not acceptable
which prevent using the C-team-approved version of gcc to
successfully complete a full build for any supported architecture.
However, implementations which simply disable compilation of a
functional component or subdirectory when gcc is in use, without
delivering alternate functionally equivalent code suitable for use
with gcc, will not be considered to have fulfilled this
requirement. The gatekeepers will be responsible for monitoring
compliance with this requirement and for backing out non-compliant
changes or, at their option, coordinating timely corrections to
non-compliant code. Changes which fulfill the build requirement
but introduce functional differences dependent on the compiler
used may be acceptable, but such functional differences will, if
discovered, be tracked and fixed as defects; such differences
often result from violation of applicable standards or
conventions.
The C-team will also be required to evaluate differences between
the primary and secondary compilers as discussed in sections 2.3
and 2.4, to direct project teams encountering these differences,
and to ensure that timely fixes to the secondary compiler are made
as required.
3.2. ON Implementors
Implementors will be expected to understand compiler-dependent
behaviours and the standards governing their operation, and to
utilize that understanding toward the creation of portable,
standards-compliant code. They will also be expected to maintain
tools such as the compiler wrapper used to support the use of
multiple compilers, and to update those tools when their other
changes require it. Implementors will correct any alternate
compiler specific build failures induced by their changes prior to
putback. Clear instructions for performing the necessary builds
or passes will be disseminated by the Tonic team prior to these
requirements becoming effective.
The first pass proposal requires that implementors modifying C++
files perform a complete build of the affected component and its
dependents with both supported compilers.
4. Acknowledgements
Keith Wesolowski developed the initial version of this policy.
Stephen Hahn clarified this policy and contributed the description
of build-only support it proposes.
5. References
[0] Of the 475 gcc defects (this count excludes those CRs which are
actual RFEs or were closed without requiring a fix), at least 28
are indisputable: the code violates an applicable de jure standard
and/or de facto ON conventions, is semantically incorrect, works
only because of undocumented and unreliable Studio behaviours that
cannot reasonably be considered de facto ON/Studio conventions, or
will be harmful to customers who use gcc (a supported feature of
Solaris) even if we don't. These 28 bugs are tangible evidence of
code quality improvement demanded by the use of multiple
compilers; many of these defects would be expected to affect
customers. Note that these defects still existed even after most
common kernel and library code was fixed by the amd64 team, so the
actual number of bugs was likely much higher. The list of these
serious bugs follows:
6254191 uninitialized variable in elfsignlib.c
6241993 SPARC siglongjump symbol aliasing is wrong
6241314 ctfconvert should understand SPARC real types in DWARF
6241287 g++ doesn't want wchar_t under any circumstances
6241296 kernel files must include sys/note.h rather than note.h
6277636 *sh* can crash if it creates too many temporary files
6358155 When compiled with gcc, the socal driver panic's the machine
6359607 kstat perl module compiled with gcc breaks on x86
6272173 cpumem diag module writes to constant memory, crashing fmd
6268345 fmd is insufficiently careful with alignment
6264775 lpadmin expects to write into string constants
6254408 many forthdebug templates are incorrect
6281909 bootadm writes into string constants
6281951 ikeadm writes into string constants
6280646 amd64 memlist structure mismatch causes panic
6277643 ksh is insufficiently careful with alignment
6274664 libcurses has an unterminated comment
6272179 relocation processing should be bypassed when building libgenunix et al
6272155 svcs writes into string constants, can crash as a result
6268299 libumem is insufficiently careful with alignment
6267468 rpcgen generated code gcc doesn't like
6267352 libld_malloc provides inadequate alignment
6267482 lex generates code gcc doesn't like
6266620 mi2cv shouldn't #include
6264767 cfgadm expects to write into string constants
6264469 fbt is confused by jump tables in code
6264473 fbt is confused by the return instruction
6258738 fbt refuses to instrument functions starting with branches
[1] Andy Chou, Junfeng Yang, Benjamin Chelf, Seth Hallem, and Dawson
Engler. An Empirical Study of Operating System Errors. Symposium on
Operating System Principles, 2001.
[2] smatch, the Source Matcher. http://smatch.sourceforge.net/
[3] OpenSolaris Supported Compiler Policy, Implementation Addendum.
/net/tonic-gate.sfbay/gates/devproc/src/implementation/d-compilers-impl.txt


Using the basic directive to style!
Using the better directive to style!
Unless true
Unless False
Today is Monday
Today is Tuesday
Today is Wednesday
Today is Thursday
Today is Friday
Today is Saturday
Today is Sunday


spark-submit's Command-Line Options
Spark Properties
Environment Variables (considered obsolete)
web UI is the web interface of a singe Spark application
Monitoring and inspecting Spark jobs and tasks
Opens at http://localhost:4040 (by default)
One big SparkListener
Composed of tabs and pages (on the following slides)
Enabled by default unless spark.ui.enabled is turned off
Use spark.ui.port to set the port number
Actual availability and URL dependent on the deployment environment (e.g. YARN, Mesos, Standalone, local, Kubernetes)
Jobs shows status of Spark jobs
Stages shows status of stages of all Spark jobs
Storage shows RDD size and memory use
Environment shows the environment
Executors shows status of executors
SQL shows status of batch and streaming queries
Module-specific tabs for Streaming and Thrift Server
Showing Active, Failed, Completed Jobs in Spark UI
Using Hadoop YARN cluster to observe executors in Event Timeline
Using SparkContext.requestTotalExecutors to request executors


The Single Essential Responsibility Principle
Jon Wolski
DaveRamsey.com
DevelopWithPurpose.com
I
♥
DESIGN
First, a little foundation…
The difficulties inherent in the nature of software
those difficulties that today attend software production but are not inherent.
incidental
Can software go bad?
It's code; it doesn't change unless you change it.
Doing the same thing over and over again and expecting a different result
Doing the same thing over and over again and expecting the same result
A unit of code should do one thing
and do it well
function calculate_tax_and_shipping(
line_item, shipping_address, billing_address ) {
var tax_amount =
line_item.price *
line_item.qty *
get_tax_rate_for_state( billing_address.state );
var shipping_amount = calculate_shipping_rate(
line_item.weight,
line_item.qty,
shipping_address
);
return tax_amount + shipping_amount;
}
function calculate_shipping( line_item, shipping_address ) {
return calculate_shipping_rate(
line_item.weight,
line_item.qty,
shipping_address
);
}
function calculate_tax( line_item, billing_address ) {
return line_item.get_total() *
get_tax_rate_for_state( billing_address.state );
}
A unit of code should have only ONE reason to change
A change should only effect ONE unit of code
A unit of code should do ONE essential thing and do it completely.
A unit of code may handle accidentals to accomplish its one essential responsibility.
class User < ActiveRecord::Base
has_many :accounts
def someBusinessDomainMethods
…
end
end
@entity
class Payment {
public someBusinessDomainMethods() {
…
}
}
Jon Wolski
jon.wolski@daveramsey.com


---
layout: post
title: IE7 and Mercury TestDirector
date: '2007-10-10T15:06:00.000+02:00'
author: sax
tags:
modified_time: '2007-10-10T15:27:00.737+02:00'
blogger_id: tag:blogger.com,1999:blog-17453343.post-138291567552610705
blogger_orig_url: http://saxuality.blogspot.com/2007/10/ie7-and-mercury-testdirector.html
---
IE7 is not supported by TestDirector 8.0. But that's what you know already. And nobody wants to downgrade IE.  Anyways - I used http://www.quirksmode.org/browsers/multipleie.html - version 5.5SP2. I hope this helps.


Simplified search - Advanced search - Documentation
The simplified search page is meant to be one of two entrance points for accessing the corpora in the Deutsch Diachron Digital project.
The first entrance point is the ANNIS search interface, which offers a formulaic query language (AQL) and a more visual query builder. The ANNIS search options offer a highly accurate and thorough tackle on the available corpora and are advised for scientific research.
The simplified search page is the second entrance point, and is intended for the general audience, or for quick and imprecise searches.
The simplified search page consists of three parts. The upper part merely states the project name, but also offers a link to the advised ANNIS search tool, the simplified search, and this documentation page.
The middle part consists of a large query box in which a query can be entered. More information about this box is provided below.
At the bottom of the page, tickboxes allow the non-scientific user to constrain the query in the query box to a number of ad-hoc categories. More information on these meta-categories is provided below.
The query box is set up to parse the input that it receives in such a way that a more complex ANNIS query can be written. We need to distinguish between "single word" and "multiple words" queries.
A single word query distinguishes itself from a multiple words query simply by the fact that more than one word is entered. If a single word is entered, the query is parsed as follows: the parser goes through selected annotation levels (translation, lemma, txt (in this order)), and through all the annotation values per level; if for a specific level some values are found that match the input, that level is queried. If more than word is entered, the parsing goes as follows: for each word, the parsing is identical to the parsing of a single word; after all single words are parsed, the retrieved queries are concatenated, allowing for up to three words in between.
The parser of the query box also resolves diacritics from simple ascii input to the diacritics that occur in the corpora.
Finally, it is possible to use simple regular expressions in the query box
For the convenience of the non-scientific user, a number of ad-hoc (and as such non-authorative) categories of meta-information are provided. The values in these categories are most certainly debatable, and in no way final. Moreover, the attribution of these values to specific texts is in certain cases questionable. These meta-constraints are therefore only usuable for the non-scientific user, and any informed scholar would prefer the ANNIS search tool, in which the queries can be precisely formulated.
Once again, the levels of these meta-categories and the attributions of these levels to the texts are highly debatable, not to be considered as final or authorative.
A number of things that can be typed in for your inspiration:
The source code and development of the simplified search can be monitored on GitHub.


Plants
Raspberry Pi + Arduino based plant monitoring system ( work in progress )
Sensor
Raw Value
Last Updated
© 2016 Rahul Popuri
Github
Email


{% from 'components/big-number.html' import big_number %} {% from 'components/message-count-label.html' import message_count_label %}


Motorized Curtains
Motorized Curtain is a Combination of Comfort and Elegance. With our motorized curtains and myLink app, you can control all your curtains easily.
Smart Fans
Smart ceiling fan works with Alexa and Google Assistant for voice control, no others required. Giving you a comfortable home.
Smart Lamps
Smart lamps are an awesome way to harness the power of Alexa or Google Home to control and customize the lighting in your home.
Smart TVs
Smart TVs maximize your entertainment experience! It provides access to the internet via apps such as Netflix. Life becomes more interesting!
Laundary Machine
The 4.5 cubic feet capacity washing machine with the option of Wi-Fi connectivity and the ability to hook up to the Samsung Smart Things App.
Smart Cameras
Smart home Camera with Motion Detection, Alert Notification supports 1080P HD real-time video, enabling you to check your home.
Smart Door Locks
The keyless smart lock with hi-tech has multiple ways to unlock, password, fingerprint, app control, which will make your home safer.
Smart Mattress
LCouples can sleep in the same mattress with flexibility of individual head adjustment, dual air support, and dual massage control.
Smart Plugs
The smart plug works with an Echo Dot, Amazon Echo Show, Google Home to manage your home devices through voice control.
Smart Speakers
Smart Speaker with Clock, just like your good life assistant. The sleek, compact design delivers crisp vocals and balanced bass for full sound.


Home
(current)
README
visualize.
Find Your Vision.
Trying to visualize your goals but don't know where to start? Visualize is here to help! Simply answer a few questions, choose the images you like, and we'll do the rest!
Are you ready to find your vision?
Let's Get Visualizin'


The goal of Ember Spark Software is to take your ideas from the initial idea to the fire that changes the world...or perhaps just makes someone's life a little easier.
My name is James Romo and I am the founder of Ember Spark Software LLC. I received my Master of Science (M.S.) in Computer Science and my Bachelor of Science in Computer Science with a concentration in Information Assurance from Arizona State University. The following link contains my professional documents including my current resume and both my Masters and Bachelors theses.
Ember Spark Software LLC provides a range of software consulting work covering anything from adding a feature to an existing project to starting a new idea from scratch. We specialize in the mobile realm, but provide web services as well.
With our extensive mobile experience, we are able to provide a wide varity of mobile consulting for new or existing apps. We support both Swift and Objective-C for iOS and Android development.
We also have web experience and are able to provide both frontend and backend support.
Would you like to know more or just discuss something?
Quick Dart provides short, easy to remember commands to make your life using dart and pub easier.
qdart supports both single letter options that will be executed in sequence as well as traditional long arguments. These can be mixed in any order or even repeated.
Can be installed via brew: brew install jtromo/homebrew-ember-spark/qdart
With Wdesk Mobile you can interact with digital reports and Binders in an easy-to-use, secure environment. Our redesigned home screen makes it easy to find and review your favorite Wdesk Binders. Wdesk provides a management and board reporting platform that brings efficiency to document review and provides a best-in-class viewing experience for your audience.
On The Go Registration for the 2013 Google Scholars' Retreat 24 Hours of Good Hackathon. This project specifically was funded by HSF (Hispanic Scholarship Fund).
The competition consisted of forming groups of about five to complete a project in 24 hours. Our project involved the use of an iPad or iPhone to take attendence during HSF conferences. It was expanded to use OCR to read in participant business cards and other fun features.
Thesis submitted for my Master of Science in Computer Science degree at Arizona State University.
Abstract:
With the rise of mobile technology, the personal lives and sensitive information of everyday citizens are carried about without a thought to the risks involved. Despite this high possibility of harm, many fail to use simple security to protect themselves because they feel the benefits of securing their devices do not outweigh the cost to usability. The main issue is that beyond initial authentication, sessions are maintained using optional timeout mechanisms where a session will end if a user is inactive for a period of time. This interruption-based form of continuous authentication requires constant user intervention leading to frustration, which discourages its use. No solution currently exists that provides an implementation beyond the insecure and low usability of simple timeout and re-authentication. This work identifies the flaws of current mobile authentication techniques and provides a new solution that is not limiting to the user, has a system for secure, active continuous authentication, and increases the usability and security over current methods.
Stay Focused provides amazing, ground-breaking photography capabilities that allow photographers to express themselves in ways never before possible.
Stay Focused uses a technique called Focus Stacking or Depth-of-Field Merging to allow you to create amazing images.
Focus stacking is a technique which combines multiple images taken at different focus distances to give a resulting image with a greater depth of field than any of the individual source images.
Focus stacking offers flexibility: as focus stacking is a computational technique, images with several different depths of field can be generated in post-processing and compared for best artistic merit or scientific clarity.


Toggle navigation
derpflowy
Create a room
Empty room
With my list contents
Logout
×
Home
Loading...
+


MISSION TO MARS A film review by Mark R. Leeper
Capsule: Two missions to Mars highlight Brian De Palma's first foray into science fiction. The film borrows heavily from older space exploration films but still manages to stroke our sense of wonder with strange structures which have stranger behaviors. The film falters a little in the final reel, but generally is entertaining and even exciting. Rating: 7 (0 to 10), low +2 (-4 to +4) HEAVY SPOILERS discussing the ideas follow the main review.
In 1950 ROCKETSHIP XM went to Mars and brought back to Earth a secret that might determine the future of the human race. It was the first major film of the 1950s science fiction cycle. ROCKETSHIP XM was early in a sub-genre of space exploration that included FRAU IM MOND, DESTINATION MOON, PROJECT MOONBASE, THE CONQUEST OF SPACE, 12 TO THE MOON, COUNTDOWN, 2001: A SPACE ODYSSEY, and possibly CONTACT. These are films that have piqued our sense of wonder. Sadly, we have not seen many of them of late. Science fiction films have gone in other directions with monster films, psychotic killers in space, martial arts, and chases. While MISSION TO MARS makes a few false moves in the final reel, in particular some errors in science, it is a great ride and it brings back the sense of wonder of some of the 1950s space explorations films, back when the sky and the future were limitless.
This film begins in the year 2020 with the first mission to Mars. Four people are sent to the planet Mars. The expedition seems to be going well until an unusual formation is noted on a nearby hill. Going to investigate, things go mysteriously and spectacularly wrong. Now there is at most one Mars astronaut alive, Luke Graham (played by Don Cheadle). A second mission is sent to rescue Luke and continue the mission. On this expedition are Jim McConnell (Gary Sinise) and Woody Blake (Tim Robbins wearing the most uncomfortable-looking piece of jewelry I have seen in a long time). Along the way they face some of the problems and dangers we have seen dramatized previously in films, but have not seen since visual effects in films have become so agile. Some of the effects work, particularly motorized vehicles on Mars, do not look well rendered, but elsewhere some of the effects work is quite good. The destruction of the first mission is deliciously eerie. Another novel scene involves an explosion that could only happen in the conditions of space and the special effects to portray the scene are fascinating. What we get is a film with a sort of nostalgic feel but which also has a timely sense as consideration is given to staging a manned mission to Mars.
This is Brian De Palma's first science fiction film and he has a healthy respect for the older films. This is a science fiction film without guns and chases. (It is a pity it did not leave out the product placements also.) Gary Sinise is a good actor, but his performance seems a little stilted here. He is playing a man who keeps his emotions bottled up, as does Robbins so we have to infer emotions from the situations. Sinise deserves good roles, but we see little of his talent here. Robbins we do not expect an evocative performance; we expect his style of under-acting. Also present are Don Cheadle and Jerry O'Connell of "Sliders," and both are fine. There is a fair-sized role that goes to a mysteriously uncredited Armin Mueller-Stahl.
The critics are not being very kind to MISSION TO MARS, but I strongly suspect there will be a contingent of older science fiction fans who were brought up on 1950s space exploration films and who will enjoy this film as much as I did. I rate it a 7 on the 1 to 10 scale and a low +2 on the -4 to +4 scale.
Spoiler...Spoiler...Spoiler...Spoiler...
I do not know if sending married couples into space has been considered. But it would be a questionable NASA policy for precisely the reasons that this film makes clear.
Some readers will know why I was a little disappointed that when they found Luke he did not ask his rescuers for a piece of cheese.
Evolutionary biologist Stephen J. Gould would have a fit if he saw this film. The implication of what is learned in the final reel is that the human stands at the top of the evolutionary tree and that all evolution is aimed at creating a humanoid creature with our DNA and even our facial expressions. That is not the way it works. We were formed by our environment in a random walk of adapting to the natural world. Plant the same protozoa DNA on two different planets with different conditions and the resulting species would rapidly diverge. It is highly unlikely that the most intelligent species on each of two planets would so resemble each other. And even if there was a guiding force they would not end up so different looking. The error in this film is closely related to that in THE BOYS FROM BRAZIL, but the probabilities are far lower here.
A much better thought out film on Martian survival strategies is Nigel Kneale's QUATERMASS AND THE PIT (FIVE MILLION YEARS TO EARTH), which I have long considered the best science fiction film I have ever seen. Previously hard to find, it currently seems to run monthly on the American Movie Classics cable channel.
It seems unlikely that with two missions to Cydonia there would be no mention of the famous Cydonia Face on Mars, and in fact they seem unaware of it. It is like being in Roswell, New Mexico, and not knowing about the supposed crashed flying saucer.
Mark R. Leeper<EMAIL_ADDRESS>Copyright 2000 Mark R. Leeper
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


No dream is too big. No challenge is too great. Nothing we want for our future is beyond our reach.
Find Out MoreI am new to the world of software development! After getting my
business degreee and working in sales, I realized that I needed to be doing
something more engaging. This led me to start exploring programming, something I've always been
curious about, and finding out that I've been missing out the whole time!
When I'm not coding, you can find me lifting weights, going on adventures with my friends,
or cooking while trying not to catch my house on fire.
My first langauge, I understand programming through an object-oriented lense.
Test driven development is a tool I use on my projects through Junit.
I use Sequal as my backend database for all of my projects that perform CRUD operations.
I am comfortable with Spring frameworks such as REST, MVC, Data JPA, and Boot.
If you'd like to discuss a job opportunity, or just have some constructive feedback on any of my code, please do reach out. I check linkedin and my email several times a day. Thanks!


Spatial floor simulation with exponential/Gaussian variance-covariance function (isotropic), with specification of distance function, nugget, sill, range. The methodology follows Nole A.C. Cressie (2015) <doi:10.1002/9781119115151>. The original release is 2017-08-29.
| Version: | 1.1.0 |
| Depends: | R (≥ 3.0.0), fields, reshape2 |
| Imports: | stats, base, taRifx, blocksdesign |
| Published: | 2018-04-26 |
| Author: | Le Zheng, Jose Alfaro, Martin Grondona, Maria Arrieta |
| Maintainer: | Le Zheng <le.zheng at advantaseeds.com> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: | no |
| CRAN checks: | SpatialFloor results |
| Reference manual: | SpatialFloor.pdf |
| Package source: | SpatialFloor_1.1.0.tar.gz |
| Windows binaries: | r-devel: SpatialFloor_1.1.0.zip, r-release: SpatialFloor_1.1.0.zip, r-oldrel: SpatialFloor_1.1.0.zip |
| OS X binaries: | r-release: SpatialFloor_1.1.0.tgz, r-oldrel: SpatialFloor_1.1.0.tgz |
| Old sources: | SpatialFloor archive |
Please use the canonical form https://CRAN.R-project.org/package=SpatialFloor to link to this page.


Top designers set the standard for clothing consumption across the world. But time and again, data shows that the fashion industry is marred by waste, pollution and human rights abuses. In fact, a climate activist stormed the Louis Vuitton catwalk in Paris last week with a banner reading, “overconsumption = extinction”.
In 2016, Fashion Revolution started the Fashion Transparency Index, a yearly review of the top grossing fashion brands which grades them on transparency in a variety of different areas like: wages, sustainability and - this year - their response to the COVID-19 pandemic. Below is how just a few of the big names on the Fashion Week runway rank in the 2021 Fashion Transparency Index.
It's important to note that the Fashion Transparency Index ranks transparancey in public disclosures, not specific impact of policies.


To hook up a database to a questionair to log daily habits & accomplishments.
Setting up a page day history to find fetch display documents in the collection.
Testing the server that will relay the day's input to the server.
Got it nested away. now on to actually hooking up the input forms to the data base.
Deeper nesting the day's page, seperating day's past, current, review, and future. Debugging the routing.
Made a Table format of the time.
Issue: Need to make create a means seperate on the time: past present future, for day, week, month, etc. Currently, will use on "time's" home page a simple table, but would like to one day have a swipe motion for a clean UX.
Installing Bootstrap
meteor add twbs:bootstrap
Success in Pushing to GitHub
Success in establishing the Database.
Add a second Database.
Added a counter
Added events for checking the check box, and a helper to add function to the fetching DB results, if checked returned checked, else ""; then added css styling to the class "checked" so that if checked becomes stylized.
Added console.log to the if completed, gras _id: documentId and sets to true/false
Added Check Boxes to the "to do's"
Added the function to lose focus upon hitting the return & esc Key.
Did some styling corrections. The hover and focus ws going global, and I really wanted it to remain just with the Gyst Tester.
Key logger with Keyup save to the database & Styling css
continuing the meteor tips 2nd tutorial to add an Edit button.
Success! I've successfully followed the tutorial of creating a basic todo's app, with a input form field that inserts into the database an entry, then lists back the entry, as well as a delete button. This is all being done within a routed app.
After this, I will continue to follow the tutorial to add an edit feature, as well as what ever other features it presents.
Afterwhich I will then set off to apply what I have learned modified to create a form to log my Day's activity GYST.
SUCCESS! multiple templates rendered on a single view with spacebars accomplished with routing!
Here's How:
Router.route('/gyst', function () {
this.render('gystPage', 'todoItem');
this.layout('mainSide');
});
Notice the:
this.render('gystPage', 'todoItem');
Skiped a version as it was minor tweaks to make it work.
To address the issure, on the routers page, on the routed page i added
this.render('todoItem')
with
Router.route('/gyst', function () {
this.render('gystPage');
this.render('todoItem')
this.layout('mainSide');
});
Following the tutorial, the start off real simple, where I already have a routed system. everything is working ok up to this point of following the tutorial. The tutorial wants me to have multiple templates on a single .html. Currently on the router, I believe I have to have a routed entry for every template. I have yet demonstrated nor seen how to have multiple templates on a single view NESTed on a page routed in a sub directory.
 :D
Attempt multiple templates on a single view using the space bars
currently concerned about how to have multiple templates on a single view, or maybe i'm going about this all wrong. Perhaps it isn't a template but a ____?____.
Also concerned about how to back up, migrate, restore a mongo db collection. And should the app be one big collection or multiple collections.


HTML5 is the current version of the web mark-up language. It has its origins from HTML 2.0
XHTML 1 introduced a stricter markup from XML where every tag needs to be closed and every attribute has a value
XHTML 2 advanced from XHTML 1.0 and sought to replace HTML 4.01 which was a complete failure
WHATWG a rebellion that broke off from W3C whose main goal is to extend HTML to allow the creation of web applications.
Currently two groups work on HTML5.
Chapter 2: The Design of HTML5
HTML5 design principles are:-
Supporting the existing content
Don't reinvent the wheel
Pave the cowpaths
Priority of constituencies
HTML5 has specifications for what needs to be done in the event well formatted markup is parsed and likewise when badly formatted markup is parsed
To echo the point above HTML5 is written for both authors and implementers
One key change is how the doctype is defined in HTML5 ***. It is so because HTML5 has to be backward compatible and therefore it makes no sense stating the version number
Browsers support features not doctype
You can omit the type attribute from script and link tags for javascript and stylesheets since they are the standard
Obsolete elements such as frame, frameset, noframes, acronym, font, big, center, strike, bgcolor, cellspacing, cellpadding and valign are not supported in HTML5 although due to backwards compatibility they can still be used.
small is used for small print
Strong conveys extra importance
i is used to show an alternate voice
em is used to emphasis.
cite is for an authors works
a is now an anchor on steroids. It is an important tag since its the one that connects the web
Javascript APIs are now specified so now browser vendors have a script from which to go on. This ensures better compatibility
Chapter 3: Rich Media
Rich media is among the new advances being brought about by HTML5
"Plugins" would be required to get rich media to be supported by the browser. HTML5 seeks to bring that to an end by making them native to the browser
The canvas element is used to create dynamic pages. It does this through an API that is manipulated using javascript.
A canvas is good in that it can be updated and redrawn based on users actions
SVG although not adopted by HTML5 is better than canvas in that its DOM can be accessed
JavaScript should be used as an enhancement tool by using an approach referred to as Unobtrusive JavaScript.
The concept of boolean attributes such as autoplay, loop whose presence on a page determines if an action will be executed or not.
A huge problem of relying on plugins is that they are sandboxed from the rest of the of the document and awesome things like styling cannot be performed on them.
Chapter 4: Web Forms 2.0
We see declarative replacement of commonly done scripted operations. Use with care as some of the browsers may not already support this.
Placeholder - Puts temporary text in a textbox that is removed once a user starts typing
Autofocus allows for your cursor to be put in a input element, select once you load the page. Only used once in a document
Required is used to validate a form input
Several input types are now added into the specifications that include: search, tel, number, range, url, email, colour, date, time, month, datetime, datetime-local
Browsers without support for this default to text input type
The new types allow for control/ input suited to the type to be shown and also to validate the values entered
There is a pattern attribute that allows you to use regex to define the kind of input you require
Chapter 5: Semantics
Class attribute can be used to add more semantic value to elements. CSS is just an example of a technology that makes use of the class attribute during styling.
Microformats which are a set of agreed upon conventions by community uses the class attribute to extend HTML.
Microformats work based on the pareto principal
There are a bunch of new text-level semantics that have been introduced in HTML5.
mark element used for reference purposes due to in relevance in another context.
Acts as a mediator between computers and machines
It is cold today morning
- I am getting impatient...
Section - used to group thematically related content
header & footer used within documents and sections
aside - Used for tangentially related content
nav for major navigational content
article - for self-contained related content and widgets
New structure elements introduced a model called sectioning content
In HTML5 each section has its own self-contained outline
hgroup To make a group share the outline of the first element
Sectioning roots are elements that don't conform to the outlinig algorithm. This include:
Blockquote
Fieldset
td
scoped style - Applies styles to scope of the element it is defined in.
ARIA - Accessible Rich Internet Application provide assistive technologies.


{{ "" | safeHTML }} {{ with .Site.Params.services.title }}{{.}}{{ end }} Small groups with up to 3 dogs per walker 60 minutes of exercise and fun! Fully insured with CRB checks Walks/playtime start around midday Outings to: Hampstead Heath,Highgate Wood, Waterlow Park,Alexandra Park, Priory Park, Clissold Park {{ range .Site.Params.services.row }} {{ range .list }} {{ if .url }}{{ .title | markdownify }}{{ else }}{{ .title | markdownify }}{{ end }} {{ .description | markdownify }} {{ end }} {{ end }}
{{ .description | markdownify }}


This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
Last updated 3 mins ago
This card has supporting text below as a natural lead-in to additional content. Lorem ipsum dolor sit amet. Lorem, ipsum dolor.
Last updated 3 mins ago
This is a wider card with supporting text below as a natural lead-in to additional content. Lorem ipsum dolor sit amet.
Last updated 3 mins ago
This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
Last updated 3 mins ago
This card has supporting text below as a natural lead-in to additional content. Lorem ipsum dolor sit amet. Lorem, ipsum dolor.
Last updated 3 mins ago
This is a wider card with supporting text below as a natural lead-in to additional content. Lorem ipsum dolor sit amet.
Last updated 3 mins ago
With supporting text below as a natural lead-in to additional content. Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, tempore?
ZOBACZ WIĘCEJ...With supporting text below as a natural lead-in to additional content. Lorem ipsum dolor sit amet consectetur, adipisicing elit. Consequatur earum nihil est laboriosam rerum aliquid!
ZOBACZ WIĘCEJ...With supporting text below as a natural lead-in to additional content. Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem aspernatur distinctio ducimus quaerat maiores sequi consequuntur nesciunt sit et neque.
ZOBACZ WIĘCEJ...


The DBCELL record stores stream offsets for the BIFF file. There is one DBCELL record for each block of ROW records and associated cell records. Each block can contain data for up to 32 rows. For more information about the DBCELL record, see “Finding Cell Records in BIFF Files EXB0250 ”.
Record Data
|
Offset |
Field Name |
Size |
Contents |
|
4 |
dbRtrw |
4 |
Offset from the start of the DBCELL record to the start of the first ROW record in the block; this is an offset to an earlier position in the stream. |
|
8 |
rgdb |
var |
Array of stream offsets (2 bytes each). |


{!extends base.html !} {!block title!}{%set page 'aboutme'%}Jangod, about the author{!endblock!} {!block content!} This page is building. {!endblock!}


Money Play. How should Red play 33?
pips Red=95 White=171
(CorrectAnswer= 0/0, ErrorScore= 0)
I found this position very instructive.
White is playing a 1-2 back game and one of the weaknesses of such games is that that the opponent only bears in slowly because his 5s and 6s often cannot be played. Meanwhile the player of the back game sees his home board crunch.
Here, White’s timing is questionable and so Red should seek to eliminate his 5s and 6s. He also doesn't want to make his 5-pt, why make a point that is difficult to clear?
All of this leads to the correct play of 9/6(4). Any other play is at least an error. (A point cleared is a point not to be feared!). This gives Red plenty of 2s and 3’s to play. 4s may become a problem but you can’t have everything.
I got this wrong over the board but hopefully this analysis will help me get similar problems correct in future.
White is playing a 1-2 back game and one of the weaknesses of such games is that that the opponent only bears in slowly because his 5s and 6s often cannot be played. Meanwhile the player of the back game sees his home board crunch.
Here, White’s timing is questionable and so Red should seek to eliminate his 5s and 6s. He also doesn't want to make his 5-pt, why make a point that is difficult to clear?
All of this leads to the correct play of 9/6(4). Any other play is at least an error. (A point cleared is a point not to be feared!). This gives Red plenty of 2s and 3’s to play. 4s may become a problem but you can’t have everything.
I got this wrong over the board but hopefully this analysis will help me get similar problems correct in future.
1. Cubeful 2-ply 9/3 9/6 7/4 Eq.: +0.326 0.582 0.284 0.055 - 0.418 0.033 0.000 2. Cubeful 2-ply 9/3(2) Eq.: +0.271 (-0.055) 0.567 0.274 0.048 - 0.433 0.037 0.000 3. Cubeful 2-ply 9/3 9/6(2) Eq.: +0.253 (-0.073) 0.569 0.261 0.046 - 0.431 0.046 0.001 4. Cubeful 2-ply 9/6 7/4(3) Eq.: +0.236 (-0.090) 0.554 0.268 0.052 - 0.446 0.040 0.000 5. Cubeful 2-ply 7/4(3) 6/3 Eq.: +0.229 (-0.097) 0.553 0.267 0.050 - 0.447 0.042 0.000


BICENTENNIAL MAN A film review by Mark R. Leeper
Capsule: Isaac Asimov's story comes to the screen with the best of intentions, but there is just a little too much warmth and sweetness for most adult audiences to fully appreciate it. A robot who is already nearly perfect struggles to become human. Robin Williams and Embeth Davidtz star. Pleasant without being satisfying. Rating: 6 (0 to 10), +1 (-4 to +4).
In the year 2005 a father (Sam Neill) surprises his family with a new robot (Robin Williams) whom his family dubs Andrew. But there is more to Andrew than just Asimov's famous Three Laws of Robotics. The laws make certain that Andrew is benevolent, but he is considerably more. He has a streak of creativity and independent thinking that supposedly robots do not have. Rather than being an appliance, he has the rudiments of actually being human. The family has two daughters. One who is simply called Little Miss (Hallie Kate Eisenberg as a child and Embeth Davidtz as an adult) immediately takes to Andrew while older daughter Lloyd immediately wants to see Andrew discredited and destroyed. The father comes to take a fatherly interest in Andrew. We see Andrew doing some very human things like showing compassion for a spider and trying to master the complexities of human humor.
Racial themes enter the story as a human woman comes to love Andrew and he loves her in return, but Andrew is only a machine becoming human. It is years before a real romantic relationship is possible between him and a human. But robots are essentially immortal and as the title implies, we see Andrew over the course of two hundred years. This means even though it is a longer than average film, 131 minutes, it still covers superficially mostly only the more important events of Andrew's life. It seems almost as soon as you meet characters they are old and dying.
One thing the film does not handle very well is the view of society during the passage of so much time. Change is coming to our society at an accelerated rate. One need only look at the rate at which our own society has changed in the last 40 years. Forced with showing the changes in society over 200 years or ignoring them, the producers have almost entirely had to steer clear. We see minor and superficial changes, but not nearly the amount we would expect. We are left with an uneasy feeling that society has stagnated, but for some relatively small advances in the sciences relevant to the story.
Even when Isaac Asimov's story "The Bicentennial Man" was first published, it far from original. Asimov had been writing for years about benevolent robots who were misunderstood. Ray Bradbury wrote the story "I Sing the Body Electric," produced on TWILIGHT ZONE, about a family getting a grandmotherly robot and learning to love her. Asimov combined this and with some more complex themes for his novel. However, the wish to become human and the slow transition to fulfilling that wish was plundered from the novel and used very publicly in STAR TREK: THE NEXT GENERATION with the character Data. The viewer has agonized over Data's attempt to learn to deliver humor and it seems unfair to make the viewer do it again. That and much more of Data's difficult road to becoming human is recapitulated in this film. Like STAR TREK, this film never questions the smug assumption that being human is the highest state of being. At its best BICENTENNIAL MAN holds up a mirror to show us what it means to be human. But where it rings false the writers fall back on Andrew being a robot. That makes its observations undependable.
Some of the visuals are very good, but some are surprisingly flawed. In particular the futuristic skylines are unconvincing. If Andrew behaves too much like Data, he also looks a little too much like C3PO. Kudos should, however, go to the design of the robot makeup and mechanism. The faces maintain the look of metal and still are expressive to what is perhaps an unrealistic level.
Not surprisingly, this is Robin Williams's film. Somehow his attempts to be a normal human are touching but never as powerful as Cliff Robertson is in the comparable film CHARLY. Sam Neill, after this film and THE DISH, seems to be vying for the title of the mellowest actor on the screen. Embeth Davidtz has a harder role than Williams. If Williams does not seem quite right, well, he is a robot. Davidtz is quite good as a human, which is harder. Young Hallie Kate Eisenberg, known for Pepsi and Independent Film Channel ads, is her usual sweet self falling a little short of being cloying. Oliver Platt is always watchable. Chris Columbus directed and previously directed Williams in MRS. DOUBTFIRE. James Horner's score is unremarkable.
While this film does not have all the resonance that a film aimed at an adult audience should have, it should be good for a young adult audience. I give it a 6 on the 0 to 10 scale and a +1 on the -4 to +4 scale.
Mark R. Leeper<EMAIL_ADDRESS>Copyright 2000 Mark R. Leeper
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Course Topics
- Topic I: Geospatial Data Issues
- Turning Data into Information with ArcGIS
- Conceptualizing Geospatial Problem Solving
- Geocoding Tabular Data
- AutoCad Integration
- Topic II: Geospatial Analytics with Vector Data
- Data Cardinality
- Working with Census Data
- Linear Referencing
- Spatial Statistics
- Topic III: Geospatial Analytics with Raster Data
- Site Selection with Raster Data
- Suitability Analysis and Weighted Overlay
- Image Classification
- Topic IV: Customizing ArcMap
- Elementary Customization for ArcMap
- Development of Course Portfolio


 And proceed to do your thing on the...
TOILET.
SINK.


HEXDUMP(1) BSD General Commands Manual HEXDUMP(1) NAME hexdump, hd — ASCII, decimal, hexadecimal, octal dump SYNOPSIS hexdump [-bcCdovx] [-e format_string] [-f format_file] [-n length] [-s skip] file ... hd [-bcdovx] [-e format_string] [-f format_file] [-n length] [-s skip] file ... DESCRIPTION The hexdump utility is a filter which displays the specified files, or the standard input, if no files are specified, in a user specified format. The options are as follows: -b One-byte octal display. Display the input offset in hexadecimal, followed by sixteen space-separated, three column, zero-filled, bytes of input data, in octal, per line. -c One-byte character display. Display the input offset in hexadeci‐ mal, followed by sixteen space-separated, three column, space- filled, characters of input data per line. -C Canonical hex+ASCII display. Display the input offset in hexadeci‐ mal, followed by sixteen space-separated, two column, hexadecimal bytes, followed by the same sixteen bytes in %_p format enclosed in ``|'' characters. Calling the command hd implies this option. -d Two-byte decimal display. Display the input offset in hexadecimal, followed by eight space-separated, five column, zero-filled, two- byte units of input data, in unsigned decimal, per line. -e format_string Specify a format string to be used for displaying data. -f format_file Specify a file that contains one or more newline separated format strings. Empty lines and lines whose first non-blank character is a hash mark (#) are ignored. -n length Interpret only length bytes of input. -o Two-byte octal display. Display the input offset in hexadecimal, followed by eight space-separated, six column, zero-filled, two byte quantities of input data, in octal, per line. -s offset Skip offset bytes from the beginning of the input. By default, offset is interpreted as a decimal number. With a leading 0x or 0X, offset is interpreted as a hexadecimal number, otherwise, with a leading 0, offset is interpreted as an octal number. Appending the character b, k, or m to offset causes it to be interpreted as a multiple of 512, 1024, or 1048576, respectively. -v Cause hexdump to display all input data. Without the -v option, any number of groups of output lines, which would be identical to the immediately preceding group of output lines (except for the input offsets), are replaced with a line comprised of a single asterisk. -x Two-byte hexadecimal display. Display the input offset in hexadec‐ imal, followed by eight, space separated, four column, zero-filled, two-byte quantities of input data, in hexadecimal, per line. For each input file, hexdump sequentially copies the input to standard out‐ put, transforming the data according to the format strings specified by the -e and -f options, in the order that they were specified. Formats A format string contains any number of format units, separated by white‐ space. A format unit contains up to three items: an iteration count, a byte count, and a format. The iteration count is an optional positive integer, which defaults to one. Each format is applied iteration count times. The byte count is an optional positive integer. If specified it defines the number of bytes to be interpreted by each iteration of the format. If an iteration count and/or a byte count is specified, a single slash must be placed after the iteration count and/or before the byte count to disam‐ biguate them. Any whitespace before or after the slash is ignored. The format is required and must be surrounded by double quote (" ") marks. It is interpreted as a fprintf-style format string (see fprintf(3)), with the following exceptions: · An asterisk (*) may not be used as a field width or precision. · A byte count or field precision is required for each ``s'' con‐ version character (unlike the fprintf(3) default which prints the entire string if the precision is unspecified). · The conversion characters ``%'', ``h'', ``l'', ``n'', ``p'' and ``q'' are not supported. · The single character escape sequences described in the C standard are supported: NUL \0 <alert character> \a <backspace> \b <form-feed> \f <newline> \n <carriage return> \r <tab> \t <vertical tab> \v The hexdump utility also supports the following additional conversion strings: _a[dox] Display the input offset, cumulative across input files, of the next byte to be displayed. The appended characters d, o, and x specify the display base as decimal, octal or hexadecimal respectively. _A[dox] Identical to the _a conversion string except that it is only performed once, when all of the input data has been processed. _c Output characters in the default character set. Nonprinting characters are displayed in three character, zero-padded octal, except for those representable by standard escape notation (see above), which are displayed as two character strings. _p Output characters in the default character set. Nonprinting characters are displayed as a single “.”. _u Output US ASCII characters, with the exception that control characters are displayed using the following, lower-case, names. Characters greater than 0xff, hexadecimal, are dis‐ played as hexadecimal strings. 000 NUL 001 SOH 002 STX 003 ETX 004 EOT 005 ENQ 006 ACK 007 BEL 008 BS 009 HT 00A LF 00B VT 00C FF 00D CR 00E SO 00F SI 010 DLE 011 DC1 012 DC2 013 DC3 014 DC4 015 NAK 016 SYN 017 ETB 018 CAN 019 EM 01A SUB 01B ESC 01C FS 01D GS 01E RS 01F US 07F DEL The default and supported byte counts for the conversion characters are as follows: %_c, %_p, %_u, %c One byte counts only. %d, %i, %o, %u, %X, %x Four byte default, one, two and four byte counts supported. %E, %e, %f, %G, %g Eight byte default, four and twelve byte counts supported. The amount of data interpreted by each format string is the sum of the data required by each format unit, which is the iteration count times the byte count, or the iteration count times the number of bytes required by the format if the byte count is not specified. The input is manipulated in ``blocks'', where a block is defined as the largest amount of data specified by any format string. Format strings interpreting less than an input block's worth of data, whose last format unit both interprets some number of bytes and does not have a specified iteration count, have the iteration count incremented until the entire input block has been processed or there is not enough data remaining in the block to satisfy the format string. If, either as a result of user specification or hexdump modifying the iter‐ ation count as described above, an iteration count is greater than one, no trailing whitespace characters are output during the last iteration. It is an error to specify a byte count as well as multiple conversion char‐ acters or strings unless all but one of the conversion characters or strings is _a or _A. If, as a result of the specification of the -n option or end-of-file being reached, input data only partially satisfies a format string, the input block is zero-padded sufficiently to display all available data (i.e., any format units overlapping the end of data will display some number of the zero bytes). Further output by such format strings is replaced by an equivalent number of spaces. An equivalent number of spaces is defined as the number of spa‐ ces output by an s conversion character with the same field width and pre‐ cision as the original conversion character or conversion string but with any “+”, “ ”, “#” conversion flag characters removed, and referencing a NULL string. If no format strings are specified, the default display is equivalent to specifying the -x option. EXIT STATUS The hexdump and hd utilities exit 0 on success, and >0 if an error occurs. EXAMPLES Display the input in perusal format: "%06.6_ao " 12/1 "%3_u " "\t\t" "%_p " "\n" Implement the -x option: "%07.7_Ax\n" "%07.7_ax " 8/2 "%04x " "\n" Some examples for the -e option: # hex bytes % echo hello | hexdump -v -e '/1 "%02X "' ; echo 68 65 6C 6C 6F 0A # same, with ASCII section % echo hello | hexdump -e '8/1 "%02X ""\t"" "' -e '8/1 "%c""\n"' 68 65 6C 6C 6F 0A hello # hex with preceding 'x' % echo hello | hexdump -v -e '"x" 1/1 "%02X" " "' ; echo x68 x65 x6C x6C x6F x0A # one hex byte per line % echo hello | hexdump -v -e '/1 "%02X\n"' 68 65 6C 6C 6F 0A # a table of byte#, hex, decimal, octal, ASCII % echo hello | hexdump -v -e '/1 "%_ad# "' -e '/1 "%02X hex"' -e '/1 " = %03i dec"' -e '/1 " = %03o oct"' -e '/1 " = _%c\_\n"' 0# 68 hex = 104 dec = 150 oct = _h_ 1# 65 hex = 101 dec = 145 oct = _e_ 2# 6C hex = 108 dec = 154 oct = _l_ 3# 6C hex = 108 dec = 154 oct = _l_ 4# 6F hex = 111 dec = 157 oct = _o_ 5# 0A hex = 010 dec = 012 oct = _ _ # byte# & ASCII with control chars % echo hello | hexdump -v -e '/1 "%_ad# "' -e '/1 " _%_u\_\n"' 0# _h_ 1# _e_ 2# _l_ 3# _l_ 4# _o_ 5# _lf_ SEE ALSO gdb(1), od(1) BSD February 18, 2010 BSD


Show Success Alert
Show Info Alert
Show Processing Alert
Show Danger Alert
Show Warning Alert
Dismiss Any Active Alerts