text:
/****************************************************************************/
/*                                                                          */
/*                                 MENUACT                                  */
/*                          Menu Action Functions                           */
/*                       Digital Oscilloscope Project                       */
/*                                 EE/CS 52                                 */
/*                                                                          */
/****************************************************************************/

/*
   This file contains the functions for carrying out menu actions for the
   Digital Oscilloscope project.  These functions are invoked when the <Left>
   or <Right> key is pressed for a menu item.  Also included are the functions
   for displaying the current menu option selection.  The functions included
   are:
      display_mode      - display trigger mode
      display_scale     - display the scale type
      display_sweep     - display the sweep rate
      display_trg_delay - display the tigger delay
      display_trg_level - display the trigger level
      display_trg_slope - display the trigger slope
      get_trigger_mode  - get the current trigger mode
      mode_down         - go to the "next" trigger mode
      mode_up           - go to the "previous" trigger mode
      no_display        - nothing to display for option setting
      no_menu_action    - no action to perform for <Left> or <Right> key
      scale_down        - go to the "next" scale type
      scale_up          - go to the "previous" scale type
      set_scale         - set the scale type
      set_sweep         - set the sweep rate
      set_trg_delay     - set the tigger delay
      set_trg_level     - set the trigger level
      set_trg_slope     - set the trigger slope
      set_trigger_mode  - set the trigger mode
      sweep_down        - decrease the sweep rate
      sweep_up          - increase the sweep rate
      trg_delay_down    - decrease the trigger delay
      trg_delay_up      - increase the trigger delay
      trg_level_down    - decrease the trigger level
      trg_level_up      - increase the trigger level
      trg_slope_toggle  - toggle the trigger slope between "+" and "-"

   The local functions included are:
      adjust_trg_delay  - adjust the trigger delay for a new sweep rate
      cvt_num_field     - converts a numeric field value to a string

   The locally global variable definitions included are:
      delay         - current trigger delay
      level         - current trigger level
      scale         - current display scale type
      slope         - current trigger slope
      sweep         - current sweep rate
      sweep_rates   - table of information on possible sweep rates
      trigger_mode  - current triggering mode

   Revision History
      3/8/94   Glen George       Initial revision.
      3/13/94  Glen George       Updated comments.
      3/13/94  Glen George       Changed all arrays of constant strings to be
      				 static so compiler generates correct code.
      3/13/94  Glen George       Changed scale to type enum scale_type and
      				 output the selection as "None" or "Axes".
				 This will allow for easier future expansion.
      3/13/94  Glen George       Changed name of set_axes function (in
      				 tracutil.c) to set_display_scale.
      3/10/95  Glen George       Changed calculation of displayed trigger
      				 level to use constants MIN_TRG_LEVEL_SET and
				 MAX_TRG_LEVEL_SET to get the trigger level
				 range.
      3/17/97  Glen George       Updated comments.
      5/3/06   Glen George       Changed sweep definitions to include new
      				 sweep rates of 100 ns, 200 ns, 500 ns, and
			         1 us and updated functions to handle these
				 new rates.
      5/9/06   Glen George       Added new a triggering mode (automatic
                                 triggering) and a new scale (grid) and
                                 updated functions to implement these options.
      5/9/06   Glen George       Added functions for setting the triggering
                                 mode and scale by going up and down the list
                                 of possibilities instead of just toggling
                                 between one of two possibilities (since there
				 are more than two now).
      5/9/06   Glen George       Added accessor function (get_trigger_mode)
                                 to be able to get the current trigger mode.
*/

/* library include files */
  /* none */

/* local include files */
#include  "interfac.h"
#include  "scopedef.h"
#include  "lcdout.h"
#include  "menuact.h"
#include  "tracutil.h"

/* local function declarations */
static void  adjust_trg_delay(int, int);       /* adjust the trigger delay for new sweep */
static void  cvt_num_field(long int, char *);	/* convert a number to a string */

/* locally global variables */

/* trace parameters */
static enum trigger_type   trigger_mode; /* current triggering mode */
static enum scale_type     scale;	 /* current scale type */
static int		   sweep;        /* sweep rate index */
static int		   level;	 /* current trigger level */
static enum slope_type     slope;	 /* current trigger slope */
static long int	           delay;	 /* current trigger delay */

/* sweep rate information */
static const struct sweep_info  sweep_rates[] =
    { { 10000000L, " 100 ns" },
      {  5000000L, " 200 ns" },
      {  2000000L, " 500 ns" },
      {  1000000L, " 1 \004s  " },
      {   500000L, " 2 \004s  " },
      {   200000L, " 5 \004s  " },
      {   100000L, " 10 \004s " },
      {    50000L, " 20 \004s " },
      {    20000L, " 50 \004s " },
      {    10000L, " 100 \004s" },
      {     5000L, " 200 \004s" },
      {     2000L, " 500 \004s" },
      {     1000L, " 1 ms  "    },
      {      500L, " 2 ms  "    },
      {      200L, " 5 ms  "    },
      {      100L, " 10 ms "    },
      {       50L, " 20 ms "    } };

/*
   no_menu_action

   Description:      This function handles a menu action when there is nothing
                     to be done.  It just returns.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: None.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  no_menu_action()
{
    /* variables */
      /* none */

    /* nothing to do - return */
    return;

}

/*
   no_display

   Description:      This function handles displaying a menu option's setting
                     when there is nothing to display.  It just returns,
		     ignoring all arguments.

   Arguments:        x_pos (int) - x position (in character cells) at which to
   				   display the menu option (not used).
   		     y_pos (int) - y position (in character cells) at which to
   				   display the menu option (not used).
		     style (int) - style with which to display the menu option
		     		   (not used).
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: None.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  no_display(int x_pos, int y_pos, int style)
{
    /* variables */
      /* none */

    /* nothing to do - return */
    return;

}

/*
   set_trigger_mode

   Description:      This function sets the triggering mode to the passed
                     value.

   Arguments:        m (enum trigger_type) - mode to which to set the
   					     triggering mode.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: trigger_mode - initialized to the passed value.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  set_trigger_mode(enum trigger_type m)
{
    /* variables */
      /* none */

    /* set the trigger mode */
    trigger_mode = m;

    /* set the new mode */
    set_mode(trigger_mode);

    /* all done setting the trigger mode - return */
    return;

}

/*
   get_trigger_mode

   Description:      This function returns the current triggering mode.

   Arguments:        None.
   Return Value:     (enum trigger_type) - current triggering mode.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: trigger_mode - value is returned (not changed).

   Author:           Glen George
   Last Modified:    May 9, 2006

*/

enum trigger_type  get_trigger_mode()
{
    /* variables */
      /* none */

    /* return the current trigger mode */
    return  trigger_mode;

}

/*
   mode_down

   Description:      This function handles moving down the list of trigger
                     modes.  It changes to the "next" triggering mode and
                     sets that as the current mode.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: trigger_mode - changed to "next" trigger mode.

   Author:           Glen George
   Last Modified:    May 9, 2006

*/

void  mode_down()
{
    /* variables */
      /* none */

    /* move to the "next" triggering mode */
    if (trigger_mode == NORMAL_TRIGGER)
        trigger_mode = AUTO_TRIGGER;
    else if (trigger_mode == AUTO_TRIGGER)
        trigger_mode = ONESHOT_TRIGGER;
    else
        trigger_mode = NORMAL_TRIGGER;

    /* set the new mode */
    set_mode(trigger_mode);

    /* all done with the trigger mode - return */
    return;

}

/*
   mode_up

   Description:      This function handles moving up the list of trigger
                     modes.  It changes to the "previous" triggering mode and
                     sets that as the current mode.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: trigger_mode - changed to "previous" trigger mode.

   Author:           Glen George
   Last Modified:    May 9, 2006

*/

void  mode_up()
{
    /* variables */
      /* none */

    /* move to the "previous" triggering mode */
    if (trigger_mode == NORMAL_TRIGGER)
        trigger_mode = ONESHOT_TRIGGER;
    else if (trigger_mode == AUTO_TRIGGER)
        trigger_mode = NORMAL_TRIGGER;
    else
        trigger_mode = AUTO_TRIGGER;

    /* set the new mode */
    set_mode(trigger_mode);

    /* all done with the trigger mode - return */
    return;

}

/*
   display_mode

   Description:      This function displays the current triggering mode at the
                     passed position, in the passed style.

   Arguments:        x_pos (int) - x position (in character cells) at which to
   				   display the trigger mode.
   		     y_pos (int) - y position (in character cells) at which to
   				   display the trigger mode.
		     style (int) - style with which to display the trigger
		     		   mode.
   Return Value:     None.

   Input:            None.
   Output:           The trigger mode is displayed at the passed position on
   		     the screen.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: trigger_mode - determines which string is displayed.

   Author:           Glen George
   Last Modified:    May 9, 2006

*/

void  display_mode(int x_pos, int y_pos, int style)
{
    /* variables */

    /* the mode strings (must match enumerated type) */
    const static char * const  modes[] =  {  " Normal   ",
                                             " Automatic",
                                             " One-Shot "  };

    /* display the trigger mode */
    plot_string(x_pos, y_pos, modes[trigger_mode], style);

    /* all done displaying the trigger mode - return */
    return;

}

/*
   set_scale

   Description:      This function sets the scale type to the passed value.

   Arguments:        s (enum scale_type) - scale type to which to initialize
   					   the scale status.
   Return Value:     None.

   Input:            None.
   Output:           The new trace display is updated with the new scale.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: scale - initialized to the passed value.

   Author:           Glen George
   Last Modified:    Mar. 13, 1994

*/

void  set_scale(enum scale_type s)
{
    /* variables */
      /* none */

    /* set the scale type */
    scale = s;

    /* output the scale appropriately */
    set_display_scale(scale);

    /* all done setting the scale type - return */
    return;

}

/*
   scale_down

   Description:      This function handles moving down the list of scale
                     types.  It changes to the "next" type of scale and sets
   		     this as the current scale type.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           The new scale is output to the trace display.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: scale - changed to the "next" scale type.

   Author:           Glen George
   Last Modified:    May 9, 2006

*/

void  scale_down()
{
    /* variables */
      /* none */

    /* change to the "next" scale type */
    if (scale == SCALE_NONE)
        scale = SCALE_AXES;
    else if (scale == SCALE_AXES)
        scale = SCALE_GRID;
    else
        scale = SCALE_NONE;

    /* set the scale type */
    set_display_scale(scale);

    /* all done with toggling the scale type - return */
    return;

}

/*
   scale_up

   Description:      This function handles moving up the list of scale types.
                     It changes to the "previous" type of scale and sets this
   		     as the current scale type.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           The new scale is output to the trace display.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: scale - changed to the "previous" scale type.

   Author:           Glen George
   Last Modified:    May 9, 2006

*/

void  scale_up()
{
    /* variables */
      /* none */

    /* change to the "previous" scale type */
    if (scale == SCALE_NONE)
        scale = SCALE_GRID;
    else if (scale == SCALE_AXES)
        scale = SCALE_NONE;
    else
        scale = SCALE_AXES;

    /* set the scale type */
    set_display_scale(scale);

    /* all done with toggling the scale type - return */
    return;

}

/*
   display_scale

   Description:      This function displays the current scale type at the
                     passed position, in the passed style.

   Arguments:        x_pos (int) - x position (in character cells) at which to
   				   display the scale type.
   		     y_pos (int) - y position (in character cells) at which to
   				   display the scale type.
		     style (int) - style with which to display the scale type.
   Return Value:     None.

   Input:            None.
   Output:           The scale type is displayed at the passed position on the
   		     display.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: scale - determines which string is displayed.

   Author:           Glen George
   Last Modified:    Mar. 13, 1994

*/

void  display_scale(int x_pos, int y_pos, int style)
{
    /* variables */

    /* the scale type strings (must match enumerated type) */
    const static char * const  scale_stat[] =  {  " None",
                                                  " Axes",
                                                  " Grid"  };

    /* display the scale status */
    plot_string(x_pos, y_pos, scale_stat[scale], style);

    /* all done displaying the scale status - return */
    return;

}

/*
   set_sweep

   Description:      This function sets the sweep rate to the passed value.
                     The passed value gives the sweep rate to choose from the
		     list of sweep rates (it gives the list index).

   Arguments:        s (int) - index into the list of sweep rates to which to
   			       set the current sweep rate.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   The passed index is not checked for validity.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: sweep - initialized to the passed value.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  set_sweep(int s)
{
    /* variables */
    int  sample_size;		/* sample size for this sweep rate */

    /* set the new sweep rate */
    sweep = s;

    /* set the sweep rate for the hardware */
    sample_size = set_sample_rate(sweep_rates[sweep].sample_rate);
    /* also set the sample size for the trace capture */
    set_trace_size(sample_size);

    /* all done initializing the sweep rate - return */
    return;

}

/*
   sweep_down

   Description:      This function handles decreasing the current sweep rate.
   		     The new sweep rate (and sample size) is sent to the
		     hardware (and trace routines).  If an attempt is made to
		     lower the sweep rate below the minimum value it is not
		     changed.  This routine also updates the sweep delay based
		     on the new sweep rate (to keep the delay time constant).

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: sweep - decremented if not already 0.
   		     delay - increased to keep delay time constant.

   Known Bugs:       The updated delay time is not displayed.  Since the time
   		     is typically only rounded to the new sample rate, this is
		     not a major problem.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  sweep_down()
{
    /* variables */
    int  sample_size;		/* sample size for the new sweep rate */

    /* decrease the sweep rate, if not already the minimum */
    if (sweep > 0)  {
        /* not at minimum, adjust delay for new sweep */
	adjust_trg_delay(sweep, (sweep - 1));
	/* now set new sweep rate */
        sweep--;
    }

    /* set the sweep rate for the hardware */
    sample_size = set_sample_rate(sweep_rates[sweep].sample_rate);
    /* also set the sample size for the trace capture */
    set_trace_size(sample_size);

    /* all done with lowering the sweep rate - return */
    return;

}

/*
   sweep_up

   Description:      This function handles increasing the current sweep rate.
   		     The new sweep rate (and sample size) is sent to the
		     hardware (and trace routines).  If an attempt is made to
		     raise the sweep rate above the maximum value it is not
		     changed.  This routine also updates the sweep delay based
		     on the new sweep rate (to keep the delay time constant).

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: sweep - incremented if not already the maximum value.
   		     delay - decreased to keep delay time constant.

   Known Bugs:       The updated delay time is not displayed.  Since the time
   		     is typically only rounded to the new sample rate, this is
		     not a major problem.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  sweep_up()
{
    /* variables */
    int  sample_size;		/* sample size for the new sweep rate */

    /* increase the sweep rate, if not already the maximum */
    if (sweep < (NO_SWEEP_RATES - 1))  {
        /* not at maximum, adjust delay for new sweep */
	adjust_trg_delay(sweep, (sweep + 1));
	/* now set new sweep rate */
        sweep++;
    }

    /* set the sweep rate for the hardware */
    sample_size = set_sample_rate(sweep_rates[sweep].sample_rate);
    /* also set the sample size for the trace capture */
    set_trace_size(sample_size);

    /* all done with raising the sweep rate - return */
    return;

}

/*
   display_sweep

   Description:      This function displays the current sweep rate at the
                     passed position, in the passed style.

   Arguments:        x_pos (int) - x position (in character cells) at which to
   				   display the sweep rate.
   		     y_pos (int) - y position (in character cells) at which to
   				   display the sweep rate.
		     style (int) - style with which to display the sweep rate.
   Return Value:     None.

   Input:            None.
   Output:           The sweep rate is displayed at the passed position on the
   		     display.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: sweep - determines which string is displayed.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  display_sweep(int x_pos, int y_pos, int style)
{
    /* variables */
      /* none */

    /* display the sweep rate */
    plot_string(x_pos, y_pos, sweep_rates[sweep].s, style);

    /* all done displaying the sweep rate - return */
    return;

}

/*
   set_trg_level

   Description:      This function sets the trigger level to the passed value.

   Arguments:        l (int) - value to which to set the trigger level.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   The passed value is not checked for validity.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: level - initialized to the passed value.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  set_trg_level(int l)
{
    /* variables */
      /* none */

    /* set the trigger level */
    level = l;

    /* set the trigger level in hardware too */
    set_trigger(level, slope);

    /* all done initializing the trigger level - return */
    return;

}

/*
   trg_level_down

   Description:      This function handles decreasing the current trigger
   		     level.  The new trigger level is sent to the hardware.
		     If an attempt is made to lower the trigger level below
		     the minimum value it is not changed.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: level - decremented if not already at the minimum value.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  trg_level_down()
{
    /* variables */
      /* none */

    /* decrease the trigger level, if not already the minimum */
    if (level > MIN_TRG_LEVEL_SET)
        level--;

    /* set the trigger level for the hardware */
    set_trigger(level, slope);

    /* all done with lowering the trigger level - return */
    return;

}

/*
   trg_level_up

   Description:      This function handles increasing the current trigger
   		     level.  The new trigger level is sent to the hardware.
		     If an attempt is made to raise the trigger level above
		     the maximum value it is not changed.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: level - incremented if not already the maximum value.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  trg_level_up()
{
    /* variables */
      /* none */

    /* increase the trigger level, if not already the maximum */
    if (level < MAX_TRG_LEVEL_SET)
        level++;

    /* tell the hardware the new trigger level */
    set_trigger(level, slope);

    /* all done raising the trigger level - return */
    return;

}

/*
   display_trg_level

   Description:      This function displays the current trigger level at the
                     passed position, in the passed style.

   Arguments:        x_pos (int) - x position (in character cells) at which to
   				   display the trigger level.
   		     y_pos (int) - y position (in character cells) at which to
   				   display the trigger level.
		     style (int) - style with which to display the trigger
		     		   level.
   Return Value:     None.

   Input:            None.
   Output:           The trigger level is displayed at the passed position on
   		     the display.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: level - determines the value displayed.

   Author:           Glen George
   Last Modified:    Mar. 10, 1995

*/

void  display_trg_level(int x_pos, int y_pos, int style)
{
    /* variables */
    char      level_str[] = "        "; /* string containing the trigger level */
    long int  l;			/* trigger level in mV */

    /* compute the trigger level in millivolts */
    l = ((long int) MAX_LEVEL - MIN_LEVEL) * level / (MAX_TRG_LEVEL_SET - MIN_TRG_LEVEL_SET) + MIN_LEVEL;

    /* convert the level to the string (leave first character blank) */
    cvt_num_field(l, &level_str[1]);

    /* add in the units */
    level_str[7] = 'V';

    /* now finally display the trigger level */
    plot_string(x_pos, y_pos, level_str, style);

    /* all done displaying the trigger level - return */
    return;

}

/*
   set_trg_slope

   Description:      This function sets the trigger slope to the passed value.

   Arguments:        s (enum slope_type) - trigger slope type to which to set
   					   the locally global slope.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: slope - set to the passed value.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  set_trg_slope(enum slope_type s)
{
    /* variables */
      /* none */

    /* set the slope type */
    slope = s;

    /* also tell the hardware what the slope is */
    set_trigger(level, slope);

    /* all done setting the trigger slope - return */
    return;

}

/*
   trg_slope_toggle

   Description:      This function handles toggling (and setting) the current
   		     trigger slope.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: slope - toggled.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  trg_slope_toggle()
{
    /* variables */
      /* none */

    /* toggle the trigger slope */
    if (slope == SLOPE_POSITIVE)
        slope = SLOPE_NEGATIVE;
    else
        slope = SLOPE_POSITIVE;

    /* set the new trigger slope */
    set_trigger(level, slope);

    /* all done with the trigger slope - return */
    return;

}

/*
   display_trg_slope

   Description:      This function displays the current trigger slope at the
                     passed position, in the passed style.

   Arguments:        x_pos (int) - x position (in character cells) at which to
   				   display the trigger slope.
   		     y_pos (int) - y position (in character cells) at which to
   				   display the trigger slope.
		     style (int) - style with which to display the trigger
		     		   slope.
   Return Value:     None.

   Input:            None.
   Output:           The trigger slope is displayed at the passed position on
   		     the screen.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: slope - determines which string is displayed.

   Author:           Glen George
   Last Modified:    Mar. 13, 1994

*/

void  display_trg_slope(int x_pos, int y_pos, int style)
{
    /* variables */

    /* the trigger slope strings (must match enumerated type) */
    const static char * const  slopes[] =  {  " +", " -"  };

    /* display the trigger slope */
    plot_string(x_pos, y_pos, slopes[slope], style);

    /* all done displaying the trigger slope - return */
    return;

}

/*
   set_trg_delay

   Description:      This function sets the trigger delay to the passed value.

   Arguments:        d (long int) - value to which to set the trigger delay.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   The passed value is not checked for validity.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: delay - initialized to the passed value.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  set_trg_delay(long int d)
{
    /* variables */
      /* none */

    /* set the trigger delay */
    delay = d;

    /* set the trigger delay in hardware too */
    set_delay(delay);

    /* all done initializing the trigger delay - return */
    return;

}

/*
   trg_delay_down

   Description:      This function handles decreasing the current trigger
   		     delay.  The new trigger delay is sent to the hardware.
		     If an attempt is made to lower the trigger delay below
		     the minimum value it is not changed.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: delay - decremented if not already at the minimum value.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  trg_delay_down()
{
    /* variables */
      /* none */

    /* decrease the trigger delay, if not already the minimum */
    if (delay > MIN_DELAY)
        delay--;

    /* set the trigger delay for the hardware */
    set_delay(delay);

    /* all done with lowering the trigger delay - return */
    return;

}

/*
   trg_delay_up

   Description:      This function handles increasing the current trigger
   		     delay.  The new trigger delay is sent to the hardware.
		     If an attempt is made to raise the trigger delay above
		     the maximum value it is not changed.

   Arguments:        None.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: delay - incremented if not already the maximum value.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

void  trg_delay_up()
{
    /* variables */
      /* none */

    /* increase the trigger delay, if not already the maximum */
    if (delay < MAX_DELAY)
        delay++;

    /* tell the hardware the new trigger delay */
    set_delay(delay);

    /* all done raising the trigger delay - return */
    return;

}

/*
   adjust_trg_delay

   Description:      This function adjusts the trigger delay for a new sweep
   		     rate.  The factor to adjust the delay by is determined
		     by looking up the sample rates in the sweep_rates array.
		     If the delay goes out of range, due to the adjustment it
		     is reset to the maximum or minimum valid value.

   Arguments:        old_sweep (int) - old sweep rate (index into sweep_rates
   				       array).
		     new_sweep (int) - new sweep rate (index into sweep_rates
   				       array).
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       The delay is multiplied by 10 times the ratio of the
   		     sweep sample rates then divided by 10.  This is done to
		     avoid floating point arithmetic and integer truncation
		     problems.
   Data Structures:  None.

   Global Variables: delay - adjusted based on passed sweep rates.

   Known Bugs:       The updated delay time is not displayed.  Since the time
   		     is typically only rounded to the new sample rate, this is
		     not a major problem.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

static void  adjust_trg_delay(int old_sweep, int new_sweep)
{
    /* variables */
      /* none */

    /* multiply by 10 times the ratio of sweep rates */
    delay *= (10 * sweep_rates[new_sweep].sample_rate) / sweep_rates[old_sweep].sample_rate;
    /* now divide the factor of 10 back out */
    delay /= 10;

    /* make sure delay is not out of range */
    if (delay > MAX_DELAY)
        /* delay is too large - set to maximum */
        delay = MAX_DELAY;
    if (delay < MIN_DELAY)
        /* delay is too small - set to minimum */
	delay = MIN_DELAY;

    /* tell the hardware the new trigger delay */
    set_delay(delay);

    /* all done adjusting the trigger delay - return */
    return;

}

/*
   display_trg_delay

   Description:      This function displays the current trigger delay at the
                     passed position, in the passed style.

   Arguments:        x_pos (int) - x position (in character cells) at which to
   				   display the trigger delay.
   		     y_pos (int) - y position (in character cells) at which to
   				   display the trigger delay.
		     style (int) - style with which to display the trigger
		     		   delay.
   Return Value:     None.

   Input:            None.
   Output:           The trigger delay is displayed at the passed position on
   		     the display.

   Error Handling:   None.

   Algorithms:       None.
   Data Structures:  None.

   Global Variables: delay - determines the value displayed.

   Author:           Glen George
   Last Modified:    May 3, 2006

*/

void  display_trg_delay(int x_pos, int y_pos, int style)
{
    /* variables */
    char      delay_str[] = "         "; /* string containing the trigger delay */
    long int  units_adj;		 /* adjustment to get to microseconds */

    long int  d;                         /* delay in appropriate units */

    /* compute the delay in the appropriate units */
    /* have to watch out for overflow, so be careful */
    if (sweep_rates[sweep].sample_rate > 1000000L)  {
        /* have a fast sweep rate, could overflow */
        /* first compute in units of 100 ns */
        d = delay * (10000000L / sweep_rates[sweep].sample_rate);
	/* now convert to nanoseconds */
	d *= 100L;
	/* need to divide by 1000 to get to microseconds */
	units_adj = 1000;
    }
    else  {
        /* slow sweep rate, don't have to worry about overflow */
        d = delay * (1000000L / sweep_rates[sweep].sample_rate);
	/* already in microseconds, so adjustment is 1 */
	units_adj = 1;
    }

    /* convert it to the string (leave first character blank) */
    cvt_num_field(d, &delay_str[1]);

    /* add in the units */
    if (((d / units_adj) < 1000) && ((d / units_adj) > -1000) && (units_adj == 1000)) {
        /* delay is in microseconds */
	delay_str[7] = '\004';
	delay_str[8] = 's';
    }
    else if (((d / units_adj) < 1000000) && ((d / units_adj) > -1000000)) {
        /* delay is in milliseconds */
	delay_str[7] = 'm';
	delay_str[8] = 's';
    }
    else if (((d / units_adj) < 1000000000) && ((d / units_adj) > -1000000000))  {
        /* delay is in seconds */
	delay_str[7] = 's';
	delay_str[8] = ' ';
    }
    else  {
        /* delay is in kiloseconds */
	delay_str[7] = 'k';
	delay_str[8] = 's';
    }

    /* now actually display the trigger delay */
    plot_string(x_pos, y_pos, delay_str, style);

    /* all done displaying the trigger delay - return */
    return;

}

/*
   cvt_num_field

   Description:      This function converts the passed number (numeric field
                     value) to a string and returns that in the passed string
		     reference.  The number may be signed, and a sign (+ or -)
		     is always generated.  The number is assumed to have three
		     digits to the right of the decimal point.  Only the four
		     most significant digits of the number are displayed and
		     the decimal point is shifted appropriately.  (Four digits
		     are always generated by the function).

   Arguments:        n (long int) - numeric field value to convert.
   		     s (char *)   - pointer to string in which to return the
		     		    converted field value.
   Return Value:     None.

   Input:            None.
   Output:           None.

   Error Handling:   None.

   Algorithms:       The algorithm used assumes four (4) digits are being
   		     converted.
   Data Structures:  None.

   Global Variables: None.

   Known Bugs:       If the passed long int is the largest negative long int,
   		     the function will display garbage.

   Author:           Glen George
   Last Modified:    Mar. 8, 1994

*/

static void  cvt_num_field(long int n, char *s)
{
    /* variables */
    int  dp = 3;		/* digits to right of decimal point */
    int  d;			/* digit weight (power of 10) */

    int  i = 0;			/* string index */

    /* first get the sign (and make n positive for conversion) */
    if (n < 0)  {
        /* n is negative, set sign and convert to positive */
	s[i++] = '-';
	n = -n;
    }
    else  {
        /* n is positive, set sign only */
	s[i++] = '+';
    }

    /* make sure there are no more than 4 significant digits */
    while (n > 9999)  {
        /* have more than 4 digits - get rid of one */
	n /= 10;
	/* adjust the decimal point */
	dp--;
    }

    /* if decimal point is non-positive, make positive */
    /* (assume will take care of adjustment with output units in this case) */
    while (dp <= 0)
       dp += 3;

    /* adjust dp to be digits to the right of the decimal point */
    /* (assuming 4 digits) */
    dp = 4 - dp;

    /* finally, loop getting and converting digits */
    for (d = 1000; d > 0; d /= 10)  {

        /* check if need decimal the decimal point now */
	if (dp-- == 0)
	    /* time for decimal point */
	    s[i++] = '.';

	/* get and convert this digit */
	s[i++] = (n / d) + '0';
	/* remove this digit from n */
	n %= d;
    }

    /* all done converting the number, return */
    return;

}


text:
No race should seem superior to others, says minister Paul Low
Source: The Malay Mail Online
Minister in the Prime Minister's department Datuk Paul Low delivers a speech during the Suhakam forum in conjunction with World Human Rights Day, Kuala Lumpur December 8, 2016. ― Picture by Choo Choy May
KUALA LUMPUR, Dec 25 — Malaysians should avoid ethnic nationalism which will divide the fragile state of multiculturalism here, Datuk Paul Low said today.
The minister in the Prime Minister's Department said one race should not be made to seem better than other races as it goes against the nation's constitution.
"We must never put the country in a state where we have ethnic nationalism, where one ethnic group says it is superior than the other.
"We should not allow ethnic nationalism to rise in this country. Such ethnic nationalism will basically expound a philosophy of supremacy, a philosophy of exclusiveness," Low said during his speech at the Christian Federation of Malaysia Christmas High Tea. Read more →
Human Rights & Wrongs	ethnic nationalism, liberalism, Paul Low
Street protests open doors to liberalism, Muslims warned ahead of Bersih 5
November 11, 2016 Coordinator
KUALA LUMPUR, Nov 11 — Federal Islamic authorities cautioned Muslims today against street protests that it said would invite liberalism, just a week before the Bersih 5 rally which will be held on November 19.
The Friday sermon prepared by the Malaysian Islamic Development Department (Jakim) expressed its concern that more Muslims are joining street protests driven by discontent, allegedly spurred by unnamed parties and uncensored social media statements.
"Yes, whether we realise or not, therein lies an idea of the liberal democracy ideology that is concealing itself behind the struggle for democracy and fundamental rights," said the sermon distributed to mosques nationwide.
"The truth is, they wish to install certain individuals who are ready to follow their orders and spread this ideology to make this society more open to accept liberal values."
Jakim said Islam endorses mass gatherings as part of its worship as a sign of protest against blasphemy and ignorance, but such events must be done with civility. Read more →
Human Rights & Wrongs	Bersih 5, Department of Islamic Development Malaysia (Jakim), liberalism
Liberalism Conference 2016: Can Liberalism Save Malaysia?
Who is this for and how to register?
We welcome everyone to attend this conference. Fees start at RM 100.00 for adults and RM 50.00 for students to register please click here
Liberalism in Malaysia
Referred to as either Libertarianism in the United States or Classical Liberalism in the United Kingdom, the term Liberalism has become increasingly misunderstood in Malaysia.
Liberalism has in fact been part and parcel of Malaysia's genesis. On 31 August 1957, Tunku Abdul Rahman read out the Proclamation of Independence which included the words (that the Federation) "shall be for ever a sovereign democratic and independent State founded upon the principles of liberty and justice and ever seeking the welfare and happiness of its people…". Our Rukun Negara which came about after the tragedy of 13 May 1969 held that Malaysia aspires to achieve unity amongst its people by "ensuring a liberal approach to her rich and diverse cultural traditions". Vision 2020 also holds that one day Malaysians will live in a society "that is democratic, liberal and tolerant, caring, economically just and equitable, progressive and prosperous."
Liberalism forms an important part of our nation's birth, it was referred to during our greatest moment of crisis and it is one of our greatest aspirations for our future. So what does liberalism have to say about the challenges faced by our country today? How can liberal ideas be used to formulate a solution? Can liberalism save Malaysia?
This conference will explore the big issues, to spark a debate about the role of liberal ideas in our country today.
What is the Conference about?
The conference explores the relevance of liberalism today in Malaysia. We begin with a discussion on Malaysia's future in an increasingly illiberal environment by Dr Razeen Sally, former Chair of IDEAS' Political Economy and Governance Programme and world class international trade expert. This is followed by a panel discussion on how liberalism can help avoid billion ringgit scandals involving Government linked companies including the infamous 1MDB Sovereign Wealth Fund. The conference then delves deeper into the concept of multiculturalism and the importance of liberalism in Malaysia – which neither forces assimilation nor restricts personal freedoms in the guise of achieving national harmony. Finally the conference looks into how Malaysia can move beyond race and religion in politics – and how liberalism may provide an answer to this dilemma.
Liberal Muslims being monitored, Parliament told
March 17, 2016 November 3, 2016 admin
KUALA LUMPUR: The Government has called liberal Muslims deviants, saying it would increase efforts to sway them back to traditional religious beliefs.
Minister in the Prime Minister's Department in charge of Islamic affairs Datuk Seri Jamil Khir Baharom said that these liberal groups would also be monitored and may have their publications censored if they try to post on print or electronic media.
In a reply to Nik Abduh Nik Abdul Aziz (PAS-Pasir Mas), Jamil said that the Government had made its stance clear against liberalism in a 2006 declaration during the 74th National Fatwa Council's muzakarah (discussion) task force on Malaysian Islamic affairs.
It had labelled that liberal movements contain "understandings which deviate from faith and Syariah". Read more →
Human Rights & Wrongs	liberalism, religion
Malaysia among nations least tolerant of atheists and freethinkers, says report
GENEVA, Dec 10 — Amid a global decline in religious belief, some governments are stepping up efforts to portray atheists and secularists as a danger to society and even as terrorists, according to a report issued today.
The study, by the International Humanist and Ethical Union (IHEU), pointed to "hate campaigns" launched by public figures against those who renounce the dominant or state religion in Muslim nations like Saudi Arabia, Malaysia and Egypt.
It said "the overwhelming majority of countries fail to respect the rights of atheists and freethinkers" as set out in UN treaties, adding that 13 states, all of them Muslim, had made apostasy or blasphemy against religion a capital offence. Read more →
Reports & Memorandums	Freedom of Thought Report, International Humanist and Ethical Union (IHEU), liberalism, secularism
Equality is not about being liberal, ex-judge tells former chief justice
July 2, 2015 April 6, 2017 admin
Source: The Malaysian Insider
Lawyer Gopal Sri Ram arrives at the Federal Court in Putrajaya, outside Kuala Lumpur on October 30, 2014. The Malaysian Insider/Najjua Zulkefli
A retired Federal Court judge has taken a former chief justice to task for claiming that liberal-minded judges are a threat to Malaysia's Islamic values as they used Western human rights as a benchmark to administer justice.
Datuk Seri Gopal Sri Ram said it was wrong for Tun Abdul Hamid Mohamad to label judges as liberals because those who sat on the bench were required to interpret the law correctly.
"It is a most unfair criticism to level against a Court of Appeal judgment which accorded equality to people different from us, purely on medical reasons," he told The Malaysian Insider.
Sri Ram said this in response to a report in Utusan Malaysia on Monday where Hamid was quoted as saying that the liberal judges had overlooked that the Federal Constitution recognised offences under Islamic law. Read more →
Human Rights & Wrongs	equality, Federal Constitution, Gopal Sri Ram, Judiciary, liberalism, Syahredzan Johan

redpajama_set_name: RedPajamaCommonCrawl


Tonight's Manx Grand Prix qualifying session was red flagged at around 7.50pm following four separate incidents on the course at Ballahutchin, Kerrowmoar, Ramsey Hairpin and the Bungalow.
Scott Campbell, Ross Richards and Stuart Hall were involved in the incident at Ballahutchin on the approach to Ballagarey with Richards and Hall taken by airmed to Nobles Hospital. Scott Campbell was reported as OK.
John Leigh Pemberton came off his machine at Ramsey Hairpin and was taken by airmed to Nobles hospital while Gavin Lupton (Bungalow) and Neil Gregory (Kerrowmoar) were both reported as OK following their accidents.
The injuries sustained by the three riders taken by airmed to Nobles hospital are not reported to be serious.


text:
News Radar
Looking for press releases of a particular company? Enter company name (or keyword) here.
PolyTechnos appoints Christian Schneider to Managing Partner/Successful IPO OncoMethylome Sciences
PolyTechnos Venture-Partners ("PolyTechnos") is pleased to announce the promotion of Christian Schneider from Partner to Managing Partner as of 01 July 2006 as well as the completed IPO of its advised-funds' portfolio company OncoMethylome Sciences S.A., a molecular diagnostics company with activities in Belgium, the Netherlands, and the U.S.
Christian Schneider promoted to Managing Partner
Christian Schneider, Ph.D., DVM, MBA, joined PolyTechnos in 2001 as Investment Manager and was promoted to Partner in July 2002. As the lead Partner for PolyTechnos' advised funds' portfolio company OncoMethylome Sciences (Euronext, Brussels and Amsterdam: ONCO), he has played a key role in shaping and implementing the company's strategy. OncoMethylome Sciences went public on the Euronext stock exchanges of Brussels and Amsterdam on 27 June 2006. Christian actively applied his expertise in medical product development and diagnostics on the board of OncoMethylome Sciences and in his board observer roles at Devgen (Euronext, Brussels: DEVG) and Jerini (Frankfurt Stock Exchange: JI4) prior to their IPOs in June 2005 and November 2005, respectively.
Before joining PolyTechnos, Christian worked with Centocor, U.S., a Johnson & Johnson company, in external R&D management, business development, operations, diagnostic and biotechnology R&D, and technology transfer. He specialized in oncology, immunology, and cardiology product development. Christian was a doctoral research fellow at Boehringer Mannheim, Germany (now Roche Diagnostics). He holds a doctorate degree in veterinary medicine and a Ph.D. in immunology, both from the University of Munich, as well as an MBA with focus on healthcare administration from Pennsylvania State University, Pennsylvania, U.S. In addition, Christian is a U.S.-certified ISO-9000 Lead Assessor.
Dirk Kanngiesser, PolyTechnos Founder and Managing Partner, comments: "Since his joining, Christian has considerably contributed to PolyTechnos' development to become one of the leading venture capital players in Europe. He was involved in three IPOs of our advised funds' portfolio companies. On behalf of all Managing Partners, I would like to express our thanks for his dedicated contribution to create value for our funds. We all look forward to a continuing enjoyable and successful cooperation".
OncoMethylome Sciences S.A. successfully completes IPO at Euronext
OncoMethylome Sciences went public at Euronext Brussels and Euronext Amsterdam on 27 June 2006 (Euronext: ONCO). The company was co-founded by PolyTechnos in 2003 with headquarters in Liège, Belgium, and subsidiaries in Amsterdam, the Netherlands, and Durham, North Carolina, U.S.. OncoMethylome Sciences develops patent-protected molecular tests to assist physicians in effectively detecting and treating cancer. Specifically, the company's tests are designed to help the physician accurately detect cancer in early stages of cancer development, predict a patient's response to drug therapy, and predict the likelihood of cancer recurrence.
With its IPO, the company has issued 3,373,334 new shares for a total amount of EUR 25.3 million, including the full exercise of a 15% greenshoe option, at a price of EUR 7.50 per share. The total number of outstanding shares now amounts to 10,450,954. The offering was organized by ING and Fortis as joint book runners and joint lead managers and Kempen & Co as co-manager. The new funds raised will enable the company to further execute its strategy and develop novel molecular tests in order to improve cancer patient care.
CEO Herman Spolders: "The fact that we were able to close our IPO in today's challenging market conditions reflects the positive feedback we received from the investment community about the quality of our company and its broad product pipeline. We are proud to be the first Eurolist Brussels listing this year […]".
With OncoMethylome Sciences, PolyTechnos' advised funds broug
Publisher Contact Information:
PolyTechnos Venture-Partners GmbH
+49-89-242262-23
andrea.baechle@polytechnos.com
Company profile of PolyTechnos Venture-Partners GmbH
Past press releases of PolyTechnos Venture-Partners GmbH.
Tech investments
From our Online Data Service
VC-backed companies
From our Radar
DATE AMOUNT SECTOR
Jun 29 €1.3M Security
Jun 28 €2.2M Database
Jun 28 €12.0M Materials
Jun 28 €5.5M Business applications
Jun 27 €3.0M Biopharmaceuticals
Jun 27 €10.0M Energy related
Jun 27 N/A Wireless applications
For information on Europe's most extensive database on technology funding click here!
Identiq
identiq raises $5m seed, launches privacy-first identity validation...
Nethone
nethone raised over $1 million from innovation nest
The Link App
the link app launches version 2.0
Addex Therapeutics
addex sucessfully raises chf40 million in capital increase
urban jungle raises £1m in seed funding to build tech-enabled home ...
About us Contact us Legal Information
Emerging Technology Research Europe Inc. All rights reserved.


text:
<?php

namespace Magento\Customer\CustomerData;

/**
 * Js layout data provider pool interface
 */
interface JsLayoutDataProviderPoolInterface
{
    /**
     * Get data
     *
     * @return array
     */
    public function getData();
}

redpajama_set_name: RedPajamaGithub


text:
You are here: Home>Locations>Bedworth>Hawkesbury/ Tackley Deserted Medieval Village
Hawkesbury/ Tackley Deserted Medieval Village
Description of this historic site
The possible site of Hawkesbury/Tackley deserted settlement which was of Medieval date. It is thought to have been situated 100m south of Hawkesbury Colliery Farm.
Please upload a photograph of this historic site.
Notes about this historic site
1 Hawkesbury c SP3685.
2 This area is now a disused colliery and Hawkesbury DMV has presumably been destroyed.
3 Dugdale refers to Hawksbury as being on the east side of the Sow and in the parish of Sow. The manor belonged to Coventry Priory until the Dissolution, when it was granted to the City of Coventry, who still held it in Dugdale's time. Dugdale does not refer to it directly as a deserted settlement. He shows it on his map of Knightlow Hundred as lying more or less due west of Ansty. The map shows Tackley to the NW of Hawkesbury. Dugdale describes Tackley as a place long since depopulated, with only certain grounds called Tackley in the parish of Foleshill to recall it.
4 Beresford refers to the lost hamlets of Hawkesbury and Tackley as being in Foleshill parish and says that collieries and canal junction have obliterated the evidence.
5 Greenwood's 1822 map shows linear settlement in an area labelled Hawkesbury, SE of Hawkesbury Hall and along what is now Lenton's Lane. Settlement is also shown to the NW of Hawkesbury Hall. No settlement named Tackley is shown.
6 The 1835 OS 1″ map shows a farm called Hawkesbury SW of Lenton's Lane, as well as Hawkesbury Hall. Other rail, canal and industrial features with the Hawkesbury name are also shown N and W of Hawkesbury Hall. No settlement named Tackley is shown.
7 cf West Midlands SMR No 3180 and 6666. These entries state that there is no visible evidence of either settlement and that perusal of tithe and enclosure maps revealed no clues as to possible sites.
8 VCH makes it clear that Hawkesbury was originally a wasteland holding in the north part of Sowe parish, centred on a farm at apx SP3683 (later called Main Pit Farm and largely destroyed by C19 infrastructure developments). The equivalent holding in Foleshill was Tackley, originally a woodland settlement, which consisted of scattered tenancies, never a nucleated village. Both Hawkesbury and Tackley contained tenants both of Coventry Priory and of other lay manors. Tackley is marked on a map of 1725 as one house, though it was assumed at that time to be in a depopulated state. The single house may have been either Hawkesbury Hall or Tolldish Hall: the latter is clearly a C17 house, whilst the former is a C18 building, possibly an extension of an earlier structure. The adoption of the Hawkesbury name from the area in Sowe parish took place in the mid C18.
9 Dugdale's map and the VCH history make it clear that Beresford's site cannot be that of a DMV called Hawkesford. Nor is it likely to be the site of a village called Tackley. However, it is possible that remains of scattered Medieval occupation may survive.
For the sources of these notes, see the
Timetrail record
produced by the Historic Environment Record.
Map marker in the right place? If not, please correct the map.
Bedworth (515)
Nuneaton (1256)
Deserted Villages (235)
Medieval - 1066-1539 (3120)
Alternative reference number
MWA463
Until the current planning application for Hawkesbury I have never heard any mention of a previous selltement called Tackley.
It is a surprise to me as Bedworth people tend to have historical knowledge passed down through generations.
By Bill Hancox (08/01/2021)
More from Bedworth
Exetension to St Nicholas Church Grounds
Early 19th century extension to St Nicholas Churchyard.
Possible Site of Bronze Age Axe Factory at Griff
The site of a possible stone axe factory dating to the Bronze Age. The site is located 900m north east of Collycroft.
Site of Tramway for Griff Granite Quarries
The site of a tramway which served Griff Granite Quarries. The tramway was in use during the Imperial period. It is marked on the Ordnance Survey map of 1902. It was situated 600m south east of Bermuda.
Medieval Coin found during excavations at Arbury
Findspot - a Medieval coin was found 400m west of The Rough.
More from Nuneaton
Site of Medieval Pit N of 16 Redwood Croft
The site of a Medieval pit which was excavated. It contained a fragment of 13th century pottery, and was situated in the area of Redwood Croft, Chilvers Coton.
Site of Quarry S of Lutterworth Road, Nuneaton
The site of a quarry which was in use during the Imperial period. It was situated on the west side of Quarry Lane, Nuneaton, and is marked on the first edition Ordnance Survey map of 1887.
Hawkesbury Junction Roving Bridge
Hawkesbury Junction cast iron Roving Bridge, a canal bridge built during the Imperial period, and situated 200m east of Coney Lane Bridge.
Site of Mine Shaft at Collycroft
The site of a mine shaft where coal was mined during the Imperial period. The mine shaft is marked on the Ordnance Survey map of 1886. It was situated 200m north west of Collycroft.
More from Deserted Villages
Deserted Settlement at Bishopton
The site of a deserted settlement dating to the Imperial period. The remains of the settlement are visible as an earthwork. Documentary evidence shows a reduction in houses occupied: 11 in 1841 and 4 by 1871. It is situated 750m south of Bishopton Hill.
Site of Deserted Settlement at Field Farm
The site of a deserted settlement dating to the Imperial period and known from documentary sources. It was situated 600m north east of Outhill.
Upper Woodcote Deserted Settlement
Documentary evidence suggests that this may have been the site of the Medieval deserted settlement of Upper Woodcote. The site is located to the south of the current Police Headquarters.
Yew Green
The possible site of a deserted Medieval settlement at Yew Green. The site is located on Hockley Road, Yew Green.


text:
The white monjita (Xolmis irupero) is a species of bird in the family Tyrannidae, the tyrant flycatchers. It is found in Brazil, in regions of Caatinga and Pantanal. It is also found in the Paraguay, Argentina, Bolivia, and Uruguay.
Its natural habitats are subtropical or tropical dry shrubland and heavily degraded former forest.

This is a bright white bird, with dark eyes, black legs, and a medium to short pointed bill. It has deep black borders on the outer wing, and a short notched tail.

References

External links
White monjita videos on the Internet Bird Collection
Stamps (for Paraguay) with ~RangeMap
White monjita photo gallery VIREO Photo-High Res
Photo-High Res; Article tropicalbirding–"Northwest Argentina"

white monjita
Birds of Brazil
Birds of the Pantanal
Birds of the Caatinga
Birds of Bolivia
Birds of Argentina
Birds of the South Region
Birds of Paraguay
Birds of Uruguay
white monjita
Taxa named by Louis Jean Pierre Vieillot
Taxonomy articles created by Polbot

redpajama_set_name: RedPajamaWikipedia


text:
25+ examples of how to improve usability, conversion and SEO
Let's Watch a Video
Track, analyze, and convert your visitors into buyers
30 Award Winning Website Designs
Business Digital marketing SEO Blog SEO Service
Post author By Yura
Post date Aug 26, 2021
No Comments on 30 Award Winning Website Designs
This service is created to evaluate websites based on different factors, including design, usability, content quality, and the creativity of their authors. Awwwards has been working since 2009, and its jury has proven to be highly professional. Recognition from this service means that developers have managed to stand out from the crowd and create something unique.
How do they evaluate?
Websites are evaluated based on:
design (40%);
convenience of use or usability (30%);
creativity (20%);
quality of design elements (10%).
The percentage signifies the weight of each parameter in the final grade and given awards. Websites can get the following titles:
Mobile Excellence – an evaluation method is based on Google's criteria for mobile website versions. The award is given to all websites getting more than 70 out of 100.
Mobile Site of the Week – a website must receive the Honorable Mention award and lead voting for the previous 3 months. In this case, it will be displayed on the main page of Awwwards;
Honorable Mention – granted to websites with the jury and trusted Awwwards user score no lower than 6.5%.
Site of the Day – given to websites with maximum scores.
Developer Award – if a website receives the Site of the Day title, it is evaluated by a separate jury of developers. For the Developer Award, the developer jury score must be higher than 7.0.
Site of the Month – the jury re-examines the websites with the highest scores at the end of each month. As you may have already guessed, they choose the best website. User scores are also taken into account.
Site of the Year – this title is a dream of all the Site of the Month winners + Awwwards favorites.
How do they give scores? After a website submits a request and receives confirmation, the website is forwarded to the jury. During the 5-day voting process, Awwwards users can vote for different websites.
After this, the jury discards 2 results (the lowest and the highest) and calculates the average rate based on the remaining scores. The user voting in Awwwards is designed to eliminate the possibility of fraud.
Lusion – May 2020
Special features: audio visualization, real-time particles effect, user motion visualization, a combination of different styles.
Edan Kwan launched the website in 2017. He claimed his goal was to bridge the gap between an abstract image concept and its practical implementation with the help of modern technologies. The Awwwards singled out the overall creativity and website design. The website has uncommon scrolling and interactive elements that respond to user actions.
Dogstudio – April 2020
Dogstudio is a creative studio uniting art, technology, and design since 2016.
Their offices are located in Belgium and Chicago, USA. On Awwwards, the website of Dogstudio received the maximum score for creativity. The jury was particularly pleased with the original scrolling and website navigation.
2018: Year in Review – March 2020
This website lets you reflect on the most prominent events and moments that happened on the web over the past year.
It is similar to a database of interesting projects. The Awwwards jury praised the design and creative look of the website. Moreover, the developer score is also high. Whereas, we want to highlight interesting cursor animation and scroll-based menu navigation.
Nomadic Tribe – makemepulse, February 2020
The website tells an interactive tale of nomadic tribes.
In addition to high scores for the creativity of developers and content quality, the website is well-optimized for mobile devices. It was awarded the Mobile Excellence title. The tale ensures seamless interaction with the audience, which greatly benefits the storytelling. The viewer feels really engaged in the story.
Everest – January 2020
Everest can help you to launch and promote your brand. Their portfolio includes marketing campaigns for such companies as Walmart, GEICO, Capital One, and Hilton. Their team created a great mobile version, and the developer jury also highly evaluated the website. The ripple effect activated during the navigation between different website elements is just great. Scrolling animation, design, and creativity deserve particular attention.
imabandi.to – December 2018
This website is dedicated to music. You can listen to the songs of Twenty One Pilots, enjoying an immersive experience. The website owners also cared about the storytelling part.
The listeners are asked to participate in a real adventure. They can escape from Dema (a fictional organization managed by 9 bishops) and uncover the meaning of several symbols. The musical duo and Spotify created the project. The Awwwards jury underscored gamification and background effects. The mobile website version is well-optimized.
Orano – November 2018
The project is dedicated to the peaceful atom. In particular, it tells about the ways to ensure the security of nuclear energy facilities.
The website has flawless navigation with the great transition from the grid to the full image. Its creators paid attention to both desktop and mobile versions. Orano received a high score from the developer jury, whereas the highest marks were given for its design and content quality.
Google Cloud Infrastructure – October 2018
Here is a new website by Google. It demonstrates the power and capabilities of the global Google infrastructure in terms of data analysis and encryption.
Awwwards praises clear and easy presentation of complex processes. In particular, the animation showing how Google Cloud works and the interactive map with all the main locations of Google. The maximum scores were given for creativity and design.
Robin Mastromarino – Portfolio, September 2018
Robin Mastromarino is a designer residing in Paris. This site is his portfolio.
The website has cool transition effects and intuitive navigation. There are no complicated menus or unclear elements. Just left-click and move right or left to navigate. The jury liked the quality of the content, its bright photos, and colors. The developer jury gave this website 7.71. A great score, isn't it?
Beyond Beauty – August 2018
This website is dedicated to 4 female celebrities. It offers you to learn more about the life of these women and see them from an unusual perspective.
The page has a lot of interesting solutions, but the distortion and mask transition effects deserved special attention of the jury. Timeline-based navigation also looks very innovative. Moreover, the developers created a nice mobile version
Foosball World Cup 18 – July 2018
Foosball is table football. Have you known that? The website was created in honor of the World Cup 2018 and allows playing several matches. The Awwwards jury pointed out the general futuristic design of the game and the original team selection menu. There is a version optimized for mobile devices.
Oat the Goat – June 2018
TThe New Zealand Ministry of Education initiated the website to promote the ideas of humanism. This is an interactive animated storybook.
The reader directly participates in the story, selects actions and replies in the dialogues. Actually, the jury called the interactivity one of the key strengths of this website. The design and content quality are also great.
Nike Reactor – May 2018
The primary idea behind the website is to show potential buyers how a person feels in new Nike sneakers.
The page displays a certain runner wearing sneakers based on the selected Nikes. Users can examine the runner or create their own 3D runner. Such a creative approach was highly evaluated by the Awwwards jury during the assessment. They also appreciated the mobile version of the website.
Design Canada – April 2018
This website tells the Canadian history of graphic design. It shows how Canada has turned from a colonial outpost into a dynamically developing multicultural society.
Of all evaluation criteria, its unique design received the highest score. The original navigation and pop-up sidebars make this design really memorable. Design Canada also has an award for its mobile version.
Gallery of emerging species – March 2018
This website was created to attract attention to endangered species. They provide brief information about each animal.
The jury liked the creativity of website developers. They also pointed out the horizontal scrolling navigation (just left-click the mouse, hold it, and go where you need). Another advantage – the website isn't overloaded with unnecessary information.
Couro Azul – February 2018
Couro Azul is a prominent player in the automotive, plane, and railway markets. They work with leather. The website tells about the innovative technologies used by the company and shares its story.
It was complimented on design. In particular, the jury admired background videos and the overall color selection for the background. The developer jury gave Couro Azul 7.1.
Active Theory v4 – January 2018
This is a portfolio of a team that develops VR and AR applications. In addition to the case studies, it also lists the used technologies.
The Awwwards jury complimented the menu solution and interactive home page which immediately sets the right mood. Other scores are mostly at the same level. Generally, the creativity and design were appreciated the most.
TAO Tajima Filmmaker – December 2017
The website belongs to a filmmaker from Tokyo working for the Tangram design studio. Basically, this is a portfolio.
It has original transitions between elements and a beautiful wave effect. The maximum score was given for creativity. The website was also evaluated by the developer jury and received 7,12. Moreover, at the end of 2017, this website won the annual award thanks to the great visuals that made it stand out from the competitors.
The New Mobile Workforce – November 2017
Visit this page to learn how Citrix's team helps Red Bull to customize and maintain their racing cars.
The Awwwards jury liked the menu design inspired by Formula 1. The "high-speed" transition between the website pages also perfectly complements the overall look. You can examine a racing car to learn more about its maintenance. The website received an award from the developer jury for its flawless mobile version.
In My World – October 2017
This website is a great choice for those who love discovering the lives of other people. It shows how war, poverty, and other disasters affect our mental health.
The project is a result of the cooperation with the photographer Robin Hammond. The website attracts with its social message and highly expressive photos. Every image shows a tragic fate which you can dig into. The stories with photos create a much stronger impression than plain text.
Gleek Chat – August 2017
Visit this page to learn how secure chats, calls, and video calls work. These services are offered to both individual and corporate users.
Assessing the website, the Awwwards jury highlighted point-to-point navigation and original transitions between website elements. The design is memorable and stands out from the competitors. The developer jury also awarded it.
OUIGO Let's play – June 2017
Want to play for a while? The game promotes a branch of SNCF (French National Railway Company). Basically, this is an analog of a standard browser game with a colorful design and an emphasis on railways. The experts appreciated the design, usability, and creativity of developers. The developer jury was also generous with an award.
We The Fans – May 2017
This website is dedicated to the fans of the Chicago Bears (an American football team). It tells about their life and love for their favorite team.
The received scores prove that the Awwwards experts really enjoyed the navigation implemented on different platforms. The menu also looks nice. The developers focused on visual elements. For example, users can make a virtual visit to stands and see the usual places of renowned fans.
Mendo – April 2017
Mendo is a store for book lovers with the main location in Amsterdam. The website promotes the products available in the store.
The usability and design of this website are well-developed. Awwwards complimented on the technical part (especially, the cart) and website search with numerous filters and intuitive functionality. The developer jury awarded this website with the 7,09 score.
A World With No Heroes – March 2017
Here you can explore Bolivia in a version of Tom Clancy's Ghost Recon Wildlands. The country is controlled by the drug cartel Santa Blanca. 50 cameras show users the details of this story.
The jury was particularly fond of an exciting interactive video game with ultra-realistic landscapes. The content also boasts great quality and creativity, which allowed the website to become the best website of March 2017.
For Honor Scars – February 2017
Take a look at another gaming website. Inspired by For Honor, this website details the stories of its heroes.
The user interaction is just perfect. You can view the 3D models of the heroes from any angle – they change their position as you browse the pages. While navigating, you can also watch a real battle.
Rainforest Wood Experience – January 2017
This website offers you to recall your connection with nature and realize the benefits of pollution-free products. They have a store selling barley sprouts and other similar products.
The website has impressive navigation and changing backgrounds. Users can feel like they see everything from a bird's eye-view. The jury also singled out the product selection menu which differs from menus in standard online stores.
Residente – December 2016
The website documents the travels of Residente (Rene Huan Perez Joglar). He is a musician who decided to discover the world.
The website received a high general score from the jury. They particularly liked a dot menu and website navigation. The developers placed a bet on interactivity and won. The website automatically detects your location to display interesting places visited by Residente on the map.
Paper Planes – November 2016
Here you can make a single action – throw a paper plane. At the same time, pop-ups will show the location of other paper planes on the globe.
To throw paper planes, you will need to use your smartphone. This website shows how a simple but professionally implemented idea can be highly successful. The jury appreciated the creativity and design, whereas the developers gave a very high score for the technical part – 8.67.
Discover Your Patronus – October 2016
This website is a pure treasure for Pottermans. After passing a simple test, every website visitor will know their Patronus.
The fans of Joanne Rowling's creativity will recognize renowned scenes from the movies. It is worth noting that this test is highly interactive, thanks to a set of tips. You don't just fill in the information, this is a mini-game. Such an approach resulted in a Site of the Month Awwwards and recognition from the developer jury.
After the brief analysis of the TOP websites according to Awwwards, we can make several general conclusions:
Developers shouldn't be afraid to challenge design standards
Interactivity and user interaction matter
Website design should be recognizable
More than 50% of the Site of the Month websites have a high-quality mobile version
Visualization is important. The jury likes original menus and navigation. Of course, this shouldn't harm usability.
The websites that have received the monthly award from Awwwards may serve as a guideline and the source of ideas. If you learn from the best and adapt their practices, this can help to promote your website.
Top 25 Creative Advertising Videos What Is Competitor Analysis? 19 Largest Marketing Companies in the World Top 5 Free Product Management Certifications 16 Ways to Handle Angry Customers 17 Best Website Builder For Small Business Five Second Test Customer Journey Map Templates What is Behavioral Marketing [+ Examples] What is Business Casual?


The what, where, why, and how of traveling. Join us as we search out planes, trains, automobiles, and road trips that get you there.
One of the things we decided to do on our road trip through Florida was to visit the Everglades. What's the best way to see the Everglades? On an airboat of course! We picked the Everglades Safari Park as our choice for a boat ride.
We have been on airboats before but this was a bit different. Since Everglades Safari Park is an officially licensed tour guide for the Everglades National Park they have to abide by the rules of the park. Don't expect high-speed thrill runs through the swamp. This is more of an educational outing. Awe heck, it is still a freakin' airboat so it's fun!
We learned a little, saw some wildlife, and I got goofy with a baby gator. The park seems to be struggling a bit and could use a little updating. But, it is still a nice stop if you are crossing the state on U.S. Route 41.
This work by Bubba Harmon is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
Permissions beyond the scope of this license may be available at http://www.bubbaharmon.com/.
and give credit to Bubba Harmon.


ANSYS is the very first tool to fulfill the prerequisites of new certificates. ANSYS provides the capability to monitor dependable and electrical performance in the plan process and complicated manufacturing system. ANSYS Mechanical comes with various licenses to pick from, and selecting the best one can be challenging.
If you're going to download the application ANSYS DesignSpace from a site that provides a database of downloadable software, you must reckon with the simple fact that if you install it on your computer, you'll also install the unwanted extras. In case the program ANSYS DesignSpace can be utilized to convert the data, such information will also be given. The program ANSYS DesignSpace has also been discovered in our database because of this. You may contact Ansys and receive a quote to buy a license for one or more of their goods. Make certain that you have your license key available.
With CATIA, design engineers have the capacity to model goods in the context of real-life behavior, permitting them to design in the era of experience. The single-window design consists of all facets of the workflowelectromagnetics, structures, thermal, fluids, and any blend of theseso you may predict the whole performance of a solution and gain results you can depend on. With RecurDyn Professional, design engineers can test several conditions, even when they're not easy to repeat. The greatest development team in simulation hasn't been sitting about for a year, they've been hard at work adding and improving functionality. The aim is to lessen the many facets to fewer nurbs surfaces, and for that reason remove the demand for virtual topology. The principal target of our website is to offer the user with a list of programs that support file extensions, in addition to that help to convert them to some other format. The gap within this solid is an important feature.
Some planning is needed to find good looking faces. Implementation of the improved navigation processAIM gives a high degree of automation and gives the capability to concentrate on the very best engineering practices. This procedure is going to have to be repeated several times, step-by-step. The sole tricky' part of this course of action is that you want to address the model at first before using the Worksheet view. The results show lots of low-stress regions. Any result or boundary condition can be utilised to create customised charts.
Congratulations you're now prepared to begin using ANSYS Student! ANSYS Student is a totally free introductory simulation computer software package for engineering students that are interested in learning simulation and analysis. It is the most frequently used explicit simulation program, best suited for the skilled and extremely technical user.
Car design software may be used to model or simulate nearly every element of an automobiles structure or operation. If you would like scan the computer after the remainder of the installation. In addition, it offers 64-bit software at no extra charge. Traditional CAE software depends on the user to make all the inputs essential to define all assumption necessary to find the simulation to work right the very first time. It's a tool to acquire the plan team on the most suitable path more quickly. Innovative result tools make this module very simple to use and, the outcomes are simple to interpret. The ANSYS Student software is currently installed.
There's no electromagnetic functionality. Systems In today's complex goods, individual components must reach elevated levels of performance and efficiency whilst also operating in concert with hundreds of different components in the computer system. The item is directed at the plan group and early development, not validation. Additionally, few products are redesigned based on the licensing. A number of these software products are free while some call for a commercial use license. The business is based in Concord, Massachusetts. It is helpful to manage small and big small business businesses matter.
Multiphysics simulation gives you the ability to remove assumption and approximations and receive a more accurate simulation of your merchandise. Cracked Download the business software in regards to creating 3D animations. It enhances the creation and manufacturing of goods. It improves the operation and upkeep of the product all life cycle designs. It can hack the speed of a variety of games. It only suggests this search engine will just show results from your site and my visitors may also go to your website. Just use this search engine and you'll find what you would like.
Student resources are offered at. This information is particularly useful if you're looking for a means to open a particular file. Alternately, you may use that info in a modal analysis. Each contact or joint is readily identified utilizing the graphical tools supplied in the surroundings. Rather than visiting many torrent websites and seeing a number of ads, you will visit just one website with updated and working torrent. Ansys Academic software that is downloadable from the site. Instructions regarding MCQ test for those candidates who applied online for unique posts.


text:
Home Breaking News Pierre Lahutte appointed Chairman of ACEA
Pierre Lahutte appointed Chairman of ACEA
Mr Lahutte is the Brand President of IVECO at CNH Industrial and takes over the chairmanship from Joachim Drees, CEO of MAN Truck & Bus.
As the negotiations between the European Commission, the European Parliament and the Council – the so-called 'trilogue' meetings, which mark the final major step in the legislative process – formally kicked off yesterday, ACEA reiterated the need for a well-balanced regulation that is ambitious, but realistic at the same time.
"Our clear priority for the next months is the conclusion of the new regulation introducing the EU's first-ever CO2 standards for heavy-duty vehicles. The European truck industry is the world's technological leader in fuel economy, with new trucks that consume less than 1 litre of fuel for 100km per tonne already available on the market," Pierre Lahutte underlined.
However, the CO2 reduction levels proposed by the EU pose a major challenge for truck manufacturers. Lahutte: "We need to pave the way for viable solutions, keeping in mind that trucks rely almost exclusively on diesel today. This clearly implies a 360-degree approach which not only looks at further optimising vehicles, but also the massive challenge of rolling out the refueling infrastructure necessary for alternatively-powered trucks."
Indeed, meeting these extremely ambitious CO2 targets will not be possible without major investments in refuelling and charging points, but a clear EU action plan for truck-specific infrastructure is completely lacking today. Ensuring that this is put in place will remain a key priority for ACEA in years to come.
"The jobs of the people who will manufacture the trucks and buses of tomorrow depend on policy makers striking the right balance today. They need to keep in mind that for our customers commercial vehicles are essential investments in capital goods, which are necessary for the proper functioning of our economy and society at large."
The ACEA Commercial Vehicle Board elects a new Chairman for a yearly term.
Logistics businesses' overhead expenses rise by 6.5% over the past 12...
A6 upgrade to give trade in Northern Ireland & North West...


text:
Will Brexit make us more vulnerable to AI decision-making?
The government is proposing to remove EU-era regulatory protections that enable people to challenge the decisions algorithms make about them.
Illustration by Luciano Lozano / Ikon Images
The MP David Amess was murdered last week at the hands of a person who is thought to have "self-radicalised" online. Last night (18 October), the BBC's Panorama aired with a report on how the online abuse of women can become similarly self-reinforcing. Part of the Panorama investigation involved creating an account on five social media platforms and interacting with misogynistic posts; on Facebook and Instagram, the software appears to have decided to recommend a greater intake of hatred and violence.
There are already too many cases to list in which software has made immoral and disturbing decisions. Amazon's recruitment software was ditched after it was found be biased against women; Facebook's automatic moderation has been accused of racial prejudice; the New York Times described how YouTube's algorithm recommended videos of children to paedophiles.
The reasoning behind such decisions is becoming more important in terms of public safety and legal accountability. But the UK government is now looking at unpicking the current legal protection we have against automated decision-making.
In February this year, three Tory MPs – Iain Duncan Smith, Theresa Villiers and George Freeman – combined to form an entity called "TIGRR": the Taskforce on Innovation, Growth and Regulatory Reform, accountable directly to the Prime Minister. The mission of the taskforce was to find ways for British businesses to "scale up unencumbered by any unnecessary administrative burdens".
"There are thousands of Andrew Tates out there": The battle against online extremism
The restoration of the coffeehouse
The pressure on Sunak to curb the spread of online misogyny is increasing
The 130-page report delivered by TIGRR to the PM in May marked a number of pieces of red tape for removal. Among these is Article 22 of the EU's General Data Protection Regulation (GDPR, copied into UK law when we left the EU), which states that you "have the right not to be subject to a decision based solely on automated processing", and that if you do have a decision made about you solely by software, you have the right "to obtain human intervention… and to contest the decision".
The best of our politics, international affairs, culture and business coverage, straight to your inbox
The report proposes removing the existing protection UK citizens have against automated decision-making, arguing that Article 22 "makes it burdensome, costly and impractical for organisations to use AI to automate routine processes". The fact that some AI systems are better at making decisions than humans, it argues, shows that human review is unnecessary. "Article 22 of GDPR should be removed," it concludes.
The Department for Digital, Culture, Media and Sport (DCMS) is now building on these proposals in a consultation called "Data: a new direction". BCS, the chartered institute for IT, said last week that it supported the consultation but that "the right to human review of decisions made fully by computers should not be removed".
Sam de Silva, chair of the BCS Specialist Law Group, agreed that Article 22 might not be the best tool for the job – as part of the GDPR it is concerned with the processing of personal data, but software can make a "life-changing decision" about someone without using their data. "If we think the protection is important enough, it should not go into the GDPR," he said.
The EU is already drawing up policy that will place transparency obligations on some AI systems, as are legislators in the US, but the DCMS description of a Britain that will "seize opportunities with its new regulatory freedoms" shows there are some in government who see fewer rules as attractive to business.
In the past, this was certainly the case, but it's now an old-fashioned approach. If the largest markets for social media and search giants impose accountability requirements in the US and EU, that's what the UK will get too. British businesses won't suddenly be better able to compete with Facebook if we don't regulate its algorithms.
There's a strong business and social argument for heading in the other direction, however, and imposing a higher standard of protections for businesses and consumers in the UK against the automated decision-making of global companies. Good regulation in this area could well improve confidence in the services created and competition among those offering them.
The unsettling truth about automated decision-making is that even when researchers have the time and resources to analyse why software made a given decision, they often aren't able to do so because artificial neural networks are so complicated and ambiguous. Ofcom's guidance on online content moderation by AI concedes that "it is extremely difficult to develop truly transparent, explainable models". This only makes good regulation more urgent; such decisions may be made in a mysterious box, but they can have devastating consequences in the outside world.
[See also: Would ending online anonymity reduce abuse against MPs?]
Topics in this article : Facebook , Google
Is Substack the future of media?
Is TikTok "bombarding" teenage users with harmful content?


A return that a company is required to pay. Bonds and coupons have guaranteed returns because the issuing company agrees to pay coupons and guaranteed dividends. This contrasts with non-guaranteed returns, such as the dividends on common stock, which a company may decide not to pay. A guaranteed return does not necessarily mean that the company will pay (the company may, for example, default or go bankrupt). However, under some circumstances, the holders of securities with guaranteed returns may force the liquidation of the company.
In the case of "safe" guaranteed returns from investment products, the buyers of these products would probably be better off by forgoing the guarantee and simply investing their money in the markets without the promise of a guaranteed return.
The Punjab govt has announced a guaranteed return of 17 per cent to 18 per cent on equity in dollar terms.
According to the court, there was no intent to raise additional revenue from the transferred patents, the cash flows were circular, and one of the partners received a specified guaranteed return.
Kartik Jhaveri, director, Transcend Consulting, a wealth management company, says, " One must know that these are not guaranteed return schemes, they are guaranteed payment schemes.
Whenever LIC had launched a single-premium product with a guaranteed return it was a big hit and had grossed huge subscriptions.
50% for yet another month, our new bond is aimed at those customers looking for a guaranteed return for their longer term savings needs.
com informs practitioners on what the best ROI for a practice is, what to do, what a truly guaranteed return is and the biggest mistake a practitioner can make in this investment.
ACTRESS Lindsay Lohan has rejected a plea agreement offered by prosecutors that included a guaranteed return to jail.
It said that Protected Equity plus life insurance plan (PEP) is a single-premium, investment-linked, insurance plan that provides equity growth potential, with a guaranteed return of the initial premium if stock markets fall.
In Iran's continuing effort to attract much needed foreign investment, the Central Bank has decided to assure all foreign investors a guaranteed return of 10 percent on their investments.
The housebuilder has introduced an initiative which invites family and friends to help purchasers with the cash deposit they need to buy a new home and in return Taylor Wimpey will pay them a guaranteed return of 5% per annum for five years on the sum invested.
Addressing the media at the launch of the product, R Thamodharan, chief executive officer and managing director of the Bahrain-based LIC International, said that customers have the option to choose from three, five or ten-year terms and the guaranteed return ranges from 4.


text:
package com.codecommit.antixml

import org.specs2.mutable._
import org.specs2.matcher.DataTables
import org.specs2.ScalaCheck
import org.scalacheck._

class NodeSpecs extends Specification with DataTables with ScalaCheck with XMLGenerators {
  import Prop._

  lazy val numProcessors = Runtime.getRuntime.availableProcessors()
  implicit val params = set(workers -> numProcessors, maxSize -> 15)      // doesn't need to be so large

  val nameStartChar = """:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD"""
  val name = "[" + nameStartChar + "][" + nameStartChar + """\-\.0-9\u00B7\u0300-\u036F\u203F-\u2040]*"""r

  "elements" should {
    "serialize empty elements correctly" in {

.convert.toString mustEqual "
"
    }

    "escape reserved characters in attribute values" in {
      "character" || "elem.toString"         |>
      "\""        !! "<foo bar='\"'/>"       |
      "&"         !! "<foo bar=\"&\"/>"  |
      "'"         !! "<foo bar=\"'\"/>"      |
      "'\"'"      !! "<foo bar=''\"''/>" |
      "<"         !! "<foo bar=\"<\"/>"   | { (c, r) => Elem(None, "foo", Attributes("bar" -> c), Map(), Group()).toString mustEqual r }
    }

    "allow legal name identifiers" in {
      "identifier" |>
      "name"       |
      "foo"        |
      "bar"        |
      "baz"        |
      "br"         | { name =>
        Elem(None, name, Attributes(), Map(), Group()) must not(throwAn[IllegalArgumentException])
      }
    }

    "detect illegal name identifiers" in check { str: String =>
      name unapplySeq str match {
        case Some(_) => Elem(None, str, Attributes(), Map(), Group()) must not(throwAn[IllegalArgumentException])
        case None => Elem(None, str, Attributes(), Map(), Group()) must throwAn[IllegalArgumentException]
      }
    }

    "allow legal prefix identifiers" in {
      "identifier" |>
      "name"       |
      "foo"        |
      "bar"        |
      "baz"        |
      "br"         | { name =>
        Elem(Some(name), "foo", Attributes(), Map(), Group()) must not(throwAn[IllegalArgumentException])
      }
    }

    "detect illegal prefix identifiers" in check { str: String =>
      name unapplySeq str match {
        case Some(_) => Elem(Some(str), "foo", Attributes(), Map(), Group()) must not(throwAn[IllegalArgumentException])
        case None => Elem(Some(str), "foo", Attributes(), Map(), Group()) must throwAn[IllegalArgumentException]
      }
    }

    "allow legal attribute prefixes" in {
      "identifier" |>
      "name"       |
      "foo"        |
      "bar"        |
      "baz"        |
      "br"         | { name =>
        Elem(None, "foo", Attributes(QName(Some(name), "bar") -> "bar"), Map(), Group()) must not(throwAn[IllegalArgumentException])
      }
    }

    "detect illegal attribute prefixes" in check { str: String =>
      name unapplySeq str match {
        case Some(_) => Elem(None, "foo", Attributes(QName(Some(str), "bar") -> "bar"), Map(), Group()) must not(throwAn[IllegalArgumentException])
        case None => Elem(None, "foo", Attributes(QName(Some(str), "bar") -> "bar"), Map(), Group()) must throwAn[IllegalArgumentException]
      }
    }

    "allow legal attribute names" in {
      "identifier" |>
      "name"       |
      "foo"        |
      "bar"        |
      "baz"        |
      "br"         | { name =>
        Elem(None, "foo", Attributes(name -> "bar"), Map(), Group()) must not(throwAn[IllegalArgumentException])
      }
    }

    "detect illegal attribute names" in check { str: String =>
      name unapplySeq str match {
        case Some(_) => Elem(None, "foo", Attributes(str -> "bar"), Map(), Group()) must not(throwAn[IllegalArgumentException])
        case None => Elem(None, "foo", Attributes(str -> "bar"), Map(), Group()) must throwAn[IllegalArgumentException]
      }
    }

    "select against self" in {
      val bookstore = <bookstore><book><title>For Whom the Bell Tolls</title><author>Hemmingway</author></book><book><title>I, Robot</title><author>Isaac Asimov</author></book><book><title>Programming Scala</title><author>Dean Wampler</author><author>Alex Payne</author></book></bookstore>.convert
      (bookstore \ "book") mustEqual bookstore.children
      (bookstore \ "book") mustEqual bookstore.children
      (bookstore \\ "title") mustEqual (bookstore.children \\ "title")
    }

    "select text within self" in {
      (<parent>Text</parent>.convert \\ text mkString) mustEqual "Text"
    }

    "delegate canonicalization to Group" in check { e: Elem =>
      e.canonicalize mustEqual e.copy(children=e.children.canonicalize)
    }
  }

  "text nodes" should {
    "escape reserved characters when serialized" in {
      Text("Lorem \" ipsum & dolor ' sit < amet > blargh").toString mustEqual "Lorem \" ipsum & dolor ' sit < amet > blargh"
    }
  }

  "cdata nodes" should {
    "not escape reserved characters when serialized" in {
      CDATA("Lorem \" ipsum & dolor ' sit < amet > blargh").toString mustEqual "<![CDATA[Lorem \" ipsum & dolor ' sit < amet > blargh]]>"
    }
    "Reject the ]]> string in the constructor" in {
      CDATA("la di ]]> da") must throwAn[IllegalArgumentException]
    }
  }
}