text:
# Commander.js

[![Build Status](https://api.travis-ci.org/tj/commander.js.svg?branch=master)](http://travis-ci.org/tj/commander.js)
[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander)
[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true)
[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander)

The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander).

Read this in other languages: English | [简体中文](./Readme_zh-CN.md)

- [Commander.js](#commanderjs)
  - [Installation](#installation)
  - [Declaring _program_ variable](#declaring-program-variable)
  - [Options](#options)
    - [Common option types, boolean and value](#common-option-types-boolean-and-value)
    - [Default option value](#default-option-value)
    - [Other option types, negatable boolean and flag|value](#other-option-types-negatable-boolean-and-flagvalue)
    - [Custom option processing](#custom-option-processing)
    - [Required option](#required-option)
    - [Version option](#version-option)
  - [Commands](#commands)
    - [Specify the argument syntax](#specify-the-argument-syntax)
    - [Action handler (sub)commands](#action-handler-subcommands)
    - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands)
  - [Automated help](#automated-help)
    - [Custom help](#custom-help)
    - [.usage and .name](#usage-and-name)
    - [.help(cb)](#helpcb)
    - [.outputHelp(cb)](#outputhelpcb)
    - [.helpInformation()](#helpinformation)
    - [.helpOption(flags, description)](#helpoptionflags-description)
    - [.addHelpCommand()](#addhelpcommand)
  - [Custom event listeners](#custom-event-listeners)
  - [Bits and pieces](#bits-and-pieces)
    - [.parse() and .parseAsync()](#parse-and-parseasync)
    - [Avoiding option name clashes](#avoiding-option-name-clashes)
    - [TypeScript](#typescript)
    - [createCommand()](#createcommand)
    - [Node options such as `--harmony`](#node-options-such-as---harmony)
    - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands)
    - [Override exit handling](#override-exit-handling)
  - [Examples](#examples)
  - [License](#license)
  - [Support](#support)
    - [Commander for enterprise](#commander-for-enterprise)

## Installation

```bash
npm install commander
```

## Declaring _program_ variable

Commander exports a global object which is convenient for quick programs.
This is used in the examples in this README for brevity.

```js
const { program } = require('commander');
program.version('0.0.1');
```

For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use.

 ```js
 const { Command } = require('commander');
 const program = new Command();
 program.version('0.0.1');
 ```

## Options

Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|').

The options can be accessed as properties on the Command object. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. See also optional new behaviour to [avoid name clashes](#avoiding-option-name-clashes).

Multiple short flags may optionally be combined in a single argument following the dash: boolean flags, the last flag may take a value, and the value.
For example `-a -b -p 80` may be written as `-ab -p80` or even `-abp80`.

You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted.
This is particularly useful for passing options through to another
command, like: `do -- git --version`.

Options on the command line are not positional, and can be specified before or after other command arguments.

### Common option types, boolean and value

The two most used option types are a boolean flag, and an option which takes a value (declared using angle brackets). Both are `undefined` unless specified on command line.

```js
const { program } = require('commander');

program
  .option('-d, --debug', 'output extra debugging')
  .option('-s, --small', 'small pizza size')
  .option('-p, --pizza-type <type>', 'flavour of pizza');

program.parse(process.argv);

if (program.debug) console.log(program.opts());
console.log('pizza details:');
if (program.small) console.log('- small pizza size');
if (program.pizzaType) console.log(`- ${program.pizzaType}`);
```

```bash
$ pizza-options -d
{ debug: true, small: undefined, pizzaType: undefined }
pizza details:
$ pizza-options -p
error: option '-p, --pizza-type <type>' argument missing
$ pizza-options -ds -p vegetarian
{ debug: true, small: true, pizzaType: 'vegetarian' }
pizza details:
- small pizza size
- vegetarian
$ pizza-options --pizza-type=cheese
pizza details:
- cheese
```

`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array.

### Default option value

You can specify a default value for an option which takes a value.

```js
const { program } = require('commander');

program
  .option('-c, --cheese <type>', 'add the specified type of cheese', 'blue');

program.parse(process.argv);

console.log(`cheese: ${program.cheese}`);
```

```bash
$ pizza-options
cheese: blue
$ pizza-options --cheese stilton
cheese: stilton
```

### Other option types, negatable boolean and flag|value

You can specify a boolean option long name with a leading `no-` to set the option value to false when used.
Defined alone this also makes the option true by default.

If you define `--foo` first, adding `--no-foo` does not change the default value from what it would
otherwise be. You can specify a default boolean value for a boolean flag and it can be overridden on command line.

```js
const { program } = require('commander');

program
  .option('--no-sauce', 'Remove sauce')
  .option('--cheese <flavour>', 'cheese flavour', 'mozzarella')
  .option('--no-cheese', 'plain with no cheese')
  .parse(process.argv);

const sauceStr = program.sauce ? 'sauce' : 'no sauce';
const cheeseStr = (program.cheese === false) ? 'no cheese' : `${program.cheese} cheese`;
console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`);
```

```bash
$ pizza-options
You ordered a pizza with sauce and mozzarella cheese
$ pizza-options --sauce
error: unknown option '--sauce'
$ pizza-options --cheese=blue
You ordered a pizza with sauce and blue cheese
$ pizza-options --no-sauce --no-cheese
You ordered a pizza with no sauce and no cheese
```

You can specify an option which functions as a flag but may also take a value (declared using square brackets).

```js
const { program } = require('commander');

program
  .option('-c, --cheese [type]', 'Add cheese with optional type');

program.parse(process.argv);

if (program.cheese === undefined) console.log('no cheese');
else if (program.cheese === true) console.log('add cheese');
else console.log(`add cheese type ${program.cheese}`);
```

```bash
$ pizza-options
no cheese
$ pizza-options --cheese
add cheese
$ pizza-options --cheese mozzarella
add cheese type mozzarella
```

### Custom option processing

You may specify a function to do custom processing of option values. The callback function receives two parameters, the user specified value and the
previous value for the option. It returns the new value for the option.

This allows you to coerce the option value to the desired type, or accumulate values, or do entirely custom processing.

You can optionally specify the default/starting value for the option after the function.

```js
const { program } = require('commander');

function myParseInt(value, dummyPrevious) {
  // parseInt takes a string and an optional radix
  return parseInt(value);
}

function increaseVerbosity(dummyValue, previous) {
  return previous + 1;
}

function collect(value, previous) {
  return previous.concat([value]);
}

function commaSeparatedList(value, dummyPrevious) {
  return value.split(',');
}

program
  .option('-f, --float <number>', 'float argument', parseFloat)
  .option('-i, --integer <number>', 'integer argument', myParseInt)
  .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0)
  .option('-c, --collect <value>', 'repeatable value', collect, [])
  .option('-l, --list <items>', 'comma separated list', commaSeparatedList)
;

program.parse(process.argv);

if (program.float !== undefined) console.log(`float: ${program.float}`);
if (program.integer !== undefined) console.log(`integer: ${program.integer}`);
if (program.verbose > 0) console.log(`verbosity: ${program.verbose}`);
if (program.collect.length > 0) console.log(program.collect);
if (program.list !== undefined) console.log(program.list);
```

```bash
$ custom -f 1e2
float: 100
$ custom --integer 2
integer: 2
$ custom -v -v -v
verbose: 3
$ custom -c a -c b -c c
[ 'a', 'b', 'c' ]
$ custom --list x,y,z
[ 'x', 'y', 'z' ]
```

### Required option

You may specify a required (mandatory) option using `.requiredOption`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing.

```js
const { program } = require('commander');

program
  .requiredOption('-c, --cheese <type>', 'pizza must have cheese');

program.parse(process.argv);
```

```bash
$ pizza
error: required option '-c, --cheese <type>' not specified
```

### Version option

The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits.

```js
program.version('0.0.1');
```

```bash
$ ./examples/pizza -V
0.0.1
```

You may change the flags and description by passing additional parameters to the `version` method, using
the same syntax for flags as the `option` method. The version flags can be named anything, but a long name is required.

```js
program.version('0.0.1', '-v, --vers', 'output the current version');
```

## Commands

You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)).

In the first parameter to `.command()` you specify the command name and any command arguments. The arguments may be `<required>` or `[optional]`, and the last argument may also be `variadic...`.

You can use `.addCommand()` to add an already configured subcommand to the program.

For example:

```js
// Command implemented using action handler (description is supplied separately to `.command`)
// Returns new command for configuring.
program
  .command('clone <source> [destination]')
  .description('clone a repository into a newly created directory')
  .action((source, destination) => {
    console.log('clone command called');
  });

// Command implemented using stand-alone executable file (description is second parameter to `.command`)
// Returns `this` for adding more commands.
program
  .command('start <service>', 'start named service')
  .command('stop [service]', 'stop named service, or all if no name supplied');

// Command prepared separately.
// Returns `this` for adding more commands.
program
  .addCommand(build.makeBuildCommand());
```

Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `true` for `opts.hidden` will remove the command from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified ([example](./examples/defaultCommand.js)).

### Specify the argument syntax

You use `.arguments` to specify the arguments for the top-level command, and for subcommands they are usually included in the `.command` call. Angled brackets (e.g. `<required>`) indicate required input. Square brackets (e.g. `[optional]`) indicate optional input.

```js
const { program } = require('commander');

program
  .version('0.1.0')
  .arguments('<cmd> [env]')
  .action(function (cmd, env) {
    cmdValue = cmd;
    envValue = env;
  });

program.parse(process.argv);

if (typeof cmdValue === 'undefined') {
  console.error('no command given!');
  process.exit(1);
}
console.log('command:', cmdValue);
console.log('environment:', envValue || "no environment given");
```

 The last argument of a command can be variadic, and only the last argument.  To make an argument variadic you
 append `...` to the argument name. For example:

```js
const { program } = require('commander');

program
  .version('0.1.0')
  .command('rmdir <dir> [otherDirs...]')
  .action(function (dir, otherDirs) {
    console.log('rmdir %s', dir);
    if (otherDirs) {
      otherDirs.forEach(function (oDir) {
        console.log('rmdir %s', oDir);
      });
    }
  });

program.parse(process.argv);
```

The variadic argument is passed to the action handler as an array.

### Action handler (sub)commands

You can add options to a command that uses an action handler.
The action handler gets passed a parameter for each argument you declared, and one additional argument which is the
command object itself. This command argument has the values for the command-specific options added as properties.

```js
const { program } = require('commander');

program
  .command('rm <dir>')
  .option('-r, --recursive', 'Remove recursively')
  .action(function (dir, cmdObj) {
    console.log('remove ' + dir + (cmdObj.recursive ? ' recursively' : ''))
  })

program.parse(process.argv)
```

You may supply an `async` action handler, in which case you call `.parseAsync` rather than `.parse`.

```js
async function run() { /* code goes here */ }

async function main() {
  program
    .command('run')
    .action(run);
  await program.parseAsync(process.argv);
}
```

A command's options on the command line are validated when the command is used. Any unknown options will be reported as an error.

### Stand-alone executable (sub)commands

When `.command()` is invoked with a description argument, this tells Commander that you're going to use stand-alone executables for subcommands.
Commander will search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-subcommand`, like `pm-install`, `pm-search`.
You can specify a custom name with the `executableFile` configuration option.

You handle the options for an executable (sub)command in the executable, and don't declare them at the top-level.

```js
// file: ./examples/pm
const { program } = require('commander');

program
  .version('0.1.0')
  .command('install [name]', 'install one or more packages')
  .command('search [query]', 'search with optional query')
  .command('update', 'update installed packages', {executableFile: 'myUpdateSubCommand'})
  .command('list', 'list packages installed', {isDefault: true})
  .parse(process.argv);
```

If the program is designed to be installed globally, make sure the executables have proper modes, like `755`.

## Automated help

The help information is auto-generated based on the information commander already knows about your program. The default
help option is `-h,--help`. ([example](./examples/pizza))

```bash
$ node ./examples/pizza --help
Usage: pizza [options]

An application for pizzas ordering

Options:
  -V, --version        output the version number
  -p, --peppers        Add peppers
  -c, --cheese <type>  Add the specified type of cheese (default: "marble")
  -C, --no-cheese      You do not want any cheese
  -h, --help           display help for command
```

A `help` command is added by default if your command has subcommands. It can be used alone, or with a subcommand name to show
further help for the subcommand. These are effectively the same if the `shell` program has implicit help:

```bash
shell help
shell --help

shell help spawn
shell spawn --help
```

### Custom help

You can display extra information by listening for "--help". ([example](./examples/custom-help))

```js
program
  .option('-f, --foo', 'enable some foo');

// must be before .parse()
program.on('--help', () => {
  console.log('');
  console.log('Example call:');
  console.log('  $ custom-help --help');
});
```

Yields the following help output:

```Text
Usage: custom-help [options]

Options:
  -f, --foo   enable some foo
  -h, --help  display help for command

Example call:
  $ custom-help --help
```

### .usage and .name

These allow you to customise the usage description in the first line of the help. The name is otherwise
deduced from the (full) program arguments. Given:

```js
program
  .name("my-command")
  .usage("[global options] command")
```

The help will start with:

```Text
Usage: my-command [global options] command
```

### .help(cb)

Output help information and exit immediately. Optional callback cb allows post-processing of help text before it is displayed.

### .outputHelp(cb)

Output help information without exiting.
Optional callback cb allows post-processing of help text before it is displayed.

### .helpInformation()

Get the command help information as a string for processing or displaying yourself. (The text does not include the custom help
from `--help` listeners.)

### .helpOption(flags, description)

Override the default help flags and description.

```js
program
  .helpOption('-e, --HELP', 'read more information');
```

### .addHelpCommand()

You can explicitly turn on or off the implicit help command with `.addHelpCommand()` and `.addHelpCommand(false)`.

You can both turn on and customise the help command by supplying the name and description:

```js
program.addHelpCommand('assist [command]', 'show assistance');
```

## Custom event listeners

You can execute custom actions by listening to command and option events.

```js
program.on('option:verbose', function () {
  process.env.VERBOSE = this.verbose;
});

program.on('command:*', function (operands) {
  console.error(`error: unknown command '${operands[0]}'`);
  const availableCommands = program.commands.map(cmd => cmd.name());
  mySuggestBestMatch(operands[0], availableCommands);
  process.exitCode = 1;
});
```

## Bits and pieces

### .parse() and .parseAsync()

The first argument to `.parse` is the array of strings to parse. You may omit the parameter to implicitly use `process.argv`.

If the arguments follow different conventions than node you can pass a `from` option in the second parameter:

- 'node': default, `argv[0]` is the application and `argv[1]` is the script being run, with user parameters after that
- 'electron': `argv[1]` varies depending on whether the electron application is packaged
- 'user': all of the arguments from the user

For example:

```js
program.parse(process.argv); // Explicit, node conventions
program.parse(); // Implicit, and auto-detect electron
program.parse(['-f', 'filename'], { from: 'user' });
```

### Avoiding option name clashes

The original and default behaviour is that the option values are stored
as properties on the program, and the action handler is passed a
command object with the options values stored as properties.
This is very convenient to code, but the downside is possible clashes with
existing properties of Command.

There are two new routines to change the behaviour, and the default behaviour may change in the future:

- `storeOptionsAsProperties`: whether to store option values as properties on command object, or store separately (specify false) and access using `.opts()`
- `passCommandToAction`: whether to pass command to action handler,
or just the options (specify false)

([example](./examples/storeOptionsAsProperties-action.js))

```js
program
  .storeOptionsAsProperties(false)
  .passCommandToAction(false);

program
  .name('my-program-name')
  .option('-n,--name <name>');

program
  .command('show')
  .option('-a,--action <action>')
  .action((options) => {
    console.log(options.action);
  });

program.parse(process.argv);

const programOptions = program.opts();
console.log(programOptions.name);
```

### TypeScript

The Commander package includes its TypeScript Definition file.

If you use `ts-node` and  stand-alone executable subcommands written as `.ts` files, you need to call your program through node to get the subcommands called correctly. e.g.

```bash
node -r ts-node/register pm.ts
```

### createCommand()

This factory function creates a new command. It is exported and may be used instead of using `new`, like:

```js
const { createCommand } = require('commander');
const program = createCommand();
```

`createCommand` is also a method of the Command object, and creates a new command rather than a subcommand. This gets used internally
when creating subcommands using `.command()`, and you may override it to
customise the new subcommand (examples using [subclass](./examples/custom-command-class.js) and [function](./examples/custom-command-function.js)).

### Node options such as `--harmony`

You can enable `--harmony` option in two ways:

- Use `#! /usr/bin/env node --harmony` in the subcommands scripts. (Note Windows does not support this pattern.)
- Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning subcommand process.

### Debugging stand-alone executable subcommands

An executable subcommand is launched as a separate child process.

If you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) executable subcommands using `node --inspect` et al,
the inspector port is incremented by 1 for the spawned subcommand.

If you are using VSCode to debug executable subcommands you need to set the `"autoAttachChildProcesses": true` flag in your launch.json configuration.

### Override exit handling

By default Commander calls `process.exit` when it detects errors, or after displaying the help or version. You can override
this behaviour and optionally supply a callback. The default override throws a `CommanderError`.

The override callback is passed a `CommanderError` with properties `exitCode` number, `code` string, and `message`. The default override behaviour is to throw the error, except for async handling of executable subcommand completion which carries on. The normal display of error messages or version or help
is not affected by the override which is called after the display.

``` js
program.exitOverride();

try {
  program.parse(process.argv);
} catch (err) {
  // custom processing...
}
```

## Examples

```js
const { program } = require('commander');

program
  .version('0.1.0')
  .option('-C, --chdir <path>', 'change the working directory')
  .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
  .option('-T, --no-tests', 'ignore test hook');

program
  .command('setup [env]')
  .description('run setup commands for all envs')
  .option("-s, --setup_mode [mode]", "Which setup mode to use")
  .action(function(env, options){
    const mode = options.setup_mode || "normal";
    env = env || 'all';
    console.log('setup for %s env(s) with %s mode', env, mode);
  });

program
  .command('exec <cmd>')
  .alias('ex')
  .description('execute the given remote cmd')
  .option("-e, --exec_mode <mode>", "Which exec mode to use")
  .action(function(cmd, options){
    console.log('exec "%s" using %s mode', cmd, options.exec_mode);
  }).on('--help', function() {
    console.log('');
    console.log('Examples:');
    console.log('');
    console.log('  $ deploy exec sequential');
    console.log('  $ deploy exec async');
  });

program.parse(process.argv);
```

More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.

## License

[MIT](https://github.com/tj/commander.js/blob/master/LICENSE)

## Support

Commander 5.x is fully supported on Long Term Support versions of Node, and is likely to work with Node 6 but not tested.
(For versions of Node below Node 6, use Commander 3.x or 2.x.)

The main forum for free and community support is the project [Issues](https://github.com/tj/commander.js/issues) on GitHub.

### Commander for enterprise

Available as part of the Tidelift Subscription

The maintainers of Commander and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-commander?utm_source=npm-commander&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)

redpajama_set_name: RedPajamaGithub


text:
Felix Magnus Reifschneider (* 1978 in Frankfurt am Main) ist ein deutscher Politikwissenschaftler und Politiker (FDP). Von 2021 bis 2023 war er Mitglied im Abgeordnetenhaus von Berlin.

Reifschneider beendete den Schulbesuch 1998 mit dem Abitur. Er schloss ein Studium der Politikwissenschaft an den Universitäten Leipzig und Marburg 2004 mit dem Diplom ab. Er leitete das Abgeordnetenbüro des Bundestagsabgeordneten Hans-Joachim Otto und war Pressereferent der Frankfurter Industrie- und Handelskammer. Seit Januar 2012 war er im Bundesministerium für wirtschaftliche Zusammenarbeit und Entwicklung tätig. Reifschneider trat 2004 in die FDP ein. Bei der Abgeordnetenhauswahl 2021 erhielt er ein Mandat über die Bezirksliste Pankow seiner Partei. Nach dem Scheitern der FDP an der Fünfprozenthürde bei der Wiederholungswahl zum 19. Abgeordnetenhaus im Februar 2023 schied er erneut aus dem Parlament aus. Er ist Vorsitzender des FDP-Ortsverbandes Prenzlauer Berg.

Weblinks
 Felix Reifschneider beim Berliner Abgeordnetenhaus
 Felix Reifschneider bei der FDP Pankow
 Felix Reifschneider bei abgeordnetenwatch.de

Einzelnachweise

Mitglied des Abgeordnetenhauses von Berlin
Politiker (21. Jahrhundert)
FDP-Mitglied
Deutscher
Geboren 1978
Mann

redpajama_set_name: RedPajamaWikipedia


Talavera will be unavailable for dinner service on Friday May 26th due to a private function taking place in the restaurant. Please feel free to join us for lounge service in Onyx, which will feature a selection of Talavera favorites on their menu. For dinner reservations at Four Seasons Scottsdale, our sister restaurant Proof Canteen will be available from 5:30-9:30pm.


text:
McCollum
Y. Ferrell 19.5 1.22 16 13 1 3 0 1 1 1 5/7 1/2 2/3
D. Jeffries 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
D. Dedmon 12.5 0.89 14 5 4 0 2 0 0 2 2/3 1/2 0/0
H. Giles 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
M. Bagley III 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
J. James 4.5 0.56 8 0 2 1 1 0 0 1 0/3 0/1 0/0
W. Gabriel 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
K. Guy 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
H. Barnes 16.5 0.47 35 8 4 3 0 1 1 1 3/9 0/1 2/2
B. Bogdanovic 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
C. Joseph 23.5 0.71 33 11 3 7 0 0 1 2 4/10 1/2 2/2
D. Fox 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
N. Bjelica 31.5 1.13 28 17 7 4 2 1 3 1 7/15 3/7 0/0
C. Swanigan 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
R. Holmes 39 1.15 34 28 10 0 0 1 1 5 11/14 0/0 6/8
T. Ariza 19.5 0.54 36 11 6 1 2 1 2 2 4/10 2/7 1/2
B. Hield 40 0.98 41 23 7 7 0 2 1 2 8/24 3/12 4/6
M. Brown 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
S. Labissiere 9 0.60 15 0 2 1 1 1 0 1 0/0 0/0 0/0
H. Whiteside 53.5 1.57 34 22 16 7 3 0 2 3 8/10 0/0 6/8
J. Nurkic 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
G. Trent Jr. 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
Z. Collins 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
C. Anthony 22.5 0.63 36 20 5 0 1 0 1 2 8/16 2/4 2/2
A. Tolliver 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
M. Hezonja 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
D. Lillard 46 1.21 38 24 4 10 1 2 4 2 7/12 4/6 6/7
C. McCollum 49 1.29 38 33 4 4 4 1 2 2 14/22 5/10 0/0
A. Simons 5 0.38 13 3 2 2 0 0 1 6 1/5 0/2 1/2
J. Hoard 0 0.00 0 0 0 0 0 0 0 0 0/0 0/0 0/0
K. Bazemore 24 1.04 23 15 6 1 0 1 0 0 5/9 3/5 2/2
N. Little 5.5 0.42 13 4 1 0 0 1 1 0 2/3 0/1 0/0
R. Hood 11 0.32 34 6 3 3 0 0 1 2 2/7 2/4 0/0
Tim MacMahon on Carmelo Anthony
Luka Doncic on Carmelo Anthony (22 points, 8-16 FG vs. Mavs): "He's still a walking bucket out there. He's still got the game, and it's beautiful to watch."
48 minutes ago • Read on Twitter
CBS Sports NBA on Damian Lillard
Luka Doncic gets over fourth-quarter issues, outduels Damian Lillard and beats Blazers with gorgeous dagger. t.co
Blazer's Edge on Damian Lillard
Luka Doncic and Damian Lillard put on a show, but it was the younger star's 35 points that proved to be the difference. @SteveDHoops details the Blazers' 120-112 loss to the Mavericks. t.co
Ben Golliver on Carmelo Anthony
Mavericks' Luka Doncic on playing against future Hall of Famer Carmelo Anthony: "It was great. It was special. He's still a walking bucket. He's still got the game and it's beautiful to watch." t.co
NBA Fantasy on Hassan Whiteside
Hassan Whiteside posts a double-double and 5 blocks in Dallas to finish with 58.6 FPTS, earning him #NBAFantasy Player of the Night! t.co
Rotoworld Basketball on Damian Lillard
Damian Lillard scores 34 in loss to DAL t.co
FantasyLabs NBA on Gary Trent Jr.
Status note: Gary Trent Jr. has returned to Blazers' bench Friday.
NBA on Hassan Whiteside
Hassan Whiteside protects the paint with his 4th block of the night! @trailblazers 100 @dallasmavs 105 5:46 left on ESPN t.co
NBA.com/Stats on Damian Lillard
Damian Lillard has reached 14,000 career points tonight. He joins LeBron James, Carmelo Anthony, and Kevin Durant as the only active players to reach that mark in their first 8 seasons in the NBA. t.co
NBA.com/Stats on Carmelo Anthony
Status note: Gary Trent Jr. headed to locker room Friday.
Sean Cunningham on Bogdan Bogdanovic
Luke Walton anticipating having Bogdan Bogdanovic back with his Kings in Utah Saturday night. Previews game with Jazz, the injury bug and evaluates his team at the halfway mark. FULL VIDEO: t.co t.co
FantasyLabs NBA on Mario Hezonja
Lineup note: Mario Hezonja starts second half ahead of Kent Bazemore on Friday.
FantasyLabs NBA on Kent Bazemore
Casey Holdahl on Anfernee Simons
Both Anfernee Simons and Mario Hezonja start the second half. The first because of injury, the latter due to foul trouble.

redpajama_set_name: RedPajamaCommonCrawl


text:
#include "SearchEngine.h"

#include <vector>
#include <string>
#include <cstring>
#include <set>
#include <cmath>
#include <unordered_map>
#include <fstream>
#include <ctime>
#include <math.h>

#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xmlstring.h>

#include "Document.h"
#include "Term.h"
#include "QueryDescriptor.h"
#include "Relevant.h"
#include "Produto.h"

using namespace std;

unordered_map<string, Term> vocabulary;

unordered_map<string, Document> documents;

typedef set<Document> DocumentVector;

unordered_map<string, DocumentVector> inverted;

set<string> stopWords;

/**
 * calculate cosine distance between result elements
 */
struct cosineVectorCompare {
	bool operator()(pair<string, Document> const &left, pair<string, Document> const &right) const {
		double cosLeft = 0;
		double cosRight = 0;
		if (left.second.getMagnitude() > 0) {
			cosLeft = left.second.getDotProduct() / sqrt(left.second.getMagnitude());
		}

		if (right.second.getMagnitude() > 0) {
			cosRight = right.second.getDotProduct() / sqrt(right.second.getMagnitude());
		}

		return cosLeft > cosRight;
	}
};

/**
 * Index each token normalizing and them in the inverted list
 */
void indexToken(Produto produto, string token) {

	token = normalize(token);

	//ignore stop words
	if (stopWords.find(token) == stopWords.end()) {

		Term term = Term();
		if (vocabulary.count(token) == 0) {
			term.setName(token);
			term.setGlobalFrequency(1);
		} else {
			term = vocabulary[token];
		}

		string docId = produto.getId();
		string docName = produto.getImg();

		Document document = Document();
		if (documents.count(docId) == 0) {
			document.setId(docId);
			document.setName(docName);
			documents[docId] = document;
		} else {
			document = documents[docId];
		}

		//add token and related document to inverted list
		if (inverted.count(token) == 0) {
			document.increaseTF();
			DocumentVector dv;
			dv.insert(document);
			inverted.insert(std::pair<string, DocumentVector>(token, dv));
		} else {

			//check if is already added, if yes update it
			set<Document> docs = inverted[token];
			set<Document>::iterator docTempIt = docs.find(document);

			if (docTempIt != docs.end()) {

				Document tmpdoc = *docTempIt;
				tmpdoc.increaseTF();

				std::pair<std::set<Document>::iterator, bool> result = inverted[token].insert(tmpdoc);
				if (!result.second) {
					inverted[token].erase(result.first);
					inverted[token].insert(tmpdoc);
				}

			} else {
				inverted[token].insert(document);
				term.increaseGlobalFrequency();
			}
		}
		vocabulary[token] = term;
	}

}
/**
 * Call indexToken for a product from DafitiPosthaus XML
 */
void indexProduto(Produto produto, string descriptor) {

	//search index the product title, description and image descriptor
	string word = (produto.getTitulo() + " " + produto.getDescricao() + " " + produto.getCategoria() + " " + descriptor);

	vector<string> tokens = string_split(word, ' ');

	for (vector<string>::iterator it = tokens.begin(); it != tokens.end(); ++it) {
		indexToken(produto, *it);
	}
}

/**
 * First calculate IDF for each Term than calculate each document Magnitude and TF
 */
int calculateMagnitude() {

	cout << "Calculating Magnitude and TF...";

	clock_t start;
	double duration;
	start = clock();

	for (unordered_map<string, Term>::iterator itTerm = vocabulary.begin(); itTerm != vocabulary.end(); ++itTerm) {

		Term term = itTerm->second;

		term.calculateIDF(MAX_PRODUCTS_TO_FETCH);
		double IDF = term.getIDF();
		vocabulary[itTerm->first] = term;

		set<Document> docs = inverted[term.getName()];

		for (set<Document>::iterator docTempIt = docs.begin(); docTempIt != docs.end(); ++docTempIt) {

			double TF = docTempIt->calculateTF();
			Document doc = documents[docTempIt->getId()];

			//sum magnitude
			double magnitude = doc.getMagnitude() + pow(IDF * TF, 2);
			doc.setMagnitude(magnitude);
			documents[docTempIt->getId()] = doc;
		}

	}

	duration = (std::clock() - start) / (double) CLOCKS_PER_SEC;

	cout << "took " << duration << " seconds." << endl;

	return EXIT_SUCCESS;

}
/**
 * Load DafitiPosthaus XML nodes and save each one in a object
 * Class index function only for product that have a valid image file
 */
int parseAndIndexDB() {

	cout << "Parsing and Indexing the database...";

	clock_t start;
	double duration;
	start = clock();

	xmlDocPtr doc;
	xmlNodePtr cur;

	doc = xmlParseFile(DATABASE_PATH);

	//missing file not allowed
	if (doc == NULL) {
		cout << stderr << "Failed to parse, missing file and/or invalid path. \n";
		return EXIT_FAILURE;
	}

	cur = xmlDocGetRootElement(doc);

	//empty file not allowed
	if (cur == NULL) {
		cout << stderr << "Failed to parse, empty document. \n";
		xmlFreeDoc(doc);
		return EXIT_FAILURE;
	}

	Produto produto;

	//the xml must be valid
	if (xmlStrcmp(cur->name, (const xmlChar *) XML_ROOT)) {
		cout << stderr << "Failed to parse, document of the wrong type, root node != produtos";
		xmlFreeDoc(doc);
		return EXIT_FAILURE;
	}

	cur = cur->xmlChildrenNode;

	int nodes = 0;

	while (cur != NULL && nodes < MAX_PRODUCTS_TO_FETCH) {

		if (!xmlStrcmp(cur->name, (const xmlChar *) NODE_ROOT)) {

			xmlNodePtr currentNode = cur->xmlChildrenNode;

			while (currentNode != NULL) {
				if (!xmlStrcmp(currentNode->name, (const xmlChar *) "id"))
					produto.setId((char *) xmlNodeListGetString(doc, currentNode->xmlChildrenNode, 1));
				if (!xmlStrcmp(currentNode->name, (const xmlChar *) "categoria"))
					produto.setCategoria((char *) xmlNodeListGetString(doc, currentNode->xmlChildrenNode, 1));
				if (!xmlStrcmp(currentNode->name, (const xmlChar *) "titulo"))
					produto.setTitulo((char *) xmlNodeListGetString(doc, currentNode->xmlChildrenNode, 1));
				if (!xmlStrcmp(currentNode->name, (const xmlChar *) "descricao"))
					produto.setDescricao((char *) xmlNodeListGetString(doc, currentNode->xmlChildrenNode, 1));
				if (!xmlStrcmp(currentNode->name, (const xmlChar *) "img"))
					produto.setImg((char *) xmlNodeListGetString(doc, currentNode->xmlChildrenNode, 1));

				currentNode = currentNode->next;
			}

			//get image name replace extension to sdlc and open
			string img(produto.getImg());

			std::string token = img.substr(0, img.find(EXTENSION_DELIMITER));

			string sdlcFilename = DATABASE_COLLECTION_PATH + token + SDLC_EXTENSION;

			ifstream imageFile(sdlcFilename);

			//index only good images that were transformed
			if(imageFile.good()){
				string descriptor;
				getline(imageFile, descriptor);
				indexProduto(produto,descriptor);
			}

			nodes++;
		}

		cur = cur->next;
	}

	duration = (std::clock() - start) / (double) CLOCKS_PER_SEC;

	cout << "took " << duration << " seconds." << endl;

	cout << "Finished vocabulary with " << vocabulary.size() << " terms." << endl;

	return EXIT_SUCCESS;
}

/**
 * Calculate Term Frequency for a query
 */
double calculateQueryTF(string query, string term) {
	int occurrences = 0;
	string::size_type start = 0;

	while ((start = query.find(term, start)) != string::npos) {
		++occurrences;
		start += term.length();
	}

	if (occurrences == 0) {
		return occurrences;
	} else {
		return 1 + log(occurrences);
	}
}

/**
 * Search for terms in the inverted list
 */
vector<pair<string, Document>> find(string query) {

	clock_t start;
	double duration;
	start = clock();

	unordered_map<string, Document> results;

	query = normalize(query);

	char separator[] = " ";

	char * token = strtok(&query[0], separator);

	while (token != NULL) {

		//do we have this term in our vocabulary?
		Term term = vocabulary[token];

		//any document point to this term?
		set<Document> docs = inverted[token];

		int queryTF = calculateQueryTF(query, token);

		for (set<Document>::iterator itDoc = docs.begin(); itDoc != docs.end(); ++itDoc) {
			Document doc = *itDoc;

			double dotProduct = (term.getIDF() * doc.getTF()) * (term.getIDF() * queryTF);
			doc.setDotProduct(dotProduct);

			std::pair<std::unordered_map<string, Document>::iterator, bool> it = results.insert(
					std::pair<string, Document>(doc.getName(), doc));

			if (!it.second) { //if already exists
				double dp = it.first->second.getDotProduct() + doc.getDotProduct();
				doc.setDotProduct(dp);
			}

			results[doc.getName()] = doc;

		}

		token = strtok(NULL, separator);

	}

	//add magnitude to results
	for (unordered_map<string, Document>::iterator it = results.begin(); it != results.end(); ++it) {
		Document doc = it->second;
		Document originalDoc = documents[doc.getId()];
		doc.setMagnitude(originalDoc.getMagnitude());
		results[it->first] = doc;
	}

	vector<pair<string, Document>> sorted_results(results.begin(), results.end());

	//sort by cos
	sort(sorted_results.begin(), sorted_results.end(), cosineVectorCompare());

	duration = (std::clock() - start) / (double) CLOCKS_PER_SEC;

	cout << "Took " << duration << " seconds." << endl;

	cout << "Found " << results.size() << " documents." << endl;

	return sorted_results;

}

vector<Relevant> parseRelevant(char * file_prefix) {

	vector<Relevant> result;

	xmlDocPtr doc;
	xmlNodePtr cur;

	char * fileName = (char *) malloc(RELEVANT_STRING_SIZE);
	strcpy(fileName, RELEVANTS_PATH);
	strcat(fileName, file_prefix);
	strcat(fileName, RELEVANT_SUFIX);

	doc = xmlParseFile(fileName);

	//missing file not allowed
	if (doc == NULL) {
		cout << stderr << "Failed to parse, missing file and/or invalid path. \n";
		return result;
	}

	cur = xmlDocGetRootElement(doc);

	//empty file not allowed
	if (cur == NULL) {
		cout << stderr << "Failed to parse, empty document. \n";
		xmlFreeDoc(doc);
		return result;
	}

	//the xml must be valid
	if (xmlStrcmp(cur->name, (const xmlChar *) "relevantes")) {
		cout << stderr << "Failed to parse, document of the wrong type, root node != produtos";
		xmlFreeDoc(doc);
		return result;
	}

	cur = cur->xmlChildrenNode;

	Relevant relevante;

	while (cur != NULL) {

		if (!xmlStrcmp(cur->name, (const xmlChar *) "relevante")) {

			xmlNodePtr currentNode = cur->xmlChildrenNode;

			while (currentNode != NULL) {
				if (!xmlStrcmp(currentNode->name, (const xmlChar *) "img"))
					relevante.setImg((char *) xmlNodeListGetString(doc, currentNode->xmlChildrenNode, 1));

				currentNode = currentNode->next;
			}

			result.push_back(relevante);

		}

		cur = cur->next;
	}

	return result;
}

vector<QueryDescriptor> getRelevants() {

	string queriesPath = QUERIES_PATH;

	vector<QueryDescriptor> relevants;

	for (int i = 0; i < MAX_QUERIES_TO_EVALUATE; i++) {

		char numstr[21]; // enough to hold all numbers up to 64-bits
		int query_prefix = i + 1;
		sprintf(numstr, "%d", query_prefix);

		QueryDescriptor query;

		string file = queriesPath + numstr + TEXT_EXTENSION;
		ifstream queryFile(file);
		string line;
		if (queryFile.is_open()) {
			getline(queryFile, line);
			query.setStr(line);
		}

		string sdlcFilename = queriesPath + numstr + SDLC_EXTENSION;
		ifstream sdlcFile(sdlcFilename);

		//index only good images that were transformed
		if (sdlcFile.good()) {
			string descriptor;
			getline(sdlcFile, descriptor);
			query.setSdlcText(descriptor);
		}

		query.setRelevants(parseRelevant(numstr));
		relevants.push_back(query);

		queryFile.close();

	}

	return relevants;

}

double calculatePrecision(vector<pair<string, Document>> queryResults, vector<Relevant> relevants, int point) {

	int relevantsCount = 0;

	int lenght = point;

	if (queryResults.size() < lenght)
		lenght = queryResults.size();

	for (int i = 0; i < lenght; i++) {

		for (vector<Relevant>::iterator it = relevants.begin(); it != relevants.end(); ++it) {

			if (queryResults[i].first == it->getImg()) {
				relevantsCount++;
			}
		}
	}

	return (double) relevantsCount / (double) point;

}

double calculateAP(vector<pair<string, Document>> queryResults, vector<Relevant> relevants) {

	double precisionAcummulator = 0;

	int lenght = 10;

	if (queryResults.size() < lenght)
		lenght = queryResults.size();

	for (int i = 0; i < lenght; i++) {

		for (vector<Relevant>::iterator it = relevants.begin(); it != relevants.end(); ++it) {

			if (queryResults[i].first == it->getImg()) {
				precisionAcummulator += calculatePrecision(queryResults, relevants, i + 1);
			}
		}
	}

	return (double) precisionAcummulator / relevants.size();

}

void evaluateModel() {

	double map = 0;
	double p10 = 0;

	//load queries and respective relevants
	vector<QueryDescriptor> relevants = getRelevants();

	//evaluate MAP and Precision At Point 10
	for (vector<QueryDescriptor>::iterator itDoc = relevants.begin(); itDoc != relevants.end(); ++itDoc) {

		vector<pair<string, Document>> queryResults = find(itDoc->getStr());

		map += calculateAP(queryResults, itDoc->getRelevants());
		p10 += calculatePrecision(queryResults, itDoc->getRelevants(), 10);
	}

	cout << "Evaluations text queries (" << MAX_QUERIES_TO_EVALUATE << " queries)" << endl;
	cout << "MAP: " << map / MAX_QUERIES_TO_EVALUATE << endl;
	cout << "P@10: " << p10 / MAX_QUERIES_TO_EVALUATE << endl;

	//evaluate MAP and Precision At Point 10
	for (vector<QueryDescriptor>::iterator itDoc = relevants.begin(); itDoc != relevants.end();
			++itDoc) {

		vector<pair<string, Document>> queryResults = find(itDoc->getSdlcText());

		map += calculateAP(queryResults, itDoc->getRelevants());
		p10 += calculatePrecision(queryResults, itDoc->getRelevants(), 10);
	}

	cout << "Evaluations image descriptors queries (" << MAX_QUERIES_TO_EVALUATE << " queries)" << endl;
	cout << "MAP: " << map / MAX_QUERIES_TO_EVALUATE << endl;
	cout << "P@10: " << p10 / MAX_QUERIES_TO_EVALUATE << endl;

}

int main(int argc, char * argv[]) {

	ifstream stopwordsFile(STOPWORDS_PATH);
	string line;
	while (std::getline(stopwordsFile, line)) {
		stopWords.insert(line);
	}

	stopwordsFile.close();

	cout << "Welcome to my search engine!" << endl
			<< "Please be patient while I check files integrity, parse, index and do some math stuff with them." << endl
			<< "This will take a lot of your time, depending the size of your database...this parameter can be changed (search_engine.h#MAX_PRODUCTS_TO_FETCH)"
			<< endl;

	int status = parseAndIndexDB();

	status = calculateMagnitude();

	if (status == EXIT_SUCCESS) {
		cout << "Finished the hard work." << endl;
	}

	if (status == EXIT_FAILURE) {
		return EXIT_FAILURE;
	}

	if(argv[1]){
		string args(argv[1]);
		if(args == "-q") {
			if(argv[2]){
				string q(argv[2]);

				vector<pair<string, Document>> results = find(q);

				cout << "Results for \"" << q << "\" are: " << endl;

				if (results.size() == 0)
					cout << "None" << endl;

				for (vector<pair<string, Document>>::iterator itDoc = results.begin(); itDoc != results.end(); ++itDoc) {
					cout << itDoc->first << endl;
				}
			}else {
				cout << "-q requires parameter." << endl;
				return EXIT_FAILURE;
			}

		}
	} else {
		evaluateModel();
	}

	return EXIT_SUCCESS;

}


text:
package zutil.image.filter;

import zutil.image.ImageFilterProcessor;
import zutil.image.RAWImageUtil;
import zutil.math.ZMath;

import java.awt.image.BufferedImage;

public class DitheringFilter extends ImageFilterProcessor{
    // default palette is black and white
    private int[][] palette = {
            {255,0,0,0},
            {255,255,255,255}
    };

    /**
     * Sets up a default DitheringEffect
     */
    public DitheringFilter(BufferedImage img) {
        super(img);
    }

    /**
     * Creates a Dithering Effect object
     * @param img The image to apply the effect on
     * @param palette The palette to use on the image <pre>
     * int[colorCount][4]
     * 0 -> Alpha data
     * 		Red data
     * 		Green data
     * 4 -> Blue data </pre>
     */
    public DitheringFilter(BufferedImage img, int[][] palette) {
        super(img);
        this.palette = palette;
    }

    @Override
    public int[][][] process(int[][][] data, int startX, int startY, int stopX, int stopY) {
        int error, index;
        int[] currentPixel;
        int[][][] output = RAWImageUtil.copyArray(data);

        for (int y=startY; y<stopY; y++) {
            setProgress(ZMath.percent(0, stopY-startY-1, y));
            for (int x=startX; x<stopX; x++) {
                currentPixel = output[y][x];
                index = findNearestColor(currentPixel, palette);
                output[y][x] = palette[index];

                for (int i = 1; i < 4; i++)	{
                    error = currentPixel[i] - palette[index][i];
                    if (x + 1 < output[0].length) {
                        output[y+0][x+1][i] = RAWImageUtil.clip(output[y+0][x+1][i] + (error*7)/16);
                    }
                    if (y + 1 < data.length) {
                        if (x - 1 > 0)
                            output[y+1][x-1][i] = RAWImageUtil.clip(output[y+1][x-1][i] + (error*3)/16);
                        output[y+1][x+0][i] = RAWImageUtil.clip(output[y+1][x+0][i] + (error*5)/16);
                        if (x + 1 < data[0].length)
                            output[y+1][x+1][i] = RAWImageUtil.clip(output[y+1][x+1][i] + (error*1)/16);
                    }
                }
            }
        }

        return output;
    }

    private static int findNearestColor(int[] color, int[][] palette) {
        int minDistanceSquared = 255*255 + 255*255 + 255*255 + 1;
        int bestIndex = 0;
        for (byte i = 0; i < palette.length; i++) {
            int Rdiff = color[1] - palette[i][0];
            int Gdiff = color[2] - palette[i][1];
            int Bdiff = color[3] - palette[i][2];
            int distanceSquared = Rdiff*Rdiff + Gdiff*Gdiff + Bdiff*Bdiff;
            if (distanceSquared < minDistanceSquared) {
                minDistanceSquared = distanceSquared;
                bestIndex = i;
            }
        }
        return bestIndex;
    }
}


The International Astronomical Union (IAU), the internationally recognized authority for naming celestial bodies and their surface features, recently approved a dozen names proposed by NASA's New Horizons team, which led the first reconnaissance of Pluto and its moons in 2015 with the New Horizons spacecraft. The New Horizons team had been using many of the chosen names informally to describe the many valleys, crevices and craters discovered during the first close-up look at the surface Charon.
Charon is one of the larger bodies in the Kuiper Belt, and has a wealth of geological features, as well as a collection of craters similar to those seen on most moons. These features and some of Charon's craters have now been assigned official names by the IAU.
The New Horizons team was instrumental in moving the new names through approval, and included the leader of the New Horizons missions, Dr. Alan Stern, and science team members Mark Showalter — the group's chairman and liaison to the IAU — Ross Beyer, Will Grundy, William McKinnon, Jeff Moore, Cathy Olkin, Paul Schenk and Amanda Zangari. The team gathered most of their ideas during the Our Plutoonline public naming campaign in 2015.
The names approved by the IAU encompass the diverse range of recommendations the team received from around the world during the Our Pluto campaign. As well as the efforts of the New Horizons team, members of the public all over the world helped to name the features of Charon by contributing their suggestions for names of the features of this far-flung moon.


As you know we love our movie nights, Any excuse to crack open the popcorn, snuggle together on the sofa and enjoy a family film!
This weekend we were very lucky to have been sent a copy of The Croods on DVD before it's release date of 9th December 2013, yes that's today!
Although we never got a chance to see this when it was out at the cinema, I've heard very good things about this movie that comes from the makers of both Shrek and Madagascar, so we were looking forward to watching!
As the movie begins we are introduced to The Croods by the central character Eep, a rebellious teen cave-girl who is fed up of her family in the Stone Age and the strict rules her father Grug lays down. They start out with the whole family packed into a small dark cave. As well as Eep and her father, this includes Mum Ugga, brother Thunk, baby Sandy and their elderly Gran.
We follow this quirky family as the the world around them changes forever and they have to learn to change the way they live in order to survive.
They are helped on this journey by their new friend 'Guy' (voiced by by Ryan Reynolds) and his rather dramatic pet sloth 'Belt' who show the Croods that the life they were used to was (in the words of Eep)...'not living, just not dying'.
The film was full of fun slapstick moments that had our whole family laughing along and both my three year old and six year old were captivated by the colourful characters and their adventures as they searched for a wonderous place called tomorrow. As well as Guy and Belt, the family encounter an exciting array of animals on their journey from the Macawnivore to Piranhakeets.
The overwhelming message of the movie was hope and it was portrayed in a way that appealed to all ages, from my 3 year old Elizabeth who clapped with excitement, to my 29 year old self who wiped a few tears from my eyes along the way.
The father-daughter relationship between Eep (played by Emma Stone) and Grug (played by Nicolas Cage), echoed that of many families and certainly pulled some heartstrings with me.
This is a fun and lighthearted family movie that will make a great Christmas gift and can be purchased from today for just £10 on DVD or £15 on Blu-Ray , it one that I'm sure our family will be watching time and time again!
Mumsnet and Twentieth Century Fox Home Entertainment kindly sent us a copy of The Croods on DVD for review before its release on DVD and Blu-Ray on 9th December 2013. All opinions are our own.


weed eater bike kit professional trimmer weed eater weed eater bicycle kit. . . . . . . . . . . . . . .
cabinet painting pensacola cabinet project cabinet painting pensacola fl. . . . . . . . . . . . . . .
red velvet seat red velvet seats for spectators in the theater or cinema red velvet chair cushions aloe blacc red velvet seat lyrics. . . . . . . . . . . . . . .
homemade floor wax floors waxed with homemade floor polish homemade floor wax investigatory project homemade floor wax for linoleum. . . . . . . . . . . . . . .
subwoofer box connector package acoustics subwoofer box wire connector. . . . . . . . . . . . . . .
clean step doormat our clean step doormat and my shoes inside our super absorbent clean step doormat super clean step doormat. . . . . . . . . . . . . . .
antique ceramic elephant painted ceramic elephant antique ceramic elephant figurine antique pink ceramic elephant. . . . . . . . . . . . . . .
bleeder bottle genesis cable bleeder bottle genesis bleeder bottle radiator bleeder bottle. . . . . . . . . . . . . . .


Dash will remove polish traces from plastic and rubber trims.
Wynn's Fresh is an extra-long lasting deodorant air freshener which will fight odours while protecting and beautifying vinyl, rubber, dashboards, tyres, exterior trim and matt finishes.
Fresh has a unique fresh scent and is available in three popular fragrances, Musk, Cherry and Green Apple.
Dash will remove polish traces from plastic and rubber trims .
Wynn's Leather Care Crème treats and protects leather and vinyl seats, jackets, lounge suites or any leather item requiring superior nourishment and care.
It contains unique ingredients such as lanolin, jojoba oil, silicones, softeners,cleaning agents and a UV protector.
Leather Care Crème will not stain clothing and will care for the finest leather.
Wynn's C Thru is a truly remarkable innovative rain dispersant product for windscreens and windows.
Rain is dispersed so effectively, you do not need to use wipers at all even in the heaviest of down pours.
Applies easily with a clean cloth and lasts an entire rainy season.
Wynn's Windscreen Wash is a concentrated detergent additive for the windscreen water reservoir to remove stubborn dirt and insect residue from the windshield.
Wynn's Detail Polymer Sealant combines the benefits of polymerized silicone paint sealant with Carnuba wax.
It is mildly abrasive to assist in polishing out swirl marks and minor scratches.
Wynn's Revive paintwork renewer, is a burnishing compound with abrasive particles which remove faded,discoloured paint and scratches.
Revive removes years of grime and oxidation in minutes.
Wynn's Pearl Glaze is a premium non-abrasive cream polish for all paint finishes including high end metallic and clear coat paintwork.
Wynn's Kwik Kwik Wash and Wax Car Shampoo is a unique wax wash containing specialized wax which plates out on the paint to preserve polish and sealants.
After washing you may rinse but not essential.
Simply dry the car and buff windows and bright work.
Wynn's Big Red is a great value everyday car wash to keep your car looking like new in minutes.
Wynn's Scratch Remover is an abrasive polishing paste with micro particles which remove scratches and scuff marks commonly associated with everyday knocks and bumps.
Large angular particles abrade and break down while small smoother particles leave a polished finish.
Wynn's Chamois are super thick, extra absorbent and tear resistant.
Recommended for best results on paintwork,windows and bright work to remove moisture and leave surfaces clean and streak free.
Wynn's Black Back brings back the black on faded bumpers, grills, spoilers, louvers, dashboards, tyres and other black trim.
Wynn's Tyre Treat is a foam cleaner which acts immediately by simply spraying the actuated foam onto the tyre.
For enhanced appearance, wipe the tyre before it is dry.
Wynn's Tyre & Trim Shine is a silicone cleaner, protector and beautifier for all exterior plastics, vinyl, rubbers and tyres.
Applies easily leaving exterior trim looking like new while protecting from UV.
The special anti-static formula prevents dust and dirt from accumulating on treated surfaces keeping them cleaner for longer.
Wynn's Mag Wheel Cleaner is a highly effective cleaning formulation in an easy to use trigger container.
In stubborn cases a light brush can be used to remove dirt before rinsing.
Wynn's Brush off is a dry foam cleaner for all fabric and velour upholstery in the car and at home.
The activated foam assists in lifting dirt to the surface for ease of removal.
Ideal for carpets, roof linings, seats etc.


I took advantage of dreary weather earlier this week and sowed some seed.
Two varieties of spinach ('Regiment' and 'Noble Giant'), cilantro, mache, and chervil.
It has taken forty years for me to love spinach. Before I learned to eat it, I could appreciate it for its gorgeous, saturated green color. Is anything in nature as satisfying to behold, especially in winter, as that lush, vehement emerald green? And while I love a good spinach salad with pecans, blue cheese, and pears or berries, I am looking forward to trying this baked spinach gratin recipe from Smitten Kitchen.
Mache (Valerianella locusta) is a newfound favorite. It has a distinctive, nutty flavor that gives depth to winter salads and other dishes. Absurdly easy to grow (it is often found as a field weed in Europe), it is hardy to USDA Zone 5, and has robust levels of vitamins B6, B9, C, and E.
I have never grown chervil before. It is frequently used in French cooking, apparently, and is sometimes described as a sophisticated parsley, to which it is related. I was alarmed to learn it is also related to hemlock, that extremely toxic herb that killed Socrates. Another good reason not to forage (not that this practice, to be honest, has ever appealed to me). I will trust the seed packet and think up some good egg dishes.
I am one of those people who believe one can never have too much cilantro (clearly, I don't share the experience some people have of it tasting like soap). I adore Asian and Mexican food, in which it is commonly used. Cilantro (coriander, in seed form) is an herb that, once sown, one can always have provided the gardener allows one plant to go to seed. I gathered seed from a very healthy organic stand grown in a community garden I manage. I have perhaps a third of a quart jar of seed. Time to make some coriander chicken!
I'm putting a note on my calendar to sow more seed in two weeks' time. I always forget to repeat-sow, meaning that when the weather gets truly cold I run out of my fresh veg. My goal this winter is to stay on top of the process.
Winter here is usually mild enough that I can grow these resilient plants with only mild protection. I use horticultural fleece when frost is expected, which has the added benefit of keeping any critters away. But until I can dig my fleece out, I am repurposing the kids' old sandbox cover, made out of fiberglass window screening sewn around two lengths of capped PVC pipe. I can unroll this giant scroll (which did a brilliant job, by the way, of keeping cats and leaves out of the sandbox) over the newly planted greens and just wait for the harvest.


NOTE: This workshop has already occurred.
Read the Conveners' Final Report (Microsoft Word 2007 (.docx) 111kB Apr30 13).
Success in student undergraduate science education often starts with resilient programs at two-year colleges (2YCs). In rural Alaska, the community campuses are playing an increasingly important role in science education as well as developing a competent and technical workforce. This is done through working with K-12 teachers, high school dual credit courses, and providing opportunities for students to conduct research. To do all of this, faculty at Alaskan colleges face substantial challenges; limited resources for travel, isolation, and few opportunities for professional development.
Ways to prepare 2YC students to attend four-year colleges and universities.
There were no direct costs to attend this workshop.
Participants are invited to attend the Western Alaska Interdisciplinary Conference.
The workshop will be held at the University of Alaska Fairbanks Northwest Campus in Nome.


Baby Airhostess is one of the free online games to play.
Miranda always wanted to fly around the world as a flight attendant. Dress up Miranda in a one of the company uniforms to impress Both the pilot and passengers. Pose for a photo standing before the passenger terminal of the airplane itself.


Have you made Arkansas Brown Rice?
1. Wash rice by rinsing in a pan of cool water, pick out floating particles and any unhulled grains.
2. Combine ingredients in saucepan with tight-fitting cover.
3. Bring rice to a boil over high heat; stir once or twice; cover.
4. Reduce heat and simmer 45-50 minutes until rice is tender and water absorbed.
5. NOTE: Brown rice is raw rice which has not been polished to the white stage normally seen.
This recipe contains potential food allergens and will effect people with Wheat, Butter, Gluten, Rice allergies.


Today I've got something special for you. Just like I did for Touch of Iron, I thought it'd be interesting for you to see the progression of the cover for the next in the Living Blade series, On the Wheel.
Tommy Arnold is not only a world class artist who has done a bunch of beautiful book covers, but he is also a delight to work with. We both knew we wanted Diaz on the cover from the get go. Though Nora is the focal point, this book really is his story. So I sent Tommy a looooong email with looooooots of spoilers.
The imagery used around Diaz throughout the book is one of being enveloped in flame, but also darkness. The mood is one of encroaching darkness, of struggling against restraints, of inevitable change. As is fitting for a second book, there are changes and transformations. The grinding stone is ever turning. Also, there's a lot of ... um ... bonding going on (if this were a romance manga, there would totally be chains on the cover.) Tommy captured the mood perfectly.
Diaz is a half wight, so I had to give Tommy a basic idea of that culture. The wights are the elder race in this world (but please, for the love of Tolkien, NO pointy ears). They've chosen to seclude themselves in an underground city, away from humanity. However, this isolation has caused them to dwindle in number. It's a highly sophisticated, meritocratic society that is slowly deteriorating. They look at the grand past instead of the future, but this is about to change.
Wights have tattoos as marks of identity. As they can endure heat and cold temperatures, clothing for them would be more of an afterthought, not a necessity for protection. Therefore Diaz wears light clothing at all times (linen) - no plate armor! He's not that kind of warrior. He does carry an assortment of weapons: twin scimitars, a short sword (roman gladius), a hunting bow, probably knives everywhere, too.
I love the Assassin's Creed games, the look and parcour/fighting style of Ezio Auditore for Diaz. Ezio's an assassin who doesn't have the bulging Conan hulk typical of most fantasy heroes, but rather relies on being faster and more agile to overcome his many enemies, and he's very deadly at the same time. Also, I can easily picture Diaz wearing something similar. He could pull the hood deep over his face to hide his black eyes.
Humans scare easily after all.
The wight's tattoos would make it obvious to another wight who they are, where they come from (regionally and familywise) as well as what they do, all on first glance. I imagine the tattooes a bit like a mix between Samoan tribal and viking motifs, so both pictoral as well as 'written' (runes).
The most alien wight feature are their eyes which are large and black. They also have no body hair (no eyebrows for instance. I like to imagine they're humanoids that evolved from lizards instead of simians.) On my Pinterest board, I had a picture of Neil Gaiman's Morpheus for what I had in mind with the eyes.
In the end, though, we decided against showing the eyes. It's a bit of a tease, because I'm sure that readers would have wanted to see his face. But I really preferred Diaz turning away from 'us' on the cover. He's in mid fight, poised to go up against his demons, his own shades of darkness. It's personal. And – like every good hero - he needs to do this on his own.
When we had grim! dark! artwork, there was still the tricky situation of having a really dark cover – bucking the trend of the stylish white ones that have been creeping up (like this or this one). I was worried how the title design would work. But I needn't have worried, because on the very first pass, James T. Egan (from Bookflydesign.com) nailed it.
And I had my cover for On the Wheel. Here it is. Feast your eyes.
Look, Nora, this isn't about you. We know you've had your problems and struggles. We know they aren't over. But Nora, this isn't about you. This is more than villages and temples; more than kingdoms and empires. The whole world is at stake.
"But if this isn't about me, why do I have to deal with it?"
Maybe asking "What is the Living Blade?" is the wrong question. Maybe the question should be "Who?"
And besides, Nora, sometimes the very world itself is your problem. To be able to fix yourself, you have to fix the world first, don't you?


text:
Birthright Israel: 100,000 Gentile Lives Worth Less Than a Single Jewish Life
Still Not a Single White Death from Coronavirus
Kleptology
Yad Vashem Hosts a Conference on "The Shoah and Jewish Identity"
Another Anti-White Narrative: Ahmaud Arbery
Worshipping Our Executioners
Public Healthcare and Forced Eugenic Sterilization
Norway: Resistance Men Acquitted for Political Statements
THREE members of the Nordic Resistance Movement in Norway have been acquitted for making political statements during an activity in 2018 — a thorough and correct judgement, says defence lawyer Nils Christian Nordhus.
On 29 June, Tommy Olsen (41), Ronny Bårdsen (34) and Jan Christopher Pedersen (37) were cleared by the court of appeal for a political action on 9 April 2018, in which a swastika flag was raised, and banners with swastikas and the text "We are back" were hung up in three different locations in Kristiansand, Norway.
"Not illegal statements"
The court of appeal reasoned that the statements and symbols were not directed towards particular groups but appeared to be more general, and therefore were not punishable.
Defence lawyer Nils Christian Nordhus told Norwegian broadcaster NRK that the acquittal is not surprising, and is thorough and correct.
Nordhus said: "This case is not about whether you agree or disagree with their viewpoints. It's about whether my clients should be punished for their opinions, and for having been honest and communicated them publicly."
Frihetskamp has been in contact with Tommy Olsen, chief of the Norwegian branch of the Nordic Resistance Movement, and received his comment about the acquittal:
"I must say that personally I'm very surprised," Olsen said. "Trust in the legal system has not exactly been especially high considering how politicised and hypocritical the Norwegian authorities have proven to be. The fact that there are still people who conduct themselves professionally in their work, and that they acquitted us, is very gratifying. Now it remains to see what happens next."
The three Resistance men were originally convicted by the district court for "hateful statements" but appealed the decision to the court of appeal, which has now acquitted them.
Source: Nordic Resistance Movement
Sweden: Jews Call for Ban on Nordic Resistance Movement
Glowing Nordfront Banner Lights Up Ludvika
Norway: Oslo Police: "We Have Lost the City"
NRM: Our Plan for the North
Nordic Resistance Movement Attends Memorial March in Bulgaria
"I Feel Betrayed by My Country": The Swedes Who Think Their Scandinavian Utopia is Being Ruined by "...
Sweden: Security Police Functionary Lies in Attempt to Criminalize Nordic Resistance Movement
Evangel for Bibliophiles; Ten Percent Nordic
Tags:Nordic Resistance MovementNorway
Black Male Beats White Woman — Attempts Coerced Sex — Then Gets Her Fired When Turned Down
Traits We Want in National Alliance Recruits
Today We Honor Vidkun Quisling of Norway
White Lives Matter Demonstration in Örebro, Sweden
Vidarr
There are a few, not quite, acceptable excuses for the USA, but Scandinavia has no excuse whatsoever. What a disgrace to their ancestors they've become. I hope they're enjoying their "cultural enrichment". Sad.
Well, a mini ice age is coming very soon, so the whole thing will likely freeze over completely, so there is that.


Hawaiian Island bangle is make with fine metal round wire and genuine highly luster peacock tahitian pearl with Big Island charm. Bangle is hand- formed, hammered and polished for a stunning texture and shine. It looks great worn alone or paired with other shell and charm bangles to create a chic, fun beachy look.
Textured Big Island charm is approximately 14mm in size.
Lovely black pearls bracelet featuring genuine tahitian pearls and gold filled monstera charm.
Bracelet is hand knotted with sturdy silk thread ended with gold filled clasp and 1" extender.
Bracelet is measure 7" with 1" extender unless otherwise requested.
Near round semi baroque tahitian pearls are 9mm in size.
As you can see in the photos there are naturally occurring blemishes that give these pearls character and show that it is real. These are stock photos so please note pearls are vary in shape and color.
This casually chic bypass cuff is make with fine metal round wire and genuine silver tahitian pearls. Bangle is hand- formed, hammered and polished for a stunning texture and shine. It's super fun and versatile to wear and easily adjustable to any wrist size.
Highly lustrous tahitian pearls are 11-12 mm.
*********You'll receive this exact cuff as shown.
Earrings total length is approximately 1.5".
Natural color peacock Tahitian pearls with gold vermeil moonstone connectors . Genuine Tahitian Cultured Pearls Shape: Baroque drop Color: Peacock Size: 10x 11 mm Luster: Very High Luster and thick nacre. Surface: Generally very clean skin with natural . Vermeil moonstone connectors are about 10 mm in size. Earrings will arrive in gift box ready for gift giving. Tahitian Black Pearls another popular member of the saltwater pearl family. Unlike the Akoya and South Sea saltwater pearls, Tahitian Black pearls are cultured in the black-lipped oyster (Pinctada margaritifera), the largest member of the pearl producing oyster family. The oyster itself is can grow to be up to 1 foot across and weighing in at over 10 pounds. The relatively large size of the oyster often results in much larger than average pearls, with sizes ranging from 8 to 14 mm. Further, the pearls are unique because of their natural dark colors owing to their name "black." However, the name is somewhat of a misnomer since most "black" Tahitian pearls are not actually black. Instead, the majority of the Tahitian Black pearls are gray, silver, charcoal, or shades similar those. Other popular but more colors are copper, pistachio, taupe, peacock, aubergine, steel gray, olive, and sea green. Tahitian pearls are often accentuated with a beautiful array of colorful overtones. Truly black pearls are extremely rare and are highly sought after in the world markets.
Petite tahitian pearl hoops with multicolor tourmaline clusters.
Faceted multicolor tourmaline briolettes meassured 4-5 mm in size.
Tropical bangle featuring monstera leaf charm and genuine tahitian pearl. Bangle is hand- formed, hammered into scallop or faceted design and polished for a stunning texture and shine. It looks great worn alone or paired with other shell & pearl bangles!
Monstera charm is slightly hammered and measured approximately 10mm.
Yellow and green Hawaiian sunrise shells were meticulously wire wrapped with keshi tahitian pearls.


text:
What's ahead for virtual meetings in 2021?
Up until May 31, 2021, condominium corporations can hold virtual meetings and use electronic voting, without a bylaw.
Is remote condo management working?
The ins and outs of hybrid meetings
Requisitions: waiting on changes to the Condo Act
Inside one condo board's COVID-19 response
The bright idea behind fall-planted bulbs
Impacts of the hard insurance market are trickling into condominium corporations across Canada, challenging boards and managers in their wake.
A guide to finding the right roofing contractor
Why benchmarking small buildings still matters
How is COVID-19 impacting reserve funds?
Condo communities build up resilience in 2020
Are condos prepared for climate change?
The Greater Toronto Area's condo market hasn't emerged completely unscathed. But it's not all bad news.
Developer avoids liability after cancelling condo
Condo design takes cue from commercial facilities
Plugging fall-planted bulbs into the right design will illuminate them to their fullest and brightest potential in the spring landscape.
Interior design trends in 2020 and beyond
A guide to rejuvenating suite doors
Design revealed for Reina condo in Etobicoke
News comes with Ontario's announced electricity rate increase for Nov. 1
By Barbara Carss
Many condominium corporations and rental housing landlords in Ontario received a six-month reprieve from a looming hydro cost hit earlier this week when Minister of Energy Greg Rickford announced that large accounts specifically linked to electricity used in buildings' common areas will remain eligible for the Ontario Electricity Rebate (OER) until April 30, 2021. Common area accounts registering more than 50 kilowatts (kW) of demand or 250,000 kilowatt-hours (kWh) of annual consumption had been scheduled to lose the benefit — currently a 31.8 per cent pre-tax discount on electricity consumption and regulated transmission/distribution charges — on November 1.
Now, they've been granted an extension that comes with an improved rate since the provincial government intends to increase the rebate apportionment to 33.2 per cent on November 1. That's likely to be particularly welcome, at least in the short term, as hydro rates for all residential, farm and small commercial customers are slated to rise on the same date.
"As we recover from COVID-19, our government remains focused on supporting Ontarians by keeping the cost of electricity affordable," Rickford said, as he also outlined a planned new program to improve energy efficiency in low-income households along with expanded eligibility criteria for one-time grants through the COVID-19 Energy Assistance Program.
COVID-19-prompted hiatus of flat rates ends October 31
Nevertheless, the fall/winter schedule of the Regulated Price Plan (RPP), which the Ontario Energy Board likewise revealed this week, reintroduces time-of-use rates at higher price points than prior to the COVID-19-prompted hiatus that will end on October 31. Notably, the peak rate, applying from 7 to 11 a.m. and 5 to 7 p.m., will jump from 20.8 cents per kWh at the beginning of this year to 21.7 cents/kWh for fall 2020/winter 2021. Pending new rates for off-peak hours at 10.5 cents/kWh and the mid-peak period at 15 cents/kWh compare to 10.1 cents/kWh and 14.4 cents/kWh previously.
For the first time, RPP customers can alternatively opt for tiered prices, with higher rates kicking in after the first 1,000 kWh of monthly consumption for residential customers or 750 kWh for non-residential customers. That will be set at 12.6 cents/kWh and 14.6 cents/kWh on either side of those thresholds.
The OEB estimates either choice should result in bills that are about 2 per cent higher for the average residential consumer, even when accounting for the upward adjustment in the rebate. Rate increases are attributed to the need to collect a greater share of the global adjustment — the opaque envelope of locked-in costs for contracted supply, nuclear facility refurbishment and conservation and demand management (CDM) programs — from RPP customers because demand has dropped across the entire electricity system, and also to make up for the shortfall that accumulated over the past 7+ months while customers have been charged flat rates.
"The OEB has decided to spread collection of this shortfall over two years to ease the impact on consumers," its backgrounder on the new rates reports. "If the collection had been spread over 12 months, as is typically the case, the electricity costs recovered through RPP prices would have been roughly 1.6 per cent higher."
Rebate withdrawal based on OEB's interpretation of enabling regulation
Many condo boards and rental housing landlords had been bracing for an upward spike on their hydro bills due to the OEB's interpretation of how the Ontario Electricity Rebate should be applied. In a memo issued last December, the OEB determined that common area accounts surpassing 50 kW of demand or 250,000 kWh of annual usage would not qualify after the one-year transitional period expired on October 31, 2020, even though the rebate would apply on all the same electricity-using elements for any amount of consumption in bulk-metered buildings where a single account covers all residential suites and common areas.
In a follow-up explanation provided to a rental housing landlord earlier this year, the OEB's industry relations liaison pointed to the wording of the enabling regulation — enacted in October 2019 to facilitate introduction of the new more substantive replacement for the previous 8 per cent provincial rebate — for the seeming inequitable treatment of buildings with the same functions and types of occupants.
While most readers see the section as an affirmation that occupants of large multi-residential buildings are entitled to the same rebate that hydro account holders in single family dwellings receive, the OEB draws further nuanced distinctions around the regulation's reference to "solely in respect of a multi-unit complex" that contains at least two qualifying units and in which at least 50 per cent of the units qualify.
"Applying the eligibility criteria set out in the Regulation, the entire building, including the common areas, of a residential condominium building that is bulk-metered by a distributor (whether sub-metered or not) would qualify for the OER as long as there are at least two qualifying units, and that at least 50 per cent of the units in the building are qualifying units," the OEB's explanation states. "If the same building was individually metered by the distributor (i.e. unit smart metering), each account would have to be assessed on an individual basis as to whether it meets the eligibility criteria (i.e. the 50 kilowatt demand or 250,000 kWh annual consumption). In this case, if the common area account(s) did not meet the thresholds, these accounts would not qualify for the OER because it does not contain any qualifying units."
Ramifications flow through to condo fees
For condo owners, the ramifications of that interpretation flow directly to their fees. For example, the common area account for Toronto Standard Condominium Corporation (TSCC) #2112, a 32-storey, 342-unit tower in the city's north Yonge Street corridor, typically records about 200,000 kWh of monthly consumption — presenting the condo board's budget committee with the challenge of where to find the funds to cover a 30+ per cent increase on that bill.
"In our case, the hydro cost for common areas represents 7.5 per cent of our total expenses," reports Maryam Maleki, a member of that committee. "Cutting the rebate would result in a 2.5 per cent increase in our total expenses, if all the other expenses remain constant."
Many other condo boards throughout the province have been facing similar challenges.
"We provide our clients with templates that have the OER timing in them. So impacted sites were calling me to say: Hey, I think your template is wrong because our costs look like they are going up like crazy," recounts Rob Detta Colli, manager of energy and sustainability with Crossbridge Condominium Services. "I'd explain: 'No, the templates aren't wrong', which then leads to another explanation about what's happening with the OER."
The newly announced rebate extension does not overturn the OEB's interpretation, but it does give those who question its logic more time to make their case. That includes a range of stakeholders from condominium boards and unit owners to rental housing landlords and investors to energy efficiency advocates concerned about potential negative impact on the uptake of unit sub-metering.
Barbara Carss is editor-in-chief of Canadian Property Management.
Energy Management,
Maryam Maleki,
Ontario Electricity Rebate,
Rob Detta Colli
Licensing exams go online for security guards
Ontario extends ban on commercial evictions
Is Your Condo Well Managed?
Safety takes priority for property maintenance partners
CondoBusiness:


text:
TechRadar IT Insights for Business
RAT, RDP, RDC, VNC, SSO: A look at the most commonly used acronyms in Remote Desktop
By Barclay Ballard published 17 December 21
A guide to the most common remote desktop acronyms.
(Image: © Microsoft)
The information technology world is full of acronyms. There's BYOD, CPUs, APIs, and a huge number more. The remote desktop world is no exception. For many years, the world of remote desktops, virtual machines, and virtualization generally, has been the reserve of just a few workers.
However, following the outbreak of the Covid-19 pandemic, the vast majority of employees suddenly had to get used to accessing their work resources remotely, as businesses around the world were forced to implement remote and hybrid work policies. Almost overnight, it became more important to know what exactly is meant by RAT or RDC.
If you need some help with remote desktop acronyms, then you've come to the right place. This guide will take you through the most common and let you know exactly what each one means.
These are the best cloud hosting services on the market
RAT - Remote Administration Tool
Confusing matters even more, the acronym RAT actually stands for two different things in the IT world. When discussing remote desktops, it is unlikely that the conversation will turn towards remote access Trojans but given the widespread nature of malware, it can't completely be ruled out.
Instead, RAT probably refers to a remote administration tool. A RAT is a piece of software that gives an individual complete control over a device, remotely. Of course, this individual could be a cyberattacker using the aforementioned Trojan malware, but RAT software can also be deployed legitimately.
One of the most common uses for RATs is for customer support. Before these remote tools were invented, support staff would have had to physically sit at all employee desks to, say, install a new piece of software or fix a particular issue. With a RAT, these tasks can be completed without even being in the office or using the same network.
RATs can save time, energy, and money for businesses across a wide range of industries. Some of the most popular remote administration tools include Dameware Remote Support, Atera, NinjaOne, and many others. These programs have long been useful for the centralization of company IT strategies - and with more employees working remotely, they are more useful than ever.
RDP - Remote Desktop Protocol
The remote desktop protocol is a technical standard for connecting with a computer remotely. While there are other standards available, including Independent Computing Architecture (ICA) and Virtual Network Computing (VNC), RDP is the most common. RDP was developed by Microsoft and has gone on to be extremely popular. In fact, there are an estimated 4.5 million RDP servers connected to the internet, with many more accessible from within internal networks.
RDP communication supports up to 64,000 unique channels and transmits monitor output from the remote server to the client, as well as keyboard/mouse input from the client to the server. It's also worth noting that although RDP was developed by Microsoft for Windows machines, RDP clients are now available for macOS, Linux, Unix, Android, and iOS. Plus, there's also now an open-source version available.
The advantages of using RDP include that users are not required to use a VPN and that data is encrypted by default. There are also more general advantages around virtualization to consider, such as the fact that employees have the freedom to work wherever they need to. The cons of using RDP is that users can experience noticeable lag (even if it's only a few milliseconds), which may decrease productivity and result in a less pleasant user experience.
RDC - Remote Desktop Connection
Remote Desktop Connection (RDC) is another Microsoft technology and one that has been around for a number of years. The application is built into Windows and lets individuals connect to any remote computer, as long as it's on, connected to the relevant network, and has gone through the RDC setup process.
That setup process is relatively straightforward. Simply visit the search box within the Windows taskbar, type "Remote Desktop Connection", and open the program. Then type the name of the PC you want to connect to and then select Connect. Of course, before this can take place, you must configure the computer you want to connect to for remote connections. To do so, you need to go to Settings, then click "System," select Remote Desktop, and set this to On.
In theory, once the connection has been established, you can access any computer you need from wherever you are. Not bad for a free program that comes included with every Windows device.
VNC - Virtual Network Computing
Working on slightly different principles to RDP, virtual network computing (VNC) is a graphical desktop-sharing standard that works by transmitting graphical screen updates from one computer to another via a network. As with RDP applications, the complete VNC connection consists of a client, server, and communication protocol.
Both RDP and VNC technologies provide similar functionality for the end-user, rely on peer-to-peer communications, and offer secure access to computer resources remotely. The differences are that VNC offers greater compatibility across a wider range of platforms, while RDP requires port forwarding to provide connections over the internet. This means it is an exposed service, which can introduce more security risks when compared to VNC's cloud connections.
The primary difference between RDP and VNC is that the former creates a virtual session, while VNC captures the physical display. Unlike RDP, VNC is a screen-sharing platform where the remote computer can also take control.
(Image credit: wichayada suwanachun / Shutterstock)
SSO - Single Sign-On
Single Sign-On (SSO) is a form of authentication technology that allows the user to enter their credentials just once to access a number of digital solutions. As well as being simpler and more convenient for users, SSO tools encourage the use of stronger passwords, reduce the time spent on password recovery, and generally lead to more robust security. SSO login works by creating an authentication token that remembers that the user has already been verified. The token is then passed to the app being used and the user is authenticated.
With remote desktop services generally involving the use of multiple different services, inputting credentials over and over could significantly damage productivity for workers. That's why SSO has been adopted alongside remote desktop apps in many cases.
We've come up with a guide that explains Remote Desktop vs Virtual Desktop vs Virtual Machines
See more how-to articles
Are you a Pro? Subscribe to our newsletter!
Sign up to the TechRadar Pro newsletter to get all the top news, opinion, features and guidance your business needs to succeed!
Asus Chromebook CX1500 review
Microsoft Edge will soon protect users from never-before-seen security bugs
What franchises does Microsoft gain in the Activision Blizzard takeover?
Best Linux web hosting services of 2022
Drink in the new Cuphead cartoon trailer as you wait for February


text:
314 John Street, Clayton, NY
2018 Art of Winter
After School Arts
Fiber Arts Classes
Drawing/Painting Classes
Kids/Teen Classes
Jewelry Classes
Weaving Studio
Antique Show
Arts & Crafts Show
Weaving History Conference
Emily Belding
Dorothy Burton's Bronson
Penelope Drooker
Kasuri Dyeworks
Berta Frey
Elizabeth Dodge Haxall
Ruth N. Holroyd
Lucille Landis
Evelyn Neher
Josephine Parsons
Barbara Pascal
Marjore Ruth Ross
Janet Ryder
Mary Snyder
Lotti Speth
Lurene Stone
Elizabeth Terlouw
Palmy Weigle
Myra R. Young
Mary Meigs Atwater
Renew / New
Your Donations Make a Difference
Arts Center Library
Collection Database
Sample 2010.01.15
Handwoven sample - Blue and white, bell motif, mounted on a card; Cotton; Bronson II weave structure. Labelled, "Diagram 31, A Christmas Bell."...View Full Record
Handwoven sample -Red and white, heart motif, mounted on a card; Cotton; Bronson II weave structure. Labelled "Diagram 32, A Valentine Heart."...View Full Record
Handwoven sample -Blue and metallic, tree motif, mounted on a card; Cotton; Bronson II weave structure. Labelled "Diagram 33, A Christmas Tree."...View Full Record
Handwoven sample -Blue, green and white, cross motif, mounted on a card; Cotton; Bronson II weave structure. Labelled "Diagram 34, An Easter Cross."...View Full Record
Handwoven sample - royal blue mat. Tagged, "Diagram 9, Diamond of Nine Blocks - Spot Bronson"; linen. See "Related Publications." Item is one of 13 items that are Dorothy Burton's interpretation of the drafts on pages 66-72 in the book "Domestic manufacturer's Assistant and Family Directory in the Arts of Weaving and Dyeing" by J. and R. Bronson, published 1817. She published them in "Versatile Bronson" on pages 13-21....View Full Record
Handwoven sample - royal blue mat. Tagged, "Diagram 8, Diamond Diaper" - Spot Bronson"; linen. See "Related Publications." Item is one of 13 items that are Dorothy Burton's interpretation of the drafts on pages 66-72 in the book "Domestic manufacturer's Assistant and Family Directory in the Arts of Weaving and Dyeing" by J. and R. Bronson, published 1817. She published them in "Versatile Bronson" on pages 13-21....View Full Record
sampler 2005.1.19
Sampler - off white plain weave pile. Canvas work in blue. Wool, cotton and some synthetic....View Full Record
sweater 2005.1.2B
Knit sleeveless sweater top, matches jacket. Rust orange color. Round knit neckline....View Full Record
jacket 2005.1.3
Woven jacket dark brown, grey and cream wool. Lined, no buttons, set-in sleeve. Overshot weave. Stripes of geometric patterns. "Woolen overshot jacket. Sampler of treadlings on "Honeysuckle" threading. Tabby warp and weft, Harrisville Design singles; pattern weft, Harrisville Designs naturals at 10 e.p.i. Simplicity Pattern #9825 (1980)." - from photocopy in accession file. Photocopy is from one of two books by Drooker. Embroidering with the Loom, or Samplers You Can Use....View Full Record
scarf 2005.1.4
Scarf - white background with rainbow of bright colors - red, orange, green, blue, violet. Checkerboard pattern - stripes with plaid near each end. Fringe on each short end....View Full Record
View Additional Pages Previous 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 Next
Thousand Islands Arts Center - Home of the Handweaving Museum
314 John Street - Clayton, New York 13624
P: 315-686-4123 • Open Mon. to Fri. 9am - 5pm
Copyright © Thousand Islands Arts Center 2011. All Rights Reserved
Website Design By Henderson Digital Marketing


Dr Heidi Gilchrist MD - Encinitas Dermatologist | Recipe: Sunflower Seed "Cheese"
People who avoid dairy cheese often make a tasty "cheese" spread out of seeds or nuts.
Combine all ingredients in a blender or a food processor until smooth. You may need to stop and scrape down the sides periodically while blending. I prefer to cook the chopped garlic in a tiny bit of olive oil before adding it to the blender and processing the cheese, but you could also use it raw.


Falcon SB Gravity Concentrators | Sepro Mineral SystemsOur team of dedicated metallurgists and engineers continue to research and develop Falcon Gravity Concentrator technology, resulting in much higher efficiencies on the latest machine models. Sepro Mineral Systems recognizes that each gravity concentration circuit is unique and thus offers a line of mineral recovery.new super bowl gold concentrator model sb 4a,new compact gold mining machine - arhcResults 1 - 48 of 681 . Know More mining line machinery required - rrcserin mining line machinery required, new compact gold mining machine; about the mining. Get More Info. image . A sluice box can process a lot of material in a day and provide really efficient gold recovery. . Compact Super Strong Pry Bar:.BLUE BOWL CONCENTRATOR - fine gold recoverySee the blue bowl concentrator videos at bottom of page and see how easy it is to process your black sands and recover your fine gold. If you prefer a Sluice style fine gold cleanup tool, you may also wish to review our NEW Miller Table. You can't go wrong with either tool, both will remove your fine gold from heavy black.
The iCON i350 Gravity Concentrator has been called the 'Super iCON'. Gold Recovery Gravity Concentrator i350 The i350 Gravity Concentrator is revolutionizing the world of alluvial gold mining and dredging the same way the i150 has impacted the world of hard rock mining. This is a gravimetric mineral concentrator that.
Amazon: Blue Bowl Concentrator Kit w/Pump & Leg Levelers .
Enter your model number to make sure this fits. Concentrator kit includes the blue bowl, 3 plastic leg levelers, 750 gallon per hour 12 volt pump, 3 feet of 3/4 inch flex hose, pair of battery clips, and instructions; The blue bowl gold concentrator is completely portable and will quickly remove your fine gold from your.
Nike Brings Gold to Super Bowl 50 - Nike News - Nike, Inc.
Jan 19, 2016 . Nike Sneaker Design Workshops Celebrate Air Max Day. From March 22 to April 15, Nike will be hosting Nike: ON AIR, a design workshop series in Paris, London, New York, Seoul, Shanghai and Tokyo that engages participants in the Nike footwear design processes. From March 22 to April 15, Nike will.
A new goId centrifugai concentrator, the Falcon SuperBowl, was tested bath at ... Rec. recovery of gold. RMD rod mill discbarge. RPM rotations per minute. SAG semi-autogenous. SAG DIS. SAG mill discbarge. SB. SuperBowl. SB4 .. laboratory Falcon SB4 model cao recover over 90% of tungsten in the 8-25 #lm fraction.
Our team of dedicated metallurgists and engineers continue to research and develop Falcon Gravity Concentrator technology, resulting in much higher efficiencies on the latest machine models. Sepro Mineral Systems recognizes that each gravity concentration circuit is unique and thus offers a line of mineral recovery.
Results 1 - 48 of 681 . Know More mining line machinery required - rrcserin mining line machinery required, new compact gold mining machine; about the mining. Get More Info. image . A sluice box can process a lot of material in a day and provide really efficient gold recovery. . Compact Super Strong Pry Bar:.
See the blue bowl concentrator videos at bottom of page and see how easy it is to process your black sands and recover your fine gold. If you prefer a Sluice style fine gold cleanup tool, you may also wish to review our NEW Miller Table. You can't go wrong with either tool, both will remove your fine gold from heavy black.


Find out more about our SSHRC partners' research and publications.
The Partnership is organizing events across Canada. Join us at our next one!
Follow us on Twitter to stay informed of the latest developments in international justice.


The M.Tech Programme in Structural Engineering & Construction Management is offered by the Department of Civil Engineering, Sree Narayana Institute of Technology, which is approved by the AICTE and affiliated to the A P J Abdul Kalam Technological University, Trivandrum, Kerala. The intake is 24 students per year. This course aims at providing students with a solid background on the principles of project management & structural engineering. Students will be exposed to the theories and concepts of both concrete and steel design and analysis both at the element and system levels.


Whether you want to work in automotive sales or service, you should consider working for Krenzen Honda. We are a family-owned dealership with years of business under our belts in the Duluth area. You can fill out an application below to tell us all about yourself. We will review your application details, and if we think that you would make a great fit with our team, you will be hearing from us soon!
By submitting this form you will be submitting an application for employment at Krenzen Honda. We appreciate your interest in the positions mentioned above and will contact you shortly.


text:
Business / North of Scotland
Stewart Milne Group to create more than 250 new jobs in 2015
by Keith Findlay
February 9, 2015, 8:50 am Updated: February 9, 2015, 8:59 am
Glen Allison of Stewart Milne homes
North-east builder Stewart Milne Group said yesterday it expects to create 250 jobs to support growth in its homes and timber systems divisions in the year ahead.
It comes after the company added 160 jobs in 2014.
The Westhill-based group said this year's headcount increase would bolster divisions in both Scotland and north-west England, as well as its timber systems facility in Witney, Oxfordshire.
It added it was also forging new relationships with the supply chain and subcontractor community to support in-house teams.
Stewart Milne currently employs more than 2,000 subcontractors across its UK-wide operations.
It cited a healthy pipeline of new housing developments and growing demand for its timber systems as key drivers behind its recruitment drive, which will see the group's current 800-strong workforce mushroom in size by more than 30%.
Chief executive Glenn Allison said: "This is an enormously exciting time to be working in the construction sector as we bring premium new homes projects forward to meet market demand and continue to grow our timber systems business."
Glenn Allison
North-east business
Stewart Milne Group