text:
#ifndef ALIYAMLCONFIGURATION_H
#define ALIYAMLCONFIGURATION_H

// CINT can't handle the yaml header because it has c++11!
#if !(defined(__CINT__) || defined(__MAKECINT__))
#include <yaml-cpp/yaml.h>
#endif

#include <string>
#include <vector>
#include <ostream>

#include <TObject.h>
#include <TString.h>

#include <AliLog.h>

/**
 * @class PWG::Tools::AliYAMLConfiguration
 * @brief YAML configuration class for AliPhysics.
 *
 * A class to handle generic reading and writing to YAML files. This can be used to configure tasks, coordinate trains,
 * or many other tasks which require configuration. While yaml-cpp can be used directly, this class handles many details
 * such as accessing files on AliEn, as well as generally simplifying the user experience. The class can also handle
 * multiple configuration files, first looking in the last added file, and then if the value is not found, looking in
 * previous configurations until the value is found. Values are accessed in this order so the values in the initial file
 * can be overridden by values defined in subsequently added files. Values that are used in multiple places can be set
 * together using "Shared Paramaters" (see the section below) or using YAML anchors.
 *
 * Usage information:
 *
 * Consider the following example YAML configuration.
 *
 * ~~~
 * hello:
 *   world:
 *     exampleValue: 10
 * example: 12.2
 * importantValues:
 *   - entry1
 *   - entry2
 *   - entry3
 * ~~~
 *
 * To use the class, at least one YAML configuration file must be added to the class. To do so, use:
 *
 * ~~~{.cxx}
 * PWG::Tools::AliYAMLConfiguration config;
 * // Will only be checked if a requested value is not in the second configuration.
 * config.AddConfiguration(filename, name);
 * // Will be checked first. This is so it can override values in the first added configuration.
 * config.AddConfiguration(filename2, name2);
 *
 * // Once all configuration is done and the YAML nodes will not be modified any more
 * // (for example, at the end of an AddTask), call Initialize() to lock in the configurations
 * // for streaming to the grid.
 * config.Initialize();
 * ~~~
 *
 * YAML objects cannot be streamed due to CINT limitations, so after the configuration class is
 * streamed, it must be re-initialized. This can be done in any function after streaming has been
 * completed, such as `UserCreateOutputObjects()`. It only needs to be performed once.
 *
 * ~~~{.cxx}
 * fYAMLConfig.Reinitialize();
 * ~~~
 *
 * To access or write a value, use the GetProperty(...) or WriteProperty(...) functions. To use
 * them, you must define an object of the desired type that you would like to read or write, and
 * then describe the path to the property. The path consists of the names of YAML nodes, separated
 * by a user specified delimiter (":" is the default).  For the example YAML above, to read
 * "exampleValue", the user would define an int to be set to the read value and the path would
 * be "hello:world:exampleValue". As a convenience, there is a helper function which simplifies
 * specifying the path. It will instead take a std::vector of strings to specify the path,
 * thereby also setting the proper delimiter. So the path would be
 * `{"hello", "world", "exampleValue"}`. Note that you may need to explicitly specify such an
 * initialization as `std::vector<std::string>` if you none of the arguments are already defined
 * as variables.
 *
 * Explicitly, this would look like:
 *
 * ~~~{.cxx}
 * int tempInt = 0;
 * // True specifies that the value must exist in the config
 * config.GetProperty({"hello", "world", "examplePath"}, tempInt, true);
 * std::cout << tempInt << "\n"; // Returns "10"
 * // Alternatively, you could specify the path explicitly (although not recommended)
 * config.GetProperty("hello:world:exampleValue", tempInt);
 * // The type specifies what is returned
 * double tempDouble = 0.;
 * config.GetProperty("example", tempDouble);
 * std::vector <std::string> importantValues;
 * config.GetProperty("importantValues", importantValues);
 * // The vector "importantValues" now contains three strings
 * ~~~
 *
 * That's basically all there is to using it. For more information, look at the documentation
 * of the various GetProperty(...) and WriteProperty(...) functions. The interfaces to both
 * functions are fairly similar.
 *
 * Notes on using shared parameters:
 *
 * sharedParameters are inherently limited. It can only retrieve values where the requested
 * type is arithmetic, string, or bool. The retrieved shared parameters value can only be of
 * those same types. Note that the shared parameters correspond to each configuration file.
 * ie. If `sharedParameters:test` is requested in the first configuration file, then it will
 * only look for the sharedParameters value in that configuration. Thus, if a sharedParameter
 * is requested in a later configuration file, the earlier configuration shared parameter
 * values will not be considered.
 *
 * Given the limitations, YAML anchors are recommended for more advanced usage as they can
 * be much more sophisticated.
 *
 * @author Raymond Ehlers <raymond.ehlers@yale.edu>, Yale University
 * @date Sept 19, 2017
 */

/**
 * Tell yaml-cpp how to encode and decode `TString`. Note that this is basically identical
 * (except for calling `.Data()`) to how std::string is handle in yaml-cpp/node/convert.h.
 * For more information, see: https://github.com/jbeder/yaml-cpp/wiki/Tutorial#converting-tofrom-native-data-types
 */
#if !(defined(__CINT__) || defined(__MAKECINT__))
namespace YAML {
template<>
  struct convert<TString> {
    static Node encode(const TString & str) {
      return Node(str.Data());
    }
    static bool decode(const Node & node, TString & str) {
      if (!node.IsScalar()) {
        return false;
      }
      str = node.Scalar();
      return true;
    }
  };
}
#endif

/**
 * Allow reverse range based iteration. We use this to iterate over the available
 * configurations in reverse to find the requested value. We iterate in reverse
 * because it allows configurations that are added later to override values in
 * configurations that are already added. Otherwise, overriding values could only
 * be performed by rearranging configuration files (which was not possible in the
 * EMCal Correction Framework, for exmaple).
 *
 * From: https://stackoverflow.com/a/21510202
 */
template <typename It>
class Range
{
  It b, e;

 public:
  Range(It b, It e) : b(b), e(e) {}
  It begin() const { return b; }
  It end() const { return e; }
};

template <typename ORange, typename OIt = decltype(std::begin(std::declval<ORange>())),
     typename It = std::reverse_iterator<OIt>>
Range<It> reverse(ORange&& originalRange)
{
  return Range<It>(It(std::end(originalRange)), It(std::begin(originalRange)));
}

// operator<< has to be forward declared carefully to stay in the global namespace so that it works with CINT.
// For generally how to keep the operator in the global namespace, See: https://stackoverflow.com/a/38801633
namespace PWG { namespace Tools { class AliYAMLConfiguration; } }
std::ostream & operator<< (std::ostream &in, const PWG::Tools::AliYAMLConfiguration &myTask);

namespace PWG {
namespace Tools {

class AliYAMLConfiguration : public TObject {
 public:
  AliYAMLConfiguration(const std::string prefixString = "AliEmcalCorrection", const std::string delimiterCharacter = ":");
  virtual ~AliYAMLConfiguration() {}

  /** @{
   * @name Setup the configurations at various points of the analysis.
   */
  bool Initialize();
  bool Reinitialize();
  /** @} */

  /** @{
   * @name Add a new particular configuration under a given name.
   */
  /// Add YAML configuration at configurationFilename to available configurations
  int AddEmptyConfiguration(const std::string & configurationName);
  int AddConfiguration(std::string configurationFilename, std::string configurationName = "");
  #if !(defined(__CINT__) || defined(__MAKECINT__))
  int AddConfiguration(const YAML::Node node, std::string configurationName = "");
  /** @} */

  /** @{
   * @name Get a particular configuration by index or name.
   */
  bool DoesConfigurationExist(const int i)                                              const { return i >= 0 && static_cast<const unsigned int>(i) < fConfigurations.size(); }
  bool DoesConfigurationExist(const std::string & name)                                 const { return DoesConfigurationExist(GetConfigurationIndexFromName(name, fConfigurations)); }
  const std::pair<std::string, YAML::Node> & GetConfiguration(const int i)              const { return fConfigurations.at(i); }
  const std::pair<std::string, YAML::Node> & GetConfiguration(const std::string & name) const { return GetConfiguration(GetConfigurationIndexFromName(name, fConfigurations)); }
  std::pair<std::string, YAML::Node> & GetConfiguration(const int i)                          { return fConfigurations.at(i); }
  std::pair<std::string, YAML::Node> & GetConfiguration(const std::string & name)             { return GetConfiguration(GetConfigurationIndexFromName(name, fConfigurations)); }
  /** @} */

  /** @{
   * @name Translate between configuration name and index.
   */
  std::string GetConfigurationNameFromIndex(const unsigned int i)                       const { return fConfigurations.at(i).first; }
  int GetConfigurationIndexFromName(const std::string & name)                           const { return GetConfigurationIndexFromName(name, fConfigurations); }
  /** @} */

  /** @{
   * @name Remove a particular configuration by index or name.
   */
  bool RemoveConfiguration(const unsigned int i);
  bool RemoveConfiguration(const std::string & name)                                          { return RemoveConfiguration(GetConfigurationIndexFromName(name, fConfigurations)); }
  /** @} */

  /** @{
   * @name Get a property from the available configurations
   */
  // Helper functions to retrieve property values
  template<typename T>
  bool GetProperty(std::vector<std::string> propertyPath, const std::string & propertyName, T & property, const bool requiredProperty) const;
  template<typename T>
  bool GetProperty(const std::vector<std::string> propertyPath, T & property, const bool requiredProperty) const;
  // Retrieve property driver function.
  template<typename T>
  bool GetProperty(std::string propertyName, T & property, const bool requiredProperty = true) const;
  /** @} */

  /** @{
   * @name Write a property to a particular configuration
   */
  // Write property driver function.
  template<typename T>
  bool WriteProperty(std::string propertyName, T & property, std::string configurationName = "");
  /** @} */
  #endif

  /** @{
   * @name Write a particular configuration at a given index or name to a file.
   */
  bool WriteConfiguration(const std::string & filename, const unsigned int i) const;
  bool WriteConfiguration(const std::string & filename, const std::string & configurationName) const;
  /** @} */

  /** @{
   * @name Write a particular configuration at a given index or name to a file.
   */
  bool CompareConfigurations(const int config1, const int config2)                     const;
  bool CompareConfigurations(const int config1, const std::string & config2)           const { return CompareConfigurations(config1, GetConfigurationIndexFromName(config2, fConfigurations)); }
  bool CompareConfigurations(const std::string & config1, const std::string & config2) const { return CompareConfigurations(GetConfigurationIndexFromName(config1, fConfigurations), GetConfigurationIndexFromName(config2, fConfigurations)); }

  /** @} */

  /** @{
   * @name Print a particular configuration at a given index or name to a file.
   */
  std::string toString(const int index = -1) const;
  std::ostream & Print(std::ostream &in, const int index = -1) const;
  std::ostream & Print(std::ostream &in, const std::string & configurationName) const;
  friend std::ostream & ::operator<< (std::ostream &in, const AliYAMLConfiguration &myTask);
  void Print(Option_t* /* opt */ = "") const;
  /** @} */

 protected:

  // Utility functions
  // File utilities
  inline bool DoesFileExist(const std::string & filename) const;
  void SetupReadingConfigurationFilePath(std::string & filename, const std::string & fileIdentifier) const;
  void WriteConfigurationToFilePath(const std::string & localFilename, std::string filename) const;
  #if !(defined(__CINT__) || defined(__MAKECINT__))
  // Printing
  void PrintConfiguration(std::ostream & stream, const std::pair<std::string, YAML::Node> & configPair) const;
  #endif
  // Configuration utilities
  template<typename T>
  unsigned int GetConfigurationIndexFromName(const std::string & name, const std::vector<std::pair<std::string, T>> & configurations) const;

  bool IsSharedValue(std::string & value) const;
  #if !(defined(__CINT__) || defined(__MAKECINT__))
  template<typename T>
  auto PrintRetrievedPropertyValueImpl(std::stringstream & tempMessage, const T & property, int) const -> decltype(tempMessage << property, void());
  template<typename T>
  auto PrintRetrievedPropertyValueImpl(std::stringstream & tempMessage, const std::vector <T> & property, int) const -> decltype(property.begin(), property.end(), tempMessage << std::declval<T>(), void());
  template<typename T>
  void PrintRetrievedPropertyValueImpl(std::stringstream & tempMessage, const T & property, long) const;
  template<typename T>
  void PrintRetrievedPropertyValue(std::stringstream & tempMessage, const T & property) const;

  template<typename T>
  bool GetPropertyFromNode(const YAML::Node & node, std::string propertyName, T & property) const;
  template<typename T>
  bool GetProperty(YAML::Node & node, YAML::Node & sharedParametersNode, const std::string & configurationName, std::string propertyName, T & property) const;

  template<typename T>
  void WriteValue(YAML::Node & node, std::string propertyName, T & proeprty);

  std::vector<std::pair<std::string, YAML::Node> > fConfigurations;         //!<! Contains all YAML configurations. The first element has the highest precedence.
  #endif
  std::vector<std::pair<std::string, std::string> > fConfigurationsStrings; ///<  Contains all YAML configurations as strings so that they can be streamed.

  bool fInitialized;                          ///< True if the configurations have been initialized.
  std::string fPrefixString;                  ///< Contains the prefix of any names base node names which should be removed.
  std::string fDelimiter;                     ///< Delimiter character to separate each level of the request.

  /// \cond CLASSIMP
  ClassDef(AliYAMLConfiguration, 1); // YAML Configuration
  /// \endcond
};

#if !(defined(__CINT__) || defined(__MAKECINT__))
/**
 * Prints the retrieved property value if the type implements operator<<(). For more on how this achieved,
 * see: https://stackoverflow.com/a/22759368 and https://stackoverflow.com/a/11866675.
 * NOTE: This function should not be called directly, but through PrintRetrievedPropertyValue(...)
 *
 * NOTE: This function returns void!
 *
 * @param[in] property Property to be printed
 * @param[in, out] tempMessage Stringstream into which the property should be streamed
 */
template<typename T>
auto AliYAMLConfiguration::PrintRetrievedPropertyValueImpl(std::stringstream & tempMessage, const T & property, int) const -> decltype(tempMessage << property, void())
{
  tempMessage << " with value \"" << property << "\"";
}

/**
 * Prints the retrieved values in a vector if the value is a vector (more specifically, if it implements begin() and end())
 * and if the type of the vector can be streamed in an ostream object.
 * NOTE: This function should not be called directly, but through PrintRetrievedPropertyValue(...)
 *
 * @param[in] property Property to be printed
 * @param[in, out] tempMessage Stringstream into which the property should be streamed
 */
template<typename T>
auto AliYAMLConfiguration::PrintRetrievedPropertyValueImpl(std::stringstream & tempMessage, const std::vector <T> & property, int) const -> decltype(property.begin(), property.end(), tempMessage << std::declval<T>(), void())
{
  tempMessage << " with value(s):";
  for (auto it = property.begin(); it != property.end(); it++) {
    tempMessage << "\n\t- " << *it;
  }
}

/**
 * Handles all other cases where the property is not covered by the other functions.
 *
 * NOTE: This function should not be called directly, but through PrintRetrievedPropertyValue(...)
 *
 * NOTE: Cannot use "..." as a function argument here as a fall back because it causes
 * problems with ROOT dictionary generation...
 *
 * @param[in] property Property to be printed
 * @param[in, out] tempMessage Stringstream into which the property should be streamed
 */
template<typename T>
void AliYAMLConfiguration::PrintRetrievedPropertyValueImpl(std::stringstream & tempMessage, const T & property, long) const
{
  // Cannot easily print these types, so just note that is the case!
  tempMessage << " with a value that cannot be trivially printed";
}

/**
 * Wrapper function to resolve ambiguity in function overloading. By passing 0 as the last argument to the
 * PrintRetrievedPropertyValueImpl(...) functions, it will first attempt to use the matching int function,
 * and then fall back the to the long function. This is effectively a hack to help c++ properly resolve the
 * function to call.
 *
 * Inspired by: https://stackoverflow.com/a/38283990
 *
 * @param[in] property Property to be printed
 * @param[in, out] tempMessage Stringstream into which the property should be streamed
 */
template<typename T>
void AliYAMLConfiguration::PrintRetrievedPropertyValue(std::stringstream & tempMessage, const T & property) const
{
  // By passing zero, it will first lookup the int, and then the long
  AliYAMLConfiguration::PrintRetrievedPropertyValueImpl(tempMessage, property, 0);
}

/**
 * Utility function to retrieve the property from a already selected YAML node.
 *
 * @param[in] node YAML node from which the property should be retrieved
 * @param[in] propertyName Name of the property to retrieve
 * @param[out] property Contains the retrieved property
 *
 * @return True if the property was set successfully
 */
template<typename T>
bool AliYAMLConfiguration::GetPropertyFromNode(const YAML::Node & node, std::string propertyName, T & property) const
{
  if (node[propertyName])
  {
    property = node[propertyName].as<T>();
    return true;
  }
  return false;
}

/**
 * Helper function for main retrieval function. It automatically adds the property name to the end of the property path.
 * By doing so, it allows the user to specify a general property path and then vary the property name between function calls.
 *
 * @param[in] propertyPath Path to the property in the YAML file.
 * @param[in] propertyName Name of the property to be retrieved.
 * @param[out] property Contains the retrieved property.
 * @param[in] requiredProperty True if the property is required
 *
 * @return True if the property was set successfully
 */
template<typename T>
bool AliYAMLConfiguration::GetProperty(std::vector <std::string> propertyPath, const std::string & propertyName, T & property, const bool requiredProperty) const
{
  propertyPath.push_back(propertyName);
  return GetProperty(propertyPath, property, requiredProperty);
}

/**
 * Helper function for main retrieval function. Each value in the property path will be joined together, separated by the delimiter
 * set in the configuration class.
 *
 * @param[in] propertyPath Path to the property in the YAML file.
 * @param[out] property Contains the retrieved property.
 * @param[in] requiredProperty True if the property is required
 *
 * @return True if the property was set successfully
 */
template<typename T>
bool AliYAMLConfiguration::GetProperty(const std::vector <std::string> propertyPath, T & property, const bool requiredProperty) const
{
  // Combine the requested names together
  std::string requestedName = "";
  for (auto & str : propertyPath)
  {
    if (requestedName.length() > 0) {
      requestedName += ":" + str;
    }
    else {
      requestedName = str;
    }
  }

  // Pass on the properly requested call
  return GetProperty(requestedName, property, requiredProperty);
}

/**
 * Main general function to get a property from a set of YAML configuration files. It first calls checks
 * the user configuration, and then if the property is not found, it then checks the default configuration.
 * If the property is required but it is not found, a fatal error is thrown.
 *
 * @param[in] propertyName Name of the property to retrieve
 * @param[out] property Contains the retrieved property
 * @param[in] requiredProperty True if the property is required
 *
 * @return True if the property was set successfully
 */
template<typename T>
bool AliYAMLConfiguration::GetProperty(std::string propertyName, T & property, const bool requiredProperty) const
{
  // Remove the prefix string if in name
  std::size_t prefixStringLocation = propertyName.find(fPrefixString);
  if (prefixStringLocation != std::string::npos)
  {
    // Remove the prefix string
    propertyName.erase(prefixStringLocation, prefixStringLocation + fPrefixString.length());
  }

  bool setProperty = false;
  // Search in reverse so it is possible to override configuration values.
  for (auto configPair : reverse(fConfigurations))
  {
    if (setProperty == true) {
      AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Property \"" << propertyName << "\" found!\n";
      break;
    }

    // IsNull checks is a node is empty. A node is empty if it is created.
    // IsDefined checks if the node that was requested was not actually created.
    if (configPair.second.IsNull() != true)
    {
      AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Looking for parameter \"" << propertyName << "\" in \"" << configPair.first << "\" configuration\n";
      // NOTE: This may not exist, but that is entirely fine.
      YAML::Node sharedParameters = configPair.second["sharedParameters"];
      setProperty = GetProperty(configPair.second, sharedParameters, configPair.first, propertyName, property);
    }
  }

  if (setProperty != true && requiredProperty == true)
  {
    std::stringstream message;
    message << "Failed to retrieve required property \""
        << propertyName << "\" from available configurations!" << std::endl;
    AliFatalGeneral("AliYAMLConfiguration", message.str().c_str());
  }

  // Return whether the value was actually set
  return setProperty;
}

/**
 * Actually handles retrieving parameters from YAML nodes.
 *
 * For propertyName = "hello:example_special:property", the retrieval procedure is as follows:
 *  - Extract node name by searching the propertyName up to the delimiter (in this case, "hello").
 *  - Look up the node name.
 *    - If the node exists, recurse with node[nodeName] and with remaining propertyName = "example_special:property".
 *    - If it doesn't exist, check for the specialization delimiter (default: "_") and take the node name as everything before the delimiter
 *      (for example, "example_special" leads to "example").
 *  - If the delimiter is not found, then atempt to extract the property with the remaining node name.
 *    - If the property is arithmetic, std::string, or bool, it will check if the property is instead a shared parameter. If so, it will retrieve
 *      the shared parameter value.
 *    - The property is stored in the property, and true is returned if the effort was successful.
 *
 * @param[in] node Main YAML node containing the properties
 * @param[in] sharedParametersNode YAML node containing the shared parameters
 * @param[in] configurationName Name of the configuration type.
 * @param[in] propertyName Name of the property to retrieve
 * @param[out] property Contains the retrieved property
 *
 * @return True if the property was set successfully
 */
template<typename T>
bool AliYAMLConfiguration::GetProperty(YAML::Node & node, YAML::Node & sharedParametersNode, const std::string & configurationName, std::string propertyName, T & property) const
{
  // Used as a buffer for printing complicated messages
  std::stringstream tempMessage;

  bool returnValue = false;

  const std::string specializationDelimiter = "_";
  size_t delimiterPosition = 0;
  std::string tempPropertyName = propertyName;

  if ((delimiterPosition = tempPropertyName.find(fDelimiter)) != std::string::npos)
  {
    std::string nodeName = tempPropertyName.substr(0, delimiterPosition);
    tempPropertyName.erase(0, delimiterPosition + fDelimiter.length());

    // Attempt to use the node name
    if (node[nodeName].IsDefined() == true)
    {
      // Retrieve node and then recurse
      YAML::Node tempNode = node[nodeName];
      AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Attempting to retrieving property \"" << tempPropertyName << "\" by going a node deeper with node \"" << nodeName << "\".\n";
      returnValue = GetProperty(tempNode, sharedParametersNode, configurationName, tempPropertyName, property);
    }

    // Check for the specialization if the nodeName is undefined.
    // Alternatively, if the value was not returned successfully, we should also check for the specialization
    //   such as inheritnace for input objects.
    if (node[nodeName].IsDefined() == false || returnValue == false)
    {
      // Check for specialization
      if ((delimiterPosition = nodeName.find(specializationDelimiter)) != std::string::npos)
      {
        std::string specializationNodeName = nodeName.substr(0, delimiterPosition);
        YAML::Node tempNode = node[specializationNodeName];
        AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Attempting to retrieving property \"" << tempPropertyName << "\" by going a node deeper through dropping the specializtion and using node \"" << specializationNodeName << "\".\n";
        returnValue = GetProperty(tempNode, sharedParametersNode, configurationName, tempPropertyName, property);
      }
      else {
        returnValue = false;
      }
    }
  }
  else
  {
    // Check if node exists!
    if (node[propertyName])
    {
      // Handle shared parameters
      bool isShared = false;
      // Will contain the name of the property in the sharedParameters section that should be retrieved
      // if it is requested through the user configuration.
      std::string sharedValueName = "";
      // Necessary because it fails on vectors and other complex objects that are YAML sequences.
      if (std::is_arithmetic<T>::value || std::is_same<T, std::string>::value || std::is_same<T, bool>::value)
      {
        // Retrieve value as string to check for shared value
        sharedValueName = node[propertyName].as<std::string>();
        // Check for a shared value
        isShared = IsSharedValue(sharedValueName);
      }

      // Setup printable message
      tempMessage.str("");
      tempMessage << "property \""
            << propertyName
            << "\" using " << ( isShared ? "\"sharedParameters:" + sharedValueName + "\" in " : "" )
            << "values from the " << configurationName << " configuration";

      AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Retrieveing " << tempMessage.str() << "\n";

      // Retrieve result
      bool retrievalResult = false;
      if (isShared == true) {
        // Retrieve from the shared parameter node directly.
        retrievalResult = GetPropertyFromNode(sharedParametersNode, sharedValueName, property);
      }
      else {
        retrievalResult = GetPropertyFromNode(node, propertyName, property);
      }

      // Inform about the result
      if (retrievalResult == true) {
        // Add the retrieved value to the message (only if trivially printable)
        AliYAMLConfiguration::PrintRetrievedPropertyValue(tempMessage, property);
        AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Succeeded in retrieveing " << tempMessage.str() << "\n";
        returnValue = true;
      }
      else {
        returnValue = false;
      }
    }
  }

  return returnValue;
}

/**
 * Write a value to a YAML configuration. Note that the value is written to the YAML configuration, but then
 * the YAML configuration needs to explicitly be written to file if the changes should be persistent.
 *
 * @param[in] propertyName Path to the property in the YAML file.
 * @param[in] property Property to be written.
 * @param[in] configurationName Name of the YAML configuration file to which the property should be written.
 *
 * @return True if the write was successful.
 */
template<typename T>
bool AliYAMLConfiguration::WriteProperty(std::string propertyName, T & property, std::string configurationName)
{
  unsigned int configurationIndex = 0;
  if (configurationName != "")
  {
    configurationIndex = GetConfigurationIndexFromName(configurationName, fConfigurations);
  }

  if (fConfigurations.size() == 0) {
    AliErrorStream() << "No configurations available! Property will not be written!\n";
    return false;
  }

  std::pair<std::string, YAML::Node> & configPair = fConfigurations.at(configurationIndex);

  WriteValue(configPair.second, propertyName, property);
  AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Final Node:\n" << configPair.second << "\n";

  return true;
}

/**
 * Determine where the value should be written and write it to the appropriate YAML node.
 *
 * @param[in, out] node YAML node where the property should (eventually) be written.
 * @param[in] propertyName Name of the property to be written.
 * @param[in] property Property to be written to the YAML node.
 */
template<typename T>
void AliYAMLConfiguration::WriteValue(YAML::Node & node, std::string propertyName, T & property)
{
  // Find the node name we are interested in
  // Derived from: https://stackoverflow.com/a/14266139
  const std::string delimiter = ":";
  size_t delimiterPosition = 0;
  std::string tempPropertyName = propertyName;

  if ((delimiterPosition = tempPropertyName.find(delimiter)) != std::string::npos)
  {
    std::string nodeName = tempPropertyName.substr(0, delimiterPosition);
    tempPropertyName.erase(0, delimiterPosition + delimiter.length());
    AliDebugGeneralStream("AliYAMLConfiguration", 2) << "nodeName: " << nodeName << "\n";
    AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Node Before:\n" << node << "\n";
    if (node[nodeName].IsDefined()) {
      AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Using existing node\n";
      YAML::Node tempNode = node[nodeName];
      WriteValue(tempNode, tempPropertyName, property);
    }
    else {
      AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Creating new node\n";
      YAML::Node tempNode;
      node[nodeName] = tempNode;
      WriteValue(tempNode, tempPropertyName, property);
    }
    AliDebugGeneralStream("AliYAMLConfiguration", 2) << "Node After:\n" << node << "\n";
  }
  else {
    // We have finished the recursion. Now we need to save the actual property.
    node[propertyName] = property;
  }
}

#endif

/**
 * Get the index of the configuration given the configuration name. If the same name is used multiple times, then
 * the first instance will be returned.
 *
 * @param[in] name Name of the configuration.
 * @param[in] configurations Configurations to search through (could contain YAML nodes, or the string copies).
 *
 * @return Index of the configuration, or -1 if not found.
 */
template<typename T>
unsigned int AliYAMLConfiguration::GetConfigurationIndexFromName(const std::string & name, const std::vector<std::pair<std::string, T>> & configurations) const
{
  int index = -1;
  for (const auto & configPair : configurations)
  {
    if (configPair.first == name) {
      // Retrieve index
      // See: https://stackoverflow.com/a/10962459
      index = std::addressof(configPair) - std::addressof(configurations[0]);
      break;
    }
  }

  return index;
}

} // namespace Tools
} // namespace PWG

#endif /* ALIYAMLCONFIGURATION_H */

redpajama_set_name: RedPajamaGithub


text:
Will there be Peace in the Middle East?
Kuwaiti Liberal Convicted Of Harming Islam
Kuwaiti liberal Dr. Ahmad Al-Baghdadi has been convicted by a Bahraini court of harming Islam in public, and has been fined $370.
The conviction followed a 2006 article he published in the Bahraini daily Al-Ayyam, in which he said that Islam had spread by means of the sword. The Muslim Brotherhood in Kuwait said that Al-Baghdadi's punishment was too lenient, and that this leniency would invite additional harm to Islam in the future. In 2005, Al-Baghdadi received a year's suspended prison sentence, on similar charges.

redpajama_set_name: RedPajamaCommonCrawl


Howdy - first time poster and potential BMW owner. I am helping out some family with getting a 2008 K1200S back up and running. I am curious on your thoughts... should I get it running and sell, or get it running and keep.
1. Bike is a 2008 K1200S with just over 7k miles on it.
2. Bike does not appear to have ever been down, but has a few scratches etc on the plastics.
3. Bike has not been ridden since approx 2014. Has been in a climate controlled home since.
4. Bike had all engine oil, brakes, clutch fluids drained out (missing bleeders). I am not sure on the hypoid oil or coolant.
5. Bike does not have any service history with it. Just title and a manual on CD.
I have a few other bikes and would love to keep this, but I'm a bit concerned on the many recalls it may be part of and abs issues I am seeing so far. I can do all the work myself (did a complete teardown and restoration on my Magna and do valves, timing belts, etc on the Duc).
What are your thoughts and what would be a fair price for this bike to pay my Aunt?
Welcome to the site Rob, when you get a moment introduce yourself here, http://www.i-bmw.com/forumdisplay.php?f=152.
As to the bike, you didn't mention price, but that is an important consideration on a 10 YO bike that's been sitting for 4 years. These bikes do better when they're used as intended, seals and seams tend to dry out otherwise which can spur leaks.
As to the ABS, fortunately your proposed bike post dates the ill-fated servo ABS equipped bikes, so the ABS unit on that bike can be rebuilt professionally, and there is at least one great thread in the 12S tech forum on how to do it yourself.
As for the rest, I'd start by having a dealer run the VIN as you can then determine the dealer service record, if any, and the status of any recalls.
If it were me I'd probably hold out for a later year K1300S as they were better sorted than the 12 S models, but then cost becomes an issue. Do look at the 12S tech forum for threads on commonly occurring issues and let us know what you decide!
First try and get as much service history as you can. Call a local dealer and have them run the V.I.N. they will be able to tell you something.
The 2008 was a good model year many of the earlier problems had been sorted by then.
Draining the brakes I'm not so sure that was a smart move - seals may be all dried out and need replacing. The good thing is you stated the bike has been in a climate controlled storage area.
A fair price is hard to say - since you really don't know what you have until you get it back to road worthy.
Start with letting your aunt tell you what she wants for the bike.
I would not want to give a lot for the bike not knowing what I was getting into. Honestly $2K-$3K is all I would be willing to gamble and even then if you have a little bad luck - you may wish you didn't buy it in the first place.
A better approach may be to tell your aunt you will do the work required to bring it back to life and then you can decide if it is something you want or sell it for your aunt and take your expenses from the sale and give her the remaining funds.
I can't imagine why in the world anyone would drain the brake and clutch fluid, other than perhaps some very misguided idea that they were helping to preserve something. In reality of course it's more likely the opposite. But it's not certain any harm has been done, you'll need to get the bike on the road to find out. In order to fill the brake system in its current state you'll need a tool such as a GS911 to activate the ABS brake bleed procedure (this wouldn't be necessary if the brake system was filled, in which case you could just replace the fluid by normal bleeding at the calipers and be done, but oh well), or pay a dealer to do it. Note that the clutch reservoir requires mineral oil, not brake fluid.
If the final drive was drained, no big deal, just fill it per the proper procedure. Hopefully they didn't drain the cooling system as that requires a vacuum fill tool to refill properly.
Otherwise, as noted above a 2008 model should be past most of the early slant-K teething issues and, if after getting the bike on the road you experience no problems, could be a great bike, and only 7k miles on it to boot. I'd definitely get it running in order to sell because a running, low-mileage bile with no problems will command a much higher price than a bike full of unknowns.
Thanks all so far... looks like more homework to do, as well as grabbing a GS911 diagnostic tool.
The bike's worth next to nothing unless it's running. As a parts bike it would be hard and time consuming to make any money off it. Another approach is to get the dealer to give you a price for checking it over and a price for replacing the fluids, battery, and getting it running. Then see if your aunt is willing to pay to have that work done. If it is up and running and the dealer doesn't see anything majorly wrong with it, then like Bruce said it is probably worth about $2500. Could run 5 to 10 k miles or maybe 100k; hard to say.
It's true that K-bikes are not in the highest demand but $2500 is way low for that bike, just look at NADA, Cycle Trader, Craigslist, etc. I'm not going to get into a debate over this because anyone can say 'you won't get that' and maybe be right or maybe be wrong, but even allowing for asking vs. selling prices you should be able to do at least double that in a private sale for a 2008 K1200S with only 7k miles that is in good condition and road-ready.
Thanks all... here is a bit of an update, though not really had any time to tinker due to the holidays and repainting the garage floor. Also need to put new timing belts on the Duc which is likely going to take priority.
1. Need all the vent screws (bleeders) as I was not able to locate them. Going to order from bike bandit etc.
2. Will order all new fluids... oil, filter, German spec coolant, mineral oil for clutch, and dot 4 for brakes. Will also replace the rear diff oil while I'm at it.
3. Need to order a vacuum tool for the coolant. Looks like maybe $60 will suffice and then pretty simple to bleed the air out of the system.
4. Tires are from 2013... Michelin but will replace them once I am roadworthy as no sense in running old rubber.
5. The left side panel / fairing has enough damage that I will replace it with an eBay one in better shape. There is a crack near a mounting hole as well as some damage about the size of a fist.
6. I ran the vin on an online recall list. It lists three... fuel tank flange, rear wheel flange, and front brake bubbles. There is already a sponge in the front brake reservoir, so assume at least that was done. There was no mention of anything related to timing chains, abs, or the fuel gauge / fuel tape.
Based on this, I feel I can get the bike up and running for about $1000 including tires and the GS911 scan tool. I'm then thinking the bike would be a nice specimen 2008.
In that running condition, it would seem to range in price from $4500-6500 from what I am seeing. Sound about right?
Sounds like a good plan. Keep us posted as you make progress. Regarding the faring, they can be pricy. I had my local body shop prep and paint some panels on a k bike and it was relatively inexpensive. Just a thought. Good luck. PS buy Speed Bleeders to make the brake bleeding process easier.
Looks like a nice bike with a nice exhaust /seat /screen upgrade .
1. Pulled the calipers and replaced the brake pads. Found the rear pads were de laminated from the backing.
2. Sourced new brake bleeders and flushed and bled the full system. Luckily have the newer abs pump so wasn't as bad.
3. Sourced new bleeder for the clutch and bled using the specific oil.
4. Found one of the engine balance adjusters was partially pulled out... had to drop the pan to get it back in. Also had to pull half the exhaust to do so. Does the stock header include 5-6 separate pieces, or do I have a full aftermarket system?
5. Changed oil and filter.
6. Found an oil leak on the cylinder head cover by the cam chain. Pulled the cover, cleaned, and got it back on. What a PITA.
7. Filled the coolant system with the vacuum method. Pretty easy.
8. Replaced some missing bolts here and there... water pump, engine cases, etc.
9. Removed a broken engine bolt from the clutch side cover. Had to helicoil the hole but all set.
10. Pulled the fuel tank and drained the old varnish. Installed the metal ring onto the fuel quick disconnect mount as well as metal quick disconnects. Bye bye plastic.
Best of all, got the bike started and up/down the street. Sounds great and seems that most everything is coming along. I did end up making a deal with my aunt and got the title this week. Thanks for the help!
Glad about the progress. The list didn't come across.
Did you replace both male and female quick disconnects? Reason I ask is, I've read that many have some issues with the metal disconnect screwing into the plastic tank leaking? Something about the threads are a little different???? Where did you purchase the replacements ones from?
Nice job on the revival.
I couldn't read the list on my phone but now on the computer and see you've done quite a bit. Good work. You'll have loads of fun for sure.
I did the same thing with the disconnects on my 1999 Ducati... plastic, fuel, and age just don't mix. The female portion threaded into the tank just fine, but I did add some black plastic bonded as well as the female part of the tank where it goes was starting to get some stress cracks.
Mcwideglide: As for tires... you are correct. The bike has some Michelin's on it that are from 2013. After I get the title transferred and a plate/insurance, I will be taking it to the dealer for a few open recalls. Will try and have them put some new rubber on as I don't like old tires either. Just not worth the risk.
Many great tires out there. Can't go wrong with Pilot Road 4s or Power RSs depending on your riding style.
2. Had to replace the front disks... one of them was warped by over 0.020" (0.5mm). Spec per manual is 0.15mm.
3. Found a few more loose and missing bolts... replaced them and ensured the remainder were tightened to spec.
4. Got title transferred over, plate, and insurance going.
5. Ordered new tires today... Battlax T30 EVO. Will install this coming weekend.
6. Need to make a date with the dealer for a few recalls to be done, namely the rear wheel flange.
Otherwise all running great... did 40 miles today and it ran great. Too much power for my needs... running smooth and not a stumble at all. Thanks all for the help and suggestions.
Good to hear. Now the trip planning begins.
Agreed on trip planning. Put on new tires this weekend (Bridgestone battlax T30] and changes put the rear diff fluid with 180ml of new BMW gear oil.
Waiting on the dealer to get parts for the four open recalls... something with rear wheel flange, chain guide (assuming cam chain), front brake (assume sponge for front reservoir) and fuel tank (assume something with the sealing ring).
Otherwise enjoying it and glad to have the new ride in my stable along with an 83 V65 Magna and 99 Ducati 996s.
Craig, I believe the servos were discontinued on the K12's on Aug 2006 (my infamous K12R is a Jun 2006).
So, a 2008 has the upgraded ABS with no servo.
BTW, you have my exact same (and year) K12S.
Look at what I did on the color scheme!
Very nice. The black additions to the faring look great. Black is, after all, the best color.
Mate, usually (at least in my case) was not due to the gasket being bad.
If it keeps leaking even after the gasket change, it's because the the lower chain guide is pushing against the valve cover.
The reason is that if this bike (as it MUST) has installed the timing chain jump guard, the guard pushes the lower chain guide up by something like 3-5mm.
So, I shaved that part off the jump guard.
I believe I shared everything when I did that work.
Let us know if the leaking stopped, if it didn't, I can guide you in how to fix it.
But do installed the jump guard.
That's a free recall by BMW regardless of year.
Also, they should replace the rear wheel brake disk carrier/hub.
It came in aluminum and very prone to cracking if over-torqued.
Also, the fuel pump has a recall to replace or install a collar to avoid the pump outlet from cracking.
One of the replacement finds on the fuel pump flange is if it is cracked, replace the unit. The other thing is they had a ring gauge to slip over, if it slipped on and no cracks a ring was place on the flange.
It is holding perfectly so will be interesting to see what they say. I wasn't going to fork out a few hundred dollars on a new or used fuel pump assembly to get a non-cracked version.
I have a feeling you wouldn't say that about Vantablack, the true black.
A great looking K bike. Will be interesting if BMW will still do the fuel pump flange replacement for free, they should.
I never knew something like that existed. Very interesting. Kind of like a black hole - not even light can escape.
That was another way to do it.
it aggravates me that BMW did such a poor and sloppy job on this fine machine.
I have extra chain guides when these ones went. But, in the end I ended up buying two engines with allegedly low miles (under 7K miles) for each K12.
Regarding the pump, I have like three extra with the cracked outlet.
But, the one on my K12R cracked and started leaking. Put an adjustable clamp on it, and it's been there since 2014. No leaks.
Do check on your rear wheel flange and try the dealer for the fuel pump replacement.
What's that Ducati you have in the back?
...........Waiting on the dealer to get parts for the four open recalls... something with rear wheel flange, chain guide (assuming cam chain), front brake (assume sponge for front reservoir) and fuel tank (assume something with the sealing ring).
Interesting. I had my cam chain guide taken care of in '11 at about $370 out of pocket costs. I'd written a strong letter to them after reading about the assembly grenading and taking out entire engines. After four or five months they agreed to pay half. Sounds like I got screwed OR the recall was the result of lot bitching.
Aside from that, I'm impressed with all that you've done! Your K bike is beautiful and I hope you get lots of enjoyment from your rides. Also, post more pics of your 996 in the other bikes forum for the other Duc owners here (that would be me).
Also, post more pics of your 996 in the other bikes forum for the other Duc owners here (that would be me).


text:
 Print this article
Adding the "A" To STEAM: Brain Sciences and the Arts with Susan Magsamen
👤Kelly Chen and Hannah Huang	November 27, 2020
Art by Anmei Little.
For someone who has spent her career studying neuroaesthetics—how brain sciences interface with the arts—Susan Magsamen has a surprising secret: she's not a very good artist herself. "Like, not good at all," she laughs. "Not a good writer, not a good drawer, not a good dancer, can't sing at all. I will literally turn on Siri and sing as loud as I can, and I just hear my husband close the door upstairs." Magsamen does not do it for the praise—she simply does it for herself and the pleasure she derives from it. And she's devoted her life's work to helping others realize how art can impact human potential.
Magsamen's interest in the field started early. At age nine, she saw her twin sister immobilized and confined at home for a year and a half after a serious accident resulted in a compound fracture in her leg. An art class that her sister was able to take from home helped her come to terms with her feelings, get over the trauma of the accident, and ultimately save her life, Magsamen believes.
Now, as the founder and Executive Director of the International Arts + Mind Lab (IAM Lab), part of the Brain Science Institute at Johns Hopkins University School of Medicine, Magsamen and her team are focused on scientifically validating how art affects our minds, bodies, and behavior, as well as how that knowledge can be used in interventions at the personal, family, and community level. Her team is conducting a number of research projects that explore not only how the arts can improve health and well-being, but also consider the importance of personal preference when using art and aesthetic experiences as an intervention. For example, in collaboration with the Kennedy Krieger Institute, IAM Lab is building a multisensory care room to aid children waking up from coma, customized with a child's favorite colors, scents, sounds and textures.
Although there is a growing body of research on neuroaesthetics, efforts in this emerging field have largely operated in isolation. One of Magsamen's major goals is to "really coalesce all of the different disciplines and practitioners and researchers around the world who are already doing this work." To do this, Magsamen's team has created a scientific method to study the arts called Impact Thinking, a framework that can be consistently applied across the field to standardize research practices and scale the most promising, evidence-based interventions rapidly.
Magsamen is not only a passionate problem-solver and researcher, but also an established entrepreneur and children's book author. Despite how different these fields may seem, Magsamen has "never felt uncomfortable shifting between [these spaces]."
"The through lines to all of my work have really been three things," she said. "One is this idea around self-expression and finding, sharing, and celebrating voice." The other is "collaborations and working with really amazing people." The third is trying to understand why something is happening, a curiosity that drives her investigations into the underlying science of the arts.
Not all collaborations have been ideal, though. "Where I think there have been barriers has been coming up against traditional types of belief systems about what something should look like as opposed to what something could be. In the venture [capital] world, I came head up against primarily male–I'll say differently, older, white male gatekeepers who were really just sexist," she said. "I think that's changing, but it's really true, and I think to not name it is wrong." Her advice: persevere through and hold your ground.
To all women in STEAM, Magsamen also emphasizes the importance of taking care of your mind and your body, as well as truly listening to yourself. "I do my best work when I sleep," she laughed. She chooses not to make important decisions or answer questions late at night. "I needed to process and know what I thought before I was responding to what people wanted me to respond to." In a society where art programs and experiences are often underfunded or viewed as frivolous, Magsamen's work may teach us how important it is to incorporate art in our lives. "The arts and aesthetic experiences make us healthier and more human and connect us to ourselves," she said. "We have become such a transactional culture, and sometimes we're not as transformational and as fully alive as we can and should be." Art doesn't have to be produced by a prodigy to have value–it can do its greatest good when enjoyed by everyone, regardless of skill level.


text:
Posted inKivalliq News
Nickel mine produced drastic change in lifestyle for many Inuit
by Darrell Greer September 10, 2019
1109minz.jpg Photo courtesy of Piita Irniq (Edward) Iyakak and his wife, Qaaq, are taken to Rankin Inlet for Iyakak to work at a mine in 1956.
The move to Rankin Inlet from Naujaat to work in the nickel mine was an historic change in life for the families involved in the mid-1950s – and Piita Irniq, originally from Naujaat, remembers it well.
Irniq said he remembers when the federal government started flying Inuit couples on single-engine airplanes in 1956, as well as those who left Naujaat by dog team to go to Rankin.
(Edward) Iyakak and his wife, Qaaq, are taken to Rankin Inlet for Iyakak to work at a mine in 1956. Photo courtesy of Piita Irniq
He said in 1956, those who lived in Naujaat were still very, very traditional people.
"There were no houses then and everyone who lived there had nothing except for the animals, sea mammals, Arctic char and things like that," said Irniq.
"We were still travelling by dog team in the winter and walking the land to hunt caribou in the summer.
"There were only five houses in the community; three belonged to the Hudson Bay Co. and two belonged to the Roman Catholic Church.
"There were fewer than 100 Inuit in Naujaat in 1956 and most lived in an iglu in the winter, a tent in the summer, and travelled by dog team hunting and trapping whenever the weather was nice."
Irniq said it was through the Roman Catholic Church that Inuit in Naujaat learned of the nickel mine opening in Rankin Inlet and the company was actively recruiting Inuit to move to Rankin.
He still remembers many of those who decided to move to the new community.
"Kailitaaq Maniilaq (Manilak) and his wife, Veronica, went as well as his older brother, Edward Iyakak, and his wife, Qaaq. A single-engine aircraft went to get them and flew them to Rankin to work in the mine," said Irniq.
Kailitaaq Maniilaq (Manilak) and his wife, Veronica, enjoy nice weather outside their tent in Naujaat shortly before moving to Rankin Inlet in 1956 to work at the nickle mine. Photo courtesy of Piita Irniq
"Others who moved to Rankin at that time included Jack Anawak's family, Lorne Kusugak's family, and the late Bernadette Saumik, who became quite a good artist.
"They were full-time hunters, trappers and fishers who started to work at the mine as soon as they arrived in Rankin – and they stayed."
Irniq said their new community was much more modernized than Naujaat.
He said there was only a tiny Hudson Bay Co. store in Naujaat, that looked like a small confectionery store in southern Canada, and Rankin had so many new things to offer, such as a group of small matchbox houses that have since long faded away with time.
"There were a lot of non-indigenous people from southern Canada in Rankin when they arrived, and everything was much bigger and more advanced in terms of housing development and things like that than Naujaat – with even a few snowmobiles being already in the community.
"When I say Inuit are very adaptable people, imagine being a full-time hunter one day and working in a mine the next. That still impresses me a lot."
When the new miners and their families arrived in Rankin, for the vast majority it was their first real exposure to the monetary system and things like credit.
Irniq said no one really had actual money in 1956 Naujaat, with, maybe, $50 to be found in the entire community with the little bit the Hudson Bay Co. and the Roman Catholic Church possessed.
He said trade was money in Naujaat at that time, so handling money was something they first became used to in Rankin.
"They also started having square dances quite often when they moved to Rankin Inlet, getting all dressed up in southern clothes," said Irniq.
"So, they had major changes in their lifestyle from an iglu to a working mine basically overnight, and they were introduced to all sorts of things southern Canadians had such as washing machines, toilets – or maybe honey buckets – inside the house.
"The whole land was our washroom in Naujaat. All the waste was eaten by either our Inuit Husky dogs or the ravens, because that was the traditional way we lived."
Irniq said when the mine closed in 1962, many Inuit who had moved to Rankin Inlet from communities across the region decided to stay. Rankin had become their home and had many more facilities and amenities, a larger nursing station and a community hall. And, it offered their children better opportunities through schooling.
He said Rankin quickly became the hub of the Keewatin region for business opportunities from southern Canada.
"When the mine closed, the Government of Canada opened a ceramic shop, which operated for almost 10 years, and a canning facility for maktaaq, seal meat and things like that in order to provide income for Inuit who had lost their jobs.
"There were also some families who went to Yellowknife to work at the Giant Mine, such as Edward Iyakak, Francis Kapuk (still living in Rankin) and his older brother, Lucien Taparti.
"They became very good company for me too, because I'd see them once in a while in Yellowknife when I was going to Sir John Franklin High School.
"Still other Inuit moved to Lynn Lake to work at the mine there. They had learned to become good miners in Rankin Inlet and many of them went on to work at other places – from that point of view, they were also adapting to life in much larger communities than Rankin Inlet."
Tagged: Kivalliq, Kivalliq News, Naujaat, Nunavut News, Rankin Inlet
Darrell Greer
Darrell Greer is Editor of Kivalliq News More by Darrell Greer


text:
Выборы в Верховный Совет СССР II-го созыва состоялись 10 февраля 1946 года. По советскому законодательству, 325.000 граждан из 101.718.000 были по разным причинам лишены избирательного права.

Эти выборы стали первыми, в которых законодательство позволило военнослужащим частей Красной Армии, дислоцированных за пределами Советского Союза, голосовать за кандидатов в обе палаты Верховного Совета, для чего были образованы специальные избирательные округа из расчёта 1 округ на 100.000 человек. Подобная практика продолжалась и в последующие десятилетия, пока подразделения Советской Армии были дислоцированы в Восточной Европе.

В отдельных местностях на западе СССР выборы были сорваны местными националистами.

Результаты

См. также
 Список депутатов Верховного Совета СССР 2-го созыва

Литература

Примечания

Ссылки

1946 год в СССР
СССР
Выборы 1946 года
Февраль 1946 года
События 10 февраля

redpajama_set_name: RedPajamaWikipedia


text: module.exports = require('./lib/traildb');


text:
About the Attorneys
Our legal team is proud to serve the community of Louisville Learn More About Our Firm
Our attorneys offer compassionate, personalized care Learn More About Our Attorneys
Our law professionals can help you with your automobile accident case Learn More About Auto Accidents
If you have been injured at work, our team of lawyers can assist you Learn More About Workers' Compensation
Protect Your Best Interests with a Proven Personal Injury Lawyer
Explore our track record of helping injured clients.
Find out what sets us apart from the rest of the field.
"If you're injured, we can help!"
Attorneys Sean Lohman and Richard Decker have built their practice on the philosophy that clients come first. The law firm was founded in the 1970's by Mr. Lohman's father and continues to serve injured victims throughout Kentucky with client-centered care, individualized attention, and favorable results. Every client at The Lohman Law Offices, PSC deals with an attorney throughout their case rather than a paralegal or case manager because our lawyers have the client's best interests in mind.
If you or a loved one has been involved in a serious accident, you may be experiencing life-altering injuries and overwhelming losses. Insurance adjusters do not have your best interests in mind, and you are unlikely to be fairly compensated without the help of a knowledgeable personal injury lawyer. With the help of the Lohman Law Offices in Louisville, KY, you and your family will have a dedicated and compassionate legal advocate in your corner.
Lohman Law Offices concentrates in automobile accidents, including trucking and motorcycle accidents, as well as workers' compensation and social security disability law. We also assist victims of medical malpractice and nursing home abuse. If you have lost a loved one due to wrongful death, we are prepared to help you collect the compensation you will need in order to rebuild your life. Lohman Law Offices attorneys will fight to hold negligent parties accountable and to ensure you receive the compensation you deserve.
For victims of severe and catastrophic injury, Lohman Law Offices provides legal representation that yields higher settlements and higher recoveries for clients. We work strictly for plaintiffs on a contingency fee basis, so there are no up-front fees. We collect nothing until you receive your compensation.
Success Is in the Details
With over four decades of experience, our law firm has earned a reputation for excellence in Louisville and throughout Kentucky. As we work diligently to establish facts and gather evidence, we focus on proving the extent of our clients' losses and demonstrating the liability of the opposing party.
It has always been our policy to limit our caseload in order to give each client our full attention. Unlike some other law firms, our clients are never assigned exclusively to a paralegal. An attorney works with a staff member on each case, so you can expect to experience the vast benefits of our attorneys' legal expertise in personal injury law.
Lohman Law Offices attorneys will fight to hold negligent parties accountable and to ensure you receive the compensation you deserve.
Our office is located in the Professional Arts Building downtown, with complimentary parking always provided. Our lawyers usually meet clients in a comfortable private office, but are also available to meet you at the scene of an accident, a hospital room, or your home. Please contact us today to schedule your free consultation.
Kentucky Workers' Compensation Law Changes July 14, 2018Posted July 11, 2018Important changes to the Kentucky workers' compensation statute take effect July 14, 2018. These changes effect workers and their rights to recovery for injuries that occur in the workplace....
Selfies While Driving Can Be Fatal!Posted August 30, 2016Taking a selfie while driving can lead to serious injury...
How may we assist you? Please contact us by telephone (800) 998-4878 or use this convenient form to send us a message.
The Lohman Law Offices , P.S.C.
4th Flr
The information provided by this website is for informational purposes only,
and should not be considered legal advice or a substitute for competent legal counsel.
©2020 The Lohman Law Offices , P.S.C. | Lucid CMS® Innerspace V1 | Designed & Developed by Einstein Law | Login


text:
Investigative News Network
investigativenewsnetwork.org
@inn
The Investigative News Network is a nonprofit collaborative organization made up of more than 90 nonprofit investigative journalism outlets.
The network was founded by 25 nonprofit news organizations at a summer 2009 conference organized by The Center for Public Integrity and The Center for Investigative Reporting. Those two organizations, along with the Investigative Reporting Workshop and ProPublica, had previously initiated a six-month collaborative pilot project.
The group was formed as a way for nonprofit investigative outlets to collaborate on anything from reporting to administration to fundraising. It was granted nonprofit 501(c)(3) status in March 2012 and began funding new investigative projects in 2013. It began doing paid consulting work in 2014, often web development through its CMS called Largo, based on the open-source Argo framework built by NPR.
In February 2010, it released its first collaborative report, on sexual assaults on college campuses. In June 2010, the network received a two-year, $200,000 grant from the Knight Foundation and hired its first CEO. It also receives funding from several other foundations, including the McCormick Foundation and the William Penn Foundation, and from Voice of San Diego founder Buzz Woolley. The site excludes members that don't publicly disclose all donors on their websites.
The network partnered with the Knight Foundation in 2014 to launch the INNovation Fund, with $1 million in Knight funding, to support experimentation in nonprofit journalism.
In May 2011, the network announced a content syndication deal with Thomson Reuters.
Center for Investigative Reporting, ProPublica
Sept. 21, 2015 / Joseph Lichterman
The Institute for Nonprofit News hires Sue Cross, formerly at the AP, as its new CEO — The Institute for Nonprofit News named former Associated Press senior vice president Sue Cross as its new executive director and CEO on Monday. Cross replaces interim CEO Denise Malan, who has served in the role since Ap...
April 9, 2015 / Joseph Lichterman
INN splits with CEO Davis as it refocuses its efforts to promote nonprofit journalism — Less than a month after rethinking its mission statement and rebranding itself with a new name and website, the Institute for Nonprofit News is now also looking for a new leader. It parted ways with CEO and executive dir...
Oct. 15, 2014 / Joshua Benton
Events, a speakers bureau, and education partnerships: 8 projects at news nonprofits get funded — Back in April, we told you about a new grant program that funds small innovation projects at nonprofit news organizations. The INNovation Fund — awkward capitalization courtesy of its home at the Investigative News Net...
Aug. 5, 2014 / Liam Andrew
INN to offer paid tech consulting to members and non-members — Just before making an announcement last week, the Investigative News Network's Adam Schweigert tweeted: Learning the hard way that it's better to never give anything away for free, creates way too many false ince...
July 16, 2014 / Justin Ellis
A change in the IRS process for granting tax-exempt status could be a boon to nonprofit news — It took almost a year and a half for nonprofit news site Eye on Ohio to get its tax-exempt status approved by the IRS this spring. Launched in the fall of 2012 by former business reporter Lori Ashyk, the site aims to fol...
All Lab posts on Investigative News Network »
All Mediagazer posts on Investigative News Network »
Primary author: Mark Coddington. Main text last updated: August 14, 2014.
Explore: WyoFile
WyoFile is a nonprofit news site that covers public-interest news in Wyoming. The site was founded in 2008 and is funded by grants and donations, led by a Community Information Challenge grant from the Knight Foundation. As of January 2010, the site had raised about $250,000. It had a budget of about $250,000 in 2012,…


text:
Jennifer Lawrence and Cooke Maroney's engagement party: Details
By Marisa Laudadio Wonderwall 8:00am PDT, May 14, 2019
Three months after confirming their engagement, Jennifer Lawrence and Cooke Maroney celebrated their betrothal with a party for family and friends in New York City.
Elizabeth Pantaleo/REX/Shutterstock
Page Six reports that the Oscar winner and the art gallery director, who went public with their romance in June 2018, celebrated with a dinner party at Brooklyn's River Café Restaurant on May 11.
The couple, who rented the entire property for the occasion, hosted loved ones including fellow Oscar-winner Emma Stone. "It was fabulous!" a source told the New York Post's gossip column, adding, "There were tables set up everywhere — the dining room, the terrace room and the outdoor patio."
Allocca/StarPix/REX/Shutterstock
Among the eats? Passed hors d'oeuvres and Mandarin duck, Page Six added.
J-Law wore a beautiful blush pink silk crinkle L. Wells Bridal dress with a silk crepe de chine lining in a style called the Juliana that retails for $2,300. According to Page Six Style, Jen has a family connection to her engagement party dress designer, Lauren Wells: They're cousins.
JD Images/REX/Shutterstock
Us Weekly reported that Jen accessorized with Casadei shoes, a Roger Vivier purse and Fred Leighton jewels. Cooke wore a blue suit.
Her stylists, Jill Lincoln and Jordan Johnson, shared a photo of the actress in the beautiful gown, captioning it, "Here she comes! We couldn't be happier and more excited for #jenniferlawrence to become a #MRS.. this weekend we toasted Jen and her groom to be.. too good of a time was had by all."
Here she comes! We couldn't be happier and more excited for #jenniferlawrence to become a #MRS.. this weekend we toasted Jen and her groom to be.. too good of a time was had by all.
A post shared by @ jillandjordan on May 13, 2019 at 10:24am PDT
Makeup artist Fulvia Farolfi shared the same pic on Instagram, adding the caption, "YES!!! What a joy to be part of this magic moment!! 💘."
Other outlets, including People and DailyMail.com, which has photos of the couple all dressed up, reported that the their engagement party took place on May 12.


Yes, we're still here. We have had quite a spring and summer full of changes and lots of work. It's kept us quite busy and away from updating CFC.
Some of you know that my grandma was here in March and returned back to Indiana in early April. She passed away April 26th, 3 weeks after returning from a 3 month trip in Florida and 3 weeks here on Maui.
This post is in remembrance of her in pictures from her early days at 9 years old to her 3 trips to Maui through March 2011. Of course there are many more, but these are some of my favorites.
More updates on our changes to come.
Smoking and drinking somewhere on the beach in Florida.
The following images were from her 3 trips to Maui: 2007, 2008, 2011.


Juicy, crispy, crunchy…fried chicken is undoubtedly delicious. But it's also complicated, in ways that go far deeper than the science behind that perfect crust. From slavery to entrepreneurship and from yard fowl to Gospel bird, the story of fried chicken is filled with challenging contradictions. Grab a drumstick and listen in. 2016 is, according to Eater, …More → The post Poultry Power: The Fried Chicken Chronicles appeared first on Gastropod.


Stunning Copper Caviar leather with ruthenium hardware. Very hard to find!
Perfect bag to wear cross body. Chain strap drops 116cm. Can be worn single or double chain.
Very Good Condition. Worn once! As New Condition, no signs of wear.
Will be delivered with full Chanel set; Magnetic Box, dust bag, authenticity card, booklet, care glove and original Chanel receipt from 10/2017.


He may have said that the universe is expanding but eminent scientist Stephen Hawking very much wants the European Union to stay the same size after publicly opposing Brexit.
Hawking, author of the Brief History of Time, is the most high profile figure among 150 or so other fellows from Britain's leading scientific institution the Royal Society who warn that British scientific research would be under threat should the UK left the EU.
In a letter to The Times, they said that many top researchers were recruited from the continent and are often the beneficiaries of EU grants. They also cite the example of Switzerland, which is outside the EU and which they say struggles to attract young scientific talent after it introduced restrictions on migrants.
The letter states: "If the UK leaves the EU and there is a loss of freedom of movement of scientists between the UK and Europe it will be a disaster for UK science and universities."
Professor Sir Alan Fersht, a pioneer of protein science, was behind the letter which has the backing of the majority of Royal Society fellows from Cambridge. He told The Times that the UK had received £6.8bn worth of scientific funding from Brussels and that Europe was "crucial to our science, and there is no question about it: Britain is now a net receiver of brains."
The battle lines ahead from both sides of the debate regarding the EU referendum are becoming ever more defined.
It emerged that Justice Secretary Michael Gove has been implicated in leaking details of a private conversation hinting that the Queen would like Britain to leave the EU.
Gove, who has been made chairman of the Vote Leave campaign group, refused to deny he was the source of a leaked exchange which The Sun reported had taken place between the monarch and four ministers in April 2011 at Windsor Castle.
Sources close to one minister at lunch told the Daily Telegraph that the Queen had not expressed any concerns that would suggest she wanted Britain to leave the EU.
Meanwhile, someone closely linked to the Justice Secretary told the Telegraph that they "have no idea who the sources are".
Buckingham Palace has complained to the press complaints watchdog over the report and in a statement said that the Queen was politically neutral.
Members of the Privy Council have to swear not to reveal details of what is told them by the monarch. Labour MP Wes Streeting has written to the Cabinet Secretary Jeremy Heywood calling for the case to be investigated to see if protocol was breached.


text:
Q: Acer Aspire One AOA 150 netbook health monitoring software I have a Acer Aspire One AOA 150 with Windows Xp Home. I want to  monitor the voltages from the power supply, the temperature of the system,  the CPU and fan speeds. Much like the functionality of GKrellM(though I haven't used this on the netbook yet) , a GTK applet designed to make an impressive panel of monitors or xsensors in Linux.  Is this  possible with the netbook? I want a software for Windows 7 and Windows Xp.

A: It's not very comprehensive, but Taskbar Meters may be of interest for Windows 7.
Moo0 SystemMonitor is an option similar to GKrellM, that should work on Windows XP and 7.

redpajama_set_name: RedPajamaStackExchange


text:
Q: How to take screenshot of the Here Map loaded android screen? I am using Here Map in half section of the screen. Now i have added one screenshot button on same activity which will take screenshot of this screen.
In output screenshot, there is a blank section where the Here Map loads.
So, How can i take the screenshot of Here Map section?
It's fine if i can take screenshot of only Here Map as we can do using google map.
It will be great if there are some examples.

A: I think you are looking for the screen capture API. Please see these links for MapView and MapFragment. It will capture a screenshot and return asynchronously to your code.


RDT specialize in segments for circular saws, gang saws and cut-off saws. We can manufacture and supply a range of segments based on their application. We can design customized segments as per customer specified geometry. We categorize the segments into three types founded on the application and process.


High-voltage Web applications are driving the next wave of e-commerce. These tools take your site a notch higher.
Where do you go when you're already at 10?
So asks faux rock star Nigel Tufnel of rockumentary producer Marty DiBergi in the movie This Is Spinal Tap. You might ask the same question about your organization's Web presence.
Turning the dial up one more notch on a Web site means making your Internet presence flexible, data-driven, and instantly responsive to your visitors' changing needs. To do that, you need dynamic pages and Web-based applications. The market for Web applications is in hypergrowth: About $1.5 billion will be spent on application servers this year and $9 billion in 2003, according to analysts at Giga Information Group.
Programming for the Web brings up a host of unique and complex issues—designing the pages, sure, but also tracking user state, handling frequent site changes, dynamically adapting content to a range of output devices from palmtops and WAP phones to desktops, and using XML to exchange information between Web applications and legacy systems or with business partners. On top of these unique new challenges for Web developers, expectations for security, scalability, and reliability have never been higher.
Choosing the best tools for dynamic Web application development is of paramount importance, and that's what we evaluate in this story: tools that build HTML-based Web applications.
We take a look at products used by a large number of Web developers to build dynamic sites that can link to databases, usually through Java Database Connectivity (JDBC) or Open Database Connectivity (ODBC) drivers.
To test the tools, we asked each vendor to create a Web-based, thin-client version of a legacy inventory tracking application. The app involved database access and user personalization features. We then deployed each vendor's solution to an Oracle database and extended the functionality with new features, including a screen for new database tables and XML support. This let us see how each tool handled middle-tier component building, user interface design, and other requirements for real-world Web development.
Some of the products, like Allaire's ColdFusion Studio and Macromedia's Dreamweaver UltraDev started their lives as HTML authoring tools (HomeSite and Dreamweaver, respectively). Still incorporating highly capable Web page editors, these products provide an easy transition for Web designers who want to add dynamic content to static pages.
On the other end of the spectrum is Borland JBuilder 4 Enterprise, which targets accomplished Java developers. In between are offerings from IBM and WebGain, which bundle tools that target both HTML and Java-oriented developers.
One trend we're pleased with is that Web development is getting simpler without becoming less powerful. Scripting languages such as ColdFusion Markup Language (CFML) remain the gold standard for ease of use and ease of learning, but Microsoft Active Server Pages (ASP) and PHP (Perl Hypertext Preprocessor, originally called Personal Home Pages) have been steadily gaining in sophistication and power. And the Java tools here support JSP (JavaServer Pages) for a similar solution. Perl has long been a popular choice as a Web scripting language, though it doesn't have the level of development tools or management support these other languages have.
At the high end, the Web development market has clearly given Java its nod of approval. Most application servers support Java and Enterprise JavaBeans (EJBs)—middle-tier reusable components that extend an application server—making Java by far the most widely supported server development language. Java's structured exception handling, automatic memory management, strong network support, rich class library, and portability make it an excellent choice for shops with skilled developers. However, for the much larger group of people who build HTML pages and write scripts (but who don't want to worry about thread handling and other programming arcana), the products reviewed here support scripting languages.
We also take a look at alternatives such as open source choices PHP, Tomcat, and Zope, and we fill you in on what Microsoft is planning for its Visual Studio.NET Web application strategy—in transition at the moment.
Whatever technology you choose, it's certain that you'll have to keep pushing your Web site past its limits. And who knows? If all goes well, you may need to crank it up to 12.


text:
Everything You Need to Know About the Potentially Deadly Virus Hitting Hawaii
Miscellany Dec 2, 2015
Yahoo! Travel
See recent posts by Yahoo! Travel
The Hawaiian health department is currently investigating a cluster of cases of the potentially deadly dengue fever on Hawaii Island.
According to the health department there have been 92 confirmed cases of dengue since September. Of those cases 79 of the victims have been Hawaii residents and 13 have been visitors. Seventy of the cases have been adults and twenty-two have been children.
There have been no deaths reported from the tropical disease so far this fall.
Officials with the CDC and tropical disease experts claim that the recent outbreak is not a reason for anyone to cancel their travel plans.
"While dengue is present on the Big Island, there are a variety of ways to avoid the disease and risk can be minimized through repellents and other means," Vicki Sowards, the director of nursing resources with travel medicine provider Passport Health USA explained.
The fever is not spread by contact with an infected person, rather through the bite of an infected mosquito.
The best way to protect yourself from mosquitoes is to use a repellent with 20-30% DEET. This should be put on AFTER any sunscreen or makeup products and used 20 minutes before possible exposure. Long sleeves, pants and closed toes shoes also offer protection," Sowards explains. "A product, Premetherin, can be sprayed onto outer clothing prior to travel. It offers repellent protection for 6 weeks or 6 washings. It is recommended for outer night clothes, as the mosquitos may be attracted to the lights."
Sowards also advises travelers to try to stay in air-conditioned hotels.
"If there is no air conditioning, be sure there are no holes in the screens and that windows are only open if there are screens in good repair," she says.
Last week the National Guard began assisting the health department by flying mosquito sprayers from Oahu to the Big Island.
Here are the things the Hawaii health department wants you to know about the current dengue fever outbreak.
What Is Dengue Fever?
"Dengue fever is a viral illness spread by mosquitoes. The disease occurs mainly in tropical Asia, Africa, the Caribbean and the South Pacific. It is most common during the rainy season in areas infested with infected mosquitoes. Sometimes, persons arriving from other countries may enter the United States with dengue fever and infect local mosquitoes, as happened in Hawaii in 2001.
What Are the Symptoms of Dengue Fever?
"The symptoms of dengue fever include sudden onset of fever, severe headaches, eye, joint, and muscle pain, and rash. The rash typically appears on the hands, arms, legs and feet 3 to 4 days after the fever begins. Minor bleeding problems can also occur."
RELATED: Mosquitos and West Nile Virus—Your Guide to Staying Safe
Where on the Big Island Are the Cases Located?
"The investigation is still underway, and the Department of Health (DOH) is still investigating possible areas where cases may have been exposed to infected mosquitoes. Current investigations have identified South Kona (in particular Hookena and Honaunau) as an area of particular concern, but the entire island is considered to be at risk."
How Many Cases Have There Been?
"The investigation is still ongoing. We are still actively seeking cases, following up on reported illnesses, so the number of cases continues to change. Visit the DOH Dengue Outbreak 2015 webpage for updates and information."
What Type of Dengue Viruses Have Been Identified in This Outbreak?
"There are four closely related dengue viruses (DENV 1, DENV 2, DENV 3, and DENV 4). The current 2015 Hawaii Island outbreak involves DENV 1 serotype virus."
RELATED: 7 Things That Can Protect You From Norovirus on a Ship
What Is the Treatment for Dengue Fever?
"There is no specific treatment for dengue fever. Bed rest and acetaminophen (Tylenol) to treat fever and pain are recommended. Aspirin and NSAIDS (ibuprofen, naproxen) are not recommended as they can make bleeding problems worse. There is currently no vaccine for dengue fever."
For more information you can call Aloha United Way 2-1-1.
To report a suspect case call 808-974-6001 (East Hawaii) or 808-322-4880 (West Hawaii).
—Jo Piazza
This article was originally published by Yahoo! Travel under the headline Potentially Deadly Virus Hits Hawaii—Everything You Need to Know. It is reprinted here with permission.
More from Yahoo! Travel:
Molokai: The Last Truly Unspoiled Hawaiian Island
18 Jobs That Let You Travel the World
Easy Tips for Nervous Fliers: How to Keep Calm on a Plane
(Photo: Thinkstock/iStock)


A DuPage County judge Thursday ordered well-known Naperville squatter Scott Huber to get a job as part of his probation on trespassing and disorderly conduct charges.
Judge Karen Wilson sentenced Huber to a two-year probation term, and ordered him to undergo job placement training and find a job working at least 10 hours a week.
"I feel like you need some assistance, some direction," Wilson said. "I feel like you have certain skills to assist yourself that you are not tapping into.
To most people, the notion of taking over someone's home and refusing to leave is bizarre and should not be allowed.
Like squatting, the protest camp that has surrounded St Paul's Cathedral and forced it to close for the first time since The Blitz is wrong and should be illegal. Just as squatters are mostly organised and frequently menacing, the campers outside St Paul's have abandoned any legitimate cause.
Fast Show comic Charlie Higson has revealed how he honed his act and charaters while squatting in east London.
In an interview with the Sunday Times, he said he and fellow Fast Show writer and performer Paul Whitehouse squatted a few doors down from each other in Hackney in the 1980s after learning the council planned to offer full tenancy rights to squatters.
Du browst gerade in den squatting in the news Weblog-Archiven nach der Kategorie 'funny'.


Web Experience Management (WEM) refers to the personalization of a website visitor's experience based upon business intelligence. What does that mean?!?! Put simply, WEM is an approach to increasing meaningful engagement with your website visitors based upon what you know about them by bridging the gap between contacts and content. That same intelligence can be used by your organization to focus resources where they are needed most and can have the largest impact.
Measure the level of your constituents engagement with your organization.
Configure those engagements through a simple, familiar web interface.
Customize the user experience based on those engagements.
Highlight geographic clusters of engagement on a map.


I have normal skin so I don't have any major problems but after taking up blogging and treating my face like a university lab-rat, my skin isn't as great as it use to be. My pores are more visible and I now have a really weird dry skin spot on the bridge of my nose following one to many allergy reactions. While none of these problems are evident when I wear makeup, once I take it off . . . it BUGS me!!!
I'm always happy to review cleansers as I am very apprehensive about spending my money on cleansers as I find that they are either too harsh, too heavy or don't do jack-all to my skin. So when I received this cleanser at the Live Bloggers event a few months back, I wasn't really sure if it would blow me away or not, and honesty I am still on the fence about this product.
You know when you cant decide whether you like a product and are using it because you like it or you don't actually like it but are using it because your skin loves it. I honestly believe that with this Cleanser, I fall into the later category.
Super Facialist by Una Brennan Neroli Firming Daily Brightening Cleanser (RRP £7.99) is a SLES free cleanser formulated with Mango Seed Oil, Grape Seed Oil and Hibiscus extract to gently cleanse your skin while pumping it a tightening polysaccharide (huh?!) and hyaluronic acid to leave skin feeling renewed and smoother. While I don't know what polysaccharide is, I can tell you that this cleanser does have glycerin in it and is protein, & anti-oxidants rich.
I think what really makes me dislike this product is that it comes in a gel formula and I personally don't like gel formulas as daily facial washes but I can't deny that my skin really likes this and the majority of my skin problems have disappeared.
Have you ever been on a fence about a product like I am over this cleanser?


Posted on February 9, 2015 Posted in Cakes	.
It's been a while since I have baked with alcoholic spirits. As I had party coming up I though now was a good time as any to make a decadent alcoholic cake. It had to be something sweet that would complement typical cake flavors as this cake was for an event and not just for me (not everyone is quick to jump at my unusual baking style 🙂 ).
Decisions, decision. It was down to Frangelico (hazelnut) or Kahlua (coffee). As I have made a Frangelico cake in the past (it's not on this blog as it just didn't quite make the cut), I decided Kahlua it is.
What goes with the flavour of coffee? Well chocolate and hazelnut of course!
All I can say for this recipe is decadent, amazingness, flavour explosion and a must to try!
Pre-heat the oven to 160c degrees and line a 23cm baking tin with baking paper.
Using electric beaters beat the butter and sugar for 5 minutes until light and fluffy.
Add the vanilla and eggs, beating in each addition.
In another bowl sift the flour, mixed spice, baking powder and soda then add to the butter mix.
Add the instant coffee to ¼ cup of warm water and whisk until the coffee is dissolved.
Add 90ml of Kahlua to the coffee mix and pour into the butter mix.
Mix the ingredients with a spoon then whisk with electric beaters until just combine.
Spoon the mix into the cake tin and bake in the oven for 40-45 minutes or until a skewer inserted in the center comes out clean.
Allow the cake to cool in the tin for 5 minutes than place on a cooling rack until the cake is cold.
To make the Nutella frosting beat the cream until soft peaks.
Whip the butter for 2 minutes until creamy.
Add the nutella and cream to the butter and beat with electric beaters for 1 minute. Place the frosting in the fridge.
To make the chocolate frosting beat the cream until soft peaks, sift in the cocoa and icing sugar and beat for a further 30 seconds until combine. Set mix aside.
Once the cake is cooled cut in half horizontally and brush both cut sides with the extra 10ml of Kahlua.
Place the bottom cake layer on a plate, spread with the chocolate frosting.
Place the second cake on top of the chocolate frosting then spread the Nutella frosting over the top of the cake and sides.
Decorate with hazelnuts and shaved chocolate.
Tags: chocolate, chocolate frosting, coffee, hazelnut, kahlua, Kahlua Nutella and Chocolate Cake, Nutella, nutella frosting	.
Hi how long will this cake last for if I have to make it a couple days in advance?
Keep it in the fridge in an air tight container for 5 days or you can always freeze for up to 3 months and just put in the fridge the day before you want to serve it to defrost.


text:
You are here: Home / Issues / 2019 / Q&A: Miners got game
Q&A: Miners got game
April 2, 2019 by stanfordl
What was the most memorable sports team during your time on campus?
As part of his research for the S&T 150th history book, Larry Gragg, Curators' Distinguished Teaching Professor emeritus of history and political science, asked you to share your memories. Here are a few of your answers.
"No question: the 1959, '60, '61 rifle team. We fired against the best and won almost every time. Our equipment was worn out, the ammo was not the best, but we still hit Xs. I know of no other Rolla team with a better record."
Chuck Dohogne, MetE'61
Rancho Palos Verdes, Calif.
"The Miner football teams of the two seasons described in the 1950 and 1951 Rollamo were the most memorable for me. Playing in the ROTC band on the sidelines, it seemed perfectly natural to have a championship team under the leadership of coach Gale Bullman. Quoting from the Rollamo, 'The conference record of the 1949 Miners is the record of a true champion. Meeting and decisively defeating every other team in the Missouri Intercollegiate Athletic Association, the Miners are undisputed titleholders.' The next year, the Rollamo reported: 'This year in Miner gridiron history may be proclaimed the most successful one since 1914. The Miners broke a 35-year jinx by defeating the Washington University Bears. This is the second straight year that Rolla has taken the MIAA conference crown. It is also the first time a Miner eleven has participated in a Bowl game, this year playing in the Corn Bowl against Illinois Normal in Bloomington, Ill., on Thanksgiving Day of 1950. The Miners won, 7-6.'"
Bill Patterson, PetE'53
"The basketball team traveled to Springfield, Mo., to play a game in March 1971. I went as the color announcer for radio station KMSM 88.5 as we broadcast the game that night. And for the first time in many years we won! As a celebration of major proportion, the team was taken to a steakhouse for a great meal — and we were invited since we also were on the team bus.
Coach (Billy) Key was a class act."
David G. Sizemore, EE'71
San Diego, Calif.
"To me the swim team was the most memorable team — a bunch of rank amateurs with no scholarships who nonetheless did very well in MIAA swim competitions. I knew the 1973–74 team the best. Swimmer Allen Fails (ME'74) was a friend of mine, a fellow ME, and a guy who shared my cynical, sarcastic sense of humor. I also knew James Entwistle, (PetE'74) known as 'Twit.' Some of them lived together in an old white house southeast of campus. One night in October 1973, nine of us piled into Entwistle's metallic green 1964 Chevy Impala station wagon to see The Grateful Dead at Kiel Auditorium in St. Louis, my first big name rock concert and a night I will never forget, both for the music and the crowd. We made it back OK. The football and basketball teams got all the press. But the swim team members were the best guys to know."
Ron Corradin, ME'74
St. Paul, Minn.
"UMR wrestling."
Doug Eden, PetE'88
Chatham, Ill.
"1956 Miner football team."
Ken Jobe, GGph'60, CE'66
Virginia Beach, Va.
What was the most memorable sports team during your time on campus? As part of his research for the S&T 150th history book, Larry Gragg, Curators' Distinguished Teaching Professor emeritus of history and political science, asked you to share your memories. Here are a few of your answers.
Honoring new academy members
In October, 12 alumni and friends were inducted into Missouri S&T academies. Academy membership recognizes careers of distinction and invites members to share their wisdom, influence and resources with faculty and students. Some academies hold induction ceremonies in the fall, others in the spring.
Boosting cyber-physical security
A wide array of complex systems that rely on computers — from public water supply systems and electric grids to chemical plants and self-driving vehicles — increasingly come under not just digital but physical attacks. Bruce McMillin, professor and interim chair of computer science at Missouri S&T, is looking to change that by developing stronger safeguards […]
MXene discovery could improve energy storage
In spite of their diminutive size, 2-D titanium carbide materials known as MXenes are "quite reactive" to water, a discovery S&T researchers say could have implications for energy storage and harvesting applications such as batteries, supercapacitors and beyond. Their findings were published in 2018 in the American Chemical Society journal Inorganic Chemistry.
A faster charge for electric vehicles
One drawback of electric vehicles (EVs) is the time it takes to charge them. But what if you could plug in your EV and fully charge it as quickly as it takes to fill up a conventional car with gasoline? Missouri S&T researchers, in collaboration with three private companies, are working to make speedy charging […]
Filed Under: 2019, Around the Puck, In Your Words, Q&A, Spring 2019


Rtic produce some of the best coolers & drinkware available today in the market. Above all, their prices are user-friendly and as Rtic would boast – Overbuilt, not overpriced.
If you want to enjoy the coldness of your beverage or the hot coffee for long hours, you'll need these Rtic tumbler cups as they are built inch perfectly to provide maximum user satisfaction. Also, unlike the Yeti, it wouldn't cost you an arm and a leg.
Rtic tumbler has blown over the years, and you'll find people continually comparing them to other cups. Well, today we'd are going to take a look at how tough, and how much cold or hot their tumblers can hold.
We used a 30 oz tumbler for the hot water test. The test was carried out in a period of 7 hours to see how long it can hold your coffee. Although I don't think anybody will brew a coffee to drink it hours later.
Our test was simple. We recorded our findings from the beginning to the end.
2. The hot water was poured into the 30 oz cup. A thermometer was used to take the temperature of the water.
3. check the water after an hour for 7 hours.
After 7 hours, the temperature dropped from 180 °F to 130 degrees. This is prove that Rtic tumblers can hold your cold, hot coffee for long.
In the cold water test. We pitted the Rtic tumbler against a generic tumbler we bought on Walmart. Trying to see how efficient the Rtic is in holding ice over long periods, a 12-hour test was conducted. Both cups used for the test measured 30 oz respectively.
1. Equal measured ice was put in both cups.
2. After the 12-hour period, water was poured out from both cups.
More ice melted in the generic tumbler, thus, more water. There was ice floating on top of the water after 12 hours. In fact, from the way things were going, the cold could have lasted for 24 hours.
Affordable price – compared to the Yeti tumbler, the Rtic is is twice as cheap which is really a great bargain, considering they hold ice and hot for almost the same period.
Durability – The tumbler is build with tough exterior and durable parts like the lid.
Insulation – it locks in cold/heat inside, this helps in maximum thermal performance.
To be very honest there's nothing we've found that doesn't sit right. Doing so would be nitpicking as other tumblers in the market have similar flaws.
When it comes to durability, double wall vacuum insulation ensures not only does your cup retain cold or hot content but shatterproof. Whether hot or cold will affect the outside. In addition to that, sweat proof design offers a comfortable grip.
It has a narrow design at the bottom which is made to fit into cup holders. Also, the taller base gives a better grip. The Rtic cup includes a heavy-duty seal to lock out in all the cold or hot content. This provides an astounding thermal performance.
Another great thing you'll appreciate is the splash proof lid, and small impacts will not spill your drinks from the cup. The lid integrates two holes, and the small one allows air to get in so that you can sip from the large opening without hiccups.
To make your experience blissful when using Rtic tumbler, third-party companies have produced some great accessories which are now available on the market.
The Rtic tumblers are undoubtedly one of the best tumblers you get out there. For half the price of a Yeti tumbler cup, Rtic provides you with products that are overbuilt not over-priced as they say.
Putting the models through, cold and hot test, it is right to say they perform incredibly well. The construction is great, and the double wall insulation provides for longer thermal performance. There are many models to choose from, select the size that will cater for your needs without the need for a backup.
Overall, you have a complete cup that has all the features to offer more than you bargained for.