text:
namespace openmc {

//==============================================================================
// Global variables
//==============================================================================

namespace settings {

// Default values for boolean flags
bool assume_separate         {false};
bool check_overlaps          {false};
bool cmfd_run                {false};
bool confidence_intervals    {false};
bool create_fission_neutrons {true};
bool dagmc                   {false};
bool delayed_photon_scaling  {true};
bool entropy_on              {false};
bool event_based             {false};
bool legendre_to_tabular     {true};
bool material_cell_offsets   {true};
bool output_summary          {true};
bool output_tallies          {true};
bool particle_restart_run    {false};
bool photon_transport        {false};
bool reduce_tallies          {true};
bool res_scat_on             {false};
bool restart_run             {false};
bool run_CE                  {true};
bool source_latest           {false};
bool source_separate         {false};
bool source_write            {true};
bool surf_source_write       {false};
bool surf_source_read        {false};
bool survival_biasing        {false};
bool temperature_multipole   {false};
bool trigger_on              {false};
bool trigger_predict         {false};
bool ufs_on                  {false};
bool urr_ptables_on          {true};
bool write_all_tracks        {false};
bool write_initial_source    {false};

std::string path_cross_sections;
std::string path_input;
std::string path_output;
std::string path_particle_restart;
std::string path_sourcepoint;
std::string path_statepoint;

int32_t n_inactive {0};
int32_t max_lost_particles {10};
double rel_max_lost_particles {1.0e-6};
int32_t gen_per_batch {1};
int64_t n_particles {-1};

int64_t max_particles_in_flight {100000};

ElectronTreatment electron_treatment {ElectronTreatment::TTB};
std::array<double, 4> energy_cutoff {0.0, 1000.0, 0.0, 0.0};
int legendre_to_tabular_points {C_NONE};
int max_order {0};
int n_log_bins {8000};
int n_batches;
int n_max_batches;
ResScatMethod res_scat_method {ResScatMethod::rvs};
double res_scat_energy_min {0.01};
double res_scat_energy_max {1000.0};
std::vector<std::string> res_scat_nuclides;
RunMode run_mode {RunMode::UNSET};
std::unordered_set<int> sourcepoint_batch;
std::unordered_set<int> statepoint_batch;
std::unordered_set<int> source_write_surf_id;
int64_t max_surface_particles;
TemperatureMethod temperature_method {TemperatureMethod::NEAREST};
double temperature_tolerance {10.0};
double temperature_default {293.6};
std::array<double, 2> temperature_range {0.0, 0.0};
int trace_batch;
int trace_gen;
int64_t trace_particle;
std::vector<std::array<int, 3>> track_identifiers;
int trigger_batch_interval {1};
int verbosity {7};
double weight_cutoff {0.25};
double weight_survive {1.0};

} // namespace settings

//==============================================================================
// Functions
//==============================================================================

void get_run_parameters(pugi::xml_node node_base)
{
  using namespace settings;
  using namespace pugi;

  // Check number of particles
  if (!check_for_node(node_base, "particles")) {
    fatal_error("Need to specify number of particles.");
  }

  // Get number of particles if it wasn't specified as a command-line argument
  if (n_particles == -1) {
    n_particles = std::stoll(get_node_value(node_base, "particles"));
  }

  // Get maximum number of in flight particles for event-based mode
  if (check_for_node(node_base, "max_particles_in_flight")) {
    max_particles_in_flight = std::stoll(get_node_value(node_base,
      "max_particles_in_flight"));
  }

  // Get number of basic batches
  if (check_for_node(node_base, "batches")) {
    n_batches = std::stoi(get_node_value(node_base, "batches"));
  }
  if (!trigger_on) n_max_batches = n_batches;

  // Get max number of lost particles
  if (check_for_node(node_base, "max_lost_particles")) {
    max_lost_particles = std::stoi(get_node_value(node_base, "max_lost_particles"));
  }

  // Get relative number of lost particles
  if (check_for_node(node_base, "rel_max_lost_particles")) {
    rel_max_lost_particles = std::stod(get_node_value(node_base, "rel_max_lost_particles"));
  }

  // Get number of inactive batches
  if (run_mode == RunMode::EIGENVALUE) {
    if (check_for_node(node_base, "inactive")) {
      n_inactive = std::stoi(get_node_value(node_base, "inactive"));
    }
    if (check_for_node(node_base, "generations_per_batch")) {
      gen_per_batch = std::stoi(get_node_value(node_base, "generations_per_batch"));
    }

    // Preallocate space for keff and entropy by generation
    int m = settings::n_max_batches * settings::gen_per_batch;
    simulation::k_generation.reserve(m);
    simulation::entropy.reserve(m);

    // Get the trigger information for keff
    if (check_for_node(node_base, "keff_trigger")) {
      xml_node node_keff_trigger = node_base.child("keff_trigger");

      if (check_for_node(node_keff_trigger, "type")) {
        auto temp = get_node_value(node_keff_trigger, "type", true, true);
        if (temp == "std_dev") {
          keff_trigger.metric = TriggerMetric::standard_deviation;
        } else if (temp == "variance") {
          keff_trigger.metric = TriggerMetric::variance;
        } else if (temp == "rel_err") {
          keff_trigger.metric = TriggerMetric::relative_error;
        } else {
          fatal_error("Unrecognized keff trigger type " + temp);
        }
      } else {
        fatal_error("Specify keff trigger type in settings XML");
      }

      if (check_for_node(node_keff_trigger, "threshold")) {
        keff_trigger.threshold = std::stod(get_node_value(
          node_keff_trigger, "threshold"));
        if (keff_trigger.threshold <= 0) {
          fatal_error("keff trigger threshold must be positive");
        }
      } else {
        fatal_error("Specify keff trigger threshold in settings XML");
      }
    }
  }
}

void read_settings_xml()
{
  using namespace settings;
  using namespace pugi;

  // Check if settings.xml exists
  std::string filename = path_input + "settings.xml";
  if (!file_exists(filename)) {
    if (run_mode != RunMode::PLOTTING) {
      fatal_error(fmt::format(
        "Settings XML file '{}' does not exist! In order "
        "to run OpenMC, you first need a set of input files; at a minimum, this "
        "includes settings.xml, geometry.xml, and materials.xml. Please consult "
        "the user's guide at https://docs.openmc.org for further "
        "information.", filename
      ));
    } else {
      // The settings.xml file is optional if we just want to make a plot.
      return;
    }
  }

  // Parse settings.xml file
  xml_document doc;
  auto result = doc.load_file(filename.c_str());
  if (!result) {
    fatal_error("Error processing settings.xml file.");
  }

  // Get root element
  xml_node root = doc.document_element();

  // Verbosity
  if (check_for_node(root, "verbosity")) {
    verbosity = std::stoi(get_node_value(root, "verbosity"));
  }

  // DAGMC geometry check
  if (check_for_node(root, "dagmc")) {
    dagmc = get_node_value_bool(root, "dagmc");
  }

#ifndef DAGMC
  if (dagmc) {
    fatal_error("DAGMC mode unsupported for this build of OpenMC");
  }
#endif

  // To this point, we haven't displayed any output since we didn't know what
  // the verbosity is. Now that we checked for it, show the title if necessary
  if (mpi::master) {
    if (verbosity >= 2) title();
  }
  write_message("Reading settings XML file...", 5);

  // Find if a multi-group or continuous-energy simulation is desired
  if (check_for_node(root, "energy_mode")) {
    std::string temp_str = get_node_value(root, "energy_mode", true, true);
    if (temp_str == "mg" || temp_str == "multi-group") {
      run_CE = false;
    } else if (temp_str == "ce" || temp_str == "continuous-energy") {
      run_CE = true;
    }
  }

  // Look for deprecated cross_sections.xml file in settings.xml
  if (check_for_node(root, "cross_sections")) {
    warning("Setting cross_sections in settings.xml has been deprecated."
        " The cross_sections are now set in materials.xml and the "
        "cross_sections input to materials.xml and the OPENMC_CROSS_SECTIONS"
        " environment variable will take precendent over setting "
        "cross_sections in settings.xml.");
    path_cross_sections = get_node_value(root, "cross_sections");
  }

  if (!run_CE) {
    // Scattering Treatments
    if (check_for_node(root, "max_order")) {
      max_order = std::stoi(get_node_value(root, "max_order"));
    } else {
      // Set to default of largest int - 1, which means to use whatever is
      // contained in library. This is largest int - 1 because for legendre
      // scattering, a value of 1 is added to the order; adding 1 to the largest
      // int gets you the largest negative integer, which is not what we want.
      max_order = std::numeric_limits<int>::max() - 1;
    }
  }

  // Check for a trigger node and get trigger information
  if (check_for_node(root, "trigger")) {
    xml_node node_trigger = root.child("trigger");

    // Check if trigger(s) are to be turned on
    trigger_on = get_node_value_bool(node_trigger, "active");

    if (trigger_on) {
      if (check_for_node(node_trigger, "max_batches") ){
        n_max_batches = std::stoi(get_node_value(node_trigger, "max_batches"));
      } else {
        fatal_error("<max_batches> must be specified with triggers");
      }

      // Get the batch interval to check triggers
      if (!check_for_node(node_trigger, "batch_interval")){
        trigger_predict = true;
      } else {
        trigger_batch_interval = std::stoi(get_node_value(node_trigger, "batch_interval"));
        if (trigger_batch_interval <= 0) {
          fatal_error("Trigger batch interval must be greater than zero");
        }
      }
    }
  }

  // Check run mode if it hasn't been set from the command line
  xml_node node_mode;
  if (run_mode == RunMode::UNSET) {
    if (check_for_node(root, "run_mode")) {
      std::string temp_str = get_node_value(root, "run_mode", true, true);
      if (temp_str == "eigenvalue") {
        run_mode = RunMode::EIGENVALUE;
      } else if (temp_str == "fixed source") {
        run_mode = RunMode::FIXED_SOURCE;
      } else if (temp_str == "plot") {
        run_mode = RunMode::PLOTTING;
      } else if (temp_str == "particle restart") {
        run_mode = RunMode::PARTICLE;
      } else if (temp_str == "volume") {
        run_mode = RunMode::VOLUME;
      } else {
        fatal_error("Unrecognized run mode: " + temp_str);
      }

      // Assume XML specifies <particles>, <batches>, etc. directly
      node_mode = root;
    } else {
      warning("<run_mode> should be specified.");

      // Make sure that either eigenvalue or fixed source was specified
      node_mode = root.child("eigenvalue");
      if (node_mode) {
        run_mode = RunMode::EIGENVALUE;
      } else {
        node_mode = root.child("fixed_source");
        if (node_mode) {
          run_mode = RunMode::FIXED_SOURCE;
        } else {
          fatal_error("<eigenvalue> or <fixed_source> not specified.");
        }
      }
    }
  }

  if (run_mode == RunMode::EIGENVALUE || run_mode == RunMode::FIXED_SOURCE) {
    // Read run parameters
    get_run_parameters(node_mode);

    // Check number of active batches, inactive batches, max lost particles and particles
    if (n_batches <= n_inactive) {
      fatal_error("Number of active batches must be greater than zero.");
    } else if (n_inactive < 0) {
      fatal_error("Number of inactive batches must be non-negative.");
    } else if (n_particles <= 0) {
      fatal_error("Number of particles must be greater than zero.");
    } else if (max_lost_particles <= 0) {
      fatal_error("Number of max lost particles must be greater than zero.");
    } else if (rel_max_lost_particles <= 0.0 || rel_max_lost_particles >= 1.0) {
      fatal_error("Relative max lost particles must be between zero and one.");
    }
  }

  // Copy random number seed if specified
  if (check_for_node(root, "seed")) {
    auto seed = std::stoll(get_node_value(root, "seed"));
    openmc_set_seed(seed);
  }

  // Check for electron treatment
  if (check_for_node(root, "electron_treatment")) {
    auto temp_str = get_node_value(root, "electron_treatment", true, true);
    if (temp_str == "led") {
      electron_treatment = ElectronTreatment::LED;
    } else if (temp_str == "ttb") {
      electron_treatment = ElectronTreatment::TTB;
    } else {
      fatal_error("Unrecognized electron treatment: " + temp_str + ".");
    }
  }

  // Check for photon transport
  if (check_for_node(root, "photon_transport")) {
    photon_transport = get_node_value_bool(root, "photon_transport");

    if (!run_CE && photon_transport) {
      fatal_error("Photon transport is not currently supported in "
        "multigroup mode");
    }
  }

  // Number of bins for logarithmic grid
  if (check_for_node(root, "log_grid_bins")) {
    n_log_bins = std::stoi(get_node_value(root, "log_grid_bins"));
    if (n_log_bins < 1) {
      fatal_error("Number of bins for logarithmic grid must be greater "
        "than zero.");
    }
  }

  // Number of OpenMP threads
  if (check_for_node(root, "threads")) {
    if (mpi::master) warning("The <threads> element has been deprecated. Use "
      "the OMP_NUM_THREADS environment variable to set the number of threads.");
  }

  // ==========================================================================
  // EXTERNAL SOURCE

  // Get point to list of <source> elements and make sure there is at least one
  for (pugi::xml_node node : root.children("source")) {
    if (check_for_node(node, "file")) {
      auto path = get_node_value(node, "file", false, true);
      model::external_sources.push_back(std::make_unique<FileSource>(path));
    } else if (check_for_node(node, "library")) {
      // Get shared library path and parameters
      auto path = get_node_value(node, "library", false, true);
      std::string parameters;
      if (check_for_node(node, "parameters")) {
        parameters = get_node_value(node, "parameters", false, true);
      }

      // Create custom source
      model::external_sources.push_back(std::make_unique<CustomSourceWrapper>(path, parameters));
    } else {
      model::external_sources.push_back(std::make_unique<IndependentSource>(node));
    }
  }

  // Check if the user has specified to read surface source
  if (check_for_node(root, "surf_source_read")) {
    surf_source_read = true;
    // Get surface source read node
    xml_node node_ssr = root.child("surf_source_read");

    std::string path = "surface_source.h5";
    // Check if the user has specified different file for surface source reading
    if (check_for_node(node_ssr, "path")) {
      path = get_node_value(node_ssr, "path", false, true);
    }
    model::external_sources.push_back(std::make_unique<FileSource>(path));
  }

  // If no source specified, default to isotropic point source at origin with Watt spectrum
  if (model::external_sources.empty()) {
    model::external_sources.push_back(std::make_unique<IndependentSource>(
      UPtrSpace{new SpatialPoint({0.0, 0.0, 0.0})},
      UPtrAngle{new Isotropic()},
      UPtrDist{new Watt(0.988e6, 2.249e-6)}
    ));
  }

  // Check if we want to write out source
  if (check_for_node(root, "write_initial_source")) {
    write_initial_source = get_node_value_bool(root, "write_initial_source");
  }

  // Survival biasing
  if (check_for_node(root, "survival_biasing")) {
    survival_biasing = get_node_value_bool(root, "survival_biasing");
  }

  // Probability tables
  if (check_for_node(root, "ptables")) {
    urr_ptables_on = get_node_value_bool(root, "ptables");
  }

  // Cutoffs
  if (check_for_node(root, "cutoff")) {
    xml_node node_cutoff = root.child("cutoff");
    if (check_for_node(node_cutoff, "weight")) {
      weight_cutoff = std::stod(get_node_value(node_cutoff, "weight"));
    }
    if (check_for_node(node_cutoff, "weight_avg")) {
      weight_survive = std::stod(get_node_value(node_cutoff, "weight_avg"));
    }
    if (check_for_node(node_cutoff, "energy_neutron")) {
      energy_cutoff[0] = std::stod(get_node_value(node_cutoff, "energy_neutron"));
    } else if (check_for_node(node_cutoff, "energy")) {
      warning("The use of an <energy> cutoff is deprecated and should "
        "be replaced by <energy_neutron>.");
      energy_cutoff[0] = std::stod(get_node_value(node_cutoff, "energy"));
    }
    if (check_for_node(node_cutoff, "energy_photon")) {
      energy_cutoff[1] = std::stod(get_node_value(node_cutoff, "energy_photon"));
    }
    if (check_for_node(node_cutoff, "energy_electron")) {
      energy_cutoff[2] = std::stof(get_node_value(node_cutoff, "energy_electron"));
    }
    if (check_for_node(node_cutoff, "energy_positron")) {
      energy_cutoff[3] = std::stod(get_node_value(node_cutoff, "energy_positron"));
    }
  }

  // Particle trace
  if (check_for_node(root, "trace")) {
    auto temp = get_node_array<int64_t>(root, "trace");
    if (temp.size() != 3) {
      fatal_error("Must provide 3 integers for <trace> that specify the "
        "batch, generation, and particle number.");
    }
    trace_batch    = temp.at(0);
    trace_gen      = temp.at(1);
    trace_particle = temp.at(2);
  }

  // Particle tracks
  if (check_for_node(root, "track")) {
    // Get values and make sure there are three per particle
    auto temp = get_node_array<int>(root, "track");
    if (temp.size() % 3 != 0) {
      fatal_error("Number of integers specified in 'track' is not "
        "divisible by 3.  Please provide 3 integers per particle to be "
        "tracked.");
    }

    // Reshape into track_identifiers
    int n_tracks = temp.size() / 3;
    for (int i = 0; i < n_tracks; ++i) {
      track_identifiers.push_back({temp[3*i], temp[3*i + 1],
        temp[3*i + 2]});
    }
  }

  // Read meshes
  read_meshes(root);

  // Shannon Entropy mesh
  if (check_for_node(root, "entropy_mesh")) {
    int temp = std::stoi(get_node_value(root, "entropy_mesh"));
    if (model::mesh_map.find(temp) == model::mesh_map.end()) {
      fatal_error(fmt::format(
        "Mesh {} specified for Shannon entropy does not exist.", temp));
    }

    auto* m = dynamic_cast<RegularMesh*>(
      model::meshes[model::mesh_map.at(temp)].get());
    if (!m) fatal_error("Only regular meshes can be used as an entropy mesh");
    simulation::entropy_mesh = m;

    // Turn on Shannon entropy calculation
    entropy_on = true;

  } else if (check_for_node(root, "entropy")) {
    fatal_error("Specifying a Shannon entropy mesh via the <entropy> element "
      "is deprecated. Please create a mesh using <mesh> and then reference "
      "it by specifying its ID in an <entropy_mesh> element.");
  }

  // Uniform fission source weighting mesh
  if (check_for_node(root, "ufs_mesh")) {
    auto temp = std::stoi(get_node_value(root, "ufs_mesh"));
    if (model::mesh_map.find(temp) == model::mesh_map.end()) {
      fatal_error(fmt::format("Mesh {} specified for uniform fission site "
        "method does not exist.", temp));
    }

    auto* m = dynamic_cast<RegularMesh*>(model::meshes[model::mesh_map.at(temp)].get());
    if (!m) fatal_error("Only regular meshes can be used as a UFS mesh");
    simulation::ufs_mesh = m;

    // Turn on uniform fission source weighting
    ufs_on = true;

  } else if (check_for_node(root, "uniform_fs")) {
    fatal_error("Specifying a UFS mesh via the <uniform_fs> element "
      "is deprecated. Please create a mesh using <mesh> and then reference "
      "it by specifying its ID in a <ufs_mesh> element.");
  }

  // Check if the user has specified to write state points
  if (check_for_node(root, "state_point")) {

    // Get pointer to state_point node
    auto node_sp = root.child("state_point");

    // Determine number of batches at which to store state points
    if (check_for_node(node_sp, "batches")) {
      // User gave specific batches to write state points
      auto temp = get_node_array<int>(node_sp, "batches");
      for (const auto& b : temp) {
        statepoint_batch.insert(b);
      }
    } else {
      // If neither were specified, write state point at last batch
      statepoint_batch.insert(n_batches);
    }
  } else {
    // If no <state_point> tag was present, by default write state point at
    // last batch only
    statepoint_batch.insert(n_batches);
  }

  // Check if the user has specified to write source points
  if (check_for_node(root, "source_point")) {
    // Get source_point node
    xml_node node_sp = root.child("source_point");

    // Determine batches at which to store source points
    if (check_for_node(node_sp, "batches")) {
      // User gave specific batches to write source points
      auto temp = get_node_array<int>(node_sp, "batches");
      for (const auto& b : temp) {
        sourcepoint_batch.insert(b);
      }
    } else {
      // If neither were specified, write source points with state points
      sourcepoint_batch = statepoint_batch;
    }

    // Check if the user has specified to write binary source file
    if (check_for_node(node_sp, "separate")) {
      source_separate = get_node_value_bool(node_sp, "separate");
    }
    if (check_for_node(node_sp, "write")) {
      source_write = get_node_value_bool(node_sp, "write");
    }
    if (check_for_node(node_sp, "overwrite_latest")) {
      source_latest = get_node_value_bool(node_sp, "overwrite_latest");
      source_separate = source_latest;
    }
  } else {
    // If no <source_point> tag was present, by default we keep source bank in
    // statepoint file and write it out at statepoints intervals
    source_separate = false;
    sourcepoint_batch = statepoint_batch;
  }

  // Check if the user has specified to write surface source
  if (check_for_node(root, "surf_source_write")) {
    surf_source_write = true;
    // Get surface source write node
    xml_node node_ssw = root.child("surf_source_write");

    // Determine surface ids at which crossing particles are to be banked
    if (check_for_node(node_ssw, "surface_ids")) {
      auto temp = get_node_array<int>(node_ssw, "surface_ids");
      for (const auto& b : temp) {
        source_write_surf_id.insert(b);
      }
    }

    // Get maximum number of particles to be banked per surface
    if (check_for_node(node_ssw, "max_particles")) {
      max_surface_particles = std::stoll(get_node_value(node_ssw, "max_particles"));
    }
  }

  // If source is not seperate and is to be written out in the statepoint file,
  // make sure that the sourcepoint batch numbers are contained in the
  // statepoint list
  if (!source_separate) {
    for (const auto& b : sourcepoint_batch) {
      if (!contains(statepoint_batch, b)) {
        fatal_error("Sourcepoint batches are not a subset of statepoint batches.");
      }
    }
  }

  // Check if the user has specified to not reduce tallies at the end of every
  // batch
  if (check_for_node(root, "no_reduce")) {
    reduce_tallies = !get_node_value_bool(root, "no_reduce");
  }

  // Check if the user has specified to use confidence intervals for
  // uncertainties rather than standard deviations
  if (check_for_node(root, "confidence_intervals")) {
    confidence_intervals = get_node_value_bool(root, "confidence_intervals");
  }

  // Check for output options
  if (check_for_node(root, "output")) {
    // Get pointer to output node
    pugi::xml_node node_output = root.child("output");

    // Check for summary option
    if (check_for_node(node_output, "summary")) {
      output_summary = get_node_value_bool(node_output, "summary");
    }

    // Check for ASCII tallies output option
    if (check_for_node(node_output, "tallies")) {
      output_tallies = get_node_value_bool(node_output, "tallies");
    }

    // Set output directory if a path has been specified
    if (check_for_node(node_output, "path")) {
      path_output = get_node_value(node_output, "path");
      if (!ends_with(path_output, "/")) {
        path_output += "/";
      }
    }
  }

  // Resonance scattering parameters
  if (check_for_node(root, "resonance_scattering")) {
    xml_node node_res_scat = root.child("resonance_scattering");

    // See if resonance scattering is enabled
    if (check_for_node(node_res_scat, "enable")) {
      res_scat_on = get_node_value_bool(node_res_scat, "enable");
    } else {
      res_scat_on = true;
    }

    // Determine what method is used
    if (check_for_node(node_res_scat, "method")) {
      auto temp = get_node_value(node_res_scat, "method", true, true);
      if (temp == "rvs") {
        res_scat_method = ResScatMethod::rvs;
      } else if (temp == "dbrc") {
        res_scat_method = ResScatMethod::dbrc;
      } else {
        fatal_error("Unrecognized resonance elastic scattering method: "
          + temp + ".");
      }
    }

    // Minimum energy for resonance scattering
    if (check_for_node(node_res_scat, "energy_min")) {
      res_scat_energy_min = std::stod(get_node_value(node_res_scat, "energy_min"));
    }
    if (res_scat_energy_min < 0.0) {
      fatal_error("Lower resonance scattering energy bound is negative");
    }

    // Maximum energy for resonance scattering
    if (check_for_node(node_res_scat, "energy_max")) {
      res_scat_energy_max = std::stod(get_node_value(node_res_scat, "energy_max"));
    }
    if (res_scat_energy_max < res_scat_energy_min) {
      fatal_error("Upper resonance scattering energy bound is below the "
        "lower resonance scattering energy bound.");
    }

    // Get resonance scattering nuclides
    if (check_for_node(node_res_scat, "nuclides")) {
      res_scat_nuclides = get_node_array<std::string>(node_res_scat, "nuclides");
    }
  }

  // Get volume calculations
  for (pugi::xml_node node_vol : root.children("volume_calc")) {
    model::volume_calcs.emplace_back(node_vol);
  }

  // Get temperature settings
  if (check_for_node(root, "temperature_default")) {
    temperature_default = std::stod(get_node_value(root, "temperature_default"));
  }
  if (check_for_node(root, "temperature_method")) {
    auto temp = get_node_value(root, "temperature_method", true, true);
    if (temp == "nearest") {
      temperature_method = TemperatureMethod::NEAREST;
    } else if (temp == "interpolation") {
      temperature_method = TemperatureMethod::INTERPOLATION;
    } else {
      fatal_error("Unknown temperature method: " + temp);
    }
  }
  if (check_for_node(root, "temperature_tolerance")) {
    temperature_tolerance = std::stod(get_node_value(root, "temperature_tolerance"));
  }
  if (check_for_node(root, "temperature_multipole")) {
    temperature_multipole = get_node_value_bool(root, "temperature_multipole");
  }
  if (check_for_node(root, "temperature_range")) {
    auto range = get_node_array<double>(root, "temperature_range");
    temperature_range[0] = range.at(0);
    temperature_range[1] = range.at(1);
  }

  // Check for tabular_legendre options
  if (check_for_node(root, "tabular_legendre")) {
    // Get pointer to tabular_legendre node
    xml_node node_tab_leg = root.child("tabular_legendre");

    // Check for enable option
    if (check_for_node(node_tab_leg, "enable")) {
      legendre_to_tabular = get_node_value_bool(node_tab_leg, "enable");
    }

    // Check for the number of points
    if (check_for_node(node_tab_leg, "num_points")) {
      legendre_to_tabular_points = std::stoi(get_node_value(
        node_tab_leg, "num_points"));
      if (legendre_to_tabular_points <= 1 && !run_CE) {
        fatal_error("The 'num_points' subelement/attribute of the "
          "<tabular_legendre> element must contain a value greater than 1");
      }
    }
  }

  // Check whether create fission sites
  if (run_mode == RunMode::FIXED_SOURCE) {
    if (check_for_node(root, "create_fission_neutrons")) {
      create_fission_neutrons = get_node_value_bool(root, "create_fission_neutrons");
    }
  }

  // Check whether to scale fission photon yields
  if (check_for_node(root, "delayed_photon_scaling")) {
    delayed_photon_scaling = get_node_value_bool(root, "delayed_photon_scaling");
  }

  // Check whether to use event-based parallelism
  if (check_for_node(root, "event_based")) {
    event_based = get_node_value_bool(root, "event_based");
  }

  // Check whether material cell offsets should be generated
  if (check_for_node(root, "material_cell_offsets")) {
    material_cell_offsets = get_node_value_bool(root, "material_cell_offsets");
  }
}

void free_memory_settings() {
  settings::statepoint_batch.clear();
  settings::sourcepoint_batch.clear();
  settings::source_write_surf_id.clear();
  settings::res_scat_nuclides.clear();
}

//==============================================================================
// C API functions
//==============================================================================

extern "C" int
openmc_set_n_batches(int32_t n_batches, bool set_max_batches,
                     bool add_statepoint_batch)
{
  if (settings::n_inactive >= n_batches) {
    set_errmsg("Number of active batches must be greater than zero.");
    return OPENMC_E_INVALID_ARGUMENT;
  }

  if (simulation::current_batch >= n_batches) {
    set_errmsg("Number of batches must be greater than current batch.");
    return OPENMC_E_INVALID_ARGUMENT;
  }

  if (!settings::trigger_on) {
    // Set n_batches and n_max_batches to same value
    settings::n_batches = n_batches;
    settings::n_max_batches = n_batches;
  } else {
    // Set n_batches and n_max_batches based on value of set_max_batches
    if (set_max_batches) {
      settings::n_max_batches = n_batches;
    } else {
      settings::n_batches = n_batches;
    }
  }

  // Update size of k_generation and entropy
  int m = settings::n_max_batches * settings::gen_per_batch;
  simulation::k_generation.reserve(m);
  simulation::entropy.reserve(m);

  // Add value of n_batches to statepoint_batch
  if (add_statepoint_batch &&
      !(contains(settings::statepoint_batch, n_batches)))
    settings::statepoint_batch.insert(n_batches);

  return 0;
}

extern "C" int
openmc_get_n_batches(int* n_batches, bool get_max_batches)
{
  *n_batches = get_max_batches ? settings::n_max_batches : settings::n_batches;

  return 0;
}

} // namespace openmc

redpajama_set_name: RedPajamaGithub


USDA Farm Service Agency offices temporarily reopened Thursday and Friday. Due to the Martin Luther King Holiday, offices are closed today, but open Tuesday. Services will be limited, with most of the focus on existing farm loans to ensure farmers and ranchers can access 1099 tax documents. Staff members will be able to process payments and continue expiring financial statements. Information on locations that will be open during the three-day window is posted on the USDA website. As a reminder, the original deadline to apply for Market Facilitation Program payments was extended and and new applications can be processed once the government shutdown ends.


text:
Estrela Clube Primeiro de Maio of kortweg Primeiro de Maio is een Angolese voetbalclub uit Benguela.

Erelijst
Landskampioen
 1994
Beker van Angola
 Winnaar: 1982, 1983
 Finalist: 1986, 1996
 '''CAF Cup
 Finalist: 1994

P

redpajama_set_name: RedPajamaWikipedia


text:
NASCAR Cup / News
Kurt Busch dominates for Atlanta victory
Kurt Busch was anxious to prove that he wasn't the only member of his family that would challenge for the NASCAR Sprint Cup Series championship this year. Race winner Kurt Busch, Penske Racing Dodge celebrates. Photo by Action Sports ...
Kurt Busch was anxious to prove that he wasn't the only member of his family that would challenge for the NASCAR Sprint Cup Series championship this year.
Race winner Kurt Busch, Penske Racing Dodge celebrates.
Photo by Action Sports Photography.
The older brother won the series championship in 2004 but took a back seat to younger brother Kyle Busch in the standings last year. Kyle won in Las Vegas a week ago and on Sunday, Kurt responded with a dominant performance in the Kobalt Tools 500 at Atlanta Motor Speedway that backed up his claims that his Penske Racing team are championship contenders.
Busch started on the outside of the front row and had the dominant car throughout the day but needed a thrilling next-to-last lap pass on Carl Edwards to earn the checkered flag finish.
"This was an incredible race," said Busch, who also won here in 2002. "I have to thank my guys - this car was unbelievable. Great calls by (Crew Chief) Pat Tryson - and great power. Penske power is back."
Busch led 235 of 330 laps but brushed the wall on lap 185 and then hit the wall again just before the caution came out on lap 215. Jeff Gordon took the lead when he won the race off of pit road but Busch stormed back to take the lead back on lap 251. He was cruising to the finish when Robbie Gordon brought out the caution with three laps to go to set up a green-white-checkered finish. Edwards took the lead on pit road when he took just two tires but Busch powered around Edwards on the backstretch and then held off a late charge by Gordon to land the win.
"When you beat those two guys here Atlanta - especially on a day that reminded you of Darlington where this place would just chew you up and spit you out," smiled the winner who scored his third top-10 of the season, "but we had it handled."
Kurt Busch, Penske Racing Dodge and Jeff Gordon, Hendrick Motorsports Chevrolet.
Busch said that his team struggled with the new car style over the past two years and that they are finally catching up to the field. "Good things come to those who wait," he said. "We waited over a year and a half for this COT to have a good package. We've had that to start 2009."
Jeff Gordon also got around Edwards and looked like he would press the issue on the final lap but Busch pulled away to claim his second career win at AMS.
Gordon grabbed his second runner-up finish of the young season. "It's just this race team stepping it up," he said, "We gave him a great run."
Gordon pushed his lead to 43 points over Clint Bowyer while Kurt Busch jumped up four spots to third and trails Gordon by 46 points.
"We're going to win races," Gordon said. "These guys are just flawless - they aren't skipping a beat. We'll keep knocking on the door until we get into victory lane."
Edwards started 29th but made his way to the front of the field early in the race. He knew that taking two tires was a risky strategy but took the chance to take the restart at the front of the field.
"That's was the hand we were dealt," Edwards said. "All I could think of was when Jimmie Johnson won when they threw the green flag and then the yellow flag right away. I thought I'd rather be in the lead in that situation. I wish we could have had four tires there but Kurt ran a good race and was the fastest car all day."
Pit stop for Carl Edwards, Roush Fenway Racing Ford.
Kevin Harvick finished fourth and Brian Vickers didn't lead a lap but spent the second half of the race closing in on the lead and creeped up to Busch in the closing laps to stir up an interesting finish. He got shuffled back in the pack on pit road but brought home a fifth place finish.
Vickers said he wanted to see how the race would have turned out without the final caution. "I think we definitely had a car for it," he claimed. "Kurt was definitely better in parts of the run and we were better in others. We obviously ran him down but we were both running the same line so it was going to get interesting. It was fun racing him there at the end. We had to fight through some troubles."
Reed Sorenson brought out the caution on the first lap and then a strange caution trapped a bunch of cars a lap down early in the race. With cars cycling through green flag stops, a crew member from Marcos Ambrose's team chased a rolling tire into the infield grass. NASCAR threw the caution because he went to an unapproved area. When the field went green, just six cars were scored on the lead lap. Eight other cars started ahead of those cars on the restart so were officially still on the lead lap.
Mark Martin, who started on the pole for the first time in eight years, paced the first five laps and was running with the leaders until he blew a right rear tire and hit the outside wall hard on lap 214.
Atlanta: Race results
Atlanta: Matt Kenseth race report
Series NASCAR Cup
Drivers Reed Sorenson , Clint Bowyer , Kevin Harvick , Carl Edwards , Kurt Busch , Jimmie Johnson , Jeff Gordon , Kyle Busch , Brian Vickers , Mark Martin
Teams Team Penske , Hendrick Motorsports , Roush Fenway Racing
British GP Prime
Formula 1 / Commentary
Isle of Man TT 2019 Promo
Martin Truex Jr. at Dover and Montoya at Mid-Ohio
Hamlin's Texas victory and Penske honored by IMS
Kurt Busch: "Now that we're winners, let's grab another gear"
Kyle Larson "happy" with assisting in Kurt Busch's Kentucky win

redpajama_set_name: RedPajamaCommonCrawl


New business are going into the travel awards market, addressing the needs of younger travelers, while typical commitment programs are additionally increasing their offerings.
It really means the globe to me:-RRB- For those that do not understand me, during the previous 5 years, I traveled to over 60 nations, financing my adventures via many area independent streams of income. The goals of this program are to present you to the globe of blog sites in order to prepare you for your experience. There is nothing in the world that quits you from beginning your own journey today.
Going house for the vacations can be difficult as well as expensive, yet with the right timing as well as these maneuvers, it does not always have to be.
Mata falls at any given time of the year. Thinking about that it is a falls, the best time to visit is throughout the downpour season.
The Palo Duro Canyon State Park, just thirty miles South of Amarillo is the 2nd biggest canyon in the nation. Driving the canyon road allows for one to see up close the vivid as well as tough appeal of the canyon walls. To actually experience what the canyon has to use, one requires to invest a week in the canyon.
This program is made for gettingyou ready for a go to in Budapest. I'm always thrilled to stroll in the city as well as I would certainly like to offer my help to you so you can find Budapest, also!
As a homeowner of Budapest I've been astonished everyday. It is really a attractive city, check it out!
I'm mosting likely to tell you everythingthat you require to recognize usuallyif you intend to check out Budapest or Hungary. I cover the crucial subjects like airport terminal transfer, loan, weatherand so forth.
I'm not mosting likely to inform you which resort to book or where you ought to consume. As opposed to that I offer you guidelines to make the appropriate option!
.?.!! If you would like to know more about the views and tasks to do in Budapest, you can not find those info here. If you are trying to find that type of details, you should rather look into my various other course concerning Budapest!
This is an unique collection of all information so take this possibility as well as authorize up!
.?.!! If you still wait, enjoy several of the preview talks and after that sign up with even more than 1200 students in this training course!
This is a terrific program for anybody, whether your just beginning out or already having a blog or web site and some followers on social media as well as prepare to take things to the following level. It is especially handy to digital nomads seeking to expand their on the internet entrepreneurship business.
Instructed by Krystal Kelly, CEO of Krys Kolumbus Travel. Krystal has actually used her social networks and internet site influence to acquire product enrollers, press trips, spent for equestrian trips, flights covered and also much more! Even before she began her internet site she was making money to travel with equines! Her knowledge, resources and also hacks with initial hand experiences and stories add a special touch to the course. It feels even more like your knowing from a buddy than from the net!


Thanks it's really a useful tutorial. May I ask, how can i config wireless network in red hat 6?
Thanks for this great post, but may I have two questions, not related directly to your article, but I think you can help me.
2. Is there any way to know the current speed of my internet connection.
Most welcome to ask any queries, we love to help you out, regarding your first question.
Thanks for this, any chance you could write something to show how to set up home network, for noobs, when you are trying to access shares from a win 7 machine from a Linux machine?
That was so practical and useful, thank you.
in my centos 6.5, I am using two interfaces. eth0 for public ip and eth1 private ip. I have made default gateway to public ip. But for other purpose, I need private ip for connetion to other system.
when I save this , then the system indicates that eth1 is disconnected. Any suggestion?
To keep this route at system boot you should add this entry to /etc/rc.local file, this file executes when system boots so whatever you add this will auto start at system reboot..
Very good article. Could you please suggest me on the following ?
I have a requirement where I have a Ubuntu system and many devices wants to talk to this and this system wants to talk to them. Some are having different subnet though they are connected to same layer-2 switch. I am in dilemma, whether to use ip aliasing or vlan. Any suggestion please.
Better I suggest you to assign same network range to all machines or either do a routing..
Compact size tutorial – good work! I used it once already. Thanks.


text:
Why Partpic's CEO works at least 100 hours a week
February 21, 2016 by ei2admin
Jewel Burks, Partpic co-founder and CEO.
As any entrepreneur will attest, starting a company means having to be committed to working hard and putting in a lot of hours.
Jewel Burks, co-founder and CEO of Partpic, a startup company incubating at Georgia Tech's Advanced Technology Development Center, explains why she works more than 100 hours week between her startup and as as an Entrepreneur in Residence for diversity markets at Google.
"I work a lot," Burks said in an interview with Business Insider. "Nights, weekends. It's tough, but I'm really passionate about helping other entrepreneurs, so it doesn't really feel like work. It's something I love doing."
Advanced Manufacturing, Blog, News from Our Companies entrepreneur, Jewel Burks, partpic


text:
Recreation Programs at Palmer Park
Indoor Yoga
Saturdays, 9am
Starts Feb 4, 2023
Indoor yoga classes are back at the Palmer Park Community House for all skill levels on Saturday mornings.
Location: Community House on Merrill Plaisance between McNichols and 7 Mile Road on west side of the Park.
Regular Program Returns...
Learn to play tennis!
Excellent and affordable instruction for young people in multiple skill levels.
Location: Palmer Park Tennis Courts
READ MORE and REGISTER...
Basketball Youth Conditioning/Adult Classes
HomeCourt is a Non-Profit Organization that provides no-cost to parents programming, coaching and mentorship to local youth leveraging the game of Basketball in public spaces.
Location: Palmer Park Basketball Court
Wednesdays, 7pm
TBA
T'ai Chi is an internal Chinese martial art practiced for both its defense training and its health benefits. Medical research has found evidence that t'ai chi is helpful for improving balance and for general psychological health.
Peter Guenther teaches outdoor classes. All levels welcome to join us.
Location: Northwest corner of Palmer Park at Ponchartrain and 7 Mile, just west of the Police Station
10am-8pm all summer
Opens Memorial Day Weekend
The Palmer Park Splash Park is motion-censored and will be programmed to turn on automatically and shut off throughout the summer months.
Location: Merrill Plaisance between McNichols and 7 Mile Road on west side of the Park.
M/TH, 6pm
TBA
Join us and explore the beautiful trails of Palmer Park, connect with new friends and thrive in healthy fun. All are welcome. Feel free to join for an experience that is sure to leave a lasting impression.
Location: Meet up in front of Community Garden.
Thursdays, 7pm
Enjoy riding (weather permitting) with a fun group of cyclists around the periphery of the park, through the neighborhoods of Palmer Park Apartment District, the Golf Club neighborhood, Ferndale, New Center, Boston Edison, and more.
Henry Ford II leads cyclists on a spirited "fitness pace" of 10-15mph and tries to keep it to just one hour each week.
Location: Meet up in front of Splash Park/Community House.


text:
Circuit Breaker/
Kano tries to make learning code magical with its new Harry Potter Coding kit
Wingardium leviosa
By Chaim Gartenberg / @cgartenberg
Jul 24, 2018, 9:00 AM UTC |
Kano's DIY computer kits have been some of the more interesting learn-to-code projects out there, with brightly colored, well-designed hardware backed up by a surprisingly solid software backbone. But this October, the company is taking a jump from teaching coding projects to something a little more fantastical: teaching magic, or the next closest thing, anyway, with the new Harry Potter Kano Coding Kit. The kit combines a motion tracking wand with Kano's software and the trappings of the Harry Potter world to make learning to code a little more magical.
If you're familiar with Kano's previous kits, the Harry Potter Coding Kit should be familiar. In line with Kano's other products, you'll snap together the pieces of the wand yourself, connect over Bluetooth to a computer, iOS, or Android device, and dive into a variety of Hogwarts-themed coding challenges that take advantage of the bevy of sensors built into the wand.
And Kano has packed in a lot of tech here: the wand itself features a gyroscope, accelerometer, and magnetometer that together allow for full tracking of the wand in 3D space, along with the angle, speed, and direction that you're moving it in for casting your "spells."
As for the software itself, it's very similar to Kano's existing coding environments. There's the same jigsaw-puzzle blocks that users will get to use to start learning coding logic and functions like loops and conditional statements, but there's always the option to toggle over to the underlying JavaScript for more advanced users, too.
Create spells with code
Out of the box, there's a variety of Harry Potter-themed coding challenges set around a charming cartoon map of J.K. Rowling's world, usually tasking the user to try to recreate some of the famous spells from the books and movies using Kano's motion controlled code. For example, by pulling together blocks that track the movement and rotation of the wand and linking them to a cartoon owl, I was able to recreate the wingardium leviosa spell for lifting the owl in the air using the actual movements of the wand. More challenges are planned to be added over time, too.
But much like Kano's other products, the preset projects are just the beginning — users will be able to take the tools and lessons they learn along the way to create their own spells and projects, which they'll be able to share online with other Kano users.
The Harry Potter Kano Coding Kit is available for preorder today for $99.99 ahead of an expected October 1st release date.
Correction: Removed incorrect information regarding the new challenges planned for the kit.


text:
0 Favourites Log In Sign Up
Price Range No Min2503003504004505005506006507007508009001,0001,2501,5001,7502,0002,5003,0003,5004,0004,5005,0005,5006,0006,5007,000 to 3003504004505005506006507007508009001,0001,2501,5001,7502,0002,5003,0003,5004,0004,5005,0005,5006,0006,5007,0007,500No Max
2503003504004505005506006507007508009001,0001,2501,5001,7502,0002,5003,0003,5004,0004,5005,0005,5006,0006,5007,0007,500 253035404550556065707580901001201501702002503003504004505006007501,0001,2001,500
Advanced Don't Filter Student Friendly
In my experience, it is rare these days to have staff performing at the level that the team at Palmer Snell do.
Mr Levy, West Sussex
Call 01908 849 898 or
An error occured. There may be a problem connecting to our website. Please wait a few minutes and try again.
Price - High to Low Price - Low to High Newest First Oldest First
3 properties in TA4
Sorry we didn't find any results in ta4
If 'no results' continues to show, we may not have any properties to rent in your desired location.
£1,700 per Calendar Month Tenancy info, click here for details
Taunton, TA4
Extremely spacious 5 Bedroom Farm house, south facing with stunning views over the countryside and substantial gardens. This is absolutely the perfect house if you enjoy walking, cycling and being out in the countryside as it straddles the boundary of the Exmoor...
£750 per Calendar Month
£750 per Calendar Month Tenancy info, click here for details
Nearby Lettings Agents
Taunton 43, High Street, Taunton, Somerset, TA1
About Palmer Snell
Palmer Snell is a trading name of Countrywide Estate Agents. Registered Office: Greenwood House, 1st Floor, 91-99 New London Road, Chelmsford, Essex, CM2 0PP. Registered in England Number 00789476. Palmer Snell is a trading name of Countrywide Residential Lettings Limited, Registered Office: Greenwood House, 1st Floor, 91-99 New London Road, Chelmsford, Essex, CM2 0PP. Registered in England Number 02995024 which is an agent and subsidiary of Countrywide Estate Agents, Registered Office: Greenwood House, 1st Floor, 91-99 New London Road, Chelmsford, Essex, CM2 0PP. Registered in England Number 00789476. Countrywide Residential Lettings Limited is regulated by RICS. Countrywide Estate Agents is an appointed representative of Countrywide Principal Services Limited which is authorised and regulated by the Financial Conduct Authority.


text:
Bedeo buys in-wheel motor specialist Protean from NEVS
BedeoBEVEvergrandeMotorsNEVSProtean ElectricUKUSA
In-wheel motor specialist Protean Electric is getting a new owner. The British EV supplier and manufacturer Bedeo is taking over from National Electric Vehicle Sweden (NEVS), an Evergrande subsidiary that is currently feeling the parent company's troubles.
Protean Electric was founded in 2008 and claims to hold several hundred patents relating to electric motors. The British company's most prominent product is based on the company's in-wheel motor (IWM) technology for electric cars, light commercial vehicles and other transport solutions. In 2019, Saab's successor company NEVS (National Electric Vehicle Sweden) reportedly acquired Protean to use its electric drive technology in future electric cars. Protean Electric then continued to operate as an independent company but belonged to the Chinese real estate group Evergrande through NEVS.
NEVS, as an Evergrande subsidiary, has been directly affected by the current financial and related existential worries of the highly indebted Chinese real estate group. As a result, the company recently had to lay off 300 employees. NEVS is reportedly looking for a new owner.
The sale of Protean Electric is also likely to serve the consolidation. The company employs around 150 people in the US, the UK and China. It will now be owned by Bedeo, a London-based supplier founded in 2009 specialising in solutions for e-vehicles. The financial terms of the deal are not public. However, an accompanying statement said that Protean Electric will continue to operate under its brand and will be led by its existing management team.
The combination of BEDEO and Protean Electric brings together two highly synergistic providers of electric vehicle technology, reads the statement. In addition, Bedeo would evolve into a "diversified" platform through the acquisition and expand its geographic reach from the United Kingdom and Europe to the United States and Asia.
"We have known and partnered with Protean Electric for many years, and the opportunity to acquire this business represents a material but natural shift and acceleration in our electrification strategy," said Bedeo's Founder and CEO, Osman Boyner. "Protean Electric's highly differentiated proprietary technology and strong customer relationships have fuelled its well-documented success to date, and we are confident that combining the skills and products of our two operations is going to propel Bedeo further into the EV ecosystem."
Protean is the first acquisition under Bedeo's growth strategy initiated after the successful capital raise from investor Ludgate earlier this year. "The company retains a strong balance sheet and continue to explore attractive strategic and synergic acquisition opportunities in the electrification space," so the CEO.
Protean Electric's CEO, Andrew Whitehead, also welcomed the acquisition, saying they were "immensely excited to join forces with Bedeo." The combination, so Whitehead would take the company to the next level in terms of scale and product offering.
Protean's main client remains the 3D-specialist Local Motors. The US company had placed an order for in-wheel motors worth $7.3 million (€6.1Mn) in June for use in the Olli 2.0 electric vehicle. The supply agreement should help accelerate the introduction of the Olli 2.0 "around the world," the company said at the time.
proteanelectric.com, bedeo.tech
Author: Nora Manthey
Vitesco expands R&D capacities in China
Geely presents product strategy up to 2025
https://www.electrive.com/2021/11/04/bedeo-buys-in-wheel-motor-specialist-protean-from-nevs/


text:
Celebrating the Greatness of Black History Month
by Farrah Daniel, Better Bike Share Partnership Writer
Photo by Library of Congress
"The cost of liberty is less than the price of repression." — W.E.B. Du Bois
Happy Black History Month!
In 1926, historian Carter G. Woodson and the Association for the Study of Negro Life and History officially dubbed the second week of February as "Negro History Week." It took a few decades but by 1976, Black History Month was recognized across America.
A theme is designated every year, and this year is "African Americans and the Vote," which honors the 100th anniversary of the Nineteenth Amendment that granted women's suffrage as well as the 150th anniversary of the Fifteenth Amendment that gave black men the right to vote.
While this year's theme is quite fitting for the current political climate in the U.S., it's also a representation of how tireless and courageous our African-American predecessors were in their fight for equity and freedoms we have today.
To celebrate these iconic figures, the bike share industry is showing just how much fun you can have while commemorating this special anniversary. For starters, our friends at the National Association of City Transportation Officials (NACTO) created a thread on Twitter discussing the "Black inventors whose innovations laid the groundwork for the transportation systems we use today."
Let's take a look at some other events that took place this month, including some you can still attend.
Black Excellence: Past and Present
Photo courtesy of Indego
Hosted by Indego and Education Program Specialist Greg Young of the Bicycle Coalition of Greater Philadelphia (BCGP), this Black History Month group ride will be focused on highlighting historical black sites in South Philadelphia's Old Seventh Ward.
The tour includes visiting The Institute for Colored Youth, a home where young black boys can study, and the famous home of W.E.B Du Bois. BCGP's Maryem Gad shares the group ride will also visit thriving black-owned businesses in the area, like Atomic City Comics and Marsh and Mane.
"This is our third year. I'm really excited to extend our programming and just go out into the community to show them how much fun bike riding can be and how it's such an easy thing to add to your routine," says Gad.
Sign-ups are still open, so check it out if you're in the area! You can bring your own bike or use an Indego e-bike for free. Helmets will be provided.
Philly's bustling with activities this year, so check out Indego's Guide to Celebrating Black History Month to see other ways you can immerse yourself in rich African history and events before the end of the month.
Divvy's Black History Month x Cycling
Photo courtesy of Divvy and Black Girls Do Bike
In honor of Black History Month, Divvy bike share has been celebrating seven Chicago black-led cycling groups to recognize how the city's black communities encourage bicycle advocacy, education, and safety throughout Chicago.
Each week of February, Divvy will shine a spotlight on a different cycling group! Keep with these posts on <Twitter> and <Instagram>.
goDCgo's Top 10 Sites to See for Black History Month
Mary McLeod Bethune memorial. Photo courtesy of goDCgo
This year, goDCgo has outlined the top 10 sites to see in Washington D.C. this month and even includes which Capital Bike Share station is nearby to dock your bike.
A. Philip Randolph Monument – Dock your bike at Columbus Circle/Union Station.
African American Civil War Memorial Museum – Dock your bike at 10th & U St NW.
Carter G. Woodson Home & Park – Dock your bike at 8th and O St NW.
Frederick Douglass National Historic Site – Dock your bike at Pleasant St & MLK Ave SE.
Martin Luther King, Jr. Memorial – Dock your bike at Ohio Dr & West Basin Dr SW/MLK & FDR Memorials.
Mary Mcleod Bethune House – Dock your bike at 14th & Rhode Island Ave NW.
Mary Mcleod Bethune Memorial – Dock your bike at Lincoln Park/13th & East Capitol St NE.
Mayor Marion Barry Statue – Dock your bike at 14th & D St NW/Ronald Reagan Building.
National Museum for African American History & Culture – Dock your bike at 15th St & Constitution Ave NW.
Sojourner Truth Bust – Dock your bike at 1st & D St SE.
This is a perfect weekend activity! Grab a bike and (safely) hit the streets to learn more about African Americans' many contributions to civilization.
Black History Heritage Ride
Greensboro Transit Agency's Black History Heritage ride bus
Since 2017, North Carolina's Greensboro Transit Agency has released a custom-decaled bus filled with the accomplishments and contributions made by African-Americans and their advocates.
Community residents who ride the bus are provided a visual history of people, places and moments that have benefitted the Black community and the American people. This year, the bus will feature new additions: Rodeo Hall of Famer Bill Pickett, First Lady Eleanor Roosevelt and the cities of Durham, N.C. and Philadelphia.
To further commemorate this month, the Heritage Ride will also visit Greensboro middle schools and allow students to board the bus to "view the diverse images and take a brief ride as they learn about public transportation and how it has played a strategic role in civil rights locally and nationally."
It's been a busy and educational month! How have you been celebrating Black History Month?
The Better Bike Share Partnership is a JPB Foundation-funded collaboration between the City of Philadelphia, the Bicycle Coalition of Greater Philadelphia, the National Association of City Transportation Officials (NACTO) and the PeopleForBikes Foundation to build equitable and replicable bike share systems. Follow us on Facebook, Twitter and Instagram or sign up for our weekly newsletter. Story tip? Write farrah@peopleforbikes.org.


ArcelorMittal agreed last year to buy Ilva after outbidding competitors and promised to fix the problems.
Rome: Steel giant ArcelorMittal said on Friday it would present improved proposals for its planned takeover of Italy's troubled steelmaker Ilva, as the new government questioned how it came to be awarded the deal.
Ilva has been under state-supervised special administration since 2015, after magistrates said it must be cleaned up or closed. ArcelorMittal agreed last year to buy it after outbidding competitors and promised to fix the problems.
It was due to take over the business on July 1, but the newly installed Italian government delayed the handover and has pressed ArcelorMittal to come up with a much better plan for the firm.
In a statement issued on Friday, ArcelorMittal said it would unveil its new proposals in the coming days.
"We have worked to increase the environmental and jobs plan, which will improve the original commitments and strengthen the environmental performance of Ilva and its support to local communities," it said in a statement.
"Once an agreement has been reached on the basis of this project, we are confident that all the parties, including the unions, will be satisfied and will be ready to conclude the deal quickly", it added.
The group said it had already promised to invest 4.2 billion euros in Ilva, including 1.2 billion to boost productivity and 1.15 billion to curb pollution. It has also told unions it plans to reduce the workforce in Ilva's main Taranto plant to around 7,600 from 10,900 now -- a proposal the unions have rejected.
ArcelorMittal added that it had taken part in the government tender in a "clear and transparent manner".
It released its statement shortly after Deputy Prime Minister Luigi Di Maio, who also serves as industry and labour minister, questioned how the tender was awarded, calling the process a "mess".
Earlier this month, Di Maio asked Italy's anti-corruption unit to review the bidding process. "It has confirmed that our concerns about the Ilva tender procedure were well founded," the deputy prime minister told parliament on Friday.
He provided no details and gave no indication that he was considering pulling the contract from ArcelorMittal, but said he would seek an internal ministry investigation into the deal.
Di Maio's anti-establishment 5-Star Movement had promised ahead of a March national election that it would shut down Ilva if it took power because of environmental concerns.
Former industry minister Carlo Calenda, who oversaw the original tender, rejected Di Maio's criticism.
"(Di Maio) has said serious and false things in parliament," Calenda wrote on Twitter. "If you think the bid was rigged, assume your responsibility and cancel it."


An alleged shoplifter tried to shoot a person who tried to stop him, Gwinnett County police say.
A man shoplifting $1,800 worth of merchandise from Home Depot pointed a gun at bystanders trying to stop him and tried to shoot one of them, Gwinnett County police said.
The man loaded a cart with items at the store on Lawrenceville-Suwanee Road on Sept. 5 and fled toward the parking lot, police said. Multiple shoppers noticed and tried to intervene, but the man pulled out a gun and threatened to shoot. He then tried to shoot one bystander, but the gun did not fire, according to police. He also physically assaulted another bystander who was trying to stop him, police said.
The man broke away and ran to a waiting car. Both the man and his accomplice fled the scene and have not been apprehended.
This incident caused the lockdown at Georgia Gwinnett College on Sept. 5. The school was in "soft lockdown" for 30 minutes while campus public safety officers checked buildings and parking decks for the suspects.


A shady police encounter which killed four people has created a massive criticism on the Punjab police, as per the statements made by the police this encounter was associated initially with the case of kidnapping and later on the name of terrorism was adjoined with the incident.
The victims were on their way when CTD brutally fired and killed everyone in the car except their three minor children. The family of six persons was as per the children going to attend a wedding and the man driving the vehicle was one of their family friend, that friend, parents and a teenage girl was killed in the incident, whereas the two girls were saved and a minor boy was just injured by alive.
As per the CTD officials, the police encounter was conducted leading to some news received by the department regarding a terrorism act. However, as per the people who were present at the spot of incident, told the officials that killing was nothing but a brutal act on the part of the police because none of them had any weapon with them leading to make them labeled as a terrorist.
This entire incident seemed to be negligence on the part of the police officials; also it was suspected that after the killing took place the officials fled from the incidence spot leaving the injured victims behind. However, later on the same police officials concluded that the most wanted terrorist were reported to pass through this checkpoint and to keep themselves safe they were expected to pass through the check post with family. Though the CTD officials stated that the friend of the victims named as Zeeshan is a terrorists and is on a hit list from a terrorism agency.
The supervisor and the officials involved in the encounter have been suspended and the government has instructed the officials to take serious action against the officials for the killing of innocents. However, the entire attempt made by the police seems to be suitable for Zeeshan but nobody yet knows that whether the family was involved or not. However as per the latest reports, Zeeshan is involved in terrorism activities and also the vehicle he used was used for the purpose of terrorist activities.
Latest updates about #Sahiwal incident Issued by CTD Punjab.
1-Zeeshan Javed was a terrorist and his vehicle was being used by DAESH Network.He had given refuge to the network.The dangerous network was involved in several high profile terrorist activities.
Previous articleFetchr Fired Riders Today – Riders are Happy Now!


Football is a major attraction and can act as a mouthpiece, multiplier and as an example with its strong emotional link between club and fans.
The Swiss Football League is using this strength and implementing once a year an SFL theme week with each professional Swiss club. Grasshopper Club Zurich also takes its social responsibility seriously and implements club-specific activities and communication during the theme weeks.
At the beginning of October 2018, the digital National Organ Donations Register was launched. The Swiss Football League and Swisstransplant will focus on the subject of organ donations from 19 to 28 October 2018 within the framework of the SFL theme week. Grasshopper Club Zurich will also use this week to raise awareness to the important subject for our society.
You can read the news entry here.
From 21 to 29 October 2017, twelve professional Swiss clubs focussed on the theme of blind and visually impaired people's experience of top-quality football. The Grasshopper Club Zürich made use of this SFL theme week too, providing a platform for visually impaired people and experts to speak and taking on board their requirements and suggestions – all with the goal of improving accessibility for visually impaired people at league matches.


In July, Reps. Lloyd Smucker (R-Pa.) and Francis Rooney (R-Fla.) introduced "Workforce for an Expanding Economy Act" (H.R. 6536) in the House of Representatives. The legislation seeks to establish a pilot visa program to provide temporary immigrant workers for U.S. industries that have openings in occupations that do not require a college degree in accordance with economic demand. NRCA strongly supports the legislation as a key component of ongoing efforts to address the roofing industry's chronic workforce shortage.
NRCA recognizes the need for innovative initiatives to address roofing industry employers' workforce development challenges. Employers have experienced difficulty finding qualified candidates for job openings for many years despite offering competitive wages and engaging in strenuous efforts to recruit new employees. The problem results from an aging workforce and other long-term demographic trends in society. The Bureau of Labor Statistics (BLS) projects employment in roofing will grow 11 percent between 2016 and 2026, and there is widespread agreement within the roofing industry that the high level of workforce demand cannot be met by native-born workers alone. With unemployment now at its lowest level in 17 years according to BLS, the difficulties for employers are growing daily.
For many years, NRCA has been a leading advocate for immigration reform that responds to the workforce needs of businesses. In 1999, NRCA helped found the Essential Worker Immigration Coalition (EWIC), a coalition of business organizations formed to work with Congress to develop immigration policies that meet the needs of businesses. Along with other EWIC members, NRCA supports immigration reform that strengthens border security, improves workplace enforcement to combat illegal immigration, provides an avenue for workers to enter the U.S. legally in response to economic conditions and addresses the problem of the existing unauthorized workforce in a balanced manner. These reform components are critical to eliminating illegal immigration while meeting U.S. security and economic needs.


text:
Poughkeepsie Snowfall Totals & Accumulation Averages
This page pulls together information on when, how much and how often Poughkeepsie, New York has snow.
There are data and descriptions here of how many days it snows and the total amount of snowfall that the Poughkeepsie metropolitan area usually gets. There are also monthly and yearly counts of the days when the city normally has heavy snowstorms and deep snow accumulated on the ground. Plus there's information on when Poughkeepsie can expect the first and last snowfalls of the season.
All the numbers are averages, based on climate data gathered from 1981 to 2010 at the Dutchess County Airport in the town of Wappinger, located a few miles south of Poughkeepsie.
How Often it Snows in Poughkeepsie
This first table lists monthly and yearly totals for amount of snow and how many days it snows at least 0.1 inches (0.25 centimetres).
Average total snowfall and days with fresh snow in Poughkeepsie
3.1 February 8.3 21.1
1.8 March 4.4 11.2
13.5 Year 32.8 83.3
These averages don't show how much Poughkeepsie's snowfall varies from year to year.
In December, for instance, one in four years totals over 6.4 inches of snow. Another 25 percent of years receive less than 2.2 inches for the month.
Snow in February ranges from over 13.7 inches in heavy snowfall years to under 2.2 inches in light years.
When Poughkeepsie Has Its First & Last Snowfalls
Poughkeepsie's first snowfall of winter usually arrives in December, although it starts snowing as early as November in some years. The season's last snowfall can happen anytime from February to April.
Poughkeepsie is normally free of snow every year from May to October.
How Many Snowstorms Poughkeepsie Gets
Most days of snowfall in Poughkeepsie result in at least an inch of snow left on the ground. On an average of four days a year, three or more inches of snow lands in one day.
Snowstorms of over five inches a day normally occur a couple times a year. But major blizzards that dump ten inches or more in one day are rare events that don't happen every year.
Number of days per month and year on average in Poughkeepsie with a total snowfall of at least 1, 3, 5 or 10 inches
9.6 4.2 Year 2.1 0.3
How Much Snow Normally Accumulates in Poughkeepsie
For about one-third of winter days, Poughkeepsie has at least an inch of snow on the ground.
Snow mostly accumulates during January and February. Typically, on eight days in January and another six in February, the snow covering Poughkeepsie gets to ten or more inches deep.
Average total days per month and year in Poughkeepsie with snow depth of at least 1, 3, 5 or 10 inches on the ground
12.3 9.7 February 6.3 2.8
42.2 28.8 Year 19.1 8.5
NOAA National Centers for Environmental Information. 1981-2010 U.S. Climate Normals. (Data Access. FTP.)
More on Weather in New York State
New York State Snowfall Averages
Average Temperatures Throughout New York State
Precipitation Averages for Places in New York
Days of Sunshine a Year in New York State
Typical New York State Humidity Levels
USA > New York >
New York Snowfall


The Reducing debt articles provide you with information on debt reduction, credit and loans/mortgage issues. There are articles on credit card debt, debt negotiation or settlement, debt management and credit/debt laws. The purpose is to help you explore debt solutions so that you can use them to your benefit and enjoy a debt free life. Browse through the list of categories and take a look at the articles of your choice.
Debt Consolidation and Settlement: Debt Consolidation and Settlement helps you lead a debt free life. Check out debt consolidation information and articles on debt settlement.
Debt Management and Debt Negotiation Debt negotiation and management helps you get out of debt fast. Browse through the list of articles and know how to negotiate and manage debts.
Are you applying for credit cards? Get the details on credit card basics and how to manage credit card debt. Know how credit counseling can help.
Are you looking for loans, mortgage or cash advance? Take a look at the articles on cash advance, mortgage, debt consolidation loan and others.
Get information on debt reduction plans and benefits. Find out how debt counseling can help you choose the right debt relief plan.
When you are in debt, try to manage without filing bankruptcy. Check out these alternatives that can help you avoid bankruptcy.
Credit reports and scores reflect your creditworthiness. Here's a list of articles for you to know about credit report, score and credit repair.
Identity theft and credit scams are quite common in the industry. Check out how to avoid identity theft and what to do if you're a victim.
Smart shopping and budgeting are ways to control overspending. Here you'll find budgeting tips, articles on debt collection and credit laws. Learn about consumer laws and your rights while you shop for credit and manage your debts.


Over the years, Craigslist, a free classifieds-site created to connect individual buyers and sellers, has also become a powerful marketing tool for many industries, including multifamily. But recently, Craigslist implemented some rule changes to ensure the site's content stays true its original purpose of serving the needs of people — not businesses.
It's hard to blame the many multifamily properties that pushed the limits of the previous Craigslist ad posting rules by using elaborate HTML-based listings. What's not to love? They received free listings that could be uploaded as HTML templates, with plenty of images, logos, and multiple hyperlinks. Plus, these listings could potentially be seen by thousands of users. However, it was most likely the excessive use of these HTML ads that led Craigslist to develop tighter ad restrictions.
Whether or not these changes end up being positive or negative for multifamily prospects, here's an outline of the latest changes to Craigslist's posting rules and what your business should do to address them.
In an effort to keep postings consistent and level the playing field for all advertisers across industries, Craigslist has enacted new posting rules that eliminate HTML-based template listings. For example, Craigslist disabled the use of user analytic tracking codes that allow you to track specific elements in a listing, limited images to only those uploaded through its software, and removed the ability to use HTML templates, logos, image tags, and hyperlinks. As a result, the amount of information that you can place in and link to from your ads has been greatly reduced.
So, what can property managers who previously used HTML templates do to stand out from their competitors? Craigslist ads still allow you to upload up to 12 images (you must now use their tool to upload them), so it is important that you use quality images of your property, since pictures serve as the focal point of these new listings. Also, although the ability to hyperlink to other websites from a term or image has been removed, you can continue to include the full address of links with "http://" in your copy, and these will be active. Even if Craigslist eliminates these active links in the future, you will still be able to include the URL to a website or page in your content so the user can copy and paste it into a browser.
Without the help of robust HTML templates, formatting your copy for readability is now a priority. Keep it simple, and list the highlights of your property in an easy-to-read format using short paragraphs and bulleted lists. You can also still format your copy to be bold or italicized with simple HTML commands like adding <> (with the letter "b" inside) on both sides of the text that you want to be bold. Do this with important items like your property name and phone number, but don't overdo it. Less is more when it comes to font formatting.
Most importantly, don't forget to include a prominent phone number near the top of your listing, and make sure to answer the calls when they come in. Using a tracking phone number will make it easy for you to know which calls come from Craigslist.
Now that Craigslist ads are much leaner, prospects will have to do additional online research to learn about your property. The best way to get your property seen when prospective residents search is using a comprehensive approach that includes an optimized website with relevant, quality content and paid search advertising so that your property can be discovered in the search results on sites like Google and Bing. Not following this combined approach can cost you many valuable leads that could have become residents.
Start with evaluating how your business currently performs in search engine results for important terms, like property names and locations. If prospects don't find you when they search online, they'll find a competitor. Google Webmasters say the single most important thing you can do to improve organic search listing positions is to provide high-quality content on your website pages, especially your home page. Other ways to improve both your online and mobile search engine results include claiming and optimizing your Google+ Local pages and other online properties like your social media pages, local listings, and review sites.
Since many prospects will know your property name, make sure to optimize your website, local listings, and social media sites for your property name keyword. You should also use search engine advertising to bid on your property name keyword to ensure they see you, not your competitors, when they search for your property.
Because the new Craigslist postings contain less information than before, many prospects will visit your property's website to answer their remaining questions. So, it is more important than ever that your site's homepage efficiently delivers the content they most want to see – and helps them quickly navigate to the content they need. Online Marketing Institute indicates that 50% of potential sales are lost because consumers can't find the information they are looking for on a business' website.
Your website should do a great job of communicating the basics like your contact information, a call to action, your value proposition, and property amenities. These items are key to meeting a prospect's needs. The site should also be mobile-optimized and include a click-to-call option for those who are researching properties on their mobile device.
Of course, all of this effort to make your site better and easier to find is great, but it's just as important to have a plan for managing your leads once you get them. Everyone knows that leads have a very short shelf life. Once a prospect reaches out to you, the clock starts ticking. If they don't get a quick response, they'll most likely go with the property that follows up and nurtures them as they make their decision.
For those companies where Craigslist is just one of many marketing channels they use to reach prospects, these changes to the Craigslist rules are not that disruptive. However, for those that relied heavily on this online classified provider, these changes have probably had a significant impact to their lead generation efforts.
Overall, these changes illustrate an important lesson for all online marketers: don't just rely on one marketing tactic to bring you leads. A diversified marketing approach that addresses the many different ways that prospects interact in your industry is the best way to maximize your efforts – and mitigate risk.
What tips do you have for addressing the Craigslist rule changes and adjusting your property's online marketing efforts? Let us know in the comments.
Doug Jackson is a Sr. Marketing Manager at ReachLocal. He provides real estate organizations with information on how to grow their business through local online advertising, social media marketing and content marketing through the ReachLocal blog.


text:
Q: Show a link at return in script.gs I've made a form that uploads files to a folder in Google Drive, but i'd like that once the file has be uploaded to show a message including a link to click on, something like this:
return "Image uploaded, please click here: https://www.google.com" ;

How do I make that https://www.google.com becomes a link you could click on?

A: To create a web app with the HTML service, your code must include a doGet() function that tells the script how to serve the page. The function must return an HtmlOutput object. An HtmlOutput object that can be served from a script. Due to security considerations, scripts cannot directly return HTML to a browser. Instead, they must sanitize it so that it cannot perform malicious actions. You can return sanitized HTML like this:
function doGet() {
   return HtmlService.createHtmlOutput('<b>Hello, world!</b>');
 }

The HTML service can display a dialog or sidebar in Google Docs, Sheets, or Forms if your script is container-bound to the file.
A script that creates a user interface for a document, spreadsheet, or form does not need a doGet() function specifically, and you do not need to save a version of your script or deploy it. Instead, the function that opens the user interface must pass your HTML file as an HtmlOutput object to the showModalDialog()) or showSidebar() methods of the Ui object for the active document, form, or spreadsheet.
Here's a sample code of function doGet():
function doGet() {
   var app = UiApp.createApplication();
   // Creates a link to your favorite search engine.
   var anchor = app.createAnchor("a link", "http://www.google.com");
   app.add(anchor);
   return app;
 }

redpajama_set_name: RedPajamaStackExchange


text:
Куинс-бульвар () — одна из главных улиц Куинса, района Нью-Йорка, США, часть федеральной трассы Нью-Йорка № 25 (). Улица открыта в начале XX века. Начинается улица от моста Куинсборо, Лонг-Айленд, и идёт до центра Куинса. Это одна из длиннейших улиц Куинса.

История
Куинс-бульвар был построен в начале XX века с целью соединения нового моста Куинсборо с центральным Куинсом и обеспечения доступного выезда из Манхэттена. Для этого была осуществлена обширная программа по расширению и соединению уже существовавших улиц, таких как Томсон-авеню и Хоффман-бульвар, остатки которых существуют до сих пор. Одновременно с этим в 1920—1930-х годах велись работы по строительству линии Куинс-бульвара — тоннеля метрополитена под проезжей частью бульвара; в настоящее время по линии курсируют маршруты , ,  и  Нью-Йоркского метрополитена.

Планы по превращению Куинс-бульвара в автостраду, подобную Ван-Уайк, не осуществились.

Значительная ширина полотна, сильное движение и наличие огромного количества коммерческих предприятий вдоль бульвара сделали Куинс-бульвар одной из наиболее опасных улиц во всём Нью-Йорке. Его стали называть «Бульвар смерти» или «Бульвар переломанных костей». С 1993 по 2000 год на бульваре погибало в среднем 10 пешеходов в год, не считая бесчисленных увечий. После этого были приняты меры по повышению безопасности для пешеходов, в частности:
 изменена конфигурация проезжей части — за счёт уменьшения числа полос автомобильного движения, увеличена ширина тротуаров и разделительных полос, добавлены велодорожки;
 изменён цикл светофоров, чтобы оставлять пешеходам больше времени для пересечения бульвара (до изменений пожилые люди физически не могли перейти бульвар за одну фазу светофора);
 улучшена заметность пешеходных «зебр»;
 добавлены ограждения, чтобы вынудить пешеходов переходить бульвар по «зебрам»;
 поставлены специальные знаки на особенно опасных перекрёстках: «Здесь при переходе погиб пешеход»;
 понижено ограничение скорости дорожного движения — с 35 миль в час (56 км/ч) до 30 миль в час (48 км/ч), а начиная с 2014 г. до 25 миль в час (40 км/ч);
 изменено расположение «карманов» для поворота, чтобы вынудить автомобилистов снижать скорость перед поворотом.
Принятые меры снизили травматичность; в 2014—2017 гг. при пересечении Куинс-бульвара не погиб ни один пешеход.

Примечания

Ссылки

 Queens Boulevard Expressway proposals

Улицы Куинса


text:
package de.qyotta.axonframework.eventstore.domain;

import org.axonframework.commandhandling.annotation.TargetAggregateIdentifier;
import org.axonframework.serializer.Revision;

import lombok.Value;

@Value
@Revision("1")
public class CreateTestAggregate {
   @TargetAggregateIdentifier
   private String aggregateId;
}


text:
è una serie televisiva anime del 1990, parte del franchise di Lamune di cui fanno parte anche le serie OAV NG Knight Lamune & 40 EX, NG Knight Lamune & 40 DX, VS Knight Lamune & 40 Fresh e la serie televisiva VS Knight Lamune & 40 Fire. La "NG" del titolo sta per "New Generation". La serie è stata prodotta da Starchild Records e trasmesso da TV Tokyo dal 6 aprile 1990 al 4 gennaio 1991.

"Lamune" è il nome di una popolare bevanda gasata giapponese al limone, e la maggior parte dei nomi dei personaggi nella serie sono basati su bevande, come Miruku (Milk, latte). Il nome "Sccasher" è invece basato sul nome della bevanda concorrente del Lamune.

Trama
La storia principale della serie ruota intorno ad un giovane di nome Baba Lamune che viene risucchiato nel videogioco "King Sccasher." Lamune è un lontano parente dell'eroe "Lamuness", e nel programma è destinato a salvare il mondo dal malvagio Abruham.

Colonna sonora
 Tema di apertura
  di Takeshi Kusao (ep. 1-28)
  di Takeshi Kusao (ep. 29-38)
 Tema di chiusura
  di Chisa Yokoyama (ep. 1-28)
  di Naoko Matsui, Sakiko Tamagawa e Chisa Yokoyama (ep. 29-38)

Episodi

Collegamenti esterni


text:
Call to Minimize Drone Impact on Wildlife
Jarrod Hodgson
May 30 09:41 2016 by Editor	Print This Article
(SPACE WAR) – University of Adelaide environmental researchers have called for a 'code of best practice' in using unmanned aerial vehicles (drones) for wildlife monitoring and protection, and other biological field research.
The researchers, from the University's Unmanned Research Aircraft Facility (URAF) or Adelaide Drone Hub, say that drones are a useful tool for field research and their use is growing in popularity.
But, they warn in a report published in the Cell Press journal Current Biology, this new technology could also have undesirable and unforeseen impacts on wildlife and there is currently little understanding of the risks.
The report authors are Jarrod Hodgson, researcher and PhD candidate in the URAF, and Associate Professor Lian Pin Koh, Director of URAF and a global pioneer in the use of drones for conservation as founding director of the not-for-profit organisation Conservation Drones.org.
"Even though an animal might not appear to be disturbed, it could be quite stressed – for example, a bird may choose to remain near a UAV even when stressed because it is incubating an egg or protecting its hatchling," says Mr Hodgson.
"It is likely that animal responses vary depending on a variety of factors including the species, environmental and historical context, as well as the type of UAV and its method of operation."
Mr Hodgson says that considering the growing popularity of UAVs as a tool among field biologists, and the potential for negative impacts on wildlife, steps need to be taken to minimise and manage the risk.
"A code of best practice will allow informed use of UAVs, while mitigating or alleviating potential wildlife disturbance," he says.
Mr Hodgson and Associate Professor Koh provide a suite of recommendations as the basis for such a code of best practice for using drones in the vicinity of animals and/or for the purpose of animal research.
They consider this code should be a first and guiding step in the development of species specific protocols to reduce potential disturbance to wildlife.
dronesUAVURAFWildlife Impact
DronesEcoEnvironmentalIMPACTLivingRecent NewsWildlife Preservation
Elliptical Galaxies Not Formed by Merging
Peek Into the Weird and Wonderful Age of AI (Yes, There's a Chatbot)
Battling Cancer With Light


Driving from Milan towards the Alps, at the mouth of the Aosta valley you pass the tiny hamlet of Arnad, where there is a sign welcoming you to the Pays du Lardo (land of lardo). This is enough to make the health conscious wary (although new research indicates we should be more worried about carbohydrates and processed vegetable oils rather than animal fats). Headquartered in Arnad is Bertolin, an important producer of Valle d'Aosta Lard d'Arnad DOP (translucent sheets of prized pork fat flavoured with herbs, garlic, spices and sea salt and traditionally cured in chestnut or oak casks called doils).
Lard d'Arnad DOP has been produced since the 16th century using the fat from the shoulders and backs of local pigs. Pigs are central to life in Arnad. Of its 1,200 inhabitants, most of the families are raising pigs to make this prized lardo. Arnad even holds a lardo festival the last Sunday of every August.
Bertolin began as a butcher shop in 1957 and has expanded to a large producer of Lard d'Arnad DOP run by three generations of the Bertolin family. Bertolin begin making lardo using locally reared pigs which weigh at least 180 kilos and are at least 9 months old. The fat is removed within 48 hours of slaughter and layered with sea salt, garlic, bay leaf, rosemary, sage, achillea (an Alpine herb), cinnamon, juniper, nutmeg, cloves and brine. It is aged for a minimum of 3 months in the doils. It can be cured for up to 15 months but then white wine is added to the brine. The result is sweet and translucent lardo which melts in your mouth. It is sold in chunks ready to be brought home, the skin removed, thinly sliced and served with rye bread and honey.
The lardo which does not meet stringent standards to be certified as DOP is sold after aging for 1 month to be used for cooking.
Bertolin also produce many other types of salumi. At their factory you can see the entire production from meat carving to the making of lardo and other salumi as well as buy and taste their products. Other local products they produce include teteun/ tetin (cow's udders pressed with salt, sage, bay leaf, rosemary, juniper berries and wine, dried and boiled to be served with sauces of garlic, parsley and olive oil and fig or raspberry jam, raisins or Martin Sec in syrup), carne salata (Valdostan beef macerated with salt and aromatics), coppa al ginepro (a family recipe for salami using pork neck and shoulder flavoured with juniper berries for 45 days and aged for at least 5 months to be eaten sliced), Reinhold Speck (a local ham from the Walser people in Gressoney valley cured with mountain herbs and smoked with juniper and beech woods and aged for at least 4 months), boudin (pork or beef blood sausage with potato, beets, lardo, garlic, cinnamon, nutmeg, sage, rosemary and juniper; to be eaten raw when fresh or boiled, fried or broiled when aged and served with potatoes) and mocetta (made with different types of meat but is traditionally chamois cured with salt, pepper, garlic cloves, thyme, sage, bay leaf, rosemary and savory in chestnut doils and then aged for up to four months; to be eaten raw).
Next door to Bertolin is Dinus Donavit, also owned by the Bertolin family, which produces cold pressed walnut oil (olio di noce). Olio di noce is only produced in Valle d'Aosta where it is cold stone ground and filtered with low acidity.
If you do stop in Arnad, don't miss an excellent bakery, Panificio Carignano, located across the round about from the church. They bake traditional local rye bread (pane nero and pan segale) made with rye flour which can be flavoured with walnuts, dried figs, chestnuts and/or raisins. The perfect accompaniment to Lard d'Arnad DOP.
Place the pork skin and Lard'Arnad DOP in the vegetable broth and bring it to a boil until they are soft. Remove them with a slotted spoon and cut them into tiny cubes. Meanwhile boil the beans.
Prepare a tomato sauce by finely chopping the onion. Cook the onion in a little olive oil and the white wine. Peel and chop the tomatoes and add to the onion with a few leaves of basil.
Let the tomato sauce cook for a few minutes and then add the lardo, pork skin, vegetable broth and 3/4 of the boiled and drained borlotti beans.
Let the mixture cook for a few minutes. Puree the mixture and then add the remaining 1/4 of the borlotti beans. Add salt and pepper to taste and serve boiling hot.
Please note: I have permission to print the photos taken by Bertolin but please do not use them without Bertolin's permission.
« It finally feels like Spring!