text:
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 339708 $ -->
 <chapter xml:id="language.functions" xmlns="http://docbook.org/ns/docbook">
  <title>Functions</title>

  <sect1 xml:id="functions.user-defined">
   <title>User-defined functions</title>

   <para>
    A function may be defined using syntax such as the following:
   </para>
   <para>
    <example>
     <title>Pseudo code to demonstrate function uses</title>
     <programlisting role="php">
<![CDATA[
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
    echo "Example function.\n";
    return $retval;
}
?>
]]>
     </programlisting>
    </example>
   </para>

   <simpara>
    Any valid PHP code may appear inside a function, even other
    functions and <link linkend="keyword.class">class</link>
    definitions.
   </simpara>
   <para>
    Function names follow the same rules as other labels in PHP. A
    valid function name starts with a letter or underscore, followed
    by any number of letters, numbers, or underscores. As a regular
    expression, it would be expressed thus:
    <literal>[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*</literal>.
   </para>
   &tip.userlandnaming;
   <simpara>
    Functions need not be defined before they are referenced,
    <emphasis>except</emphasis> when a function is conditionally defined as
    shown in the two examples below.
   </simpara>
   <para>
    When a function is defined in a conditional manner such as the two
    examples shown. Its definition must be processed <emphasis>prior</emphasis>
    to being called.
   </para>
   <para>
    <example>
     <title>Conditional functions</title>
     <programlisting role="php">
<![CDATA[
<?php

$makefoo = true;

/* We can't call foo() from here
   since it doesn't exist yet,
   but we can call bar() */

bar();

if ($makefoo) {
  function foo()
  {
    echo "I don't exist until program execution reaches me.\n";
  }
}

/* Now we can safely call foo()
   since $makefoo evaluated to true */

if ($makefoo) foo();

function bar()
{
  echo "I exist immediately upon program start.\n";
}

?>
]]>
     </programlisting>
    </example>
   </para>
   <para>
    <example>
     <title>Functions within functions</title>
     <programlisting role="php">
<![CDATA[
<?php
function foo()
{
  function bar()
  {
    echo "I don't exist until foo() is called.\n";
  }
}

/* We can't call bar() yet
   since it doesn't exist. */

foo();

/* Now we can call bar(),
   foo()'s processing has
   made it accessible. */

bar();

?>
]]>
     </programlisting>
    </example>
   </para>
   <para>
    All functions and classes in PHP have the global scope - they can be
    called outside a function even if they were defined inside and vice versa.
   </para>
   <simpara>
    PHP does not support function overloading, nor is it possible to
    undefine or redefine previously-declared functions.
   </simpara>
   <note>
    <simpara>
     Function names are case-insensitive, though it is usually good form
     to call functions as they appear in their declaration.
    </simpara>
   </note>
   <simpara>
    Both <link linkend="functions.variable-arg-list">variable number of
    arguments</link> and <link linkend="functions.arguments.default">default
    arguments</link> are supported in functions. See also the function
    references for
    <function>func_num_args</function>,
    <function>func_get_arg</function>, and
    <function>func_get_args</function> for more information.
   </simpara>

   <para>
    It is possible to call recursive functions in PHP.
    <example>
     <title>Recursive functions</title>
     <programlisting role="php">
<![CDATA[
<?php
function recursion($a)
{
    if ($a < 20) {
        echo "$a\n";
        recursion($a + 1);
    }
}
?>
]]>
     </programlisting>
    </example>
   <note>
    <simpara>
     Recursive function/method calls with over 100-200 recursion levels can
     smash the stack and cause a termination of the current script. Especially,
     infinite recursion is considered a programming error.
    </simpara>
   </note>
   </para>

  </sect1>

  <sect1 xml:id="functions.arguments">
   <title>Function arguments</title>

   <simpara>
    Information may be passed to functions via the argument list,
    which is a comma-delimited list of expressions. The arguments are
    evaluated from left to right.
   </simpara>

   <para>
    PHP supports passing arguments by value (the default), <link
    linkend="functions.arguments.by-reference">passing by
    reference</link>, and <link
    linkend="functions.arguments.default">default argument
    values</link>. <link linkend="functions.variable-arg-list">Variable-length
    argument lists</link> are also supported.
   </para>
   <para>
    <example>
     <title>Passing arrays to functions</title>
     <programlisting role="php">
<![CDATA[
<?php
function takes_array($input)
{
    echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
]]>
     </programlisting>
    </example>
   </para>
   <sect2 xml:id="functions.arguments.by-reference">
    <title>Passing arguments by reference</title>

    <simpara>
     By default, function arguments are passed by value (so that if
     the value of the argument within the function is changed, it does
     not get changed outside of the function). To allow a function to modify its
     arguments, they must be passed by reference.
    </simpara>
    <para>
     To have an argument to a function always passed by reference, prepend an
     ampersand (&) to the argument name in the function definition:
    </para>
    <para>
     <example>
      <title>Passing function parameters by reference</title>
      <programlisting role="php">
<![CDATA[
<?php
function add_some_extra(&$string)
{
    $string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;    // outputs 'This is a string, and something extra.'
?>
]]>
      </programlisting>
     </example>
    </para>
   </sect2>
   <sect2 xml:id="functions.arguments.default">
    <title>Default argument values</title>

    <para>
     A function may define C++-style default values for scalar
     arguments as follows:
    </para>
    <para>
     <example>
      <title>Use of default parameters in functions</title>
      <programlisting role="php">
<![CDATA[
<?php
function makecoffee($type = "cappuccino")
{
    return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
Making a cup of cappuccino.
Making a cup of .
Making a cup of espresso.
]]>
      </screen>
     </example>
    </para>
    <para>
     PHP also allows the use of <type>array</type>s and the special type &null;
     as default values, for example:
    </para>
    <para>
     <example>
      <title>Using non-scalar types as default values</title>
      <programlisting role="php">
<![CDATA[
<?php
function makecoffee($types = array("cappuccino"), $coffeeMaker = NULL)
{
    $device = is_null($coffeeMaker) ? "hands" : $coffeeMaker;
    return "Making a cup of ".join(", ", $types)." with $device.\n";
}
echo makecoffee();
echo makecoffee(array("cappuccino", "lavazza"), "teapot");
?>
]]>
      </programlisting>
     </example>

    </para>
    <simpara>
     The default value must be a constant expression, not (for
     example) a variable, a class member or a function call.
    </simpara>
    <para>
     Note that when using default arguments, any defaults should be on
     the right side of any non-default arguments; otherwise, things
     will not work as expected. Consider the following code snippet:
    </para>
    <para>
     <example>
      <title>Incorrect usage of default function arguments</title>
      <programlisting role="php">
<![CDATA[
<?php
function makeyogurt($type = "acidophilus", $flavour)
{
    return "Making a bowl of $type $flavour.\n";
}

echo makeyogurt("raspberry");   // won't work as expected
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Making a bowl of raspberry .
]]>
      </screen>
     </example>
    </para>
    <para>
     Now, compare the above with this:
    </para>
    <para>
     <example>
      <title>Correct usage of default function arguments</title>
      <programlisting role="php">
<![CDATA[
<?php
function makeyogurt($flavour, $type = "acidophilus")
{
    return "Making a bowl of $type $flavour.\n";
}

echo makeyogurt("raspberry");   // works as expected
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
Making a bowl of acidophilus raspberry.
]]>
      </screen>
     </example>
    </para>
    <note>
     <simpara>
      As of PHP 5, arguments that are passed by reference may have a default value.
     </simpara>
    </note>
   </sect2>

   <sect2 xml:id="functions.arguments.type-declaration">
    <title>Type declarations</title>

    <note>
     <para>
      Type declarations were also known as type hints in PHP 5.
     </para>
    </note>

    <para>
     Type declarations allow functions to require that parameters are of a certain type at call time.
     If the given value is of the incorrect type,
     then an error is generated: in PHP 5, this will be a recoverable fatal
     error, while PHP 7 will throw a <classname>TypeError</classname>
     exception.
    </para>

    <para>
     To specify a type declaration, the type name should be added before the
     parameter name. The declaration can be made to accept &null; values if
     the default value of the parameter is set to &null;.
    </para>

    <sect3 xml:id="functions.arguments.type-declaration.types">
     <title>Valid types</title>
     <informaltable>
      <tgroup cols="3">
       <thead>
        <row>
         <entry>Type</entry>
         <entry>Description</entry>
         <entry>Minimum PHP version</entry>
        </row>
       </thead>
       <tbody>
        <row>
         <entry>Class/interface name</entry>
         <entry>
          The parameter must be an &instanceof; the given class or interface
          name.
         </entry>
         <entry>PHP 5.0.0</entry>
        </row>
        <row>
         <entry><literal>self</literal></entry>
         <entry>
          The parameter must be an &instanceof; the same class as the one the
          method is defined on. This can only be used on class and instance
          methods.
         </entry>
         <entry>PHP 5.0.0</entry>
        </row>
        <row>
         <entry><type>array</type></entry>
         <entry>
          The parameter must be an <type>array</type>.
         </entry>
         <entry>PHP 5.1.0</entry>
        </row>
        <row>
         <entry><type>callable</type></entry>
         <entry>
          The parameter must be a valid <type>callable</type>.
         </entry>
         <entry>PHP 5.4.0</entry>
        </row>
        <row>
         <entry><type>bool</type></entry>
         <entry>
          The parameter must be a <type>boolean</type> value.
         </entry>
         <entry>PHP 7.0.0</entry>
        </row>
        <row>
         <entry><type>float</type></entry>
         <entry>
          The parameter must be a <type>float</type>ing point number.
         </entry>
         <entry>PHP 7.0.0</entry>
        </row>
        <row>
         <entry><type>int</type></entry>
         <entry>
          The parameter must be an <type>integer</type>.
         </entry>
         <entry>PHP 7.0.0</entry>
        </row>
        <row>
         <entry><type>string</type></entry>
         <entry>
          The parameter must be a <type>string</type>.
         </entry>
         <entry>PHP 7.0.0</entry>
        </row>
       </tbody>
      </tgroup>
     </informaltable>

     <warning>
      <para>
       Aliases for the above scalar types are not supported. Instead, they are
       treated as class or interface names. For example, using
       <literal>boolean</literal> as a parameter or return type will require
       an argument or return value that is an &instanceof; the class or
       interface <literal>boolean</literal>, rather than of type
       <type>bool</type>:
      </para>
      <para>
       <example>
        <programlisting role="php">
 <![CDATA[
 <?php
 function test(boolean $param) {}
 test(true);
 ?>
 ]]>
        </programlisting>
        &example.outputs;
        <screen>
 <![CDATA[
 Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of boolean, boolean given, called in - on line 1 and defined in -:1
 ]]>
        </screen>
       </example>
      </para>
     </warning>
    </sect3>

    <sect3 xml:id="functions.arguments.type-declaration.examples">
     &reftitle.examples;
     <example>
      <title>Basic class type declaration</title>
      <programlisting role="php">
<![CDATA[
<?php
class C {}
class D extends C {}

// This doesn't extend C.
class E {}

function f(C $c) {
    echo get_class($c)."\n";
}

f(new C);
f(new D);
f(new E);
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
C
D

Fatal error: Uncaught TypeError: Argument 1 passed to f() must be an instance of C, instance of E given, called in - on line 14 and defined in -:8
Stack trace:
#0 -(14): f(Object(E))
#1 {main}
  thrown in - on line 8
]]>
      </screen>
     </example>

     <example>
      <title>Basic interface type declaration</title>
      <programlisting role="php">
<![CDATA[
<?php
interface I { public function f(); }
class C implements I { public function f() {} }

// This doesn't implement I.
class E {}

function f(I $i) {
    echo get_class($i)."\n";
}

f(new C);
f(new E);
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
C

Fatal error: Uncaught TypeError: Argument 1 passed to f() must implement interface I, instance of E given, called in - on line 13 and defined in -:8
Stack trace:
#0 -(13): f(Object(E))
#1 {main}
  thrown in - on line 8
]]>
      </screen>
     </example>

     <example>
      <title>Nullable type declaration</title>
      <programlisting role="php">
<![CDATA[
<?php
class C {}

function f(C $c = null) {
    var_dump($c);
}

f(new C);
f(null);
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
object(C)#1 (0) {
}
NULL
]]>
      </screen>
     </example>
    </sect3>

    <sect3 xml:id="functions.arguments.type-declaration.strict">
     <title>Strict typing</title>

     <para>
      By default, PHP will coerce values of the wrong type into the expected
      scalar type if possible. For example, a function that is given an
      <type>integer</type> for a parameter that expects a <type>string</type>
      will get a variable of type <type>string</type>.
     </para>

     <para>
      It is possible to enable strict mode on a per-file basis. In strict
      mode, only a variable of exact type of the type declaration will be
      accepted, or a <classname>TypeError</classname> will be thrown. The
      only exception to this rule is that an <type>integer</type> may be given
      to a function expecting a <type>float</type>. Function calls from within
      internal functions will not be affected by the <literal>strict_types</literal>
      declaration.
     </para>

     <para>
      To enable strict mode, the &declare; statement is used with the
      <literal>strict_types</literal> declaration:
     </para>

     <caution>
      <para>
       Enabling strict mode will also affect
       <link linkend="functions.returning-values.type-declaration">return type declarations</link>.
      </para>
     </caution>

     <note>
      <para>
       Strict typing applies to function calls made from
       <emphasis>within</emphasis> the file with strict typing enabled, not to
       the functions declared within that file. If a file without strict
       typing enabled makes a call to a function that was defined in a file
       with strict typing, the caller's preference (weak typing) will be
       respected, and the value will be coerced.
      </para>
     </note>

     <note>
      <para>
       Strict typing is only defined for scalar type declarations, and as
       such, requires PHP 7.0.0 or later, as scalar type declarations were
       added in that version.
      </para>
     </note>

     <example>
      <title>Strict typing</title>
      <programlisting role="php">
<![CDATA[
<?php
declare(strict_types=1);

function sum(int $a, int $b) {
    return $a + $b;
}

var_dump(sum(1, 2));
var_dump(sum(1.5, 2.5));
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
int(3)

Fatal error: Uncaught TypeError: Argument 1 passed to sum() must be of the type integer, float given, called in - on line 9 and defined in -:4
Stack trace:
#0 -(9): sum(1.5, 2.5)
#1 {main}
  thrown in - on line 4
]]>
      </screen>
     </example>

     <example>
      <title>Weak typing</title>
      <programlisting role="php">
<![CDATA[
<?php
function sum(int $a, int $b) {
    return $a + $b;
}

var_dump(sum(1, 2));

// These will be coerced to integers: note the output below!
var_dump(sum(1.5, 2.5));
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
int(3)
int(3)
]]>
      </screen>
     </example>

     <example>
      <title>Catching <classname>TypeError</classname></title>
      <programlisting role="php">
<![CDATA[
<?php
declare(strict_types=1);

function sum(int $a, int $b) {
    return $a + $b;
}

try {
    var_dump(sum(1, 2));
    var_dump(sum(1.5, 2.5));
} catch (TypeError $e) {
    echo 'Error: '.$e->getMessage();
}
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
int(3)
Error: Argument 1 passed to sum() must be of the type integer, float given, called in - on line 10
]]>
      </screen>
     </example>
    </sect3>
   </sect2>
   <sect2 xml:id="functions.variable-arg-list">
    <title>Variable-length argument lists</title>

    <simpara>
     PHP has support for variable-length argument lists in
     user-defined functions. This is implemented using the
     <literal>...</literal> token in PHP 5.6 and later, and using the
     <function>func_num_args</function>,
     <function>func_get_arg</function>, and
     <function>func_get_args</function> functions in PHP 5.5 and earlier.
    </simpara>

    <sect3 xml:id="functions.variable-arg-list.new">
     <title><literal>...</literal> in PHP 5.6+</title>

     <para>
      In PHP 5.6 and later, argument lists may include the
      <literal>...</literal> token to denote that the function accepts a
      variable number of arguments. The arguments will be passed into the
      given variable as an array; for example:

      <example>
       <title>Using <literal>...</literal> to access variable arguments</title>
       <programlisting role="php">
<![CDATA[
<?php
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>
]]>
       </programlisting>
       &example.outputs;
       <screen>
<![CDATA[
10
]]>
       </screen>
      </example>
     </para>

     <para>
      You can also use <literal>...</literal> when calling functions to unpack
      an <type>array</type> or <classname>Traversable</classname> variable or
      literal into the argument list:

      <example>
       <title>Using <literal>...</literal> to provide arguments</title>
       <programlisting role="php">
<![CDATA[
<?php
function add($a, $b) {
    return $a + $b;
}

echo add(...[1, 2])."\n";

$a = [1, 2];
echo add(...$a);
?>
]]>
       </programlisting>
       &example.outputs;
       <screen>
<![CDATA[
3
3
]]>
       </screen>
      </example>
     </para>

     <para>
      You may specify normal positional arguments before the
      <literal>...</literal> token. In this case, only the trailing arguments
      that don't match a positional argument will be added to the array
      generated by <literal>...</literal>.
     </para>

     <para>
      It is also possible to add a
      <link linkend="language.oop5.typehinting">type hint</link> before the
      <literal>...</literal> token. If this is present, then all arguments
      captured by <literal>...</literal> must be objects of the hinted class.

      <example>
       <title>Type hinted variable arguments</title>
       <programlisting role="php">
<![CDATA[
<?php
function total_intervals($unit, DateInterval ...$intervals) {
    $time = 0;
    foreach ($intervals as $interval) {
        $time += $interval->$unit;
    }
    return $time;
}

$a = new DateInterval('P1D');
$b = new DateInterval('P2D');
echo total_intervals('d', $a, $b).' days';

// This will fail, since null isn't a DateInterval object.
echo total_intervals('d', null);
?>
]]>
       </programlisting>
       &example.outputs;
       <screen>
<![CDATA[
3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
]]>
       </screen>
      </example>
     </para>

     <para>
      Finally, you may also pass variable arguments
      <link linkend="functions.arguments.by-reference">by reference</link> by
      prefixing the <literal>...</literal> with an ampersand
      (<literal>&</literal>).
     </para>
    </sect3>

    <sect3 xml:id="functions.variable-arg-list.old">
     <title>Older versions of PHP</title>

     <para>
      No special syntax is required to note that a function is variadic;
      however access to the function's arguments must use
      <function>func_num_args</function>, <function>func_get_arg</function>
      and <function>func_get_args</function>.
     </para>

     <para>
      The first example above would be implemented as follows in PHP 5.5 and
      earlier:

      <example>
       <title>Accessing variable arguments in PHP 5.5 and earlier</title>
       <programlisting role="php">
<![CDATA[
<?php
function sum() {
    $acc = 0;
    foreach (func_get_args() as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>
]]>
       </programlisting>
       &example.outputs;
       <screen>
<![CDATA[
10
]]>
       </screen>
      </example>
     </para>
    </sect3>

   </sect2>
  </sect1>

  <sect1 xml:id="functions.returning-values">
   <title>Returning values</title>

   <para>
    Values are returned by using the optional return statement. Any
    type may be returned, including arrays and objects. This causes the
    function to end its execution immediately and pass control back to
    the line from which it was called. See <function>return</function>
    for more information.
   </para>

   <note>
    <para>
     If the <function>return</function> is omitted the value &null; will be
     returned.
    </para>
   </note>

   <sect2>
    <title>Use of return</title>
   <para>
    <example>
     <title>Use of <function>return</function></title>
     <programlisting role="php">
<![CDATA[
<?php
function square($num)
{
    return $num * $num;
}
echo square(4);   // outputs '16'.
?>
]]>
     </programlisting>
    </example>
   </para>

   <para>
    A function can not return multiple values, but similar results can be
    obtained by returning an array.
   </para>
   <para>
    <example>
     <title>Returning an array to get multiple values</title>
     <programlisting role="php">
<![CDATA[
<?php
function small_numbers()
{
    return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
?>
]]>
     </programlisting>
    </example>
   </para>
   <para>
    To return a reference from a function, use the reference operator & in
    both the function declaration and when assigning the returned value to a
    variable:
   </para>
   <para>
    <example>
     <title>Returning a reference from a function</title>
     <programlisting role="php">
<![CDATA[
<?php
function &returns_reference()
{
    return $someref;
}

$newref =& returns_reference();
?>
]]>
     </programlisting>
    </example>
   </para>
   <simpara>
    For more information on references, please check out <link
    linkend="language.references">References Explained</link>.
   </simpara>
  </sect2>

  <sect2 xml:id="functions.returning-values.type-declaration">
   <title>Return type declarations</title>

   <para>
    PHP 7 adds support for return type declarations. Similarly to
    <link linkend="functions.arguments.type-declaration">argument type declarations</link>,
    return type declarations specify the type of the value that will be
    returned from a function. The same
    <link linkend="functions.arguments.type-declaration.types">types</link>
    are available for return type declarations as are available for argument
    type declarations.
   </para>

   <para>
    <link linkend="functions.arguments.type-declaration.strict">Strict typing</link>
    also has an effect on return type declarations. In the default weak mode,
    returned values will be coerced to the correct type if they are not
    already of that type. In strong mode, the returned value must be of the
    correct type, otherwise a <classname>TypeError</classname> will be thrown.
   </para>

   <note>
    <para>
     When overriding a parent method, the child's method must match any return
     type declaration on the parent. If the parent doesn't define a return
     type, then the child method may do so.
    </para>
   </note>

   <sect3 xml:id="functions.returning-values.type-declaration.examples">
    &reftitle.examples;

    <example>
     <title>Basic return type declaration</title>
     <programlisting role="php">
<![CDATA[
<?php
function sum($a, $b): float {
    return $a + $b;
}

// Note that a float will be returned.
var_dump(sum(1, 2));
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
float(3)
]]>
      </screen>
     </example>

     <example>
      <title>Strict mode in action</title>
      <programlisting role="php">
<![CDATA[
<?php
declare(strict_types=1);

function sum($a, $b): int {
    return $a + $b;
}

var_dump(sum(1, 2));
var_dump(sum(1, 2.5));
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
int(3)

Fatal error: Uncaught TypeError: Return value of sum() must be of the type integer, float returned in - on line 5 in -:5
Stack trace:
#0 -(9): sum(1, 2.5)
#1 {main}
  thrown in - on line 5
]]>
      </screen>
     </example>

     <example>
      <title>Returning an object</title>
      <programlisting role="php">
<![CDATA[
<?php
class C {}

function getC(): C {
    return new C;
}

var_dump(getC());
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
object(C)#1 (0) {
}
]]>
      </screen>
     </example>
    </sect3>
   </sect2>
  </sect1>

  <sect1 xml:id="functions.variable-functions">
   <title>Variable functions</title>

   <para>
    PHP supports the concept of variable functions. This means that if
    a variable name has parentheses appended to it, PHP will look for
    a function with the same name as whatever the variable evaluates
    to, and will attempt to execute it. Among other things, this can
    be used to implement callbacks, function tables, and so forth.
   </para>
   <para>
    Variable functions won't work with language constructs such
    as <function>echo</function>, <function>print</function>,
    <function>unset</function>, <function>isset</function>,
    <function>empty</function>, <function>include</function>,
    <function>require</function> and the like. Utilize wrapper functions to make
    use of any of these constructs as variable functions.
   </para>
   <para>
    <example>
     <title>Variable function example</title>
     <programlisting role="php">
<![CDATA[
<?php
function foo() {
    echo "In foo()<br />\n";
}

function bar($arg = '')
{
    echo "In bar(); argument was '$arg'.<br />\n";
}

// This is a wrapper function around echo
function echoit($string)
{
    echo $string;
}

$func = 'foo';
$func();        // This calls foo()

$func = 'bar';
$func('test');  // This calls bar()

$func = 'echoit';
$func('test');  // This calls echoit()
?>
]]>
     </programlisting>
    </example>
   </para>
   <para>
    Object methods can also be called with the variable functions syntax.
    <example>
     <title>Variable method example</title>
     <programlisting role="php">
<![CDATA[
<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // This calls the Bar() method
    }

    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // This calls $foo->Variable()

?>
]]>
     </programlisting>
    </example>
   </para>
   <para>
    When calling static methods, the function call is stronger than the static property operator:
    <example>
     <title>Variable method example with static properties</title>
     <programlisting role="php">
<![CDATA[
<?php
class Foo
{
    static $variable = 'static property';
    static function Variable()
    {
        echo 'Method Variable called';
    }
}

echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.
$variable = "Variable";
Foo::$variable();  // This calls $foo->Variable() reading $variable in this scope.

?>
]]>
     </programlisting>
    </example>
   </para>
   <para>
     As of PHP 5.4.0, you can call any <type>callable</type> stored in a variable.
    <example>
     <title>Complex callables</title>
     <programlisting role="php">
<![CDATA[
<?php
class Foo
{
    static function bar()
    {
        echo "bar\n";
    }
    function baz()
    {
        echo "baz\n";
    }
}

$func = array("Foo", "bar");
$func(); // prints "bar"
$func = array(new Foo, "baz");
$func(); // prints "baz"
$func = "Foo::bar";
$func(); // prints "bar" as of PHP 7.0.0; prior, it raised a fatal error
?>
]]>
     </programlisting>
    </example>
   </para>

   <para>
    See also <function>is_callable</function>, <function>call_user_func</function>,
    <link linkend="language.variables.variable">
    variable variables</link> and <function>function_exists</function>.
   </para>

   <sect2 role="changelog">
    &reftitle.changelog;
    <para>
     <informaltable>
      <tgroup cols="2">
       <thead>
        <row>
         <entry>&Version;</entry>
         <entry>&Description;</entry>
        </row>
       </thead>
       <tbody>
        <row>
         <entry>7.0.0</entry>
         <entry>
          'ClassName::methodName' is allowed as variable function.
         </entry>
        </row>
        <row>
         <entry>5.4.0</entry>
         <entry>
          Arrays, which are valid callables, are allowed as variable functions.
         </entry>
        </row>
       </tbody>
      </tgroup>
     </informaltable>
    </para>
   </sect2>
  </sect1>

  <sect1 xml:id="functions.internal">
   <title>Internal (built-in) functions</title>

   <para>
    PHP comes standard with many functions and constructs. There are also
    functions that require specific PHP extensions compiled in, otherwise
    fatal "undefined function" errors will appear. For example, to use
    <link linkend="ref.image">image</link> functions such as
    <function>imagecreatetruecolor</function>, PHP must be compiled with
    <productname>GD</productname> support. Or, to use
    <function>mysql_connect</function>, PHP must be compiled with
    <link linkend="ref.mysql">MySQL</link> support. There are many core functions
    that are included in every version of PHP, such as the
    <link linkend="ref.strings">string</link> and
    <link linkend="ref.var">variable</link> functions. A call
    to <function>phpinfo</function> or
    <function>get_loaded_extensions</function> will show which extensions are
    loaded into PHP. Also note that many extensions are enabled by default and
    that the PHP manual is split up by extension. See the
    <link linkend="configuration">configuration</link>,
    <link linkend="install">installation</link>, and individual
    extension chapters, for information on how to set up PHP.
   </para>
   <para>
    Reading and understanding a function's prototype is explained within the
    manual section titled <link linkend="about.prototypes">how to read a
    function definition</link>. It's important to realize what a function
    returns or if a function works directly on a passed in value. For example,
    <function>str_replace</function> will return the modified string while
    <function>usort</function> works on the actual passed in variable
    itself. Each manual page also has specific information for each
    function like information on function parameters, behavior changes,
    return values for both success and failure, and availability information.
    Knowing these important (yet often subtle) differences is crucial for
    writing correct PHP code.
   </para>
   <note>
    <simpara>
     If the parameters given to a function are not what it expects, such as
     passing an <type>array</type> where a <type>string</type> is expected,
     the return value of the function is undefined. In this case it will
     likely return &null; but this is just a convention, and cannot be relied
     upon.
    </simpara>
   </note>
   <para>
    See also <function>function_exists</function>,
    <link linkend="funcref">the function reference</link>,
    <function>get_extension_funcs</function>, and
    <function>dl</function>.
   </para>
  </sect1>

  <sect1 xml:id="functions.anonymous">
   <title>Anonymous functions</title>

   <simpara>
    Anonymous functions, also known as <literal>closures</literal>, allow the
    creation of functions which have no specified name. They are most useful as
    the value of <link linkend="language.types.callback">callback</link>
    parameters, but they have many other uses.
   </simpara>
   <simpara>
    Anonymous functions are implemented using the <link linkend="class.closure">
    <classname>Closure</classname></link> class.
   </simpara>

   <example>
    <title>Anonymous function example</title>
    <programlisting role="php">
<![CDATA[
<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// outputs helloWorld
?>
]]>
    </programlisting>
   </example>

   <simpara>
    Closures can also be used as the values of variables; PHP automatically
    converts such expressions into instances of the
    <classname>Closure</classname> internal class. Assigning a closure to a
    variable uses the same syntax as any other assignment, including the
    trailing semicolon:
   </simpara>

   <example>
    <title>Anonymous function variable assignment example</title>
    <programlisting role="php">
<![CDATA[
<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');
?>
]]>
    </programlisting>
   </example>

   <simpara>
    Closures may also inherit variables from the parent scope.
    Any such variables must be passed to the <literal>use</literal> language construct.
   </simpara>

   <example>
    <title>Inheriting variables from the parent scope</title>
    <programlisting role="php">
<![CDATA[
<?php
$message = 'hello';

// No "use"
$example = function () {
    var_dump($message);
};
$example();

// Inherit $message
$example = function () use ($message) {
    var_dump($message);
};
$example();

// Inherited variable's value is from when the function
// is defined, not when called
$message = 'world';
$example();

// Reset message
$message = 'hello';

// Inherit by-reference
$example = function () use (&$message) {
    var_dump($message);
};
$example();

// The changed value in the parent scope
// is reflected inside the function call
$message = 'world';
$example();

// Closures can also accept regular arguments
$example = function ($arg) use ($message) {
    var_dump($arg . ' ' . $message);
};
$example("hello");
?>
]]>
    </programlisting>
    &example.outputs.similar;
    <screen>
<![CDATA[
Notice: Undefined variable: message in /example.php on line 6
NULL
string(5) "hello"
string(5) "hello"
string(5) "hello"
string(5) "world"
string(11) "hello world"
]]>
    </screen>
   </example>

   <simpara>
    Inheriting variables from the parent scope is <emphasis>not</emphasis>
    the same as using global variables.
    Global variables exist in the global scope, which is the same no
    matter what function is executing. The parent scope of a closure is the
    function in which the closure was declared (not necessarily the function it
    was called from). See the following example:
   </simpara>

   <example>
    <title>Closures and scoping</title>
    <programlisting role="php">
<![CDATA[
<?php
// A basic shopping cart which contains a list of added products
// and the quantity of each product. Includes a method which
// calculates the total price of the items in the cart using a
// closure as a callback.
class Cart
{
    const PRICE_BUTTER  = 1.00;
    const PRICE_MILK    = 3.00;
    const PRICE_EGGS    = 6.95;

    protected $products = array();

    public function add($product, $quantity)
    {
        $this->products[$product] = $quantity;
    }

    public function getQuantity($product)
    {
        return isset($this->products[$product]) ? $this->products[$product] :
               FALSE;
    }

    public function getTotal($tax)
    {
        $total = 0.00;

        $callback =
            function ($quantity, $product) use ($tax, &$total)
            {
                $pricePerItem = constant(__CLASS__ . "::PRICE_" .
                    strtoupper($product));
                $total += ($pricePerItem * $quantity) * ($tax + 1.0);
            };

        array_walk($this->products, $callback);
        return round($total, 2);
    }
}

$my_cart = new Cart;

// Add some items to the cart
$my_cart->add('butter', 1);
$my_cart->add('milk', 3);
$my_cart->add('eggs', 6);

// Print the total with a 5% sales tax.
print $my_cart->getTotal(0.05) . "\n";
// The result is 54.29
?>
]]>
    </programlisting>
   </example>

   <example>
    <title>Automatic binding of <literal>$this</literal></title>
    <programlisting role="php">
<![CDATA[
<?php

class Test
{
    public function testing()
    {
        return function() {
            var_dump($this);
        };
    }
}

$object = new Test;
$function = $object->testing();
$function();

?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
object(Test)#1 (0) {
}
]]>
    </screen>
    &example.outputs.53;
    <screen>
<![CDATA[
Notice: Undefined variable: this in script.php on line 8
NULL]]>
    </screen>
   </example>

   <para>
    As of PHP 5.4.0, when declared in the context of a class, the current class is
    automatically bound to it, making <literal>$this</literal> available
    inside of the function's scope. If this automatic binding of the current
    class is not wanted, then
    <link linkend="functions.anonymous-functions.static">static anonymous
    functions</link> may be used instead.
   </para>

   <sect2 xml:id="functions.anonymous-functions.static">
    <title>Static anonymous functions</title>
    <para>
     As of PHP 5.4, anonymous functions may be declared statically. This
     prevents them from having the current class automatically bound to
     them. Objects may also not be bound to them at runtime.
    </para>
    <para>
     <example>
      <title>Attempting to use <literal>$this</literal> inside a static anonymous function</title>
      <programlisting role="php">
<![CDATA[
<?php

new class {
    function __construct()
    {
        (static function() {
            var_dump($this);
        })();
    }
};
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
Notice: Undefined variable: this in %s on line %d
NULL
]]>
      </screen>
     </example>
    </para>

    <para>
     <example>
      <title>Attempting to bind an object to a static anonymous function</title>
      <programlisting role="php">
<![CDATA[
<?php

(static function() {
    // function body
})->call(new StdClass);
?>
]]>
      </programlisting>
      &example.outputs;
      <screen>
<![CDATA[
Warning: Cannot bind an instance to a static closure in /in/sLLS9 on line 5
]]>
      </screen>
     </example>
    </para>
   </sect2>

   <sect2 role="changelog">
    &reftitle.changelog;
    <para>
     <informaltable>
      <tgroup cols="2">
       <thead>
        <row>
         <entry>&Version;</entry>
         <entry>&Description;</entry>
        </row>
       </thead>
       <tbody>
        <row>
         <entry>5.4.0</entry>
         <entry>
          Anonymous functions may use <varname>$this</varname>, as well as be
          declared statically.
         </entry>
        </row>
        <row>
         <entry>5.3.0</entry>
         <entry>
          Anonymous functions become available.
         </entry>
        </row>
       </tbody>
      </tgroup>
     </informaltable>
    </para>
   </sect2>

   <sect2 role="notes">
    &reftitle.notes;
    <note>
     <simpara>
      It is possible to use <function>func_num_args</function>,
      <function>func_get_arg</function>, and <function>func_get_args</function>
      from within a closure.
     </simpara>
    </note>
   </sect2>

  </sect1>

 </chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

redpajama_set_name: RedPajamaGithub


DULLES, Va., June 30, 2017 /PRNewswire/ -- Nordstrom today announced plans to close its Dulles Town Center full-line store in Dulles, Va., a suburb of Washington D.C. Originally opened in September 2002, the store will serve customers through Friday, September 8, 2017.
"Our strategy is focused on our customers. When it comes to store investments we feel it makes the most sense to look at the total market area versus individual stores. In looking at the greater D.C. market, we feel we can serve our customers better at our other area stores and online," said Jamie Nordstrom, president of stores for Nordstrom. "We've been fortunate to build great relationships with our customers and employees at our Dulles Town Center store for the past 15 years however, our operating agreement is set to expire and closing this store is the best decision for us."
The store closure will impact about 150 non-seasonal employees. "Given the number of stores in the area, we will be able to offer roles to anyone who wants to stay on with us," said Nordstrom. Eligible employees who work at the store through their last scheduled shift will be eligible for a separation package.
Nordstrom will continue to serve greater D.C. area customers at five other full-line stores: Tysons Corner Center, Montgomery Mall, Fashion Centre at Pentagon City, Annapolis Mall and The Mall in Columbia. The company also operates 12 Nordstrom Rack stores in the area: Dulles Town Crossing, Fair Lakes Promenade, Tysons Corner, Gaithersburg, Friendship Center, Springfield Town Center, Pentagon Centre, Downtown D.C., 12th Street, Potomac Mills, Columbia Crossing and Annapolis Harbour Center. Nordstrom will also continue to serve customers online at Nordstrom.com with free shipping and returns.
"Our local market assets, our stores, salespeople, product and services, represent the core of our brand. We're fortunate to have a high quality portfolio of full-line stores, with all of our stores open more than a year generating positive cash flow," said Nordstrom. Since 1990, Nordstrom has opened 298 stores and closed 17. The retailer has three full-line stores and 12 Nordstrom Rack stores scheduled to open this fall including a Rack store at Woodmore Towne Center in Glenarden, Md.


His time on the field in the Four Nations final only lasted 22 minutes but it was the best quarter of a game aggressive Wests Tigers prop Martin Taupau has ever played.
His breakout performance in the Four Nations final — where he broke five tackles, ran for 104 metres and left plenty of experienced Kangaroos looking for cover — is the benchmark the five-Test Kiwi wants to work on moving forward, because simply put, he isn't happy starting on the bench.
"It was [the best performance of my career]. It was crazy. There was a lot of adrenalin pumping through my body," Taupau told NRL.com.
"In terms of laying the platform for the Kiwis, the final was amazing for me.
"Now I'm not content [on the bench] here at the Wests Tigers.
I'd love to be in a starting position. I've been looking to improve more."
While Keith Galloway and Aaron Woods seemingly have the inside running for the Tigers top prop spots, Taupau insists his aggression can be easily transferred depending on whether he starts in the 13 or from the interchange bench.
Ready to show his worth as a starting forward, Taupau has also taken it upon himself to change his style of play if it means it will be beneficial for him moving forward.
An opportunity may be present in the back-row for the 25-year-old too, considering the departures of Adam Blair, Braith Anasta, Bodene Thompson, Liam Fulton and Cory Paterson from the club.
"The aggression isn't going anywhere for me because I'm very competitive. It's always going to be within me and it's just about controlled aggression," Taupau said.
"Now it's more about maintaining my fitness and looking out for the body because my aggression is one of the key ingredients in the way I play. I'm an impact player.
"That's what I've been working on in the pre-season, but you know I have to broaden my horizons and mix up my game. I don't want to be a battering ram for any team so I want to mix up my game and go from there. It's a long term goal for myself to be more versatile and to be able to play anywhere in the forwards."
With the Tigers expected to give game time to rookies Lamar Liolevave, Salesi Funaki and Brenden Santi, an opportunity has presented itself to Taupau in terms of becoming more of a leader at the club in 2015.
After making 45 appearances in the NRL, Taupau is especially keen to help the Tigers' young Pacific Islander kids grow in both a personal and playing capacity.
"Being an Islander myself, we're really shy and like to keep to ourselves, so I'd like to bring the boys out of their comfort zone and get them to express themselves," Taupau said.
"I'm not so much a talking-type of leader though. I do a bit of talking one-on-one to the boys here and there but I'd rather show on the field what I can do and lead by example."


text:
Home/Fiction/Mexican Gothic
The acclaimed author of Gods of Jade and Shadow returns with a mesmerising feminist re-imagining of Gothic fantasy, in which a young socialite discovers the haunting secrets of a beautiful old mansion in 1950s Mexico. He is trying to poison me. You must come for me, Noemi.
You have to save me. When glamorous socialite Noemi Taboada receives a frantic letter from her newlywed cousin begging to be rescued from a mysterious doom, it's clear something is desperately amiss. Catalina has always had a flair for the dramatic, but her claims that her husband is poisoning her and her visions of restless ghosts seem remarkable, even for her.
Noemi's more suited to cocktail parties than amateur sleuthing, but she heads immediately to High Place, a remote mansion in the Mexican countryside, determined to discover what is so affecting her cousin. She's tough and smart, with an indomitable will, and she is not afraid: not of her cousin's new husband, who is both menacing and alluring; not of his father, the ancient patriarch who is fascinated by Noemi; and not of the house itself, which begins to invade Noemi's dreams with visions of blood and doom. Her only ally in this inhospitable abode is the family's youngest son.
Shy and gentle, he wants to help - but he might also be hiding dark knowledge of his family's past. For there are many secrets behind the walls of High Place. The family's once colossal wealth and faded mining empire kept them from prying eyes, but as Noemi digs deeper she unearths stories of violence and madness.
And Noemi, mesmerised by the terrifying yet seductive world of High Place, may soon find it impossible to leave this enigmatic house behind . . .
Published: UK, 2021
Publisher: Quercus Publishing

redpajama_set_name: RedPajamaCommonCrawl


text:
package jalse.entities.functions;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.lang.reflect.Method;
import java.util.stream.Stream;

import org.junit.After;
import org.junit.Test;

import jalse.entities.Entity;
import jalse.entities.annotations.EntityID;
import jalse.entities.annotations.StreamEntities;
import jalse.entities.methods.StreamEntitiesMethod;

public class StreamEntitiesFunctionTest {

    interface TestEntity extends Entity {}

    interface TestInvalidEntity extends Entity {

	Stream<Entity> streamTest();
    }

    interface TestInvalidEntity2 extends Entity {

	@StreamEntities
	Boolean streamTest();
    }

    interface TestInvalidEntity3 extends Entity {

	@StreamEntities
	Stream<Boolean> streamTest();
    }

    interface TestInvalidEntity4 extends Entity {

	@StreamEntities
	Stream<Entity> streamTest(String str);
    }

    interface TestInvalidEntity5 extends Entity {

	@StreamEntities
	default Stream<Entity> streamTest() {
	    return null;
	}
    }

    interface TestValidEntity extends Entity {

	@StreamEntities
	Stream<Entity> streamTest();
    }

    interface TestValidEntity2 extends Entity {

	@StreamEntities
	Stream<TestEntity> streamTest();
    }

    interface TestValidEntity3 extends Entity {

	@StreamEntities(ofType = false)
	Stream<TestEntity> streamTest();
    }

    interface TestValidEntity4 extends Entity {

	@EntityID
	@StreamEntities
	Stream<Entity> streamTest();
    }

    interface TestValidEntity5 extends Entity {

	@EntityID
	@StreamEntities
	Stream<TestEntity> streamTest();
    }

    StreamEntitiesFunction function = null;

    @After
    public void after() {
	function = null;
    }

    public Method newTestMethod(final Class<?> clazz, final Class<?>... params) {
	Method m = null;
	try {
	    m = clazz.getDeclaredMethod("streamTest", params);
	} catch (NoSuchMethodException | SecurityException e) {
	    fail("Could not get method reference");
	}
	return m;
    }

    @Test
    public void testInvalid() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestInvalidEntity.class);

	final StreamEntitiesMethod sem = function.apply(m);
	assertNull(sem);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testInvalid2() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestInvalidEntity2.class);

	function.apply(m);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testInvalid3() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestInvalidEntity3.class);

	function.apply(m);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testInvalid4() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestInvalidEntity4.class, String.class);

	function.apply(m);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testInvalid5() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestInvalidEntity5.class);

	function.apply(m);
    }

    @Test
    public void testValid() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestValidEntity.class);

	final StreamEntitiesMethod sem = function.apply(m);
	assertNotNull(sem);

	assertTrue(sem.getIDSuppliers().size() == 0);
	assertTrue(sem.isOfType());
	assertEquals(Entity.class, sem.getType());
    }

    @Test
    public void testValid2() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestValidEntity2.class);

	final StreamEntitiesMethod sem = function.apply(m);
	assertNotNull(sem);

	assertTrue(sem.getIDSuppliers().size() == 0);
	assertTrue(sem.isOfType());
	assertEquals(TestEntity.class, sem.getType());
    }

    @Test
    public void testValid3() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestValidEntity3.class);

	final StreamEntitiesMethod sem = function.apply(m);
	assertNotNull(sem);

	assertTrue(sem.getIDSuppliers().size() == 0);
	assertFalse(sem.isOfType());
	assertEquals(TestEntity.class, sem.getType());
    }

    @Test
    public void testValid4() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestValidEntity4.class);

	final StreamEntitiesMethod sem = function.apply(m);
	assertNotNull(sem);

	assertTrue(sem.getIDSuppliers().size() == 1);
	assertTrue(sem.isOfType());
	assertEquals(Entity.class, sem.getType());
    }

    @Test
    public void testValid5() {
	function = new StreamEntitiesFunction();

	final Method m = newTestMethod(TestValidEntity5.class);

	final StreamEntitiesMethod sem = function.apply(m);
	assertNotNull(sem);

	assertTrue(sem.getIDSuppliers().size() == 1);
	assertTrue(sem.isOfType());
	assertEquals(TestEntity.class, sem.getType());
    }
}


text:
Q: Limits of triple integral over tetrahedron Consider the tetrahedron with vertices $(0,0,0),(0,2,0),(-4,2,0),(0,2,4)$.
To figure the limits for integration in $x,y,z$ I followed this logic
The base of the tetrahedron can be thought of as being in the $xy$ plane, so
we get
$$-4<x<0$$ and $$-x/2<y<2$$.
To find the bounds for $z$ it is more complicated because I need to find the 3 planes where the 3 faces above the $xy$ plane lie.
How do I get the bounds for $z$ from those 3 plane equations?

A: You can take the cross product of two vectors lying on the surface of the plane to find a normal vector of the plane. This would give you the equation of the plane. In particular, $(0, 2, 4) - (-4, 2, 0) = (4, 0, 4)$, so $(4, 0, 4) \times (0, 2, 4) = (-8, -16, 8)$. Then, an equation for your plane would be $-x - 2y + z = 0 \implies z = x + 2y$.
So your integral would be
$$
\int_{-4}^0\int_{-x/2}^2\int_0^{x + 2y}f(x, y, z)\,dz\,dy\,dx.
$$

redpajama_set_name: RedPajamaStackExchange


text:
October 3, 2016 Issue
A Season of Terror and Donald Trump
President Obama urged Americans not to succumb to fear. We may not be up to it.
By Steve Coll
Illustration by Tom Bachtell
In mid-September, Rafia Zakaria, a Pakistani-American lawyer and writer, flew to Denver, to attend the annual conference of the Online News Association, where she was to present a paper on hate directed at American Muslims. She carried "Black Flags," Joby Warrick's account of the rise of ISIS, to read on the plane. Worried that passengers might be alarmed if they saw a South Asian woman engrossed in that book, she'd wrapped it in the floral cover of "Georgia," Dawn Tripp's novel about Georgia O'Keeffe. That is the sort of "passing," Zakaria says, that many American Muslims engage in "to appear to be unthreatening" in this season of terror and Donald Trump.
After Paris, Brussels, Orlando, and Nice, it seemed likely that reactions to terrorism inspired by ISIS and its ilk would influence the Presidential election, not least because of Trump's inflammatory efforts to elevate the subject. Then came last week's attacks. In St. Cloud, Minnesota, Dahir Adan, a twenty-year-old Somali-American, knifed ten people at a shopping mall before an off-duty police officer shot him dead; ISIS claimed responsibility, but Adan's motivations remain unclear. A day later, Ahmad Khan Rahami, a twenty-eight-year-old naturalized citizen of Afghan origin, who possessed jihadist literature, allegedly planted several bombs, including one that went off in Chelsea, wounding a couple of dozen people. It was the first successful terrorist bombing in New York City since 9/11.
As this dystopian Presidential campaign enters its final phase, the intermingling of persistent terrorism and resilient Trumpism is painful to contemplate. The candidates interpreted the latest attacks as an invitation to rehearse pugilistic rhetoric for the high-stakes debates. Hillary Clinton called Trump a "recruiting sergeant for the terrorists," because of his race baiting and his denigration of Muslims, while Trump told his Twitter legions that Clinton's "weakness" as Secretary of State had "emboldened terrorists all over the world." President Obama noted more measuredly that violent radicals "are trying to hurt innocent people, but they also want to inspire fear in all of us." He added, "We all have a role to play as citizens in making sure we don't succumb to that fear."
We might not be up to it. In May, Guido Menzio, an Italian economist on the faculty of the University of Pennsylvania, was removed from a flight out of Philadelphia and questioned because a passenger thought that his work on a differential equation looked like Arabic. Last month, in Queens, a man approached an imam and his assistant and shot them in the back of the head. Police charged Oscar Morel, who is thirty-six, with double murder but have not explained his motive. According to Zakaria, online searches for "Islamophobia," the neologism for exaggerated fears of the Muslim faith, often surge after terrorist incidents; so do searches for "Kill Muslims."
Trump's mainstreaming of bigotry has already damaged the country lastingly by ripping at its social bonds and popularizing a phony war on "political correctness" as an alternative to the ideals of tolerance and pluralism. Of course, Trump and his fellow-travellers aim vitriol and threats not just at Muslims. The wide-ranging ugliness at his rallies is there for all to see and hear; on Facebook and Twitter, trolls supporting him spread racist and anti-Semitic poison. Yet America's three million or so Muslims make up about one per cent of the population, a small, often isolated minority, whose intensifying anxieties this autumn are at least as easy to appreciate as those of New York subway riders. (Asked about the internment of Japanese-Americans during the Second World War, Trump mused that such measures are sometimes necessary.)
Social-science studies show that fear of terrorism does affect voting. It tends to lift the electoral prospects of trusted, "strong" incumbents, but it isn't obvious how that pattern will play out this time. Obama enjoys high approval ratings, but he isn't on the ballot. Trump sells toughness, but he seems to frighten some voters as much as ISIS does. Clinton has an incumbent's qualifications, but she hasn't won broad trust, and lately, as her campaign's momentum has slackened, she has struggled to counter Trump's fearmongering. After last week, her task won't be any easier. As Trump's Republican-primary opponents discovered, debating him successfully on security issues requires sidestepping his wild insults while indicting him with his own aggression. Clinton is an experienced, effective debater, but Trump has a fix on the public's fears: during the past two years, casualties in the U.S. and Europe from attacks inspired by ISIS have gone up, and homegrown radicalization connected to that group is likely to persist for a long time.
Trump offers no plausible solutions to this threat, and, as Clinton's "recruiting sergeant" remark sought to highlight, stigmatizing minorities or calling for a ban on immigration by members of an entire faith group is more likely to stimulate violence than to prevent it. Her policy proposals are more comprehensive, and are supported by evidence. They include terrorism-prevention programs similar to those in Britain and other European countries. The best of these promote social integration and community policing, but such efforts can be difficult, particularly if Muslims experience them as a pretense for surveillance or sting operations.
Identifying effective ways to intervene when an isolated individual drifts toward violent extremism, or to detect committed singleton terrorists before they act, has proved to be one of the most challenging fields of counterterrorism. In Rahami's case, border agents reportedly referred his name to the F.B.I., but, amid thousands of such preliminary reviews and in the absence of any evidence of a concrete threat, the investigation lapsed. When police look at a possibly radicalized but law-abiding American, their options can be constrained, and properly so; the First Amendment is meant to prevent the criminalization of thought, reading, or speech, even when the ideas at issue are reprehensible or touch on violence.
In "Anxious Politics," a study of fear and public opinion published last year, the political scientists Bethany Albertson and Shana Kushner Gadarian report that when citizens are on edge they pay closer attention and read up on issues, to clarify the source of their anxiety. America's history of the exploitation of domestic terrorism by political opportunists is replete with case studies, from the Red Scare of the nineteen-twenties through the abuses following 9/11. The lessons are repetitive: the most dangerous enemy within has typically been fear itself. ♦
This article appears in the print edition of the October 3, 2016, issue, with the headline "The Fear Factor."
Steve Coll, a staff writer, is the dean of the Graduate School of Journalism at Columbia University. His latest book is "Directorate S: The C.I.A. and America's Secret Wars in Afghanistan and Pakistan."
How Picasso's Muse Became a Master
New York's Rational Response to Terror
New Yorkers' response to the weekend's bombings was not merely "bold" or "courageous" but something even better: cool, plain, dull indifference.
By Adam Gopnik
A Reporter at Large
Journey of a Teen-Age Jihadi
How Jejoen Bontinck got from Belgium to Syria and back again.
By Ben Taub


text:
import {Entity} from "../../../../../../src/decorator/entity/Entity";
import {PrimaryColumn} from "../../../../../../src/decorator/columns/PrimaryColumn";
import {Column} from "../../../../../../src/decorator/columns/Column";

@Entity()
export class PostWithOptions {

    @PrimaryColumn()
    id: number;

    // -------------------------------------------------------------------------
    // Numeric Types
    // -------------------------------------------------------------------------

    @Column("number", { precision: 10, scale: 5 })
    number: number;

    @Column("numeric", { precision: 10, scale: 5 })
    numeric: number;

    @Column("dec", { precision: 10, scale: 5 })
    dec: number;

    @Column("decimal", { precision: 10, scale: 5 })
    decimal: number;

    @Column("float", { precision: 24 })
    float: number;

    // -------------------------------------------------------------------------
    // Character Types
    // -------------------------------------------------------------------------

    @Column("char", { length: 3 })
    char: string;

    @Column("nchar", { length: 3 })
    nchar: string;

    @Column("varchar2", { length: 50 })
    varchar2: string;

    @Column("nvarchar2", { length: 40 })
    nvarchar2: string;

    @Column("raw", { length: 500 })
    raw: Buffer;

    // -------------------------------------------------------------------------
    // Date Types
    // -------------------------------------------------------------------------

    @Column("timestamp", { precision: 5 })
    timestamp: Date;

    @Column("timestamp with time zone", { precision: 6 })
    timestampWithTimeZone: Date;

    @Column("timestamp with local time zone", { precision: 7 })
    timestampWithLocalTimeZone: Date;

}


This blend of China, Oolong, Assam and Ceylon teas has the fruity flavor of black currant and bergamot with a sweet creamy vanilla-caramel finish. This is a medium-bodied CO2 decaffeinated black tea that is complex with a light brown infusion. It takes milk and sugar well, but is also delicious on its own!


text:
class Synctv::Client::Resources::Manifests::Dash < Synctv::Client::Resource
  include Synctv::Client::Scopes

  self.prefix       = "/api/v2/media/:medium_id/"
  self.element_name = "dash_manifest"
end


FIRST HALF: 1. Chivas, LaBrocca 2 (Braun) 4th minute; 2. Columbus, Mendoza 2 (Ekpo) 17th; 3. Chivas, Boyens 1 (Pearce) 37th.
SECOND: 4. Columbus, Mendoza 3, 52nd; 5. Chivas, Flores 1 (Zemanski) 57th; 6. Columbus, Ekpo 1, 64th.
Yellow cards: ChivasFlores (reckless tackle) 21st, Pearce (reckless foul) 46th, Flores (reckless foul) 69th; Columbusnone. Red card: ChivasFlores (second caution) 69th.
Shots: Chivas 8-412; Columbus 6-1218. Shots on goal: Chivas 4-26; Columbus 3-47. Saves: Chivas, Kennedy 1-23; Columbus, Hesmer 2-13. Fouls: Chivas 5-49; Columbus 4-610. Corner kicks: Chivas 4-15; Columbus 1-34. Offsides: Chivas 0; Columbus 2-57. A: 9,431.
Lineups: ChivasGK Kennedy; D Valentin, Jazic, Boyens, Pearce; MF Elliott (Mayen, 90th), Flores, Zemanski, LaBrocca; F Moreno (Mendoza, 79th), Braun (Cortez, 90th+). ColumbusGK Hesmer; D Miranda, James, Marshall, Balchan; MF Ekpo, Rogers, Gardner, Gaven (Iro, 90th+); F Mendoza (Cunningham, 71st), Heinemann (Meram, 76th).


"What happened to Olivia Thirlby?" I asked this very question to a friend a couple weeks back, while riding the tube in London. The actress broke onto the scene with a small role in the Paul Greengrass-directed Oscar-nominated United 93, and proceeded to go on a tear, starring in some of my favorite indie films of 2007/2008: David Gordon Green's underrated adaptation of Snow Angels, Jason Reitman's Oscar-nominated film Juno, and Jonathan Levine's The Wackness. She has since made appearances in a few New York City-short films, including Brett Ratner's segment of New York, I Love You, Daryl Wein's SXSW mumblecore romantic comedy Breaking Upwards, and John Hindman's The Answer Man.
Many people I've talked to believed this now-23-year-old actress had the potential to be Hollywood's next big thing (and I too was on the bandwagon). And not for a lack of trying, Thirlby was called in to audition for a role in George Miller's scrapped Justice League movie and the role of Trixie in The Wachowski Brothers' Speed Racer. But she seems to have disappeared from the indie spotlight as of late.
Good news: Thirlby has landed a role in a big budget film produced by Timur Bekmambetov (Wanted/Nightwatch). The science fiction action story follows a group of American tourists visiting Moscow Russia when an alien invasion occurs.


text:
What is Stormwater Pollution?
Stormwater pollution is one of the nation's leading causes of water pollution. As stormwater runoff flows over impervious and other hardened or disturbed surfaces like streets, parking lots, driveways, rooftops and construction and grading sites it picks up trash and debris, chemicals, sediment and pollutants.
These pollutants are carried into Swift Creek, Old Town Creek, the Appomattox River, local ponds, lakes and streams by way of natural conveyances and the City's storm sewer system. These pollutants and toxins adversely affect the quality, increase the peak stormwater flow rates, and cause erosion and further deteriorate the health of our waters, many of which are a source of drinking water.
Stormwater Management Program
The City's Stormwater Management Program (SWMP) was established citywide to address and improve the control, operation, inspection, maintenance and oversight of the City's stormwater runoff and storm sewer system. A commitment to controlling and improving stormwater runoff can help with mosquito control, control flooding, improve customer service and reduce flooding-related incidents, protect property values, reduce long-term capitol costs through proactive maintenance of the storm sewer system and facilitate the master planning process to anticipate future needs. The stormwater program is administered through the City's Department of Public Works.
The Clean Water Act (CWA) of 1972 set a precedent for the Nation's clean water regulations. Though the scope of the Act has been considerably broadened since its inception, its basic features included the designation of water quality standards and anti-degradation policies for ensuring these standards. One of the subsequent enforcement tools of the Act is the National Pollutant Discharge Elimination System (NPDES) Permitting Program, which requires municipalities to obtain a permit to discharge their stormwater runoff into surrounding waters. Under the terms of these permits - called Small Municipal Separate Storm Sewer System (MS4) permits - municipalities are required to take certain actions to control and\or mitigate the pollutants that are collected in stormwater runoff. Penalties for noncompliance can include fines as high as $25,000 per day.
MS4 Permit
Colonial Heights holds an MS4 permit that became effective in December of 2002. Subject to annual reporting and reviews of the City's SWMP by Virginia's Department of Conservation and Recreation (DCR), the permit remains effective for five years and may be reissued at the elapse of each 5 year term, subject to these reviews. The current permit, reissued in 2008, is effective through 2013.
Under the MS4 permit, the City is required to draft and administer an Implementation Plan that addresses six programmatic components, also known as six Minimum Control Measures (MCMs). These include:
Public involvement and participation
Illicit discharge detection and elimination
Construction site runoff control
Post-construction stormwater management
Pollution prevention/good housekeeping
Chesapeake Bay Act
Other regulatory drivers that impact Colonial Heights SWMP are those related to the Chesapeake Bay Act. Adopted in 1988, the Bay Act is intended to reduce the amount of harmful pollutants entering the Bay and has sought to restore its health. Colonial Heights is located within the Chesapeake Bay watershed, so many of the regulatory actions related to the Bay also directly impact Colonial Heights.
Prevention Steps


text:
About WUOT News
WUOT Podcast
HealthConnections
Contact WUOT News
WUOT Schedule
WUOT-2 Radio Schedule
Morning Concert
Afternoon Concert
UT Concert Hall
Improvisations
Jazz Jam
Last Set at Birdland
The Sounds Global Show
Mountain Jubilee
Station/Member Events
WUOT-Sponsored Events
E-Notes Monthly Newsletter
Leadership Members
Evergreen Member Club
WUOT Endowment
Guidelines and Copy Samples
WUOT Public File
91.9 Inc. Board
WUOT Staff
WUOT News
© 2023 WUOT
On Air Now Playing WUOT
On Air Now Playing WUOT-2
The USDA Is Set To Give Black Farmers Debt Relief. They've Heard That One Before
By Emma Hurt
Melina Mara
The Washington Post via Getty Images
President of the National Black Farmer's Association John Boyd stands in his fields in Baskerville, Va. He says the USDA's relief program is "like the fox watching the hen house."
Farmers of color are set to get some unprecedented debt relief starting this month from the U.S. Department of Agriculture. The latest federal COVID aid package includes an estimated $4 billion for the USDA to wipe away these farmers' debts.
It's an unprecedented Congressional mandate to make up for the damage that decades of lending discrimination has had on farmers of color. The distrust runs so deep that the department has been dubbed "the last plantation."
"It's like the fox watching the hen house," says John Boyd, a Virginia row crop and cattle farmer who has long advocated for the USDA to do more to help Black farmers.
That's the type of skepticism that Agriculture Secretary Tom Vilsack faced when he met with a group of Black farmers surrounded by pecan groves in rural Fort Valley, Ga. last month.
Vilsack called the new program "a very, very important first step," while acknowledging, "The Department of Agriculture has a lot of work to do."
"It's not the beginning and end with our announcement today," he told the crowd. "It's the beginning of a beginning."
Wholesale debt relief for "socially disadvantaged farmers," including Black, Native American and other farmers of color, is an unprecedented move by the department and its lending arm, the Farm Service Agency.
But this group, particularly Black farmers, has a tangled history with the agency. They've been promised compensation for discrimination twice before, even winning what was dubbed the largest civil rights class action settlement in U.S. history. Still the problem—disproportionately low access to the government help many in the agriculture industry rely on—has persisted.
"This discrimination that we're talking about, it's not just historic discrimination," said Georgia Sen. Raphael Warnock, a Democrat who championed the relief. He points to the fact that farmers of color received 0.1% of the 2020 COVID-19 relief for farmers.
"If you go and stick your hand in a hole and a rattlesnake bites it the first time, then you go back there a second time, it bites you the second time, what do you think you are going to do the third time?" asked Lucious Abrams, a fourth-generation farmer from Keysville, Ga. who has been battling USDA in the courts for decades to win compensation for lending discrimination.
He spoke to a group of fellow Georgia farmers at an event organized by Warnock weeks before Vilsack's visit.
"That skepticism is very understandable. These folks have been disappointed time and time again," Warnock said. "That deep distrust was built over years. It didn't happen overnight. It's not going to be resolved overnight. But the best thing we can do right now is to deliver this."
Saving the next generation of Black farmers
Report after government report has documented how little access to government help farmers of color have had compared to White farmers. Multiple Congressional hearings have been held on the topic since the first in 1999.
Meanwhile, the proportion of Black farmers in the U.S. has shrunk, from 14% in 1920, to just under 2% in 2017. (Fewer than 3% of farmers are Native American, about 4% are Hispanic, and 1% are Asian American-Pacific Islander.)
Black farmers in the South have lost 90% of their land in the last century, amounting to a loss of $250 billion to $350 billion of accumulated wealth and income, according to an estimate by the Land Loss and Reparations Project.
Emma Hurt / WABE
Sen. Raphael Warnock, D-Ga., tells a group of farmers in Byromville, Ga. that debt relief will be coming soon from the USDA.
There are myriad reasons for the decline. If you ask farmers, the USDA's lack of aid is chief among them. Agriculture Secretary Vilsack acknowledged as much during his recent trip to Georgia.
"When people do not have access to the broad array of services and benefits at the Department of Agriculture, they have been at a severe disadvantage," he said. "White farmers obviously had the full advantage. They had all the programs. And so they had a chance to grow, to expand. To buy the best equipment, to plant their crop in a timely way. Their yields were good. And so they got larger and larger."
But Boyd, the Virginia farmer, is skeptical of the USDA's ability to administer this latest round of relief. Now president of the National Black Farmers Association, he became an activist nearly four decades ago after facing loan discrimination.
"Just about every eight-and-a-half to nine years, something happens in this issue," he said. "I don't have many more eight-and-a-half or nine years left in my span here to get some real significant change in place so that we can save the next generation of Black farmers."
Civil-rights victory against USDA becomes bitter disappointment: "Debtor slaves until the day they die"
"When farmers tell you they're not sure yet, well, if you'd gone through the history of the last 150 years, you wouldn't be either," said Lloyd Wright, who served as head of the USDA's Civil Rights Division in the 1990s.
Wright was hired by the USDA to deal with a backlog of discrimination complaints getting renewed attention. The complaints had languished at the department after its civil rights office closed during the Reagan administration.
In 1999, Black farmers won what became the largest civil rights class action settlement in U.S. history, Pigford v. Glickman. The legal victory acknowledged discrimination by the department and its failure to address these complaints. But today, that case is infamous among Black farmers.
"Black farmers have a very, very, very negative opinion of it, because the outcome was not in the best interest of Black farmers," Wright said.
Ultimately, under Pigford, nearly 16,000 claims were approved for monetary payments. But just under 7,000 were flat out denied, and roughly 60,000 were rejected for being filed late.
"When you study this saga of the Pigford debacle, decisions were made without centering the farmer," said Tracy McCurty, executive director of the Black Belt Justice Center, an advocacy group that serves Black farmers.
She points to a requirement in the settlement that Black farmers find a "similarly situated" white farmer who had not been discriminated against, to receive compensation.
On top of monetary payments, many farmers also were hoping for and expected to receive debt relief. But just 425 of them had their debts forgiven Farmers felt betrayed, all while their interest and debts continued to grow.
"So many Black men and women have died, and it made their suffering and dying so hard to know they are going to stay in debt, because they are debtor slaves, until the day they die," said Eddie Slaughter, a farmer from Buena Vista, Ga. who has also become an advocate.
Stephen Carpenter worked as senior counsel for the court-appointed monitor tasked with overseeing the implementation of the two settlements. He blames "inaccurate and widely-repeated information about details of the lawsuit" for leading farmers to believe that all debt would be forgiven.
U.S. Agriculture Secretary Tom Vilsack addressed a group of farmers in Fort Valley, Ga. in May.
"People understandably hoped that their USDA debt would be forgiven. In many cases it was. In many cases, however, it was not. So that was inevitably disappointing."
Yet for the 60,000 claimants rejected for being late, another reason for hope came more than a decade later. Vilsack was also agriculture secretary back then, in 2011, when the Obama Administration allocated another $1 billion for a second settlement.
While there were reports of non-farmers receiving claims under this settlement, farmers like Lucious Abrams, who was denied compensation in the first Pigford case, were locked out of this round too. He was told his claim didn't meet the conditions required by the consent decree, like finding a similarly situated white farmer. "How in the world am I supposed to find a similarly situated white farmer?" Abrams said.
He has been fighting that denial in court for decades, meanwhile his debt has ballooned.
"The stress that we've been under--there's no way to tell you what we've been through. It's unreal," Abrams said.
He has faced foreclosure multiple times. While Abrams used to be able to lease other farmland to run a nearly 2,000 acre operation with cotton, corn, hogs and cattle, today, he has to rent out his land to another farmer since he cannot afford to farm it himself.
It's impossible to know how many farmers of color lost their land to foreclosure after being denied help through the settlements, Lloyd Wright said. But when he was brought back in as a consultant to the department in 2011, he said all but one of the 30 original Pigford claimants he was able to interview had lost land acreage since.
'The World Is A Lot Different Today'
When Vilsack sat at a table in Georgia alongside Georgia politicians on that sunny Saturday last month, facing rows of Black farmers, he vowed that this new relief program would be different.
"What this circumstance is doing for the first time, is addressing the cumulative effect of discrimination against a class of people, not individuals, but a class," he said. "Frankly, it's taken us a while to get to this point."
He added, "The world is a lot different today than it was when I was secretary before."
There are no conditions on farmers to receive this debt relief, unlike the two settlements. The COVID-19 package also gave the USDA $1 billion for structural equity reforms. The idea, Vilsack said, is to reshape agriculture policy with these farmers in mind.
"We really have to do some very deep thinking about the structure of our programs, because...very, very few of them are designed for [socially disadvantaged farmers]," Vilsack said.
The USDA estimates roughly 16,000 farmers of color qualify for this new relief program. Ironically, that represents less than 10% of farmers of color in the U.S. Most don't seek credit from the USDA nowadays.
Many, like Alfred Greenlee, who grows hay and raises cattle in Albany, Ga., don't apply after hearing the horror stories.
"Once your grandfather or your father tell you he went through this, and they don't want you to go through this...then you're going to do everything you can to stay away from that process," he said.
Carpenter, who spent years overseeing implementation of the two settlements, is optimistic about this latest promise of debt relief for farmers of color, "but there will be a limited effect inevitably," he said. "For certain, this is not anything close to a 1:1 for discrimination and suffering for farmers of color."
"This is just the first step," said McCurty, with the Black Belt Justice Center, of the debt cancellation. "Then we want to recreate, we want to dismantle what the farmers call USDA, 'the last plantation,' and re-create the 'people's department.'"
"We are operating from a pretty extreme trust deficit among the farmers that we're trying to help," acknowledged the USDA's new racial equity advisor, DeWayne Goldman, himself a Black farmer from Arkansas. "And so we'd better be serious about it. And we better be forthcoming. That's kind of the approach we're taking: the proof is in the pudding."
Carl Parker is another Georgia farmer in debt to the USDA who has been skeptical of this relief program. Yet after hearing Vilsack speak, he sounded cautiously optimistic.
"Right now we've got our foot on the rattlesnake's head," he said. "He ain't dead yet, but we've got our foot on his head."
An earlier version of this report incorrectly said that "Harvard University researchers estimate Black farmers in the South have lost 90% of their land in the last century, amounting to a loss of $250 billion to $350 billion of accumulated wealth and income." In fact, the researchers presented at Harvard but are affiliated with several universities and the U.S. Census Bureau. Together, they call themselves the Land Loss and Reparations Project. And a previous version of this story incorrectly said 169 Black farmers received debt relief under the Pigford settlement. It was actually 425.
Emma Hurt
See stories by Emma Hurt
Support WUOT


The participants of the tour will become the characters, as you move around Barcelona to places which are still recognisable to today's inhabitants.
Not often do we have the possibility to turn fiction into reality but this is one such chance.
Rambla Sta. Mónica, Plaza Real (Royal Square), down Llibreteria Street. Going through Argenteria Street we reach Santa Maria del Mar and Montcada Street to discover the Santa Lucía Asylum and Xampanyet.
Next stop is Els Quatre Gats, Santa Ana Street and Canuda Street to learn about the Athenaeum of Barcelona, "a spot in the city that hasn't left the 19th century".
From the 1st of November until the 31st of March the tour starts at 17:00 pm. From the 1st of April until the 31st of October the tour starts at 18:00 pm.
Show it at the meeting point close to Rambla de Santa Monica (Exact details on your voucher).
Adults: Please select... 0 1 x € 14.00 ( €14.00 )	2 x € 14.00 ( €28.00 )	3 x € 14.00 ( €42.00 )	4 x € 14.00 ( €56.00 )	5 x € 14.00 ( €70.00 )	6 x € 14.00 ( €84.00 )	7 x € 14.00 ( €98.00 )	8 x € 14.00 ( €112.00 )	9 x € 14.00 ( €126.00 )	10 x € 14.00 ( €140.00 )	11 x € 14.00 ( €154.00 )	12 x € 14.00 ( €168.00 )	13 x € 14.00 ( €182.00 )	14 x € 14.00 ( €196.00 )	15 x € 14.00 ( €210.00 )	16 x € 14.00 ( €224.00 )	17 x € 14.00 ( €238.00 )	18 x € 14.00 ( €252.00 )	19 x € 14.00 ( €266.00 )	20 x € 14.00 ( €280.00 )	For more please inquire!
Children: Please select... 0 1 x € 14.00 ( €14.00 )	2 x € 14.00 ( €28.00 )	3 x € 14.00 ( €42.00 )	4 x € 14.00 ( €56.00 )	5 x € 14.00 ( €70.00 )	6 x € 14.00 ( €84.00 )	7 x € 14.00 ( €98.00 )	8 x € 14.00 ( €112.00 )	9 x € 14.00 ( €126.00 )	10 x € 14.00 ( €140.00 )	11 x € 14.00 ( €154.00 )	12 x € 14.00 ( €168.00 )	13 x € 14.00 ( €182.00 )	14 x € 14.00 ( €196.00 )	15 x € 14.00 ( €210.00 )	16 x € 14.00 ( €224.00 )	17 x € 14.00 ( €238.00 )	18 x € 14.00 ( €252.00 )	19 x € 14.00 ( €266.00 )	20 x € 14.00 ( €280.00 )	For more please inquire!


text:
Author Spotlight, Uncategorized
Self-Publishing Author Spotlight: Jennifer Fales
At Outskirts Press, Inc., we take great pride in celebrating the work of our successful self-publishing authors, and we do so each week through our Self-Publishing Author Spotlight. This week we highlight self-publishing author Jennifer Fales, who has published four successful titles with Outskirts Press.
Learn more about award winning author Jennifer, her interested and her published works through this week's Self-Publishing Author Spotlight.
Jennifer Fales was born in Jacksonville, Florida, and lived in Cocoa Beach and Melbourne during her high school and college career. She then moved out to Southern California in 2004. Jennifer is a huge fan of Stephen Colbert. English is her native tongue, followed closely by sarcasm. Her interests run the gamut from science to the supernatural, with a little kickboxing thrown in for good measure. She currently resides in Corona California.
She is a 2011 Foreword Reviews Book of the Year award winner.
Shadows and Fire
Shadows of Fire is an adventure of epic proportions. It transports the reader into the parallel future, where mankind has created its own worst nightmare – a hybrid species of supernatural beings that demands a high toll in return for peace. Follow the adventure of a tortured man seeking redemption and a brother and sister, the unwilling product of both worlds, torn apart, determined to reunite with one another.
Format: 6 x 9 paperback white, 112 pages
Publisher: Outskirts Press (Nov 03, 2011)
Genre: FICTION / Science Fiction / General
The Seraph Contingency: Anael's Tale
The Seraph Contingency is a 2013 Readers Favorite International Book Award winner.
When angel meets demon, prepare for all Hell to break loose. What do a five year old and a ferryman have in common? What does a goddess have to do with a golf course? What's with all the artifacts in Hell? And what business could a seraph possibly have down there? To find the answers, you have to start with a beautiful, bored angel sneaking out of Heaven and wandering into the one dive bar in Purgatory. Add abduction courtesy of a devious demonic Duchess with a checkered past looking to expand her wardrobe. Call in the Cavalry in the form of one powerful Transporter demon with interesting tattoos, an active libido, and a nagging conscience. Toss in a colorful cast of characters, including a violet haired vixen with a mind-bending condo near the beach, a cigar smoking witch and one amazing little boy, for good measure. Season the mixture liberally with science, laughter and magic. Stir until trouble rises, skip the ice and let it all boil over into the wildest party Hell has ever known.
Format: 6 x 9 paperback cream, 266 pages
Genre: FICTION / Action & Adventure
Sleight of Hand: Shadow Games
In a world where predators rule, war is always at the doorstep, and wolves flirt like nobody's business, a young woman struggles to define herself and protect the powerful house she is aligned with from disaster. Sleight of Hand is the highly anticipated sequel to the award-winning Shadows and Fire, where humans and human/animal hybrids known as Supernaturals exist in a dystopian parallel future. The book follows adult twins Lilith and Laydon as they try to find their own identities—one leaning toward darkness and the other toward light—as they develop their powers deep in the shadowy world of the domes. The threat of war looms on the horizon and in the midst of this growing conflict Lilith has a vision tied to a suicide bomber. His words hold a clue to her power but also tie to the blackmail of the powerful dragon house she belongs to. Lilith, Augustin, the retired warrior priest she considers her sensei and father, and the Dragon House allies must face a maze of lies, clever gadgets and danger in a quest to unravel the truths behind the bombers ultimate riddle and an ugly secret. Her psychotic brother and a well-heeled night club owner won't make it easy along the way.
Publisher: Outskirts Press (Dec 30, 2013)
The Robusta Incident
The Robusta Incident introduces readers to Howard Danishefsky. He's a smart-mouthed chemist working for his ex-lover turned tight-skirted, ball-busting boss, Melinda Carpenter, in the shiny downtown office of an international coffee conglomerate known as the Robusta Corporation. He has a legendary astrophysicist father in the Consortium of Evil that he's never met, a dead Russian mother who still keeps in touch, and a brilliant young daughter he loves but rarely sees. More importantly, he also has an evil genius complex that is about to go through the roof. When Howard finds himself pushed past his tolerance limit once again by Carpenter's cutthroat machinations and the Robusta Corporation's mindless culture, he takes it as his cue to "evil up" seeking revenge so nefarious it's guaranteed to gain the attention of the Consortium. What better way to do it than by adding a little "something extra" to the new coffee he's been given carte blanche to develop and using the entire office as his own personal test group? He's convinced he has it all under control, until his secret ingredient gains him the interest of a voodoo queen, an ancient professor, and a guy so far past his expiration date deodorant doesn't even stand a chance.
Format: 5.5 x 8.5 paperback cream, 307 pages
Publisher: Jennifer Fales (Jan 09, 2015)
Genre: FICTION / Horror
Ready share your inspirations and stories? Get published with Outskirts Press!
May 5, 2016 May 5, 2016 anaels tale, author jennifer fales, author spotlight jennifer fales, award-winning author, Fantasy, fiction, Jennifer Fales, science fiction, shadow games, shadows of fire, sleight of hand, supernatural, The Seraph Contingency
Published by opstephaniec
View all posts by opstephaniec
Previous Previous post: The Right & Wrong of Book Reviews–And How to Get Them
Next Next post: Amazon Featured Book-of-the-Week


text:
Make Music Day at Brighton Jubilee Library
A day packed full of performances, workshops, taster sessions and collaborations.
JUBILEE LIBRARY – FRIDAY 21st JUNE – HOVE LIBRARY
Make Music Day is the world's largest annual music festival with FREE events in more than 800 cities across 120 countries. As part of the celebrations, both Jubilee & Hove Libraries will be hosting a day of community music events including performers of all ages and abilities. There will be performances, workshops, taster sessions and music talks for you to enjoy and participate in!
JUBILEE LIBRARY PROGRAMME:
10:00-11:15 SINGING WORKSHOP with Aneesa Chaudhry and Martlets choir (conference room 3) Join Aneesa and members of the Martlets 'Good Vibrations' community choir to learn some songs that you will then perform at 11:30!
10:15-10:45 BABY BOOGIE drop-in music session for pre-school children and parents, with Ian (children's area)
11:00-11:30 UKULELE FOR BEGINNERS with Ian (community space) An introduction to this fun and easy-to-learn instrument. You will be playing songs by the end of the session! Ukuleles provided.
11:30-12:00 MARTLETS 'GOOD VIBRATIONS' CHOIR with children of Queen's Park Primary School (main hall)
12:00-12:15 GIULIA PEDRANA singer-songwriter (community space)
12:15-12:45 NEW NOTE STRUMMERS guitar group (main hall) New Note Strummers is a guitar group, open to anyone who is in recovery from addiction. We cover well-known songs and also encourage players to compose their own music. The group is very supportive and open to all abilities. If you would like to join the Strummers for a jam at the end of their slot, bring your guitar along on the day!
12:45-1:00 LAUREN ALEX HOOPER singer-songwriter (community space)
1:00-1:30 SILVER STRINGS (main hall) A performance by Brighton & Hove's very own late-starter string band, featuring cello, viola and violin, led by Bela Emerson. Most players were complete beginners to music-making before they came to their first session. The band plays a mixture of popular music, folk, and classical themes as well as some original material.
1:30-1:45 BUCKINGHAM PARK PRIMARY SCHOOL UKULELE CLUB (community space) Children aged between 8 and 11 who have been attending a weekly ukulele club perform numbers and invite you to sing with them.
1:45-2:15 JAMPOTS singing group. Led by Andy Miller, the Jampots is made up of residents and friends of Lavender House Senior Housing Scheme. Together they perform songs from the 1850s to the 1980s!
2:30-3:00 FRETFUL FEDERATION mandolin orchestra (main hall) This award-winning community music group are based in Brighton and formed of players from all over Sussex and beyond. As an ever-expanding orchestra we welcome new members, from novice to expert, and can even supply instruments. Rehearsals are at St George's Church every Tuesday from 7.30p – 9.30pm. Why not pop in and meet us!
3:00-3:30 TIGHT SQUEEZE CEILIDH BAND (community space) Tight Squeeze are a Brighton based ceilidh and barn dance band. Lively jigs, reels and polkas from these islands and beyond, played on fiddle, banjo and squeeze boxes.
3:30-4:00 SILVER SOUNDS SAMBA (main hall) Silver Sounds is a community-based band for people aged 50+ which sets out to challenge the stereotype and celebrate what older people can do. The band meets weekly and performs at many community and charity events. www.silversounds.org
4:00-4:50 JUBILEE MUSIC CLUB TALK: BRIGHTON PUNK SPECIAL with members of The Piranhas, Peter & The Test Tube Babies and Fish Bros (conference room 3)
4:10-4:45 JAM TARTS CHOIR (main hall) Brighton's Jam Tarts are an indie choral collective who perform unique and shimmering arrangements of indie, post-punk, electro, Britpop and artrock classics, from Nick Cave and Tom Waits to Arcade Fire, Ezra Furman and The Stone Roses. Think choirs aren't your cup of tea? You've never heard your favourite songs quite like this before…Joined by a piano, cello, percussion and 2 trumpets, the library will be anything but quiet!
4:45-50 FINALE performance of 'Bring Me Sunshine'. Join us for a mass rendition of this joyful classic with your voice or even an instrument! Instrument notation/chords can be found at https://makemusicday.co.uk/mmd-song/
Jubilee Library, Jubilee Street, Brighton, BN1 1GE, UK
SINGING WORKSHOP
BABY BOOGIE
UKULELE FOR BEGINNERS
MARTLETS 'GOOD VIBRATIONS' CHOIR
GIULIA PEDRANA
NEW NOTE STRUMMERS
LAUREN ALEX HOOPER
SILVER STRINGS
BUCKINGHAM PARK PRIMARY SCHOOL UKULELE CLUB
JAMPOTS
FRETFUL FEDERATION
TIGHT SQUEEZE CEILIDH BAND
JUBILEE MUSIC CLUB TALK: BRIGHTON PUNK SPECIAL
JAM TARTS CHOIR
4:45-50 FINALE
Acapella Acoustic Choral/Gospel Classical Folk Jam Session Orchestral Pop Samba/Marching


Roy, Tirthankar (2018) Inequality in colonial India. Economic History working papers (286). London School of Economics and Political Science, London, UK.
A view popular in Indian economic history scholarship claims that the institutional and commercial policy of British India made the rich Indians richer and the poor poorer during colonial rule. The paper shows that the evidence to support the conjecture is weak. Missing data on peasant income makes it hard to generalize on aggregate trends in inequality. But the evidence does question the role of state policy behind trends in inequality. An alternative account starts from the distinction between land-dependent and trade-dependent occupations. The open economy of the nineteenth century affected these two spheres differently. Low and stagnant land-productivity limited the average return that accrued to land-dependent occupations. Occupations directly or indirectly dependent on trading could escape the constraint partially.