text:
#include "win32inc.hpp"

using namespace System;
using namespace System::IO;
using namespace System::Collections;
using namespace System::Reflection;
using namespace System::Runtime::InteropServices;
using namespace System::Collections::Specialized;
using namespace System::Xml;
using namespace System::Xml::XPath;
using namespace System::Text;

#ifndef  __PRINTSYSTEMINTEROPINC_HPP__
#include <PrintSystemInteropInc.hpp>
#endif

#ifndef  __PRINTSYSTEMINC_HPP__
#include <PrintSystemInc.hpp>
#endif

#ifndef  __PRINTSYSTEMPATHRESOLVER_HPP__
#include <PrintSystemPathResolver.hpp>
#endif

using namespace System::Printing;

#ifndef  __PRINTSYSTEMATTRIBUTEVALUEFACTORY_HPP__
#include <PrintSystemAttributeValueFactory.hpp>
#endif

#ifndef  __OBJECTSATTRIBUTESVALUESFACTORY_HPP__
#include <ObjectsAttributesValuesFactory.hpp>
#endif

#ifndef  __PRINTSYSTEMINTEROPINC_HPP__
#include <PrintSystemInteropInc.hpp>
#endif

#ifndef  __GETDATATHUNKOBJECT_HPP__
#include <GetDataThunkObject.hpp>
#endif

#ifndef  __SETDATATHUNKOBJECT_HPP__
#include <SetDataThunkObject.hpp>
#endif

using namespace MS::Internal;
using namespace MS::Internal::PrintWin32Thunk::DirectInteropForPrintQueue;

using namespace System::Printing::Activation;

/*++

Routine Name:

    LocalPrintServer

Routine Description:

    Constructor. It binds the object to the print server.

Arguments:

    None

Return Value:

    N\A

--*/
LocalPrintServer::
LocalPrintServer(
    void
    ):
PrintServer(),
defaultPrintQueue(nullptr),
accessVerifier(nullptr)
{
    try
    {
        Initialize();

        this->IsInternallyInitialized = true;

        refreshPropertiesFilter = LocalPrintServer::GetAllPropertiesFilter();
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.Generic");
    }
}

/*++

Routine Name:

    LocalPrintServer

Routine Description:

    Constructor

Arguments:

    type    - print server type.

Return Value:

    N\A

--*/
LocalPrintServer::
LocalPrintServer(
    PrintServerType type
    ):
PrintServer(nullptr,
            type),
defaultPrintQueue(nullptr)
{
    try
    {
        Initialize();

        this->IsInternallyInitialized = true;

        refreshPropertiesFilter = LocalPrintServer::GetAllPropertiesFilter();
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.Generic");
    }
}

/*++

Routine Name:

    LocalPrintServer

Routine Description:

    Constructor

Arguments:

    propertiesFilter    - server properties to be initialized while building the object.

Return Value:

    N\A

--*/
LocalPrintServer::
LocalPrintServer(
    array<LocalPrintServerIndexedProperty>^  propertiesFilter
    ):
PrintServer(nullptr,
            (array<PrintServerIndexedProperty>^)propertiesFilter),
defaultPrintQueue(nullptr)
{
    try
    {
        Initialize();

        this->IsInternallyInitialized = true;

        refreshPropertiesFilter = GetAllPropertiesFilter(ConvertPropertyFilterToString(propertiesFilter));
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.Generic");
    }
}

/*++

Routine Name:

    LocalPrintServer

Routine Description:

    Constructor

Arguments:

    propertiesFilter    - server properties to be initialized while building the object.

Return Value:

    N\A

--*/
LocalPrintServer::
LocalPrintServer(
    array<String^>^       propertiesFilter
    ):
PrintServer(nullptr,
            propertiesFilter),
accessVerifier(nullptr)
{
    try
    {
        Initialize();

        this->IsInternallyInitialized = true;

        refreshPropertiesFilter = LocalPrintServer::GetAllPropertiesFilter(propertiesFilter);
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.Generic");
    }
}

/*++

Routine Name:

    LocalPrintServer

Routine Description:

    Constructor. Binds the object to the local print server and populates
    all properties.

Arguments:

    desiredAccess   -   requested permissions

Return Value:

    N\A

--*/
LocalPrintServer::
LocalPrintServer(
    PrintSystemDesiredAccess    desiredAccess
    ):
PrintServer(nullptr,
            desiredAccess),
defaultPrintQueue(nullptr),
accessVerifier(nullptr)
{
    try
    {
        Initialize();

        this->IsInternallyInitialized = true;

        refreshPropertiesFilter = LocalPrintServer::GetAllPropertiesFilter();

        GetUnInitializedData(refreshPropertiesFilter);
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.Generic");
    }
}

/*++

Routine Name:

    LocalPrintServer

Routine Description:

    Constructor. Binds the object to the local print server.

Arguments:

    propertiesFilter - server properties to be initialized while building the object.
    desiredAccess    - requested permissions

Return Value:

    N\A

--*/
LocalPrintServer::
LocalPrintServer(
    array<LocalPrintServerIndexedProperty>^    propertiesFilter,
    PrintSystemDesiredAccess                   desiredAccess
    ):
PrintServer(nullptr,
            (array<PrintServerIndexedProperty>^)propertiesFilter,
            desiredAccess),
accessVerifier(nullptr)
{
    try
    {
        Initialize();

        this->IsInternallyInitialized = true;

        refreshPropertiesFilter = GetAllPropertiesFilter(ConvertPropertyFilterToString(propertiesFilter));

        GetUnInitializedData(refreshPropertiesFilter);
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.Generic");
    }
}

/*++

Routine Name:

    LocalPrintServer

Routine Description:

    Constructor. Binds the object to the local print server.

Arguments:

    propertiesFilter - server properties to be initialized while building the object.
    desiredAccess    - requested permissions

Return Value:

    N\A

--*/
LocalPrintServer::
LocalPrintServer(
    array<String^>^             propertiesFilter,
    PrintSystemDesiredAccess    desiredAccess
    ):
PrintServer(nullptr,
            propertiesFilter,
            desiredAccess),
accessVerifier(nullptr)
{
    try
    {
        Initialize();

        this->IsInternallyInitialized = true;

        refreshPropertiesFilter = LocalPrintServer::GetAllPropertiesFilter(propertiesFilter);

        GetUnInitializedData(refreshPropertiesFilter);
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.Generic");
    }
}

/*++

Routine Name:

    get_DefaultPrintQueue

Routine Description:

    Property

Arguments:

    None

Return Value:

    object that represents the default print queue.

--*/
PrintQueue^
LocalPrintServer::DefaultPrintQueue::
get(
    void
    )
{
    VerifyAccess();

    if(IsDelayInitialized)
    {
        GetUnInitializedData(refreshPropertiesFilter);
        IsDelayInitialized = false;
    }
    else
    {
        GetDataFromServer("DefaultPrintQueue", false);
    }

    return defaultPrintQueue;
}

/*++

Routine Name:

    set_DefaultPrintQueue

Routine Description:

    Property

Arguments:

    queue - PrintQueue object that represents the default print queue

Return Value:

    void

--*/
void
LocalPrintServer::DefaultPrintQueue::
set(
    PrintQueue^     requiredDefaultQueue
    )
{
    VerifyAccess();

    if(requiredDefaultQueue != defaultPrintQueue ||
       (requiredDefaultQueue &&
        !requiredDefaultQueue->Name->Equals(defaultPrintQueue->Name)))
    {
        defaultPrintQueue = requiredDefaultQueue;

        PropertiesCollection->GetProperty("DefaultPrintQueue")->Value = defaultPrintQueue;
    }
}

/*++

Routine Name:

    GetDefaultPrintQueue

Routine Description:

    Returns the default print queue

Arguments:

    None

Return Value:

    None

--*/
PrintQueue^
LocalPrintServer::
GetDefaultPrintQueue(
    void
    )
{
   return (gcnew LocalPrintServer())->DefaultPrintQueue;
}

/*++

Routine Name:

    ConnectToPrintQueue

Routine Description:

    Creates a printer connection to a given printer.

Arguments:

    printQueuePath   - \\server\share or \\server\printerName
Return Value:

    None

--*/
bool
LocalPrintServer::
ConnectToPrintQueue(
    String^ printQueuePath
    )
{
    VerifyAccess();

    bool    returnValue = false;

    try
    {
        returnValue = PrintWin32Thunk::PrinterThunkHandler::ThunkAddPrinterConnection(printQueuePath);
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.AddConnection");
    }

    return returnValue;
}

/*++

Routine Name:

    ConnectToPrintQueue

Routine Description:

    Creates a printer connection to a given printer.

Arguments:

    printerPath   - \\server\share or \\server\printerName
Return Value:

    None

--*/
bool
LocalPrintServer::
ConnectToPrintQueue(
    PrintQueue^ queue
    )
{
    VerifyAccess();

    bool    returnValue = false;

    try
    {
        returnValue = PrintWin32Thunk::PrinterThunkHandler::ThunkAddPrinterConnection(GetFullPrintQueueName(queue));
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.AddConnection");
    }

    return returnValue;
}

/*++

Routine Name:

    DisconnectFromPrintQueue

Routine Description:

    Deletes a printer connection to a given printer.

Arguments:

    printQueuePath   - \\server\share or \\server\printerName
Return Value:

    None

--*/
bool
LocalPrintServer::
DisconnectFromPrintQueue(
    String^ printQueuePath
    )
{
    VerifyAccess();

    bool    returnValue = false;

    try
    {
        returnValue = PrintWin32Thunk::PrinterThunkHandler::ThunkDeletePrinterConnection(printQueuePath);
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.DeleteConnection");
    }

    return returnValue;
}

/*++

Routine Name:

    DisconnectFromPrintQueue

Routine Description:

    Deletes a printer connection to a given printer.

Arguments:

    printerPath   - \\server\share or \\server\printerName
Return Value:

    None

--*/
bool
LocalPrintServer::
DisconnectFromPrintQueue(
    PrintQueue^ queue
    )
{
    VerifyAccess();

    bool    returnValue = false;

    try
    {
        returnValue = PrintWin32Thunk::PrinterThunkHandler::ThunkDeletePrinterConnection(GetFullPrintQueueName(queue));
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.DeleteConnection");
    }

    return returnValue;
}

/*++

Routine Name:

    GetFullPrintQueueName

Routine Description:

    Build the full print queue name that can be used in the thunking code.

Arguments:

    PrintQueue  - queue object

Return Value:

    printerPath   - \\server\printerName
    None

--*/
String^
LocalPrintServer::
GetFullPrintQueueName(
    PrintQueue^ queue
    )
{
    PrintPropertyDictionary^ resolverAttributeValueCollection = gcnew PrintPropertyDictionary();
    PrintStringProperty^     stringAttributeValue = nullptr;

    stringAttributeValue = gcnew PrintStringProperty("ServerName",
                                                     queue->HostingPrintServer->Name);
    resolverAttributeValueCollection->Add(stringAttributeValue);

    stringAttributeValue = gcnew PrintStringProperty("PrinterName",
                                                     queue->Name);
    resolverAttributeValueCollection->Add(stringAttributeValue);

    PrintSystemPathResolver^ resolver =
    gcnew PrintSystemPathResolver(resolverAttributeValueCollection,
                                  gcnew PrintSystemUNCPathResolver(gcnew PrintSystemDefaultPathResolver));

    resolver->Resolve();

    return resolver->Protocol->Path;
}
/*++

Routine Name:

    RegisterAttributesNamesTypes

Routine Description:

    Initializes the internal table that keeps the association between
    a property name and a attribute value type.

Arguments:

    None

Return Value:

    None

--*/
void
LocalPrintServer::
RegisterAttributesNamesTypes(
    void
    )
{
    //
    // Register the attributes of the base class first
    //
    PrintServer::RegisterAttributesNamesTypes(LocalPrintServer::attributeNameTypes);
    //
    // Register the attributes of the current class
    //
    for(Int32 numOfAttributes = 0;
        numOfAttributes < LocalPrintServer::primaryAttributeNames->Length;
        numOfAttributes++)
    {
        attributeNameTypes->Add(LocalPrintServer::PrimaryAttributeNames()[numOfAttributes],
                                LocalPrintServer::PrimaryAttributeTypes()[numOfAttributes]);
    }
}

/*++

Routine Name:

    CreateAttributeNoValue

Routine Description:

    Creates an uninitialized PrintProperty object
    associated with a given property.

Arguments:

    attributeName   - name of the property

Return Value:

    None

--*/
PrintProperty^
LocalPrintServer::
CreateAttributeNoValue(
    String^ attributeName
    )
{
    Type^ type = (Type^)LocalPrintServer::attributeNameTypes[attributeName];

    return PrintPropertyFactory::Value->Create(type,attributeName);
}

/*++

Routine Name:

    CreateAttributeValue

Routine Description:

    Creates a PrintProperty object
    associated with a given property and initializes it with the given value.

Arguments:

    attributeName   - name of the property
    attributeValue  - value of the property

Return Value:

    None

--*/
PrintProperty^
LocalPrintServer::
CreateAttributeValue(
    String^ attributeName,
    Object^ attributeValue
    )
{
    Type^ type = (Type^)LocalPrintServer::attributeNameTypes[attributeName];

    return PrintPropertyFactory::Value->Create(type,attributeName,attributeValue);
}

/*++

Routine Name:

    CreateAttributeNoValueLinked

Routine Description:

    Creates a PrintProperty object
    associated with a given property and links it with a delegate
    that will keep the attribute value and the property in [....].

Arguments:

    attributeName   - name of the property
    delegate        - delegate to be linked to attribute value

Return Value:

    None

--*/
PrintProperty^
LocalPrintServer::
CreateAttributeNoValueLinked(
    String^             attributeName,
    MulticastDelegate^  delegate
    )
{
    Type^ type = (Type^)LocalPrintServer::attributeNameTypes[attributeName];

    return PrintPropertyFactory::Value->Create(type,attributeName,delegate);
}

/*++

Routine Name:

    CreateAttributeValueLinked

Routine Description:

    Creates a PrintProperty object
    associated with a given property and links it with a delegate
    that will keep the attribute value and the property in [....].

Arguments:

    attributeName   - name of the property
    attributeValue  - value of the property
    delegate        - delegate to be linked to attribute value

Return Value:

    None

--*/
PrintProperty^
LocalPrintServer::
CreateAttributeValueLinked(
    String^             attributeName,
    Object^             attributeValue,
    MulticastDelegate^  delegate
    )
{
    Type^ type = (Type^)LocalPrintServer::attributeNameTypes[attributeName];

    return PrintPropertyFactory::Value->Create(type,attributeName,attributeValue,delegate);
}

/*++

Routine Name:

    GetDataFromServer

Routine Description:

    Initialize a given property with data from the Spooler service.

Arguments:

    property - property to be initialized

Return Value:

    None

--*/
void
LocalPrintServer::
GetDataFromServer(
    String^     property,
    Boolean     forceRefresh
    )
{
    if (property)
    {
        PrintProperty^  attributeValue = PropertiesCollection->GetProperty(property);

        if (forceRefresh || !attributeValue->IsInitialized)
        {
            //
            // must do delegate table
            //
            try
            {
                attributeValue->IsInternallyInitialized = true;

                String^ defaultPrinterName = PrintWin32Thunk::PrinterThunkHandler::ThunkGetDefaultPrinter();

                if (property->Equals("DefaultPrintQueue"))
                {
                    PrintServer ^targetPrintServer  = nullptr;
                    Boolean     isPrinterConnection = false;
                    //
                    // If the default PrintQueue is a connection, then we
                    // have to instantiate both a PrintServer representing the
                    // Print Server on which this queue lives and a PrintQueue
                    // representing the connection.
                    // Otherise we instantiate a PrintQueue on this LocalPrintServer
                    // 1. Test for type of default PrintQueue
                    //
                    isPrinterConnection = PrintSystemUNCPathResolver::ValidateUNCPath(defaultPrinterName);
                    if(isPrinterConnection == true)
                    {
                        //
                        // 2. If it is then, break name into ServerName and PrintQueueName;
                        //
                        PrintSystemUNCPath----er^ ----er = gcnew PrintSystemUNCPath----er(defaultPrinterName);
                        targetPrintServer   = gcnew PrintServer(----er->PrintServerName,
                                                                PrintServerType::Browsable);
                        defaultPrinterName  = ----er->PrintQueueName;
                    }
                    else
                    {
                        //
                        // This means that this is not a Connection.
                        // Could be something else other than a local
                        // printer, but we don't care at this stage
                        //
                        targetPrintServer = this;
                    }
                    attributeValue->Value = gcnew PrintQueue(targetPrintServer,
                                                             defaultPrinterName);
                }

                attributeValue->IsInternallyInitialized = false;

            }
            catch (InternalPrintSystemException^ internalException)
            {
                throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.GetDefaultPrinter");
            }
        }
    }
}

/*++

Routine Name:

    GetUnInitializedData

Routine Description:

    Initialize an array of properties with data from the Spooler service.

Arguments:

    properties - array of string representing the properties to be initialized

Return Value:

    None

--*/
void
LocalPrintServer::
GetUnInitializedData(
    array<String^>^ properties
    )
{
    for(int numOfProperties = 0;
        numOfProperties < properties->Length;
        numOfProperties++)
    {
        GetDataFromServer(properties[numOfProperties], false);
    }
}
/*++

Routine Name:

    ComitDirtyData

Routine Description:

    Commits the dirty properties specified in the
    array of properties.

Arguments:

    properties - array of properties to be commited

Return Value:

    None

--*/
void
LocalPrintServer::
ComitDirtyData(
    array<String^>^ properties
    )
{
    if (properties != nullptr)
    {
        for(int propertyIndex = 0;
            propertyIndex < properties->Length;
            propertyIndex++)
        {
            PrintProperty^  attributeValue = attributeValue = PropertiesCollection->GetProperty(properties[propertyIndex]);

            //
            // hase something table driven
            //
            if (attributeValue->Name->Equals("DefaultPrintQueue"))
            {
                try
                {
                    PrintWin32Thunk::PrinterThunkHandler::ThunkSetDefaultPrinter(GetFullPrintQueueName((PrintQueue^)attributeValue->Value));
                }
                catch (InternalPrintSystemException^ internalException)
                {
                    throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.SetDefaultPrinter");
                }
            }
        }
   }

}

/*++

Routine Name:

    Commit

Routine Description:

    Commits the dirty attributes to server.

Arguments:

    None

Return Value:

    void

--*/
void
LocalPrintServer::
Commit(
    void
    )
{
    VerifyAccess();

    try
    {
        ComitDirtyData(GetAlteredPropertiesFilter());
        PrintServer::Commit();
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.Commit");
    }
}

/*++

Routine Name:

    Refresh

Routine Description:

    Refreshes the object attributes.

Arguments:

    None

Return Value:

    void

--*/
void
LocalPrintServer::
Refresh(
    void
    )
{
    VerifyAccess();

    try
    {
        GetDataFromServer("DefaultPrintQueue", true);
        PrintServer::Refresh();
    }
    catch (InternalPrintSystemException^ internalException)
    {
        throw CreatePrintServerException(internalException->HResult, "PrintSystemException.PrintServer.Refresh");
}

}

/*++

Routine Name:

    GetAlteredPropertiesFilter

Routine Description:

    Creates an array string representing of the dirty properties of a PrintServer object.

Arguments:

    propertiesFilter - array of property strings

Return Value:

    None

--*/
array<String^>^
LocalPrintServer::
GetAlteredPropertiesFilter(
    void
    )
{
    Int32   indexInAlteredProperties = 0;

    array<String^>^ probePropertiesFilter = gcnew array<String^>(LocalPrintServer::primaryAttributeNames->Length);

    for(Int32 numOfAttributes = 0;
        numOfAttributes < LocalPrintServer::primaryAttributeNames->Length;
        numOfAttributes++)
    {
        String^ upLevelAttribute = LocalPrintServer::primaryAttributeNames[numOfAttributes];

        if(PropertiesCollection->GetProperty(LocalPrintServer::primaryAttributeNames[numOfAttributes])->IsDirty)
        {
            probePropertiesFilter[indexInAlteredProperties++] = upLevelAttribute;
        }
    }

    array<String^>^ alteredPropertiesFilter = nullptr;

    if(indexInAlteredProperties)
    {
        alteredPropertiesFilter = gcnew array<String^>(indexInAlteredProperties);

        for(Int32 indexOfMovedData = 0;
            indexOfMovedData < indexInAlteredProperties;
            indexOfMovedData++)
        {
            alteredPropertiesFilter[indexOfMovedData] = probePropertiesFilter[indexOfMovedData];
        }
    }

    return alteredPropertiesFilter;
}

/*++

Routine Name:

    Initialize

Routine Description:

    It initializes the object's internal collections and tables.
    It builds the attribute value collection by creating PrintProperty
    corresponding to the base object properties and adding them to the collection
    and also creates the PrintProperty objects for this object's properties
    PrintSErver object doesn't have secondary attributes.

Arguments:

    N/A

Return Value:

    N\A

--*/
void
LocalPrintServer::
Initialize(
    void
    )
{
    accessVerifier = gcnew PrintSystemDispatcherObject();

    array<MulticastDelegate^>^ propertiesDelegates = CreatePropertiesDelegates();

    for(Int32 numOfPrimaryAttributes=0;
        numOfPrimaryAttributes < LocalPrintServer::primaryAttributeNames->Length;
        numOfPrimaryAttributes++)
    {
        PrintProperty^ printSystemAttributeValue = nullptr;

        printSystemAttributeValue =
        ObjectsAttributesValuesFactory::Value->Create(this->GetType(),
                                                      primaryAttributeNames[numOfPrimaryAttributes],
                                                      propertiesDelegates[numOfPrimaryAttributes]);

        PrintSystemObject::PropertiesCollection->Add(printSystemAttributeValue);
    }

}

/*++

Routine Name:

    CreatePropertiesDelegates

Routine Description:

    This method creates the delegates associated with each property
    of this object. The purpose to invoke one of these delegated is to keep
    the LocalPrintServer's properties in [....] with the attribute value collection.
    The delegates are associated with the attribute value created for each of the
    object's property. The attribute value collection is updated through the thunking code
    with data coming from the Spooler service.

Arguments:

    None

Return Value:

    None

--*/
array<MulticastDelegate^>^
LocalPrintServer::
CreatePropertiesDelegates(
    void
    )
{
    array<MulticastDelegate^>^ propertiesDelegates = gcnew array<MulticastDelegate^>(primaryAttributeNames->Length);

    propertiesDelegates[0]  = gcnew PrintSystemDelegates::PrintQueueValueChanged(this,&LocalPrintServer::DefaultPrintQueue::set);

    return propertiesDelegates;
}

/*++

Routine Name:

    GetAllPropertiesFilter

Routine Description:

    Creates an array string representing of all properties of a PrintServer object.

Arguments:

    None

Return Value:

    None

--*/
array<String^>^
LocalPrintServer::
GetAllPropertiesFilter(
    void
    )
{
    //
    // Properties = Base Class Properties + Inherited Class Properties
    //
    array<String^>^ allPropertiesFilter = gcnew array<String^>(LocalPrintServer::primaryAttributeNames->Length);

    //
    // Then Add the Inherited Class Properties
    //
    for(Int32 numOfAttributes = 0;
        numOfAttributes < LocalPrintServer::primaryAttributeNames->Length;
        numOfAttributes++)
    {
        allPropertiesFilter[numOfAttributes] = LocalPrintServer::primaryAttributeNames[numOfAttributes];
    }

    return allPropertiesFilter;
}

/*++

Routine Name:

    GetAllPropertiesFilter

Routine Description:

    Creates an array string representing of the properties of a PrintServer object.

Arguments:

    propertiesFilter - array of propert strings

Return Value:

    None

--*/
array<String^>^
LocalPrintServer::
GetAllPropertiesFilter(
    array<String^>^ propertiesFilter
    )
{
    array<String^>^ allPropertiesFilter = nullptr;
    Int32   numOfPrintServerProperties  = 0;

    for(Int32 index = 0; index < propertiesFilter->Length; index++)
    {
        if (LocalPrintServer::attributeNameTypes->ContainsKey(propertiesFilter[index]))
        {
            numOfPrintServerProperties++;
        }
    }

    allPropertiesFilter = gcnew array<String^>(numOfPrintServerProperties);

    for(Int32 index = 0, numOfPrintServerProperties = 0; index < propertiesFilter->Length; index++)
    {
        if (LocalPrintServer::attributeNameTypes->ContainsKey(propertiesFilter[index]))
        {
            allPropertiesFilter[numOfPrintServerProperties] = propertiesFilter[index];
        }
    }

    return allPropertiesFilter;
}

/*++

Routine Name:

    ConvertPropertyFilterToString

Routine Description:

    Converts an array of PrintServerProperties to a string array.

Arguments:

    propertiesFilter - array of PrintServerProperties values

Return Value:

    None

--*/
array<String^>^
LocalPrintServer::
ConvertPropertyFilterToString(
    array<LocalPrintServerIndexedProperty>^        propertiesFilter
    )
{
    array<String^>^ propertiesFilterAsStrings = gcnew array<String^>(propertiesFilter->Length);
    Int32   numOfLocalPrintServerProperties = 0;

    for(Int32 numOfProperties = 0;
        numOfProperties < propertiesFilter->Length;
        numOfProperties++)
    {
        String^ attributeName = propertiesFilter[numOfProperties].ToString();

        if (LocalPrintServer::attributeNameTypes->ContainsKey(attributeName))
        {
            propertiesFilterAsStrings[numOfLocalPrintServerProperties++] = attributeName;
        }
    }

/*    if (numOfLocalPrintServerProperties < propertiesFilter->Length)
    {
        String^ sizedPropertiesFilterAsStrings[] = gcnew String^[numOfLocalPrintServerProperties];

        for (Int32 index = 0; index < numOfLocalPrintServerProperties; index++)
        {
            sizedPropertiesFilterAsStrings[index] = propertiesFilterAsStrings[index];
        }
    }*/

    return propertiesFilterAsStrings;
}

void
LocalPrintServer::
VerifyAccess(
    void
    )
{
    if(accessVerifier==nullptr)
    {
        accessVerifier = gcnew PrintSystemDispatcherObject();
    }

    accessVerifier->VerifyThreadLocality();

}

redpajama_set_name: RedPajamaGithub


text:
Tag: alternative media
Mark H. Teeter: Turn on the News
Marilyn Monroe doing a spit-take.
And Now the News, With Somebody You Weren't Expecting
Mark H. Teeter
Moscow TV Tonite
The accepted wisdom among high-dome media analysts here in Russia has been that Muscovites who checked on-the-hour radio news either tuned in Ekho Moskvy or Kommersant FM for actual news, in larger and smaller doses, respectively, plus commentary from sources who were relevant and informed or were supposed to be.
Or they got earfuls of untruths, half-truths or misrepresentations of the news from just about everywhere else on the dial, along with pseudo-commentary from various professional spokes-liars (presidential, ministerial, etc.) or professional dim bulbs (Russian MPs, selected idiots on the street, somebody's cousin Vanya).
Whether or not you accept this accepted wisdom, there has been an interesting recent development you should note: an intriguing Third Way that you may have missed (as I did until recently) has opened up here in the New Muscovite ether for listeners keen on locally sourced radio news coverage. Its creators have given their project's genre the highfalutin name Avtorskie Novosti, that is, Auteur News, by analogy with avtorskoe kino or auteur cinema.
You might, however, dub the genre The News from Somebody Noteworthy Who Doesn't Do Radio News for a Living and Might Offer an Interesting Take on Today's Edition of It.
Auteur News was the brainchild of the modest-sized NSN (Natsionalnaya Sluzhba Novostei), which described the project, as I discovered on its website, in alluring terms.
Auteur News from NSN is a radio program broadcast simultaneously by three stations (Nashe Radio, Rock FM, Radio Jazz) with a daily audience of 1.5 million people in Moscow and four million in Russia. The presenters of Auteur News are well known to listeners, as they are among the most famous people in the country. Currently, 200 contributors are involved in the project.
That thumbnail sketch should pique the interest of listeners numbed by Ekho's necessary but wearisome good accounts of bad news and the embarrassing agitprop elsewhere on the dial: "President Vladimir Putin today signed another new law to make life better and happier."
Question No. 1 in the minds of potential listeners would likely be, "Wait, just who are the Auteur 200?" And they would be right to ask. Nikita Mikhalkov is certainly a famous person, for example, but many people would feel more confident getting their news and commentary from a bag of doorknobs.
But let's start with the glass half full: a brief retelling of how I came across Auteur News.
The wife and I often put on Radio Jazz quietly as background music to dinner, when the grandson, who hates jazz, isn't joining us.
We were listening to it with one ear, as usual, when the news came on at 8:00 p.m. one recent evening.
Imagine my surprise when a measured female voice from the seemingly politics-free jazz station launched into a four-point litany of items-plus-commentary that seemed like something you'd call Real News with Real Attitude.
The Ministry of Finance, Radio Jazz told us, had "refused to provide the Russian Academy of Sciences funding for international scholarly and scientific cooperation," which would result in Russia "finding itself in the backwaters of science again, the fruits of which we already know from the Soviet period."
A repeat of that would be, the voice continued, a "very sad" prospect.
Hmm! My one-ear listening quickly ratcheted up to one-and-a-half-ear listening.
Radio Jazz continued on a more upbeat note.
"Kirill Serebrennikov's ballet Nureyev was named Ballet of the Year by the jury of the professional music award BraVo," with the presentation taking place at the Bolshoi Theater in Moscow.
This wouldn't seem a particularly newsworthy story: the ballet had won a sizable basket of international awards since its premiere in 2017. Ah, but then you recalled the scandals surrounding the production here, including the arrest of the director, and the overall public attitude toward things artistic identified with "non-traditional orientations."
But the announcement of the award was not the end of the item, as the presenter continued.
"I had the good fortune to see the ballet Nureyev It really is a wonderful ballet, striking from many points of view. And considering that Kirill Serebrennikov, in fact, staged the ballet by long distance, so to speak, the outcome is little short of a miracle. It is sad our national know-how is linked to creative events in ways that are not positive. But I would like to congratulate Serebrennikov on this well-deserved award. May he have the strength to overcome all his trials."
Wow, just wow. It dawned on me what I was hearing was not only not The News in Putinese. It was news-plus-opinion that would make many Putinistas angry and hostile. I was beginning to wonder whether black sedans and a police van were heading toward Radio Jazz that very minute.
Next, Radio Jazz reported that an ominous institution called the Federal Penitentiary Service of Russia, which sounds even more ominous in Russian (Federalnaya Sluzhba Ispolneniya Nakazanii, or Federal Service for the Enforcement of Punishments) now "want[ed] to oblige its employees to apologize to prisoners in cases where their rights and freedoms have been violated." As in, "Sorry for the rubber hoses and the knuckle sandwich there, Petrov, we didn't mean to, y'know, violate your rights and freedoms and stuff."
As absurd as it sounded to me, it sounded even worse to the Radio Jazz news commentator.
"What a Kafkaesque reality! We will torture people, but then apologize to them. I don't really understand how these things go together. Lately, I've been seeing various features of the old utopian Soviet mindset in a great number of legislative acts. You get the feeling lawmakers don't understand what is happening in reality at all and create an attractive little mockup of it for themselves, to placate their consciences. As in, 'Go right ahead, citizens, demand an apology from your jailers for beating and torturing you.'"
Kafka and sarcasm are surely justified in passing along this news item, I agree, but it was still hard to believe my ears. At this point, I was experiencing a flashback impulse to close the kitchen door and huddle around the radio so the neighbors wouldn't hear us listening to illegal "foreign voices"!
The final item Radio Jazz offered its evening listeners to ponder was a question about as philosophical as a news broadcast gets: How happy are you?
First, the context.
"Finland is the happiest country in the world," Radio Jazz told us by way of summing up the annual World Happiness Report. "This ranking of global happiness takes into account GDP per capita, life expectancy, charitable contributions, social support, the level of freedom and the level of corruption in terms of their impact on residents 'vital decisions.'"
Well, Miss Radio Jazz News gave the neighboring Finns plenty of credit.
"Frankly speaking, I am ready to agree right off with this award, because in Finland they do a huge number of social projects. The Finnish people try to be at the center of their own culture. For example, if a festival takes place in a large city in this country, the residents of the surrounding villages are brought there free of charge by bus so they can be involved in culture. I won't even mention many other important laws related to social status, support for the population, and so on. In sum, we should follow the path of Finland, and not, say, North Korea."
The last time I heard a Russian newsreader say, "Let's not be North Korea" was, let's see here, carry the two, ah, that's right: never. Which was why I almost lost a mouthful of after-dinner decaf doing a Danny Thomas spit-take over the kitchen table as the news ended. A little went up my nose, but it was still worth it.
After the shock wore off, a little laptop skating yielded some background on the presenter and commentator of that evening's edition of Auteur News: "Irina Prokhorova, editor-in-chief of the publishing house New Literary Review, specially edited what she thought were the top stories of the day for NSN."
All I could say was, Nice job, Irina, and here's hoping you get another turn at Auteur News before unpleasant men in ill-fitting suits are sent to chat with you at your place of work.
A further bit of web surfing still did not yield what I wanted most: a list of the Auteur 200 and a schedule of their appearances for, say, the upcoming month. But I did dig up a little more background.
I discovered that Auteur News had been on the air for nearly five years, and over 200 presenters had contributed, including politician Vladimir Zhirinovsky, politican and TV presenter Pyotr Tolstoy, football star Ruslan Nigmatullin, actor Sergey Bezrukov, rock musician Andrei Makarevich, writer Sergey Lukyanenko and other Russian celebrities.
This was clearly a very hit-and-miss kind of thing, I could tell. You can imagine setting a long jump record with a sudden vault across the kitchen to turn the radio off before "Auteur News with Vladimir Zhirinovsky" (or Pyotr Tolstoy) abused your eardrums, but if such leaps of faith were what it took to get the likes of Makarevich, long implicitly banned from state-controlled media as an "enemy of the people," back in the public arena, then maybe it was worth it, I figured.
Yes, perhaps sharing the airwaves with the loud and confused was not too great a price to pay for getting a great unheard voice of reason heard again.
And that, it has long been assumed here, is the same devil's bargain by which the majority Gazprom-owned Ekho Moskvy stays on the air: lowbrow types and state shills get air time so real news and sane views can reach millions who would otherwise have to scan the dial for "foreign voices" or, more likely, give up the dial altogether and simply glue their eyes and ears to social media.
Which doesn't sound so bad at first blush, until you recall that social media were instrumental in blessing our brave new millennium with President Donald Trump, who has in turn introduced us to a new and apparently effective form of zombie-generating, masses-manipulating monologue that substitutes for press releases, news conferences, and indeed governance itself: the Auteur Tweet.
In any case, I was still bothered by one thing: how a longtime listener to Radio Jazz could have remained blissfully unaware of Auteur News for the first five years of its existence. Were the presenters less outspoken before? Or did my long-suffering ears simply click automatically to OFF for any radio news that happened to reach them from a station other than Ekho or Kommersant? Possibly both, but one more net search yielded a more likely answer.
This time, I turned up NSN's original announcement of Auteur News, dated November 7, 2012, which noted the program would air only on weekdays, and only twice daily, at 8:00 and 10:00 p.m. If you were merely a one-ear listener, and your dinner usually ended before eight, it obviously took a bracing shot of Irina Prokhorova to get your attention.
This last search also produced a much better picture of the fabled Auteur 200, as the original announcement named names that were big time; indeed, almost all of them, as the list ran to some 178 people (if my count was correct). And the Big Picture spectrum is a broad one: there are plenty of presenters an educated listener would definitely like to hear an earful from. Beyond Makarevich, the list included director Serebrennikov himself, historian and journalist Nikoai Svanidze, progressive politician Irina Khakamada, saxophone legend Igor Butman, political scientist Nikolai Zlobin, filmmaker Alexei Uchitel, theater director Konstantin Raikin, satirist Mikhail Kononenko, producer and composer Stas Namin, national elections commissioner Ella Pamfilova, and a bunch more.
That said, there are just as many (probably more, actually) who would make the same listener wish he had taken his high-school long jump practice more seriously. Beyond Zhirinovsky and Tolstoy, you find motorcycle gang leader Khirurg (The Surgeon), the "pranksters" Vovan and Leksus, dim Duma stalwarts such as . . . but why list the losers here, have a look for yourself.
And relax. While there are definitely some wildcard types, including several rock musicians who use a single name (ask your grandson), you won't find Director Doorknobs on the list. At least not yet.
Which is a reminder that, while Auteur News is a real find, without an updated contributor list and a schedule for it, you'll need to be wary.
Irina Prokhorova was a great way to start, but the next presenter you hear might well focus on Putinista bikers running amok in Crimea.
Be prepared to leap.
Mark H. Teeter, a former opinion page editor and media columnist for the Moscow Times and the Moscow News, is the editor of Moscow TV Tonite on Facebook. His original article was lightly edited to conform with TRR's nonexistent style guide. My thanks to Mr. Teeter for letting him reprint his article here.
By hecksinductionhourin censorship, journalism, music, politics, zeitgeist April 8, 2019 April 9, 2019 2,188 Words1 Comment
The Media's Russia Obsession?
Let's talk about the media's so-called Russia obsession for a few minutes.
What is meant by this is that the mainstream press have devoted tons of coverage to the substantial allegations that the Kremlin mounted a massive operation, mostly via social media, to influence the outcome of the 2016 US presidential election and, further, that the campaign of the candidate who won the election actively colluded with the Kremlin, among other things, in order to discredit the candidate's main opponent in the election. The press has also focused a lot on Robert Mueller's special investigation of these allegations.
Is all of this press coverage sterling? No. Does the press get the story wrong sometimes? Yes.
But this has always been the case with the nominally free press in nominally democratic societies ever since the free press emerged in the eighteenth century in a few countries groping their way towards democracy. It always been biased, prone to mistakes, and otherwise wildly imperfect. And yet it has always been subject to intense scrutiny, at least in my lifetime—and the really infantile desire on the part of certain social and political forces that it be perfect—that is, perfectly biased and ventriloquizing only their viewpoints—although these same forces are rarely so critical of either themselves or other important social institutions.
In this case, the social and political forces that routinely complain about the media's so-called Russia obsession seem to mean, in fact, that the mainstream press and the press in general should simply stop covering what is surely the story of the century: allegations that the world's largest country massively intervened in a presidential election in the world's most powerful country, and that the man who won the election and members of his campaign and transition team were in close contact with agents of the world's largest country during the campaign and transition.
What kind of press would we have if they completely ignored this story?
We would have a press much like the press in the world's largest country, which routinely ignores or severely undercovers really big stories—such as the country's involvement in putting down a popular revolution in a third country whose people have never down anything bad to the people of the world's largest country—or which engages in outright Goebbels-like propaganda nearly every day, leaving the really important stories to opposition liberal newspapers and online media outlets that are read and accessed by a tiny fraction of the country's populace.
Finally, the mainstream media have not been obsessed with Russia itself, but with the alleged actions of the Kremlin, Russian secret services, and Russian internet trolls in connection with the 2016 US presidential election. Period.
There is a another Russia, populated by 143 million people, that had nothing whatsoever to do with the story of the century. They did nothing to skew the outcome of the 2016 US presidential election and, in the main, their lives, aspirations, and actions are roundly ignored by the so-called mainstream media in the west and Russia itself. They are roundly ignored by the so-called alternative media, too, for the simple reason that much of the alternative media in the west operate under the delusion that Putin is an "anti-imperialist." By definitions, Russians who oppose his sagacious rule must be "puppets of the west."
If all of this weren't the case, I would have expected that one or more of these "Russia-obsessed" or "anti-Russian-obsessed" newspapers, magazines, TV channels or websites would have picked up and covered, for example, the shocking story of the Penza-Petersburg "terrorism" case aka the Network case, in which eleven young anarchists and antifascists have been accused of involvement in a "terrorist community" dubbed "the Network."
Most of the accused men have told the same grisly tale of being abducted by FSB-KGB field agents, who took them to remote areas in minivans or to the basements of their headquarters and tortured them for hours, using tasers and bare electrical wires, and severe beatings, attempting to force them to memorize the "confessions" they would later make (or, in some cases, refuse to make) to FSB investigators, who would then petition the courts to send them to remand prisons, where all of them are still imprisoned to this day.
The allegations of torture have been confirmed by Russian civil rights activists and defense attorneys who spoke with some of the men soon after their arrests and, in a few cases, they were also confirmed by physicians who examined the men when their wounds were still fresh.
In any case, a small but growing group of very determined people, including the men's parents, friends, reporters, human rights activists, and concerned citizens, have been working as hard as they can over the last year to bring the case to the attention of the wider Russian public, force prosecutors to investigate the allegations of torture by FSB officers, and otherwise prove that, as seems to be the case, the FSB conjured the entire tale of the "terrorist community" from whole cloth and then handpicked a dozen or so completely innocent young men to be the fallguys, trying to torture and pummel them into admitting their "guilt" although they were guilty of no crime at all.
You would think the "Russia-obsessed" corporate media would jump on a story like this, but except for one article in the New Yorker, the western corporate media have utterly ignored the story of the Network "terrorists," despite the efforts of actual alternative media like openDemocracyRussia (oDR) and my own blog, the Russian Reader, to write about it any chance we can and translate Russian coverage of the case, as published in such as liberal, leftist and civil rights media outlets as Mediazona, OVD Info, and Novaya Gazeta.
The campaign to save the Network boys scored a minor victory the other day during a meeting of the Presidential Council for Civil Society and Human Rights, when several members of the council brought up the case and a similar case no less shocking, the New Greatness case, and forced President Putin to talk about them.
A KGB-FSB officer to the core, Putin pretended not to have heard of the cases, which both pivot on allegations of extreme entrapment, torture, and fabrication by other KGB-FSB officers.
Putin hemmed and hawed, lied and prevaricated, feigned that he couldn't believe what he was hearing, etc., but he did promise to look into the cases and get to the bottom of them.
It's entirely possible he won't do that, but it's just as possible he will make the cases quietly go away to avoid embarrasment.
What I do know, though, is that western mainstream and alternative media, all of them "obsessed" with Putin (but not Russia) in their own way, have shown no interest in this story and thousands of other similar and dissimilar but no less fascinating stories from the real Russia inhabited by most Russians.
There was a slight uptick in their interest in grassroots Russia during the 2011–2012 fair elections protests, but since that movement was roundly defeated, western press coverage has been firmly refocused on the beloved hated figure of the supreme leader, thus once again denying nearly all the other 143 million Russians of agency, their own opinions, and their own lives.
If you're interested in the Network case and related stories, please check out the coverage on oDR and the Russian Reader. Outside of Russia, practically speaking, there has been no coverage of the case anywhere else, and most things you read on international anarchist and antifascist websites are reprints of the stories we have translated and published.
So, let's put this canard about the media's Russia obsession to rest, okay? It's deeply offensive to ordinary smart Russians, whose numbers are much greater than you would be led to think by the mostly lazy coverage of the country in the western press, and just as offensive to the handful of non-Russians who care deeply about what goes on here. {TRR}
P.S. You can support the Network suspects and their families concretely by donating to a solidarity campaign organized by comrades in London on their behalf. Your support will help to offset their legal costs, organizing humanitarian support for the arrested and offering support to their relatives. The resources gathered have so far been distributed according to the financial circumstances of the respective families and the needs of the arrested. Further financial support is being distributed according to the choices made by those arrested throughout the investigation.
Cartoon courtesy of JA and Union Thugs
By hecksinductionhourin antifascism, editorial, international, journalism, politics, putinism, solidarity, zeitgeist December 22, 2018 December 22, 2018 1,422 Words1 Comment

redpajama_set_name: RedPajamaCommonCrawl


text:
eLucidate is the journal of the UK electronic information Group (UKeiG) and focuses on developments and innovations in digital information considering the impact on information professionals and consumers of e-information. Content includes research, project overviews, case studies and reports about information management, digital literacy, information retrieval and search technologies, intranets, social media, Open Access/Open Science, e-publishing and e-industry R&D.
UkeiG's membership is eclectic and includes information professionals at all levels of the UK workforce involved in digital content management and awareness, information dissemination, training and service delivery.
The UKeiG demographic comprises academia, but also the private, commercial and public sectors, embracing schools, further and higher education, the NHS, healthcare and pharmaceutical industries, science, law, finance, arts, humanities, archives, museums and libraries.
Please submit articles on any of these themes via the Submissions page.
As a contributor you will retain your copyright and will be able to republish your work elsewhere if you cite eLucidate as the original place of publication.
All submissions to eLucidate are subject to editorial review, and information professionals with a knowledge of the subject area may be invited to provide feedback and comments (if there is no potential conflict of interest.) If you're interested in becoming a reviewer, please contact the editor.
eLucidate is published three times per volume, around spring, summer and winter. Some articles may be published in advance to the community if they are newsworthy.
eLucidate provides immediate Diamond Open Access to its content on the principle that making research freely available to the public supports a greater global exchange of knowledge. Such access is associated with increased readership and increased citation of an author's work.
eLucidate is published using the Public Knowledge Project's Open Journal Systems (OJS) hosted by the
University of Alberta.
PKP is a multi-university initiative developing free open source software and conducting research to improve the quality and reach of scholarly publishing.
Open Journal Systems (OJS) is an open source software application for managing and publishing scholarly articles and issues online. Originally developed and released by PKP in 2001 to improve access to research, it is a widely used open source international journal publishing platform.
Code of Ethics for Authors
Authors need to ensure that the submission has not been previously published. (The editor may make exceptions in specific circumstances if the original publisher grants permission.)
By submitting an article to eLucidate, authors grant UKeiG the non-exclusive right to publish the material in any format in perpetuity. While authors retain full rights to their content and remain the copyright owner, they should acknowledge eLucidate as the first place of publication in subsequent use, including on deposit in an institutional repository.
The submission must adhere to the requirements outlined in the 'Author Guidelines'.
The author must obtain intellectual property permission rights for the inclusion of any third-party material, including illustrations, figures and tables, for example.
The author must ensure that there are no instances of plagiarism.
The author must acknowledge colleagues, organisations or funding bodies that have contributed towards the submission.
The opinions of authors in eLucidate do not necessarily reflect the opinions of UKeiG.
The authors are solely responsible for the content of their submitted material.
The editor has the right to make the final decision on whether to accept or reject a manuscript with reference to the significance, originality and clarity of the manuscript and its relevance to the journal.
Every submission to eLucidate will be copy-edited for spelling and for sense and clarity. If there are major edits to the article, we may return it to you for your comments and approval or invite you to make the changes. The editor reserves the right to supplement any submitted copy with additional information and links if it improves the context and readability of any submission.


Der absolute beliebteste otto Gutschein ist ebenfalls fast ein Dauerbrenner und gewährt euch 20,95 Euro Rabatt auf eine Bestellung ab 30 Euro Mindestbestellwert. Wer über einen gültigen Rabattcode von Hessnatur verfügt, gibt den Code..
back up too difficult! Swatches are approximately 3" x 3". We are unable to load your coupons. Have a comment on our new layout or a suggestion for a coupons feature we should add? If you receive damaged or defective merchandise, you may contact our Customer Service department at and a representative will be glad to arrange a return or exchange for you. After registering your domain name you can point the name to a webhosting provider for. The Elon club chair not so much. As mentioned, at any time you can point your domain name to your existing website host for.
I am very pleased with the quality and the style. Items available for Ship to Store service will have a "Ship to Store" option near the Add to Cart button on the product page.?order_swatch_generic_MSG? Check Available Domain Names (Whois) m Signup for New Account m Login to existing account m Homepage, nit and m are trademarks of m Inc. For express delivery items over 10 lbs., additional charges will be reflected at checkout. The delivery was easy and the couch is a perfect piece if you are looking for a stylish sofa that is comfortable and durable enough for everyday use. With Ship to Store delivery, you can purchase qualified items* online and have them sent to your closest retail store to pick-up.


text:
Charity Oxfam GB has supported over 400,000 people in humanitarian emergencies, with help from our players
People's Postcode Lottery players are helping Oxfam GB to respond to a humanitarian emergency at any given moment.
On average, the charity is responding in 30 different countries across the globe, many of which are suffering from the effects of climate change and unpredictable weather patterns.
In March 2019, Cyclone Idai devastated the lives of nearly three million people in Mozambique, Malawi and Zimbabwe. Six weeks later, Cyclone Kenneth hit, bringing torrential rains to northern Mozambique. The UN Secretary General declared this "one of the worst-weather related catastrophes in the history of Africa".
Thanks to the support of our players, the Oxfam GB initial response has supported 449,358 people. This has included setting up water treatment facilities, providing Oxfam GB's innovative Lifesaver cubes and hygiene kits to help contain the cholera outbreak.
People living in the world's poorest countries receive around £2.40 per year - less than a penny per day - to protect themselves from the impacts of the climate crisis. The world's poorest people have contributed the least to the climate emergency, but are suffering the most.
Our players also supported Oxfam GB's #SecondHandSeptember campaign. This encouraged people to pledge to not buy any new clothes for 30 days, helping to reduce the harmful effects 'fast fashion' has on people and planet. Oxfam GB research shows that buying one new white cotton shirt produces the same amount emissions as driving a car for 35 miles.
Incredible Charities Worldwide
If you're interesting in helping amazing charities like Oxfam GB, why not sign up to play People's Postcode Lottery? 32% of the ticket price goes to these worthy causes and our players have raised over £486 Million so far. Not only that, our players can also win fantastic Prizes. Find out How It Works and sign up today!
You can also find out more about getting involved with, or helping charities like Oxfam GB in our How To Help guide.
The Lifesaver cube
Share Rapid Responses | People's Postcode Lottery on facebook Share Rapid Responses | People's Postcode Lottery on whatsapp Share Rapid Responses | People's Postcode Lottery on twitter
Copy URL for Rapid Responses | People's Postcode Lottery


Denim label Levi's is welcoming its spring/summer 2015 Line 8 collection in a very special way – by opening a dedicated pop-up shop in the heart of London's Shoreditch.
As the first UK store dedicated solely to its progressive Line 8 range, the East London unit plays host to everything from its signature denim to casual tops, as well as accessories and leather goods for men and women.
Known for its all-black features – including threads, zips, tabs and button – denim buffs have embraced the fashion-forward line throughout its limited lifespan for its fresh, contemporary feel.
Since launching three years ago, the Line 8 arm has garnered attention from fashion fans and celebrities alike, with the likes of London Grammar, Example and Clean Bandit spotted in pieces from the line.
As we enter the coming season, men can expect to find simple separates, such as modern interpretations of its archived Western shirt, alongside Varsity sweatshirts and newly developed Super Skinny fit jeans, finished with dyed-to-match stitching.
The line's minimalist and monochrome aesthetic also carries through to the in store design, with exposed brick and raw metal work adding an industrial edge.
Be sure to visit Levi's Line 8 pop-up store on Charlotte Road, open from 11am-7pm Monday to Saturday, and 11am-5pm on Sundays.


text:
OLI-works
On-line, interactive management consulting, expert sourcing and workshops • Conseil en gestion, recherche d'experts et des ateliers en ligne et interactifs
Home ~ Accueil
Projects and Reports
Les projets et les rapports
Us ~ Nous
OLI-Works Terms and Conditions
This website is owned and operated by OLI-works, a company registered in British Colombia, Canada. Your use of this website is subject to the following terms and all applicable laws. By accessing and browsing this website, you accept, without limitation or qualification, these terms. If you do not agree with any of the terms, please do not use this website.
OLI-WORKS WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND, EITHER DIRECT OR INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL, RESULTING FROM THE USE OF THIS WEBSITE. Your sole and exclusive remedy is to discontinue using and accessing this website.
All the content of this website, including the text, images, drawings, graphics, illustrations and photographs is owned or otherwise provided by OLI-works, and OLI-works does not represent or warrant that such content does not infringe the rights of any other person or entity. All the content of this website is protected pursuant to the Canadian Copyright Act, the copyright laws of the other countries and under international treaties. Any unauthorized use of the content of this website, including all reproduction, distribution or redistribution, transmission or retransmission, communication to the public by telecommunication, performance, translation, distribution to the public or downloading is prohibited without written authorization of OLI-works.
The trade-marks displayed on this website are trade-marks, registered or unregistered, of OLI-works or others, which are the property of their respective owners, and may not be used without written authorization of OLI-works or of the owner of such trade-marks respectively.
Viruses, etc.
OLI-works does not represent or warrant that the information or materials, accessed from or through this website will be uninterrupted or free of errors, defects, viruses or other harmful components, or that any such problems which are discovered will be corrected.
This website is controlled and operated by OLI-w0rks from Kelowna, British Colombia and these terms shall be governed by the laws of British Colombia and the applicable laws of Canada without reference to principles of conflict of laws. You agree to be bound by such laws and to submit to the jurisdiction of the courts of British Colombia or Canada in connection with the interpretation or application of these terms.
These terms apply while you are accessing the website and remain in effect thereafter. In particular, the provisions set out in section 2, 3 and 4 of these terms shall survive even if this website is no longer accessible to you.
A Lantern on the Bow: A History of the Science Council of Canada and its Contributions to the Science and Innovation Policy Debate (2018)
A primer on how one country set up its S&T machinery for notable results. With Jeffrey Kinder and Paul Dufour, editors and authors, plus an assembly of distinguished, "in-the-know" contributors. Chapter 5 – Meg Barker and former Chair Janet E. Halliwell.
Un aperçu de la manière dont un pays a configuré son système de S-T pour obtenir des résultats remarquables. Avec Jeffrey Kinder et Paul Dufour, rédacteurs et auteurs, ainsi qu'un rassemblement de collègues «au courant» et écrivains distingués. Chapitre 5 – Meg Barker et l'ancienne présidente Janet E. Halliwell.
Copyright © 2021 OLI-works


text:
Taissa Farmiga and Nina Dobrev go back to camp in slasher comedy The Final Girls — exclusive images
By Clark Collis
Between MTV's Scream reboot, Ryan Murphy's new Jamie Lee Curtis-starring TV show Scream Queens, and the upcoming film Some KInd of Hate, the slasher genre is enjoying something of a resurrection this year — which seems appropriate given the routinely unkillable nature of its psychopathic antagonists.
But it is new movie The Final Girls which pays deepest homage to the slasher film's late '70s and '80s heyday. Directed by Todd Strauss-Schulson (A Very Harold & Kumar 3D Christmas), the film stars Taissa Farmiga as a high school senior named Max, the daughter of an actress (Malin Akerman), who finds herself trapped in one of her mother's old movies, the Friday the 13th-esque Camp Bloodbath.
Also along for the bloody ride are characters played by Nina Dobrev, Adam DeVine, Alexander Ludwig, Angela Trimbur, Alia Shawkat, Tory N. Thompson, and Silicon Valley star Thomas Middleditch.
Stage 6 Films with Vertical Entertainment is releasing The Final Girls in theaters and on VOD and digital platforms Oct. 9.
You can see exclusive images from the film, above and below.
See Taissa Farmiga in creepy trailer for We Have Always Lived in the Castle
Focus Features developing survival film Paradise, about California's deadliest wildfire
Taissa Farmiga's prayers go unanswered in new clip from The Nun
Exclusive: Naomie Harris has Tyrese Gibson's back in Black and Blue first look
Hilary Swank and Taissa Farmiga reflect on the Time's Up movement
What to watch on Thursday: Nina Dobrev's Fam season finale, and the debut of zombie series Black Summer
Terry Crews wants to play King Triton in The Little Mermaid — see images of him as Ariel's father
Jordana Brewster is officially back for Fast & Furious 9
Birds and pigs go all 007 in final Angry Birds Movie 2 trailer
Charlize Theron and Helen Mirren strap back in for Fast & Furious 9
Spice Girls are bringing girl power back to the big screen with new animated movie
Will Forte gets Satanic in trailer for supernatural comedy Extra Ordinary
A creepy clown is on the loose in clip from horror-comedy Gags the Clown
The Lion King stars come face to face with their characters in new images
Taissa Farmiga faces the terror of The Nun in new image from Conjuring spin-off
Kristen Wiig flanks Jamie Dornan in first Barb and Star Go to Vista Del Mar photo
The Final Girls trailer: Nina Dobrev, Taissa Farmiga star in funny slasher comedy
See Taissa Farmiga and Sebastian Stan in exclusive clip from We Have Always Lived in the Castle
Darren Criss boards musical comedy series Royalties for Quibi
Annabelle Comes Home with help from Vera Farmiga in exclusive photo
Taissa Farmiga and Nina Dobrev go back to camp in slasher comedy The Final Girls — exclusive images


text:
Site Manager: Antonio Grassi
Reg. Trib. Roma 51 - 15/03/2018
pub. nr. 03 of 03.07.2019
Editorial rules
Scientific and Editorial Board
19:52 19 June 2018
LIRPA Journal evaluation process covers products belonging to the following scientific areas:
1) BASIC RESEARCH: it includes fundamental research typical activities , and in particular experimental or theoretical works carried out above all to acquire new knowledge on phenomena and observable facts foundations/grounds , without any high risk content direct applications or practical uses ;
2) SCIENTIFIC CULTURE SPREADING: activity aimed at promoting and helping technical-scientific culture spreading, also in order to contribute to psychological science impressive technical-scientific heritage protection and enhancement.
LIRPA Journal adopts two evaluation methodologies in compliance with current evaluation rules :
Bibliometric Evaluation
Peer review evaluation methodology
Scientific research articles and products presented by authors as natural persons or institutions , individually or in combination , are evaluated with the following methodologies:
The magazine has three GEVs (Groups of Evaluation Experts) whose coordinators and whose members are structured ordinary, associated professors and researchers ( also fixed-term contract or national Health Service. non-onerous teaching convention university professors can be members, but not coordinators) .
– Anonymous double blind peer evaluation (LIRPA Journal refers to at least 2 evaluations expressed by at least 2 experts, each belonging to a different GEV ) by filling in an Evaluation Chart, prepared by LIRPA Journal according to the current rules. In case of conflicting opinions LIRPA Journal uses a third expert's evaluation , belonging to the 3rd GEV, first not involved in the product evaluation.
-Informed peer review in case of necessary in-depth evaluation, if there are the conditions , the GEV (Evaluation Expert Groups) direct evaluation can also be carried out using bibliometric evaluation based on the number of product quotations , on the number of host journal quotations and on the journal itself impact factors indicators;
All GEVs common elements:
GEV evaluation products final responsibility with merit classes award ;
choice to use the informed peer review technique for evaluation, which consists in taking into account several evaluation elements for the final merit classification .
3 Evaluation process
Products evaluation was carried out by the GEVs using bibliometry and peer review. Each product is assigned to two GEV members responsible for the related evaluation process. After the process will be described separately for each methodology.
LIRPA Journal peer review evaluation methodology
The evaluation of scientific research articles and products presented by authors as natural persons or institutions, individually or in combination, takes place with the following methodologies:
Double-blind peer review (LIRPA Journal refers to three GEVs for peer review)
Informed peer review
Peer review is entrusted to independent external experts, chosen among the GEVs (usually at least two per product), who have been assigned the task of expressing anonymously on the quality of the selected publications, which are also anonymous.
– direct evaluation by a GEV (Evaluation Experts Group) member chosen, also using bibliometric analysis based on expected product quotations potential number in the following three years after publication, being the LIRPA Journal a new scientific journal, and on the product hosting magazine impact factors indicators ;
The final quality judgment is expressed on the basis of the following criteria:
a) originality), which means the level at which the product introduces a new way of thinking in relation to research scientific object , and is thus distinguished from the previous approaches to the same object;
b) methodological rigour , which means the level at which the product clearly presents research objectives and the state of the art in literature, adopts a methodology appropriate to the research object and shows that the objectives have been achieved;
c) attested or potential impact in the international scientific community of reference, which means the level at which the product has exercised, or is likely to exercise in the future, a theoretical and / or applicative influence on this community also on the basis of its capacity to comply with research international quality standards .
The analysis based on these criteria converges into a synthetic judgment on the research product, divided into five levels:
1 Excellent. Maximum originality levels – Maximum methodological rigour levels – Strong impact on scientific community
2 High: Good originality levels – Good methodological rigour levels – Significant impact on scientific community
3 Fair: Quite Good originality levels – Quite Good methodological rigour levels – Appreciable impact on scientific community
4 Acceptable: Sufficient originality levels- Sufficient methodological rigour levels- Circumscribed impact on scientific community
5 Limited: Low level of originality – Poor methodological rigour level – Very limited impact level on scientific community
– already certified according to current rules for scientific articles and products by authors who have already been quoted by other Psychological Sciences sector indexed journals.
– waiting within the next 3 years after the publication year for other articles and scientific products by authors not yet mentioned by other indexed sector magazines , being LIRPA Journal a new edition magazine.
– Use of two databases for bibliometric evaluation: product quotations and product hosting journal quotations.
The peer review submits an author 's work or ideas to the scrutiny of one or more experts in the same field. Each of these experts provides its own evaluation (usually method evaluations or search for valid tests), including suggestions for possible improvement to an editor or another intermediary (typically, most evaluations are also communicated to the author himself/herself ). Evaluations usually include explicit recommendations on the text of the manuscript or proposal, often chosen among options offered by the newspaper or publisher. Most of these recommendations are among the following:
work is accepted without reservations;
work is accepted, provided that the author improves it under certain aspects;
the work is rejected, but a revision and a re-proposal are encouraged;
work is rejected without any further possibility.
In this process experts' opinion is only advisory and the publisher does not assume any formal obligation to accept the conclusions. Furthermore, in scientific publications, the experts do not work in groups, they do not communicate with each other and normally they are not aware of other experts' identities. Normally there is no need for experts to express a consensual judgment, unlike other areas, such as the court jury.
In case experts' opinions diverge consistently on the quality of a work analysed, LIRPA Journal observes this convention. The two or three selected reviewers report to the editor their article evaluation , along with suggestions to improve it. The editor then reports the set of comments to the author (some comments may have been reported to the editor as confidential), meanwhile relying on them, he decides whether or not to publish the manuscript. When an editor receives very positive and very negative comments on the same manuscript, he solicits one or more additional reviews to break the uncertainty.
Another strategy in the absence of a clear agreement is that of inviting the author to reply to the reviewers' criticisms and allowing a convincing refutation to dissolve the uncertainty. If an editor does not feel confident in assessing the persuasiveness of a refutation, he can solicit an answer from the judge who brought the original critique. In rare cases, an editor will transmit communications between the author and the reviewers, allowing in practice to discuss a point. Even in these cases, however, editors do not allow reviewers to consult with each other, and the explicit purpose of the process is not to reach consensus or convince someone to change their opinion. However, some medical journals (usually following the open access model) have published on the Internet the story before each article publication, from the original candidacy to the reviewers 'reports, to the authors' comments, to the revised manuscripts. After reviewing and resolving any potential problem item, there are three possible outcomes for the article. The two most simple are the direct refusal and the unconditional acceptance. In many cases authors are given a chance to review the work, with or without specific recommendations or requests from the reviewers.
Review styles
The peer review can be carried out rigorously without being excessively restrictive. For example, in the case of an institution that has a lot of funds to donate, or a magazine with a few high-profile jobs to choose from, it might not make sense to be too selective. Conversely, when funds or publication space are limited, peer review can be used to select a small number of proposals or manuscripts.
The decision about what is "good enough" depends entirely on the magazine editor or organizer . In other cases, the choice of the rigour to be applied will be up to the auditors, with a general guide by the relative GEV person in charge . Where method errors are reported in research study presented before verification or reliability of any evidence presented in support of the thesis, the evident errors are identified and the authors receive both corrections and suggestions.
In order to preserve peer review process integrity, the candidate authors are not informed about who has received their work; they do not even know their work responsible editor identity . LIRPA Journal operates with "blind" or "double-blind" review procedures, authors' identities are hidden to reviewers, to prevent this knowledge from becoming prejudicial to their review. In such cases, however, the associated editor, responsible for the text, knows the author's identity . In double-blind revision, any reference that can identify them as authors is removed from the work.
Auditors' appointment
Auditors' recruitment is carried out on the basis of their publications established skills and the parallel availability of them who are not paid and still take away the time needed for their main research and / or work or if a scholar is among those who hope to submit their work to the publication of this teaching activities within their respective research institutions. A good result of the review process, and therefore a careful reviewers selection , is in fact in the editor's interest to give credit to the magazine itself. Therefore editors have a particular interest in recruiting scholars after reviewing their published editor in the future,. To the recruiter benefit many of the potential reviewers are therefore authors and / or readers who are aware that an efficient and reliable publication system requires an expert review service.
Usually reviewers are not chosen among the author's colleagues, relatives or friends . Auditors are expected to inform the publisher of any conflicts of interest that may arise. Magazines or individual editors often invite a manuscript author to nominate people who they consider qualified to judge their work. Authors are sometimes also invited to nominate natural candidates who should be "disqualified". In this case he may be required to provide a justification (typically expressed in terms of a conflict of interest).
Peer Reviewer Evaluation Chart
⇓ Download the evaluation form
Lirpa Journal
Frequency of publication: Half yearly
Place of publication: Rome
Editor: Antonio Grassi
Dedicated Editor: Prof Antonio Grassi
Latest Publication: n. 3 del 03. 07. 2019
Article Organisation in Categories
GER and Editorial Board Approved
Psychoanalysis and other schools of thought
Philosophy (Metaphysics - Ethics - Theology)
Analitical Psychology
Only Editorial Board Approved
Illustrazione di Maurizio Marotta
This issue of the magazine is totally dedicated to the publication of the Proceedings of the Conference at the G.B. Grassi di Ostia (Rome) on 3 and 4 April 2019 entitled "THC between myths and reality". The Scientific Committee of Conference
The Folly of Matriarchy
Sandra Berivi - Antonio Grassi
The Folly of Matriarchy 'And then I understood everything. When she stopped on the path under the Baxter's garden and heard Roz's laughter, she understood it was a derisive laugh. She was mocking her, and Mary finally understood everything....
© 2020 Lirpa Journal
Privacy & Coockies
Designed by	Lirpa


text:
Good Samaritan Hospital or Good Samaritan Medical Center may refer to:

India
Good Samaritan Hospital (Panamattom), Koprakalam, Panamattom, Kerala
Good Samaritan Centre, Mutholath Nagar, Cherpunkal, Kottyam, Kerala

United States
Banner Good Samaritan Medical Center, Phoenix, Arizona
Good Samaritan Hospital (Los Angeles), Los Angeles, California
Good Samaritan Hospital (San Jose), San Jose, California
Good Samaritan Medical Center (West Palm Beach),  West Palm Beach, Florida
Advocate Good Samaritan Hospital, Downers Grove, Illinois
Good Samaritan Hospital (Lexington), Lexington, Kentucky
Good Samaritan Hospital (Baltimore), Baltimore, Maryland
Good Samaritan Hospital (Boston), Boston, Massachusetts
Good Samaritan Medical Center (Brockton), Brockton, Massachusetts
Good Samaritan Hospital (Suffern), Suffern, New York
Good Samaritan Hospital Medical Center (West Islip, New York), West Islip, New York
Good Samaritan Hospital (Charlotte), former hospital in Charlotte, North Carolina; Bank of America Stadium is located on this site
Good Samaritan Hospital (Cincinnati), Cincinnati, Ohio
Good Samaritan Hospital (Dayton), Dayton, Ohio
Good Samaritan Hospital (Sandusky), Sandusky, Ohio
Good Samaritan Regional Medical Center (Oregon), Corvallis, Oregon
Legacy Good Samaritan Medical Center, Portland, Oregon
Good Samaritan Hospital (Lebanon, Pennsylvania), Lebanon, Pennsylvania
Good Samaritan Hospital (Puyallup, Washington), Puyallup, Washington

See also
 The Good Samaritan (disambiguation)
 Samaritan Hospital (disambiguation)

Trauma centers

redpajama_set_name: RedPajamaWikipedia


text:
Burges Salmon on Twitter
Burges Salmon shortlisted for Property Team of the Year at legal industry awards
Burges Salmon has been shortlisted in the Property Team of the Year category at the Legal Week British Legal Awards for its work advising the Co-operative Group on the sale of its Farms business.
Burges Salmon has been shortlisted in the Property Team of the Year category at the forthcoming Legal Week British Legal Awards.
Reflecting the high quality client work that the firm continues to carry out in the Real Estate sector, Burges Salmon has been shortlisted for the work it has carried out advising the Co-operative Group on the sale of its Farms business for £249 million to the Wellcome Trust.
The sale reflects The Co-operative's decision to focus on its core retail and consumer services divisions, including food, funeral care, general insurance and legal services.
The net proceeds of the Farms sale were used to further reduce The Co-operative's debt and invest in its core businesses.
The sale of the business as a going concern incorporated The Co-operative's existing farming operations, and included:
15,997 hectares (39,533 acres) of freehold and third party owned land
15 farms, including three pack houses
over 100 residential properties
27 commercial properties.
Richard Pennycook, Interim Group Chief Executive of The Co-operative Group, said: 'The successful sale of our Farms business is another important development for The Co-operative Group. The sale proceeds will enable us to further reduce our debt and progress with the delivery of the clear strategic plans we have in place for our core retail and consumer services' divisions.
'In the Wellcome Trust we have a buyer whose values are closely aligned to those of The Co-operative. They have a proven track record in managing a sustainable investment portfolio, the proceeds of which are used to fund improvements in biomedical science and learning. The Wellcome Trust has acquired an excellent farming business characterised by the quality and professionalism of colleagues and high levels of customer service. I expect the farming business to continue to thrive under their committed long-term ownership."
The Burges Salmon team was led by Real Estate partner Alastair Morrison and Corporate partner Nick Graves with support from a variety of lawyers and different teams from across the firm including Commercial, Employment, Tax, Banking and Pensions.
Alastair Morrison, a partner in Burges Salmon's Food, Farming and Land sector team, said: "The sale of the Co-operative Group's English and Scottish farmland portfolio and of its Farms business is one of the largest rural land transactions in recent history. A cross-border transaction with a tight deadline, transferring such a large area of land through a company sale, requires organisation and dedication.
'I am very pleased that the team of partners, lawyers and various support staff, totalling over 40 over the course of the last eight months, was able to work so closely with our client and its other advisers, to produce a successful result.'
Judges for the awards, hosted annually by industry magazine Legal Week, noted that "The quality of the submissions has improved markedly in recent years and we are often impressed by the contenders' innovation, energy and commitment to the legal profession."
Burges Salmon's senior partner Alan Barr said: "We are delighted to receive further industry recognition by being shortlisted in this national awards programme. The accolade demonstrates the extremely high quality of work and excellent service that we continue to provide our clients with, in one of our core sectors. We wish all those involved the very best of luck."
Winners of The Legal Week British Legal Awards will be announced at an awards dinner at Old Billingsgate Market in London on Thursday 27 November.
For more information, please visit The British Legal Awards website.
Related news and insights
Death and Taxes: a Private Client podcast
In our new podcast series 'Death and Taxes', we discuss the latest developments and issues facing private clients and their advisers
Recent Court of Appeal judgment is a reminder of the importance of company residence
Burges Salmon advises Bluefield Solar on 70 MWp solar PV plant acquisition
COVID-19: a guide for employers
Alastair Morrison Partner
+44 (0) 117 939 2258 alastair.morrison@burges-salmon.com
Food and Farming Finance
Subscribe to news and insight
Burges Salmon careers
We work hard to make sure Burges Salmon is a great place to work.
Lawyer's Email
Burges Salmon entities
BS homeworking
Clientspace
©2021 Burges Salmon


Thank you! Thank you! Thank you! Your votes made us Chicago Magazines BEST HAIR SALON Runner-Up!
chicago's best salon - VOTE TODAY!
help us get named Chicago's Best Hair Salon by casting your vote for Chicago magazine's "Best of Chicago" issue. it's super easy - just CLICK HERE and write in refleKTion salon for the Hair Salon category towards the bottom of the list.


To all but the biblical literalist, there is a recognition that the Scriptures were not the result of God dictating Truth to the writers. Instead, the books of the Bible are clearly the work of men attempting to explain the workings of God in history. Unless we are willing to accept that these human beings are infallible (and even a cursory examination of the Bible hardly supports such infallibility), we must accept the possibility that the version of Truth they present sometimes misses the mark. To put it another way, we must work hard to find the revealed word of God in the works of human beings who fail to deliver the true word for a variety of reasons--cultural bias and assumptions and simple misunderstandings.
Early Christianity gives us a rich literature of the struggles of great thinkers to understand our faith. Indeed, it is this literature, rather than the Bible itself, that resulted in many of the most important doctrines of our faith, such as the Trinity and our view of Christology. These were indeed, great men, but they were human beings--indeed, several of the great early fathers were ultimately deemed heretics by the Church.
Don't get me wrong--this human fallibility does not mean that the Bible or the early fathers were completely wrong. To the contrary, I think that they got it mostly right--which is why I am a Christian (and a fairly orthodox one on matters like the Resurrection). Still, if you accept the fallibility of human beings, and reject Biblical literalism, it seems to me that you must also accept a degree of uncertainty about even the most cherished doctrines and dogmas of our faith.
What does this mean? Well, if nothing else, we need to show a little humility in our arguments with those who hold different views. And our humility should be greatest when we argue over issues that are not at the core of our faith--on such issues as sexuality. But I also think it means much more. If, like me, you believe in a loving and gracious God, it is hard to accept that God will damn us merely because we have particular beliefs that prove very wrong. Indeed, it is hard to see how any of us could pass that test. Put another way, our salvation does not depend on how well we do on some Theology 101 exam.
To me, at least, "faith" as the basis of salvation needs to mean something quite different than believing the right dogmas. More likely, "faith" means a disciplined commitment to allow God to transform our entire lives. It is this commitment, and not our particular set of beliefs about God, that will be decisive.
This really hits the nail on the head for me.
I came to the realization decades ago that because of our human propensity for error, that all religions got it wrong in some way. The other part of that realization is that I will never get it right myself.
This realization allows me to completely relax about my faith. I join in community worship at my local Episcopal Church. I join with them because I am not condemned for being gay and because I feel that something special is happening when we take communion. I cannot explain this feeling, but the best I can do is say I feel connected.
Dogma just bores me. What interests me is how we help those who need that help.


text:
Q: What is the optimal way to wash a dirty vessel with a fixed amount of water and time? This question came up for me as I was trying to wash out some milk from my toddler's cup with a bottle of water that I had in my car. I do this every day -- drive him to school while he drinks milk, and then wash out his sippy cup as much as possible so that it's clean for him to use in the afternoon when I pick him up.
Imagine that I have a sippy cup that when filled with a liquid and poured out, is left with volume $\mathit{D}$ of that liquid stuck to the inside. To start with, this is milk -- I've poured out as much milk as I can, but $\mathit{D}$ milk is still stuck to the inside of the cup. I have a finite amount $\mathit{W}$ of clean water, and a integer number of operations $\mathit{T}$ which is the number of different "pour in a quantity of clean water, shake the cup to mix up the milk with the water, and pour out the washing liquid" operations I can perform in the time that I have.
Every time I pour in water, shake up the cup, and pour out the water, the same volume $\mathit{D}$ of this mixture sticks to the inside of the container. This volume $\mathit{D}$ is a property of the container. This means that no matter how many times I pour in water, shake, and pour out, there will always be some amount of milk left in the container (which can approach zero as the amount of water and the number of washings approaches infinity). Assume that each mixing operation mixes the remaining milk perfectly with the water that's introduced.
Doing this in my car, I was torn between two ideas. One theory is to pour in very small amounts of water at the beginning, to waste the smallest amount of water when the cup is at its dirtiest. The other theory is to use large amounts of water up front, to get the bulk of the milk out early, and use the final washings to get the cup as clean as possible. I was unable to intuit which theory was more correct.
Mathematically, what strategy minimizes the milk remaining in the container after $\mathit{T}$ washings? After these $\mathit{T}$ washings, how much milk remains in the milk-water mixture stuck to the inside of the cup?
Thanks very much for your help! I will actually use the answer to guide my behavior next time!

A: You want to pour in the same amount $\frac WT$ of water each time.
Each time you pour in $z$ water, mix and dump, the concentration is reduced by a factor $\frac D{D+z}$.  Because multiplication is commutative, it doesn't matter what order you put the volumes in, just the list of volumes you use.
The easiest way to see it is to let $T=2$.  We might as well measure the water in fractions of $W$, which makes $W=1$.  Let us pour in $x$ the first time and $1-x$ the second time.  After the first time you have volume $D$ left with concentration $\frac D{D+x}$.  After the second you have volume $D$ left with concentration $\frac D{(D+x)(D+1-x)}$  To have the best cleaning we want to maximize $(D+x)(D+1-x)=D^2-x^2+D+x$.  The usual technique maximizes this at $x=\frac 12$.  This shows that given two unequal pours, the final concentration will be reduced by making them equal.  Extending this, we want all the pours to be equal.

A: Suppose you perform a cleaning operation using $X$ water. Then the total fluid inside the cup is $X + D$. After pouring out the excess, the remaining amount inside the cup is $D$, so the ratio of milk inside at the beginning to milk inside at the end is equal to $\frac{X+D}{D}$, or $\frac{X}{D}+1$.
Suppose your cleaning operations use water amounts $X_1, X_2, \ldots, X_T$ which sum up to $W$.
Then the ratio of milk inside at the beginning to milk inside at the end is exactly
$$(\frac{X_1}D+1)(\frac{X_2}D+1)\cdots(\frac{X_T}D+1).$$
To maximize this ratio, we need all these $X_i$ to be equal, because if two were unequal, we could replace both by their average to get a better ratio (see later).
If all the $X_i$ are equal, then they're all equal to $W/T$.
So the best method to clean the cup will cause the amount of milk at the end to be
$$\frac{D}{\left(1+\frac WD\cdot\frac 1T\right)^T}.$$
Note that as you make $T$ larger and larger, the bottle will get cleaner and cleaner, but as $T$ goes to infinity the bottle won't become perfectly clean. There's a limit to how clean the bottle can be, and the minimal remaining amount of milk is equal to $$De^{-\frac WD}.$$
(To pass that limit, just use some more water.)

To elaborate on why using equal amounts of water each time is the best approach given fixed total water and operations:
Suppose you use two different water amounts $X$ and $Y$ to clean two times.
Then the cleaning ratio is equal to $(\frac XD + 1)(\frac YD+1) = \frac {XY}{D^2} + \frac{X+Y}D + 1$.
But now suppose you split the water you used evenly instead, by cleaning with the amount $\frac 12(X+Y)$ twice. That uses the same amount of water in total, but the new cleaning ratio is
$(\frac {X+Y}{2D} + 1)^2 = \frac{(X+Y)^2}{4D^2} + \frac{X+Y}{D} + 1$.
Okay, what's the difference? The difference between the new and old cleaning ratio is exactly
$$\frac{(X+Y)^2-4XY}{4D^2} = \frac{X^2+2XY+Y^2-4XY}{4D^2} = \frac{X^2-2XY+Y^2}{4D^2} =  \frac{(X-Y)^2}{(2D)^2}.$$
The numerator and denominator are both the square of a nonzero number, so the difference is indeed positive. Hence the new cleaning ratio is better, and averaging our water amounts between both cleaning cycles did actually help.

redpajama_set_name: RedPajamaStackExchange


text:
Masterclass in Digital & Social Media Marketing, Athens, May 2023
About this digital marketing course in Athens
Specialize in digital marketing, attending comprehensive courses, in-classroom in Athens, every Wednesday, Thursday and Friday from 18:00 to 22:00. Collaborate with others on group exercises and presentations. Become an expert in less than 3 months.
If you enroll now in Athens you will get free access to our video-on-demand course: E-Learning Masterclass in Digital & Social Media Marketing!
May 03, 2023 - July 21, 2023
18:00-22:00 (Wednesday, Thursday, Friday)
A full digital marketing curriculum
Wednesday 03 May 2023 17:00 (1h) OTE ACADEMY - E020 ROOM GROUND FLOOR
Wednesday 03 May 2023 18:00 (1h) OTE ACADEMY - ROOM Ε020
Wednesday 03 May 2023 21:00 (30m) OTE ACADEMY - ROOM Ε020
Thursday 04 May 2023 18:00 (1h) OTE ACADEMY - ROOM Ε020
Elena Spiropoulou
Thursday 04 May 2023 21:00 (30m) OTE ACADEMY - ROOM Ε020
Thursday 04 May 2023 21:30 (30m) OTE ACADEMY - ROOM Ε020 01m 59s
Friday 05 May 2023 18:00 (1h) OTE ACADEMY - ROOM Ε020
Angelos Perlegkas
George Kalantzis
Katerina Dimitrakopoulou
Thursday 01 June 2023 18:00 (1h) OTE ACADEMY - ROOM Ε020
Thursday 01 June 2023 19:00 (30m) OTE ACADEMY - ROOM Ε020
Friday 02 June 2023 18:00 (2h) OTE ACADEMY - ROOM Ε020
Wednesday 07 June 2023 18:00 (4h) OTE ACADEMY - ROOM Ε020
Stavroula Kogka
Friday 16 June 2023 20:00 (30m) OTE ACADEMY - ROOM Ε020
Wednesday 21 June 2023 21:00 (30m) OTE ACADEMY - ROOM Ε020
Wednesday 05 July 2023 18:00 (1h) OTE ACADEMY - ROOM Ε020
Sotiris Pantazis
Thursday 06 July 2023 18:00 (1h) OTE ACADEMY - ROOM Ε020
Friday 07 July 2023 18:00 (2h) OTE ACADEMY - ROOM Ε020
Thursday 13 July 2023 18:00 (30m) OTE ACADEMY - ROOM Ε020
Thursday 13 July 2023 21:30 (30m) OTE ACADEMY - ROOM E020
Thursday 20 July 2023 18:00 (2h) DOMOTEL KASTRI - ATHINA CLASS
Thursday 20 July 2023 20:00 (4h) DOMOTEL KASTRI - KASTRI GARDENS
Managing Director, Social Mellon.
Managing Director, re-wize.
Performance Marketing Manager, Wizard.
Co-Founder, WEDOHYPE.
Digital Marketing Specialist, APEARL.
Managing Partner, SPIROPOULOU LAYWERS.
Training location in Athens
OTE Academy Training Center
Pelika & Spartis, Marousi, 151 22, Athens, Greece
A special place with easy access, free parking, modern facilities and many green outdoor spaces in Marousi, Athens.
Frequently asked questions & answers for Athens